Mission Control Dashboard Plugin

linkPlugin settings

name

Mission Control Dashboard

Information

description

Multifunctional, highly configurable account dashboard


icon

dashboard


setting

Tag to apply to planning notes

Default is "planning/quarterly"

setting

Console logging

Default is false, only for debugging

setting

debug_console

Default is false, only for debugging

instructions

This plugin allows you to get a high-level glimpse of what's going on in your world. Here is the help page on how to install it.



We call the different components "widgets," and these widgets can be reordered by clicking "Layout" in the top-left, or by clicking for two seconds on the title bar of a widget. You can add a background image under "Settings."

Prerequisites: Ensure you have created at least one Task Domain to use the dashboard. All notes and tasks are picked from the selected domain. Task Domain setup instructions.

Current widgets offered by the Amplenote Dashboard include:

1. Quarterly planning. The starting point for the "Dreamtask" widget, and for your day in general. The dashboard ensures that you keep what matters top-of-mind. By default, it allows the quarterly plan to be augmented with a monthly plan. If you make it 2-tall, it also has room to present your weekly plan.
2. Victory Value. How much is getting done each day, and how do you feel while doing it? Hover on a day to remember the specific tasks you finished.
3. Dreamtask. Use your preferred LLM to synthesize your quarterly/monthly/weekly plan with the tasks in your task domain. Get 2-4 tasks recommended each day, with a record of past recommendations to ensure that you get new tasks every day of the week.
4. Day Sketcher. Sketch out what to focus on today in a tab-navigable per-hour breakdown.
5. Revisit candidates. Notes with tasks that have been languishing. When you get distracted from a project, this widget helps you re-engage with long-term ideas.
6. Mood tracker. Display your daily mood ratings in either "cycle" or "wave" form. Even though nobody wants to hear about your crappy day, Amplenote Dashboard wants to help you feel "seen" by letting you leave a record of each day's highs & lows, as recommended by the experts.
7. Peak hours. Which hours were most productive during the currently selected month: both for originating ideas that ended up being high in Victory Value, or for completing said ideas?
8. Calendar. The control center for the date-based modules, allows you to see which dates have events scheduled along with specifying which date you want to see featured in the rest of the dashboard.
9. Task Agenda. What's on the docket in the coming days? Uses the Task Domain selected atop the dashboard, combined with the date selected in Calendar.
10. Inspiration quotes. Take a wild guess.
11. Quick actions. Jump to your daily jot, calendar, or a random note 🎲

Drop a comment if there's another widget you'd like to see added?



linkUpdates

August 3, 2026

Add Note Peek module for rendering portion of a note in a dashboard component

Add additional Quick Action options: cycle background, leave feedback

Update Proposed Tasks & Goal Coach to use improved, shared context building

When focusing a module (clicking its icon) on desktop, grow its size when the component allows it

July 18, 2026

Add Energy Delta per Habit component

Optimize mobile to load components on scroll (vs slowly loading everything all at once)

Standardize font to Roboto

June 27, 2026

Add Shared Notes component

Add Proposed Agenda component

Fix "Layout" popup not fitting within mobile screen

May 10, 2026

Add Task Retirement Center to suggest tasks that could be dismissed, and get progressively rewarded for acting on old tasks

Add widget layout profiles to allow users to customize which widgets are shown for different personas

Fix Goal Coach consistently taking 10s+ to render

Implement "Component Spotlight": Click the icon of a component to have it swoop into center stage (as means to savor the day's background image)

April 29, 2026.

Intersperse events & tasks in agenda

Fix events not showing on mobile Dashboard

Use data cached note for "Recent Notes" component to expedite rendering across devices

Add link to schedule Dream Tasks

April 16, 2026. Incorporate calendar events & Ample Agent Pro

Calendar events now shown in Agenda

Calendar events now shown in Day Sketch

Dream Task uses Ample Agent Pro to generate suggested tasks, when available

Update global "Settings" to allow specifying "Week" and "Hour" format, using defaults that accord with the user's locale. The date/time settings chosen are now applied to all components that renders dates & times (currently Agenda, Calendar, Dream Task, Day Sketch, and Peak Hours)

Update Day Sketch component to allow up/down arrows to switch between hours of day

April 5, 2026. Dream Task v2

Add tests for suggester with all the AI providers

More descriptive Dream Task error messages

March 24, 2026

Fixed background image uploads not being processed.

Set up default background to be used when none has been uploaded

Don't show hidden tasks in agenda

Ensure recommended tasks are synced between devices

Mood rating notes now recorded to the same data store as in-app mood ratings


linkCodes

(() => {
// lib/dashboard/layout-profiles.js
var WIDGET_REGISTRY = [
{
widgetId: "layout-picker",
name: "Layout Picker",
description: "One-click presets that rearrange your entire dashboard into a curated profile",
icon: "\u{1F5C2}\uFE0F",
defaultGridWidthSize: 2,
maxHorizontalTiles: 2,
maxVerticalTiles: 2
},
{
widgetId: "planning",
name: "Quarterly Planning",
description: "Plan and track your quarterly goals and priorities",
icon: "\u{1F4CB}",
defaultGridWidthSize: 2,
maxHorizontalTiles: 4,
maxVerticalTiles: 2
},
{
widgetId: "victory-value",
name: "Victory Value",
description: "Celebrate wins and track high-value task completions",
icon: "\u{1F3C6}",
defaultGridWidthSize: 2,
maxHorizontalTiles: 4,
maxVerticalTiles: 2
},
{
widgetId: "dream-task",
name: "Goal Coach",
description: "Get task suggestions that blend quarterly/monthly goals with day-of-week preferences",
icon: "\u{1F52E}",
defaultGridWidthSize: 2,
maxHorizontalTiles: 4,
maxVerticalTiles: 2,
visibleSubtitle: "What if you did it today?"
},
{
widgetId: "day-sketch",
name: "Day Sketcher",
description: "Notebook-paper day planner with hour-by-hour entries saved to a note",
icon: "\u{1F5D2}\uFE0F",
defaultGridWidthSize: 2,
maxHorizontalTiles: 4,
maxVerticalTiles: 2
},
{
widgetId: "agenda",
name: "Task Agenda",
description: "View and manage your prioritized task list",
icon: "\u{1F4CC}",
defaultGridWidthSize: 2,
maxHorizontalTiles: 4,
maxVerticalTiles: 2
},
{
widgetId: "proposed-agenda",
name: "Proposed Agenda",
description: "AI-proposed hour-by-hour schedule built from your recent tasks and quarterly plan",
icon: "\u{1F5D3}\uFE0F",
defaultGridWidthSize: 2,
introducedAt: "2026-06-27",
maxHorizontalTiles: 4,
maxVerticalTiles: 2
},
{
widgetId: "quotes",
name: "Inspiration Quotes",
description: "Rotating inspirational quotes to keep you motivated",
icon: "\u{1F4A1}",
defaultGridWidthSize: 2,
maxHorizontalTiles: 4,
maxVerticalTiles: 2
},
{
widgetId: "graveyard",
name: "Task Retirement Center",
description: "Surface neglected tasks and retire them to an archived note",
icon: "\u{1F475}\uFE0F",
defaultGridWidthSize: 2,
introducedAt: "2026-05-09",
maxHorizontalTiles: 2,
maxVerticalTiles: 2
},
{
widgetId: "recent-notes",
name: "Revisit Candidate",
description: "Notes with open tasks that have not had a new task in over a week",
icon: "\u{1F4DD}",
defaultGridWidthSize: 1,
maxHorizontalTiles: 4,
maxVerticalTiles: 2
},
{
widgetId: "shared-notes",
name: "Shared Notes",
description: "Shared notes recently updated by a collaborator after your own changes",
icon: "\u{1F91D}",
defaultGridWidthSize: 2,
introducedAt: "2026-06-26",
maxHorizontalTiles: 4,
maxVerticalTiles: 2
},
{
widgetId: "note-peek",
name: "Note Peek",
description: "Display the contents of any note you choose, clipped to the widget's size",
icon: "\u{1F4D8}",
defaultGridWidthSize: 2,
introducedAt: "2026-08-03",
maxHorizontalTiles: 4,
maxVerticalTiles: 2
},
{
widgetId: "mood",
name: "Energy (Mood) Tracker",
visibleTitle: "How goes it?",
description: "Log your daily energy level and visualize trends over time",
icon: "\u{1F3AD}",
defaultGridWidthSize: 1,
maxHorizontalTiles: 2,
maxVerticalTiles: 2
},
{
widgetId: "calendar",
name: "Calendar",
description: "See upcoming events and appointments at a glance",
icon: "\u{1F4C5}",
defaultGridWidthSize: 1,
maxHorizontalTiles: 2,
maxVerticalTiles: 2
},
{
widgetId: "quick-actions",
name: "Quick Actions",
description: "Shortcuts for your most frequently used dashboard actions",
icon: "\u26A1",
defaultGridWidthSize: 1,
maxHorizontalTiles: 2,
maxVerticalTiles: 2
},
{
widgetId: "peak-hours",
name: "Peak Hours",
description: "Hourly distribution of task creation and completion activity",
icon: "\u23F0",
defaultGridWidthSize: 2,
maxHorizontalTiles: 4,
maxVerticalTiles: 2
},
{
widgetId: "energy-per-habit",
name: "Energy Per Habit",
visibleTitle: "Energy delta per habit",
description: "Correlate each recurring-task habit with how you felt: average energy on days you do it vs. don't",
icon: "\u{1F50B}",
defaultGridWidthSize: 2,
introducedAt: "2026-07-17",
maxHorizontalTiles: 4,
maxVerticalTiles: 2
},
{
widgetId: "debug-console",
name: "Debug Console",
description: "Scrollable log viewer showing all logIfEnabled messages (developer tool)",
icon: "\u{1F41B}",
defaultGridWidthSize: 2,
maxHorizontalTiles: 4,
maxVerticalTiles: 2,
debugOnly: true
}
];
 
// lib/constants/settings.js
var SETTING_KEYS = {
BACKGROUND_IMAGE_URL: "Background Image URL",
BACKGROUND_IMAGE_MODE: "Background Image Mode",
CONSOLE_LOGGING: "Console logging",
DASHBOARD_COMPONENTS: "dashboard_elements",
DEBUG_CONSOLE: "debug_console",
LLM_API_KEY_ANTHROPIC: "Anthropic API Key",
LLM_API_KEY_GEMINI: "Gemini API Key",
LLM_API_KEY_GROK: "Grok API Key",
LLM_API_KEY_OPENAI: "OpenAI API Key",
LLM_PROVIDER_MODEL: "LLM Provider",
FIRST_INSTALLED_AT: "dashboard_first_installed_at",
RENDER_BREADCRUMB: "dashboard_render_breadcrumb",
SELECTED_LAYOUT_PROFILE: "dashboard_selected_layout_profile",
TASK_DOMAINS: "dashboard_task_domains",
PLANNING_NOTE_TAG: "Tag to apply to planning notes",
PROPOSED_AGENDA_PRIORITY: "dashboard_proposed_agenda_priority",
PROPOSED_AGENDA_LLM: "dashboard_proposed_agenda_llm"
};
var API_KEY_FROM_PROVIDER = {
anthropic: SETTING_KEYS.LLM_API_KEY_ANTHROPIC,
gemini: SETTING_KEYS.LLM_API_KEY_GEMINI,
grok: SETTING_KEYS.LLM_API_KEY_GROK,
openai: SETTING_KEYS.LLM_API_KEY_OPENAI
};
function widgetConfigKey(widgetId) {
return `dashboard_${widgetId}_config`;
}
var DASHBOARD_COMPONENTS = SETTING_KEYS.DASHBOARD_COMPONENTS;
var TASK_DOMAIN_STALE_MS = 24 * 60 * 60 * 1e3;
var DEFAULT_DASHBOARD_COMPONENTS = WIDGET_REGISTRY.filter((w) => !w.debugOnly).map((w) => ({
widgetId: w.widgetId,
gridWidthSize: w.defaultGridWidthSize,
gridHeightSize: 1,
settings: {}
}));
 
// lib/constants/quarters.js
var FULL_MONTH_NAMES = [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
];
function getCurrentQuarter() {
const now = /* @__PURE__ */ new Date();
const year = now.getFullYear();
const month = now.getMonth();
const quarter = Math.floor(month / 3) + 1;
return { year, quarter, label: `Q${quarter} ${year}` };
}
function getNextQuarter() {
let { year, quarter } = getCurrentQuarter();
quarter++;
if (quarter > 4) {
quarter = 1;
year++;
}
return { year, quarter, label: `Q${quarter} ${year}` };
}
 
// lib/util/log.js
var _enabled = false;
var _entryId = 0;
var MAX_LOG_BUFFER = 200;
var _logBuffer = [];
var _listeners = /* @__PURE__ */ new Set();
function setLoggingEnabled(settingValue) {
if (typeof settingValue === "boolean") {
_enabled = settingValue;
return;
}
const normalized = String(settingValue || "").trim().toLowerCase();
_enabled = ["true", "yes", "1", "on", "enabled"].includes(normalized);
}
function logIfEnabled(...args) {
if (_enabled) {
console.log(...args);
const entry = { id: ++_entryId, ts: Date.now(), args };
_logBuffer.push(entry);
if (_logBuffer.length > MAX_LOG_BUFFER)
_logBuffer.shift();
setTimeout(() => _listeners.forEach((fn) => fn(entry)), 0);
}
}
 
// lib/util/all-notes-tasks.js
var MAX_ALL_NOTES_TO_SCAN = 250;
function fetchDomainOrAllNotesTasks(app, domainUuid, { includeDone = false, maxNotes = MAX_ALL_NOTES_TO_SCAN } = {}) {
if (domainUuid) {
return app.getTaskDomainTasks(domainUuid);
} else {
return _allNotesTasks(app, includeDone, maxNotes);
}
}
async function _allNotesTasks(app, includeDone, maxNotes) {
const seen = /* @__PURE__ */ new Set();
const noteHandles = [];
for await (const handle of await app.filterNotes({ group: "taskLists" }, "changed")) {
if (!handle?.uuid || seen.has(handle.uuid))
continue;
seen.add(handle.uuid);
noteHandles.push(handle);
if (noteHandles.length >= maxNotes)
break;
}
logIfEnabled(`[all-notes-tasks] No task domain \u2014 scanning ${noteHandles.length} task-list notes for tasks`);
const settled = await Promise.allSettled(noteHandles.map((handle) => app.getNoteTasks({ uuid: handle.uuid }, { includeDone })));
const allTasks = [];
for (let index = 0; index < settled.length; index += 1) {
const outcome = settled[index];
const handle = noteHandles[index];
if (!outcome || outcome.status === "rejected") {
logIfEnabled("[all-notes-tasks] getNoteTasks failed:", outcome?.reason);
continue;
}
const tasks = Array.isArray(outcome.value) ? outcome.value : [];
for (const task of tasks) {
if (!task?.uuid)
continue;
allTasks.push({
...task,
noteName: task.noteName || task.noteTitle || task.note?.name || handle.name || null,
noteUUID: task.noteUUID || handle.uuid
});
}
}
logIfEnabled(`[all-notes-tasks] Gathered ${allTasks.length} tasks across all notes (no task domain)`);
return allTasks;
}
 
// lib/util/date-utility.js
function dateFromDateInput(dateInput, { throwOnInvalid = true } = {}) {
const fail = () => {
if (!throwOnInvalid)
return null;
throw new TypeError(`Invalid date input: ${String(dateInput)}`);
};
if (dateInput == null || dateInput === "")
return fail();
if (dateInput instanceof Date) {
const date = new Date(dateInput);
return Number.isNaN(date.getTime()) ? fail() : date;
}
if (typeof dateInput === "number") {
if (!Number.isFinite(dateInput))
return fail();
const millis = Math.abs(dateInput) < 1e10 ? dateInput * 1e3 : dateInput;
const parsed2 = new Date(millis);
return Number.isNaN(parsed2.getTime()) ? fail() : parsed2;
}
if (typeof dateInput === "string") {
const trimmed = dateInput.trim();
if (!trimmed)
return fail();
if (/^\d{4}-\d{2}-\d{2}$/.test(dateInput)) {
const [year, month, day] = dateInput.split("-").map(Number);
return new Date(year, month - 1, day);
}
const numericValue = Number(trimmed);
if (!Number.isNaN(numericValue))
return dateFromDateInput(numericValue, { throwOnInvalid });
const parsed2 = new Date(trimmed);
return Number.isNaN(parsed2.getTime()) ? fail() : parsed2;
}
const parsed = new Date(dateInput);
return Number.isNaN(parsed.getTime()) ? fail() : parsed;
}
function weekStartFromDateInput(dateInput, weekStartDay = 1) {
const date = dateFromDateInput(dateInput);
const dayOfWeek = date.getDay();
const delta = (dayOfWeek - weekStartDay + 7) % 7;
const weekStart = new Date(date.getFullYear(), date.getMonth(), date.getDate() - delta);
weekStart.setHours(0, 0, 0, 0);
return weekStart;
}
function weekEndFromDateInput(dateInput, weekStartDay = 1) {
const weekStart = weekStartFromDateInput(dateInput, weekStartDay);
const weekEnd = new Date(weekStart);
weekEnd.setDate(weekEnd.getDate() + 6);
weekEnd.setHours(23, 59, 59, 999);
return weekEnd;
}
 
// lib/util/note-handles.js
async function arrayFromFilterNotesResult(result) {
const resolved = await result;
if (Array.isArray(resolved))
return resolved;
if (resolved && typeof resolved[Symbol.asyncIterator] === "function") {
const notes = [];
for await (const note of resolved)
notes.push(note);
return notes;
}
return [];
}
 
// lib/data-service.js
async function fetchDashboardData(app) {
setLoggingEnabled(app.settings[SETTING_KEYS.CONSOLE_LOGGING]);
const t0 = Date.now();
logIfEnabled("[fetchDashboardData] starting \u2014 launching domain + mood/plans/settings in parallel");
const now = /* @__PURE__ */ new Date();
const weekStart = weekStartFromDateInput(now);
const weekEnd = weekEndFromDateInput(now);
const twoWeeksAgoUnixSeconds = Math.floor(Date.now() / 1e3) - 60 * 60 * 24 * 14;
const domainPromise = _resolveTaskDomains(app).catch((err) => {
logIfEnabled("[fetchDashboardData] _resolveTaskDomains failed:", err);
return { domains: [], selectedDomainUuid: null };
});
const tasksPromise = domainPromise.then((info) => {
logIfEnabled(`[fetchDashboardData] domain resolved in ${Date.now() - t0}ms, uuid=${info.selectedDomainUuid} \u2014 fetching tasks`);
return _fetchTasksForDomain(app, info.selectedDomainUuid);
});
const [taskDomainInfo, moodRatings, quarterlyPlans, settings, domainTasks] = await Promise.all([
domainPromise,
_safeMoodRatings(app, twoWeeksAgoUnixSeconds),
_findQuarterlyPlans(app),
_readDashboardSettings(app),
tasksPromise
]);
logIfEnabled(`[fetchDashboardData] all resolved in ${Date.now() - t0}ms \u2014 ${domainTasks.length} tasks, ${moodRatings?.length ?? 0} mood ratings`);
return {
activeTaskDomain: taskDomainInfo.selectedDomainUuid,
completedThisWeek: _filterCompletedInRange(domainTasks, weekStart, weekEnd),
context: { noteUUID: app.context?.noteUUID || null, pluginUUID: app.context?.pluginUUID || null },
currentDate: now.toISOString(),
dailyVictoryValues: _calculateDailyVictoryValues(domainTasks, weekStart),
moodRatings,
pluginNoteUUID: app.context?.noteUUID || null,
quarterlyPlans,
settings,
tasks: domainTasks,
todayTasks: _filterTodayTasks(domainTasks, now),
taskDomains: taskDomainInfo.domains,
weeklyVictoryValue: _calculateWeeklyVictoryValue(domainTasks, weekStart, weekEnd)
};
}
function _logTaskDomainsResponse(prefix, response) {
const isArray = Array.isArray(response);
const count = isArray ? response.length : 0;
const type = response === null ? "null" : Array.isArray(response) ? "array" : typeof response;
const keys = response && typeof response === "object" && !isArray ? Object.keys(response) : null;
let serialized;
try {
serialized = JSON.stringify(response);
} catch {
serialized = String(response);
}
logIfEnabled(
`${prefix} getTaskDomains() returned ${count} domains (type=${type}${keys ? `, keys=[${keys.join(",")}]` : ""})`,
{ raw: response, serialized }
);
}
async function _resolveTaskDomains(app) {
const raw = app.settings[SETTING_KEYS.TASK_DOMAINS];
let stored = {};
try {
stored = raw ? JSON.parse(raw) : {};
} catch {
stored = {};
}
const isStale = !stored.lastRetrieved || Date.now() - stored.lastRetrieved > TASK_DOMAIN_STALE_MS;
const hasDomains = Array.isArray(stored.domains) && stored.domains.length > 0;
if (!hasDomains || isStale) {
logIfEnabled(`[_resolveTaskDomains] cache ${hasDomains ? "stale" : "empty"} \u2014 calling getTaskDomains()`);
const t0 = Date.now();
const freshDomains = await app.getTaskDomains();
_logTaskDomainsResponse(`[_resolveTaskDomains] (${Date.now() - t0}ms)`, freshDomains);
stored.domains = (Array.isArray(freshDomains) ? freshDomains : []).filter((d) => d && d.uuid).map((d) => ({ name: d.name, uuid: d.uuid }));
stored.lastRetrieved = Date.now();
const selectedStillExists = stored.selectedDomainUuid && stored.domains.some((d) => d.uuid === stored.selectedDomainUuid);
if (!selectedStillExists) {
stored.selectedDomainUuid = _pickDefaultDomain(stored.domains);
}
await app.setSetting(SETTING_KEYS.TASK_DOMAINS, JSON.stringify(stored));
}
if (!stored.selectedDomainUuid && stored.domains.length > 0) {
stored.selectedDomainUuid = _pickDefaultDomain(stored.domains);
await app.setSetting(SETTING_KEYS.TASK_DOMAINS, JSON.stringify(stored));
}
return stored;
}
function _pickDefaultDomain(domains) {
if (!domains || domains.length === 0)
return null;
const work = domains.find((d) => d.name === "Work");
return work ? work.uuid : domains[0].uuid;
}
async function _fetchTasksForDomain(app, domainUuid, includeDone = false) {
const t0 = Date.now();
const list = await fetchDomainOrAllNotesTasks(app, domainUuid, { includeDone });
logIfEnabled(`[_fetchTasksForDomain] ${domainUuid ? `getTaskDomainTasks(${domainUuid})` : "all-notes fallback"} returned ${list.length} tasks in ${Date.now() - t0}ms`);
return list;
}
function _filterTodayTasks(tasks, now) {
const dayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime();
const dayEnd = dayStart + 864e5;
return tasks.filter(
(t) => !t.completedAt && !t.dismissedAt && _millisFromTimestamp(t.startAt) && _millisFromTimestamp(t.startAt) >= dayStart && _millisFromTimestamp(t.startAt) < dayEnd
).sort((a, b) => (_millisFromTimestamp(a.startAt) || 0) - (_millisFromTimestamp(b.startAt) || 0));
}
function _filterCompletedInRange(tasks, start, end) {
const startMs = start.getTime();
const endMs = end.getTime();
return tasks.filter(
(t) => _millisFromTimestamp(t.completedAt) && _millisFromTimestamp(t.completedAt) >= startMs && _millisFromTimestamp(t.completedAt) <= endMs
);
}
function _calculateWeeklyVictoryValue(tasks, weekStart, weekEnd) {
return _filterCompletedInRange(tasks, weekStart, weekEnd).reduce((sum, t) => sum + (t.victoryValue || 0), 0);
}
function _calculateDailyVictoryValues(tasks, weekStart) {
const days = Array.from({ length: 7 }, (_, i) => {
const dayStart = new Date(weekStart);
dayStart.setDate(dayStart.getDate() + i);
const dayEnd = new Date(dayStart);
dayEnd.setDate(dayEnd.getDate() + 1);
const dayTasks = tasks.filter(
(t) => _millisFromTimestamp(t.completedAt) && _millisFromTimestamp(t.completedAt) >= dayStart.getTime() && _millisFromTimestamp(t.completedAt) < dayEnd.getTime()
);
return {
day: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"][i],
date: dayStart.toISOString(),
value: dayTasks.reduce((sum, t) => sum + (t.victoryValue || 0), 0),
taskCount: dayTasks.length
};
});
return days;
}
async function _safeMoodRatings(app, fromUnixSeconds) {
const moodRatings = await app.getMoodRatings(fromUnixSeconds);
logIfEnabled("Mood ratings", moodRatings, "from", fromUnixSeconds);
return moodRatings;
}
async function _findQuarterlyPlans(app) {
const t0 = Date.now();
const current = getCurrentQuarter();
const next = getNextQuarter();
logIfEnabled(`[_findQuarterlyPlans] querying: "${current.label} Plan", "${next.label} Plan"`);
const [currentPlans, nextPlans] = await Promise.all([
arrayFromFilterNotesResult(app.filterNotes({ query: `${current.label} Plan` })),
arrayFromFilterNotesResult(app.filterNotes({ query: `${next.label} Plan` }))
]);
logIfEnabled(`[_findQuarterlyPlans] filterNotes results \u2014 current:`, currentPlans, `next:`, nextPlans);
const currentNoteUUID = currentPlans.find((n) => n.name === `${current.label} Plan`)?.uuid;
const nextNoteUUID = nextPlans.find((n) => n.name === `${next.label} Plan`)?.uuid;
logIfEnabled(`[_findQuarterlyPlans] resolved UUIDs \u2014 current: ${currentNoteUUID}, next: ${nextNoteUUID}`);
const currentMonths = _quarterMonthNames(current.quarter);
const nextMonths = _quarterMonthNames(next.quarter);
const [currentHasAll, nextHasAll] = await Promise.all([
currentNoteUUID ? _hasAllMonthSections(app, currentNoteUUID, currentMonths) : Promise.resolve(false),
nextNoteUUID ? _hasAllMonthSections(app, nextNoteUUID, nextMonths) : Promise.resolve(false)
]);
logIfEnabled(`[_findQuarterlyPlans] hasAllMonthlyDetails \u2014 current: ${currentHasAll}, next: ${nextHasAll} (${Date.now() - t0}ms total)`);
return {
current: { ...current, noteUUID: currentNoteUUID, hasAllMonthlyDetails: currentHasAll },
next: { ...next, noteUUID: nextNoteUUID, hasAllMonthlyDetails: nextHasAll }
};
}
function _quarterMonthNames(quarter) {
const start = (quarter - 1) * 3;
return [0, 1, 2].map((i) => FULL_MONTH_NAMES[(start + i) % 12]);
}
async function _hasAllMonthSections(app, noteUUID, monthNames) {
try {
const sections = await app.getNoteSections({ uuid: noteUUID });
return monthNames.every(
(name) => sections.some((s) => s.heading?.text?.trim().toLowerCase() === name.toLowerCase())
);
} catch {
return false;
}
}
async function _readDashboardSettings(app) {
const keys = [
widgetConfigKey("victory-value"),
widgetConfigKey("calendar"),
widgetConfigKey("quotes"),
widgetConfigKey("mood"),
widgetConfigKey("note-peek"),
widgetConfigKey("recent-notes")
];
const settings = {};
for (const key of keys) {
try {
const val = app.settings[key];
settings[key] = val ? JSON.parse(val) : null;
} catch {
settings[key] = null;
}
}
settings[SETTING_KEYS.BACKGROUND_IMAGE_URL] = app.settings[SETTING_KEYS.BACKGROUND_IMAGE_URL] || "";
settings[SETTING_KEYS.BACKGROUND_IMAGE_MODE] = app.settings[SETTING_KEYS.BACKGROUND_IMAGE_MODE] || "cover";
settings[SETTING_KEYS.CONSOLE_LOGGING] = app.settings[SETTING_KEYS.CONSOLE_LOGGING] || "";
settings[SETTING_KEYS.LLM_PROVIDER_MODEL] = app.settings[SETTING_KEYS.LLM_PROVIDER_MODEL] || "";
settings[SETTING_KEYS.LLM_API_KEY_ANTHROPIC] = app.settings[SETTING_KEYS.LLM_API_KEY_ANTHROPIC] || "";
settings[SETTING_KEYS.LLM_API_KEY_GEMINI] = app.settings[SETTING_KEYS.LLM_API_KEY_GEMINI] || "";
settings[SETTING_KEYS.LLM_API_KEY_GROK] = app.settings[SETTING_KEYS.LLM_API_KEY_GROK] || "";
settings[SETTING_KEYS.LLM_API_KEY_OPENAI] = app.settings[SETTING_KEYS.LLM_API_KEY_OPENAI] || "";
let componentLayout = null;
try {
componentLayout = app.settings[SETTING_KEYS.DASHBOARD_COMPONENTS] ? JSON.parse(app.settings[SETTING_KEYS.DASHBOARD_COMPONENTS]) : null;
} catch {
componentLayout = null;
}
if (!Array.isArray(componentLayout) || componentLayout.length === 0) {
componentLayout = DEFAULT_DASHBOARD_COMPONENTS.map((component) => ({ ...component }));
await app.setSetting(SETTING_KEYS.DASHBOARD_COMPONENTS, JSON.stringify(componentLayout));
}
settings[SETTING_KEYS.DASHBOARD_COMPONENTS] = componentLayout;
return settings;
}
function _millisFromTimestamp(timestamp) {
if (timestamp == null)
return null;
if (typeof timestamp !== "number") {
const parsed = Number(timestamp);
if (!Number.isFinite(parsed))
return null;
return parsed < 1e10 ? parsed * 1e3 : parsed;
}
return timestamp < 1e10 ? timestamp * 1e3 : timestamp;
}
 
// client-bundle:client-bundle
var clientBase64 = "KCgpPT57dmFyIFVTPU9iamVjdC5jcmVhdGU7dmFyIFhoPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgRlM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt2YXIgelM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7dmFyIFdTPU9iamVjdC5nZXRQcm90b3R5cGVPZixCUz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBDcj0oZSx0KT0+KCk9Pih0fHxlKCh0PXtleHBvcnRzOnt9fSkuZXhwb3J0cyx0KSx0LmV4cG9ydHMpO3ZhciBIUz0oZSx0LG4scik9PntpZih0JiZ0eXBlb2YgdD09Im9iamVjdCJ8fHR5cGVvZiB0PT0iZnVuY3Rpb24iKWZvcihsZXQgbyBvZiB6Uyh0KSkhQlMuY2FsbChlLG8pJiZvIT09biYmWGgoZSxvLHtnZXQ6KCk9PnRbb10sZW51bWVyYWJsZTohKHI9RlModCxvKSl8fHIuZW51bWVyYWJsZX0pO3JldHVybiBlfTt2YXIgUD0oZSx0LG4pPT4obj1lIT1udWxsP1VTKFdTKGUpKTp7fSxIUyh0fHwhZXx8IWUuX19lc01vZHVsZT9YaChuLCJkZWZhdWx0Iix7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwfSk6bixlKSk7dmFyIHNnPUNyKGtlPT57InVzZSBzdHJpY3QiO3ZhciBraT1TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50IiksS1M9U3ltYm9sLmZvcigicmVhY3QucG9ydGFsIiksR1M9U3ltYm9sLmZvcigicmVhY3QuZnJhZ21lbnQiKSxWUz1TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpLGpTPVN5bWJvbC5mb3IoInJlYWN0LnByb2ZpbGVyIiksWVM9U3ltYm9sLmZvcigicmVhY3QucHJvdmlkZXIiKSxxUz1TeW1ib2wuZm9yKCJyZWFjdC5jb250ZXh0IiksWFM9U3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKSwkUz1TeW1ib2wuZm9yKCJyZWFjdC5zdXNwZW5zZSIpLEpTPVN5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKSxRUz1TeW1ib2wuZm9yKCJyZWFjdC5sYXp5IiksJGg9U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIFpTKGUpe3JldHVybiBlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiP251bGw6KGU9JGgmJmVbJGhdfHxlWyJAQGl0ZXJhdG9yIl0sdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpudWxsKX12YXIgWmg9e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LGVnPU9iamVjdC5hc3NpZ24sdGc9e307ZnVuY3Rpb24geWEoZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9dGcsdGhpcy51cGRhdGVyPW58fFpofXlhLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9O3lhLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiBlIT0ib2JqZWN0IiYmdHlwZW9mIGUhPSJmdW5jdGlvbiImJmUhPW51bGwpdGhyb3cgRXJyb3IoInNldFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLiIpO3RoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxlLHQsInNldFN0YXRlIil9O3lhLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsZSwiZm9yY2VVcGRhdGUiKX07ZnVuY3Rpb24gbmcoKXt9bmcucHJvdG90eXBlPXlhLnByb3RvdHlwZTtmdW5jdGlvbiAkYyhlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz10Zyx0aGlzLnVwZGF0ZXI9bnx8Wmh9dmFyIEpjPSRjLnByb3RvdHlwZT1uZXcgbmc7SmMuY29uc3RydWN0b3I9JGM7ZWcoSmMseWEucHJvdG90eXBlKTtKYy5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgSmg9QXJyYXkuaXNBcnJheSxyZz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFFjPXtjdXJyZW50Om51bGx9LG9nPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gYWcoZSx0LG4pe3ZhciByLG89e30sYT1udWxsLGk9bnVsbDtpZih0IT1udWxsKWZvcihyIGluIHQucmVmIT09dm9pZCAwJiYoaT10LnJlZiksdC5rZXkhPT12b2lkIDAmJihhPSIiK3Qua2V5KSx0KXJnLmNhbGwodCxyKSYmIW9nLmhhc093blByb3BlcnR5KHIpJiYob1tyXT10W3JdKTt2YXIgcz1hcmd1bWVudHMubGVuZ3RoLTI7aWYocz09PTEpby5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxzKXtmb3IodmFyIGw9QXJyYXkocyksZD0wO2Q8cztkKyspbFtkXT1hcmd1bWVudHNbZCsyXTtvLmNoaWxkcmVuPWx9aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKHIgaW4gcz1lLmRlZmF1bHRQcm9wcyxzKW9bcl09PT12b2lkIDAmJihvW3JdPXNbcl0pO3JldHVybnskJHR5cGVvZjpraSx0eXBlOmUsa2V5OmEscmVmOmkscHJvcHM6byxfb3duZXI6UWMuY3VycmVudH19ZnVuY3Rpb24gZUUoZSx0KXtyZXR1cm57JCR0eXBlb2Y6a2ksdHlwZTplLnR5cGUsa2V5OnQscmVmOmUucmVmLHByb3BzOmUucHJvcHMsX293bmVyOmUuX293bmVyfX1mdW5jdGlvbiBaYyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJvYmplY3QiJiZlIT09bnVsbCYmZS4kJHR5cGVvZj09PWtpfWZ1bmN0aW9uIHRFKGUpe3ZhciB0PXsiPSI6Ij0wIiwiOiI6Ij0yIn07cmV0dXJuIiQiK2UucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKG4pe3JldHVybiB0W25dfSl9dmFyIFFoPS9cLysvZztmdW5jdGlvbiBYYyhlLHQpe3JldHVybiB0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsJiZlLmtleSE9bnVsbD90RSgiIitlLmtleSk6dC50b1N0cmluZygzNil9ZnVuY3Rpb24gY2woZSx0LG4scixvKXt2YXIgYT10eXBlb2YgZTsoYT09PSJ1bmRlZmluZWQifHxhPT09ImJvb2xlYW4iKSYmKGU9bnVsbCk7dmFyIGk9ITE7aWYoZT09PW51bGwpaT0hMDtlbHNlIHN3aXRjaChhKXtjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmk9ITA7YnJlYWs7Y2FzZSJvYmplY3QiOnN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIGtpOmNhc2UgS1M6aT0hMH19aWYoaSlyZXR1cm4gaT1lLG89byhpKSxlPXI9PT0iIj8iLiIrWGMoaSwwKTpyLEpoKG8pPyhuPSIiLGUhPW51bGwmJihuPWUucmVwbGFjZShRaCwiJCYvIikrIi8iKSxjbChvLHQsbiwiIixmdW5jdGlvbihkKXtyZXR1cm4gZH0pKTpvIT1udWxsJiYoWmMobykmJihvPWVFKG8sbisoIW8ua2V5fHxpJiZpLmtleT09PW8ua2V5PyIiOigiIitvLmtleSkucmVwbGFjZShRaCwiJCYvIikrIi8iKStlKSksdC5wdXNoKG8pKSwxO2lmKGk9MCxyPXI9PT0iIj8iLiI6cisiOiIsSmgoZSkpZm9yKHZhciBzPTA7czxlLmxlbmd0aDtzKyspe2E9ZVtzXTt2YXIgbD1yK1hjKGEscyk7aSs9Y2woYSx0LG4sbCxvKX1lbHNlIGlmKGw9WlMoZSksdHlwZW9mIGw9PSJmdW5jdGlvbiIpZm9yKGU9bC5jYWxsKGUpLHM9MDshKGE9ZS5uZXh0KCkpLmRvbmU7KWE9YS52YWx1ZSxsPXIrWGMoYSxzKyspLGkrPWNsKGEsdCxuLGwsbyk7ZWxzZSBpZihhPT09Im9iamVjdCIpdGhyb3cgdD1TdHJpbmcoZSksRXJyb3IoIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogIisodD09PSJbb2JqZWN0IE9iamVjdF0iPyJvYmplY3Qgd2l0aCBrZXlzIHsiK09iamVjdC5rZXlzKGUpLmpvaW4oIiwgIikrIn0iOnQpKyIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuIik7cmV0dXJuIGl9ZnVuY3Rpb24gZGwoZSx0LG4pe2lmKGU9PW51bGwpcmV0dXJuIGU7dmFyIHI9W10sbz0wO3JldHVybiBjbChlLHIsIiIsIiIsZnVuY3Rpb24oYSl7cmV0dXJuIHQuY2FsbChuLGEsbysrKX0pLHJ9ZnVuY3Rpb24gbkUoZSl7aWYoZS5fc3RhdHVzPT09LTEpe3ZhciB0PWUuX3Jlc3VsdDt0PXQoKSx0LnRoZW4oZnVuY3Rpb24obil7KGUuX3N0YXR1cz09PTB8fGUuX3N0YXR1cz09PS0xKSYmKGUuX3N0YXR1cz0xLGUuX3Jlc3VsdD1uKX0sZnVuY3Rpb24obil7KGUuX3N0YXR1cz09PTB8fGUuX3N0YXR1cz09PS0xKSYmKGUuX3N0YXR1cz0yLGUuX3Jlc3VsdD1uKX0pLGUuX3N0YXR1cz09PS0xJiYoZS5fc3RhdHVzPTAsZS5fcmVzdWx0PXQpfWlmKGUuX3N0YXR1cz09PTEpcmV0dXJuIGUuX3Jlc3VsdC5kZWZhdWx0O3Rocm93IGUuX3Jlc3VsdH12YXIgWXQ9e2N1cnJlbnQ6bnVsbH0sdWw9e3RyYW5zaXRpb246bnVsbH0sckU9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6WXQsUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6dWwsUmVhY3RDdXJyZW50T3duZXI6UWN9O2Z1bmN0aW9uIGlnKCl7dGhyb3cgRXJyb3IoImFjdCguLi4pIGlzIG5vdCBzdXBwb3J0ZWQgaW4gcHJvZHVjdGlvbiBidWlsZHMgb2YgUmVhY3QuIil9a2UuQ2hpbGRyZW49e21hcDpkbCxmb3JFYWNoOmZ1bmN0aW9uKGUsdCxuKXtkbChlLGZ1bmN0aW9uKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG4pfSxjb3VudDpmdW5jdGlvbihlKXt2YXIgdD0wO3JldHVybiBkbChlLGZ1bmN0aW9uKCl7dCsrfSksdH0sdG9BcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gZGwoZSxmdW5jdGlvbih0KXtyZXR1cm4gdH0pfHxbXX0sb25seTpmdW5jdGlvbihlKXtpZighWmMoZSkpdGhyb3cgRXJyb3IoIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLiIpO3JldHVybiBlfX07a2UuQ29tcG9uZW50PXlhO2tlLkZyYWdtZW50PUdTO2tlLlByb2ZpbGVyPWpTO2tlLlB1cmVDb21wb25lbnQ9JGM7a2UuU3RyaWN0TW9kZT1WUztrZS5TdXNwZW5zZT0kUztrZS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD1yRTtrZS5hY3Q9aWc7a2UuY2xvbmVFbGVtZW50PWZ1bmN0aW9uKGUsdCxuKXtpZihlPT1udWxsKXRocm93IEVycm9yKCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCAiK2UrIi4iKTt2YXIgcj1lZyh7fSxlLnByb3BzKSxvPWUua2V5LGE9ZS5yZWYsaT1lLl9vd25lcjtpZih0IT1udWxsKXtpZih0LnJlZiE9PXZvaWQgMCYmKGE9dC5yZWYsaT1RYy5jdXJyZW50KSx0LmtleSE9PXZvaWQgMCYmKG89IiIrdC5rZXkpLGUudHlwZSYmZS50eXBlLmRlZmF1bHRQcm9wcyl2YXIgcz1lLnR5cGUuZGVmYXVsdFByb3BzO2ZvcihsIGluIHQpcmcuY2FsbCh0LGwpJiYhb2cuaGFzT3duUHJvcGVydHkobCkmJihyW2xdPXRbbF09PT12b2lkIDAmJnMhPT12b2lkIDA/c1tsXTp0W2xdKX12YXIgbD1hcmd1bWVudHMubGVuZ3RoLTI7aWYobD09PTEpci5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxsKXtzPUFycmF5KGwpO2Zvcih2YXIgZD0wO2Q8bDtkKyspc1tkXT1hcmd1bWVudHNbZCsyXTtyLmNoaWxkcmVuPXN9cmV0dXJueyQkdHlwZW9mOmtpLHR5cGU6ZS50eXBlLGtleTpvLHJlZjphLHByb3BzOnIsX293bmVyOml9fTtrZS5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBlPXskJHR5cGVvZjpxUyxfY3VycmVudFZhbHVlOmUsX2N1cnJlbnRWYWx1ZTI6ZSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGwsX2RlZmF1bHRWYWx1ZTpudWxsLF9nbG9iYWxOYW1lOm51bGx9LGUuUHJvdmlkZXI9eyQkdHlwZW9mOllTLF9jb250ZXh0OmV9LGUuQ29uc3VtZXI9ZX07a2UuY3JlYXRlRWxlbWVudD1hZztrZS5jcmVhdGVGYWN0b3J5PWZ1bmN0aW9uKGUpe3ZhciB0PWFnLmJpbmQobnVsbCxlKTtyZXR1cm4gdC50eXBlPWUsdH07a2UuY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19O2tlLmZvcndhcmRSZWY9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOlhTLHJlbmRlcjplfX07a2UuaXNWYWxpZEVsZW1lbnQ9WmM7a2UubGF6eT1mdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6UVMsX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDplfSxfaW5pdDpuRX19O2tlLm1lbW89ZnVuY3Rpb24oZSx0KXtyZXR1cm57JCR0eXBlb2Y6SlMsdHlwZTplLGNvbXBhcmU6dD09PXZvaWQgMD9udWxsOnR9fTtrZS5zdGFydFRyYW5zaXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dWwudHJhbnNpdGlvbjt1bC50cmFuc2l0aW9uPXt9O3RyeXtlKCl9ZmluYWxseXt1bC50cmFuc2l0aW9uPXR9fTtrZS51bnN0YWJsZV9hY3Q9aWc7a2UudXNlQ2FsbGJhY2s9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gWXQuY3VycmVudC51c2VDYWxsYmFjayhlLHQpfTtrZS51c2VDb250ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBZdC5jdXJyZW50LnVzZUNvbnRleHQoZSl9O2tlLnVzZURlYnVnVmFsdWU9ZnVuY3Rpb24oKXt9O2tlLnVzZURlZmVycmVkVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFl0LmN1cnJlbnQudXNlRGVmZXJyZWRWYWx1ZShlKX07a2UudXNlRWZmZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFl0LmN1cnJlbnQudXNlRWZmZWN0KGUsdCl9O2tlLnVzZUlkPWZ1bmN0aW9uKCl7cmV0dXJuIFl0LmN1cnJlbnQudXNlSWQoKX07a2UudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFl0LmN1cnJlbnQudXNlSW1wZXJhdGl2ZUhhbmRsZShlLHQsbil9O2tlLnVzZUluc2VydGlvbkVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBZdC5jdXJyZW50LnVzZUluc2VydGlvbkVmZmVjdChlLHQpfTtrZS51c2VMYXlvdXRFZmZlY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gWXQuY3VycmVudC51c2VMYXlvdXRFZmZlY3QoZSx0KX07a2UudXNlTWVtbz1mdW5jdGlvbihlLHQpe3JldHVybiBZdC5jdXJyZW50LnVzZU1lbW8oZSx0KX07a2UudXNlUmVkdWNlcj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFl0LmN1cnJlbnQudXNlUmVkdWNlcihlLHQsbil9O2tlLnVzZVJlZj1mdW5jdGlvbihlKXtyZXR1cm4gWXQuY3VycmVudC51c2VSZWYoZSl9O2tlLnVzZVN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBZdC5jdXJyZW50LnVzZVN0YXRlKGUpfTtrZS51c2VTeW5jRXh0ZXJuYWxTdG9yZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFl0LmN1cnJlbnQudXNlU3luY0V4dGVybmFsU3RvcmUoZSx0LG4pfTtrZS51c2VUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIFl0LmN1cnJlbnQudXNlVHJhbnNpdGlvbigpfTtrZS52ZXJzaW9uPSIxOC4zLjEifSk7dmFyIGZlPUNyKChxXyxsZyk9PnsidXNlIHN0cmljdCI7bGcuZXhwb3J0cz1zZygpfSk7dmFyIHZnPUNyKGplPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHJ1KGUsdCl7dmFyIG49ZS5sZW5ndGg7ZS5wdXNoKHQpO2U6Zm9yKDswPG47KXt2YXIgcj1uLTE+Pj4xLG89ZVtyXTtpZigwPHBsKG8sdCkpZVtyXT10LGVbbl09byxuPXI7ZWxzZSBicmVhayBlfX1mdW5jdGlvbiBWbihlKXtyZXR1cm4gZS5sZW5ndGg9PT0wP251bGw6ZVswXX1mdW5jdGlvbiBtbChlKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIG51bGw7dmFyIHQ9ZVswXSxuPWUucG9wKCk7aWYobiE9PXQpe2VbMF09bjtlOmZvcih2YXIgcj0wLG89ZS5sZW5ndGgsYT1vPj4+MTtyPGE7KXt2YXIgaT0yKihyKzEpLTEscz1lW2ldLGw9aSsxLGQ9ZVtsXTtpZigwPnBsKHMsbikpbDxvJiYwPnBsKGQscyk/KGVbcl09ZCxlW2xdPW4scj1sKTooZVtyXT1zLGVbaV09bixyPWkpO2Vsc2UgaWYobDxvJiYwPnBsKGQsbikpZVtyXT1kLGVbbF09bixyPWw7ZWxzZSBicmVhayBlfX1yZXR1cm4gdH1mdW5jdGlvbiBwbChlLHQpe3ZhciBuPWUuc29ydEluZGV4LXQuc29ydEluZGV4O3JldHVybiBuIT09MD9uOmUuaWQtdC5pZH10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZ0eXBlb2YgcGVyZm9ybWFuY2Uubm93PT0iZnVuY3Rpb24iPyhkZz1wZXJmb3JtYW5jZSxqZS51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gZGcubm93KCl9KTooZXU9RGF0ZSxjZz1ldS5ub3coKSxqZS51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gZXUubm93KCktY2d9KTt2YXIgZGcsZXUsY2csbXI9W10sdG89W10sb0U9MSxObj1udWxsLEZ0PTMsaGw9ITEsTG89ITEsU2k9ITEsZmc9dHlwZW9mIHNldFRpbWVvdXQ9PSJmdW5jdGlvbiI/c2V0VGltZW91dDpudWxsLG1nPXR5cGVvZiBjbGVhclRpbWVvdXQ9PSJmdW5jdGlvbiI/Y2xlYXJUaW1lb3V0Om51bGwsdWc9dHlwZW9mIHNldEltbWVkaWF0ZTwidSI/c2V0SW1tZWRpYXRlOm51bGw7dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5zY2hlZHVsaW5nIT09dm9pZCAwJiZuYXZpZ2F0b3Iuc2NoZWR1bGluZy5pc0lucHV0UGVuZGluZyE9PXZvaWQgMCYmbmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmcuYmluZChuYXZpZ2F0b3Iuc2NoZWR1bGluZyk7ZnVuY3Rpb24gb3UoZSl7Zm9yKHZhciB0PVZuKHRvKTt0IT09bnVsbDspe2lmKHQuY2FsbGJhY2s9PT1udWxsKW1sKHRvKTtlbHNlIGlmKHQuc3RhcnRUaW1lPD1lKW1sKHRvKSx0LnNvcnRJbmRleD10LmV4cGlyYXRpb25UaW1lLHJ1KG1yLHQpO2Vsc2UgYnJlYWs7dD1Wbih0byl9fWZ1bmN0aW9uIGF1KGUpe2lmKFNpPSExLG91KGUpLCFMbylpZihWbihtcikhPT1udWxsKUxvPSEwLHN1KGl1KTtlbHNle3ZhciB0PVZuKHRvKTt0IT09bnVsbCYmbHUoYXUsdC5zdGFydFRpbWUtZSl9fWZ1bmN0aW9uIGl1KGUsdCl7TG89ITEsU2kmJihTaT0hMSxtZyhFaSksRWk9LTEpLGhsPSEwO3ZhciBuPUZ0O3RyeXtmb3Iob3UodCksTm49Vm4obXIpO05uIT09bnVsbCYmKCEoTm4uZXhwaXJhdGlvblRpbWU+dCl8fGUmJiF5ZygpKTspe3ZhciByPU5uLmNhbGxiYWNrO2lmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXtObi5jYWxsYmFjaz1udWxsLEZ0PU5uLnByaW9yaXR5TGV2ZWw7dmFyIG89cihObi5leHBpcmF0aW9uVGltZTw9dCk7dD1qZS51bnN0YWJsZV9ub3coKSx0eXBlb2Ygbz09ImZ1bmN0aW9uIj9Obi5jYWxsYmFjaz1vOk5uPT09Vm4obXIpJiZtbChtciksb3UodCl9ZWxzZSBtbChtcik7Tm49Vm4obXIpfWlmKE5uIT09bnVsbCl2YXIgYT0hMDtlbHNle3ZhciBpPVZuKHRvKTtpIT09bnVsbCYmbHUoYXUsaS5zdGFydFRpbWUtdCksYT0hMX1yZXR1cm4gYX1maW5hbGx5e05uPW51bGwsRnQ9bixobD0hMX19dmFyIGdsPSExLGZsPW51bGwsRWk9LTEsaGc9NSxnZz0tMTtmdW5jdGlvbiB5Zygpe3JldHVybiEoamUudW5zdGFibGVfbm93KCktZ2c8aGcpfWZ1bmN0aW9uIHR1KCl7aWYoZmwhPT1udWxsKXt2YXIgZT1qZS51bnN0YWJsZV9ub3coKTtnZz1lO3ZhciB0PSEwO3RyeXt0PWZsKCEwLGUpfWZpbmFsbHl7dD94aSgpOihnbD0hMSxmbD1udWxsKX19ZWxzZSBnbD0hMX12YXIgeGk7dHlwZW9mIHVnPT0iZnVuY3Rpb24iP3hpPWZ1bmN0aW9uKCl7dWcodHUpfTp0eXBlb2YgTWVzc2FnZUNoYW5uZWw8InUiPyhudT1uZXcgTWVzc2FnZUNoYW5uZWwscGc9bnUucG9ydDIsbnUucG9ydDEub25tZXNzYWdlPXR1LHhpPWZ1bmN0aW9uKCl7cGcucG9zdE1lc3NhZ2UobnVsbCl9KTp4aT1mdW5jdGlvbigpe2ZnKHR1LDApfTt2YXIgbnUscGc7ZnVuY3Rpb24gc3UoZSl7Zmw9ZSxnbHx8KGdsPSEwLHhpKCkpfWZ1bmN0aW9uIGx1KGUsdCl7RWk9ZmcoZnVuY3Rpb24oKXtlKGplLnVuc3RhYmxlX25vdygpKX0sdCl9amUudW5zdGFibGVfSWRsZVByaW9yaXR5PTU7amUudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk9MTtqZS51bnN0YWJsZV9Mb3dQcmlvcml0eT00O2plLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5PTM7amUudW5zdGFibGVfUHJvZmlsaW5nPW51bGw7amUudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk9MjtqZS51bnN0YWJsZV9jYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihlKXtlLmNhbGxiYWNrPW51bGx9O2plLnVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uPWZ1bmN0aW9uKCl7TG98fGhsfHwoTG89ITAsc3UoaXUpKX07amUudW5zdGFibGVfZm9yY2VGcmFtZVJhdGU9ZnVuY3Rpb24oZSl7MD5lfHwxMjU8ZT9jb25zb2xlLmVycm9yKCJmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWQiKTpoZz0wPGU/TWF0aC5mbG9vcigxZTMvZSk6NX07amUudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gRnR9O2plLnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIFZuKG1yKX07amUudW5zdGFibGVfbmV4dD1mdW5jdGlvbihlKXtzd2l0Y2goRnQpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOnZhciB0PTM7YnJlYWs7ZGVmYXVsdDp0PUZ0fXZhciBuPUZ0O0Z0PXQ7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtGdD1ufX07amUudW5zdGFibGVfcGF1c2VFeGVjdXRpb249ZnVuY3Rpb24oKXt9O2plLnVuc3RhYmxlX3JlcXVlc3RQYWludD1mdW5jdGlvbigpe307amUudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5PWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6YnJlYWs7ZGVmYXVsdDplPTN9dmFyIG49RnQ7RnQ9ZTt0cnl7cmV0dXJuIHQoKX1maW5hbGx5e0Z0PW59fTtqZS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1qZS51bnN0YWJsZV9ub3coKTtzd2l0Y2godHlwZW9mIG49PSJvYmplY3QiJiZuIT09bnVsbD8obj1uLmRlbGF5LG49dHlwZW9mIG49PSJudW1iZXIiJiYwPG4/cituOnIpOm49cixlKXtjYXNlIDE6dmFyIG89LTE7YnJlYWs7Y2FzZSAyOm89MjUwO2JyZWFrO2Nhc2UgNTpvPTEwNzM3NDE4MjM7YnJlYWs7Y2FzZSA0Om89MWU0O2JyZWFrO2RlZmF1bHQ6bz01ZTN9cmV0dXJuIG89bitvLGU9e2lkOm9FKyssY2FsbGJhY2s6dCxwcmlvcml0eUxldmVsOmUsc3RhcnRUaW1lOm4sZXhwaXJhdGlvblRpbWU6byxzb3J0SW5kZXg6LTF9LG4+cj8oZS5zb3J0SW5kZXg9bixydSh0byxlKSxWbihtcik9PT1udWxsJiZlPT09Vm4odG8pJiYoU2k/KG1nKEVpKSxFaT0tMSk6U2k9ITAsbHUoYXUsbi1yKSkpOihlLnNvcnRJbmRleD1vLHJ1KG1yLGUpLExvfHxobHx8KExvPSEwLHN1KGl1KSkpLGV9O2plLnVuc3RhYmxlX3Nob3VsZFlpZWxkPXlnO2plLnVuc3RhYmxlX3dyYXBDYWxsYmFjaz1mdW5jdGlvbihlKXt2YXIgdD1GdDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1GdDtGdD10O3RyeXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtGdD1ufX19fSk7dmFyIHdnPUNyKCgkXyxiZyk9PnsidXNlIHN0cmljdCI7YmcuZXhwb3J0cz12ZygpfSk7dmFyIEViPUNyKGtuPT57InVzZSBzdHJpY3QiO3ZhciBhRT1mZSgpLGJuPXdnKCk7ZnVuY3Rpb24gVShlKXtmb3IodmFyIHQ9Imh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PSIrZSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0Kz0iJmFyZ3NbXT0iK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbbl0pO3JldHVybiJNaW5pZmllZCBSZWFjdCBlcnJvciAjIitlKyI7IHZpc2l0ICIrdCsiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4ifXZhciBEeT1uZXcgU2V0LGppPXt9O2Z1bmN0aW9uIHFvKGUsdCl7RmEoZSx0KSxGYShlKyJDYXB0dXJlIix0KX1mdW5jdGlvbiBGYShlLHQpe2ZvcihqaVtlXT10LGU9MDtlPHQubGVuZ3RoO2UrKylEeS5hZGQodFtlXSl9dmFyIExyPSEodHlwZW9mIHdpbmRvdz4idSJ8fHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ+InUifHx0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ+InUiKSxPdT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGlFPS9eWzpBLVpfYS16XHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZcdTAwRjgtXHUwMkZGXHUwMzcwLVx1MDM3RFx1MDM3Ri1cdTFGRkZcdTIwMEMtXHUyMDBEXHUyMDcwLVx1MjE4Rlx1MkMwMC1cdTJGRUZcdTMwMDEtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRkRdWzpBLVpfYS16XHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZcdTAwRjgtXHUwMkZGXHUwMzcwLVx1MDM3RFx1MDM3Ri1cdTFGRkZcdTIwMEMtXHUyMDBEXHUyMDcwLVx1MjE4Rlx1MkMwMC1cdTJGRUZcdTMwMDEtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRkRcLS4wLTlcdTAwQjdcdTAzMDAtXHUwMzZGXHUyMDNGLVx1MjA0MF0qJC8sa2c9e30seGc9e307ZnVuY3Rpb24gc0UoZSl7cmV0dXJuIE91LmNhbGwoeGcsZSk/ITA6T3UuY2FsbChrZyxlKT8hMTppRS50ZXN0KGUpP3hnW2VdPSEwOihrZ1tlXT0hMCwhMSl9ZnVuY3Rpb24gbEUoZSx0LG4scil7aWYobiE9PW51bGwmJm4udHlwZT09PTApcmV0dXJuITE7c3dpdGNoKHR5cGVvZiB0KXtjYXNlImZ1bmN0aW9uIjpjYXNlInN5bWJvbCI6cmV0dXJuITA7Y2FzZSJib29sZWFuIjpyZXR1cm4gcj8hMTpuIT09bnVsbD8hbi5hY2NlcHRzQm9vbGVhbnM6KGU9ZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNSksZSE9PSJkYXRhLSImJmUhPT0iYXJpYS0iKTtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBkRShlLHQsbixyKXtpZih0PT09bnVsbHx8dHlwZW9mIHQ+InUifHxsRShlLHQsbixyKSlyZXR1cm4hMDtpZihyKXJldHVybiExO2lmKG4hPT1udWxsKXN3aXRjaChuLnR5cGUpe2Nhc2UgMzpyZXR1cm4hdDtjYXNlIDQ6cmV0dXJuIHQ9PT0hMTtjYXNlIDU6cmV0dXJuIGlzTmFOKHQpO2Nhc2UgNjpyZXR1cm4gaXNOYU4odCl8fDE+dH1yZXR1cm4hMX1mdW5jdGlvbiAkdChlLHQsbixyLG8sYSxpKXt0aGlzLmFjY2VwdHNCb29sZWFucz10PT09Mnx8dD09PTN8fHQ9PT00LHRoaXMuYXR0cmlidXRlTmFtZT1yLHRoaXMuYXR0cmlidXRlTmFtZXNwYWNlPW8sdGhpcy5tdXN0VXNlUHJvcGVydHk9bix0aGlzLnByb3BlcnR5TmFtZT1lLHRoaXMudHlwZT10LHRoaXMuc2FuaXRpemVVUkw9YSx0aGlzLnJlbW92ZUVtcHR5U3RyaW5nPWl9dmFyIFJ0PXt9OyJjaGlsZHJlbiBkYW5nZXJvdXNseVNldElubmVySFRNTCBkZWZhdWx0VmFsdWUgZGVmYXVsdENoZWNrZWQgaW5uZXJIVE1MIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgc3R5bGUiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXtSdFtlXT1uZXcgJHQoZSwwLCExLGUsbnVsbCwhMSwhMSl9KTtbWyJhY2NlcHRDaGFyc2V0IiwiYWNjZXB0LWNoYXJzZXQiXSxbImNsYXNzTmFtZSIsImNsYXNzIl0sWyJodG1sRm9yIiwiZm9yIl0sWyJodHRwRXF1aXYiLCJodHRwLWVxdWl2Il1dLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTtSdFt0XT1uZXcgJHQodCwxLCExLGVbMV0sbnVsbCwhMSwhMSl9KTtbImNvbnRlbnRFZGl0YWJsZSIsImRyYWdnYWJsZSIsInNwZWxsQ2hlY2siLCJ2YWx1ZSJdLmZvckVhY2goZnVuY3Rpb24oZSl7UnRbZV09bmV3ICR0KGUsMiwhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTtbImF1dG9SZXZlcnNlIiwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCIsImZvY3VzYWJsZSIsInByZXNlcnZlQWxwaGEiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1J0W2VdPW5ldyAkdChlLDIsITEsZSxudWxsLCExLCExKX0pOyJhbGxvd0Z1bGxTY3JlZW4gYXN5bmMgYXV0b0ZvY3VzIGF1dG9QbGF5IGNvbnRyb2xzIGRlZmF1bHQgZGVmZXIgZGlzYWJsZWQgZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUgZGlzYWJsZVJlbW90ZVBsYXliYWNrIGZvcm1Ob1ZhbGlkYXRlIGhpZGRlbiBsb29wIG5vTW9kdWxlIG5vVmFsaWRhdGUgb3BlbiBwbGF5c0lubGluZSByZWFkT25seSByZXF1aXJlZCByZXZlcnNlZCBzY29wZWQgc2VhbWxlc3MgaXRlbVNjb3BlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7UnRbZV09bmV3ICR0KGUsMywhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTtbImNoZWNrZWQiLCJtdWx0aXBsZSIsIm11dGVkIiwic2VsZWN0ZWQiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1J0W2VdPW5ldyAkdChlLDMsITAsZSxudWxsLCExLCExKX0pO1siY2FwdHVyZSIsImRvd25sb2FkIl0uZm9yRWFjaChmdW5jdGlvbihlKXtSdFtlXT1uZXcgJHQoZSw0LCExLGUsbnVsbCwhMSwhMSl9KTtbImNvbHMiLCJyb3dzIiwic2l6ZSIsInNwYW4iXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1J0W2VdPW5ldyAkdChlLDYsITEsZSxudWxsLCExLCExKX0pO1sicm93U3BhbiIsInN0YXJ0Il0uZm9yRWFjaChmdW5jdGlvbihlKXtSdFtlXT1uZXcgJHQoZSw1LCExLGUudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO3ZhciBTcD0vW1wtOl0oW2Etel0pL2c7ZnVuY3Rpb24gRXAoZSl7cmV0dXJuIGVbMV0udG9VcHBlckNhc2UoKX0iYWNjZW50LWhlaWdodCBhbGlnbm1lbnQtYmFzZWxpbmUgYXJhYmljLWZvcm0gYmFzZWxpbmUtc2hpZnQgY2FwLWhlaWdodCBjbGlwLXBhdGggY2xpcC1ydWxlIGNvbG9yLWludGVycG9sYXRpb24gY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIGNvbG9yLXByb2ZpbGUgY29sb3ItcmVuZGVyaW5nIGRvbWluYW50LWJhc2VsaW5lIGVuYWJsZS1iYWNrZ3JvdW5kIGZpbGwtb3BhY2l0eSBmaWxsLXJ1bGUgZmxvb2QtY29sb3IgZmxvb2Qtb3BhY2l0eSBmb250LWZhbWlseSBmb250LXNpemUgZm9udC1zaXplLWFkanVzdCBmb250LXN0cmV0Y2ggZm9udC1zdHlsZSBmb250LXZhcmlhbnQgZm9udC13ZWlnaHQgZ2x5cGgtbmFtZSBnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIGdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIGhvcml6LWFkdi14IGhvcml6LW9yaWdpbi14IGltYWdlLXJlbmRlcmluZyBsZXR0ZXItc3BhY2luZyBsaWdodGluZy1jb2xvciBtYXJrZXItZW5kIG1hcmtlci1taWQgbWFya2VyLXN0YXJ0IG92ZXJsaW5lLXBvc2l0aW9uIG92ZXJsaW5lLXRoaWNrbmVzcyBwYWludC1vcmRlciBwYW5vc2UtMSBwb2ludGVyLWV2ZW50cyByZW5kZXJpbmctaW50ZW50IHNoYXBlLXJlbmRlcmluZyBzdG9wLWNvbG9yIHN0b3Atb3BhY2l0eSBzdHJpa2V0aHJvdWdoLXBvc2l0aW9uIHN0cmlrZXRocm91Z2gtdGhpY2tuZXNzIHN0cm9rZS1kYXNoYXJyYXkgc3Ryb2tlLWRhc2hvZmZzZXQgc3Ryb2tlLWxpbmVjYXAgc3Ryb2tlLWxpbmVqb2luIHN0cm9rZS1taXRlcmxpbWl0IHN0cm9rZS1vcGFjaXR5IHN0cm9rZS13aWR0aCB0ZXh0LWFuY2hvciB0ZXh0LWRlY29yYXRpb24gdGV4dC1yZW5kZXJpbmcgdW5kZXJsaW5lLXBvc2l0aW9uIHVuZGVybGluZS10aGlja25lc3MgdW5pY29kZS1iaWRpIHVuaWNvZGUtcmFuZ2UgdW5pdHMtcGVyLWVtIHYtYWxwaGFiZXRpYyB2LWhhbmdpbmcgdi1pZGVvZ3JhcGhpYyB2LW1hdGhlbWF0aWNhbCB2ZWN0b3ItZWZmZWN0IHZlcnQtYWR2LXkgdmVydC1vcmlnaW4teCB2ZXJ0LW9yaWdpbi15IHdvcmQtc3BhY2luZyB3cml0aW5nLW1vZGUgeG1sbnM6eGxpbmsgeC1oZWlnaHQiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoU3AsRXApO1J0W3RdPW5ldyAkdCh0LDEsITEsZSxudWxsLCExLCExKX0pOyJ4bGluazphY3R1YXRlIHhsaW5rOmFyY3JvbGUgeGxpbms6cm9sZSB4bGluazpzaG93IHhsaW5rOnRpdGxlIHhsaW5rOnR5cGUiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoU3AsRXApO1J0W3RdPW5ldyAkdCh0LDEsITEsZSwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsITEsITEpfSk7WyJ4bWw6YmFzZSIsInhtbDpsYW5nIiwieG1sOnNwYWNlIl0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoU3AsRXApO1J0W3RdPW5ldyAkdCh0LDEsITEsZSwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwhMSwhMSl9KTtbInRhYkluZGV4IiwiY3Jvc3NPcmlnaW4iXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1J0W2VdPW5ldyAkdChlLDEsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7UnQueGxpbmtIcmVmPW5ldyAkdCgieGxpbmtIcmVmIiwxLCExLCJ4bGluazpocmVmIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsITAsITEpO1sic3JjIiwiaHJlZiIsImFjdGlvbiIsImZvcm1BY3Rpb24iXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1J0W2VdPW5ldyAkdChlLDEsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwsITAsITApfSk7ZnVuY3Rpb24gTnAoZSx0LG4scil7dmFyIG89UnQuaGFzT3duUHJvcGVydHkodCk/UnRbdF06bnVsbDsobyE9PW51bGw/by50eXBlIT09MDpyfHwhKDI8dC5sZW5ndGgpfHx0WzBdIT09Im8iJiZ0WzBdIT09Ik8ifHx0WzFdIT09Im4iJiZ0WzFdIT09Ik4iKSYmKGRFKHQsbixvLHIpJiYobj1udWxsKSxyfHxvPT09bnVsbD9zRSh0KSYmKG49PT1udWxsP2UucmVtb3ZlQXR0cmlidXRlKHQpOmUuc2V0QXR0cmlidXRlKHQsIiIrbikpOm8ubXVzdFVzZVByb3BlcnR5P2Vbby5wcm9wZXJ0eU5hbWVdPW49PT1udWxsP28udHlwZT09PTM/ITE6IiI6bjoodD1vLmF0dHJpYnV0ZU5hbWUscj1vLmF0dHJpYnV0ZU5hbWVzcGFjZSxuPT09bnVsbD9lLnJlbW92ZUF0dHJpYnV0ZSh0KToobz1vLnR5cGUsbj1vPT09M3x8bz09PTQmJm49PT0hMD8iIjoiIituLHI/ZS5zZXRBdHRyaWJ1dGVOUyhyLHQsbik6ZS5zZXRBdHRyaWJ1dGUodCxuKSkpKX12YXIgenI9YUUuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQseWw9U3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpLHdhPVN5bWJvbC5mb3IoInJlYWN0LnBvcnRhbCIpLGthPVN5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50IiksVHA9U3ltYm9sLmZvcigicmVhY3Quc3RyaWN0X21vZGUiKSxJdT1TeW1ib2wuZm9yKCJyZWFjdC5wcm9maWxlciIpLEF5PVN5bWJvbC5mb3IoInJlYWN0LnByb3ZpZGVyIiksQ3k9U3ltYm9sLmZvcigicmVhY3QuY29udGV4dCIpLERwPVN5bWJvbC5mb3IoInJlYWN0LmZvcndhcmRfcmVmIiksUnU9U3ltYm9sLmZvcigicmVhY3Quc3VzcGVuc2UiKSxQdT1TeW1ib2wuZm9yKCJyZWFjdC5zdXNwZW5zZV9saXN0IiksQXA9U3ltYm9sLmZvcigicmVhY3QubWVtbyIpLHJvPVN5bWJvbC5mb3IoInJlYWN0LmxhenkiKTtTeW1ib2wuZm9yKCJyZWFjdC5zY29wZSIpO1N5bWJvbC5mb3IoInJlYWN0LmRlYnVnX3RyYWNlX21vZGUiKTt2YXIgTXk9U3ltYm9sLmZvcigicmVhY3Qub2Zmc2NyZWVuIik7U3ltYm9sLmZvcigicmVhY3QubGVnYWN5X2hpZGRlbiIpO1N5bWJvbC5mb3IoInJlYWN0LmNhY2hlIik7U3ltYm9sLmZvcigicmVhY3QudHJhY2luZ19tYXJrZXIiKTt2YXIgU2c9U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIE5pKGUpe3JldHVybiBlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiP251bGw6KGU9U2cmJmVbU2ddfHxlWyJAQGl0ZXJhdG9yIl0sdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpudWxsKX12YXIgb3Q9T2JqZWN0LmFzc2lnbixkdTtmdW5jdGlvbiBSaShlKXtpZihkdT09PXZvaWQgMCl0cnl7dGhyb3cgRXJyb3IoKX1jYXRjaChuKXt2YXIgdD1uLnN0YWNrLnRyaW0oKS5tYXRjaCgvXG4oICooYXQgKT8pLyk7ZHU9dCYmdFsxXXx8IiJ9cmV0dXJuYApgK2R1K2V9dmFyIGN1PSExO2Z1bmN0aW9uIHV1KGUsdCl7aWYoIWV8fGN1KXJldHVybiIiO2N1PSEwO3ZhciBuPUVycm9yLnByZXBhcmVTdGFja1RyYWNlO0Vycm9yLnByZXBhcmVTdGFja1RyYWNlPXZvaWQgMDt0cnl7aWYodClpZih0PWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcm9wcyIse3NldDpmdW5jdGlvbigpe3Rocm93IEVycm9yKCl9fSksdHlwZW9mIFJlZmxlY3Q9PSJvYmplY3QiJiZSZWZsZWN0LmNvbnN0cnVjdCl7dHJ5e1JlZmxlY3QuY29uc3RydWN0KHQsW10pfWNhdGNoKGQpe3ZhciByPWR9UmVmbGVjdC5jb25zdHJ1Y3QoZSxbXSx0KX1lbHNle3RyeXt0LmNhbGwoKX1jYXRjaChkKXtyPWR9ZS5jYWxsKHQucHJvdG90eXBlKX1lbHNle3RyeXt0aHJvdyBFcnJvcigpfWNhdGNoKGQpe3I9ZH1lKCl9fWNhdGNoKGQpe2lmKGQmJnImJnR5cGVvZiBkLnN0YWNrPT0ic3RyaW5nIil7Zm9yKHZhciBvPWQuc3RhY2suc3BsaXQoYApgKSxhPXIuc3RhY2suc3BsaXQoYApgKSxpPW8ubGVuZ3RoLTEscz1hLmxlbmd0aC0xOzE8PWkmJjA8PXMmJm9baV0hPT1hW3NdOylzLS07Zm9yKDsxPD1pJiYwPD1zO2ktLSxzLS0paWYob1tpXSE9PWFbc10pe2lmKGkhPT0xfHxzIT09MSlkbyBpZihpLS0scy0tLDA+c3x8b1tpXSE9PWFbc10pe3ZhciBsPWAKYCtvW2ldLnJlcGxhY2UoIiBhdCBuZXcgIiwiIGF0ICIpO3JldHVybiBlLmRpc3BsYXlOYW1lJiZsLmluY2x1ZGVzKCI8YW5vbnltb3VzPiIpJiYobD1sLnJlcGxhY2UoIjxhbm9ueW1vdXM+IixlLmRpc3BsYXlOYW1lKSksbH13aGlsZSgxPD1pJiYwPD1zKTticmVha319fWZpbmFsbHl7Y3U9ITEsRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9bn1yZXR1cm4oZT1lP2UuZGlzcGxheU5hbWV8fGUubmFtZToiIik/UmkoZSk6IiJ9ZnVuY3Rpb24gY0UoZSl7c3dpdGNoKGUudGFnKXtjYXNlIDU6cmV0dXJuIFJpKGUudHlwZSk7Y2FzZSAxNjpyZXR1cm4gUmkoIkxhenkiKTtjYXNlIDEzOnJldHVybiBSaSgiU3VzcGVuc2UiKTtjYXNlIDE5OnJldHVybiBSaSgiU3VzcGVuc2VMaXN0Iik7Y2FzZSAwOmNhc2UgMjpjYXNlIDE1OnJldHVybiBlPXV1KGUudHlwZSwhMSksZTtjYXNlIDExOnJldHVybiBlPXV1KGUudHlwZS5yZW5kZXIsITEpLGU7Y2FzZSAxOnJldHVybiBlPXV1KGUudHlwZSwhMCksZTtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiBMdShlKXtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iKXJldHVybiBlLmRpc3BsYXlOYW1lfHxlLm5hbWV8fG51bGw7aWYodHlwZW9mIGU9PSJzdHJpbmciKXJldHVybiBlO3N3aXRjaChlKXtjYXNlIGthOnJldHVybiJGcmFnbWVudCI7Y2FzZSB3YTpyZXR1cm4iUG9ydGFsIjtjYXNlIEl1OnJldHVybiJQcm9maWxlciI7Y2FzZSBUcDpyZXR1cm4iU3RyaWN0TW9kZSI7Y2FzZSBSdTpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgUHU6cmV0dXJuIlN1c3BlbnNlTGlzdCJ9aWYodHlwZW9mIGU9PSJvYmplY3QiKXN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIEN5OnJldHVybihlLmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuQ29uc3VtZXIiO2Nhc2UgQXk6cmV0dXJuKGUuX2NvbnRleHQuZGlzcGxheU5hbWV8fCJDb250ZXh0IikrIi5Qcm92aWRlciI7Y2FzZSBEcDp2YXIgdD1lLnJlbmRlcjtyZXR1cm4gZT1lLmRpc3BsYXlOYW1lLGV8fChlPXQuZGlzcGxheU5hbWV8fHQubmFtZXx8IiIsZT1lIT09IiI/IkZvcndhcmRSZWYoIitlKyIpIjoiRm9yd2FyZFJlZiIpLGU7Y2FzZSBBcDpyZXR1cm4gdD1lLmRpc3BsYXlOYW1lfHxudWxsLHQhPT1udWxsP3Q6THUoZS50eXBlKXx8Ik1lbW8iO2Nhc2Ugcm86dD1lLl9wYXlsb2FkLGU9ZS5faW5pdDt0cnl7cmV0dXJuIEx1KGUodCkpfWNhdGNoe319cmV0dXJuIG51bGx9ZnVuY3Rpb24gdUUoZSl7dmFyIHQ9ZS50eXBlO3N3aXRjaChlLnRhZyl7Y2FzZSAyNDpyZXR1cm4iQ2FjaGUiO2Nhc2UgOTpyZXR1cm4odC5kaXNwbGF5TmFtZXx8IkNvbnRleHQiKSsiLkNvbnN1bWVyIjtjYXNlIDEwOnJldHVybih0Ll9jb250ZXh0LmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuUHJvdmlkZXIiO2Nhc2UgMTg6cmV0dXJuIkRlaHlkcmF0ZWRGcmFnbWVudCI7Y2FzZSAxMTpyZXR1cm4gZT10LnJlbmRlcixlPWUuZGlzcGxheU5hbWV8fGUubmFtZXx8IiIsdC5kaXNwbGF5TmFtZXx8KGUhPT0iIj8iRm9yd2FyZFJlZigiK2UrIikiOiJGb3J3YXJkUmVmIik7Y2FzZSA3OnJldHVybiJGcmFnbWVudCI7Y2FzZSA1OnJldHVybiB0O2Nhc2UgNDpyZXR1cm4iUG9ydGFsIjtjYXNlIDM6cmV0dXJuIlJvb3QiO2Nhc2UgNjpyZXR1cm4iVGV4dCI7Y2FzZSAxNjpyZXR1cm4gTHUodCk7Y2FzZSA4OnJldHVybiB0PT09VHA/IlN0cmljdE1vZGUiOiJNb2RlIjtjYXNlIDIyOnJldHVybiJPZmZzY3JlZW4iO2Nhc2UgMTI6cmV0dXJuIlByb2ZpbGVyIjtjYXNlIDIxOnJldHVybiJTY29wZSI7Y2FzZSAxMzpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgMTk6cmV0dXJuIlN1c3BlbnNlTGlzdCI7Y2FzZSAyNTpyZXR1cm4iVHJhY2luZ01hcmtlciI7Y2FzZSAxOmNhc2UgMDpjYXNlIDE3OmNhc2UgMjpjYXNlIDE0OmNhc2UgMTU6aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpcmV0dXJuIHQuZGlzcGxheU5hbWV8fHQubmFtZXx8bnVsbDtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIHR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gdm8oZSl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlImJvb2xlYW4iOmNhc2UibnVtYmVyIjpjYXNlInN0cmluZyI6Y2FzZSJ1bmRlZmluZWQiOnJldHVybiBlO2Nhc2Uib2JqZWN0IjpyZXR1cm4gZTtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiBPeShlKXt2YXIgdD1lLnR5cGU7cmV0dXJuKGU9ZS5ub2RlTmFtZSkmJmUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJih0PT09ImNoZWNrYm94Inx8dD09PSJyYWRpbyIpfWZ1bmN0aW9uIHBFKGUpe3ZhciB0PU95KGUpPyJjaGVja2VkIjoidmFsdWUiLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSx0KSxyPSIiK2VbdF07aWYoIWUuaGFzT3duUHJvcGVydHkodCkmJnR5cGVvZiBuPCJ1IiYmdHlwZW9mIG4uZ2V0PT0iZnVuY3Rpb24iJiZ0eXBlb2Ygbi5zZXQ9PSJmdW5jdGlvbiIpe3ZhciBvPW4uZ2V0LGE9bi5zZXQ7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24oaSl7cj0iIitpLGEuY2FsbCh0aGlzLGkpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6bi5lbnVtZXJhYmxlfSkse2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNldFZhbHVlOmZ1bmN0aW9uKGkpe3I9IiIraX0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7ZS5fdmFsdWVUcmFja2VyPW51bGwsZGVsZXRlIGVbdF19fX19ZnVuY3Rpb24gdmwoZSl7ZS5fdmFsdWVUcmFja2VyfHwoZS5fdmFsdWVUcmFja2VyPXBFKGUpKX1mdW5jdGlvbiBJeShlKXtpZighZSlyZXR1cm4hMTt2YXIgdD1lLl92YWx1ZVRyYWNrZXI7aWYoIXQpcmV0dXJuITA7dmFyIG49dC5nZXRWYWx1ZSgpLHI9IiI7cmV0dXJuIGUmJihyPU95KGUpP2UuY2hlY2tlZD8idHJ1ZSI6ImZhbHNlIjplLnZhbHVlKSxlPXIsZSE9PW4/KHQuc2V0VmFsdWUoZSksITApOiExfWZ1bmN0aW9uIGpsKGUpe2lmKGU9ZXx8KHR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQ6dm9pZCAwKSx0eXBlb2YgZT4idSIpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBlLmFjdGl2ZUVsZW1lbnR8fGUuYm9keX1jYXRjaHtyZXR1cm4gZS5ib2R5fX1mdW5jdGlvbiBfdShlLHQpe3ZhciBuPXQuY2hlY2tlZDtyZXR1cm4gb3Qoe30sdCx7ZGVmYXVsdENoZWNrZWQ6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsdmFsdWU6dm9pZCAwLGNoZWNrZWQ6bj8/ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkfSl9ZnVuY3Rpb24gRWcoZSx0KXt2YXIgbj10LmRlZmF1bHRWYWx1ZT09bnVsbD8iIjp0LmRlZmF1bHRWYWx1ZSxyPXQuY2hlY2tlZCE9bnVsbD90LmNoZWNrZWQ6dC5kZWZhdWx0Q2hlY2tlZDtuPXZvKHQudmFsdWUhPW51bGw/dC52YWx1ZTpuKSxlLl93cmFwcGVyU3RhdGU9e2luaXRpYWxDaGVja2VkOnIsaW5pdGlhbFZhbHVlOm4sY29udHJvbGxlZDp0LnR5cGU9PT0iY2hlY2tib3gifHx0LnR5cGU9PT0icmFkaW8iP3QuY2hlY2tlZCE9bnVsbDp0LnZhbHVlIT1udWxsfX1mdW5jdGlvbiBSeShlLHQpe3Q9dC5jaGVja2VkLHQhPW51bGwmJk5wKGUsImNoZWNrZWQiLHQsITEpfWZ1bmN0aW9uIFV1KGUsdCl7UnkoZSx0KTt2YXIgbj12byh0LnZhbHVlKSxyPXQudHlwZTtpZihuIT1udWxsKXI9PT0ibnVtYmVyIj8obj09PTAmJmUudmFsdWU9PT0iInx8ZS52YWx1ZSE9bikmJihlLnZhbHVlPSIiK24pOmUudmFsdWUhPT0iIituJiYoZS52YWx1ZT0iIituKTtlbHNlIGlmKHI9PT0ic3VibWl0Inx8cj09PSJyZXNldCIpe2UucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpO3JldHVybn10Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpP0Z1KGUsdC50eXBlLG4pOnQuaGFzT3duUHJvcGVydHkoImRlZmF1bHRWYWx1ZSIpJiZGdShlLHQudHlwZSx2byh0LmRlZmF1bHRWYWx1ZSkpLHQuY2hlY2tlZD09bnVsbCYmdC5kZWZhdWx0Q2hlY2tlZCE9bnVsbCYmKGUuZGVmYXVsdENoZWNrZWQ9ISF0LmRlZmF1bHRDaGVja2VkKX1mdW5jdGlvbiBOZyhlLHQsbil7aWYodC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKXx8dC5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdFZhbHVlIikpe3ZhciByPXQudHlwZTtpZighKHIhPT0ic3VibWl0IiYmciE9PSJyZXNldCJ8fHQudmFsdWUhPT12b2lkIDAmJnQudmFsdWUhPT1udWxsKSlyZXR1cm47dD0iIitlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlLG58fHQ9PT1lLnZhbHVlfHwoZS52YWx1ZT10KSxlLmRlZmF1bHRWYWx1ZT10fW49ZS5uYW1lLG4hPT0iIiYmKGUubmFtZT0iIiksZS5kZWZhdWx0Q2hlY2tlZD0hIWUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZCxuIT09IiImJihlLm5hbWU9bil9ZnVuY3Rpb24gRnUoZSx0LG4peyh0IT09Im51bWJlciJ8fGpsKGUub3duZXJEb2N1bWVudCkhPT1lKSYmKG49PW51bGw/ZS5kZWZhdWx0VmFsdWU9IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZTplLmRlZmF1bHRWYWx1ZSE9PSIiK24mJihlLmRlZmF1bHRWYWx1ZT0iIituKSl9dmFyIFBpPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gSWEoZSx0LG4scil7aWYoZT1lLm9wdGlvbnMsdCl7dD17fTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl0WyIkIituW29dXT0hMDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKW89dC5oYXNPd25Qcm9wZXJ0eSgiJCIrZVtuXS52YWx1ZSksZVtuXS5zZWxlY3RlZCE9PW8mJihlW25dLnNlbGVjdGVkPW8pLG8mJnImJihlW25dLmRlZmF1bHRTZWxlY3RlZD0hMCl9ZWxzZXtmb3Iobj0iIit2byhuKSx0PW51bGwsbz0wO288ZS5sZW5ndGg7bysrKXtpZihlW29dLnZhbHVlPT09bil7ZVtvXS5zZWxlY3RlZD0hMCxyJiYoZVtvXS5kZWZhdWx0U2VsZWN0ZWQ9ITApO3JldHVybn10IT09bnVsbHx8ZVtvXS5kaXNhYmxlZHx8KHQ9ZVtvXSl9dCE9PW51bGwmJih0LnNlbGVjdGVkPSEwKX19ZnVuY3Rpb24genUoZSx0KXtpZih0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT1udWxsKXRocm93IEVycm9yKFUoOTEpKTtyZXR1cm4gb3Qoe30sdCx7dmFsdWU6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsY2hpbGRyZW46IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZX0pfWZ1bmN0aW9uIFRnKGUsdCl7dmFyIG49dC52YWx1ZTtpZihuPT1udWxsKXtpZihuPXQuY2hpbGRyZW4sdD10LmRlZmF1bHRWYWx1ZSxuIT1udWxsKXtpZih0IT1udWxsKXRocm93IEVycm9yKFUoOTIpKTtpZihQaShuKSl7aWYoMTxuLmxlbmd0aCl0aHJvdyBFcnJvcihVKDkzKSk7bj1uWzBdfXQ9bn10PT1udWxsJiYodD0iIiksbj10fWUuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbFZhbHVlOnZvKG4pfX1mdW5jdGlvbiBQeShlLHQpe3ZhciBuPXZvKHQudmFsdWUpLHI9dm8odC5kZWZhdWx0VmFsdWUpO24hPW51bGwmJihuPSIiK24sbiE9PWUudmFsdWUmJihlLnZhbHVlPW4pLHQuZGVmYXVsdFZhbHVlPT1udWxsJiZlLmRlZmF1bHRWYWx1ZSE9PW4mJihlLmRlZmF1bHRWYWx1ZT1uKSksciE9bnVsbCYmKGUuZGVmYXVsdFZhbHVlPSIiK3IpfWZ1bmN0aW9uIERnKGUpe3ZhciB0PWUudGV4dENvbnRlbnQ7dD09PWUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUmJnQhPT0iIiYmdCE9PW51bGwmJihlLnZhbHVlPXQpfWZ1bmN0aW9uIEx5KGUpe3N3aXRjaChlKXtjYXNlInN2ZyI6cmV0dXJuImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtjYXNlIm1hdGgiOnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjtkZWZhdWx0OnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIn19ZnVuY3Rpb24gV3UoZSx0KXtyZXR1cm4gZT09bnVsbHx8ZT09PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj9MeSh0KTplPT09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiYmdD09PSJmb3JlaWduT2JqZWN0Ij8iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI6ZX12YXIgYmwsX3k9ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBNU0FwcDwidSImJk1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uP2Z1bmN0aW9uKHQsbixyLG8pe01TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uKCl7cmV0dXJuIGUodCxuLHIsbyl9KX06ZX0oZnVuY3Rpb24oZSx0KXtpZihlLm5hbWVzcGFjZVVSSSE9PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ8fCJpbm5lckhUTUwiaW4gZSllLmlubmVySFRNTD10O2Vsc2V7Zm9yKGJsPWJsfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxibC5pbm5lckhUTUw9Ijxzdmc+Iit0LnZhbHVlT2YoKS50b1N0cmluZygpKyI8L3N2Zz4iLHQ9YmwuZmlyc3RDaGlsZDtlLmZpcnN0Q2hpbGQ7KWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTtmb3IoO3QuZmlyc3RDaGlsZDspZS5hcHBlbmRDaGlsZCh0LmZpcnN0Q2hpbGQpfX0pO2Z1bmN0aW9uIFlpKGUsdCl7aWYodCl7dmFyIG49ZS5maXJzdENoaWxkO2lmKG4mJm49PT1lLmxhc3RDaGlsZCYmbi5ub2RlVHlwZT09PTMpe24ubm9kZVZhbHVlPXQ7cmV0dXJufX1lLnRleHRDb250ZW50PXR9dmFyIFVpPXthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxhc3BlY3RSYXRpbzohMCxib3JkZXJJbWFnZU91dHNldDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lkdGg6ITAsYm94RmxleDohMCxib3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVtbkNvdW50OiEwLGNvbHVtbnM6ITAsZmxleDohMCxmbGV4R3JvdzohMCxmbGV4UG9zaXRpdmU6ITAsZmxleFNocmluazohMCxmbGV4TmVnYXRpdmU6ITAsZmxleE9yZGVyOiEwLGdyaWRBcmVhOiEwLGdyaWRSb3c6ITAsZ3JpZFJvd0VuZDohMCxncmlkUm93U3BhbjohMCxncmlkUm93U3RhcnQ6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TcGFuOiEwLGdyaWRDb2x1bW5TdGFydDohMCxmb250V2VpZ2h0OiEwLGxpbmVDbGFtcDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx0YWJTaXplOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMCxmaWxsT3BhY2l0eTohMCxmbG9vZE9wYWNpdHk6ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSxmRT1bIldlYmtpdCIsIm1zIiwiTW96IiwiTyJdO09iamVjdC5rZXlzKFVpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2ZFLmZvckVhY2goZnVuY3Rpb24odCl7dD10K2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHJpbmcoMSksVWlbdF09VWlbZV19KX0pO2Z1bmN0aW9uIFV5KGUsdCxuKXtyZXR1cm4gdD09bnVsbHx8dHlwZW9mIHQ9PSJib29sZWFuInx8dD09PSIiPyIiOm58fHR5cGVvZiB0IT0ibnVtYmVyInx8dD09PTB8fFVpLmhhc093blByb3BlcnR5KGUpJiZVaVtlXT8oIiIrdCkudHJpbSgpOnQrInB4In1mdW5jdGlvbiBGeShlLHQpe2U9ZS5zdHlsZTtmb3IodmFyIG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pKXt2YXIgcj1uLmluZGV4T2YoIi0tIik9PT0wLG89VXkobix0W25dLHIpO249PT0iZmxvYXQiJiYobj0iY3NzRmxvYXQiKSxyP2Uuc2V0UHJvcGVydHkobixvKTplW25dPW99fXZhciBtRT1vdCh7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KTtmdW5jdGlvbiBCdShlLHQpe2lmKHQpe2lmKG1FW2VdJiYodC5jaGlsZHJlbiE9bnVsbHx8dC5kYW5nZXJvdXNseVNldElubmVySFRNTCE9bnVsbCkpdGhyb3cgRXJyb3IoVSgxMzcsZSkpO2lmKHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwhPW51bGwpe2lmKHQuY2hpbGRyZW4hPW51bGwpdGhyb3cgRXJyb3IoVSg2MCkpO2lmKHR5cGVvZiB0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT0ib2JqZWN0Inx8ISgiX19odG1sImluIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKXRocm93IEVycm9yKFUoNjEpKX1pZih0LnN0eWxlIT1udWxsJiZ0eXBlb2YgdC5zdHlsZSE9Im9iamVjdCIpdGhyb3cgRXJyb3IoVSg2MikpfX1mdW5jdGlvbiBIdShlLHQpe2lmKGUuaW5kZXhPZigiLSIpPT09LTEpcmV0dXJuIHR5cGVvZiB0LmlzPT0ic3RyaW5nIjtzd2l0Y2goZSl7Y2FzZSJhbm5vdGF0aW9uLXhtbCI6Y2FzZSJjb2xvci1wcm9maWxlIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJmb250LWZhY2Utc3JjIjpjYXNlImZvbnQtZmFjZS11cmkiOmNhc2UiZm9udC1mYWNlLWZvcm1hdCI6Y2FzZSJmb250LWZhY2UtbmFtZSI6Y2FzZSJtaXNzaW5nLWdseXBoIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX12YXIgS3U9bnVsbDtmdW5jdGlvbiBDcChlKXtyZXR1cm4gZT1lLnRhcmdldHx8ZS5zcmNFbGVtZW50fHx3aW5kb3csZS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCYmKGU9ZS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCksZS5ub2RlVHlwZT09PTM/ZS5wYXJlbnROb2RlOmV9dmFyIEd1PW51bGwsUmE9bnVsbCxQYT1udWxsO2Z1bmN0aW9uIEFnKGUpe2lmKGU9dXMoZSkpe2lmKHR5cGVvZiBHdSE9ImZ1bmN0aW9uIil0aHJvdyBFcnJvcihVKDI4MCkpO3ZhciB0PWUuc3RhdGVOb2RlO3QmJih0PXdkKHQpLEd1KGUuc3RhdGVOb2RlLGUudHlwZSx0KSl9fWZ1bmN0aW9uIHp5KGUpe1JhP1BhP1BhLnB1c2goZSk6UGE9W2VdOlJhPWV9ZnVuY3Rpb24gV3koKXtpZihSYSl7dmFyIGU9UmEsdD1QYTtpZihQYT1SYT1udWxsLEFnKGUpLHQpZm9yKGU9MDtlPHQubGVuZ3RoO2UrKylBZyh0W2VdKX19ZnVuY3Rpb24gQnkoZSx0KXtyZXR1cm4gZSh0KX1mdW5jdGlvbiBIeSgpe312YXIgcHU9ITE7ZnVuY3Rpb24gS3koZSx0LG4pe2lmKHB1KXJldHVybiBlKHQsbik7cHU9ITA7dHJ5e3JldHVybiBCeShlLHQsbil9ZmluYWxseXtwdT0hMSwoUmEhPT1udWxsfHxQYSE9PW51bGwpJiYoSHkoKSxXeSgpKX19ZnVuY3Rpb24gcWkoZSx0KXt2YXIgbj1lLnN0YXRlTm9kZTtpZihuPT09bnVsbClyZXR1cm4gbnVsbDt2YXIgcj13ZChuKTtpZihyPT09bnVsbClyZXR1cm4gbnVsbDtuPXJbdF07ZTpzd2l0Y2godCl7Y2FzZSJvbkNsaWNrIjpjYXNlIm9uQ2xpY2tDYXB0dXJlIjpjYXNlIm9uRG91YmxlQ2xpY2siOmNhc2Uib25Eb3VibGVDbGlja0NhcHR1cmUiOmNhc2Uib25Nb3VzZURvd24iOmNhc2Uib25Nb3VzZURvd25DYXB0dXJlIjpjYXNlIm9uTW91c2VNb3ZlIjpjYXNlIm9uTW91c2VNb3ZlQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlVXAiOmNhc2Uib25Nb3VzZVVwQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlRW50ZXIiOihyPSFyLmRpc2FibGVkKXx8KGU9ZS50eXBlLHI9IShlPT09ImJ1dHRvbiJ8fGU9PT0iaW5wdXQifHxlPT09InNlbGVjdCJ8fGU9PT0idGV4dGFyZWEiKSksZT0hcjticmVhayBlO2RlZmF1bHQ6ZT0hMX1pZihlKXJldHVybiBudWxsO2lmKG4mJnR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKFUoMjMxLHQsdHlwZW9mIG4pKTtyZXR1cm4gbn12YXIgVnU9ITE7aWYoTHIpdHJ5e3ZhPXt9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe1Z1PSEwfX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0Iix2YSx2YSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLHZhLHZhKX1jYXRjaHtWdT0hMX12YXIgdmE7ZnVuY3Rpb24gaEUoZSx0LG4scixvLGEsaSxzLGwpe3ZhciBkPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywzKTt0cnl7dC5hcHBseShuLGQpfWNhdGNoKGMpe3RoaXMub25FcnJvcihjKX19dmFyIEZpPSExLFlsPW51bGwscWw9ITEsanU9bnVsbCxnRT17b25FcnJvcjpmdW5jdGlvbihlKXtGaT0hMCxZbD1lfX07ZnVuY3Rpb24geUUoZSx0LG4scixvLGEsaSxzLGwpe0ZpPSExLFlsPW51bGwsaEUuYXBwbHkoZ0UsYXJndW1lbnRzKX1mdW5jdGlvbiB2RShlLHQsbixyLG8sYSxpLHMsbCl7aWYoeUUuYXBwbHkodGhpcyxhcmd1bWVudHMpLEZpKXtpZihGaSl7dmFyIGQ9WWw7Rmk9ITEsWWw9bnVsbH1lbHNlIHRocm93IEVycm9yKFUoMTk4KSk7cWx8fChxbD0hMCxqdT1kKX19ZnVuY3Rpb24gWG8oZSl7dmFyIHQ9ZSxuPWU7aWYoZS5hbHRlcm5hdGUpZm9yKDt0LnJldHVybjspdD10LnJldHVybjtlbHNle2U9dDtkbyB0PWUsdC5mbGFncyY0MDk4JiYobj10LnJldHVybiksZT10LnJldHVybjt3aGlsZShlKX1yZXR1cm4gdC50YWc9PT0zP246bnVsbH1mdW5jdGlvbiBHeShlKXtpZihlLnRhZz09PTEzKXt2YXIgdD1lLm1lbW9pemVkU3RhdGU7aWYodD09PW51bGwmJihlPWUuYWx0ZXJuYXRlLGUhPT1udWxsJiYodD1lLm1lbW9pemVkU3RhdGUpKSx0IT09bnVsbClyZXR1cm4gdC5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIENnKGUpe2lmKFhvKGUpIT09ZSl0aHJvdyBFcnJvcihVKDE4OCkpfWZ1bmN0aW9uIGJFKGUpe3ZhciB0PWUuYWx0ZXJuYXRlO2lmKCF0KXtpZih0PVhvKGUpLHQ9PT1udWxsKXRocm93IEVycm9yKFUoMTg4KSk7cmV0dXJuIHQhPT1lP251bGw6ZX1mb3IodmFyIG49ZSxyPXQ7Oyl7dmFyIG89bi5yZXR1cm47aWYobz09PW51bGwpYnJlYWs7dmFyIGE9by5hbHRlcm5hdGU7aWYoYT09PW51bGwpe2lmKHI9by5yZXR1cm4sciE9PW51bGwpe249cjtjb250aW51ZX1icmVha31pZihvLmNoaWxkPT09YS5jaGlsZCl7Zm9yKGE9by5jaGlsZDthOyl7aWYoYT09PW4pcmV0dXJuIENnKG8pLGU7aWYoYT09PXIpcmV0dXJuIENnKG8pLHQ7YT1hLnNpYmxpbmd9dGhyb3cgRXJyb3IoVSgxODgpKX1pZihuLnJldHVybiE9PXIucmV0dXJuKW49byxyPWE7ZWxzZXtmb3IodmFyIGk9ITEscz1vLmNoaWxkO3M7KXtpZihzPT09bil7aT0hMCxuPW8scj1hO2JyZWFrfWlmKHM9PT1yKXtpPSEwLHI9byxuPWE7YnJlYWt9cz1zLnNpYmxpbmd9aWYoIWkpe2ZvcihzPWEuY2hpbGQ7czspe2lmKHM9PT1uKXtpPSEwLG49YSxyPW87YnJlYWt9aWYocz09PXIpe2k9ITAscj1hLG49bzticmVha31zPXMuc2libGluZ31pZighaSl0aHJvdyBFcnJvcihVKDE4OSkpfX1pZihuLmFsdGVybmF0ZSE9PXIpdGhyb3cgRXJyb3IoVSgxOTApKX1pZihuLnRhZyE9PTMpdGhyb3cgRXJyb3IoVSgxODgpKTtyZXR1cm4gbi5zdGF0ZU5vZGUuY3VycmVudD09PW4/ZTp0fWZ1bmN0aW9uIFZ5KGUpe3JldHVybiBlPWJFKGUpLGUhPT1udWxsP2p5KGUpOm51bGx9ZnVuY3Rpb24gankoZSl7aWYoZS50YWc9PT01fHxlLnRhZz09PTYpcmV0dXJuIGU7Zm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspe3ZhciB0PWp5KGUpO2lmKHQhPT1udWxsKXJldHVybiB0O2U9ZS5zaWJsaW5nfXJldHVybiBudWxsfXZhciBZeT1ibi51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLE1nPWJuLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLHdFPWJuLnVuc3RhYmxlX3Nob3VsZFlpZWxkLGtFPWJuLnVuc3RhYmxlX3JlcXVlc3RQYWludCx1dD1ibi51bnN0YWJsZV9ub3cseEU9Ym4udW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwsTXA9Ym4udW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHkscXk9Ym4udW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksWGw9Ym4udW5zdGFibGVfTm9ybWFsUHJpb3JpdHksU0U9Ym4udW5zdGFibGVfTG93UHJpb3JpdHksWHk9Ym4udW5zdGFibGVfSWRsZVByaW9yaXR5LGdkPW51bGwsdnI9bnVsbDtmdW5jdGlvbiBFRShlKXtpZih2ciYmdHlwZW9mIHZyLm9uQ29tbWl0RmliZXJSb290PT0iZnVuY3Rpb24iKXRyeXt2ci5vbkNvbW1pdEZpYmVyUm9vdChnZCxlLHZvaWQgMCwoZS5jdXJyZW50LmZsYWdzJjEyOCk9PT0xMjgpfWNhdGNoe319dmFyICRuPU1hdGguY2x6MzI/TWF0aC5jbHozMjpERSxORT1NYXRoLmxvZyxURT1NYXRoLkxOMjtmdW5jdGlvbiBERShlKXtyZXR1cm4gZT4+Pj0wLGU9PT0wPzMyOjMxLShORShlKS9URXwwKXwwfXZhciB3bD02NCxrbD00MTk0MzA0O2Z1bmN0aW9uIExpKGUpe3N3aXRjaChlJi1lKXtjYXNlIDE6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gNDtjYXNlIDg6cmV0dXJuIDg7Y2FzZSAxNjpyZXR1cm4gMTY7Y2FzZSAzMjpyZXR1cm4gMzI7Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpyZXR1cm4gZSY0MTk0MjQwO2Nhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOmNhc2UgNjcxMDg4NjQ6cmV0dXJuIGUmMTMwMDIzNDI0O2Nhc2UgMTM0MjE3NzI4OnJldHVybiAxMzQyMTc3Mjg7Y2FzZSAyNjg0MzU0NTY6cmV0dXJuIDI2ODQzNTQ1NjtjYXNlIDUzNjg3MDkxMjpyZXR1cm4gNTM2ODcwOTEyO2Nhc2UgMTA3Mzc0MTgyNDpyZXR1cm4gMTA3Mzc0MTgyNDtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiAkbChlLHQpe3ZhciBuPWUucGVuZGluZ0xhbmVzO2lmKG49PT0wKXJldHVybiAwO3ZhciByPTAsbz1lLnN1c3BlbmRlZExhbmVzLGE9ZS5waW5nZWRMYW5lcyxpPW4mMjY4NDM1NDU1O2lmKGkhPT0wKXt2YXIgcz1pJn5vO3MhPT0wP3I9TGkocyk6KGEmPWksYSE9PTAmJihyPUxpKGEpKSl9ZWxzZSBpPW4mfm8saSE9PTA/cj1MaShpKTphIT09MCYmKHI9TGkoYSkpO2lmKHI9PT0wKXJldHVybiAwO2lmKHQhPT0wJiZ0IT09ciYmISh0Jm8pJiYobz1yJi1yLGE9dCYtdCxvPj1hfHxvPT09MTYmJihhJjQxOTQyNDApIT09MCkpcmV0dXJuIHQ7aWYociY0JiYocnw9biYxNiksdD1lLmVudGFuZ2xlZExhbmVzLHQhPT0wKWZvcihlPWUuZW50YW5nbGVtZW50cyx0Jj1yOzA8dDspbj0zMS0kbih0KSxvPTE8PG4scnw9ZVtuXSx0Jj1+bztyZXR1cm4gcn1mdW5jdGlvbiBBRShlLHQpe3N3aXRjaChlKXtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4gdCsyNTA7Y2FzZSA4OmNhc2UgMTY6Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OmNhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOnJldHVybiB0KzVlMztjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpjYXNlIDY3MTA4ODY0OnJldHVybi0xO2Nhc2UgMTM0MjE3NzI4OmNhc2UgMjY4NDM1NDU2OmNhc2UgNTM2ODcwOTEyOmNhc2UgMTA3Mzc0MTgyNDpyZXR1cm4tMTtkZWZhdWx0OnJldHVybi0xfX1mdW5jdGlvbiBDRShlLHQpe2Zvcih2YXIgbj1lLnN1c3BlbmRlZExhbmVzLHI9ZS5waW5nZWRMYW5lcyxvPWUuZXhwaXJhdGlvblRpbWVzLGE9ZS5wZW5kaW5nTGFuZXM7MDxhOyl7dmFyIGk9MzEtJG4oYSkscz0xPDxpLGw9b1tpXTtsPT09LTE/KCEocyZuKXx8cyZyKSYmKG9baV09QUUocyx0KSk6bDw9dCYmKGUuZXhwaXJlZExhbmVzfD1zKSxhJj1+c319ZnVuY3Rpb24gWXUoZSl7cmV0dXJuIGU9ZS5wZW5kaW5nTGFuZXMmLTEwNzM3NDE4MjUsZSE9PTA/ZTplJjEwNzM3NDE4MjQ/MTA3Mzc0MTgyNDowfWZ1bmN0aW9uICR5KCl7dmFyIGU9d2w7cmV0dXJuIHdsPDw9MSwhKHdsJjQxOTQyNDApJiYod2w9NjQpLGV9ZnVuY3Rpb24gZnUoZSl7Zm9yKHZhciB0PVtdLG49MDszMT5uO24rKyl0LnB1c2goZSk7cmV0dXJuIHR9ZnVuY3Rpb24gZHMoZSx0LG4pe2UucGVuZGluZ0xhbmVzfD10LHQhPT01MzY4NzA5MTImJihlLnN1c3BlbmRlZExhbmVzPTAsZS5waW5nZWRMYW5lcz0wKSxlPWUuZXZlbnRUaW1lcyx0PTMxLSRuKHQpLGVbdF09bn1mdW5jdGlvbiBNRShlLHQpe3ZhciBuPWUucGVuZGluZ0xhbmVzJn50O2UucGVuZGluZ0xhbmVzPXQsZS5zdXNwZW5kZWRMYW5lcz0wLGUucGluZ2VkTGFuZXM9MCxlLmV4cGlyZWRMYW5lcyY9dCxlLm11dGFibGVSZWFkTGFuZXMmPXQsZS5lbnRhbmdsZWRMYW5lcyY9dCx0PWUuZW50YW5nbGVtZW50czt2YXIgcj1lLmV2ZW50VGltZXM7Zm9yKGU9ZS5leHBpcmF0aW9uVGltZXM7MDxuOyl7dmFyIG89MzEtJG4obiksYT0xPDxvO3Rbb109MCxyW29dPS0xLGVbb109LTEsbiY9fmF9fWZ1bmN0aW9uIE9wKGUsdCl7dmFyIG49ZS5lbnRhbmdsZWRMYW5lc3w9dDtmb3IoZT1lLmVudGFuZ2xlbWVudHM7bjspe3ZhciByPTMxLSRuKG4pLG89MTw8cjtvJnR8ZVtyXSZ0JiYoZVtyXXw9dCksbiY9fm99fXZhciBXZT0wO2Z1bmN0aW9uIEp5KGUpe3JldHVybiBlJj0tZSwxPGU/NDxlP2UmMjY4NDM1NDU1PzE2OjUzNjg3MDkxMjo0OjF9dmFyIFF5LElwLFp5LGV2LHR2LHF1PSExLHhsPVtdLGNvPW51bGwsdW89bnVsbCxwbz1udWxsLFhpPW5ldyBNYXAsJGk9bmV3IE1hcCxhbz1bXSxPRT0ibW91c2Vkb3duIG1vdXNldXAgdG91Y2hjYW5jZWwgdG91Y2hlbmQgdG91Y2hzdGFydCBhdXhjbGljayBkYmxjbGljayBwb2ludGVyY2FuY2VsIHBvaW50ZXJkb3duIHBvaW50ZXJ1cCBkcmFnZW5kIGRyYWdzdGFydCBkcm9wIGNvbXBvc2l0aW9uZW5kIGNvbXBvc2l0aW9uc3RhcnQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBpbnB1dCB0ZXh0SW5wdXQgY29weSBjdXQgcGFzdGUgY2xpY2sgY2hhbmdlIGNvbnRleHRtZW51IHJlc2V0IHN1Ym1pdCIuc3BsaXQoIiAiKTtmdW5jdGlvbiBPZyhlLHQpe3N3aXRjaChlKXtjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOmNvPW51bGw7YnJlYWs7Y2FzZSJkcmFnZW50ZXIiOmNhc2UiZHJhZ2xlYXZlIjp1bz1udWxsO2JyZWFrO2Nhc2UibW91c2VvdmVyIjpjYXNlIm1vdXNlb3V0Ijpwbz1udWxsO2JyZWFrO2Nhc2UicG9pbnRlcm92ZXIiOmNhc2UicG9pbnRlcm91dCI6WGkuZGVsZXRlKHQucG9pbnRlcklkKTticmVhaztjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpjYXNlImxvc3Rwb2ludGVyY2FwdHVyZSI6JGkuZGVsZXRlKHQucG9pbnRlcklkKX19ZnVuY3Rpb24gVGkoZSx0LG4scixvLGEpe3JldHVybiBlPT09bnVsbHx8ZS5uYXRpdmVFdmVudCE9PWE/KGU9e2Jsb2NrZWRPbjp0LGRvbUV2ZW50TmFtZTpuLGV2ZW50U3lzdGVtRmxhZ3M6cixuYXRpdmVFdmVudDphLHRhcmdldENvbnRhaW5lcnM6W29dfSx0IT09bnVsbCYmKHQ9dXModCksdCE9PW51bGwmJklwKHQpKSxlKTooZS5ldmVudFN5c3RlbUZsYWdzfD1yLHQ9ZS50YXJnZXRDb250YWluZXJzLG8hPT1udWxsJiZ0LmluZGV4T2Yobyk9PT0tMSYmdC5wdXNoKG8pLGUpfWZ1bmN0aW9uIElFKGUsdCxuLHIsbyl7c3dpdGNoKHQpe2Nhc2UiZm9jdXNpbiI6cmV0dXJuIGNvPVRpKGNvLGUsdCxuLHIsbyksITA7Y2FzZSJkcmFnZW50ZXIiOnJldHVybiB1bz1UaSh1byxlLHQsbixyLG8pLCEwO2Nhc2UibW91c2VvdmVyIjpyZXR1cm4gcG89VGkocG8sZSx0LG4scixvKSwhMDtjYXNlInBvaW50ZXJvdmVyIjp2YXIgYT1vLnBvaW50ZXJJZDtyZXR1cm4gWGkuc2V0KGEsVGkoWGkuZ2V0KGEpfHxudWxsLGUsdCxuLHIsbykpLCEwO2Nhc2UiZ290cG9pbnRlcmNhcHR1cmUiOnJldHVybiBhPW8ucG9pbnRlcklkLCRpLnNldChhLFRpKCRpLmdldChhKXx8bnVsbCxlLHQsbixyLG8pKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBudihlKXt2YXIgdD1GbyhlLnRhcmdldCk7aWYodCE9PW51bGwpe3ZhciBuPVhvKHQpO2lmKG4hPT1udWxsKXtpZih0PW4udGFnLHQ9PT0xMyl7aWYodD1HeShuKSx0IT09bnVsbCl7ZS5ibG9ja2VkT249dCx0dihlLnByaW9yaXR5LGZ1bmN0aW9uKCl7Wnkobil9KTtyZXR1cm59fWVsc2UgaWYodD09PTMmJm4uc3RhdGVOb2RlLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpe2UuYmxvY2tlZE9uPW4udGFnPT09Mz9uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7cmV0dXJufX19ZS5ibG9ja2VkT249bnVsbH1mdW5jdGlvbiBfbChlKXtpZihlLmJsb2NrZWRPbiE9PW51bGwpcmV0dXJuITE7Zm9yKHZhciB0PWUudGFyZ2V0Q29udGFpbmVyczswPHQubGVuZ3RoOyl7dmFyIG49WHUoZS5kb21FdmVudE5hbWUsZS5ldmVudFN5c3RlbUZsYWdzLHRbMF0sZS5uYXRpdmVFdmVudCk7aWYobj09PW51bGwpe249ZS5uYXRpdmVFdmVudDt2YXIgcj1uZXcgbi5jb25zdHJ1Y3RvcihuLnR5cGUsbik7S3U9cixuLnRhcmdldC5kaXNwYXRjaEV2ZW50KHIpLEt1PW51bGx9ZWxzZSByZXR1cm4gdD11cyhuKSx0IT09bnVsbCYmSXAodCksZS5ibG9ja2VkT249biwhMTt0LnNoaWZ0KCl9cmV0dXJuITB9ZnVuY3Rpb24gSWcoZSx0LG4pe19sKGUpJiZuLmRlbGV0ZSh0KX1mdW5jdGlvbiBSRSgpe3F1PSExLGNvIT09bnVsbCYmX2woY28pJiYoY289bnVsbCksdW8hPT1udWxsJiZfbCh1bykmJih1bz1udWxsKSxwbyE9PW51bGwmJl9sKHBvKSYmKHBvPW51bGwpLFhpLmZvckVhY2goSWcpLCRpLmZvckVhY2goSWcpfWZ1bmN0aW9uIERpKGUsdCl7ZS5ibG9ja2VkT249PT10JiYoZS5ibG9ja2VkT249bnVsbCxxdXx8KHF1PSEwLGJuLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2soYm4udW5zdGFibGVfTm9ybWFsUHJpb3JpdHksUkUpKSl9ZnVuY3Rpb24gSmkoZSl7ZnVuY3Rpb24gdChvKXtyZXR1cm4gRGkobyxlKX1pZigwPHhsLmxlbmd0aCl7RGkoeGxbMF0sZSk7Zm9yKHZhciBuPTE7bjx4bC5sZW5ndGg7bisrKXt2YXIgcj14bFtuXTtyLmJsb2NrZWRPbj09PWUmJihyLmJsb2NrZWRPbj1udWxsKX19Zm9yKGNvIT09bnVsbCYmRGkoY28sZSksdW8hPT1udWxsJiZEaSh1byxlKSxwbyE9PW51bGwmJkRpKHBvLGUpLFhpLmZvckVhY2godCksJGkuZm9yRWFjaCh0KSxuPTA7bjxhby5sZW5ndGg7bisrKXI9YW9bbl0sci5ibG9ja2VkT249PT1lJiYoci5ibG9ja2VkT249bnVsbCk7Zm9yKDswPGFvLmxlbmd0aCYmKG49YW9bMF0sbi5ibG9ja2VkT249PT1udWxsKTspbnYobiksbi5ibG9ja2VkT249PT1udWxsJiZhby5zaGlmdCgpfXZhciBMYT16ci5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxKbD0hMDtmdW5jdGlvbiBQRShlLHQsbixyKXt2YXIgbz1XZSxhPUxhLnRyYW5zaXRpb247TGEudHJhbnNpdGlvbj1udWxsO3RyeXtXZT0xLFJwKGUsdCxuLHIpfWZpbmFsbHl7V2U9byxMYS50cmFuc2l0aW9uPWF9fWZ1bmN0aW9uIExFKGUsdCxuLHIpe3ZhciBvPVdlLGE9TGEudHJhbnNpdGlvbjtMYS50cmFuc2l0aW9uPW51bGw7dHJ5e1dlPTQsUnAoZSx0LG4scil9ZmluYWxseXtXZT1vLExhLnRyYW5zaXRpb249YX19ZnVuY3Rpb24gUnAoZSx0LG4scil7aWYoSmwpe3ZhciBvPVh1KGUsdCxuLHIpO2lmKG89PT1udWxsKXd1KGUsdCxyLFFsLG4pLE9nKGUscik7ZWxzZSBpZihJRShvLGUsdCxuLHIpKXIuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZihPZyhlLHIpLHQmNCYmLTE8T0UuaW5kZXhPZihlKSl7Zm9yKDtvIT09bnVsbDspe3ZhciBhPXVzKG8pO2lmKGEhPT1udWxsJiZReShhKSxhPVh1KGUsdCxuLHIpLGE9PT1udWxsJiZ3dShlLHQscixRbCxuKSxhPT09bylicmVhaztvPWF9byE9PW51bGwmJnIuc3RvcFByb3BhZ2F0aW9uKCl9ZWxzZSB3dShlLHQscixudWxsLG4pfX12YXIgUWw9bnVsbDtmdW5jdGlvbiBYdShlLHQsbixyKXtpZihRbD1udWxsLGU9Q3AociksZT1GbyhlKSxlIT09bnVsbClpZih0PVhvKGUpLHQ9PT1udWxsKWU9bnVsbDtlbHNlIGlmKG49dC50YWcsbj09PTEzKXtpZihlPUd5KHQpLGUhPT1udWxsKXJldHVybiBlO2U9bnVsbH1lbHNlIGlmKG49PT0zKXtpZih0LnN0YXRlTm9kZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXJldHVybiB0LnRhZz09PTM/dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO2U9bnVsbH1lbHNlIHQhPT1lJiYoZT1udWxsKTtyZXR1cm4gUWw9ZSxudWxsfWZ1bmN0aW9uIHJ2KGUpe3N3aXRjaChlKXtjYXNlImNhbmNlbCI6Y2FzZSJjbGljayI6Y2FzZSJjbG9zZSI6Y2FzZSJjb250ZXh0bWVudSI6Y2FzZSJjb3B5IjpjYXNlImN1dCI6Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdzdGFydCI6Y2FzZSJkcm9wIjpjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOmNhc2UiaW5wdXQiOmNhc2UiaW52YWxpZCI6Y2FzZSJrZXlkb3duIjpjYXNlImtleXByZXNzIjpjYXNlImtleXVwIjpjYXNlIm1vdXNlZG93biI6Y2FzZSJtb3VzZXVwIjpjYXNlInBhc3RlIjpjYXNlInBhdXNlIjpjYXNlInBsYXkiOmNhc2UicG9pbnRlcmNhbmNlbCI6Y2FzZSJwb2ludGVyZG93biI6Y2FzZSJwb2ludGVydXAiOmNhc2UicmF0ZWNoYW5nZSI6Y2FzZSJyZXNldCI6Y2FzZSJyZXNpemUiOmNhc2Uic2Vla2VkIjpjYXNlInN1Ym1pdCI6Y2FzZSJ0b3VjaGNhbmNlbCI6Y2FzZSJ0b3VjaGVuZCI6Y2FzZSJ0b3VjaHN0YXJ0IjpjYXNlInZvbHVtZWNoYW5nZSI6Y2FzZSJjaGFuZ2UiOmNhc2Uic2VsZWN0aW9uY2hhbmdlIjpjYXNlInRleHRJbnB1dCI6Y2FzZSJjb21wb3NpdGlvbnN0YXJ0IjpjYXNlImNvbXBvc2l0aW9uZW5kIjpjYXNlImNvbXBvc2l0aW9udXBkYXRlIjpjYXNlImJlZm9yZWJsdXIiOmNhc2UiYWZ0ZXJibHVyIjpjYXNlImJlZm9yZWlucHV0IjpjYXNlImJsdXIiOmNhc2UiZnVsbHNjcmVlbmNoYW5nZSI6Y2FzZSJmb2N1cyI6Y2FzZSJoYXNoY2hhbmdlIjpjYXNlInBvcHN0YXRlIjpjYXNlInNlbGVjdCI6Y2FzZSJzZWxlY3RzdGFydCI6cmV0dXJuIDE7Y2FzZSJkcmFnIjpjYXNlImRyYWdlbnRlciI6Y2FzZSJkcmFnZXhpdCI6Y2FzZSJkcmFnbGVhdmUiOmNhc2UiZHJhZ292ZXIiOmNhc2UibW91c2Vtb3ZlIjpjYXNlIm1vdXNlb3V0IjpjYXNlIm1vdXNlb3ZlciI6Y2FzZSJwb2ludGVybW92ZSI6Y2FzZSJwb2ludGVyb3V0IjpjYXNlInBvaW50ZXJvdmVyIjpjYXNlInNjcm9sbCI6Y2FzZSJ0b2dnbGUiOmNhc2UidG91Y2htb3ZlIjpjYXNlIndoZWVsIjpjYXNlIm1vdXNlZW50ZXIiOmNhc2UibW91c2VsZWF2ZSI6Y2FzZSJwb2ludGVyZW50ZXIiOmNhc2UicG9pbnRlcmxlYXZlIjpyZXR1cm4gNDtjYXNlIm1lc3NhZ2UiOnN3aXRjaCh4RSgpKXtjYXNlIE1wOnJldHVybiAxO2Nhc2UgcXk6cmV0dXJuIDQ7Y2FzZSBYbDpjYXNlIFNFOnJldHVybiAxNjtjYXNlIFh5OnJldHVybiA1MzY4NzA5MTI7ZGVmYXVsdDpyZXR1cm4gMTZ9ZGVmYXVsdDpyZXR1cm4gMTZ9fXZhciBzbz1udWxsLFBwPW51bGwsVWw9bnVsbDtmdW5jdGlvbiBvdigpe2lmKFVsKXJldHVybiBVbDt2YXIgZSx0PVBwLG49dC5sZW5ndGgscixvPSJ2YWx1ZSJpbiBzbz9zby52YWx1ZTpzby50ZXh0Q29udGVudCxhPW8ubGVuZ3RoO2ZvcihlPTA7ZTxuJiZ0W2VdPT09b1tlXTtlKyspO3ZhciBpPW4tZTtmb3Iocj0xO3I8PWkmJnRbbi1yXT09PW9bYS1yXTtyKyspO3JldHVybiBVbD1vLnNsaWNlKGUsMTxyPzEtcjp2b2lkIDApfWZ1bmN0aW9uIEZsKGUpe3ZhciB0PWUua2V5Q29kZTtyZXR1cm4iY2hhckNvZGUiaW4gZT8oZT1lLmNoYXJDb2RlLGU9PT0wJiZ0PT09MTMmJihlPTEzKSk6ZT10LGU9PT0xMCYmKGU9MTMpLDMyPD1lfHxlPT09MTM/ZTowfWZ1bmN0aW9uIFNsKCl7cmV0dXJuITB9ZnVuY3Rpb24gUmcoKXtyZXR1cm4hMX1mdW5jdGlvbiB3bihlKXtmdW5jdGlvbiB0KG4scixvLGEsaSl7dGhpcy5fcmVhY3ROYW1lPW4sdGhpcy5fdGFyZ2V0SW5zdD1vLHRoaXMudHlwZT1yLHRoaXMubmF0aXZlRXZlbnQ9YSx0aGlzLnRhcmdldD1pLHRoaXMuY3VycmVudFRhcmdldD1udWxsO2Zvcih2YXIgcyBpbiBlKWUuaGFzT3duUHJvcGVydHkocykmJihuPWVbc10sdGhpc1tzXT1uP24oYSk6YVtzXSk7cmV0dXJuIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPShhLmRlZmF1bHRQcmV2ZW50ZWQhPW51bGw/YS5kZWZhdWx0UHJldmVudGVkOmEucmV0dXJuVmFsdWU9PT0hMSk/U2w6UmcsdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1SZyx0aGlzfXJldHVybiBvdCh0LnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITA7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5wcmV2ZW50RGVmYXVsdD9uLnByZXZlbnREZWZhdWx0KCk6dHlwZW9mIG4ucmV0dXJuVmFsdWUhPSJ1bmtub3duIiYmKG4ucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPVNsKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5zdG9wUHJvcGFnYXRpb24/bi5zdG9wUHJvcGFnYXRpb24oKTp0eXBlb2Ygbi5jYW5jZWxCdWJibGUhPSJ1bmtub3duIiYmKG4uY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPVNsKX0scGVyc2lzdDpmdW5jdGlvbigpe30saXNQZXJzaXN0ZW50OlNsfSksdH12YXIgVmE9e2V2ZW50UGhhc2U6MCxidWJibGVzOjAsY2FuY2VsYWJsZTowLHRpbWVTdGFtcDpmdW5jdGlvbihlKXtyZXR1cm4gZS50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6MCxpc1RydXN0ZWQ6MH0sTHA9d24oVmEpLGNzPW90KHt9LFZhLHt2aWV3OjAsZGV0YWlsOjB9KSxfRT13bihjcyksbXUsaHUsQWkseWQ9b3Qoe30sY3Mse3NjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDowLGNsaWVudFk6MCxwYWdlWDowLHBhZ2VZOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLGdldE1vZGlmaWVyU3RhdGU6X3AsYnV0dG9uOjAsYnV0dG9uczowLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVsYXRlZFRhcmdldD09PXZvaWQgMD9lLmZyb21FbGVtZW50PT09ZS5zcmNFbGVtZW50P2UudG9FbGVtZW50OmUuZnJvbUVsZW1lbnQ6ZS5yZWxhdGVkVGFyZ2V0fSxtb3ZlbWVudFg6ZnVuY3Rpb24oZSl7cmV0dXJuIm1vdmVtZW50WCJpbiBlP2UubW92ZW1lbnRYOihlIT09QWkmJihBaSYmZS50eXBlPT09Im1vdXNlbW92ZSI/KG11PWUuc2NyZWVuWC1BaS5zY3JlZW5YLGh1PWUuc2NyZWVuWS1BaS5zY3JlZW5ZKTpodT1tdT0wLEFpPWUpLG11KX0sbW92ZW1lbnRZOmZ1bmN0aW9uKGUpe3JldHVybiJtb3ZlbWVudFkiaW4gZT9lLm1vdmVtZW50WTpodX19KSxQZz13bih5ZCksVUU9b3Qoe30seWQse2RhdGFUcmFuc2ZlcjowfSksRkU9d24oVUUpLHpFPW90KHt9LGNzLHtyZWxhdGVkVGFyZ2V0OjB9KSxndT13bih6RSksV0U9b3Qoe30sVmEse2FuaW1hdGlvbk5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pLEJFPXduKFdFKSxIRT1vdCh7fSxWYSx7Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4iY2xpcGJvYXJkRGF0YSJpbiBlP2UuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSxLRT13bihIRSksR0U9b3Qoe30sVmEse2RhdGE6MH0pLExnPXduKEdFKSxWRT17RXNjOiJFc2NhcGUiLFNwYWNlYmFyOiIgIixMZWZ0OiJBcnJvd0xlZnQiLFVwOiJBcnJvd1VwIixSaWdodDoiQXJyb3dSaWdodCIsRG93bjoiQXJyb3dEb3duIixEZWw6IkRlbGV0ZSIsV2luOiJPUyIsTWVudToiQ29udGV4dE1lbnUiLEFwcHM6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLE1velByaW50YWJsZUtleToiVW5pZGVudGlmaWVkIn0sakU9ezg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMjoiQ2xlYXIiLDEzOiJFbnRlciIsMTY6IlNoaWZ0IiwxNzoiQ29udHJvbCIsMTg6IkFsdCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xvY2siLDI3OiJFc2NhcGUiLDMyOiIgIiwzMzoiUGFnZVVwIiwzNDoiUGFnZURvd24iLDM1OiJFbmQiLDM2OiJIb21lIiwzNzoiQXJyb3dMZWZ0IiwzODoiQXJyb3dVcCIsMzk6IkFycm93UmlnaHQiLDQwOiJBcnJvd0Rvd24iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDExMjoiRjEiLDExMzoiRjIiLDExNDoiRjMiLDExNToiRjQiLDExNjoiRjUiLDExNzoiRjYiLDExODoiRjciLDExOToiRjgiLDEyMDoiRjkiLDEyMToiRjEwIiwxMjI6IkYxMSIsMTIzOiJGMTIiLDE0NDoiTnVtTG9jayIsMTQ1OiJTY3JvbGxMb2NrIiwyMjQ6Ik1ldGEifSxZRT17QWx0OiJhbHRLZXkiLENvbnRyb2w6ImN0cmxLZXkiLE1ldGE6Im1ldGFLZXkiLFNoaWZ0OiJzaGlmdEtleSJ9O2Z1bmN0aW9uIHFFKGUpe3ZhciB0PXRoaXMubmF0aXZlRXZlbnQ7cmV0dXJuIHQuZ2V0TW9kaWZpZXJTdGF0ZT90LmdldE1vZGlmaWVyU3RhdGUoZSk6KGU9WUVbZV0pPyEhdFtlXTohMX1mdW5jdGlvbiBfcCgpe3JldHVybiBxRX12YXIgWEU9b3Qoe30sY3Mse2tleTpmdW5jdGlvbihlKXtpZihlLmtleSl7dmFyIHQ9VkVbZS5rZXldfHxlLmtleTtpZih0IT09IlVuaWRlbnRpZmllZCIpcmV0dXJuIHR9cmV0dXJuIGUudHlwZT09PSJrZXlwcmVzcyI/KGU9RmwoZSksZT09PTEzPyJFbnRlciI6U3RyaW5nLmZyb21DaGFyQ29kZShlKSk6ZS50eXBlPT09ImtleWRvd24ifHxlLnR5cGU9PT0ia2V5dXAiP2pFW2Uua2V5Q29kZV18fCJVbmlkZW50aWZpZWQiOiIifSxjb2RlOjAsbG9jYXRpb246MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAscmVwZWF0OjAsbG9jYWxlOjAsZ2V0TW9kaWZpZXJTdGF0ZTpfcCxjaGFyQ29kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09ImtleXByZXNzIj9GbChlKTowfSxrZXlDb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0ia2V5ZG93biJ8fGUudHlwZT09PSJrZXl1cCI/ZS5rZXlDb2RlOjB9LHdoaWNoOmZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0ia2V5cHJlc3MiP0ZsKGUpOmUudHlwZT09PSJrZXlkb3duInx8ZS50eXBlPT09ImtleXVwIj9lLmtleUNvZGU6MH19KSwkRT13bihYRSksSkU9b3Qoe30seWQse3BvaW50ZXJJZDowLHdpZHRoOjAsaGVpZ2h0OjAscHJlc3N1cmU6MCx0YW5nZW50aWFsUHJlc3N1cmU6MCx0aWx0WDowLHRpbHRZOjAsdHdpc3Q6MCxwb2ludGVyVHlwZTowLGlzUHJpbWFyeTowfSksX2c9d24oSkUpLFFFPW90KHt9LGNzLHt0b3VjaGVzOjAsdGFyZ2V0VG91Y2hlczowLGNoYW5nZWRUb3VjaGVzOjAsYWx0S2V5OjAsbWV0YUtleTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGdldE1vZGlmaWVyU3RhdGU6X3B9KSxaRT13bihRRSksZU49b3Qoe30sVmEse3Byb3BlcnR5TmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSksdE49d24oZU4pLG5OPW90KHt9LHlkLHtkZWx0YVg6ZnVuY3Rpb24oZSl7cmV0dXJuImRlbHRhWCJpbiBlP2UuZGVsdGFYOiJ3aGVlbERlbHRhWCJpbiBlPy1lLndoZWVsRGVsdGFYOjB9LGRlbHRhWTpmdW5jdGlvbihlKXtyZXR1cm4iZGVsdGFZImluIGU/ZS5kZWx0YVk6IndoZWVsRGVsdGFZImluIGU/LWUud2hlZWxEZWx0YVk6IndoZWVsRGVsdGEiaW4gZT8tZS53aGVlbERlbHRhOjB9LGRlbHRhWjowLGRlbHRhTW9kZTowfSksck49d24obk4pLG9OPVs5LDEzLDI3LDMyXSxVcD1MciYmIkNvbXBvc2l0aW9uRXZlbnQiaW4gd2luZG93LHppPW51bGw7THImJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJih6aT1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciBhTj1MciYmIlRleHRFdmVudCJpbiB3aW5kb3cmJiF6aSxhdj1MciYmKCFVcHx8emkmJjg8emkmJjExPj16aSksVWc9IiAiLEZnPSExO2Z1bmN0aW9uIGl2KGUsdCl7c3dpdGNoKGUpe2Nhc2Uia2V5dXAiOnJldHVybiBvTi5pbmRleE9mKHQua2V5Q29kZSkhPT0tMTtjYXNlImtleWRvd24iOnJldHVybiB0LmtleUNvZGUhPT0yMjk7Y2FzZSJrZXlwcmVzcyI6Y2FzZSJtb3VzZWRvd24iOmNhc2UiZm9jdXNvdXQiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIHN2KGUpe3JldHVybiBlPWUuZGV0YWlsLHR5cGVvZiBlPT0ib2JqZWN0IiYmImRhdGEiaW4gZT9lLmRhdGE6bnVsbH12YXIgeGE9ITE7ZnVuY3Rpb24gaU4oZSx0KXtzd2l0Y2goZSl7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIHN2KHQpO2Nhc2Uia2V5cHJlc3MiOnJldHVybiB0LndoaWNoIT09MzI/bnVsbDooRmc9ITAsVWcpO2Nhc2UidGV4dElucHV0IjpyZXR1cm4gZT10LmRhdGEsZT09PVVnJiZGZz9udWxsOmU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gc04oZSx0KXtpZih4YSlyZXR1cm4gZT09PSJjb21wb3NpdGlvbmVuZCJ8fCFVcCYmaXYoZSx0KT8oZT1vdigpLFVsPVBwPXNvPW51bGwseGE9ITEsZSk6bnVsbDtzd2l0Y2goZSl7Y2FzZSJwYXN0ZSI6cmV0dXJuIG51bGw7Y2FzZSJrZXlwcmVzcyI6aWYoISh0LmN0cmxLZXl8fHQuYWx0S2V5fHx0Lm1ldGFLZXkpfHx0LmN0cmxLZXkmJnQuYWx0S2V5KXtpZih0LmNoYXImJjE8dC5jaGFyLmxlbmd0aClyZXR1cm4gdC5jaGFyO2lmKHQud2hpY2gpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodC53aGljaCl9cmV0dXJuIG51bGw7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIGF2JiZ0LmxvY2FsZSE9PSJrbyI/bnVsbDp0LmRhdGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19dmFyIGxOPXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLCJkYXRldGltZS1sb2NhbCI6ITAsZW1haWw6ITAsbW9udGg6ITAsbnVtYmVyOiEwLHBhc3N3b3JkOiEwLHJhbmdlOiEwLHNlYXJjaDohMCx0ZWw6ITAsdGV4dDohMCx0aW1lOiEwLHVybDohMCx3ZWVrOiEwfTtmdW5jdGlvbiB6ZyhlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQ9PT0iaW5wdXQiPyEhbE5bZS50eXBlXTp0PT09InRleHRhcmVhIn1mdW5jdGlvbiBsdihlLHQsbixyKXt6eShyKSx0PVpsKHQsIm9uQ2hhbmdlIiksMDx0Lmxlbmd0aCYmKG49bmV3IExwKCJvbkNoYW5nZSIsImNoYW5nZSIsbnVsbCxuLHIpLGUucHVzaCh7ZXZlbnQ6bixsaXN0ZW5lcnM6dH0pKX12YXIgV2k9bnVsbCxRaT1udWxsO2Z1bmN0aW9uIGROKGUpe2J2KGUsMCl9ZnVuY3Rpb24gdmQoZSl7dmFyIHQ9TmEoZSk7aWYoSXkodCkpcmV0dXJuIGV9ZnVuY3Rpb24gY04oZSx0KXtpZihlPT09ImNoYW5nZSIpcmV0dXJuIHR9dmFyIGR2PSExO0xyJiYoTHI/KE5sPSJvbmlucHV0ImluIGRvY3VtZW50LE5sfHwoeXU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikseXUuc2V0QXR0cmlidXRlKCJvbmlucHV0IiwicmV0dXJuOyIpLE5sPXR5cGVvZiB5dS5vbmlucHV0PT0iZnVuY3Rpb24iKSxFbD1ObCk6RWw9ITEsZHY9RWwmJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHw5PGRvY3VtZW50LmRvY3VtZW50TW9kZSkpO3ZhciBFbCxObCx5dTtmdW5jdGlvbiBXZygpe1dpJiYoV2kuZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLGN2KSxRaT1XaT1udWxsKX1mdW5jdGlvbiBjdihlKXtpZihlLnByb3BlcnR5TmFtZT09PSJ2YWx1ZSImJnZkKFFpKSl7dmFyIHQ9W107bHYodCxRaSxlLENwKGUpKSxLeShkTix0KX19ZnVuY3Rpb24gdU4oZSx0LG4pe2U9PT0iZm9jdXNpbiI/KFdnKCksV2k9dCxRaT1uLFdpLmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIixjdikpOmU9PT0iZm9jdXNvdXQiJiZXZygpfWZ1bmN0aW9uIHBOKGUpe2lmKGU9PT0ic2VsZWN0aW9uY2hhbmdlInx8ZT09PSJrZXl1cCJ8fGU9PT0ia2V5ZG93biIpcmV0dXJuIHZkKFFpKX1mdW5jdGlvbiBmTihlLHQpe2lmKGU9PT0iY2xpY2siKXJldHVybiB2ZCh0KX1mdW5jdGlvbiBtTihlLHQpe2lmKGU9PT0iaW5wdXQifHxlPT09ImNoYW5nZSIpcmV0dXJuIHZkKHQpfWZ1bmN0aW9uIGhOKGUsdCl7cmV0dXJuIGU9PT10JiYoZSE9PTB8fDEvZT09PTEvdCl8fGUhPT1lJiZ0IT09dH12YXIgUW49dHlwZW9mIE9iamVjdC5pcz09ImZ1bmN0aW9uIj9PYmplY3QuaXM6aE47ZnVuY3Rpb24gWmkoZSx0KXtpZihRbihlLHQpKXJldHVybiEwO2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0Inx8dD09PW51bGwpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXMoZSkscj1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2ZvcihyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBvPW5bcl07aWYoIU91LmNhbGwodCxvKXx8IVFuKGVbb10sdFtvXSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gQmcoZSl7Zm9yKDtlJiZlLmZpcnN0Q2hpbGQ7KWU9ZS5maXJzdENoaWxkO3JldHVybiBlfWZ1bmN0aW9uIEhnKGUsdCl7dmFyIG49QmcoZSk7ZT0wO2Zvcih2YXIgcjtuOyl7aWYobi5ub2RlVHlwZT09PTMpe2lmKHI9ZStuLnRleHRDb250ZW50Lmxlbmd0aCxlPD10JiZyPj10KXJldHVybntub2RlOm4sb2Zmc2V0OnQtZX07ZT1yfWU6e2Zvcig7bjspe2lmKG4ubmV4dFNpYmxpbmcpe249bi5uZXh0U2libGluZzticmVhayBlfW49bi5wYXJlbnROb2RlfW49dm9pZCAwfW49Qmcobil9fWZ1bmN0aW9uIHV2KGUsdCl7cmV0dXJuIGUmJnQ/ZT09PXQ/ITA6ZSYmZS5ub2RlVHlwZT09PTM/ITE6dCYmdC5ub2RlVHlwZT09PTM/dXYoZSx0LnBhcmVudE5vZGUpOiJjb250YWlucyJpbiBlP2UuY29udGFpbnModCk6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8hIShlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpJjE2KTohMTohMX1mdW5jdGlvbiBwdigpe2Zvcih2YXIgZT13aW5kb3csdD1qbCgpO3QgaW5zdGFuY2VvZiBlLkhUTUxJRnJhbWVFbGVtZW50Oyl7dHJ5e3ZhciBuPXR5cGVvZiB0LmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZj09InN0cmluZyJ9Y2F0Y2h7bj0hMX1pZihuKWU9dC5jb250ZW50V2luZG93O2Vsc2UgYnJlYWs7dD1qbChlLmRvY3VtZW50KX1yZXR1cm4gdH1mdW5jdGlvbiBGcChlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQmJih0PT09ImlucHV0IiYmKGUudHlwZT09PSJ0ZXh0Inx8ZS50eXBlPT09InNlYXJjaCJ8fGUudHlwZT09PSJ0ZWwifHxlLnR5cGU9PT0idXJsInx8ZS50eXBlPT09InBhc3N3b3JkIil8fHQ9PT0idGV4dGFyZWEifHxlLmNvbnRlbnRFZGl0YWJsZT09PSJ0cnVlIil9ZnVuY3Rpb24gZ04oZSl7dmFyIHQ9cHYoKSxuPWUuZm9jdXNlZEVsZW0scj1lLnNlbGVjdGlvblJhbmdlO2lmKHQhPT1uJiZuJiZuLm93bmVyRG9jdW1lbnQmJnV2KG4ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbikpe2lmKHIhPT1udWxsJiZGcChuKSl7aWYodD1yLnN0YXJ0LGU9ci5lbmQsZT09PXZvaWQgMCYmKGU9dCksInNlbGVjdGlvblN0YXJ0ImluIG4pbi5zZWxlY3Rpb25TdGFydD10LG4uc2VsZWN0aW9uRW5kPU1hdGgubWluKGUsbi52YWx1ZS5sZW5ndGgpO2Vsc2UgaWYoZT0odD1uLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KSYmdC5kZWZhdWx0Vmlld3x8d2luZG93LGUuZ2V0U2VsZWN0aW9uKXtlPWUuZ2V0U2VsZWN0aW9uKCk7dmFyIG89bi50ZXh0Q29udGVudC5sZW5ndGgsYT1NYXRoLm1pbihyLnN0YXJ0LG8pO3I9ci5lbmQ9PT12b2lkIDA/YTpNYXRoLm1pbihyLmVuZCxvKSwhZS5leHRlbmQmJmE+ciYmKG89cixyPWEsYT1vKSxvPUhnKG4sYSk7dmFyIGk9SGcobixyKTtvJiZpJiYoZS5yYW5nZUNvdW50IT09MXx8ZS5hbmNob3JOb2RlIT09by5ub2RlfHxlLmFuY2hvck9mZnNldCE9PW8ub2Zmc2V0fHxlLmZvY3VzTm9kZSE9PWkubm9kZXx8ZS5mb2N1c09mZnNldCE9PWkub2Zmc2V0KSYmKHQ9dC5jcmVhdGVSYW5nZSgpLHQuc2V0U3RhcnQoby5ub2RlLG8ub2Zmc2V0KSxlLnJlbW92ZUFsbFJhbmdlcygpLGE+cj8oZS5hZGRSYW5nZSh0KSxlLmV4dGVuZChpLm5vZGUsaS5vZmZzZXQpKToodC5zZXRFbmQoaS5ub2RlLGkub2Zmc2V0KSxlLmFkZFJhbmdlKHQpKSl9fWZvcih0PVtdLGU9bjtlPWUucGFyZW50Tm9kZTspZS5ub2RlVHlwZT09PTEmJnQucHVzaCh7ZWxlbWVudDplLGxlZnQ6ZS5zY3JvbGxMZWZ0LHRvcDplLnNjcm9sbFRvcH0pO2Zvcih0eXBlb2Ygbi5mb2N1cz09ImZ1bmN0aW9uIiYmbi5mb2N1cygpLG49MDtuPHQubGVuZ3RoO24rKyllPXRbbl0sZS5lbGVtZW50LnNjcm9sbExlZnQ9ZS5sZWZ0LGUuZWxlbWVudC5zY3JvbGxUb3A9ZS50b3B9fXZhciB5Tj1MciYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSxTYT1udWxsLCR1PW51bGwsQmk9bnVsbCxKdT0hMTtmdW5jdGlvbiBLZyhlLHQsbil7dmFyIHI9bi53aW5kb3c9PT1uP24uZG9jdW1lbnQ6bi5ub2RlVHlwZT09PTk/bjpuLm93bmVyRG9jdW1lbnQ7SnV8fFNhPT1udWxsfHxTYSE9PWpsKHIpfHwocj1TYSwic2VsZWN0aW9uU3RhcnQiaW4gciYmRnAocik/cj17c3RhcnQ6ci5zZWxlY3Rpb25TdGFydCxlbmQ6ci5zZWxlY3Rpb25FbmR9OihyPShyLm93bmVyRG9jdW1lbnQmJnIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSxyPXthbmNob3JOb2RlOnIuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6ci5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOnIuZm9jdXNOb2RlLGZvY3VzT2Zmc2V0OnIuZm9jdXNPZmZzZXR9KSxCaSYmWmkoQmkscil8fChCaT1yLHI9WmwoJHUsIm9uU2VsZWN0IiksMDxyLmxlbmd0aCYmKHQ9bmV3IExwKCJvblNlbGVjdCIsInNlbGVjdCIsbnVsbCx0LG4pLGUucHVzaCh7ZXZlbnQ6dCxsaXN0ZW5lcnM6cn0pLHQudGFyZ2V0PVNhKSkpfWZ1bmN0aW9uIFRsKGUsdCl7dmFyIG49e307cmV0dXJuIG5bZS50b0xvd2VyQ2FzZSgpXT10LnRvTG93ZXJDYXNlKCksblsiV2Via2l0IitlXT0id2Via2l0Iit0LG5bIk1veiIrZV09Im1veiIrdCxufXZhciBFYT17YW5pbWF0aW9uZW5kOlRsKCJBbmltYXRpb24iLCJBbmltYXRpb25FbmQiKSxhbmltYXRpb25pdGVyYXRpb246VGwoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkl0ZXJhdGlvbiIpLGFuaW1hdGlvbnN0YXJ0OlRsKCJBbmltYXRpb24iLCJBbmltYXRpb25TdGFydCIpLHRyYW5zaXRpb25lbmQ6VGwoIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uRW5kIil9LHZ1PXt9LGZ2PXt9O0xyJiYoZnY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsIkFuaW1hdGlvbkV2ZW50ImluIHdpbmRvd3x8KGRlbGV0ZSBFYS5hbmltYXRpb25lbmQuYW5pbWF0aW9uLGRlbGV0ZSBFYS5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uLGRlbGV0ZSBFYS5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLCJUcmFuc2l0aW9uRXZlbnQiaW4gd2luZG93fHxkZWxldGUgRWEudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uKTtmdW5jdGlvbiBiZChlKXtpZih2dVtlXSlyZXR1cm4gdnVbZV07aWYoIUVhW2VdKXJldHVybiBlO3ZhciB0PUVhW2VdLG47Zm9yKG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pJiZuIGluIGZ2KXJldHVybiB2dVtlXT10W25dO3JldHVybiBlfXZhciBtdj1iZCgiYW5pbWF0aW9uZW5kIiksaHY9YmQoImFuaW1hdGlvbml0ZXJhdGlvbiIpLGd2PWJkKCJhbmltYXRpb25zdGFydCIpLHl2PWJkKCJ0cmFuc2l0aW9uZW5kIiksdnY9bmV3IE1hcCxHZz0iYWJvcnQgYXV4Q2xpY2sgY2FuY2VsIGNhblBsYXkgY2FuUGxheVRocm91Z2ggY2xpY2sgY2xvc2UgY29udGV4dE1lbnUgY29weSBjdXQgZHJhZyBkcmFnRW5kIGRyYWdFbnRlciBkcmFnRXhpdCBkcmFnTGVhdmUgZHJhZ092ZXIgZHJhZ1N0YXJ0IGRyb3AgZHVyYXRpb25DaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgZ290UG9pbnRlckNhcHR1cmUgaW5wdXQgaW52YWxpZCBrZXlEb3duIGtleVByZXNzIGtleVVwIGxvYWQgbG9hZGVkRGF0YSBsb2FkZWRNZXRhZGF0YSBsb2FkU3RhcnQgbG9zdFBvaW50ZXJDYXB0dXJlIG1vdXNlRG93biBtb3VzZU1vdmUgbW91c2VPdXQgbW91c2VPdmVyIG1vdXNlVXAgcGFzdGUgcGF1c2UgcGxheSBwbGF5aW5nIHBvaW50ZXJDYW5jZWwgcG9pbnRlckRvd24gcG9pbnRlck1vdmUgcG9pbnRlck91dCBwb2ludGVyT3ZlciBwb2ludGVyVXAgcHJvZ3Jlc3MgcmF0ZUNoYW5nZSByZXNldCByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdWJtaXQgc3VzcGVuZCB0aW1lVXBkYXRlIHRvdWNoQ2FuY2VsIHRvdWNoRW5kIHRvdWNoU3RhcnQgdm9sdW1lQ2hhbmdlIHNjcm9sbCB0b2dnbGUgdG91Y2hNb3ZlIHdhaXRpbmcgd2hlZWwiLnNwbGl0KCIgIik7ZnVuY3Rpb24gd28oZSx0KXt2di5zZXQoZSx0KSxxbyh0LFtlXSl9Zm9yKERsPTA7RGw8R2cubGVuZ3RoO0RsKyspQWw9R2dbRGxdLFZnPUFsLnRvTG93ZXJDYXNlKCksamc9QWxbMF0udG9VcHBlckNhc2UoKStBbC5zbGljZSgxKSx3byhWZywib24iK2pnKTt2YXIgQWwsVmcsamcsRGw7d28obXYsIm9uQW5pbWF0aW9uRW5kIik7d28oaHYsIm9uQW5pbWF0aW9uSXRlcmF0aW9uIik7d28oZ3YsIm9uQW5pbWF0aW9uU3RhcnQiKTt3bygiZGJsY2xpY2siLCJvbkRvdWJsZUNsaWNrIik7d28oImZvY3VzaW4iLCJvbkZvY3VzIik7d28oImZvY3Vzb3V0Iiwib25CbHVyIik7d28oeXYsIm9uVHJhbnNpdGlvbkVuZCIpO0ZhKCJvbk1vdXNlRW50ZXIiLFsibW91c2VvdXQiLCJtb3VzZW92ZXIiXSk7RmEoIm9uTW91c2VMZWF2ZSIsWyJtb3VzZW91dCIsIm1vdXNlb3ZlciJdKTtGYSgib25Qb2ludGVyRW50ZXIiLFsicG9pbnRlcm91dCIsInBvaW50ZXJvdmVyIl0pO0ZhKCJvblBvaW50ZXJMZWF2ZSIsWyJwb2ludGVyb3V0IiwicG9pbnRlcm92ZXIiXSk7cW8oIm9uQ2hhbmdlIiwiY2hhbmdlIGNsaWNrIGZvY3VzaW4gZm9jdXNvdXQgaW5wdXQga2V5ZG93biBrZXl1cCBzZWxlY3Rpb25jaGFuZ2UiLnNwbGl0KCIgIikpO3FvKCJvblNlbGVjdCIsImZvY3Vzb3V0IGNvbnRleHRtZW51IGRyYWdlbmQgZm9jdXNpbiBrZXlkb3duIGtleXVwIG1vdXNlZG93biBtb3VzZXVwIHNlbGVjdGlvbmNoYW5nZSIuc3BsaXQoIiAiKSk7cW8oIm9uQmVmb3JlSW5wdXQiLFsiY29tcG9zaXRpb25lbmQiLCJrZXlwcmVzcyIsInRleHRJbnB1dCIsInBhc3RlIl0pO3FvKCJvbkNvbXBvc2l0aW9uRW5kIiwiY29tcG9zaXRpb25lbmQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIikpO3FvKCJvbkNvbXBvc2l0aW9uU3RhcnQiLCJjb21wb3NpdGlvbnN0YXJ0IGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duIi5zcGxpdCgiICIpKTtxbygib25Db21wb3NpdGlvblVwZGF0ZSIsImNvbXBvc2l0aW9udXBkYXRlIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duIi5zcGxpdCgiICIpKTt2YXIgX2k9ImFib3J0IGNhbnBsYXkgY2FucGxheXRocm91Z2ggZHVyYXRpb25jaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgbG9hZGVkZGF0YSBsb2FkZWRtZXRhZGF0YSBsb2Fkc3RhcnQgcGF1c2UgcGxheSBwbGF5aW5nIHByb2dyZXNzIHJhdGVjaGFuZ2UgcmVzaXplIHNlZWtlZCBzZWVraW5nIHN0YWxsZWQgc3VzcGVuZCB0aW1ldXBkYXRlIHZvbHVtZWNoYW5nZSB3YWl0aW5nIi5zcGxpdCgiICIpLHZOPW5ldyBTZXQoImNhbmNlbCBjbG9zZSBpbnZhbGlkIGxvYWQgc2Nyb2xsIHRvZ2dsZSIuc3BsaXQoIiAiKS5jb25jYXQoX2kpKTtmdW5jdGlvbiBZZyhlLHQsbil7dmFyIHI9ZS50eXBlfHwidW5rbm93bi1ldmVudCI7ZS5jdXJyZW50VGFyZ2V0PW4sdkUocix0LHZvaWQgMCxlKSxlLmN1cnJlbnRUYXJnZXQ9bnVsbH1mdW5jdGlvbiBidihlLHQpe3Q9KHQmNCkhPT0wO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dLG89ci5ldmVudDtyPXIubGlzdGVuZXJzO2U6e3ZhciBhPXZvaWQgMDtpZih0KWZvcih2YXIgaT1yLmxlbmd0aC0xOzA8PWk7aS0tKXt2YXIgcz1yW2ldLGw9cy5pbnN0YW5jZSxkPXMuY3VycmVudFRhcmdldDtpZihzPXMubGlzdGVuZXIsbCE9PWEmJm8uaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVhayBlO1lnKG8scyxkKSxhPWx9ZWxzZSBmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXtpZihzPXJbaV0sbD1zLmluc3RhbmNlLGQ9cy5jdXJyZW50VGFyZ2V0LHM9cy5saXN0ZW5lcixsIT09YSYmby5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGU7WWcobyxzLGQpLGE9bH19fWlmKHFsKXRocm93IGU9anUscWw9ITEsanU9bnVsbCxlfWZ1bmN0aW9uICRlKGUsdCl7dmFyIG49dFtucF07bj09PXZvaWQgMCYmKG49dFtucF09bmV3IFNldCk7dmFyIHI9ZSsiX19idWJibGUiO24uaGFzKHIpfHwod3YodCxlLDIsITEpLG4uYWRkKHIpKX1mdW5jdGlvbiBidShlLHQsbil7dmFyIHI9MDt0JiYocnw9NCksd3YobixlLHIsdCl9dmFyIENsPSJfcmVhY3RMaXN0ZW5pbmciK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO2Z1bmN0aW9uIGVzKGUpe2lmKCFlW0NsXSl7ZVtDbF09ITAsRHkuZm9yRWFjaChmdW5jdGlvbihuKXtuIT09InNlbGVjdGlvbmNoYW5nZSImJih2Ti5oYXMobil8fGJ1KG4sITEsZSksYnUobiwhMCxlKSl9KTt2YXIgdD1lLm5vZGVUeXBlPT09OT9lOmUub3duZXJEb2N1bWVudDt0PT09bnVsbHx8dFtDbF18fCh0W0NsXT0hMCxidSgic2VsZWN0aW9uY2hhbmdlIiwhMSx0KSl9fWZ1bmN0aW9uIHd2KGUsdCxuLHIpe3N3aXRjaChydih0KSl7Y2FzZSAxOnZhciBvPVBFO2JyZWFrO2Nhc2UgNDpvPUxFO2JyZWFrO2RlZmF1bHQ6bz1ScH1uPW8uYmluZChudWxsLHQsbixlKSxvPXZvaWQgMCwhVnV8fHQhPT0idG91Y2hzdGFydCImJnQhPT0idG91Y2htb3ZlIiYmdCE9PSJ3aGVlbCJ8fChvPSEwKSxyP28hPT12b2lkIDA/ZS5hZGRFdmVudExpc3RlbmVyKHQsbix7Y2FwdHVyZTohMCxwYXNzaXZlOm99KTplLmFkZEV2ZW50TGlzdGVuZXIodCxuLCEwKTpvIT09dm9pZCAwP2UuYWRkRXZlbnRMaXN0ZW5lcih0LG4se3Bhc3NpdmU6b30pOmUuYWRkRXZlbnRMaXN0ZW5lcih0LG4sITEpfWZ1bmN0aW9uIHd1KGUsdCxuLHIsbyl7dmFyIGE9cjtpZighKHQmMSkmJiEodCYyKSYmciE9PW51bGwpZTpmb3IoOzspe2lmKHI9PT1udWxsKXJldHVybjt2YXIgaT1yLnRhZztpZihpPT09M3x8aT09PTQpe3ZhciBzPXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87aWYocz09PW98fHMubm9kZVR5cGU9PT04JiZzLnBhcmVudE5vZGU9PT1vKWJyZWFrO2lmKGk9PT00KWZvcihpPXIucmV0dXJuO2khPT1udWxsOyl7dmFyIGw9aS50YWc7aWYoKGw9PT0zfHxsPT09NCkmJihsPWkuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sbD09PW98fGwubm9kZVR5cGU9PT04JiZsLnBhcmVudE5vZGU9PT1vKSlyZXR1cm47aT1pLnJldHVybn1mb3IoO3MhPT1udWxsOyl7aWYoaT1GbyhzKSxpPT09bnVsbClyZXR1cm47aWYobD1pLnRhZyxsPT09NXx8bD09PTYpe3I9YT1pO2NvbnRpbnVlIGV9cz1zLnBhcmVudE5vZGV9fXI9ci5yZXR1cm59S3koZnVuY3Rpb24oKXt2YXIgZD1hLGM9Q3AobiksdT1bXTtlOnt2YXIgcD12di5nZXQoZSk7aWYocCE9PXZvaWQgMCl7dmFyIGY9THAseT1lO3N3aXRjaChlKXtjYXNlImtleXByZXNzIjppZihGbChuKT09PTApYnJlYWsgZTtjYXNlImtleWRvd24iOmNhc2Uia2V5dXAiOmY9JEU7YnJlYWs7Y2FzZSJmb2N1c2luIjp5PSJmb2N1cyIsZj1ndTticmVhaztjYXNlImZvY3Vzb3V0Ijp5PSJibHVyIixmPWd1O2JyZWFrO2Nhc2UiYmVmb3JlYmx1ciI6Y2FzZSJhZnRlcmJsdXIiOmY9Z3U7YnJlYWs7Y2FzZSJjbGljayI6aWYobi5idXR0b249PT0yKWJyZWFrIGU7Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJtb3VzZWRvd24iOmNhc2UibW91c2Vtb3ZlIjpjYXNlIm1vdXNldXAiOmNhc2UibW91c2VvdXQiOmNhc2UibW91c2VvdmVyIjpjYXNlImNvbnRleHRtZW51IjpmPVBnO2JyZWFrO2Nhc2UiZHJhZyI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdlbnRlciI6Y2FzZSJkcmFnZXhpdCI6Y2FzZSJkcmFnbGVhdmUiOmNhc2UiZHJhZ292ZXIiOmNhc2UiZHJhZ3N0YXJ0IjpjYXNlImRyb3AiOmY9RkU7YnJlYWs7Y2FzZSJ0b3VjaGNhbmNlbCI6Y2FzZSJ0b3VjaGVuZCI6Y2FzZSJ0b3VjaG1vdmUiOmNhc2UidG91Y2hzdGFydCI6Zj1aRTticmVhaztjYXNlIG12OmNhc2UgaHY6Y2FzZSBndjpmPUJFO2JyZWFrO2Nhc2UgeXY6Zj10TjticmVhaztjYXNlInNjcm9sbCI6Zj1fRTticmVhaztjYXNlIndoZWVsIjpmPXJOO2JyZWFrO2Nhc2UiY29weSI6Y2FzZSJjdXQiOmNhc2UicGFzdGUiOmY9S0U7YnJlYWs7Y2FzZSJnb3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJsb3N0cG9pbnRlcmNhcHR1cmUiOmNhc2UicG9pbnRlcmNhbmNlbCI6Y2FzZSJwb2ludGVyZG93biI6Y2FzZSJwb2ludGVybW92ZSI6Y2FzZSJwb2ludGVyb3V0IjpjYXNlInBvaW50ZXJvdmVyIjpjYXNlInBvaW50ZXJ1cCI6Zj1fZ312YXIgdj0odCY0KSE9PTAsdz0hdiYmZT09PSJzY3JvbGwiLGc9dj9wIT09bnVsbD9wKyJDYXB0dXJlIjpudWxsOnA7dj1bXTtmb3IodmFyIGg9ZCxiO2ghPT1udWxsOyl7Yj1oO3ZhciBtPWIuc3RhdGVOb2RlO2lmKGIudGFnPT09NSYmbSE9PW51bGwmJihiPW0sZyE9PW51bGwmJihtPXFpKGgsZyksbSE9bnVsbCYmdi5wdXNoKHRzKGgsbSxiKSkpKSx3KWJyZWFrO2g9aC5yZXR1cm59MDx2Lmxlbmd0aCYmKHA9bmV3IGYocCx5LG51bGwsbixjKSx1LnB1c2goe2V2ZW50OnAsbGlzdGVuZXJzOnZ9KSl9fWlmKCEodCY3KSl7ZTp7aWYocD1lPT09Im1vdXNlb3ZlciJ8fGU9PT0icG9pbnRlcm92ZXIiLGY9ZT09PSJtb3VzZW91dCJ8fGU9PT0icG9pbnRlcm91dCIscCYmbiE9PUt1JiYoeT1uLnJlbGF0ZWRUYXJnZXR8fG4uZnJvbUVsZW1lbnQpJiYoRm8oeSl8fHlbX3JdKSlicmVhayBlO2lmKChmfHxwKSYmKHA9Yy53aW5kb3c9PT1jP2M6KHA9Yy5vd25lckRvY3VtZW50KT9wLmRlZmF1bHRWaWV3fHxwLnBhcmVudFdpbmRvdzp3aW5kb3csZj8oeT1uLnJlbGF0ZWRUYXJnZXR8fG4udG9FbGVtZW50LGY9ZCx5PXk/Rm8oeSk6bnVsbCx5IT09bnVsbCYmKHc9WG8oeSkseSE9PXd8fHkudGFnIT09NSYmeS50YWchPT02KSYmKHk9bnVsbCkpOihmPW51bGwseT1kKSxmIT09eSkpe2lmKHY9UGcsbT0ib25Nb3VzZUxlYXZlIixnPSJvbk1vdXNlRW50ZXIiLGg9Im1vdXNlIiwoZT09PSJwb2ludGVyb3V0Inx8ZT09PSJwb2ludGVyb3ZlciIpJiYodj1fZyxtPSJvblBvaW50ZXJMZWF2ZSIsZz0ib25Qb2ludGVyRW50ZXIiLGg9InBvaW50ZXIiKSx3PWY9PW51bGw/cDpOYShmKSxiPXk9PW51bGw/cDpOYSh5KSxwPW5ldyB2KG0saCsibGVhdmUiLGYsbixjKSxwLnRhcmdldD13LHAucmVsYXRlZFRhcmdldD1iLG09bnVsbCxGbyhjKT09PWQmJih2PW5ldyB2KGcsaCsiZW50ZXIiLHksbixjKSx2LnRhcmdldD1iLHYucmVsYXRlZFRhcmdldD13LG09diksdz1tLGYmJnkpdDp7Zm9yKHY9ZixnPXksaD0wLGI9djtiO2I9YmEoYikpaCsrO2ZvcihiPTAsbT1nO207bT1iYShtKSliKys7Zm9yKDswPGgtYjspdj1iYSh2KSxoLS07Zm9yKDswPGItaDspZz1iYShnKSxiLS07Zm9yKDtoLS07KXtpZih2PT09Z3x8ZyE9PW51bGwmJnY9PT1nLmFsdGVybmF0ZSlicmVhayB0O3Y9YmEodiksZz1iYShnKX12PW51bGx9ZWxzZSB2PW51bGw7ZiE9PW51bGwmJnFnKHUscCxmLHYsITEpLHkhPT1udWxsJiZ3IT09bnVsbCYmcWcodSx3LHksdiwhMCl9fWU6e2lmKHA9ZD9OYShkKTp3aW5kb3csZj1wLm5vZGVOYW1lJiZwLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksZj09PSJzZWxlY3QifHxmPT09ImlucHV0IiYmcC50eXBlPT09ImZpbGUiKXZhciBTPWNOO2Vsc2UgaWYoemcocCkpaWYoZHYpUz1tTjtlbHNle1M9cE47dmFyIHg9dU59ZWxzZShmPXAubm9kZU5hbWUpJiZmLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYocC50eXBlPT09ImNoZWNrYm94Inx8cC50eXBlPT09InJhZGlvIikmJihTPWZOKTtpZihTJiYoUz1TKGUsZCkpKXtsdih1LFMsbixjKTticmVhayBlfXgmJngoZSxwLGQpLGU9PT0iZm9jdXNvdXQiJiYoeD1wLl93cmFwcGVyU3RhdGUpJiZ4LmNvbnRyb2xsZWQmJnAudHlwZT09PSJudW1iZXIiJiZGdShwLCJudW1iZXIiLHAudmFsdWUpfXN3aXRjaCh4PWQ/TmEoZCk6d2luZG93LGUpe2Nhc2UiZm9jdXNpbiI6KHpnKHgpfHx4LmNvbnRlbnRFZGl0YWJsZT09PSJ0cnVlIikmJihTYT14LCR1PWQsQmk9bnVsbCk7YnJlYWs7Y2FzZSJmb2N1c291dCI6Qmk9JHU9U2E9bnVsbDticmVhaztjYXNlIm1vdXNlZG93biI6SnU9ITA7YnJlYWs7Y2FzZSJjb250ZXh0bWVudSI6Y2FzZSJtb3VzZXVwIjpjYXNlImRyYWdlbmQiOkp1PSExLEtnKHUsbixjKTticmVhaztjYXNlInNlbGVjdGlvbmNoYW5nZSI6aWYoeU4pYnJlYWs7Y2FzZSJrZXlkb3duIjpjYXNlImtleXVwIjpLZyh1LG4sYyl9dmFyIEU7aWYoVXApZTp7c3dpdGNoKGUpe2Nhc2UiY29tcG9zaXRpb25zdGFydCI6dmFyIFQ9Im9uQ29tcG9zaXRpb25TdGFydCI7YnJlYWsgZTtjYXNlImNvbXBvc2l0aW9uZW5kIjpUPSJvbkNvbXBvc2l0aW9uRW5kIjticmVhayBlO2Nhc2UiY29tcG9zaXRpb251cGRhdGUiOlQ9Im9uQ29tcG9zaXRpb25VcGRhdGUiO2JyZWFrIGV9VD12b2lkIDB9ZWxzZSB4YT9pdihlLG4pJiYoVD0ib25Db21wb3NpdGlvbkVuZCIpOmU9PT0ia2V5ZG93biImJm4ua2V5Q29kZT09PTIyOSYmKFQ9Im9uQ29tcG9zaXRpb25TdGFydCIpO1QmJihhdiYmbi5sb2NhbGUhPT0ia28iJiYoeGF8fFQhPT0ib25Db21wb3NpdGlvblN0YXJ0Ij9UPT09Im9uQ29tcG9zaXRpb25FbmQiJiZ4YSYmKEU9b3YoKSk6KHNvPWMsUHA9InZhbHVlImluIHNvP3NvLnZhbHVlOnNvLnRleHRDb250ZW50LHhhPSEwKSkseD1abChkLFQpLDA8eC5sZW5ndGgmJihUPW5ldyBMZyhULGUsbnVsbCxuLGMpLHUucHVzaCh7ZXZlbnQ6VCxsaXN0ZW5lcnM6eH0pLEU/VC5kYXRhPUU6KEU9c3YobiksRSE9PW51bGwmJihULmRhdGE9RSkpKSksKEU9YU4/aU4oZSxuKTpzTihlLG4pKSYmKGQ9WmwoZCwib25CZWZvcmVJbnB1dCIpLDA8ZC5sZW5ndGgmJihjPW5ldyBMZygib25CZWZvcmVJbnB1dCIsImJlZm9yZWlucHV0IixudWxsLG4sYyksdS5wdXNoKHtldmVudDpjLGxpc3RlbmVyczpkfSksYy5kYXRhPUUpKX1idih1LHQpfSl9ZnVuY3Rpb24gdHMoZSx0LG4pe3JldHVybntpbnN0YW5jZTplLGxpc3RlbmVyOnQsY3VycmVudFRhcmdldDpufX1mdW5jdGlvbiBabChlLHQpe2Zvcih2YXIgbj10KyJDYXB0dXJlIixyPVtdO2UhPT1udWxsOyl7dmFyIG89ZSxhPW8uc3RhdGVOb2RlO28udGFnPT09NSYmYSE9PW51bGwmJihvPWEsYT1xaShlLG4pLGEhPW51bGwmJnIudW5zaGlmdCh0cyhlLGEsbykpLGE9cWkoZSx0KSxhIT1udWxsJiZyLnB1c2godHMoZSxhLG8pKSksZT1lLnJldHVybn1yZXR1cm4gcn1mdW5jdGlvbiBiYShlKXtpZihlPT09bnVsbClyZXR1cm4gbnVsbDtkbyBlPWUucmV0dXJuO3doaWxlKGUmJmUudGFnIT09NSk7cmV0dXJuIGV8fG51bGx9ZnVuY3Rpb24gcWcoZSx0LG4scixvKXtmb3IodmFyIGE9dC5fcmVhY3ROYW1lLGk9W107biE9PW51bGwmJm4hPT1yOyl7dmFyIHM9bixsPXMuYWx0ZXJuYXRlLGQ9cy5zdGF0ZU5vZGU7aWYobCE9PW51bGwmJmw9PT1yKWJyZWFrO3MudGFnPT09NSYmZCE9PW51bGwmJihzPWQsbz8obD1xaShuLGEpLGwhPW51bGwmJmkudW5zaGlmdCh0cyhuLGwscykpKTpvfHwobD1xaShuLGEpLGwhPW51bGwmJmkucHVzaCh0cyhuLGwscykpKSksbj1uLnJldHVybn1pLmxlbmd0aCE9PTAmJmUucHVzaCh7ZXZlbnQ6dCxsaXN0ZW5lcnM6aX0pfXZhciBiTj0vXHJcbj8vZyx3Tj0vXHUwMDAwfFx1RkZGRC9nO2Z1bmN0aW9uIFhnKGUpe3JldHVybih0eXBlb2YgZT09InN0cmluZyI/ZToiIitlKS5yZXBsYWNlKGJOLGAKYCkucmVwbGFjZSh3TiwiIil9ZnVuY3Rpb24gTWwoZSx0LG4pe2lmKHQ9WGcodCksWGcoZSkhPT10JiZuKXRocm93IEVycm9yKFUoNDI1KSl9ZnVuY3Rpb24gZWQoKXt9dmFyIFF1PW51bGwsWnU9bnVsbDtmdW5jdGlvbiBlcChlLHQpe3JldHVybiBlPT09InRleHRhcmVhInx8ZT09PSJub3NjcmlwdCJ8fHR5cGVvZiB0LmNoaWxkcmVuPT0ic3RyaW5nInx8dHlwZW9mIHQuY2hpbGRyZW49PSJudW1iZXIifHx0eXBlb2YgdC5kYW5nZXJvdXNseVNldElubmVySFRNTD09Im9iamVjdCImJnQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwhPT1udWxsJiZ0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbCE9bnVsbH12YXIgdHA9dHlwZW9mIHNldFRpbWVvdXQ9PSJmdW5jdGlvbiI/c2V0VGltZW91dDp2b2lkIDAsa049dHlwZW9mIGNsZWFyVGltZW91dD09ImZ1bmN0aW9uIj9jbGVhclRpbWVvdXQ6dm9pZCAwLCRnPXR5cGVvZiBQcm9taXNlPT0iZnVuY3Rpb24iP1Byb21pc2U6dm9pZCAwLHhOPXR5cGVvZiBxdWV1ZU1pY3JvdGFzaz09ImZ1bmN0aW9uIj9xdWV1ZU1pY3JvdGFzazp0eXBlb2YgJGc8InUiP2Z1bmN0aW9uKGUpe3JldHVybiAkZy5yZXNvbHZlKG51bGwpLnRoZW4oZSkuY2F0Y2goU04pfTp0cDtmdW5jdGlvbiBTTihlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0pfWZ1bmN0aW9uIGt1KGUsdCl7dmFyIG49dCxyPTA7ZG97dmFyIG89bi5uZXh0U2libGluZztpZihlLnJlbW92ZUNoaWxkKG4pLG8mJm8ubm9kZVR5cGU9PT04KWlmKG49by5kYXRhLG49PT0iLyQiKXtpZihyPT09MCl7ZS5yZW1vdmVDaGlsZChvKSxKaSh0KTtyZXR1cm59ci0tfWVsc2UgbiE9PSIkIiYmbiE9PSIkPyImJm4hPT0iJCEifHxyKys7bj1vfXdoaWxlKG4pO0ppKHQpfWZ1bmN0aW9uIGZvKGUpe2Zvcig7ZSE9bnVsbDtlPWUubmV4dFNpYmxpbmcpe3ZhciB0PWUubm9kZVR5cGU7aWYodD09PTF8fHQ9PT0zKWJyZWFrO2lmKHQ9PT04KXtpZih0PWUuZGF0YSx0PT09IiQifHx0PT09IiQhInx8dD09PSIkPyIpYnJlYWs7aWYodD09PSIvJCIpcmV0dXJuIG51bGx9fXJldHVybiBlfWZ1bmN0aW9uIEpnKGUpe2U9ZS5wcmV2aW91c1NpYmxpbmc7Zm9yKHZhciB0PTA7ZTspe2lmKGUubm9kZVR5cGU9PT04KXt2YXIgbj1lLmRhdGE7aWYobj09PSIkInx8bj09PSIkISJ8fG49PT0iJD8iKXtpZih0PT09MClyZXR1cm4gZTt0LS19ZWxzZSBuPT09Ii8kIiYmdCsrfWU9ZS5wcmV2aW91c1NpYmxpbmd9cmV0dXJuIG51bGx9dmFyIGphPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLHlyPSJfX3JlYWN0RmliZXIkIitqYSxucz0iX19yZWFjdFByb3BzJCIramEsX3I9Il9fcmVhY3RDb250YWluZXIkIitqYSxucD0iX19yZWFjdEV2ZW50cyQiK2phLEVOPSJfX3JlYWN0TGlzdGVuZXJzJCIramEsTk49Il9fcmVhY3RIYW5kbGVzJCIramE7ZnVuY3Rpb24gRm8oZSl7dmFyIHQ9ZVt5cl07aWYodClyZXR1cm4gdDtmb3IodmFyIG49ZS5wYXJlbnROb2RlO247KXtpZih0PW5bX3JdfHxuW3lyXSl7aWYobj10LmFsdGVybmF0ZSx0LmNoaWxkIT09bnVsbHx8biE9PW51bGwmJm4uY2hpbGQhPT1udWxsKWZvcihlPUpnKGUpO2UhPT1udWxsOyl7aWYobj1lW3lyXSlyZXR1cm4gbjtlPUpnKGUpfXJldHVybiB0fWU9bixuPWUucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB1cyhlKXtyZXR1cm4gZT1lW3lyXXx8ZVtfcl0sIWV8fGUudGFnIT09NSYmZS50YWchPT02JiZlLnRhZyE9PTEzJiZlLnRhZyE9PTM/bnVsbDplfWZ1bmN0aW9uIE5hKGUpe2lmKGUudGFnPT09NXx8ZS50YWc9PT02KXJldHVybiBlLnN0YXRlTm9kZTt0aHJvdyBFcnJvcihVKDMzKSl9ZnVuY3Rpb24gd2QoZSl7cmV0dXJuIGVbbnNdfHxudWxsfXZhciBycD1bXSxUYT0tMTtmdW5jdGlvbiBrbyhlKXtyZXR1cm57Y3VycmVudDplfX1mdW5jdGlvbiBKZShlKXswPlRhfHwoZS5jdXJyZW50PXJwW1RhXSxycFtUYV09bnVsbCxUYS0tKX1mdW5jdGlvbiBZZShlLHQpe1RhKysscnBbVGFdPWUuY3VycmVudCxlLmN1cnJlbnQ9dH12YXIgYm89e30sSHQ9a28oYm8pLGFuPWtvKCExKSxLbz1ibztmdW5jdGlvbiB6YShlLHQpe3ZhciBuPWUudHlwZS5jb250ZXh0VHlwZXM7aWYoIW4pcmV0dXJuIGJvO3ZhciByPWUuc3RhdGVOb2RlO2lmKHImJnIuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dD09PXQpcmV0dXJuIHIuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ7dmFyIG89e30sYTtmb3IoYSBpbiBuKW9bYV09dFthXTtyZXR1cm4gciYmKGU9ZS5zdGF0ZU5vZGUsZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PXQsZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dD1vKSxvfWZ1bmN0aW9uIHNuKGUpe3JldHVybiBlPWUuY2hpbGRDb250ZXh0VHlwZXMsZSE9bnVsbH1mdW5jdGlvbiB0ZCgpe0plKGFuKSxKZShIdCl9ZnVuY3Rpb24gUWcoZSx0LG4pe2lmKEh0LmN1cnJlbnQhPT1ibyl0aHJvdyBFcnJvcihVKDE2OCkpO1llKEh0LHQpLFllKGFuLG4pfWZ1bmN0aW9uIGt2KGUsdCxuKXt2YXIgcj1lLnN0YXRlTm9kZTtpZih0PXQuY2hpbGRDb250ZXh0VHlwZXMsdHlwZW9mIHIuZ2V0Q2hpbGRDb250ZXh0IT0iZnVuY3Rpb24iKXJldHVybiBuO3I9ci5nZXRDaGlsZENvbnRleHQoKTtmb3IodmFyIG8gaW4gcilpZighKG8gaW4gdCkpdGhyb3cgRXJyb3IoVSgxMDgsdUUoZSl8fCJVbmtub3duIixvKSk7cmV0dXJuIG90KHt9LG4scil9ZnVuY3Rpb24gbmQoZSl7cmV0dXJuIGU9KGU9ZS5zdGF0ZU5vZGUpJiZlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0fHxibyxLbz1IdC5jdXJyZW50LFllKEh0LGUpLFllKGFuLGFuLmN1cnJlbnQpLCEwfWZ1bmN0aW9uIFpnKGUsdCxuKXt2YXIgcj1lLnN0YXRlTm9kZTtpZighcil0aHJvdyBFcnJvcihVKDE2OSkpO24/KGU9a3YoZSx0LEtvKSxyLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0PWUsSmUoYW4pLEplKEh0KSxZZShIdCxlKSk6SmUoYW4pLFllKGFuLG4pfXZhciBPcj1udWxsLGtkPSExLHh1PSExO2Z1bmN0aW9uIHh2KGUpe09yPT09bnVsbD9Pcj1bZV06T3IucHVzaChlKX1mdW5jdGlvbiBUTihlKXtrZD0hMCx4dihlKX1mdW5jdGlvbiB4bygpe2lmKCF4dSYmT3IhPT1udWxsKXt4dT0hMDt2YXIgZT0wLHQ9V2U7dHJ5e3ZhciBuPU9yO2ZvcihXZT0xO2U8bi5sZW5ndGg7ZSsrKXt2YXIgcj1uW2VdO2RvIHI9cighMCk7d2hpbGUociE9PW51bGwpfU9yPW51bGwsa2Q9ITF9Y2F0Y2gobyl7dGhyb3cgT3IhPT1udWxsJiYoT3I9T3Iuc2xpY2UoZSsxKSksWXkoTXAseG8pLG99ZmluYWxseXtXZT10LHh1PSExfX1yZXR1cm4gbnVsbH12YXIgRGE9W10sQWE9MCxyZD1udWxsLG9kPTAsVG49W10sRG49MCxHbz1udWxsLElyPTEsUnI9IiI7ZnVuY3Rpb24gX28oZSx0KXtEYVtBYSsrXT1vZCxEYVtBYSsrXT1yZCxyZD1lLG9kPXR9ZnVuY3Rpb24gU3YoZSx0LG4pe1RuW0RuKytdPUlyLFRuW0RuKytdPVJyLFRuW0RuKytdPUdvLEdvPWU7dmFyIHI9SXI7ZT1Scjt2YXIgbz0zMi0kbihyKS0xO3ImPX4oMTw8byksbis9MTt2YXIgYT0zMi0kbih0KStvO2lmKDMwPGEpe3ZhciBpPW8tbyU1O2E9KHImKDE8PGkpLTEpLnRvU3RyaW5nKDMyKSxyPj49aSxvLT1pLElyPTE8PDMyLSRuKHQpK298bjw8b3xyLFJyPWErZX1lbHNlIElyPTE8PGF8bjw8b3xyLFJyPWV9ZnVuY3Rpb24genAoZSl7ZS5yZXR1cm4hPT1udWxsJiYoX28oZSwxKSxTdihlLDEsMCkpfWZ1bmN0aW9uIFdwKGUpe2Zvcig7ZT09PXJkOylyZD1EYVstLUFhXSxEYVtBYV09bnVsbCxvZD1EYVstLUFhXSxEYVtBYV09bnVsbDtmb3IoO2U9PT1HbzspR289VG5bLS1Ebl0sVG5bRG5dPW51bGwsUnI9VG5bLS1Ebl0sVG5bRG5dPW51bGwsSXI9VG5bLS1Ebl0sVG5bRG5dPW51bGx9dmFyIHZuPW51bGwseW49bnVsbCxRZT0hMSxYbj1udWxsO2Z1bmN0aW9uIEV2KGUsdCl7dmFyIG49QW4oNSxudWxsLG51bGwsMCk7bi5lbGVtZW50VHlwZT0iREVMRVRFRCIsbi5zdGF0ZU5vZGU9dCxuLnJldHVybj1lLHQ9ZS5kZWxldGlvbnMsdD09PW51bGw/KGUuZGVsZXRpb25zPVtuXSxlLmZsYWdzfD0xNik6dC5wdXNoKG4pfWZ1bmN0aW9uIGV5KGUsdCl7c3dpdGNoKGUudGFnKXtjYXNlIDU6dmFyIG49ZS50eXBlO3JldHVybiB0PXQubm9kZVR5cGUhPT0xfHxuLnRvTG93ZXJDYXNlKCkhPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/bnVsbDp0LHQhPT1udWxsPyhlLnN0YXRlTm9kZT10LHZuPWUseW49Zm8odC5maXJzdENoaWxkKSwhMCk6ITE7Y2FzZSA2OnJldHVybiB0PWUucGVuZGluZ1Byb3BzPT09IiJ8fHQubm9kZVR5cGUhPT0zP251bGw6dCx0IT09bnVsbD8oZS5zdGF0ZU5vZGU9dCx2bj1lLHluPW51bGwsITApOiExO2Nhc2UgMTM6cmV0dXJuIHQ9dC5ub2RlVHlwZSE9PTg/bnVsbDp0LHQhPT1udWxsPyhuPUdvIT09bnVsbD97aWQ6SXIsb3ZlcmZsb3c6UnJ9Om51bGwsZS5tZW1vaXplZFN0YXRlPXtkZWh5ZHJhdGVkOnQsdHJlZUNvbnRleHQ6bixyZXRyeUxhbmU6MTA3Mzc0MTgyNH0sbj1BbigxOCxudWxsLG51bGwsMCksbi5zdGF0ZU5vZGU9dCxuLnJldHVybj1lLGUuY2hpbGQ9bix2bj1lLHluPW51bGwsITApOiExO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIG9wKGUpe3JldHVybihlLm1vZGUmMSkhPT0wJiYoZS5mbGFncyYxMjgpPT09MH1mdW5jdGlvbiBhcChlKXtpZihRZSl7dmFyIHQ9eW47aWYodCl7dmFyIG49dDtpZighZXkoZSx0KSl7aWYob3AoZSkpdGhyb3cgRXJyb3IoVSg0MTgpKTt0PWZvKG4ubmV4dFNpYmxpbmcpO3ZhciByPXZuO3QmJmV5KGUsdCk/RXYocixuKTooZS5mbGFncz1lLmZsYWdzJi00MDk3fDIsUWU9ITEsdm49ZSl9fWVsc2V7aWYob3AoZSkpdGhyb3cgRXJyb3IoVSg0MTgpKTtlLmZsYWdzPWUuZmxhZ3MmLTQwOTd8MixRZT0hMSx2bj1lfX19ZnVuY3Rpb24gdHkoZSl7Zm9yKGU9ZS5yZXR1cm47ZSE9PW51bGwmJmUudGFnIT09NSYmZS50YWchPT0zJiZlLnRhZyE9PTEzOyllPWUucmV0dXJuO3ZuPWV9ZnVuY3Rpb24gT2woZSl7aWYoZSE9PXZuKXJldHVybiExO2lmKCFRZSlyZXR1cm4gdHkoZSksUWU9ITAsITE7dmFyIHQ7aWYoKHQ9ZS50YWchPT0zKSYmISh0PWUudGFnIT09NSkmJih0PWUudHlwZSx0PXQhPT0iaGVhZCImJnQhPT0iYm9keSImJiFlcChlLnR5cGUsZS5tZW1vaXplZFByb3BzKSksdCYmKHQ9eW4pKXtpZihvcChlKSl0aHJvdyBOdigpLEVycm9yKFUoNDE4KSk7Zm9yKDt0OylFdihlLHQpLHQ9Zm8odC5uZXh0U2libGluZyl9aWYodHkoZSksZS50YWc9PT0xMyl7aWYoZT1lLm1lbW9pemVkU3RhdGUsZT1lIT09bnVsbD9lLmRlaHlkcmF0ZWQ6bnVsbCwhZSl0aHJvdyBFcnJvcihVKDMxNykpO2U6e2ZvcihlPWUubmV4dFNpYmxpbmcsdD0wO2U7KXtpZihlLm5vZGVUeXBlPT09OCl7dmFyIG49ZS5kYXRhO2lmKG49PT0iLyQiKXtpZih0PT09MCl7eW49Zm8oZS5uZXh0U2libGluZyk7YnJlYWsgZX10LS19ZWxzZSBuIT09IiQiJiZuIT09IiQhIiYmbiE9PSIkPyJ8fHQrK31lPWUubmV4dFNpYmxpbmd9eW49bnVsbH19ZWxzZSB5bj12bj9mbyhlLnN0YXRlTm9kZS5uZXh0U2libGluZyk6bnVsbDtyZXR1cm4hMH1mdW5jdGlvbiBOdigpe2Zvcih2YXIgZT15bjtlOyllPWZvKGUubmV4dFNpYmxpbmcpfWZ1bmN0aW9uIFdhKCl7eW49dm49bnVsbCxRZT0hMX1mdW5jdGlvbiBCcChlKXtYbj09PW51bGw/WG49W2VdOlhuLnB1c2goZSl9dmFyIEROPXpyLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO2Z1bmN0aW9uIENpKGUsdCxuKXtpZihlPW4ucmVmLGUhPT1udWxsJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmdHlwZW9mIGUhPSJvYmplY3QiKXtpZihuLl9vd25lcil7aWYobj1uLl9vd25lcixuKXtpZihuLnRhZyE9PTEpdGhyb3cgRXJyb3IoVSgzMDkpKTt2YXIgcj1uLnN0YXRlTm9kZX1pZighcil0aHJvdyBFcnJvcihVKDE0NyxlKSk7dmFyIG89cixhPSIiK2U7cmV0dXJuIHQhPT1udWxsJiZ0LnJlZiE9PW51bGwmJnR5cGVvZiB0LnJlZj09ImZ1bmN0aW9uIiYmdC5yZWYuX3N0cmluZ1JlZj09PWE/dC5yZWY6KHQ9ZnVuY3Rpb24oaSl7dmFyIHM9by5yZWZzO2k9PT1udWxsP2RlbGV0ZSBzW2FdOnNbYV09aX0sdC5fc3RyaW5nUmVmPWEsdCl9aWYodHlwZW9mIGUhPSJzdHJpbmciKXRocm93IEVycm9yKFUoMjg0KSk7aWYoIW4uX293bmVyKXRocm93IEVycm9yKFUoMjkwLGUpKX1yZXR1cm4gZX1mdW5jdGlvbiBJbChlLHQpe3Rocm93IGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLEVycm9yKFUoMzEsZT09PSJbb2JqZWN0IE9iamVjdF0iPyJvYmplY3Qgd2l0aCBrZXlzIHsiK09iamVjdC5rZXlzKHQpLmpvaW4oIiwgIikrIn0iOmUpKX1mdW5jdGlvbiBueShlKXt2YXIgdD1lLl9pbml0O3JldHVybiB0KGUuX3BheWxvYWQpfWZ1bmN0aW9uIFR2KGUpe2Z1bmN0aW9uIHQoZyxoKXtpZihlKXt2YXIgYj1nLmRlbGV0aW9ucztiPT09bnVsbD8oZy5kZWxldGlvbnM9W2hdLGcuZmxhZ3N8PTE2KTpiLnB1c2goaCl9fWZ1bmN0aW9uIG4oZyxoKXtpZighZSlyZXR1cm4gbnVsbDtmb3IoO2ghPT1udWxsOyl0KGcsaCksaD1oLnNpYmxpbmc7cmV0dXJuIG51bGx9ZnVuY3Rpb24gcihnLGgpe2ZvcihnPW5ldyBNYXA7aCE9PW51bGw7KWgua2V5IT09bnVsbD9nLnNldChoLmtleSxoKTpnLnNldChoLmluZGV4LGgpLGg9aC5zaWJsaW5nO3JldHVybiBnfWZ1bmN0aW9uIG8oZyxoKXtyZXR1cm4gZz15byhnLGgpLGcuaW5kZXg9MCxnLnNpYmxpbmc9bnVsbCxnfWZ1bmN0aW9uIGEoZyxoLGIpe3JldHVybiBnLmluZGV4PWIsZT8oYj1nLmFsdGVybmF0ZSxiIT09bnVsbD8oYj1iLmluZGV4LGI8aD8oZy5mbGFnc3w9MixoKTpiKTooZy5mbGFnc3w9MixoKSk6KGcuZmxhZ3N8PTEwNDg1NzYsaCl9ZnVuY3Rpb24gaShnKXtyZXR1cm4gZSYmZy5hbHRlcm5hdGU9PT1udWxsJiYoZy5mbGFnc3w9MiksZ31mdW5jdGlvbiBzKGcsaCxiLG0pe3JldHVybiBoPT09bnVsbHx8aC50YWchPT02PyhoPUN1KGIsZy5tb2RlLG0pLGgucmV0dXJuPWcsaCk6KGg9byhoLGIpLGgucmV0dXJuPWcsaCl9ZnVuY3Rpb24gbChnLGgsYixtKXt2YXIgUz1iLnR5cGU7cmV0dXJuIFM9PT1rYT9jKGcsaCxiLnByb3BzLmNoaWxkcmVuLG0sYi5rZXkpOmghPT1udWxsJiYoaC5lbGVtZW50VHlwZT09PVN8fHR5cGVvZiBTPT0ib2JqZWN0IiYmUyE9PW51bGwmJlMuJCR0eXBlb2Y9PT1ybyYmbnkoUyk9PT1oLnR5cGUpPyhtPW8oaCxiLnByb3BzKSxtLnJlZj1DaShnLGgsYiksbS5yZXR1cm49ZyxtKToobT1WbChiLnR5cGUsYi5rZXksYi5wcm9wcyxudWxsLGcubW9kZSxtKSxtLnJlZj1DaShnLGgsYiksbS5yZXR1cm49ZyxtKX1mdW5jdGlvbiBkKGcsaCxiLG0pe3JldHVybiBoPT09bnVsbHx8aC50YWchPT00fHxoLnN0YXRlTm9kZS5jb250YWluZXJJbmZvIT09Yi5jb250YWluZXJJbmZvfHxoLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiE9PWIuaW1wbGVtZW50YXRpb24/KGg9TXUoYixnLm1vZGUsbSksaC5yZXR1cm49ZyxoKTooaD1vKGgsYi5jaGlsZHJlbnx8W10pLGgucmV0dXJuPWcsaCl9ZnVuY3Rpb24gYyhnLGgsYixtLFMpe3JldHVybiBoPT09bnVsbHx8aC50YWchPT03PyhoPUhvKGIsZy5tb2RlLG0sUyksaC5yZXR1cm49ZyxoKTooaD1vKGgsYiksaC5yZXR1cm49ZyxoKX1mdW5jdGlvbiB1KGcsaCxiKXtpZih0eXBlb2YgaD09InN0cmluZyImJmghPT0iInx8dHlwZW9mIGg9PSJudW1iZXIiKXJldHVybiBoPUN1KCIiK2gsZy5tb2RlLGIpLGgucmV0dXJuPWcsaDtpZih0eXBlb2YgaD09Im9iamVjdCImJmghPT1udWxsKXtzd2l0Y2goaC4kJHR5cGVvZil7Y2FzZSB5bDpyZXR1cm4gYj1WbChoLnR5cGUsaC5rZXksaC5wcm9wcyxudWxsLGcubW9kZSxiKSxiLnJlZj1DaShnLG51bGwsaCksYi5yZXR1cm49ZyxiO2Nhc2Ugd2E6cmV0dXJuIGg9TXUoaCxnLm1vZGUsYiksaC5yZXR1cm49ZyxoO2Nhc2Ugcm86dmFyIG09aC5faW5pdDtyZXR1cm4gdShnLG0oaC5fcGF5bG9hZCksYil9aWYoUGkoaCl8fE5pKGgpKXJldHVybiBoPUhvKGgsZy5tb2RlLGIsbnVsbCksaC5yZXR1cm49ZyxoO0lsKGcsaCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcChnLGgsYixtKXt2YXIgUz1oIT09bnVsbD9oLmtleTpudWxsO2lmKHR5cGVvZiBiPT0ic3RyaW5nIiYmYiE9PSIifHx0eXBlb2YgYj09Im51bWJlciIpcmV0dXJuIFMhPT1udWxsP251bGw6cyhnLGgsIiIrYixtKTtpZih0eXBlb2YgYj09Im9iamVjdCImJmIhPT1udWxsKXtzd2l0Y2goYi4kJHR5cGVvZil7Y2FzZSB5bDpyZXR1cm4gYi5rZXk9PT1TP2woZyxoLGIsbSk6bnVsbDtjYXNlIHdhOnJldHVybiBiLmtleT09PVM/ZChnLGgsYixtKTpudWxsO2Nhc2Ugcm86cmV0dXJuIFM9Yi5faW5pdCxwKGcsaCxTKGIuX3BheWxvYWQpLG0pfWlmKFBpKGIpfHxOaShiKSlyZXR1cm4gUyE9PW51bGw/bnVsbDpjKGcsaCxiLG0sbnVsbCk7SWwoZyxiKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBmKGcsaCxiLG0sUyl7aWYodHlwZW9mIG09PSJzdHJpbmciJiZtIT09IiJ8fHR5cGVvZiBtPT0ibnVtYmVyIilyZXR1cm4gZz1nLmdldChiKXx8bnVsbCxzKGgsZywiIittLFMpO2lmKHR5cGVvZiBtPT0ib2JqZWN0IiYmbSE9PW51bGwpe3N3aXRjaChtLiQkdHlwZW9mKXtjYXNlIHlsOnJldHVybiBnPWcuZ2V0KG0ua2V5PT09bnVsbD9iOm0ua2V5KXx8bnVsbCxsKGgsZyxtLFMpO2Nhc2Ugd2E6cmV0dXJuIGc9Zy5nZXQobS5rZXk9PT1udWxsP2I6bS5rZXkpfHxudWxsLGQoaCxnLG0sUyk7Y2FzZSBybzp2YXIgeD1tLl9pbml0O3JldHVybiBmKGcsaCxiLHgobS5fcGF5bG9hZCksUyl9aWYoUGkobSl8fE5pKG0pKXJldHVybiBnPWcuZ2V0KGIpfHxudWxsLGMoaCxnLG0sUyxudWxsKTtJbChoLG0pfXJldHVybiBudWxsfWZ1bmN0aW9uIHkoZyxoLGIsbSl7Zm9yKHZhciBTPW51bGwseD1udWxsLEU9aCxUPWg9MCxBPW51bGw7RSE9PW51bGwmJlQ8Yi5sZW5ndGg7VCsrKXtFLmluZGV4PlQ/KEE9RSxFPW51bGwpOkE9RS5zaWJsaW5nO3ZhciBDPXAoZyxFLGJbVF0sbSk7aWYoQz09PW51bGwpe0U9PT1udWxsJiYoRT1BKTticmVha31lJiZFJiZDLmFsdGVybmF0ZT09PW51bGwmJnQoZyxFKSxoPWEoQyxoLFQpLHg9PT1udWxsP1M9Qzp4LnNpYmxpbmc9Qyx4PUMsRT1BfWlmKFQ9PT1iLmxlbmd0aClyZXR1cm4gbihnLEUpLFFlJiZfbyhnLFQpLFM7aWYoRT09PW51bGwpe2Zvcig7VDxiLmxlbmd0aDtUKyspRT11KGcsYltUXSxtKSxFIT09bnVsbCYmKGg9YShFLGgsVCkseD09PW51bGw/Uz1FOnguc2libGluZz1FLHg9RSk7cmV0dXJuIFFlJiZfbyhnLFQpLFN9Zm9yKEU9cihnLEUpO1Q8Yi5sZW5ndGg7VCsrKUE9ZihFLGcsVCxiW1RdLG0pLEEhPT1udWxsJiYoZSYmQS5hbHRlcm5hdGUhPT1udWxsJiZFLmRlbGV0ZShBLmtleT09PW51bGw/VDpBLmtleSksaD1hKEEsaCxUKSx4PT09bnVsbD9TPUE6eC5zaWJsaW5nPUEseD1BKTtyZXR1cm4gZSYmRS5mb3JFYWNoKGZ1bmN0aW9uKEwpe3JldHVybiB0KGcsTCl9KSxRZSYmX28oZyxUKSxTfWZ1bmN0aW9uIHYoZyxoLGIsbSl7dmFyIFM9TmkoYik7aWYodHlwZW9mIFMhPSJmdW5jdGlvbiIpdGhyb3cgRXJyb3IoVSgxNTApKTtpZihiPVMuY2FsbChiKSxiPT1udWxsKXRocm93IEVycm9yKFUoMTUxKSk7Zm9yKHZhciB4PVM9bnVsbCxFPWgsVD1oPTAsQT1udWxsLEM9Yi5uZXh0KCk7RSE9PW51bGwmJiFDLmRvbmU7VCsrLEM9Yi5uZXh0KCkpe0UuaW5kZXg+VD8oQT1FLEU9bnVsbCk6QT1FLnNpYmxpbmc7dmFyIEw9cChnLEUsQy52YWx1ZSxtKTtpZihMPT09bnVsbCl7RT09PW51bGwmJihFPUEpO2JyZWFrfWUmJkUmJkwuYWx0ZXJuYXRlPT09bnVsbCYmdChnLEUpLGg9YShMLGgsVCkseD09PW51bGw/Uz1MOnguc2libGluZz1MLHg9TCxFPUF9aWYoQy5kb25lKXJldHVybiBuKGcsRSksUWUmJl9vKGcsVCksUztpZihFPT09bnVsbCl7Zm9yKDshQy5kb25lO1QrKyxDPWIubmV4dCgpKUM9dShnLEMudmFsdWUsbSksQyE9PW51bGwmJihoPWEoQyxoLFQpLHg9PT1udWxsP1M9Qzp4LnNpYmxpbmc9Qyx4PUMpO3JldHVybiBRZSYmX28oZyxUKSxTfWZvcihFPXIoZyxFKTshQy5kb25lO1QrKyxDPWIubmV4dCgpKUM9ZihFLGcsVCxDLnZhbHVlLG0pLEMhPT1udWxsJiYoZSYmQy5hbHRlcm5hdGUhPT1udWxsJiZFLmRlbGV0ZShDLmtleT09PW51bGw/VDpDLmtleSksaD1hKEMsaCxUKSx4PT09bnVsbD9TPUM6eC5zaWJsaW5nPUMseD1DKTtyZXR1cm4gZSYmRS5mb3JFYWNoKGZ1bmN0aW9uKE8pe3JldHVybiB0KGcsTyl9KSxRZSYmX28oZyxUKSxTfWZ1bmN0aW9uIHcoZyxoLGIsbSl7aWYodHlwZW9mIGI9PSJvYmplY3QiJiZiIT09bnVsbCYmYi50eXBlPT09a2EmJmIua2V5PT09bnVsbCYmKGI9Yi5wcm9wcy5jaGlsZHJlbiksdHlwZW9mIGI9PSJvYmplY3QiJiZiIT09bnVsbCl7c3dpdGNoKGIuJCR0eXBlb2Ype2Nhc2UgeWw6ZTp7Zm9yKHZhciBTPWIua2V5LHg9aDt4IT09bnVsbDspe2lmKHgua2V5PT09Uyl7aWYoUz1iLnR5cGUsUz09PWthKXtpZih4LnRhZz09PTcpe24oZyx4LnNpYmxpbmcpLGg9byh4LGIucHJvcHMuY2hpbGRyZW4pLGgucmV0dXJuPWcsZz1oO2JyZWFrIGV9fWVsc2UgaWYoeC5lbGVtZW50VHlwZT09PVN8fHR5cGVvZiBTPT0ib2JqZWN0IiYmUyE9PW51bGwmJlMuJCR0eXBlb2Y9PT1ybyYmbnkoUyk9PT14LnR5cGUpe24oZyx4LnNpYmxpbmcpLGg9byh4LGIucHJvcHMpLGgucmVmPUNpKGcseCxiKSxoLnJldHVybj1nLGc9aDticmVhayBlfW4oZyx4KTticmVha31lbHNlIHQoZyx4KTt4PXguc2libGluZ31iLnR5cGU9PT1rYT8oaD1IbyhiLnByb3BzLmNoaWxkcmVuLGcubW9kZSxtLGIua2V5KSxoLnJldHVybj1nLGc9aCk6KG09VmwoYi50eXBlLGIua2V5LGIucHJvcHMsbnVsbCxnLm1vZGUsbSksbS5yZWY9Q2koZyxoLGIpLG0ucmV0dXJuPWcsZz1tKX1yZXR1cm4gaShnKTtjYXNlIHdhOmU6e2Zvcih4PWIua2V5O2ghPT1udWxsOyl7aWYoaC5rZXk9PT14KWlmKGgudGFnPT09NCYmaC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbz09PWIuY29udGFpbmVySW5mbyYmaC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb249PT1iLmltcGxlbWVudGF0aW9uKXtuKGcsaC5zaWJsaW5nKSxoPW8oaCxiLmNoaWxkcmVufHxbXSksaC5yZXR1cm49ZyxnPWg7YnJlYWsgZX1lbHNle24oZyxoKTticmVha31lbHNlIHQoZyxoKTtoPWguc2libGluZ31oPU11KGIsZy5tb2RlLG0pLGgucmV0dXJuPWcsZz1ofXJldHVybiBpKGcpO2Nhc2Ugcm86cmV0dXJuIHg9Yi5faW5pdCx3KGcsaCx4KGIuX3BheWxvYWQpLG0pfWlmKFBpKGIpKXJldHVybiB5KGcsaCxiLG0pO2lmKE5pKGIpKXJldHVybiB2KGcsaCxiLG0pO0lsKGcsYil9cmV0dXJuIHR5cGVvZiBiPT0ic3RyaW5nIiYmYiE9PSIifHx0eXBlb2YgYj09Im51bWJlciI/KGI9IiIrYixoIT09bnVsbCYmaC50YWc9PT02PyhuKGcsaC5zaWJsaW5nKSxoPW8oaCxiKSxoLnJldHVybj1nLGc9aCk6KG4oZyxoKSxoPUN1KGIsZy5tb2RlLG0pLGgucmV0dXJuPWcsZz1oKSxpKGcpKTpuKGcsaCl9cmV0dXJuIHd9dmFyIEJhPVR2KCEwKSxEdj1UdighMSksYWQ9a28obnVsbCksaWQ9bnVsbCxDYT1udWxsLEhwPW51bGw7ZnVuY3Rpb24gS3AoKXtIcD1DYT1pZD1udWxsfWZ1bmN0aW9uIEdwKGUpe3ZhciB0PWFkLmN1cnJlbnQ7SmUoYWQpLGUuX2N1cnJlbnRWYWx1ZT10fWZ1bmN0aW9uIGlwKGUsdCxuKXtmb3IoO2UhPT1udWxsOyl7dmFyIHI9ZS5hbHRlcm5hdGU7aWYoKGUuY2hpbGRMYW5lcyZ0KSE9PXQ/KGUuY2hpbGRMYW5lc3w9dCxyIT09bnVsbCYmKHIuY2hpbGRMYW5lc3w9dCkpOnIhPT1udWxsJiYoci5jaGlsZExhbmVzJnQpIT09dCYmKHIuY2hpbGRMYW5lc3w9dCksZT09PW4pYnJlYWs7ZT1lLnJldHVybn19ZnVuY3Rpb24gX2EoZSx0KXtpZD1lLEhwPUNhPW51bGwsZT1lLmRlcGVuZGVuY2llcyxlIT09bnVsbCYmZS5maXJzdENvbnRleHQhPT1udWxsJiYoZS5sYW5lcyZ0JiYob249ITApLGUuZmlyc3RDb250ZXh0PW51bGwpfWZ1bmN0aW9uIE1uKGUpe3ZhciB0PWUuX2N1cnJlbnRWYWx1ZTtpZihIcCE9PWUpaWYoZT17Y29udGV4dDplLG1lbW9pemVkVmFsdWU6dCxuZXh0Om51bGx9LENhPT09bnVsbCl7aWYoaWQ9PT1udWxsKXRocm93IEVycm9yKFUoMzA4KSk7Q2E9ZSxpZC5kZXBlbmRlbmNpZXM9e2xhbmVzOjAsZmlyc3RDb250ZXh0OmV9fWVsc2UgQ2E9Q2EubmV4dD1lO3JldHVybiB0fXZhciB6bz1udWxsO2Z1bmN0aW9uIFZwKGUpe3pvPT09bnVsbD96bz1bZV06em8ucHVzaChlKX1mdW5jdGlvbiBBdihlLHQsbixyKXt2YXIgbz10LmludGVybGVhdmVkO3JldHVybiBvPT09bnVsbD8obi5uZXh0PW4sVnAodCkpOihuLm5leHQ9by5uZXh0LG8ubmV4dD1uKSx0LmludGVybGVhdmVkPW4sVXIoZSxyKX1mdW5jdGlvbiBVcihlLHQpe2UubGFuZXN8PXQ7dmFyIG49ZS5hbHRlcm5hdGU7Zm9yKG4hPT1udWxsJiYobi5sYW5lc3w9dCksbj1lLGU9ZS5yZXR1cm47ZSE9PW51bGw7KWUuY2hpbGRMYW5lc3w9dCxuPWUuYWx0ZXJuYXRlLG4hPT1udWxsJiYobi5jaGlsZExhbmVzfD10KSxuPWUsZT1lLnJldHVybjtyZXR1cm4gbi50YWc9PT0zP24uc3RhdGVOb2RlOm51bGx9dmFyIG9vPSExO2Z1bmN0aW9uIGpwKGUpe2UudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTplLm1lbW9pemVkU3RhdGUsZmlyc3RCYXNlVXBkYXRlOm51bGwsbGFzdEJhc2VVcGRhdGU6bnVsbCxzaGFyZWQ6e3BlbmRpbmc6bnVsbCxpbnRlcmxlYXZlZDpudWxsLGxhbmVzOjB9LGVmZmVjdHM6bnVsbH19ZnVuY3Rpb24gQ3YoZSx0KXtlPWUudXBkYXRlUXVldWUsdC51cGRhdGVRdWV1ZT09PWUmJih0LnVwZGF0ZVF1ZXVlPXtiYXNlU3RhdGU6ZS5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOmUuZmlyc3RCYXNlVXBkYXRlLGxhc3RCYXNlVXBkYXRlOmUubGFzdEJhc2VVcGRhdGUsc2hhcmVkOmUuc2hhcmVkLGVmZmVjdHM6ZS5lZmZlY3RzfSl9ZnVuY3Rpb24gUHIoZSx0KXtyZXR1cm57ZXZlbnRUaW1lOmUsbGFuZTp0LHRhZzowLHBheWxvYWQ6bnVsbCxjYWxsYmFjazpudWxsLG5leHQ6bnVsbH19ZnVuY3Rpb24gbW8oZSx0LG4pe3ZhciByPWUudXBkYXRlUXVldWU7aWYocj09PW51bGwpcmV0dXJuIG51bGw7aWYocj1yLnNoYXJlZCxPZSYyKXt2YXIgbz1yLnBlbmRpbmc7cmV0dXJuIG89PT1udWxsP3QubmV4dD10Oih0Lm5leHQ9by5uZXh0LG8ubmV4dD10KSxyLnBlbmRpbmc9dCxVcihlLG4pfXJldHVybiBvPXIuaW50ZXJsZWF2ZWQsbz09PW51bGw/KHQubmV4dD10LFZwKHIpKToodC5uZXh0PW8ubmV4dCxvLm5leHQ9dCksci5pbnRlcmxlYXZlZD10LFVyKGUsbil9ZnVuY3Rpb24gemwoZSx0LG4pe2lmKHQ9dC51cGRhdGVRdWV1ZSx0IT09bnVsbCYmKHQ9dC5zaGFyZWQsKG4mNDE5NDI0MCkhPT0wKSl7dmFyIHI9dC5sYW5lcztyJj1lLnBlbmRpbmdMYW5lcyxufD1yLHQubGFuZXM9bixPcChlLG4pfX1mdW5jdGlvbiByeShlLHQpe3ZhciBuPWUudXBkYXRlUXVldWUscj1lLmFsdGVybmF0ZTtpZihyIT09bnVsbCYmKHI9ci51cGRhdGVRdWV1ZSxuPT09cikpe3ZhciBvPW51bGwsYT1udWxsO2lmKG49bi5maXJzdEJhc2VVcGRhdGUsbiE9PW51bGwpe2Rve3ZhciBpPXtldmVudFRpbWU6bi5ldmVudFRpbWUsbGFuZTpuLmxhbmUsdGFnOm4udGFnLHBheWxvYWQ6bi5wYXlsb2FkLGNhbGxiYWNrOm4uY2FsbGJhY2ssbmV4dDpudWxsfTthPT09bnVsbD9vPWE9aTphPWEubmV4dD1pLG49bi5uZXh0fXdoaWxlKG4hPT1udWxsKTthPT09bnVsbD9vPWE9dDphPWEubmV4dD10fWVsc2Ugbz1hPXQ7bj17YmFzZVN0YXRlOnIuYmFzZVN0YXRlLGZpcnN0QmFzZVVwZGF0ZTpvLGxhc3RCYXNlVXBkYXRlOmEsc2hhcmVkOnIuc2hhcmVkLGVmZmVjdHM6ci5lZmZlY3RzfSxlLnVwZGF0ZVF1ZXVlPW47cmV0dXJufWU9bi5sYXN0QmFzZVVwZGF0ZSxlPT09bnVsbD9uLmZpcnN0QmFzZVVwZGF0ZT10OmUubmV4dD10LG4ubGFzdEJhc2VVcGRhdGU9dH1mdW5jdGlvbiBzZChlLHQsbixyKXt2YXIgbz1lLnVwZGF0ZVF1ZXVlO29vPSExO3ZhciBhPW8uZmlyc3RCYXNlVXBkYXRlLGk9by5sYXN0QmFzZVVwZGF0ZSxzPW8uc2hhcmVkLnBlbmRpbmc7aWYocyE9PW51bGwpe28uc2hhcmVkLnBlbmRpbmc9bnVsbDt2YXIgbD1zLGQ9bC5uZXh0O2wubmV4dD1udWxsLGk9PT1udWxsP2E9ZDppLm5leHQ9ZCxpPWw7dmFyIGM9ZS5hbHRlcm5hdGU7YyE9PW51bGwmJihjPWMudXBkYXRlUXVldWUscz1jLmxhc3RCYXNlVXBkYXRlLHMhPT1pJiYocz09PW51bGw/Yy5maXJzdEJhc2VVcGRhdGU9ZDpzLm5leHQ9ZCxjLmxhc3RCYXNlVXBkYXRlPWwpKX1pZihhIT09bnVsbCl7dmFyIHU9by5iYXNlU3RhdGU7aT0wLGM9ZD1sPW51bGwscz1hO2Rve3ZhciBwPXMubGFuZSxmPXMuZXZlbnRUaW1lO2lmKChyJnApPT09cCl7YyE9PW51bGwmJihjPWMubmV4dD17ZXZlbnRUaW1lOmYsbGFuZTowLHRhZzpzLnRhZyxwYXlsb2FkOnMucGF5bG9hZCxjYWxsYmFjazpzLmNhbGxiYWNrLG5leHQ6bnVsbH0pO2U6e3ZhciB5PWUsdj1zO3N3aXRjaChwPXQsZj1uLHYudGFnKXtjYXNlIDE6aWYoeT12LnBheWxvYWQsdHlwZW9mIHk9PSJmdW5jdGlvbiIpe3U9eS5jYWxsKGYsdSxwKTticmVhayBlfXU9eTticmVhayBlO2Nhc2UgMzp5LmZsYWdzPXkuZmxhZ3MmLTY1NTM3fDEyODtjYXNlIDA6aWYoeT12LnBheWxvYWQscD10eXBlb2YgeT09ImZ1bmN0aW9uIj95LmNhbGwoZix1LHApOnkscD09bnVsbClicmVhayBlO3U9b3Qoe30sdSxwKTticmVhayBlO2Nhc2UgMjpvbz0hMH19cy5jYWxsYmFjayE9PW51bGwmJnMubGFuZSE9PTAmJihlLmZsYWdzfD02NCxwPW8uZWZmZWN0cyxwPT09bnVsbD9vLmVmZmVjdHM9W3NdOnAucHVzaChzKSl9ZWxzZSBmPXtldmVudFRpbWU6ZixsYW5lOnAsdGFnOnMudGFnLHBheWxvYWQ6cy5wYXlsb2FkLGNhbGxiYWNrOnMuY2FsbGJhY2ssbmV4dDpudWxsfSxjPT09bnVsbD8oZD1jPWYsbD11KTpjPWMubmV4dD1mLGl8PXA7aWYocz1zLm5leHQscz09PW51bGwpe2lmKHM9by5zaGFyZWQucGVuZGluZyxzPT09bnVsbClicmVhaztwPXMscz1wLm5leHQscC5uZXh0PW51bGwsby5sYXN0QmFzZVVwZGF0ZT1wLG8uc2hhcmVkLnBlbmRpbmc9bnVsbH19d2hpbGUoITApO2lmKGM9PT1udWxsJiYobD11KSxvLmJhc2VTdGF0ZT1sLG8uZmlyc3RCYXNlVXBkYXRlPWQsby5sYXN0QmFzZVVwZGF0ZT1jLHQ9by5zaGFyZWQuaW50ZXJsZWF2ZWQsdCE9PW51bGwpe289dDtkbyBpfD1vLmxhbmUsbz1vLm5leHQ7d2hpbGUobyE9PXQpfWVsc2UgYT09PW51bGwmJihvLnNoYXJlZC5sYW5lcz0wKTtqb3w9aSxlLmxhbmVzPWksZS5tZW1vaXplZFN0YXRlPXV9fWZ1bmN0aW9uIG95KGUsdCxuKXtpZihlPXQuZWZmZWN0cyx0LmVmZmVjdHM9bnVsbCxlIT09bnVsbClmb3IodD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgcj1lW3RdLG89ci5jYWxsYmFjaztpZihvIT09bnVsbCl7aWYoci5jYWxsYmFjaz1udWxsLHI9bix0eXBlb2YgbyE9ImZ1bmN0aW9uIil0aHJvdyBFcnJvcihVKDE5MSxvKSk7by5jYWxsKHIpfX19dmFyIHBzPXt9LGJyPWtvKHBzKSxycz1rbyhwcyksb3M9a28ocHMpO2Z1bmN0aW9uIFdvKGUpe2lmKGU9PT1wcyl0aHJvdyBFcnJvcihVKDE3NCkpO3JldHVybiBlfWZ1bmN0aW9uIFlwKGUsdCl7c3dpdGNoKFllKG9zLHQpLFllKHJzLGUpLFllKGJyLHBzKSxlPXQubm9kZVR5cGUsZSl7Y2FzZSA5OmNhc2UgMTE6dD0odD10LmRvY3VtZW50RWxlbWVudCk/dC5uYW1lc3BhY2VVUkk6V3UobnVsbCwiIik7YnJlYWs7ZGVmYXVsdDplPWU9PT04P3QucGFyZW50Tm9kZTp0LHQ9ZS5uYW1lc3BhY2VVUkl8fG51bGwsZT1lLnRhZ05hbWUsdD1XdSh0LGUpfUplKGJyKSxZZShicix0KX1mdW5jdGlvbiBIYSgpe0plKGJyKSxKZShycyksSmUob3MpfWZ1bmN0aW9uIE12KGUpe1dvKG9zLmN1cnJlbnQpO3ZhciB0PVdvKGJyLmN1cnJlbnQpLG49V3UodCxlLnR5cGUpO3QhPT1uJiYoWWUocnMsZSksWWUoYnIsbikpfWZ1bmN0aW9uIHFwKGUpe3JzLmN1cnJlbnQ9PT1lJiYoSmUoYnIpLEplKHJzKSl9dmFyIG50PWtvKDApO2Z1bmN0aW9uIGxkKGUpe2Zvcih2YXIgdD1lO3QhPT1udWxsOyl7aWYodC50YWc9PT0xMyl7dmFyIG49dC5tZW1vaXplZFN0YXRlO2lmKG4hPT1udWxsJiYobj1uLmRlaHlkcmF0ZWQsbj09PW51bGx8fG4uZGF0YT09PSIkPyJ8fG4uZGF0YT09PSIkISIpKXJldHVybiB0fWVsc2UgaWYodC50YWc9PT0xOSYmdC5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyIT09dm9pZCAwKXtpZih0LmZsYWdzJjEyOClyZXR1cm4gdH1lbHNlIGlmKHQuY2hpbGQhPT1udWxsKXt0LmNoaWxkLnJldHVybj10LHQ9dC5jaGlsZDtjb250aW51ZX1pZih0PT09ZSlicmVhaztmb3IoO3Quc2libGluZz09PW51bGw7KXtpZih0LnJldHVybj09PW51bGx8fHQucmV0dXJuPT09ZSlyZXR1cm4gbnVsbDt0PXQucmV0dXJufXQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9cmV0dXJuIG51bGx9dmFyIFN1PVtdO2Z1bmN0aW9uIFhwKCl7Zm9yKHZhciBlPTA7ZTxTdS5sZW5ndGg7ZSsrKVN1W2VdLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5PW51bGw7U3UubGVuZ3RoPTB9dmFyIFdsPXpyLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsRXU9enIuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsVm89MCxydD1udWxsLHl0PW51bGwsTnQ9bnVsbCxkZD0hMSxIaT0hMSxhcz0wLEFOPTA7ZnVuY3Rpb24genQoKXt0aHJvdyBFcnJvcihVKDMyMSkpfWZ1bmN0aW9uICRwKGUsdCl7aWYodD09PW51bGwpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aCYmbjxlLmxlbmd0aDtuKyspaWYoIVFuKGVbbl0sdFtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gSnAoZSx0LG4scixvLGEpe2lmKFZvPWEscnQ9dCx0Lm1lbW9pemVkU3RhdGU9bnVsbCx0LnVwZGF0ZVF1ZXVlPW51bGwsdC5sYW5lcz0wLFdsLmN1cnJlbnQ9ZT09PW51bGx8fGUubWVtb2l6ZWRTdGF0ZT09PW51bGw/SU46Uk4sZT1uKHIsbyksSGkpe2E9MDtkb3tpZihIaT0hMSxhcz0wLDI1PD1hKXRocm93IEVycm9yKFUoMzAxKSk7YSs9MSxOdD15dD1udWxsLHQudXBkYXRlUXVldWU9bnVsbCxXbC5jdXJyZW50PVBOLGU9bihyLG8pfXdoaWxlKEhpKX1pZihXbC5jdXJyZW50PWNkLHQ9eXQhPT1udWxsJiZ5dC5uZXh0IT09bnVsbCxWbz0wLE50PXl0PXJ0PW51bGwsZGQ9ITEsdCl0aHJvdyBFcnJvcihVKDMwMCkpO3JldHVybiBlfWZ1bmN0aW9uIFFwKCl7dmFyIGU9YXMhPT0wO3JldHVybiBhcz0wLGV9ZnVuY3Rpb24gZ3IoKXt2YXIgZT17bWVtb2l6ZWRTdGF0ZTpudWxsLGJhc2VTdGF0ZTpudWxsLGJhc2VRdWV1ZTpudWxsLHF1ZXVlOm51bGwsbmV4dDpudWxsfTtyZXR1cm4gTnQ9PT1udWxsP3J0Lm1lbW9pemVkU3RhdGU9TnQ9ZTpOdD1OdC5uZXh0PWUsTnR9ZnVuY3Rpb24gT24oKXtpZih5dD09PW51bGwpe3ZhciBlPXJ0LmFsdGVybmF0ZTtlPWUhPT1udWxsP2UubWVtb2l6ZWRTdGF0ZTpudWxsfWVsc2UgZT15dC5uZXh0O3ZhciB0PU50PT09bnVsbD9ydC5tZW1vaXplZFN0YXRlOk50Lm5leHQ7aWYodCE9PW51bGwpTnQ9dCx5dD1lO2Vsc2V7aWYoZT09PW51bGwpdGhyb3cgRXJyb3IoVSgzMTApKTt5dD1lLGU9e21lbW9pemVkU3RhdGU6eXQubWVtb2l6ZWRTdGF0ZSxiYXNlU3RhdGU6eXQuYmFzZVN0YXRlLGJhc2VRdWV1ZTp5dC5iYXNlUXVldWUscXVldWU6eXQucXVldWUsbmV4dDpudWxsfSxOdD09PW51bGw/cnQubWVtb2l6ZWRTdGF0ZT1OdD1lOk50PU50Lm5leHQ9ZX1yZXR1cm4gTnR9ZnVuY3Rpb24gaXMoZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChlKTp0fWZ1bmN0aW9uIE51KGUpe3ZhciB0PU9uKCksbj10LnF1ZXVlO2lmKG49PT1udWxsKXRocm93IEVycm9yKFUoMzExKSk7bi5sYXN0UmVuZGVyZWRSZWR1Y2VyPWU7dmFyIHI9eXQsbz1yLmJhc2VRdWV1ZSxhPW4ucGVuZGluZztpZihhIT09bnVsbCl7aWYobyE9PW51bGwpe3ZhciBpPW8ubmV4dDtvLm5leHQ9YS5uZXh0LGEubmV4dD1pfXIuYmFzZVF1ZXVlPW89YSxuLnBlbmRpbmc9bnVsbH1pZihvIT09bnVsbCl7YT1vLm5leHQscj1yLmJhc2VTdGF0ZTt2YXIgcz1pPW51bGwsbD1udWxsLGQ9YTtkb3t2YXIgYz1kLmxhbmU7aWYoKFZvJmMpPT09YylsIT09bnVsbCYmKGw9bC5uZXh0PXtsYW5lOjAsYWN0aW9uOmQuYWN0aW9uLGhhc0VhZ2VyU3RhdGU6ZC5oYXNFYWdlclN0YXRlLGVhZ2VyU3RhdGU6ZC5lYWdlclN0YXRlLG5leHQ6bnVsbH0pLHI9ZC5oYXNFYWdlclN0YXRlP2QuZWFnZXJTdGF0ZTplKHIsZC5hY3Rpb24pO2Vsc2V7dmFyIHU9e2xhbmU6YyxhY3Rpb246ZC5hY3Rpb24saGFzRWFnZXJTdGF0ZTpkLmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTpkLmVhZ2VyU3RhdGUsbmV4dDpudWxsfTtsPT09bnVsbD8ocz1sPXUsaT1yKTpsPWwubmV4dD11LHJ0LmxhbmVzfD1jLGpvfD1jfWQ9ZC5uZXh0fXdoaWxlKGQhPT1udWxsJiZkIT09YSk7bD09PW51bGw/aT1yOmwubmV4dD1zLFFuKHIsdC5tZW1vaXplZFN0YXRlKXx8KG9uPSEwKSx0Lm1lbW9pemVkU3RhdGU9cix0LmJhc2VTdGF0ZT1pLHQuYmFzZVF1ZXVlPWwsbi5sYXN0UmVuZGVyZWRTdGF0ZT1yfWlmKGU9bi5pbnRlcmxlYXZlZCxlIT09bnVsbCl7bz1lO2RvIGE9by5sYW5lLHJ0LmxhbmVzfD1hLGpvfD1hLG89by5uZXh0O3doaWxlKG8hPT1lKX1lbHNlIG89PT1udWxsJiYobi5sYW5lcz0wKTtyZXR1cm5bdC5tZW1vaXplZFN0YXRlLG4uZGlzcGF0Y2hdfWZ1bmN0aW9uIFR1KGUpe3ZhciB0PU9uKCksbj10LnF1ZXVlO2lmKG49PT1udWxsKXRocm93IEVycm9yKFUoMzExKSk7bi5sYXN0UmVuZGVyZWRSZWR1Y2VyPWU7dmFyIHI9bi5kaXNwYXRjaCxvPW4ucGVuZGluZyxhPXQubWVtb2l6ZWRTdGF0ZTtpZihvIT09bnVsbCl7bi5wZW5kaW5nPW51bGw7dmFyIGk9bz1vLm5leHQ7ZG8gYT1lKGEsaS5hY3Rpb24pLGk9aS5uZXh0O3doaWxlKGkhPT1vKTtRbihhLHQubWVtb2l6ZWRTdGF0ZSl8fChvbj0hMCksdC5tZW1vaXplZFN0YXRlPWEsdC5iYXNlUXVldWU9PT1udWxsJiYodC5iYXNlU3RhdGU9YSksbi5sYXN0UmVuZGVyZWRTdGF0ZT1hfXJldHVyblthLHJdfWZ1bmN0aW9uIE92KCl7fWZ1bmN0aW9uIEl2KGUsdCl7dmFyIG49cnQscj1PbigpLG89dCgpLGE9IVFuKHIubWVtb2l6ZWRTdGF0ZSxvKTtpZihhJiYoci5tZW1vaXplZFN0YXRlPW8sb249ITApLHI9ci5xdWV1ZSxacChMdi5iaW5kKG51bGwsbixyLGUpLFtlXSksci5nZXRTbmFwc2hvdCE9PXR8fGF8fE50IT09bnVsbCYmTnQubWVtb2l6ZWRTdGF0ZS50YWcmMSl7aWYobi5mbGFnc3w9MjA0OCxzcyg5LFB2LmJpbmQobnVsbCxuLHIsbyx0KSx2b2lkIDAsbnVsbCksVHQ9PT1udWxsKXRocm93IEVycm9yKFUoMzQ5KSk7Vm8mMzB8fFJ2KG4sdCxvKX1yZXR1cm4gb31mdW5jdGlvbiBSdihlLHQsbil7ZS5mbGFnc3w9MTYzODQsZT17Z2V0U25hcHNob3Q6dCx2YWx1ZTpufSx0PXJ0LnVwZGF0ZVF1ZXVlLHQ9PT1udWxsPyh0PXtsYXN0RWZmZWN0Om51bGwsc3RvcmVzOm51bGx9LHJ0LnVwZGF0ZVF1ZXVlPXQsdC5zdG9yZXM9W2VdKToobj10LnN0b3JlcyxuPT09bnVsbD90LnN0b3Jlcz1bZV06bi5wdXNoKGUpKX1mdW5jdGlvbiBQdihlLHQsbixyKXt0LnZhbHVlPW4sdC5nZXRTbmFwc2hvdD1yLF92KHQpJiZVdihlKX1mdW5jdGlvbiBMdihlLHQsbil7cmV0dXJuIG4oZnVuY3Rpb24oKXtfdih0KSYmVXYoZSl9KX1mdW5jdGlvbiBfdihlKXt2YXIgdD1lLmdldFNuYXBzaG90O2U9ZS52YWx1ZTt0cnl7dmFyIG49dCgpO3JldHVybiFRbihlLG4pfWNhdGNoe3JldHVybiEwfX1mdW5jdGlvbiBVdihlKXt2YXIgdD1VcihlLDEpO3QhPT1udWxsJiZKbih0LGUsMSwtMSl9ZnVuY3Rpb24gYXkoZSl7dmFyIHQ9Z3IoKTtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiImJihlPWUoKSksdC5tZW1vaXplZFN0YXRlPXQuYmFzZVN0YXRlPWUsZT17cGVuZGluZzpudWxsLGludGVybGVhdmVkOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6aXMsbGFzdFJlbmRlcmVkU3RhdGU6ZX0sdC5xdWV1ZT1lLGU9ZS5kaXNwYXRjaD1PTi5iaW5kKG51bGwscnQsZSksW3QubWVtb2l6ZWRTdGF0ZSxlXX1mdW5jdGlvbiBzcyhlLHQsbixyKXtyZXR1cm4gZT17dGFnOmUsY3JlYXRlOnQsZGVzdHJveTpuLGRlcHM6cixuZXh0Om51bGx9LHQ9cnQudXBkYXRlUXVldWUsdD09PW51bGw/KHQ9e2xhc3RFZmZlY3Q6bnVsbCxzdG9yZXM6bnVsbH0scnQudXBkYXRlUXVldWU9dCx0Lmxhc3RFZmZlY3Q9ZS5uZXh0PWUpOihuPXQubGFzdEVmZmVjdCxuPT09bnVsbD90Lmxhc3RFZmZlY3Q9ZS5uZXh0PWU6KHI9bi5uZXh0LG4ubmV4dD1lLGUubmV4dD1yLHQubGFzdEVmZmVjdD1lKSksZX1mdW5jdGlvbiBGdigpe3JldHVybiBPbigpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gQmwoZSx0LG4scil7dmFyIG89Z3IoKTtydC5mbGFnc3w9ZSxvLm1lbW9pemVkU3RhdGU9c3MoMXx0LG4sdm9pZCAwLHI9PT12b2lkIDA/bnVsbDpyKX1mdW5jdGlvbiB4ZChlLHQsbixyKXt2YXIgbz1PbigpO3I9cj09PXZvaWQgMD9udWxsOnI7dmFyIGE9dm9pZCAwO2lmKHl0IT09bnVsbCl7dmFyIGk9eXQubWVtb2l6ZWRTdGF0ZTtpZihhPWkuZGVzdHJveSxyIT09bnVsbCYmJHAocixpLmRlcHMpKXtvLm1lbW9pemVkU3RhdGU9c3ModCxuLGEscik7cmV0dXJufX1ydC5mbGFnc3w9ZSxvLm1lbW9pemVkU3RhdGU9c3MoMXx0LG4sYSxyKX1mdW5jdGlvbiBpeShlLHQpe3JldHVybiBCbCg4MzkwNjU2LDgsZSx0KX1mdW5jdGlvbiBacChlLHQpe3JldHVybiB4ZCgyMDQ4LDgsZSx0KX1mdW5jdGlvbiB6dihlLHQpe3JldHVybiB4ZCg0LDIsZSx0KX1mdW5jdGlvbiBXdihlLHQpe3JldHVybiB4ZCg0LDQsZSx0KX1mdW5jdGlvbiBCdihlLHQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXJldHVybiBlPWUoKSx0KGUpLGZ1bmN0aW9uKCl7dChudWxsKX07aWYodCE9bnVsbClyZXR1cm4gZT1lKCksdC5jdXJyZW50PWUsZnVuY3Rpb24oKXt0LmN1cnJlbnQ9bnVsbH19ZnVuY3Rpb24gSHYoZSx0LG4pe3JldHVybiBuPW4hPW51bGw/bi5jb25jYXQoW2VdKTpudWxsLHhkKDQsNCxCdi5iaW5kKG51bGwsdCxlKSxuKX1mdW5jdGlvbiBlZigpe31mdW5jdGlvbiBLdihlLHQpe3ZhciBuPU9uKCk7dD10PT09dm9pZCAwP251bGw6dDt2YXIgcj1uLm1lbW9pemVkU3RhdGU7cmV0dXJuIHIhPT1udWxsJiZ0IT09bnVsbCYmJHAodCxyWzFdKT9yWzBdOihuLm1lbW9pemVkU3RhdGU9W2UsdF0sZSl9ZnVuY3Rpb24gR3YoZSx0KXt2YXIgbj1PbigpO3Q9dD09PXZvaWQgMD9udWxsOnQ7dmFyIHI9bi5tZW1vaXplZFN0YXRlO3JldHVybiByIT09bnVsbCYmdCE9PW51bGwmJiRwKHQsclsxXSk/clswXTooZT1lKCksbi5tZW1vaXplZFN0YXRlPVtlLHRdLGUpfWZ1bmN0aW9uIFZ2KGUsdCxuKXtyZXR1cm4gVm8mMjE/KFFuKG4sdCl8fChuPSR5KCkscnQubGFuZXN8PW4sam98PW4sZS5iYXNlU3RhdGU9ITApLHQpOihlLmJhc2VTdGF0ZSYmKGUuYmFzZVN0YXRlPSExLG9uPSEwKSxlLm1lbW9pemVkU3RhdGU9bil9ZnVuY3Rpb24gQ04oZSx0KXt2YXIgbj1XZTtXZT1uIT09MCYmND5uP246NCxlKCEwKTt2YXIgcj1FdS50cmFuc2l0aW9uO0V1LnRyYW5zaXRpb249e307dHJ5e2UoITEpLHQoKX1maW5hbGx5e1dlPW4sRXUudHJhbnNpdGlvbj1yfX1mdW5jdGlvbiBqdigpe3JldHVybiBPbigpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gTU4oZSx0LG4pe3ZhciByPWdvKGUpO2lmKG49e2xhbmU6cixhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9LFl2KGUpKXF2KHQsbik7ZWxzZSBpZihuPUF2KGUsdCxuLHIpLG4hPT1udWxsKXt2YXIgbz1YdCgpO0puKG4sZSxyLG8pLFh2KG4sdCxyKX19ZnVuY3Rpb24gT04oZSx0LG4pe3ZhciByPWdvKGUpLG89e2xhbmU6cixhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9O2lmKFl2KGUpKXF2KHQsbyk7ZWxzZXt2YXIgYT1lLmFsdGVybmF0ZTtpZihlLmxhbmVzPT09MCYmKGE9PT1udWxsfHxhLmxhbmVzPT09MCkmJihhPXQubGFzdFJlbmRlcmVkUmVkdWNlcixhIT09bnVsbCkpdHJ5e3ZhciBpPXQubGFzdFJlbmRlcmVkU3RhdGUscz1hKGksbik7aWYoby5oYXNFYWdlclN0YXRlPSEwLG8uZWFnZXJTdGF0ZT1zLFFuKHMsaSkpe3ZhciBsPXQuaW50ZXJsZWF2ZWQ7bD09PW51bGw/KG8ubmV4dD1vLFZwKHQpKTooby5uZXh0PWwubmV4dCxsLm5leHQ9byksdC5pbnRlcmxlYXZlZD1vO3JldHVybn19Y2F0Y2h7fWZpbmFsbHl7fW49QXYoZSx0LG8sciksbiE9PW51bGwmJihvPVh0KCksSm4obixlLHIsbyksWHYobix0LHIpKX19ZnVuY3Rpb24gWXYoZSl7dmFyIHQ9ZS5hbHRlcm5hdGU7cmV0dXJuIGU9PT1ydHx8dCE9PW51bGwmJnQ9PT1ydH1mdW5jdGlvbiBxdihlLHQpe0hpPWRkPSEwO3ZhciBuPWUucGVuZGluZztuPT09bnVsbD90Lm5leHQ9dDoodC5uZXh0PW4ubmV4dCxuLm5leHQ9dCksZS5wZW5kaW5nPXR9ZnVuY3Rpb24gWHYoZSx0LG4pe2lmKG4mNDE5NDI0MCl7dmFyIHI9dC5sYW5lcztyJj1lLnBlbmRpbmdMYW5lcyxufD1yLHQubGFuZXM9bixPcChlLG4pfX12YXIgY2Q9e3JlYWRDb250ZXh0Ok1uLHVzZUNhbGxiYWNrOnp0LHVzZUNvbnRleHQ6enQsdXNlRWZmZWN0Onp0LHVzZUltcGVyYXRpdmVIYW5kbGU6enQsdXNlSW5zZXJ0aW9uRWZmZWN0Onp0LHVzZUxheW91dEVmZmVjdDp6dCx1c2VNZW1vOnp0LHVzZVJlZHVjZXI6enQsdXNlUmVmOnp0LHVzZVN0YXRlOnp0LHVzZURlYnVnVmFsdWU6enQsdXNlRGVmZXJyZWRWYWx1ZTp6dCx1c2VUcmFuc2l0aW9uOnp0LHVzZU11dGFibGVTb3VyY2U6enQsdXNlU3luY0V4dGVybmFsU3RvcmU6enQsdXNlSWQ6enQsdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxJTj17cmVhZENvbnRleHQ6TW4sdXNlQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ3IoKS5tZW1vaXplZFN0YXRlPVtlLHQ9PT12b2lkIDA/bnVsbDp0XSxlfSx1c2VDb250ZXh0Ok1uLHVzZUVmZmVjdDppeSx1c2VJbXBlcmF0aXZlSGFuZGxlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uIT1udWxsP24uY29uY2F0KFtlXSk6bnVsbCxCbCg0MTk0MzA4LDQsQnYuYmluZChudWxsLHQsZSksbil9LHVzZUxheW91dEVmZmVjdDpmdW5jdGlvbihlLHQpe3JldHVybiBCbCg0MTk0MzA4LDQsZSx0KX0sdXNlSW5zZXJ0aW9uRWZmZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEJsKDQsMixlLHQpfSx1c2VNZW1vOmZ1bmN0aW9uKGUsdCl7dmFyIG49Z3IoKTtyZXR1cm4gdD10PT09dm9pZCAwP251bGw6dCxlPWUoKSxuLm1lbW9pemVkU3RhdGU9W2UsdF0sZX0sdXNlUmVkdWNlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9Z3IoKTtyZXR1cm4gdD1uIT09dm9pZCAwP24odCk6dCxyLm1lbW9pemVkU3RhdGU9ci5iYXNlU3RhdGU9dCxlPXtwZW5kaW5nOm51bGwsaW50ZXJsZWF2ZWQ6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjplLGxhc3RSZW5kZXJlZFN0YXRlOnR9LHIucXVldWU9ZSxlPWUuZGlzcGF0Y2g9TU4uYmluZChudWxsLHJ0LGUpLFtyLm1lbW9pemVkU3RhdGUsZV19LHVzZVJlZjpmdW5jdGlvbihlKXt2YXIgdD1ncigpO3JldHVybiBlPXtjdXJyZW50OmV9LHQubWVtb2l6ZWRTdGF0ZT1lfSx1c2VTdGF0ZTpheSx1c2VEZWJ1Z1ZhbHVlOmVmLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGdyKCkubWVtb2l6ZWRTdGF0ZT1lfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9YXkoITEpLHQ9ZVswXTtyZXR1cm4gZT1DTi5iaW5kKG51bGwsZVsxXSksZ3IoKS5tZW1vaXplZFN0YXRlPWUsW3QsZV19LHVzZU11dGFibGVTb3VyY2U6ZnVuY3Rpb24oKXt9LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1ydCxvPWdyKCk7aWYoUWUpe2lmKG49PT12b2lkIDApdGhyb3cgRXJyb3IoVSg0MDcpKTtuPW4oKX1lbHNle2lmKG49dCgpLFR0PT09bnVsbCl0aHJvdyBFcnJvcihVKDM0OSkpO1ZvJjMwfHxSdihyLHQsbil9by5tZW1vaXplZFN0YXRlPW47dmFyIGE9e3ZhbHVlOm4sZ2V0U25hcHNob3Q6dH07cmV0dXJuIG8ucXVldWU9YSxpeShMdi5iaW5kKG51bGwscixhLGUpLFtlXSksci5mbGFnc3w9MjA0OCxzcyg5LFB2LmJpbmQobnVsbCxyLGEsbix0KSx2b2lkIDAsbnVsbCksbn0sdXNlSWQ6ZnVuY3Rpb24oKXt2YXIgZT1ncigpLHQ9VHQuaWRlbnRpZmllclByZWZpeDtpZihRZSl7dmFyIG49UnIscj1JcjtuPShyJn4oMTw8MzItJG4ociktMSkpLnRvU3RyaW5nKDMyKStuLHQ9IjoiK3QrIlIiK24sbj1hcysrLDA8biYmKHQrPSJIIituLnRvU3RyaW5nKDMyKSksdCs9IjoifWVsc2Ugbj1BTisrLHQ9IjoiK3QrInIiK24udG9TdHJpbmcoMzIpKyI6IjtyZXR1cm4gZS5tZW1vaXplZFN0YXRlPXR9LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sUk49e3JlYWRDb250ZXh0Ok1uLHVzZUNhbGxiYWNrOkt2LHVzZUNvbnRleHQ6TW4sdXNlRWZmZWN0OlpwLHVzZUltcGVyYXRpdmVIYW5kbGU6SHYsdXNlSW5zZXJ0aW9uRWZmZWN0Onp2LHVzZUxheW91dEVmZmVjdDpXdix1c2VNZW1vOkd2LHVzZVJlZHVjZXI6TnUsdXNlUmVmOkZ2LHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIE51KGlzKX0sdXNlRGVidWdWYWx1ZTplZix1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PU9uKCk7cmV0dXJuIFZ2KHQseXQubWVtb2l6ZWRTdGF0ZSxlKX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPU51KGlzKVswXSx0PU9uKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bZSx0XX0sdXNlTXV0YWJsZVNvdXJjZTpPdix1c2VTeW5jRXh0ZXJuYWxTdG9yZTpJdix1c2VJZDpqdix1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LFBOPXtyZWFkQ29udGV4dDpNbix1c2VDYWxsYmFjazpLdix1c2VDb250ZXh0Ok1uLHVzZUVmZmVjdDpacCx1c2VJbXBlcmF0aXZlSGFuZGxlOkh2LHVzZUluc2VydGlvbkVmZmVjdDp6dix1c2VMYXlvdXRFZmZlY3Q6V3YsdXNlTWVtbzpHdix1c2VSZWR1Y2VyOlR1LHVzZVJlZjpGdix1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBUdShpcyl9LHVzZURlYnVnVmFsdWU6ZWYsdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1PbigpO3JldHVybiB5dD09PW51bGw/dC5tZW1vaXplZFN0YXRlPWU6VnYodCx5dC5tZW1vaXplZFN0YXRlLGUpfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9VHUoaXMpWzBdLHQ9T24oKS5tZW1vaXplZFN0YXRlO3JldHVybltlLHRdfSx1c2VNdXRhYmxlU291cmNlOk92LHVzZVN5bmNFeHRlcm5hbFN0b3JlOkl2LHVzZUlkOmp2LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX07ZnVuY3Rpb24gWW4oZSx0KXtpZihlJiZlLmRlZmF1bHRQcm9wcyl7dD1vdCh7fSx0KSxlPWUuZGVmYXVsdFByb3BzO2Zvcih2YXIgbiBpbiBlKXRbbl09PT12b2lkIDAmJih0W25dPWVbbl0pO3JldHVybiB0fXJldHVybiB0fWZ1bmN0aW9uIHNwKGUsdCxuLHIpe3Q9ZS5tZW1vaXplZFN0YXRlLG49bihyLHQpLG49bj09bnVsbD90Om90KHt9LHQsbiksZS5tZW1vaXplZFN0YXRlPW4sZS5sYW5lcz09PTAmJihlLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1uKX12YXIgU2Q9e2lzTW91bnRlZDpmdW5jdGlvbihlKXtyZXR1cm4oZT1lLl9yZWFjdEludGVybmFscyk/WG8oZSk9PT1lOiExfSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oZSx0LG4pe2U9ZS5fcmVhY3RJbnRlcm5hbHM7dmFyIHI9WHQoKSxvPWdvKGUpLGE9UHIocixvKTthLnBheWxvYWQ9dCxuIT1udWxsJiYoYS5jYWxsYmFjaz1uKSx0PW1vKGUsYSxvKSx0IT09bnVsbCYmKEpuKHQsZSxvLHIpLHpsKHQsZSxvKSl9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oZSx0LG4pe2U9ZS5fcmVhY3RJbnRlcm5hbHM7dmFyIHI9WHQoKSxvPWdvKGUpLGE9UHIocixvKTthLnRhZz0xLGEucGF5bG9hZD10LG4hPW51bGwmJihhLmNhbGxiYWNrPW4pLHQ9bW8oZSxhLG8pLHQhPT1udWxsJiYoSm4odCxlLG8sciksemwodCxlLG8pKX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKGUsdCl7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgbj1YdCgpLHI9Z28oZSksbz1QcihuLHIpO28udGFnPTIsdCE9bnVsbCYmKG8uY2FsbGJhY2s9dCksdD1tbyhlLG8sciksdCE9PW51bGwmJihKbih0LGUscixuKSx6bCh0LGUscikpfX07ZnVuY3Rpb24gc3koZSx0LG4scixvLGEsaSl7cmV0dXJuIGU9ZS5zdGF0ZU5vZGUsdHlwZW9mIGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPT0iZnVuY3Rpb24iP2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKHIsYSxpKTp0LnByb3RvdHlwZSYmdC5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQ/IVppKG4scil8fCFaaShvLGEpOiEwfWZ1bmN0aW9uICR2KGUsdCxuKXt2YXIgcj0hMSxvPWJvLGE9dC5jb250ZXh0VHlwZTtyZXR1cm4gdHlwZW9mIGE9PSJvYmplY3QiJiZhIT09bnVsbD9hPU1uKGEpOihvPXNuKHQpP0tvOkh0LmN1cnJlbnQscj10LmNvbnRleHRUeXBlcyxhPShyPXIhPW51bGwpP3phKGUsbyk6Ym8pLHQ9bmV3IHQobixhKSxlLm1lbW9pemVkU3RhdGU9dC5zdGF0ZSE9PW51bGwmJnQuc3RhdGUhPT12b2lkIDA/dC5zdGF0ZTpudWxsLHQudXBkYXRlcj1TZCxlLnN0YXRlTm9kZT10LHQuX3JlYWN0SW50ZXJuYWxzPWUsciYmKGU9ZS5zdGF0ZU5vZGUsZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PW8sZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dD1hKSx0fWZ1bmN0aW9uIGx5KGUsdCxuLHIpe2U9dC5zdGF0ZSx0eXBlb2YgdC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPT0iZnVuY3Rpb24iJiZ0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobixyKSx0eXBlb2YgdC5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz09ImZ1bmN0aW9uIiYmdC5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuLHIpLHQuc3RhdGUhPT1lJiZTZC5lbnF1ZXVlUmVwbGFjZVN0YXRlKHQsdC5zdGF0ZSxudWxsKX1mdW5jdGlvbiBscChlLHQsbixyKXt2YXIgbz1lLnN0YXRlTm9kZTtvLnByb3BzPW4sby5zdGF0ZT1lLm1lbW9pemVkU3RhdGUsby5yZWZzPXt9LGpwKGUpO3ZhciBhPXQuY29udGV4dFR5cGU7dHlwZW9mIGE9PSJvYmplY3QiJiZhIT09bnVsbD9vLmNvbnRleHQ9TW4oYSk6KGE9c24odCk/S286SHQuY3VycmVudCxvLmNvbnRleHQ9emEoZSxhKSksby5zdGF0ZT1lLm1lbW9pemVkU3RhdGUsYT10LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyx0eXBlb2YgYT09ImZ1bmN0aW9uIiYmKHNwKGUsdCxhLG4pLG8uc3RhdGU9ZS5tZW1vaXplZFN0YXRlKSx0eXBlb2YgdC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9PSJmdW5jdGlvbiJ8fHR5cGVvZiBvLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlPT0iZnVuY3Rpb24ifHx0eXBlb2Ygby5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IT0iZnVuY3Rpb24iJiZ0eXBlb2Ygby5jb21wb25lbnRXaWxsTW91bnQhPSJmdW5jdGlvbiJ8fCh0PW8uc3RhdGUsdHlwZW9mIG8uY29tcG9uZW50V2lsbE1vdW50PT0iZnVuY3Rpb24iJiZvLmNvbXBvbmVudFdpbGxNb3VudCgpLHR5cGVvZiBvLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQ9PSJmdW5jdGlvbiImJm8uVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpLHQhPT1vLnN0YXRlJiZTZC5lbnF1ZXVlUmVwbGFjZVN0YXRlKG8sby5zdGF0ZSxudWxsKSxzZChlLG4sbyxyKSxvLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSksdHlwZW9mIG8uY29tcG9uZW50RGlkTW91bnQ9PSJmdW5jdGlvbiImJihlLmZsYWdzfD00MTk0MzA4KX1mdW5jdGlvbiBLYShlLHQpe3RyeXt2YXIgbj0iIixyPXQ7ZG8gbis9Y0Uocikscj1yLnJldHVybjt3aGlsZShyKTt2YXIgbz1ufWNhdGNoKGEpe289YApFcnJvciBnZW5lcmF0aW5nIHN0YWNrOiBgK2EubWVzc2FnZStgCmArYS5zdGFja31yZXR1cm57dmFsdWU6ZSxzb3VyY2U6dCxzdGFjazpvLGRpZ2VzdDpudWxsfX1mdW5jdGlvbiBEdShlLHQsbil7cmV0dXJue3ZhbHVlOmUsc291cmNlOm51bGwsc3RhY2s6bj8/bnVsbCxkaWdlc3Q6dD8/bnVsbH19ZnVuY3Rpb24gZHAoZSx0KXt0cnl7Y29uc29sZS5lcnJvcih0LnZhbHVlKX1jYXRjaChuKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgbn0pfX12YXIgTE49dHlwZW9mIFdlYWtNYXA9PSJmdW5jdGlvbiI/V2Vha01hcDpNYXA7ZnVuY3Rpb24gSnYoZSx0LG4pe249UHIoLTEsbiksbi50YWc9MyxuLnBheWxvYWQ9e2VsZW1lbnQ6bnVsbH07dmFyIHI9dC52YWx1ZTtyZXR1cm4gbi5jYWxsYmFjaz1mdW5jdGlvbigpe3BkfHwocGQ9ITAsYnA9ciksZHAoZSx0KX0sbn1mdW5jdGlvbiBRdihlLHQsbil7bj1QcigtMSxuKSxuLnRhZz0zO3ZhciByPWUudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I7aWYodHlwZW9mIHI9PSJmdW5jdGlvbiIpe3ZhciBvPXQudmFsdWU7bi5wYXlsb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIHIobyl9LG4uY2FsbGJhY2s9ZnVuY3Rpb24oKXtkcChlLHQpfX12YXIgYT1lLnN0YXRlTm9kZTtyZXR1cm4gYSE9PW51bGwmJnR5cGVvZiBhLmNvbXBvbmVudERpZENhdGNoPT0iZnVuY3Rpb24iJiYobi5jYWxsYmFjaz1mdW5jdGlvbigpe2RwKGUsdCksdHlwZW9mIHIhPSJmdW5jdGlvbiImJihobz09PW51bGw/aG89bmV3IFNldChbdGhpc10pOmhvLmFkZCh0aGlzKSk7dmFyIGk9dC5zdGFjazt0aGlzLmNvbXBvbmVudERpZENhdGNoKHQudmFsdWUse2NvbXBvbmVudFN0YWNrOmkhPT1udWxsP2k6IiJ9KX0pLG59ZnVuY3Rpb24gZHkoZSx0LG4pe3ZhciByPWUucGluZ0NhY2hlO2lmKHI9PT1udWxsKXtyPWUucGluZ0NhY2hlPW5ldyBMTjt2YXIgbz1uZXcgU2V0O3Iuc2V0KHQsbyl9ZWxzZSBvPXIuZ2V0KHQpLG89PT12b2lkIDAmJihvPW5ldyBTZXQsci5zZXQodCxvKSk7by5oYXMobil8fChvLmFkZChuKSxlPVhOLmJpbmQobnVsbCxlLHQsbiksdC50aGVuKGUsZSkpfWZ1bmN0aW9uIGN5KGUpe2Rve3ZhciB0O2lmKCh0PWUudGFnPT09MTMpJiYodD1lLm1lbW9pemVkU3RhdGUsdD10IT09bnVsbD90LmRlaHlkcmF0ZWQhPT1udWxsOiEwKSx0KXJldHVybiBlO2U9ZS5yZXR1cm59d2hpbGUoZSE9PW51bGwpO3JldHVybiBudWxsfWZ1bmN0aW9uIHV5KGUsdCxuLHIsbyl7cmV0dXJuIGUubW9kZSYxPyhlLmZsYWdzfD02NTUzNixlLmxhbmVzPW8sZSk6KGU9PT10P2UuZmxhZ3N8PTY1NTM2OihlLmZsYWdzfD0xMjgsbi5mbGFnc3w9MTMxMDcyLG4uZmxhZ3MmPS01MjgwNSxuLnRhZz09PTEmJihuLmFsdGVybmF0ZT09PW51bGw/bi50YWc9MTc6KHQ9UHIoLTEsMSksdC50YWc9MixtbyhuLHQsMSkpKSxuLmxhbmVzfD0xKSxlKX12YXIgX049enIuUmVhY3RDdXJyZW50T3duZXIsb249ITE7ZnVuY3Rpb24gcXQoZSx0LG4scil7dC5jaGlsZD1lPT09bnVsbD9Edih0LG51bGwsbixyKTpCYSh0LGUuY2hpbGQsbixyKX1mdW5jdGlvbiBweShlLHQsbixyLG8pe249bi5yZW5kZXI7dmFyIGE9dC5yZWY7cmV0dXJuIF9hKHQsbykscj1KcChlLHQsbixyLGEsbyksbj1RcCgpLGUhPT1udWxsJiYhb24/KHQudXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSx0LmZsYWdzJj0tMjA1MyxlLmxhbmVzJj1+byxGcihlLHQsbykpOihRZSYmbiYmenAodCksdC5mbGFnc3w9MSxxdChlLHQscixvKSx0LmNoaWxkKX1mdW5jdGlvbiBmeShlLHQsbixyLG8pe2lmKGU9PT1udWxsKXt2YXIgYT1uLnR5cGU7cmV0dXJuIHR5cGVvZiBhPT0iZnVuY3Rpb24iJiYhZGYoYSkmJmEuZGVmYXVsdFByb3BzPT09dm9pZCAwJiZuLmNvbXBhcmU9PT1udWxsJiZuLmRlZmF1bHRQcm9wcz09PXZvaWQgMD8odC50YWc9MTUsdC50eXBlPWEsWnYoZSx0LGEscixvKSk6KGU9Vmwobi50eXBlLG51bGwscix0LHQubW9kZSxvKSxlLnJlZj10LnJlZixlLnJldHVybj10LHQuY2hpbGQ9ZSl9aWYoYT1lLmNoaWxkLCEoZS5sYW5lcyZvKSl7dmFyIGk9YS5tZW1vaXplZFByb3BzO2lmKG49bi5jb21wYXJlLG49biE9PW51bGw/bjpaaSxuKGkscikmJmUucmVmPT09dC5yZWYpcmV0dXJuIEZyKGUsdCxvKX1yZXR1cm4gdC5mbGFnc3w9MSxlPXlvKGEsciksZS5yZWY9dC5yZWYsZS5yZXR1cm49dCx0LmNoaWxkPWV9ZnVuY3Rpb24gWnYoZSx0LG4scixvKXtpZihlIT09bnVsbCl7dmFyIGE9ZS5tZW1vaXplZFByb3BzO2lmKFppKGEscikmJmUucmVmPT09dC5yZWYpaWYob249ITEsdC5wZW5kaW5nUHJvcHM9cj1hLChlLmxhbmVzJm8pIT09MCllLmZsYWdzJjEzMTA3MiYmKG9uPSEwKTtlbHNlIHJldHVybiB0LmxhbmVzPWUubGFuZXMsRnIoZSx0LG8pfXJldHVybiBjcChlLHQsbixyLG8pfWZ1bmN0aW9uIGViKGUsdCxuKXt2YXIgcj10LnBlbmRpbmdQcm9wcyxvPXIuY2hpbGRyZW4sYT1lIT09bnVsbD9lLm1lbW9pemVkU3RhdGU6bnVsbDtpZihyLm1vZGU9PT0iaGlkZGVuIilpZighKHQubW9kZSYxKSl0Lm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczowLGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOm51bGx9LFllKE9hLGduKSxnbnw9bjtlbHNle2lmKCEobiYxMDczNzQxODI0KSlyZXR1cm4gZT1hIT09bnVsbD9hLmJhc2VMYW5lc3xuOm4sdC5sYW5lcz10LmNoaWxkTGFuZXM9MTA3Mzc0MTgyNCx0Lm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczplLGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOm51bGx9LHQudXBkYXRlUXVldWU9bnVsbCxZZShPYSxnbiksZ258PWUsbnVsbDt0Lm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczowLGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOm51bGx9LHI9YSE9PW51bGw/YS5iYXNlTGFuZXM6bixZZShPYSxnbiksZ258PXJ9ZWxzZSBhIT09bnVsbD8ocj1hLmJhc2VMYW5lc3xuLHQubWVtb2l6ZWRTdGF0ZT1udWxsKTpyPW4sWWUoT2EsZ24pLGdufD1yO3JldHVybiBxdChlLHQsbyxuKSx0LmNoaWxkfWZ1bmN0aW9uIHRiKGUsdCl7dmFyIG49dC5yZWY7KGU9PT1udWxsJiZuIT09bnVsbHx8ZSE9PW51bGwmJmUucmVmIT09bikmJih0LmZsYWdzfD01MTIsdC5mbGFnc3w9MjA5NzE1Mil9ZnVuY3Rpb24gY3AoZSx0LG4scixvKXt2YXIgYT1zbihuKT9LbzpIdC5jdXJyZW50O3JldHVybiBhPXphKHQsYSksX2EodCxvKSxuPUpwKGUsdCxuLHIsYSxvKSxyPVFwKCksZSE9PW51bGwmJiFvbj8odC51cGRhdGVRdWV1ZT1lLnVwZGF0ZVF1ZXVlLHQuZmxhZ3MmPS0yMDUzLGUubGFuZXMmPX5vLEZyKGUsdCxvKSk6KFFlJiZyJiZ6cCh0KSx0LmZsYWdzfD0xLHF0KGUsdCxuLG8pLHQuY2hpbGQpfWZ1bmN0aW9uIG15KGUsdCxuLHIsbyl7aWYoc24obikpe3ZhciBhPSEwO25kKHQpfWVsc2UgYT0hMTtpZihfYSh0LG8pLHQuc3RhdGVOb2RlPT09bnVsbClIbChlLHQpLCR2KHQsbixyKSxscCh0LG4scixvKSxyPSEwO2Vsc2UgaWYoZT09PW51bGwpe3ZhciBpPXQuc3RhdGVOb2RlLHM9dC5tZW1vaXplZFByb3BzO2kucHJvcHM9czt2YXIgbD1pLmNvbnRleHQsZD1uLmNvbnRleHRUeXBlO3R5cGVvZiBkPT0ib2JqZWN0IiYmZCE9PW51bGw/ZD1NbihkKTooZD1zbihuKT9LbzpIdC5jdXJyZW50LGQ9emEodCxkKSk7dmFyIGM9bi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsdT10eXBlb2YgYz09ImZ1bmN0aW9uInx8dHlwZW9mIGkuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiI7dXx8dHlwZW9mIGkuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPSJmdW5jdGlvbiImJnR5cGVvZiBpLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPSJmdW5jdGlvbiJ8fChzIT09cnx8bCE9PWQpJiZseSh0LGkscixkKSxvbz0hMTt2YXIgcD10Lm1lbW9pemVkU3RhdGU7aS5zdGF0ZT1wLHNkKHQscixpLG8pLGw9dC5tZW1vaXplZFN0YXRlLHMhPT1yfHxwIT09bHx8YW4uY3VycmVudHx8b28/KHR5cGVvZiBjPT0iZnVuY3Rpb24iJiYoc3AodCxuLGMsciksbD10Lm1lbW9pemVkU3RhdGUpLChzPW9vfHxzeSh0LG4scyxyLHAsbCxkKSk/KHV8fHR5cGVvZiBpLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQhPSJmdW5jdGlvbiImJnR5cGVvZiBpLmNvbXBvbmVudFdpbGxNb3VudCE9ImZ1bmN0aW9uInx8KHR5cGVvZiBpLmNvbXBvbmVudFdpbGxNb3VudD09ImZ1bmN0aW9uIiYmaS5jb21wb25lbnRXaWxsTW91bnQoKSx0eXBlb2YgaS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50PT0iZnVuY3Rpb24iJiZpLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSksdHlwZW9mIGkuY29tcG9uZW50RGlkTW91bnQ9PSJmdW5jdGlvbiImJih0LmZsYWdzfD00MTk0MzA4KSk6KHR5cGVvZiBpLmNvbXBvbmVudERpZE1vdW50PT0iZnVuY3Rpb24iJiYodC5mbGFnc3w9NDE5NDMwOCksdC5tZW1vaXplZFByb3BzPXIsdC5tZW1vaXplZFN0YXRlPWwpLGkucHJvcHM9cixpLnN0YXRlPWwsaS5jb250ZXh0PWQscj1zKToodHlwZW9mIGkuY29tcG9uZW50RGlkTW91bnQ9PSJmdW5jdGlvbiImJih0LmZsYWdzfD00MTk0MzA4KSxyPSExKX1lbHNle2k9dC5zdGF0ZU5vZGUsQ3YoZSx0KSxzPXQubWVtb2l6ZWRQcm9wcyxkPXQudHlwZT09PXQuZWxlbWVudFR5cGU/czpZbih0LnR5cGUscyksaS5wcm9wcz1kLHU9dC5wZW5kaW5nUHJvcHMscD1pLmNvbnRleHQsbD1uLmNvbnRleHRUeXBlLHR5cGVvZiBsPT0ib2JqZWN0IiYmbCE9PW51bGw/bD1NbihsKToobD1zbihuKT9LbzpIdC5jdXJyZW50LGw9emEodCxsKSk7dmFyIGY9bi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7KGM9dHlwZW9mIGY9PSJmdW5jdGlvbiJ8fHR5cGVvZiBpLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlPT0iZnVuY3Rpb24iKXx8dHlwZW9mIGkuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPSJmdW5jdGlvbiImJnR5cGVvZiBpLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPSJmdW5jdGlvbiJ8fChzIT09dXx8cCE9PWwpJiZseSh0LGkscixsKSxvbz0hMSxwPXQubWVtb2l6ZWRTdGF0ZSxpLnN0YXRlPXAsc2QodCxyLGksbyk7dmFyIHk9dC5tZW1vaXplZFN0YXRlO3MhPT11fHxwIT09eXx8YW4uY3VycmVudHx8b28/KHR5cGVvZiBmPT0iZnVuY3Rpb24iJiYoc3AodCxuLGYscikseT10Lm1lbW9pemVkU3RhdGUpLChkPW9vfHxzeSh0LG4sZCxyLHAseSxsKXx8ITEpPyhjfHx0eXBlb2YgaS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSE9ImZ1bmN0aW9uIiYmdHlwZW9mIGkuY29tcG9uZW50V2lsbFVwZGF0ZSE9ImZ1bmN0aW9uInx8KHR5cGVvZiBpLmNvbXBvbmVudFdpbGxVcGRhdGU9PSJmdW5jdGlvbiImJmkuY29tcG9uZW50V2lsbFVwZGF0ZShyLHksbCksdHlwZW9mIGkuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGU9PSJmdW5jdGlvbiImJmkuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUocix5LGwpKSx0eXBlb2YgaS5jb21wb25lbnREaWRVcGRhdGU9PSJmdW5jdGlvbiImJih0LmZsYWdzfD00KSx0eXBlb2YgaS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT09ImZ1bmN0aW9uIiYmKHQuZmxhZ3N8PTEwMjQpKToodHlwZW9mIGkuY29tcG9uZW50RGlkVXBkYXRlIT0iZnVuY3Rpb24ifHxzPT09ZS5tZW1vaXplZFByb3BzJiZwPT09ZS5tZW1vaXplZFN0YXRlfHwodC5mbGFnc3w9NCksdHlwZW9mIGkuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUhPSJmdW5jdGlvbiJ8fHM9PT1lLm1lbW9pemVkUHJvcHMmJnA9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmZsYWdzfD0xMDI0KSx0Lm1lbW9pemVkUHJvcHM9cix0Lm1lbW9pemVkU3RhdGU9eSksaS5wcm9wcz1yLGkuc3RhdGU9eSxpLmNvbnRleHQ9bCxyPWQpOih0eXBlb2YgaS5jb21wb25lbnREaWRVcGRhdGUhPSJmdW5jdGlvbiJ8fHM9PT1lLm1lbW9pemVkUHJvcHMmJnA9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmZsYWdzfD00KSx0eXBlb2YgaS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSE9ImZ1bmN0aW9uInx8cz09PWUubWVtb2l6ZWRQcm9wcyYmcD09PWUubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTEwMjQpLHI9ITEpfXJldHVybiB1cChlLHQsbixyLGEsbyl9ZnVuY3Rpb24gdXAoZSx0LG4scixvLGEpe3RiKGUsdCk7dmFyIGk9KHQuZmxhZ3MmMTI4KSE9PTA7aWYoIXImJiFpKXJldHVybiBvJiZaZyh0LG4sITEpLEZyKGUsdCxhKTtyPXQuc3RhdGVOb2RlLF9OLmN1cnJlbnQ9dDt2YXIgcz1pJiZ0eXBlb2Ygbi5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IhPSJmdW5jdGlvbiI/bnVsbDpyLnJlbmRlcigpO3JldHVybiB0LmZsYWdzfD0xLGUhPT1udWxsJiZpPyh0LmNoaWxkPUJhKHQsZS5jaGlsZCxudWxsLGEpLHQuY2hpbGQ9QmEodCxudWxsLHMsYSkpOnF0KGUsdCxzLGEpLHQubWVtb2l6ZWRTdGF0ZT1yLnN0YXRlLG8mJlpnKHQsbiwhMCksdC5jaGlsZH1mdW5jdGlvbiBuYihlKXt2YXIgdD1lLnN0YXRlTm9kZTt0LnBlbmRpbmdDb250ZXh0P1FnKGUsdC5wZW5kaW5nQ29udGV4dCx0LnBlbmRpbmdDb250ZXh0IT09dC5jb250ZXh0KTp0LmNvbnRleHQmJlFnKGUsdC5jb250ZXh0LCExKSxZcChlLHQuY29udGFpbmVySW5mbyl9ZnVuY3Rpb24gaHkoZSx0LG4scixvKXtyZXR1cm4gV2EoKSxCcChvKSx0LmZsYWdzfD0yNTYscXQoZSx0LG4sciksdC5jaGlsZH12YXIgcHA9e2RlaHlkcmF0ZWQ6bnVsbCx0cmVlQ29udGV4dDpudWxsLHJldHJ5TGFuZTowfTtmdW5jdGlvbiBmcChlKXtyZXR1cm57YmFzZUxhbmVzOmUsY2FjaGVQb29sOm51bGwsdHJhbnNpdGlvbnM6bnVsbH19ZnVuY3Rpb24gcmIoZSx0LG4pe3ZhciByPXQucGVuZGluZ1Byb3BzLG89bnQuY3VycmVudCxhPSExLGk9KHQuZmxhZ3MmMTI4KSE9PTAscztpZigocz1pKXx8KHM9ZSE9PW51bGwmJmUubWVtb2l6ZWRTdGF0ZT09PW51bGw/ITE6KG8mMikhPT0wKSxzPyhhPSEwLHQuZmxhZ3MmPS0xMjkpOihlPT09bnVsbHx8ZS5tZW1vaXplZFN0YXRlIT09bnVsbCkmJihvfD0xKSxZZShudCxvJjEpLGU9PT1udWxsKXJldHVybiBhcCh0KSxlPXQubWVtb2l6ZWRTdGF0ZSxlIT09bnVsbCYmKGU9ZS5kZWh5ZHJhdGVkLGUhPT1udWxsKT8odC5tb2RlJjE/ZS5kYXRhPT09IiQhIj90LmxhbmVzPTg6dC5sYW5lcz0xMDczNzQxODI0OnQubGFuZXM9MSxudWxsKTooaT1yLmNoaWxkcmVuLGU9ci5mYWxsYmFjayxhPyhyPXQubW9kZSxhPXQuY2hpbGQsaT17bW9kZToiaGlkZGVuIixjaGlsZHJlbjppfSwhKHImMSkmJmEhPT1udWxsPyhhLmNoaWxkTGFuZXM9MCxhLnBlbmRpbmdQcm9wcz1pKTphPVRkKGksciwwLG51bGwpLGU9SG8oZSxyLG4sbnVsbCksYS5yZXR1cm49dCxlLnJldHVybj10LGEuc2libGluZz1lLHQuY2hpbGQ9YSx0LmNoaWxkLm1lbW9pemVkU3RhdGU9ZnAobiksdC5tZW1vaXplZFN0YXRlPXBwLGUpOnRmKHQsaSkpO2lmKG89ZS5tZW1vaXplZFN0YXRlLG8hPT1udWxsJiYocz1vLmRlaHlkcmF0ZWQscyE9PW51bGwpKXJldHVybiBVTihlLHQsaSxyLHMsbyxuKTtpZihhKXthPXIuZmFsbGJhY2ssaT10Lm1vZGUsbz1lLmNoaWxkLHM9by5zaWJsaW5nO3ZhciBsPXttb2RlOiJoaWRkZW4iLGNoaWxkcmVuOnIuY2hpbGRyZW59O3JldHVybiEoaSYxKSYmdC5jaGlsZCE9PW8/KHI9dC5jaGlsZCxyLmNoaWxkTGFuZXM9MCxyLnBlbmRpbmdQcm9wcz1sLHQuZGVsZXRpb25zPW51bGwpOihyPXlvKG8sbCksci5zdWJ0cmVlRmxhZ3M9by5zdWJ0cmVlRmxhZ3MmMTQ2ODAwNjQpLHMhPT1udWxsP2E9eW8ocyxhKTooYT1IbyhhLGksbixudWxsKSxhLmZsYWdzfD0yKSxhLnJldHVybj10LHIucmV0dXJuPXQsci5zaWJsaW5nPWEsdC5jaGlsZD1yLHI9YSxhPXQuY2hpbGQsaT1lLmNoaWxkLm1lbW9pemVkU3RhdGUsaT1pPT09bnVsbD9mcChuKTp7YmFzZUxhbmVzOmkuYmFzZUxhbmVzfG4sY2FjaGVQb29sOm51bGwsdHJhbnNpdGlvbnM6aS50cmFuc2l0aW9uc30sYS5tZW1vaXplZFN0YXRlPWksYS5jaGlsZExhbmVzPWUuY2hpbGRMYW5lcyZ+bix0Lm1lbW9pemVkU3RhdGU9cHAscn1yZXR1cm4gYT1lLmNoaWxkLGU9YS5zaWJsaW5nLHI9eW8oYSx7bW9kZToidmlzaWJsZSIsY2hpbGRyZW46ci5jaGlsZHJlbn0pLCEodC5tb2RlJjEpJiYoci5sYW5lcz1uKSxyLnJldHVybj10LHIuc2libGluZz1udWxsLGUhPT1udWxsJiYobj10LmRlbGV0aW9ucyxuPT09bnVsbD8odC5kZWxldGlvbnM9W2VdLHQuZmxhZ3N8PTE2KTpuLnB1c2goZSkpLHQuY2hpbGQ9cix0Lm1lbW9pemVkU3RhdGU9bnVsbCxyfWZ1bmN0aW9uIHRmKGUsdCl7cmV0dXJuIHQ9VGQoe21vZGU6InZpc2libGUiLGNoaWxkcmVuOnR9LGUubW9kZSwwLG51bGwpLHQucmV0dXJuPWUsZS5jaGlsZD10fWZ1bmN0aW9uIFJsKGUsdCxuLHIpe3JldHVybiByIT09bnVsbCYmQnAociksQmEodCxlLmNoaWxkLG51bGwsbiksZT10Zih0LHQucGVuZGluZ1Byb3BzLmNoaWxkcmVuKSxlLmZsYWdzfD0yLHQubWVtb2l6ZWRTdGF0ZT1udWxsLGV9ZnVuY3Rpb24gVU4oZSx0LG4scixvLGEsaSl7aWYobilyZXR1cm4gdC5mbGFncyYyNTY/KHQuZmxhZ3MmPS0yNTcscj1EdShFcnJvcihVKDQyMikpKSxSbChlLHQsaSxyKSk6dC5tZW1vaXplZFN0YXRlIT09bnVsbD8odC5jaGlsZD1lLmNoaWxkLHQuZmxhZ3N8PTEyOCxudWxsKTooYT1yLmZhbGxiYWNrLG89dC5tb2RlLHI9VGQoe21vZGU6InZpc2libGUiLGNoaWxkcmVuOnIuY2hpbGRyZW59LG8sMCxudWxsKSxhPUhvKGEsbyxpLG51bGwpLGEuZmxhZ3N8PTIsci5yZXR1cm49dCxhLnJldHVybj10LHIuc2libGluZz1hLHQuY2hpbGQ9cix0Lm1vZGUmMSYmQmEodCxlLmNoaWxkLG51bGwsaSksdC5jaGlsZC5tZW1vaXplZFN0YXRlPWZwKGkpLHQubWVtb2l6ZWRTdGF0ZT1wcCxhKTtpZighKHQubW9kZSYxKSlyZXR1cm4gUmwoZSx0LGksbnVsbCk7aWYoby5kYXRhPT09IiQhIil7aWYocj1vLm5leHRTaWJsaW5nJiZvLm5leHRTaWJsaW5nLmRhdGFzZXQscil2YXIgcz1yLmRnc3Q7cmV0dXJuIHI9cyxhPUVycm9yKFUoNDE5KSkscj1EdShhLHIsdm9pZCAwKSxSbChlLHQsaSxyKX1pZihzPShpJmUuY2hpbGRMYW5lcykhPT0wLG9ufHxzKXtpZihyPVR0LHIhPT1udWxsKXtzd2l0Y2goaSYtaSl7Y2FzZSA0Om89MjticmVhaztjYXNlIDE2Om89ODticmVhaztjYXNlIDY0OmNhc2UgMTI4OmNhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOmNhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOmNhc2UgNjcxMDg4NjQ6bz0zMjticmVhaztjYXNlIDUzNjg3MDkxMjpvPTI2ODQzNTQ1NjticmVhaztkZWZhdWx0Om89MH1vPW8mKHIuc3VzcGVuZGVkTGFuZXN8aSk/MDpvLG8hPT0wJiZvIT09YS5yZXRyeUxhbmUmJihhLnJldHJ5TGFuZT1vLFVyKGUsbyksSm4ocixlLG8sLTEpKX1yZXR1cm4gbGYoKSxyPUR1KEVycm9yKFUoNDIxKSkpLFJsKGUsdCxpLHIpfXJldHVybiBvLmRhdGE9PT0iJD8iPyh0LmZsYWdzfD0xMjgsdC5jaGlsZD1lLmNoaWxkLHQ9JE4uYmluZChudWxsLGUpLG8uX3JlYWN0UmV0cnk9dCxudWxsKTooZT1hLnRyZWVDb250ZXh0LHluPWZvKG8ubmV4dFNpYmxpbmcpLHZuPXQsUWU9ITAsWG49bnVsbCxlIT09bnVsbCYmKFRuW0RuKytdPUlyLFRuW0RuKytdPVJyLFRuW0RuKytdPUdvLElyPWUuaWQsUnI9ZS5vdmVyZmxvdyxHbz10KSx0PXRmKHQsci5jaGlsZHJlbiksdC5mbGFnc3w9NDA5Nix0KX1mdW5jdGlvbiBneShlLHQsbil7ZS5sYW5lc3w9dDt2YXIgcj1lLmFsdGVybmF0ZTtyIT09bnVsbCYmKHIubGFuZXN8PXQpLGlwKGUucmV0dXJuLHQsbil9ZnVuY3Rpb24gQXUoZSx0LG4scixvKXt2YXIgYT1lLm1lbW9pemVkU3RhdGU7YT09PW51bGw/ZS5tZW1vaXplZFN0YXRlPXtpc0JhY2t3YXJkczp0LHJlbmRlcmluZzpudWxsLHJlbmRlcmluZ1N0YXJ0VGltZTowLGxhc3Q6cix0YWlsOm4sdGFpbE1vZGU6b306KGEuaXNCYWNrd2FyZHM9dCxhLnJlbmRlcmluZz1udWxsLGEucmVuZGVyaW5nU3RhcnRUaW1lPTAsYS5sYXN0PXIsYS50YWlsPW4sYS50YWlsTW9kZT1vKX1mdW5jdGlvbiBvYihlLHQsbil7dmFyIHI9dC5wZW5kaW5nUHJvcHMsbz1yLnJldmVhbE9yZGVyLGE9ci50YWlsO2lmKHF0KGUsdCxyLmNoaWxkcmVuLG4pLHI9bnQuY3VycmVudCxyJjIpcj1yJjF8Mix0LmZsYWdzfD0xMjg7ZWxzZXtpZihlIT09bnVsbCYmZS5mbGFncyYxMjgpZTpmb3IoZT10LmNoaWxkO2UhPT1udWxsOyl7aWYoZS50YWc9PT0xMyllLm1lbW9pemVkU3RhdGUhPT1udWxsJiZneShlLG4sdCk7ZWxzZSBpZihlLnRhZz09PTE5KWd5KGUsbix0KTtlbHNlIGlmKGUuY2hpbGQhPT1udWxsKXtlLmNoaWxkLnJldHVybj1lLGU9ZS5jaGlsZDtjb250aW51ZX1pZihlPT09dClicmVhayBlO2Zvcig7ZS5zaWJsaW5nPT09bnVsbDspe2lmKGUucmV0dXJuPT09bnVsbHx8ZS5yZXR1cm49PT10KWJyZWFrIGU7ZT1lLnJldHVybn1lLnNpYmxpbmcucmV0dXJuPWUucmV0dXJuLGU9ZS5zaWJsaW5nfXImPTF9aWYoWWUobnQsciksISh0Lm1vZGUmMSkpdC5tZW1vaXplZFN0YXRlPW51bGw7ZWxzZSBzd2l0Y2gobyl7Y2FzZSJmb3J3YXJkcyI6Zm9yKG49dC5jaGlsZCxvPW51bGw7biE9PW51bGw7KWU9bi5hbHRlcm5hdGUsZSE9PW51bGwmJmxkKGUpPT09bnVsbCYmKG89biksbj1uLnNpYmxpbmc7bj1vLG49PT1udWxsPyhvPXQuY2hpbGQsdC5jaGlsZD1udWxsKToobz1uLnNpYmxpbmcsbi5zaWJsaW5nPW51bGwpLEF1KHQsITEsbyxuLGEpO2JyZWFrO2Nhc2UiYmFja3dhcmRzIjpmb3Iobj1udWxsLG89dC5jaGlsZCx0LmNoaWxkPW51bGw7byE9PW51bGw7KXtpZihlPW8uYWx0ZXJuYXRlLGUhPT1udWxsJiZsZChlKT09PW51bGwpe3QuY2hpbGQ9bzticmVha31lPW8uc2libGluZyxvLnNpYmxpbmc9bixuPW8sbz1lfUF1KHQsITAsbixudWxsLGEpO2JyZWFrO2Nhc2UidG9nZXRoZXIiOkF1KHQsITEsbnVsbCxudWxsLHZvaWQgMCk7YnJlYWs7ZGVmYXVsdDp0Lm1lbW9pemVkU3RhdGU9bnVsbH1yZXR1cm4gdC5jaGlsZH1mdW5jdGlvbiBIbChlLHQpeyEodC5tb2RlJjEpJiZlIT09bnVsbCYmKGUuYWx0ZXJuYXRlPW51bGwsdC5hbHRlcm5hdGU9bnVsbCx0LmZsYWdzfD0yKX1mdW5jdGlvbiBGcihlLHQsbil7aWYoZSE9PW51bGwmJih0LmRlcGVuZGVuY2llcz1lLmRlcGVuZGVuY2llcyksam98PXQubGFuZXMsIShuJnQuY2hpbGRMYW5lcykpcmV0dXJuIG51bGw7aWYoZSE9PW51bGwmJnQuY2hpbGQhPT1lLmNoaWxkKXRocm93IEVycm9yKFUoMTUzKSk7aWYodC5jaGlsZCE9PW51bGwpe2ZvcihlPXQuY2hpbGQsbj15byhlLGUucGVuZGluZ1Byb3BzKSx0LmNoaWxkPW4sbi5yZXR1cm49dDtlLnNpYmxpbmchPT1udWxsOyllPWUuc2libGluZyxuPW4uc2libGluZz15byhlLGUucGVuZGluZ1Byb3BzKSxuLnJldHVybj10O24uc2libGluZz1udWxsfXJldHVybiB0LmNoaWxkfWZ1bmN0aW9uIEZOKGUsdCxuKXtzd2l0Y2godC50YWcpe2Nhc2UgMzpuYih0KSxXYSgpO2JyZWFrO2Nhc2UgNTpNdih0KTticmVhaztjYXNlIDE6c24odC50eXBlKSYmbmQodCk7YnJlYWs7Y2FzZSA0OllwKHQsdC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7YnJlYWs7Y2FzZSAxMDp2YXIgcj10LnR5cGUuX2NvbnRleHQsbz10Lm1lbW9pemVkUHJvcHMudmFsdWU7WWUoYWQsci5fY3VycmVudFZhbHVlKSxyLl9jdXJyZW50VmFsdWU9bzticmVhaztjYXNlIDEzOmlmKHI9dC5tZW1vaXplZFN0YXRlLHIhPT1udWxsKXJldHVybiByLmRlaHlkcmF0ZWQhPT1udWxsPyhZZShudCxudC5jdXJyZW50JjEpLHQuZmxhZ3N8PTEyOCxudWxsKTpuJnQuY2hpbGQuY2hpbGRMYW5lcz9yYihlLHQsbik6KFllKG50LG50LmN1cnJlbnQmMSksZT1GcihlLHQsbiksZSE9PW51bGw/ZS5zaWJsaW5nOm51bGwpO1llKG50LG50LmN1cnJlbnQmMSk7YnJlYWs7Y2FzZSAxOTppZihyPShuJnQuY2hpbGRMYW5lcykhPT0wLGUuZmxhZ3MmMTI4KXtpZihyKXJldHVybiBvYihlLHQsbik7dC5mbGFnc3w9MTI4fWlmKG89dC5tZW1vaXplZFN0YXRlLG8hPT1udWxsJiYoby5yZW5kZXJpbmc9bnVsbCxvLnRhaWw9bnVsbCxvLmxhc3RFZmZlY3Q9bnVsbCksWWUobnQsbnQuY3VycmVudCkscilicmVhaztyZXR1cm4gbnVsbDtjYXNlIDIyOmNhc2UgMjM6cmV0dXJuIHQubGFuZXM9MCxlYihlLHQsbil9cmV0dXJuIEZyKGUsdCxuKX12YXIgYWIsbXAsaWIsc2I7YWI9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dC5jaGlsZDtuIT09bnVsbDspe2lmKG4udGFnPT09NXx8bi50YWc9PT02KWUuYXBwZW5kQ2hpbGQobi5zdGF0ZU5vZGUpO2Vsc2UgaWYobi50YWchPT00JiZuLmNoaWxkIT09bnVsbCl7bi5jaGlsZC5yZXR1cm49bixuPW4uY2hpbGQ7Y29udGludWV9aWYobj09PXQpYnJlYWs7Zm9yKDtuLnNpYmxpbmc9PT1udWxsOyl7aWYobi5yZXR1cm49PT1udWxsfHxuLnJldHVybj09PXQpcmV0dXJuO249bi5yZXR1cm59bi5zaWJsaW5nLnJldHVybj1uLnJldHVybixuPW4uc2libGluZ319O21wPWZ1bmN0aW9uKCl7fTtpYj1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz1lLm1lbW9pemVkUHJvcHM7aWYobyE9PXIpe2U9dC5zdGF0ZU5vZGUsV28oYnIuY3VycmVudCk7dmFyIGE9bnVsbDtzd2l0Y2gobil7Y2FzZSJpbnB1dCI6bz1fdShlLG8pLHI9X3UoZSxyKSxhPVtdO2JyZWFrO2Nhc2Uic2VsZWN0IjpvPW90KHt9LG8se3ZhbHVlOnZvaWQgMH0pLHI9b3Qoe30scix7dmFsdWU6dm9pZCAwfSksYT1bXTticmVhaztjYXNlInRleHRhcmVhIjpvPXp1KGUsbykscj16dShlLHIpLGE9W107YnJlYWs7ZGVmYXVsdDp0eXBlb2Ygby5vbkNsaWNrIT0iZnVuY3Rpb24iJiZ0eXBlb2Ygci5vbkNsaWNrPT0iZnVuY3Rpb24iJiYoZS5vbmNsaWNrPWVkKX1CdShuLHIpO3ZhciBpO249bnVsbDtmb3IoZCBpbiBvKWlmKCFyLmhhc093blByb3BlcnR5KGQpJiZvLmhhc093blByb3BlcnR5KGQpJiZvW2RdIT1udWxsKWlmKGQ9PT0ic3R5bGUiKXt2YXIgcz1vW2RdO2ZvcihpIGluIHMpcy5oYXNPd25Qcm9wZXJ0eShpKSYmKG58fChuPXt9KSxuW2ldPSIiKX1lbHNlIGQhPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiJiZkIT09ImNoaWxkcmVuIiYmZCE9PSJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciJiZkIT09InN1cHByZXNzSHlkcmF0aW9uV2FybmluZyImJmQhPT0iYXV0b0ZvY3VzIiYmKGppLmhhc093blByb3BlcnR5KGQpP2F8fChhPVtdKTooYT1hfHxbXSkucHVzaChkLG51bGwpKTtmb3IoZCBpbiByKXt2YXIgbD1yW2RdO2lmKHM9bz8uW2RdLHIuaGFzT3duUHJvcGVydHkoZCkmJmwhPT1zJiYobCE9bnVsbHx8cyE9bnVsbCkpaWYoZD09PSJzdHlsZSIpaWYocyl7Zm9yKGkgaW4gcykhcy5oYXNPd25Qcm9wZXJ0eShpKXx8bCYmbC5oYXNPd25Qcm9wZXJ0eShpKXx8KG58fChuPXt9KSxuW2ldPSIiKTtmb3IoaSBpbiBsKWwuaGFzT3duUHJvcGVydHkoaSkmJnNbaV0hPT1sW2ldJiYobnx8KG49e30pLG5baV09bFtpXSl9ZWxzZSBufHwoYXx8KGE9W10pLGEucHVzaChkLG4pKSxuPWw7ZWxzZSBkPT09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj8obD1sP2wuX19odG1sOnZvaWQgMCxzPXM/cy5fX2h0bWw6dm9pZCAwLGwhPW51bGwmJnMhPT1sJiYoYT1hfHxbXSkucHVzaChkLGwpKTpkPT09ImNoaWxkcmVuIj90eXBlb2YgbCE9InN0cmluZyImJnR5cGVvZiBsIT0ibnVtYmVyInx8KGE9YXx8W10pLnB1c2goZCwiIitsKTpkIT09InN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyImJmQhPT0ic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIiYmKGppLmhhc093blByb3BlcnR5KGQpPyhsIT1udWxsJiZkPT09Im9uU2Nyb2xsIiYmJGUoInNjcm9sbCIsZSksYXx8cz09PWx8fChhPVtdKSk6KGE9YXx8W10pLnB1c2goZCxsKSl9biYmKGE9YXx8W10pLnB1c2goInN0eWxlIixuKTt2YXIgZD1hOyh0LnVwZGF0ZVF1ZXVlPWQpJiYodC5mbGFnc3w9NCl9fTtzYj1mdW5jdGlvbihlLHQsbixyKXtuIT09ciYmKHQuZmxhZ3N8PTQpfTtmdW5jdGlvbiBNaShlLHQpe2lmKCFRZSlzd2l0Y2goZS50YWlsTW9kZSl7Y2FzZSJoaWRkZW4iOnQ9ZS50YWlsO2Zvcih2YXIgbj1udWxsO3QhPT1udWxsOyl0LmFsdGVybmF0ZSE9PW51bGwmJihuPXQpLHQ9dC5zaWJsaW5nO249PT1udWxsP2UudGFpbD1udWxsOm4uc2libGluZz1udWxsO2JyZWFrO2Nhc2UiY29sbGFwc2VkIjpuPWUudGFpbDtmb3IodmFyIHI9bnVsbDtuIT09bnVsbDspbi5hbHRlcm5hdGUhPT1udWxsJiYocj1uKSxuPW4uc2libGluZztyPT09bnVsbD90fHxlLnRhaWw9PT1udWxsP2UudGFpbD1udWxsOmUudGFpbC5zaWJsaW5nPW51bGw6ci5zaWJsaW5nPW51bGx9fWZ1bmN0aW9uIFd0KGUpe3ZhciB0PWUuYWx0ZXJuYXRlIT09bnVsbCYmZS5hbHRlcm5hdGUuY2hpbGQ9PT1lLmNoaWxkLG49MCxyPTA7aWYodClmb3IodmFyIG89ZS5jaGlsZDtvIT09bnVsbDspbnw9by5sYW5lc3xvLmNoaWxkTGFuZXMscnw9by5zdWJ0cmVlRmxhZ3MmMTQ2ODAwNjQscnw9by5mbGFncyYxNDY4MDA2NCxvLnJldHVybj1lLG89by5zaWJsaW5nO2Vsc2UgZm9yKG89ZS5jaGlsZDtvIT09bnVsbDspbnw9by5sYW5lc3xvLmNoaWxkTGFuZXMscnw9by5zdWJ0cmVlRmxhZ3Mscnw9by5mbGFncyxvLnJldHVybj1lLG89by5zaWJsaW5nO3JldHVybiBlLnN1YnRyZWVGbGFnc3w9cixlLmNoaWxkTGFuZXM9bix0fWZ1bmN0aW9uIHpOKGUsdCxuKXt2YXIgcj10LnBlbmRpbmdQcm9wcztzd2l0Y2goV3AodCksdC50YWcpe2Nhc2UgMjpjYXNlIDE2OmNhc2UgMTU6Y2FzZSAwOmNhc2UgMTE6Y2FzZSA3OmNhc2UgODpjYXNlIDEyOmNhc2UgOTpjYXNlIDE0OnJldHVybiBXdCh0KSxudWxsO2Nhc2UgMTpyZXR1cm4gc24odC50eXBlKSYmdGQoKSxXdCh0KSxudWxsO2Nhc2UgMzpyZXR1cm4gcj10LnN0YXRlTm9kZSxIYSgpLEplKGFuKSxKZShIdCksWHAoKSxyLnBlbmRpbmdDb250ZXh0JiYoci5jb250ZXh0PXIucGVuZGluZ0NvbnRleHQsci5wZW5kaW5nQ29udGV4dD1udWxsKSwoZT09PW51bGx8fGUuY2hpbGQ9PT1udWxsKSYmKE9sKHQpP3QuZmxhZ3N8PTQ6ZT09PW51bGx8fGUubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQmJiEodC5mbGFncyYyNTYpfHwodC5mbGFnc3w9MTAyNCxYbiE9PW51bGwmJih4cChYbiksWG49bnVsbCkpKSxtcChlLHQpLFd0KHQpLG51bGw7Y2FzZSA1OnFwKHQpO3ZhciBvPVdvKG9zLmN1cnJlbnQpO2lmKG49dC50eXBlLGUhPT1udWxsJiZ0LnN0YXRlTm9kZSE9bnVsbClpYihlLHQsbixyLG8pLGUucmVmIT09dC5yZWYmJih0LmZsYWdzfD01MTIsdC5mbGFnc3w9MjA5NzE1Mik7ZWxzZXtpZighcil7aWYodC5zdGF0ZU5vZGU9PT1udWxsKXRocm93IEVycm9yKFUoMTY2KSk7cmV0dXJuIFd0KHQpLG51bGx9aWYoZT1Xbyhici5jdXJyZW50KSxPbCh0KSl7cj10LnN0YXRlTm9kZSxuPXQudHlwZTt2YXIgYT10Lm1lbW9pemVkUHJvcHM7c3dpdGNoKHJbeXJdPXQscltuc109YSxlPSh0Lm1vZGUmMSkhPT0wLG4pe2Nhc2UiZGlhbG9nIjokZSgiY2FuY2VsIixyKSwkZSgiY2xvc2UiLHIpO2JyZWFrO2Nhc2UiaWZyYW1lIjpjYXNlIm9iamVjdCI6Y2FzZSJlbWJlZCI6JGUoImxvYWQiLHIpO2JyZWFrO2Nhc2UidmlkZW8iOmNhc2UiYXVkaW8iOmZvcihvPTA7bzxfaS5sZW5ndGg7bysrKSRlKF9pW29dLHIpO2JyZWFrO2Nhc2Uic291cmNlIjokZSgiZXJyb3IiLHIpO2JyZWFrO2Nhc2UiaW1nIjpjYXNlImltYWdlIjpjYXNlImxpbmsiOiRlKCJlcnJvciIsciksJGUoImxvYWQiLHIpO2JyZWFrO2Nhc2UiZGV0YWlscyI6JGUoInRvZ2dsZSIscik7YnJlYWs7Y2FzZSJpbnB1dCI6RWcocixhKSwkZSgiaW52YWxpZCIscik7YnJlYWs7Y2FzZSJzZWxlY3QiOnIuX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFhLm11bHRpcGxlfSwkZSgiaW52YWxpZCIscik7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6VGcocixhKSwkZSgiaW52YWxpZCIscil9QnUobixhKSxvPW51bGw7Zm9yKHZhciBpIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShpKSl7dmFyIHM9YVtpXTtpPT09ImNoaWxkcmVuIj90eXBlb2Ygcz09InN0cmluZyI/ci50ZXh0Q29udGVudCE9PXMmJihhLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyE9PSEwJiZNbChyLnRleHRDb250ZW50LHMsZSksbz1bImNoaWxkcmVuIixzXSk6dHlwZW9mIHM9PSJudW1iZXIiJiZyLnRleHRDb250ZW50IT09IiIrcyYmKGEuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIT09ITAmJk1sKHIudGV4dENvbnRlbnQscyxlKSxvPVsiY2hpbGRyZW4iLCIiK3NdKTpqaS5oYXNPd25Qcm9wZXJ0eShpKSYmcyE9bnVsbCYmaT09PSJvblNjcm9sbCImJiRlKCJzY3JvbGwiLHIpfXN3aXRjaChuKXtjYXNlImlucHV0Ijp2bChyKSxOZyhyLGEsITApO2JyZWFrO2Nhc2UidGV4dGFyZWEiOnZsKHIpLERnKHIpO2JyZWFrO2Nhc2Uic2VsZWN0IjpjYXNlIm9wdGlvbiI6YnJlYWs7ZGVmYXVsdDp0eXBlb2YgYS5vbkNsaWNrPT0iZnVuY3Rpb24iJiYoci5vbmNsaWNrPWVkKX1yPW8sdC51cGRhdGVRdWV1ZT1yLHIhPT1udWxsJiYodC5mbGFnc3w9NCl9ZWxzZXtpPW8ubm9kZVR5cGU9PT05P286by5vd25lckRvY3VtZW50LGU9PT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCImJihlPUx5KG4pKSxlPT09Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiP249PT0ic2NyaXB0Ij8oZT1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGUuaW5uZXJIVE1MPSI8c2NyaXB0PjxcL3NjcmlwdD4iLGU9ZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpKTp0eXBlb2Ygci5pcz09InN0cmluZyI/ZT1pLmNyZWF0ZUVsZW1lbnQobix7aXM6ci5pc30pOihlPWkuY3JlYXRlRWxlbWVudChuKSxuPT09InNlbGVjdCImJihpPWUsci5tdWx0aXBsZT9pLm11bHRpcGxlPSEwOnIuc2l6ZSYmKGkuc2l6ZT1yLnNpemUpKSk6ZT1pLmNyZWF0ZUVsZW1lbnROUyhlLG4pLGVbeXJdPXQsZVtuc109cixhYihlLHQsITEsITEpLHQuc3RhdGVOb2RlPWU7ZTp7c3dpdGNoKGk9SHUobixyKSxuKXtjYXNlImRpYWxvZyI6JGUoImNhbmNlbCIsZSksJGUoImNsb3NlIixlKSxvPXI7YnJlYWs7Y2FzZSJpZnJhbWUiOmNhc2Uib2JqZWN0IjpjYXNlImVtYmVkIjokZSgibG9hZCIsZSksbz1yO2JyZWFrO2Nhc2UidmlkZW8iOmNhc2UiYXVkaW8iOmZvcihvPTA7bzxfaS5sZW5ndGg7bysrKSRlKF9pW29dLGUpO289cjticmVhaztjYXNlInNvdXJjZSI6JGUoImVycm9yIixlKSxvPXI7YnJlYWs7Y2FzZSJpbWciOmNhc2UiaW1hZ2UiOmNhc2UibGluayI6JGUoImVycm9yIixlKSwkZSgibG9hZCIsZSksbz1yO2JyZWFrO2Nhc2UiZGV0YWlscyI6JGUoInRvZ2dsZSIsZSksbz1yO2JyZWFrO2Nhc2UiaW5wdXQiOkVnKGUsciksbz1fdShlLHIpLCRlKCJpbnZhbGlkIixlKTticmVhaztjYXNlIm9wdGlvbiI6bz1yO2JyZWFrO2Nhc2Uic2VsZWN0IjplLl93cmFwcGVyU3RhdGU9e3dhc011bHRpcGxlOiEhci5tdWx0aXBsZX0sbz1vdCh7fSxyLHt2YWx1ZTp2b2lkIDB9KSwkZSgiaW52YWxpZCIsZSk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6VGcoZSxyKSxvPXp1KGUsciksJGUoImludmFsaWQiLGUpO2JyZWFrO2RlZmF1bHQ6bz1yfUJ1KG4sbykscz1vO2ZvcihhIGluIHMpaWYocy5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGw9c1thXTthPT09InN0eWxlIj9GeShlLGwpOmE9PT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiPyhsPWw/bC5fX2h0bWw6dm9pZCAwLGwhPW51bGwmJl95KGUsbCkpOmE9PT0iY2hpbGRyZW4iP3R5cGVvZiBsPT0ic3RyaW5nIj8obiE9PSJ0ZXh0YXJlYSJ8fGwhPT0iIikmJllpKGUsbCk6dHlwZW9mIGw9PSJudW1iZXIiJiZZaShlLCIiK2wpOmEhPT0ic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiYmYSE9PSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciJiZhIT09ImF1dG9Gb2N1cyImJihqaS5oYXNPd25Qcm9wZXJ0eShhKT9sIT1udWxsJiZhPT09Im9uU2Nyb2xsIiYmJGUoInNjcm9sbCIsZSk6bCE9bnVsbCYmTnAoZSxhLGwsaSkpfXN3aXRjaChuKXtjYXNlImlucHV0Ijp2bChlKSxOZyhlLHIsITEpO2JyZWFrO2Nhc2UidGV4dGFyZWEiOnZsKGUpLERnKGUpO2JyZWFrO2Nhc2Uib3B0aW9uIjpyLnZhbHVlIT1udWxsJiZlLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiK3ZvKHIudmFsdWUpKTticmVhaztjYXNlInNlbGVjdCI6ZS5tdWx0aXBsZT0hIXIubXVsdGlwbGUsYT1yLnZhbHVlLGEhPW51bGw/SWEoZSwhIXIubXVsdGlwbGUsYSwhMSk6ci5kZWZhdWx0VmFsdWUhPW51bGwmJklhKGUsISFyLm11bHRpcGxlLHIuZGVmYXVsdFZhbHVlLCEwKTticmVhaztkZWZhdWx0OnR5cGVvZiBvLm9uQ2xpY2s9PSJmdW5jdGlvbiImJihlLm9uY2xpY2s9ZWQpfXN3aXRjaChuKXtjYXNlImJ1dHRvbiI6Y2FzZSJpbnB1dCI6Y2FzZSJzZWxlY3QiOmNhc2UidGV4dGFyZWEiOnI9ISFyLmF1dG9Gb2N1czticmVhayBlO2Nhc2UiaW1nIjpyPSEwO2JyZWFrIGU7ZGVmYXVsdDpyPSExfX1yJiYodC5mbGFnc3w9NCl9dC5yZWYhPT1udWxsJiYodC5mbGFnc3w9NTEyLHQuZmxhZ3N8PTIwOTcxNTIpfXJldHVybiBXdCh0KSxudWxsO2Nhc2UgNjppZihlJiZ0LnN0YXRlTm9kZSE9bnVsbClzYihlLHQsZS5tZW1vaXplZFByb3BzLHIpO2Vsc2V7aWYodHlwZW9mIHIhPSJzdHJpbmciJiZ0LnN0YXRlTm9kZT09PW51bGwpdGhyb3cgRXJyb3IoVSgxNjYpKTtpZihuPVdvKG9zLmN1cnJlbnQpLFdvKGJyLmN1cnJlbnQpLE9sKHQpKXtpZihyPXQuc3RhdGVOb2RlLG49dC5tZW1vaXplZFByb3BzLHJbeXJdPXQsKGE9ci5ub2RlVmFsdWUhPT1uKSYmKGU9dm4sZSE9PW51bGwpKXN3aXRjaChlLnRhZyl7Y2FzZSAzOk1sKHIubm9kZVZhbHVlLG4sKGUubW9kZSYxKSE9PTApO2JyZWFrO2Nhc2UgNTplLm1lbW9pemVkUHJvcHMuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIT09ITAmJk1sKHIubm9kZVZhbHVlLG4sKGUubW9kZSYxKSE9PTApfWEmJih0LmZsYWdzfD00KX1lbHNlIHI9KG4ubm9kZVR5cGU9PT05P246bi5vd25lckRvY3VtZW50KS5jcmVhdGVUZXh0Tm9kZShyKSxyW3lyXT10LHQuc3RhdGVOb2RlPXJ9cmV0dXJuIFd0KHQpLG51bGw7Y2FzZSAxMzppZihKZShudCkscj10Lm1lbW9pemVkU3RhdGUsZT09PW51bGx8fGUubWVtb2l6ZWRTdGF0ZSE9PW51bGwmJmUubWVtb2l6ZWRTdGF0ZS5kZWh5ZHJhdGVkIT09bnVsbCl7aWYoUWUmJnluIT09bnVsbCYmdC5tb2RlJjEmJiEodC5mbGFncyYxMjgpKU52KCksV2EoKSx0LmZsYWdzfD05ODU2MCxhPSExO2Vsc2UgaWYoYT1PbCh0KSxyIT09bnVsbCYmci5kZWh5ZHJhdGVkIT09bnVsbCl7aWYoZT09PW51bGwpe2lmKCFhKXRocm93IEVycm9yKFUoMzE4KSk7aWYoYT10Lm1lbW9pemVkU3RhdGUsYT1hIT09bnVsbD9hLmRlaHlkcmF0ZWQ6bnVsbCwhYSl0aHJvdyBFcnJvcihVKDMxNykpO2FbeXJdPXR9ZWxzZSBXYSgpLCEodC5mbGFncyYxMjgpJiYodC5tZW1vaXplZFN0YXRlPW51bGwpLHQuZmxhZ3N8PTQ7V3QodCksYT0hMX1lbHNlIFhuIT09bnVsbCYmKHhwKFhuKSxYbj1udWxsKSxhPSEwO2lmKCFhKXJldHVybiB0LmZsYWdzJjY1NTM2P3Q6bnVsbH1yZXR1cm4gdC5mbGFncyYxMjg/KHQubGFuZXM9bix0KToocj1yIT09bnVsbCxyIT09KGUhPT1udWxsJiZlLm1lbW9pemVkU3RhdGUhPT1udWxsKSYmciYmKHQuY2hpbGQuZmxhZ3N8PTgxOTIsdC5tb2RlJjEmJihlPT09bnVsbHx8bnQuY3VycmVudCYxP3Z0PT09MCYmKHZ0PTMpOmxmKCkpKSx0LnVwZGF0ZVF1ZXVlIT09bnVsbCYmKHQuZmxhZ3N8PTQpLFd0KHQpLG51bGwpO2Nhc2UgNDpyZXR1cm4gSGEoKSxtcChlLHQpLGU9PT1udWxsJiZlcyh0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxXdCh0KSxudWxsO2Nhc2UgMTA6cmV0dXJuIEdwKHQudHlwZS5fY29udGV4dCksV3QodCksbnVsbDtjYXNlIDE3OnJldHVybiBzbih0LnR5cGUpJiZ0ZCgpLFd0KHQpLG51bGw7Y2FzZSAxOTppZihKZShudCksYT10Lm1lbW9pemVkU3RhdGUsYT09PW51bGwpcmV0dXJuIFd0KHQpLG51bGw7aWYocj0odC5mbGFncyYxMjgpIT09MCxpPWEucmVuZGVyaW5nLGk9PT1udWxsKWlmKHIpTWkoYSwhMSk7ZWxzZXtpZih2dCE9PTB8fGUhPT1udWxsJiZlLmZsYWdzJjEyOClmb3IoZT10LmNoaWxkO2UhPT1udWxsOyl7aWYoaT1sZChlKSxpIT09bnVsbCl7Zm9yKHQuZmxhZ3N8PTEyOCxNaShhLCExKSxyPWkudXBkYXRlUXVldWUsciE9PW51bGwmJih0LnVwZGF0ZVF1ZXVlPXIsdC5mbGFnc3w9NCksdC5zdWJ0cmVlRmxhZ3M9MCxyPW4sbj10LmNoaWxkO24hPT1udWxsOylhPW4sZT1yLGEuZmxhZ3MmPTE0NjgwMDY2LGk9YS5hbHRlcm5hdGUsaT09PW51bGw/KGEuY2hpbGRMYW5lcz0wLGEubGFuZXM9ZSxhLmNoaWxkPW51bGwsYS5zdWJ0cmVlRmxhZ3M9MCxhLm1lbW9pemVkUHJvcHM9bnVsbCxhLm1lbW9pemVkU3RhdGU9bnVsbCxhLnVwZGF0ZVF1ZXVlPW51bGwsYS5kZXBlbmRlbmNpZXM9bnVsbCxhLnN0YXRlTm9kZT1udWxsKTooYS5jaGlsZExhbmVzPWkuY2hpbGRMYW5lcyxhLmxhbmVzPWkubGFuZXMsYS5jaGlsZD1pLmNoaWxkLGEuc3VidHJlZUZsYWdzPTAsYS5kZWxldGlvbnM9bnVsbCxhLm1lbW9pemVkUHJvcHM9aS5tZW1vaXplZFByb3BzLGEubWVtb2l6ZWRTdGF0ZT1pLm1lbW9pemVkU3RhdGUsYS51cGRhdGVRdWV1ZT1pLnVwZGF0ZVF1ZXVlLGEudHlwZT1pLnR5cGUsZT1pLmRlcGVuZGVuY2llcyxhLmRlcGVuZGVuY2llcz1lPT09bnVsbD9udWxsOntsYW5lczplLmxhbmVzLGZpcnN0Q29udGV4dDplLmZpcnN0Q29udGV4dH0pLG49bi5zaWJsaW5nO3JldHVybiBZZShudCxudC5jdXJyZW50JjF8MiksdC5jaGlsZH1lPWUuc2libGluZ31hLnRhaWwhPT1udWxsJiZ1dCgpPkdhJiYodC5mbGFnc3w9MTI4LHI9ITAsTWkoYSwhMSksdC5sYW5lcz00MTk0MzA0KX1lbHNle2lmKCFyKWlmKGU9bGQoaSksZSE9PW51bGwpe2lmKHQuZmxhZ3N8PTEyOCxyPSEwLG49ZS51cGRhdGVRdWV1ZSxuIT09bnVsbCYmKHQudXBkYXRlUXVldWU9bix0LmZsYWdzfD00KSxNaShhLCEwKSxhLnRhaWw9PT1udWxsJiZhLnRhaWxNb2RlPT09ImhpZGRlbiImJiFpLmFsdGVybmF0ZSYmIVFlKXJldHVybiBXdCh0KSxudWxsfWVsc2UgMip1dCgpLWEucmVuZGVyaW5nU3RhcnRUaW1lPkdhJiZuIT09MTA3Mzc0MTgyNCYmKHQuZmxhZ3N8PTEyOCxyPSEwLE1pKGEsITEpLHQubGFuZXM9NDE5NDMwNCk7YS5pc0JhY2t3YXJkcz8oaS5zaWJsaW5nPXQuY2hpbGQsdC5jaGlsZD1pKToobj1hLmxhc3QsbiE9PW51bGw/bi5zaWJsaW5nPWk6dC5jaGlsZD1pLGEubGFzdD1pKX1yZXR1cm4gYS50YWlsIT09bnVsbD8odD1hLnRhaWwsYS5yZW5kZXJpbmc9dCxhLnRhaWw9dC5zaWJsaW5nLGEucmVuZGVyaW5nU3RhcnRUaW1lPXV0KCksdC5zaWJsaW5nPW51bGwsbj1udC5jdXJyZW50LFllKG50LHI/biYxfDI6biYxKSx0KTooV3QodCksbnVsbCk7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBzZigpLHI9dC5tZW1vaXplZFN0YXRlIT09bnVsbCxlIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlIT09bnVsbCE9PXImJih0LmZsYWdzfD04MTkyKSxyJiZ0Lm1vZGUmMT9nbiYxMDczNzQxODI0JiYoV3QodCksdC5zdWJ0cmVlRmxhZ3MmNiYmKHQuZmxhZ3N8PTgxOTIpKTpXdCh0KSxudWxsO2Nhc2UgMjQ6cmV0dXJuIG51bGw7Y2FzZSAyNTpyZXR1cm4gbnVsbH10aHJvdyBFcnJvcihVKDE1Nix0LnRhZykpfWZ1bmN0aW9uIFdOKGUsdCl7c3dpdGNoKFdwKHQpLHQudGFnKXtjYXNlIDE6cmV0dXJuIHNuKHQudHlwZSkmJnRkKCksZT10LmZsYWdzLGUmNjU1MzY/KHQuZmxhZ3M9ZSYtNjU1Mzd8MTI4LHQpOm51bGw7Y2FzZSAzOnJldHVybiBIYSgpLEplKGFuKSxKZShIdCksWHAoKSxlPXQuZmxhZ3MsZSY2NTUzNiYmIShlJjEyOCk/KHQuZmxhZ3M9ZSYtNjU1Mzd8MTI4LHQpOm51bGw7Y2FzZSA1OnJldHVybiBxcCh0KSxudWxsO2Nhc2UgMTM6aWYoSmUobnQpLGU9dC5tZW1vaXplZFN0YXRlLGUhPT1udWxsJiZlLmRlaHlkcmF0ZWQhPT1udWxsKXtpZih0LmFsdGVybmF0ZT09PW51bGwpdGhyb3cgRXJyb3IoVSgzNDApKTtXYSgpfXJldHVybiBlPXQuZmxhZ3MsZSY2NTUzNj8odC5mbGFncz1lJi02NTUzN3wxMjgsdCk6bnVsbDtjYXNlIDE5OnJldHVybiBKZShudCksbnVsbDtjYXNlIDQ6cmV0dXJuIEhhKCksbnVsbDtjYXNlIDEwOnJldHVybiBHcCh0LnR5cGUuX2NvbnRleHQpLG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBzZigpLG51bGw7Y2FzZSAyNDpyZXR1cm4gbnVsbDtkZWZhdWx0OnJldHVybiBudWxsfX12YXIgUGw9ITEsQnQ9ITEsQk49dHlwZW9mIFdlYWtTZXQ9PSJmdW5jdGlvbiI/V2Vha1NldDpTZXQsWD1udWxsO2Z1bmN0aW9uIE1hKGUsdCl7dmFyIG49ZS5yZWY7aWYobiE9PW51bGwpaWYodHlwZW9mIG49PSJmdW5jdGlvbiIpdHJ5e24obnVsbCl9Y2F0Y2gocil7aXQoZSx0LHIpfWVsc2Ugbi5jdXJyZW50PW51bGx9ZnVuY3Rpb24gaHAoZSx0LG4pe3RyeXtuKCl9Y2F0Y2gocil7aXQoZSx0LHIpfX12YXIgeXk9ITE7ZnVuY3Rpb24gSE4oZSx0KXtpZihRdT1KbCxlPXB2KCksRnAoZSkpe2lmKCJzZWxlY3Rpb25TdGFydCJpbiBlKXZhciBuPXtzdGFydDplLnNlbGVjdGlvblN0YXJ0LGVuZDplLnNlbGVjdGlvbkVuZH07ZWxzZSBlOntuPShuPWUub3duZXJEb2N1bWVudCkmJm4uZGVmYXVsdFZpZXd8fHdpbmRvdzt2YXIgcj1uLmdldFNlbGVjdGlvbiYmbi5nZXRTZWxlY3Rpb24oKTtpZihyJiZyLnJhbmdlQ291bnQhPT0wKXtuPXIuYW5jaG9yTm9kZTt2YXIgbz1yLmFuY2hvck9mZnNldCxhPXIuZm9jdXNOb2RlO3I9ci5mb2N1c09mZnNldDt0cnl7bi5ub2RlVHlwZSxhLm5vZGVUeXBlfWNhdGNoe249bnVsbDticmVhayBlfXZhciBpPTAscz0tMSxsPS0xLGQ9MCxjPTAsdT1lLHA9bnVsbDt0OmZvcig7Oyl7Zm9yKHZhciBmO3UhPT1ufHxvIT09MCYmdS5ub2RlVHlwZSE9PTN8fChzPWkrbyksdSE9PWF8fHIhPT0wJiZ1Lm5vZGVUeXBlIT09M3x8KGw9aStyKSx1Lm5vZGVUeXBlPT09MyYmKGkrPXUubm9kZVZhbHVlLmxlbmd0aCksKGY9dS5maXJzdENoaWxkKSE9PW51bGw7KXA9dSx1PWY7Zm9yKDs7KXtpZih1PT09ZSlicmVhayB0O2lmKHA9PT1uJiYrK2Q9PT1vJiYocz1pKSxwPT09YSYmKytjPT09ciYmKGw9aSksKGY9dS5uZXh0U2libGluZykhPT1udWxsKWJyZWFrO3U9cCxwPXUucGFyZW50Tm9kZX11PWZ9bj1zPT09LTF8fGw9PT0tMT9udWxsOntzdGFydDpzLGVuZDpsfX1lbHNlIG49bnVsbH1uPW58fHtzdGFydDowLGVuZDowfX1lbHNlIG49bnVsbDtmb3IoWnU9e2ZvY3VzZWRFbGVtOmUsc2VsZWN0aW9uUmFuZ2U6bn0sSmw9ITEsWD10O1ghPT1udWxsOylpZih0PVgsZT10LmNoaWxkLCh0LnN1YnRyZWVGbGFncyYxMDI4KSE9PTAmJmUhPT1udWxsKWUucmV0dXJuPXQsWD1lO2Vsc2UgZm9yKDtYIT09bnVsbDspe3Q9WDt0cnl7dmFyIHk9dC5hbHRlcm5hdGU7aWYodC5mbGFncyYxMDI0KXN3aXRjaCh0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpicmVhaztjYXNlIDE6aWYoeSE9PW51bGwpe3ZhciB2PXkubWVtb2l6ZWRQcm9wcyx3PXkubWVtb2l6ZWRTdGF0ZSxnPXQuc3RhdGVOb2RlLGg9Zy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSh0LmVsZW1lbnRUeXBlPT09dC50eXBlP3Y6WW4odC50eXBlLHYpLHcpO2cuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGU9aH1icmVhaztjYXNlIDM6dmFyIGI9dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztiLm5vZGVUeXBlPT09MT9iLnRleHRDb250ZW50PSIiOmIubm9kZVR5cGU9PT05JiZiLmRvY3VtZW50RWxlbWVudCYmYi5yZW1vdmVDaGlsZChiLmRvY3VtZW50RWxlbWVudCk7YnJlYWs7Y2FzZSA1OmNhc2UgNjpjYXNlIDQ6Y2FzZSAxNzpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKFUoMTYzKSl9fWNhdGNoKG0pe2l0KHQsdC5yZXR1cm4sbSl9aWYoZT10LnNpYmxpbmcsZSE9PW51bGwpe2UucmV0dXJuPXQucmV0dXJuLFg9ZTticmVha31YPXQucmV0dXJufXJldHVybiB5PXl5LHl5PSExLHl9ZnVuY3Rpb24gS2koZSx0LG4pe3ZhciByPXQudXBkYXRlUXVldWU7aWYocj1yIT09bnVsbD9yLmxhc3RFZmZlY3Q6bnVsbCxyIT09bnVsbCl7dmFyIG89cj1yLm5leHQ7ZG97aWYoKG8udGFnJmUpPT09ZSl7dmFyIGE9by5kZXN0cm95O28uZGVzdHJveT12b2lkIDAsYSE9PXZvaWQgMCYmaHAodCxuLGEpfW89by5uZXh0fXdoaWxlKG8hPT1yKX19ZnVuY3Rpb24gRWQoZSx0KXtpZih0PXQudXBkYXRlUXVldWUsdD10IT09bnVsbD90Lmxhc3RFZmZlY3Q6bnVsbCx0IT09bnVsbCl7dmFyIG49dD10Lm5leHQ7ZG97aWYoKG4udGFnJmUpPT09ZSl7dmFyIHI9bi5jcmVhdGU7bi5kZXN0cm95PXIoKX1uPW4ubmV4dH13aGlsZShuIT09dCl9fWZ1bmN0aW9uIGdwKGUpe3ZhciB0PWUucmVmO2lmKHQhPT1udWxsKXt2YXIgbj1lLnN0YXRlTm9kZTtzd2l0Y2goZS50YWcpe2Nhc2UgNTplPW47YnJlYWs7ZGVmYXVsdDplPW59dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChlKTp0LmN1cnJlbnQ9ZX19ZnVuY3Rpb24gbGIoZSl7dmFyIHQ9ZS5hbHRlcm5hdGU7dCE9PW51bGwmJihlLmFsdGVybmF0ZT1udWxsLGxiKHQpKSxlLmNoaWxkPW51bGwsZS5kZWxldGlvbnM9bnVsbCxlLnNpYmxpbmc9bnVsbCxlLnRhZz09PTUmJih0PWUuc3RhdGVOb2RlLHQhPT1udWxsJiYoZGVsZXRlIHRbeXJdLGRlbGV0ZSB0W25zXSxkZWxldGUgdFtucF0sZGVsZXRlIHRbRU5dLGRlbGV0ZSB0W05OXSkpLGUuc3RhdGVOb2RlPW51bGwsZS5yZXR1cm49bnVsbCxlLmRlcGVuZGVuY2llcz1udWxsLGUubWVtb2l6ZWRQcm9wcz1udWxsLGUubWVtb2l6ZWRTdGF0ZT1udWxsLGUucGVuZGluZ1Byb3BzPW51bGwsZS5zdGF0ZU5vZGU9bnVsbCxlLnVwZGF0ZVF1ZXVlPW51bGx9ZnVuY3Rpb24gZGIoZSl7cmV0dXJuIGUudGFnPT09NXx8ZS50YWc9PT0zfHxlLnRhZz09PTR9ZnVuY3Rpb24gdnkoZSl7ZTpmb3IoOzspe2Zvcig7ZS5zaWJsaW5nPT09bnVsbDspe2lmKGUucmV0dXJuPT09bnVsbHx8ZGIoZS5yZXR1cm4pKXJldHVybiBudWxsO2U9ZS5yZXR1cm59Zm9yKGUuc2libGluZy5yZXR1cm49ZS5yZXR1cm4sZT1lLnNpYmxpbmc7ZS50YWchPT01JiZlLnRhZyE9PTYmJmUudGFnIT09MTg7KXtpZihlLmZsYWdzJjJ8fGUuY2hpbGQ9PT1udWxsfHxlLnRhZz09PTQpY29udGludWUgZTtlLmNoaWxkLnJldHVybj1lLGU9ZS5jaGlsZH1pZighKGUuZmxhZ3MmMikpcmV0dXJuIGUuc3RhdGVOb2RlfX1mdW5jdGlvbiB5cChlLHQsbil7dmFyIHI9ZS50YWc7aWYocj09PTV8fHI9PT02KWU9ZS5zdGF0ZU5vZGUsdD9uLm5vZGVUeXBlPT09OD9uLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdCk6bi5pbnNlcnRCZWZvcmUoZSx0KToobi5ub2RlVHlwZT09PTg/KHQ9bi5wYXJlbnROb2RlLHQuaW5zZXJ0QmVmb3JlKGUsbikpOih0PW4sdC5hcHBlbmRDaGlsZChlKSksbj1uLl9yZWFjdFJvb3RDb250YWluZXIsbiE9bnVsbHx8dC5vbmNsaWNrIT09bnVsbHx8KHQub25jbGljaz1lZCkpO2Vsc2UgaWYociE9PTQmJihlPWUuY2hpbGQsZSE9PW51bGwpKWZvcih5cChlLHQsbiksZT1lLnNpYmxpbmc7ZSE9PW51bGw7KXlwKGUsdCxuKSxlPWUuc2libGluZ31mdW5jdGlvbiB2cChlLHQsbil7dmFyIHI9ZS50YWc7aWYocj09PTV8fHI9PT02KWU9ZS5zdGF0ZU5vZGUsdD9uLmluc2VydEJlZm9yZShlLHQpOm4uYXBwZW5kQ2hpbGQoZSk7ZWxzZSBpZihyIT09NCYmKGU9ZS5jaGlsZCxlIT09bnVsbCkpZm9yKHZwKGUsdCxuKSxlPWUuc2libGluZztlIT09bnVsbDspdnAoZSx0LG4pLGU9ZS5zaWJsaW5nfXZhciBPdD1udWxsLHFuPSExO2Z1bmN0aW9uIG5vKGUsdCxuKXtmb3Iobj1uLmNoaWxkO24hPT1udWxsOyljYihlLHQsbiksbj1uLnNpYmxpbmd9ZnVuY3Rpb24gY2IoZSx0LG4pe2lmKHZyJiZ0eXBlb2YgdnIub25Db21taXRGaWJlclVubW91bnQ9PSJmdW5jdGlvbiIpdHJ5e3ZyLm9uQ29tbWl0RmliZXJVbm1vdW50KGdkLG4pfWNhdGNoe31zd2l0Y2gobi50YWcpe2Nhc2UgNTpCdHx8TWEobix0KTtjYXNlIDY6dmFyIHI9T3Qsbz1xbjtPdD1udWxsLG5vKGUsdCxuKSxPdD1yLHFuPW8sT3QhPT1udWxsJiYocW4/KGU9T3Qsbj1uLnN0YXRlTm9kZSxlLm5vZGVUeXBlPT09OD9lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobik6ZS5yZW1vdmVDaGlsZChuKSk6T3QucmVtb3ZlQ2hpbGQobi5zdGF0ZU5vZGUpKTticmVhaztjYXNlIDE4Ok90IT09bnVsbCYmKHFuPyhlPU90LG49bi5zdGF0ZU5vZGUsZS5ub2RlVHlwZT09PTg/a3UoZS5wYXJlbnROb2RlLG4pOmUubm9kZVR5cGU9PT0xJiZrdShlLG4pLEppKGUpKTprdShPdCxuLnN0YXRlTm9kZSkpO2JyZWFrO2Nhc2UgNDpyPU90LG89cW4sT3Q9bi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxxbj0hMCxubyhlLHQsbiksT3Q9cixxbj1vO2JyZWFrO2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTppZighQnQmJihyPW4udXBkYXRlUXVldWUsciE9PW51bGwmJihyPXIubGFzdEVmZmVjdCxyIT09bnVsbCkpKXtvPXI9ci5uZXh0O2Rve3ZhciBhPW8saT1hLmRlc3Ryb3k7YT1hLnRhZyxpIT09dm9pZCAwJiYoYSYyfHxhJjQpJiZocChuLHQsaSksbz1vLm5leHR9d2hpbGUobyE9PXIpfW5vKGUsdCxuKTticmVhaztjYXNlIDE6aWYoIUJ0JiYoTWEobix0KSxyPW4uc3RhdGVOb2RlLHR5cGVvZiByLmNvbXBvbmVudFdpbGxVbm1vdW50PT0iZnVuY3Rpb24iKSl0cnl7ci5wcm9wcz1uLm1lbW9pemVkUHJvcHMsci5zdGF0ZT1uLm1lbW9pemVkU3RhdGUsci5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKHMpe2l0KG4sdCxzKX1ubyhlLHQsbik7YnJlYWs7Y2FzZSAyMTpubyhlLHQsbik7YnJlYWs7Y2FzZSAyMjpuLm1vZGUmMT8oQnQ9KHI9QnQpfHxuLm1lbW9pemVkU3RhdGUhPT1udWxsLG5vKGUsdCxuKSxCdD1yKTpubyhlLHQsbik7YnJlYWs7ZGVmYXVsdDpubyhlLHQsbil9fWZ1bmN0aW9uIGJ5KGUpe3ZhciB0PWUudXBkYXRlUXVldWU7aWYodCE9PW51bGwpe2UudXBkYXRlUXVldWU9bnVsbDt2YXIgbj1lLnN0YXRlTm9kZTtuPT09bnVsbCYmKG49ZS5zdGF0ZU5vZGU9bmV3IEJOKSx0LmZvckVhY2goZnVuY3Rpb24ocil7dmFyIG89Sk4uYmluZChudWxsLGUscik7bi5oYXMocil8fChuLmFkZChyKSxyLnRoZW4obyxvKSl9KX19ZnVuY3Rpb24gam4oZSx0KXt2YXIgbj10LmRlbGV0aW9ucztpZihuIT09bnVsbClmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIG89bltyXTt0cnl7dmFyIGE9ZSxpPXQscz1pO2U6Zm9yKDtzIT09bnVsbDspe3N3aXRjaChzLnRhZyl7Y2FzZSA1Ok90PXMuc3RhdGVOb2RlLHFuPSExO2JyZWFrIGU7Y2FzZSAzOk90PXMuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8scW49ITA7YnJlYWsgZTtjYXNlIDQ6T3Q9cy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxxbj0hMDticmVhayBlfXM9cy5yZXR1cm59aWYoT3Q9PT1udWxsKXRocm93IEVycm9yKFUoMTYwKSk7Y2IoYSxpLG8pLE90PW51bGwscW49ITE7dmFyIGw9by5hbHRlcm5hdGU7bCE9PW51bGwmJihsLnJldHVybj1udWxsKSxvLnJldHVybj1udWxsfWNhdGNoKGQpe2l0KG8sdCxkKX19aWYodC5zdWJ0cmVlRmxhZ3MmMTI4NTQpZm9yKHQ9dC5jaGlsZDt0IT09bnVsbDspdWIodCxlKSx0PXQuc2libGluZ31mdW5jdGlvbiB1YihlLHQpe3ZhciBuPWUuYWx0ZXJuYXRlLHI9ZS5mbGFncztzd2l0Y2goZS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTppZihqbih0LGUpLGhyKGUpLHImNCl7dHJ5e0tpKDMsZSxlLnJldHVybiksRWQoMyxlKX1jYXRjaCh2KXtpdChlLGUucmV0dXJuLHYpfXRyeXtLaSg1LGUsZS5yZXR1cm4pfWNhdGNoKHYpe2l0KGUsZS5yZXR1cm4sdil9fWJyZWFrO2Nhc2UgMTpqbih0LGUpLGhyKGUpLHImNTEyJiZuIT09bnVsbCYmTWEobixuLnJldHVybik7YnJlYWs7Y2FzZSA1OmlmKGpuKHQsZSksaHIoZSksciY1MTImJm4hPT1udWxsJiZNYShuLG4ucmV0dXJuKSxlLmZsYWdzJjMyKXt2YXIgbz1lLnN0YXRlTm9kZTt0cnl7WWkobywiIil9Y2F0Y2godil7aXQoZSxlLnJldHVybix2KX19aWYociY0JiYobz1lLnN0YXRlTm9kZSxvIT1udWxsKSl7dmFyIGE9ZS5tZW1vaXplZFByb3BzLGk9biE9PW51bGw/bi5tZW1vaXplZFByb3BzOmEscz1lLnR5cGUsbD1lLnVwZGF0ZVF1ZXVlO2lmKGUudXBkYXRlUXVldWU9bnVsbCxsIT09bnVsbCl0cnl7cz09PSJpbnB1dCImJmEudHlwZT09PSJyYWRpbyImJmEubmFtZSE9bnVsbCYmUnkobyxhKSxIdShzLGkpO3ZhciBkPUh1KHMsYSk7Zm9yKGk9MDtpPGwubGVuZ3RoO2krPTIpe3ZhciBjPWxbaV0sdT1sW2krMV07Yz09PSJzdHlsZSI/Rnkobyx1KTpjPT09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj9feShvLHUpOmM9PT0iY2hpbGRyZW4iP1lpKG8sdSk6TnAobyxjLHUsZCl9c3dpdGNoKHMpe2Nhc2UiaW5wdXQiOlV1KG8sYSk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6UHkobyxhKTticmVhaztjYXNlInNlbGVjdCI6dmFyIHA9by5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlO28uX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZT0hIWEubXVsdGlwbGU7dmFyIGY9YS52YWx1ZTtmIT1udWxsP0lhKG8sISFhLm11bHRpcGxlLGYsITEpOnAhPT0hIWEubXVsdGlwbGUmJihhLmRlZmF1bHRWYWx1ZSE9bnVsbD9JYShvLCEhYS5tdWx0aXBsZSxhLmRlZmF1bHRWYWx1ZSwhMCk6SWEobywhIWEubXVsdGlwbGUsYS5tdWx0aXBsZT9bXToiIiwhMSkpfW9bbnNdPWF9Y2F0Y2godil7aXQoZSxlLnJldHVybix2KX19YnJlYWs7Y2FzZSA2OmlmKGpuKHQsZSksaHIoZSksciY0KXtpZihlLnN0YXRlTm9kZT09PW51bGwpdGhyb3cgRXJyb3IoVSgxNjIpKTtvPWUuc3RhdGVOb2RlLGE9ZS5tZW1vaXplZFByb3BzO3RyeXtvLm5vZGVWYWx1ZT1hfWNhdGNoKHYpe2l0KGUsZS5yZXR1cm4sdil9fWJyZWFrO2Nhc2UgMzppZihqbih0LGUpLGhyKGUpLHImNCYmbiE9PW51bGwmJm4ubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpdHJ5e0ppKHQuY29udGFpbmVySW5mbyl9Y2F0Y2godil7aXQoZSxlLnJldHVybix2KX1icmVhaztjYXNlIDQ6am4odCxlKSxocihlKTticmVhaztjYXNlIDEzOmpuKHQsZSksaHIoZSksbz1lLmNoaWxkLG8uZmxhZ3MmODE5MiYmKGE9by5tZW1vaXplZFN0YXRlIT09bnVsbCxvLnN0YXRlTm9kZS5pc0hpZGRlbj1hLCFhfHxvLmFsdGVybmF0ZSE9PW51bGwmJm8uYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUhPT1udWxsfHwob2Y9dXQoKSkpLHImNCYmYnkoZSk7YnJlYWs7Y2FzZSAyMjppZihjPW4hPT1udWxsJiZuLm1lbW9pemVkU3RhdGUhPT1udWxsLGUubW9kZSYxPyhCdD0oZD1CdCl8fGMsam4odCxlKSxCdD1kKTpqbih0LGUpLGhyKGUpLHImODE5Mil7aWYoZD1lLm1lbW9pemVkU3RhdGUhPT1udWxsLChlLnN0YXRlTm9kZS5pc0hpZGRlbj1kKSYmIWMmJmUubW9kZSYxKWZvcihYPWUsYz1lLmNoaWxkO2MhPT1udWxsOyl7Zm9yKHU9WD1jO1ghPT1udWxsOyl7c3dpdGNoKHA9WCxmPXAuY2hpbGQscC50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpLaSg0LHAscC5yZXR1cm4pO2JyZWFrO2Nhc2UgMTpNYShwLHAucmV0dXJuKTt2YXIgeT1wLnN0YXRlTm9kZTtpZih0eXBlb2YgeS5jb21wb25lbnRXaWxsVW5tb3VudD09ImZ1bmN0aW9uIil7cj1wLG49cC5yZXR1cm47dHJ5e3Q9cix5LnByb3BzPXQubWVtb2l6ZWRQcm9wcyx5LnN0YXRlPXQubWVtb2l6ZWRTdGF0ZSx5LmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2godil7aXQocixuLHYpfX1icmVhaztjYXNlIDU6TWEocCxwLnJldHVybik7YnJlYWs7Y2FzZSAyMjppZihwLm1lbW9pemVkU3RhdGUhPT1udWxsKXtreSh1KTtjb250aW51ZX19ZiE9PW51bGw/KGYucmV0dXJuPXAsWD1mKTpreSh1KX1jPWMuc2libGluZ31lOmZvcihjPW51bGwsdT1lOzspe2lmKHUudGFnPT09NSl7aWYoYz09PW51bGwpe2M9dTt0cnl7bz11LnN0YXRlTm9kZSxkPyhhPW8uc3R5bGUsdHlwZW9mIGEuc2V0UHJvcGVydHk9PSJmdW5jdGlvbiI/YS5zZXRQcm9wZXJ0eSgiZGlzcGxheSIsIm5vbmUiLCJpbXBvcnRhbnQiKTphLmRpc3BsYXk9Im5vbmUiKToocz11LnN0YXRlTm9kZSxsPXUubWVtb2l6ZWRQcm9wcy5zdHlsZSxpPWwhPW51bGwmJmwuaGFzT3duUHJvcGVydHkoImRpc3BsYXkiKT9sLmRpc3BsYXk6bnVsbCxzLnN0eWxlLmRpc3BsYXk9VXkoImRpc3BsYXkiLGkpKX1jYXRjaCh2KXtpdChlLGUucmV0dXJuLHYpfX19ZWxzZSBpZih1LnRhZz09PTYpe2lmKGM9PT1udWxsKXRyeXt1LnN0YXRlTm9kZS5ub2RlVmFsdWU9ZD8iIjp1Lm1lbW9pemVkUHJvcHN9Y2F0Y2godil7aXQoZSxlLnJldHVybix2KX19ZWxzZSBpZigodS50YWchPT0yMiYmdS50YWchPT0yM3x8dS5tZW1vaXplZFN0YXRlPT09bnVsbHx8dT09PWUpJiZ1LmNoaWxkIT09bnVsbCl7dS5jaGlsZC5yZXR1cm49dSx1PXUuY2hpbGQ7Y29udGludWV9aWYodT09PWUpYnJlYWsgZTtmb3IoO3Uuc2libGluZz09PW51bGw7KXtpZih1LnJldHVybj09PW51bGx8fHUucmV0dXJuPT09ZSlicmVhayBlO2M9PT11JiYoYz1udWxsKSx1PXUucmV0dXJufWM9PT11JiYoYz1udWxsKSx1LnNpYmxpbmcucmV0dXJuPXUucmV0dXJuLHU9dS5zaWJsaW5nfX1icmVhaztjYXNlIDE5OmpuKHQsZSksaHIoZSksciY0JiZieShlKTticmVhaztjYXNlIDIxOmJyZWFrO2RlZmF1bHQ6am4odCxlKSxocihlKX19ZnVuY3Rpb24gaHIoZSl7dmFyIHQ9ZS5mbGFncztpZih0JjIpe3RyeXtlOntmb3IodmFyIG49ZS5yZXR1cm47biE9PW51bGw7KXtpZihkYihuKSl7dmFyIHI9bjticmVhayBlfW49bi5yZXR1cm59dGhyb3cgRXJyb3IoVSgxNjApKX1zd2l0Y2goci50YWcpe2Nhc2UgNTp2YXIgbz1yLnN0YXRlTm9kZTtyLmZsYWdzJjMyJiYoWWkobywiIiksci5mbGFncyY9LTMzKTt2YXIgYT12eShlKTt2cChlLGEsbyk7YnJlYWs7Y2FzZSAzOmNhc2UgNDp2YXIgaT1yLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLHM9dnkoZSk7eXAoZSxzLGkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoVSgxNjEpKX19Y2F0Y2gobCl7aXQoZSxlLnJldHVybixsKX1lLmZsYWdzJj0tM310JjQwOTYmJihlLmZsYWdzJj0tNDA5Nyl9ZnVuY3Rpb24gS04oZSx0LG4pe1g9ZSxwYihlLHQsbil9ZnVuY3Rpb24gcGIoZSx0LG4pe2Zvcih2YXIgcj0oZS5tb2RlJjEpIT09MDtYIT09bnVsbDspe3ZhciBvPVgsYT1vLmNoaWxkO2lmKG8udGFnPT09MjImJnIpe3ZhciBpPW8ubWVtb2l6ZWRTdGF0ZSE9PW51bGx8fFBsO2lmKCFpKXt2YXIgcz1vLmFsdGVybmF0ZSxsPXMhPT1udWxsJiZzLm1lbW9pemVkU3RhdGUhPT1udWxsfHxCdDtzPVBsO3ZhciBkPUJ0O2lmKFBsPWksKEJ0PWwpJiYhZClmb3IoWD1vO1ghPT1udWxsOylpPVgsbD1pLmNoaWxkLGkudGFnPT09MjImJmkubWVtb2l6ZWRTdGF0ZSE9PW51bGw/eHkobyk6bCE9PW51bGw/KGwucmV0dXJuPWksWD1sKTp4eShvKTtmb3IoO2EhPT1udWxsOylYPWEscGIoYSx0LG4pLGE9YS5zaWJsaW5nO1g9byxQbD1zLEJ0PWR9d3koZSx0LG4pfWVsc2Ugby5zdWJ0cmVlRmxhZ3MmODc3MiYmYSE9PW51bGw/KGEucmV0dXJuPW8sWD1hKTp3eShlLHQsbil9fWZ1bmN0aW9uIHd5KGUpe2Zvcig7WCE9PW51bGw7KXt2YXIgdD1YO2lmKHQuZmxhZ3MmODc3Mil7dmFyIG49dC5hbHRlcm5hdGU7dHJ5e2lmKHQuZmxhZ3MmODc3Milzd2l0Y2godC50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6QnR8fEVkKDUsdCk7YnJlYWs7Y2FzZSAxOnZhciByPXQuc3RhdGVOb2RlO2lmKHQuZmxhZ3MmNCYmIUJ0KWlmKG49PT1udWxsKXIuY29tcG9uZW50RGlkTW91bnQoKTtlbHNle3ZhciBvPXQuZWxlbWVudFR5cGU9PT10LnR5cGU/bi5tZW1vaXplZFByb3BzOlluKHQudHlwZSxuLm1lbW9pemVkUHJvcHMpO3IuY29tcG9uZW50RGlkVXBkYXRlKG8sbi5tZW1vaXplZFN0YXRlLHIuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUpfXZhciBhPXQudXBkYXRlUXVldWU7YSE9PW51bGwmJm95KHQsYSxyKTticmVhaztjYXNlIDM6dmFyIGk9dC51cGRhdGVRdWV1ZTtpZihpIT09bnVsbCl7aWYobj1udWxsLHQuY2hpbGQhPT1udWxsKXN3aXRjaCh0LmNoaWxkLnRhZyl7Y2FzZSA1Om49dC5jaGlsZC5zdGF0ZU5vZGU7YnJlYWs7Y2FzZSAxOm49dC5jaGlsZC5zdGF0ZU5vZGV9b3kodCxpLG4pfWJyZWFrO2Nhc2UgNTp2YXIgcz10LnN0YXRlTm9kZTtpZihuPT09bnVsbCYmdC5mbGFncyY0KXtuPXM7dmFyIGw9dC5tZW1vaXplZFByb3BzO3N3aXRjaCh0LnR5cGUpe2Nhc2UiYnV0dG9uIjpjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6bC5hdXRvRm9jdXMmJm4uZm9jdXMoKTticmVhaztjYXNlImltZyI6bC5zcmMmJihuLnNyYz1sLnNyYyl9fWJyZWFrO2Nhc2UgNjpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSAxMjpicmVhaztjYXNlIDEzOmlmKHQubWVtb2l6ZWRTdGF0ZT09PW51bGwpe3ZhciBkPXQuYWx0ZXJuYXRlO2lmKGQhPT1udWxsKXt2YXIgYz1kLm1lbW9pemVkU3RhdGU7aWYoYyE9PW51bGwpe3ZhciB1PWMuZGVoeWRyYXRlZDt1IT09bnVsbCYmSmkodSl9fX1icmVhaztjYXNlIDE5OmNhc2UgMTc6Y2FzZSAyMTpjYXNlIDIyOmNhc2UgMjM6Y2FzZSAyNTpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKFUoMTYzKSl9QnR8fHQuZmxhZ3MmNTEyJiZncCh0KX1jYXRjaChwKXtpdCh0LHQucmV0dXJuLHApfX1pZih0PT09ZSl7WD1udWxsO2JyZWFrfWlmKG49dC5zaWJsaW5nLG4hPT1udWxsKXtuLnJldHVybj10LnJldHVybixYPW47YnJlYWt9WD10LnJldHVybn19ZnVuY3Rpb24ga3koZSl7Zm9yKDtYIT09bnVsbDspe3ZhciB0PVg7aWYodD09PWUpe1g9bnVsbDticmVha312YXIgbj10LnNpYmxpbmc7aWYobiE9PW51bGwpe24ucmV0dXJuPXQucmV0dXJuLFg9bjticmVha31YPXQucmV0dXJufX1mdW5jdGlvbiB4eShlKXtmb3IoO1ghPT1udWxsOyl7dmFyIHQ9WDt0cnl7c3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OnZhciBuPXQucmV0dXJuO3RyeXtFZCg0LHQpfWNhdGNoKGwpe2l0KHQsbixsKX1icmVhaztjYXNlIDE6dmFyIHI9dC5zdGF0ZU5vZGU7aWYodHlwZW9mIHIuY29tcG9uZW50RGlkTW91bnQ9PSJmdW5jdGlvbiIpe3ZhciBvPXQucmV0dXJuO3RyeXtyLmNvbXBvbmVudERpZE1vdW50KCl9Y2F0Y2gobCl7aXQodCxvLGwpfX12YXIgYT10LnJldHVybjt0cnl7Z3AodCl9Y2F0Y2gobCl7aXQodCxhLGwpfWJyZWFrO2Nhc2UgNTp2YXIgaT10LnJldHVybjt0cnl7Z3AodCl9Y2F0Y2gobCl7aXQodCxpLGwpfX19Y2F0Y2gobCl7aXQodCx0LnJldHVybixsKX1pZih0PT09ZSl7WD1udWxsO2JyZWFrfXZhciBzPXQuc2libGluZztpZihzIT09bnVsbCl7cy5yZXR1cm49dC5yZXR1cm4sWD1zO2JyZWFrfVg9dC5yZXR1cm59fXZhciBHTj1NYXRoLmNlaWwsdWQ9enIuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixuZj16ci5SZWFjdEN1cnJlbnRPd25lcixDbj16ci5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxPZT0wLFR0PW51bGwsbXQ9bnVsbCxJdD0wLGduPTAsT2E9a28oMCksdnQ9MCxscz1udWxsLGpvPTAsTmQ9MCxyZj0wLEdpPW51bGwscm49bnVsbCxvZj0wLEdhPTEvMCxNcj1udWxsLHBkPSExLGJwPW51bGwsaG89bnVsbCxMbD0hMSxsbz1udWxsLGZkPTAsVmk9MCx3cD1udWxsLEtsPS0xLEdsPTA7ZnVuY3Rpb24gWHQoKXtyZXR1cm4gT2UmNj91dCgpOktsIT09LTE/S2w6S2w9dXQoKX1mdW5jdGlvbiBnbyhlKXtyZXR1cm4gZS5tb2RlJjE/T2UmMiYmSXQhPT0wP0l0Ji1JdDpETi50cmFuc2l0aW9uIT09bnVsbD8oR2w9PT0wJiYoR2w9JHkoKSksR2wpOihlPVdlLGUhPT0wfHwoZT13aW5kb3cuZXZlbnQsZT1lPT09dm9pZCAwPzE2OnJ2KGUudHlwZSkpLGUpOjF9ZnVuY3Rpb24gSm4oZSx0LG4scil7aWYoNTA8VmkpdGhyb3cgVmk9MCx3cD1udWxsLEVycm9yKFUoMTg1KSk7ZHMoZSxuLHIpLCghKE9lJjIpfHxlIT09VHQpJiYoZT09PVR0JiYoIShPZSYyKSYmKE5kfD1uKSx2dD09PTQmJmlvKGUsSXQpKSxsbihlLHIpLG49PT0xJiZPZT09PTAmJiEodC5tb2RlJjEpJiYoR2E9dXQoKSs1MDAsa2QmJnhvKCkpKX1mdW5jdGlvbiBsbihlLHQpe3ZhciBuPWUuY2FsbGJhY2tOb2RlO0NFKGUsdCk7dmFyIHI9JGwoZSxlPT09VHQ/SXQ6MCk7aWYocj09PTApbiE9PW51bGwmJk1nKG4pLGUuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja1ByaW9yaXR5PTA7ZWxzZSBpZih0PXImLXIsZS5jYWxsYmFja1ByaW9yaXR5IT09dCl7aWYobiE9bnVsbCYmTWcobiksdD09PTEpZS50YWc9PT0wP1ROKFN5LmJpbmQobnVsbCxlKSk6eHYoU3kuYmluZChudWxsLGUpKSx4TihmdW5jdGlvbigpeyEoT2UmNikmJnhvKCl9KSxuPW51bGw7ZWxzZXtzd2l0Y2goSnkocikpe2Nhc2UgMTpuPU1wO2JyZWFrO2Nhc2UgNDpuPXF5O2JyZWFrO2Nhc2UgMTY6bj1YbDticmVhaztjYXNlIDUzNjg3MDkxMjpuPVh5O2JyZWFrO2RlZmF1bHQ6bj1YbH1uPXdiKG4sZmIuYmluZChudWxsLGUpKX1lLmNhbGxiYWNrUHJpb3JpdHk9dCxlLmNhbGxiYWNrTm9kZT1ufX1mdW5jdGlvbiBmYihlLHQpe2lmKEtsPS0xLEdsPTAsT2UmNil0aHJvdyBFcnJvcihVKDMyNykpO3ZhciBuPWUuY2FsbGJhY2tOb2RlO2lmKFVhKCkmJmUuY2FsbGJhY2tOb2RlIT09bilyZXR1cm4gbnVsbDt2YXIgcj0kbChlLGU9PT1UdD9JdDowKTtpZihyPT09MClyZXR1cm4gbnVsbDtpZihyJjMwfHxyJmUuZXhwaXJlZExhbmVzfHx0KXQ9bWQoZSxyKTtlbHNle3Q9cjt2YXIgbz1PZTtPZXw9Mjt2YXIgYT1oYigpOyhUdCE9PWV8fEl0IT09dCkmJihNcj1udWxsLEdhPXV0KCkrNTAwLEJvKGUsdCkpO2RvIHRyeXtZTigpO2JyZWFrfWNhdGNoKHMpe21iKGUscyl9d2hpbGUoITApO0twKCksdWQuY3VycmVudD1hLE9lPW8sbXQhPT1udWxsP3Q9MDooVHQ9bnVsbCxJdD0wLHQ9dnQpfWlmKHQhPT0wKXtpZih0PT09MiYmKG89WXUoZSksbyE9PTAmJihyPW8sdD1rcChlLG8pKSksdD09PTEpdGhyb3cgbj1scyxCbyhlLDApLGlvKGUsciksbG4oZSx1dCgpKSxuO2lmKHQ9PT02KWlvKGUscik7ZWxzZXtpZihvPWUuY3VycmVudC5hbHRlcm5hdGUsIShyJjMwKSYmIVZOKG8pJiYodD1tZChlLHIpLHQ9PT0yJiYoYT1ZdShlKSxhIT09MCYmKHI9YSx0PWtwKGUsYSkpKSx0PT09MSkpdGhyb3cgbj1scyxCbyhlLDApLGlvKGUsciksbG4oZSx1dCgpKSxuO3N3aXRjaChlLmZpbmlzaGVkV29yaz1vLGUuZmluaXNoZWRMYW5lcz1yLHQpe2Nhc2UgMDpjYXNlIDE6dGhyb3cgRXJyb3IoVSgzNDUpKTtjYXNlIDI6VW8oZSxybixNcik7YnJlYWs7Y2FzZSAzOmlmKGlvKGUsciksKHImMTMwMDIzNDI0KT09PXImJih0PW9mKzUwMC11dCgpLDEwPHQpKXtpZigkbChlLDApIT09MClicmVhaztpZihvPWUuc3VzcGVuZGVkTGFuZXMsKG8mcikhPT1yKXtYdCgpLGUucGluZ2VkTGFuZXN8PWUuc3VzcGVuZGVkTGFuZXMmbzticmVha31lLnRpbWVvdXRIYW5kbGU9dHAoVW8uYmluZChudWxsLGUscm4sTXIpLHQpO2JyZWFrfVVvKGUscm4sTXIpO2JyZWFrO2Nhc2UgNDppZihpbyhlLHIpLChyJjQxOTQyNDApPT09cilicmVhaztmb3IodD1lLmV2ZW50VGltZXMsbz0tMTswPHI7KXt2YXIgaT0zMS0kbihyKTthPTE8PGksaT10W2ldLGk+byYmKG89aSksciY9fmF9aWYocj1vLHI9dXQoKS1yLHI9KDEyMD5yPzEyMDo0ODA+cj80ODA6MTA4MD5yPzEwODA6MTkyMD5yPzE5MjA6M2UzPnI/M2UzOjQzMjA+cj80MzIwOjE5NjAqR04oci8xOTYwKSktciwxMDxyKXtlLnRpbWVvdXRIYW5kbGU9dHAoVW8uYmluZChudWxsLGUscm4sTXIpLHIpO2JyZWFrfVVvKGUscm4sTXIpO2JyZWFrO2Nhc2UgNTpVbyhlLHJuLE1yKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKFUoMzI5KSl9fX1yZXR1cm4gbG4oZSx1dCgpKSxlLmNhbGxiYWNrTm9kZT09PW4/ZmIuYmluZChudWxsLGUpOm51bGx9ZnVuY3Rpb24ga3AoZSx0KXt2YXIgbj1HaTtyZXR1cm4gZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkJiYoQm8oZSx0KS5mbGFnc3w9MjU2KSxlPW1kKGUsdCksZSE9PTImJih0PXJuLHJuPW4sdCE9PW51bGwmJnhwKHQpKSxlfWZ1bmN0aW9uIHhwKGUpe3JuPT09bnVsbD9ybj1lOnJuLnB1c2guYXBwbHkocm4sZSl9ZnVuY3Rpb24gVk4oZSl7Zm9yKHZhciB0PWU7Oyl7aWYodC5mbGFncyYxNjM4NCl7dmFyIG49dC51cGRhdGVRdWV1ZTtpZihuIT09bnVsbCYmKG49bi5zdG9yZXMsbiE9PW51bGwpKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgbz1uW3JdLGE9by5nZXRTbmFwc2hvdDtvPW8udmFsdWU7dHJ5e2lmKCFRbihhKCksbykpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9fX1pZihuPXQuY2hpbGQsdC5zdWJ0cmVlRmxhZ3MmMTYzODQmJm4hPT1udWxsKW4ucmV0dXJuPXQsdD1uO2Vsc2V7aWYodD09PWUpYnJlYWs7Zm9yKDt0LnNpYmxpbmc9PT1udWxsOyl7aWYodC5yZXR1cm49PT1udWxsfHx0LnJldHVybj09PWUpcmV0dXJuITA7dD10LnJldHVybn10LnNpYmxpbmcucmV0dXJuPXQucmV0dXJuLHQ9dC5zaWJsaW5nfX1yZXR1cm4hMH1mdW5jdGlvbiBpbyhlLHQpe2Zvcih0Jj1+cmYsdCY9fk5kLGUuc3VzcGVuZGVkTGFuZXN8PXQsZS5waW5nZWRMYW5lcyY9fnQsZT1lLmV4cGlyYXRpb25UaW1lczswPHQ7KXt2YXIgbj0zMS0kbih0KSxyPTE8PG47ZVtuXT0tMSx0Jj1+cn19ZnVuY3Rpb24gU3koZSl7aWYoT2UmNil0aHJvdyBFcnJvcihVKDMyNykpO1VhKCk7dmFyIHQ9JGwoZSwwKTtpZighKHQmMSkpcmV0dXJuIGxuKGUsdXQoKSksbnVsbDt2YXIgbj1tZChlLHQpO2lmKGUudGFnIT09MCYmbj09PTIpe3ZhciByPVl1KGUpO3IhPT0wJiYodD1yLG49a3AoZSxyKSl9aWYobj09PTEpdGhyb3cgbj1scyxCbyhlLDApLGlvKGUsdCksbG4oZSx1dCgpKSxuO2lmKG49PT02KXRocm93IEVycm9yKFUoMzQ1KSk7cmV0dXJuIGUuZmluaXNoZWRXb3JrPWUuY3VycmVudC5hbHRlcm5hdGUsZS5maW5pc2hlZExhbmVzPXQsVW8oZSxybixNciksbG4oZSx1dCgpKSxudWxsfWZ1bmN0aW9uIGFmKGUsdCl7dmFyIG49T2U7T2V8PTE7dHJ5e3JldHVybiBlKHQpfWZpbmFsbHl7T2U9bixPZT09PTAmJihHYT11dCgpKzUwMCxrZCYmeG8oKSl9fWZ1bmN0aW9uIFlvKGUpe2xvIT09bnVsbCYmbG8udGFnPT09MCYmIShPZSY2KSYmVWEoKTt2YXIgdD1PZTtPZXw9MTt2YXIgbj1Dbi50cmFuc2l0aW9uLHI9V2U7dHJ5e2lmKENuLnRyYW5zaXRpb249bnVsbCxXZT0xLGUpcmV0dXJuIGUoKX1maW5hbGx5e1dlPXIsQ24udHJhbnNpdGlvbj1uLE9lPXQsIShPZSY2KSYmeG8oKX19ZnVuY3Rpb24gc2YoKXtnbj1PYS5jdXJyZW50LEplKE9hKX1mdW5jdGlvbiBCbyhlLHQpe2UuZmluaXNoZWRXb3JrPW51bGwsZS5maW5pc2hlZExhbmVzPTA7dmFyIG49ZS50aW1lb3V0SGFuZGxlO2lmKG4hPT0tMSYmKGUudGltZW91dEhhbmRsZT0tMSxrTihuKSksbXQhPT1udWxsKWZvcihuPW10LnJldHVybjtuIT09bnVsbDspe3ZhciByPW47c3dpdGNoKFdwKHIpLHIudGFnKXtjYXNlIDE6cj1yLnR5cGUuY2hpbGRDb250ZXh0VHlwZXMsciE9bnVsbCYmdGQoKTticmVhaztjYXNlIDM6SGEoKSxKZShhbiksSmUoSHQpLFhwKCk7YnJlYWs7Y2FzZSA1OnFwKHIpO2JyZWFrO2Nhc2UgNDpIYSgpO2JyZWFrO2Nhc2UgMTM6SmUobnQpO2JyZWFrO2Nhc2UgMTk6SmUobnQpO2JyZWFrO2Nhc2UgMTA6R3Aoci50eXBlLl9jb250ZXh0KTticmVhaztjYXNlIDIyOmNhc2UgMjM6c2YoKX1uPW4ucmV0dXJufWlmKFR0PWUsbXQ9ZT15byhlLmN1cnJlbnQsbnVsbCksSXQ9Z249dCx2dD0wLGxzPW51bGwscmY9TmQ9am89MCxybj1HaT1udWxsLHpvIT09bnVsbCl7Zm9yKHQ9MDt0PHpvLmxlbmd0aDt0KyspaWYobj16b1t0XSxyPW4uaW50ZXJsZWF2ZWQsciE9PW51bGwpe24uaW50ZXJsZWF2ZWQ9bnVsbDt2YXIgbz1yLm5leHQsYT1uLnBlbmRpbmc7aWYoYSE9PW51bGwpe3ZhciBpPWEubmV4dDthLm5leHQ9byxyLm5leHQ9aX1uLnBlbmRpbmc9cn16bz1udWxsfXJldHVybiBlfWZ1bmN0aW9uIG1iKGUsdCl7ZG97dmFyIG49bXQ7dHJ5e2lmKEtwKCksV2wuY3VycmVudD1jZCxkZCl7Zm9yKHZhciByPXJ0Lm1lbW9pemVkU3RhdGU7ciE9PW51bGw7KXt2YXIgbz1yLnF1ZXVlO28hPT1udWxsJiYoby5wZW5kaW5nPW51bGwpLHI9ci5uZXh0fWRkPSExfWlmKFZvPTAsTnQ9eXQ9cnQ9bnVsbCxIaT0hMSxhcz0wLG5mLmN1cnJlbnQ9bnVsbCxuPT09bnVsbHx8bi5yZXR1cm49PT1udWxsKXt2dD0xLGxzPXQsbXQ9bnVsbDticmVha31lOnt2YXIgYT1lLGk9bi5yZXR1cm4scz1uLGw9dDtpZih0PUl0LHMuZmxhZ3N8PTMyNzY4LGwhPT1udWxsJiZ0eXBlb2YgbD09Im9iamVjdCImJnR5cGVvZiBsLnRoZW49PSJmdW5jdGlvbiIpe3ZhciBkPWwsYz1zLHU9Yy50YWc7aWYoIShjLm1vZGUmMSkmJih1PT09MHx8dT09PTExfHx1PT09MTUpKXt2YXIgcD1jLmFsdGVybmF0ZTtwPyhjLnVwZGF0ZVF1ZXVlPXAudXBkYXRlUXVldWUsYy5tZW1vaXplZFN0YXRlPXAubWVtb2l6ZWRTdGF0ZSxjLmxhbmVzPXAubGFuZXMpOihjLnVwZGF0ZVF1ZXVlPW51bGwsYy5tZW1vaXplZFN0YXRlPW51bGwpfXZhciBmPWN5KGkpO2lmKGYhPT1udWxsKXtmLmZsYWdzJj0tMjU3LHV5KGYsaSxzLGEsdCksZi5tb2RlJjEmJmR5KGEsZCx0KSx0PWYsbD1kO3ZhciB5PXQudXBkYXRlUXVldWU7aWYoeT09PW51bGwpe3ZhciB2PW5ldyBTZXQ7di5hZGQobCksdC51cGRhdGVRdWV1ZT12fWVsc2UgeS5hZGQobCk7YnJlYWsgZX1lbHNle2lmKCEodCYxKSl7ZHkoYSxkLHQpLGxmKCk7YnJlYWsgZX1sPUVycm9yKFUoNDI2KSl9fWVsc2UgaWYoUWUmJnMubW9kZSYxKXt2YXIgdz1jeShpKTtpZih3IT09bnVsbCl7ISh3LmZsYWdzJjY1NTM2KSYmKHcuZmxhZ3N8PTI1NiksdXkodyxpLHMsYSx0KSxCcChLYShsLHMpKTticmVhayBlfX1hPWw9S2EobCxzKSx2dCE9PTQmJih2dD0yKSxHaT09PW51bGw/R2k9W2FdOkdpLnB1c2goYSksYT1pO2Rve3N3aXRjaChhLnRhZyl7Y2FzZSAzOmEuZmxhZ3N8PTY1NTM2LHQmPS10LGEubGFuZXN8PXQ7dmFyIGc9SnYoYSxsLHQpO3J5KGEsZyk7YnJlYWsgZTtjYXNlIDE6cz1sO3ZhciBoPWEudHlwZSxiPWEuc3RhdGVOb2RlO2lmKCEoYS5mbGFncyYxMjgpJiYodHlwZW9mIGguZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yPT0iZnVuY3Rpb24ifHxiIT09bnVsbCYmdHlwZW9mIGIuY29tcG9uZW50RGlkQ2F0Y2g9PSJmdW5jdGlvbiImJihobz09PW51bGx8fCFoby5oYXMoYikpKSl7YS5mbGFnc3w9NjU1MzYsdCY9LXQsYS5sYW5lc3w9dDt2YXIgbT1RdihhLHMsdCk7cnkoYSxtKTticmVhayBlfX1hPWEucmV0dXJufXdoaWxlKGEhPT1udWxsKX15YihuKX1jYXRjaChTKXt0PVMsbXQ9PT1uJiZuIT09bnVsbCYmKG10PW49bi5yZXR1cm4pO2NvbnRpbnVlfWJyZWFrfXdoaWxlKCEwKX1mdW5jdGlvbiBoYigpe3ZhciBlPXVkLmN1cnJlbnQ7cmV0dXJuIHVkLmN1cnJlbnQ9Y2QsZT09PW51bGw/Y2Q6ZX1mdW5jdGlvbiBsZigpeyh2dD09PTB8fHZ0PT09M3x8dnQ9PT0yKSYmKHZ0PTQpLFR0PT09bnVsbHx8IShqbyYyNjg0MzU0NTUpJiYhKE5kJjI2ODQzNTQ1NSl8fGlvKFR0LEl0KX1mdW5jdGlvbiBtZChlLHQpe3ZhciBuPU9lO09lfD0yO3ZhciByPWhiKCk7KFR0IT09ZXx8SXQhPT10KSYmKE1yPW51bGwsQm8oZSx0KSk7ZG8gdHJ5e2pOKCk7YnJlYWt9Y2F0Y2gobyl7bWIoZSxvKX13aGlsZSghMCk7aWYoS3AoKSxPZT1uLHVkLmN1cnJlbnQ9cixtdCE9PW51bGwpdGhyb3cgRXJyb3IoVSgyNjEpKTtyZXR1cm4gVHQ9bnVsbCxJdD0wLHZ0fWZ1bmN0aW9uIGpOKCl7Zm9yKDttdCE9PW51bGw7KWdiKG10KX1mdW5jdGlvbiBZTigpe2Zvcig7bXQhPT1udWxsJiYhd0UoKTspZ2IobXQpfWZ1bmN0aW9uIGdiKGUpe3ZhciB0PWJiKGUuYWx0ZXJuYXRlLGUsZ24pO2UubWVtb2l6ZWRQcm9wcz1lLnBlbmRpbmdQcm9wcyx0PT09bnVsbD95YihlKTptdD10LG5mLmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiB5YihlKXt2YXIgdD1lO2Rve3ZhciBuPXQuYWx0ZXJuYXRlO2lmKGU9dC5yZXR1cm4sdC5mbGFncyYzMjc2OCl7aWYobj1XTihuLHQpLG4hPT1udWxsKXtuLmZsYWdzJj0zMjc2NyxtdD1uO3JldHVybn1pZihlIT09bnVsbCllLmZsYWdzfD0zMjc2OCxlLnN1YnRyZWVGbGFncz0wLGUuZGVsZXRpb25zPW51bGw7ZWxzZXt2dD02LG10PW51bGw7cmV0dXJufX1lbHNlIGlmKG49ek4obix0LGduKSxuIT09bnVsbCl7bXQ9bjtyZXR1cm59aWYodD10LnNpYmxpbmcsdCE9PW51bGwpe210PXQ7cmV0dXJufW10PXQ9ZX13aGlsZSh0IT09bnVsbCk7dnQ9PT0wJiYodnQ9NSl9ZnVuY3Rpb24gVW8oZSx0LG4pe3ZhciByPVdlLG89Q24udHJhbnNpdGlvbjt0cnl7Q24udHJhbnNpdGlvbj1udWxsLFdlPTEscU4oZSx0LG4scil9ZmluYWxseXtDbi50cmFuc2l0aW9uPW8sV2U9cn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBxTihlLHQsbixyKXtkbyBVYSgpO3doaWxlKGxvIT09bnVsbCk7aWYoT2UmNil0aHJvdyBFcnJvcihVKDMyNykpO249ZS5maW5pc2hlZFdvcms7dmFyIG89ZS5maW5pc2hlZExhbmVzO2lmKG49PT1udWxsKXJldHVybiBudWxsO2lmKGUuZmluaXNoZWRXb3JrPW51bGwsZS5maW5pc2hlZExhbmVzPTAsbj09PWUuY3VycmVudCl0aHJvdyBFcnJvcihVKDE3NykpO2UuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja1ByaW9yaXR5PTA7dmFyIGE9bi5sYW5lc3xuLmNoaWxkTGFuZXM7aWYoTUUoZSxhKSxlPT09VHQmJihtdD1UdD1udWxsLEl0PTApLCEobi5zdWJ0cmVlRmxhZ3MmMjA2NCkmJiEobi5mbGFncyYyMDY0KXx8TGx8fChMbD0hMCx3YihYbCxmdW5jdGlvbigpe3JldHVybiBVYSgpLG51bGx9KSksYT0obi5mbGFncyYxNTk5MCkhPT0wLG4uc3VidHJlZUZsYWdzJjE1OTkwfHxhKXthPUNuLnRyYW5zaXRpb24sQ24udHJhbnNpdGlvbj1udWxsO3ZhciBpPVdlO1dlPTE7dmFyIHM9T2U7T2V8PTQsbmYuY3VycmVudD1udWxsLEhOKGUsbiksdWIobixlKSxnTihadSksSmw9ISFRdSxadT1RdT1udWxsLGUuY3VycmVudD1uLEtOKG4sZSxvKSxrRSgpLE9lPXMsV2U9aSxDbi50cmFuc2l0aW9uPWF9ZWxzZSBlLmN1cnJlbnQ9bjtpZihMbCYmKExsPSExLGxvPWUsZmQ9byksYT1lLnBlbmRpbmdMYW5lcyxhPT09MCYmKGhvPW51bGwpLEVFKG4uc3RhdGVOb2RlLHIpLGxuKGUsdXQoKSksdCE9PW51bGwpZm9yKHI9ZS5vblJlY292ZXJhYmxlRXJyb3Isbj0wO248dC5sZW5ndGg7bisrKW89dFtuXSxyKG8udmFsdWUse2NvbXBvbmVudFN0YWNrOm8uc3RhY2ssZGlnZXN0Om8uZGlnZXN0fSk7aWYocGQpdGhyb3cgcGQ9ITEsZT1icCxicD1udWxsLGU7cmV0dXJuIGZkJjEmJmUudGFnIT09MCYmVWEoKSxhPWUucGVuZGluZ0xhbmVzLGEmMT9lPT09d3A/VmkrKzooVmk9MCx3cD1lKTpWaT0wLHhvKCksbnVsbH1mdW5jdGlvbiBVYSgpe2lmKGxvIT09bnVsbCl7dmFyIGU9SnkoZmQpLHQ9Q24udHJhbnNpdGlvbixuPVdlO3RyeXtpZihDbi50cmFuc2l0aW9uPW51bGwsV2U9MTY+ZT8xNjplLGxvPT09bnVsbCl2YXIgcj0hMTtlbHNle2lmKGU9bG8sbG89bnVsbCxmZD0wLE9lJjYpdGhyb3cgRXJyb3IoVSgzMzEpKTt2YXIgbz1PZTtmb3IoT2V8PTQsWD1lLmN1cnJlbnQ7WCE9PW51bGw7KXt2YXIgYT1YLGk9YS5jaGlsZDtpZihYLmZsYWdzJjE2KXt2YXIgcz1hLmRlbGV0aW9ucztpZihzIT09bnVsbCl7Zm9yKHZhciBsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciBkPXNbbF07Zm9yKFg9ZDtYIT09bnVsbDspe3ZhciBjPVg7c3dpdGNoKGMudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OktpKDgsYyxhKX12YXIgdT1jLmNoaWxkO2lmKHUhPT1udWxsKXUucmV0dXJuPWMsWD11O2Vsc2UgZm9yKDtYIT09bnVsbDspe2M9WDt2YXIgcD1jLnNpYmxpbmcsZj1jLnJldHVybjtpZihsYihjKSxjPT09ZCl7WD1udWxsO2JyZWFrfWlmKHAhPT1udWxsKXtwLnJldHVybj1mLFg9cDticmVha31YPWZ9fX12YXIgeT1hLmFsdGVybmF0ZTtpZih5IT09bnVsbCl7dmFyIHY9eS5jaGlsZDtpZih2IT09bnVsbCl7eS5jaGlsZD1udWxsO2Rve3ZhciB3PXYuc2libGluZzt2LnNpYmxpbmc9bnVsbCx2PXd9d2hpbGUodiE9PW51bGwpfX1YPWF9fWlmKGEuc3VidHJlZUZsYWdzJjIwNjQmJmkhPT1udWxsKWkucmV0dXJuPWEsWD1pO2Vsc2UgZTpmb3IoO1ghPT1udWxsOyl7aWYoYT1YLGEuZmxhZ3MmMjA0OClzd2l0Y2goYS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6S2koOSxhLGEucmV0dXJuKX12YXIgZz1hLnNpYmxpbmc7aWYoZyE9PW51bGwpe2cucmV0dXJuPWEucmV0dXJuLFg9ZzticmVhayBlfVg9YS5yZXR1cm59fXZhciBoPWUuY3VycmVudDtmb3IoWD1oO1ghPT1udWxsOyl7aT1YO3ZhciBiPWkuY2hpbGQ7aWYoaS5zdWJ0cmVlRmxhZ3MmMjA2NCYmYiE9PW51bGwpYi5yZXR1cm49aSxYPWI7ZWxzZSBlOmZvcihpPWg7WCE9PW51bGw7KXtpZihzPVgscy5mbGFncyYyMDQ4KXRyeXtzd2l0Y2gocy50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6RWQoOSxzKX19Y2F0Y2goUyl7aXQocyxzLnJldHVybixTKX1pZihzPT09aSl7WD1udWxsO2JyZWFrIGV9dmFyIG09cy5zaWJsaW5nO2lmKG0hPT1udWxsKXttLnJldHVybj1zLnJldHVybixYPW07YnJlYWsgZX1YPXMucmV0dXJufX1pZihPZT1vLHhvKCksdnImJnR5cGVvZiB2ci5vblBvc3RDb21taXRGaWJlclJvb3Q9PSJmdW5jdGlvbiIpdHJ5e3ZyLm9uUG9zdENvbW1pdEZpYmVyUm9vdChnZCxlKX1jYXRjaHt9cj0hMH1yZXR1cm4gcn1maW5hbGx5e1dlPW4sQ24udHJhbnNpdGlvbj10fX1yZXR1cm4hMX1mdW5jdGlvbiBFeShlLHQsbil7dD1LYShuLHQpLHQ9SnYoZSx0LDEpLGU9bW8oZSx0LDEpLHQ9WHQoKSxlIT09bnVsbCYmKGRzKGUsMSx0KSxsbihlLHQpKX1mdW5jdGlvbiBpdChlLHQsbil7aWYoZS50YWc9PT0zKUV5KGUsZSxuKTtlbHNlIGZvcig7dCE9PW51bGw7KXtpZih0LnRhZz09PTMpe0V5KHQsZSxuKTticmVha31lbHNlIGlmKHQudGFnPT09MSl7dmFyIHI9dC5zdGF0ZU5vZGU7aWYodHlwZW9mIHQudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I9PSJmdW5jdGlvbiJ8fHR5cGVvZiByLmNvbXBvbmVudERpZENhdGNoPT0iZnVuY3Rpb24iJiYoaG89PT1udWxsfHwhaG8uaGFzKHIpKSl7ZT1LYShuLGUpLGU9UXYodCxlLDEpLHQ9bW8odCxlLDEpLGU9WHQoKSx0IT09bnVsbCYmKGRzKHQsMSxlKSxsbih0LGUpKTticmVha319dD10LnJldHVybn19ZnVuY3Rpb24gWE4oZSx0LG4pe3ZhciByPWUucGluZ0NhY2hlO3IhPT1udWxsJiZyLmRlbGV0ZSh0KSx0PVh0KCksZS5waW5nZWRMYW5lc3w9ZS5zdXNwZW5kZWRMYW5lcyZuLFR0PT09ZSYmKEl0Jm4pPT09biYmKHZ0PT09NHx8dnQ9PT0zJiYoSXQmMTMwMDIzNDI0KT09PUl0JiY1MDA+dXQoKS1vZj9CbyhlLDApOnJmfD1uKSxsbihlLHQpfWZ1bmN0aW9uIHZiKGUsdCl7dD09PTAmJihlLm1vZGUmMT8odD1rbCxrbDw8PTEsIShrbCYxMzAwMjM0MjQpJiYoa2w9NDE5NDMwNCkpOnQ9MSk7dmFyIG49WHQoKTtlPVVyKGUsdCksZSE9PW51bGwmJihkcyhlLHQsbiksbG4oZSxuKSl9ZnVuY3Rpb24gJE4oZSl7dmFyIHQ9ZS5tZW1vaXplZFN0YXRlLG49MDt0IT09bnVsbCYmKG49dC5yZXRyeUxhbmUpLHZiKGUsbil9ZnVuY3Rpb24gSk4oZSx0KXt2YXIgbj0wO3N3aXRjaChlLnRhZyl7Y2FzZSAxMzp2YXIgcj1lLnN0YXRlTm9kZSxvPWUubWVtb2l6ZWRTdGF0ZTtvIT09bnVsbCYmKG49by5yZXRyeUxhbmUpO2JyZWFrO2Nhc2UgMTk6cj1lLnN0YXRlTm9kZTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKFUoMzE0KSl9ciE9PW51bGwmJnIuZGVsZXRlKHQpLHZiKGUsbil9dmFyIGJiO2JiPWZ1bmN0aW9uKGUsdCxuKXtpZihlIT09bnVsbClpZihlLm1lbW9pemVkUHJvcHMhPT10LnBlbmRpbmdQcm9wc3x8YW4uY3VycmVudClvbj0hMDtlbHNle2lmKCEoZS5sYW5lcyZuKSYmISh0LmZsYWdzJjEyOCkpcmV0dXJuIG9uPSExLEZOKGUsdCxuKTtvbj0hIShlLmZsYWdzJjEzMTA3Mil9ZWxzZSBvbj0hMSxRZSYmdC5mbGFncyYxMDQ4NTc2JiZTdih0LG9kLHQuaW5kZXgpO3N3aXRjaCh0LmxhbmVzPTAsdC50YWcpe2Nhc2UgMjp2YXIgcj10LnR5cGU7SGwoZSx0KSxlPXQucGVuZGluZ1Byb3BzO3ZhciBvPXphKHQsSHQuY3VycmVudCk7X2EodCxuKSxvPUpwKG51bGwsdCxyLGUsbyxuKTt2YXIgYT1RcCgpO3JldHVybiB0LmZsYWdzfD0xLHR5cGVvZiBvPT0ib2JqZWN0IiYmbyE9PW51bGwmJnR5cGVvZiBvLnJlbmRlcj09ImZ1bmN0aW9uIiYmby4kJHR5cGVvZj09PXZvaWQgMD8odC50YWc9MSx0Lm1lbW9pemVkU3RhdGU9bnVsbCx0LnVwZGF0ZVF1ZXVlPW51bGwsc24ocik/KGE9ITAsbmQodCkpOmE9ITEsdC5tZW1vaXplZFN0YXRlPW8uc3RhdGUhPT1udWxsJiZvLnN0YXRlIT09dm9pZCAwP28uc3RhdGU6bnVsbCxqcCh0KSxvLnVwZGF0ZXI9U2QsdC5zdGF0ZU5vZGU9byxvLl9yZWFjdEludGVybmFscz10LGxwKHQscixlLG4pLHQ9dXAobnVsbCx0LHIsITAsYSxuKSk6KHQudGFnPTAsUWUmJmEmJnpwKHQpLHF0KG51bGwsdCxvLG4pLHQ9dC5jaGlsZCksdDtjYXNlIDE2OnI9dC5lbGVtZW50VHlwZTtlOntzd2l0Y2goSGwoZSx0KSxlPXQucGVuZGluZ1Byb3BzLG89ci5faW5pdCxyPW8oci5fcGF5bG9hZCksdC50eXBlPXIsbz10LnRhZz1aTihyKSxlPVluKHIsZSksbyl7Y2FzZSAwOnQ9Y3AobnVsbCx0LHIsZSxuKTticmVhayBlO2Nhc2UgMTp0PW15KG51bGwsdCxyLGUsbik7YnJlYWsgZTtjYXNlIDExOnQ9cHkobnVsbCx0LHIsZSxuKTticmVhayBlO2Nhc2UgMTQ6dD1meShudWxsLHQscixZbihyLnR5cGUsZSksbik7YnJlYWsgZX10aHJvdyBFcnJvcihVKDMwNixyLCIiKSl9cmV0dXJuIHQ7Y2FzZSAwOnJldHVybiByPXQudHlwZSxvPXQucGVuZGluZ1Byb3BzLG89dC5lbGVtZW50VHlwZT09PXI/bzpZbihyLG8pLGNwKGUsdCxyLG8sbik7Y2FzZSAxOnJldHVybiByPXQudHlwZSxvPXQucGVuZGluZ1Byb3BzLG89dC5lbGVtZW50VHlwZT09PXI/bzpZbihyLG8pLG15KGUsdCxyLG8sbik7Y2FzZSAzOmU6e2lmKG5iKHQpLGU9PT1udWxsKXRocm93IEVycm9yKFUoMzg3KSk7cj10LnBlbmRpbmdQcm9wcyxhPXQubWVtb2l6ZWRTdGF0ZSxvPWEuZWxlbWVudCxDdihlLHQpLHNkKHQscixudWxsLG4pO3ZhciBpPXQubWVtb2l6ZWRTdGF0ZTtpZihyPWkuZWxlbWVudCxhLmlzRGVoeWRyYXRlZClpZihhPXtlbGVtZW50OnIsaXNEZWh5ZHJhdGVkOiExLGNhY2hlOmkuY2FjaGUscGVuZGluZ1N1c3BlbnNlQm91bmRhcmllczppLnBlbmRpbmdTdXNwZW5zZUJvdW5kYXJpZXMsdHJhbnNpdGlvbnM6aS50cmFuc2l0aW9uc30sdC51cGRhdGVRdWV1ZS5iYXNlU3RhdGU9YSx0Lm1lbW9pemVkU3RhdGU9YSx0LmZsYWdzJjI1Nil7bz1LYShFcnJvcihVKDQyMykpLHQpLHQ9aHkoZSx0LHIsbixvKTticmVhayBlfWVsc2UgaWYociE9PW8pe289S2EoRXJyb3IoVSg0MjQpKSx0KSx0PWh5KGUsdCxyLG4sbyk7YnJlYWsgZX1lbHNlIGZvcih5bj1mbyh0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvLmZpcnN0Q2hpbGQpLHZuPXQsUWU9ITAsWG49bnVsbCxuPUR2KHQsbnVsbCxyLG4pLHQuY2hpbGQ9bjtuOyluLmZsYWdzPW4uZmxhZ3MmLTN8NDA5NixuPW4uc2libGluZztlbHNle2lmKFdhKCkscj09PW8pe3Q9RnIoZSx0LG4pO2JyZWFrIGV9cXQoZSx0LHIsbil9dD10LmNoaWxkfXJldHVybiB0O2Nhc2UgNTpyZXR1cm4gTXYodCksZT09PW51bGwmJmFwKHQpLHI9dC50eXBlLG89dC5wZW5kaW5nUHJvcHMsYT1lIT09bnVsbD9lLm1lbW9pemVkUHJvcHM6bnVsbCxpPW8uY2hpbGRyZW4sZXAocixvKT9pPW51bGw6YSE9PW51bGwmJmVwKHIsYSkmJih0LmZsYWdzfD0zMiksdGIoZSx0KSxxdChlLHQsaSxuKSx0LmNoaWxkO2Nhc2UgNjpyZXR1cm4gZT09PW51bGwmJmFwKHQpLG51bGw7Y2FzZSAxMzpyZXR1cm4gcmIoZSx0LG4pO2Nhc2UgNDpyZXR1cm4gWXAodCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxyPXQucGVuZGluZ1Byb3BzLGU9PT1udWxsP3QuY2hpbGQ9QmEodCxudWxsLHIsbik6cXQoZSx0LHIsbiksdC5jaGlsZDtjYXNlIDExOnJldHVybiByPXQudHlwZSxvPXQucGVuZGluZ1Byb3BzLG89dC5lbGVtZW50VHlwZT09PXI/bzpZbihyLG8pLHB5KGUsdCxyLG8sbik7Y2FzZSA3OnJldHVybiBxdChlLHQsdC5wZW5kaW5nUHJvcHMsbiksdC5jaGlsZDtjYXNlIDg6cmV0dXJuIHF0KGUsdCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbixuKSx0LmNoaWxkO2Nhc2UgMTI6cmV0dXJuIHF0KGUsdCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbixuKSx0LmNoaWxkO2Nhc2UgMTA6ZTp7aWYocj10LnR5cGUuX2NvbnRleHQsbz10LnBlbmRpbmdQcm9wcyxhPXQubWVtb2l6ZWRQcm9wcyxpPW8udmFsdWUsWWUoYWQsci5fY3VycmVudFZhbHVlKSxyLl9jdXJyZW50VmFsdWU9aSxhIT09bnVsbClpZihRbihhLnZhbHVlLGkpKXtpZihhLmNoaWxkcmVuPT09by5jaGlsZHJlbiYmIWFuLmN1cnJlbnQpe3Q9RnIoZSx0LG4pO2JyZWFrIGV9fWVsc2UgZm9yKGE9dC5jaGlsZCxhIT09bnVsbCYmKGEucmV0dXJuPXQpO2EhPT1udWxsOyl7dmFyIHM9YS5kZXBlbmRlbmNpZXM7aWYocyE9PW51bGwpe2k9YS5jaGlsZDtmb3IodmFyIGw9cy5maXJzdENvbnRleHQ7bCE9PW51bGw7KXtpZihsLmNvbnRleHQ9PT1yKXtpZihhLnRhZz09PTEpe2w9UHIoLTEsbiYtbiksbC50YWc9Mjt2YXIgZD1hLnVwZGF0ZVF1ZXVlO2lmKGQhPT1udWxsKXtkPWQuc2hhcmVkO3ZhciBjPWQucGVuZGluZztjPT09bnVsbD9sLm5leHQ9bDoobC5uZXh0PWMubmV4dCxjLm5leHQ9bCksZC5wZW5kaW5nPWx9fWEubGFuZXN8PW4sbD1hLmFsdGVybmF0ZSxsIT09bnVsbCYmKGwubGFuZXN8PW4pLGlwKGEucmV0dXJuLG4sdCkscy5sYW5lc3w9bjticmVha31sPWwubmV4dH19ZWxzZSBpZihhLnRhZz09PTEwKWk9YS50eXBlPT09dC50eXBlP251bGw6YS5jaGlsZDtlbHNlIGlmKGEudGFnPT09MTgpe2lmKGk9YS5yZXR1cm4saT09PW51bGwpdGhyb3cgRXJyb3IoVSgzNDEpKTtpLmxhbmVzfD1uLHM9aS5hbHRlcm5hdGUscyE9PW51bGwmJihzLmxhbmVzfD1uKSxpcChpLG4sdCksaT1hLnNpYmxpbmd9ZWxzZSBpPWEuY2hpbGQ7aWYoaSE9PW51bGwpaS5yZXR1cm49YTtlbHNlIGZvcihpPWE7aSE9PW51bGw7KXtpZihpPT09dCl7aT1udWxsO2JyZWFrfWlmKGE9aS5zaWJsaW5nLGEhPT1udWxsKXthLnJldHVybj1pLnJldHVybixpPWE7YnJlYWt9aT1pLnJldHVybn1hPWl9cXQoZSx0LG8uY2hpbGRyZW4sbiksdD10LmNoaWxkfXJldHVybiB0O2Nhc2UgOTpyZXR1cm4gbz10LnR5cGUscj10LnBlbmRpbmdQcm9wcy5jaGlsZHJlbixfYSh0LG4pLG89TW4obykscj1yKG8pLHQuZmxhZ3N8PTEscXQoZSx0LHIsbiksdC5jaGlsZDtjYXNlIDE0OnJldHVybiByPXQudHlwZSxvPVluKHIsdC5wZW5kaW5nUHJvcHMpLG89WW4oci50eXBlLG8pLGZ5KGUsdCxyLG8sbik7Y2FzZSAxNTpyZXR1cm4gWnYoZSx0LHQudHlwZSx0LnBlbmRpbmdQcm9wcyxuKTtjYXNlIDE3OnJldHVybiByPXQudHlwZSxvPXQucGVuZGluZ1Byb3BzLG89dC5lbGVtZW50VHlwZT09PXI/bzpZbihyLG8pLEhsKGUsdCksdC50YWc9MSxzbihyKT8oZT0hMCxuZCh0KSk6ZT0hMSxfYSh0LG4pLCR2KHQscixvKSxscCh0LHIsbyxuKSx1cChudWxsLHQsciwhMCxlLG4pO2Nhc2UgMTk6cmV0dXJuIG9iKGUsdCxuKTtjYXNlIDIyOnJldHVybiBlYihlLHQsbil9dGhyb3cgRXJyb3IoVSgxNTYsdC50YWcpKX07ZnVuY3Rpb24gd2IoZSx0KXtyZXR1cm4gWXkoZSx0KX1mdW5jdGlvbiBRTihlLHQsbixyKXt0aGlzLnRhZz1lLHRoaXMua2V5PW4sdGhpcy5zaWJsaW5nPXRoaXMuY2hpbGQ9dGhpcy5yZXR1cm49dGhpcy5zdGF0ZU5vZGU9dGhpcy50eXBlPXRoaXMuZWxlbWVudFR5cGU9bnVsbCx0aGlzLmluZGV4PTAsdGhpcy5yZWY9bnVsbCx0aGlzLnBlbmRpbmdQcm9wcz10LHRoaXMuZGVwZW5kZW5jaWVzPXRoaXMubWVtb2l6ZWRTdGF0ZT10aGlzLnVwZGF0ZVF1ZXVlPXRoaXMubWVtb2l6ZWRQcm9wcz1udWxsLHRoaXMubW9kZT1yLHRoaXMuc3VidHJlZUZsYWdzPXRoaXMuZmxhZ3M9MCx0aGlzLmRlbGV0aW9ucz1udWxsLHRoaXMuY2hpbGRMYW5lcz10aGlzLmxhbmVzPTAsdGhpcy5hbHRlcm5hdGU9bnVsbH1mdW5jdGlvbiBBbihlLHQsbixyKXtyZXR1cm4gbmV3IFFOKGUsdCxuLHIpfWZ1bmN0aW9uIGRmKGUpe3JldHVybiBlPWUucHJvdG90eXBlLCEoIWV8fCFlLmlzUmVhY3RDb21wb25lbnQpfWZ1bmN0aW9uIFpOKGUpe2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iKXJldHVybiBkZihlKT8xOjA7aWYoZSE9bnVsbCl7aWYoZT1lLiQkdHlwZW9mLGU9PT1EcClyZXR1cm4gMTE7aWYoZT09PUFwKXJldHVybiAxNH1yZXR1cm4gMn1mdW5jdGlvbiB5byhlLHQpe3ZhciBuPWUuYWx0ZXJuYXRlO3JldHVybiBuPT09bnVsbD8obj1BbihlLnRhZyx0LGUua2V5LGUubW9kZSksbi5lbGVtZW50VHlwZT1lLmVsZW1lbnRUeXBlLG4udHlwZT1lLnR5cGUsbi5zdGF0ZU5vZGU9ZS5zdGF0ZU5vZGUsbi5hbHRlcm5hdGU9ZSxlLmFsdGVybmF0ZT1uKToobi5wZW5kaW5nUHJvcHM9dCxuLnR5cGU9ZS50eXBlLG4uZmxhZ3M9MCxuLnN1YnRyZWVGbGFncz0wLG4uZGVsZXRpb25zPW51bGwpLG4uZmxhZ3M9ZS5mbGFncyYxNDY4MDA2NCxuLmNoaWxkTGFuZXM9ZS5jaGlsZExhbmVzLG4ubGFuZXM9ZS5sYW5lcyxuLmNoaWxkPWUuY2hpbGQsbi5tZW1vaXplZFByb3BzPWUubWVtb2l6ZWRQcm9wcyxuLm1lbW9pemVkU3RhdGU9ZS5tZW1vaXplZFN0YXRlLG4udXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSx0PWUuZGVwZW5kZW5jaWVzLG4uZGVwZW5kZW5jaWVzPXQ9PT1udWxsP251bGw6e2xhbmVzOnQubGFuZXMsZmlyc3RDb250ZXh0OnQuZmlyc3RDb250ZXh0fSxuLnNpYmxpbmc9ZS5zaWJsaW5nLG4uaW5kZXg9ZS5pbmRleCxuLnJlZj1lLnJlZixufWZ1bmN0aW9uIFZsKGUsdCxuLHIsbyxhKXt2YXIgaT0yO2lmKHI9ZSx0eXBlb2YgZT09ImZ1bmN0aW9uIilkZihlKSYmKGk9MSk7ZWxzZSBpZih0eXBlb2YgZT09InN0cmluZyIpaT01O2Vsc2UgZTpzd2l0Y2goZSl7Y2FzZSBrYTpyZXR1cm4gSG8obi5jaGlsZHJlbixvLGEsdCk7Y2FzZSBUcDppPTgsb3w9ODticmVhaztjYXNlIEl1OnJldHVybiBlPUFuKDEyLG4sdCxvfDIpLGUuZWxlbWVudFR5cGU9SXUsZS5sYW5lcz1hLGU7Y2FzZSBSdTpyZXR1cm4gZT1BbigxMyxuLHQsbyksZS5lbGVtZW50VHlwZT1SdSxlLmxhbmVzPWEsZTtjYXNlIFB1OnJldHVybiBlPUFuKDE5LG4sdCxvKSxlLmVsZW1lbnRUeXBlPVB1LGUubGFuZXM9YSxlO2Nhc2UgTXk6cmV0dXJuIFRkKG4sbyxhLHQpO2RlZmF1bHQ6aWYodHlwZW9mIGU9PSJvYmplY3QiJiZlIT09bnVsbClzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSBBeTppPTEwO2JyZWFrIGU7Y2FzZSBDeTppPTk7YnJlYWsgZTtjYXNlIERwOmk9MTE7YnJlYWsgZTtjYXNlIEFwOmk9MTQ7YnJlYWsgZTtjYXNlIHJvOmk9MTYscj1udWxsO2JyZWFrIGV9dGhyb3cgRXJyb3IoVSgxMzAsZT09bnVsbD9lOnR5cGVvZiBlLCIiKSl9cmV0dXJuIHQ9QW4oaSxuLHQsbyksdC5lbGVtZW50VHlwZT1lLHQudHlwZT1yLHQubGFuZXM9YSx0fWZ1bmN0aW9uIEhvKGUsdCxuLHIpe3JldHVybiBlPUFuKDcsZSxyLHQpLGUubGFuZXM9bixlfWZ1bmN0aW9uIFRkKGUsdCxuLHIpe3JldHVybiBlPUFuKDIyLGUscix0KSxlLmVsZW1lbnRUeXBlPU15LGUubGFuZXM9bixlLnN0YXRlTm9kZT17aXNIaWRkZW46ITF9LGV9ZnVuY3Rpb24gQ3UoZSx0LG4pe3JldHVybiBlPUFuKDYsZSxudWxsLHQpLGUubGFuZXM9bixlfWZ1bmN0aW9uIE11KGUsdCxuKXtyZXR1cm4gdD1Bbig0LGUuY2hpbGRyZW4hPT1udWxsP2UuY2hpbGRyZW46W10sZS5rZXksdCksdC5sYW5lcz1uLHQuc3RhdGVOb2RlPXtjb250YWluZXJJbmZvOmUuY29udGFpbmVySW5mbyxwZW5kaW5nQ2hpbGRyZW46bnVsbCxpbXBsZW1lbnRhdGlvbjplLmltcGxlbWVudGF0aW9ufSx0fWZ1bmN0aW9uIGVUKGUsdCxuLHIsbyl7dGhpcy50YWc9dCx0aGlzLmNvbnRhaW5lckluZm89ZSx0aGlzLmZpbmlzaGVkV29yaz10aGlzLnBpbmdDYWNoZT10aGlzLmN1cnJlbnQ9dGhpcy5wZW5kaW5nQ2hpbGRyZW49bnVsbCx0aGlzLnRpbWVvdXRIYW5kbGU9LTEsdGhpcy5jYWxsYmFja05vZGU9dGhpcy5wZW5kaW5nQ29udGV4dD10aGlzLmNvbnRleHQ9bnVsbCx0aGlzLmNhbGxiYWNrUHJpb3JpdHk9MCx0aGlzLmV2ZW50VGltZXM9ZnUoMCksdGhpcy5leHBpcmF0aW9uVGltZXM9ZnUoLTEpLHRoaXMuZW50YW5nbGVkTGFuZXM9dGhpcy5maW5pc2hlZExhbmVzPXRoaXMubXV0YWJsZVJlYWRMYW5lcz10aGlzLmV4cGlyZWRMYW5lcz10aGlzLnBpbmdlZExhbmVzPXRoaXMuc3VzcGVuZGVkTGFuZXM9dGhpcy5wZW5kaW5nTGFuZXM9MCx0aGlzLmVudGFuZ2xlbWVudHM9ZnUoMCksdGhpcy5pZGVudGlmaWVyUHJlZml4PXIsdGhpcy5vblJlY292ZXJhYmxlRXJyb3I9byx0aGlzLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9bnVsbH1mdW5jdGlvbiBjZihlLHQsbixyLG8sYSxpLHMsbCl7cmV0dXJuIGU9bmV3IGVUKGUsdCxuLHMsbCksdD09PTE/KHQ9MSxhPT09ITAmJih0fD04KSk6dD0wLGE9QW4oMyxudWxsLG51bGwsdCksZS5jdXJyZW50PWEsYS5zdGF0ZU5vZGU9ZSxhLm1lbW9pemVkU3RhdGU9e2VsZW1lbnQ6cixpc0RlaHlkcmF0ZWQ6bixjYWNoZTpudWxsLHRyYW5zaXRpb25zOm51bGwscGVuZGluZ1N1c3BlbnNlQm91bmRhcmllczpudWxsfSxqcChhKSxlfWZ1bmN0aW9uIHRUKGUsdCxuKXt2YXIgcj0zPGFyZ3VtZW50cy5sZW5ndGgmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106bnVsbDtyZXR1cm57JCR0eXBlb2Y6d2Esa2V5OnI9PW51bGw/bnVsbDoiIityLGNoaWxkcmVuOmUsY29udGFpbmVySW5mbzp0LGltcGxlbWVudGF0aW9uOm59fWZ1bmN0aW9uIGtiKGUpe2lmKCFlKXJldHVybiBibztlPWUuX3JlYWN0SW50ZXJuYWxzO2U6e2lmKFhvKGUpIT09ZXx8ZS50YWchPT0xKXRocm93IEVycm9yKFUoMTcwKSk7dmFyIHQ9ZTtkb3tzd2l0Y2godC50YWcpe2Nhc2UgMzp0PXQuc3RhdGVOb2RlLmNvbnRleHQ7YnJlYWsgZTtjYXNlIDE6aWYoc24odC50eXBlKSl7dD10LnN0YXRlTm9kZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dDticmVhayBlfX10PXQucmV0dXJufXdoaWxlKHQhPT1udWxsKTt0aHJvdyBFcnJvcihVKDE3MSkpfWlmKGUudGFnPT09MSl7dmFyIG49ZS50eXBlO2lmKHNuKG4pKXJldHVybiBrdihlLG4sdCl9cmV0dXJuIHR9ZnVuY3Rpb24geGIoZSx0LG4scixvLGEsaSxzLGwpe3JldHVybiBlPWNmKG4sciwhMCxlLG8sYSxpLHMsbCksZS5jb250ZXh0PWtiKG51bGwpLG49ZS5jdXJyZW50LHI9WHQoKSxvPWdvKG4pLGE9UHIocixvKSxhLmNhbGxiYWNrPXQ/P251bGwsbW8obixhLG8pLGUuY3VycmVudC5sYW5lcz1vLGRzKGUsbyxyKSxsbihlLHIpLGV9ZnVuY3Rpb24gRGQoZSx0LG4scil7dmFyIG89dC5jdXJyZW50LGE9WHQoKSxpPWdvKG8pO3JldHVybiBuPWtiKG4pLHQuY29udGV4dD09PW51bGw/dC5jb250ZXh0PW46dC5wZW5kaW5nQ29udGV4dD1uLHQ9UHIoYSxpKSx0LnBheWxvYWQ9e2VsZW1lbnQ6ZX0scj1yPT09dm9pZCAwP251bGw6cixyIT09bnVsbCYmKHQuY2FsbGJhY2s9ciksZT1tbyhvLHQsaSksZSE9PW51bGwmJihKbihlLG8saSxhKSx6bChlLG8saSkpLGl9ZnVuY3Rpb24gaGQoZSl7aWYoZT1lLmN1cnJlbnQsIWUuY2hpbGQpcmV0dXJuIG51bGw7c3dpdGNoKGUuY2hpbGQudGFnKXtjYXNlIDU6cmV0dXJuIGUuY2hpbGQuc3RhdGVOb2RlO2RlZmF1bHQ6cmV0dXJuIGUuY2hpbGQuc3RhdGVOb2RlfX1mdW5jdGlvbiBOeShlLHQpe2lmKGU9ZS5tZW1vaXplZFN0YXRlLGUhPT1udWxsJiZlLmRlaHlkcmF0ZWQhPT1udWxsKXt2YXIgbj1lLnJldHJ5TGFuZTtlLnJldHJ5TGFuZT1uIT09MCYmbjx0P246dH19ZnVuY3Rpb24gdWYoZSx0KXtOeShlLHQpLChlPWUuYWx0ZXJuYXRlKSYmTnkoZSx0KX1mdW5jdGlvbiBuVCgpe3JldHVybiBudWxsfXZhciBTYj10eXBlb2YgcmVwb3J0RXJyb3I9PSJmdW5jdGlvbiI/cmVwb3J0RXJyb3I6ZnVuY3Rpb24oZSl7Y29uc29sZS5lcnJvcihlKX07ZnVuY3Rpb24gcGYoZSl7dGhpcy5faW50ZXJuYWxSb290PWV9QWQucHJvdG90eXBlLnJlbmRlcj1wZi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2ludGVybmFsUm9vdDtpZih0PT09bnVsbCl0aHJvdyBFcnJvcihVKDQwOSkpO0RkKGUsdCxudWxsLG51bGwpfTtBZC5wcm90b3R5cGUudW5tb3VudD1wZi5wcm90b3R5cGUudW5tb3VudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ludGVybmFsUm9vdDtpZihlIT09bnVsbCl7dGhpcy5faW50ZXJuYWxSb290PW51bGw7dmFyIHQ9ZS5jb250YWluZXJJbmZvO1lvKGZ1bmN0aW9uKCl7RGQobnVsbCxlLG51bGwsbnVsbCl9KSx0W19yXT1udWxsfX07ZnVuY3Rpb24gQWQoZSl7dGhpcy5faW50ZXJuYWxSb290PWV9QWQucHJvdG90eXBlLnVuc3RhYmxlX3NjaGVkdWxlSHlkcmF0aW9uPWZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PWV2KCk7ZT17YmxvY2tlZE9uOm51bGwsdGFyZ2V0OmUscHJpb3JpdHk6dH07Zm9yKHZhciBuPTA7bjxhby5sZW5ndGgmJnQhPT0wJiZ0PGFvW25dLnByaW9yaXR5O24rKyk7YW8uc3BsaWNlKG4sMCxlKSxuPT09MCYmbnYoZSl9fTtmdW5jdGlvbiBmZihlKXtyZXR1cm4hKCFlfHxlLm5vZGVUeXBlIT09MSYmZS5ub2RlVHlwZSE9PTkmJmUubm9kZVR5cGUhPT0xMSl9ZnVuY3Rpb24gQ2QoZSl7cmV0dXJuISghZXx8ZS5ub2RlVHlwZSE9PTEmJmUubm9kZVR5cGUhPT05JiZlLm5vZGVUeXBlIT09MTEmJihlLm5vZGVUeXBlIT09OHx8ZS5ub2RlVmFsdWUhPT0iIHJlYWN0LW1vdW50LXBvaW50LXVuc3RhYmxlICIpKX1mdW5jdGlvbiBUeSgpe31mdW5jdGlvbiByVChlLHQsbixyLG8pe2lmKG8pe2lmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXt2YXIgYT1yO3I9ZnVuY3Rpb24oKXt2YXIgZD1oZChpKTthLmNhbGwoZCl9fXZhciBpPXhiKHQscixlLDAsbnVsbCwhMSwhMSwiIixUeSk7cmV0dXJuIGUuX3JlYWN0Um9vdENvbnRhaW5lcj1pLGVbX3JdPWkuY3VycmVudCxlcyhlLm5vZGVUeXBlPT09OD9lLnBhcmVudE5vZGU6ZSksWW8oKSxpfWZvcig7bz1lLmxhc3RDaGlsZDspZS5yZW1vdmVDaGlsZChvKTtpZih0eXBlb2Ygcj09ImZ1bmN0aW9uIil7dmFyIHM9cjtyPWZ1bmN0aW9uKCl7dmFyIGQ9aGQobCk7cy5jYWxsKGQpfX12YXIgbD1jZihlLDAsITEsbnVsbCxudWxsLCExLCExLCIiLFR5KTtyZXR1cm4gZS5fcmVhY3RSb290Q29udGFpbmVyPWwsZVtfcl09bC5jdXJyZW50LGVzKGUubm9kZVR5cGU9PT04P2UucGFyZW50Tm9kZTplKSxZbyhmdW5jdGlvbigpe0RkKHQsbCxuLHIpfSksbH1mdW5jdGlvbiBNZChlLHQsbixyLG8pe3ZhciBhPW4uX3JlYWN0Um9vdENvbnRhaW5lcjtpZihhKXt2YXIgaT1hO2lmKHR5cGVvZiBvPT0iZnVuY3Rpb24iKXt2YXIgcz1vO289ZnVuY3Rpb24oKXt2YXIgbD1oZChpKTtzLmNhbGwobCl9fURkKHQsaSxlLG8pfWVsc2UgaT1yVChuLHQsZSxvLHIpO3JldHVybiBoZChpKX1ReT1mdW5jdGlvbihlKXtzd2l0Y2goZS50YWcpe2Nhc2UgMzp2YXIgdD1lLnN0YXRlTm9kZTtpZih0LmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpe3ZhciBuPUxpKHQucGVuZGluZ0xhbmVzKTtuIT09MCYmKE9wKHQsbnwxKSxsbih0LHV0KCkpLCEoT2UmNikmJihHYT11dCgpKzUwMCx4bygpKSl9YnJlYWs7Y2FzZSAxMzpZbyhmdW5jdGlvbigpe3ZhciByPVVyKGUsMSk7aWYociE9PW51bGwpe3ZhciBvPVh0KCk7Sm4ocixlLDEsbyl9fSksdWYoZSwxKX19O0lwPWZ1bmN0aW9uKGUpe2lmKGUudGFnPT09MTMpe3ZhciB0PVVyKGUsMTM0MjE3NzI4KTtpZih0IT09bnVsbCl7dmFyIG49WHQoKTtKbih0LGUsMTM0MjE3NzI4LG4pfXVmKGUsMTM0MjE3NzI4KX19O1p5PWZ1bmN0aW9uKGUpe2lmKGUudGFnPT09MTMpe3ZhciB0PWdvKGUpLG49VXIoZSx0KTtpZihuIT09bnVsbCl7dmFyIHI9WHQoKTtKbihuLGUsdCxyKX11ZihlLHQpfX07ZXY9ZnVuY3Rpb24oKXtyZXR1cm4gV2V9O3R2PWZ1bmN0aW9uKGUsdCl7dmFyIG49V2U7dHJ5e3JldHVybiBXZT1lLHQoKX1maW5hbGx5e1dlPW59fTtHdT1mdW5jdGlvbihlLHQsbil7c3dpdGNoKHQpe2Nhc2UiaW5wdXQiOmlmKFV1KGUsbiksdD1uLm5hbWUsbi50eXBlPT09InJhZGlvIiYmdCE9bnVsbCl7Zm9yKG49ZTtuLnBhcmVudE5vZGU7KW49bi5wYXJlbnROb2RlO2ZvcihuPW4ucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbbmFtZT0iK0pTT04uc3RyaW5naWZ5KCIiK3QpKyddW3R5cGU9InJhZGlvIl0nKSx0PTA7dDxuLmxlbmd0aDt0Kyspe3ZhciByPW5bdF07aWYociE9PWUmJnIuZm9ybT09PWUuZm9ybSl7dmFyIG89d2Qocik7aWYoIW8pdGhyb3cgRXJyb3IoVSg5MCkpO0l5KHIpLFV1KHIsbyl9fX1icmVhaztjYXNlInRleHRhcmVhIjpQeShlLG4pO2JyZWFrO2Nhc2Uic2VsZWN0Ijp0PW4udmFsdWUsdCE9bnVsbCYmSWEoZSwhIW4ubXVsdGlwbGUsdCwhMSl9fTtCeT1hZjtIeT1Zbzt2YXIgb1Q9e3VzaW5nQ2xpZW50RW50cnlQb2ludDohMSxFdmVudHM6W3VzLE5hLHdkLHp5LFd5LGFmXX0sT2k9e2ZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOkZvLGJ1bmRsZVR5cGU6MCx2ZXJzaW9uOiIxOC4zLjEiLHJlbmRlcmVyUGFja2FnZU5hbWU6InJlYWN0LWRvbSJ9LGFUPXtidW5kbGVUeXBlOk9pLmJ1bmRsZVR5cGUsdmVyc2lvbjpPaS52ZXJzaW9uLHJlbmRlcmVyUGFja2FnZU5hbWU6T2kucmVuZGVyZXJQYWNrYWdlTmFtZSxyZW5kZXJlckNvbmZpZzpPaS5yZW5kZXJlckNvbmZpZyxvdmVycmlkZUhvb2tTdGF0ZTpudWxsLG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aDpudWxsLG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aDpudWxsLG92ZXJyaWRlUHJvcHM6bnVsbCxvdmVycmlkZVByb3BzRGVsZXRlUGF0aDpudWxsLG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoOm51bGwsc2V0RXJyb3JIYW5kbGVyOm51bGwsc2V0U3VzcGVuc2VIYW5kbGVyOm51bGwsc2NoZWR1bGVVcGRhdGU6bnVsbCxjdXJyZW50RGlzcGF0Y2hlclJlZjp6ci5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPVZ5KGUpLGU9PT1udWxsP251bGw6ZS5zdGF0ZU5vZGV9LGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOk9pLmZpbmRGaWJlckJ5SG9zdEluc3RhbmNlfHxuVCxmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2g6bnVsbCxzY2hlZHVsZVJlZnJlc2g6bnVsbCxzY2hlZHVsZVJvb3Q6bnVsbCxzZXRSZWZyZXNoSGFuZGxlcjpudWxsLGdldEN1cnJlbnRGaWJlcjpudWxsLHJlY29uY2lsZXJWZXJzaW9uOiIxOC4zLjEtbmV4dC1mMTMzOGY4MDgwLTIwMjQwNDI2In07aWYodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXzwidSImJihJaT1fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18sIUlpLmlzRGlzYWJsZWQmJklpLnN1cHBvcnRzRmliZXIpKXRyeXtnZD1JaS5pbmplY3QoYVQpLHZyPUlpfWNhdGNoe312YXIgSWk7a24uX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9b1Q7a24uY3JlYXRlUG9ydGFsPWZ1bmN0aW9uKGUsdCl7dmFyIG49Mjxhcmd1bWVudHMubGVuZ3RoJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm51bGw7aWYoIWZmKHQpKXRocm93IEVycm9yKFUoMjAwKSk7cmV0dXJuIHRUKGUsdCxudWxsLG4pfTtrbi5jcmVhdGVSb290PWZ1bmN0aW9uKGUsdCl7aWYoIWZmKGUpKXRocm93IEVycm9yKFUoMjk5KSk7dmFyIG49ITEscj0iIixvPVNiO3JldHVybiB0IT1udWxsJiYodC51bnN0YWJsZV9zdHJpY3RNb2RlPT09ITAmJihuPSEwKSx0LmlkZW50aWZpZXJQcmVmaXghPT12b2lkIDAmJihyPXQuaWRlbnRpZmllclByZWZpeCksdC5vblJlY292ZXJhYmxlRXJyb3IhPT12b2lkIDAmJihvPXQub25SZWNvdmVyYWJsZUVycm9yKSksdD1jZihlLDEsITEsbnVsbCxudWxsLG4sITEscixvKSxlW19yXT10LmN1cnJlbnQsZXMoZS5ub2RlVHlwZT09PTg/ZS5wYXJlbnROb2RlOmUpLG5ldyBwZih0KX07a24uZmluZERPTU5vZGU9ZnVuY3Rpb24oZSl7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtpZihlLm5vZGVUeXBlPT09MSlyZXR1cm4gZTt2YXIgdD1lLl9yZWFjdEludGVybmFscztpZih0PT09dm9pZCAwKXRocm93IHR5cGVvZiBlLnJlbmRlcj09ImZ1bmN0aW9uIj9FcnJvcihVKDE4OCkpOihlPU9iamVjdC5rZXlzKGUpLmpvaW4oIiwiKSxFcnJvcihVKDI2OCxlKSkpO3JldHVybiBlPVZ5KHQpLGU9ZT09PW51bGw/bnVsbDplLnN0YXRlTm9kZSxlfTtrbi5mbHVzaFN5bmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFlvKGUpfTtrbi5oeWRyYXRlPWZ1bmN0aW9uKGUsdCxuKXtpZighQ2QodCkpdGhyb3cgRXJyb3IoVSgyMDApKTtyZXR1cm4gTWQobnVsbCxlLHQsITAsbil9O2tuLmh5ZHJhdGVSb290PWZ1bmN0aW9uKGUsdCxuKXtpZighZmYoZSkpdGhyb3cgRXJyb3IoVSg0MDUpKTt2YXIgcj1uIT1udWxsJiZuLmh5ZHJhdGVkU291cmNlc3x8bnVsbCxvPSExLGE9IiIsaT1TYjtpZihuIT1udWxsJiYobi51bnN0YWJsZV9zdHJpY3RNb2RlPT09ITAmJihvPSEwKSxuLmlkZW50aWZpZXJQcmVmaXghPT12b2lkIDAmJihhPW4uaWRlbnRpZmllclByZWZpeCksbi5vblJlY292ZXJhYmxlRXJyb3IhPT12b2lkIDAmJihpPW4ub25SZWNvdmVyYWJsZUVycm9yKSksdD14Yih0LG51bGwsZSwxLG4/P251bGwsbywhMSxhLGkpLGVbX3JdPXQuY3VycmVudCxlcyhlKSxyKWZvcihlPTA7ZTxyLmxlbmd0aDtlKyspbj1yW2VdLG89bi5fZ2V0VmVyc2lvbixvPW8obi5fc291cmNlKSx0Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9PW51bGw/dC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhPVtuLG9dOnQubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5wdXNoKG4sbyk7cmV0dXJuIG5ldyBBZCh0KX07a24ucmVuZGVyPWZ1bmN0aW9uKGUsdCxuKXtpZighQ2QodCkpdGhyb3cgRXJyb3IoVSgyMDApKTtyZXR1cm4gTWQobnVsbCxlLHQsITEsbil9O2tuLnVubW91bnRDb21wb25lbnRBdE5vZGU9ZnVuY3Rpb24oZSl7aWYoIUNkKGUpKXRocm93IEVycm9yKFUoNDApKTtyZXR1cm4gZS5fcmVhY3RSb290Q29udGFpbmVyPyhZbyhmdW5jdGlvbigpe01kKG51bGwsbnVsbCxlLCExLGZ1bmN0aW9uKCl7ZS5fcmVhY3RSb290Q29udGFpbmVyPW51bGwsZVtfcl09bnVsbH0pfSksITApOiExfTtrbi51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcz1hZjtrbi51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcj1mdW5jdGlvbihlLHQsbixyKXtpZighQ2QobikpdGhyb3cgRXJyb3IoVSgyMDApKTtpZihlPT1udWxsfHxlLl9yZWFjdEludGVybmFscz09PXZvaWQgMCl0aHJvdyBFcnJvcihVKDM4KSk7cmV0dXJuIE1kKGUsdCxuLCExLHIpfTtrbi52ZXJzaW9uPSIxOC4zLjEtbmV4dC1mMTMzOGY4MDgwLTIwMjQwNDI2In0pO3ZhciBPZD1DcigoUV8sVGIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIE5iKCl7aWYoISh0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fPiJ1Inx8dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSE9ImZ1bmN0aW9uIikpdHJ5e19fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShOYil9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX19TmIoKSxUYi5leHBvcnRzPUViKCl9KTt2YXIgQWI9Q3IobWY9PnsidXNlIHN0cmljdCI7dmFyIERiPU9kKCk7bWYuY3JlYXRlUm9vdD1EYi5jcmVhdGVSb290LG1mLmh5ZHJhdGVSb290PURiLmh5ZHJhdGVSb290O3ZhciBaX30pO3ZhciBtMD1DcihvYz0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYkE9ZmUoKSx3QT1TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iiksa0E9U3ltYm9sLmZvcigicmVhY3QuZnJhZ21lbnQiKSx4QT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFNBPWJBLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0Q3VycmVudE93bmVyLEVBPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gZjAoZSx0LG4pe3ZhciByLG89e30sYT1udWxsLGk9bnVsbDtuIT09dm9pZCAwJiYoYT0iIituKSx0LmtleSE9PXZvaWQgMCYmKGE9IiIrdC5rZXkpLHQucmVmIT09dm9pZCAwJiYoaT10LnJlZik7Zm9yKHIgaW4gdCl4QS5jYWxsKHQscikmJiFFQS5oYXNPd25Qcm9wZXJ0eShyKSYmKG9bcl09dFtyXSk7aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKHIgaW4gdD1lLmRlZmF1bHRQcm9wcyx0KW9bcl09PT12b2lkIDAmJihvW3JdPXRbcl0pO3JldHVybnskJHR5cGVvZjp3QSx0eXBlOmUsa2V5OmEscmVmOmkscHJvcHM6byxfb3duZXI6U0EuY3VycmVudH19b2MuRnJhZ21lbnQ9a0E7b2MuanN4PWYwO29jLmpzeHM9ZjB9KTt2YXIgJD1DcigoUDMsaDApPT57InVzZSBzdHJpY3QiO2gwLmV4cG9ydHM9bTAoKX0pO3ZhciBMUz1QKEFiKCksMSk7dmFyIGlUPSJsYXlvdXQtcGlja2VyIixZYT1be2lkOiJnb2FsLW9yaWVudGVkIixuYW1lOiJHb2FsLU9yaWVudGVkIChSZWNvbW1lbmRlZCkiLGljb246Ilx1ezFGM0FGfSIsZGVzY3JpcHRpb246IlF1YXJ0ZXJseSBwbGFubmluZywgdmljdG9yeSB0cmFja2luZywgYW5kIEFJIGNvYWNoaW5nIGFsb25nc2lkZSB5b3VyIGRhaWx5IHRhc2sgbGlzdC4gQmVzdCBmb3IgdXNlcnMgYWN0aXZlbHkgd29ya2luZyB0b3dhcmQgbG9uZy1ob3Jpem9uIGdvYWxzLiIsd2lkZ2V0czpbe3dpZGdldElkOiJwbGFubmluZyIsZ3JpZFdpZHRoU2l6ZToyfSx7d2lkZ2V0SWQ6InZpY3RvcnktdmFsdWUiLGdyaWRXaWR0aFNpemU6Mn0se3dpZGdldElkOiJkcmVhbS10YXNrIixncmlkV2lkdGhTaXplOjJ9LHt3aWRnZXRJZDoiZGF5LXNrZXRjaCIsZ3JpZFdpZHRoU2l6ZToyfSx7d2lkZ2V0SWQ6ImFnZW5kYSIsZ3JpZFdpZHRoU2l6ZToyfSx7d2lkZ2V0SWQ6InByb3Bvc2VkLWFnZW5kYSIsZ3JpZFdpZHRoU2l6ZToyfSx7d2lkZ2V0SWQ6InNoYXJlZC1ub3RlcyIsZ3JpZFdpZHRoU2l6ZToyfSx7d2lkZ2V0SWQ6InJlY2VudC1ub3RlcyIsZ3JpZFdpZHRoU2l6ZToyfSx7d2lkZ2V0SWQ6Im1vb2QiLGdyaWRXaWR0aFNpemU6MX0se3dpZGdldElkOiJxdW90ZXMiLGdyaWRXaWR0aFNpemU6Mn0se3dpZGdldElkOiJxdWljay1hY3Rpb25zIixncmlkV2lkdGhTaXplOjF9LHt3aWRnZXRJZDoiZW5lcmd5LXBlci1oYWJpdCIsZ3JpZFdpZHRoU2l6ZToyfV19LHtpZDoiZGF5LXRvLWRheSIsbmFtZToiRGF5LXRvLURheSIsaWNvbjoiXHV7MUY0QzV9IixkZXNjcmlwdGlvbjoiRXhlY3V0aW5nIHRvZGF5J3Mgd29yayBcdTIwMTQgdGFza3MsIHNjaGVkdWxlLCBhbmQgZGFpbHkgcGxhbm5pbmcgd2l0aG91dCBsb25nZXItaG9yaXpvbiBub2lzZS4gTm8gbW9vZCB0cmFja2luZyBvciBnb2FsIHdpZGdldHMuIix3aWRnZXRzOlt7d2lkZ2V0SWQ6ImFnZW5kYSIsZ3JpZFdpZHRoU2l6ZToyfSx7d2lkZ2V0SWQ6InByb3Bvc2VkLWFnZW5kYSIsZ3JpZFdpZHRoU2l6ZToyfSx7d2lkZ2V0SWQ6ImRheS1za2V0Y2giLGdyaWRXaWR0aFNpemU6Mn0se3dpZGdldElkOiJjYWxlbmRhciIsZ3JpZFdpZHRoU2l6ZToyfSx7d2lkZ2V0SWQ6ImRyZWFtLXRhc2siLGdyaWRXaWR0aFNpemU6Mn0se3dpZGdldElkOiJzaGFyZWQtbm90ZXMiLGdyaWRXaWR0aFNpemU6Mn0se3dpZGdldElkOiJncmF2ZXlhcmQiLGdyaWRXaWR0aFNpemU6Mn0se3dpZGdldElkOiJxdW90ZXMiLGdyaWRXaWR0aFNpemU6Mn0se3dpZGdldElkOiJyZWNlbnQtbm90ZXMiLGdyaWRXaWR0aFNpemU6Mn0se3dpZGdldElkOiJwZWFrLWhvdXJzIixncmlkV2lkdGhTaXplOjJ9XX0se2lkOiJtaW5kZnVsLWFjaGlldmVyIixuYW1lOiJNaW5kZnVsIEFjaGlldmVyIixpY29uOiJcdXsxRjMzMX0iLGRlc2NyaXB0aW9uOiJGb3IgdGhvc2Ugd2hvIHRyYWNrIHdlbGxiZWluZyBhbG9uZ3NpZGUgdGFza3MuIEJhbGFuY2VzIG1vb2QsIGluc3BpcmF0aW9uLCBhbmQgdGFzayBoeWdpZW5lIFx1MjAxNCB3aXRob3V0IG92ZXJ3aGVsbWluZyB0aGUgdmlldyB3aXRoIHBsYW5uaW5nIHdpZGdldHMuIix3aWRnZXRzOlt7d2lkZ2V0SWQ6ImFnZW5kYSIsZ3JpZFdpZHRoU2l6ZToyfSx7d2lkZ2V0SWQ6InBsYW5uaW5nIixncmlkV2lkdGhTaXplOjJ9LHt3aWRnZXRJZDoibW9vZCIsZ3JpZFdpZHRoU2l6ZToxfSx7d2lkZ2V0SWQ6ImRheS1za2V0Y2giLGdyaWRXaWR0aFNpemU6Mn0se3dpZGdldElkOiJncmF2ZXlhcmQiLGdyaWRXaWR0aFNpemU6MX0se3dpZGdldElkOiJxdW90ZXMiLGdyaWRXaWR0aFNpemU6Mn0se3dpZGdldElkOiJzaGFyZWQtbm90ZXMiLGdyaWRXaWR0aFNpemU6Mn0se3dpZGdldElkOiJlbmVyZ3ktcGVyLWhhYml0IixncmlkV2lkdGhTaXplOjJ9LHt3aWRnZXRJZDoiZHJlYW0tdGFzayIsZ3JpZFdpZHRoU2l6ZToyfSx7d2lkZ2V0SWQ6ImNhbGVuZGFyIixncmlkV2lkdGhTaXplOjJ9LHt3aWRnZXRJZDoidmljdG9yeS12YWx1ZSIsZ3JpZFdpZHRoU2l6ZToyfV19XSxEdD1be3dpZGdldElkOiJsYXlvdXQtcGlja2VyIixuYW1lOiJMYXlvdXQgUGlja2VyIixkZXNjcmlwdGlvbjoiT25lLWNsaWNrIHByZXNldHMgdGhhdCByZWFycmFuZ2UgeW91ciBlbnRpcmUgZGFzaGJvYXJkIGludG8gYSBjdXJhdGVkIHByb2ZpbGUiLGljb246Ilx1ezFGNUMyfVx1RkUwRiIsZGVmYXVsdEdyaWRXaWR0aFNpemU6MixtYXhIb3Jpem9udGFsVGlsZXM6MixtYXhWZXJ0aWNhbFRpbGVzOjJ9LHt3aWRnZXRJZDoicGxhbm5pbmciLG5hbWU6IlF1YXJ0ZXJseSBQbGFubmluZyIsZGVzY3JpcHRpb246IlBsYW4gYW5kIHRyYWNrIHlvdXIgcXVhcnRlcmx5IGdvYWxzIGFuZCBwcmlvcml0aWVzIixpY29uOiJcdXsxRjRDQn0iLGRlZmF1bHRHcmlkV2lkdGhTaXplOjIsbWF4SG9yaXpvbnRhbFRpbGVzOjQsbWF4VmVydGljYWxUaWxlczoyfSx7d2lkZ2V0SWQ6InZpY3RvcnktdmFsdWUiLG5hbWU6IlZpY3RvcnkgVmFsdWUiLGRlc2NyaXB0aW9uOiJDZWxlYnJhdGUgd2lucyBhbmQgdHJhY2sgaGlnaC12YWx1ZSB0YXNrIGNvbXBsZXRpb25zIixpY29uOiJcdXsxRjNDNn0iLGRlZmF1bHRHcmlkV2lkdGhTaXplOjIsbWF4SG9yaXpvbnRhbFRpbGVzOjQsbWF4VmVydGljYWxUaWxlczoyfSx7d2lkZ2V0SWQ6ImRyZWFtLXRhc2siLG5hbWU6IkdvYWwgQ29hY2giLGRlc2NyaXB0aW9uOiJHZXQgdGFzayBzdWdnZXN0aW9ucyB0aGF0IGJsZW5kIHF1YXJ0ZXJseS9tb250aGx5IGdvYWxzIHdpdGggZGF5LW9mLXdlZWsgcHJlZmVyZW5jZXMiLGljb246Ilx1ezFGNTJFfSIsZGVmYXVsdEdyaWRXaWR0aFNpemU6MixtYXhIb3Jpem9udGFsVGlsZXM6NCxtYXhWZXJ0aWNhbFRpbGVzOjIsdmlzaWJsZVN1YnRpdGxlOiJXaGF0IGlmIHlvdSBkaWQgaXQgdG9kYXk/In0se3dpZGdldElkOiJkYXktc2tldGNoIixuYW1lOiJEYXkgU2tldGNoZXIiLGRlc2NyaXB0aW9uOiJOb3RlYm9vay1wYXBlciBkYXkgcGxhbm5lciB3aXRoIGhvdXItYnktaG91ciBlbnRyaWVzIHNhdmVkIHRvIGEgbm90ZSIsaWNvbjoiXHV7MUY1RDJ9XHVGRTBGIixkZWZhdWx0R3JpZFdpZHRoU2l6ZToyLG1heEhvcml6b250YWxUaWxlczo0LG1heFZlcnRpY2FsVGlsZXM6Mn0se3dpZGdldElkOiJhZ2VuZGEiLG5hbWU6IlRhc2sgQWdlbmRhIixkZXNjcmlwdGlvbjoiVmlldyBhbmQgbWFuYWdlIHlvdXIgcHJpb3JpdGl6ZWQgdGFzayBsaXN0IixpY29uOiJcdXsxRjRDQ30iLGRlZmF1bHRHcmlkV2lkdGhTaXplOjIsbWF4SG9yaXpvbnRhbFRpbGVzOjQsbWF4VmVydGljYWxUaWxlczoyfSx7d2lkZ2V0SWQ6InByb3Bvc2VkLWFnZW5kYSIsbmFtZToiUHJvcG9zZWQgQWdlbmRhIixkZXNjcmlwdGlvbjoiQUktcHJvcG9zZWQgaG91ci1ieS1ob3VyIHNjaGVkdWxlIGJ1aWx0IGZyb20geW91ciByZWNlbnQgdGFza3MgYW5kIHF1YXJ0ZXJseSBwbGFuIixpY29uOiJcdXsxRjVEM31cdUZFMEYiLGRlZmF1bHRHcmlkV2lkdGhTaXplOjIsaW50cm9kdWNlZEF0OiIyMDI2LTA2LTI3IixtYXhIb3Jpem9udGFsVGlsZXM6NCxtYXhWZXJ0aWNhbFRpbGVzOjJ9LHt3aWRnZXRJZDoicXVvdGVzIixuYW1lOiJJbnNwaXJhdGlvbiBRdW90ZXMiLGRlc2NyaXB0aW9uOiJSb3RhdGluZyBpbnNwaXJhdGlvbmFsIHF1b3RlcyB0byBrZWVwIHlvdSBtb3RpdmF0ZWQiLGljb246Ilx1ezFGNEExfSIsZGVmYXVsdEdyaWRXaWR0aFNpemU6MixtYXhIb3Jpem9udGFsVGlsZXM6NCxtYXhWZXJ0aWNhbFRpbGVzOjJ9LHt3aWRnZXRJZDoiZ3JhdmV5YXJkIixuYW1lOiJUYXNrIFJldGlyZW1lbnQgQ2VudGVyIixkZXNjcmlwdGlvbjoiU3VyZmFjZSBuZWdsZWN0ZWQgdGFza3MgYW5kIHJldGlyZSB0aGVtIHRvIGFuIGFyY2hpdmVkIG5vdGUiLGljb246Ilx1ezFGNDc1fVx1RkUwRiIsZGVmYXVsdEdyaWRXaWR0aFNpemU6MixpbnRyb2R1Y2VkQXQ6IjIwMjYtMDUtMDkiLG1heEhvcml6b250YWxUaWxlczoyLG1heFZlcnRpY2FsVGlsZXM6Mn0se3dpZGdldElkOiJyZWNlbnQtbm90ZXMiLG5hbWU6IlJldmlzaXQgQ2FuZGlkYXRlIixkZXNjcmlwdGlvbjoiTm90ZXMgd2l0aCBvcGVuIHRhc2tzIHRoYXQgaGF2ZSBub3QgaGFkIGEgbmV3IHRhc2sgaW4gb3ZlciBhIHdlZWsiLGljb246Ilx1ezFGNEREfSIsZGVmYXVsdEdyaWRXaWR0aFNpemU6MSxtYXhIb3Jpem9udGFsVGlsZXM6NCxtYXhWZXJ0aWNhbFRpbGVzOjJ9LHt3aWRnZXRJZDoic2hhcmVkLW5vdGVzIixuYW1lOiJTaGFyZWQgTm90ZXMiLGRlc2NyaXB0aW9uOiJTaGFyZWQgbm90ZXMgcmVjZW50bHkgdXBkYXRlZCBieSBhIGNvbGxhYm9yYXRvciBhZnRlciB5b3VyIG93biBjaGFuZ2VzIixpY29uOiJcdXsxRjkxRH0iLGRlZmF1bHRHcmlkV2lkdGhTaXplOjIsaW50cm9kdWNlZEF0OiIyMDI2LTA2LTI2IixtYXhIb3Jpem9udGFsVGlsZXM6NCxtYXhWZXJ0aWNhbFRpbGVzOjJ9LHt3aWRnZXRJZDoibm90ZS1wZWVrIixuYW1lOiJOb3RlIFBlZWsiLGRlc2NyaXB0aW9uOiJEaXNwbGF5IHRoZSBjb250ZW50cyBvZiBhbnkgbm90ZSB5b3UgY2hvb3NlLCBjbGlwcGVkIHRvIHRoZSB3aWRnZXQncyBzaXplIixpY29uOiJcdXsxRjREOH0iLGRlZmF1bHRHcmlkV2lkdGhTaXplOjIsaW50cm9kdWNlZEF0OiIyMDI2LTA4LTAzIixtYXhIb3Jpem9udGFsVGlsZXM6NCxtYXhWZXJ0aWNhbFRpbGVzOjJ9LHt3aWRnZXRJZDoibW9vZCIsbmFtZToiRW5lcmd5IChNb29kKSBUcmFja2VyIix2aXNpYmxlVGl0bGU6IkhvdyBnb2VzIGl0PyIsZGVzY3JpcHRpb246IkxvZyB5b3VyIGRhaWx5IGVuZXJneSBsZXZlbCBhbmQgdmlzdWFsaXplIHRyZW5kcyBvdmVyIHRpbWUiLGljb246Ilx1ezFGM0FEfSIsZGVmYXVsdEdyaWRXaWR0aFNpemU6MSxtYXhIb3Jpem9udGFsVGlsZXM6MixtYXhWZXJ0aWNhbFRpbGVzOjJ9LHt3aWRnZXRJZDoiY2FsZW5kYXIiLG5hbWU6IkNhbGVuZGFyIixkZXNjcmlwdGlvbjoiU2VlIHVwY29taW5nIGV2ZW50cyBhbmQgYXBwb2ludG1lbnRzIGF0IGEgZ2xhbmNlIixpY29uOiJcdXsxRjRDNX0iLGRlZmF1bHRHcmlkV2lkdGhTaXplOjEsbWF4SG9yaXpvbnRhbFRpbGVzOjIsbWF4VmVydGljYWxUaWxlczoyfSx7d2lkZ2V0SWQ6InF1aWNrLWFjdGlvbnMiLG5hbWU6IlF1aWNrIEFjdGlvbnMiLGRlc2NyaXB0aW9uOiJTaG9ydGN1dHMgZm9yIHlvdXIgbW9zdCBmcmVxdWVudGx5IHVzZWQgZGFzaGJvYXJkIGFjdGlvbnMiLGljb246Ilx1MjZBMSIsZGVmYXVsdEdyaWRXaWR0aFNpemU6MSxtYXhIb3Jpem9udGFsVGlsZXM6MixtYXhWZXJ0aWNhbFRpbGVzOjJ9LHt3aWRnZXRJZDoicGVhay1ob3VycyIsbmFtZToiUGVhayBIb3VycyIsZGVzY3JpcHRpb246IkhvdXJseSBkaXN0cmlidXRpb24gb2YgdGFzayBjcmVhdGlvbiBhbmQgY29tcGxldGlvbiBhY3Rpdml0eSIsaWNvbjoiXHUyM0YwIixkZWZhdWx0R3JpZFdpZHRoU2l6ZToyLG1heEhvcml6b250YWxUaWxlczo0LG1heFZlcnRpY2FsVGlsZXM6Mn0se3dpZGdldElkOiJlbmVyZ3ktcGVyLWhhYml0IixuYW1lOiJFbmVyZ3kgUGVyIEhhYml0Iix2aXNpYmxlVGl0bGU6IkVuZXJneSBkZWx0YSBwZXIgaGFiaXQiLGRlc2NyaXB0aW9uOiJDb3JyZWxhdGUgZWFjaCByZWN1cnJpbmctdGFzayBoYWJpdCB3aXRoIGhvdyB5b3UgZmVsdDogYXZlcmFnZSBlbmVyZ3kgb24gZGF5cyB5b3UgZG8gaXQgdnMuIGRvbid0IixpY29uOiJcdXsxRjUwQn0iLGRlZmF1bHRHcmlkV2lkdGhTaXplOjIsaW50cm9kdWNlZEF0OiIyMDI2LTA3LTE3IixtYXhIb3Jpem9udGFsVGlsZXM6NCxtYXhWZXJ0aWNhbFRpbGVzOjJ9LHt3aWRnZXRJZDoiZGVidWctY29uc29sZSIsbmFtZToiRGVidWcgQ29uc29sZSIsZGVzY3JpcHRpb246IlNjcm9sbGFibGUgbG9nIHZpZXdlciBzaG93aW5nIGFsbCBsb2dJZkVuYWJsZWQgbWVzc2FnZXMgKGRldmVsb3BlciB0b29sKSIsaWNvbjoiXHV7MUY0MUJ9IixkZWZhdWx0R3JpZFdpZHRoU2l6ZToyLG1heEhvcml6b250YWxUaWxlczo0LG1heFZlcnRpY2FsVGlsZXM6MixkZWJ1Z09ubHk6ITB9XTtmdW5jdGlvbiBmcyhlKXtsZXQgdD1PYmplY3QuZnJvbUVudHJpZXMoRHQubWFwKG49PltuLndpZGdldElkLHtncmlkSGVpZ2h0U2l6ZToxLGdyaWRXaWR0aFNpemU6bi5kZWZhdWx0R3JpZFdpZHRoU2l6ZXx8MX1dKSk7cmV0dXJuKGU/LndpZGdldHN8fFtdKS5mb3JFYWNoKG49Pnt0W24ud2lkZ2V0SWRdJiYodFtuLndpZGdldElkXT17Li4udFtuLndpZGdldElkXSxncmlkV2lkdGhTaXplOk51bWJlcihuLmdyaWRXaWR0aFNpemUpfHx0W24ud2lkZ2V0SWRdLmdyaWRXaWR0aFNpemV9KX0pLHR9ZnVuY3Rpb24gQ2IoZSx0KXtsZXQgcj0oQXJyYXkuaXNBcnJheShlKT9lOltdKS5maWx0ZXIoaT0+aS53aWRnZXRJZCE9PWlUKSxvPXQud2lkZ2V0cyxhPWZzKHQpO3JldHVybiByLmxlbmd0aCE9PW8ubGVuZ3RoPyExOm8uZXZlcnkoKGkscyk9PnJbc10/LndpZGdldElkPT09aS53aWRnZXRJZCYmTnVtYmVyKHJbc10/LmdyaWRXaWR0aFNpemUpPT09YVtpLndpZGdldElkXT8uZ3JpZFdpZHRoU2l6ZSl9ZnVuY3Rpb24gTWIoZSl7cmV0dXJuIFlhLmZpbmQodD0+dC5pZD09PWUpfHxudWxsfXZhciBidD17REVGQVVMVDoiZGVmYXVsdCIsTEFZT1VUX0NPTkZJRzoibGF5b3V0Q29uZmlnIixNRU1PUllfTUVBU1VSRU1FTlQ6Im1lbW9yeU1lYXN1cmVtZW50IixTRVRUSU5HU19DT05GSUc6InNldHRpbmdzQ29uZmlnIn07dmFyIEliPXR5cGVvZiBwcm9jZXNzPCJ1IiYmITEsSW49ITEsaGY9MzAsdmU9InBsdWdpbnMvZGFzaGJvYXJkIixSZD0icGxhbm5pbmcvcXVhcnRlcmx5Ijt2YXIgQj17QkFDS0dST1VORF9JTUFHRV9VUkw6IkJhY2tncm91bmQgSW1hZ2UgVVJMIixCQUNLR1JPVU5EX0lNQUdFX01PREU6IkJhY2tncm91bmQgSW1hZ2UgTW9kZSIsQ09OU09MRV9MT0dHSU5HOiJDb25zb2xlIGxvZ2dpbmciLERBU0hCT0FSRF9DT01QT05FTlRTOiJkYXNoYm9hcmRfZWxlbWVudHMiLERFQlVHX0NPTlNPTEU6ImRlYnVnX2NvbnNvbGUiLExMTV9BUElfS0VZX0FOVEhST1BJQzoiQW50aHJvcGljIEFQSSBLZXkiLExMTV9BUElfS0VZX0dFTUlOSToiR2VtaW5pIEFQSSBLZXkiLExMTV9BUElfS0VZX0dST0s6Ikdyb2sgQVBJIEtleSIsTExNX0FQSV9LRVlfT1BFTkFJOiJPcGVuQUkgQVBJIEtleSIsTExNX1BST1ZJREVSX01PREVMOiJMTE0gUHJvdmlkZXIiLEZJUlNUX0lOU1RBTExFRF9BVDoiZGFzaGJvYXJkX2ZpcnN0X2luc3RhbGxlZF9hdCIsUkVOREVSX0JSRUFEQ1JVTUI6ImRhc2hib2FyZF9yZW5kZXJfYnJlYWRjcnVtYiIsU0VMRUNURURfTEFZT1VUX1BST0ZJTEU6ImRhc2hib2FyZF9zZWxlY3RlZF9sYXlvdXRfcHJvZmlsZSIsVEFTS19ET01BSU5TOiJkYXNoYm9hcmRfdGFza19kb21haW5zIixQTEFOTklOR19OT1RFX1RBRzoiVGFnIHRvIGFwcGx5IHRvIHBsYW5uaW5nIG5vdGVzIixQUk9QT1NFRF9BR0VOREFfUFJJT1JJVFk6ImRhc2hib2FyZF9wcm9wb3NlZF9hZ2VuZGFfcHJpb3JpdHkiLFBST1BPU0VEX0FHRU5EQV9MTE06ImRhc2hib2FyZF9wcm9wb3NlZF9hZ2VuZGFfbGxtIn0sSWQ9e2FudGhyb3BpYzpCLkxMTV9BUElfS0VZX0FOVEhST1BJQyxnZW1pbmk6Qi5MTE1fQVBJX0tFWV9HRU1JTkksZ3JvazpCLkxMTV9BUElfS0VZX0dST0ssb3BlbmFpOkIuTExNX0FQSV9LRVlfT1BFTkFJfSxPYj17bm9uZTpudWxsLG9wZW5haToib3BlbmFpIixhbnRocm9waWM6ImFudGhyb3BpYyIsImFudGhyb3BpYy1zb25uZXQiOiJhbnRocm9waWMiLGdlbWluaToiZ2VtaW5pIixncm9rOiJncm9rIn07ZnVuY3Rpb24gV3IoZSl7cmV0dXJuIWV8fGU9PT0ibm9uZSI/bnVsbDpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoT2IsZSk/T2JbZV06SWRbZV0/ZTpudWxsfWZ1bmN0aW9uIEt0KGUpe3JldHVybiBJZFtlXXx8bnVsbH1mdW5jdGlvbiBQZChlKXtyZXR1cm4gT2JqZWN0LmtleXMoSWQpLmZpbHRlcih0PT57bGV0IG49ZT8uW0lkW3RdXTtyZXR1cm4gdHlwZW9mIG49PSJzdHJpbmciJiZuLnRyaW0oKS5sZW5ndGg+MH0pfWZ1bmN0aW9uIFJiKGUpe3N3aXRjaChlKXtjYXNlIm9wZW5haSI6cmV0dXJuKHByb2Nlc3MuZW52Lk9QRU5fQUlfQUNDRVNTX1RPS0VOfHwiIikudHJpbSgpO2Nhc2UiYW50aHJvcGljIjpyZXR1cm4ocHJvY2Vzcy5lbnYuQU5USFJPUElDX0FJX0FDQ0VTU19UT0tFTnx8IiIpLnRyaW0oKTtjYXNlImdyb2siOnJldHVybihwcm9jZXNzLmVudi5HUk9LX0FJX0FDQ0VTU19UT0tFTnx8IiIpLnRyaW0oKTtjYXNlImdlbWluaSI6cmV0dXJuKHByb2Nlc3MuZW52LkdFTUlOSV9BSV9BQ0NFU1NfVE9LRU58fCIiKS50cmltKCk7ZGVmYXVsdDpyZXR1cm4iIn19ZnVuY3Rpb24gUGIoKXtyZXR1cm4gSW4/WyJvcGVuYWkiLCJhbnRocm9waWMiLCJncm9rIiwiZ2VtaW5pIl0uc29tZShlPT4hIVJiKGUpKTohMX1mdW5jdGlvbiBMZChlKXtpZighSW4pcmV0dXJuIG51bGw7Zm9yKGxldCB0IG9mWyJvcGVuYWkiLCJhbnRocm9waWMiLCJncm9rIiwiZ2VtaW5pIl0pe2xldCBuPVJiKHQpLHI9ZVt0XXx8bnVsbDtpZihuJiZyKXJldHVybntwcm92aWRlcjp0LG1vZGVsOnIsYXBpS2V5Om59fXJldHVybiBudWxsfWZ1bmN0aW9uIEJyKGUpe3JldHVybmBkYXNoYm9hcmRfJHtlfV9jb25maWdgfWZ1bmN0aW9uIHFhKGUsdCl7bGV0IG49ZT8uW0JyKHQpXTtpZighbilyZXR1cm5bXTtpZihBcnJheS5pc0FycmF5KG4pKXJldHVybiBuO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShuKX1jYXRjaHtyZXR1cm5bXX19dmFyIExiPVt7dmFsdWU6ImNvdmVyIixsYWJlbDoiQ292ZXIgKGZpbGwgZW50aXJlIGJhY2tncm91bmQpIn0se3ZhbHVlOiJjb250YWluIixsYWJlbDoiQ29udGFpbiAoZml0IHdpdGhvdXQgY3JvcHBpbmcpIn0se3ZhbHVlOiJyZXBlYXQiLGxhYmVsOiJSZXBlYXQgKHRpbGUgdGhlIGltYWdlKSJ9LHt2YWx1ZToicmVwZWF0LXgiLGxhYmVsOiJSZXBlYXQgaG9yaXpvbnRhbGx5In0se3ZhbHVlOiJyZXBlYXQteSIsbGFiZWw6IlJlcGVhdCB2ZXJ0aWNhbGx5In0se3ZhbHVlOiJuby1yZXBlYXQiLGxhYmVsOiJObyByZXBlYXQgKHNpbmdsZSBjZW50ZXJlZCBpbWFnZSkifV0sclU9Qi5EQVNIQk9BUkRfQ09NUE9ORU5UUyxzVD0yNCo2MCo2MCoxZTM7ZnVuY3Rpb24gX2IoZSl7cmV0dXJuIEZiKGUpPy5pY29ufHxudWxsfWZ1bmN0aW9uIF9kKGUpe2xldCB0PUR0LmZpbmQobj0+bi53aWRnZXRJZD09PWUpO3JldHVybiB0Py52aXNpYmxlVGl0bGV8fHQ/Lm5hbWV8fGV9ZnVuY3Rpb24gVWIoZSl7cmV0dXJuIEZiKGUpPy52aXNpYmxlU3VidGl0bGV8fG51bGx9ZnVuY3Rpb24gRmIoZSl7cmV0dXJuIER0LmZpbmQodD0+dC53aWRnZXRJZD09PWUpfHxudWxsfXZhciBIcj1EdC5maWx0ZXIoZT0+IWUuZGVidWdPbmx5KS5tYXAoZT0+KHt3aWRnZXRJZDplLndpZGdldElkLGdyaWRXaWR0aFNpemU6ZS5kZWZhdWx0R3JpZFdpZHRoU2l6ZSxncmlkSGVpZ2h0U2l6ZToxLHNldHRpbmdzOnt9fSkpO2Z1bmN0aW9uIFNlKGUpe3JldHVybiBuZXcgRGF0ZShEYXRlLm5vdygpLWUqNjAqMWUzKS50b0lTT1N0cmluZygpfXZhciBTbz17ImRvbWFpbi13b3JrLXV1aWQiOlt7dXVpZDoibm90ZS13b3JrLTEiLG5hbWU6IlExIEdvYWwgUmV2aWV3Iix0YWdzOlsid29yayJdLHNoYXJlZDohMCxoYXNUYXNrczohMCxhY3RpdmU6U2UoNDUpLGNoYW5nZWQ6U2UoMjg4MCksdXBkYXRlZDpTZSg4KX0se3V1aWQ6Im5vdGUtd29yay0yIixuYW1lOiJTdGFuZC11cCBOb3RlcyIsdGFnczpbIndvcmsiXX0se3V1aWQ6Im5vdGUtd29yay0zIixuYW1lOiJGZWF0dXJlIEltcGxlbWVudGF0aW9uIix0YWdzOlsid29yayJdfSx7dXVpZDoibm90ZS13b3JrLTQiLG5hbWU6IkRlc2lnbiBGZWVkYmFjayIsdGFnczpbIndvcmsiXSxzaGFyZWQ6ITAsaGFzVGFza3M6ITAsYWN0aXZlOlNlKDE1MDApLGNoYW5nZWQ6U2UoNzIwMCksdXBkYXRlZDpTZSgxMjApfSx7dXVpZDoibm90ZS13b3JrLTUiLG5hbWU6IkJ1ZGdldCBUcmFja2VyIix0YWdzOlsid29yayJdfSx7dXVpZDoibm90ZS13b3JrLTYiLG5hbWU6Ik9mZmxpbmUgVGVzdGluZyIsdGFnczpbIndvcmsiXX0se3V1aWQ6Im5vdGUtd29yay03IixuYW1lOiJTcHJpbnQgUmV0cm8iLHRhZ3M6WyJ3b3JrIl0sc2hhcmVkOiEwLGhhc1Rhc2tzOiExLGFjdGl2ZTpTZSg4NjQwKSxjaGFuZ2VkOlNlKDU1NzYwKSx1cGRhdGVkOlNlKDQ0NDQwKX0se3V1aWQ6Im5vdGUtd29yay04IixuYW1lOiJBUEkgTGF5ZXIgUmVzZWFyY2giLHRhZ3M6WyJ3b3JrIl19LHt1dWlkOiJub3RlLXdvcmstOSIsbmFtZToiSW50ZWdyYXRpb24gVGVzdHMiLHRhZ3M6WyJ3b3JrIl19LHt1dWlkOiJub3RlLXdvcmstMTAiLG5hbWU6IlB1bGwgUmVxdWVzdCBRdWV1ZSIsdGFnczpbIndvcmsiXSxzaGFyZWQ6ITAsaGFzVGFza3M6ITAsYWN0aXZlOlNlKDI0MCksY2hhbmdlZDpTZSgxODApLHVwZGF0ZWQ6U2UoMTgwKX0se3V1aWQ6Im5vdGUtd29yay0xMSIsbmFtZToiU2V0dGluZ3MgTW9kdWxlIFRlc3RzIix0YWdzOlsid29yayJdfSx7dXVpZDoibm90ZS13b3JrLTEyIixuYW1lOiJDU1MgQ2xlYW51cCIsdGFnczpbIndvcmsiXX0se3V1aWQ6Im5vdGUtd29yay0xMyIsbmFtZToiRGFzaGJvYXJkIE1lbW9yeSBMZWFrIix0YWdzOlsid29yayJdfSx7dXVpZDoibm90ZS13b3JrLTE0IixuYW1lOiJDbGllbnQgRmVlZGJhY2siLHRhZ3M6WyJ3b3JrIl0sc2hhcmVkOiEwLGhhc1Rhc2tzOiEwLGFjdGl2ZTpTZSgyMDE2MCksY2hhbmdlZDpTZSgxNDQwMCksdXBkYXRlZDpTZSgxNDMyMCl9LHt1dWlkOiJub3RlLXdvcmstMTUiLG5hbWU6IkFQSSBFcnJvciBIYW5kbGluZyIsdGFnczpbIndvcmsiXX0se3V1aWQ6Im5vdGUtd29yay0xNiIsbmFtZToiQXV0aCBUb2tlbiBSZWZyZXNoIix0YWdzOlsid29yayJdfSx7dXVpZDoibm90ZS13b3JrLTE3IixuYW1lOiJEQiBRdWVyeSBQZXJmb3JtYW5jZSIsdGFnczpbIndvcmsiXX0se3V1aWQ6Im5vdGUtb2xkLTNtbyIsbmFtZToiU2VjdXJpdHkgQmFja2xvZyAoUTQpIix0YWdzOlsid29yayJdfSx7dXVpZDoibm90ZS1vbGQtNG1vIixuYW1lOiJQbGF0Zm9ybSBNaWdyYXRpb24gTm90ZXMiLHRhZ3M6WyJ3b3JrIl19LHt1dWlkOiJub3RlLW9sZC01bW8iLG5hbWU6IlRlY2ggRGVidCBUcmFja2VyIix0YWdzOlsid29yayJdfSx7dXVpZDoibm90ZS1vbGQtNm1vIixuYW1lOiJBYmFuZG9uZWQgRmVhdHVyZSBDb25jZXB0cyIsdGFnczpbIndvcmsiXX0se3V1aWQ6Im5vdGUtb2xkLTdtbyIsbmFtZToiTGVnYWN5IFN5c3RlbSBEb2NzIix0YWdzOlsid29yayJdfV0sImRvbWFpbi1wZXJzb25hbC11dWlkIjpbe3V1aWQ6Im5vdGUtcGVyc29uYWwtMSIsbmFtZToiTmV0d29ya2luZyBPdXRyZWFjaCIsdGFnczpbInBlcnNvbmFsIl0sc2hhcmVkOiEwLGhhc1Rhc2tzOiEwLGFjdGl2ZTpTZSgxMjApLGNoYW5nZWQ6U2UoMTQ0MCksdXBkYXRlZDpTZSgyNSl9LHt1dWlkOiJub3RlLXBlcnNvbmFsLTIiLG5hbWU6IkZpdG5lc3MgTG9nIix0YWdzOlsicGVyc29uYWwiXX0se3V1aWQ6Im5vdGUtcGVyc29uYWwtMyIsbmFtZToiU29jaWFsIFJlbWluZGVycyIsdGFnczpbInBlcnNvbmFsIl19LHt1dWlkOiJub3RlLXBlcnNvbmFsLTQiLG5hbWU6IkVudGVydGFpbm1lbnQiLHRhZ3M6WyJwZXJzb25hbCJdfSx7dXVpZDoibm90ZS1wZXJzb25hbC01IixuYW1lOiJTaG9wcGluZyBMaXN0Iix0YWdzOlsicGVyc29uYWwiXX0se3V1aWQ6Im5vdGUtcGVyc29uYWwtNiIsbmFtZToiSGVhbHRoIEFwcG9pbnRtZW50cyIsdGFnczpbInBlcnNvbmFsIl19LHt1dWlkOiJub3RlLXBlcnNvbmFsLTciLG5hbWU6IlJlYWRpbmcgTGlzdCIsdGFnczpbInBlcnNvbmFsIl19LHt1dWlkOiJub3RlLXBlcnNvbmFsLTgiLG5hbWU6IkhvYmJpZXMiLHRhZ3M6WyJwZXJzb25hbCJdfSx7dXVpZDoibm90ZS1wZXJzb25hbC05IixuYW1lOiJUcmlwIFBsYW5uaW5nIix0YWdzOlsicGVyc29uYWwiXSxzaGFyZWQ6ITAsaGFzVGFza3M6ITEsYWN0aXZlOlNlKDQzMjApLGNoYW5nZWQ6U2UoMjg4MCksdXBkYXRlZDpTZSgzNjApfSx7dXVpZDoibm90ZS1wZXJzb25hbC0xMCIsbmFtZToiSG9tZSBPZmZpY2UiLHRhZ3M6WyJwZXJzb25hbCJdfV0sImRvbWFpbi1zaWRlLXV1aWQiOlt7dXVpZDoibm90ZS1zaWRlLTEiLG5hbWU6IkJsb2cgUG9zdCBJZGVhcyIsdGFnczpbInNpZGUtcHJvamVjdHMiXX0se3V1aWQ6Im5vdGUtc2lkZS0yIixuYW1lOiJTaWRlIFByb2plY3QgUkVBRE1FIix0YWdzOlsic2lkZS1wcm9qZWN0cyJdLHNoYXJlZDohMCxoYXNUYXNrczohMCxhY3RpdmU6U2UoMjg4MCksY2hhbmdlZDpTZSg0MzIwKSx1cGRhdGVkOlNlKDQ1KX0se3V1aWQ6Im5vdGUtc2lkZS0zIixuYW1lOiJDSSBQaXBlbGluZSBTZXR1cCIsdGFnczpbInNpZGUtcHJvamVjdHMiXX1dfTt2YXIgemI9W3t1dWlkOiJwZXJzb24tam9yZGFuLWxlZSIsbmFtZToiSm9yZGFuIExlZSIsYXZhdGFyOntpbWFnZToiaHR0cHM6Ly9pLnByYXZhdGFyLmNjLzgwP3U9am9yZGFuLWxlZSJ9LGFjdGl2ZTpTZSgzMCksc2hhcmluZzp7bm90ZXM6WyJub3RlLXdvcmstMSJdLHRhZ3M6W119fSx7dXVpZDoicGVyc29uLXNhbS1yaXZlcmEiLG5hbWU6IlNhbSBSaXZlcmEiLGF2YXRhcjp7dGV4dDoiU1IifSxhY3RpdmU6U2UoOTApLHNoYXJpbmc6e25vdGVzOlsibm90ZS13b3JrLTEiXSx0YWdzOltdfX0se3V1aWQ6InBlcnNvbi1wcml5YS1wYXRlbCIsbmFtZToiUHJpeWEgUGF0ZWwiLGF2YXRhcjp7aW1hZ2U6Imh0dHBzOi8vaS5wcmF2YXRhci5jYy84MD91PXByaXlhLXBhdGVsIn0sYWN0aXZlOlNlKDI0MCksc2hhcmluZzp7bm90ZXM6WyJub3RlLXdvcmstNCJdLHRhZ3M6WyJ3b3JrIl19fSx7dXVpZDoicGVyc29uLWNoZW4td2VpIixuYW1lOiJDaGVuIFdlaSIsYXZhdGFyOnt0ZXh0OiJDVyJ9LGFjdGl2ZTpTZSgxNTAwKSxzaGFyaW5nOntub3RlczpbIm5vdGUtd29yay03Il0sdGFnczpbXX19LHt1dWlkOiJwZXJzb24tbWFyaWEtZ29tZXoiLG5hbWU6Ik1hcmlhIEdvbWV6IixhdmF0YXI6e2ltYWdlOiJodHRwczovL2kucHJhdmF0YXIuY2MvODA/dT1tYXJpYS1nb21leiJ9LGFjdGl2ZTpTZSgxNjAwKSxzaGFyaW5nOntub3RlczpbIm5vdGUtd29yay03Il0sdGFnczpbXX19LHt1dWlkOiJwZXJzb24tYWxleC1raW0iLG5hbWU6IkFsZXggS2ltIixhdmF0YXI6e3RleHQ6IkFLIn0sYWN0aXZlOlNlKDIwMCksc2hhcmluZzp7bm90ZXM6WyJub3RlLXdvcmstMTAiXSx0YWdzOltdfX0se3V1aWQ6InBlcnNvbi10YXlsb3ItYnJvb2tzIixuYW1lOiJUYXlsb3IgQnJvb2tzIixhdmF0YXI6e3RleHQ6IlRCIn0sYWN0aXZlOlNlKDQ0MDApLHNoYXJpbmc6e25vdGVzOlsibm90ZS13b3JrLTE0Il0sdGFnczpbXX19LHt1dWlkOiJwZXJzb24tZGFuYS1jb2xlIixuYW1lOiJEYW5hIENvbGUiLGF2YXRhcjp7aW1hZ2U6Imh0dHBzOi8vaS5wcmF2YXRhci5jYy84MD91PWRhbmEtY29sZSJ9LGFjdGl2ZTpTZSg2MCksc2hhcmluZzp7bm90ZXM6WyJub3RlLXBlcnNvbmFsLTEiXSx0YWdzOlsicGVyc29uYWwiXX19LHt1dWlkOiJwZXJzb24tcm9iaW4tZm94IixuYW1lOiJSb2JpbiBGb3giLGF2YXRhcjp7dGV4dDoiUkYifSxhY3RpdmU6U2UoNDAwKSxzaGFyaW5nOntub3RlczpbIm5vdGUtcGVyc29uYWwtOSJdLHRhZ3M6W119fSx7dXVpZDoicGVyc29uLWphbWllLXBhcmsiLG5hbWU6IkphbWllIFBhcmsiLGF2YXRhcjp7aW1hZ2U6Imh0dHBzOi8vaS5wcmF2YXRhci5jYy84MD91PWphbWllLXBhcmsifSxhY3RpdmU6U2UoNDIwKSxzaGFyaW5nOntub3RlczpbIm5vdGUtcGVyc29uYWwtOSJdLHRhZ3M6W119fSx7dXVpZDoicGVyc29uLW1vcmdhbi1lbGxpcyIsbmFtZToiTW9yZ2FuIEVsbGlzIixhdmF0YXI6e3RleHQ6Ik1FIn0sYWN0aXZlOlNlKDUwKSxzaGFyaW5nOntub3RlczpbIm5vdGUtc2lkZS0yIl0sdGFnczpbInNpZGUtcHJvamVjdHMiXX19XSxsVD17c2hhcmVkOmU9PiEhZT8uc2hhcmVkLHRhc2tMaXN0czplPT5lPy5oYXNUYXNrcyE9PSExfTtmdW5jdGlvbiBnZihlLHQpe3JldHVybiB0P1N0cmluZyh0KS5zcGxpdCgiLCIpLm1hcChyPT5yLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pLmV2ZXJ5KHI9PntsZXQgbz1sVFtyXTtyZXR1cm4gbz9vKGUpOiEwfSk6ITB9ZnVuY3Rpb24gV2IoZSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC5hc3luY0l0ZXJhdG9yLHt2YWx1ZTpmdW5jdGlvbigpe2xldCB0PTA7cmV0dXJue25leHQ6KCk9PnQ8ZS5sZW5ndGg/UHJvbWlzZS5yZXNvbHZlKHt2YWx1ZTplW3QrK10sZG9uZTohMX0pOlByb21pc2UucmVzb2x2ZSh7ZG9uZTohMH0pfX19KSxlfXZhciBzdD0idG9wIix3dD0iYm90dG9tIixodD0icmlnaHQiLHB0PSJsZWZ0IixVZD0iYXV0byIsRW89W3N0LHd0LGh0LHB0XSxLcj0ic3RhcnQiLCRvPSJlbmQiLEJiPSJjbGlwcGluZ1BhcmVudHMiLEZkPSJ2aWV3cG9ydCIsWGE9InBvcHBlciIsSGI9InJlZmVyZW5jZSIseWY9RW8ucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29uY2F0KFt0KyItIitLcix0KyItIiskb10pfSxbXSksemQ9W10uY29uY2F0KEVvLFtVZF0pLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbmNhdChbdCx0KyItIitLcix0KyItIiskb10pfSxbXSksZFQ9ImJlZm9yZVJlYWQiLGNUPSJyZWFkIix1VD0iYWZ0ZXJSZWFkIixwVD0iYmVmb3JlTWFpbiIsZlQ9Im1haW4iLG1UPSJhZnRlck1haW4iLGhUPSJiZWZvcmVXcml0ZSIsZ1Q9IndyaXRlIix5VD0iYWZ0ZXJXcml0ZSIsS2I9W2RULGNULHVULHBULGZULG1ULGhULGdULHlUXTtmdW5jdGlvbiBBdChlKXtyZXR1cm4gZT8oZS5ub2RlTmFtZXx8IiIpLnRvTG93ZXJDYXNlKCk6bnVsbH1mdW5jdGlvbiBaZShlKXtpZihlPT1udWxsKXJldHVybiB3aW5kb3c7aWYoZS50b1N0cmluZygpIT09IltvYmplY3QgV2luZG93XSIpe3ZhciB0PWUub3duZXJEb2N1bWVudDtyZXR1cm4gdCYmdC5kZWZhdWx0Vmlld3x8d2luZG93fXJldHVybiBlfWZ1bmN0aW9uIFJuKGUpe3ZhciB0PVplKGUpLkVsZW1lbnQ7cmV0dXJuIGUgaW5zdGFuY2VvZiB0fHxlIGluc3RhbmNlb2YgRWxlbWVudH1mdW5jdGlvbiBrdChlKXt2YXIgdD1aZShlKS5IVE1MRWxlbWVudDtyZXR1cm4gZSBpbnN0YW5jZW9mIHR8fGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH1mdW5jdGlvbiAkYShlKXtpZih0eXBlb2YgU2hhZG93Um9vdD4idSIpcmV0dXJuITE7dmFyIHQ9WmUoZSkuU2hhZG93Um9vdDtyZXR1cm4gZSBpbnN0YW5jZW9mIHR8fGUgaW5zdGFuY2VvZiBTaGFkb3dSb290fWZ1bmN0aW9uIHZUKGUpe3ZhciB0PWUuc3RhdGU7T2JqZWN0LmtleXModC5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj10LnN0eWxlc1tuXXx8e30sbz10LmF0dHJpYnV0ZXNbbl18fHt9LGE9dC5lbGVtZW50c1tuXTsha3QoYSl8fCFBdChhKXx8KE9iamVjdC5hc3NpZ24oYS5zdHlsZSxyKSxPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBzPW9baV07cz09PSExP2EucmVtb3ZlQXR0cmlidXRlKGkpOmEuc2V0QXR0cmlidXRlKGkscz09PSEwPyIiOnMpfSkpfSl9ZnVuY3Rpb24gYlQoZSl7dmFyIHQ9ZS5zdGF0ZSxuPXtwb3BwZXI6e3Bvc2l0aW9uOnQub3B0aW9ucy5zdHJhdGVneSxsZWZ0OiIwIix0b3A6IjAiLG1hcmdpbjoiMCJ9LGFycm93Ontwb3NpdGlvbjoiYWJzb2x1dGUifSxyZWZlcmVuY2U6e319O3JldHVybiBPYmplY3QuYXNzaWduKHQuZWxlbWVudHMucG9wcGVyLnN0eWxlLG4ucG9wcGVyKSx0LnN0eWxlcz1uLHQuZWxlbWVudHMuYXJyb3cmJk9iamVjdC5hc3NpZ24odC5lbGVtZW50cy5hcnJvdy5zdHlsZSxuLmFycm93KSxmdW5jdGlvbigpe09iamVjdC5rZXlzKHQuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIG89dC5lbGVtZW50c1tyXSxhPXQuYXR0cmlidXRlc1tyXXx8e30saT1PYmplY3Qua2V5cyh0LnN0eWxlcy5oYXNPd25Qcm9wZXJ0eShyKT90LnN0eWxlc1tyXTpuW3JdKSxzPWkucmVkdWNlKGZ1bmN0aW9uKGwsZCl7cmV0dXJuIGxbZF09IiIsbH0se30pOyFrdChvKXx8IUF0KG8pfHwoT2JqZWN0LmFzc2lnbihvLnN0eWxlLHMpLE9iamVjdC5rZXlzKGEpLmZvckVhY2goZnVuY3Rpb24obCl7by5yZW1vdmVBdHRyaWJ1dGUobCl9KSl9KX19dmFyIG1zPXtuYW1lOiJhcHBseVN0eWxlcyIsZW5hYmxlZDohMCxwaGFzZToid3JpdGUiLGZuOnZULGVmZmVjdDpiVCxyZXF1aXJlczpbImNvbXB1dGVTdHlsZXMiXX07ZnVuY3Rpb24gQ3QoZSl7cmV0dXJuIGUuc3BsaXQoIi0iKVswXX12YXIgWm49TWF0aC5tYXgsSm89TWF0aC5taW4sR3I9TWF0aC5yb3VuZDtmdW5jdGlvbiBKYSgpe3ZhciBlPW5hdmlnYXRvci51c2VyQWdlbnREYXRhO3JldHVybiBlIT1udWxsJiZlLmJyYW5kcyYmQXJyYXkuaXNBcnJheShlLmJyYW5kcyk/ZS5icmFuZHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJyYW5kKyIvIit0LnZlcnNpb259KS5qb2luKCIgIik6bmF2aWdhdG9yLnVzZXJBZ2VudH1mdW5jdGlvbiBocygpe3JldHVybiEvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KEphKCkpfWZ1bmN0aW9uIFBuKGUsdCxuKXt0PT09dm9pZCAwJiYodD0hMSksbj09PXZvaWQgMCYmKG49ITEpO3ZhciByPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz0xLGE9MTt0JiZrdChlKSYmKG89ZS5vZmZzZXRXaWR0aD4wJiZHcihyLndpZHRoKS9lLm9mZnNldFdpZHRofHwxLGE9ZS5vZmZzZXRIZWlnaHQ+MCYmR3Ioci5oZWlnaHQpL2Uub2Zmc2V0SGVpZ2h0fHwxKTt2YXIgaT1SbihlKT9aZShlKTp3aW5kb3cscz1pLnZpc3VhbFZpZXdwb3J0LGw9IWhzKCkmJm4sZD0oci5sZWZ0KyhsJiZzP3Mub2Zmc2V0TGVmdDowKSkvbyxjPShyLnRvcCsobCYmcz9zLm9mZnNldFRvcDowKSkvYSx1PXIud2lkdGgvbyxwPXIuaGVpZ2h0L2E7cmV0dXJue3dpZHRoOnUsaGVpZ2h0OnAsdG9wOmMscmlnaHQ6ZCt1LGJvdHRvbTpjK3AsbGVmdDpkLHg6ZCx5OmN9fWZ1bmN0aW9uIFFvKGUpe3ZhciB0PVBuKGUpLG49ZS5vZmZzZXRXaWR0aCxyPWUub2Zmc2V0SGVpZ2h0O3JldHVybiBNYXRoLmFicyh0LndpZHRoLW4pPD0xJiYobj10LndpZHRoKSxNYXRoLmFicyh0LmhlaWdodC1yKTw9MSYmKHI9dC5oZWlnaHQpLHt4OmUub2Zmc2V0TGVmdCx5OmUub2Zmc2V0VG9wLHdpZHRoOm4saGVpZ2h0OnJ9fWZ1bmN0aW9uIGdzKGUsdCl7dmFyIG49dC5nZXRSb290Tm9kZSYmdC5nZXRSb290Tm9kZSgpO2lmKGUuY29udGFpbnModCkpcmV0dXJuITA7aWYobiYmJGEobikpe3ZhciByPXQ7ZG97aWYociYmZS5pc1NhbWVOb2RlKHIpKXJldHVybiEwO3I9ci5wYXJlbnROb2RlfHxyLmhvc3R9d2hpbGUocil9cmV0dXJuITF9ZnVuY3Rpb24gSnQoZSl7cmV0dXJuIFplKGUpLmdldENvbXB1dGVkU3R5bGUoZSl9ZnVuY3Rpb24gdmYoZSl7cmV0dXJuWyJ0YWJsZSIsInRkIiwidGgiXS5pbmRleE9mKEF0KGUpKT49MH1mdW5jdGlvbiBQdChlKXtyZXR1cm4oKFJuKGUpP2Uub3duZXJEb2N1bWVudDplLmRvY3VtZW50KXx8d2luZG93LmRvY3VtZW50KS5kb2N1bWVudEVsZW1lbnR9ZnVuY3Rpb24gVnIoZSl7cmV0dXJuIEF0KGUpPT09Imh0bWwiP2U6ZS5hc3NpZ25lZFNsb3R8fGUucGFyZW50Tm9kZXx8KCRhKGUpP2UuaG9zdDpudWxsKXx8UHQoZSl9ZnVuY3Rpb24gR2IoZSl7cmV0dXJuIWt0KGUpfHxKdChlKS5wb3NpdGlvbj09PSJmaXhlZCI/bnVsbDplLm9mZnNldFBhcmVudH1mdW5jdGlvbiB3VChlKXt2YXIgdD0vZmlyZWZveC9pLnRlc3QoSmEoKSksbj0vVHJpZGVudC9pLnRlc3QoSmEoKSk7aWYobiYma3QoZSkpe3ZhciByPUp0KGUpO2lmKHIucG9zaXRpb249PT0iZml4ZWQiKXJldHVybiBudWxsfXZhciBvPVZyKGUpO2ZvcigkYShvKSYmKG89by5ob3N0KTtrdChvKSYmWyJodG1sIiwiYm9keSJdLmluZGV4T2YoQXQobykpPDA7KXt2YXIgYT1KdChvKTtpZihhLnRyYW5zZm9ybSE9PSJub25lInx8YS5wZXJzcGVjdGl2ZSE9PSJub25lInx8YS5jb250YWluPT09InBhaW50Inx8WyJ0cmFuc2Zvcm0iLCJwZXJzcGVjdGl2ZSJdLmluZGV4T2YoYS53aWxsQ2hhbmdlKSE9PS0xfHx0JiZhLndpbGxDaGFuZ2U9PT0iZmlsdGVyInx8dCYmYS5maWx0ZXImJmEuZmlsdGVyIT09Im5vbmUiKXJldHVybiBvO289by5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIGVyKGUpe2Zvcih2YXIgdD1aZShlKSxuPUdiKGUpO24mJnZmKG4pJiZKdChuKS5wb3NpdGlvbj09PSJzdGF0aWMiOyluPUdiKG4pO3JldHVybiBuJiYoQXQobik9PT0iaHRtbCJ8fEF0KG4pPT09ImJvZHkiJiZKdChuKS5wb3NpdGlvbj09PSJzdGF0aWMiKT90Om58fHdUKGUpfHx0fWZ1bmN0aW9uIFpvKGUpe3JldHVyblsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihlKT49MD8ieCI6InkifWZ1bmN0aW9uIGVhKGUsdCxuKXtyZXR1cm4gWm4oZSxKbyh0LG4pKX1mdW5jdGlvbiBWYihlLHQsbil7dmFyIHI9ZWEoZSx0LG4pO3JldHVybiByPm4/bjpyfWZ1bmN0aW9uIHlzKCl7cmV0dXJue3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfX1mdW5jdGlvbiB2cyhlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSx5cygpLGUpfWZ1bmN0aW9uIGJzKGUsdCl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKG4scil7cmV0dXJuIG5bcl09ZSxufSx7fSl9dmFyIGtUPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ9dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChPYmplY3QuYXNzaWduKHt9LG4ucmVjdHMse3BsYWNlbWVudDpuLnBsYWNlbWVudH0pKTp0LHZzKHR5cGVvZiB0IT0ibnVtYmVyIj90OmJzKHQsRW8pKX07ZnVuY3Rpb24geFQoZSl7dmFyIHQsbj1lLnN0YXRlLHI9ZS5uYW1lLG89ZS5vcHRpb25zLGE9bi5lbGVtZW50cy5hcnJvdyxpPW4ubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLHM9Q3Qobi5wbGFjZW1lbnQpLGw9Wm8ocyksZD1bcHQsaHRdLmluZGV4T2Yocyk+PTAsYz1kPyJoZWlnaHQiOiJ3aWR0aCI7aWYoISghYXx8IWkpKXt2YXIgdT1rVChvLnBhZGRpbmcsbikscD1RbyhhKSxmPWw9PT0ieSI/c3Q6cHQseT1sPT09InkiP3d0Omh0LHY9bi5yZWN0cy5yZWZlcmVuY2VbY10rbi5yZWN0cy5yZWZlcmVuY2VbbF0taVtsXS1uLnJlY3RzLnBvcHBlcltjXSx3PWlbbF0tbi5yZWN0cy5yZWZlcmVuY2VbbF0sZz1lcihhKSxoPWc/bD09PSJ5Ij9nLmNsaWVudEhlaWdodHx8MDpnLmNsaWVudFdpZHRofHwwOjAsYj12LzItdy8yLG09dVtmXSxTPWgtcFtjXS11W3ldLHg9aC8yLXBbY10vMitiLEU9ZWEobSx4LFMpLFQ9bDtuLm1vZGlmaWVyc0RhdGFbcl09KHQ9e30sdFtUXT1FLHQuY2VudGVyT2Zmc2V0PUUteCx0KX19ZnVuY3Rpb24gU1QoZSl7dmFyIHQ9ZS5zdGF0ZSxuPWUub3B0aW9ucyxyPW4uZWxlbWVudCxvPXI9PT12b2lkIDA/IltkYXRhLXBvcHBlci1hcnJvd10iOnI7byE9bnVsbCYmKHR5cGVvZiBvPT0ic3RyaW5nIiYmKG89dC5lbGVtZW50cy5wb3BwZXIucXVlcnlTZWxlY3RvcihvKSwhbyl8fGdzKHQuZWxlbWVudHMucG9wcGVyLG8pJiYodC5lbGVtZW50cy5hcnJvdz1vKSl9dmFyIGpiPXtuYW1lOiJhcnJvdyIsZW5hYmxlZDohMCxwaGFzZToibWFpbiIsZm46eFQsZWZmZWN0OlNULHJlcXVpcmVzOlsicG9wcGVyT2Zmc2V0cyJdLHJlcXVpcmVzSWZFeGlzdHM6WyJwcmV2ZW50T3ZlcmZsb3ciXX07ZnVuY3Rpb24gTG4oZSl7cmV0dXJuIGUuc3BsaXQoIi0iKVsxXX12YXIgRVQ9e3RvcDoiYXV0byIscmlnaHQ6ImF1dG8iLGJvdHRvbToiYXV0byIsbGVmdDoiYXV0byJ9O2Z1bmN0aW9uIE5UKGUsdCl7dmFyIG49ZS54LHI9ZS55LG89dC5kZXZpY2VQaXhlbFJhdGlvfHwxO3JldHVybnt4OkdyKG4qbykvb3x8MCx5OkdyKHIqbykvb3x8MH19ZnVuY3Rpb24gWWIoZSl7dmFyIHQsbj1lLnBvcHBlcixyPWUucG9wcGVyUmVjdCxvPWUucGxhY2VtZW50LGE9ZS52YXJpYXRpb24saT1lLm9mZnNldHMscz1lLnBvc2l0aW9uLGw9ZS5ncHVBY2NlbGVyYXRpb24sZD1lLmFkYXB0aXZlLGM9ZS5yb3VuZE9mZnNldHMsdT1lLmlzRml4ZWQscD1pLngsZj1wPT09dm9pZCAwPzA6cCx5PWkueSx2PXk9PT12b2lkIDA/MDp5LHc9dHlwZW9mIGM9PSJmdW5jdGlvbiI/Yyh7eDpmLHk6dn0pOnt4OmYseTp2fTtmPXcueCx2PXcueTt2YXIgZz1pLmhhc093blByb3BlcnR5KCJ4IiksaD1pLmhhc093blByb3BlcnR5KCJ5IiksYj1wdCxtPXN0LFM9d2luZG93O2lmKGQpe3ZhciB4PWVyKG4pLEU9ImNsaWVudEhlaWdodCIsVD0iY2xpZW50V2lkdGgiO2lmKHg9PT1aZShuKSYmKHg9UHQobiksSnQoeCkucG9zaXRpb24hPT0ic3RhdGljIiYmcz09PSJhYnNvbHV0ZSImJihFPSJzY3JvbGxIZWlnaHQiLFQ9InNjcm9sbFdpZHRoIikpLHg9eCxvPT09c3R8fChvPT09cHR8fG89PT1odCkmJmE9PT0kbyl7bT13dDt2YXIgQT11JiZ4PT09UyYmUy52aXN1YWxWaWV3cG9ydD9TLnZpc3VhbFZpZXdwb3J0LmhlaWdodDp4W0VdO3YtPUEtci5oZWlnaHQsdio9bD8xOi0xfWlmKG89PT1wdHx8KG89PT1zdHx8bz09PXd0KSYmYT09PSRvKXtiPWh0O3ZhciBDPXUmJng9PT1TJiZTLnZpc3VhbFZpZXdwb3J0P1MudmlzdWFsVmlld3BvcnQud2lkdGg6eFtUXTtmLT1DLXIud2lkdGgsZio9bD8xOi0xfX12YXIgTD1PYmplY3QuYXNzaWduKHtwb3NpdGlvbjpzfSxkJiZFVCksTz1jPT09ITA/TlQoe3g6Zix5OnZ9LFplKG4pKTp7eDpmLHk6dn07aWYoZj1PLngsdj1PLnksbCl7dmFyIFI7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sTCwoUj17fSxSW21dPWg/IjAiOiIiLFJbYl09Zz8iMCI6IiIsUi50cmFuc2Zvcm09KFMuZGV2aWNlUGl4ZWxSYXRpb3x8MSk8PTE/InRyYW5zbGF0ZSgiK2YrInB4LCAiK3YrInB4KSI6InRyYW5zbGF0ZTNkKCIrZisicHgsICIrdisicHgsIDApIixSKSl9cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sTCwodD17fSx0W21dPWg/disicHgiOiIiLHRbYl09Zz9mKyJweCI6IiIsdC50cmFuc2Zvcm09IiIsdCkpfWZ1bmN0aW9uIFRUKGUpe3ZhciB0PWUuc3RhdGUsbj1lLm9wdGlvbnMscj1uLmdwdUFjY2VsZXJhdGlvbixvPXI9PT12b2lkIDA/ITA6cixhPW4uYWRhcHRpdmUsaT1hPT09dm9pZCAwPyEwOmEscz1uLnJvdW5kT2Zmc2V0cyxsPXM9PT12b2lkIDA/ITA6cyxkPXtwbGFjZW1lbnQ6Q3QodC5wbGFjZW1lbnQpLHZhcmlhdGlvbjpMbih0LnBsYWNlbWVudCkscG9wcGVyOnQuZWxlbWVudHMucG9wcGVyLHBvcHBlclJlY3Q6dC5yZWN0cy5wb3BwZXIsZ3B1QWNjZWxlcmF0aW9uOm8saXNGaXhlZDp0Lm9wdGlvbnMuc3RyYXRlZ3k9PT0iZml4ZWQifTt0Lm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyE9bnVsbCYmKHQuc3R5bGVzLnBvcHBlcj1PYmplY3QuYXNzaWduKHt9LHQuc3R5bGVzLnBvcHBlcixZYihPYmplY3QuYXNzaWduKHt9LGQse29mZnNldHM6dC5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMscG9zaXRpb246dC5vcHRpb25zLnN0cmF0ZWd5LGFkYXB0aXZlOmkscm91bmRPZmZzZXRzOmx9KSkpKSx0Lm1vZGlmaWVyc0RhdGEuYXJyb3chPW51bGwmJih0LnN0eWxlcy5hcnJvdz1PYmplY3QuYXNzaWduKHt9LHQuc3R5bGVzLmFycm93LFliKE9iamVjdC5hc3NpZ24oe30sZCx7b2Zmc2V0czp0Lm1vZGlmaWVyc0RhdGEuYXJyb3cscG9zaXRpb246ImFic29sdXRlIixhZGFwdGl2ZTohMSxyb3VuZE9mZnNldHM6bH0pKSkpLHQuYXR0cmlidXRlcy5wb3BwZXI9T2JqZWN0LmFzc2lnbih7fSx0LmF0dHJpYnV0ZXMucG9wcGVyLHsiZGF0YS1wb3BwZXItcGxhY2VtZW50Ijp0LnBsYWNlbWVudH0pfXZhciBxYj17bmFtZToiY29tcHV0ZVN0eWxlcyIsZW5hYmxlZDohMCxwaGFzZToiYmVmb3JlV3JpdGUiLGZuOlRULGRhdGE6e319O3ZhciBXZD17cGFzc2l2ZTohMH07ZnVuY3Rpb24gRFQoZSl7dmFyIHQ9ZS5zdGF0ZSxuPWUuaW5zdGFuY2Uscj1lLm9wdGlvbnMsbz1yLnNjcm9sbCxhPW89PT12b2lkIDA/ITA6byxpPXIucmVzaXplLHM9aT09PXZvaWQgMD8hMDppLGw9WmUodC5lbGVtZW50cy5wb3BwZXIpLGQ9W10uY29uY2F0KHQuc2Nyb2xsUGFyZW50cy5yZWZlcmVuY2UsdC5zY3JvbGxQYXJlbnRzLnBvcHBlcik7cmV0dXJuIGEmJmQuZm9yRWFjaChmdW5jdGlvbihjKXtjLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsbi51cGRhdGUsV2QpfSkscyYmbC5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLG4udXBkYXRlLFdkKSxmdW5jdGlvbigpe2EmJmQuZm9yRWFjaChmdW5jdGlvbihjKXtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsbi51cGRhdGUsV2QpfSkscyYmbC5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLG4udXBkYXRlLFdkKX19dmFyIFhiPXtuYW1lOiJldmVudExpc3RlbmVycyIsZW5hYmxlZDohMCxwaGFzZToid3JpdGUiLGZuOmZ1bmN0aW9uKCl7fSxlZmZlY3Q6RFQsZGF0YTp7fX07dmFyIEFUPXtsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLGJvdHRvbToidG9wIix0b3A6ImJvdHRvbSJ9O2Z1bmN0aW9uIFFhKGUpe3JldHVybiBlLnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLGZ1bmN0aW9uKHQpe3JldHVybiBBVFt0XX0pfXZhciBDVD17c3RhcnQ6ImVuZCIsZW5kOiJzdGFydCJ9O2Z1bmN0aW9uIEJkKGUpe3JldHVybiBlLnJlcGxhY2UoL3N0YXJ0fGVuZC9nLGZ1bmN0aW9uKHQpe3JldHVybiBDVFt0XX0pfWZ1bmN0aW9uIHRhKGUpe3ZhciB0PVplKGUpLG49dC5wYWdlWE9mZnNldCxyPXQucGFnZVlPZmZzZXQ7cmV0dXJue3Njcm9sbExlZnQ6bixzY3JvbGxUb3A6cn19ZnVuY3Rpb24gbmEoZSl7cmV0dXJuIFBuKFB0KGUpKS5sZWZ0K3RhKGUpLnNjcm9sbExlZnR9ZnVuY3Rpb24gYmYoZSx0KXt2YXIgbj1aZShlKSxyPVB0KGUpLG89bi52aXN1YWxWaWV3cG9ydCxhPXIuY2xpZW50V2lkdGgsaT1yLmNsaWVudEhlaWdodCxzPTAsbD0wO2lmKG8pe2E9by53aWR0aCxpPW8uaGVpZ2h0O3ZhciBkPWhzKCk7KGR8fCFkJiZ0PT09ImZpeGVkIikmJihzPW8ub2Zmc2V0TGVmdCxsPW8ub2Zmc2V0VG9wKX1yZXR1cm57d2lkdGg6YSxoZWlnaHQ6aSx4OnMrbmEoZSkseTpsfX1mdW5jdGlvbiB3ZihlKXt2YXIgdCxuPVB0KGUpLHI9dGEoZSksbz0odD1lLm93bmVyRG9jdW1lbnQpPT1udWxsP3ZvaWQgMDp0LmJvZHksYT1abihuLnNjcm9sbFdpZHRoLG4uY2xpZW50V2lkdGgsbz9vLnNjcm9sbFdpZHRoOjAsbz9vLmNsaWVudFdpZHRoOjApLGk9Wm4obi5zY3JvbGxIZWlnaHQsbi5jbGllbnRIZWlnaHQsbz9vLnNjcm9sbEhlaWdodDowLG8/by5jbGllbnRIZWlnaHQ6MCkscz0tci5zY3JvbGxMZWZ0K25hKGUpLGw9LXIuc2Nyb2xsVG9wO3JldHVybiBKdChvfHxuKS5kaXJlY3Rpb249PT0icnRsIiYmKHMrPVpuKG4uY2xpZW50V2lkdGgsbz9vLmNsaWVudFdpZHRoOjApLWEpLHt3aWR0aDphLGhlaWdodDppLHg6cyx5Omx9fWZ1bmN0aW9uIHJhKGUpe3ZhciB0PUp0KGUpLG49dC5vdmVyZmxvdyxyPXQub3ZlcmZsb3dYLG89dC5vdmVyZmxvd1k7cmV0dXJuL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVuLy50ZXN0KG4rbytyKX1mdW5jdGlvbiBIZChlKXtyZXR1cm5bImh0bWwiLCJib2R5IiwiI2RvY3VtZW50Il0uaW5kZXhPZihBdChlKSk+PTA/ZS5vd25lckRvY3VtZW50LmJvZHk6a3QoZSkmJnJhKGUpP2U6SGQoVnIoZSkpfWZ1bmN0aW9uIE5vKGUsdCl7dmFyIG47dD09PXZvaWQgMCYmKHQ9W10pO3ZhciByPUhkKGUpLG89cj09PSgobj1lLm93bmVyRG9jdW1lbnQpPT1udWxsP3ZvaWQgMDpuLmJvZHkpLGE9WmUociksaT1vP1thXS5jb25jYXQoYS52aXN1YWxWaWV3cG9ydHx8W10scmEocik/cjpbXSk6cixzPXQuY29uY2F0KGkpO3JldHVybiBvP3M6cy5jb25jYXQoTm8oVnIoaSkpKX1mdW5jdGlvbiBaYShlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxlLHtsZWZ0OmUueCx0b3A6ZS55LHJpZ2h0OmUueCtlLndpZHRoLGJvdHRvbTplLnkrZS5oZWlnaHR9KX1mdW5jdGlvbiBNVChlLHQpe3ZhciBuPVBuKGUsITEsdD09PSJmaXhlZCIpO3JldHVybiBuLnRvcD1uLnRvcCtlLmNsaWVudFRvcCxuLmxlZnQ9bi5sZWZ0K2UuY2xpZW50TGVmdCxuLmJvdHRvbT1uLnRvcCtlLmNsaWVudEhlaWdodCxuLnJpZ2h0PW4ubGVmdCtlLmNsaWVudFdpZHRoLG4ud2lkdGg9ZS5jbGllbnRXaWR0aCxuLmhlaWdodD1lLmNsaWVudEhlaWdodCxuLng9bi5sZWZ0LG4ueT1uLnRvcCxufWZ1bmN0aW9uICRiKGUsdCxuKXtyZXR1cm4gdD09PUZkP1phKGJmKGUsbikpOlJuKHQpP01UKHQsbik6WmEod2YoUHQoZSkpKX1mdW5jdGlvbiBPVChlKXt2YXIgdD1ObyhWcihlKSksbj1bImFic29sdXRlIiwiZml4ZWQiXS5pbmRleE9mKEp0KGUpLnBvc2l0aW9uKT49MCxyPW4mJmt0KGUpP2VyKGUpOmU7cmV0dXJuIFJuKHIpP3QuZmlsdGVyKGZ1bmN0aW9uKG8pe3JldHVybiBSbihvKSYmZ3MobyxyKSYmQXQobykhPT0iYm9keSJ9KTpbXX1mdW5jdGlvbiBrZihlLHQsbixyKXt2YXIgbz10PT09ImNsaXBwaW5nUGFyZW50cyI/T1QoZSk6W10uY29uY2F0KHQpLGE9W10uY29uY2F0KG8sW25dKSxpPWFbMF0scz1hLnJlZHVjZShmdW5jdGlvbihsLGQpe3ZhciBjPSRiKGUsZCxyKTtyZXR1cm4gbC50b3A9Wm4oYy50b3AsbC50b3ApLGwucmlnaHQ9Sm8oYy5yaWdodCxsLnJpZ2h0KSxsLmJvdHRvbT1KbyhjLmJvdHRvbSxsLmJvdHRvbSksbC5sZWZ0PVpuKGMubGVmdCxsLmxlZnQpLGx9LCRiKGUsaSxyKSk7cmV0dXJuIHMud2lkdGg9cy5yaWdodC1zLmxlZnQscy5oZWlnaHQ9cy5ib3R0b20tcy50b3Ascy54PXMubGVmdCxzLnk9cy50b3Asc31mdW5jdGlvbiB3cyhlKXt2YXIgdD1lLnJlZmVyZW5jZSxuPWUuZWxlbWVudCxyPWUucGxhY2VtZW50LG89cj9DdChyKTpudWxsLGE9cj9MbihyKTpudWxsLGk9dC54K3Qud2lkdGgvMi1uLndpZHRoLzIscz10LnkrdC5oZWlnaHQvMi1uLmhlaWdodC8yLGw7c3dpdGNoKG8pe2Nhc2Ugc3Q6bD17eDppLHk6dC55LW4uaGVpZ2h0fTticmVhaztjYXNlIHd0Omw9e3g6aSx5OnQueSt0LmhlaWdodH07YnJlYWs7Y2FzZSBodDpsPXt4OnQueCt0LndpZHRoLHk6c307YnJlYWs7Y2FzZSBwdDpsPXt4OnQueC1uLndpZHRoLHk6c307YnJlYWs7ZGVmYXVsdDpsPXt4OnQueCx5OnQueX19dmFyIGQ9bz9abyhvKTpudWxsO2lmKGQhPW51bGwpe3ZhciBjPWQ9PT0ieSI/ImhlaWdodCI6IndpZHRoIjtzd2l0Y2goYSl7Y2FzZSBLcjpsW2RdPWxbZF0tKHRbY10vMi1uW2NdLzIpO2JyZWFrO2Nhc2UgJG86bFtkXT1sW2RdKyh0W2NdLzItbltjXS8yKTticmVhaztkZWZhdWx0On19cmV0dXJuIGx9ZnVuY3Rpb24gdHIoZSx0KXt0PT09dm9pZCAwJiYodD17fSk7dmFyIG49dCxyPW4ucGxhY2VtZW50LG89cj09PXZvaWQgMD9lLnBsYWNlbWVudDpyLGE9bi5zdHJhdGVneSxpPWE9PT12b2lkIDA/ZS5zdHJhdGVneTphLHM9bi5ib3VuZGFyeSxsPXM9PT12b2lkIDA/QmI6cyxkPW4ucm9vdEJvdW5kYXJ5LGM9ZD09PXZvaWQgMD9GZDpkLHU9bi5lbGVtZW50Q29udGV4dCxwPXU9PT12b2lkIDA/WGE6dSxmPW4uYWx0Qm91bmRhcnkseT1mPT09dm9pZCAwPyExOmYsdj1uLnBhZGRpbmcsdz12PT09dm9pZCAwPzA6dixnPXZzKHR5cGVvZiB3IT0ibnVtYmVyIj93OmJzKHcsRW8pKSxoPXA9PT1YYT9IYjpYYSxiPWUucmVjdHMucG9wcGVyLG09ZS5lbGVtZW50c1t5P2g6cF0sUz1rZihSbihtKT9tOm0uY29udGV4dEVsZW1lbnR8fFB0KGUuZWxlbWVudHMucG9wcGVyKSxsLGMsaSkseD1QbihlLmVsZW1lbnRzLnJlZmVyZW5jZSksRT13cyh7cmVmZXJlbmNlOngsZWxlbWVudDpiLHN0cmF0ZWd5OiJhYnNvbHV0ZSIscGxhY2VtZW50Om99KSxUPVphKE9iamVjdC5hc3NpZ24oe30sYixFKSksQT1wPT09WGE/VDp4LEM9e3RvcDpTLnRvcC1BLnRvcCtnLnRvcCxib3R0b206QS5ib3R0b20tUy5ib3R0b20rZy5ib3R0b20sbGVmdDpTLmxlZnQtQS5sZWZ0K2cubGVmdCxyaWdodDpBLnJpZ2h0LVMucmlnaHQrZy5yaWdodH0sTD1lLm1vZGlmaWVyc0RhdGEub2Zmc2V0O2lmKHA9PT1YYSYmTCl7dmFyIE89TFtvXTtPYmplY3Qua2V5cyhDKS5mb3JFYWNoKGZ1bmN0aW9uKFIpe3ZhciBGPVtodCx3dF0uaW5kZXhPZihSKT49MD8xOi0xLFY9W3N0LHd0XS5pbmRleE9mKFIpPj0wPyJ5IjoieCI7Q1tSXSs9T1tWXSpGfSl9cmV0dXJuIEN9ZnVuY3Rpb24geGYoZSx0KXt0PT09dm9pZCAwJiYodD17fSk7dmFyIG49dCxyPW4ucGxhY2VtZW50LG89bi5ib3VuZGFyeSxhPW4ucm9vdEJvdW5kYXJ5LGk9bi5wYWRkaW5nLHM9bi5mbGlwVmFyaWF0aW9ucyxsPW4uYWxsb3dlZEF1dG9QbGFjZW1lbnRzLGQ9bD09PXZvaWQgMD96ZDpsLGM9TG4ociksdT1jP3M/eWY6eWYuZmlsdGVyKGZ1bmN0aW9uKHkpe3JldHVybiBMbih5KT09PWN9KTpFbyxwPXUuZmlsdGVyKGZ1bmN0aW9uKHkpe3JldHVybiBkLmluZGV4T2YoeSk+PTB9KTtwLmxlbmd0aD09PTAmJihwPXUpO3ZhciBmPXAucmVkdWNlKGZ1bmN0aW9uKHksdil7cmV0dXJuIHlbdl09dHIoZSx7cGxhY2VtZW50OnYsYm91bmRhcnk6byxyb290Qm91bmRhcnk6YSxwYWRkaW5nOml9KVtDdCh2KV0seX0se30pO3JldHVybiBPYmplY3Qua2V5cyhmKS5zb3J0KGZ1bmN0aW9uKHksdil7cmV0dXJuIGZbeV0tZlt2XX0pfWZ1bmN0aW9uIElUKGUpe2lmKEN0KGUpPT09VWQpcmV0dXJuW107dmFyIHQ9UWEoZSk7cmV0dXJuW0JkKGUpLHQsQmQodCldfWZ1bmN0aW9uIFJUKGUpe3ZhciB0PWUuc3RhdGUsbj1lLm9wdGlvbnMscj1lLm5hbWU7aWYoIXQubW9kaWZpZXJzRGF0YVtyXS5fc2tpcCl7Zm9yKHZhciBvPW4ubWFpbkF4aXMsYT1vPT09dm9pZCAwPyEwOm8saT1uLmFsdEF4aXMscz1pPT09dm9pZCAwPyEwOmksbD1uLmZhbGxiYWNrUGxhY2VtZW50cyxkPW4ucGFkZGluZyxjPW4uYm91bmRhcnksdT1uLnJvb3RCb3VuZGFyeSxwPW4uYWx0Qm91bmRhcnksZj1uLmZsaXBWYXJpYXRpb25zLHk9Zj09PXZvaWQgMD8hMDpmLHY9bi5hbGxvd2VkQXV0b1BsYWNlbWVudHMsdz10Lm9wdGlvbnMucGxhY2VtZW50LGc9Q3QodyksaD1nPT09dyxiPWx8fChofHwheT9bUWEodyldOklUKHcpKSxtPVt3XS5jb25jYXQoYikucmVkdWNlKGZ1bmN0aW9uKFksail7cmV0dXJuIFkuY29uY2F0KEN0KGopPT09VWQ/eGYodCx7cGxhY2VtZW50OmosYm91bmRhcnk6Yyxyb290Qm91bmRhcnk6dSxwYWRkaW5nOmQsZmxpcFZhcmlhdGlvbnM6eSxhbGxvd2VkQXV0b1BsYWNlbWVudHM6dn0pOmopfSxbXSksUz10LnJlY3RzLnJlZmVyZW5jZSx4PXQucmVjdHMucG9wcGVyLEU9bmV3IE1hcCxUPSEwLEE9bVswXSxDPTA7QzxtLmxlbmd0aDtDKyspe3ZhciBMPW1bQ10sTz1DdChMKSxSPUxuKEwpPT09S3IsRj1bc3Qsd3RdLmluZGV4T2YoTyk+PTAsVj1GPyJ3aWR0aCI6ImhlaWdodCIsej10cih0LHtwbGFjZW1lbnQ6TCxib3VuZGFyeTpjLHJvb3RCb3VuZGFyeTp1LGFsdEJvdW5kYXJ5OnAscGFkZGluZzpkfSksbmU9Rj9SP2h0OnB0OlI/d3Q6c3Q7U1tWXT54W1ZdJiYobmU9UWEobmUpKTt2YXIgTT1RYShuZSksVz1bXTtpZihhJiZXLnB1c2goeltPXTw9MCkscyYmVy5wdXNoKHpbbmVdPD0wLHpbTV08PTApLFcuZXZlcnkoZnVuY3Rpb24oWSl7cmV0dXJuIFl9KSl7QT1MLFQ9ITE7YnJlYWt9RS5zZXQoTCxXKX1pZihUKWZvcih2YXIgRD15PzM6MSxOPWZ1bmN0aW9uKGope3ZhciBlZT1tLmZpbmQoZnVuY3Rpb24ocSl7dmFyIHJlPUUuZ2V0KHEpO2lmKHJlKXJldHVybiByZS5zbGljZSgwLGopLmV2ZXJ5KGZ1bmN0aW9uKHllKXtyZXR1cm4geWV9KX0pO2lmKGVlKXJldHVybiBBPWVlLCJicmVhayJ9LF89RDtfPjA7Xy0tKXt2YXIgRz1OKF8pO2lmKEc9PT0iYnJlYWsiKWJyZWFrfXQucGxhY2VtZW50IT09QSYmKHQubW9kaWZpZXJzRGF0YVtyXS5fc2tpcD0hMCx0LnBsYWNlbWVudD1BLHQucmVzZXQ9ITApfX12YXIgSmI9e25hbWU6ImZsaXAiLGVuYWJsZWQ6ITAscGhhc2U6Im1haW4iLGZuOlJULHJlcXVpcmVzSWZFeGlzdHM6WyJvZmZzZXQiXSxkYXRhOntfc2tpcDohMX19O2Z1bmN0aW9uIFFiKGUsdCxuKXtyZXR1cm4gbj09PXZvaWQgMCYmKG49e3g6MCx5OjB9KSx7dG9wOmUudG9wLXQuaGVpZ2h0LW4ueSxyaWdodDplLnJpZ2h0LXQud2lkdGgrbi54LGJvdHRvbTplLmJvdHRvbS10LmhlaWdodCtuLnksbGVmdDplLmxlZnQtdC53aWR0aC1uLnh9fWZ1bmN0aW9uIFpiKGUpe3JldHVybltzdCxodCx3dCxwdF0uc29tZShmdW5jdGlvbih0KXtyZXR1cm4gZVt0XT49MH0pfWZ1bmN0aW9uIFBUKGUpe3ZhciB0PWUuc3RhdGUsbj1lLm5hbWUscj10LnJlY3RzLnJlZmVyZW5jZSxvPXQucmVjdHMucG9wcGVyLGE9dC5tb2RpZmllcnNEYXRhLnByZXZlbnRPdmVyZmxvdyxpPXRyKHQse2VsZW1lbnRDb250ZXh0OiJyZWZlcmVuY2UifSkscz10cih0LHthbHRCb3VuZGFyeTohMH0pLGw9UWIoaSxyKSxkPVFiKHMsbyxhKSxjPVpiKGwpLHU9WmIoZCk7dC5tb2RpZmllcnNEYXRhW25dPXtyZWZlcmVuY2VDbGlwcGluZ09mZnNldHM6bCxwb3BwZXJFc2NhcGVPZmZzZXRzOmQsaXNSZWZlcmVuY2VIaWRkZW46YyxoYXNQb3BwZXJFc2NhcGVkOnV9LHQuYXR0cmlidXRlcy5wb3BwZXI9T2JqZWN0LmFzc2lnbih7fSx0LmF0dHJpYnV0ZXMucG9wcGVyLHsiZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlbiI6YywiZGF0YS1wb3BwZXItZXNjYXBlZCI6dX0pfXZhciBldz17bmFtZToiaGlkZSIsZW5hYmxlZDohMCxwaGFzZToibWFpbiIscmVxdWlyZXNJZkV4aXN0czpbInByZXZlbnRPdmVyZmxvdyJdLGZuOlBUfTtmdW5jdGlvbiBMVChlLHQsbil7dmFyIHI9Q3QoZSksbz1bcHQsc3RdLmluZGV4T2Yocik+PTA/LTE6MSxhPXR5cGVvZiBuPT0iZnVuY3Rpb24iP24oT2JqZWN0LmFzc2lnbih7fSx0LHtwbGFjZW1lbnQ6ZX0pKTpuLGk9YVswXSxzPWFbMV07cmV0dXJuIGk9aXx8MCxzPShzfHwwKSpvLFtwdCxodF0uaW5kZXhPZihyKT49MD97eDpzLHk6aX06e3g6aSx5OnN9fWZ1bmN0aW9uIF9UKGUpe3ZhciB0PWUuc3RhdGUsbj1lLm9wdGlvbnMscj1lLm5hbWUsbz1uLm9mZnNldCxhPW89PT12b2lkIDA/WzAsMF06byxpPXpkLnJlZHVjZShmdW5jdGlvbihjLHUpe3JldHVybiBjW3VdPUxUKHUsdC5yZWN0cyxhKSxjfSx7fSkscz1pW3QucGxhY2VtZW50XSxsPXMueCxkPXMueTt0Lm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyE9bnVsbCYmKHQubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLngrPWwsdC5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSs9ZCksdC5tb2RpZmllcnNEYXRhW3JdPWl9dmFyIHR3PXtuYW1lOiJvZmZzZXQiLGVuYWJsZWQ6ITAscGhhc2U6Im1haW4iLHJlcXVpcmVzOlsicG9wcGVyT2Zmc2V0cyJdLGZuOl9UfTtmdW5jdGlvbiBVVChlKXt2YXIgdD1lLnN0YXRlLG49ZS5uYW1lO3QubW9kaWZpZXJzRGF0YVtuXT13cyh7cmVmZXJlbmNlOnQucmVjdHMucmVmZXJlbmNlLGVsZW1lbnQ6dC5yZWN0cy5wb3BwZXIsc3RyYXRlZ3k6ImFic29sdXRlIixwbGFjZW1lbnQ6dC5wbGFjZW1lbnR9KX12YXIgbnc9e25hbWU6InBvcHBlck9mZnNldHMiLGVuYWJsZWQ6ITAscGhhc2U6InJlYWQiLGZuOlVULGRhdGE6e319O2Z1bmN0aW9uIFNmKGUpe3JldHVybiBlPT09IngiPyJ5IjoieCJ9ZnVuY3Rpb24gRlQoZSl7dmFyIHQ9ZS5zdGF0ZSxuPWUub3B0aW9ucyxyPWUubmFtZSxvPW4ubWFpbkF4aXMsYT1vPT09dm9pZCAwPyEwOm8saT1uLmFsdEF4aXMscz1pPT09dm9pZCAwPyExOmksbD1uLmJvdW5kYXJ5LGQ9bi5yb290Qm91bmRhcnksYz1uLmFsdEJvdW5kYXJ5LHU9bi5wYWRkaW5nLHA9bi50ZXRoZXIsZj1wPT09dm9pZCAwPyEwOnAseT1uLnRldGhlck9mZnNldCx2PXk9PT12b2lkIDA/MDp5LHc9dHIodCx7Ym91bmRhcnk6bCxyb290Qm91bmRhcnk6ZCxwYWRkaW5nOnUsYWx0Qm91bmRhcnk6Y30pLGc9Q3QodC5wbGFjZW1lbnQpLGg9TG4odC5wbGFjZW1lbnQpLGI9IWgsbT1abyhnKSxTPVNmKG0pLHg9dC5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMsRT10LnJlY3RzLnJlZmVyZW5jZSxUPXQucmVjdHMucG9wcGVyLEE9dHlwZW9mIHY9PSJmdW5jdGlvbiI/dihPYmplY3QuYXNzaWduKHt9LHQucmVjdHMse3BsYWNlbWVudDp0LnBsYWNlbWVudH0pKTp2LEM9dHlwZW9mIEE9PSJudW1iZXIiP3ttYWluQXhpczpBLGFsdEF4aXM6QX06T2JqZWN0LmFzc2lnbih7bWFpbkF4aXM6MCxhbHRBeGlzOjB9LEEpLEw9dC5tb2RpZmllcnNEYXRhLm9mZnNldD90Lm1vZGlmaWVyc0RhdGEub2Zmc2V0W3QucGxhY2VtZW50XTpudWxsLE89e3g6MCx5OjB9O2lmKHgpe2lmKGEpe3ZhciBSLEY9bT09PSJ5Ij9zdDpwdCxWPW09PT0ieSI/d3Q6aHQsej1tPT09InkiPyJoZWlnaHQiOiJ3aWR0aCIsbmU9eFttXSxNPW5lK3dbRl0sVz1uZS13W1ZdLEQ9Zj8tVFt6XS8yOjAsTj1oPT09S3I/RVt6XTpUW3pdLF89aD09PUtyPy1UW3pdOi1FW3pdLEc9dC5lbGVtZW50cy5hcnJvdyxZPWYmJkc/UW8oRyk6e3dpZHRoOjAsaGVpZ2h0OjB9LGo9dC5tb2RpZmllcnNEYXRhWyJhcnJvdyNwZXJzaXN0ZW50Il0/dC5tb2RpZmllcnNEYXRhWyJhcnJvdyNwZXJzaXN0ZW50Il0ucGFkZGluZzp5cygpLGVlPWpbRl0scT1qW1ZdLHJlPWVhKDAsRVt6XSxZW3pdKSx5ZT1iP0Vbel0vMi1ELXJlLWVlLUMubWFpbkF4aXM6Ti1yZS1lZS1DLm1haW5BeGlzLGJlPWI/LUVbel0vMitEK3JlK3ErQy5tYWluQXhpczpfK3JlK3ErQy5tYWluQXhpcyxwZT10LmVsZW1lbnRzLmFycm93JiZlcih0LmVsZW1lbnRzLmFycm93KSx3ZT1wZT9tPT09InkiP3BlLmNsaWVudFRvcHx8MDpwZS5jbGllbnRMZWZ0fHwwOjAsQmU9KFI9TD8uW21dKSE9bnVsbD9SOjAsdWU9bmUreWUtQmUtd2UsVmU9bmUrYmUtQmUsbGU9ZWEoZj9KbyhNLHVlKTpNLG5lLGY/Wm4oVyxWZSk6Vyk7eFttXT1sZSxPW21dPWxlLW5lfWlmKHMpe3ZhciBEZSxHZT1tPT09IngiP3N0OnB0LFhlPW09PT0ieCI/d3Q6aHQsWj14W1NdLEFlPVM9PT0ieSI/ImhlaWdodCI6IndpZHRoIixVdD1aK3dbR2VdLGVuPVotd1tYZV0scHI9W3N0LHB0XS5pbmRleE9mKGcpIT09LTEsR249KERlPUw/LltTXSkhPW51bGw/RGU6MCxUcj1wcj9VdDpaLUVbQWVdLVRbQWVdLUduK0MuYWx0QXhpcyxEcj1wcj9aK0VbQWVdK1RbQWVdLUduLUMuYWx0QXhpczplbixacj1mJiZwcj9WYihUcixaLERyKTplYShmP1RyOlV0LFosZj9Ecjplbik7eFtTXT1acixPW1NdPVpyLVp9dC5tb2RpZmllcnNEYXRhW3JdPU99fXZhciBydz17bmFtZToicHJldmVudE92ZXJmbG93IixlbmFibGVkOiEwLHBoYXNlOiJtYWluIixmbjpGVCxyZXF1aXJlc0lmRXhpc3RzOlsib2Zmc2V0Il19O2Z1bmN0aW9uIEVmKGUpe3JldHVybntzY3JvbGxMZWZ0OmUuc2Nyb2xsTGVmdCxzY3JvbGxUb3A6ZS5zY3JvbGxUb3B9fWZ1bmN0aW9uIE5mKGUpe3JldHVybiBlPT09WmUoZSl8fCFrdChlKT90YShlKTpFZihlKX1mdW5jdGlvbiB6VChlKXt2YXIgdD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49R3IodC53aWR0aCkvZS5vZmZzZXRXaWR0aHx8MSxyPUdyKHQuaGVpZ2h0KS9lLm9mZnNldEhlaWdodHx8MTtyZXR1cm4gbiE9PTF8fHIhPT0xfWZ1bmN0aW9uIFRmKGUsdCxuKXtuPT09dm9pZCAwJiYobj0hMSk7dmFyIHI9a3QodCksbz1rdCh0KSYmelQodCksYT1QdCh0KSxpPVBuKGUsbyxuKSxzPXtzY3JvbGxMZWZ0OjAsc2Nyb2xsVG9wOjB9LGw9e3g6MCx5OjB9O3JldHVybihyfHwhciYmIW4pJiYoKEF0KHQpIT09ImJvZHkifHxyYShhKSkmJihzPU5mKHQpKSxrdCh0KT8obD1Qbih0LCEwKSxsLngrPXQuY2xpZW50TGVmdCxsLnkrPXQuY2xpZW50VG9wKTphJiYobC54PW5hKGEpKSkse3g6aS5sZWZ0K3Muc2Nyb2xsTGVmdC1sLngseTppLnRvcCtzLnNjcm9sbFRvcC1sLnksd2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHR9fWZ1bmN0aW9uIFdUKGUpe3ZhciB0PW5ldyBNYXAsbj1uZXcgU2V0LHI9W107ZS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3Quc2V0KGEubmFtZSxhKX0pO2Z1bmN0aW9uIG8oYSl7bi5hZGQoYS5uYW1lKTt2YXIgaT1bXS5jb25jYXQoYS5yZXF1aXJlc3x8W10sYS5yZXF1aXJlc0lmRXhpc3RzfHxbXSk7aS5mb3JFYWNoKGZ1bmN0aW9uKHMpe2lmKCFuLmhhcyhzKSl7dmFyIGw9dC5nZXQocyk7bCYmbyhsKX19KSxyLnB1c2goYSl9cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihhKXtuLmhhcyhhLm5hbWUpfHxvKGEpfSkscn1mdW5jdGlvbiBEZihlKXt2YXIgdD1XVChlKTtyZXR1cm4gS2IucmVkdWNlKGZ1bmN0aW9uKG4scil7cmV0dXJuIG4uY29uY2F0KHQuZmlsdGVyKGZ1bmN0aW9uKG8pe3JldHVybiBvLnBoYXNlPT09cn0pKX0sW10pfWZ1bmN0aW9uIEFmKGUpe3ZhciB0O3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fHwodD1uZXcgUHJvbWlzZShmdW5jdGlvbihuKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7dD12b2lkIDAsbihlKCkpfSl9KSksdH19ZnVuY3Rpb24gQ2YoZSl7dmFyIHQ9ZS5yZWR1Y2UoZnVuY3Rpb24obixyKXt2YXIgbz1uW3IubmFtZV07cmV0dXJuIG5bci5uYW1lXT1vP09iamVjdC5hc3NpZ24oe30sbyxyLHtvcHRpb25zOk9iamVjdC5hc3NpZ24oe30sby5vcHRpb25zLHIub3B0aW9ucyksZGF0YTpPYmplY3QuYXNzaWduKHt9LG8uZGF0YSxyLmRhdGEpfSk6cixufSx7fSk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdFtuXX0pfXZhciBvdz17cGxhY2VtZW50OiJib3R0b20iLG1vZGlmaWVyczpbXSxzdHJhdGVneToiYWJzb2x1dGUifTtmdW5jdGlvbiBhdygpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiF0LnNvbWUoZnVuY3Rpb24ocil7cmV0dXJuIShyJiZ0eXBlb2Ygci5nZXRCb3VuZGluZ0NsaWVudFJlY3Q9PSJmdW5jdGlvbiIpfSl9ZnVuY3Rpb24gaXcoZSl7ZT09PXZvaWQgMCYmKGU9e30pO3ZhciB0PWUsbj10LmRlZmF1bHRNb2RpZmllcnMscj1uPT09dm9pZCAwP1tdOm4sbz10LmRlZmF1bHRPcHRpb25zLGE9bz09PXZvaWQgMD9vdzpvO3JldHVybiBmdW5jdGlvbihzLGwsZCl7ZD09PXZvaWQgMCYmKGQ9YSk7dmFyIGM9e3BsYWNlbWVudDoiYm90dG9tIixvcmRlcmVkTW9kaWZpZXJzOltdLG9wdGlvbnM6T2JqZWN0LmFzc2lnbih7fSxvdyxhKSxtb2RpZmllcnNEYXRhOnt9LGVsZW1lbnRzOntyZWZlcmVuY2U6cyxwb3BwZXI6bH0sYXR0cmlidXRlczp7fSxzdHlsZXM6e319LHU9W10scD0hMSxmPXtzdGF0ZTpjLHNldE9wdGlvbnM6ZnVuY3Rpb24oZyl7dmFyIGg9dHlwZW9mIGc9PSJmdW5jdGlvbiI/ZyhjLm9wdGlvbnMpOmc7digpLGMub3B0aW9ucz1PYmplY3QuYXNzaWduKHt9LGEsYy5vcHRpb25zLGgpLGMuc2Nyb2xsUGFyZW50cz17cmVmZXJlbmNlOlJuKHMpP05vKHMpOnMuY29udGV4dEVsZW1lbnQ/Tm8ocy5jb250ZXh0RWxlbWVudCk6W10scG9wcGVyOk5vKGwpfTt2YXIgYj1EZihDZihbXS5jb25jYXQocixjLm9wdGlvbnMubW9kaWZpZXJzKSkpO3JldHVybiBjLm9yZGVyZWRNb2RpZmllcnM9Yi5maWx0ZXIoZnVuY3Rpb24obSl7cmV0dXJuIG0uZW5hYmxlZH0pLHkoKSxmLnVwZGF0ZSgpfSxmb3JjZVVwZGF0ZTpmdW5jdGlvbigpe2lmKCFwKXt2YXIgZz1jLmVsZW1lbnRzLGg9Zy5yZWZlcmVuY2UsYj1nLnBvcHBlcjtpZihhdyhoLGIpKXtjLnJlY3RzPXtyZWZlcmVuY2U6VGYoaCxlcihiKSxjLm9wdGlvbnMuc3RyYXRlZ3k9PT0iZml4ZWQiKSxwb3BwZXI6UW8oYil9LGMucmVzZXQ9ITEsYy5wbGFjZW1lbnQ9Yy5vcHRpb25zLnBsYWNlbWVudCxjLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbihDKXtyZXR1cm4gYy5tb2RpZmllcnNEYXRhW0MubmFtZV09T2JqZWN0LmFzc2lnbih7fSxDLmRhdGEpfSk7Zm9yKHZhciBtPTA7bTxjLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoO20rKyl7aWYoYy5yZXNldD09PSEwKXtjLnJlc2V0PSExLG09LTE7Y29udGludWV9dmFyIFM9Yy5vcmRlcmVkTW9kaWZpZXJzW21dLHg9Uy5mbixFPVMub3B0aW9ucyxUPUU9PT12b2lkIDA/e306RSxBPVMubmFtZTt0eXBlb2YgeD09ImZ1bmN0aW9uIiYmKGM9eCh7c3RhdGU6YyxvcHRpb25zOlQsbmFtZTpBLGluc3RhbmNlOmZ9KXx8Yyl9fX19LHVwZGF0ZTpBZihmdW5jdGlvbigpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih3KXtmLmZvcmNlVXBkYXRlKCksdyhjKX0pfSksZGVzdHJveTpmdW5jdGlvbigpe3YoKSxwPSEwfX07aWYoIWF3KHMsbCkpcmV0dXJuIGY7Zi5zZXRPcHRpb25zKGQpLnRoZW4oZnVuY3Rpb24odyl7IXAmJmQub25GaXJzdFVwZGF0ZSYmZC5vbkZpcnN0VXBkYXRlKHcpfSk7ZnVuY3Rpb24geSgpe2Mub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uKHcpe3ZhciBnPXcubmFtZSxoPXcub3B0aW9ucyxiPWg9PT12b2lkIDA/e306aCxtPXcuZWZmZWN0O2lmKHR5cGVvZiBtPT0iZnVuY3Rpb24iKXt2YXIgUz1tKHtzdGF0ZTpjLG5hbWU6ZyxpbnN0YW5jZTpmLG9wdGlvbnM6Yn0pLHg9ZnVuY3Rpb24oKXt9O3UucHVzaChTfHx4KX19KX1mdW5jdGlvbiB2KCl7dS5mb3JFYWNoKGZ1bmN0aW9uKHcpe3JldHVybiB3KCl9KSx1PVtdfXJldHVybiBmfX12YXIgQlQ9W1hiLG53LHFiLG1zLHR3LEpiLHJ3LGpiLGV3XSxNZj1pdyh7ZGVmYXVsdE1vZGlmaWVyczpCVH0pO3ZhciBIVD0idGlwcHktYm94Iixndz0idGlwcHktY29udGVudCIsS1Q9InRpcHB5LWJhY2tkcm9wIix5dz0idGlwcHktYXJyb3ciLHZ3PSJ0aXBweS1zdmctYXJyb3ciLG9hPXtwYXNzaXZlOiEwLGNhcHR1cmU6ITB9LGJ3PWZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmJvZHl9O2Z1bmN0aW9uIE9mKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgcj1lW3RdO3JldHVybiByPz8oQXJyYXkuaXNBcnJheShuKT9uW3RdOm4pfXJldHVybiBlfWZ1bmN0aW9uIFVmKGUsdCl7dmFyIG49e30udG9TdHJpbmcuY2FsbChlKTtyZXR1cm4gbi5pbmRleE9mKCJbb2JqZWN0Iik9PT0wJiZuLmluZGV4T2YodCsiXSIpPi0xfWZ1bmN0aW9uIHd3KGUsdCl7cmV0dXJuIHR5cGVvZiBlPT0iZnVuY3Rpb24iP2UuYXBwbHkodm9pZCAwLHQpOmV9ZnVuY3Rpb24gc3coZSx0KXtpZih0PT09MClyZXR1cm4gZTt2YXIgbjtyZXR1cm4gZnVuY3Rpb24ocil7Y2xlYXJUaW1lb3V0KG4pLG49c2V0VGltZW91dChmdW5jdGlvbigpe2Uocil9LHQpfX1mdW5jdGlvbiBHVChlKXtyZXR1cm4gZS5zcGxpdCgvXHMrLykuZmlsdGVyKEJvb2xlYW4pfWZ1bmN0aW9uIGVpKGUpe3JldHVybltdLmNvbmNhdChlKX1mdW5jdGlvbiBsdyhlLHQpe2UuaW5kZXhPZih0KT09PS0xJiZlLnB1c2godCl9ZnVuY3Rpb24gVlQoZSl7cmV0dXJuIGUuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuaW5kZXhPZih0KT09PW59KX1mdW5jdGlvbiBqVChlKXtyZXR1cm4gZS5zcGxpdCgiLSIpWzBdfWZ1bmN0aW9uIEdkKGUpe3JldHVybltdLnNsaWNlLmNhbGwoZSl9ZnVuY3Rpb24gZHcoZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZShmdW5jdGlvbih0LG4pe3JldHVybiBlW25dIT09dm9pZCAwJiYodFtuXT1lW25dKSx0fSx7fSl9ZnVuY3Rpb24ga3MoKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iil9ZnVuY3Rpb24gVmQoZSl7cmV0dXJuWyJFbGVtZW50IiwiRnJhZ21lbnQiXS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiBVZihlLHQpfSl9ZnVuY3Rpb24gWVQoZSl7cmV0dXJuIFVmKGUsIk5vZGVMaXN0Iil9ZnVuY3Rpb24gcVQoZSl7cmV0dXJuIFVmKGUsIk1vdXNlRXZlbnQiKX1mdW5jdGlvbiBYVChlKXtyZXR1cm4hIShlJiZlLl90aXBweSYmZS5fdGlwcHkucmVmZXJlbmNlPT09ZSl9ZnVuY3Rpb24gJFQoZSl7cmV0dXJuIFZkKGUpP1tlXTpZVChlKT9HZChlKTpBcnJheS5pc0FycmF5KGUpP2U6R2QoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlKSl9ZnVuY3Rpb24gSWYoZSx0KXtlLmZvckVhY2goZnVuY3Rpb24obil7biYmKG4uc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPXQrIm1zIil9KX1mdW5jdGlvbiBjdyhlLHQpe2UuZm9yRWFjaChmdW5jdGlvbihuKXtuJiZuLnNldEF0dHJpYnV0ZSgiZGF0YS1zdGF0ZSIsdCl9KX1mdW5jdGlvbiBKVChlKXt2YXIgdCxuPWVpKGUpLHI9blswXTtyZXR1cm4gciE9bnVsbCYmKHQ9ci5vd25lckRvY3VtZW50KSE9bnVsbCYmdC5ib2R5P3Iub3duZXJEb2N1bWVudDpkb2N1bWVudH1mdW5jdGlvbiBRVChlLHQpe3ZhciBuPXQuY2xpZW50WCxyPXQuY2xpZW50WTtyZXR1cm4gZS5ldmVyeShmdW5jdGlvbihvKXt2YXIgYT1vLnBvcHBlclJlY3QsaT1vLnBvcHBlclN0YXRlLHM9by5wcm9wcyxsPXMuaW50ZXJhY3RpdmVCb3JkZXIsZD1qVChpLnBsYWNlbWVudCksYz1pLm1vZGlmaWVyc0RhdGEub2Zmc2V0O2lmKCFjKXJldHVybiEwO3ZhciB1PWQ9PT0iYm90dG9tIj9jLnRvcC55OjAscD1kPT09InRvcCI/Yy5ib3R0b20ueTowLGY9ZD09PSJyaWdodCI/Yy5sZWZ0Lng6MCx5PWQ9PT0ibGVmdCI/Yy5yaWdodC54OjAsdj1hLnRvcC1yK3U+bCx3PXItYS5ib3R0b20tcD5sLGc9YS5sZWZ0LW4rZj5sLGg9bi1hLnJpZ2h0LXk+bDtyZXR1cm4gdnx8d3x8Z3x8aH0pfWZ1bmN0aW9uIFJmKGUsdCxuKXt2YXIgcj10KyJFdmVudExpc3RlbmVyIjtbInRyYW5zaXRpb25lbmQiLCJ3ZWJraXRUcmFuc2l0aW9uRW5kIl0uZm9yRWFjaChmdW5jdGlvbihvKXtlW3JdKG8sbil9KX1mdW5jdGlvbiB1dyhlLHQpe2Zvcih2YXIgbj10O247KXt2YXIgcjtpZihlLmNvbnRhaW5zKG4pKXJldHVybiEwO249bi5nZXRSb290Tm9kZT09bnVsbHx8KHI9bi5nZXRSb290Tm9kZSgpKT09bnVsbD92b2lkIDA6ci5ob3N0fXJldHVybiExfXZhciB3cj17aXNUb3VjaDohMX0scHc9MDtmdW5jdGlvbiBaVCgpe3dyLmlzVG91Y2h8fCh3ci5pc1RvdWNoPSEwLHdpbmRvdy5wZXJmb3JtYW5jZSYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixrdykpfWZ1bmN0aW9uIGt3KCl7dmFyIGU9cGVyZm9ybWFuY2Uubm93KCk7ZS1wdzwyMCYmKHdyLmlzVG91Y2g9ITEsZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixrdykpLHB3PWV9ZnVuY3Rpb24gZUQoKXt2YXIgZT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKFhUKGUpKXt2YXIgdD1lLl90aXBweTtlLmJsdXImJiF0LnN0YXRlLmlzVmlzaWJsZSYmZS5ibHVyKCl9fWZ1bmN0aW9uIHREKCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsWlQsb2EpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIixlRCl9dmFyIG5EPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLHJEPW5EPyEhd2luZG93Lm1zQ3J5cHRvOiExO3ZhciBvRD17YW5pbWF0ZUZpbGw6ITEsZm9sbG93Q3Vyc29yOiExLGlubGluZVBvc2l0aW9uaW5nOiExLHN0aWNreTohMX0sYUQ9e2FsbG93SFRNTDohMSxhbmltYXRpb246ImZhZGUiLGFycm93OiEwLGNvbnRlbnQ6IiIsaW5lcnRpYTohMSxtYXhXaWR0aDozNTAscm9sZToidG9vbHRpcCIsdGhlbWU6IiIsekluZGV4Ojk5OTl9LG5yPU9iamVjdC5hc3NpZ24oe2FwcGVuZFRvOmJ3LGFyaWE6e2NvbnRlbnQ6ImF1dG8iLGV4cGFuZGVkOiJhdXRvIn0sZGVsYXk6MCxkdXJhdGlvbjpbMzAwLDI1MF0sZ2V0UmVmZXJlbmNlQ2xpZW50UmVjdDpudWxsLGhpZGVPbkNsaWNrOiEwLGlnbm9yZUF0dHJpYnV0ZXM6ITEsaW50ZXJhY3RpdmU6ITEsaW50ZXJhY3RpdmVCb3JkZXI6MixpbnRlcmFjdGl2ZURlYm91bmNlOjAsbW92ZVRyYW5zaXRpb246IiIsb2Zmc2V0OlswLDEwXSxvbkFmdGVyVXBkYXRlOmZ1bmN0aW9uKCl7fSxvbkJlZm9yZVVwZGF0ZTpmdW5jdGlvbigpe30sb25DcmVhdGU6ZnVuY3Rpb24oKXt9LG9uRGVzdHJveTpmdW5jdGlvbigpe30sb25IaWRkZW46ZnVuY3Rpb24oKXt9LG9uSGlkZTpmdW5jdGlvbigpe30sb25Nb3VudDpmdW5jdGlvbigpe30sb25TaG93OmZ1bmN0aW9uKCl7fSxvblNob3duOmZ1bmN0aW9uKCl7fSxvblRyaWdnZXI6ZnVuY3Rpb24oKXt9LG9uVW50cmlnZ2VyOmZ1bmN0aW9uKCl7fSxvbkNsaWNrT3V0c2lkZTpmdW5jdGlvbigpe30scGxhY2VtZW50OiJ0b3AiLHBsdWdpbnM6W10scG9wcGVyT3B0aW9uczp7fSxyZW5kZXI6bnVsbCxzaG93T25DcmVhdGU6ITEsdG91Y2g6ITAsdHJpZ2dlcjoibW91c2VlbnRlciBmb2N1cyIsdHJpZ2dlclRhcmdldDpudWxsfSxvRCxhRCksaUQ9T2JqZWN0LmtleXMobnIpLHNEPWZ1bmN0aW9uKHQpe3ZhciBuPU9iamVjdC5rZXlzKHQpO24uZm9yRWFjaChmdW5jdGlvbihyKXtucltyXT10W3JdfSl9O2Z1bmN0aW9uIHh3KGUpe3ZhciB0PWUucGx1Z2luc3x8W10sbj10LnJlZHVjZShmdW5jdGlvbihyLG8pe3ZhciBhPW8ubmFtZSxpPW8uZGVmYXVsdFZhbHVlO2lmKGEpe3ZhciBzO3JbYV09ZVthXSE9PXZvaWQgMD9lW2FdOihzPW5yW2FdKSE9bnVsbD9zOml9cmV0dXJuIHJ9LHt9KTtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxlLG4pfWZ1bmN0aW9uIGxEKGUsdCl7dmFyIG49dD9PYmplY3Qua2V5cyh4dyhPYmplY3QuYXNzaWduKHt9LG5yLHtwbHVnaW5zOnR9KSkpOmlELHI9bi5yZWR1Y2UoZnVuY3Rpb24obyxhKXt2YXIgaT0oZS5nZXRBdHRyaWJ1dGUoImRhdGEtdGlwcHktIithKXx8IiIpLnRyaW0oKTtpZighaSlyZXR1cm4gbztpZihhPT09ImNvbnRlbnQiKW9bYV09aTtlbHNlIHRyeXtvW2FdPUpTT04ucGFyc2UoaSl9Y2F0Y2h7b1thXT1pfXJldHVybiBvfSx7fSk7cmV0dXJuIHJ9ZnVuY3Rpb24gZncoZSx0KXt2YXIgbj1PYmplY3QuYXNzaWduKHt9LHQse2NvbnRlbnQ6d3codC5jb250ZW50LFtlXSl9LHQuaWdub3JlQXR0cmlidXRlcz97fTpsRChlLHQucGx1Z2lucykpO3JldHVybiBuLmFyaWE9T2JqZWN0LmFzc2lnbih7fSxuci5hcmlhLG4uYXJpYSksbi5hcmlhPXtleHBhbmRlZDpuLmFyaWEuZXhwYW5kZWQ9PT0iYXV0byI/dC5pbnRlcmFjdGl2ZTpuLmFyaWEuZXhwYW5kZWQsY29udGVudDpuLmFyaWEuY29udGVudD09PSJhdXRvIj90LmludGVyYWN0aXZlP251bGw6ImRlc2NyaWJlZGJ5IjpuLmFyaWEuY29udGVudH0sbn12YXIgZEQ9ZnVuY3Rpb24oKXtyZXR1cm4iaW5uZXJIVE1MIn07ZnVuY3Rpb24gTGYoZSx0KXtlW2REKCldPXR9ZnVuY3Rpb24gbXcoZSl7dmFyIHQ9a3MoKTtyZXR1cm4gZT09PSEwP3QuY2xhc3NOYW1lPXl3Oih0LmNsYXNzTmFtZT12dyxWZChlKT90LmFwcGVuZENoaWxkKGUpOkxmKHQsZSkpLHR9ZnVuY3Rpb24gaHcoZSx0KXtWZCh0LmNvbnRlbnQpPyhMZihlLCIiKSxlLmFwcGVuZENoaWxkKHQuY29udGVudCkpOnR5cGVvZiB0LmNvbnRlbnQhPSJmdW5jdGlvbiImJih0LmFsbG93SFRNTD9MZihlLHQuY29udGVudCk6ZS50ZXh0Q29udGVudD10LmNvbnRlbnQpfWZ1bmN0aW9uIF9mKGUpe3ZhciB0PWUuZmlyc3RFbGVtZW50Q2hpbGQsbj1HZCh0LmNoaWxkcmVuKTtyZXR1cm57Ym94OnQsY29udGVudDpuLmZpbmQoZnVuY3Rpb24ocil7cmV0dXJuIHIuY2xhc3NMaXN0LmNvbnRhaW5zKGd3KX0pLGFycm93Om4uZmluZChmdW5jdGlvbihyKXtyZXR1cm4gci5jbGFzc0xpc3QuY29udGFpbnMoeXcpfHxyLmNsYXNzTGlzdC5jb250YWlucyh2dyl9KSxiYWNrZHJvcDpuLmZpbmQoZnVuY3Rpb24ocil7cmV0dXJuIHIuY2xhc3NMaXN0LmNvbnRhaW5zKEtUKX0pfX1mdW5jdGlvbiBTdyhlKXt2YXIgdD1rcygpLG49a3MoKTtuLmNsYXNzTmFtZT1IVCxuLnNldEF0dHJpYnV0ZSgiZGF0YS1zdGF0ZSIsImhpZGRlbiIpLG4uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIik7dmFyIHI9a3MoKTtyLmNsYXNzTmFtZT1ndyxyLnNldEF0dHJpYnV0ZSgiZGF0YS1zdGF0ZSIsImhpZGRlbiIpLGh3KHIsZS5wcm9wcyksdC5hcHBlbmRDaGlsZChuKSxuLmFwcGVuZENoaWxkKHIpLG8oZS5wcm9wcyxlLnByb3BzKTtmdW5jdGlvbiBvKGEsaSl7dmFyIHM9X2YodCksbD1zLmJveCxkPXMuY29udGVudCxjPXMuYXJyb3c7aS50aGVtZT9sLnNldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIsaS50aGVtZSk6bC5yZW1vdmVBdHRyaWJ1dGUoImRhdGEtdGhlbWUiKSx0eXBlb2YgaS5hbmltYXRpb249PSJzdHJpbmciP2wuc2V0QXR0cmlidXRlKCJkYXRhLWFuaW1hdGlvbiIsaS5hbmltYXRpb24pOmwucmVtb3ZlQXR0cmlidXRlKCJkYXRhLWFuaW1hdGlvbiIpLGkuaW5lcnRpYT9sLnNldEF0dHJpYnV0ZSgiZGF0YS1pbmVydGlhIiwiIik6bC5yZW1vdmVBdHRyaWJ1dGUoImRhdGEtaW5lcnRpYSIpLGwuc3R5bGUubWF4V2lkdGg9dHlwZW9mIGkubWF4V2lkdGg9PSJudW1iZXIiP2kubWF4V2lkdGgrInB4IjppLm1heFdpZHRoLGkucm9sZT9sLnNldEF0dHJpYnV0ZSgicm9sZSIsaS5yb2xlKTpsLnJlbW92ZUF0dHJpYnV0ZSgicm9sZSIpLChhLmNvbnRlbnQhPT1pLmNvbnRlbnR8fGEuYWxsb3dIVE1MIT09aS5hbGxvd0hUTUwpJiZodyhkLGUucHJvcHMpLGkuYXJyb3c/Yz9hLmFycm93IT09aS5hcnJvdyYmKGwucmVtb3ZlQ2hpbGQoYyksbC5hcHBlbmRDaGlsZChtdyhpLmFycm93KSkpOmwuYXBwZW5kQ2hpbGQobXcoaS5hcnJvdykpOmMmJmwucmVtb3ZlQ2hpbGQoYyl9cmV0dXJue3BvcHBlcjp0LG9uVXBkYXRlOm99fVN3LiQkdGlwcHk9ITA7dmFyIGNEPTEsS2Q9W10sUGY9W107ZnVuY3Rpb24gdUQoZSx0KXt2YXIgbj1mdyhlLE9iamVjdC5hc3NpZ24oe30sbnIseHcoZHcodCkpKSkscixvLGEsaT0hMSxzPSExLGw9ITEsZD0hMSxjLHUscCxmPVtdLHk9c3codWUsbi5pbnRlcmFjdGl2ZURlYm91bmNlKSx2LHc9Y0QrKyxnPW51bGwsaD1WVChuLnBsdWdpbnMpLGI9e2lzRW5hYmxlZDohMCxpc1Zpc2libGU6ITEsaXNEZXN0cm95ZWQ6ITEsaXNNb3VudGVkOiExLGlzU2hvd246ITF9LG09e2lkOncscmVmZXJlbmNlOmUscG9wcGVyOmtzKCkscG9wcGVySW5zdGFuY2U6Zyxwcm9wczpuLHN0YXRlOmIscGx1Z2luczpoLGNsZWFyRGVsYXlUaW1lb3V0czpUcixzZXRQcm9wczpEcixzZXRDb250ZW50OlpyLHNob3c6aGEsaGlkZTpSbyxoaWRlV2l0aEludGVyYWN0aXZpdHk6ZW8sZW5hYmxlOnByLGRpc2FibGU6R24sdW5tb3VudDpiaSxkZXN0cm95OndpfTtpZighbi5yZW5kZXIpcmV0dXJuIG07dmFyIFM9bi5yZW5kZXIobSkseD1TLnBvcHBlcixFPVMub25VcGRhdGU7eC5zZXRBdHRyaWJ1dGUoImRhdGEtdGlwcHktcm9vdCIsIiIpLHguaWQ9InRpcHB5LSIrbS5pZCxtLnBvcHBlcj14LGUuX3RpcHB5PW0seC5fdGlwcHk9bTt2YXIgVD1oLm1hcChmdW5jdGlvbihJKXtyZXR1cm4gSS5mbihtKX0pLEE9ZS5oYXNBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiKTtyZXR1cm4gcGUoKSxEKCksbmUoKSxNKCJvbkNyZWF0ZSIsW21dKSxuLnNob3dPbkNyZWF0ZSYmVXQoKSx4LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7bS5wcm9wcy5pbnRlcmFjdGl2ZSYmbS5zdGF0ZS5pc1Zpc2libGUmJm0uY2xlYXJEZWxheVRpbWVvdXRzKCl9KSx4LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7bS5wcm9wcy5pbnRlcmFjdGl2ZSYmbS5wcm9wcy50cmlnZ2VyLmluZGV4T2YoIm1vdXNlZW50ZXIiKT49MCYmRigpLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIseSl9KSxtO2Z1bmN0aW9uIEMoKXt2YXIgST1tLnByb3BzLnRvdWNoO3JldHVybiBBcnJheS5pc0FycmF5KEkpP0k6W0ksMF19ZnVuY3Rpb24gTCgpe3JldHVybiBDKClbMF09PT0iaG9sZCJ9ZnVuY3Rpb24gTygpe3ZhciBJO3JldHVybiEhKChJPW0ucHJvcHMucmVuZGVyKSE9bnVsbCYmSS4kJHRpcHB5KX1mdW5jdGlvbiBSKCl7cmV0dXJuIHZ8fGV9ZnVuY3Rpb24gRigpe3ZhciBJPVIoKS5wYXJlbnROb2RlO3JldHVybiBJP0pUKEkpOmRvY3VtZW50fWZ1bmN0aW9uIFYoKXtyZXR1cm4gX2YoeCl9ZnVuY3Rpb24geihJKXtyZXR1cm4gbS5zdGF0ZS5pc01vdW50ZWQmJiFtLnN0YXRlLmlzVmlzaWJsZXx8d3IuaXNUb3VjaHx8YyYmYy50eXBlPT09ImZvY3VzIj8wOk9mKG0ucHJvcHMuZGVsYXksST8wOjEsbnIuZGVsYXkpfWZ1bmN0aW9uIG5lKEkpe0k9PT12b2lkIDAmJihJPSExKSx4LnN0eWxlLnBvaW50ZXJFdmVudHM9bS5wcm9wcy5pbnRlcmFjdGl2ZSYmIUk/IiI6Im5vbmUiLHguc3R5bGUuekluZGV4PSIiK20ucHJvcHMuekluZGV4fWZ1bmN0aW9uIE0oSSxKLHNlKXtpZihzZT09PXZvaWQgMCYmKHNlPSEwKSxULmZvckVhY2goZnVuY3Rpb24oeGUpe3hlW0ldJiZ4ZVtJXS5hcHBseSh4ZSxKKX0pLHNlKXt2YXIgX2U7KF9lPW0ucHJvcHMpW0ldLmFwcGx5KF9lLEopfX1mdW5jdGlvbiBXKCl7dmFyIEk9bS5wcm9wcy5hcmlhO2lmKEkuY29udGVudCl7dmFyIEo9ImFyaWEtIitJLmNvbnRlbnQsc2U9eC5pZCxfZT1laShtLnByb3BzLnRyaWdnZXJUYXJnZXR8fGUpO19lLmZvckVhY2goZnVuY3Rpb24oeGUpe3ZhciBTdD14ZS5nZXRBdHRyaWJ1dGUoSik7aWYobS5zdGF0ZS5pc1Zpc2libGUpeGUuc2V0QXR0cmlidXRlKEosU3Q/U3QrIiAiK3NlOnNlKTtlbHNle3ZhciBobj1TdCYmU3QucmVwbGFjZShzZSwiIikudHJpbSgpO2huP3hlLnNldEF0dHJpYnV0ZShKLGhuKTp4ZS5yZW1vdmVBdHRyaWJ1dGUoSil9fSl9fWZ1bmN0aW9uIEQoKXtpZighKEF8fCFtLnByb3BzLmFyaWEuZXhwYW5kZWQpKXt2YXIgST1laShtLnByb3BzLnRyaWdnZXJUYXJnZXR8fGUpO0kuZm9yRWFjaChmdW5jdGlvbihKKXttLnByb3BzLmludGVyYWN0aXZlP0ouc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixtLnN0YXRlLmlzVmlzaWJsZSYmSj09PVIoKT8idHJ1ZSI6ImZhbHNlIik6Si5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiKX0pfX1mdW5jdGlvbiBOKCl7RigpLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIseSksS2Q9S2QuZmlsdGVyKGZ1bmN0aW9uKEkpe3JldHVybiBJIT09eX0pfWZ1bmN0aW9uIF8oSSl7aWYoISh3ci5pc1RvdWNoJiYobHx8SS50eXBlPT09Im1vdXNlZG93biIpKSl7dmFyIEo9SS5jb21wb3NlZFBhdGgmJkkuY29tcG9zZWRQYXRoKClbMF18fEkudGFyZ2V0O2lmKCEobS5wcm9wcy5pbnRlcmFjdGl2ZSYmdXcoeCxKKSkpe2lmKGVpKG0ucHJvcHMudHJpZ2dlclRhcmdldHx8ZSkuc29tZShmdW5jdGlvbihzZSl7cmV0dXJuIHV3KHNlLEopfSkpe2lmKHdyLmlzVG91Y2h8fG0uc3RhdGUuaXNWaXNpYmxlJiZtLnByb3BzLnRyaWdnZXIuaW5kZXhPZigiY2xpY2siKT49MClyZXR1cm59ZWxzZSBNKCJvbkNsaWNrT3V0c2lkZSIsW20sSV0pO20ucHJvcHMuaGlkZU9uQ2xpY2s9PT0hMCYmKG0uY2xlYXJEZWxheVRpbWVvdXRzKCksbS5oaWRlKCkscz0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cz0hMX0pLG0uc3RhdGUuaXNNb3VudGVkfHxlZSgpKX19fWZ1bmN0aW9uIEcoKXtsPSEwfWZ1bmN0aW9uIFkoKXtsPSExfWZ1bmN0aW9uIGooKXt2YXIgST1GKCk7SS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLF8sITApLEkuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLF8sb2EpLEkuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsWSxvYSksSS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLEcsb2EpfWZ1bmN0aW9uIGVlKCl7dmFyIEk9RigpO0kucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixfLCEwKSxJLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixfLG9hKSxJLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLFksb2EpLEkucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixHLG9hKX1mdW5jdGlvbiBxKEksSil7eWUoSSxmdW5jdGlvbigpeyFtLnN0YXRlLmlzVmlzaWJsZSYmeC5wYXJlbnROb2RlJiZ4LnBhcmVudE5vZGUuY29udGFpbnMoeCkmJkooKX0pfWZ1bmN0aW9uIHJlKEksSil7eWUoSSxKKX1mdW5jdGlvbiB5ZShJLEope3ZhciBzZT1WKCkuYm94O2Z1bmN0aW9uIF9lKHhlKXt4ZS50YXJnZXQ9PT1zZSYmKFJmKHNlLCJyZW1vdmUiLF9lKSxKKCkpfWlmKEk9PT0wKXJldHVybiBKKCk7UmYoc2UsInJlbW92ZSIsdSksUmYoc2UsImFkZCIsX2UpLHU9X2V9ZnVuY3Rpb24gYmUoSSxKLHNlKXtzZT09PXZvaWQgMCYmKHNlPSExKTt2YXIgX2U9ZWkobS5wcm9wcy50cmlnZ2VyVGFyZ2V0fHxlKTtfZS5mb3JFYWNoKGZ1bmN0aW9uKHhlKXt4ZS5hZGRFdmVudExpc3RlbmVyKEksSixzZSksZi5wdXNoKHtub2RlOnhlLGV2ZW50VHlwZTpJLGhhbmRsZXI6SixvcHRpb25zOnNlfSl9KX1mdW5jdGlvbiBwZSgpe0woKSYmKGJlKCJ0b3VjaHN0YXJ0IixCZSx7cGFzc2l2ZTohMH0pLGJlKCJ0b3VjaGVuZCIsVmUse3Bhc3NpdmU6ITB9KSksR1QobS5wcm9wcy50cmlnZ2VyKS5mb3JFYWNoKGZ1bmN0aW9uKEkpe2lmKEkhPT0ibWFudWFsIilzd2l0Y2goYmUoSSxCZSksSSl7Y2FzZSJtb3VzZWVudGVyIjpiZSgibW91c2VsZWF2ZSIsVmUpO2JyZWFrO2Nhc2UiZm9jdXMiOmJlKHJEPyJmb2N1c291dCI6ImJsdXIiLGxlKTticmVhaztjYXNlImZvY3VzaW4iOmJlKCJmb2N1c291dCIsbGUpO2JyZWFrfX0pfWZ1bmN0aW9uIHdlKCl7Zi5mb3JFYWNoKGZ1bmN0aW9uKEkpe3ZhciBKPUkubm9kZSxzZT1JLmV2ZW50VHlwZSxfZT1JLmhhbmRsZXIseGU9SS5vcHRpb25zO0oucmVtb3ZlRXZlbnRMaXN0ZW5lcihzZSxfZSx4ZSl9KSxmPVtdfWZ1bmN0aW9uIEJlKEkpe3ZhciBKLHNlPSExO2lmKCEoIW0uc3RhdGUuaXNFbmFibGVkfHxEZShJKXx8cykpe3ZhciBfZT0oKEo9Yyk9PW51bGw/dm9pZCAwOkoudHlwZSk9PT0iZm9jdXMiO2M9SSx2PUkuY3VycmVudFRhcmdldCxEKCksIW0uc3RhdGUuaXNWaXNpYmxlJiZxVChJKSYmS2QuZm9yRWFjaChmdW5jdGlvbih4ZSl7cmV0dXJuIHhlKEkpfSksSS50eXBlPT09ImNsaWNrIiYmKG0ucHJvcHMudHJpZ2dlci5pbmRleE9mKCJtb3VzZWVudGVyIik8MHx8aSkmJm0ucHJvcHMuaGlkZU9uQ2xpY2shPT0hMSYmbS5zdGF0ZS5pc1Zpc2libGU/c2U9ITA6VXQoSSksSS50eXBlPT09ImNsaWNrIiYmKGk9IXNlKSxzZSYmIV9lJiZlbihJKX19ZnVuY3Rpb24gdWUoSSl7dmFyIEo9SS50YXJnZXQsc2U9UigpLmNvbnRhaW5zKEopfHx4LmNvbnRhaW5zKEopO2lmKCEoSS50eXBlPT09Im1vdXNlbW92ZSImJnNlKSl7dmFyIF9lPUFlKCkuY29uY2F0KHgpLm1hcChmdW5jdGlvbih4ZSl7dmFyIFN0LGhuPXhlLl90aXBweSxmcj0oU3Q9aG4ucG9wcGVySW5zdGFuY2UpPT1udWxsP3ZvaWQgMDpTdC5zdGF0ZTtyZXR1cm4gZnI/e3BvcHBlclJlY3Q6eGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscG9wcGVyU3RhdGU6ZnIscHJvcHM6bn06bnVsbH0pLmZpbHRlcihCb29sZWFuKTtRVChfZSxJKSYmKE4oKSxlbihJKSl9fWZ1bmN0aW9uIFZlKEkpe3ZhciBKPURlKEkpfHxtLnByb3BzLnRyaWdnZXIuaW5kZXhPZigiY2xpY2siKT49MCYmaTtpZighSil7aWYobS5wcm9wcy5pbnRlcmFjdGl2ZSl7bS5oaWRlV2l0aEludGVyYWN0aXZpdHkoSSk7cmV0dXJufWVuKEkpfX1mdW5jdGlvbiBsZShJKXttLnByb3BzLnRyaWdnZXIuaW5kZXhPZigiZm9jdXNpbiIpPDAmJkkudGFyZ2V0IT09UigpfHxtLnByb3BzLmludGVyYWN0aXZlJiZJLnJlbGF0ZWRUYXJnZXQmJnguY29udGFpbnMoSS5yZWxhdGVkVGFyZ2V0KXx8ZW4oSSl9ZnVuY3Rpb24gRGUoSSl7cmV0dXJuIHdyLmlzVG91Y2g/TCgpIT09SS50eXBlLmluZGV4T2YoInRvdWNoIik+PTA6ITF9ZnVuY3Rpb24gR2UoKXtYZSgpO3ZhciBJPW0ucHJvcHMsSj1JLnBvcHBlck9wdGlvbnMsc2U9SS5wbGFjZW1lbnQsX2U9SS5vZmZzZXQseGU9SS5nZXRSZWZlcmVuY2VDbGllbnRSZWN0LFN0PUkubW92ZVRyYW5zaXRpb24saG49TygpP19mKHgpLmFycm93Om51bGwsZnI9eGU/e2dldEJvdW5kaW5nQ2xpZW50UmVjdDp4ZSxjb250ZXh0RWxlbWVudDp4ZS5jb250ZXh0RWxlbWVudHx8UigpfTplLHNsPXtuYW1lOiIkJHRpcHB5IixlbmFibGVkOiEwLHBoYXNlOiJiZWZvcmVXcml0ZSIscmVxdWlyZXM6WyJjb21wdXRlU3R5bGVzIl0sZm46ZnVuY3Rpb24oZGUpe3ZhciBDZT1kZS5zdGF0ZTtpZihPKCkpe3ZhciBFdD1WKCksdG49RXQuYm94O1sicGxhY2VtZW50IiwicmVmZXJlbmNlLWhpZGRlbiIsImVzY2FwZWQiXS5mb3JFYWNoKGZ1bmN0aW9uKG5uKXtubj09PSJwbGFjZW1lbnQiP3RuLnNldEF0dHJpYnV0ZSgiZGF0YS1wbGFjZW1lbnQiLENlLnBsYWNlbWVudCk6Q2UuYXR0cmlidXRlcy5wb3BwZXJbImRhdGEtcG9wcGVyLSIrbm5dP3RuLnNldEF0dHJpYnV0ZSgiZGF0YS0iK25uLCIiKTp0bi5yZW1vdmVBdHRyaWJ1dGUoImRhdGEtIitubil9KSxDZS5hdHRyaWJ1dGVzLnBvcHBlcj17fX19fSxBcj1be25hbWU6Im9mZnNldCIsb3B0aW9uczp7b2Zmc2V0Ol9lfX0se25hbWU6InByZXZlbnRPdmVyZmxvdyIsb3B0aW9uczp7cGFkZGluZzp7dG9wOjIsYm90dG9tOjIsbGVmdDo1LHJpZ2h0OjV9fX0se25hbWU6ImZsaXAiLG9wdGlvbnM6e3BhZGRpbmc6NX19LHtuYW1lOiJjb21wdXRlU3R5bGVzIixvcHRpb25zOnthZGFwdGl2ZTohU3R9fSxzbF07TygpJiZobiYmQXIucHVzaCh7bmFtZToiYXJyb3ciLG9wdGlvbnM6e2VsZW1lbnQ6aG4scGFkZGluZzozfX0pLEFyLnB1c2guYXBwbHkoQXIsSj8ubW9kaWZpZXJzfHxbXSksbS5wb3BwZXJJbnN0YW5jZT1NZihmcix4LE9iamVjdC5hc3NpZ24oe30sSix7cGxhY2VtZW50OnNlLG9uRmlyc3RVcGRhdGU6cCxtb2RpZmllcnM6QXJ9KSl9ZnVuY3Rpb24gWGUoKXttLnBvcHBlckluc3RhbmNlJiYobS5wb3BwZXJJbnN0YW5jZS5kZXN0cm95KCksbS5wb3BwZXJJbnN0YW5jZT1udWxsKX1mdW5jdGlvbiBaKCl7dmFyIEk9bS5wcm9wcy5hcHBlbmRUbyxKLHNlPVIoKTttLnByb3BzLmludGVyYWN0aXZlJiZJPT09Ynd8fEk9PT0icGFyZW50Ij9KPXNlLnBhcmVudE5vZGU6Sj13dyhJLFtzZV0pLEouY29udGFpbnMoeCl8fEouYXBwZW5kQ2hpbGQoeCksbS5zdGF0ZS5pc01vdW50ZWQ9ITAsR2UoKX1mdW5jdGlvbiBBZSgpe3JldHVybiBHZCh4LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXRpcHB5LXJvb3RdIikpfWZ1bmN0aW9uIFV0KEkpe20uY2xlYXJEZWxheVRpbWVvdXRzKCksSSYmTSgib25UcmlnZ2VyIixbbSxJXSksaigpO3ZhciBKPXooITApLHNlPUMoKSxfZT1zZVswXSx4ZT1zZVsxXTt3ci5pc1RvdWNoJiZfZT09PSJob2xkIiYmeGUmJihKPXhlKSxKP3I9c2V0VGltZW91dChmdW5jdGlvbigpe20uc2hvdygpfSxKKTptLnNob3coKX1mdW5jdGlvbiBlbihJKXtpZihtLmNsZWFyRGVsYXlUaW1lb3V0cygpLE0oIm9uVW50cmlnZ2VyIixbbSxJXSksIW0uc3RhdGUuaXNWaXNpYmxlKXtlZSgpO3JldHVybn1pZighKG0ucHJvcHMudHJpZ2dlci5pbmRleE9mKCJtb3VzZWVudGVyIik+PTAmJm0ucHJvcHMudHJpZ2dlci5pbmRleE9mKCJjbGljayIpPj0wJiZbIm1vdXNlbGVhdmUiLCJtb3VzZW1vdmUiXS5pbmRleE9mKEkudHlwZSk+PTAmJmkpKXt2YXIgSj16KCExKTtKP289c2V0VGltZW91dChmdW5jdGlvbigpe20uc3RhdGUuaXNWaXNpYmxlJiZtLmhpZGUoKX0sSik6YT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXttLmhpZGUoKX0pfX1mdW5jdGlvbiBwcigpe20uc3RhdGUuaXNFbmFibGVkPSEwfWZ1bmN0aW9uIEduKCl7bS5oaWRlKCksbS5zdGF0ZS5pc0VuYWJsZWQ9ITF9ZnVuY3Rpb24gVHIoKXtjbGVhclRpbWVvdXQociksY2xlYXJUaW1lb3V0KG8pLGNhbmNlbEFuaW1hdGlvbkZyYW1lKGEpfWZ1bmN0aW9uIERyKEkpe2lmKCFtLnN0YXRlLmlzRGVzdHJveWVkKXtNKCJvbkJlZm9yZVVwZGF0ZSIsW20sSV0pLHdlKCk7dmFyIEo9bS5wcm9wcyxzZT1mdyhlLE9iamVjdC5hc3NpZ24oe30sSixkdyhJKSx7aWdub3JlQXR0cmlidXRlczohMH0pKTttLnByb3BzPXNlLHBlKCksSi5pbnRlcmFjdGl2ZURlYm91bmNlIT09c2UuaW50ZXJhY3RpdmVEZWJvdW5jZSYmKE4oKSx5PXN3KHVlLHNlLmludGVyYWN0aXZlRGVib3VuY2UpKSxKLnRyaWdnZXJUYXJnZXQmJiFzZS50cmlnZ2VyVGFyZ2V0P2VpKEoudHJpZ2dlclRhcmdldCkuZm9yRWFjaChmdW5jdGlvbihfZSl7X2UucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIil9KTpzZS50cmlnZ2VyVGFyZ2V0JiZlLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpLEQoKSxuZSgpLEUmJkUoSixzZSksbS5wb3BwZXJJbnN0YW5jZSYmKEdlKCksQWUoKS5mb3JFYWNoKGZ1bmN0aW9uKF9lKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX2UuX3RpcHB5LnBvcHBlckluc3RhbmNlLmZvcmNlVXBkYXRlKX0pKSxNKCJvbkFmdGVyVXBkYXRlIixbbSxJXSl9fWZ1bmN0aW9uIFpyKEkpe20uc2V0UHJvcHMoe2NvbnRlbnQ6SX0pfWZ1bmN0aW9uIGhhKCl7dmFyIEk9bS5zdGF0ZS5pc1Zpc2libGUsSj1tLnN0YXRlLmlzRGVzdHJveWVkLHNlPSFtLnN0YXRlLmlzRW5hYmxlZCxfZT13ci5pc1RvdWNoJiYhbS5wcm9wcy50b3VjaCx4ZT1PZihtLnByb3BzLmR1cmF0aW9uLDAsbnIuZHVyYXRpb24pO2lmKCEoSXx8Snx8c2V8fF9lKSYmIVIoKS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikmJihNKCJvblNob3ciLFttXSwhMSksbS5wcm9wcy5vblNob3cobSkhPT0hMSkpe2lmKG0uc3RhdGUuaXNWaXNpYmxlPSEwLE8oKSYmKHguc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSIpLG5lKCksaigpLG0uc3RhdGUuaXNNb3VudGVkfHwoeC5zdHlsZS50cmFuc2l0aW9uPSJub25lIiksTygpKXt2YXIgU3Q9VigpLGhuPVN0LmJveCxmcj1TdC5jb250ZW50O0lmKFtobixmcl0sMCl9cD1mdW5jdGlvbigpe3ZhciBBcjtpZighKCFtLnN0YXRlLmlzVmlzaWJsZXx8ZCkpe2lmKGQ9ITAseC5vZmZzZXRIZWlnaHQseC5zdHlsZS50cmFuc2l0aW9uPW0ucHJvcHMubW92ZVRyYW5zaXRpb24sTygpJiZtLnByb3BzLmFuaW1hdGlvbil7dmFyIFBvPVYoKSxkZT1Qby5ib3gsQ2U9UG8uY29udGVudDtJZihbZGUsQ2VdLHhlKSxjdyhbZGUsQ2VdLCJ2aXNpYmxlIil9VygpLEQoKSxsdyhQZixtKSwoQXI9bS5wb3BwZXJJbnN0YW5jZSk9PW51bGx8fEFyLmZvcmNlVXBkYXRlKCksTSgib25Nb3VudCIsW21dKSxtLnByb3BzLmFuaW1hdGlvbiYmTygpJiZyZSh4ZSxmdW5jdGlvbigpe20uc3RhdGUuaXNTaG93bj0hMCxNKCJvblNob3duIixbbV0pfSl9fSxaKCl9fWZ1bmN0aW9uIFJvKCl7dmFyIEk9IW0uc3RhdGUuaXNWaXNpYmxlLEo9bS5zdGF0ZS5pc0Rlc3Ryb3llZCxzZT0hbS5zdGF0ZS5pc0VuYWJsZWQsX2U9T2YobS5wcm9wcy5kdXJhdGlvbiwxLG5yLmR1cmF0aW9uKTtpZighKEl8fEp8fHNlKSYmKE0oIm9uSGlkZSIsW21dLCExKSxtLnByb3BzLm9uSGlkZShtKSE9PSExKSl7aWYobS5zdGF0ZS5pc1Zpc2libGU9ITEsbS5zdGF0ZS5pc1Nob3duPSExLGQ9ITEsaT0hMSxPKCkmJih4LnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIpLE4oKSxlZSgpLG5lKCEwKSxPKCkpe3ZhciB4ZT1WKCksU3Q9eGUuYm94LGhuPXhlLmNvbnRlbnQ7bS5wcm9wcy5hbmltYXRpb24mJihJZihbU3QsaG5dLF9lKSxjdyhbU3QsaG5dLCJoaWRkZW4iKSl9VygpLEQoKSxtLnByb3BzLmFuaW1hdGlvbj9PKCkmJnEoX2UsbS51bm1vdW50KTptLnVubW91bnQoKX19ZnVuY3Rpb24gZW8oSSl7RigpLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIseSksbHcoS2QseSkseShJKX1mdW5jdGlvbiBiaSgpe20uc3RhdGUuaXNWaXNpYmxlJiZtLmhpZGUoKSxtLnN0YXRlLmlzTW91bnRlZCYmKFhlKCksQWUoKS5mb3JFYWNoKGZ1bmN0aW9uKEkpe0kuX3RpcHB5LnVubW91bnQoKX0pLHgucGFyZW50Tm9kZSYmeC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHgpLFBmPVBmLmZpbHRlcihmdW5jdGlvbihJKXtyZXR1cm4gSSE9PW19KSxtLnN0YXRlLmlzTW91bnRlZD0hMSxNKCJvbkhpZGRlbiIsW21dKSl9ZnVuY3Rpb24gd2koKXttLnN0YXRlLmlzRGVzdHJveWVkfHwobS5jbGVhckRlbGF5VGltZW91dHMoKSxtLnVubW91bnQoKSx3ZSgpLGRlbGV0ZSBlLl90aXBweSxtLnN0YXRlLmlzRGVzdHJveWVkPSEwLE0oIm9uRGVzdHJveSIsW21dKSl9fWZ1bmN0aW9uIHhzKGUsdCl7dD09PXZvaWQgMCYmKHQ9e30pO3ZhciBuPW5yLnBsdWdpbnMuY29uY2F0KHQucGx1Z2luc3x8W10pO3REKCk7dmFyIHI9T2JqZWN0LmFzc2lnbih7fSx0LHtwbHVnaW5zOm59KSxvPSRUKGUpO2lmKDApdmFyIGEsaTt2YXIgcz1vLnJlZHVjZShmdW5jdGlvbihsLGQpe3ZhciBjPWQmJnVEKGQscik7cmV0dXJuIGMmJmwucHVzaChjKSxsfSxbXSk7cmV0dXJuIFZkKGUpP3NbMF06c314cy5kZWZhdWx0UHJvcHM9bnI7eHMuc2V0RGVmYXVsdFByb3BzPXNEO3hzLmN1cnJlbnRJbnB1dD13cjt2YXIgbjM9T2JqZWN0LmFzc2lnbih7fSxtcyx7ZWZmZWN0OmZ1bmN0aW9uKHQpe3ZhciBuPXQuc3RhdGUscj17cG9wcGVyOntwb3NpdGlvbjpuLm9wdGlvbnMuc3RyYXRlZ3ksbGVmdDoiMCIsdG9wOiIwIixtYXJnaW46IjAifSxhcnJvdzp7cG9zaXRpb246ImFic29sdXRlIn0scmVmZXJlbmNlOnt9fTtPYmplY3QuYXNzaWduKG4uZWxlbWVudHMucG9wcGVyLnN0eWxlLHIucG9wcGVyKSxuLnN0eWxlcz1yLG4uZWxlbWVudHMuYXJyb3cmJk9iamVjdC5hc3NpZ24obi5lbGVtZW50cy5hcnJvdy5zdHlsZSxyLmFycm93KX19KTt4cy5zZXREZWZhdWx0UHJvcHMoe3JlbmRlcjpTd30pO3ZhciBTcz14cztmdW5jdGlvbiBCZigpe3JldHVybnthc3luYzohMSxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxob29rczpudWxsLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2lsZW50OiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbH19dmFyIGlhPUJmKCk7ZnVuY3Rpb24gQ3coZSl7aWE9ZX12YXIgVHM9e2V4ZWM6KCk9Pm51bGx9O2Z1bmN0aW9uIHplKGUsdD0iIil7bGV0IG49dHlwZW9mIGU9PSJzdHJpbmciP2U6ZS5zb3VyY2Uscj17cmVwbGFjZToobyxhKT0+e2xldCBpPXR5cGVvZiBhPT0ic3RyaW5nIj9hOmEuc291cmNlO3JldHVybiBpPWkucmVwbGFjZShRdC5jYXJldCwiJDEiKSxuPW4ucmVwbGFjZShvLGkpLHJ9LGdldFJlZ2V4OigpPT5uZXcgUmVnRXhwKG4sdCl9O3JldHVybiByfXZhciBRdD17Y29kZVJlbW92ZUluZGVudDovXig/OiB7MSw0fXwgezAsM31cdCkvZ20sb3V0cHV0TGlua1JlcGxhY2U6L1xcKFtcW1xdXSkvZyxpbmRlbnRDb2RlQ29tcGVuc2F0aW9uOi9eKFxzKykoPzpgYGApLyxiZWdpbm5pbmdTcGFjZTovXlxzKy8sZW5kaW5nSGFzaDovIyQvLHN0YXJ0aW5nU3BhY2VDaGFyOi9eIC8sZW5kaW5nU3BhY2VDaGFyOi8gJC8sbm9uU3BhY2VDaGFyOi9bXiBdLyxuZXdMaW5lQ2hhckdsb2JhbDovXG4vZyx0YWJDaGFyR2xvYmFsOi9cdC9nLG11bHRpcGxlU3BhY2VHbG9iYWw6L1xzKy9nLGJsYW5rTGluZTovXlsgXHRdKiQvLGRvdWJsZUJsYW5rTGluZTovXG5bIFx0XSpcblsgXHRdKiQvLGJsb2NrcXVvdGVTdGFydDovXiB7MCwzfT4vLGJsb2NrcXVvdGVTZXRleHRSZXBsYWNlOi9cbiB7MCwzfSgoPzo9K3wtKykgKikoPz1cbnwkKS9nLGJsb2NrcXVvdGVTZXRleHRSZXBsYWNlMjovXiB7MCwzfT5bIFx0XT8vZ20sbGlzdFJlcGxhY2VUYWJzOi9eXHQrLyxsaXN0UmVwbGFjZU5lc3Rpbmc6L14gezEsNH0oPz0oIHs0fSkqW14gXSkvZyxsaXN0SXNUYXNrOi9eXFtbIHhYXVxdIC8sbGlzdFJlcGxhY2VUYXNrOi9eXFtbIHhYXVxdICsvLGFueUxpbmU6L1xuLipcbi8saHJlZkJyYWNrZXRzOi9ePCguKik+JC8sdGFibGVEZWxpbWl0ZXI6L1s6fF0vLHRhYmxlQWxpZ25DaGFyczovXlx8fFx8ICokL2csdGFibGVSb3dCbGFua0xpbmU6L1xuWyBcdF0qJC8sdGFibGVBbGlnblJpZ2h0Oi9eICotKzogKiQvLHRhYmxlQWxpZ25DZW50ZXI6L14gKjotKzogKiQvLHRhYmxlQWxpZ25MZWZ0Oi9eICo6LSsgKiQvLHN0YXJ0QVRhZzovXjxhIC9pLGVuZEFUYWc6L148XC9hPi9pLHN0YXJ0UHJlU2NyaXB0VGFnOi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLGVuZFByZVNjcmlwdFRhZzovXjxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLHN0YXJ0QW5nbGVCcmFja2V0Oi9ePC8sZW5kQW5nbGVCcmFja2V0Oi8+JC8scGVkYW50aWNIcmVmVGl0bGU6L14oW14nIl0qW15cc10pXHMrKFsnIl0pKC4qKVwyLyx1bmljb2RlQWxwaGFOdW1lcmljOi9bXHB7TH1ccHtOfV0vdSxlc2NhcGVUZXN0Oi9bJjw+IiddLyxlc2NhcGVSZXBsYWNlOi9bJjw+IiddL2csZXNjYXBlVGVzdE5vRW5jb2RlOi9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XHcrKTspLyxlc2NhcGVSZXBsYWNlTm9FbmNvZGU6L1s8PiInXXwmKD8hKCNcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcdyspOykvZyx1bmVzY2FwZVRlc3Q6LyYoIyg/OlxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/Olx3KykpOz8vaWcsY2FyZXQ6LyhefFteXFtdKVxeL2cscGVyY2VudERlY29kZTovJTI1L2csZmluZFBpcGU6L1x8L2csc3BsaXRQaXBlOi8gXHwvLHNsYXNoUGlwZTovXFxcfC9nLGNhcnJpYWdlUmV0dXJuOi9cclxufFxyL2csc3BhY2VMaW5lOi9eICskL2dtLG5vdFNwYWNlU3RhcnQ6L15cUyovLGVuZGluZ05ld2xpbmU6L1xuJC8sbGlzdEl0ZW1SZWdleDplPT5uZXcgUmVnRXhwKGBeKCB7MCwzfSR7ZX0pKCg/OlsJIF1bXlxcbl0qKT8oPzpcXG58JCkpYCksbmV4dEJ1bGxldFJlZ2V4OmU9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLGUtMSl9fSg/OlsqKy1dfFxcZHsxLDl9Wy4pXSkoKD86WyAJXVteXFxuXSopPyg/OlxcbnwkKSlgKSxoclJlZ2V4OmU9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLGUtMSl9fSgoPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JClgKSxmZW5jZXNCZWdpblJlZ2V4OmU9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLGUtMSl9fSg/OlxgXGBcYHx+fn4pYCksaGVhZGluZ0JlZ2luUmVnZXg6ZT0+bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsZS0xKX19I2ApLGh0bWxCZWdpblJlZ2V4OmU9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLGUtMSl9fTwoPzpbYS16XS4qPnwhLS0pYCwiaSIpfSxwRD0vXig/OlsgXHRdKig/OlxufCQpKSsvLGZEPS9eKCg/OiB7NH18IHswLDN9XHQpW15cbl0rKD86XG4oPzpbIFx0XSooPzpcbnwkKSkqKT8pKy8sbUQ9L14gezAsM30oYHszLH0oPz1bXmBcbl0qKD86XG58JCkpfH57Myx9KShbXlxuXSopKD86XG58JCkoPzp8KFtcc1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxEcz0vXiB7MCwzfSgoPzotW1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/OlwqWyBcdF0qKXszLH0pKD86XG4rfCQpLyxoRD0vXiB7MCwzfSgjezEsNn0pKD89XHN8JCkoLiopKD86XG4rfCQpLyxIZj0vKD86WyorLV18XGR7MSw5fVsuKV0pLyxNdz0vXig/IWJ1bGwgfGJsb2NrQ29kZXxmZW5jZXN8YmxvY2txdW90ZXxoZWFkaW5nfGh0bWx8dGFibGUpKCg/Oi58XG4oPyFccyo/XG58YnVsbCB8YmxvY2tDb2RlfGZlbmNlc3xibG9ja3F1b3RlfGhlYWRpbmd8aHRtbHx0YWJsZSkpKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLE93PXplKE13KS5yZXBsYWNlKC9idWxsL2csSGYpLnJlcGxhY2UoL2Jsb2NrQ29kZS9nLC8oPzogezR9fCB7MCwzfVx0KS8pLnJlcGxhY2UoL2ZlbmNlcy9nLC8gezAsM30oPzpgezMsfXx+ezMsfSkvKS5yZXBsYWNlKC9ibG9ja3F1b3RlL2csLyB7MCwzfT4vKS5yZXBsYWNlKC9oZWFkaW5nL2csLyB7MCwzfSN7MSw2fS8pLnJlcGxhY2UoL2h0bWwvZywvIHswLDN9PFteXG4+XSs+XG4vKS5yZXBsYWNlKC9cfHRhYmxlL2csIiIpLmdldFJlZ2V4KCksZ0Q9emUoTXcpLnJlcGxhY2UoL2J1bGwvZyxIZikucmVwbGFjZSgvYmxvY2tDb2RlL2csLyg/OiB7NH18IHswLDN9XHQpLykucmVwbGFjZSgvZmVuY2VzL2csLyB7MCwzfSg/OmB7Myx9fH57Myx9KS8pLnJlcGxhY2UoL2Jsb2NrcXVvdGUvZywvIHswLDN9Pi8pLnJlcGxhY2UoL2hlYWRpbmcvZywvIHswLDN9I3sxLDZ9LykucmVwbGFjZSgvaHRtbC9nLC8gezAsM308W15cbj5dKz5cbi8pLnJlcGxhY2UoL3RhYmxlL2csLyB7MCwzfVx8Pyg/Ols6XC0gXSpcfCkrW1w6XC0gXSpcbi8pLmdldFJlZ2V4KCksS2Y9L14oW15cbl0rKD86XG4oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8seUQ9L15bXlxuXSsvLEdmPS8oPyFccypcXSkoPzpcXC58W15cW1xdXFxdKSsvLHZEPXplKC9eIHswLDN9XFsobGFiZWwpXF06ICooPzpcblsgXHRdKik/KFtePFxzXVteXHNdKnw8Lio/PikoPzooPzogKyg/OlxuWyBcdF0qKT98ICpcblsgXHRdKikodGl0bGUpKT8gKig/OlxuK3wkKS8pLnJlcGxhY2UoImxhYmVsIixHZikucmVwbGFjZSgidGl0bGUiLC8oPzoiKD86XFwiP3xbXiJcXF0pKiJ8J1teJ1xuXSooPzpcblteJ1xuXSspKlxuPyd8XChbXigpXSpcKSkvKS5nZXRSZWdleCgpLGJEPXplKC9eKCB7MCwzfWJ1bGwpKFsgXHRdW15cbl0rPyk/KD86XG58JCkvKS5yZXBsYWNlKC9idWxsL2csSGYpLmdldFJlZ2V4KCksSmQ9ImFkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoWzEtNl18aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG1ldGF8bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBhcmFtfHNlYXJjaHxzZWN0aW9ufHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwiLFZmPS88IS0tKD86LT8+fFtcc1xTXSo/KD86LS0+fCQpKS8sd0Q9emUoIl4gezAsM30oPzo8KHNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW1xccz5dW1xcc1xcU10qPyg/OjwvXFwxPlteXFxuXSpcXG4rfCQpfGNvbW1lbnRbXlxcbl0qKFxcbit8JCl8PFxcP1tcXHNcXFNdKj8oPzpcXD8+XFxuKnwkKXw8IVtBLVpdW1xcc1xcU10qPyg/Oj5cXG4qfCQpfDwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/KD86XFxdXFxdPlxcbip8JCl8PC8/KHRhZykoPzogK3xcXG58Lz8+KVtcXHNcXFNdKj8oPzooPzpcXG5bIAldKikrXFxufCQpfDwoPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKShbYS16XVtcXHctXSopKD86YXR0cmlidXRlKSo/ICovPz4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG5bIAldKikrXFxufCQpfDwvKD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbYS16XVtcXHctXSpcXHMqPig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcblsgCV0qKStcXG58JCkpIiwiaSIpLnJlcGxhY2UoImNvbW1lbnQiLFZmKS5yZXBsYWNlKCJ0YWciLEpkKS5yZXBsYWNlKCJhdHRyaWJ1dGUiLC8gK1thLXpBLVo6X11bXHcuOi1dKig/OiAqPSAqIlteIlxuXSoifCAqPSAqJ1teJ1xuXSonfCAqPSAqW15ccyInPTw+YF0rKT8vKS5nZXRSZWdleCgpLEl3PXplKEtmKS5yZXBsYWNlKCJociIsRHMpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0oPzpcXHN8JCkiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsSmQpLmdldFJlZ2V4KCksa0Q9emUoL14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8pLnJlcGxhY2UoInBhcmFncmFwaCIsSXcpLmdldFJlZ2V4KCksamY9e2Jsb2NrcXVvdGU6a0QsY29kZTpmRCxkZWY6dkQsZmVuY2VzOm1ELGhlYWRpbmc6aEQsaHI6RHMsaHRtbDp3RCxsaGVhZGluZzpPdyxsaXN0OmJELG5ld2xpbmU6cEQscGFyYWdyYXBoOkl3LHRhYmxlOlRzLHRleHQ6eUR9LEV3PXplKCJeICooW15cXG4gXS4qKVxcbiB7MCwzfSgoPzpcXHwgKik/Oj8tKzo/ICooPzpcXHwgKjo/LSs6PyAqKSooPzpcXHwgKik/KSg/OlxcbigoPzooPyEgKlxcbnxocnxoZWFkaW5nfGJsb2NrcXVvdGV8Y29kZXxmZW5jZXN8bGlzdHxodG1sKS4qKD86XFxufCQpKSopXFxuKnwkKSIpLnJlcGxhY2UoImhyIixEcykucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSg/Olxcc3wkKSIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiY29kZSIsIig/OiB7NH18IHswLDN9CSlbXlxcbl0iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLEpkKS5nZXRSZWdleCgpLHhEPXsuLi5qZixsaGVhZGluZzpnRCx0YWJsZTpFdyxwYXJhZ3JhcGg6emUoS2YpLnJlcGxhY2UoImhyIixEcykucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSg/Olxcc3wkKSIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2UoInRhYmxlIixFdykucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLEpkKS5nZXRSZWdleCgpfSxTRD17Li4uamYsaHRtbDp6ZShgXiAqKD86Y29tbWVudCAqKD86XFxufFxccyokKXw8KHRhZylbXFxzXFxTXSs/PC9cXDE+ICooPzpcXG57Mix9fFxccyokKXw8dGFnKD86IlteIl0qInwnW14nXSonfFxcc1teJyIvPlxcc10qKSo/Lz8+ICooPzpcXG57Mix9fFxccyokKSlgKS5yZXBsYWNlKCJjb21tZW50IixWZikucmVwbGFjZSgvdGFnL2csIig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOnxbXlxcd1xcc0BdKkApXFxiIikuZ2V0UmVnZXgoKSxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogKyhbIihdW15cbl0rWyIpXSkpPyAqKD86XG4rfCQpLyxoZWFkaW5nOi9eKCN7MSw2fSkoLiopKD86XG4rfCQpLyxmZW5jZXM6VHMsbGhlYWRpbmc6L14oLis/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6emUoS2YpLnJlcGxhY2UoImhyIixEcykucmVwbGFjZSgiaGVhZGluZyIsYCAqI3sxLDZ9ICpbXgpdYCkucmVwbGFjZSgibGhlYWRpbmciLE93KS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoInxmZW5jZXMiLCIiKS5yZXBsYWNlKCJ8bGlzdCIsIiIpLnJlcGxhY2UoInxodG1sIiwiIikucmVwbGFjZSgifHRhZyIsIiIpLmdldFJlZ2V4KCl9LEVEPS9eXFwoWyEiIyQlJicoKSorLFwtLi86Ozw9Pj9AXFtcXVxcXl9ge3x9fl0pLyxORD0vXihgKykoW15gXXxbXmBdW1xzXFNdKj9bXmBdKVwxKD8hYCkvLFJ3PS9eKCB7Mix9fFxcKVxuKD8hXHMqJCkvLFREPS9eKGArfFteYF0pKD86KD89IHsyLH1cbil8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCpfXXxcYl98JCl8W14gXSg/PSB7Mix9XG4pKSkvLFFkPS9bXHB7UH1ccHtTfV0vdSxZZj0vW1xzXHB7UH1ccHtTfV0vdSxQdz0vW15cc1xwe1B9XHB7U31dL3UsREQ9emUoL14oKD8hWypfXSlwdW5jdFNwYWNlKS8sInUiKS5yZXBsYWNlKC9wdW5jdFNwYWNlL2csWWYpLmdldFJlZ2V4KCksTHc9Lyg/IX4pW1xwe1B9XHB7U31dL3UsQUQ9Lyg/IX4pW1xzXHB7UH1ccHtTfV0vdSxDRD0vKD86W15cc1xwe1B9XHB7U31dfH4pL3UsTUQ9L1xbW15bXF1dKj9cXVwoKD86XFwufFteXFxcKFwpXXxcKCg/OlxcLnxbXlxcXChcKV0pKlwpKSpcKXxgW15gXSo/YHw8W148Pl0qPz4vZyxfdz0vXig/OlwqKyg/OigoPyFcKilwdW5jdCl8W15ccypdKSl8Xl8rKD86KCg/IV8pcHVuY3QpfChbXlxzX10pKS8sT0Q9emUoX3csInUiKS5yZXBsYWNlKC9wdW5jdC9nLFFkKS5nZXRSZWdleCgpLElEPXplKF93LCJ1IikucmVwbGFjZSgvcHVuY3QvZyxMdykuZ2V0UmVnZXgoKSxVdz0iXlteXypdKj9fX1teXypdKj9cXCpbXl8qXSo/KD89X18pfFteKl0rKD89W14qXSl8KD8hXFwqKXB1bmN0KFxcKispKD89W1xcc118JCl8bm90UHVuY3RTcGFjZShcXCorKSg/IVxcKikoPz1wdW5jdFNwYWNlfCQpfCg/IVxcKilwdW5jdFNwYWNlKFxcKispKD89bm90UHVuY3RTcGFjZSl8W1xcc10oXFwqKykoPyFcXCopKD89cHVuY3QpfCg/IVxcKilwdW5jdChcXCorKSg/IVxcKikoPz1wdW5jdCl8bm90UHVuY3RTcGFjZShcXCorKSg/PW5vdFB1bmN0U3BhY2UpIixSRD16ZShVdywiZ3UiKS5yZXBsYWNlKC9ub3RQdW5jdFNwYWNlL2csUHcpLnJlcGxhY2UoL3B1bmN0U3BhY2UvZyxZZikucmVwbGFjZSgvcHVuY3QvZyxRZCkuZ2V0UmVnZXgoKSxQRD16ZShVdywiZ3UiKS5yZXBsYWNlKC9ub3RQdW5jdFNwYWNlL2csQ0QpLnJlcGxhY2UoL3B1bmN0U3BhY2UvZyxBRCkucmVwbGFjZSgvcHVuY3QvZyxMdykuZ2V0UmVnZXgoKSxMRD16ZSgiXlteXypdKj9cXCpcXCpbXl8qXSo/X1teXypdKj8oPz1cXCpcXCopfFteX10rKD89W15fXSl8KD8hXylwdW5jdChfKykoPz1bXFxzXXwkKXxub3RQdW5jdFNwYWNlKF8rKSg/IV8pKD89cHVuY3RTcGFjZXwkKXwoPyFfKXB1bmN0U3BhY2UoXyspKD89bm90UHVuY3RTcGFjZSl8W1xcc10oXyspKD8hXykoPz1wdW5jdCl8KD8hXylwdW5jdChfKykoPyFfKSg/PXB1bmN0KSIsImd1IikucmVwbGFjZSgvbm90UHVuY3RTcGFjZS9nLFB3KS5yZXBsYWNlKC9wdW5jdFNwYWNlL2csWWYpLnJlcGxhY2UoL3B1bmN0L2csUWQpLmdldFJlZ2V4KCksX0Q9emUoL1xcKHB1bmN0KS8sImd1IikucmVwbGFjZSgvcHVuY3QvZyxRZCkuZ2V0UmVnZXgoKSxVRD16ZSgvXjwoc2NoZW1lOlteXHNceDAwLVx4MWY8Pl0qfGVtYWlsKT4vKS5yZXBsYWNlKCJzY2hlbWUiLC9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9LykucmVwbGFjZSgiZW1haWwiLC9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8pLmdldFJlZ2V4KCksRkQ9emUoVmYpLnJlcGxhY2UoIig/Oi0tPnwkKSIsIi0tPiIpLmdldFJlZ2V4KCksekQ9emUoIl5jb21tZW50fF48L1thLXpBLVpdW1xcdzotXSpcXHMqPnxePFthLXpBLVpdW1xcdy1dKig/OmF0dHJpYnV0ZSkqP1xccyovPz58XjxcXD9bXFxzXFxTXSo/XFw/PnxePCFbYS16QS1aXStcXHNbXFxzXFxTXSo/PnxePCFcXFtDREFUQVxcW1tcXHNcXFNdKj9cXF1cXF0+IikucmVwbGFjZSgiY29tbWVudCIsRkQpLnJlcGxhY2UoImF0dHJpYnV0ZSIsL1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCkscWQ9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8sV0Q9emUoL14hP1xbKGxhYmVsKVxdXChccyooaHJlZikoPzooPzpbIFx0XSooPzpcblsgXHRdKik/KSh0aXRsZSkpP1xzKlwpLykucmVwbGFjZSgibGFiZWwiLHFkKS5yZXBsYWNlKCJocmVmIiwvPCg/OlxcLnxbXlxuPD5cXF0pKz58W14gXHRcblx4MDAtXHgxZl0qLykucmVwbGFjZSgidGl0bGUiLC8iKD86XFwiP3xbXiJcXF0pKiJ8Jyg/OlxcJz98W14nXFxdKSonfFwoKD86XFxcKT98W14pXFxdKSpcKS8pLmdldFJlZ2V4KCksRnc9emUoL14hP1xbKGxhYmVsKVxdXFsocmVmKVxdLykucmVwbGFjZSgibGFiZWwiLHFkKS5yZXBsYWNlKCJyZWYiLEdmKS5nZXRSZWdleCgpLHp3PXplKC9eIT9cWyhyZWYpXF0oPzpcW1xdKT8vKS5yZXBsYWNlKCJyZWYiLEdmKS5nZXRSZWdleCgpLEJEPXplKCJyZWZsaW5rfG5vbGluayg/IVxcKCkiLCJnIikucmVwbGFjZSgicmVmbGluayIsRncpLnJlcGxhY2UoIm5vbGluayIsencpLmdldFJlZ2V4KCkscWY9e19iYWNrcGVkYWw6VHMsYW55UHVuY3R1YXRpb246X0QsYXV0b2xpbms6VUQsYmxvY2tTa2lwOk1ELGJyOlJ3LGNvZGU6TkQsZGVsOlRzLGVtU3Ryb25nTERlbGltOk9ELGVtU3Ryb25nUkRlbGltQXN0OlJELGVtU3Ryb25nUkRlbGltVW5kOkxELGVzY2FwZTpFRCxsaW5rOldELG5vbGluazp6dyxwdW5jdHVhdGlvbjpERCxyZWZsaW5rOkZ3LHJlZmxpbmtTZWFyY2g6QkQsdGFnOnpELHRleHQ6VEQsdXJsOlRzfSxIRD17Li4ucWYsbGluazp6ZSgvXiE/XFsobGFiZWwpXF1cKCguKj8pXCkvKS5yZXBsYWNlKCJsYWJlbCIscWQpLmdldFJlZ2V4KCkscmVmbGluazp6ZSgvXiE/XFsobGFiZWwpXF1ccypcWyhbXlxdXSopXF0vKS5yZXBsYWNlKCJsYWJlbCIscWQpLmdldFJlZ2V4KCl9LEZmPXsuLi5xZixlbVN0cm9uZ1JEZWxpbUFzdDpQRCxlbVN0cm9uZ0xEZWxpbTpJRCx1cmw6emUoL14oKD86ZnRwfGh0dHBzPyk6XC9cL3x3d3dcLikoPzpbYS16QS1aMC05XC1dK1wuPykrW15cczxdKnxeZW1haWwvLCJpIikucmVwbGFjZSgiZW1haWwiLC9bQS1aYS16MC05Ll8rLV0rKEApW2EtekEtWjAtOS1fXSsoPzpcLlthLXpBLVowLTktX10qW2EtekEtWjAtOV0pKyg/IVstX10pLykuZ2V0UmVnZXgoKSxfYmFja3BlZGFsOi8oPzpbXj8hLiw6OypfJyJ+KCkmXSt8XChbXildKlwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6OypfJyJ+KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxzfl0pKCg/OlxcLnxbXlxcXSkqPyg/OlxcLnxbXlxzflxcXSkpXDEoPz1bXn5dfCQpLyx0ZXh0Oi9eKFtgfl0rfFteYH5dKSg/Oig/PSB7Mix9XG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApfFtcc1xTXSo/KD86KD89W1xcPCFcW2Aqfl9dfFxiX3xodHRwcz86XC9cL3xmdHA6XC9cL3x3d3dcLnwkKXxbXiBdKD89IHsyLH1cbil8W15hLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCkpKS99LEtEPXsuLi5GZixicjp6ZShSdykucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdleCgpLHRleHQ6emUoRmYudGV4dCkucmVwbGFjZSgiXFxiXyIsIlxcYl98IHsyLH1cXG4iKS5yZXBsYWNlKC9cezIsXH0vZywiKiIpLmdldFJlZ2V4KCl9LGpkPXtub3JtYWw6amYsZ2ZtOnhELHBlZGFudGljOlNEfSxFcz17bm9ybWFsOnFmLGdmbTpGZixicmVha3M6S0QscGVkYW50aWM6SER9LEdEPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxOdz1lPT5HRFtlXTtmdW5jdGlvbiBrcihlLHQpe2lmKHQpe2lmKFF0LmVzY2FwZVRlc3QudGVzdChlKSlyZXR1cm4gZS5yZXBsYWNlKFF0LmVzY2FwZVJlcGxhY2UsTncpfWVsc2UgaWYoUXQuZXNjYXBlVGVzdE5vRW5jb2RlLnRlc3QoZSkpcmV0dXJuIGUucmVwbGFjZShRdC5lc2NhcGVSZXBsYWNlTm9FbmNvZGUsTncpO3JldHVybiBlfWZ1bmN0aW9uIFR3KGUpe3RyeXtlPWVuY29kZVVSSShlKS5yZXBsYWNlKFF0LnBlcmNlbnREZWNvZGUsIiUiKX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gZX1mdW5jdGlvbiBEdyhlLHQpe2xldCBuPWUucmVwbGFjZShRdC5maW5kUGlwZSwoYSxpLHMpPT57bGV0IGw9ITEsZD1pO2Zvcig7LS1kPj0wJiZzW2RdPT09IlxcIjspbD0hbDtyZXR1cm4gbD8ifCI6IiB8In0pLHI9bi5zcGxpdChRdC5zcGxpdFBpcGUpLG89MDtpZihyWzBdLnRyaW0oKXx8ci5zaGlmdCgpLHIubGVuZ3RoPjAmJiFyLmF0KC0xKT8udHJpbSgpJiZyLnBvcCgpLHQpaWYoci5sZW5ndGg+dClyLnNwbGljZSh0KTtlbHNlIGZvcig7ci5sZW5ndGg8dDspci5wdXNoKCIiKTtmb3IoO288ci5sZW5ndGg7bysrKXJbb109cltvXS50cmltKCkucmVwbGFjZShRdC5zbGFzaFBpcGUsInwiKTtyZXR1cm4gcn1mdW5jdGlvbiBOcyhlLHQsbil7bGV0IHI9ZS5sZW5ndGg7aWYocj09PTApcmV0dXJuIiI7bGV0IG89MDtmb3IoO288cjspe2xldCBhPWUuY2hhckF0KHItby0xKTtpZihhPT09dCYmIW4pbysrO2Vsc2UgaWYoYSE9PXQmJm4pbysrO2Vsc2UgYnJlYWt9cmV0dXJuIGUuc2xpY2UoMCxyLW8pfWZ1bmN0aW9uIFZEKGUsdCl7aWYoZS5pbmRleE9mKHRbMV0pPT09LTEpcmV0dXJuLTE7bGV0IG49MDtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdPT09IlxcIilyKys7ZWxzZSBpZihlW3JdPT09dFswXSluKys7ZWxzZSBpZihlW3JdPT09dFsxXSYmKG4tLSxuPDApKXJldHVybiByO3JldHVybiBuPjA/LTI6LTF9ZnVuY3Rpb24gQXcoZSx0LG4scixvKXtsZXQgYT10LmhyZWYsaT10LnRpdGxlfHxudWxsLHM9ZVsxXS5yZXBsYWNlKG8ub3RoZXIub3V0cHV0TGlua1JlcGxhY2UsIiQxIik7ci5zdGF0ZS5pbkxpbms9ITA7bGV0IGw9e3R5cGU6ZVswXS5jaGFyQXQoMCk9PT0iISI/ImltYWdlIjoibGluayIscmF3Om4saHJlZjphLHRpdGxlOmksdGV4dDpzLHRva2VuczpyLmlubGluZVRva2VucyhzKX07cmV0dXJuIHIuc3RhdGUuaW5MaW5rPSExLGx9ZnVuY3Rpb24gakQoZSx0LG4pe2xldCByPWUubWF0Y2gobi5vdGhlci5pbmRlbnRDb2RlQ29tcGVuc2F0aW9uKTtpZihyPT09bnVsbClyZXR1cm4gdDtsZXQgbz1yWzFdO3JldHVybiB0LnNwbGl0KGAKYCkubWFwKGE9PntsZXQgaT1hLm1hdGNoKG4ub3RoZXIuYmVnaW5uaW5nU3BhY2UpO2lmKGk9PT1udWxsKXJldHVybiBhO2xldFtzXT1pO3JldHVybiBzLmxlbmd0aD49by5sZW5ndGg/YS5zbGljZShvLmxlbmd0aCk6YX0pLmpvaW4oYApgKX12YXIgWGQ9Y2xhc3N7b3B0aW9ucztydWxlcztsZXhlcjtjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZXx8aWF9c3BhY2UoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWMoZSk7aWYodCYmdFswXS5sZW5ndGg+MClyZXR1cm57dHlwZToic3BhY2UiLHJhdzp0WzBdfX1jb2RlKGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2suY29kZS5leGVjKGUpO2lmKHQpe2xldCBuPXRbMF0ucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmNvZGVSZW1vdmVJbmRlbnQsIiIpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6dFswXSxjb2RlQmxvY2tTdHlsZToiaW5kZW50ZWQiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP246TnMobixgCmApfX19ZmVuY2VzKGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2suZmVuY2VzLmV4ZWMoZSk7aWYodCl7bGV0IG49dFswXSxyPWpEKG4sdFszXXx8IiIsdGhpcy5ydWxlcyk7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzpuLGxhbmc6dFsyXT90WzJdLnRyaW0oKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCIkMSIpOnRbMl0sdGV4dDpyfX19aGVhZGluZyhlKXtsZXQgdD10aGlzLnJ1bGVzLmJsb2NrLmhlYWRpbmcuZXhlYyhlKTtpZih0KXtsZXQgbj10WzJdLnRyaW0oKTtpZih0aGlzLnJ1bGVzLm90aGVyLmVuZGluZ0hhc2gudGVzdChuKSl7bGV0IHI9TnMobiwiIyIpOyh0aGlzLm9wdGlvbnMucGVkYW50aWN8fCFyfHx0aGlzLnJ1bGVzLm90aGVyLmVuZGluZ1NwYWNlQ2hhci50ZXN0KHIpKSYmKG49ci50cmltKCkpfXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6dFswXSxkZXB0aDp0WzFdLmxlbmd0aCx0ZXh0Om4sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKG4pfX19aHIoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay5oci5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6ImhyIixyYXc6TnModFswXSxgCmApfX1ibG9ja3F1b3RlKGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2suYmxvY2txdW90ZS5leGVjKGUpO2lmKHQpe2xldCBuPU5zKHRbMF0sYApgKS5zcGxpdChgCmApLHI9IiIsbz0iIixhPVtdO2Zvcig7bi5sZW5ndGg+MDspe2xldCBpPSExLHM9W10sbDtmb3IobD0wO2w8bi5sZW5ndGg7bCsrKWlmKHRoaXMucnVsZXMub3RoZXIuYmxvY2txdW90ZVN0YXJ0LnRlc3QobltsXSkpcy5wdXNoKG5bbF0pLGk9ITA7ZWxzZSBpZighaSlzLnB1c2gobltsXSk7ZWxzZSBicmVhaztuPW4uc2xpY2UobCk7bGV0IGQ9cy5qb2luKGAKYCksYz1kLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5ibG9ja3F1b3RlU2V0ZXh0UmVwbGFjZSxgCiAgICAkMWApLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5ibG9ja3F1b3RlU2V0ZXh0UmVwbGFjZTIsIiIpO3I9cj9gJHtyfQoke2R9YDpkLG89bz9gJHtvfQoke2N9YDpjO2xldCB1PXRoaXMubGV4ZXIuc3RhdGUudG9wO2lmKHRoaXMubGV4ZXIuc3RhdGUudG9wPSEwLHRoaXMubGV4ZXIuYmxvY2tUb2tlbnMoYyxhLCEwKSx0aGlzLmxleGVyLnN0YXRlLnRvcD11LG4ubGVuZ3RoPT09MClicmVhaztsZXQgcD1hLmF0KC0xKTtpZihwPy50eXBlPT09ImNvZGUiKWJyZWFrO2lmKHA/LnR5cGU9PT0iYmxvY2txdW90ZSIpe2xldCBmPXAseT1mLnJhdytgCmArbi5qb2luKGAKYCksdj10aGlzLmJsb2NrcXVvdGUoeSk7YVthLmxlbmd0aC0xXT12LHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC1mLnJhdy5sZW5ndGgpK3YucmF3LG89by5zdWJzdHJpbmcoMCxvLmxlbmd0aC1mLnRleHQubGVuZ3RoKSt2LnRleHQ7YnJlYWt9ZWxzZSBpZihwPy50eXBlPT09Imxpc3QiKXtsZXQgZj1wLHk9Zi5yYXcrYApgK24uam9pbihgCmApLHY9dGhpcy5saXN0KHkpO2FbYS5sZW5ndGgtMV09dixyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtcC5yYXcubGVuZ3RoKSt2LnJhdyxvPW8uc3Vic3RyaW5nKDAsby5sZW5ndGgtZi5yYXcubGVuZ3RoKSt2LnJhdyxuPXkuc3Vic3RyaW5nKGEuYXQoLTEpLnJhdy5sZW5ndGgpLnNwbGl0KGAKYCk7Y29udGludWV9fXJldHVybnt0eXBlOiJibG9ja3F1b3RlIixyYXc6cix0b2tlbnM6YSx0ZXh0Om99fX1saXN0KGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKGUpO2lmKHQpe2xldCBuPXRbMV0udHJpbSgpLHI9bi5sZW5ndGg+MSxvPXt0eXBlOiJsaXN0IixyYXc6IiIsb3JkZXJlZDpyLHN0YXJ0OnI/K24uc2xpY2UoMCwtMSk6IiIsbG9vc2U6ITEsaXRlbXM6W119O249cj9gXFxkezEsOX1cXCR7bi5zbGljZSgtMSl9YDpgXFwke259YCx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihuPXI/bjoiWyorLV0iKTtsZXQgYT10aGlzLnJ1bGVzLm90aGVyLmxpc3RJdGVtUmVnZXgobiksaT0hMTtmb3IoO2U7KXtsZXQgbD0hMSxkPSIiLGM9IiI7aWYoISh0PWEuZXhlYyhlKSl8fHRoaXMucnVsZXMuYmxvY2suaHIudGVzdChlKSlicmVhaztkPXRbMF0sZT1lLnN1YnN0cmluZyhkLmxlbmd0aCk7bGV0IHU9dFsyXS5zcGxpdChgCmAsMSlbMF0ucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmxpc3RSZXBsYWNlVGFicyxnPT4iICIucmVwZWF0KDMqZy5sZW5ndGgpKSxwPWUuc3BsaXQoYApgLDEpWzBdLGY9IXUudHJpbSgpLHk9MDtpZih0aGlzLm9wdGlvbnMucGVkYW50aWM/KHk9MixjPXUudHJpbVN0YXJ0KCkpOmY/eT10WzFdLmxlbmd0aCsxOih5PXRbMl0uc2VhcmNoKHRoaXMucnVsZXMub3RoZXIubm9uU3BhY2VDaGFyKSx5PXk+ND8xOnksYz11LnNsaWNlKHkpLHkrPXRbMV0ubGVuZ3RoKSxmJiZ0aGlzLnJ1bGVzLm90aGVyLmJsYW5rTGluZS50ZXN0KHApJiYoZCs9cCtgCmAsZT1lLnN1YnN0cmluZyhwLmxlbmd0aCsxKSxsPSEwKSwhbCl7bGV0IGc9dGhpcy5ydWxlcy5vdGhlci5uZXh0QnVsbGV0UmVnZXgoeSksaD10aGlzLnJ1bGVzLm90aGVyLmhyUmVnZXgoeSksYj10aGlzLnJ1bGVzLm90aGVyLmZlbmNlc0JlZ2luUmVnZXgoeSksbT10aGlzLnJ1bGVzLm90aGVyLmhlYWRpbmdCZWdpblJlZ2V4KHkpLFM9dGhpcy5ydWxlcy5vdGhlci5odG1sQmVnaW5SZWdleCh5KTtmb3IoO2U7KXtsZXQgeD1lLnNwbGl0KGAKYCwxKVswXSxFO2lmKHA9eCx0aGlzLm9wdGlvbnMucGVkYW50aWM/KHA9cC5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIubGlzdFJlcGxhY2VOZXN0aW5nLCIgICIpLEU9cCk6RT1wLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci50YWJDaGFyR2xvYmFsLCIgICAgIiksYi50ZXN0KHApfHxtLnRlc3QocCl8fFMudGVzdChwKXx8Zy50ZXN0KHApfHxoLnRlc3QocCkpYnJlYWs7aWYoRS5zZWFyY2godGhpcy5ydWxlcy5vdGhlci5ub25TcGFjZUNoYXIpPj15fHwhcC50cmltKCkpYys9YApgK0Uuc2xpY2UoeSk7ZWxzZXtpZihmfHx1LnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci50YWJDaGFyR2xvYmFsLCIgICAgIikuc2VhcmNoKHRoaXMucnVsZXMub3RoZXIubm9uU3BhY2VDaGFyKT49NHx8Yi50ZXN0KHUpfHxtLnRlc3QodSl8fGgudGVzdCh1KSlicmVhaztjKz1gCmArcH0hZiYmIXAudHJpbSgpJiYoZj0hMCksZCs9eCtgCmAsZT1lLnN1YnN0cmluZyh4Lmxlbmd0aCsxKSx1PUUuc2xpY2UoeSl9fW8ubG9vc2V8fChpP28ubG9vc2U9ITA6dGhpcy5ydWxlcy5vdGhlci5kb3VibGVCbGFua0xpbmUudGVzdChkKSYmKGk9ITApKTtsZXQgdj1udWxsLHc7dGhpcy5vcHRpb25zLmdmbSYmKHY9dGhpcy5ydWxlcy5vdGhlci5saXN0SXNUYXNrLmV4ZWMoYyksdiYmKHc9dlswXSE9PSJbIF0gIixjPWMucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmxpc3RSZXBsYWNlVGFzaywiIikpKSxvLml0ZW1zLnB1c2goe3R5cGU6Imxpc3RfaXRlbSIscmF3OmQsdGFzazohIXYsY2hlY2tlZDp3LGxvb3NlOiExLHRleHQ6Yyx0b2tlbnM6W119KSxvLnJhdys9ZH1sZXQgcz1vLml0ZW1zLmF0KC0xKTtpZihzKXMucmF3PXMucmF3LnRyaW1FbmQoKSxzLnRleHQ9cy50ZXh0LnRyaW1FbmQoKTtlbHNlIHJldHVybjtvLnJhdz1vLnJhdy50cmltRW5kKCk7Zm9yKGxldCBsPTA7bDxvLml0ZW1zLmxlbmd0aDtsKyspaWYodGhpcy5sZXhlci5zdGF0ZS50b3A9ITEsby5pdGVtc1tsXS50b2tlbnM9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhvLml0ZW1zW2xdLnRleHQsW10pLCFvLmxvb3NlKXtsZXQgZD1vLml0ZW1zW2xdLnRva2Vucy5maWx0ZXIodT0+dS50eXBlPT09InNwYWNlIiksYz1kLmxlbmd0aD4wJiZkLnNvbWUodT0+dGhpcy5ydWxlcy5vdGhlci5hbnlMaW5lLnRlc3QodS5yYXcpKTtvLmxvb3NlPWN9aWYoby5sb29zZSlmb3IobGV0IGw9MDtsPG8uaXRlbXMubGVuZ3RoO2wrKylvLml0ZW1zW2xdLmxvb3NlPSEwO3JldHVybiBvfX1odG1sKGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2suaHRtbC5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6Imh0bWwiLGJsb2NrOiEwLHJhdzp0WzBdLHByZTp0WzFdPT09InByZSJ8fHRbMV09PT0ic2NyaXB0Inx8dFsxXT09PSJzdHlsZSIsdGV4dDp0WzBdfX1kZWYoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay5kZWYuZXhlYyhlKTtpZih0KXtsZXQgbj10WzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLm11bHRpcGxlU3BhY2VHbG9iYWwsIiAiKSxyPXRbMl0/dFsyXS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIuaHJlZkJyYWNrZXRzLCIkMSIpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sIiQxIik6IiIsbz10WzNdP3RbM10uc3Vic3RyaW5nKDEsdFszXS5sZW5ndGgtMSkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwiJDEiKTp0WzNdO3JldHVybnt0eXBlOiJkZWYiLHRhZzpuLHJhdzp0WzBdLGhyZWY6cix0aXRsZTpvfX19dGFibGUoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay50YWJsZS5leGVjKGUpO2lmKCF0fHwhdGhpcy5ydWxlcy5vdGhlci50YWJsZURlbGltaXRlci50ZXN0KHRbMl0pKXJldHVybjtsZXQgbj1Edyh0WzFdKSxyPXRbMl0ucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLnRhYmxlQWxpZ25DaGFycywiIikuc3BsaXQoInwiKSxvPXRbM10/LnRyaW0oKT90WzNdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci50YWJsZVJvd0JsYW5rTGluZSwiIikuc3BsaXQoYApgKTpbXSxhPXt0eXBlOiJ0YWJsZSIscmF3OnRbMF0saGVhZGVyOltdLGFsaWduOltdLHJvd3M6W119O2lmKG4ubGVuZ3RoPT09ci5sZW5ndGgpe2ZvcihsZXQgaSBvZiByKXRoaXMucnVsZXMub3RoZXIudGFibGVBbGlnblJpZ2h0LnRlc3QoaSk/YS5hbGlnbi5wdXNoKCJyaWdodCIpOnRoaXMucnVsZXMub3RoZXIudGFibGVBbGlnbkNlbnRlci50ZXN0KGkpP2EuYWxpZ24ucHVzaCgiY2VudGVyIik6dGhpcy5ydWxlcy5vdGhlci50YWJsZUFsaWduTGVmdC50ZXN0KGkpP2EuYWxpZ24ucHVzaCgibGVmdCIpOmEuYWxpZ24ucHVzaChudWxsKTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKylhLmhlYWRlci5wdXNoKHt0ZXh0Om5baV0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKG5baV0pLGhlYWRlcjohMCxhbGlnbjphLmFsaWduW2ldfSk7Zm9yKGxldCBpIG9mIG8pYS5yb3dzLnB1c2goRHcoaSxhLmhlYWRlci5sZW5ndGgpLm1hcCgocyxsKT0+KHt0ZXh0OnMsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHMpLGhlYWRlcjohMSxhbGlnbjphLmFsaWduW2xdfSkpKTtyZXR1cm4gYX19bGhlYWRpbmcoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay5saGVhZGluZy5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzp0WzBdLGRlcHRoOnRbMl0uY2hhckF0KDApPT09Ij0iPzE6Mix0ZXh0OnRbMV0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHRbMV0pfX1wYXJhZ3JhcGgoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay5wYXJhZ3JhcGguZXhlYyhlKTtpZih0KXtsZXQgbj10WzFdLmNoYXJBdCh0WzFdLmxlbmd0aC0xKT09PWAKYD90WzFdLnNsaWNlKDAsLTEpOnRbMV07cmV0dXJue3R5cGU6InBhcmFncmFwaCIscmF3OnRbMF0sdGV4dDpuLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShuKX19fXRleHQoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay50ZXh0LmV4ZWMoZSk7aWYodClyZXR1cm57dHlwZToidGV4dCIscmF3OnRbMF0sdGV4dDp0WzBdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZSh0WzBdKX19ZXNjYXBlKGUpe2xldCB0PXRoaXMucnVsZXMuaW5saW5lLmVzY2FwZS5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6ImVzY2FwZSIscmF3OnRbMF0sdGV4dDp0WzFdfX10YWcoZSl7bGV0IHQ9dGhpcy5ydWxlcy5pbmxpbmUudGFnLmV4ZWMoZSk7aWYodClyZXR1cm4hdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJnRoaXMucnVsZXMub3RoZXIuc3RhcnRBVGFnLnRlc3QodFswXSk/dGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITA6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJnRoaXMucnVsZXMub3RoZXIuZW5kQVRhZy50ZXN0KHRbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITEpLCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJnRoaXMucnVsZXMub3RoZXIuc3RhcnRQcmVTY3JpcHRUYWcudGVzdCh0WzBdKT90aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITA6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiZ0aGlzLnJ1bGVzLm90aGVyLmVuZFByZVNjcmlwdFRhZy50ZXN0KHRbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSExKSx7dHlwZToiaHRtbCIscmF3OnRbMF0saW5MaW5rOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rLGluUmF3QmxvY2s6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrLGJsb2NrOiExLHRleHQ6dFswXX19bGluayhlKXtsZXQgdD10aGlzLnJ1bGVzLmlubGluZS5saW5rLmV4ZWMoZSk7aWYodCl7bGV0IG49dFsyXS50cmltKCk7aWYoIXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmdGhpcy5ydWxlcy5vdGhlci5zdGFydEFuZ2xlQnJhY2tldC50ZXN0KG4pKXtpZighdGhpcy5ydWxlcy5vdGhlci5lbmRBbmdsZUJyYWNrZXQudGVzdChuKSlyZXR1cm47bGV0IGE9TnMobi5zbGljZSgwLC0xKSwiXFwiKTtpZigobi5sZW5ndGgtYS5sZW5ndGgpJTI9PT0wKXJldHVybn1lbHNle2xldCBhPVZEKHRbMl0sIigpIik7aWYoYT09PS0yKXJldHVybjtpZihhPi0xKXtsZXQgcz0odFswXS5pbmRleE9mKCIhIik9PT0wPzU6NCkrdFsxXS5sZW5ndGgrYTt0WzJdPXRbMl0uc3Vic3RyaW5nKDAsYSksdFswXT10WzBdLnN1YnN0cmluZygwLHMpLnRyaW0oKSx0WzNdPSIifX1sZXQgcj10WzJdLG89IiI7aWYodGhpcy5vcHRpb25zLnBlZGFudGljKXtsZXQgYT10aGlzLnJ1bGVzLm90aGVyLnBlZGFudGljSHJlZlRpdGxlLmV4ZWMocik7YSYmKHI9YVsxXSxvPWFbM10pfWVsc2Ugbz10WzNdP3RbM10uc2xpY2UoMSwtMSk6IiI7cmV0dXJuIHI9ci50cmltKCksdGhpcy5ydWxlcy5vdGhlci5zdGFydEFuZ2xlQnJhY2tldC50ZXN0KHIpJiYodGhpcy5vcHRpb25zLnBlZGFudGljJiYhdGhpcy5ydWxlcy5vdGhlci5lbmRBbmdsZUJyYWNrZXQudGVzdChuKT9yPXIuc2xpY2UoMSk6cj1yLnNsaWNlKDEsLTEpKSxBdyh0LHtocmVmOnImJnIucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwiJDEiKSx0aXRsZTpvJiZvLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sIiQxIil9LHRbMF0sdGhpcy5sZXhlcix0aGlzLnJ1bGVzKX19cmVmbGluayhlLHQpe2xldCBuO2lmKChuPXRoaXMucnVsZXMuaW5saW5lLnJlZmxpbmsuZXhlYyhlKSl8fChuPXRoaXMucnVsZXMuaW5saW5lLm5vbGluay5leGVjKGUpKSl7bGV0IHI9KG5bMl18fG5bMV0pLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5tdWx0aXBsZVNwYWNlR2xvYmFsLCIgIiksbz10W3IudG9Mb3dlckNhc2UoKV07aWYoIW8pe2xldCBhPW5bMF0uY2hhckF0KDApO3JldHVybnt0eXBlOiJ0ZXh0IixyYXc6YSx0ZXh0OmF9fXJldHVybiBBdyhuLG8sblswXSx0aGlzLmxleGVyLHRoaXMucnVsZXMpfX1lbVN0cm9uZyhlLHQsbj0iIil7bGV0IHI9dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdMRGVsaW0uZXhlYyhlKTtpZighcnx8clszXSYmbi5tYXRjaCh0aGlzLnJ1bGVzLm90aGVyLnVuaWNvZGVBbHBoYU51bWVyaWMpKXJldHVybjtpZighKHJbMV18fHJbMl18fCIiKXx8IW58fHRoaXMucnVsZXMuaW5saW5lLnB1bmN0dWF0aW9uLmV4ZWMobikpe2xldCBhPVsuLi5yWzBdXS5sZW5ndGgtMSxpLHMsbD1hLGQ9MCxjPXJbMF1bMF09PT0iKiI/dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdSRGVsaW1Bc3Q6dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdSRGVsaW1VbmQ7Zm9yKGMubGFzdEluZGV4PTAsdD10LnNsaWNlKC0xKmUubGVuZ3RoK2EpOyhyPWMuZXhlYyh0KSkhPW51bGw7KXtpZihpPXJbMV18fHJbMl18fHJbM118fHJbNF18fHJbNV18fHJbNl0sIWkpY29udGludWU7aWYocz1bLi4uaV0ubGVuZ3RoLHJbM118fHJbNF0pe2wrPXM7Y29udGludWV9ZWxzZSBpZigocls1XXx8cls2XSkmJmElMyYmISgoYStzKSUzKSl7ZCs9cztjb250aW51ZX1pZihsLT1zLGw+MCljb250aW51ZTtzPU1hdGgubWluKHMscytsK2QpO2xldCB1PVsuLi5yWzBdXVswXS5sZW5ndGgscD1lLnNsaWNlKDAsYStyLmluZGV4K3Urcyk7aWYoTWF0aC5taW4oYSxzKSUyKXtsZXQgeT1wLnNsaWNlKDEsLTEpO3JldHVybnt0eXBlOiJlbSIscmF3OnAsdGV4dDp5LHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2Vucyh5KX19bGV0IGY9cC5zbGljZSgyLC0yKTtyZXR1cm57dHlwZToic3Ryb25nIixyYXc6cCx0ZXh0OmYsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKGYpfX19fWNvZGVzcGFuKGUpe2xldCB0PXRoaXMucnVsZXMuaW5saW5lLmNvZGUuZXhlYyhlKTtpZih0KXtsZXQgbj10WzJdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5uZXdMaW5lQ2hhckdsb2JhbCwiICIpLHI9dGhpcy5ydWxlcy5vdGhlci5ub25TcGFjZUNoYXIudGVzdChuKSxvPXRoaXMucnVsZXMub3RoZXIuc3RhcnRpbmdTcGFjZUNoYXIudGVzdChuKSYmdGhpcy5ydWxlcy5vdGhlci5lbmRpbmdTcGFjZUNoYXIudGVzdChuKTtyZXR1cm4gciYmbyYmKG49bi5zdWJzdHJpbmcoMSxuLmxlbmd0aC0xKSkse3R5cGU6ImNvZGVzcGFuIixyYXc6dFswXSx0ZXh0Om59fX1icihlKXtsZXQgdD10aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6ImJyIixyYXc6dFswXX19ZGVsKGUpe2xldCB0PXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6ImRlbCIscmF3OnRbMF0sdGV4dDp0WzJdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2Vucyh0WzJdKX19YXV0b2xpbmsoZSl7bGV0IHQ9dGhpcy5ydWxlcy5pbmxpbmUuYXV0b2xpbmsuZXhlYyhlKTtpZih0KXtsZXQgbixyO3JldHVybiB0WzJdPT09IkAiPyhuPXRbMV0scj0ibWFpbHRvOiIrbik6KG49dFsxXSxyPW4pLHt0eXBlOiJsaW5rIixyYXc6dFswXSx0ZXh0Om4saHJlZjpyLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpuLHRleHQ6bn1dfX19dXJsKGUpe2xldCB0O2lmKHQ9dGhpcy5ydWxlcy5pbmxpbmUudXJsLmV4ZWMoZSkpe2xldCBuLHI7aWYodFsyXT09PSJAIiluPXRbMF0scj0ibWFpbHRvOiIrbjtlbHNle2xldCBvO2RvIG89dFswXSx0WzBdPXRoaXMucnVsZXMuaW5saW5lLl9iYWNrcGVkYWwuZXhlYyh0WzBdKT8uWzBdPz8iIjt3aGlsZShvIT09dFswXSk7bj10WzBdLHRbMV09PT0id3d3LiI/cj0iaHR0cDovLyIrdFswXTpyPXRbMF19cmV0dXJue3R5cGU6ImxpbmsiLHJhdzp0WzBdLHRleHQ6bixocmVmOnIsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3Om4sdGV4dDpufV19fX1pbmxpbmVUZXh0KGUpe2xldCB0PXRoaXMucnVsZXMuaW5saW5lLnRleHQuZXhlYyhlKTtpZih0KXtsZXQgbj10aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s7cmV0dXJue3R5cGU6InRleHQiLHJhdzp0WzBdLHRleHQ6dFswXSxlc2NhcGVkOm59fX19LGpyPWNsYXNzIHpme3Rva2VucztvcHRpb25zO3N0YXRlO3Rva2VuaXplcjtpbmxpbmVRdWV1ZTtjb25zdHJ1Y3Rvcih0KXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMub3B0aW9ucz10fHxpYSx0aGlzLm9wdGlvbnMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXJ8fG5ldyBYZCx0aGlzLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyLHRoaXMudG9rZW5pemVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudG9rZW5pemVyLmxleGVyPXRoaXMsdGhpcy5pbmxpbmVRdWV1ZT1bXSx0aGlzLnN0YXRlPXtpbkxpbms6ITEsaW5SYXdCbG9jazohMSx0b3A6ITB9O2xldCBuPXtvdGhlcjpRdCxibG9jazpqZC5ub3JtYWwsaW5saW5lOkVzLm5vcm1hbH07dGhpcy5vcHRpb25zLnBlZGFudGljPyhuLmJsb2NrPWpkLnBlZGFudGljLG4uaW5saW5lPUVzLnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYobi5ibG9jaz1qZC5nZm0sdGhpcy5vcHRpb25zLmJyZWFrcz9uLmlubGluZT1Fcy5icmVha3M6bi5pbmxpbmU9RXMuZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz1ufXN0YXRpYyBnZXQgcnVsZXMoKXtyZXR1cm57YmxvY2s6amQsaW5saW5lOkVzfX1zdGF0aWMgbGV4KHQsbil7cmV0dXJuIG5ldyB6ZihuKS5sZXgodCl9c3RhdGljIGxleElubGluZSh0LG4pe3JldHVybiBuZXcgemYobikuaW5saW5lVG9rZW5zKHQpfWxleCh0KXt0PXQucmVwbGFjZShRdC5jYXJyaWFnZVJldHVybixgCmApLHRoaXMuYmxvY2tUb2tlbnModCx0aGlzLnRva2Vucyk7Zm9yKGxldCBuPTA7bjx0aGlzLmlubGluZVF1ZXVlLmxlbmd0aDtuKyspe2xldCByPXRoaXMuaW5saW5lUXVldWVbbl07dGhpcy5pbmxpbmVUb2tlbnMoci5zcmMsci50b2tlbnMpfXJldHVybiB0aGlzLmlubGluZVF1ZXVlPVtdLHRoaXMudG9rZW5zfWJsb2NrVG9rZW5zKHQsbj1bXSxyPSExKXtmb3IodGhpcy5vcHRpb25zLnBlZGFudGljJiYodD10LnJlcGxhY2UoUXQudGFiQ2hhckdsb2JhbCwiICAgICIpLnJlcGxhY2UoUXQuc3BhY2VMaW5lLCIiKSk7dDspe2xldCBvO2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5ibG9jaz8uc29tZShpPT4obz1pLmNhbGwoe2xleGVyOnRoaXN9LHQsbikpPyh0PXQuc3Vic3RyaW5nKG8ucmF3Lmxlbmd0aCksbi5wdXNoKG8pLCEwKTohMSkpY29udGludWU7aWYobz10aGlzLnRva2VuaXplci5zcGFjZSh0KSl7dD10LnN1YnN0cmluZyhvLnJhdy5sZW5ndGgpO2xldCBpPW4uYXQoLTEpO28ucmF3Lmxlbmd0aD09PTEmJmkhPT12b2lkIDA/aS5yYXcrPWAKYDpuLnB1c2gobyk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci5jb2RlKHQpKXt0PXQuc3Vic3RyaW5nKG8ucmF3Lmxlbmd0aCk7bGV0IGk9bi5hdCgtMSk7aT8udHlwZT09PSJwYXJhZ3JhcGgifHxpPy50eXBlPT09InRleHQiPyhpLnJhdys9YApgK28ucmF3LGkudGV4dCs9YApgK28udGV4dCx0aGlzLmlubGluZVF1ZXVlLmF0KC0xKS5zcmM9aS50ZXh0KTpuLnB1c2gobyk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci5mZW5jZXModCkpe3Q9dC5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKSxuLnB1c2gobyk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci5oZWFkaW5nKHQpKXt0PXQuc3Vic3RyaW5nKG8ucmF3Lmxlbmd0aCksbi5wdXNoKG8pO2NvbnRpbnVlfWlmKG89dGhpcy50b2tlbml6ZXIuaHIodCkpe3Q9dC5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKSxuLnB1c2gobyk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci5ibG9ja3F1b3RlKHQpKXt0PXQuc3Vic3RyaW5nKG8ucmF3Lmxlbmd0aCksbi5wdXNoKG8pO2NvbnRpbnVlfWlmKG89dGhpcy50b2tlbml6ZXIubGlzdCh0KSl7dD10LnN1YnN0cmluZyhvLnJhdy5sZW5ndGgpLG4ucHVzaChvKTtjb250aW51ZX1pZihvPXRoaXMudG9rZW5pemVyLmh0bWwodCkpe3Q9dC5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKSxuLnB1c2gobyk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci5kZWYodCkpe3Q9dC5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKTtsZXQgaT1uLmF0KC0xKTtpPy50eXBlPT09InBhcmFncmFwaCJ8fGk/LnR5cGU9PT0idGV4dCI/KGkucmF3Kz1gCmArby5yYXcsaS50ZXh0Kz1gCmArby5yYXcsdGhpcy5pbmxpbmVRdWV1ZS5hdCgtMSkuc3JjPWkudGV4dCk6dGhpcy50b2tlbnMubGlua3Nbby50YWddfHwodGhpcy50b2tlbnMubGlua3Nbby50YWddPXtocmVmOm8uaHJlZix0aXRsZTpvLnRpdGxlfSk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci50YWJsZSh0KSl7dD10LnN1YnN0cmluZyhvLnJhdy5sZW5ndGgpLG4ucHVzaChvKTtjb250aW51ZX1pZihvPXRoaXMudG9rZW5pemVyLmxoZWFkaW5nKHQpKXt0PXQuc3Vic3RyaW5nKG8ucmF3Lmxlbmd0aCksbi5wdXNoKG8pO2NvbnRpbnVlfWxldCBhPXQ7aWYodGhpcy5vcHRpb25zLmV4dGVuc2lvbnM/LnN0YXJ0QmxvY2spe2xldCBpPTEvMCxzPXQuc2xpY2UoMSksbDt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrLmZvckVhY2goZD0+e2w9ZC5jYWxsKHtsZXhlcjp0aGlzfSxzKSx0eXBlb2YgbD09Im51bWJlciImJmw+PTAmJihpPU1hdGgubWluKGksbCkpfSksaTwxLzAmJmk+PTAmJihhPXQuc3Vic3RyaW5nKDAsaSsxKSl9aWYodGhpcy5zdGF0ZS50b3AmJihvPXRoaXMudG9rZW5pemVyLnBhcmFncmFwaChhKSkpe2xldCBpPW4uYXQoLTEpO3ImJmk/LnR5cGU9PT0icGFyYWdyYXBoIj8oaS5yYXcrPWAKYCtvLnJhdyxpLnRleHQrPWAKYCtvLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlLmF0KC0xKS5zcmM9aS50ZXh0KTpuLnB1c2gobykscj1hLmxlbmd0aCE9PXQubGVuZ3RoLHQ9dC5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKTtjb250aW51ZX1pZihvPXRoaXMudG9rZW5pemVyLnRleHQodCkpe3Q9dC5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKTtsZXQgaT1uLmF0KC0xKTtpPy50eXBlPT09InRleHQiPyhpLnJhdys9YApgK28ucmF3LGkudGV4dCs9YApgK28udGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWUuYXQoLTEpLnNyYz1pLnRleHQpOm4ucHVzaChvKTtjb250aW51ZX1pZih0KXtsZXQgaT0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK3QuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKGkpO2JyZWFrfWVsc2UgdGhyb3cgbmV3IEVycm9yKGkpfX1yZXR1cm4gdGhpcy5zdGF0ZS50b3A9ITAsbn1pbmxpbmUodCxuPVtdKXtyZXR1cm4gdGhpcy5pbmxpbmVRdWV1ZS5wdXNoKHtzcmM6dCx0b2tlbnM6bn0pLG59aW5saW5lVG9rZW5zKHQsbj1bXSl7bGV0IHI9dCxvPW51bGw7aWYodGhpcy50b2tlbnMubGlua3Mpe2xldCBzPU9iamVjdC5rZXlzKHRoaXMudG9rZW5zLmxpbmtzKTtpZihzLmxlbmd0aD4wKWZvcig7KG89dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2guZXhlYyhyKSkhPW51bGw7KXMuaW5jbHVkZXMob1swXS5zbGljZShvWzBdLmxhc3RJbmRleE9mKCJbIikrMSwtMSkpJiYocj1yLnNsaWNlKDAsby5pbmRleCkrIlsiKyJhIi5yZXBlYXQob1swXS5sZW5ndGgtMikrIl0iK3Iuc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KSl9Zm9yKDsobz10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyhyKSkhPW51bGw7KXI9ci5zbGljZSgwLG8uaW5kZXgpKyIrKyIrci5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdEluZGV4KTtmb3IoOyhvPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAuZXhlYyhyKSkhPW51bGw7KXI9ci5zbGljZSgwLG8uaW5kZXgpKyJbIisiYSIucmVwZWF0KG9bMF0ubGVuZ3RoLTIpKyJdIityLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAubGFzdEluZGV4KTtsZXQgYT0hMSxpPSIiO2Zvcig7dDspe2F8fChpPSIiKSxhPSExO2xldCBzO2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5pbmxpbmU/LnNvbWUoZD0+KHM9ZC5jYWxsKHtsZXhlcjp0aGlzfSx0LG4pKT8odD10LnN1YnN0cmluZyhzLnJhdy5sZW5ndGgpLG4ucHVzaChzKSwhMCk6ITEpKWNvbnRpbnVlO2lmKHM9dGhpcy50b2tlbml6ZXIuZXNjYXBlKHQpKXt0PXQuc3Vic3RyaW5nKHMucmF3Lmxlbmd0aCksbi5wdXNoKHMpO2NvbnRpbnVlfWlmKHM9dGhpcy50b2tlbml6ZXIudGFnKHQpKXt0PXQuc3Vic3RyaW5nKHMucmF3Lmxlbmd0aCksbi5wdXNoKHMpO2NvbnRpbnVlfWlmKHM9dGhpcy50b2tlbml6ZXIubGluayh0KSl7dD10LnN1YnN0cmluZyhzLnJhdy5sZW5ndGgpLG4ucHVzaChzKTtjb250aW51ZX1pZihzPXRoaXMudG9rZW5pemVyLnJlZmxpbmsodCx0aGlzLnRva2Vucy5saW5rcykpe3Q9dC5zdWJzdHJpbmcocy5yYXcubGVuZ3RoKTtsZXQgZD1uLmF0KC0xKTtzLnR5cGU9PT0idGV4dCImJmQ/LnR5cGU9PT0idGV4dCI/KGQucmF3Kz1zLnJhdyxkLnRleHQrPXMudGV4dCk6bi5wdXNoKHMpO2NvbnRpbnVlfWlmKHM9dGhpcy50b2tlbml6ZXIuZW1TdHJvbmcodCxyLGkpKXt0PXQuc3Vic3RyaW5nKHMucmF3Lmxlbmd0aCksbi5wdXNoKHMpO2NvbnRpbnVlfWlmKHM9dGhpcy50b2tlbml6ZXIuY29kZXNwYW4odCkpe3Q9dC5zdWJzdHJpbmcocy5yYXcubGVuZ3RoKSxuLnB1c2gocyk7Y29udGludWV9aWYocz10aGlzLnRva2VuaXplci5icih0KSl7dD10LnN1YnN0cmluZyhzLnJhdy5sZW5ndGgpLG4ucHVzaChzKTtjb250aW51ZX1pZihzPXRoaXMudG9rZW5pemVyLmRlbCh0KSl7dD10LnN1YnN0cmluZyhzLnJhdy5sZW5ndGgpLG4ucHVzaChzKTtjb250aW51ZX1pZihzPXRoaXMudG9rZW5pemVyLmF1dG9saW5rKHQpKXt0PXQuc3Vic3RyaW5nKHMucmF3Lmxlbmd0aCksbi5wdXNoKHMpO2NvbnRpbnVlfWlmKCF0aGlzLnN0YXRlLmluTGluayYmKHM9dGhpcy50b2tlbml6ZXIudXJsKHQpKSl7dD10LnN1YnN0cmluZyhzLnJhdy5sZW5ndGgpLG4ucHVzaChzKTtjb250aW51ZX1sZXQgbD10O2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5zdGFydElubGluZSl7bGV0IGQ9MS8wLGM9dC5zbGljZSgxKSx1O3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lLmZvckVhY2gocD0+e3U9cC5jYWxsKHtsZXhlcjp0aGlzfSxjKSx0eXBlb2YgdT09Im51bWJlciImJnU+PTAmJihkPU1hdGgubWluKGQsdSkpfSksZDwxLzAmJmQ+PTAmJihsPXQuc3Vic3RyaW5nKDAsZCsxKSl9aWYocz10aGlzLnRva2VuaXplci5pbmxpbmVUZXh0KGwpKXt0PXQuc3Vic3RyaW5nKHMucmF3Lmxlbmd0aCkscy5yYXcuc2xpY2UoLTEpIT09Il8iJiYoaT1zLnJhdy5zbGljZSgtMSkpLGE9ITA7bGV0IGQ9bi5hdCgtMSk7ZD8udHlwZT09PSJ0ZXh0Ij8oZC5yYXcrPXMucmF3LGQudGV4dCs9cy50ZXh0KTpuLnB1c2gocyk7Y29udGludWV9aWYodCl7bGV0IGQ9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIit0LmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihkKTticmVha31lbHNlIHRocm93IG5ldyBFcnJvcihkKX19cmV0dXJuIG59fSwkZD1jbGFzc3tvcHRpb25zO3BhcnNlcjtjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZXx8aWF9c3BhY2UoZSl7cmV0dXJuIiJ9Y29kZSh7dGV4dDplLGxhbmc6dCxlc2NhcGVkOm59KXtsZXQgcj0odHx8IiIpLm1hdGNoKFF0Lm5vdFNwYWNlU3RhcnQpPy5bMF0sbz1lLnJlcGxhY2UoUXQuZW5kaW5nTmV3bGluZSwiIikrYApgO3JldHVybiByPyc8cHJlPjxjb2RlIGNsYXNzPSJsYW5ndWFnZS0nK2tyKHIpKyciPicrKG4/bzprcihvLCEwKSkrYDwvY29kZT48L3ByZT4KYDoiPHByZT48Y29kZT4iKyhuP286a3IobywhMCkpK2A8L2NvZGU+PC9wcmU+CmB9YmxvY2txdW90ZSh7dG9rZW5zOmV9KXtyZXR1cm5gPGJsb2NrcXVvdGU+CiR7dGhpcy5wYXJzZXIucGFyc2UoZSl9PC9ibG9ja3F1b3RlPgpgfWh0bWwoe3RleHQ6ZX0pe3JldHVybiBlfWhlYWRpbmcoe3Rva2VuczplLGRlcHRoOnR9KXtyZXR1cm5gPGgke3R9PiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZSl9PC9oJHt0fT4KYH1ocihlKXtyZXR1cm5gPGhyPgpgfWxpc3QoZSl7bGV0IHQ9ZS5vcmRlcmVkLG49ZS5zdGFydCxyPSIiO2ZvcihsZXQgaT0wO2k8ZS5pdGVtcy5sZW5ndGg7aSsrKXtsZXQgcz1lLml0ZW1zW2ldO3IrPXRoaXMubGlzdGl0ZW0ocyl9bGV0IG89dD8ib2wiOiJ1bCIsYT10JiZuIT09MT8nIHN0YXJ0PSInK24rJyInOiIiO3JldHVybiI8IitvK2ErYD4KYCtyKyI8LyIrbytgPgpgfWxpc3RpdGVtKGUpe2xldCB0PSIiO2lmKGUudGFzayl7bGV0IG49dGhpcy5jaGVja2JveCh7Y2hlY2tlZDohIWUuY2hlY2tlZH0pO2UubG9vc2U/ZS50b2tlbnNbMF0/LnR5cGU9PT0icGFyYWdyYXBoIj8oZS50b2tlbnNbMF0udGV4dD1uKyIgIitlLnRva2Vuc1swXS50ZXh0LGUudG9rZW5zWzBdLnRva2VucyYmZS50b2tlbnNbMF0udG9rZW5zLmxlbmd0aD4wJiZlLnRva2Vuc1swXS50b2tlbnNbMF0udHlwZT09PSJ0ZXh0IiYmKGUudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0PW4rIiAiK2tyKGUudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0KSxlLnRva2Vuc1swXS50b2tlbnNbMF0uZXNjYXBlZD0hMCkpOmUudG9rZW5zLnVuc2hpZnQoe3R5cGU6InRleHQiLHJhdzpuKyIgIix0ZXh0Om4rIiAiLGVzY2FwZWQ6ITB9KTp0Kz1uKyIgIn1yZXR1cm4gdCs9dGhpcy5wYXJzZXIucGFyc2UoZS50b2tlbnMsISFlLmxvb3NlKSxgPGxpPiR7dH08L2xpPgpgfWNoZWNrYm94KHtjaGVja2VkOmV9KXtyZXR1cm4iPGlucHV0ICIrKGU/J2NoZWNrZWQ9IiIgJzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94Ij4nfXBhcmFncmFwaCh7dG9rZW5zOmV9KXtyZXR1cm5gPHA+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZShlKX08L3A+CmB9dGFibGUoZSl7bGV0IHQ9IiIsbj0iIjtmb3IobGV0IG89MDtvPGUuaGVhZGVyLmxlbmd0aDtvKyspbis9dGhpcy50YWJsZWNlbGwoZS5oZWFkZXJbb10pO3QrPXRoaXMudGFibGVyb3coe3RleHQ6bn0pO2xldCByPSIiO2ZvcihsZXQgbz0wO288ZS5yb3dzLmxlbmd0aDtvKyspe2xldCBhPWUucm93c1tvXTtuPSIiO2ZvcihsZXQgaT0wO2k8YS5sZW5ndGg7aSsrKW4rPXRoaXMudGFibGVjZWxsKGFbaV0pO3IrPXRoaXMudGFibGVyb3coe3RleHQ6bn0pfXJldHVybiByJiYocj1gPHRib2R5PiR7cn08L3Rib2R5PmApLGA8dGFibGU+Cjx0aGVhZD4KYCt0K2A8L3RoZWFkPgpgK3IrYDwvdGFibGU+CmB9dGFibGVyb3coe3RleHQ6ZX0pe3JldHVybmA8dHI+CiR7ZX08L3RyPgpgfXRhYmxlY2VsbChlKXtsZXQgdD10aGlzLnBhcnNlci5wYXJzZUlubGluZShlLnRva2Vucyksbj1lLmhlYWRlcj8idGgiOiJ0ZCI7cmV0dXJuKGUuYWxpZ24/YDwke259IGFsaWduPSIke2UuYWxpZ259Ij5gOmA8JHtufT5gKSt0K2A8LyR7bn0+CmB9c3Ryb25nKHt0b2tlbnM6ZX0pe3JldHVybmA8c3Ryb25nPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZSl9PC9zdHJvbmc+YH1lbSh7dG9rZW5zOmV9KXtyZXR1cm5gPGVtPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZSl9PC9lbT5gfWNvZGVzcGFuKHt0ZXh0OmV9KXtyZXR1cm5gPGNvZGU+JHtrcihlLCEwKX08L2NvZGU+YH1icihlKXtyZXR1cm4iPGJyPiJ9ZGVsKHt0b2tlbnM6ZX0pe3JldHVybmA8ZGVsPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZSl9PC9kZWw+YH1saW5rKHtocmVmOmUsdGl0bGU6dCx0b2tlbnM6bn0pe2xldCByPXRoaXMucGFyc2VyLnBhcnNlSW5saW5lKG4pLG89VHcoZSk7aWYobz09PW51bGwpcmV0dXJuIHI7ZT1vO2xldCBhPSc8YSBocmVmPSInK2UrJyInO3JldHVybiB0JiYoYSs9JyB0aXRsZT0iJytrcih0KSsnIicpLGErPSI+IityKyI8L2E+IixhfWltYWdlKHtocmVmOmUsdGl0bGU6dCx0ZXh0Om4sdG9rZW5zOnJ9KXtyJiYobj10aGlzLnBhcnNlci5wYXJzZUlubGluZShyLHRoaXMucGFyc2VyLnRleHRSZW5kZXJlcikpO2xldCBvPVR3KGUpO2lmKG89PT1udWxsKXJldHVybiBrcihuKTtlPW87bGV0IGE9YDxpbWcgc3JjPSIke2V9IiBhbHQ9IiR7bn0iYDtyZXR1cm4gdCYmKGErPWAgdGl0bGU9IiR7a3IodCl9ImApLGErPSI+IixhfXRleHQoZSl7cmV0dXJuInRva2VucyJpbiBlJiZlLnRva2Vucz90aGlzLnBhcnNlci5wYXJzZUlubGluZShlLnRva2Vucyk6ImVzY2FwZWQiaW4gZSYmZS5lc2NhcGVkP2UudGV4dDprcihlLnRleHQpfX0sQXM9Y2xhc3N7c3Ryb25nKHt0ZXh0OmV9KXtyZXR1cm4gZX1lbSh7dGV4dDplfSl7cmV0dXJuIGV9Y29kZXNwYW4oe3RleHQ6ZX0pe3JldHVybiBlfWRlbCh7dGV4dDplfSl7cmV0dXJuIGV9aHRtbCh7dGV4dDplfSl7cmV0dXJuIGV9dGV4dCh7dGV4dDplfSl7cmV0dXJuIGV9bGluayh7dGV4dDplfSl7cmV0dXJuIiIrZX1pbWFnZSh7dGV4dDplfSl7cmV0dXJuIiIrZX1icigpe3JldHVybiIifX0sWXI9Y2xhc3MgV2Z7b3B0aW9ucztyZW5kZXJlcjt0ZXh0UmVuZGVyZXI7Y29uc3RydWN0b3IodCl7dGhpcy5vcHRpb25zPXR8fGlhLHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyAkZCx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMucmVuZGVyZXIucGFyc2VyPXRoaXMsdGhpcy50ZXh0UmVuZGVyZXI9bmV3IEFzfXN0YXRpYyBwYXJzZSh0LG4pe3JldHVybiBuZXcgV2YobikucGFyc2UodCl9c3RhdGljIHBhcnNlSW5saW5lKHQsbil7cmV0dXJuIG5ldyBXZihuKS5wYXJzZUlubGluZSh0KX1wYXJzZSh0LG49ITApe2xldCByPSIiO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgYT10W29dO2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5yZW5kZXJlcnM/LlthLnR5cGVdKXtsZXQgcz1hLGw9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW3MudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LHMpO2lmKGwhPT0hMXx8IVsic3BhY2UiLCJociIsImhlYWRpbmciLCJjb2RlIiwidGFibGUiLCJibG9ja3F1b3RlIiwibGlzdCIsImh0bWwiLCJwYXJhZ3JhcGgiLCJ0ZXh0Il0uaW5jbHVkZXMocy50eXBlKSl7cis9bHx8IiI7Y29udGludWV9fWxldCBpPWE7c3dpdGNoKGkudHlwZSl7Y2FzZSJzcGFjZSI6e3IrPXRoaXMucmVuZGVyZXIuc3BhY2UoaSk7Y29udGludWV9Y2FzZSJociI6e3IrPXRoaXMucmVuZGVyZXIuaHIoaSk7Y29udGludWV9Y2FzZSJoZWFkaW5nIjp7cis9dGhpcy5yZW5kZXJlci5oZWFkaW5nKGkpO2NvbnRpbnVlfWNhc2UiY29kZSI6e3IrPXRoaXMucmVuZGVyZXIuY29kZShpKTtjb250aW51ZX1jYXNlInRhYmxlIjp7cis9dGhpcy5yZW5kZXJlci50YWJsZShpKTtjb250aW51ZX1jYXNlImJsb2NrcXVvdGUiOntyKz10aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUoaSk7Y29udGludWV9Y2FzZSJsaXN0Ijp7cis9dGhpcy5yZW5kZXJlci5saXN0KGkpO2NvbnRpbnVlfWNhc2UiaHRtbCI6e3IrPXRoaXMucmVuZGVyZXIuaHRtbChpKTtjb250aW51ZX1jYXNlInBhcmFncmFwaCI6e3IrPXRoaXMucmVuZGVyZXIucGFyYWdyYXBoKGkpO2NvbnRpbnVlfWNhc2UidGV4dCI6e2xldCBzPWksbD10aGlzLnJlbmRlcmVyLnRleHQocyk7Zm9yKDtvKzE8dC5sZW5ndGgmJnRbbysxXS50eXBlPT09InRleHQiOylzPXRbKytvXSxsKz1gCmArdGhpcy5yZW5kZXJlci50ZXh0KHMpO24/cis9dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgoe3R5cGU6InBhcmFncmFwaCIscmF3OmwsdGV4dDpsLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpsLHRleHQ6bCxlc2NhcGVkOiEwfV19KTpyKz1sO2NvbnRpbnVlfWRlZmF1bHQ6e2xldCBzPSdUb2tlbiB3aXRoICInK2kudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiBjb25zb2xlLmVycm9yKHMpLCIiO3Rocm93IG5ldyBFcnJvcihzKX19fXJldHVybiByfXBhcnNlSW5saW5lKHQsbj10aGlzLnJlbmRlcmVyKXtsZXQgcj0iIjtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7bGV0IGE9dFtvXTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8ucmVuZGVyZXJzPy5bYS50eXBlXSl7bGV0IHM9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2EudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LGEpO2lmKHMhPT0hMXx8IVsiZXNjYXBlIiwiaHRtbCIsImxpbmsiLCJpbWFnZSIsInN0cm9uZyIsImVtIiwiY29kZXNwYW4iLCJiciIsImRlbCIsInRleHQiXS5pbmNsdWRlcyhhLnR5cGUpKXtyKz1zfHwiIjtjb250aW51ZX19bGV0IGk9YTtzd2l0Y2goaS50eXBlKXtjYXNlImVzY2FwZSI6e3IrPW4udGV4dChpKTticmVha31jYXNlImh0bWwiOntyKz1uLmh0bWwoaSk7YnJlYWt9Y2FzZSJsaW5rIjp7cis9bi5saW5rKGkpO2JyZWFrfWNhc2UiaW1hZ2UiOntyKz1uLmltYWdlKGkpO2JyZWFrfWNhc2Uic3Ryb25nIjp7cis9bi5zdHJvbmcoaSk7YnJlYWt9Y2FzZSJlbSI6e3IrPW4uZW0oaSk7YnJlYWt9Y2FzZSJjb2Rlc3BhbiI6e3IrPW4uY29kZXNwYW4oaSk7YnJlYWt9Y2FzZSJiciI6e3IrPW4uYnIoaSk7YnJlYWt9Y2FzZSJkZWwiOntyKz1uLmRlbChpKTticmVha31jYXNlInRleHQiOntyKz1uLnRleHQoaSk7YnJlYWt9ZGVmYXVsdDp7bGV0IHM9J1Rva2VuIHdpdGggIicraS50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIGNvbnNvbGUuZXJyb3IocyksIiI7dGhyb3cgbmV3IEVycm9yKHMpfX19cmV0dXJuIHJ9fSxZZD1jbGFzc3tvcHRpb25zO2Jsb2NrO2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz1lfHxpYX1zdGF0aWMgcGFzc1Rocm91Z2hIb29rcz1uZXcgU2V0KFsicHJlcHJvY2VzcyIsInBvc3Rwcm9jZXNzIiwicHJvY2Vzc0FsbFRva2VucyJdKTtwcmVwcm9jZXNzKGUpe3JldHVybiBlfXBvc3Rwcm9jZXNzKGUpe3JldHVybiBlfXByb2Nlc3NBbGxUb2tlbnMoZSl7cmV0dXJuIGV9cHJvdmlkZUxleGVyKCl7cmV0dXJuIHRoaXMuYmxvY2s/anIubGV4OmpyLmxleElubGluZX1wcm92aWRlUGFyc2VyKCl7cmV0dXJuIHRoaXMuYmxvY2s/WXIucGFyc2U6WXIucGFyc2VJbmxpbmV9fSxZRD1jbGFzc3tkZWZhdWx0cz1CZigpO29wdGlvbnM9dGhpcy5zZXRPcHRpb25zO3BhcnNlPXRoaXMucGFyc2VNYXJrZG93bighMCk7cGFyc2VJbmxpbmU9dGhpcy5wYXJzZU1hcmtkb3duKCExKTtQYXJzZXI9WXI7UmVuZGVyZXI9JGQ7VGV4dFJlbmRlcmVyPUFzO0xleGVyPWpyO1Rva2VuaXplcj1YZDtIb29rcz1ZZDtjb25zdHJ1Y3RvciguLi5lKXt0aGlzLnVzZSguLi5lKX13YWxrVG9rZW5zKGUsdCl7bGV0IG49W107Zm9yKGxldCByIG9mIGUpc3dpdGNoKG49bi5jb25jYXQodC5jYWxsKHRoaXMscikpLHIudHlwZSl7Y2FzZSJ0YWJsZSI6e2xldCBvPXI7Zm9yKGxldCBhIG9mIG8uaGVhZGVyKW49bi5jb25jYXQodGhpcy53YWxrVG9rZW5zKGEudG9rZW5zLHQpKTtmb3IobGV0IGEgb2Ygby5yb3dzKWZvcihsZXQgaSBvZiBhKW49bi5jb25jYXQodGhpcy53YWxrVG9rZW5zKGkudG9rZW5zLHQpKTticmVha31jYXNlImxpc3QiOntsZXQgbz1yO249bi5jb25jYXQodGhpcy53YWxrVG9rZW5zKG8uaXRlbXMsdCkpO2JyZWFrfWRlZmF1bHQ6e2xldCBvPXI7dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zPy5jaGlsZFRva2Vucz8uW28udHlwZV0/dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zW28udHlwZV0uZm9yRWFjaChhPT57bGV0IGk9b1thXS5mbGF0KDEvMCk7bj1uLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoaSx0KSl9KTpvLnRva2VucyYmKG49bi5jb25jYXQodGhpcy53YWxrVG9rZW5zKG8udG9rZW5zLHQpKSl9fXJldHVybiBufXVzZSguLi5lKXtsZXQgdD10aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnN8fHtyZW5kZXJlcnM6e30sY2hpbGRUb2tlbnM6e319O3JldHVybiBlLmZvckVhY2gobj0+e2xldCByPXsuLi5ufTtpZihyLmFzeW5jPXRoaXMuZGVmYXVsdHMuYXN5bmN8fHIuYXN5bmN8fCExLG4uZXh0ZW5zaW9ucyYmKG4uZXh0ZW5zaW9ucy5mb3JFYWNoKG89PntpZighby5uYW1lKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIG5hbWUgcmVxdWlyZWQiKTtpZigicmVuZGVyZXIiaW4gbyl7bGV0IGE9dC5yZW5kZXJlcnNbby5uYW1lXTthP3QucmVuZGVyZXJzW28ubmFtZV09ZnVuY3Rpb24oLi4uaSl7bGV0IHM9by5yZW5kZXJlci5hcHBseSh0aGlzLGkpO3JldHVybiBzPT09ITEmJihzPWEuYXBwbHkodGhpcyxpKSksc306dC5yZW5kZXJlcnNbby5uYW1lXT1vLnJlbmRlcmVyfWlmKCJ0b2tlbml6ZXIiaW4gbyl7aWYoIW8ubGV2ZWx8fG8ubGV2ZWwhPT0iYmxvY2siJiZvLmxldmVsIT09ImlubGluZSIpdGhyb3cgbmV3IEVycm9yKCJleHRlbnNpb24gbGV2ZWwgbXVzdCBiZSAnYmxvY2snIG9yICdpbmxpbmUnIik7bGV0IGE9dFtvLmxldmVsXTthP2EudW5zaGlmdChvLnRva2VuaXplcik6dFtvLmxldmVsXT1bby50b2tlbml6ZXJdLG8uc3RhcnQmJihvLmxldmVsPT09ImJsb2NrIj90LnN0YXJ0QmxvY2s/dC5zdGFydEJsb2NrLnB1c2goby5zdGFydCk6dC5zdGFydEJsb2NrPVtvLnN0YXJ0XTpvLmxldmVsPT09ImlubGluZSImJih0LnN0YXJ0SW5saW5lP3Quc3RhcnRJbmxpbmUucHVzaChvLnN0YXJ0KTp0LnN0YXJ0SW5saW5lPVtvLnN0YXJ0XSkpfSJjaGlsZFRva2VucyJpbiBvJiZvLmNoaWxkVG9rZW5zJiYodC5jaGlsZFRva2Vuc1tvLm5hbWVdPW8uY2hpbGRUb2tlbnMpfSksci5leHRlbnNpb25zPXQpLG4ucmVuZGVyZXIpe2xldCBvPXRoaXMuZGVmYXVsdHMucmVuZGVyZXJ8fG5ldyAkZCh0aGlzLmRlZmF1bHRzKTtmb3IobGV0IGEgaW4gbi5yZW5kZXJlcil7aWYoIShhIGluIG8pKXRocm93IG5ldyBFcnJvcihgcmVuZGVyZXIgJyR7YX0nIGRvZXMgbm90IGV4aXN0YCk7aWYoWyJvcHRpb25zIiwicGFyc2VyIl0uaW5jbHVkZXMoYSkpY29udGludWU7bGV0IGk9YSxzPW4ucmVuZGVyZXJbaV0sbD1vW2ldO29baV09KC4uLmQpPT57bGV0IGM9cy5hcHBseShvLGQpO3JldHVybiBjPT09ITEmJihjPWwuYXBwbHkobyxkKSksY3x8IiJ9fXIucmVuZGVyZXI9b31pZihuLnRva2VuaXplcil7bGV0IG89dGhpcy5kZWZhdWx0cy50b2tlbml6ZXJ8fG5ldyBYZCh0aGlzLmRlZmF1bHRzKTtmb3IobGV0IGEgaW4gbi50b2tlbml6ZXIpe2lmKCEoYSBpbiBvKSl0aHJvdyBuZXcgRXJyb3IoYHRva2VuaXplciAnJHthfScgZG9lcyBub3QgZXhpc3RgKTtpZihbIm9wdGlvbnMiLCJydWxlcyIsImxleGVyIl0uaW5jbHVkZXMoYSkpY29udGludWU7bGV0IGk9YSxzPW4udG9rZW5pemVyW2ldLGw9b1tpXTtvW2ldPSguLi5kKT0+e2xldCBjPXMuYXBwbHkobyxkKTtyZXR1cm4gYz09PSExJiYoYz1sLmFwcGx5KG8sZCkpLGN9fXIudG9rZW5pemVyPW99aWYobi5ob29rcyl7bGV0IG89dGhpcy5kZWZhdWx0cy5ob29rc3x8bmV3IFlkO2ZvcihsZXQgYSBpbiBuLmhvb2tzKXtpZighKGEgaW4gbykpdGhyb3cgbmV3IEVycm9yKGBob29rICcke2F9JyBkb2VzIG5vdCBleGlzdGApO2lmKFsib3B0aW9ucyIsImJsb2NrIl0uaW5jbHVkZXMoYSkpY29udGludWU7bGV0IGk9YSxzPW4uaG9va3NbaV0sbD1vW2ldO1lkLnBhc3NUaHJvdWdoSG9va3MuaGFzKGEpP29baV09ZD0+e2lmKHRoaXMuZGVmYXVsdHMuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShzLmNhbGwobyxkKSkudGhlbih1PT5sLmNhbGwobyx1KSk7bGV0IGM9cy5jYWxsKG8sZCk7cmV0dXJuIGwuY2FsbChvLGMpfTpvW2ldPSguLi5kKT0+e2xldCBjPXMuYXBwbHkobyxkKTtyZXR1cm4gYz09PSExJiYoYz1sLmFwcGx5KG8sZCkpLGN9fXIuaG9va3M9b31pZihuLndhbGtUb2tlbnMpe2xldCBvPXRoaXMuZGVmYXVsdHMud2Fsa1Rva2VucyxhPW4ud2Fsa1Rva2VucztyLndhbGtUb2tlbnM9ZnVuY3Rpb24oaSl7bGV0IHM9W107cmV0dXJuIHMucHVzaChhLmNhbGwodGhpcyxpKSksbyYmKHM9cy5jb25jYXQoby5jYWxsKHRoaXMsaSkpKSxzfX10aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLnJ9fSksdGhpc31zZXRPcHRpb25zKGUpe3JldHVybiB0aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmV9LHRoaXN9bGV4ZXIoZSx0KXtyZXR1cm4ganIubGV4KGUsdD8/dGhpcy5kZWZhdWx0cyl9cGFyc2VyKGUsdCl7cmV0dXJuIFlyLnBhcnNlKGUsdD8/dGhpcy5kZWZhdWx0cyl9cGFyc2VNYXJrZG93bihlKXtyZXR1cm4obixyKT0+e2xldCBvPXsuLi5yfSxhPXsuLi50aGlzLmRlZmF1bHRzLC4uLm99LGk9dGhpcy5vbkVycm9yKCEhYS5zaWxlbnQsISFhLmFzeW5jKTtpZih0aGlzLmRlZmF1bHRzLmFzeW5jPT09ITAmJm8uYXN5bmM9PT0hMSlyZXR1cm4gaShuZXcgRXJyb3IoIm1hcmtlZCgpOiBUaGUgYXN5bmMgb3B0aW9uIHdhcyBzZXQgdG8gdHJ1ZSBieSBhbiBleHRlbnNpb24uIFJlbW92ZSBhc3luYzogZmFsc2UgZnJvbSB0aGUgcGFyc2Ugb3B0aW9ucyBvYmplY3QgdG8gcmV0dXJuIGEgUHJvbWlzZS4iKSk7aWYodHlwZW9mIG4+InUifHxuPT09bnVsbClyZXR1cm4gaShuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwiKSk7aWYodHlwZW9mIG4hPSJzdHJpbmciKXJldHVybiBpKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyBvZiB0eXBlICIrT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pKyIsIHN0cmluZyBleHBlY3RlZCIpKTthLmhvb2tzJiYoYS5ob29rcy5vcHRpb25zPWEsYS5ob29rcy5ibG9jaz1lKTtsZXQgcz1hLmhvb2tzP2EuaG9va3MucHJvdmlkZUxleGVyKCk6ZT9qci5sZXg6anIubGV4SW5saW5lLGw9YS5ob29rcz9hLmhvb2tzLnByb3ZpZGVQYXJzZXIoKTplP1lyLnBhcnNlOllyLnBhcnNlSW5saW5lO2lmKGEuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShhLmhvb2tzP2EuaG9va3MucHJlcHJvY2VzcyhuKTpuKS50aGVuKGQ9PnMoZCxhKSkudGhlbihkPT5hLmhvb2tzP2EuaG9va3MucHJvY2Vzc0FsbFRva2VucyhkKTpkKS50aGVuKGQ9PmEud2Fsa1Rva2Vucz9Qcm9taXNlLmFsbCh0aGlzLndhbGtUb2tlbnMoZCxhLndhbGtUb2tlbnMpKS50aGVuKCgpPT5kKTpkKS50aGVuKGQ9PmwoZCxhKSkudGhlbihkPT5hLmhvb2tzP2EuaG9va3MucG9zdHByb2Nlc3MoZCk6ZCkuY2F0Y2goaSk7dHJ5e2EuaG9va3MmJihuPWEuaG9va3MucHJlcHJvY2VzcyhuKSk7bGV0IGQ9cyhuLGEpO2EuaG9va3MmJihkPWEuaG9va3MucHJvY2Vzc0FsbFRva2VucyhkKSksYS53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMoZCxhLndhbGtUb2tlbnMpO2xldCBjPWwoZCxhKTtyZXR1cm4gYS5ob29rcyYmKGM9YS5ob29rcy5wb3N0cHJvY2VzcyhjKSksY31jYXRjaChkKXtyZXR1cm4gaShkKX19fW9uRXJyb3IoZSx0KXtyZXR1cm4gbj0+e2lmKG4ubWVzc2FnZSs9YApQbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZC5gLGUpe2xldCByPSI8cD5BbiBlcnJvciBvY2N1cnJlZDo8L3A+PHByZT4iK2tyKG4ubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7cmV0dXJuIHQ/UHJvbWlzZS5yZXNvbHZlKHIpOnJ9aWYodClyZXR1cm4gUHJvbWlzZS5yZWplY3Qobik7dGhyb3cgbn19fSxhYT1uZXcgWUQ7ZnVuY3Rpb24gUGUoZSx0KXtyZXR1cm4gYWEucGFyc2UoZSx0KX1QZS5vcHRpb25zPVBlLnNldE9wdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFhLnNldE9wdGlvbnMoZSksUGUuZGVmYXVsdHM9YWEuZGVmYXVsdHMsQ3coUGUuZGVmYXVsdHMpLFBlfTtQZS5nZXREZWZhdWx0cz1CZjtQZS5kZWZhdWx0cz1pYTtQZS51c2U9ZnVuY3Rpb24oLi4uZSl7cmV0dXJuIGFhLnVzZSguLi5lKSxQZS5kZWZhdWx0cz1hYS5kZWZhdWx0cyxDdyhQZS5kZWZhdWx0cyksUGV9O1BlLndhbGtUb2tlbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYWEud2Fsa1Rva2VucyhlLHQpfTtQZS5wYXJzZUlubGluZT1hYS5wYXJzZUlubGluZTtQZS5QYXJzZXI9WXI7UGUucGFyc2VyPVlyLnBhcnNlO1BlLlJlbmRlcmVyPSRkO1BlLlRleHRSZW5kZXJlcj1BcztQZS5MZXhlcj1qcjtQZS5sZXhlcj1qci5sZXg7UGUuVG9rZW5pemVyPVhkO1BlLkhvb2tzPVlkO1BlLnBhcnNlPVBlO3ZhciBvMz1QZS5vcHRpb25zLGEzPVBlLnNldE9wdGlvbnMsaTM9UGUudXNlLHMzPVBlLndhbGtUb2tlbnMsV3c9UGUucGFyc2VJbmxpbmU7dmFyIGwzPVlyLnBhcnNlLGQzPWpyLmxleDtQZS51c2Uoe2JyZWFrczohMCxnZm06ITAscmVuZGVyZXI6e2xpbmsoe2hyZWY6ZSx0aXRsZTp0LHRleHQ6bn0pe2xldCByPXQ/YCB0aXRsZT0iJHt0fSJgOiIiO3JldHVybmA8YSBocmVmPSIke2V9IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiR7cn0+JHtufTwvYT5gfX19KTtmdW5jdGlvbiBDcyhlKXtyZXR1cm4gZT9QZS5wYXJzZUlubGluZShlKToiIn1mdW5jdGlvbiBNcyhlKXtyZXR1cm4gZT9QZS5wYXJzZShlKToiIn1mdW5jdGlvbiBCdyhlKXtpZighZSlyZXR1cm4iIjtsZXQgdD1lLnJlcGxhY2UoL1xbKFteXF1dKylcXVxbXF4/XGQrXF0vZywiJDEiKS5yZXBsYWNlKC9cW1xeW15cXV0qXF0vZywiIikucmVwbGFjZSgvPT0oW149XSspPT0vZywiJDEiKTtyZXR1cm4gV3codCx7cmVuZGVyZXI6bmV3IEFzfSkudHJpbSgpfXZhciBxRD0vXFsoW15cXV0rKVxdXFtcXj8oXGQrKVxdL2csSHc9L1xzKlxbXF4/KFxkKylcXVsuOl1ccyovLFhEPS9eIVxbKFteXF1dKilcXVwoKFteKV0rKVwpLywkRD0vXlxbKFteXF1dKilcXVwoKFteKV0qKVwpLyxKRD0vXC4obXA0fHdlYm18b2dnKShcP3wkKS9pLEd3PS8oPzp5b3V0dWJlXC5jb21cL3dhdGNoXD92PXx5b3V0dVwuYmVcLykoW2EtekEtWjAtOV8tXSspLyxWdz0vdmltZW9cLmNvbVwvKFxkKykvO2Z1bmN0aW9uIFFEKGUpe3JldHVybiBKRC50ZXN0KGUpfHxHdy50ZXN0KGUpfHxWdy50ZXN0KGUpfWZ1bmN0aW9uIE9zKGUpe3JldHVybiBlLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC8iL2csIiZxdW90OyIpLnJlcGxhY2UoLycvZywiJiMzOTsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKX1mdW5jdGlvbiBYZihlKXtyZXR1cm4gZS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKX1mdW5jdGlvbiBaRChlLHQpe2xldCBuPWUubWF0Y2goWEQpO2lmKG4pe2xldCBvPW5bMl07UUQobyk/dC52aWRlb3MucHVzaCh7YWx0Om5bMV0sdXJsOm99KTp0LmltYWdlcy5wdXNoKHthbHQ6blsxXSx1cmw6b30pO3JldHVybn1sZXQgcj1lLm1hdGNoKCREKTtpZihyKXshdC5kZXNjcmlwdGlvbiYmIXQudXJsPyh0LmRlc2NyaXB0aW9uPXJbMV18fCIiLHQudXJsPXJbMl18fCIiKTp0LnRleHQucHVzaChlKTtyZXR1cm59ZSYmdC50ZXh0LnB1c2goZSl9ZnVuY3Rpb24gZUEoZSl7bGV0IHQ9ZS5tYXRjaChIdyk7aWYoIXQpcmV0dXJue2Zvb3Rub3Rlczp7fSxjbGVhbmVkTWFya2Rvd246ZX07bGV0IG49ZS5zdWJzdHJpbmcoMCx0LmluZGV4KS50cmltRW5kKCkscj1lLnN1YnN0cmluZyh0LmluZGV4KSxvPXt9LGE9bmV3IFJlZ0V4cChIdy5zb3VyY2UsImciKSxpPW51bGwscz0wLGw7Zm9yKDsobD1hLmV4ZWMocikpIT09bnVsbDspaSE9PW51bGwmJihvW2ldPUt3KHIuc3Vic3RyaW5nKHMsbC5pbmRleCkpKSxpPWxbMV0scz1sLmluZGV4K2xbMF0ubGVuZ3RoO3JldHVybiBpIT09bnVsbCYmKG9baV09S3coci5zdWJzdHJpbmcocykpKSx7Zm9vdG5vdGVzOm8sY2xlYW5lZE1hcmtkb3duOm59fWZ1bmN0aW9uIEt3KGUpe2xldCB0PXtkZXNjcmlwdGlvbjoiIix1cmw6IiIsaW1hZ2VzOltdLHZpZGVvczpbXSx0ZXh0OltdfTtmb3IobGV0IG4gb2YgZS5zcGxpdChgCmApKXtsZXQgcj1uLnRyaW0oKTtyJiZaRChyLHQpfXJldHVybiB0fWZ1bmN0aW9uIHRBKGUpe2xldCB0PVtdO3JldHVybiBlLmltYWdlcy5sZW5ndGgmJnQucHVzaCh7Y2xzOiJpbWFnZSIsdGl0bGU6IkNvbnRhaW5zIGltYWdlIixzeW1ib2w6Ilx1ezFGNUJDfSJ9KSxlLnZpZGVvcy5sZW5ndGgmJnQucHVzaCh7Y2xzOiJ2aWRlbyIsdGl0bGU6IkNvbnRhaW5zIHZpZGVvIixzeW1ib2w6Ilx1ezFGM0FDfSJ9KSwhZS5pbWFnZXMubGVuZ3RoJiYhZS52aWRlb3MubGVuZ3RoJiYoZS51cmw/dC5wdXNoKHtjbHM6InVybCIsdGl0bGU6IkNvbnRhaW5zIGxpbmsiLHN5bWJvbDoiXHV7MUY1MTd9In0pOihlLmRlc2NyaXB0aW9ufHxlLnRleHQubGVuZ3RoKSYmdC5wdXNoKHtjbHM6InRleHQiLHRpdGxlOiJDb250YWlucyBkZXRhaWxzIixzeW1ib2w6Ilx1ezFGNEREfSJ9KSksdH1mdW5jdGlvbiBuQShlKXtsZXQgdD1bJzxkaXYgY2xhc3M9InJpY2gtZm9vdG5vdGUtcG9wdXAiPiddO2UudXJsJiZ0LnB1c2goYDxkaXYgY2xhc3M9InJpY2gtZm9vdG5vdGUtcG9wdXAtdXJsIj48c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjE0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2Ii8+PHBvbHlsaW5lIHBvaW50cz0iMTUgMyAyMSAzIDIxIDkiLz48bGluZSB4MT0iMTAiIHkxPSIxNCIgeDI9IjIxIiB5Mj0iMyIvPjwvc3ZnPjxhIGhyZWY9IiR7T3MoZS51cmwpfSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+JHtYZihlLnVybCl9PC9hPjwvZGl2PmApLGUuZGVzY3JpcHRpb24mJnQucHVzaChgPGRpdiBjbGFzcz0icmljaC1mb290bm90ZS1wb3B1cC10ZXh0Ij4ke1hmKGUuZGVzY3JpcHRpb24pfTwvZGl2PmApO2ZvcihsZXQgbiBvZiBlLnRleHQpdC5wdXNoKGA8ZGl2IGNsYXNzPSJyaWNoLWZvb3Rub3RlLXBvcHVwLXRleHQiPiR7WGYobil9PC9kaXY+YCk7Zm9yKGxldCBuIG9mIGUuaW1hZ2VzKXQucHVzaChgPGRpdiBjbGFzcz0icmljaC1mb290bm90ZS1wb3B1cC1tZWRpYSI+PGltZyBzcmM9IiR7T3Mobi51cmwpfSIgYWx0PSIke09zKG4uYWx0KX0iIGxvYWRpbmc9ImxhenkiLz48L2Rpdj5gKTtmb3IobGV0IG4gb2YgZS52aWRlb3Mpe2xldCByPW4udXJsLm1hdGNoKEd3KSxvPW4udXJsLm1hdGNoKFZ3KTtyP3QucHVzaChgPGRpdiBjbGFzcz0icmljaC1mb290bm90ZS1wb3B1cC1tZWRpYSI+PGlmcmFtZSBzcmM9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7clsxXX0iIGZyYW1lYm9yZGVyPSIwIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+PC9kaXY+YCk6bz90LnB1c2goYDxkaXYgY2xhc3M9InJpY2gtZm9vdG5vdGUtcG9wdXAtbWVkaWEiPjxpZnJhbWUgc3JjPSJodHRwczovL3BsYXllci52aW1lby5jb20vdmlkZW8vJHtvWzFdfSIgZnJhbWVib3JkZXI9IjAiIGFsbG93ZnVsbHNjcmVlbj48L2lmcmFtZT48L2Rpdj5gKTp0LnB1c2goYDxkaXYgY2xhc3M9InJpY2gtZm9vdG5vdGUtcG9wdXAtbWVkaWEiPjx2aWRlbyBzcmM9IiR7T3Mobi51cmwpfSIgY29udHJvbHM+PC92aWRlbz48L2Rpdj5gKX1yZXR1cm4gdC5wdXNoKCc8ZGl2IGNsYXNzPSJyaWNoLWZvb3Rub3RlLXBvcHVwLWFjdGlvbnMiPjxidXR0b24gY2xhc3M9InJpY2gtZm9vdG5vdGUtcG9wdXAtY2xvc2UiIHR5cGU9ImJ1dHRvbiI+Q0xPU0U8L2J1dHRvbj48L2Rpdj4nKSx0LnB1c2goIjwvZGl2PiIpLHQuam9pbigiIil9ZnVuY3Rpb24gckEoZSx0KXtsZXQgbj10QSh0KSxyPWVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeSh7dXJsOnQudXJsLGRlc2NyaXB0aW9uOnQuZGVzY3JpcHRpb24sdGV4dDp0LnRleHQsaW1hZ2VzOnQuaW1hZ2VzLHZpZGVvczp0LnZpZGVvc30pKSxvPXQudXJsfHwiIyIsYT1uLm1hcChpPT5gPHNwYW4gY2xhc3M9InJpY2gtZm9vdG5vdGUtaW5kaWNhdG9yIHJpY2gtZm9vdG5vdGUtaW5kaWNhdG9yLS0ke2kuY2xzfSIgdGl0bGU9IiR7aS50aXRsZX0iPiR7aS5zeW1ib2x9PC9zcGFuPmApLmpvaW4oIiIpO3JldHVybmA8ZGl2IGNsYXNzPSJyaWNoLWZvb3Rub3RlLXdyYXAiPjxhIGNsYXNzPSJyaWNoLWZvb3Rub3RlLWxpbmsiIGhyZWY9IiR7T3Mobyl9IiBkYXRhLXJpY2gtZm9vdG5vdGU9IiR7cn0iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPiR7ZX08L2E+YCthKyI8L2Rpdj4ifWZ1bmN0aW9uIHJyKGUpe3JldHVybiBZdyhlLENzKX1mdW5jdGlvbiBqdyhlKXtyZXR1cm4gWXcoZSxNcyl9ZnVuY3Rpb24gWXcoZSx0KXtpZighZSlyZXR1cm4iIjtsZXR7Zm9vdG5vdGVzOm4sY2xlYW5lZE1hcmtkb3duOnJ9PWVBKGUpO2lmKE9iamVjdC5rZXlzKG4pLmxlbmd0aD09PTApcmV0dXJuIHQoZSk7bGV0IG89W10sYT1yLnJlcGxhY2UocUQsKHMsbCxkKT0+e2lmKCFuW2RdKXJldHVybiBzO2xldCBjPW8ubGVuZ3RoO3JldHVybiBvLnB1c2goe3RleHQ6bCxmbklkOmR9KSxgPCEtLUZOUkVGOiR7Y30tLT5gfSksaT10KGEpO3JldHVybiBpPWkucmVwbGFjZSgvPCEtLUZOUkVGOihcZCspLS0+L2csKHMsbCk9PntsZXR7dGV4dDpkLGZuSWQ6Y309b1twYXJzZUludChsKV0sdT1uW2NdO2lmKCF1KXJldHVybiBkO2xldCBwPUNzKGQpO3JldHVybiByQShwLHUpfSksaX1mdW5jdGlvbiBfbihlKXtpZighZSlyZXR1cm47bGV0IHQ9ZS5xdWVyeVNlbGVjdG9yQWxsKCIucmljaC1mb290bm90ZS1saW5rW2RhdGEtcmljaC1mb290bm90ZV0iKTtmb3IobGV0IG4gb2YgdCl7aWYobi5fdGlwcHlSaWNoRm9vdG5vdGUpY29udGludWU7bGV0IHI7dHJ5e3I9SlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQobi5kYXRhc2V0LnJpY2hGb290bm90ZSkpfWNhdGNoe2NvbnRpbnVlfWlmKCEhIShyLmRlc2NyaXB0aW9ufHxyLnRleHQ/Lmxlbmd0aHx8ci5pbWFnZXM/Lmxlbmd0aHx8ci52aWRlb3M/Lmxlbmd0aCkpY29udGludWU7bGV0IGE9bkEociksaT1TcyhuLHtjb250ZW50OmEsYWxsb3dIVE1MOiEwLGludGVyYWN0aXZlOiEwLHRyaWdnZXI6Im1hbnVhbCIscGxhY2VtZW50OiJib3R0b20tc3RhcnQiLHRoZW1lOiJyaWNoLWZvb3Rub3RlIixtYXhXaWR0aDo0MjAsYXJyb3c6ITAsZHVyYXRpb246WzE1MCwxMDBdLGFwcGVuZFRvOigpPT5kb2N1bWVudC5ib2R5LG9uU2hvd24oKXtsZXQgcz1pLnBvcHBlci5xdWVyeVNlbGVjdG9yKCIucmljaC1mb290bm90ZS1wb3B1cC1jbG9zZSIpO3MmJnMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT5pLmhpZGUoKSx7b25jZTohMH0pfX0pO24uX3RpcHB5UmljaEZvb3Rub3RlPWksbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIscz0+e2lmKGkuc3RhdGUuaXNWaXNpYmxlKXtpLmhpZGUoKTtyZXR1cm59cy5wcmV2ZW50RGVmYXVsdCgpLHMuc3RvcFByb3BhZ2F0aW9uKCksaS5zaG93KCl9KX19dmFyICRmPSExLG9BPTAsYUE9MjAwLFpkPVtdLEpmPW5ldyBTZXQ7ZnVuY3Rpb24gUWYoZSl7aWYodHlwZW9mIGU9PSJib29sZWFuIil7JGY9ZTtyZXR1cm59bGV0IHQ9U3RyaW5nKGV8fCIiKS50cmltKCkudG9Mb3dlckNhc2UoKTskZj1bInRydWUiLCJ5ZXMiLCIxIiwib24iLCJlbmFibGVkIl0uaW5jbHVkZXModCl9ZnVuY3Rpb24gayguLi5lKXtpZigkZil7Y29uc29sZS5sb2coLi4uZSk7bGV0IHQ9e2lkOisrb0EsdHM6RGF0ZS5ub3coKSxhcmdzOmV9O1pkLnB1c2godCksWmQubGVuZ3RoPmFBJiZaZC5zaGlmdCgpLHNldFRpbWVvdXQoKCk9PkpmLmZvckVhY2gobj0+bih0KSksMCl9fWZ1bmN0aW9uIHF3KCl7cmV0dXJuWy4uLlpkXX1mdW5jdGlvbiBYdyhlKXtKZi5hZGQoZSl9ZnVuY3Rpb24gJHcoZSl7SmYuZGVsZXRlKGUpfXZhciBKdz0iQ29uc29sZSBsb2dnaW5nIixpQT1uZXcgU2V0KFsiY2hhbmdlZCIsImNyZWF0ZWQiLCJvcGVuZWQiLCJyZWxldmFuY2UiLCJ0aXRsZSIsInVwZGF0ZWQiXSk7ZnVuY3Rpb24gc0EoZSl7cmV0dXJuYGRhc2hib2FyZF8ke2V9X2NvbmZpZ2B9ZnVuY3Rpb24gZWMoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9lOmU/LnV1aWR9ZnVuY3Rpb24gcjAoZSl7cmV0dXJuKGUubWF0Y2goL14oI3sxLDZ9KVxzKyguKykkL2dtKXx8W10pLm1hcCgobixyKT0+KHtoZWFkaW5nOnt0ZXh0Om4ucmVwbGFjZSgvXiN7MSw2fVxzKy8sIiIpLnRyaW0oKSxsZXZlbDoobi5tYXRjaCgvXiMrLyl8fFsiIl0pWzBdLmxlbmd0aH0saW5kZXg6cn0pKX1mdW5jdGlvbiB0YyhlKXtyZXR1cm4gZT09bnVsbD9udWxsOmU8MWUxMD9lKjFlMzplfWZ1bmN0aW9uIGxBKGUpe2xldCB0PW5ldyBEYXRlKGUpLG49dC5nZXREYXkoKTtyZXR1cm4gdC5zZXREYXRlKHQuZ2V0RGF0ZSgpLW4rKG49PT0wPy02OjEpKSx0LnNldEhvdXJzKDAsMCwwLDApLHR9ZnVuY3Rpb24gdG0oZSl7cmV0dXJuKGV8fFtdKS5tYXAodD0+KHsuLi50LHNjb3JlOnQ/LnNjb3JlPz90Py52aWN0b3J5VmFsdWU/PzB9KSl9ZnVuY3Rpb24gZEEoZSx0KXtsZXQgbj1uZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLHQuZ2V0RGF0ZSgpKS5nZXRUaW1lKCkscj1uKzg2NGU1O3JldHVybiBlLmZpbHRlcihvPT57bGV0IGE9dGMoby5zdGFydEF0KTtyZXR1cm4hby5jb21wbGV0ZWRBdCYmIW8uZGlzbWlzc2VkQXQmJmEhPW51bGwmJmE+PW4mJmE8cn0pfWZ1bmN0aW9uIG8wKGUsdCl7bGV0IG49dC5nZXRUaW1lKCkscj1uKzcqODY0ZTU7cmV0dXJuIGUuZmlsdGVyKG89PntsZXQgYT10YyhvLmNvbXBsZXRlZEF0KTtyZXR1cm4gYSE9bnVsbCYmYT49biYmYTxyfSl9ZnVuY3Rpb24gY0EoZSx0KXtyZXR1cm4gbzAoZSx0KS5yZWR1Y2UoKG4scik9Pm4rKHIudmljdG9yeVZhbHVlfHwwKSwwKX1mdW5jdGlvbiB1QShlLHQpe3JldHVyblsiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0IiwiU3VuIl0ubWFwKChyLG8pPT57bGV0IGE9bmV3IERhdGUodCk7YS5zZXREYXRlKGEuZ2V0RGF0ZSgpK28pO2xldCBpPW5ldyBEYXRlKGEpO2kuc2V0RGF0ZShpLmdldERhdGUoKSsxKTtsZXQgcz1lLmZpbHRlcihsPT57bGV0IGQ9dGMobC5jb21wbGV0ZWRBdCk7cmV0dXJuIGQhPW51bGwmJmQ+PWEuZ2V0VGltZSgpJiZkPGkuZ2V0VGltZSgpfSk7cmV0dXJue2RheTpyLGRhdGU6YS50b0lTT1N0cmluZygpLHZhbHVlOnMucmVkdWNlKChsLGQpPT5sKyhkLnZpY3RvcnlWYWx1ZXx8MCksMCksdGFza0NvdW50OnMubGVuZ3RofX0pfWZ1bmN0aW9uIFF3KGUpe2xldCB0PVsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxuPShlLTEpKjM7cmV0dXJuW3Rbbl0sdFtuKzFdLHRbbisyXV19ZnVuY3Rpb24gSXMoZSl7ZS5zdHlsZS5iYWNrZ3JvdW5kPSJ2YXIoLS1kYXNoYm9hcmQtY29sb3ItYmctY2FyZCwgI2ZmZmZmZikiLGUuc3R5bGUuYm9yZGVyPSIxcHggc29saWQgdmFyKC0tZGFzaGJvYXJkLWNvbG9yLWJvcmRlciwgI2Q4ZGRlNikiLGUuc3R5bGUuYm9yZGVyUmFkaXVzPSI2cHgiLGUuc3R5bGUuY29sb3I9InZhcigtLWRhc2hib2FyZC1jb2xvci10ZXh0LCAjMWYyOTMzKSIsZS5zdHlsZS5mb250RmFtaWx5PSJpbmhlcml0IixlLnN0eWxlLmZvbnRTaXplPSIwLjg1cmVtIixlLnN0eWxlLnBhZGRpbmc9IjZweCA4cHgiLGUuc3R5bGUud2lkdGg9IjEwMCUifWZ1bmN0aW9uIHBBKGUsdCl7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTtuLnN0eWxlLmRpc3BsYXk9ImZsZXgiLG4uc3R5bGUuYWxpZ25JdGVtcz0iY2VudGVyIixuLnN0eWxlLmdhcD0iMTBweCI7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3IudGV4dENvbnRlbnQ9ZT8ubGFiZWx8fGBJbnB1dCAke3QrMX1gLHIuc3R5bGUuY29sb3I9InZhcigtLWRhc2hib2FyZC1jb2xvci10ZXh0LXNlY29uZGFyeSwgIzdhODY5OSkiLHIuc3R5bGUuZm9udFdlaWdodD0iNjAwIixyLnN0eWxlLm1pbldpZHRoPSIxNDBweCIsbi5hcHBlbmRDaGlsZChyKTtsZXQgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtvLnN0eWxlLmZsZXg9IjEiLG4uYXBwZW5kQ2hpbGQobyk7bGV0IGE9ZT8udHlwZXx8InRleHQiLGk9QXJyYXkuaXNBcnJheShlPy5vcHRpb25zKT9lLm9wdGlvbnM6W107aWYoYT09PSJjaGVja2JveCIpe2xldCBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIGwudHlwZT0iY2hlY2tib3giLGwuY2hlY2tlZD0hIWU/LnZhbHVlLG8uYXBwZW5kQ2hpbGQobCkse2xpbmU6bixmb2N1c1RhcmdldDpsLGdldFZhbHVlOigpPT5sLmNoZWNrZWR9fWlmKGE9PT0icmFkaW8iKXtsZXQgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtsLnN0eWxlLmRpc3BsYXk9ImZsZXgiLGwuc3R5bGUuZmxleFdyYXA9IndyYXAiLGwuc3R5bGUuZ2FwPSIxMHB4IjtsZXQgZD1gZGV2LXByb21wdC1yYWRpby0ke0RhdGUubm93KCl9LSR7dH1gLGM9bnVsbDtmb3IobGV0W3UscF1vZiBpLmVudHJpZXMoKSl7bGV0IGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTtmLnN0eWxlLmRpc3BsYXk9ImlubGluZS1mbGV4IixmLnN0eWxlLmFsaWduSXRlbXM9ImNlbnRlciIsZi5zdHlsZS5nYXA9IjRweCI7bGV0IHk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTt5LnR5cGU9InJhZGlvIix5Lm5hbWU9ZCx5LnZhbHVlPVN0cmluZyhwPy52YWx1ZT8/cD8ubGFiZWw/PyIiKSxlPy52YWx1ZSE9bnVsbCYmU3RyaW5nKGUudmFsdWUpPT09eS52YWx1ZSYmKHkuY2hlY2tlZD0hMCksY3x8KGM9eSk7bGV0IHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3YudGV4dENvbnRlbnQ9cD8ubGFiZWw/P3kudmFsdWUsZi5hcHBlbmQoeSx2KSxsLmFwcGVuZENoaWxkKGYpLHU9PT1pLmxlbmd0aC0xJiYhbC5xdWVyeVNlbGVjdG9yKCJpbnB1dDpjaGVja2VkIikmJmMmJihjLmNoZWNrZWQ9ITApfXJldHVybiBvLmFwcGVuZENoaWxkKGwpLHtsaW5lOm4sZm9jdXNUYXJnZXQ6YyxnZXRWYWx1ZTooKT0+e2xldCB1PWwucXVlcnlTZWxlY3RvcigiaW5wdXQ6Y2hlY2tlZCIpO3JldHVybiB1P3UudmFsdWU6bnVsbH19fWlmKGE9PT0ibm90ZSIpe2xldCBsPU9iamVjdC52YWx1ZXMoU28pLmZsYXQoKSxkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpO0lzKGQpO2ZvcihsZXQgdSBvZiBsKXtsZXQgcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTtwLnZhbHVlPXUudXVpZCxwLnRleHRDb250ZW50PXUubmFtZXx8dS51dWlkLGQuYXBwZW5kQ2hpbGQocCl9cmV0dXJuIGU/LnZhbHVlIT1udWxsJiYoZC52YWx1ZT1TdHJpbmcoZWMoZS52YWx1ZSkpKSxvLmFwcGVuZENoaWxkKGQpLHtsaW5lOm4sZm9jdXNUYXJnZXQ6ZCxnZXRWYWx1ZTooKT0+bC5maW5kKHU9PnUudXVpZD09PWQudmFsdWUpfHxudWxsfX1pZihhPT09InNlbGVjdCIpe2xldCBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpO0lzKGwpO2ZvcihsZXQgZCBvZiBpKXtsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTtjLnZhbHVlPVN0cmluZyhkPy52YWx1ZT8/ZD8ubGFiZWw/PyIiKSxjLnRleHRDb250ZW50PWQ/LmxhYmVsPz9jLnZhbHVlLGwuYXBwZW5kQ2hpbGQoYyl9cmV0dXJuIGU/LnZhbHVlIT1udWxsJiYobC52YWx1ZT1TdHJpbmcoZS52YWx1ZSkpLG8uYXBwZW5kQ2hpbGQobCkse2xpbmU6bixmb2N1c1RhcmdldDpsLGdldFZhbHVlOigpPT5sLnZhbHVlfX1pZihhPT09ImRhdGUiKXtsZXQgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO2lmKGwudHlwZT0iZGF0ZSIsZT8udmFsdWUhPW51bGwpe2xldCBkPW5ldyBEYXRlKHRjKE51bWJlcihlLnZhbHVlKSkpO051bWJlci5pc05hTihkLmdldFRpbWUoKSl8fChsLnZhbHVlPWQudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKSl9cmV0dXJuIElzKGwpLG8uYXBwZW5kQ2hpbGQobCkse2xpbmU6bixmb2N1c1RhcmdldDpsLGdldFZhbHVlOigpPT57aWYoIWwudmFsdWUpcmV0dXJuIG51bGw7bGV0IGQ9RGF0ZS5wYXJzZShgJHtsLnZhbHVlfVQwMDowMDowMFpgKTtyZXR1cm4gTnVtYmVyLmlzTmFOKGQpP251bGw6TWF0aC5mbG9vcihkLzFlMyl9fX1pZihhPT09InRleHQiKXtsZXQgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO3JldHVybiBsLnJvd3M9MixJcyhsKSxsLnZhbHVlPVN0cmluZyhlPy52YWx1ZT8/IiIpLGU/LnBsYWNlaG9sZGVyJiYobC5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyKSxvLmFwcGVuZENoaWxkKGwpLHtsaW5lOm4sZm9jdXNUYXJnZXQ6bCxnZXRWYWx1ZTooKT0+bC52YWx1ZX19bGV0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyZXR1cm4gcy50eXBlPWE9PT0ic2VjdXJlVGV4dCI/InBhc3N3b3JkIjoidGV4dCIsSXMocykscy52YWx1ZT1TdHJpbmcoZT8udmFsdWU/PyIiKSxlPy5wbGFjZWhvbGRlciYmKHMucGxhY2Vob2xkZXI9ZS5wbGFjZWhvbGRlciksby5hcHBlbmRDaGlsZChzKSx7bGluZTpuLGZvY3VzVGFyZ2V0OnMsZ2V0VmFsdWU6KCk9PnMudmFsdWV9fWZ1bmN0aW9uIFpmKGUsdCl7ZS5zdHlsZS5ib3JkZXI9IjFweCBzb2xpZCB2YXIoLS1kYXNoYm9hcmQtY29sb3ItYm9yZGVyLCAjZDhkZGU2KSIsZS5zdHlsZS5ib3JkZXJSYWRpdXM9IjZweCIsZS5zdHlsZS5jdXJzb3I9InBvaW50ZXIiLGUuc3R5bGUuZm9udFNpemU9IjAuOHJlbSIsZS5zdHlsZS5mb250V2VpZ2h0PSI2MDAiLGUuc3R5bGUucGFkZGluZz0iOHB4IDE2cHgiLHQ/KGUuc3R5bGUuYmFja2dyb3VuZD0idmFyKC0tZGFzaGJvYXJkLWNvbG9yLWFjY2VudCwgI2U4ODUzZCkiLGUuc3R5bGUuYm9yZGVyQ29sb3I9InZhcigtLWRhc2hib2FyZC1jb2xvci1hY2NlbnQsICNlODg1M2QpIixlLnN0eWxlLmNvbG9yPSJ2YXIoLS1kYXNoYm9hcmQtY29sb3ItdGV4dC1vbi1hY2NlbnQsICNmZmZmZmYpIik6KGUuc3R5bGUuYmFja2dyb3VuZD0idHJhbnNwYXJlbnQiLGUuc3R5bGUuY29sb3I9InZhcigtLWRhc2hib2FyZC1jb2xvci10ZXh0LXNlY29uZGFyeSwgIzdhODY5OSkiKX1mdW5jdGlvbiBmQShlLHQ9e30pe2lmKHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtsZXQgbj1BcnJheS5pc0FycmF5KHQ/LmlucHV0cykmJnQuaW5wdXRzLmxlbmd0aD4wP3QuaW5wdXRzOlt7dHlwZToidGV4dCJ9XSxyPUFycmF5LmlzQXJyYXkodD8uYWN0aW9ucyk/dC5hY3Rpb25zOltdO3JldHVybiBuZXcgUHJvbWlzZShvPT57bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5kYXRhc2V0LmRldlByb21wdD0ib3ZlcmxheSIsYS5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLGEuc3R5bGUuaW5zZXQ9IjAiLGEuc3R5bGUuYmFja2dyb3VuZD0idmFyKC0tZGFzaGJvYXJkLWNvbG9yLW92ZXJsYXktYmFja2Ryb3AsIHJnYmEoMCwwLDAsMC40KSkiLGEuc3R5bGUuekluZGV4PSI5OTk5OSIsYS5zdHlsZS5kaXNwbGF5PSJncmlkIixhLnN0eWxlLnBsYWNlSXRlbXM9ImNlbnRlciI7bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aS5zdHlsZS53aWR0aD0ibWluKDY1MHB4LCA5MnZ3KSIsaS5zdHlsZS5iYWNrZ3JvdW5kPSJ2YXIoLS1kYXNoYm9hcmQtY29sb3ItYmctY2FyZCwgI2ZmZmZmZikiLGkuc3R5bGUuYm9yZGVyPSIxcHggc29saWQgdmFyKC0tZGFzaGJvYXJkLWNvbG9yLWJvcmRlciwgI2Q4ZGRlNikiLGkuc3R5bGUuYm9yZGVyUmFkaXVzPSIxNHB4IixpLnN0eWxlLmNvbG9yPSJ2YXIoLS1kYXNoYm9hcmQtY29sb3ItdGV4dCwgIzFmMjkzMykiLGkuc3R5bGUuZm9udEZhbWlseT0iUm9ib3RvLCBzeXN0ZW0tdWksIHNhbnMtc2VyaWYiLGkuc3R5bGUuYm94U2hhZG93PSIwIDhweCAzMnB4IHJnYmEoMCwwLDAsMC4yNSkiLGEuYXBwZW5kQ2hpbGQoaSk7bGV0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cy50ZXh0Q29udGVudD1TdHJpbmcoZT8/IlByb21wdCIpLHMuc3R5bGUuYm9yZGVyQm90dG9tPSIxcHggc29saWQgdmFyKC0tZGFzaGJvYXJkLWNvbG9yLWJvcmRlciwgI2Q4ZGRlNikiLHMuc3R5bGUuY29sb3I9InZhcigtLWRhc2hib2FyZC1jb2xvci1uYXZ5LCAjMmMzZTZiKSIscy5zdHlsZS5mb250U2l6ZT0iMC45NXJlbSIscy5zdHlsZS5mb250V2VpZ2h0PSI3MDAiLHMuc3R5bGUucGFkZGluZz0iMTZweCIsaS5hcHBlbmRDaGlsZChzKTtsZXQgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJmb3JtIik7bC5zdHlsZS5kaXNwbGF5PSJmbGV4IixsLnN0eWxlLmZsZXhEaXJlY3Rpb249ImNvbHVtbiIsbC5zdHlsZS5mb250U2l6ZT0iMC44NXJlbSIsbC5zdHlsZS5nYXA9IjEwcHgiLGwuc3R5bGUucGFkZGluZz0iMTZweCIsaS5hcHBlbmRDaGlsZChsKTtsZXQgZD1uLm1hcCgodix3KT0+cEEodix3KSk7Zm9yKGxldCB2IG9mIGQpbC5hcHBlbmRDaGlsZCh2LmxpbmUpO2xldCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Muc3R5bGUuZGlzcGxheT0iZmxleCIsYy5zdHlsZS5qdXN0aWZ5Q29udGVudD0iZmxleC1lbmQiLGMuc3R5bGUuZ2FwPSI4cHgiLGMuc3R5bGUuYm9yZGVyVG9wPSIxcHggc29saWQgdmFyKC0tZGFzaGJvYXJkLWNvbG9yLWJvcmRlciwgI2Q4ZGRlNikiLGMuc3R5bGUubWFyZ2luVG9wPSI4cHgiLGMuc3R5bGUucGFkZGluZ1RvcD0iMTZweCIsbC5hcHBlbmRDaGlsZChjKTtsZXQgdT0tMTtmb3IobGV0W3Ysd11vZiByLmVudHJpZXMoKSl7bGV0IGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Zy50eXBlPSJidXR0b24iLGcudGV4dENvbnRlbnQ9dz8ubGFiZWx8fGBBY3Rpb24gJHt2KzF9YCxaZihnLCExKSxnLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e3U9dz8udmFsdWU/P3YsbC5yZXF1ZXN0U3VibWl0KCl9KSxjLmFwcGVuZENoaWxkKGcpfWxldCBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO3AudHlwZT0iYnV0dG9uIixwLmRhdGFzZXQuZGV2UHJvbXB0Q2FuY2VsPSJ0cnVlIixwLnRleHRDb250ZW50PSJDYW5jZWwiLFpmKHAsITEpLHAuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57YS5yZW1vdmUoKSxvKG51bGwpfSksYy5hcHBlbmRDaGlsZChwKTtsZXQgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtmLnR5cGU9InN1Ym1pdCIsZi50ZXh0Q29udGVudD0iU3VibWl0IixaZihmLCEwKSxjLmFwcGVuZENoaWxkKGYpLGwuYWRkRXZlbnRMaXN0ZW5lcigic3VibWl0Iix2PT57di5wcmV2ZW50RGVmYXVsdCgpO2xldCB3PWQubWFwKGc9PmcuZ2V0VmFsdWUoKSk7YS5yZW1vdmUoKSx3Lmxlbmd0aD09PTEmJnIubGVuZ3RoPT09MD9vKHdbMF0pOnIubGVuZ3RoPT09MD9vKHcpOm8oWy4uLncsdV0pfSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtsZXQgeT1kLmZpbmQodj0+di5mb2N1c1RhcmdldCk/LmZvY3VzVGFyZ2V0O3kmJnkuZm9jdXMoKX0pfXZhciBScz1udWxsO2FzeW5jIGZ1bmN0aW9uIGEwKCl7aWYoUnMhPT1udWxsKXJldHVybiBSczt0cnl7UnM9YXdhaXQoYXdhaXQgZmV0Y2goIi9hcGkvc2V0dGluZ3MiKSkuanNvbigpfWNhdGNoe1JzPXt9fXJldHVybiBSc31hc3luYyBmdW5jdGlvbiBtQShlLHQpe2xldCBuPWF3YWl0IGEwKCk7bltlXT10O3RyeXthd2FpdCBmZXRjaCgiL2FwaS9zZXR0aW5ncyIse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHtrZXk6ZSx2YWx1ZTp0fSl9KX1jYXRjaChyKXtjb25zb2xlLndhcm4oIltkZXYtYXBwXSBmYWlsZWQgdG8gcGVyc2lzdCBzZXR0aW5nIixlLHIpfX1hc3luYyBmdW5jdGlvbiBlbSgpe3RyeXtsZXQgZT1hd2FpdCBmZXRjaCgiL2FwaS90YXNrcyIpO3JldHVybiB0bShhd2FpdCBlLmpzb24oKSl9Y2F0Y2h7cmV0dXJuW119fWFzeW5jIGZ1bmN0aW9uIGhBKGUsdCl7dHJ5e2xldCBuPWF3YWl0IGZldGNoKGAvYXBpL3Rhc2tzP2Zyb209JHtlfSZ0bz0ke3R9YCk7cmV0dXJuIHRtKGF3YWl0IG4uanNvbigpKX1jYXRjaHtyZXR1cm5bXX19YXN5bmMgZnVuY3Rpb24gWncoZSl7dHJ5e2xldCB0PWU/YC9hcGkvbW9vZHM/ZnJvbT0ke2V9YDoiL2FwaS9tb29kcyI7cmV0dXJuIGF3YWl0KGF3YWl0IGZldGNoKHQpKS5qc29uKCl9Y2F0Y2h7cmV0dXJuW119fXZhciBnQT1be2lkOiJkb21haW4td29yay11dWlkIixuYW1lOiJXb3JrIix1dWlkOiJkb21haW4td29yay11dWlkIixub3RlczpTb1siZG9tYWluLXdvcmstdXVpZCJdfSx7aWQ6ImRvbWFpbi1wZXJzb25hbC11dWlkIixuYW1lOiJQZXJzb25hbCIsdXVpZDoiZG9tYWluLXBlcnNvbmFsLXV1aWQiLG5vdGVzOlNvWyJkb21haW4tcGVyc29uYWwtdXVpZCJdfSx7aWQ6ImRvbWFpbi1zaWRlLXV1aWQiLG5hbWU6IlNpZGUgUHJvamVjdHMiLHV1aWQ6ImRvbWFpbi1zaWRlLXV1aWQiLG5vdGVzOlNvWyJkb21haW4tc2lkZS11dWlkIl19XTtmdW5jdGlvbiBlMChlLHQ9IiIsbj0iIil7bGV0IHI9dHlwZW9mIG49PSJzdHJpbmciP24udHJpbSgpLnRvTG93ZXJDYXNlKCk6IiI7aWYoIWlBLmhhcyhyKXx8cj09PSJyZWxldmFuY2UiJiYhdClyZXR1cm4gZTtpZighWyJyZWxldmFuY2UiLCJ0aXRsZSJdLmluY2x1ZGVzKHIpKXtsZXQgYT1yPT09ImNyZWF0ZWQiPyJjcmVhdGVkIjpyPT09Im9wZW5lZCI/Im9wZW5lZCI6InVwZGF0ZWQiLGk9cz0+e2xldCBsPURhdGUucGFyc2Uocz8uW2FdfHwoYT09PSJvcGVuZWQiP3M/LnVwZGF0ZWR8fHM/LmNyZWF0ZWQ6IiIpfHwiIik7cmV0dXJuIE51bWJlci5pc05hTihsKT8wOmx9O3JldHVyblsuLi5lXS5zb3J0KChzLGwpPT57bGV0IGQ9aShsKS1pKHMpO3JldHVybiBkIT09MD9kOihzPy5uYW1lfHwiIikubG9jYWxlQ29tcGFyZShsPy5uYW1lfHwiIil9KX1sZXQgbz10LnRyaW0oKS50b0xvd2VyQ2FzZSgpO3JldHVyblsuLi5lXS5zb3J0KChhLGkpPT57bGV0IHM9YT8ubmFtZXx8IiIsbD1pPy5uYW1lfHwiIjtpZihyPT09InRpdGxlIilyZXR1cm4gcy5sb2NhbGVDb21wYXJlKGwpO2xldCBkPXU9PntsZXQgcD11LnRvTG93ZXJDYXNlKCk7cmV0dXJuIHA9PT1vPzM6cC5zdGFydHNXaXRoKG8pPzI6cC5pbmNsdWRlcyhvKT8xOjB9LGM9ZChsKS1kKHMpO3JldHVybiBjIT09MD9jOnMubG9jYWxlQ29tcGFyZShsKX0pfWFzeW5jIGZ1bmN0aW9uIHQwKGUpe3RyeXtyZXR1cm4gYXdhaXQoYXdhaXQgZmV0Y2goYC9hcGkvbm90ZS1maW5kP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoZSl9YCkpLmpzb24oKX1jYXRjaHtyZXR1cm4gbnVsbH19YXN5bmMgZnVuY3Rpb24gbjAoZSl7dHJ5e2xldCBuPWF3YWl0IG5tKCkuZ2V0Tm90ZUNvbnRlbnQoZSk7cmV0dXJuIHIwKG58fCIiKX1jYXRjaHtyZXR1cm5bXX19dmFyIHRpPW51bGw7ZnVuY3Rpb24gbm0oKXtpZih0aSlyZXR1cm4gdGk7bGV0IGU9dD0+e2xldCBuPS9eaHR0cHM6XC9cL3d3d1wuYW1wbGVub3RlXC5jb21cL25vdGVzKD86JHxbLz9dLiopLy50ZXN0KHQpO3JldHVybiBuP2NvbnNvbGUubG9nKCJbZGV2LWFwcF0gbmF2aWdhdGUiLHQpOmNvbnNvbGUud2FybigiW2Rldi1hcHBdIG5hdmlnYXRlIHJlamVjdGVkIGludmFsaWQgVVJMIix0KSxufTtyZXR1cm4gdGk9e3NldHRpbmdzOnt9LGFzeW5jIGluaXQoKXtsZXQgdD1hd2FpdCBhMCgpO2lmKHRbSnddfHwodFtKd109InRydWUiKSx0eXBlb2YgdC5kYXNoYm9hcmRfZWxlbWVudHM9PSJzdHJpbmciKXRyeXt0LmRhc2hib2FyZF9lbGVtZW50cz1KU09OLnBhcnNlKHQuZGFzaGJvYXJkX2VsZW1lbnRzKX1jYXRjaHt0LmRhc2hib2FyZF9lbGVtZW50cz1udWxsfWxldCBuPVsidmljdG9yeS12YWx1ZSIsImNhbGVuZGFyIiwibW9vZCIsIm5vdGUtcGVlayIsInF1b3RlcyJdO2ZvcihsZXQgbSBvZiBuLm1hcChzQSkpaWYodHlwZW9mIHRbbV09PSJzdHJpbmciKXRyeXt0W21dPUpTT04ucGFyc2UodFttXSl9Y2F0Y2h7dFttXT1udWxsfWxldCByPW5ldyBEYXRlLG89bEEociksYT1hd2FpdCBlbSgpLGk9YXdhaXQgWncoKSxzPU1hdGguY2VpbCgoci5nZXRNb250aCgpKzEpLzMpLGw9YFEke3N9ICR7ci5nZXRGdWxsWWVhcigpfWAsZD1zPT09ND8xOnMrMSxjPXM9PT00P3IuZ2V0RnVsbFllYXIoKSsxOnIuZ2V0RnVsbFllYXIoKSx1PWBRJHtkfSAke2N9YCxbcCxmXT1hd2FpdCBQcm9taXNlLmFsbChbdDAoYCR7bH0gUGxhbmApLHQwKGAke3V9IFBsYW5gKV0pLFt5LHZdPWF3YWl0IFByb21pc2UuYWxsKFtwPy51dWlkP24wKHAudXVpZCk6UHJvbWlzZS5yZXNvbHZlKFtdKSxmPy51dWlkP24wKGYudXVpZCk6UHJvbWlzZS5yZXNvbHZlKFtdKV0pLHc9UXcocyksZz1RdyhkKSxoPXcuZXZlcnkobT0+eS5zb21lKFM9PlMuaGVhZGluZz8udGV4dD8udHJpbSgpLnRvTG93ZXJDYXNlKCk9PT1tLnRvTG93ZXJDYXNlKCkpKSxiPWcuZXZlcnkobT0+di5zb21lKFM9PlMuaGVhZGluZz8udGV4dD8udHJpbSgpLnRvTG93ZXJDYXNlKCk9PT1tLnRvTG93ZXJDYXNlKCkpKTtyZXR1cm4gdGkuc2V0dGluZ3M9dCx7dGFza3M6YSx0b2RheVRhc2tzOmRBKGEsciksY29tcGxldGVkVGhpc1dlZWs6bzAoYSxvKSx3ZWVrbHlWaWN0b3J5VmFsdWU6Y0EoYSxvKSxkYWlseVZpY3RvcnlWYWx1ZXM6dUEoYSxvKSxtb29kUmF0aW5nczppLHF1YXJ0ZXJseVBsYW5zOntjdXJyZW50Ont5ZWFyOnIuZ2V0RnVsbFllYXIoKSxxdWFydGVyOnMsbGFiZWw6bCxub3RlVVVJRDpwPy51dWlkPz9udWxsLGhhc0FsbE1vbnRobHlEZXRhaWxzOmh9LG5leHQ6e3llYXI6YyxxdWFydGVyOmQsbGFiZWw6dSxub3RlVVVJRDpmPy51dWlkPz9udWxsLGhhc0FsbE1vbnRobHlEZXRhaWxzOmJ9fSxjdXJyZW50RGF0ZTpyLnRvSVNPU3RyaW5nKCksc2V0dGluZ3M6dCx0YXNrRG9tYWluczpbe25hbWU6IldvcmsiLHV1aWQ6ImRvbWFpbi13b3JrLXV1aWQifSx7bmFtZToiUGVyc29uYWwiLHV1aWQ6ImRvbWFpbi1wZXJzb25hbC11dWlkIn0se25hbWU6IlNpZGUgUHJvamVjdHMiLHV1aWQ6ImRvbWFpbi1zaWRlLXV1aWQifV0sYWN0aXZlVGFza0RvbWFpbjoiZG9tYWluLXdvcmstdXVpZCJ9fSxhc3luYyBjb25maWd1cmUoKXtyZXR1cm4gbnVsbH0sYXN5bmMgZ2V0TW9vZFJhdGluZ3ModCl7cmV0dXJuIFp3KHQpfSxhc3luYyBnZXRDb21wbGV0ZWRUYXNrcyh0LG4pe3JldHVybiBoQSh0LG4pfSxhc3luYyBnZXRFeHRlcm5hbENhbGVuZGFyRXZlbnRzKCl7bGV0IHQ9bmV3IERhdGUsbj10LmdldEZ1bGxZZWFyKCkscj10LmdldE1vbnRoKCksbz10LmdldERhdGUoKTtyZXR1cm5be2FsbERheTohMSxjYWxlbmRhcjp7dXVpZDoiY2FsLXBlcnNvbmFsLXV1aWQiLG5hbWU6IlBlcnNvbmFsIn0sY29sb3I6IiM0Mjg1ZjQiLGVuZDpuZXcgRGF0ZShuLHIsbywxNywwLDApLHN0YXJ0Om5ldyBEYXRlKG4scixvLDE2LDAsMCksdGl0bGU6IkJpcnRoZGF5IHBhcnR5In0se2FsbERheTohMSxjYWxlbmRhcjp7dXVpZDoiY2FsLXdvcmstdXVpZCIsbmFtZToiV29yayJ9LGNvbG9yOiIjMGI4MDQzIixlbmQ6bmV3IERhdGUobixyLG8rMiwxMiwyNSwwKSxzdGFydDpuZXcgRGF0ZShuLHIsbysyLDExLDI1LDApLHRpdGxlOiJRdWFydGVybHkgUmV2aWV3IFN5bmMifV19LGFzeW5jIGdldFRhc2tEb21haW5zKCl7cmV0dXJuIGdBfSxhc3luYyBnZXRQZW9wbGUoKXtyZXR1cm4gemJ9LGFzeW5jIGdldFRhc2tEb21haW5UYXNrcyh0KXtsZXQgbj10P2AvYXBpL3Rhc2tzP2RvbWFpbj0ke2VuY29kZVVSSUNvbXBvbmVudCh0KX1gOiIvYXBpL3Rhc2tzIixyPWF3YWl0IGZldGNoKG4pO3JldHVybiB0bShhd2FpdCByLmpzb24oKSl9LGFzeW5jIGdldE5vdGVUYXNrcyh0LG4pe2xldCByPXR5cGVvZiB0PT0ic3RyaW5nIj90OnQ/LnV1aWQ7cmV0dXJuKGF3YWl0IGVtKCkpLmZpbHRlcihhPT5hLm5vdGVVVUlEPT09ciYmYS5jb21wbGV0ZWRBdD09bnVsbCYmYS5kaXNtaXNzZWRBdD09bnVsbCl9LGFzeW5jIGdldFRhc2sodCl7cmV0dXJuKGF3YWl0IGVtKCkpLmZpbmQocj0+ci51dWlkPT09dCl8fG51bGx9LG5hdmlnYXRlKHQpe3JldHVybiBlKHQpfSxhc3luYyBzZXRTZXR0aW5nKHQsbil7bGV0IHI9bj09bnVsbD8iIjpTdHJpbmcobik7dGkuc2V0dGluZ3NbdF09cixhd2FpdCBtQSh0LHIpfSxhc3luYyByZWNvcmRNb29kUmF0aW5nKHQpe3RyeXtyZXR1cm4oYXdhaXQoYXdhaXQgZmV0Y2goIi9hcGkvbW9vZHMiLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dmFsdWU6dH0pfSkpLmpzb24oKSkudXVpZH1jYXRjaChuKXtyZXR1cm4gaygiW2Rldi1hcHBdIHJlY29yZE1vb2RSYXRpbmcgZmFpbGVkOiIsbiksbnVsbH19LGFzeW5jIHVwZGF0ZU1vb2RSYXRpbmcodCxuKXt0cnl7YXdhaXQgZmV0Y2goIi9hcGkvbW9vZHMiLHttZXRob2Q6IlBBVENIIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3V1aWQ6dCx1cGRhdGVzOm59KX0pfWNhdGNoKHIpe2soIltkZXYtYXBwXSB1cGRhdGVNb29kUmF0aW5nIGZhaWxlZDoiLHIpfX0sYXN5bmMgZ2V0Tm90ZUNvbnRlbnQodCl7bGV0IG49ZWModCk7dHJ5e3JldHVybihhd2FpdChhd2FpdCBmZXRjaChgL2FwaS9ub3RlLWNvbnRlbnQ/dXVpZD0ke2VuY29kZVVSSUNvbXBvbmVudChuKX1gKSkuanNvbigpKS5jb250ZW50Pz8iIn1jYXRjaHtyZXR1cm4iIn19LGFzeW5jIGdldE5vdGVTZWN0aW9ucyh0KXtsZXQgbj1hd2FpdCB0aGlzLmdldE5vdGVDb250ZW50KHQpO3JldHVybiByMChuKX0saHRtbEZyb21Db250ZW50KHQpe2lmKHR5cGVvZiB0IT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoImh0bWxGcm9tQ29udGVudCByZXF1aXJlcyBhIFN0cmluZyIpO3JldHVybmA8ZGl2IGNsYXNzPSJhbXBsZS1lZGl0b3IiPiR7ancodCl9PC9kaXY+YH0sYXN5bmMgZmluZE5vdGUodD17fSl7aWYodC51dWlkKXtsZXQgbj1PYmplY3QudmFsdWVzKFNvKS5mbGF0KCkuZmluZChyPT5yLnV1aWQ9PT10LnV1aWQpO2lmKG4pcmV0dXJuIG59dHJ5e2xldCBuPXQudXVpZD9gdXVpZD0ke2VuY29kZVVSSUNvbXBvbmVudCh0LnV1aWQpfWA6YG5hbWU9JHtlbmNvZGVVUklDb21wb25lbnQodC5uYW1lKX1gLG89YXdhaXQoYXdhaXQgZmV0Y2goYC9hcGkvbm90ZS1maW5kPyR7bn1gKSkuanNvbigpO3JldHVybiBvPy51dWlkP286bnVsbH1jYXRjaHtyZXR1cm4gbnVsbH19LGZpbHRlck5vdGVzKHQ9e30sbj0iIil7bGV0IHI7aWYodC50YXNrRG9tYWluVVVJRCl7bGV0IG89KFNvW3QudGFza0RvbWFpblVVSURdfHxbXSkuZmlsdGVyKGE9PmdmKGEsdC5ncm91cCkpO3I9ZTAobyx0LnF1ZXJ5LG4pfWVsc2V7bGV0IG89T2JqZWN0LnZhbHVlcyhTbykuZmxhdCgpLmZpbHRlcihpPT5nZihpLHQuZ3JvdXApKSxhPXQucXVlcnk/by5maWx0ZXIoaT0+KGkubmFtZXx8IiIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModC5xdWVyeS50b0xvd2VyQ2FzZSgpKSk6bztyPWUwKGEsdC5xdWVyeXx8bnVsbCxuKX1yZXR1cm4gV2Iocil9LGFzeW5jIHVwZGF0ZVRhc2sodCxuKXtyZXR1cm4gaygiW2Rldi1hcHBdIHVwZGF0ZVRhc2siLHQsbiksITB9LGFzeW5jIGNyZWF0ZU5vdGUodCxuPVtdKXt0cnl7cmV0dXJuKGF3YWl0KGF3YWl0IGZldGNoKCIvYXBpL25vdGUtY3JlYXRlIix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe25hbWU6dCx0YWdzOm59KX0pKS5qc29uKCkpLnV1aWR9Y2F0Y2h7cmV0dXJuIG51bGx9fSxhc3luYyByZXBsYWNlTm90ZUNvbnRlbnQodCxuLHI9e30pe2xldCBvPWVjKHQpO3RyeXtsZXQgYT17dXVpZDpvLGNvbnRlbnQ6bn07cmV0dXJuIHIuc2VjdGlvbiYmKGEuc2VjdGlvbj1yLnNlY3Rpb24pLChhd2FpdChhd2FpdCBmZXRjaCgiL2FwaS9ub3RlLWNvbnRlbnQiLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeShhKX0pKS5qc29uKCkpLm9rfHwhMX1jYXRjaHtyZXR1cm4hMX19LGFzeW5jIGluc2VydE5vdGVDb250ZW50KHQsbixyPXt9KXtsZXQgbz1lYyh0KTt0cnl7YXdhaXQgZmV0Y2goIi9hcGkvbm90ZS1hcHBlbmQiLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dXVpZDpvLGNvbnRlbnQ6bixhdEVuZDohIXIuYXRFbmR9KX0pfWNhdGNoe319LGFzeW5jIGF0dGFjaE5vdGVNZWRpYSh0LG4pe2soIltkZXYtYXBwXSBhdHRhY2hOb3RlTWVkaWEgY2FsbGVkLCBkYXRhVVJMIGxlbmd0aDoiLG4/Lmxlbmd0aHx8MCk7dHJ5e2xldCBhPShhd2FpdChhd2FpdCBmZXRjaCgiL2FwaS9hdHRhY2gtbWVkaWEiLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7ZGF0YVVSTDpufSl9KSkuanNvbigpKS51cmx8fG51bGw7cmV0dXJuIGsoIltkZXYtYXBwXSBhdHRhY2hOb3RlTWVkaWEgcmVzcG9uc2U6IixhP2BVUkwgcmVjZWl2ZWQ6ICR7YX1gOiJubyBVUkwgaW4gcmVzcG9uc2UiKSxhfWNhdGNoKHIpe3JldHVybiBrKCJbZGV2LWFwcF0gYXR0YWNoTm90ZU1lZGlhIEZBSUxFRDoiLHIpLG51bGx9fSxhc3luYyBwcm9tcHQodCxuPXt9KXtyZXR1cm4gZkEodCxuKX19LHRpfWZ1bmN0aW9uIHJtKCl7aWYodHlwZW9mIG5hdmlnYXRvcj4idSIpcmV0dXJuITE7bGV0IGU9bmF2aWdhdG9yLnVzZXJBZ2VudHx8IiI7cmV0dXJuL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KGUpPyEwOm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cz4xJiYvTWFjaW50b3NoLy50ZXN0KGUpfWZ1bmN0aW9uIGkwKCl7aWYodHlwZW9mIG5hdmlnYXRvcj4idSIpcmV0dXJuIG51bGw7bGV0IGU9bmF2aWdhdG9yLmRldmljZU1lbW9yeTtyZXR1cm4gdHlwZW9mIGU9PSJudW1iZXIiJiZlPjA/ZTpudWxsfWZ1bmN0aW9uIHMwKCl7aWYodHlwZW9mIG5hdmlnYXRvcj4idSIpcmV0dXJuIG51bGw7bGV0IGU9bmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3k7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIiYmZT4wP2U6bnVsbH1mdW5jdGlvbiBsMCgpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybntkZXZpY2VXaWR0aDpudWxsLGlubmVySGVpZ2h0Om51bGwsaW5uZXJXaWR0aDpudWxsfTtsZXQgZT10eXBlb2Ygc2NyZWVuPCJ1Ij9zY3JlZW46bnVsbDtyZXR1cm57ZGV2aWNlV2lkdGg6ZT9NYXRoLm1pbihlLndpZHRoLGUuaGVpZ2h0KTpudWxsLGlubmVySGVpZ2h0OndpbmRvdy5pbm5lckhlaWdodHx8bnVsbCxpbm5lcldpZHRoOndpbmRvdy5pbm5lcldpZHRofHxudWxsfX1mdW5jdGlvbiBkMCgpe2xldCBlPWkwKCksdD1zMCgpLG49cm0oKSx7ZGV2aWNlV2lkdGg6cn09bDAoKSxvPXIhPW51bGwmJnI8PTQzMDtyZXR1cm4gZSE9bnVsbCYmZTw9NHx8dCE9bnVsbCYmdDw9NHx8biYmbz8ibG93IjohbiYmKGU9PW51bGx8fGU+NCkmJih0PT1udWxsfHx0PjQpPyJoaWdoIjoibWVkaXVtIn1mdW5jdGlvbiBjMCgpe3JldHVybiBybSgpfHxkMCgpPT09ImxvdyJ9ZnVuY3Rpb24gb20oKXtsZXR7ZGV2aWNlV2lkdGg6ZSxpbm5lckhlaWdodDp0LGlubmVyV2lkdGg6bn09bDAoKTtyZXR1cm57Y29yZXM6czAoKSxkZXZpY2VXaWR0aDplLGlubmVySGVpZ2h0OnQsaW5uZXJXaWR0aDpuLG1lbW9yeUdiOmkwKCksbW9iaWxlOnJtKCksdGllcjpkMCgpfX1mdW5jdGlvbiB1MCgpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybjtsZXQgZT1vbSgpO3JldHVybiB3aW5kb3cuX19kYXNoYm9hcmRWaWV3cG9ydERpYWc9ZSxlfXZhciBnZT1QKGZlKCksMSk7dmFyIG9yPVsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSx5QT1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGFtPWNsYXNze2NvbnN0cnVjdG9yKHtpbmRleDp0LHNob3J0Om4sZnVsbDpyLHBsYW46byxjdXJyZW50OmF9KXt0aGlzLmluZGV4PXQsdGhpcy5zaG9ydD1uLHRoaXMuZnVsbD1yLHRoaXMucGxhbj1vLHRoaXMuY3VycmVudD1hfX07ZnVuY3Rpb24gUHMoKXtsZXQgZT1uZXcgRGF0ZSx0PWUuZ2V0RnVsbFllYXIoKSxuPWUuZ2V0TW9udGgoKSxyPU1hdGguZmxvb3Iobi8zKSsxO3JldHVybnt5ZWFyOnQscXVhcnRlcjpyLGxhYmVsOmBRJHtyfSAke3R9YH19ZnVuY3Rpb24gcDAoZSx0KXtsZXQgbj0oZS5xdWFydGVyLTEpKjMscj1uZXcgRGF0ZSgpLmdldE1vbnRoKCksbz1bXTtmb3IobGV0IGE9MDthPDY7YSsrKXtsZXQgaT0obithKSUxMjtvLnB1c2gobmV3IGFtKHtpbmRleDppLHNob3J0OnlBW2ldLGZ1bGw6b3JbaV0scGxhbjphPDM/ZTp0LGN1cnJlbnQ6aT09PXJ9KSl9cmV0dXJuIG99ZnVuY3Rpb24gbmMoKXtsZXQgZT1uZXcgRGF0ZSx0PWUuZ2V0RGF5KCksbjtyZXR1cm4gdD09PTY/bj0yOnQ9PT0wP249MTpuPTEtdCxuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLGUuZ2V0RGF0ZSgpK24pfWZ1bmN0aW9uIHJjKGUpe3JldHVybmBXZWVrIG9mICR7b3JbZS5nZXRNb250aCgpXX0gJHtlLmdldERhdGUoKX1gfWZ1bmN0aW9uIG5pKGUsdCl7bGV0IG49dC5yZXBsYWNlKC9bLiorP14ke30oKXxbXF1cXF0vZywiXFwkJiIpLHI9bmV3IFJlZ0V4cChgKF58XFxuKSgjezEsNn0pXFxzKyR7bn1cXHMqXFxuYCwiaSIpLG89ZS5tYXRjaChyKTtpZighbylyZXR1cm4gbnVsbDtsZXQgYT1vLmluZGV4K29bMF0ubGVuZ3RoLGk9ZS5zdWJzdHJpbmcoYSkscz1pLm1hdGNoKC9cbiN7MSw2fVxzLyksbD1zP2kuc3Vic3RyaW5nKDAscy5pbmRleCk6aTtyZXR1cm4gdkEobCl9ZnVuY3Rpb24gdkEoZSl7cmV0dXJuIGUucmVwbGFjZSgvKFxzKlxcXHMqKSskL2csIiIpLnRyaW0oKX1mdW5jdGlvbiBpbShlKXtyZXR1cm5gCiMjIyAke2V9Ci0gRm9jdXM6Ci0gS2V5IG1vdmU6CmB9ZnVuY3Rpb24gc20oZSl7cmV0dXJuYAojIyMgJHtlfQotIFByaW1hcnkgZm9jdXM6Ci0gS2V5IHRhc2tzOgotIENvbW1pdG1lbnRzOgpgfXZhciBVbj1QKGZlKCksMSk7dmFyIHkwPVAoJCgpLDEpLGcwPXt0aGVtZToiZGFzaGJvYXJkIixkdXJhdGlvbjpbMTIwLDgwXSxhcnJvdzohMCxvZmZzZXQ6WzAsOF19O2Z1bmN0aW9uIExzKHtjb250ZW50OmUscGxhY2VtZW50OnQsaW50ZXJhY3RpdmU6bixjaGlsZHJlbjpyLC4uLm99KXtsZXQgYT0oMCxVbi51c2VSZWYpKG51bGwpLGk9KDAsVW4udXNlUmVmKShudWxsKTtyZXR1cm4oMCxVbi51c2VFZmZlY3QpKCgpPT57aWYoYS5jdXJyZW50KXJldHVybiBpLmN1cnJlbnQ9U3MoYS5jdXJyZW50LHsuLi5nMCxjb250ZW50OmV8fCIiLHBsYWNlbWVudDp0fHwidG9wIixpbnRlcmFjdGl2ZTpufHwhMSxhbGxvd0hUTUw6ITAsLi4ub30pLCgpPT57aS5jdXJyZW50Py5kZXN0cm95KCksaS5jdXJyZW50PW51bGx9fSxbXSksKDAsVW4udXNlRWZmZWN0KSgoKT0+e2kuY3VycmVudCYmZSE9bnVsbCYmaS5jdXJyZW50LnNldENvbnRlbnQoZSl9LFtlXSksKDAseTAuanN4KSgic3BhbiIse3JlZjphLHN0eWxlOntkaXNwbGF5OiJpbmxpbmUifSxjaGlsZHJlbjpyfSl9ZnVuY3Rpb24gX3MoZT17fSl7bGV0IHQ9KDAsVW4udXNlUmVmKShudWxsKSxuPSgwLFVuLnVzZVJlZikoe3dpZHRoOjAsaGVpZ2h0OjAsdG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9KSxyPSgwLFVuLnVzZVJlZikobnVsbCksbz0oMCxVbi51c2VSZWYpKGUuaGlkZURlbGF5fHwzMDApLGE9KDAsVW4udXNlUmVmKShudWxsKTtmdW5jdGlvbiBpKCl7ci5jdXJyZW50JiYoY2xlYXJUaW1lb3V0KHIuY3VycmVudCksci5jdXJyZW50PW51bGwpfWZ1bmN0aW9uIHMoYyx1KXtpKCksdSE9PXZvaWQgMCYmKGEuY3VycmVudD11KSxyLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e3IuY3VycmVudD1udWxsLHQuY3VycmVudD8uaGlkZSgpLGEuY3VycmVudCYmYS5jdXJyZW50KCl9LGM/P28uY3VycmVudCl9KDAsVW4udXNlRWZmZWN0KSgoKT0+e3QuY3VycmVudD1Tcyhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx7Li4uZzAsZ2V0UmVmZXJlbmNlQ2xpZW50UmVjdDooKT0+bi5jdXJyZW50LHRyaWdnZXI6Im1hbnVhbCIsaGlkZU9uQ2xpY2s6ITEsYWxsb3dIVE1MOiEwLGludGVyYWN0aXZlOiEhZS5pbnRlcmFjdGl2ZSxwbGFjZW1lbnQ6ZS5wbGFjZW1lbnR8fCJ0b3AiLGFwcGVuZFRvOigpPT5kb2N1bWVudC5ib2R5LC4uLmV9KTtsZXQgYyx1O2lmKGUuaW50ZXJhY3RpdmUpe2xldCBwPXQuY3VycmVudC5wb3BwZXI7Yz0oKT0+aSgpLHU9KCk9PnMoKSxwLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLGMpLHAuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsdSl9cmV0dXJuKCk9PntpZihlLmludGVyYWN0aXZlJiZ0LmN1cnJlbnQpe2xldCBwPXQuY3VycmVudC5wb3BwZXI7YyYmcC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIixjKSx1JiZwLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLHUpfWkoKSx0LmN1cnJlbnQ/LmRlc3Ryb3koKSx0LmN1cnJlbnQ9bnVsbH19LFtdKTtmdW5jdGlvbiBsKGMsdSxwLGYpe2koKTtsZXQgeT10LmN1cnJlbnQ7aWYoIXkpcmV0dXJuO24uY3VycmVudD17d2lkdGg6MCxoZWlnaHQ6MCx0b3A6cCxyaWdodDp1LGJvdHRvbTpwLGxlZnQ6dX0seS5zZXRDb250ZW50KGMpO2xldCB2PWZ8fHt9LHc9di5wbGFjZW1lbnR8fHkucHJvcHMucGxhY2VtZW50O3chPT15LnByb3BzLnBsYWNlbWVudCYmeS5zZXRQcm9wcyh7cGxhY2VtZW50Ond9KTtsZXQgZz15LnBvcHBlci5maXJzdEVsZW1lbnRDaGlsZDtnJiZnLmNsYXNzTGlzdC50b2dnbGUoImJlbG93LWNoYXJ0IiwhIXYuYmVsb3dDaGFydCkseS5zdGF0ZS5pc1Zpc2libGU/eS5wb3BwZXJJbnN0YW5jZT8udXBkYXRlKCk6eS5zaG93KCl9ZnVuY3Rpb24gZCgpe2koKSx0LmN1cnJlbnQ/LmhpZGUoKX1yZXR1cm57c2hvdzpsLGhpZGU6ZCxzY2hlZHVsZUhpZGU6cyxjYW5jZWxTY2hlZHVsZWRIaWRlOml9fXZhciB4dD1QKGZlKCkpO2Z1bmN0aW9uIGV0KGUsdD17fSl7aWYoISh0eXBlb2Ygd2luZG93PiJ1Inx8dHlwZW9mIHdpbmRvdy5wbGF1c2libGUhPSJmdW5jdGlvbiIpKXRyeXt3aW5kb3cucGxhdXNpYmxlKCJEYXNoYm9hcmQgQWN0aW9uIix7cHJvcHM6e2FjdGlvbjplLC4uLnR9fSl9Y2F0Y2gobil7ayhgW1BsYXVzaWJsZV0gRmFpbGVkIHRvIGNhcHR1cmUgZGFzaGJvYXJkIGFjdGlvbiAiJHtlfSI6YCxuKX19dmFyIHNhPSgwLHh0LmNyZWF0ZUNvbnRleHQpKG51bGwpLGFjPSJkYXNoYm9hcmQ6d2lkZ2V0LWxvYWRlZCI7ZnVuY3Rpb24gTkEoZSx0PSJsb2FkZWQiKXt0eXBlb2Ygd2luZG93PiJ1Inx8IWV8fHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChhYyx7ZGV0YWlsOntvdXRjb21lOnQsd2lkZ2V0SWQ6ZX19KSl9ZnVuY3Rpb24gaWMoZSx0PXt9KXtsZXQgbj1lLmpvaW4oInwiKSxyPSgwLHh0LnVzZVJlZikoe2RlZmVycmVkOm5ldyBTZXQsZXJyb3JlZDpuZXcgU2V0LGV4cGVjdGVkOltdLGZpcmVkOiExLGtleTpudWxsLGxvYWRlZDpuZXcgU2V0fSk7ci5jdXJyZW50LmtleSE9PW4mJihyLmN1cnJlbnQ9e2RlZmVycmVkOm5ldyBTZXQsZXJyb3JlZDpuZXcgU2V0LGV4cGVjdGVkOmUuc2xpY2UoKSxmaXJlZDohMSxrZXk6bixsb2FkZWQ6bmV3IFNldH0pO2xldCBvPSgwLHh0LnVzZVJlZikodC5vblNldHRsZSk7by5jdXJyZW50PXQub25TZXR0bGU7bGV0IGE9KDAseHQudXNlQ2FsbGJhY2spKCgpPT57bGV0IGk9ci5jdXJyZW50O2lmKGkuZmlyZWR8fGkuZXhwZWN0ZWQubGVuZ3RoPT09MClyZXR1cm47Zm9yKGxldCBsIG9mIGkuZXhwZWN0ZWQpaWYoIWkubG9hZGVkLmhhcyhsKSYmIWkuZXJyb3JlZC5oYXMobCkmJiFpLmRlZmVycmVkLmhhcyhsKSlyZXR1cm47aS5maXJlZD0hMDtsZXQgcz1pLmV4cGVjdGVkLmZpbHRlcihsPT4haS5sb2FkZWQuaGFzKGwpJiYhaS5lcnJvcmVkLmhhcyhsKSkubGVuZ3RoO2kuZXJyb3JlZC5zaXplPjA/KGsoYFtkYXNoYm9hcmRdICR7aS5lcnJvcmVkLnNpemV9LyR7aS5leHBlY3RlZC5sZW5ndGh9IGNvbXBvbmVudHMgZmFpbGVkIHRvIGxvYWQ6YCxbLi4uaS5lcnJvcmVkXSksZXQoImRhc2hib2FyZExvYWRFcnJvciIse2RlZmVycmVkQ291bnQ6cyxlcnJvckNvdW50OmkuZXJyb3JlZC5zaXplLHdpZGdldENvdW50OmkuZXhwZWN0ZWQubGVuZ3RofSkpOihrKGBbZGFzaGJvYXJkXSBhbGwgJHtpLmV4cGVjdGVkLmxlbmd0aH0gY29tcG9uZW50cyBzZXR0bGVkIHN1Y2Nlc3NmdWxseSAoJHtzfSBkZWZlcnJlZCB1bnRpbCBzY3JvbGxlZCBpbnRvIHZpZXcpYCksZXQoImRhc2hib2FyZExvYWRTdWNjZXNzIix7ZGVmZXJyZWRDb3VudDpzLHdpZGdldENvdW50OmkuZXhwZWN0ZWQubGVuZ3RofSkpLG8uY3VycmVudD8uKHtkZWZlcnJlZENvdW50OnMsZXJyb3JDb3VudDppLmVycm9yZWQuc2l6ZSxlcnJvcmVkSWRzOlsuLi5pLmVycm9yZWRdLGV4cGVjdGVkQ291bnQ6aS5leHBlY3RlZC5sZW5ndGh9KX0sW10pO3JldHVybigwLHh0LnVzZU1lbW8pKCgpPT4oe3JlcG9ydERlZmVycmVkOmk9PntyLmN1cnJlbnQuZGVmZXJyZWQuYWRkKGkpLGEoKX0scmVwb3J0RXJyb3I6aT0+e3IuY3VycmVudC5lcnJvcmVkLmFkZChpKSxhKCl9LHJlcG9ydExvYWRlZDppPT57ci5jdXJyZW50LmxvYWRlZC5hZGQoaSksYSgpfX0pLFthXSl9ZnVuY3Rpb24gdjAoZSl7bGV0IHQ9KDAseHQudXNlQ29udGV4dCkoc2EpLG49KDAseHQudXNlUmVmKSghMSk7KDAseHQudXNlRWZmZWN0KSgoKT0+e24uY3VycmVudHx8KG4uY3VycmVudD0hMCx0Py5yZXBvcnRMb2FkZWQoZSkpfSxbXSl9ZnVuY3Rpb24gbHQoZSx0LG49ITEpe2xldCByPSgwLHh0LnVzZVJlZikoITEpOygwLHh0LnVzZUVmZmVjdCkoKCk9PntyLmN1cnJlbnR8fCF0JiYhbnx8KHIuY3VycmVudD0hMCxOQShlLG4/ImVycm9yIjoibG9hZGVkIikpfSxbbix0LGVdKX1mdW5jdGlvbiBiMChlKXtsZXQgdD0oMCx4dC51c2VDb250ZXh0KShzYSksbj0oMCx4dC51c2VSZWYpKCExKTsoMCx4dC51c2VFZmZlY3QpKCgpPT57bi5jdXJyZW50fHwobi5jdXJyZW50PSEwLHQ/LnJlcG9ydERlZmVycmVkKGUpKX0sW10pfXZhciBVcz17c2V0dGluZ3M6e30sY29udGV4dDp7fX07ZnVuY3Rpb24gdzAoZSl7ZS5zZXR0aW5ncyYmKFVzLnNldHRpbmdzPWUuc2V0dGluZ3MpLGUuY29udGV4dCYmKFVzLmNvbnRleHQ9ZS5jb250ZXh0KX1mdW5jdGlvbiBMZSgpe3JldHVybiBVcy5zZXR0aW5nc31mdW5jdGlvbiBGcygpe3JldHVybiBVcy5jb250ZXh0fWZ1bmN0aW9uIHFyKGUsdCl7VXMuc2V0dGluZ3NbZV09dH12YXIgVEE9MjUwO2Z1bmN0aW9uIEZuKGUsdCx7aW5jbHVkZURvbmU6bj0hMSxtYXhOb3RlczpyPVRBfT17fSl7cmV0dXJuIHQ/ZS5nZXRUYXNrRG9tYWluVGFza3ModCk6REEoZSxuLHIpfWFzeW5jIGZ1bmN0aW9uIERBKGUsdCxuKXtsZXQgcj1uZXcgU2V0LG89W107Zm9yIGF3YWl0KGxldCBzIG9mIGF3YWl0IGUuZmlsdGVyTm90ZXMoe2dyb3VwOiJ0YXNrTGlzdHMifSwiY2hhbmdlZCIpKWlmKCEoIXM/LnV1aWR8fHIuaGFzKHMudXVpZCkpJiYoci5hZGQocy51dWlkKSxvLnB1c2gocyksby5sZW5ndGg+PW4pKWJyZWFrO2soYFthbGwtbm90ZXMtdGFza3NdIE5vIHRhc2sgZG9tYWluIFx1MjAxNCBzY2FubmluZyAke28ubGVuZ3RofSB0YXNrLWxpc3Qgbm90ZXMgZm9yIHRhc2tzYCk7bGV0IGE9YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKG8ubWFwKHM9PmUuZ2V0Tm90ZVRhc2tzKHt1dWlkOnMudXVpZH0se2luY2x1ZGVEb25lOnR9KSkpLGk9W107Zm9yKGxldCBzPTA7czxhLmxlbmd0aDtzKz0xKXtsZXQgbD1hW3NdLGQ9b1tzXTtpZighbHx8bC5zdGF0dXM9PT0icmVqZWN0ZWQiKXtrKCJbYWxsLW5vdGVzLXRhc2tzXSBnZXROb3RlVGFza3MgZmFpbGVkOiIsbD8ucmVhc29uKTtjb250aW51ZX1sZXQgYz1BcnJheS5pc0FycmF5KGwudmFsdWUpP2wudmFsdWU6W107Zm9yKGxldCB1IG9mIGMpdT8udXVpZCYmaS5wdXNoKHsuLi51LG5vdGVOYW1lOnUubm90ZU5hbWV8fHUubm90ZVRpdGxlfHx1Lm5vdGU/Lm5hbWV8fGQubmFtZXx8bnVsbCxub3RlVVVJRDp1Lm5vdGVVVUlEfHxkLnV1aWR9KX1yZXR1cm4gayhgW2FsbC1ub3Rlcy10YXNrc10gR2F0aGVyZWQgJHtpLmxlbmd0aH0gdGFza3MgYWNyb3NzIGFsbCBub3RlcyAobm8gdGFzayBkb21haW4pYCksaX1mdW5jdGlvbiBJZShlLHt0aHJvd09uSW52YWxpZDp0PSEwfT17fSl7bGV0IG49KCk9PntpZighdClyZXR1cm4gbnVsbDt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGRhdGUgaW5wdXQ6ICR7U3RyaW5nKGUpfWApfTtpZihlPT1udWxsfHxlPT09IiIpcmV0dXJuIG4oKTtpZihlIGluc3RhbmNlb2YgRGF0ZSl7bGV0IG89bmV3IERhdGUoZSk7cmV0dXJuIE51bWJlci5pc05hTihvLmdldFRpbWUoKSk/bigpOm99aWYodHlwZW9mIGU9PSJudW1iZXIiKXtpZighTnVtYmVyLmlzRmluaXRlKGUpKXJldHVybiBuKCk7bGV0IG89TWF0aC5hYnMoZSk8MWUxMD9lKjFlMzplLGE9bmV3IERhdGUobyk7cmV0dXJuIE51bWJlci5pc05hTihhLmdldFRpbWUoKSk/bigpOmF9aWYodHlwZW9mIGU9PSJzdHJpbmciKXtsZXQgbz1lLnRyaW0oKTtpZighbylyZXR1cm4gbigpO2lmKC9eXGR7NH0tXGR7Mn0tXGR7Mn0kLy50ZXN0KGUpKXtsZXRbcyxsLGRdPWUuc3BsaXQoIi0iKS5tYXAoTnVtYmVyKTtyZXR1cm4gbmV3IERhdGUocyxsLTEsZCl9bGV0IGE9TnVtYmVyKG8pO2lmKCFOdW1iZXIuaXNOYU4oYSkpcmV0dXJuIEllKGEse3Rocm93T25JbnZhbGlkOnR9KTtsZXQgaT1uZXcgRGF0ZShvKTtyZXR1cm4gTnVtYmVyLmlzTmFOKGkuZ2V0VGltZSgpKT9uKCk6aX1sZXQgcj1uZXcgRGF0ZShlKTtyZXR1cm4gTnVtYmVyLmlzTmFOKHIuZ2V0VGltZSgpKT9uKCk6cn1mdW5jdGlvbiBYcihlKXtsZXQgdD1JZShlKTtyZXR1cm4gbmV3IERhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSwwLDAsMCwwKX1mdW5jdGlvbiB6bihlKXtsZXQgdD1JZShlKSxuPXQuZ2V0RnVsbFllYXIoKSxyPVN0cmluZyh0LmdldE1vbnRoKCkrMSkucGFkU3RhcnQoMiwiMCIpLG89U3RyaW5nKHQuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCIwIik7cmV0dXJuYCR7bn0tJHtyfS0ke299YH1mdW5jdGlvbiBpZShlKXtyZXR1cm4gem4oZSl9ZnVuY3Rpb24gc2MoZSl7bGV0IHQ9SWUoZSk7cmV0dXJuYCR7dC5nZXRGdWxsWWVhcigpfS0ke1N0cmluZyh0LmdldE1vbnRoKCkrMSkucGFkU3RhcnQoMiwiMCIpfWB9ZnVuY3Rpb24gbG0oZSl7bGV0W3Qsbl09U3RyaW5nKGUpLnNwbGl0KCItIikubWFwKE51bWJlcik7cmV0dXJuIG5ldyBEYXRlKHQsbi0xLDEsMCwwLDAsMCl9ZnVuY3Rpb24gazAoZSx0PTApe2xldCBuPUllKGUpO3JldHVybiBuZXcgRGF0ZShuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpK3QsMSwwLDAsMCwwKX1mdW5jdGlvbiBkbihlLHQ9MSl7bGV0IG49SWUoZSksbz0obi5nZXREYXkoKS10KzcpJTcsYT1uZXcgRGF0ZShuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgpLW8pO3JldHVybiBhLnNldEhvdXJzKDAsMCwwLDApLGF9ZnVuY3Rpb24geDAoZSx0PTEpe2xldCBuPWRuKGUsdCkscj1uZXcgRGF0ZShuKTtyZXR1cm4gci5zZXREYXRlKHIuZ2V0RGF0ZSgpKzYpLHIuc2V0SG91cnMoMjMsNTksNTksOTk5KSxyfWZ1bmN0aW9uIFMwKGUsdD0xKXtsZXQgbj1kbihlLHQpLHI9W107Zm9yKGxldCBvPTA7bzw3O28rKyl7bGV0IGE9bmV3IERhdGUobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSxuLmdldERhdGUoKStvKSxpPW5ldyBEYXRlKG4uZ2V0RnVsbFllYXIoKSxuLmdldE1vbnRoKCksbi5nZXREYXRlKCkrbysxKTtyLnB1c2goe2Zyb206TWF0aC5mbG9vcihhLmdldFRpbWUoKS8xZTMpLHRvOk1hdGguZmxvb3IoaS5nZXRUaW1lKCkvMWUzKSxkYXRlS2V5OmllKGEpfSl9cmV0dXJue2JvdW5kYXJpZXM6cix3ZWVrU3RhcnRLZXk6aWUobil9fWZ1bmN0aW9uIEUwKGUsdD0xKXtsZXQgbj1kbihlLHQpO3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6N30sKHIsbyk9PntsZXQgYT1uZXcgRGF0ZShuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgpK28pO3JldHVybntkYXk6YS50b0xvY2FsZURhdGVTdHJpbmcodm9pZCAwLHt3ZWVrZGF5OiJzaG9ydCJ9KSxkYXRlOmEudG9JU09TdHJpbmcoKSxkYXRlS2V5OmllKGEpfX0pfWZ1bmN0aW9uIGxjKGUpe3JldHVybiBlPT09InN1bmRheSI/MDoxfWZ1bmN0aW9uIHJpKGUsdCl7cmV0dXJuIHQ9PT0iMjRoIj9gJHtTdHJpbmcoZSkucGFkU3RhcnQoMiwiMCIpfTowMGA6ZT09PTA/IjEyYW0iOmU8MTI/YCR7ZX1hbWA6ZT09PTEyPyIxMnBtIjpgJHtlLTEyfXBtYH1mdW5jdGlvbiBOMChlLHQpe2xldCBuPU1hdGguZmxvb3IoZS82MCkscj1lJTYwO2lmKHQ9PT0iMjRoIilyZXR1cm5gJHtTdHJpbmcobikucGFkU3RhcnQoMiwiMCIpfToke1N0cmluZyhyKS5wYWRTdGFydCgyLCIwIil9YDtsZXQgbz1uPj0xMj8iUE0iOiJBTSI7cmV0dXJuYCR7bj09PTA/MTI6bj4xMj9uLTEyOm59OiR7U3RyaW5nKHIpLnBhZFN0YXJ0KDIsIjAiKX0gJHtvfWB9ZnVuY3Rpb24gVDAoZSl7cmV0dXJuIEllKGUpLnRvTG9jYWxlRGF0ZVN0cmluZyh2b2lkIDAse3dlZWtkYXk6InNob3J0Iixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyJ9KX1hc3luYyBmdW5jdGlvbiBhcihlKXtsZXQgdD1hd2FpdCBlO2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQ7aWYodCYmdHlwZW9mIHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPT0iZnVuY3Rpb24iKXtsZXQgbj1bXTtmb3IgYXdhaXQobGV0IHIgb2YgdCluLnB1c2gocik7cmV0dXJuIG59cmV0dXJuW119YXN5bmMgZnVuY3Rpb24gRDAoZSx0KXtsZXQgbj1uZXcgRGF0ZSxyPWRuKG4pLG89eDAobiksYT1MZSgpW0IuVEFTS19ET01BSU5TXSxpPXt9O3RyeXtpPWE/SlNPTi5wYXJzZShhKTp7fX1jYXRjaHtpPXt9fWkuc2VsZWN0ZWREb21haW5VdWlkPXQsYXdhaXQgZS5zZXRTZXR0aW5nKEIuVEFTS19ET01BSU5TLEpTT04uc3RyaW5naWZ5KGkpKTtsZXQgcz1hd2FpdCBNQShlLHQpO3JldHVybnt0YXNrczpzLHRvZGF5VGFza3M6T0EocyxuKSxjb21wbGV0ZWRUaGlzV2VlazpSMChzLHIsbyksd2Vla2x5VmljdG9yeVZhbHVlOklBKHMscixvKSxkYWlseVZpY3RvcnlWYWx1ZXM6UkEocyxyKSxhY3RpdmVUYXNrRG9tYWluOnR9fWZ1bmN0aW9uIEFBKGUsdCl7bGV0IG49QXJyYXkuaXNBcnJheSh0KSxyPW4/dC5sZW5ndGg6MCxvPXQ9PT1udWxsPyJudWxsIjpBcnJheS5pc0FycmF5KHQpPyJhcnJheSI6dHlwZW9mIHQsYT10JiZ0eXBlb2YgdD09Im9iamVjdCImJiFuP09iamVjdC5rZXlzKHQpOm51bGwsaTt0cnl7aT1KU09OLnN0cmluZ2lmeSh0KX1jYXRjaHtpPVN0cmluZyh0KX1rKGAke2V9IGdldFRhc2tEb21haW5zKCkgcmV0dXJuZWQgJHtyfSBkb21haW5zICh0eXBlPSR7b30ke2E/YCwga2V5cz1bJHthLmpvaW4oIiwiKX1dYDoiIn0pYCx7cmF3OnQsc2VyaWFsaXplZDppfSl9YXN5bmMgZnVuY3Rpb24gQTAoZSl7aygiW3JlZnJlc2hUYXNrRG9tYWluc10gU3RhcnRpbmcgZG9tYWluIHJlZnJlc2giKTtsZXQgdD1MZSgpW0IuVEFTS19ET01BSU5TXTtrKGBbcmVmcmVzaFRhc2tEb21haW5zXSBTdG9yZWQgJHtCLlRBU0tfRE9NQUlOU30gc2V0dGluZ2AsdCk7bGV0IG49e307dHJ5e249dD9KU09OLnBhcnNlKHQpOnt9fWNhdGNoKGEpe2soIltyZWZyZXNoVGFza0RvbWFpbnNdIEZhaWxlZCB0byBwYXJzZSBzdG9yZWQgdGFzay1kb21haW5zIHNldHRpbmc7IHN0YXJ0aW5nIGZyZXNoIix7cmF3OnQsZXJyOmF9KSxuPXt9fWxldCByO3RyeXtyPWF3YWl0IGUuZ2V0VGFza0RvbWFpbnMoKX1jYXRjaChhKXtrKCJbcmVmcmVzaFRhc2tEb21haW5zXSBnZXRUYXNrRG9tYWlucygpIHRocmV3IixhKSxyPW51bGx9cmV0dXJuIEFBKCJbcmVmcmVzaFRhc2tEb21haW5zXSIsciksQXJyYXkuaXNBcnJheShyKT8obi5kb21haW5zPXIuZmlsdGVyKGE9PmEmJmEudXVpZCkubWFwKGE9Pih7bmFtZTphLm5hbWUsdXVpZDphLnV1aWR9KSksbi5sYXN0UmV0cmlldmVkPURhdGUubm93KCkpOihrKCJbcmVmcmVzaFRhc2tEb21haW5zXSBBUEkgcmV0dXJuZWQgbm8gdXNhYmxlIGRvbWFpbnM7IGtlZXBpbmcgcHJldmlvdXNseSBzdG9yZWQgZG9tYWlucyIpLG4uZG9tYWlucz1BcnJheS5pc0FycmF5KG4uZG9tYWlucyk/bi5kb21haW5zOltdKSxuLnNlbGVjdGVkRG9tYWluVXVpZCYmbi5kb21haW5zLnNvbWUoYT0+YS51dWlkPT09bi5zZWxlY3RlZERvbWFpblV1aWQpfHwoayhgW3JlZnJlc2hUYXNrRG9tYWluc10gUHJldmlvdXMgc2VsZWN0aW9uICR7bi5zZWxlY3RlZERvbWFpblV1aWR9IG5vIGxvbmdlciBleGlzdHMsIHBpY2tpbmcgZGVmYXVsdGApLG4uc2VsZWN0ZWREb21haW5VdWlkPUNBKG4uZG9tYWlucykpLGF3YWl0IGUuc2V0U2V0dGluZyhCLlRBU0tfRE9NQUlOUyxKU09OLnN0cmluZ2lmeShuKSksayhgW3JlZnJlc2hUYXNrRG9tYWluc10gUmVmcmVzaCBjb21wbGV0ZSBcdTIwMTQgJHtuLmRvbWFpbnMubGVuZ3RofSBkb21haW5zLCBhY3RpdmU6ICR7bi5zZWxlY3RlZERvbWFpblV1aWR9YCkse2RvbWFpbnM6bi5kb21haW5zLGFjdGl2ZVRhc2tEb21haW46bi5zZWxlY3RlZERvbWFpblV1aWR9fWFzeW5jIGZ1bmN0aW9uIEMwKGUsdCl7bGV0e2xhYmVsOm4seWVhcjpyLHF1YXJ0ZXI6b309dCxhPWAke259IFBsYW5gLGk9TGUoKVtCLlBMQU5OSU5HX05PVEVfVEFHXXx8UmQscz1bdmUsaV0sZD0oYXdhaXQgYXIoZS5maWx0ZXJOb3Rlcyh7cXVlcnk6YX0pKSkuZmluZChwPT5wLm5hbWU9PT1hKTtpZihkKXJldHVybiBhd2FpdCBlLm5hdmlnYXRlKGBodHRwczovL3d3dy5hbXBsZW5vdGUuY29tL25vdGVzLyR7ZC51dWlkfWApLHt1dWlkOmQudXVpZCxleGlzdGVkOiEwfTtldCgiY3JlYXRlUXVhcnRlcmx5UGxhbiIpO2xldCBjPWRtKG4sbyksdT1hd2FpdCBlLmNyZWF0ZU5vdGUoYSxzKTtyZXR1cm4gYXdhaXQgZS5pbnNlcnROb3RlQ29udGVudCh7dXVpZDp1fSxjKSxhd2FpdCBlLm5hdmlnYXRlKGBodHRwczovL3d3dy5hbXBsZW5vdGUuY29tL25vdGVzLyR7dX1gKSxJbiYmdT97ZGV2RWRpdDohMCxleGlzdGVkOiExLG5vdGVVVUlEOnV9Ont1dWlkOnUsZXhpc3RlZDohMX19YXN5bmMgZnVuY3Rpb24gZGMoZSx0LG4pe2lmKCF0KXJldHVybntmb3VuZDohMSxjb250ZW50Om51bGx9O2xldCByPWF3YWl0IGUuZ2V0Tm90ZVNlY3Rpb25zKHt1dWlkOnR9KTtrKGBbZ2V0TW9udGhseVBsYW5Db250ZW50XSBub3RlVVVJRD0ke3R9IG1vbnRoTmFtZT0iJHtufSIgc2VjdGlvbnM6YCxyPy5tYXAocz0+cy5oZWFkaW5nPy50ZXh0KSk7bGV0IG89ci5maW5kKHM9PnMuaGVhZGluZyYmcy5oZWFkaW5nLnRleHQmJnMuaGVhZGluZy50ZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpPT09bi50b0xvd2VyQ2FzZSgpKTtpZihrKCJbZ2V0TW9udGhseVBsYW5Db250ZW50XSBtb250aFNlY3Rpb24gZm91bmQ6IiwhIW8pLCFvKXJldHVybntmb3VuZDohMSxjb250ZW50Om51bGx9O2xldCBhPWF3YWl0IGUuZ2V0Tm90ZUNvbnRlbnQoe3V1aWQ6dH0pLGk9bmkoYSxuKTtyZXR1cm4gayhgW2dldE1vbnRobHlQbGFuQ29udGVudF0gZXh0cmFjdGVkIGNvbnRlbnQgbGVuZ3RoOiAke2k/Lmxlbmd0aD8/MH1gKSx7Zm91bmQ6ITAsY29udGVudDppfHwiIn19YXN5bmMgZnVuY3Rpb24gTTAoZSx0LG4pe2xldHtsYWJlbDpyLHllYXI6byxxdWFydGVyOmF9PXQsaT1gJHtyfSBQbGFuYCxzPUxlKClbQi5QTEFOTklOR19OT1RFX1RBR118fFJkLGw9W3ZlLHNdLGM9KGF3YWl0IGFyKGUuZmlsdGVyTm90ZXMoe3F1ZXJ5Oml9KSkpLmZpbmQoZj0+Zi5uYW1lPT09aSksdTtpZihjKXU9Yy51dWlkLGF3YWl0IGUuaW5zZXJ0Tm90ZUNvbnRlbnQoe3V1aWQ6dX0saW0obikse2F0RW5kOiEwfSk7ZWxzZXtsZXQgZj1kbShyLGEpO2V0KCJjcmVhdGVRdWFydGVybHlQbGFuIiksdT1hd2FpdCBlLmNyZWF0ZU5vdGUoaSxsKSxhd2FpdCBlLmluc2VydE5vdGVDb250ZW50KHt1dWlkOnV9LGYpfWxldCBwPWF3YWl0IEkwKGUsdSxuKTtyZXR1cm57bm90ZVVVSUQ6dSxjb250ZW50OnAsY3JlYXRlZDohY319YXN5bmMgZnVuY3Rpb24gTzAoZSx0LG4pe2xldHtsYWJlbDpyLHllYXI6byxxdWFydGVyOmF9PXQsaT1gJHtyfSBQbGFuYCxzPUxlKClbQi5QTEFOTklOR19OT1RFX1RBR118fFJkLGw9W3ZlLHNdLGM9KGF3YWl0IGFyKGUuZmlsdGVyTm90ZXMoe3F1ZXJ5Oml9KSkpLmZpbmQoZj0+Zi5uYW1lPT09aSksdTtpZihjKXU9Yy51dWlkLChhd2FpdCBkYyhlLHUsbikpLmZvdW5kfHxhd2FpdCBlLmluc2VydE5vdGVDb250ZW50KHt1dWlkOnV9LHNtKG4pLHthdEVuZDohMH0pO2Vsc2V7bGV0IGY9ZG0ocixhKTt1PWF3YWl0IGUuY3JlYXRlTm90ZShpLGwpLGF3YWl0IGUuaW5zZXJ0Tm90ZUNvbnRlbnQoe3V1aWQ6dX0sZiksYXdhaXQgZS5pbnNlcnROb3RlQ29udGVudCh7dXVpZDp1fSxzbShuKSx7YXRFbmQ6ITB9KX1sZXQgcD1hd2FpdCBJMChlLHUsbik7cmV0dXJue25vdGVVVUlEOnUsY29udGVudDpwfX1hc3luYyBmdW5jdGlvbiBJMChlLHQsbix7YXR0ZW1wdHM6cj0zLGRlbGF5TXM6bz01MDB9PXt9KXtmb3IobGV0IGE9MDthPHI7YSsrKXthPjAmJmF3YWl0IG5ldyBQcm9taXNlKGw9PnNldFRpbWVvdXQobCxvKSk7bGV0IGk9YXdhaXQgZS5nZXROb3RlQ29udGVudCh7dXVpZDp0fSkscz1uaShpLG4pO2lmKHMpcmV0dXJuIHN9cmV0dXJuIGltKG4pLnNwbGl0KGAKYCkuZmlsdGVyKGE9PmEmJiFhLnN0YXJ0c1dpdGgoIiMiKSkuam9pbihgCmApfWZ1bmN0aW9uIENBKGUpe2lmKCFlfHxlLmxlbmd0aD09PTApcmV0dXJuIG51bGw7bGV0IHQ9ZS5maW5kKG49Pm4ubmFtZT09PSJXb3JrIik7cmV0dXJuIHQ/dC51dWlkOmVbMF0udXVpZH1hc3luYyBmdW5jdGlvbiBNQShlLHQsbj0hMSl7bGV0IHI9RGF0ZS5ub3coKSxvPWF3YWl0IEZuKGUsdCx7aW5jbHVkZURvbmU6bn0pO3JldHVybiBrKGBbX2ZldGNoVGFza3NGb3JEb21haW5dICR7dD9gZ2V0VGFza0RvbWFpblRhc2tzKCR7dH0pYDoiYWxsLW5vdGVzIGZhbGxiYWNrIn0gcmV0dXJuZWQgJHtvLmxlbmd0aH0gdGFza3MgaW4gJHtEYXRlLm5vdygpLXJ9bXNgKSxvfWZ1bmN0aW9uIE9BKGUsdCl7bGV0IG49bmV3IERhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSkuZ2V0VGltZSgpLHI9bis4NjRlNTtyZXR1cm4gZS5maWx0ZXIobz0+IW8uY29tcGxldGVkQXQmJiFvLmRpc21pc3NlZEF0JiZpcihvLnN0YXJ0QXQpJiZpcihvLnN0YXJ0QXQpPj1uJiZpcihvLnN0YXJ0QXQpPHIpLnNvcnQoKG8sYSk9PihpcihvLnN0YXJ0QXQpfHwwKS0oaXIoYS5zdGFydEF0KXx8MCkpfWZ1bmN0aW9uIFIwKGUsdCxuKXtsZXQgcj10LmdldFRpbWUoKSxvPW4uZ2V0VGltZSgpO3JldHVybiBlLmZpbHRlcihhPT5pcihhLmNvbXBsZXRlZEF0KSYmaXIoYS5jb21wbGV0ZWRBdCk+PXImJmlyKGEuY29tcGxldGVkQXQpPD1vKX1mdW5jdGlvbiBJQShlLHQsbil7cmV0dXJuIFIwKGUsdCxuKS5yZWR1Y2UoKHIsbyk9PnIrKG8udmljdG9yeVZhbHVlfHwwKSwwKX1mdW5jdGlvbiBSQShlLHQpe3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6N30sKHIsbyk9PntsZXQgYT1uZXcgRGF0ZSh0KTthLnNldERhdGUoYS5nZXREYXRlKCkrbyk7bGV0IGk9bmV3IERhdGUoYSk7aS5zZXREYXRlKGkuZ2V0RGF0ZSgpKzEpO2xldCBzPWUuZmlsdGVyKGw9PmlyKGwuY29tcGxldGVkQXQpJiZpcihsLmNvbXBsZXRlZEF0KT49YS5nZXRUaW1lKCkmJmlyKGwuY29tcGxldGVkQXQpPGkuZ2V0VGltZSgpKTtyZXR1cm57ZGF5OlsiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0IiwiU3VuIl1bb10sZGF0ZTphLnRvSVNPU3RyaW5nKCksdmFsdWU6cy5yZWR1Y2UoKGwsZCk9PmwrKGQudmljdG9yeVZhbHVlfHwwKSwwKSx0YXNrQ291bnQ6cy5sZW5ndGh9fSl9ZnVuY3Rpb24gaXIoZSl7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtpZih0eXBlb2YgZSE9Im51bWJlciIpe2xldCB0PU51bWJlcihlKTtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpP3Q8MWUxMD90KjFlMzp0Om51bGx9cmV0dXJuIGU8MWUxMD9lKjFlMzplfWZ1bmN0aW9uIGRtKGUsdCl7bGV0IHI9ezE6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCJdLDI6WyJBcHJpbCIsIk1heSIsIkp1bmUiXSwzOlsiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciJdLDQ6WyJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdfVt0XXx8WyJNb250aCAxIiwiTW9udGggMiIsIk1vbnRoIDMiXTtyZXR1cm5gIyBRdWFydGVyIFRoZW1lCltPbmUgc2VudGVuY2UgZGVzY3JpYmluZyB0aGUgbWFpbiBmb2N1cyBvZiB0aGlzIHF1YXJ0ZXIuXQoKIyMgU3VjY2VzcyBMb29rcyBMaWtlCi0gWyBdIFtUb3Agb3V0Y29tZV0KLSBbIF0gW1RvcCBvdXRjb21lXQotIFsgXSBbVG9wIG91dGNvbWVdCgojIFByb2plY3RzCgojIyBbUHJvamVjdCAxXQotIE91dGNvbWU6Ci0gV2h5IG5vdzoKLSBXZWVrbHkgcmh5dGhtOgotIERlYWRsaW5lOgotIENvbnN0cmFpbnRzOgotIERvbmUgZW5vdWdoIHdoZW46CgojIyBbUHJvamVjdCAyXQotIE91dGNvbWU6Ci0gV2h5IG5vdzoKLSBXZWVrbHkgcmh5dGhtOgotIERlYWRsaW5lOgotIENvbnN0cmFpbnRzOgotIERvbmUgZW5vdWdoIHdoZW46CgojIyBbUHJvamVjdCAzXQotIE91dGNvbWU6Ci0gV2h5IG5vdzoKLSBXZWVrbHkgcmh5dGhtOgotIERlYWRsaW5lOgotIENvbnN0cmFpbnRzOgotIERvbmUgZW5vdWdoIHdoZW46CgojIE5vdCBUaGlzIFF1YXJ0ZXIKLSBbIF0gW0xvd2VyLXByaW9yaXR5IHByb2plY3RdCi0gWyBdIFtDb21taXRtZW50IHRvIGRlY2xpbmVdCi0gWyBdIFtBcmVhIHRvIGludGVudGlvbmFsbHkgaWdub3JlXQoKIyBEYXktb2YtV2VlayBCcmVha2Rvd24KQW55IGNhdGVnb3J5IG9mIHRhc2sgeW91IHdvdWxkIGxpa2UgdG8gaGF2ZSBiZSB0aGUgZm9jdXMgZm9yIGRpZmZlcmVudCBkYXlzLW9mLXdlZWsgKHNvbWV0aW1lcyBjYWxsZWQgImRheSBzdHJpcGluZyIpPwpTZXBhcmF0ZSB5b3VyIHRhc2sgY2F0ZWdvcmllcyB3aXRoIGEgc2VtaWNvbG9uIChpLmUuLCAiOyIpLiBXZSB3aWxsIGNvbnNpZGVyIHRoZW0gd2hlbiBwcm9wb3NpbmcgcG9zc2libGUgCmRhaWx5IGFnZW5kYXMgZnJvbSB5b3VyIGV4aXN0aW5nIHRhc2tzLiAgCgotIE1vbmRheXM6IAotIFR1ZXNkYXlzOiAKLSBXZWRuZXNkYXlzOiAKLSBUaHVyc2RheXM6IAotIEZyaWRheXM6IAoKW0FtcGxlbm90ZSBtZXNzYWdlXQpZb3UgY2FuIGFsc28gYWRkIFNhdHVyZGF5IGFuZCBTdW5kYXkgaWYgeW91IGxpa2U7IHRoZXkncmUgbm90IGluIHRoZSBsaXN0IHNpbmNlIGJ5IGRlZmF1bHQgYmVjYXVzZSB3ZSBzdXNwZWN0IAp5b3UncmUgYmVzdCBvZmYgcHJlc2VydmluZyB5b3VyIHdlZWtlbmQgZm9yIHVucGxhbm5lZCBmYW1pbHkgJiByZXN0b3JhdGlvbiBhY3Rpdml0aWVzLiAgIAoKIyBNb250aC1ieS1Nb250aCBCcmVha2Rvd24KCiMjICR7clswXX0KLSBGb2N1czoKLSBLZXkgbW92ZToKCiMjICR7clsxXX0KLSBGb2N1czoKLSBLZXkgbW92ZToKCiMjICR7clsyXX0KLSBGb2N1czoKLSBLZXkgbW92ZToKCiMgV2Vla2x5IFBsYW5uaW5nIFByb21wdApXaGljaCBwcm9qZWN0cyBuZWVkIHRpbWUgb24gbXkgY2FsZW5kYXIgdGhpcyB3ZWVrPwoKIyBRdWFydGVybHkgUmV2aWV3Ci0gRmluaXNoZWQ6Ci0gUHJvZ3Jlc3MgbWFkZToKLSBMZXNzb25zIGxlYXJuZWQ6Ci0gQ2FycnkgZm9yd2FyZDpgfXZhciBvaT1QKGZlKCkpO2FzeW5jIGZ1bmN0aW9uIGNjKGUsdCl7cmV0dXJuIEluP3tkZXZFZGl0OiEwLG5vdGVVVUlEOnR9OmF3YWl0IGUubmF2aWdhdGUoYGh0dHBzOi8vd3d3LmFtcGxlbm90ZS5jb20vbm90ZXMvJHt0fWApfWFzeW5jIGZ1bmN0aW9uIFAwKGUsdCl7cmV0dXJuIGF3YWl0IGUuZ2V0Tm90ZUNvbnRlbnQoe3V1aWQ6dH0pfWFzeW5jIGZ1bmN0aW9uIEwwKGUsdCxuLHIpe3JldHVybiBhd2FpdCBlLnJlcGxhY2VOb3RlQ29udGVudCh7dXVpZDp0fSxuLHIpfXZhciBUbz1QKCQoKSk7ZnVuY3Rpb24gY20oe2FwcDplLG5vdGVVVUlEOnQsb25CYWNrOm59KXtsZXRbcixvXT0oMCxvaS51c2VTdGF0ZSkoIiIpLFthLGldPSgwLG9pLnVzZVN0YXRlKSghMCksW3MsbF09KDAsb2kudXNlU3RhdGUpKCExKTsoMCxvaS51c2VFZmZlY3QpKCgpPT57bGV0IGM9ITE7cmV0dXJuIFAwKGUsdCkudGhlbih1PT57Y3x8KG8odXx8IiIpLGkoITEpKX0pLCgpPT57Yz0hMH19LFt0LGVdKTtsZXQgZD1hc3luYygpPT57bCghMCksYXdhaXQgTDAoZSx0LHIpLGwoITEpfTtyZXR1cm4gYT8oMCxUby5qc3gpKCJkaXYiLHtjbGFzc05hbWU6Im5vdGUtZWRpdG9yLWxvYWRpbmciLGNoaWxkcmVuOiJMb2FkaW5nIG5vdGVcdTIwMjYifSk6KDAsVG8uanN4cykoImRpdiIse2NsYXNzTmFtZToibm90ZS1lZGl0b3IiLGNoaWxkcmVuOlsoMCxUby5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJub3RlLWVkaXRvci10b29sYmFyIixjaGlsZHJlbjpbKDAsVG8uanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJub3RlLWVkaXRvci1idG4gbm90ZS1lZGl0b3ItYnRuLS1iYWNrIixvbkNsaWNrOm4sY2hpbGRyZW46Ilx1MjE5MCBCYWNrIn0pLCgwLFRvLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToibm90ZS1lZGl0b3ItYnRuIG5vdGUtZWRpdG9yLWJ0bi0tc2F2ZSIsb25DbGljazpkLGRpc2FibGVkOnMsY2hpbGRyZW46cz8iU2F2aW5nXHUyMDI2IjoiU2F2ZSJ9KV19KSwoMCxUby5qc3gpKCJ0ZXh0YXJlYSIse2NsYXNzTmFtZToibm90ZS1lZGl0b3ItdGV4dGFyZWEiLHZhbHVlOnIsb25DaGFuZ2U6Yz0+byhjLnRhcmdldC52YWx1ZSl9KV19KX12YXIgc3I9UChmZSgpKTt2YXIgcGM9UChmZSgpKTt2YXIgYXQ9UChmZSgpKSwkcj1QKCQoKSksdWM9ImRhc2hib2FyZDp3aWRnZXQtZm9jdXMtcmVxdWVzdCIsUEE9MmUzLHVtPSJkYXNoYm9hcmQ6d2lkZ2V0LWRyYWctcmVhZHkiLF8wPTIyMDtmdW5jdGlvbiBMQShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEVsZW1lbnQ/ISFlLmNsb3Nlc3QoImJ1dHRvbiwgYSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPSdidXR0b24nXSIpOiExfWZ1bmN0aW9uIHpzKCl7aWYodHlwZW9mIG5hdmlnYXRvcj4idSJ8fHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO2xldCBlPW5hdmlnYXRvci51c2VyQWdlbnR8fCIiLHQ9L0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KGUpLG49bmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjEmJi9NYWNpbnRvc2gvLnRlc3QoZSk7cmV0dXJuIXQmJiFuJiZ3aW5kb3cuaW5uZXJXaWR0aD44MDB9ZnVuY3Rpb24gX0EoZSx0LG4pe2lmKCFBcnJheS5pc0FycmF5KGUpfHwhdHx8IW58fHQ9PT1uKXJldHVybiBlO2xldCByPWUuZmluZEluZGV4KGw9Pmw/LndpZGdldElkPT09dCksbz1lLmZpbmRJbmRleChsPT5sPy53aWRnZXRJZD09PW4pO2lmKHI8MHx8bzwwfHxyPT09bylyZXR1cm4gZTtsZXQgYT1bLi4uZV0sW2ldPWEuc3BsaWNlKHIsMSkscz1yPG8/by0xOm87cmV0dXJuIGEuc3BsaWNlKHMsMCxpKSxhfWZ1bmN0aW9uIFVBKCl7aWYodHlwZW9mIGRvY3VtZW50PiJ1IilyZXR1cm4gbmV3IE1hcDtsZXQgZT1uZXcgTWFwO3JldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuZGFzaGJvYXJkLWdyaWQgLmdyaWQtY2VsbFtkYXRhLXdpZGdldC1pZF0iKS5mb3JFYWNoKG49PntsZXQgcj1uLmdldEF0dHJpYnV0ZSgiZGF0YS13aWRnZXQtaWQiKTtyJiZlLnNldChyLG4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpfSksZX1mdW5jdGlvbiBGQShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIE1hcCl8fGUuc2l6ZT09PTB8fHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuO2xldCBuPVtdO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5kYXNoYm9hcmQtZ3JpZCAuZ3JpZC1jZWxsW2RhdGEtd2lkZ2V0LWlkXSIpLmZvckVhY2gobz0+e2xldCBhPW8uZ2V0QXR0cmlidXRlKCJkYXRhLXdpZGdldC1pZCIpO2lmKCFhfHxhPT09dClyZXR1cm47bGV0IGk9ZS5nZXQoYSk7aWYoIWkpcmV0dXJuO2xldCBzPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbD1pLmxlZnQtcy5sZWZ0LGQ9aS50b3Atcy50b3A7TWF0aC5hYnMobCk8MSYmTWF0aC5hYnMoZCk8MXx8KG8uc3R5bGUudHJhbnNpdGlvbj0ibm9uZSIsby5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1mbGlwLXgiLGAke2x9cHhgKSxvLnN0eWxlLnNldFByb3BlcnR5KCItLWZsaXAteSIsYCR7ZH1weGApLG4ucHVzaChvKSl9KSxuLmxlbmd0aCE9PTAmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntuLmZvckVhY2gobz0+e28uc3R5bGUudHJhbnNpdGlvbj1gdHJhbnNmb3JtICR7XzB9bXMgZWFzZWAsby5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1mbGlwLXgiLCIwcHgiKSxvLnN0eWxlLnNldFByb3BlcnR5KCItLWZsaXAteSIsIjBweCIpfSksd2luZG93LnNldFRpbWVvdXQoKCk9PntuLmZvckVhY2gobz0+by5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgidHJhbnNpdGlvbiIpKX0sXzArNDApfSl9ZnVuY3Rpb24gVTAoZSl7cmV0dXJuKGV8fFtdKS5tYXAodD0+dD8ud2lkZ2V0SWQpLmZpbHRlcihCb29sZWFuKS5qb2luKCJ8Iil9ZnVuY3Rpb24gRjAoZSx0KXtsZXRbbixyXT0oMCxhdC51c2VTdGF0ZSkobnVsbCksW28sYV09KDAsYXQudXNlU3RhdGUpKGUpLGk9KDAsYXQudXNlUmVmKShlKSxzPSgwLGF0LnVzZVJlZikobnVsbCk7KDAsYXQudXNlRWZmZWN0KSgoKT0+e258fGEoZSl9LFtlLG5dKSwoMCxhdC51c2VFZmZlY3QpKCgpPT57aS5jdXJyZW50PW99LFtvXSksKDAsYXQudXNlTGF5b3V0RWZmZWN0KSgoKT0+e2xldCBkPXMuY3VycmVudDshbnx8IWR8fChzLmN1cnJlbnQ9bnVsbCxGQShkLG4pKX0sW28sbl0pLCgwLGF0LnVzZUVmZmVjdCkoKCk9PntsZXQgZD1jPT57bGV0IHU9Yz8uZGV0YWlsPy53aWRnZXRJZDt1JiYocih1KSxhKHA9PkFycmF5LmlzQXJyYXkocCkmJnAubGVuZ3RoP3A6ZSkpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIodW0sZCksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKHVtLGQpfSxbZV0pO2xldCBsPSgwLGF0LnVzZUNhbGxiYWNrKSgoKT0+e2lmKCFuKXJldHVybjtsZXQgZD1VMChlKSxjPVUwKGkuY3VycmVudCk7cihudWxsKSxjJiZkIT09YyYmdChpLmN1cnJlbnQubWFwKHU9PnUud2lkZ2V0SWQpKX0sW2Usbix0XSk7cmV0dXJuKDAsYXQudXNlRWZmZWN0KSgoKT0+e2lmKCFuKXJldHVybjtsZXQgZD1wPT57aWYoKHAuYnV0dG9ucyYxKSE9PTEpe2woKTtyZXR1cm59bGV0IHY9ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChwLmNsaWVudFgscC5jbGllbnRZKT8uY2xvc2VzdD8uKCIuZGFzaGJvYXJkLWdyaWQgLmdyaWQtY2VsbFtkYXRhLXdpZGdldC1pZF0iKT8uZ2V0QXR0cmlidXRlPy4oImRhdGEtd2lkZ2V0LWlkIik7aWYoIXZ8fHY9PT1uKXJldHVybjtsZXQgdz1VQSgpO2EoZz0+e2xldCBoPV9BKGcsbix2KTtyZXR1cm4gaCE9PWcmJihzLmN1cnJlbnQ9dyksaH0pfSxjPSgpPT5sKCksdT0oKT0+bCgpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixkKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsYyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHUpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsZCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGMpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix1KX19LFtuLGxdKSx7ZHJhZ2dpbmdXaWRnZXRJZDpuLGRpc3BsYXllZENvbXBvbmVudHM6b319ZnVuY3Rpb24gcG0oe2NvbmZpZ3VyYWJsZTplLGhlYWRlckFjdGlvbnM6dCxpY29uOm4sb25Db25maWd1cmU6cixzdWJ0aXRsZTpvLHRpdGxlOmEsd2lkZ2V0SWQ6aX0pe2xldFtzLGxdPSgwLGF0LnVzZVN0YXRlKSgoKT0+enMoKSksZD0oMCxhdC51c2VSZWYpKG51bGwpLGM9KDAsYXQudXNlUmVmKShudWxsKSx1PSgwLGF0LnVzZVJlZikoITEpLHA9KDAsYXQudXNlTWVtbykoKCk9Pih7d2lkZ2V0SWQ6aX0pLFtpXSk7cmV0dXJuKDAsYXQudXNlRWZmZWN0KSgoKT0+e2xldCBmPSgpPT5sKHpzKCkpO3JldHVybiBmKCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsZiksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLGYpfSxbXSksKDAsYXQudXNlRWZmZWN0KSgoKT0+e2xldCBmPWQuY3VycmVudDtpZighZilyZXR1cm47bGV0IHk9KCk9PntjLmN1cnJlbnQhPW51bGwmJih3aW5kb3cuY2xlYXJUaW1lb3V0KGMuY3VycmVudCksYy5jdXJyZW50PW51bGwpfSx2PWg9PntmLmNsYXNzTGlzdC50b2dnbGUoIndpZGdldC1oZWFkaW5nLWJhci0tZHJhZy1yZWFkeSIsISFoKX0sdz1oPT57aC5idXR0b249PT0wJiYoTEEoaC50YXJnZXQpfHwodS5jdXJyZW50PSExLHYoITEpLHkoKSxjLmN1cnJlbnQ9d2luZG93LnNldFRpbWVvdXQoKCk9Pnt1LmN1cnJlbnQ9ITAsdighMCksd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KHVtLHtkZXRhaWw6cH0pKX0sUEEpKSl9LGc9KCk9Pnt5KCksdS5jdXJyZW50PSExLHYoITEpfTtyZXR1cm4gZi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHcpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixnKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsZyksKCk9Pnt5KCksdighMSksZi5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHcpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixnKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsZyl9fSxbcF0pLCgwLCRyLmpzeHMpKCJkaXYiLHtyZWY6ZCxjbGFzc05hbWU6YHdpZGdldC1oZWFkZXIgd2lkZ2V0LWhlYWRpbmctYmFyJHtzPyIgd2lkZ2V0LWhlYWRpbmctYmFyLS1mb2N1c2FibGUiOiIifWAsY2hpbGRyZW46W3M/KDAsJHIuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJ3aWRnZXQtaWNvbiB3aWRnZXQtaWNvbi1idXR0b24iLHR5cGU6ImJ1dHRvbiIsdGl0bGU6YEZvY3VzICR7YX1gLCJhcmlhLWxhYmVsIjpgRm9jdXMgJHthfWAsb25DbGljazooKT0+d2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KHVjLHtkZXRhaWw6cH0pKSxjaGlsZHJlbjpufSk6KDAsJHIuanN4KSgic3BhbiIse2NsYXNzTmFtZToid2lkZ2V0LWljb24iLGNoaWxkcmVuOm59KSwoMCwkci5qc3hzKSgiaDMiLHtjbGFzc05hbWU6IndpZGdldC10aXRsZSIsY2hpbGRyZW46WygwLCRyLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6IndpZGdldC10aXRsZV9fbGFiZWwiLGNoaWxkcmVuOmF9KSxvPygwLCRyLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6IndpZGdldC10aXRsZV9fc3VidGl0bGUiLGNoaWxkcmVuOm99KTpudWxsXX0pLHR8fG51bGwsZT8oMCwkci5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6IndpZGdldC1jb25maWd1cmUiLG9uQ2xpY2s6cixjaGlsZHJlbjoiXHUyNjk5IENvbmZpZ3VyZSJ9KTpudWxsXX0pfXZhciBXcz1QKCQoKSksZm09KDAscGMuY3JlYXRlQ29udGV4dCkobnVsbCk7ZnVuY3Rpb24gYWUoe2FwcDplLGNoaWxkcmVuOnQsY29uZmlndXJhYmxlOm4sZ3JpZEhlaWdodFNpemU6cixncmlkV2lkdGhTaXplOm8saGVhZGVyQWN0aW9uczphLGljb246aSxvbkNvbmZpZ3VyZTpzLHN1YnRpdGxlOmwsdGl0bGU6ZCx3aWRnZXRJZDpjfSl7bGV0IHU9KDAscGMudXNlQ29udGV4dCkoZm0pLHA9aT8/X2IoYyksZj1sPz9VYihjKSx5PWQ/P19kKGMpLHY9YXN5bmMoKT0+e3M/cygpOmUmJmF3YWl0IGUuY29uZmlndXJlKGMpJiZ3aW5kb3cubG9jYXRpb24ucmVsb2FkKCl9LHc9bz8/dT8uZ3JpZFdpZHRoU2l6ZSxnPXI/P3U/LmdyaWRIZWlnaHRTaXplLGg9TnVtYmVyKHcpPjA/TnVtYmVyKHcpOjEsYj1OdW1iZXIoZyk+MD9OdW1iZXIoZyk6MSxtPWBob3Jpem9udGFsLSR7aH0tY2VsbCB2ZXJ0aWNhbC0ke2J9LWNlbGxgO3JldHVybigwLFdzLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6YHdpZGdldCB3aWRnZXQtJHtjfSAke219YCxjaGlsZHJlbjpbKDAsV3MuanN4KShwbSx7Y29uZmlndXJhYmxlOm4saGVhZGVyQWN0aW9uczphLGljb246cCxzdWJ0aXRsZTpmLHRpdGxlOnksd2lkZ2V0SWQ6YyxvbkNvbmZpZ3VyZTp2fSksKDAsV3MuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJ3aWRnZXQtYm9keSIsY2hpbGRyZW46dH0pXX0pfXZhciBFZT1QKCQoKSk7YXN5bmMgZnVuY3Rpb24gekEoZSx0KXtyZXR1cm4gdC5ub3RlVVVJRD9hd2FpdCBjYyhlLHQubm90ZVVVSUQpOmF3YWl0IEMwKGUsdCl9YXN5bmMgZnVuY3Rpb24gejAoZSx0LHthY3RpdmVUYWI6bixzZXRBY3RpdmVUYWI6cixzZXRNb250aExvYWRpbmc6byxzZXRNb250aENvbnRlbnQ6YX0pe2lmKG49PT10LmluZGV4KXtyKG51bGwpLGEobnVsbCk7cmV0dXJufXIodC5pbmRleCksbyghMCksYShudWxsKTtsZXQgaT10LnBsYW4ubm90ZVVVSUQ7dHJ5e2lmKCFpKWEoe2ZvdW5kOiExLHBsYW46dC5wbGFuLG1vbnRoTmFtZTp0LmZ1bGwseWVhcjp0LnBsYW4ueWVhcn0pO2Vsc2V7bGV0IHM9YXdhaXQgZGMoZSxpLHQuZnVsbCk7ayhgW1BsYW5uaW5nXSBSYXcgbWFya2Rvd24gZm9yICR7dC5mdWxsfTpgLHM/LmNvbnRlbnQpLGEoey4uLnMscGxhbjp0LnBsYW4sbW9udGhOYW1lOnQuZnVsbCx5ZWFyOnQucGxhbi55ZWFyfSl9fWNhdGNoe2Eoe2ZvdW5kOiExLHBsYW46dC5wbGFuLG1vbnRoTmFtZTp0LmZ1bGwseWVhcjp0LnBsYW4ueWVhcn0pfWZpbmFsbHl7byghMSl9fWFzeW5jIGZ1bmN0aW9uIFdBKGUsdCx7c2V0TW9udGhMb2FkaW5nOm4sc2V0TW9udGhDb250ZW50OnJ9KXtpZih0KXtuKCEwKTt0cnl7bGV0IG89YXdhaXQgTTAoZSx0LnBsYW4sdC5tb250aE5hbWUpO2lmKG8mJm8ubm90ZVVVSUQpcmV0dXJuIHIoYT0+KHsuLi5hLGZvdW5kOiEwLGNvbnRlbnQ6by5jb250ZW50fHwiIn0pKSxhd2FpdCBjYyhlLG8ubm90ZVVVSUQpfWNhdGNoe31maW5hbGx5e24oITEpfX19YXN5bmMgZnVuY3Rpb24gQkEoZSx0LG4scixvKXtyKCEwKTt0cnl7bGV0IGE9YXdhaXQgTzAoZSx0LG4pO2lmKGE/Lm5vdGVVVUlEKXJldHVybiBvKHtmb3VuZDohMCxjb250ZW50OmEuY29udGVudHx8IiJ9KSxhd2FpdCBjYyhlLGEubm90ZVVVSUQpfWNhdGNoe31maW5hbGx5e3IoITEpfX1mdW5jdGlvbiBIQSh7cGxhbjplLG9uQ2FyZENsaWNrOnR9KXtsZXQgbj0hIWUubm90ZVVVSUQscj0hIWUuaGFzQWxsTW9udGhseURldGFpbHMsbz0icXVhcnRlci1jYXJkIisobj8iIHF1YXJ0ZXItY2FyZC0taGFzLXBsYW4iOiIiKSxhPXI/Ilx1MjcwNSI6Ilx1ezFGNkE3fSIsaT1yPyJBbGwgMyBtb250aHMgaW4gdGhpcyBxdWFydGVyIGhhdmUgYmVlbiBwbGFubmVkLiI6Ik1vbnRobHkgZGV0YWlscyBhcmUgbWlzc2luZyBmb3Igb25lIG9yIG1vcmUgbW9udGhzIFx1MjAxNCB0aGlzIHBsYW4gaXMgYSB3b3JrIGluIHByb2dyZXNzLiI7cmV0dXJuKDAsRWUuanN4cykoImRpdiIse2NsYXNzTmFtZTpvLG9uQ2xpY2s6dCxjaGlsZHJlbjpbKDAsRWUuanN4KSgic3BhbiIse2NsYXNzTmFtZToicXVhcnRlci1sYWJlbCIsY2hpbGRyZW46ZS5sYWJlbH0pLCgwLEVlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6InF1YXJ0ZXItc3RhdHVzLXJvdyIsY2hpbGRyZW46WygwLEVlLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6InF1YXJ0ZXItc3RhdHVzIixjaGlsZHJlbjpuPyJcdXsxRjRERH0gT3BlbiBQbGFuIjoiKyBDcmVhdGUgUGxhbiJ9KSxuPygwLEVlLmpzeCkoTHMse2NvbnRlbnQ6aSxwbGFjZW1lbnQ6ImJvdHRvbSIsY2hpbGRyZW46KDAsRWUuanN4KSgic3BhbiIse2NsYXNzTmFtZToicXVhcnRlci1wbGFuLWluZGljYXRvciIsb25DbGljazpzPT5zLnN0b3BQcm9wYWdhdGlvbigpLGNoaWxkcmVuOmF9KX0pOm51bGxdfSldfSl9ZnVuY3Rpb24gS0Eoe21vbnRoTG9hZGluZzplLG1vbnRoQ29udGVudDp0LG9uQ3JlYXRlUGxhbjpufSl7cmV0dXJuIGU/KDAsRWUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJtb250aC1jb250ZW50LWxvYWRpbmciLGNoaWxkcmVuOiJMb2FkaW5nXHUyMDI2In0pOnQ/dC5mb3VuZD8oMCxFZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJtb250aC1jb250ZW50IixjaGlsZHJlbjpbKDAsRWUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJtb250aC1jb250ZW50LWhlYWRlciIsY2hpbGRyZW46dC5tb250aE5hbWV9KSwoMCxFZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6Im1vbnRoLWNvbnRlbnQtdGV4dCIsZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6e19faHRtbDpNcyh0LmNvbnRlbnQpfHwiPHA+KEVtcHR5IHNlY3Rpb24pPC9wPiJ9fSldfSk6KDAsRWUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJtb250aC1jb250ZW50LWVtcHR5IixjaGlsZHJlbjooMCxFZS5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6ImNyZWF0ZS1tb250aC1wbGFuLWxpbmsiLG9uQ2xpY2s6bixjaGlsZHJlbjpgQ3JlYXRlIGEgcGxhbiBmb3IgJHt0Lm1vbnRoTmFtZX0gJHt0LnllYXJ9YH0pfSk6bnVsbH1mdW5jdGlvbiBHQSh7d2Vla0xhYmVsOmUseWVhcjp0LHdlZWtMb2FkaW5nOm4sd2Vla0NvbnRlbnQ6cixvbkNyZWF0ZVdlZWtQbGFuOm99KXtyZXR1cm4gbj8oMCxFZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6IndlZWtseS1wbGFuLXNlY3Rpb24iLGNoaWxkcmVuOigwLEVlLmpzeCkoImRpdiIse2NsYXNzTmFtZToid2Vla2x5LXBsYW4tbG9hZGluZyIsY2hpbGRyZW46IkxvYWRpbmdcdTIwMjYifSl9KTpyPy5mb3VuZD8oMCxFZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6Im1vbnRoLWNvbnRlbnQtYXJlYSIsY2hpbGRyZW46KDAsRWUuanN4cykoImRpdiIse2NsYXNzTmFtZToibW9udGgtY29udGVudCIsY2hpbGRyZW46WygwLEVlLmpzeCkoImRpdiIse2NsYXNzTmFtZToibW9udGgtY29udGVudC1oZWFkZXIiLGNoaWxkcmVuOmV9KSwoMCxFZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6Im1vbnRoLWNvbnRlbnQtdGV4dCIsZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6e19faHRtbDpNcyhyLmNvbnRlbnQpfHwiPHA+KEVtcHR5IHNlY3Rpb24pPC9wPiJ9fSldfSl9KTooMCxFZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJ3ZWVrbHktcGxhbi1zZWN0aW9uIixjaGlsZHJlbjpbKDAsRWUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJ3ZWVrbHktcGxhbi1oZWFkZXIiLGNoaWxkcmVuOiJXZWVrbHkgUGxhbiJ9KSwoMCxFZS5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6ImNyZWF0ZS13ZWVrLXBsYW4tbGluayIsb25DbGljazpvLGNoaWxkcmVuOmBDcmVhdGUgYSB3ZWVrbHkgcGxhbiBmb3IgJHtlfSwgJHt0fWB9KV19KX1mdW5jdGlvbiBtbSh7YXBwOmUsZ3JpZEhlaWdodFNpemU6dD0xLHF1YXJ0ZXJseVBsYW5zOm59KXtsZXRbcixvXT0oMCxzci51c2VTdGF0ZSkobnVsbCksW2EsaV09KDAsc3IudXNlU3RhdGUpKG51bGwpLFtzLGxdPSgwLHNyLnVzZVN0YXRlKSghMSksW2QsY109KDAsc3IudXNlU3RhdGUpKG51bGwpLFt1LHBdPSgwLHNyLnVzZVN0YXRlKSghMSksW2YseV09KDAsc3IudXNlU3RhdGUpKCExKSxbdix3XT0oMCxzci51c2VTdGF0ZSkobnVsbCksZz10Pj0yLGg9ISEobj8uY3VycmVudCYmbj8ubmV4dCksYj1oP3AwKG4uY3VycmVudCxuLm5leHQpOltdLG09e2FjdGl2ZVRhYjpyLHNldEFjdGl2ZVRhYjpvLHNldE1vbnRoTG9hZGluZzpsLHNldE1vbnRoQ29udGVudDppfSxTPXtzZXRNb250aExvYWRpbmc6bCxzZXRNb250aENvbnRlbnQ6aX0seD1uYygpLEU9cmMoeCk7aWYobHQoInBsYW5uaW5nIixoJiZmJiYhcyYmKCFnfHwhdSkpLCgwLHNyLnVzZUVmZmVjdCkoKCk9PntpZighaHx8ZilyZXR1cm47bGV0IEE9Yi5maW5kKEM9PkMuY3VycmVudCk7QSYmKHkoITApLHowKGUsQSxtKSl9LFtmLGhdKSwoMCxzci51c2VFZmZlY3QpKCgpPT57aWYoIWh8fCFnKXJldHVybjtsZXQgQT1uLmN1cnJlbnQ/Lm5vdGVVVUlEO0EmJihwKCEwKSxkYyhlLEEsRSkudGhlbihDPT57ayhgW1BsYW5uaW5nXSBXZWVrbHkgc2VjdGlvbiAiJHtFfSI6YCxDKSxjKEMpfSkuY2F0Y2goKCk9PmMoe2ZvdW5kOiExLGNvbnRlbnQ6bnVsbH0pKS5maW5hbGx5KCgpPT5wKCExKSkpfSxbZyxoLG4/LmN1cnJlbnQ/Lm5vdGVVVUlELEVdKSx2JiZJbilyZXR1cm4oMCxFZS5qc3gpKGFlLHt3aWRnZXRJZDoicGxhbm5pbmciLGNoaWxkcmVuOigwLEVlLmpzeCkoY20se2FwcDplLG5vdGVVVUlEOnYsb25CYWNrOigpPT53KG51bGwpfSl9KTtpZighaClyZXR1cm4oMCxFZS5qc3gpKGFlLHt3aWRnZXRJZDoicGxhbm5pbmciLGNoaWxkcmVuOigwLEVlLmpzeCkoInAiLHtjbGFzc05hbWU6InBsYW5uaW5nLWVtcHR5IixjaGlsZHJlbjoiTG9hZGluZyBxdWFydGVybHkgcGxhbnNcdTIwMjYifSl9KTtsZXQgVD1BPT57QT8uZGV2RWRpdCYmQS5ub3RlVVVJRCYmdyhBLm5vdGVVVUlEKX07cmV0dXJuKDAsRWUuanN4cykoYWUse3dpZGdldElkOiJwbGFubmluZyIsY2hpbGRyZW46WygwLEVlLmpzeCkoImRpdiIse2NsYXNzTmFtZToicGxhbm5pbmctcXVhcnRlcnMiLGNoaWxkcmVuOltuLmN1cnJlbnQsbi5uZXh0XS5tYXAoQT0+KDAsRWUuanN4KShIQSx7cGxhbjpBLG9uQ2FyZENsaWNrOmFzeW5jKCk9PntsZXQgQz1hd2FpdCB6QShlLEEpO1QoQyl9fSxBLmxhYmVsKSl9KSwoMCxFZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6Im1vbnRoLXRhYnMiLGNoaWxkcmVuOmIubWFwKEE9PigwLEVlLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToibW9udGgtdGFiIisoQS5pbmRleD09PXI/IiBhY3RpdmUiOiIiKSxvbkNsaWNrOigpPT56MChlLEEsbSksY2hpbGRyZW46QS5zaG9ydH0sQS5pbmRleCkpfSksciE9PW51bGw/KDAsRWUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJtb250aC1jb250ZW50LWFyZWEiLGNoaWxkcmVuOigwLEVlLmpzeCkoS0Ese21vbnRoTG9hZGluZzpzLG1vbnRoQ29udGVudDphLG9uQ3JlYXRlUGxhbjphc3luYygpPT57bGV0IEE9YXdhaXQgV0EoZSxhLFMpO1QoQSl9fSl9KTpudWxsLGc/KDAsRWUuanN4KShHQSx7d2Vla0xhYmVsOkUseWVhcjpuLmN1cnJlbnQueWVhcix3ZWVrTG9hZGluZzp1LHdlZWtDb250ZW50OmQsb25DcmVhdGVXZWVrUGxhbjphc3luYygpPT57bGV0IEE9YXdhaXQgQkEoZSxuLmN1cnJlbnQsRSxwLGMpO1QoQSl9fSk6bnVsbF19KX12YXIgZmM9UChmZSgpKTtmdW5jdGlvbiBXMChlKXtpZighZSlyZXR1cm4gbnVsbDtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gTnVtYmVyLmlzTmFOKGUuZ2V0VGltZSgpKT9udWxsOm5ldyBEYXRlKGUuZ2V0VGltZSgpKTtpZih0eXBlb2YgZSE9Im51bWJlciImJnR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4gbnVsbDtsZXQgdD10eXBlb2YgZT09Im51bWJlciImJmU8MWUxMD9uZXcgRGF0ZShlKjFlMyk6bmV3IERhdGUoZSk7cmV0dXJuIE51bWJlci5pc05hTih0LmdldFRpbWUoKSk/bnVsbDp0fWZ1bmN0aW9uIGFpKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UuZmlsdGVyKHQ9PnQmJnR5cGVvZiB0PT0ib2JqZWN0IikubWFwKHQ9Pih7Li4udCxlbmQ6VzAodC5lbmQpLHN0YXJ0OlcwKHQuc3RhcnQpfSkpOltdfWZ1bmN0aW9uIEIwKGUsdCxuKXtsZXQgcj10P3tkYXlzOjMsdGFza0RvbWFpblVVSUQ6dH06e2RheXM6M307ZS5nZXRFeHRlcm5hbENhbGVuZGFyRXZlbnRzKHIpLnRoZW4obz0+e2soIlt1c2VFeHRlcm5hbENhbGVuZGFyRXZlbnRzXSBSZWNlaXZlZCBjYWxlbmRhciBldmVudHMiLG8pLG4oYWkobykpfSkuY2F0Y2goKCk9PntuKFtdKX0pfWZ1bmN0aW9uIGhtKGUsdCl7bGV0W24scl09KDAsZmMudXNlU3RhdGUpKG51bGwpO3JldHVybigwLGZjLnVzZUVmZmVjdCkoKCk9PntyKG51bGwpLEIwKGUsdCxyKTtmdW5jdGlvbiBvKCl7ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09InZpc2libGUiJiZCMChlLHQscil9cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLG8pLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixvKX0sW2UsdF0pLHtjYWxlbmRhckV2ZW50czpuLGNhbGVuZGFyRXZlbnRzTG9hZGVkOm4hPT1udWxsfX12YXIgSDA9MzAsZ209MjQqNjAqNjAqMWUzO2Z1bmN0aW9uIHltKGUse21heERheXM6dD1IMCx0b2RheTpuPW5ldyBEYXRlfT17fSl7bGV0IHI9SzAoZSxuKTtyZXR1cm4gTWF0aC5tYXgoMSxNYXRoLm1pbih0LHIrMSkpfWZ1bmN0aW9uIEswKGUsdD1uZXcgRGF0ZSl7bGV0IG49WHIodCkscj1YcihlKTtyZXR1cm4gTWF0aC5mbG9vcigoci5nZXRUaW1lKCktbi5nZXRUaW1lKCkpL2dtKX1mdW5jdGlvbiBHMChlLHQpe2lmKCFlKXJldHVybiExO2lmKGUuc3RhcnQmJmllKGUuc3RhcnQpPT09aWUodCkpcmV0dXJuITA7bGV0IG49WHIodCkuZ2V0VGltZSgpLHI9bitnbSxvPWUuc3RhcnQ/SWUoZS5zdGFydCx7dGhyb3dPbkludmFsaWQ6ITF9KTpudWxsLGE9ZS5lbmQ/SWUoZS5lbmQse3Rocm93T25JbnZhbGlkOiExfSk6bnVsbCxpPW8/by5nZXRUaW1lKCk6bixzPWE/YS5nZXRUaW1lKCk6aStnbTtyZXR1cm4gaTxyJiZzPm59YXN5bmMgZnVuY3Rpb24gVjAoZSx0LG49bnVsbCx7bG9nUHJlZml4OnI9IltjYWxlbmRhci11dGlsaXR5XSIsbWF4RGF5czpvPUgwfT17fSl7aWYodHlwZW9mIGUuZ2V0RXh0ZXJuYWxDYWxlbmRhckV2ZW50cyE9ImZ1bmN0aW9uIilyZXR1cm5bXTtsZXQgYT1LMCh0KTtpZihhPDB8fGE+PW8pcmV0dXJuW107bGV0IGk9eW0odCx7bWF4RGF5czpvfSkscz1uP3tkYXlzOmksdGFza0RvbWFpblVVSUQ6bn06e2RheXM6aX07cmV0dXJuIGF3YWl0IGUuZ2V0RXh0ZXJuYWxDYWxlbmRhckV2ZW50cyhzKS5jYXRjaChsPT4oayhgJHtyfSBnZXRFeHRlcm5hbENhbGVuZGFyRXZlbnRzIGZhaWxlZGAsbD8ubWVzc2FnZSksW10pKX12YXIgbWM9ImRhc2hib2FyZDp0b2RheS1vYmxpZ2F0aW9ucyIsZ2M9ImRhc2hib2FyZDp0b2RheS1vYmxpZ2F0aW9ucy1yZXF1ZXN0IixWQT01MDAsakE9MWUxMCxZQT02ZTQ7ZnVuY3Rpb24gYm0oZSx0LG4pe2xldCByPXpuKG58fG5ldyBEYXRlKSxpPShlfHxbXSkuZmlsdGVyKHA9PnAmJiFwLmNvbXBsZXRlZEF0JiYhcC5kaXNtaXNzZWRBdCkuZmlsdGVyKHA9PlkwKHAuc3RhcnRBdHx8cC5kZWFkbGluZSxyKSkubWFwKHA9PnEwKHtkdXJhdGlvbk1pbnV0ZXM6cUEocCksc291cmNlOiJ0YXNrIixzdGFydE1pbnV0ZXM6ajAocC5zdGFydEF0fHxwLmRlYWRsaW5lKSx0YXNrVXVpZDpwLnV1aWR8fG51bGwsdGl0bGU6cC5jb250ZW50fSkpLGQ9KHR8fFtdKS5maWx0ZXIocD0+cCYmIXAuYWxsRGF5KS5maWx0ZXIocD0+WTAocC5zdGFydCxyKSkubWFwKHA9PnEwKHtkdXJhdGlvbk1pbnV0ZXM6WEEocCksc291cmNlOiJldmVudCIsc3RhcnRNaW51dGVzOmowKHAuc3RhcnQpLHRpdGxlOnAudGl0bGV8fCJDYWxlbmRhciBldmVudCJ9KSk7cmV0dXJuWy4uLmksLi4uZF0uZmlsdGVyKEJvb2xlYW4pLnNvcnQoKHAsZik9PnAuc3RhcnRNaW51dGVzLWYuc3RhcnRNaW51dGVzKX1mdW5jdGlvbiBoYyhlKXtpZighZSlyZXR1cm4gbnVsbDtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gTnVtYmVyLmlzTmFOKGUuZ2V0VGltZSgpKT9udWxsOmUuZ2V0VGltZSgpO2lmKHR5cGVvZiBlPT0ibnVtYmVyIilyZXR1cm4gZTxqQT9lKjFlMzplO2lmKHR5cGVvZiBlPT0ic3RyaW5nIil7bGV0IHQ9bmV3IERhdGUoZSkuZ2V0VGltZSgpO3JldHVybiBOdW1iZXIuaXNOYU4odCk/bnVsbDp0fXJldHVybiBudWxsfWZ1bmN0aW9uIGowKGUpe2xldCB0PWhjKGUpO2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7bGV0IG49bmV3IERhdGUodCk7cmV0dXJuIG4uZ2V0SG91cnMoKSo2MCtuLmdldE1pbnV0ZXMoKX1mdW5jdGlvbiBZMChlLHQpe2xldCBuPWhjKGUpO3JldHVybiBuIT1udWxsJiZ6bihuZXcgRGF0ZShuKSk9PT10fWZ1bmN0aW9uIHEwKHtkdXJhdGlvbk1pbnV0ZXM6ZT1udWxsLHNvdXJjZTp0LHN0YXJ0TWludXRlczpuLHRhc2tVdWlkOnI9bnVsbCx0aXRsZTpvfSl7bGV0IGE9U3RyaW5nKG98fCIiKS5yZXBsYWNlKC9ccysvZywiICIpLnRyaW0oKTtyZXR1cm4gbj09bnVsbHx8IWE/bnVsbDp7ZHVyYXRpb25NaW51dGVzOmV8fG51bGwsc291cmNlOnQsc3RhcnRNaW51dGVzOm4sdGFza1V1aWQ6cix0aXRsZTphfX1mdW5jdGlvbiBxQShlKXtsZXQgdD1lPy5kdXJhdGlvbjtyZXR1cm4gdHlwZW9mIHQhPSJudW1iZXIifHx0PD0wP251bGw6TWF0aC5yb3VuZCh0LzYwKX1mdW5jdGlvbiBYQShlKXtsZXQgdD1oYyhlPy5zdGFydCksbj1oYyhlPy5lbmQpO3JldHVybiB0PT1udWxsfHxuPT1udWxsfHxuPD10P251bGw6TWF0aC5yb3VuZCgobi10KS9ZQSl9YXN5bmMgZnVuY3Rpb24gdm0oZSx7Y2FsZW5kYXJFdmVudHM6dD1udWxsLGN1cnJlbnREYXRlOm49bnVsbCxkb21haW5VdWlkOnI9bnVsbH09e30pe2xldCBvPWF3YWl0IEZuKGUscikuY2F0Y2goKCk9PltdKSxhPVtdO2lmKEFycmF5LmlzQXJyYXkodCkpYT1haSh0KTtlbHNlIHRyeXtsZXQgcz15bShufHxuZXcgRGF0ZSksbD1yP3tkYXlzOnMsdGFza0RvbWFpblVVSUQ6cn06e2RheXM6c30sZD1hd2FpdCBlLmdldEV4dGVybmFsQ2FsZW5kYXJFdmVudHMobCk7YT1haShkKX1jYXRjaChzKXtrKCJbcHJvcG9zZWQtYWdlbmRhXSBkZXJpdmVUb2RheU9ibGlnYXRpb25zOiBjYWxlbmRhciBmZXRjaCBmYWlsZWQiLHMpfWxldCBpPWJtKG8sYSxuKTtyZXR1cm4gaygiW3Byb3Bvc2VkLWFnZW5kYV0gZGVyaXZlVG9kYXlPYmxpZ2F0aW9ucyIse2NvdW50OmkubGVuZ3RoLGRvbWFpblV1aWQ6cn0pLGl9ZnVuY3Rpb24gWDAoZSx7Y2FsZW5kYXJFdmVudHM6dD1udWxsLGN1cnJlbnREYXRlOm49bnVsbCxkb21haW5VdWlkOnI9bnVsbCx0aW1lb3V0TXM6bz1WQX09e30pe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3ZtKGUse2NhbGVuZGFyRXZlbnRzOnQsY3VycmVudERhdGU6bixkb21haW5VdWlkOnJ9KTp0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5kaXNwYXRjaEV2ZW50P3ZtKGUse2N1cnJlbnREYXRlOm4sZG9tYWluVXVpZDpyfSk6bmV3IFByb21pc2UoYT0+e2xldCBpPSExLHM9dT0+e2l8fChpPSEwLGQoKSxhKHUpKX0sbD11PT5zKEFycmF5LmlzQXJyYXkodT8uZGV0YWlsPy5vYmxpZ2F0aW9ucyk/dS5kZXRhaWwub2JsaWdhdGlvbnM6W10pO2Z1bmN0aW9uIGQoKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihtYyxsKSxjbGVhclRpbWVvdXQoYyl9d2luZG93LmFkZEV2ZW50TGlzdGVuZXIobWMsbCk7bGV0IGM9c2V0VGltZW91dCgoKT0+e3ZtKGUse2N1cnJlbnREYXRlOm4sZG9tYWluVXVpZDpyfSkudGhlbihzKS5jYXRjaCgoKT0+cyhbXSkpfSxvKTt3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoZ2MpKX0pfXZhciBEbz1QKGZlKCkpO3ZhciBxZT1QKCQoKSkseWM9MztmdW5jdGlvbiAkMChlLHQpe3JldHVybiFBcnJheS5pc0FycmF5KGUpfHwhdD9bXTplLmZpbHRlcihuPT5uPy5zdGFydCYmem4obi5zdGFydCk9PT10KX1mdW5jdGlvbiB3bSh7YXBwOmUsY2FsZW5kYXJFdmVudHM6dCxjdXJyZW50RGF0ZTpuLHNlbGVjdGVkRGF0ZTpyLHRhc2tzOm8sdGltZUZvcm1hdDphfSl7bGV0W2ksc109KDAsRG8udXNlU3RhdGUpKDApLGw9KDAsRG8udXNlUmVmKShudWxsKSxkPXpuKG58fG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSksYz1PYmplY3Qua2V5cyhvfHx7fSkuc29ydCgpLHA9QXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MD8kMCh0LGQpOltdLGY9QXJyYXkuZnJvbShuZXcgU2V0KFsuLi5jLC4uLnAubGVuZ3RoPjA/W2RdOltdXSkpLnNvcnQoKSx5PXImJiFmLmluY2x1ZGVzKHIpP1suLi5mLHJdLnNvcnQoKTpmLHY9TWF0aC5tYXgoMSxNYXRoLmNlaWwoeS5sZW5ndGgveWMpKTsoMCxEby51c2VFZmZlY3QpKCgpPT57aWYoIXIpcmV0dXJuO2xldCBNPXkuaW5kZXhPZihyKTtNPj0wJiZzKE1hdGguZmxvb3IoTS95YykpfSxbcl0pLCgwLERvLnVzZUVmZmVjdCkoKCk9PntfbihsLmN1cnJlbnQpfSksKDAsRG8udXNlRWZmZWN0KSgoKT0+e2xldCBNPSgpPT57bGV0IFc9Ym0obz8uW2RdfHxbXSxwLG4pO3dpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChtYyx7ZGV0YWlsOntkYXRlS2V5OmQsb2JsaWdhdGlvbnM6V319KSl9O3JldHVybiBNKCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoZ2MsTSksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGdjLE0pfSxbdCxuLG8sZF0pO2xldCB3PU1hdGgubWluKGksdi0xKSxnPXkuc2xpY2Uodyp5YywodysxKSp5YyksaD1NPT5NLmltcG9ydGFudCYmTS51cmdlbnQ/InByaW9yaXR5LWNyaXRpY2FsIjpNLmltcG9ydGFudD8icHJpb3JpdHktaW1wb3J0YW50IjpNLnVyZ2VudD8icHJpb3JpdHktdXJnZW50IjoicHJpb3JpdHktbm9ybWFsIixiPU09PntpZighTSlyZXR1cm4gbnVsbDtpZihNIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gTS5nZXRUaW1lKCk7aWYodHlwZW9mIE09PSJudW1iZXIiKXJldHVybiBNPDFlMTA/TSoxZTM6TTtpZih0eXBlb2YgTT09InN0cmluZyIpe2xldCBXPW5ldyBEYXRlKE0pLmdldFRpbWUoKTtyZXR1cm4gTnVtYmVyLmlzTmFOKFcpP251bGw6V31yZXR1cm4gbnVsbH0sbT1NPT57bGV0IFc9YihNPy5lbmQpLEQ9YihNPy5zdGFydCk7cmV0dXJuIFc9PW51bGx8fEQ9PW51bGx8fFc8PUQ/bnVsbDpNYXRoLnJvdW5kKChXLUQpLzZlNCl9LFM9TT0+e2xldCBXPWIoTSk7aWYoIVcpcmV0dXJuIiI7bGV0IEQ9YT09PSIyNGgiP3tob3VyOiIyLWRpZ2l0IixtaW51dGU6IjItZGlnaXQiLGhvdXIxMjohMX06e2hvdXI6IjItZGlnaXQiLG1pbnV0ZToiMi1kaWdpdCJ9O3JldHVybiBuZXcgRGF0ZShXKS50b0xvY2FsZVRpbWVTdHJpbmcoW10sRCl9LHg9TT0+TS5ub3RlVVVJRHx8TS5ub3RlVXVpZHx8TS5ub3RlPy51dWlkfHxudWxsLEU9TT0+TS5ub3RlTmFtZXx8TS5ub3RlVGl0bGV8fE0ubm90ZT8ubmFtZXx8Ik9wZW4gbm90ZSIsVD1hc3luYyBNPT57bGV0IFc9eChNKTshV3x8IU0udXVpZHx8YXdhaXQgZS5uYXZpZ2F0ZShgaHR0cHM6Ly93d3cuYW1wbGVub3RlLmNvbS9ub3Rlcy8ke1d9P2hpZ2hsaWdodFRhc2tVVUlEPSR7TS51dWlkfWApfSxBPWFzeW5jKE0sVyk9PntXLnN0b3BQcm9wYWdhdGlvbigpO2xldCBEPXgoTSk7RCYmYXdhaXQgZS5uYXZpZ2F0ZShgaHR0cHM6Ly93d3cuYW1wbGVub3RlLmNvbS9ub3Rlcy8ke0R9YCl9LEM9TT0+bmV3IERhdGUoYCR7TX1UMDA6MDA6MDBgKS50b0xvY2FsZURhdGVTdHJpbmcoW10se3dlZWtkYXk6InNob3J0Iixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyJ9KSxMPURhdGUubm93KCksTz1NPT5NLmZpbHRlcihXPT57bGV0IEQ9YihXLmhpZGVVbnRpbCk7cmV0dXJuIEQ9PW51bGw/ITA6RDw9TH0pLFI9KE0sVyk9PntpZihXLnR5cGU9PT0iZXZlbnQiJiZXLmV2ZW50LmFsbERheSlyZXR1cm4gbmV3IERhdGUoYCR7TX1UMDA6MDA6MDBgKS5nZXRUaW1lKCk7bGV0IEQ9Vy50eXBlPT09ImV2ZW50Ij9XLmV2ZW50LnN0YXJ0OlcudGFzay5zdGFydEF0fHxXLnRhc2suZGVhZGxpbmUsTj1iKEQpO3JldHVybiBOPz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9LEY9KE0sVyxEKT0+Wy4uLkQubWFwKChOLF8pPT4oe2luZGV4Ol8sc29ydE1zOlIoTSx7dGFzazpOLHR5cGU6InRhc2sifSksdGFzazpOLHR5cGU6InRhc2sifSkpLC4uLlcubWFwKChOLF8pPT4oe2V2ZW50Ok4saW5kZXg6Xyxzb3J0TXM6UihNLHtldmVudDpOLHR5cGU6ImV2ZW50In0pLHNvdXJjZU9yZGVyOkQubGVuZ3RoK18sdHlwZToiZXZlbnQifSkpXS5tYXAoKE4sXyk9Pih7Li4uTixzb3VyY2VPcmRlcjpOLnNvdXJjZU9yZGVyPz9ffSkpLnNvcnQoKE4sXyk9Pk4uc29ydE1zLV8uc29ydE1zfHxOLnNvdXJjZU9yZGVyLV8uc291cmNlT3JkZXIpLFY9dj4xPygwLHFlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImFnZW5kYS1wYWdpbmF0aW9uIixjaGlsZHJlbjpbKDAscWUuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJhZ2VuZGEtcGFnZS1hcnJvdyIsb25DbGljazooKT0+cyhNPT5NYXRoLm1heCgwLE0tMSkpLGRpc2FibGVkOnc9PT0wLGNoaWxkcmVuOiJcdTI1QzAifSksKDAscWUuanN4KSgic3BhbiIse2NsYXNzTmFtZToiYWdlbmRhLXBhZ2UtaW5kaWNhdG9yIixjaGlsZHJlbjpgJHt3KzF9IC8gJHt2fWB9KSwoMCxxZS5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6ImFnZW5kYS1wYWdlLWFycm93IixvbkNsaWNrOigpPT5zKE09Pk1hdGgubWluKHYtMSxNKzEpKSxkaXNhYmxlZDp3Pj12LTEsY2hpbGRyZW46Ilx1MjVCNiJ9KV19KTpudWxsLHo9TT0+e2xldCBXPWIoTS50YXNrLnN0YXJ0QXQpLEQ9YihNLnRhc2suZW5kQXQpLE49VyYmRCYmRD5XO3JldHVybigwLHFlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImFnZW5kYS1pdGVtIGFnZW5kYS10YXNrLXJvdyIsb25DbGljazpfPT57Xy50YXJnZXQuY2xvc2VzdCgiYSIpfHxUKE0udGFzayl9LGNoaWxkcmVuOlsoMCxxZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6YGFnZW5kYS1pbmRpY2F0b3IgJHtoKE0udGFzayl9YH0pLCgwLHFlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImFnZW5kYS1jb250ZW50IixjaGlsZHJlbjpbKDAscWUuanN4KSgic3BhbiIse2NsYXNzTmFtZToiYWdlbmRhLXRpbWUiLHRpdGxlOmAke00udGFzay5zdGFydEF0PyJTdGFydCI6IkRlYWRsaW5lIn0gdGltZSBmb3IgdGFza2AsY2hpbGRyZW46UyhNLnRhc2suc3RhcnRBdHx8TS50YXNrLmRlYWRsaW5lKX0pLCgwLHFlLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImFnZW5kYS10ZXh0IixkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOnJyKE0udGFzay5jb250ZW50KXx8IlVudGl0bGVkIHRhc2sifX0pLHgoTS50YXNrKT8oMCxxZS5qc3gpKCJidXR0b24iLHt0eXBlOiJidXR0b24iLGNsYXNzTmFtZToiYWdlbmRhLW5vdGUtbGluayIsb25DbGljazpfPT5BKE0udGFzayxfKSxjaGlsZHJlbjpFKE0udGFzayl9KTpudWxsXX0pLE4/KDAscWUuanN4KSgic3BhbiIse2NsYXNzTmFtZToiYWdlbmRhLWR1cmF0aW9uIixjaGlsZHJlbjpNYXRoLnJvdW5kKChELVcpLzZlNCkrIm0ifSk6bnVsbF19LE0udGFzay51dWlkKX0sbmU9TT0+e2xldCBXPW0oTS5ldmVudCk7cmV0dXJuKDAscWUuanN4cykoImRpdiIse2NsYXNzTmFtZToiYWdlbmRhLWl0ZW0gYWdlbmRhLXRhc2stcm93IixjaGlsZHJlbjpbKDAscWUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJhZ2VuZGEtaW5kaWNhdG9yIHByaW9yaXR5LW5vcm1hbCJ9KSwoMCxxZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJhZ2VuZGEtY29udGVudCIsY2hpbGRyZW46W00uZXZlbnQuYWxsRGF5PygwLHFlLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImFnZW5kYS10aW1lIixjaGlsZHJlbjoiQWxsIGRheSJ9KTpNLmV2ZW50LnN0YXJ0PygwLHFlLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImFnZW5kYS10aW1lIixjaGlsZHJlbjpTKE0uZXZlbnQuc3RhcnQpfSk6bnVsbCwoMCxxZS5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJhZ2VuZGEtdGV4dCIsY2hpbGRyZW46TS5ldmVudC50aXRsZXx8IkNhbGVuZGFyIGV2ZW50In0pLE0uZXZlbnQuY2FsZW5kYXI/Lm5hbWU/KDAscWUuanN4KSgic3BhbiIse2NsYXNzTmFtZToiYWdlbmRhLW5vdGUtbGluayIsY2hpbGRyZW46TS5ldmVudC5jYWxlbmRhci5uYW1lfSk6bnVsbF19KSxXPygwLHFlLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImFnZW5kYS1kdXJhdGlvbiIsY2hpbGRyZW46VysibSJ9KTpudWxsXX0sYGNhbC0ke00uaW5kZXh9YCl9O3JldHVybigwLHFlLmpzeCkoYWUse2hlYWRlckFjdGlvbnM6Vix3aWRnZXRJZDoiYWdlbmRhIixjaGlsZHJlbjooMCxxZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImFnZW5kYS1saXN0IixyZWY6bCxjaGlsZHJlbjpnLm1hcChNPT57bGV0IFc9b1tNXXx8W10sRD1PKFcpLE49JDAodCxNKSxfPUYoTSxOLEQpO3JldHVybigwLHFlLmpzeHMpKCJzZWN0aW9uIix7Y2xhc3NOYW1lOiJhZ2VuZGEtZGF5IixjaGlsZHJlbjpbKDAscWUuanN4KSgiaDQiLHtjbGFzc05hbWU6ImFnZW5kYS1kYXRlLWxhYmVsIixjaGlsZHJlbjpDKE0pfSksRC5sZW5ndGg9PT0wJiZOLmxlbmd0aD09PTA/KDAscWUuanN4KSgicCIse2NsYXNzTmFtZToiYWdlbmRhLWVtcHR5LWRheSIsY2hpbGRyZW46TT09PWQ/Ik5vIHRhc2tzIHNjaGVkdWxlZCBmb3IgdG9kYXkiOiJObyB0YXNrcyBzY2hlZHVsZWQifSk6Xy5tYXAoRz0+Ry50eXBlPT09InRhc2siP3ooRyk6bmUoRykpXX0sTSl9KX0pfSl9dmFyIEowPVAoZmUoKSk7dmFyIHhuPVAoJCgpKTtmdW5jdGlvbiBrbSh7YXBwOmUsY29tcGxldGVkVGFza3NCeURhdGU6dCxjdXJyZW50RGF0ZTpuLGdyaWRIZWlnaHRTaXplOnIsZ3JpZFdpZHRoU2l6ZTpvLG9uRGF0ZVNlbGVjdDphLG9uT3BlblNldHRpbmdzOmksb3BlblRhc2tzOnMsc2VsZWN0ZWREYXRlOmwsd2Vla0Zvcm1hdDpkfSl7bGV0IGM9bmV3IERhdGUobiksW3UscF09KDAsSjAudXNlU3RhdGUpKG5ldyBEYXRlKGMuZ2V0RnVsbFllYXIoKSxjLmdldE1vbnRoKCksMSkpLGY9ZD09PSJtb25kYXkiPzE6MCx5PW5ldyBEYXRlKHUuZ2V0RnVsbFllYXIoKSx1LmdldE1vbnRoKCkrMSwwKS5nZXREYXRlKCksdj0obmV3IERhdGUodS5nZXRGdWxsWWVhcigpLHUuZ2V0TW9udGgoKSwxKS5nZXREYXkoKS1mKzcpJTcsdz1mPT09MT9bIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSIsIlN1Il06WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGc9e30saD11LmdldEZ1bGxZZWFyKCksYj11LmdldE1vbnRoKCksbT1gJHtofS0ke1N0cmluZyhiKzEpLnBhZFN0YXJ0KDIsIjAiKX0tYDtbcyx0XS5mb3JFYWNoKFI9PntPYmplY3Qua2V5cyhSfHx7fSkuZm9yRWFjaChGPT57aWYoRi5zdGFydHNXaXRoKG0pKXtsZXQgVj1wYXJzZUludChGLnN1YnN0cmluZyg4KSwxMCk7Z1tWXT0oZ1tWXXx8MCkrKFJbRl0/Lmxlbmd0aHx8MCl9fSl9KTtsZXQgUz0oKT0+cChuZXcgRGF0ZSh1LmdldEZ1bGxZZWFyKCksdS5nZXRNb250aCgpLTEsMSkpLHg9KCk9PnAobmV3IERhdGUodS5nZXRGdWxsWWVhcigpLHUuZ2V0TW9udGgoKSsxLDEpKSxFPXUudG9Mb2NhbGVTdHJpbmcoImRlZmF1bHQiLHttb250aDoibG9uZyIseWVhcjoibnVtZXJpYyJ9KSxUPVI9PlI9PT1jLmdldERhdGUoKSYmdS5nZXRNb250aCgpPT09Yy5nZXRNb250aCgpJiZ1LmdldEZ1bGxZZWFyKCk9PT1jLmdldEZ1bGxZZWFyKCksQT1SPT57bGV0IEY9dS5nZXRGdWxsWWVhcigpLFY9U3RyaW5nKHUuZ2V0TW9udGgoKSsxKS5wYWRTdGFydCgyLCIwIiksej1TdHJpbmcoUikucGFkU3RhcnQoMiwiMCIpO3JldHVybmAke0Z9LSR7Vn0tJHt6fWB9LEM9Uj0+bCYmQShSKT09PWwsTD1SPT57aWYoYSl7bGV0IEY9QShSKTthKEY9PT1sP251bGw6Ril9fSxPPVtdO2ZvcihsZXQgUj0wO1I8djtSKyspTy5wdXNoKCgwLHhuLmpzeCkoImRpdiIse2NsYXNzTmFtZToiY2FsLWNlbGwgZW1wdHkifSwiZW1wdHktIitSKSk7Zm9yKGxldCBSPTE7Ujw9eTtSKyspe2xldCBGPWdbUl18fDAsVj1GPT09MD8ibm9uZSI6Rjw9Mj8iIzg2ZWZhYyI6Rjw9NT8iI2ZiYmYyNCI6IiNmODcxNzEiLHo9ImNhbC1jZWxsIjtUKFIpJiYoeis9IiB0b2RheSIpLEMoUikmJih6Kz0iIHNlbGVjdGVkIiksTy5wdXNoKCgwLHhuLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6eixvbkNsaWNrOigpPT5MKFIpLGNoaWxkcmVuOlsoMCx4bi5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJjYWwtZGF5IixjaGlsZHJlbjpSfSksViE9PSJub25lIj8oMCx4bi5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJjYWwtZG90IixzdHlsZTp7YmFja2dyb3VuZENvbG9yOlZ9fSk6bnVsbF19LFIpKX1yZXR1cm4oMCx4bi5qc3hzKShhZSx7Y29uZmlndXJhYmxlOiEwLGdyaWRIZWlnaHRTaXplOnIsZ3JpZFdpZHRoU2l6ZTpvLG9uQ29uZmlndXJlOmksd2lkZ2V0SWQ6ImNhbGVuZGFyIixjaGlsZHJlbjpbKDAseG4uanN4cykoImRpdiIse2NsYXNzTmFtZToiY2FsLW5hdiIsY2hpbGRyZW46WygwLHhuLmpzeCkoImJ1dHRvbiIse29uQ2xpY2s6UyxjbGFzc05hbWU6ImNhbC1hcnJvdyIsY2hpbGRyZW46Ilx1MjVDMCJ9KSwoMCx4bi5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJjYWwtbW9udGgiLGNoaWxkcmVuOkV9KSwoMCx4bi5qc3gpKCJidXR0b24iLHtvbkNsaWNrOngsY2xhc3NOYW1lOiJjYWwtYXJyb3ciLGNoaWxkcmVuOiJcdTI1QjYifSldfSksKDAseG4uanN4cykoImRpdiIse2NsYXNzTmFtZToiY2FsLWdyaWQiLGNoaWxkcmVuOlt3Lm1hcChSPT4oMCx4bi5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImNhbC1oZWFkZXIiLGNoaWxkcmVuOlJ9LFIpKSxPXX0pXX0pfWZ1bmN0aW9uICRBKGUpe2lmKCFlKXJldHVybiBudWxsO2lmKHR5cGVvZiBlPT0ib2JqZWN0IilyZXR1cm4gZTt0cnl7bGV0IHQ9SlNPTi5wYXJzZShlKTtyZXR1cm4gdCYmdHlwZW9mIHQ9PSJvYmplY3QiP3Q6bnVsbH1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gSkEoZSl7bGV0IHQ9JEEoZT8uW0IuUkVOREVSX0JSRUFEQ1JVTUJdKTtyZXR1cm4gdD97YnJlYWRjcnVtYjp0LGNyYXNoZWQ6dC5zZXR0bGVkQXQ9PW51bGx9Om51bGx9ZnVuY3Rpb24gUTAoZSl7bGV0IHQ9SkEoZSk7aWYoIXR8fCF0LmNyYXNoZWQpcmV0dXJuIG51bGw7bGV0e2JyZWFkY3J1bWI6bn09dDtyZXR1cm4gayhgW2NyYXNoLWJyZWFkY3J1bWJdIHByaW9yIHNlc3Npb24gZGlkIG5vdCByZWFjaCBsb2FkLXNldHRsZSBcdTIwMTQgbGlrZWx5IE9PTS4gd2lkZ2V0czoke24ud2lkZ2V0Q291bnR9IHRpZXI6JHtuLnRpZXJ9IG1vYmlsZToke24ubW9iaWxlfWAsbi53aWRnZXRJZHMpLGV0KCJkYXNoYm9hcmRQcmlvckNyYXNoIix7Y29yZXM6bi5jb3Jlcz8/InVua25vd24iLG1lbW9yeUdiOm4ubWVtb3J5R2I/PyJ1bmtub3duIix0aWVyOm4udGllcj8/InVua25vd24iLHdpZGdldENvdW50Om4ud2lkZ2V0Q291bnQ/PzB9KSxufWFzeW5jIGZ1bmN0aW9uIFowKGUse2RldmljZVByb2ZpbGU6dCxzdGFydGVkQXQ6bix3aWRnZXRJZHM6cn0pe2xldCBvPXtjb3Jlczp0Py5jb3Jlcz8/bnVsbCxtZW1vcnlHYjp0Py5tZW1vcnlHYj8/bnVsbCxtb2JpbGU6ISF0Py5tb2JpbGUsc2V0dGxlZEF0Om51bGwsc3RhcnRlZEF0Om4sdGllcjp0Py50aWVyPz9udWxsLHdpZGdldENvdW50OnIubGVuZ3RoLHdpZGdldElkczpyfTtyZXR1cm4gYXdhaXQgZS5zZXRTZXR0aW5nKEIuUkVOREVSX0JSRUFEQ1JVTUIsSlNPTi5zdHJpbmdpZnkobykpLG99YXN5bmMgZnVuY3Rpb24gZWsoZSx7ZGV2aWNlUHJvZmlsZTp0LHNldHRsZWRBdDpuLHN0YXJ0ZWRBdDpyLHdpZGdldElkczpvfSl7bGV0IGE9e2NvcmVzOnQ/LmNvcmVzPz9udWxsLG1lbW9yeUdiOnQ/Lm1lbW9yeUdiPz9udWxsLG1vYmlsZTohIXQ/Lm1vYmlsZSxzZXR0bGVkQXQ6bixzdGFydGVkQXQ6cix0aWVyOnQ/LnRpZXI/P251bGwsd2lkZ2V0Q291bnQ6by5sZW5ndGgsd2lkZ2V0SWRzOm99O2F3YWl0IGUuc2V0U2V0dGluZyhCLlJFTkRFUl9CUkVBRENSVU1CLEpTT04uc3RyaW5naWZ5KGEpKX12YXIgV249UChmZSgpKTt2YXIgb2U9UCgkKCkpO2Z1bmN0aW9uIHhtKGUsdCxuKXt0IT09biYmZXQobj8iYWRkRGFzaGJvYXJkQ29tcG9uZW50IjoicmVtb3ZlRGFzaGJvYXJkQ29tcG9uZW50Iix7d2lkZ2V0SWQ6ZX0pfWZ1bmN0aW9uIHJrKGUpe3JldHVybiBEdC5maW5kKHQ9PnQud2lkZ2V0SWQ9PT1lKX1mdW5jdGlvbiBRQShlLHQpe2xldCBuPW5ldyBTZXQodHx8W10pLHI9RHQubWFwKHM9PnMud2lkZ2V0SWQpLmZpbHRlcihzPT4hbi5oYXMocykpLGE9KEFycmF5LmlzQXJyYXkoZSk/ZTpbXSkubWFwKHM9PnMud2lkZ2V0SWQpLmZpbHRlcihzPT5yLmluY2x1ZGVzKHMpKSxpPXIuZmlsdGVyKHM9PiFhLmluY2x1ZGVzKHMpKTtyZXR1cm57cmVuZGVyZWRJZHM6YSxoaWRkZW5JZHM6aX19ZnVuY3Rpb24gdGsoZSx0KXtsZXQgbj1uZXcgU2V0KHR8fFtdKSxyPXt9O3JldHVybiBEdC5maWx0ZXIoYT0+IW4uaGFzKGEud2lkZ2V0SWQpKS5mb3JFYWNoKGE9PntyW2Eud2lkZ2V0SWRdPXtncmlkV2lkdGhTaXplOmEuZGVmYXVsdEdyaWRXaWR0aFNpemV8fDEsZ3JpZEhlaWdodFNpemU6MX19KSwoQXJyYXkuaXNBcnJheShlKT9lOltdKS5mb3JFYWNoKGE9PntyW2Eud2lkZ2V0SWRdJiYoclthLndpZGdldElkXT17Z3JpZFdpZHRoU2l6ZTphLmdyaWRXaWR0aFNpemV8fHJbYS53aWRnZXRJZF0uZ3JpZFdpZHRoU2l6ZSxncmlkSGVpZ2h0U2l6ZTphLmdyaWRIZWlnaHRTaXplfHwxfSl9KSxyfWZ1bmN0aW9uIFpBKGUsdCxuLHIpe2xldCBvPVsuLi5lLC4uLnRdLGE9by5pbmRleE9mKG4pO2lmKHI9PT0idXAiJiZhPT09MHx8cj09PSJkb3duIiYmYT09PW8ubGVuZ3RoLTEpcmV0dXJuIG51bGw7bGV0IGk9Wy4uLm9dLHM9cj09PSJ1cCI/YS0xOmErMTtyZXR1cm5baVthXSxpW3NdXT1baVtzXSxpW2FdXSx7cmVuZGVyZWRJZHM6aS5zbGljZSgwLGUubGVuZ3RoKSxoaWRkZW5JZHM6aS5zbGljZShlLmxlbmd0aCl9fWZ1bmN0aW9uIGVDKGUsdCxuLHIpe2xldCBvPWUuZmlsdGVyKGk9PmkhPT1uKSxhPXQuZmlsdGVyKGk9PmkhPT1uKTtyZXR1cm4gZS5pbmNsdWRlcyhyKT9vLnNwbGljZShvLmluZGV4T2YociksMCxuKTphLnNwbGljZShhLmluZGV4T2YociksMCxuKSx7cmVuZGVyZWRJZHM6byxoaWRkZW5JZHM6YX19ZnVuY3Rpb24gdEMoZSx0LG4scil7bGV0IG89ZS5maWx0ZXIoaT0+aSE9PW4pLGE9dC5maWx0ZXIoaT0+aSE9PW4pO3JldHVybihyPT09InJlbmRlcmVkIj9vOmEpLnB1c2gobikse3JlbmRlcmVkSWRzOm8saGlkZGVuSWRzOmF9fWZ1bmN0aW9uIG5DKHt3aWRnZXRJZDplLGN0eDp0fSl7bGV0IG49cmsoZSk7aWYoIW4pcmV0dXJuIG51bGw7bGV0IHI9Wy4uLnQucmVuZGVyZWRJZHMsLi4udC5oaWRkZW5JZHNdLG89ci5pbmRleE9mKGUpLGE9WyJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLWl0ZW0iLHQuZHJhZ2dpbmdJZD09PWU/ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtaXRlbS0tZHJhZ2dpbmciOiIiLHQuZHJhZ092ZXJJZD09PWU/ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtaXRlbS0tZHJhZy1vdmVyIjoiIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKTtyZXR1cm4oMCxvZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOmEsZHJhZ2dhYmxlOiEwLG9uRHJhZ1N0YXJ0Omk9PnQub25EcmFnU3RhcnQoaSxlKSxvbkRyYWdFbmQ6dC5vbkRyYWdFbmQsb25EcmFnT3ZlcjppPT50Lm9uRHJhZ092ZXJJdGVtKGksZSksb25Ecm9wOmk9PnQub25Ecm9wT25JdGVtKGksZSksY2hpbGRyZW46WygwLG9lLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtaXRlbS1oYW5kbGUiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOiJcdTI4M0YifSksKDAsb2UuanN4KSgic3BhbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1pdGVtLWljb24iLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOm4uaWNvbn0pLCgwLG9lLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtaXRlbS1pbmZvIixjaGlsZHJlbjpbKDAsb2UuanN4KSgic3BhbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1pdGVtLW5hbWUiLGNoaWxkcmVuOm4ubmFtZX0pLG4uZGVzY3JpcHRpb24mJigwLG9lLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtaXRlbS1kZXNjcmlwdGlvbiIsY2hpbGRyZW46bi5kZXNjcmlwdGlvbn0pXX0pLCgwLG9lLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtaXRlbS1hY3Rpb25zIixjaGlsZHJlbjpbKDAsb2UuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLWFycm93LWJ1dHRvbiIsdHlwZToiYnV0dG9uIixkaXNhYmxlZDpvPT09MCx0aXRsZToiTW92ZSB1cCIsImFyaWEtbGFiZWwiOmBNb3ZlICR7bi5uYW1lfSB1cGAsb25DbGljazppPT57aS5zdG9wUHJvcGFnYXRpb24oKSx0Lm9uTW92ZShlLCJ1cCIpfSxjaGlsZHJlbjoiXHUyMTkxIn0pLCgwLG9lLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1hcnJvdy1idXR0b24iLHR5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6bz09PXIubGVuZ3RoLTEsdGl0bGU6Ik1vdmUgZG93biIsImFyaWEtbGFiZWwiOmBNb3ZlICR7bi5uYW1lfSBkb3duYCxvbkNsaWNrOmk9PntpLnN0b3BQcm9wYWdhdGlvbigpLHQub25Nb3ZlKGUsImRvd24iKX0sY2hpbGRyZW46Ilx1MjE5MyJ9KV19KV19KX1mdW5jdGlvbiBuayh7c2VjdGlvbklkOmUsbGFiZWw6dCxpY29uOm4saXRlbXM6cixjdHg6b30pe2xldCBhPVsiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1zZWN0aW9uIixvLmRyYWdPdmVyU2VjdGlvbj09PWU/ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtc2VjdGlvbi0tZHJhZy1vdmVyIjoiIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKTtyZXR1cm4oMCxvZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOmEsb25EcmFnT3ZlcjppPT5vLm9uRHJhZ092ZXJTZWN0aW9uKGksZSksb25EcmFnTGVhdmU6by5vbkRyYWdMZWF2ZVNlY3Rpb24sb25Ecm9wOmk9Pm8ub25Ecm9wT25TZWN0aW9uKGksZSksY2hpbGRyZW46WygwLG9lLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtc2VjdGlvbi1oZWFkZXIiLGNoaWxkcmVuOlsoMCxvZS5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLXNlY3Rpb24taWNvbiIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46bn0pLCgwLG9lLmpzeCkoImg0Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLXNlY3Rpb24tdGl0bGUiLGNoaWxkcmVuOnR9KV19KSxyLmxlbmd0aD09PTA/KDAsb2UuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLWVtcHR5IixjaGlsZHJlbjplPT09InJlbmRlcmVkIj8iRHJhZyBjb21wb25lbnRzIGhlcmUgdG8gc2hvdyB0aGVtIG9uIHRoZSBkYXNoYm9hcmQiOiJBbGwgY29tcG9uZW50cyBhcmUgY3VycmVudGx5IHNob3duIn0pOigwLG9lLmpzeCkoImRpdiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1saXN0IixjaGlsZHJlbjpyLm1hcChpPT4oMCxvZS5qc3gpKG5DLHt3aWRnZXRJZDppLGN0eDpvfSxpKSl9KV19KX1mdW5jdGlvbiByQyh7d2lkZ2V0SWQ6ZSxzaXppbmc6dCxvblNpemluZ0NoYW5nZTpufSl7bGV0IHI9cmsoZSk7aWYoIXIpcmV0dXJuIG51bGw7bGV0IG89dFtlXT8uZ3JpZFdpZHRoU2l6ZT8/ci5kZWZhdWx0R3JpZFdpZHRoU2l6ZT8/MSxhPXRbZV0/LmdyaWRIZWlnaHRTaXplPz8xLGk9ci5tYXhIb3Jpem9udGFsVGlsZXN8fDQscz1yLm1heFZlcnRpY2FsVGlsZXN8fDI7cmV0dXJuKDAsb2UuanN4cykoImRpdiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1zaXppbmctaXRlbSIsY2hpbGRyZW46WygwLG9lLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtc2l6aW5nLWl0ZW0taGVhZGVyIixjaGlsZHJlbjpbKDAsb2UuanN4KSgic3BhbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1pdGVtLWljb24iLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOnIuaWNvbn0pLCgwLG9lLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtaXRlbS1uYW1lIixjaGlsZHJlbjpyLm5hbWV9KV19KSwoMCxvZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLXNpemluZy1pdGVtLWNvbnRyb2xzIixjaGlsZHJlbjpbKDAsb2UuanN4cykoImRpdiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1zaXppbmctZmllbGQiLGNoaWxkcmVuOlsoMCxvZS5qc3gpKCJsYWJlbCIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1zaXppbmctbGFiZWwiLGNoaWxkcmVuOiJXaWR0aCJ9KSwoMCxvZS5qc3gpKCJzZWxlY3QiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtc2l6aW5nLXNlbGVjdCIsdmFsdWU6byxvbkNoYW5nZTpsPT5uKGUsImdyaWRXaWR0aFNpemUiLE51bWJlcihsLnRhcmdldC52YWx1ZSkpLGNoaWxkcmVuOkFycmF5LmZyb20oe2xlbmd0aDppfSwobCxkKT0+KDAsb2UuanN4KSgib3B0aW9uIix7dmFsdWU6ZCsxLGNoaWxkcmVuOmAke2QrMX1gfSxkKzEpKX0pXX0pLCgwLG9lLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtc2l6aW5nLWZpZWxkIixjaGlsZHJlbjpbKDAsb2UuanN4KSgibGFiZWwiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtc2l6aW5nLWxhYmVsIixjaGlsZHJlbjoiVmVydGljYWwgdGlsZXMifSksKDAsb2UuanN4KSgic2VsZWN0Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLXNpemluZy1zZWxlY3QiLHZhbHVlOmEsb25DaGFuZ2U6bD0+bihlLCJncmlkSGVpZ2h0U2l6ZSIsTnVtYmVyKGwudGFyZ2V0LnZhbHVlKSksY2hpbGRyZW46QXJyYXkuZnJvbSh7bGVuZ3RoOnN9LChsLGQpPT4oMCxvZS5qc3gpKCJvcHRpb24iLHt2YWx1ZTpkKzEsY2hpbGRyZW46YCR7ZCsxfWB9LGQrMSkpfSldfSldfSldfSl9ZnVuY3Rpb24gb0MoZSx0KXtsZXR7cmVuZGVyZWRJZHM6bixoaWRkZW5JZHM6cn09UUEoZSx0KSxbbyxhXT0oMCxXbi51c2VTdGF0ZSkobiksW2ksc109KDAsV24udXNlU3RhdGUpKHIpLFtsLGRdPSgwLFduLnVzZVN0YXRlKSgoKT0+dGsoZSx0KSksW2MsdV09KDAsV24udXNlU3RhdGUpKG51bGwpLFtwLGZdPSgwLFduLnVzZVN0YXRlKShudWxsKSxbeSx2XT0oMCxXbi51c2VTdGF0ZSkobnVsbCksdz0oMCxXbi51c2VSZWYpKG51bGwpLFtnLGhdPSgwLFduLnVzZVN0YXRlKSghMSksYj0oKT0+e3cuY3VycmVudD1udWxsLHUobnVsbCksZihudWxsKSx2KG51bGwpfTtyZXR1cm57cmVuZGVyZWRJZHM6byxoaWRkZW5JZHM6aSxzaXppbmc6bCxkcmFnZ2luZ0lkOmMsZHJhZ092ZXJJZDpwLGRyYWdPdmVyU2VjdGlvbjp5LGhhc1Jlc2V0Omcsb25Nb3ZlOihGLFYpPT57bGV0IHo9WkEobyxpLEYsVik7eiYmKHhtKEYsby5pbmNsdWRlcyhGKSx6LnJlbmRlcmVkSWRzLmluY2x1ZGVzKEYpKSxhKHoucmVuZGVyZWRJZHMpLHMoei5oaWRkZW5JZHMpKX0sb25EcmFnU3RhcnQ6KEYsVik9Pnt3LmN1cnJlbnQ9VixGLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJtb3ZlIixyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnUoVikpfSxvbkRyYWdFbmQ6KCk9PmIoKSxvbkRyYWdPdmVySXRlbTooRixWKT0+e0YucHJldmVudERlZmF1bHQoKSxGLnN0b3BQcm9wYWdhdGlvbigpLEYuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9Im1vdmUiLGYoViksdihudWxsKX0sb25EcmFnT3ZlclNlY3Rpb246KEYsVik9PntGLnByZXZlbnREZWZhdWx0KCksRi5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0ibW92ZSIsdihWKSxmKG51bGwpfSxvbkRyYWdMZWF2ZVNlY3Rpb246Rj0+e0YuY3VycmVudFRhcmdldC5jb250YWlucyhGLnJlbGF0ZWRUYXJnZXQpfHx2KG51bGwpfSxvbkRyb3BPbkl0ZW06KEYsVik9PntGLnByZXZlbnREZWZhdWx0KCksRi5zdG9wUHJvcGFnYXRpb24oKTtsZXQgej13LmN1cnJlbnQ7aWYoYigpLCF6fHx6PT09VilyZXR1cm47bGV0e3JlbmRlcmVkSWRzOm5lLGhpZGRlbklkczpNfT1lQyhvLGkseixWKTt4bSh6LG8uaW5jbHVkZXMoeiksbmUuaW5jbHVkZXMoeikpLGEobmUpLHMoTSl9LG9uRHJvcE9uU2VjdGlvbjooRixWKT0+e0YucHJldmVudERlZmF1bHQoKTtsZXQgej13LmN1cnJlbnQ7aWYoYigpLCF6KXJldHVybjtsZXR7cmVuZGVyZWRJZHM6bmUsaGlkZGVuSWRzOk19PXRDKG8saSx6LFYpO3htKHosby5pbmNsdWRlcyh6KSxuZS5pbmNsdWRlcyh6KSksYShuZSkscyhNKX0sb25TaXppbmdDaGFuZ2U6KEYsVix6KT0+e2QobmU9Pih7Li4ubmUsW0ZdOnsuLi5uZVtGXSxbVl06en19KSl9LG9uUmVzZXQ6Rj0+e2xldCBWPW5ldyBTZXQodHx8W10pLHo9TWIoRik7aWYoeil7bGV0IG5lPXoud2lkZ2V0cy5tYXAoVz0+Vy53aWRnZXRJZCkuZmlsdGVyKFc9PiFWLmhhcyhXKSksTT1EdC5tYXAoVz0+Vy53aWRnZXRJZCkuZmlsdGVyKFc9PiFWLmhhcyhXKSk7YShuZSkscyhNLmZpbHRlcihXPT4hbmUuaW5jbHVkZXMoVykpKSxkKGZzKHopKX1lbHNle2xldCBuZT1EdC5tYXAoTT0+TS53aWRnZXRJZCkuZmlsdGVyKE09PiFWLmhhcyhNKSk7YShuZSkscyhbXSksZCh0ayhudWxsLHQpKX1oKCEwKX19fWZ1bmN0aW9uIFNtKHtjdXJyZW50TGF5b3V0OmUsZXhjbHVkZVdpZGdldElkczp0LG9uU2F2ZTpuLG9uQ2FuY2VsOnIsc2VsZWN0ZWRMYXlvdXRQcm9maWxlOm99KXtsZXRbYSxpXT0oMCxXbi51c2VTdGF0ZSkoImNvbXBvbmVudHMiKSxbcyxsXT0oMCxXbi51c2VTdGF0ZSkob3x8bnVsbCksZD1vQyhlLHQpLHtyZW5kZXJlZElkczpjLGhpZGRlbklkczp1LHNpemluZzpwLGhhc1Jlc2V0OmYsb25SZXNldDp5LG9uU2l6aW5nQ2hhbmdlOnZ9PWQsdz1hPT09ImNvbXBvbmVudHMiPygwLG9lLmpzeHMpKG9lLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsb2UuanN4KShuayx7c2VjdGlvbklkOiJyZW5kZXJlZCIsbGFiZWw6IlJlbmRlcmVkIERhc2hib2FyZCBFbGVtZW50cyIsaWNvbjoiXHV7MUY0NDF9IixpdGVtczpjLGN0eDpkfSksKDAsb2UuanN4KShuayx7c2VjdGlvbklkOiJoaWRkZW4iLGxhYmVsOiJIaWRkZW4gRGFzaGJvYXJkIEVsZW1lbnRzIixpY29uOiJcdXsxRjZBQn0iLGl0ZW1zOnUsY3R4OmR9KV19KTpjLmxlbmd0aD09PTA/KDAsb2UuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLWVtcHR5IixjaGlsZHJlbjoiTm8gcmVuZGVyZWQgY29tcG9uZW50cy4gQWRkIGNvbXBvbmVudHMgaW4gdGhlIENvbXBvbmVudHMgdGFiLiJ9KTooMCxvZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtc2l6aW5nIixjaGlsZHJlbjpjLm1hcChnPT4oMCxvZS5qc3gpKHJDLHt3aWRnZXRJZDpnLHNpemluZzpwLG9uU2l6aW5nQ2hhbmdlOnZ9LGcpKX0pO3JldHVybigwLG9lLmpzeCkoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLXBvcHVwLW92ZXJsYXkiLG9uQ2xpY2s6Zz0+Zy50YXJnZXQ9PT1nLmN1cnJlbnRUYXJnZXQmJnIoKSxjaGlsZHJlbjooMCxvZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtY29udGFpbmVyIGRhc2hib2FyZC1sYXlvdXQtcG9wdXAiLGNoaWxkcmVuOlsoMCxvZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtaGVhZGVyIixjaGlsZHJlbjpbKDAsb2UuanN4KSgiaDMiLHtjbGFzc05hbWU6ImNvbmZpZy1wb3B1cC10aXRsZSIsY2hpbGRyZW46Ilx1MjY5OVx1RkUwRiBEYXNoYm9hcmQgTGF5b3V0In0pLCgwLG9lLmpzeCkoImRpdiIse2NsYXNzTmFtZToiZXhwbGFuYXRpb24tcGFyYWdyYXBoIixjaGlsZHJlbjoiQ3VzdG9taXplIHRoZSBvcmRlciBvZiB5b3VyIHdpZGdldHMgYnkgZHJhZ2dpbmcgb3Igc2l6aW5nIHRoZW0gaW4gdGhpcyBtZW51LiBZb3UgY2FuIGFsc28gcmVvcmRlciB3aWRnZXRzIG91dHNpZGUgdGhpcyBtZW51IGJ5IGNsaWNraW5nIG9uIHRoZWlyIGhlYWRlciBmb3IgMiBzZWNvbmRzIHRvIGVuZ2FnZSBkcmFnIHJlb3JkZXJpbmcuIn0pLCgwLG9lLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImV4cGxhbmF0aW9uLXBhcmFncmFwaCIsY2hpbGRyZW46WygwLG9lLmpzeCkoImxhYmVsIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLXByb2ZpbGUtbGFiZWwiLGNoaWxkcmVuOiJEZWZhdWx0IGxheW91dCJ9KSwoMCxvZS5qc3hzKSgic2VsZWN0Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLXByb2ZpbGUtc2VsZWN0Iix2YWx1ZTpzfHwiIixvbkNoYW5nZTpnPT5sKGcudGFyZ2V0LnZhbHVlfHxudWxsKSxjaGlsZHJlbjpbKDAsb2UuanN4KSgib3B0aW9uIix7dmFsdWU6IiIsY2hpbGRyZW46IkN1c3RvbSAobm8gcHJlc2V0KSJ9KSxZYS5tYXAoZz0+KDAsb2UuanN4KSgib3B0aW9uIix7dmFsdWU6Zy5pZCxjaGlsZHJlbjpnLm5hbWV9LGcuaWQpKV19KV19KSwoMCxvZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLXRhYnMiLGNoaWxkcmVuOlsoMCxvZS5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtdGFiIisoYT09PSJjb21wb25lbnRzIj8iIGFjdGl2ZSI6IiIpLHR5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+aSgiY29tcG9uZW50cyIpLGNoaWxkcmVuOiJDb21wb25lbnRzIn0pLCgwLG9lLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC10YWIiKyhhPT09InNpemluZyI/IiBhY3RpdmUiOiIiKSx0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PmkoInNpemluZyIpLGNoaWxkcmVuOiJTaXppbmcifSldfSldfSksKDAsb2UuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtYm9keSBkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLWJvZHkiLGNoaWxkcmVuOnd9KSwoMCxvZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtYWN0aW9ucyIsY2hpbGRyZW46WygwLG9lLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToiY29uZmlnLXBvcHVwLWxpbmsiLHR5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+eShzKSxjaGlsZHJlbjoiUmVzZXQgdG8gZGVmYXVsdHMifSksKDAsb2UuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtYnRuIGNvbmZpZy1wb3B1cC1idG4tLWNhbmNlbCIsdHlwZToiYnV0dG9uIixvbkNsaWNrOnIsY2hpbGRyZW46IkNhbmNlbCJ9KSwoMCxvZS5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6ImNvbmZpZy1wb3B1cC1idG4gY29uZmlnLXBvcHVwLWJ0bi0tc3VibWl0Iix0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntldCgic2F2ZURhc2hib2FyZExheW91dCIse3dpZGdldENvdW50OmMubGVuZ3RofSksbihjLGYscCxzKX0sY2hpbGRyZW46IlNhdmUgTGF5b3V0In0pXX0pXX0pfSl9dmFyIG9rPSJNaXNzaW9uIENvbnRyb2wgRGFzaGJvYXJkOiBwbHVnaW4gc2V0dGluZ3MiO2Z1bmN0aW9uIGFrKCl7dHJ5e2xldHtob3VyQ3ljbGU6ZX09bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodm9pZCAwLHtob3VyOiJudW1lcmljIn0pLnJlc29sdmVkT3B0aW9ucygpO3JldHVybiBlPT09ImgyMyJ8fGU9PT0iaDI0Ij8iMjRoIjoibWVyaWRpYW4ifWNhdGNoe3JldHVybiJtZXJpZGlhbiJ9fWZ1bmN0aW9uIGlrKCl7dHJ5e2xldCBlPW5ldyBJbnRsLkxvY2FsZShuYXZpZ2F0b3IubGFuZ3VhZ2UpLHQ9ZS53ZWVrSW5mb3x8ZS5nZXRXZWVrSW5mbz8uKCk7cmV0dXJuIHQ/LmZpcnN0RGF5PT09N3x8dD8uZmlyc3REYXk9PT0wPyJzdW5kYXkiOiJtb25kYXkifWNhdGNoe3JldHVybiJtb25kYXkifX1mdW5jdGlvbiBhQyhlKXtsZXQgdD17fTtpZighZSlyZXR1cm4gdDtmb3IobGV0IG4gb2YgZS5zcGxpdChgCmApKXtsZXQgcj1uLm1hdGNoKC9eKFteOl0rKTpccyooLispLyk7aWYoIXIpY29udGludWU7bGV0IG89clsxXS50cmltKCkudG9Mb3dlckNhc2UoKSxhPXJbMl0udHJpbSgpLnRvTG93ZXJDYXNlKCk7bz09PSJ0aW1lIGZvcm1hdCImJih0LnRpbWVGb3JtYXQ9YSksbz09PSJ3ZWVrIGZvcm1hdCImJih0LndlZWtGb3JtYXQ9YSl9cmV0dXJuIHR9ZnVuY3Rpb24gc2soZSl7bGV0IHQ9W107cmV0dXJuIGUudGltZUZvcm1hdCYmdC5wdXNoKGBUaW1lIGZvcm1hdDogJHtlLnRpbWVGb3JtYXR9YCksZS53ZWVrRm9ybWF0JiZ0LnB1c2goYFdlZWsgZm9ybWF0OiAke2Uud2Vla0Zvcm1hdH1gKSx0LmpvaW4oYApgKX12YXIgQnM9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fYXBwPXQsdGhpcy5fbm90ZVVVSUQ9bnVsbCx0aGlzLl9zZXR0aW5ncz1udWxsfWFzeW5jIGxvYWQoKXtsZXQgdD1hd2FpdCB0aGlzLl9hcHAuZmluZE5vdGUoe25hbWU6b2ssdGFnczpbdmVdfSk7aWYodD8udXVpZCl7dGhpcy5fbm90ZVVVSUQ9dC51dWlkO2xldCByPWF3YWl0IHRoaXMuX2FwcC5nZXROb3RlQ29udGVudCh7dXVpZDp0LnV1aWR9KTtyZXR1cm4gdGhpcy5fc2V0dGluZ3M9YUMociksdGhpcy5fc2V0dGluZ3MudGltZUZvcm1hdHx8KHRoaXMuX3NldHRpbmdzLnRpbWVGb3JtYXQ9YWsoKSksdGhpcy5fc2V0dGluZ3Mud2Vla0Zvcm1hdHx8KHRoaXMuX3NldHRpbmdzLndlZWtGb3JtYXQ9aWsoKSksaygiW0Rhc2hib2FyZFNldHRpbmdOb3RlXSBsb2FkZWQgc2V0dGluZ3M6Iix0aGlzLl9zZXR0aW5ncyksey4uLnRoaXMuX3NldHRpbmdzfX10aGlzLl9zZXR0aW5ncz17dGltZUZvcm1hdDphaygpLHdlZWtGb3JtYXQ6aWsoKX07bGV0IG49YXdhaXQgdGhpcy5fYXBwLmNyZWF0ZU5vdGUob2ssW3ZlXSx7YXJjaGl2ZTohMH0pO3JldHVybiB0aGlzLl9ub3RlVVVJRD10eXBlb2Ygbj09Im9iamVjdCI/bi51dWlkOm4sYXdhaXQgdGhpcy5fYXBwLnJlcGxhY2VOb3RlQ29udGVudCh7dXVpZDp0aGlzLl9ub3RlVVVJRH0sc2sodGhpcy5fc2V0dGluZ3MpKSxrKCJbRGFzaGJvYXJkU2V0dGluZ05vdGVdIGNyZWF0ZWQgc2V0dGluZ3Mgbm90ZToiLHRoaXMuX25vdGVVVUlEKSx7Li4udGhpcy5fc2V0dGluZ3N9fWFzeW5jIHNhdmUodCl7aWYodGhpcy5fc2V0dGluZ3M9ey4uLnRoaXMuX3NldHRpbmdzLC4uLnR9LCF0aGlzLl9ub3RlVVVJRCl7aygiW0Rhc2hib2FyZFNldHRpbmdOb3RlXSBubyBub3RlVVVJRDsgY2Fubm90IHNhdmUiKTtyZXR1cm59YXdhaXQgdGhpcy5fYXBwLnJlcGxhY2VOb3RlQ29udGVudCh7dXVpZDp0aGlzLl9ub3RlVVVJRH0sc2sodGhpcy5fc2V0dGluZ3MpKSxrKCJbRGFzaGJvYXJkU2V0dGluZ05vdGVdIHNhdmVkIHNldHRpbmdzOiIsdGhpcy5fc2V0dGluZ3MpfWdldCBzZXR0aW5ncygpe3JldHVybiB0aGlzLl9zZXR0aW5ncz97Li4udGhpcy5fc2V0dGluZ3N9Om51bGx9fTt2YXIgdmM9UChmZSgpLDEpO3ZhciB4cj1QKCQoKSwxKTtmdW5jdGlvbiBscih7dGl0bGU6ZSxvblN1Ym1pdDp0LG9uQ2FuY2VsOm4sc3VibWl0TGFiZWw6cj0iU3VibWl0IixjaGlsZHJlbjpvLHNjcm9sbFRvcDphfSl7bGV0IGk9KDAsdmMudXNlUmVmKShudWxsKTtyZXR1cm4oMCx2Yy51c2VFZmZlY3QpKCgpPT57aWYoYT09PXZvaWQgMClyZXR1cm47bGV0IGw9ZD0+e2kuY3VycmVudCYmIWkuY3VycmVudC5jb250YWlucyhkLnRhcmdldCkmJm4oKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbCksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbCl9LFthLG5dKSwoMCx4ci5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1wb3B1cC1vdmVybGF5IixzdHlsZTphIT09dm9pZCAwP3twb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDphLGxlZnQ6MCxyaWdodDowLG1pbkhlaWdodDoiMTAwdmgiLHBvaW50ZXJFdmVudHM6Im5vbmUiLGFsaWduSXRlbXM6ImZsZXgtc3RhcnQiLHBhZGRpbmc6IjE2cHgifTp2b2lkIDAsb25DbGljazphPT09dm9pZCAwP2w9PntsLnRhcmdldD09PWwuY3VycmVudFRhcmdldCYmbigpfTp2b2lkIDAsY2hpbGRyZW46KDAseHIuanN4cykoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLXBvcHVwLWNvbnRhaW5lciIscmVmOmksc3R5bGU6YSE9PXZvaWQgMD97cG9pbnRlckV2ZW50czoiYXV0byJ9OnZvaWQgMCxjaGlsZHJlbjpbZT8oMCx4ci5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1wb3B1cC1oZWFkZXIiLGNoaWxkcmVuOigwLHhyLmpzeCkoImgzIix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtdGl0bGUiLGNoaWxkcmVuOmV9KX0pOm51bGwsKDAseHIuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtYm9keSIsY2hpbGRyZW46b30pLCgwLHhyLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1wb3B1cC1hY3Rpb25zIixjaGlsZHJlbjpbKDAseHIuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtYnRuIGNvbmZpZy1wb3B1cC1idG4tLWNhbmNlbCIsb25DbGljazpuLGNoaWxkcmVuOiJDYW5jZWwifSksKDAseHIuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtYnRuIGNvbmZpZy1wb3B1cC1idG4tLXN1Ym1pdCIsb25DbGljazp0LGNoaWxkcmVuOnJ9KV19KV19KX0pfXZhciBpQz01MCoxMDI0KjQ7dmFyIGxrPXthbnRocm9waWM6Imh0dHBzOi8vY29uc29sZS5hbnRocm9waWMuY29tL3NldHRpbmdzL2tleXMiLCJhbnRocm9waWMtc29ubmV0IjoiaHR0cHM6Ly9jb25zb2xlLmFudGhyb3BpYy5jb20vc2V0dGluZ3Mva2V5cyIsZGVlcHNlZWs6Imh0dHBzOi8vcGxhdGZvcm0uZGVlcHNlZWsuY29tL2FwaV9rZXlzIixnZW1pbmk6Imh0dHBzOi8vYWlzdHVkaW8uZ29vZ2xlLmNvbS9hcHAvYXBpLWtleXMiLGdyb2s6Imh0dHBzOi8vY29uc29sZS54LmFpL3RlYW0vZGVmYXVsdC9hcGkta2V5cyIsb3BlbmFpOiJodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vYXBpLWtleXMiLHBlcnBsZXhpdHk6Imh0dHBzOi8vd3d3LnBlcnBsZXhpdHkuYWkvYWNjb3VudC9hcGkva2V5cyJ9LGNuPXthbnRocm9waWM6ImNsYXVkZS1vcHVzLTQtNiIsImFudGhyb3BpYy1zb25uZXQiOiJjbGF1ZGUtc29ubmV0LTQtNiIsZGVlcHNlZWs6ImRlZXBzZWVrLWNoYXQiLGdlbWluaToiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsZ3JvazoiZ3Jvay00LjIwIixvcGVuYWk6ImdwdC01LjQiLHBlcnBsZXhpdHk6InNvbmFyLXBybyJ9O3ZhciBFbT17YW50aHJvcGljOiJodHRwczovL2FwaS5hbnRocm9waWMuY29tL3YxL21lc3NhZ2VzIiwiYW50aHJvcGljLXNvbm5ldCI6Imh0dHBzOi8vYXBpLmFudGhyb3BpYy5jb20vdjEvbWVzc2FnZXMiLGRlZXBzZWVrOiJodHRwczovL2FwaS5kZWVwc2Vlay5jb20vdjEvY2hhdC9jb21wbGV0aW9ucyIsZ2VtaW5pOiJodHRwczovL2dlbmVyYXRpdmVsYW5ndWFnZS5nb29nbGVhcGlzLmNvbS92MWJldGEvbW9kZWxzL3ttb2RlbC1uYW1lfTpnZW5lcmF0ZUNvbnRlbnQiLGdyb2s6Imh0dHBzOi8vYXBpLnguYWkvdjEvY2hhdC9jb21wbGV0aW9ucyIsb3BlbmFpOiJodHRwczovL2FwaS5vcGVuYWkuY29tL3YxL2NoYXQvY29tcGxldGlvbnMiLHBlcnBsZXhpdHk6Imh0dHBzOi8vYXBpLnBlcnBsZXhpdHkuYWkvY2hhdC9jb21wbGV0aW9ucyJ9LHc1PU9iamVjdC5rZXlzKEVtKSxkaz17ImNsYXVkZS1vcHVzLTQtNiI6MjAwKjEwMjQqNCwiY2xhdWRlLXNvbm5ldC00LTYiOjIwMCoxMDI0KjQsImNsYXVkZS1zb25uZXQtNC01IjoyMDAqMTAyNCo0LCJjbGF1ZGUtc29ubmV0LTQtNS0yMDI1MDkyOSI6MjAwKjEwMjQqNCwiY2xhdWRlLWhhaWt1LTQtNSI6MjAwKjEwMjQqNCwiY2xhdWRlLWhhaWt1LTQtNS0yMDI1MTAwMSI6MjAwKjEwMjQqNCwiY2xhdWRlLW9wdXMtNC01IjoyMDAqMTAyNCo0LCJjbGF1ZGUtb3B1cy00LTUtMjAyNTExMDEiOjIwMCoxMDI0KjQsImNsYXVkZS1vcHVzLTQtMSI6MjAwKjEwMjQqNCwiY2xhdWRlLW9wdXMtNC0xLTIwMjUwODA1IjoyMDAqMTAyNCo0LCJjbGF1ZGUtc29ubmV0LTQtMCI6MjAwKjEwMjQqNCwiY2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0IjoyMDAqMTAyNCo0LCJjbGF1ZGUtMy03LXNvbm5ldC1sYXRlc3QiOjIwMCoxMDI0KjQsImNsYXVkZS0zLTctc29ubmV0LTIwMjUwMjE5IjoyMDAqMTAyNCo0LCJjbGF1ZGUtb3B1cy00LTAiOjIwMCoxMDI0KjQsImNsYXVkZS1vcHVzLTQtMjAyNTA1MTQiOjIwMCoxMDI0KjQsImNsYXVkZS0zLTUtaGFpa3UtbGF0ZXN0IjoyMDAqMTAyNCo0LCJjbGF1ZGUtMy01LWhhaWt1LTIwMjQxMDIyIjoyMDAqMTAyNCo0LCJjbGF1ZGUtMy01LXNvbm5ldC1sYXRlc3QiOjIwMCoxMDI0KjQsImNsYXVkZS0zLWhhaWt1LTIwMjQwMzA3IjoyMDAqMTAyNCo0fSxjaz17ImRlZXBzZWVrLWNoYXQiOjY0KjEwMjQqNCwiZGVlcHNlZWstcmVhc29uZXIiOjY0KjEwMjQqNCwiZGVlcHNlZWstcjEiOjY0KjEwMjQqNCwiZGVlcHNlZWstcjEtMDUyOCI6NjQqMTAyNCo0fSx1az17ImdlbWluaS0zLWZsYXNoIjo2NCoxMDI0KjQsImdlbWluaS0zLWZsYXNoLXByZXZpZXciOjY0KjEwMjQqNCwiZ2VtaW5pLTMtcHJvIjoxMDI0KjEwMjQqNCwiZ2VtaW5pLTMtcHJvLXByZXZpZXciOjEwMjQqMTAyNCo0LCJnZW1pbmktMy4xLXByby1wcmV2aWV3IjoxMDI0KjEwMjQqNCwiZ2VtaW5pLTMtcHJvLWltYWdlLXByZXZpZXciOjY0KjEwMjQqNCwiZ2VtaW5pLTIuNS1wcm8iOjEwMjQqMTAyNCo0LCJnZW1pbmktMi41LWZsYXNoIjoxMDI0KjEwMjQqNCwiZ2VtaW5pLTIuNS1mbGFzaC1saXRlIjoxMDI0KjEwMjQqNCwiZ2VtaW5pLTIuNS1mbGFzaC1saXRlLXByZXZpZXctMDYtMTciOjEwMjQqMTAyNCo0LCJnZW1pbmktMi4wLWZsYXNoIjoxMDI0KjEwMjQqNCwiZ2VtaW5pLTIuMC1mbGFzaC1saXRlIjoxMDI0KjEwMjQqNH0scGs9eyJncm9rLTQtMS1mYXN0IjoyMDQ4KjEwMjQqNCwiZ3Jvay00LWZhc3QiOjIwNDgqMTAyNCo0LCJncm9rLTQiOjI1NioxMDI0KjQsImdyb2stNC4yMCI6MjU2KjEwMjQqNCwiZ3Jvay00LTA3MDkiOjI1NioxMDI0KjQsImdyb2stMyI6MTI4KjEwMjQqNCwiZ3Jvay0zLWJldGEiOjEyOCoxMDI0KjQsImdyb2stMy1taW5pIjoxMjgqMTAyNCo0LCJncm9rLTMtbWluaS1iZXRhIjoxMjgqMTAyNCo0LCJncm9rLTItdmlzaW9uLTEyMTIiOjgqMTAyNCo0LCJncm9rLTItaW1hZ2UtMTIxMiI6MTI4KjEwMjQqNCwiZ3Jvay0yLTEyMTIiOjEyOCoxMDI0KjR9LGZrPXsiZ3B0LTUuNCI6NDAwKjEwMjQqNCwiZ3B0LTUuMiI6NDAwKjEwMjQqNCwiZ3B0LTUuMSI6NDAwKjEwMjQqNCwiZ3B0LTUuMS1jb2RleC1tYXgiOjQwMCoxMDI0KjQsImdwdC01Ijo0MDAqMTAyNCo0LCJncHQtNS1mYXN0Ijo0MDAqMTAyNCo0LCJncHQtNS10aGlua2luZyI6NDAwKjEwMjQqNCwiZ3B0LTQuMSI6MWUzKjEwMjQqNCwiZ3B0LTQuMS1taW5pIjoxMjgqMTAyNCo0LCJncHQtNG8iOjEyOCoxMDI0KjQsImdwdC00by1taW5pIjoxMjgqMTAyNCo0LG8zOjIwMCoxMDI0KjQsIm8zLW1pbmkiOjIwMCoxMDI0KjQsIm8zLXBybyI6MjAwKjEwMjQqNCwibzQtbWluaSI6MjAwKjEwMjQqNCwiZ3B0LTQiOjgqMTAyNCo0LCJncHQtNC0xMTA2LXByZXZpZXciOjEyOCoxMDI0KjQsImdwdC00LTMyayI6MzIqMTAyNCo0LCJncHQtNC0zMmstMDYxMyI6MzIqMTAyNCo0LCJncHQtNC12aXNpb24tcHJldmlldyI6MTI4KjEwMjQqNH0sazU9eyJzb25hci1wcm8iOjIwMCoxMDI0KjQsc29uYXI6MTI4KjEwMjQqNCwic29uYXItcmVhc29uaW5nLXBybyI6MTI4KjEwMjQqNCwic29uYXItcmVhc29uaW5nIjoxMjgqMTAyNCo0LCJzb25hci1kZWVwLXJlc2VhcmNoIjoxMjgqMTAyNCo0fSxzQz17Li4uZGssLi4uY2ssLi4udWssLi4ucGssLi4uZmt9LE5tPXthbnRocm9waWM6T2JqZWN0LmtleXMoZGspLGRlZXBzZWVrOk9iamVjdC5rZXlzKGNrKSxnZW1pbmk6T2JqZWN0LmtleXModWspLGdyb2s6T2JqZWN0LmtleXMocGspLG9wZW5haTpPYmplY3Qua2V5cyhmayl9O3ZhciB1bj1QKGZlKCkpO2Z1bmN0aW9uIGxDKGUpe3JldHVybiBuZXcgUHJvbWlzZSgodCxuKT0+e2xldCByPW5ldyBGaWxlUmVhZGVyO3Iub25sb2FkPW89PnQoby50YXJnZXQucmVzdWx0KSxyLm9uZXJyb3I9bz0+e3IuYWJvcnQoKSxuKG8udGFyZ2V0LmVycm9yKX0sci5yZWFkQXNEYXRhVVJMKGUpfSl9ZnVuY3Rpb24gVG0oe2FwcDplLHBsdWdpbk5vdGVVVUlEOnQsaW5pdGlhbEltYWdlVXJsOm49IiIsaW5pdGlhbE1vZGU6cj0iY292ZXIifT17fSl7bGV0W28sYV09KDAsdW4udXNlU3RhdGUpKG4pLFtpLHNdPSgwLHVuLnVzZVN0YXRlKShyKSxbbCxkXT0oMCx1bi51c2VTdGF0ZSkoITEpLFtjLHVdPSgwLHVuLnVzZVN0YXRlKSghMSkscD0oMCx1bi51c2VSZWYpKG51bGwpLGY9KDAsdW4udXNlQ2FsbGJhY2spKGFzeW5jIGI9PntpZighYnx8IWIudHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKSl7aygiW2JnLXVwbG9hZF0gcmVqZWN0ZWQgZmlsZSAobm90IGFuIGltYWdlIG9yIG1pc3NpbmcpOiIsYj8udHlwZSk7cmV0dXJufWsoIltiZy11cGxvYWRdIHN0YXJ0aW5nIHVwbG9hZCBmb3I6IixiLm5hbWUsYi50eXBlLGIuc2l6ZSwiYnl0ZXMiKSxkKCEwKTt0cnl7bGV0IG09YXdhaXQgbEMoYik7aygiW2JnLXVwbG9hZF0gZmlsZSBjb252ZXJ0ZWQgdG8gZGF0YSBVUkwsIGxlbmd0aDoiLG0ubGVuZ3RoKTtsZXQgUz1hd2FpdCBlLmF0dGFjaE5vdGVNZWRpYSh7dXVpZDp0fSxtKTtrKCJbYmctdXBsb2FkXSBhdHRhY2hOb3RlTWVkaWEgcmV0dXJuZWQgVVJMOiIsUyksUz9hKFMpOmsoIltiZy11cGxvYWRdIGF0dGFjaE5vdGVNZWRpYSByZXR1cm5lZCBmYWxzeSBVUkwgXHUyMDE0IHVwbG9hZCBtYXkgaGF2ZSBmYWlsZWQgc2lsZW50bHkiKX1jYXRjaChtKXtrKCJbYmctdXBsb2FkXSB1cGxvYWQgRkFJTEVEIHdpdGggZXhjZXB0aW9uOiIsbSl9ZmluYWxseXtkKCExKSxrKCJbYmctdXBsb2FkXSB1cGxvYWQgZmxvdyBjb21wbGV0ZSIpfX0sW10pLHk9KDAsdW4udXNlQ2FsbGJhY2spKGI9PntiLnByZXZlbnREZWZhdWx0KCksYi5zdG9wUHJvcGFnYXRpb24oKSx1KCExKTtsZXQgbT1iLmRhdGFUcmFuc2Zlcj8uZmlsZXM/LlswXTttJiZmKG0pfSxbZl0pLHY9KDAsdW4udXNlQ2FsbGJhY2spKGI9PntiLnByZXZlbnREZWZhdWx0KCksYi5zdG9wUHJvcGFnYXRpb24oKSx1KCEwKX0sW10pLHc9KDAsdW4udXNlQ2FsbGJhY2spKGI9PntiLnByZXZlbnREZWZhdWx0KCksYi5zdG9wUHJvcGFnYXRpb24oKSx1KCExKX0sW10pLGc9KDAsdW4udXNlQ2FsbGJhY2spKGI9PntsZXQgbT1iLnRhcmdldC5maWxlcz8uWzBdO20mJmYobSl9LFtmXSksaD0oMCx1bi51c2VDYWxsYmFjaykoKCk9PnthKCIiKX0sW10pO3JldHVybntiYWNrZ3JvdW5kSW1hZ2VVcmw6byxiYWNrZ3JvdW5kTW9kZTppLHNldEJhY2tncm91bmRNb2RlOnMsdXBsb2FkaW5nOmwsZHJhZ092ZXI6YyxmaWxlSW5wdXRSZWY6cCxoYW5kbGVEcm9wOnksaGFuZGxlRHJhZ092ZXI6dixoYW5kbGVEcmFnTGVhdmU6dyxoYW5kbGVGaWxlSW5wdXRDaGFuZ2U6ZyxoYW5kbGVSZW1vdmVJbWFnZTpofX12YXIgbGE9UChmZSgpKTt2YXIgUT1QKCQoKSksQW89W3t2YWx1ZToibm9uZSIsbGFiZWw6Ik5vbmUgKGRpc2FibGUgQUkgZmVhdHVyZXMpIixhcGlLZXlQcm92aWRlcjpudWxsfSx7dmFsdWU6Im9wZW5haSIsbGFiZWw6Ik9wZW5BSSBDaGF0R1BUIixhcGlLZXlQcm92aWRlcjoib3BlbmFpIn0se3ZhbHVlOiJhbnRocm9waWMiLGxhYmVsOiJBbnRocm9waWMgT3B1cyIsYXBpS2V5UHJvdmlkZXI6ImFudGhyb3BpYyJ9LHt2YWx1ZToiYW50aHJvcGljLXNvbm5ldCIsbGFiZWw6IkFudGhyb3BpYyBTb25uZXQiLGFwaUtleVByb3ZpZGVyOiJhbnRocm9waWMifSx7dmFsdWU6ImdlbWluaSIsbGFiZWw6Ikdvb2dsZSBHZW1pbmkiLGFwaUtleVByb3ZpZGVyOiJnZW1pbmkifSx7dmFsdWU6Imdyb2siLGxhYmVsOiJHcm9rIixhcGlLZXlQcm92aWRlcjoiZ3JvayJ9XTtmdW5jdGlvbiBkQygpe2xldCBlPW5hdmlnYXRvci51c2VyQWdlbnR8fCIiLHQ9bmF2aWdhdG9yLnBsYXRmb3JtfHwiIixuPS9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChlKSxyPW5hdmlnYXRvci5tYXhUb3VjaFBvaW50cz4xJiYvTWFjaW50b3NoLy50ZXN0KGUpO3JldHVybiBufHxyP3tsaW5rUGFyZW50aGV0aWNhbDoibG9uZy1wcmVzcywgT3BlbiBpbiBOZXcgVGFiIixub3RlOiJMb25nLXByZXNzIHRoZSBmb2xsb3dpbmcgbGluaywgdGhlbiBjaG9vc2UgT3BlbiBpbiBOZXcgVGFiIG9yIE9wZW4gaW4gQnJvd3Nlci4gQSBub3JtYWwgY2xpY2sgbWF5IGhhdmUgbm8gdmlzaWJsZSBlZmZlY3QuIn06L01hY3xpUGhvbmV8aVBvZHxpUGFkLy50ZXN0KHQpfHwvTWFjIE9TIFgvLnRlc3QoZSk/e2xpbmtQYXJlbnRoZXRpY2FsOiJDbWQrY2xpY2siLG5vdGU6IkNtZC1jbGljayB0aGUgZm9sbG93aW5nIGxpbmsgdG8gb3BlbiBpdC4gQSBub3JtYWwgY2xpY2sgbWF5IGhhdmUgbm8gdmlzaWJsZSBlZmZlY3QuIn06L1dpbi8udGVzdCh0KT97bGlua1BhcmVudGhldGljYWw6IkN0cmwrY2xpY2siLG5vdGU6IkN0cmwtY2xpY2sgdGhlIGZvbGxvd2luZyBsaW5rIHRvIG9wZW4gaXQuIEEgbm9ybWFsIGNsaWNrIG1heSBoYXZlIG5vIHZpc2libGUgZWZmZWN0LiJ9OntsaW5rUGFyZW50aGV0aWNhbDoiQ3RybCtjbGljayIsbm90ZToiQ3RybC1jbGljayB0aGUgZm9sbG93aW5nIGxpbmsgdG8gb3BlbiBpdC4gQSBub3JtYWwgY2xpY2sgbWF5IGhhdmUgbm8gdmlzaWJsZSBlZmZlY3QifX1mdW5jdGlvbiBjQyh7YXBpS2V5OmUsYXBpS2V5VmlzaWJsZTp0LGxpbmtQYXJlbnRoZXRpY2FsOm4sbm90ZTpyLG9uQXBpS2V5Q2hhbmdlOm8sb25Qcm92aWRlckNoYW5nZTphLG9uVG9nZ2xlS2V5VmlzaWJpbGl0eTppLHByb3ZpZGVyQXBpS2V5VXJsOnMscHJvdmlkZXJOYW1lOmwsc2VsZWN0ZWRQcm92aWRlcjpkfSl7cmV0dXJuKDAsUS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3Mtc2VjdGlvbiBzZWN0aW9uIixjaGlsZHJlbjpbKDAsUS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3Mtc2VjdGlvbi1oZWFkZXIiLGNoaWxkcmVuOlsoMCxRLmpzeCkoImg0Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3Mtc2VjdGlvbi10aXRsZSIsY2hpbGRyZW46IkFJIFByb3ZpZGVyIn0pLCgwLFEuanN4KSgicCIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLXNlY3Rpb24tZGVzYyIsY2hpbGRyZW46IkVuYWJsZSBhbmFseXNpcyBvZiBxdWFydGVybHkgcGxhbiAmIHN1Z2dlc3RlZCB0YXNrcy4ifSldfSksKDAsUS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctZmllbGQiLGNoaWxkcmVuOlsoMCxRLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1saW5lIixjaGlsZHJlbjpbKDAsUS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1maWVsZC1sYWJlbCIsY2hpbGRyZW46IkxMTSBQcm92aWRlciJ9KSwoMCxRLmpzeCkoInNlbGVjdCIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLXNlbGVjdCIsaWQ6ImxsbS1wcm92aWRlci1zZWxlY3QiLHZhbHVlOmQsb25DaGFuZ2U6Yz0+YShjLnRhcmdldC52YWx1ZSksY2hpbGRyZW46QW8ubWFwKGM9PigwLFEuanN4KSgib3B0aW9uIix7dmFsdWU6Yy52YWx1ZSxjaGlsZHJlbjpjLmxhYmVsfSxjLnZhbHVlKSl9KV19KSwoMCxRLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1saW5lIixjaGlsZHJlbjpbKDAsUS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1maWVsZC1sYWJlbCIsY2hpbGRyZW46IkFQSSBLZXkifSksKDAsUS5qc3gpKCJwIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3MtYXBpLWtleS1oaW50IixjaGlsZHJlbjpyfSksKDAsUS5qc3gpKCJhIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3MtYXBpLWtleS1saW5rIixocmVmOnMsdGFyZ2V0OiJfYmxhbmsiLHJlbDoibm9vcGVuZXIgbm9yZWZlcnJlciIsY2hpbGRyZW46YFJldHJpZXZlIHlvdXIgJHtsfSBBUEkga2V5ICgke259KSBcdTIxOTJgfSksKDAsUS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3MtYXBpLWtleS1pbnB1dC1yb3ciLGNoaWxkcmVuOlsoMCxRLmpzeCkoImlucHV0Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3MtYXBpLWtleS1pbnB1dCIsdHlwZTp0PyJ0ZXh0IjoicGFzc3dvcmQiLHZhbHVlOmUsb25DaGFuZ2U6Yz0+byhjLnRhcmdldC52YWx1ZSkscGxhY2Vob2xkZXI6IlBhc3RlIHlvdXIgQVBJIGtleSBoZXJlIixhdXRvQ29tcGxldGU6Im9mZiIsc3BlbGxDaGVjazohMX0pLCgwLFEuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3MtYXBpLWtleS10b2dnbGUiLHR5cGU6ImJ1dHRvbiIsb25DbGljazppLHRpdGxlOnQ/IkhpZGUgQVBJIGtleSI6IlNob3cgQVBJIGtleSIsImFyaWEtbGFiZWwiOnQ/IkhpZGUgQVBJIGtleSI6IlNob3cgQVBJIGtleSIsY2hpbGRyZW46dD8iXHV7MUY2NDh9IjoiXHV7MUY0NDF9XHVGRTBGIn0pXX0pXX0pXX0pXX0pfWZ1bmN0aW9uIHVDKHtiYWNrZ3JvdW5kSW1hZ2VVcmw6ZSxiYWNrZ3JvdW5kTW9kZTp0LGRyYWdPdmVyOm4sZmlsZUlucHV0UmVmOnIsb25CYWNrZ3JvdW5kTW9kZUNoYW5nZTpvLG9uRHJhZ0xlYXZlOmEsb25EcmFnT3ZlcjppLG9uRHJvcDpzLG9uRmlsZUlucHV0Q2hhbmdlOmwsb25SZW1vdmVJbWFnZTpkLHVwbG9hZGluZzpjfSl7cmV0dXJuKDAsUS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3Mtc2VjdGlvbiBzZWN0aW9uIixjaGlsZHJlbjpbKDAsUS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3Mtc2VjdGlvbi1oZWFkZXIiLGNoaWxkcmVuOlsoMCxRLmpzeCkoImg0Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3Mtc2VjdGlvbi10aXRsZSIsY2hpbGRyZW46IkJhY2tncm91bmQgSW1hZ2UifSksKDAsUS5qc3gpKCJwIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3Mtc2VjdGlvbi1kZXNjIixjaGlsZHJlbjoiVXBsb2FkIGFuIGltYWdlIHRvIHVzZSBhcyB5b3VyIGRhc2hib2FyZCBiYWNrZ3JvdW5kLiJ9KV19KSwoMCxRLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1maWVsZCIsY2hpbGRyZW46WygwLFEuanN4cykoImRpdiIse2NsYXNzTmFtZTpgZGFzaGJvYXJkLXNldHRpbmdzLWRyb3B6b25lJHtuPyIgZGFzaGJvYXJkLXNldHRpbmdzLWRyb3B6b25lLS1hY3RpdmUiOiIifSR7Yz8iIGRhc2hib2FyZC1zZXR0aW5ncy1kcm9wem9uZS0tdXBsb2FkaW5nIjoiIn1gLG9uRHJvcDpzLG9uRHJhZ092ZXI6aSxvbkRyYWdMZWF2ZTphLG9uQ2xpY2s6KCk9PiFjJiZyLmN1cnJlbnQ/LmNsaWNrKCksY2hpbGRyZW46WygwLFEuanN4KSgiaW5wdXQiLHtyZWY6cix0eXBlOiJmaWxlIixhY2NlcHQ6ImltYWdlLyoiLGNsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLWRyb3B6b25lLWlucHV0IixvbkNoYW5nZTpsfSksYz8oMCxRLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1kcm9wem9uZS10ZXh0IixjaGlsZHJlbjoiVXBsb2FkaW5nLi4uIn0pOmU/KDAsUS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3MtZHJvcHpvbmUtcHJldmlldyIsY2hpbGRyZW46WygwLFEuanN4KSgiaW1nIix7c3JjOmUsYWx0OiJCYWNrZ3JvdW5kIHByZXZpZXciLGNsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLWRyb3B6b25lLXByZXZpZXctaW1nIixvbkxvYWQ6KCk9PmsoIltzZXR0aW5ncy1wb3B1cF0gYmFja2dyb3VuZCBwcmV2aWV3IGltYWdlIGxvYWRlZCBPSzoiLGUpLG9uRXJyb3I6cD0+aygiW3NldHRpbmdzLXBvcHVwXSBiYWNrZ3JvdW5kIHByZXZpZXcgaW1hZ2UgRkFJTEVEIHRvIGxvYWQ6IixlLHAudHlwZSl9KSwoMCxRLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1kcm9wem9uZS10ZXh0IixjaGlsZHJlbjoiRHJvcCBhIG5ldyBpbWFnZSBvciBjbGljayB0byByZXBsYWNlIn0pXX0pOigwLFEuanN4KSgic3BhbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLWRyb3B6b25lLXRleHQiLGNoaWxkcmVuOiJEcmFnICYgZHJvcCBhbiBpbWFnZSBoZXJlLCBvciBjbGljayB0byB1cGxvYWQifSldfSksZSYmKDAsUS5qc3gpKCJhIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3MtcmVtb3ZlLWltYWdlIixocmVmOiIjIixvbkNsaWNrOnA9PntwLnByZXZlbnREZWZhdWx0KCksZCgpfSxjaGlsZHJlbjoiUmVtb3ZlIGltYWdlIn0pXX0pLGUmJigwLFEuanN4cykoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLWZpZWxkIixjaGlsZHJlbjpbKDAsUS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1maWVsZC1sYWJlbCIsY2hpbGRyZW46IkRpc3BsYXkgTW9kZSJ9KSwoMCxRLmpzeCkoInNlbGVjdCIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLXNlbGVjdCIsdmFsdWU6dCxvbkNoYW5nZTpwPT5vKHAudGFyZ2V0LnZhbHVlKSxjaGlsZHJlbjpMYi5tYXAocD0+KDAsUS5qc3gpKCJvcHRpb24iLHt2YWx1ZTpwLnZhbHVlLGNoaWxkcmVuOnAubGFiZWx9LHAudmFsdWUpKX0pXX0pXX0pfWZ1bmN0aW9uIHBDKHtvbk9wZW5NZW1vcnlNZWFzdXJlbWVudDplfSl7cmV0dXJuKDAsUS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3Mtc2VjdGlvbiBzZWN0aW9uIixjaGlsZHJlbjpbKDAsUS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3Mtc2VjdGlvbi1oZWFkZXIiLGNoaWxkcmVuOlsoMCxRLmpzeCkoImg0Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3Mtc2VjdGlvbi10aXRsZSIsY2hpbGRyZW46IkRlYnVnIFRvb2xzIn0pLCgwLFEuanN4KSgicCIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLXNlY3Rpb24tZGVzYyIsY2hpbGRyZW46Ik1lYXN1cmUgYSB3aWRnZXQncyBhcHByb3hpbWF0ZSBpbmNyZW1lbnRhbCBKYXZhU2NyaXB0IGhlYXAgZm9vdHByaW50LiJ9KV19KSwoMCxRLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLWRlYnVnLWJ1dHRvbiIsdHlwZToiYnV0dG9uIixvbkNsaWNrOmUsY2hpbGRyZW46Ik9wZW4gd2lkZ2V0IG1lbW9yeSBtZWFzdXJlbWVudCJ9KV19KX1mdW5jdGlvbiBmQyh7b25UaW1lRm9ybWF0Q2hhbmdlOmUsb25XZWVrRm9ybWF0Q2hhbmdlOnQsdGltZUZvcm1hdDpuLHdlZWtGb3JtYXQ6cn0pe3JldHVybigwLFEuanN4cykoImRpdiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLXNlY3Rpb24gc2VjdGlvbiIsY2hpbGRyZW46WygwLFEuanN4cykoImRpdiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLXNlY3Rpb24taGVhZGVyIixjaGlsZHJlbjpbKDAsUS5qc3gpKCJoNCIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLXNlY3Rpb24tdGl0bGUiLGNoaWxkcmVuOiJUaW1lICYgRGF0ZSBGb3JtYXQifSksKDAsUS5qc3gpKCJwIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3Mtc2VjdGlvbi1kZXNjIixjaGlsZHJlbjoiQ2hvb3NlIGhvdyB0aW1lcyBhbmQgd2Vla3MgYXJlIGRpc3BsYXllZCBhY3Jvc3MgdGhlIGRhc2hib2FyZC4ifSldfSksKDAsUS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctZmllbGQiLGNoaWxkcmVuOlsoMCxRLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1saW5lIixjaGlsZHJlbjpbKDAsUS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1maWVsZC1sYWJlbCIsY2hpbGRyZW46IlRpbWUgRm9ybWF0In0pLCgwLFEuanN4cykoImxhYmVsIix7Y2hpbGRyZW46WygwLFEuanN4KSgiaW5wdXQiLHt0eXBlOiJyYWRpbyIsbmFtZToidGltZS1mb3JtYXQiLHZhbHVlOiJtZXJpZGlhbiIsY2hlY2tlZDpuPT09Im1lcmlkaWFuIixvbkNoYW5nZTooKT0+ZSgibWVyaWRpYW4iKX0pLCJVc2UgbWVyaWRpYW4gKGFtL3BtKSB0aW1lcyJdfSksKDAsUS5qc3hzKSgibGFiZWwiLHtjaGlsZHJlbjpbKDAsUS5qc3gpKCJpbnB1dCIse3R5cGU6InJhZGlvIixuYW1lOiJ0aW1lLWZvcm1hdCIsdmFsdWU6IjI0aCIsY2hlY2tlZDpuPT09IjI0aCIsb25DaGFuZ2U6KCk9PmUoIjI0aCIpfSksIjI0IGhvdXIgdGltZSJdfSldfSksKDAsUS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctbGluZSIsY2hpbGRyZW46WygwLFEuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctZmllbGQtbGFiZWwiLGNoaWxkcmVuOiJXZWVrIEZvcm1hdCJ9KSwoMCxRLmpzeHMpKCJsYWJlbCIse2NoaWxkcmVuOlsoMCxRLmpzeCkoImlucHV0Iix7dHlwZToicmFkaW8iLG5hbWU6IndlZWstZm9ybWF0Iix2YWx1ZToic3VuZGF5IixjaGVja2VkOnI9PT0ic3VuZGF5IixvbkNoYW5nZTooKT0+dCgic3VuZGF5Iil9KSwiV2VlayBiZWdpbnMgb24gU3VuZGF5Il19KSwoMCxRLmpzeHMpKCJsYWJlbCIse2NoaWxkcmVuOlsoMCxRLmpzeCkoImlucHV0Iix7dHlwZToicmFkaW8iLG5hbWU6IndlZWstZm9ybWF0Iix2YWx1ZToibW9uZGF5IixjaGVja2VkOnI9PT0ibW9uZGF5IixvbkNoYW5nZTooKT0+dCgibW9uZGF5Iil9KSwiV2VlayBiZWdpbnMgb24gTW9uZGF5Il19KV19KV19KV19KX1mdW5jdGlvbiBtayhlLHQpe2lmKCF0KXJldHVybiIiO2xldCBuPUt0KHQpO3JldHVybiBuJiZlPy5bbl18fCIifWZ1bmN0aW9uIERtKHthcHA6ZSxjb25maWdQYXJhbXM6dCxvbkNhbmNlbDpuLG9uT3Blbk1lbW9yeU1lYXN1cmVtZW50OnIsb25TYXZlOm8scGx1Z2luTm90ZVVVSUQ6YSx0aW1lRm9ybWF0Omksd2Vla0Zvcm1hdDpzfSl7bGV0W2xdPSgwLGxhLnVzZVN0YXRlKSgoKT0+dHlwZW9mIHdpbmRvdz4idSI/MDp3aW5kb3cuc2Nyb2xsWT8/ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcD8/MCksZD10Py5bQi5MTE1fUFJPVklERVJfTU9ERUxdLGM9dD8uW0IuQkFDS0dST1VORF9JTUFHRV9VUkxdLHU9dD8uW0IuQkFDS0dST1VORF9JTUFHRV9NT0RFXSxwPUFvLmZpbmQoWT0+WS52YWx1ZT09PWQpfHxBb1swXSxbZix5XT0oMCxsYS51c2VTdGF0ZSkobWsodCxwLmFwaUtleVByb3ZpZGVyKSksW3Ysd109KDAsbGEudXNlU3RhdGUpKCExKSxbZyxoXT0oMCxsYS51c2VTdGF0ZSkoZHx8Im9wZW5haSIpLFtiLG1dPSgwLGxhLnVzZVN0YXRlKShpfHwibWVyaWRpYW4iKSxbUyx4XT0oMCxsYS51c2VTdGF0ZSkoc3x8InN1bmRheSIpO2soIltzZXR0aW5ncy1wb3B1cF0gcmVuZGVyaW5nIERhc2hib2FyZFNldHRpbmdzUG9wdXAsIGN1cnJlbnRCYWNrZ3JvdW5kSW1hZ2VVcmw6IixjKTtsZXR7YmFja2dyb3VuZEltYWdlVXJsOkUsYmFja2dyb3VuZE1vZGU6VCxzZXRCYWNrZ3JvdW5kTW9kZTpBLHVwbG9hZGluZzpDLGRyYWdPdmVyOkwsZmlsZUlucHV0UmVmOk8saGFuZGxlRHJvcDpSLGhhbmRsZURyYWdPdmVyOkYsaGFuZGxlRHJhZ0xlYXZlOlYsaGFuZGxlRmlsZUlucHV0Q2hhbmdlOnosaGFuZGxlUmVtb3ZlSW1hZ2U6bmV9PVRtKHthcHA6ZSxwbHVnaW5Ob3RlVVVJRDphLGluaXRpYWxJbWFnZVVybDpjLGluaXRpYWxNb2RlOnV9KSxNPUFvLmZpbmQoWT0+WS52YWx1ZT09PWcpfHxBb1swXSxXPWxrW00uYXBpS2V5UHJvdmlkZXJdLEQ9QW8uZmluZChZPT5ZLnZhbHVlPT09Zyk/LmxhYmVsLE49WT0+e2goWSk7bGV0IGo9QW8uZmluZChxPT5xLnZhbHVlPT09WSl8fEFvWzBdLGVlPW1rKHQsai5hcGlLZXlQcm92aWRlcik7eShlZSl9LHtsaW5rUGFyZW50aGV0aWNhbDpfLG5vdGU6R309ZEMoKTtyZXR1cm4oMCxRLmpzeCkobHIse3RpdGxlOiJcdTI2OTlcdUZFMEYgRGFzaGJvYXJkIFNldHRpbmdzIixzY3JvbGxUb3A6bCxvblN1Ym1pdDooKT0+byh7YXBpS2V5OmYsYXBpS2V5UHJvdmlkZXI6TS5hcGlLZXlQcm92aWRlcixiYWNrZ3JvdW5kSW1hZ2VVcmw6RSxiYWNrZ3JvdW5kTW9kZTpULGxsbVByb3ZpZGVyOmcsdGltZUZvcm1hdDpiLHdlZWtGb3JtYXQ6U30pLG9uQ2FuY2VsOm4sc3VibWl0TGFiZWw6IlNhdmUgU2V0dGluZ3MiLGNoaWxkcmVuOigwLFEuanN4cykoImRpdiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLWNvbnRhaW5lciIsY2hpbGRyZW46WygwLFEuanN4KSh1Qyx7YmFja2dyb3VuZEltYWdlVXJsOkUsYmFja2dyb3VuZE1vZGU6VCxkcmFnT3ZlcjpMLGZpbGVJbnB1dFJlZjpPLG9uQmFja2dyb3VuZE1vZGVDaGFuZ2U6QSxvbkRyYWdMZWF2ZTpWLG9uRHJhZ092ZXI6RixvbkRyb3A6UixvbkZpbGVJbnB1dENoYW5nZTp6LG9uUmVtb3ZlSW1hZ2U6bmUsdXBsb2FkaW5nOkN9KSwoMCxRLmpzeCkoY0Mse2FwaUtleTpmLGFwaUtleVZpc2libGU6dixsaW5rUGFyZW50aGV0aWNhbDpfLG5vdGU6RyxvbkFwaUtleUNoYW5nZTp5LG9uUHJvdmlkZXJDaGFuZ2U6TixvblRvZ2dsZUtleVZpc2liaWxpdHk6KCk9PncoWT0+IVkpLHByb3ZpZGVyQXBpS2V5VXJsOlcscHJvdmlkZXJOYW1lOkQsc2VsZWN0ZWRQcm92aWRlcjpnfSksKDAsUS5qc3gpKGZDLHtvblRpbWVGb3JtYXRDaGFuZ2U6bSxvbldlZWtGb3JtYXRDaGFuZ2U6eCx0aW1lRm9ybWF0OmIsd2Vla0Zvcm1hdDpTfSkscj8oMCxRLmpzeCkocEMse29uT3Blbk1lbW9yeU1lYXN1cmVtZW50OnJ9KTpudWxsXX0pfSl9dmFyIEhlPVAoZmUoKSk7dmFyIGRyPVAoJCgpKSxoaz0iZGF5LXNrZXRjaCIsQW09Nix5az0yMSxtQz0xZTQsaEM9MzAwLENvPUFycmF5LmZyb20oe2xlbmd0aDp5ay1BbSsxfSwoZSx0KT0+QW0rdCk7ZnVuY3Rpb24gdmsoZSl7cmV0dXJuIGUudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1VUyIse3dlZWtkYXk6ImxvbmciLG1vbnRoOiJsb25nIixkYXk6Im51bWVyaWMiLHllYXI6Im51bWVyaWMifSl9ZnVuY3Rpb24gZ0MoZSl7cmV0dXJuYERheSBTa2V0Y2ggJHt2ayhlKX1gfWZ1bmN0aW9uIHlDKGUpe2xldCB0PXt9LG49bmV3IFNldDtpZighZSlyZXR1cm57ZW50cmllczp0LGh1bWFuRWRpdGVkSG91cnM6bn07Zm9yKGxldCByIG9mIGUuc3BsaXQoYApgKSl7bGV0IG89ci5tYXRjaCgvXmh1bWFuLWVkaXRlZDpccyooW1xkLFxzXSopL2kpO2lmKG8pe29bMV0uc3BsaXQoIiwiKS5mb3JFYWNoKGQ9PntsZXQgYz1wYXJzZUludChkLnRyaW0oKSwxMCk7aXNOYU4oYyl8fG4uYWRkKGMpfSk7Y29udGludWV9bGV0IGE9ci5tYXRjaCgvXihcZHsxLDJ9KD86YW18cG0pKTpccyooLiopL2kpO2lmKCFhKWNvbnRpbnVlO2xldCBpPWFbMV0udG9Mb3dlckNhc2UoKSxzPWFbMl0ucmVwbGFjZSgvXFwrJC8sIiIpLnRyaW0oKSxsPXZDKGkpO2whPT1udWxsJiZDby5pbmNsdWRlcyhsKSYmKHRbbF09cyl9cmV0dXJue2VudHJpZXM6dCxodW1hbkVkaXRlZEhvdXJzOm59fWZ1bmN0aW9uIHZDKGUpe2xldCB0PWUubWF0Y2goL14oXGR7MSwyfSkoYW18cG0pJC9pKTtpZighdClyZXR1cm4gbnVsbDtsZXQgbj1wYXJzZUludCh0WzFdLDEwKSxyPXRbMl0udG9Mb3dlckNhc2UoKTtyZXR1cm4gcj09PSJhbSImJm49PT0xMj9uPTA6cj09PSJwbSImJm4hPT0xMiYmKG4rPTEyKSxufWZ1bmN0aW9uIGJDKGUsdCl7bGV0IG49Q28ubWFwKHI9PntsZXQgbz1yaShyKSxhPWVbcl18fCIiO3JldHVybmAke299OiAke2F9YH0pO2lmKHQuc2l6ZT4wKXtsZXQgcj1bLi4udF0uc29ydCgobyxhKT0+by1hKTtuLnB1c2goYGh1bWFuLWVkaXRlZDogJHtyLmpvaW4oIiwiKX1gKX1yZXR1cm4gbi5qb2luKGAKYCl9ZnVuY3Rpb24gYmMoKXtsZXQgZT17fTtyZXR1cm4gQ28uZm9yRWFjaCh0PT57ZVt0XT0iIn0pLGV9ZnVuY3Rpb24gZ2soZSl7cmV0dXJuIGU/ZSBpbnN0YW5jZW9mIERhdGU/ZS5nZXRUaW1lKCk6dHlwZW9mIGU9PSJudW1iZXIiP2U8MWUxMD9lKjFlMzplOm51bGw6bnVsbH1mdW5jdGlvbiB3QyhlKXtsZXQgdD1nayhlPy5zdGFydEF0KTtpZighdClyZXR1cm5bXTtsZXQgbj1uZXcgRGF0ZSh0KS5nZXRIb3VycygpLHI9W25dLG89Z2soZT8uZW5kQXQpO2lmKCFvfHxvPD10KXJldHVybiByO2xldCBhPU1hdGguZmxvb3IoKG8tdCkvKDYwKjYwKjFlMykpO2ZvcihsZXQgaT0xO2k8YTtpKz0xKXIucHVzaChuK2kpO3JldHVybiByfWZ1bmN0aW9uIGtDKGUpe2lmKCFlPy5zdGFydHx8IShlLnN0YXJ0IGluc3RhbmNlb2YgRGF0ZSl8fGUuYWxsRGF5KXJldHVybltdO2xldCB0PWUuc3RhcnQuZ2V0SG91cnMoKTtpZighZS5lbmR8fCEoZS5lbmQgaW5zdGFuY2VvZiBEYXRlKXx8ZS5lbmQ8PWUuc3RhcnQpcmV0dXJuW3RdO2xldCBuPWUuZW5kLmdldEhvdXJzKCkrKGUuZW5kLmdldE1pbnV0ZXMoKT4wPzE6MCkscj1bXTtmb3IobGV0IG89dDtvPG47bysrKXIucHVzaChvKTtyZXR1cm4gci5sZW5ndGg+MD9yOlt0XX1mdW5jdGlvbiB4QyhlKXtsZXQgdD0oZT8uY29udGVudHx8IiIpLnNwbGl0KGAKYClbMF07cmV0dXJuIEJ3KHQpfWZ1bmN0aW9uIFNDKGUsdCl7cmV0dXJuIHQhPT1udWxsJiZKU09OLnN0cmluZ2lmeShlKSE9PUpTT04uc3RyaW5naWZ5KHQpfWZ1bmN0aW9uIEVDKGUsdCxuKXtsZXQgcj17Li4uZX07cmV0dXJuIHQuZm9yRWFjaChvPT57bGV0IGE9eEMobyk7YSYmd0MobykuZm9yRWFjaChpPT57Q28uaW5jbHVkZXMoaSkmJiFyW2ldJiYhbi5oYXMoaSkmJihyW2ldPWEpfSl9KSxyfWZ1bmN0aW9uIE5DKGUsdCxuLHIpe2lmKCFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aD09PTApcmV0dXJuIGU7bGV0IG89aWUobiksYT17Li4uZX07cmV0dXJuIHQuZm9yRWFjaChpPT57IWk/LnRpdGxlfHxpLmFsbERheXx8IShpLnN0YXJ0IGluc3RhbmNlb2YgRGF0ZSl8fGllKGkuc3RhcnQpIT09b3x8a0MoaSkuZm9yRWFjaChzPT57Q28uaW5jbHVkZXMocykmJiFhW3NdJiYhci5oYXMocykmJihhW3NdPWkudGl0bGUpfSl9KSxhfWZ1bmN0aW9uIFRDKHthcHA6ZSxub3RlTmFtZTp0fSl7bGV0W24scl09KDAsSGUudXNlU3RhdGUpKGJjKSxbbyxhXT0oMCxIZS51c2VTdGF0ZSkoKCk9Pm5ldyBTZXQpLFtpLHNdPSgwLEhlLnVzZVN0YXRlKSghMCksW2wsZF09KDAsSGUudXNlU3RhdGUpKG51bGwpLFtjLHVdPSgwLEhlLnVzZVN0YXRlKShudWxsKSxwPSgwLEhlLnVzZVJlZikobnVsbCksZj0oMCxIZS51c2VSZWYpKG4pLHk9KDAsSGUudXNlUmVmKShvKTtmLmN1cnJlbnQ9bix5LmN1cnJlbnQ9bztsZXQgdj0oMCxIZS51c2VDYWxsYmFjaykoYXN5bmMoaCxiKT0+e2lmKCFlKXJldHVybjtsZXQgbT1iQyhoLGIpO3RyeXtsZXQgUz1sO1N8fChTPShhd2FpdCBlLmZpbmROb3RlKHtuYW1lOnR9KSk/LnV1aWR8fGF3YWl0IGUuY3JlYXRlTm90ZSh0LFt2ZV0se2FyY2hpdmU6ITB9KSxkKFMpKSxhd2FpdCBlLnJlcGxhY2VOb3RlQ29udGVudCh7dXVpZDpTfSxtKSx1KHsuLi5ofSksayhgW0RheVNrZXRjaF0gcGVyc2lzdGVkICR7dH1gKX1jYXRjaChTKXtrKCJbRGF5U2tldGNoXSBzYXZlIGZhaWxlZCIsUyl9fSxbZSx0LGxdKSx3PSgwLEhlLnVzZUNhbGxiYWNrKSgoaD1tQyk9PntwLmN1cnJlbnQmJmNsZWFyVGltZW91dChwLmN1cnJlbnQpLHAuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57dihmLmN1cnJlbnQseS5jdXJyZW50KX0saCl9LFt2XSksZz0oMCxIZS51c2VDYWxsYmFjaykoKCk9PntwLmN1cnJlbnQmJmNsZWFyVGltZW91dChwLmN1cnJlbnQpLHYoZi5jdXJyZW50LHkuY3VycmVudCl9LFt2XSk7cmV0dXJuKDAsSGUudXNlRWZmZWN0KSgoKT0+e2xldCBoPSExO3JldHVybihhc3luYygpPT57cyghMCk7dHJ5e2xldCBiPWF3YWl0IGUuZmluZE5vdGUoe25hbWU6dH0pO2lmKGgpcmV0dXJuO2lmKGI/LnV1aWQpe2QoYi51dWlkKTtsZXQgbT1hd2FpdCBlLmdldE5vdGVDb250ZW50KHt1dWlkOmIudXVpZH0pO2lmKGgpcmV0dXJuO2xldHtlbnRyaWVzOlMsaHVtYW5FZGl0ZWRIb3Vyczp4fT15QyhtKSxFPWJjKCk7eC5mb3JFYWNoKFQ9PntTW1RdIT09dm9pZCAwJiYoRVtUXT1TW1RdKX0pLHIoRSksYSh4KSx1KHsuLi5FfSl9ZWxzZXtsZXQgbT1iYygpO3IobSksYShuZXcgU2V0KSx1KG0pfX1jYXRjaChiKXtpZihrKCJbRGF5U2tldGNoXSBsb2FkIGZhaWxlZCIsYiksIWgpe2xldCBtPWJjKCk7cihtKSxhKG5ldyBTZXQpLHUobSl9fWZpbmFsbHl7aHx8cyghMSl9fSkoKSwoKT0+e2g9ITB9fSxbZSx0XSksKDAsSGUudXNlRWZmZWN0KSgoKT0+KCk9PntwLmN1cnJlbnQmJmNsZWFyVGltZW91dChwLmN1cnJlbnQpfSxbXSkse2VudHJpZXM6bixodW1hbkVkaXRlZEhvdXJzOm8saXNEaXJ0eTpTQyhuLGMpLGxvYWRpbmc6aSxzYXZlTm93Omcsc2NoZWR1bGVTYXZlOncsc2V0RW50cmllczpyLHNldEh1bWFuRWRpdGVkSG91cnM6YX19ZnVuY3Rpb24gREMoe2FnZW5kYVRhc2tzOmUsY3VycmVudERhdGU6dCxodW1hbkVkaXRlZEhvdXJzOm4sbG9hZGluZzpyLHNldEVudHJpZXM6b30peygwLEhlLnVzZUVmZmVjdCkoKCk9PntpZighZXx8IXR8fHIpcmV0dXJuO2xldCBhPWllKHQpLGk9ZVthXXx8W107aS5sZW5ndGghPT0wJiZvKHM9PntsZXQgbD1FQyhzLGksbik7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGwpPT09SlNPTi5zdHJpbmdpZnkocyk/czpsfSl9LFtlLHQsbixyLG9dKX1mdW5jdGlvbiBBQyh7Y2FsZW5kYXJFdmVudHM6ZSxjdXJyZW50RGF0ZTp0LGh1bWFuRWRpdGVkSG91cnM6bixsb2FkaW5nOnIsc2V0RW50cmllczpvfSl7KDAsSGUudXNlRWZmZWN0KSgoKT0+eyFlfHwhdHx8cnx8byhhPT57bGV0IGk9TkMoYSxlLHQsbik7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGkpPT09SlNPTi5zdHJpbmdpZnkoYSk/YTppfSl9LFtlLHQsbixyLG9dKX1mdW5jdGlvbiBDQyhlLHQpe2lmKCFlKXJldHVybiAwO2xldCBuPWUucXVlcnlTZWxlY3RvcihgW2RhdGEtaG91cj0iJHt0fSJdYCk7cmV0dXJuIG4/TWF0aC5tYXgoMCxuLm9mZnNldFRvcC0oZS5jbGllbnRIZWlnaHQtbi5jbGllbnRIZWlnaHQpLzIpOjB9ZnVuY3Rpb24gTUMoe2N1cnJlbnREYXRlOmUsbG9hZGluZzp0LG5vdGVib29rUmVmOm59KXtsZXQgcj0oMCxIZS51c2VSZWYpKG51bGwpLG89KDAsSGUudXNlUmVmKShudWxsKTsoMCxIZS51c2VFZmZlY3QpKCgpPT57bGV0IGE9aWUoZSk7aWYoIWEpcmV0dXJuO2lmKHQpe3IuY3VycmVudD1hO3JldHVybn1pZihyLmN1cnJlbnQhPT1hfHxvLmN1cnJlbnQ9PT1hKXJldHVybjtsZXQgaT1zZXRUaW1lb3V0KCgpPT57bGV0IHM9bi5jdXJyZW50O2lmKCFzKXJldHVybjtsZXQgbD1NYXRoLm1pbih5ayxNYXRoLm1heChBbSxuZXcgRGF0ZSgpLmdldEhvdXJzKCkpKTtzLnNjcm9sbFRvcD1DQyhzLGwpLHIuY3VycmVudD1udWxsLG8uY3VycmVudD1hfSwwKTtyZXR1cm4oKT0+Y2xlYXJUaW1lb3V0KGkpfSxbZSx0LG5dKX1mdW5jdGlvbiBPQygpe2xldCBlPSgwLEhlLnVzZVJlZikoe30pLHQ9KDAsSGUudXNlQ2FsbGJhY2spKChyLG8pPT57bz9lLmN1cnJlbnRbcl09bzpkZWxldGUgZS5jdXJyZW50W3JdfSxbXSk7cmV0dXJue2hhbmRsZUlucHV0S2V5RG93bjooMCxIZS51c2VDYWxsYmFjaykoKHIsbyk9PntpZihvLmtleSE9PSJBcnJvd0Rvd24iJiZvLmtleSE9PSJBcnJvd1VwIilyZXR1cm47aWYoby5wcmV2ZW50RGVmYXVsdCgpLG8uc2hpZnRLZXkpe2xldCB2PW8uY3VycmVudFRhcmdldCx3PXYudmFsdWUubGVuZ3RoO28ua2V5PT09IkFycm93VXAiP3Yuc2V0U2VsZWN0aW9uUmFuZ2UoMCx3LCJiYWNrd2FyZCIpOnYuc2V0U2VsZWN0aW9uUmFuZ2UoMCx3LCJmb3J3YXJkIik7cmV0dXJufWxldCBhPUNvLmluZGV4T2Yocik7aWYoYT09PS0xKXJldHVybjtsZXQgaT1vLmtleT09PSJBcnJvd0Rvd24iPzE6LTEscz1Db1thK2ldO2lmKCFzKXJldHVybjtsZXQgbD1vLmN1cnJlbnRUYXJnZXQsZD1lLmN1cnJlbnRbc107aWYoIWQpcmV0dXJuO2xldCBjPWwuc2VsZWN0aW9uU3RhcnQsdT1sLnNlbGVjdGlvbkVuZCxwPWQudmFsdWUubGVuZ3RoLGY9Yz09PW51bGw/cDpNYXRoLm1pbihjLHApLHk9dT09PW51bGw/ZjpNYXRoLm1pbih1LHApO2QuZm9jdXMoKSxkLnNldFNlbGVjdGlvblJhbmdlKGYseSl9LFtdKSxzZXRJbnB1dFJlZjp0fX1mdW5jdGlvbiBJQyh7ZW50cmllczplLGhhbmRsZUJsdXI6dCxoYW5kbGVJbnB1dENoYW5nZTpuLGhhbmRsZUlucHV0S2V5RG93bjpyLGhvdXI6byxzZXRJbnB1dFJlZjphLHRpbWVGb3JtYXQ6aX0pe3JldHVybigwLGRyLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRheS1za2V0Y2gtbGluZSIsImRhdGEtaG91ciI6byxjaGlsZHJlbjpbKDAsZHIuanN4KSgic3BhbiIse2NsYXNzTmFtZToiZGF5LXNrZXRjaC1ob3VyLWxhYmVsIixjaGlsZHJlbjpyaShvLGkpfSksKDAsZHIuanN4KSgiaW5wdXQiLHt0eXBlOiJ0ZXh0IixjbGFzc05hbWU6ImRheS1za2V0Y2gtaW5wdXQiLHZhbHVlOmVbb118fCIiLHJlZjpzPT5hKG8scyksb25DaGFuZ2U6cz0+bihvLHMudGFyZ2V0LnZhbHVlKSxvbktleURvd246cz0+cihvLHMpLG9uQmx1cjp0LHBsYWNlaG9sZGVyOiIiLCJhcmlhLWxhYmVsIjpgJHtyaShvLGkpfSBlbnRyeWB9KV19KX1mdW5jdGlvbiBSQyh7aXNEaXJ0eTplLG9uU2F2ZUNsaWNrOnR9KXtyZXR1cm4oMCxkci5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6YGRheS1za2V0Y2gtc2F2ZS1idG4ke2U/IiI6IiBkYXktc2tldGNoLXNhdmUtYnRuLS1kaXNhYmxlZCJ9YCxkaXNhYmxlZDohZSxvbkNsaWNrOnQsdGl0bGU6ZT8iU2F2ZSBjaGFuZ2VzIjoiTm8gdW5zYXZlZCBjaGFuZ2VzIixjaGlsZHJlbjplPyJTYXZlIjoiU2F2ZWQifSl9ZnVuY3Rpb24gQ20oe2FnZW5kYVRhc2tzOmUsYXBwOnQsY2FsZW5kYXJFdmVudHM6bixjdXJyZW50RGF0ZTpyLHRpbWVGb3JtYXQ6b30pe2xldCBhPSgwLEhlLnVzZVJlZikobnVsbCksaT1JZShyKSxzPWdDKGkpLHtoYW5kbGVJbnB1dEtleURvd246bCxzZXRJbnB1dFJlZjpkfT1PQygpLHtlbnRyaWVzOmMsaHVtYW5FZGl0ZWRIb3Vyczp1LGlzRGlydHk6cCxsb2FkaW5nOmYsc2F2ZU5vdzp5LHNjaGVkdWxlU2F2ZTp2LHNldEVudHJpZXM6dyxzZXRIdW1hbkVkaXRlZEhvdXJzOmd9PVRDKHthcHA6dCxub3RlTmFtZTpzfSk7REMoe2FnZW5kYVRhc2tzOmUsY3VycmVudERhdGU6cixodW1hbkVkaXRlZEhvdXJzOnUsbG9hZGluZzpmLHNldEVudHJpZXM6d30pLEFDKHtjYWxlbmRhckV2ZW50czpuLGN1cnJlbnREYXRlOnIsaHVtYW5FZGl0ZWRIb3Vyczp1LGxvYWRpbmc6ZixzZXRFbnRyaWVzOnd9KSxNQyh7Y3VycmVudERhdGU6cixsb2FkaW5nOmYsbm90ZWJvb2tSZWY6YX0pLGx0KGhrLCFmJiZuIT09bnVsbCk7bGV0IGg9KDAsSGUudXNlQ2FsbGJhY2spKCgpPT57dihoQyl9LFt2XSksYj0oMCxIZS51c2VDYWxsYmFjaykoKG0sUyk9Pnt3KHg9Pih7Li4ueCxbbV06U30pKSxnKHg9Pm5ldyBTZXQoWy4uLngsbV0pKSx2KCl9LFt2LHcsZ10pO3JldHVybigwLGRyLmpzeCkoYWUse2hlYWRlckFjdGlvbnM6KDAsZHIuanN4KShSQyx7aXNEaXJ0eTpwLG9uU2F2ZUNsaWNrOnl9KSxzdWJ0aXRsZTp2ayhpKSx3aWRnZXRJZDpoayxjaGlsZHJlbjooMCxkci5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImRheS1za2V0Y2gtbm90ZWJvb2siLHJlZjphLGNoaWxkcmVuOmY/KDAsZHIuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXktc2tldGNoLWxvYWRpbmciLGNoaWxkcmVuOiJMb2FkaW5nXHUyMDI2In0pOkNvLm1hcChtPT4oMCxkci5qc3gpKElDLHtlbnRyaWVzOmMsaGFuZGxlQmx1cjpoLGhhbmRsZUlucHV0Q2hhbmdlOmIsaGFuZGxlSW5wdXRLZXlEb3duOmwsaG91cjptLHNldElucHV0UmVmOmQsdGltZUZvcm1hdDpvfSxtKSl9KX0pfXZhciBkYT1QKGZlKCkpO3ZhciBKcj1QKCQoKSksUEM9ImRlYnVnLWNvbnNvbGUiO2Z1bmN0aW9uIExDKGUpe3JldHVybiBlLm1hcCh0PT57aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiB0O2lmKHQgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm5gJHt0Lm5hbWV9OiAke3QubWVzc2FnZX1gO3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCl9Y2F0Y2h7cmV0dXJuIFN0cmluZyh0KX19KS5qb2luKCIgIil9ZnVuY3Rpb24gTW0oKXtsZXRbZSx0XT0oMCxkYS51c2VTdGF0ZSkoKCk9PnF3KCkpLG49KDAsZGEudXNlUmVmKShudWxsKTtyZXR1cm4oMCxkYS51c2VFZmZlY3QpKCgpPT57ZnVuY3Rpb24gYShpKXt0KHM9PntsZXQgbD1bLi4ucyxpXTtyZXR1cm4gbC5sZW5ndGg+MjAwP2wuc2xpY2UoLTIwMCk6bH0pfXJldHVybiBYdyhhKSwoKT0+JHcoYSl9LFtdKSwoMCxkYS51c2VFZmZlY3QpKCgpPT57bi5jdXJyZW50JiYobi5jdXJyZW50LnNjcm9sbFRvcD1uLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0KX0sW2VdKSwoMCxKci5qc3gpKGFlLHt3aWRnZXRJZDpQQyxoZWFkZXJBY3Rpb25zOigwLEpyLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToiZGVidWctY29uc29sZV9fY2xlYXItYnV0dG9uIix0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PnQoW10pLHRpdGxlOiJDbGVhciBsb2cgZW50cmllcyIsY2hpbGRyZW46IkNsZWFyIn0pLGNoaWxkcmVuOigwLEpyLmpzeCkoImRpdiIse2NsYXNzTmFtZToiZGVidWctY29uc29sZSIscmVmOm4sY2hpbGRyZW46ZS5sZW5ndGg9PT0wPygwLEpyLmpzeCkoImRpdiIse2NsYXNzTmFtZToiZGVidWctY29uc29sZV9fZW1wdHkiLGNoaWxkcmVuOiJObyBsb2cgbWVzc2FnZXMgeWV0LiBFbmFibGUgQ29uc29sZSBMb2dnaW5nIGluIFNldHRpbmdzIHRvIHN0YXJ0IGNhcHR1cmluZyBtZXNzYWdlcy4ifSk6ZS5tYXAoYT0+KDAsSnIuanN4cykoImRpdiIse2NsYXNzTmFtZToiZGVidWctY29uc29sZV9fZW50cnkiLGNoaWxkcmVuOlsoMCxKci5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJkZWJ1Zy1jb25zb2xlX190aW1lc3RhbXAiLGNoaWxkcmVuOm5ldyBEYXRlKGEudHMpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMTEsMjMpfSksKDAsSnIuanN4KSgic3BhbiIse2NsYXNzTmFtZToiZGVidWctY29uc29sZV9fbWVzc2FnZSIsY2hpbGRyZW46TEMoYS5hcmdzKX0pXX0sYS5pZCkpfSl9KX12YXIgT209e307KGZ1bmN0aW9uIGUodCxuLHIsbyl7dmFyIGE9ISEodC5Xb3JrZXImJnQuQmxvYiYmdC5Qcm9taXNlJiZ0Lk9mZnNjcmVlbkNhbnZhcyYmdC5PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQmJnQuSFRNTENhbnZhc0VsZW1lbnQmJnQuSFRNTENhbnZhc0VsZW1lbnQucHJvdG90eXBlLnRyYW5zZmVyQ29udHJvbFRvT2Zmc2NyZWVuJiZ0LlVSTCYmdC5VUkwuY3JlYXRlT2JqZWN0VVJMKSxpPXR5cGVvZiBQYXRoMkQ9PSJmdW5jdGlvbiImJnR5cGVvZiBET01NYXRyaXg9PSJmdW5jdGlvbiIscz1mdW5jdGlvbigpe2lmKCF0Lk9mZnNjcmVlbkNhbnZhcylyZXR1cm4hMTt0cnl7dmFyIEQ9bmV3IE9mZnNjcmVlbkNhbnZhcygxLDEpLE49RC5nZXRDb250ZXh0KCIyZCIpO04uZmlsbFJlY3QoMCwwLDEsMSk7dmFyIF89RC50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKTtOLmNyZWF0ZVBhdHRlcm4oXywibm8tcmVwZWF0Iil9Y2F0Y2h7cmV0dXJuITF9cmV0dXJuITB9KCk7ZnVuY3Rpb24gbCgpe31mdW5jdGlvbiBkKEQpe3ZhciBOPW4uZXhwb3J0cy5Qcm9taXNlLF89TiE9PXZvaWQgMD9OOnQuUHJvbWlzZTtyZXR1cm4gdHlwZW9mIF89PSJmdW5jdGlvbiI/bmV3IF8oRCk6KEQobCxsKSxudWxsKX12YXIgYz1mdW5jdGlvbihELE4pe3JldHVybnt0cmFuc2Zvcm06ZnVuY3Rpb24oXyl7aWYoRClyZXR1cm4gXztpZihOLmhhcyhfKSlyZXR1cm4gTi5nZXQoXyk7dmFyIEc9bmV3IE9mZnNjcmVlbkNhbnZhcyhfLndpZHRoLF8uaGVpZ2h0KSxZPUcuZ2V0Q29udGV4dCgiMmQiKTtyZXR1cm4gWS5kcmF3SW1hZ2UoXywwLDApLE4uc2V0KF8sRyksR30sY2xlYXI6ZnVuY3Rpb24oKXtOLmNsZWFyKCl9fX0ocyxuZXcgTWFwKSx1PWZ1bmN0aW9uKCl7dmFyIEQ9TWF0aC5mbG9vcigxNi42NjY2NjY2NjY2NjY2NjgpLE4sXyxHPXt9LFk9MDtyZXR1cm4gdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT09ImZ1bmN0aW9uIiYmdHlwZW9mIGNhbmNlbEFuaW1hdGlvbkZyYW1lPT0iZnVuY3Rpb24iPyhOPWZ1bmN0aW9uKGope3ZhciBlZT1NYXRoLnJhbmRvbSgpO3JldHVybiBHW2VlXT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gcShyZSl7WT09PXJlfHxZK0QtMTxyZT8oWT1yZSxkZWxldGUgR1tlZV0saigpKTpHW2VlXT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocSl9KSxlZX0sXz1mdW5jdGlvbihqKXtHW2pdJiZjYW5jZWxBbmltYXRpb25GcmFtZShHW2pdKX0pOihOPWZ1bmN0aW9uKGope3JldHVybiBzZXRUaW1lb3V0KGosRCl9LF89ZnVuY3Rpb24oail7cmV0dXJuIGNsZWFyVGltZW91dChqKX0pLHtmcmFtZTpOLGNhbmNlbDpffX0oKSxwPWZ1bmN0aW9uKCl7dmFyIEQsTixfPXt9O2Z1bmN0aW9uIEcoWSl7ZnVuY3Rpb24gaihlZSxxKXtZLnBvc3RNZXNzYWdlKHtvcHRpb25zOmVlfHx7fSxjYWxsYmFjazpxfSl9WS5pbml0PWZ1bmN0aW9uKHEpe3ZhciByZT1xLnRyYW5zZmVyQ29udHJvbFRvT2Zmc2NyZWVuKCk7WS5wb3N0TWVzc2FnZSh7Y2FudmFzOnJlfSxbcmVdKX0sWS5maXJlPWZ1bmN0aW9uKHEscmUseWUpe2lmKE4pcmV0dXJuIGoocSxudWxsKSxOO3ZhciBiZT1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtyZXR1cm4gTj1kKGZ1bmN0aW9uKHBlKXtmdW5jdGlvbiB3ZShCZSl7QmUuZGF0YS5jYWxsYmFjaz09PWJlJiYoZGVsZXRlIF9bYmVdLFkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsd2UpLE49bnVsbCxjLmNsZWFyKCkseWUoKSxwZSgpKX1ZLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHdlKSxqKHEsYmUpLF9bYmVdPXdlLmJpbmQobnVsbCx7ZGF0YTp7Y2FsbGJhY2s6YmV9fSl9KSxOfSxZLnJlc2V0PWZ1bmN0aW9uKCl7WS5wb3N0TWVzc2FnZSh7cmVzZXQ6ITB9KTtmb3IodmFyIHEgaW4gXylfW3FdKCksZGVsZXRlIF9bcV19fXJldHVybiBmdW5jdGlvbigpe2lmKEQpcmV0dXJuIEQ7aWYoIXImJmEpe3ZhciBZPVsidmFyIENPTkZFVFRJLCBTSVpFID0ge30sIG1vZHVsZSA9IHt9OyIsIigiK2UudG9TdHJpbmcoKSsiKSh0aGlzLCBtb2R1bGUsIHRydWUsIFNJWkUpOyIsIm9ubWVzc2FnZSA9IGZ1bmN0aW9uKG1zZykgeyIsIiAgaWYgKG1zZy5kYXRhLm9wdGlvbnMpIHsiLCIgICAgQ09ORkVUVEkobXNnLmRhdGEub3B0aW9ucykudGhlbihmdW5jdGlvbiAoKSB7IiwiICAgICAgaWYgKG1zZy5kYXRhLmNhbGxiYWNrKSB7IiwiICAgICAgICBwb3N0TWVzc2FnZSh7IGNhbGxiYWNrOiBtc2cuZGF0YS5jYWxsYmFjayB9KTsiLCIgICAgICB9IiwiICAgIH0pOyIsIiAgfSBlbHNlIGlmIChtc2cuZGF0YS5yZXNldCkgeyIsIiAgICBDT05GRVRUSSAmJiBDT05GRVRUSS5yZXNldCgpOyIsIiAgfSBlbHNlIGlmIChtc2cuZGF0YS5yZXNpemUpIHsiLCIgICAgU0laRS53aWR0aCA9IG1zZy5kYXRhLnJlc2l6ZS53aWR0aDsiLCIgICAgU0laRS5oZWlnaHQgPSBtc2cuZGF0YS5yZXNpemUuaGVpZ2h0OyIsIiAgfSBlbHNlIGlmIChtc2cuZGF0YS5jYW52YXMpIHsiLCIgICAgU0laRS53aWR0aCA9IG1zZy5kYXRhLmNhbnZhcy53aWR0aDsiLCIgICAgU0laRS5oZWlnaHQgPSBtc2cuZGF0YS5jYW52YXMuaGVpZ2h0OyIsIiAgICBDT05GRVRUSSA9IG1vZHVsZS5leHBvcnRzLmNyZWF0ZShtc2cuZGF0YS5jYW52YXMpOyIsIiAgfSIsIn0iXS5qb2luKGAKYCk7dHJ5e0Q9bmV3IFdvcmtlcihVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtZXSkpKX1jYXRjaChqKXtyZXR1cm4gdHlwZW9mIGNvbnNvbGU8InUiJiZ0eXBlb2YgY29uc29sZS53YXJuPT0iZnVuY3Rpb24iJiZjb25zb2xlLndhcm4oIlx1ezFGMzhBfSBDb3VsZCBub3QgbG9hZCB3b3JrZXIiLGopLG51bGx9RyhEKX1yZXR1cm4gRH19KCksZj17cGFydGljbGVDb3VudDo1MCxhbmdsZTo5MCxzcHJlYWQ6NDUsc3RhcnRWZWxvY2l0eTo0NSxkZWNheTouOSxncmF2aXR5OjEsZHJpZnQ6MCx0aWNrczoyMDAseDouNSx5Oi41LHNoYXBlczpbInNxdWFyZSIsImNpcmNsZSJdLHpJbmRleDoxMDAsY29sb3JzOlsiIzI2Y2NmZiIsIiNhMjVhZmQiLCIjZmY1ZTdlIiwiIzg4ZmY1YSIsIiNmY2ZmNDIiLCIjZmZhNjJkIiwiI2ZmMzZmZiJdLGRpc2FibGVGb3JSZWR1Y2VkTW90aW9uOiExLHNjYWxhcjoxfTtmdW5jdGlvbiB5KEQsTil7cmV0dXJuIE4/TihEKTpEfWZ1bmN0aW9uIHYoRCl7cmV0dXJuIEQhPW51bGx9ZnVuY3Rpb24gdyhELE4sXyl7cmV0dXJuIHkoRCYmdihEW05dKT9EW05dOmZbTl0sXyl9ZnVuY3Rpb24gZyhEKXtyZXR1cm4gRDwwPzA6TWF0aC5mbG9vcihEKX1mdW5jdGlvbiBoKEQsTil7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSooTi1EKSkrRH1mdW5jdGlvbiBiKEQpe3JldHVybiBwYXJzZUludChELDE2KX1mdW5jdGlvbiBtKEQpe3JldHVybiBELm1hcChTKX1mdW5jdGlvbiBTKEQpe3ZhciBOPVN0cmluZyhEKS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksIiIpO3JldHVybiBOLmxlbmd0aDw2JiYoTj1OWzBdK05bMF0rTlsxXStOWzFdK05bMl0rTlsyXSkse3I6YihOLnN1YnN0cmluZygwLDIpKSxnOmIoTi5zdWJzdHJpbmcoMiw0KSksYjpiKE4uc3Vic3RyaW5nKDQsNikpfX1mdW5jdGlvbiB4KEQpe3ZhciBOPXcoRCwib3JpZ2luIixPYmplY3QpO3JldHVybiBOLng9dyhOLCJ4IixOdW1iZXIpLE4ueT13KE4sInkiLE51bWJlciksTn1mdW5jdGlvbiBFKEQpe0Qud2lkdGg9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLEQuaGVpZ2h0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHR9ZnVuY3Rpb24gVChEKXt2YXIgTj1ELmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO0Qud2lkdGg9Ti53aWR0aCxELmhlaWdodD1OLmhlaWdodH1mdW5jdGlvbiBBKEQpe3ZhciBOPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiBOLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsTi5zdHlsZS50b3A9IjBweCIsTi5zdHlsZS5sZWZ0PSIwcHgiLE4uc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsTi5zdHlsZS56SW5kZXg9RCxOfWZ1bmN0aW9uIEMoRCxOLF8sRyxZLGosZWUscSxyZSl7RC5zYXZlKCksRC50cmFuc2xhdGUoTixfKSxELnJvdGF0ZShqKSxELnNjYWxlKEcsWSksRC5hcmMoMCwwLDEsZWUscSxyZSksRC5yZXN0b3JlKCl9ZnVuY3Rpb24gTChEKXt2YXIgTj1ELmFuZ2xlKihNYXRoLlBJLzE4MCksXz1ELnNwcmVhZCooTWF0aC5QSS8xODApO3JldHVybnt4OkQueCx5OkQueSx3b2JibGU6TWF0aC5yYW5kb20oKSoxMCx3b2JibGVTcGVlZDpNYXRoLm1pbiguMTEsTWF0aC5yYW5kb20oKSouMSsuMDUpLHZlbG9jaXR5OkQuc3RhcnRWZWxvY2l0eSouNStNYXRoLnJhbmRvbSgpKkQuc3RhcnRWZWxvY2l0eSxhbmdsZTJEOi1OKyguNSpfLU1hdGgucmFuZG9tKCkqXyksdGlsdEFuZ2xlOihNYXRoLnJhbmRvbSgpKiguNzUtLjI1KSsuMjUpKk1hdGguUEksY29sb3I6RC5jb2xvcixzaGFwZTpELnNoYXBlLHRpY2s6MCx0b3RhbFRpY2tzOkQudGlja3MsZGVjYXk6RC5kZWNheSxkcmlmdDpELmRyaWZ0LHJhbmRvbTpNYXRoLnJhbmRvbSgpKzIsdGlsdFNpbjowLHRpbHRDb3M6MCx3b2JibGVYOjAsd29iYmxlWTowLGdyYXZpdHk6RC5ncmF2aXR5KjMsb3ZhbFNjYWxhcjouNixzY2FsYXI6RC5zY2FsYXIsZmxhdDpELmZsYXR9fWZ1bmN0aW9uIE8oRCxOKXtOLngrPU1hdGguY29zKE4uYW5nbGUyRCkqTi52ZWxvY2l0eStOLmRyaWZ0LE4ueSs9TWF0aC5zaW4oTi5hbmdsZTJEKSpOLnZlbG9jaXR5K04uZ3Jhdml0eSxOLnZlbG9jaXR5Kj1OLmRlY2F5LE4uZmxhdD8oTi53b2JibGU9MCxOLndvYmJsZVg9Ti54KzEwKk4uc2NhbGFyLE4ud29iYmxlWT1OLnkrMTAqTi5zY2FsYXIsTi50aWx0U2luPTAsTi50aWx0Q29zPTAsTi5yYW5kb209MSk6KE4ud29iYmxlKz1OLndvYmJsZVNwZWVkLE4ud29iYmxlWD1OLngrMTAqTi5zY2FsYXIqTWF0aC5jb3MoTi53b2JibGUpLE4ud29iYmxlWT1OLnkrMTAqTi5zY2FsYXIqTWF0aC5zaW4oTi53b2JibGUpLE4udGlsdEFuZ2xlKz0uMSxOLnRpbHRTaW49TWF0aC5zaW4oTi50aWx0QW5nbGUpLE4udGlsdENvcz1NYXRoLmNvcyhOLnRpbHRBbmdsZSksTi5yYW5kb209TWF0aC5yYW5kb20oKSsyKTt2YXIgXz1OLnRpY2srKy9OLnRvdGFsVGlja3MsRz1OLngrTi5yYW5kb20qTi50aWx0Q29zLFk9Ti55K04ucmFuZG9tKk4udGlsdFNpbixqPU4ud29iYmxlWCtOLnJhbmRvbSpOLnRpbHRDb3MsZWU9Ti53b2JibGVZK04ucmFuZG9tKk4udGlsdFNpbjtpZihELmZpbGxTdHlsZT0icmdiYSgiK04uY29sb3IucisiLCAiK04uY29sb3IuZysiLCAiK04uY29sb3IuYisiLCAiKygxLV8pKyIpIixELmJlZ2luUGF0aCgpLGkmJk4uc2hhcGUudHlwZT09PSJwYXRoIiYmdHlwZW9mIE4uc2hhcGUucGF0aD09InN0cmluZyImJkFycmF5LmlzQXJyYXkoTi5zaGFwZS5tYXRyaXgpKUQuZmlsbChuZShOLnNoYXBlLnBhdGgsTi5zaGFwZS5tYXRyaXgsTi54LE4ueSxNYXRoLmFicyhqLUcpKi4xLE1hdGguYWJzKGVlLVkpKi4xLE1hdGguUEkvMTAqTi53b2JibGUpKTtlbHNlIGlmKE4uc2hhcGUudHlwZT09PSJiaXRtYXAiKXt2YXIgcT1NYXRoLlBJLzEwKk4ud29iYmxlLHJlPU1hdGguYWJzKGotRykqLjEseWU9TWF0aC5hYnMoZWUtWSkqLjEsYmU9Ti5zaGFwZS5iaXRtYXAud2lkdGgqTi5zY2FsYXIscGU9Ti5zaGFwZS5iaXRtYXAuaGVpZ2h0Kk4uc2NhbGFyLHdlPW5ldyBET01NYXRyaXgoW01hdGguY29zKHEpKnJlLE1hdGguc2luKHEpKnJlLC1NYXRoLnNpbihxKSp5ZSxNYXRoLmNvcyhxKSp5ZSxOLngsTi55XSk7d2UubXVsdGlwbHlTZWxmKG5ldyBET01NYXRyaXgoTi5zaGFwZS5tYXRyaXgpKTt2YXIgQmU9RC5jcmVhdGVQYXR0ZXJuKGMudHJhbnNmb3JtKE4uc2hhcGUuYml0bWFwKSwibm8tcmVwZWF0Iik7QmUuc2V0VHJhbnNmb3JtKHdlKSxELmdsb2JhbEFscGhhPTEtXyxELmZpbGxTdHlsZT1CZSxELmZpbGxSZWN0KE4ueC1iZS8yLE4ueS1wZS8yLGJlLHBlKSxELmdsb2JhbEFscGhhPTF9ZWxzZSBpZihOLnNoYXBlPT09ImNpcmNsZSIpRC5lbGxpcHNlP0QuZWxsaXBzZShOLngsTi55LE1hdGguYWJzKGotRykqTi5vdmFsU2NhbGFyLE1hdGguYWJzKGVlLVkpKk4ub3ZhbFNjYWxhcixNYXRoLlBJLzEwKk4ud29iYmxlLDAsMipNYXRoLlBJKTpDKEQsTi54LE4ueSxNYXRoLmFicyhqLUcpKk4ub3ZhbFNjYWxhcixNYXRoLmFicyhlZS1ZKSpOLm92YWxTY2FsYXIsTWF0aC5QSS8xMCpOLndvYmJsZSwwLDIqTWF0aC5QSSk7ZWxzZSBpZihOLnNoYXBlPT09InN0YXIiKWZvcih2YXIgdWU9TWF0aC5QSS8yKjMsVmU9NCpOLnNjYWxhcixsZT04Kk4uc2NhbGFyLERlPU4ueCxHZT1OLnksWGU9NSxaPU1hdGguUEkvWGU7WGUtLTspRGU9Ti54K01hdGguY29zKHVlKSpsZSxHZT1OLnkrTWF0aC5zaW4odWUpKmxlLEQubGluZVRvKERlLEdlKSx1ZSs9WixEZT1OLngrTWF0aC5jb3ModWUpKlZlLEdlPU4ueStNYXRoLnNpbih1ZSkqVmUsRC5saW5lVG8oRGUsR2UpLHVlKz1aO2Vsc2UgRC5tb3ZlVG8oTWF0aC5mbG9vcihOLngpLE1hdGguZmxvb3IoTi55KSksRC5saW5lVG8oTWF0aC5mbG9vcihOLndvYmJsZVgpLE1hdGguZmxvb3IoWSkpLEQubGluZVRvKE1hdGguZmxvb3IoaiksTWF0aC5mbG9vcihlZSkpLEQubGluZVRvKE1hdGguZmxvb3IoRyksTWF0aC5mbG9vcihOLndvYmJsZVkpKTtyZXR1cm4gRC5jbG9zZVBhdGgoKSxELmZpbGwoKSxOLnRpY2s8Ti50b3RhbFRpY2tzfWZ1bmN0aW9uIFIoRCxOLF8sRyxZKXt2YXIgaj1OLnNsaWNlKCksZWU9RC5nZXRDb250ZXh0KCIyZCIpLHEscmUseWU9ZChmdW5jdGlvbihiZSl7ZnVuY3Rpb24gcGUoKXtxPXJlPW51bGwsZWUuY2xlYXJSZWN0KDAsMCxHLndpZHRoLEcuaGVpZ2h0KSxjLmNsZWFyKCksWSgpLGJlKCl9ZnVuY3Rpb24gd2UoKXtyJiYhKEcud2lkdGg9PT1vLndpZHRoJiZHLmhlaWdodD09PW8uaGVpZ2h0KSYmKEcud2lkdGg9RC53aWR0aD1vLndpZHRoLEcuaGVpZ2h0PUQuaGVpZ2h0PW8uaGVpZ2h0KSwhRy53aWR0aCYmIUcuaGVpZ2h0JiYoXyhEKSxHLndpZHRoPUQud2lkdGgsRy5oZWlnaHQ9RC5oZWlnaHQpLGVlLmNsZWFyUmVjdCgwLDAsRy53aWR0aCxHLmhlaWdodCksaj1qLmZpbHRlcihmdW5jdGlvbihCZSl7cmV0dXJuIE8oZWUsQmUpfSksai5sZW5ndGg/cT11LmZyYW1lKHdlKTpwZSgpfXE9dS5mcmFtZSh3ZSkscmU9cGV9KTtyZXR1cm57YWRkRmV0dGlzOmZ1bmN0aW9uKGJlKXtyZXR1cm4gaj1qLmNvbmNhdChiZSkseWV9LGNhbnZhczpELHByb21pc2U6eWUscmVzZXQ6ZnVuY3Rpb24oKXtxJiZ1LmNhbmNlbChxKSxyZSYmcmUoKX19fWZ1bmN0aW9uIEYoRCxOKXt2YXIgXz0hRCxHPSEhdyhOfHx7fSwicmVzaXplIiksWT0hMSxqPXcoTiwiZGlzYWJsZUZvclJlZHVjZWRNb3Rpb24iLEJvb2xlYW4pLGVlPWEmJiEhdyhOfHx7fSwidXNlV29ya2VyIikscT1lZT9wKCk6bnVsbCxyZT1fP0U6VCx5ZT1EJiZxPyEhRC5fX2NvbmZldHRpX2luaXRpYWxpemVkOiExLGJlPXR5cGVvZiBtYXRjaE1lZGlhPT0iZnVuY3Rpb24iJiZtYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbikiKS5tYXRjaGVzLHBlO2Z1bmN0aW9uIHdlKHVlLFZlLGxlKXtmb3IodmFyIERlPXcodWUsInBhcnRpY2xlQ291bnQiLGcpLEdlPXcodWUsImFuZ2xlIixOdW1iZXIpLFhlPXcodWUsInNwcmVhZCIsTnVtYmVyKSxaPXcodWUsInN0YXJ0VmVsb2NpdHkiLE51bWJlciksQWU9dyh1ZSwiZGVjYXkiLE51bWJlciksVXQ9dyh1ZSwiZ3Jhdml0eSIsTnVtYmVyKSxlbj13KHVlLCJkcmlmdCIsTnVtYmVyKSxwcj13KHVlLCJjb2xvcnMiLG0pLEduPXcodWUsInRpY2tzIixOdW1iZXIpLFRyPXcodWUsInNoYXBlcyIpLERyPXcodWUsInNjYWxhciIpLFpyPSEhdyh1ZSwiZmxhdCIpLGhhPXgodWUpLFJvPURlLGVvPVtdLGJpPUQud2lkdGgqaGEueCx3aT1ELmhlaWdodCpoYS55O1JvLS07KWVvLnB1c2goTCh7eDpiaSx5OndpLGFuZ2xlOkdlLHNwcmVhZDpYZSxzdGFydFZlbG9jaXR5OlosY29sb3I6cHJbUm8lcHIubGVuZ3RoXSxzaGFwZTpUcltoKDAsVHIubGVuZ3RoKV0sdGlja3M6R24sZGVjYXk6QWUsZ3Jhdml0eTpVdCxkcmlmdDplbixzY2FsYXI6RHIsZmxhdDpacn0pKTtyZXR1cm4gcGU/cGUuYWRkRmV0dGlzKGVvKToocGU9UihELGVvLHJlLFZlLGxlKSxwZS5wcm9taXNlKX1mdW5jdGlvbiBCZSh1ZSl7dmFyIFZlPWp8fHcodWUsImRpc2FibGVGb3JSZWR1Y2VkTW90aW9uIixCb29sZWFuKSxsZT13KHVlLCJ6SW5kZXgiLE51bWJlcik7aWYoVmUmJmJlKXJldHVybiBkKGZ1bmN0aW9uKFope1ooKX0pO18mJnBlP0Q9cGUuY2FudmFzOl8mJiFEJiYoRD1BKGxlKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKEQpKSxHJiYheWUmJnJlKEQpO3ZhciBEZT17d2lkdGg6RC53aWR0aCxoZWlnaHQ6RC5oZWlnaHR9O3EmJiF5ZSYmcS5pbml0KEQpLHllPSEwLHEmJihELl9fY29uZmV0dGlfaW5pdGlhbGl6ZWQ9ITApO2Z1bmN0aW9uIEdlKCl7aWYocSl7dmFyIFo9e2dldEJvdW5kaW5nQ2xpZW50UmVjdDpmdW5jdGlvbigpe2lmKCFfKXJldHVybiBELmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfX07cmUoWikscS5wb3N0TWVzc2FnZSh7cmVzaXplOnt3aWR0aDpaLndpZHRoLGhlaWdodDpaLmhlaWdodH19KTtyZXR1cm59RGUud2lkdGg9RGUuaGVpZ2h0PW51bGx9ZnVuY3Rpb24gWGUoKXtwZT1udWxsLEcmJihZPSExLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixHZSkpLF8mJkQmJihkb2N1bWVudC5ib2R5LmNvbnRhaW5zKEQpJiZkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKEQpLEQ9bnVsbCx5ZT0hMSl9cmV0dXJuIEcmJiFZJiYoWT0hMCx0LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsR2UsITEpKSxxP3EuZmlyZSh1ZSxEZSxYZSk6d2UodWUsRGUsWGUpfXJldHVybiBCZS5yZXNldD1mdW5jdGlvbigpe3EmJnEucmVzZXQoKSxwZSYmcGUucmVzZXQoKX0sQmV9dmFyIFY7ZnVuY3Rpb24geigpe3JldHVybiBWfHwoVj1GKG51bGwse3VzZVdvcmtlcjohMCxyZXNpemU6ITB9KSksVn1mdW5jdGlvbiBuZShELE4sXyxHLFksaixlZSl7dmFyIHE9bmV3IFBhdGgyRChEKSxyZT1uZXcgUGF0aDJEO3JlLmFkZFBhdGgocSxuZXcgRE9NTWF0cml4KE4pKTt2YXIgeWU9bmV3IFBhdGgyRDtyZXR1cm4geWUuYWRkUGF0aChyZSxuZXcgRE9NTWF0cml4KFtNYXRoLmNvcyhlZSkqWSxNYXRoLnNpbihlZSkqWSwtTWF0aC5zaW4oZWUpKmosTWF0aC5jb3MoZWUpKmosXyxHXSkpLHllfWZ1bmN0aW9uIE0oRCl7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJwYXRoIGNvbmZldHRpIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlciIpO3ZhciBOLF87dHlwZW9mIEQ9PSJzdHJpbmciP049RDooTj1ELnBhdGgsXz1ELm1hdHJpeCk7dmFyIEc9bmV3IFBhdGgyRChOKSxZPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGo9WS5nZXRDb250ZXh0KCIyZCIpO2lmKCFfKXtmb3IodmFyIGVlPTFlMyxxPWVlLHJlPWVlLHllPTAsYmU9MCxwZSx3ZSxCZT0wO0JlPGVlO0JlKz0yKWZvcih2YXIgdWU9MDt1ZTxlZTt1ZSs9MilqLmlzUG9pbnRJblBhdGgoRyxCZSx1ZSwibm9uemVybyIpJiYocT1NYXRoLm1pbihxLEJlKSxyZT1NYXRoLm1pbihyZSx1ZSkseWU9TWF0aC5tYXgoeWUsQmUpLGJlPU1hdGgubWF4KGJlLHVlKSk7cGU9eWUtcSx3ZT1iZS1yZTt2YXIgVmU9MTAsbGU9TWF0aC5taW4oVmUvcGUsVmUvd2UpO189W2xlLDAsMCxsZSwtTWF0aC5yb3VuZChwZS8yK3EpKmxlLC1NYXRoLnJvdW5kKHdlLzIrcmUpKmxlXX1yZXR1cm57dHlwZToicGF0aCIscGF0aDpOLG1hdHJpeDpffX1mdW5jdGlvbiBXKEQpe3ZhciBOLF89MSxHPSIjMDAwMDAwIixZPSciQXBwbGUgQ29sb3IgRW1vamkiLCAiU2Vnb2UgVUkgRW1vamkiLCAiU2Vnb2UgVUkgU3ltYm9sIiwgIk5vdG8gQ29sb3IgRW1vamkiLCAiRW1vamlPbmUgQ29sb3IiLCAiQW5kcm9pZCBFbW9qaSIsICJUd2Vtb2ppIE1vemlsbGEiLCAic3lzdGVtIGVtb2ppIiwgc2Fucy1zZXJpZic7dHlwZW9mIEQ9PSJzdHJpbmciP049RDooTj1ELnRleHQsXz0ic2NhbGFyImluIEQ/RC5zY2FsYXI6XyxZPSJmb250RmFtaWx5ImluIEQ/RC5mb250RmFtaWx5OlksRz0iY29sb3IiaW4gRD9ELmNvbG9yOkcpO3ZhciBqPTEwKl8sZWU9IiIraisicHggIitZLHE9bmV3IE9mZnNjcmVlbkNhbnZhcyhqLGopLHJlPXEuZ2V0Q29udGV4dCgiMmQiKTtyZS5mb250PWVlO3ZhciB5ZT1yZS5tZWFzdXJlVGV4dChOKSxiZT1NYXRoLmNlaWwoeWUuYWN0dWFsQm91bmRpbmdCb3hSaWdodCt5ZS5hY3R1YWxCb3VuZGluZ0JveExlZnQpLHBlPU1hdGguY2VpbCh5ZS5hY3R1YWxCb3VuZGluZ0JveEFzY2VudCt5ZS5hY3R1YWxCb3VuZGluZ0JveERlc2NlbnQpLHdlPTIsQmU9eWUuYWN0dWFsQm91bmRpbmdCb3hMZWZ0K3dlLHVlPXllLmFjdHVhbEJvdW5kaW5nQm94QXNjZW50K3dlO2JlKz13ZSt3ZSxwZSs9d2Urd2UscT1uZXcgT2Zmc2NyZWVuQ2FudmFzKGJlLHBlKSxyZT1xLmdldENvbnRleHQoIjJkIikscmUuZm9udD1lZSxyZS5maWxsU3R5bGU9RyxyZS5maWxsVGV4dChOLEJlLHVlKTt2YXIgVmU9MS9fO3JldHVybnt0eXBlOiJiaXRtYXAiLGJpdG1hcDpxLnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpLG1hdHJpeDpbVmUsMCwwLFZlLC1iZSpWZS8yLC1wZSpWZS8yXX19bi5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHooKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG4uZXhwb3J0cy5yZXNldD1mdW5jdGlvbigpe3ooKS5yZXNldCgpfSxuLmV4cG9ydHMuY3JlYXRlPUYsbi5leHBvcnRzLnNoYXBlRnJvbVBhdGg9TSxuLmV4cG9ydHMuc2hhcGVGcm9tVGV4dD1XfSkoZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXN8fHt9fSgpLE9tLCExKTt2YXIgd2M9T20uZXhwb3J0cywkNT1PbS5leHBvcnRzLmNyZWF0ZTt2YXIgU3I9IkFtcGxlIEFnZW50IFBybyIsSW09IlhyeGhHV1BiYm1nU0JKNmZTQ1ZuczU3ayI7ZnVuY3Rpb24ga2MoKXtsZXQgZT1MZSgpW0IuTExNX1BST1ZJREVSX01PREVMXTtpZighZXx8ZT09PSJub25lIilyZXR1cm5bXTtsZXQgdD1XcihlKXx8ZSxuPU5tW3RdO2lmKCFufHxuLmxlbmd0aD09PTApcmV0dXJuW107bGV0IHI9Y25bdF07cmV0dXJuIHI/W3IsLi4ubi5maWx0ZXIobz0+byE9PXIpXTpbLi4ubl19ZnVuY3Rpb24gYmsoZSx0KXtsZXQgbj1MZSgpLHI9S3QodCk7aWYociYmbltyXSlyZXR1cm4gbltyXS50cmltKCk7bGV0IG89blsiTExNIEFQSSBLZXkiXTtpZihvKXJldHVybiBvLnRyaW0oKTtpZihJYil0aHJvdyBuZXcgRXJyb3IoYENvdWxkbnQgZmluZCBhICR7dH0ga2V5IGluICR7SlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMobikpfWApO3JldHVybiBlLmFsZXJ0KCJQbGVhc2UgY29uZmlndXJlIHlvdXIgQVBJIGtleSBpbiBwbHVnaW4gc2V0dGluZ3MuIiksbnVsbH1mdW5jdGlvbiB3ayhlLHQpe2xldCBuPU1vKGUpLHI9RW1bbl07cmV0dXJuIHI9ci5yZXBsYWNlKCJ7bW9kZWwtbmFtZX0iLGUpLG49PT0iZ2VtaW5pIiYmKHI9YCR7cn0/a2V5PSR7dH1gKSxyfWZ1bmN0aW9uIE1vKGUpe2ZvcihsZXRbdCxuXW9mIE9iamVjdC5lbnRyaWVzKE5tKSlpZihuLmluY2x1ZGVzKGUpKXJldHVybiB0O3Rocm93IG5ldyBFcnJvcihgTW9kZWwgJHtlfSBub3QgZm91bmQgaW4gYW55IHByb3ZpZGVyYCl9ZnVuY3Rpb24gaWkoZSl7cmV0dXJue2FudGhyb3BpYzoiQW50aHJvcGljIixkZWVwc2VlazoiRGVlcFNlZWsiLGdlbWluaToiR2VtaW5pIixncm9rOiJHcm9rIixvcGVuYWk6Ik9wZW5BSSIscGVycGxleGl0eToiUGVycGxleGl0eSJ9W2VdfHxlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSl9ZnVuY3Rpb24ga2soZSl7bGV0IHQsbj1lLnRyaW0oKSxyPW4uaW5kZXhPZigiWyIpLG89bi5pbmRleE9mKCJ7IiksYT1uLmluY2x1ZGVzKCJ9IiksaT1uLmluY2x1ZGVzKCJdIikscz0hMSxsPS0xO2EmJm89PT0tMSYmKGU9YHske2V9YCxvPTApLGkmJnI9PT0tMSYmKGU9YFske2V9YCxyPTApLHI9ZS5pbmRleE9mKCJbIiksbz1lLmluZGV4T2YoInsiKSxyIT09LTEmJihvPT09LTF8fHI8byk/KHM9ITAsbD1yKTpvIT09LTE/KHM9ITEsbD1vKTooZT1geyR7ZX19YCxsPTAscz0hMSk7bGV0IGQ9cz8iXSI6In0iLGM9ZS5sYXN0SW5kZXhPZihkKTtpZihjPT09LTEpe2VbZS5sZW5ndGgtMV09PT0iLCImJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMSkpO2xldCB1PWUuaW5jbHVkZXMoIlsiKSYmIWUuaW5jbHVkZXMoIl0iKSxwPWUuaW5jbHVkZXMoInsiKSYmIWUuaW5jbHVkZXMoIn0iKTt1JiZwP2UrPSJ9XSI6dT9lKz0iXSI6cD9lKz0ifSI6ZT1zP2Ake2V9XWA6YCR7ZX19YH1lbHNlIGU9ZS5zdWJzdHJpbmcobCxjKzEpO3RyeXtyZXR1cm4gdD1KU09OLnBhcnNlKGUpLHR9Y2F0Y2godSl7bGV0IHA9ZTtlPV9DKGUpLGsoYEZhaWxlZCB0byBwYXJzZSBqc29uVGV4dCBTVEFSVDoKJHtwfQpFTkQKIGR1ZSB0byAke3V9LiBBdHRlbXB0ZWQgcmViYWxhbmNlIHlpZWxkZWQ6ICR7ZX0gKG9yaWdpbmFsIHNpemUgJHtwLmxlbmd0aHx8IihudWxsKSJ9LCByZWJhbGFuY2Ugc2l6ZSAke2U/Lmxlbmd0aHx8IigwKSJ9KWApO3RyeXtyZXR1cm4gdD1KU09OLnBhcnNlKGUpLHR9Y2F0Y2goeSl7aygiUmViYWxhbmNlZCBqc29uVGV4dCBzdGlsbCBmYWlscyIseSl9bGV0IGY9ZS5yZXBsYWNlKC8iIiIvZywnIlxcIiInKS5yZXBsYWNlKC8iXG4vZywnIlxcbicpO2lmKGY9Zi5yZXBsYWNlKC8oW3ssXVxzKikoW2EtekEtWl8kXVthLXpBLVowLTlfJF0qKSI6L2csJyQxIiQyIjonKSxmPWYucmVwbGFjZSgvXG5ccypbJ+KAnOKAnV0vZyxgCiJgKS5yZXBsYWNlKC9bJ+KAnOKAnV0sXHMqXG4vZyxgIiwKYCkucmVwbGFjZSgvWyfigJzigJ1dXHMqKFtcblxdXSkvLCciJDEnKSxmIT09ZSl0cnl7cmV0dXJuIHQ9SlNPTi5wYXJzZShmKSx0fWNhdGNoKHkpe2soIlJlZm9ybWF0dGVkIHRleHQgc3RpbGwgZmFpbHMiLHkpfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB4YyhlKXtyZXR1cm5gaHR0cHM6Ly93d3cuYW1wbGVub3RlLmNvbS9ub3Rlcy8ke2V9YH1mdW5jdGlvbiBfQyhlKXtsZXQgdD1lLmluZGV4T2YoInsiKTtpZih0PT09LTEpcmV0dXJuIG51bGw7bGV0IG49ZS5zdWJzdHJpbmcodCkudHJpbSgpLHI9W10sbz0iIjtmb3IobGV0IGEgb2YgbilpZihvKz1hLGE9PT0ieyI/ci5wdXNoKCJ9Iik6YT09PSJ9Ij9yW3IubGVuZ3RoLTFdPT09In0iJiZyLnBvcCgpOmE9PT0iWyI/ci5wdXNoKCJdIik6YT09PSJdIiYmcltyLmxlbmd0aC0xXT09PSJdIiYmci5wb3AoKSxyLmxlbmd0aD09PTApYnJlYWs7cmV0dXJuIHIubGVuZ3RoJiYoaygiRm91bmQiLHIubGVuZ3RoLCJjaGFyYWN0ZXJzIHRvIGFwcGVuZCB0byBiYWxhbmNlIixvLCIuIEFkZGluZyAiLHIucmV2ZXJzZSgpLmpvaW4oIiIpKSxvKz1yLnJldmVyc2UoKS5qb2luKCIiKSksb312YXIgeGs9MjtmdW5jdGlvbiBTYyhlKXtsZXQgdD1lLnRyaW0oKTt0LmluZGV4T2YoInsiKT09PS0xJiYodD0ieyIrdCk7bGV0IHI7dC5zcGxpdCgifXsiKS5sZW5ndGg+MT8ocj10LnNwbGl0KCJ9eyIpLm1hcChpPT5gJHtpWzBdPT09InsiPyIiOiJ7In0ke2l9JHtpW2kubGVuZ3RoLTFdPT09In0iPyIiOiJ9In1gKSxrKCJSZWNlaXZlZCBtdWx0aXBsZSByZXNwb25zZXMgZnJvbSBBSSwgZXZhbHVhdGluZyBlYWNoIG9mIixyKSk6cj1bdF07bGV0IGE9ci5tYXAoaT0+a2soaSkpLmZpbHRlcihpPT5pKTtpZihhLmxlbmd0aClpZihhLmxlbmd0aD4xKXtsZXQgaT1hWzBdO3JldHVybiBPYmplY3QuZW50cmllcyhpKS5mb3JFYWNoKChbcyxsXSk9Pntmb3IobGV0IGQgb2YgYS5zbGljZSgxKSl7bGV0IGM9ZFtzXTtjJiZBcnJheS5pc0FycmF5KGMpJiZBcnJheS5pc0FycmF5KGwpJiYoaVtzXT1bLi4ubmV3IFNldChbLi4ubCwuLi5jXSldLmZpbHRlcih1PT51KSl9fSksaX1lbHNlIHJldHVybiBhWzBdO3JldHVybiBudWxsfWZ1bmN0aW9uIFVDKGUsdCl7bGV0IG47c3dpdGNoKGUpe2Nhc2UiYW50aHJvcGljIjpuPXQ/LmNvbnRlbnQ/LmF0KDApPy50ZXh0O2JyZWFrO2Nhc2UiZ2VtaW5pIjpuPXQ/LmNhbmRpZGF0ZXM/LmF0KDApPy5jb250ZW50Py5wYXJ0cz8uYXQoMCk/LnRleHQ7YnJlYWs7Y2FzZSJvbGxhbWEiOm49dD8ubWVzc2FnZT8uY29udGVudHx8dD8ucmVzcG9uc2U7YnJlYWs7Y2FzZSJkZWVwc2VlayI6Y2FzZSJncm9rIjpjYXNlIm9wZW5haSI6Y2FzZSJwZXJwbGV4aXR5IjpkZWZhdWx0Om49dD8uY2hvaWNlcz8uYXQoMCk/Lm1lc3NhZ2U/LmNvbnRlbnR8fHQ/LmNob2ljZXM/LmF0KDApPy5tZXNzYWdlPy50b29sX2NhbGxzPy5hdCgwKT8uZnVuY3Rpb24/LmFyZ3VtZW50czticmVha31yZXR1cm4gbnx8ayhgQ291bGQgbm90IGV4dHJhY3QgY29udGVudCBmcm9tICR7ZX0gcmVzcG9uc2U6YCxKU09OLnN0cmluZ2lmeSh0LG51bGwsMikpLG58fG51bGx9YXN5bmMgZnVuY3Rpb24gU2soZSx0LG4scixvLGEse3RpbWVvdXRTZWNvbmRzOmk9MzB9PXt9KXtsZXQgcz1NbyhuKSxsO2lmKG8pbD1hd2FpdCBGQyhlLHQsbiwhMCxvKSxlLmFsZXJ0KGwse3Njcm9sbFRvRW5kOiEwfSk7ZWxzZSB0cnl7YXdhaXQgUHJvbWlzZS5yYWNlKFtuZXcgUHJvbWlzZShhc3luYyhjLHUpPT57bGV0IHA9YXdhaXQgdC5qc29uKCk7bD1VQyhzLHApLGMobCl9KSxuZXcgUHJvbWlzZSgoYyx1KT0+c2V0VGltZW91dCgoKT0+dShuZXcgRXJyb3IoYCR7c30gVGltZW91dGApKSxpKjFlMykpXSl9Y2F0Y2goYyl7dGhyb3cgaygiRmFpbGVkIHRvIHBhcnNlIHJlc3BvbnNlIGZyb20iLG4sImVycm9yIixjKSxjfWxldCBkPWw7cmV0dXJuIGw9U2MobCksIWF8fGEobCk/bDooZCYmaygiUmVjZWl2ZWQiLGQsImJ1dCBjb3VsZCBub3QgcGFyc2UgYXMgYSB2YWxpZCByZXN1bHQiKSxudWxsKX1hc3luYyBmdW5jdGlvbiBGQyhlLHQsbixyLG8pe3JldHVybiB0eXBlb2YgZ2xvYmFsPCJ1IiYmdHlwZW9mIGdsb2JhbC5mZXRjaDwidSI/YXdhaXQgekMoZSx0LG4scixvKTphd2FpdCBXQyhlLHQsbixyLG8pfWFzeW5jIGZ1bmN0aW9uIHpDKGUsdCxuLHIsbyl7bGV0IGE9dC5ib2R5LGk9ITEscz0iIixsLGQ7cmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChjLHUpPT57bGV0IHA9KCk9PntsZXQgZj0wLHk9KCk9PntsZXQgdj1hLnJlYWQoKTtpZih2KXtmPTA7bGV0IHc9di50b1N0cmluZygpO2lmKHthYm9ydDppLGZhaWxlZFBhcnNlQ29udGVudDpsLGluY3JlbWVudGFsQ29udGVudHM6ZCxyZWNlaXZlZENvbnRlbnQ6c309byhlLHcscyxuLHIsbCksaXx8IUVrKGQscykpe2MoKTtyZXR1cm59eSgpfWVsc2UgZis9MSxmPDM/c2V0VGltZW91dCh5LHhrKjFlMyk6YygpfTt5KCl9O2Eub24oInJlYWRhYmxlIixwKX0pLHN9YXN5bmMgZnVuY3Rpb24gV0MoZSx0LG4scixvKXtsZXQgYT10LmJvZHkuZ2V0UmVhZGVyKCksaT1uZXcgVGV4dERlY29kZXIscyxsLGQsYyx1PTAscD0iIjtmb3IoOyFsOyl7bGV0IGY9bnVsbCx5PSExO3RyeXthd2FpdCBQcm9taXNlLnJhY2UoW3tkb25lOnksdmFsdWU6Zn09YXdhaXQgYS5yZWFkKCksbmV3IFByb21pc2UoKHYsdyk9PnNldFRpbWVvdXQoKCk9PncobmV3IEVycm9yKCJUaW1lb3V0IikpLHhrKjFlMykpXSl9Y2F0Y2godil7bD12LGsoIkZhaWxlZCB0byByZWNlaXZlIGZ1cnRoZXIgc3RyZWFtIGRhdGEgaW4gdGltZSIsdik7YnJlYWt9aWYoeXx8dT4zKXtrKCJDb21wbGV0ZWQgZ2VuZXJhdGluZyByZXNwb25zZSBsZW5ndGgiKTticmVha31lbHNlIGlmKGYpe2xldCB2PWkuZGVjb2RlKGYse3N0cmVhbTohMH0pO3RyeXtpZih0eXBlb2Ygdj09InN0cmluZyIpe3U9MDtsZXQgdz1vKGUsdixwLG4scixkKTtpZih3KXtpZih7YWJvcnQ6cyxmYWlsZWRQYXJzZUNvbnRlbnQ6ZCxpbmNyZW1lbnRhbENvbnRlbnRzOmMscmVjZWl2ZWRDb250ZW50OnB9PXcsc3x8IUVrKGMscCkpYnJlYWt9ZWxzZSBrKCJGYWlsZWQgdG8gcGFyc2Ugc3RyZWFtIGZyb20iLGYsImFzIEpTT04iKSx1Kz0xfWVsc2UgaygiRmFpbGVkIHRvIHBhcnNlIHN0cmVhbSBmcm9tIixmLCJhcyBKU09OIiksdSs9MX1jYXRjaCh3KXtrKCJUaGVyZSB3YXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgcmVzcG9uc2UgZnJvbSBzdHJlYW06Iix3KTticmVha319ZWxzZSB1Kz0xfXJldHVybiBwfWZ1bmN0aW9uIEVrKGUsdCl7bGV0IG47aWYoZT8ubGVuZ3RoJiYodD8ubGVuZ3RofHwwKT49aGYpe2xldCByPXQucmVwbGFjZSgvXG4vZywiICIpO249ci5zdWJzdHJpbmcoci5sZW5ndGgtaGYpLnRyaW0oKT09PSIiLG4mJmsoIlJlc3BvbnNlIGV4Y2VlZHMgZW1wdHkgc3BhY2UgdGhyZXNob2xkLiBBYm9ydGluZyIpfXJldHVybiFufXZhciBCQz0zMCxOaz01MDthc3luYyBmdW5jdGlvbiBIQyhlLHQsbixyLG8sYSxpKXtsZXQgcz1rYygpO3ImJihzPXMuZmlsdGVyKHk9PnkhPT1yKSxzLnVuc2hpZnQocikpO2xldCBsPXMuc2hpZnQoKTtpZighbCl0aHJvdyBuZXcgRXJyb3IoIk5vIEFJIHByb3ZpZGVyIGlzIGNvbmZpZ3VyZWQuIENob29zZSBhIHByb3ZpZGVyIGluIERhc2hib2FyZCBTZXR0aW5ncy4iKTtrKCJbbGxtUHJvbXB0XSBtb2RlbCByZXNvbHV0aW9uIix7YWlNb2RlbE92ZXJyaWRlOnIsbW9kZWxUb1VzZTpsPz9udWxsLHJlbWFpbmluZ0NhbmRpZGF0ZUNvdW50OnMubGVuZ3RoLGFwaUtleU92ZXJyaWRlUHJlc2VudDohIW99KTtsZXQgZD1be3JvbGU6InVzZXIiLGNvbnRlbnQ6bn1dLGM9aT97dGltZW91dFNlY29uZHM6aX06e307byYmKGMuYXBpS2V5PW8pO2xldCB1PWF3YWl0IFZDKGUsZCxsLGMpLGY9YXdhaXQgU2soZSx1LGwsYT8ibGxtUHJvbXB0SnNvbiI6bnVsbCxudWxsLG51bGwpO3JldHVybiBmJiZhJiZ0eXBlb2YgZj09InN0cmluZyI/U2MoZik6Zn1hc3luYyBmdW5jdGlvbiBFYyhlLHQse2pzb25SZXNwb25zZTpuLGFpTW9kZWw6cixhcGlLZXk6byx0aW1lb3V0U2Vjb25kczphfT17fSl7bGV0IGk9cGVyZm9ybWFuY2Uubm93KCk7aygiW2xsbVByb21wdF0gc3RhcnRpbmciLHtwcm9tcHRMZW5ndGg6dD8ubGVuZ3RoPz8wLGFtcGxlQWdlbnRQcm9VdWlkOkltLGhhc0NhbGxQbHVnaW46dHlwZW9mIGU/LmNhbGxQbHVnaW49PSJmdW5jdGlvbiIsanNvblJlc3BvbnNlOiEhbixhaU1vZGVsT3ZlcnJpZGU6cj8/bnVsbCxhcGlLZXlPdmVycmlkZVByZXNlbnQ6ISFvfSk7dHJ5e2xldCBkPWF3YWl0IGUuY2FsbFBsdWdpbih7c291cmNlOkltfSwiIix0LHIpO2lmKHR5cGVvZiBkPiJ1Iil7bGV0IHU9YXdhaXQgZS5maW5kTm90ZSh7bmFtZTpTcn0pO2soIltsbG1Qcm9tcHRXaXRoUGx1Z2luRmFsbGJhY2tdIGNhbGxQbHVnaW4gcmV0dXJuZWQgdW5kZWZpbmVkOyBjaGVja2luZyBmb3IgQW1wbGUgQWdlbnQgUHJvIG5vdGUgZXhpc3RlbmNlLCBnb3QiLHUpLHUmJihkPWF3YWl0IGUuY2FsbFBsdWdpbih7dXVpZDp1LnV1aWR9LCIiLHQsciksayhgW2xsbVByb21wdFdpdGhQbHVnaW5GYWxsYmFja10gQXR0ZW1wdCB0byBjYWxsUGx1Z2luIGZvciBub3RlIHV1aWQgJHt1LnV1aWR9IHlpZWxkZWRgLGQpKX1sZXQgYz1OdW1iZXIoKHBlcmZvcm1hbmNlLm5vdygpLWkpLnRvRml4ZWQoMSkpO2lmKGQpe2xldCBwPXR5cGVvZiBkPT0ic3RyaW5nIj9kLnN1YnN0cmluZygwLDMwMCk6SlNPTi5zdHJpbmdpZnkoZCkuc3Vic3RyaW5nKDAsMzAwKTtrKCJbbGxtUHJvbXB0V2l0aFBsdWdpbkZhbGxiYWNrXSBjYWxsUGx1Z2luIHJhdyByZXN1bHQiLHtkdXJhdGlvbk1zOmMscmVzdWx0VHlwZTp0eXBlb2YgZCxyZXN1bHRMZW5ndGg6dHlwZW9mIGQ9PSJzdHJpbmciP2QubGVuZ3RoOm51bGwscmVzdWx0U25pcHBldDpwfSk7bGV0IGY9biYmdHlwZW9mIGQ9PSJzdHJpbmciP1NjKGQpOmQ7cmV0dXJuIGsoIltsbG1Qcm9tcHRXaXRoUGx1Z2luRmFsbGJhY2tdIGNhbGxQbHVnaW4gcGFyc2VkIHJlc3VsdCIse3BhcnNlZFR5cGU6Zj09PW51bGw/Im51bGwiOnR5cGVvZiBmLGhhc1Rhc2tzRmllbGQ6ISEoZiYmdHlwZW9mIGY9PSJvYmplY3QiJiYidGFza3MiaW4gZiksdGFza3NMZW5ndGg6QXJyYXkuaXNBcnJheShmPy50YXNrcyk/Zi50YXNrcy5sZW5ndGg6bnVsbCxoYXNHb2Fsc1N1bW1hcnk6ISEoZiYmdHlwZW9mIGY9PSJvYmplY3QiJiZmLmdvYWxzU3VtbWFyeSl9KSxmfWsoYFtsbG1Qcm9tcHRXaXRoUGx1Z2luRmFsbGJhY2tdIGNhbGxQbHVnaW4gcmV0dXJuZWQgJyR7ZH0nICh0eXBlb2YgJHt0eXBlb2YgZH0pIFx1MjAxNCBmYWxsaW5nIGJhY2sgdG8gZGlyZWN0IExMTWAse2R1cmF0aW9uTXM6YyxwbHVnaW5SZXN1bHRWYWx1ZTpkLHBsdWdpblJlc3VsdFR5cGU6dHlwZW9mIGR9KX1jYXRjaChkKXtrKCJbbGxtUHJvbXB0V2l0aFBsdWdpbkZhbGxiYWNrXSBjYWxsUGx1Z2luIHRocmV3IFx1MjAxNCBmYWxsaW5nIGJhY2sgdG8gZGlyZWN0IExMTSIse2R1cmF0aW9uTXM6TnVtYmVyKChwZXJmb3JtYW5jZS5ub3coKS1pKS50b0ZpeGVkKDEpKSxlcnJvck1lc3NhZ2U6ZD8ubWVzc2FnZSxlcnJvck5hbWU6ZD8ubmFtZX0pfWxldCBzPXBlcmZvcm1hbmNlLm5vdygpLGw9YXdhaXQgSEMoZSxudWxsLHQscixvLG4sYSk7cmV0dXJuIGsoIltsbG1Qcm9tcHRXaXRoUGx1Z2luRmFsbGJhY2tdIGxsbVByb21wdCBmYWxsYmFjayBjb21wbGV0ZSIse2R1cmF0aW9uTXM6TnVtYmVyKChwZXJmb3JtYW5jZS5ub3coKS1zKS50b0ZpeGVkKDEpKSxyZXN1bHRUeXBlOmw9PT1udWxsPyJudWxsIjp0eXBlb2YgbCxoYXNUYXNrc0ZpZWxkOiEhKGwmJnR5cGVvZiBsPT0ib2JqZWN0IiYmInRhc2tzImluIGwpfSksbH1mdW5jdGlvbiBSbShlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLm1hcCh0PT5SbSh0KSk6IWV8fHR5cGVvZiBlIT0ib2JqZWN0Ij9lOk9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5tYXAoKFt0LG5dKT0+dD09PSJjb250ZW50IiYmdHlwZW9mIG49PSJzdHJpbmciJiZuLmxlbmd0aD5Oaz9bdCxgJHtuLnNsaWNlKDAsTmstMyl9Li4uYF06W3QsUm0obildKSl9ZnVuY3Rpb24gS0MoZSx0KXtsZXQgbj17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifTtzd2l0Y2goZSl7Y2FzZSJhbnRocm9waWMiOnJldHVybnsuLi5uLCJ4LWFwaS1rZXkiOnQsImFudGhyb3BpYy1kYW5nZXJvdXMtZGlyZWN0LWJyb3dzZXItYWNjZXNzIjoidHJ1ZSIsImFudGhyb3BpYy12ZXJzaW9uIjoiMjAyMy0wNi0wMSJ9O2Nhc2UiZ2VtaW5pIjpyZXR1cm4gbjtkZWZhdWx0OnJldHVybnsuLi5uLEF1dGhvcml6YXRpb246YEJlYXJlciAke3R9YH19fWZ1bmN0aW9uIEdDKGUsdCxuLHIse3Byb21wdEtleTpvPW51bGx9PXt9KXtsZXQgYTtzd2l0Y2goTW8odCkpe2Nhc2UiYW50aHJvcGljIjp7bGV0IHM9ZS5maW5kKGQ9PmQucm9sZT09PSJzeXN0ZW0iKSxsPWUuZmlsdGVyKGQ9PmQucm9sZSE9PSJzeXN0ZW0iKTthPXttYXhfdG9rZW5zOjQwOTYsbW9kZWw6dCxtZXNzYWdlczpsfSxuJiYoYS5zdHJlYW09bikscyYmKGEuc3lzdGVtPXMuY29udGVudCk7YnJlYWt9Y2FzZSJnZW1pbmkiOntsZXQgcz1lLmZpbmQoZD0+ZC5yb2xlPT09InN5c3RlbSIpO2E9e2NvbnRlbnRzOmUuZmlsdGVyKGQ9PmQucm9sZSE9PSJzeXN0ZW0iKS5tYXAoZD0+KHtyb2xlOmQucm9sZT09PSJhc3Npc3RhbnQiPyJtb2RlbCI6InVzZXIiLHBhcnRzOlt7dGV4dDpkLmNvbnRlbnR9XX0pKX0scyYmKGEuc3lzdGVtSW5zdHJ1Y3Rpb249e3BhcnRzOlt7dGV4dDpzLmNvbnRlbnR9XX0pLGEuZ2VuZXJhdGlvbkNvbmZpZz17cmVzcG9uc2VNaW1lVHlwZToiYXBwbGljYXRpb24vanNvbiJ9O2JyZWFrfWNhc2UiZ3JvayI6Y2FzZSJwZXJwbGV4aXR5IjphPXttb2RlbDp0LG1lc3NhZ2VzOmV9LG4mJihhLnN0cmVhbT1uKSxyJiYoYS50b29scz1yKTticmVhaztjYXNlImRlZXBzZWVrIjp7YT17bW9kZWw6dCxtZXNzYWdlczplfSxuJiYoYS5zdHJlYW09biksciYmKGEudG9vbHM9ciksYS5yZXNwb25zZV9mb3JtYXQ9e3R5cGU6Impzb25fb2JqZWN0In07YnJlYWt9Y2FzZSJvcGVuYWkiOmRlZmF1bHQ6e2E9e21vZGVsOnQsbWVzc2FnZXM6ZX0sbiYmKGEuc3RyZWFtPW4pLHImJihhLnRvb2xzPXIpLGEucmVzcG9uc2VfZm9ybWF0PXt0eXBlOiJqc29uX29iamVjdCJ9O2JyZWFrfX1yZXR1cm4gYX1hc3luYyBmdW5jdGlvbiBWQyhlLHQsbix7YXBpS2V5OnI9bnVsbCxhdHRlbXB0TnVtYmVyOm89MSxwcm9tcHRLZXk6YT1udWxsLHN0cmVhbTppPW51bGwsdGltZW91dFNlY29uZHM6cz1CQyx0b29sczpsPW51bGx9PXt9KXtsZXQgZD1NbyhuKTtvPjAmJmsoYEF0dGVtcHQgIyR7b306IFRyeWluZyAke259IHdpdGggJHthfHwibm8gcHJvbXB0S2V5In1gKSxyfHwocj1iayhlLGQpKTtsZXQgYz1HQyh0LG4saSxsLHtwcm9tcHRLZXk6YX0pLHU9d2sobixyKTtrKGBDYWxsaW5nICR7ZH0gYXQgJHt1fSB3aXRoIGJvZHkgJHtKU09OLnN0cmluZ2lmeShSbShjKSl9IGF0ICR7bmV3IERhdGV9YCk7bGV0IHA9S0MoZCxyKSxmPWF3YWl0IFByb21pc2UucmFjZShbZmV0Y2godSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnAsYm9keTpKU09OLnN0cmluZ2lmeShjKX0pLG5ldyBQcm9taXNlKCh5LHYpPT5zZXRUaW1lb3V0KCgpPT52KG5ldyBFcnJvcigiVGltZW91dCIpKSxzKjFlMykpXSk7aWYoIWYub2spe2xldCB5PW5ldyBFcnJvcihgUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgJHtmLnN0YXR1c31gKTt0aHJvdyB5LnJlc3BvbnNlPWYseX1yZXR1cm4gZn1mdW5jdGlvbiBjYShlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9gWyR7ZS5tYXAoY2EpLmpvaW4oIiwiKX1dYDplJiZ0eXBlb2YgZT09Im9iamVjdCI/YHske09iamVjdC5rZXlzKGUpLnNvcnQoKS5tYXAocj0+YCR7SlNPTi5zdHJpbmdpZnkocil9OiR7Y2EoZVtyXSl9YCkuam9pbigiLCIpfX1gOkpTT04uc3RyaW5naWZ5KGUpfWFzeW5jIGZ1bmN0aW9uIFRrKGUsdCl7aWYoIXR8fHR5cGVvZiBlLmdldFRhc2tEb21haW5UYXNrcyE9ImZ1bmN0aW9uIilyZXR1cm4gbnVsbDtsZXQgbj1hd2FpdCBlLmdldFRhc2tEb21haW5UYXNrcyh0KS5jYXRjaCgoKT0+bnVsbCk7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bmV3IFNldChuLm1hcChyPT5yPy51dWlkKS5maWx0ZXIoQm9vbGVhbikpOm51bGx9dmFyIGpDPTIsWUM9Wy9eKD86KD86c3VuKD86ZGF5KT98bW9uKD86ZGF5KT98dHVlKD86c2RheSk/fHdlZCg/Om5lc2RheSk/fHRodSg/OnJzZGF5KT98ZnJpKD86ZGF5KT98c2F0KD86dXJkYXkpPyksP1xzKyk/KD86amFuKD86dWFyeSk/fGZlYig/OnJ1YXJ5KT98bWFyKD86Y2gpP3xhcHIoPzppbCk/fG1heXxqdW4oPzplKT98anVsKD86eSk/fGF1Zyg/OnVzdCk/fHNlcCg/OnQoPzplbWJlcik/KT98b2N0KD86b2Jlcik/fG5vdig/OmVtYmVyKT98ZGVjKD86ZW1iZXIpPylccytcZHsxLDJ9KD86c3R8bmR8cmR8dGgpPyg/OixccyopP1xkezR9JC9pLC9eXGR7NH0tXGR7MSwyfS1cZHsxLDJ9JC8sL15cZHsxLDJ9Wy8tXVxkezEsMn1bLy1dXGR7Miw0fSQvLC9eXGR7MSwyfVxzKyg/Omphbig/OnVhcnkpP3xmZWIoPzpydWFyeSk/fG1hcig/OmNoKT98YXByKD86aWwpP3xtYXl8anVuKD86ZSk/fGp1bCg/OnkpP3xhdWcoPzp1c3QpP3xzZXAoPzp0KD86ZW1iZXIpPyk/fG9jdCg/Om9iZXIpP3xub3YoPzplbWJlcik/fGRlYyg/OmVtYmVyKT8pXHMrXGR7NH0kL2ldLHFDPXtjb25mZXJlbmNlOlsiY29uZmVyZW5jZSIsImNvbnZlbnRpb24iLCJleHBvIiwic3VtbWl0Iiwid29ya3Nob3AiLCJvZmZzaXRlIiwicmV0cmVhdCJdLHRyYXZlbDpbImFpcnBvcnQiLCJmbGlnaHQiLCJob3RlbCIsInJvYWQgdHJpcCIsInRyaXAiLCJ0cmF2ZWwiXSx2YWNhdGlvbjpbImhvbGlkYXkiLCJvb28iLCJwdG8iLCJ2YWNhdGlvbiJdfSxYQz01LFBtPTQsX209NTUwLCRDPTMwLERrPTM7YXN5bmMgZnVuY3Rpb24gTmMoZSx7Y2FsZW5kYXJFdmVudHM6dD1udWxsLGRvbWFpblV1aWQ6bj1udWxsLHRhcmdldERhdGU6cj1uZXcgRGF0ZX09e30pe2xldCBvPVhyKHIpLFthLGldPWF3YWl0IFByb21pc2UuYWxsKFtuTShlLHtkb21haW5VdWlkOm4sdGFyZ2V0RGF0ZTpvfSksSkMoZSx7Y2FsZW5kYXJFdmVudHM6dCxkb21haW5VdWlkOm4sdGFyZ2V0RGF0ZTpvfSldKSxzPVFDKGkpLGw9cy5pc1RyYXZlbExpa2U/YXdhaXQgdE0oZSxzLnJlc2VhcmNoVGVybXMpLmNhdGNoKHU9PihrKCJbcmVjb21tZW5kYXRpb24tY29udGV4dF0gcmVzZWFyY2ggbm90ZSBsb29rdXAgZmFpbGVkIix1Py5tZXNzYWdlKSxbXSkpOltdLGQ9e2FsbERheUV2ZW50czppLGNvbXBsZXRpb25QYXR0ZXJuczphLGV2ZW50Q29udGV4dDpzLHJlc2VhcmNoTm90ZXM6bCx0YXJnZXREYXRlS2V5OmllKG8pfSxjPUFrKGQpO3JldHVybnsuLi5kLGNhY2hlS2V5OmMsZmluZ2VycHJpbnQ6ZU0oZCl9fWFzeW5jIGZ1bmN0aW9uIEpDKGUse2NhbGVuZGFyRXZlbnRzOnQ9bnVsbCxkb21haW5VdWlkOm49bnVsbCx0YXJnZXREYXRlOnI9bmV3IERhdGV9PXt9KXtsZXQgbz1BcnJheS5pc0FycmF5KHQpP3Q6YXdhaXQgVjAoZSxyLG4pO3JldHVybiBhaShvKS5maWx0ZXIoZD0+ZD8uYWxsRGF5JiZHMChkLHIpKS5zbGljZSgwLFhDKS5tYXAoZD0+KHtlbmRLZXk6ZC5lbmQ/aWUoZC5lbmQpOm51bGwsc3RhcnRLZXk6ZC5zdGFydD9pZShkLnN0YXJ0KTpudWxsLHRpdGxlOkJuKGQudGl0bGUpfHwiQWxsLWRheSBldmVudCJ9KSl9ZnVuY3Rpb24gUUMoZSl7bGV0IHQ9KGV8fFtdKS5tYXAocz0+cy50aXRsZSkuZmlsdGVyKEJvb2xlYW4pLG49dC5qb2luKCIgIikudG9Mb3dlckNhc2UoKSxvPU9iamVjdC5lbnRyaWVzKHFDKS5maWx0ZXIoKFssc10pPT5zLnNvbWUobD0+bi5pbmNsdWRlcyhsKSkpLm1hcCgoW3NdKT0+cyksYT1vLnNvbWUocz0+cz09PSJ0cmF2ZWwifHxzPT09InZhY2F0aW9uInx8cz09PSJjb25mZXJlbmNlIiksaT1Nayh0LmZsYXRNYXAoaU0pKTtyZXR1cm57Y2F0ZWdvcmllczpvLGlzVHJhdmVsTGlrZTphLHJlc2VhcmNoVGVybXM6aSx0aXRsZXM6dH19ZnVuY3Rpb24gWkMoZSl7bGV0IHQ9Qm4oZSk7cmV0dXJuIHQ/WUMuc29tZShuPT5uLnRlc3QodCkpOiExfWZ1bmN0aW9uIEFrKGUpe2xldCBuPShlLmFsbERheUV2ZW50c3x8W10pLm1hcChhPT4oe3N0YXJ0S2V5OmEuc3RhcnRLZXl8fG51bGwsdGl0bGU6YS50aXRsZXx8IiJ9KSkuc29ydCgoYSxpKT0+YCR7YS5zdGFydEtleX0ke2EudGl0bGV9YC5sb2NhbGVDb21wYXJlKGAke2kuc3RhcnRLZXl9JHtpLnRpdGxlfWApKSxyPShlLmNvbXBsZXRpb25QYXR0ZXJuc3x8W10pLm1hcChhPT4oe2NvbXBsZXRlZENvdW50OmEuY29tcGxldGVkQ291bnQsbm90ZU5hbWU6YS5ub3RlTmFtZSxub3RlVXVpZDphLm5vdGVVdWlkfSkpLG89KGUucmVzZWFyY2hOb3Rlc3x8W10pLm1hcChhPT4oe25hbWU6YS5uYW1lLHV1aWQ6YS51dWlkfSkpO3JldHVybnthbGxEYXlFdmVudHM6bixjb21wbGV0aW9uUGF0dGVybnM6cixldmVudENhdGVnb3JpZXM6ZS5ldmVudENvbnRleHQ/LmNhdGVnb3JpZXN8fFtdLHJlc2VhcmNoTm90ZXM6byx0YXJnZXREYXRlS2V5OmUudGFyZ2V0RGF0ZUtleXx8bnVsbH19ZnVuY3Rpb24gZU0oZSl7bGV0IHQ9ZS5jYWNoZUtleXx8QWsoZSk7cmV0dXJuIGNhKHQpfWFzeW5jIGZ1bmN0aW9uIHRNKGUsdCl7bGV0IG49TWsoKHR8fFtdKS5tYXAobD0+Qm4obCkpLmZpbHRlcihsPT5sLmxlbmd0aD49RGspKTtpZihuLmxlbmd0aD09PTApcmV0dXJuW107bGV0IHI9bmV3IE1hcDtmb3IobGV0IGwgb2Ygbi5zbGljZSgwLFBtKSl7bGV0IGQ9YXdhaXQgYXIoZS5maWx0ZXJOb3Rlcyh7cXVlcnk6bH0sInJlbGV2YW5jZSIpKS5jYXRjaCgoKT0+W10pO2ZvcihsZXQgYyBvZiBkLnNsaWNlKDAsUG0pKUxtKHIsYyxsLDMpfWxldCBvPWF3YWl0IGFyKGUuZmlsdGVyTm90ZXMoe30sImNoYW5nZWQiKSkuY2F0Y2goKCk9PltdKTtmb3IobGV0IGwgb2Ygby5zbGljZSgwLCRDKSl7aWYoIWw/LnV1aWQpY29udGludWU7bGV0IGQ9bi5maWx0ZXIocD0+Qm4obC5uYW1lKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHAudG9Mb3dlckNhc2UoKSkpO2lmKGQubGVuZ3RoJiZMbShyLGwsZFswXSwyKSxyLmhhcyhsLnV1aWQpJiZyLmdldChsLnV1aWQpLnNuaXBwZXQpY29udGludWU7bGV0IGM9YXdhaXQgZS5nZXROb3RlQ29udGVudCh7dXVpZDpsLnV1aWR9KS5jYXRjaCgoKT0+IiIpLHU9bi5maW5kKHA9PmMudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhwLnRvTG93ZXJDYXNlKCkpKTt1JiZMbShyLGwsdSwxLENrKGMsdSkpfXJldHVybihhd2FpdCBhTShlLHIpKS5zb3J0KChsLGQpPT5kLnNjb3JlLWwuc2NvcmV8fGwubmFtZS5sb2NhbGVDb21wYXJlKGQubmFtZSkpLnNsaWNlKDAsUG0pfWFzeW5jIGZ1bmN0aW9uIG5NKGUse2RvbWFpblV1aWQ6dD1udWxsLHRhcmdldERhdGU6bj1uZXcgRGF0ZX09e30pe2lmKHR5cGVvZiBlLmdldENvbXBsZXRlZFRhc2tzIT0iZnVuY3Rpb24iKXJldHVybltdO2xldCByPXQ/YXdhaXQgVGsoZSx0KTpudWxsLG89W107Zm9yKGxldCB1PTE7dTw9akM7dSs9MSlvLnB1c2gobmV3IERhdGUobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSxuLmdldERhdGUoKS11KjcpKTtsZXQgYT1hd2FpdCBQcm9taXNlLmFsbChvLm1hcCh1PT5yTShlLHUpKSksaT1uZXcgTWFwO2ZvcihsZXQgdT0wO3U8by5sZW5ndGg7dSs9MSlmb3IobGV0IHAgb2YgYVt1XSl7aWYociYmIXIuaGFzKHAudXVpZCkpY29udGludWU7bGV0IGY9cC5ub3RlVVVJRHx8bnVsbDtpZighZiljb250aW51ZTtsZXQgeT1CbihwLm5vdGVOYW1lfHxwLm5vdGVUaXRsZXx8cC5ub3RlPy5uYW1lKTtpLmhhcyhmKXx8aS5zZXQoZix7Y29tcGxldGVkQ291bnQ6MCxkYXRlczpuZXcgU2V0LG5vdGVOYW1lOnksbm90ZVV1aWQ6Zn0pO2xldCB2PWkuZ2V0KGYpO3YuY29tcGxldGVkQ291bnQrPTEsdi5kYXRlcy5hZGQoaWUob1t1XSkpLCF2Lm5vdGVOYW1lJiZ5JiYodi5ub3RlTmFtZT15KX1yZXR1cm4gYXdhaXQgb00oZSxpKSxbLi4uaS52YWx1ZXMoKV0uZmlsdGVyKHU9PnUubm90ZU5hbWUpLmZpbHRlcih1PT4hWkModS5ub3RlTmFtZSkpLm1hcCh1PT4oe2NvbXBsZXRlZENvdW50OnUuY29tcGxldGVkQ291bnQsZGF0ZXM6Wy4uLnUuZGF0ZXNdLnNvcnQoKSxub3RlTmFtZTp1Lm5vdGVOYW1lLG5vdGVVdWlkOnUubm90ZVV1aWR9KSkuc29ydCgodSxwKT0+cC5jb21wbGV0ZWRDb3VudC11LmNvbXBsZXRlZENvdW50fHx1Lm5vdGVOYW1lLmxvY2FsZUNvbXBhcmUocC5ub3RlTmFtZSkpfWZ1bmN0aW9uIExtKGUsdCxuLHIsbz0iIil7aWYoIXQ/LnV1aWQpcmV0dXJuO2xldCBhPWUuZ2V0KHQudXVpZCl8fHttYXRjaGVkVGVybXM6bmV3IFNldCxuYW1lOkJuKHQubmFtZSl8fCJVbnRpdGxlZCBub3RlIixzY29yZTowLHNuaXBwZXQ6IiIsdXVpZDp0LnV1aWR9O2Euc2NvcmUrPXIsYS5tYXRjaGVkVGVybXMuYWRkKG4pLG8mJighYS5zbmlwcGV0fHxvLmxlbmd0aD5hLnNuaXBwZXQubGVuZ3RoKSYmKGEuc25pcHBldD1vKSxlLnNldCh0LnV1aWQsYSl9ZnVuY3Rpb24gQm4oZSl7cmV0dXJuIFN0cmluZyhlfHwiIikucmVwbGFjZSgvXHMrL2csIiAiKS50cmltKCl9YXN5bmMgZnVuY3Rpb24gck0oZSx0KXtsZXQgbj1uZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLHQuZ2V0RGF0ZSgpLDAsMCwwLDApLHI9bmV3IERhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSsxLDAsMCwwLDApLG89YXdhaXQgZS5nZXRDb21wbGV0ZWRUYXNrcyhNYXRoLmZsb29yKG4uZ2V0VGltZSgpLzFlMyksTWF0aC5mbG9vcihyLmdldFRpbWUoKS8xZTMpKS5jYXRjaChpPT4oaygiW3JlY29tbWVuZGF0aW9uLWNvbnRleHRdIGdldENvbXBsZXRlZFRhc2tzIGZhaWxlZCIsaT8ubWVzc2FnZSksW10pKTtyZXR1cm4gQXJyYXkuaXNBcnJheShvKT9vLmZpbHRlcihpPT5pPy5jb21wbGV0ZWRBdCk6W119YXN5bmMgZnVuY3Rpb24gb00oZSx0KXthd2FpdCBQcm9taXNlLmFsbChbLi4udC52YWx1ZXMoKV0ubWFwKGFzeW5jIG49PntpZihuLm5vdGVOYW1lKXJldHVybjtsZXQgcj1hd2FpdCBlLmZpbmROb3RlKHt1dWlkOm4ubm90ZVV1aWR9KS5jYXRjaCgoKT0+bnVsbCk7bi5ub3RlTmFtZT1CbihyPy5uYW1lKX0pKX1hc3luYyBmdW5jdGlvbiBhTShlLHQpe2xldCBuPVtdO2ZvcihsZXQgciBvZiB0LnZhbHVlcygpKXtpZighci5zbmlwcGV0KXtsZXQgbz1hd2FpdCBlLmdldE5vdGVDb250ZW50KHt1dWlkOnIudXVpZH0pLmNhdGNoKCgpPT4iIiksYT1bLi4uci5tYXRjaGVkVGVybXNdWzBdfHwiIjtyLnNuaXBwZXQ9YT9DayhvLGEpOkJuKG8pLnN1YnN0cmluZygwLF9tKX1uLnB1c2goe21hdGNoZWRUZXJtczpbLi4uci5tYXRjaGVkVGVybXNdLnNvcnQoKSxuYW1lOnIubmFtZSxzY29yZTpyLnNjb3JlLHNuaXBwZXQ6ci5zbmlwcGV0LHV1aWQ6ci51dWlkfSl9cmV0dXJuIG59ZnVuY3Rpb24gaU0oZSl7cmV0dXJuIEJuKGUpLnJlcGxhY2UoL1xiKD86b29vfHB0b3x2YWNhdGlvbnxob2xpZGF5fHRyYXZlbHx0cmlwfGNvbmZlcmVuY2V8c3VtbWl0fGZsaWdodHxob3RlbHx0b3xpbnxhdHxmb3J8dGhlfGFuZClcYi9naSwiICIpLnNwbGl0KC9bLTp8LCgpL10rLykubWFwKGE9PkJuKGEpKS5maWx0ZXIoYT0+YS5sZW5ndGg+PURrKX1mdW5jdGlvbiBDayhlLHQpe2xldCBuPUJuKGUpO2lmKCFuKXJldHVybiIiO2xldCByPW4udG9Mb3dlckNhc2UoKS5pbmRleE9mKHQudG9Mb3dlckNhc2UoKSk7aWYocjwwKXJldHVybiBuLnN1YnN0cmluZygwLF9tKTtsZXQgbz1NYXRoLm1heCgwLHItMTYwKTtyZXR1cm4gbi5zdWJzdHJpbmcobyxvK19tKX1mdW5jdGlvbiBNayhlKXtsZXQgdD1uZXcgU2V0O3JldHVybihlfHxbXSkuZmlsdGVyKHI9PntsZXQgbz1CbihyKS50b0xvd2VyQ2FzZSgpO3JldHVybiFvfHx0LmhhcyhvKT8hMToodC5hZGQobyksITApfSl9ZnVuY3Rpb24gVGMoZSx7YWxsb3dJbnZlbnRlZFRyYXZlbEFjdGl2aXRpZXM6dD0hMSxzY2hlZHVsZU1vZGU6bj0hMX09e30pe2lmKCFlKXJldHVybiIiO2xldCByPVtdLG89c00oZSx7YWxsb3dJbnZlbnRlZFRyYXZlbEFjdGl2aXRpZXM6dCxzY2hlZHVsZU1vZGU6bn0pO28mJnIucHVzaChvKTtsZXQgYT1sTShlKTtyZXR1cm4gYSYmci5wdXNoKGEpLHIubGVuZ3RoP2AKCiMjIERheS1zcGVjaWZpYyByZWNvbW1lbmRhdGlvbiBjb250ZXh0CiR7ci5qb2luKGAKCmApfWA6IiJ9ZnVuY3Rpb24gRGMoZSl7cmV0dXJuISFlPy5ldmVudENvbnRleHQ/LmlzVHJhdmVsTGlrZX1mdW5jdGlvbiBzTShlLHthbGxvd0ludmVudGVkVHJhdmVsQWN0aXZpdGllczp0LHNjaGVkdWxlTW9kZTpufSl7bGV0IHI9ZS5hbGxEYXlFdmVudHN8fFtdO2lmKHIubGVuZ3RoPT09MClyZXR1cm4iIjtsZXQgbz1yLm1hcChpPT5gLSAke2kudGl0bGV9YCkuam9pbihgCmApLGE9KGUucmVzZWFyY2hOb3Rlc3x8W10pLnNsaWNlKDAsNCkubWFwKGk9PmAtICR7aS5uYW1lfSAoJHtpLm1hdGNoZWRUZXJtcy5qb2luKCIsICIpfSk6ICR7aS5zbmlwcGV0fWApLmpvaW4oYApgKTtyZXR1cm4gRGMoZSk/YEFsbC1kYXkgZXZlbnQgb3ZlcnJpZGU6IHRoZSB0YXJnZXQgZGF5IGluY2x1ZGVzIHRyYXZlbC92YWNhdGlvbi9jb25mZXJlbmNlIGNvbnRleHQuIFRoaXMgb3ZlcnJpZGVzIG9yZGluYXJ5IHdlZWtkYXkgcm91dGluZXMgYW5kIGhpc3RvcmljYWwgcHJvamVjdCB0ZW5kZW5jaWVzLgpBbGwtZGF5IGV2ZW50czoKJHtvfQoke3Q/IkluIHRoaXMgdHJhdmVsL3ZhY2F0aW9uIG1vZGUsIHlvdSBNQVkgcHJvcG9zZSB1c2VmdWwgbG9jYWwgYWN0aXZpdGllcyBldmVuIHdoZW4gbm8gY2FuZGlkYXRlIHRhc2sgVVVJRCBleGlzdHM7IHVzZSBudWxsIGZvciB0YXNrVXVpZCBhbmQgZXhwbGFpbiB3aHkgaXQgZml0cyB0aGUgdHJpcC4iOiJJZiB5b3UgcHJvcG9zZSBhIG5ldyBpZGVhIGluc3BpcmVkIGJ5IHRyYXZlbCByZXNlYXJjaCwgdXNlIG51bGwgZm9yIHRoZSB0YXNrIFVVSUQgb25seSB3aGVuIHRoaXMgcmVzcG9uc2UgZm9ybWF0IHBlcm1pdHMgaW52ZW50ZWQgdGFza3MuIn0KJHtuPyJLZWVwIHRoZSBzY2hlZHVsZSBsaWdodCBhbmQgcmVhbGlzdGljIGFyb3VuZCB0cmF2ZWwgbG9naXN0aWNzOyBhdm9pZCBkZWZhdWx0aW5nIHRvIG5vcm1hbCB3b3JrIGJsb2NrcyB1bmxlc3MgdGhlIGV2ZW50IGlzIGNsZWFybHkgd29yay9jb25mZXJlbmNlIHRpbWUuIjoiRmF2b3IgcmVjb21tZW5kYXRpb25zIHRoYXQgcmVzcGVjdCB0aGUgdXNlcidzIGxvY2F0aW9uLCB0cmlwIHB1cnBvc2UsIGFuZCBhdmFpbGFibGUgZW5lcmd5LiJ9CiR7YT9gUmVsZXZhbnQgcmVzZWFyY2ggbm90ZXM6CiR7YX1gOiJObyBtYXRjaGluZyByZXNlYXJjaC1ub3RlIHNuaXBwZXRzIHdlcmUgZm91bmQ7IHVzZSBnZW5lcmFsbHkgcG9wdWxhciBsb2NhbCBvcHRpb25zIG9ubHkgaWYgdGhlIGV2ZW50IHRpdGxlIHJldmVhbHMgYSBwbGFjZSBvciBldmVudC4ifWA6YEFsbC1kYXkgZXZlbnRzIG9uIHRoZSB0YXJnZXQgZGF5Ogoke299ClRyZWF0IHRoZXNlIGFzIGRheS1sZXZlbCBjb25zdHJhaW50cy4gVGhleSBkbyBub3Qgb2NjdXB5IGEgc3BlY2lmaWMgY2xvY2sgcmFuZ2UsIGJ1dCB0aGV5IHNob3VsZCBpbmZsdWVuY2UgaG93IGFtYml0aW91cyBvciB3b3JrLWZvY3VzZWQgdGhlIHJlY29tbWVuZGF0aW9ucyBhcmUuYH1mdW5jdGlvbiBsTShlKXtsZXQgdD0oZS5jb21wbGV0aW9uUGF0dGVybnN8fFtdKS5zbGljZSgwLDgpO3JldHVybiB0Lmxlbmd0aD09PTA/IiI6YFNhbWUtd2Vla2RheSBjb21wbGV0aW9uIHBhdHRlcm5zIGZyb20gdGhlIHBhc3QgdHdvIHdlZWtzOgoke3QubWFwKHI9PmAtICR7ci5ub3RlTmFtZX0gKCR7ci5ub3RlVXVpZH0pOiAke3IuY29tcGxldGVkQ291bnR9IHRhc2socykgY29tcGxldGVkIGFjcm9zcyAke3IuZGF0ZXMuam9pbigiLCAiKX1gKS5qb2luKGAKYCl9ClRoZXNlIG5vdGUgbmFtZXMgb2Z0ZW4gY29ycmVzcG9uZCB0byBwcm9qZWN0cyBvciByZXNwb25zaWJpbGl0aWVzLiBVc2UgdGhlbSBhcyBhIHNvZnQgc2lnbmFsIHRoYXQgc2ltaWxhciB3b3JrIG1heSBmaXQgdGhpcyB3ZWVrZGF5LCB1bmxlc3MgYWxsLWRheSB0cmF2ZWwvdmFjYXRpb24vY29uZmVyZW5jZSBjb250ZXh0IGFib3ZlIHN1Z2dlc3RzIGEgZGlmZmVyZW50IGtpbmQgb2YgZGF5LmB9dmFyIGRNPVsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxjTT01MCx1TT0yZTMscE09M2UzLGZNPTFlMyxtTT0xZTMsUms9NTAwLE9rPTg2NDAwLEhzPTFlMTAsaE09NjAsZ009Myx5TT0yMDAsdk09NDAxLGJNPTQwMyx3TT0xLGtNPTEwLHhNPTUsU009NyxFTT01LE5NPS41LFRNPTMsRE09MjAsQU09MTUsQ009MTUsTU09OCxPTT0yNSxJTT0yMCxSTT0xMixQTT01LExNPTUsX009MyxVTT0xNSxGTT0xMCx6TT01LElrPTEsV009MyxCTT03LEhNPSJzdWciLEtNPTFlNixHTT0uMTthc3luYyBmdW5jdGlvbiBQayhlLHtleGNsdWRlVXVpZHM6dCxleGlzdGluZ05vdGVIYW5kbGU6bixtaW5pbXVtVGFza0NvdW50OnI9MSxub3RlTmFtZTpvPWBEYXNoYm9hcmQgcHJvcG9zZWQgdGFza3MgZm9yICR7bmV3IERhdGUoKS50b0xvY2FsZVN0cmluZyhbXSx7eWVhcjoibnVtZXJpYyIsbW9udGg6ImxvbmciLGRheToibnVtZXJpYyJ9KX1gLHByb3ZpZGVyRW1PdmVycmlkZTphfT17fSl7bGV0IGk9TWF0aC5tYXgoMSxwYXJzZUludChyLDEwKXx8MSkscz10IGluc3RhbmNlb2YgU2V0P3Q6bnVsbCxsPW5ldyBEYXRlLGQ9ZE1bbC5nZXREYXkoKV0sYz1vcltsLmdldE1vbnRoKCldLHU9bC5nZXREYXkoKT09PTB8fGwuZ2V0RGF5KCk9PT02O2soIltkcmVhbS10YXNrXSBhbmFseXplRHJlYW1UYXNrcyBlbnRyeSIse25vdGVOYW1lOm8sbWluaW11bVN1Z2dlc3Rpb25Db3VudDppLGV4Y2x1ZGVVdWlkc1NpemU6cz8uc2l6ZT8/MCxwcm92aWRlckVtT3ZlcnJpZGU6YT8/bnVsbCxleGlzdGluZ05vdGVIYW5kbGVVdWlkOm4/LnV1aWQ/P251bGx9KTtsZXQgcD1hd2FpdCBqTShlLG8sbiksZj1wLmNhY2hlZC50YXNrcy5maWx0ZXIoeD0+IUFjKHgpKS5sZW5ndGg7aWYoaygiW2RyZWFtLXRhc2tdIGNhY2hlZC1ub3RlIHN0YXRlIix7bm90ZVVVSUQ6cC5ub3RlSGFuZGxlPy51dWlkPz9udWxsLGV4aXN0aW5nQ29udGVudExlbmd0aDpwLmV4aXN0aW5nQ29udGVudD8ubGVuZ3RoPz8wLGNhY2hlZFRhc2tDb3VudDpwLmNhY2hlZC50YXNrcy5sZW5ndGgsdW5kaXNtaXNzZWRDb3VudDpmLG1pbmltdW1TdWdnZXN0aW9uQ291bnQ6aSx3aWxsVXNlQ2FjaGU6Zj49aX0pLGY+PWkpe2xldCB4PWF3YWl0IHFNKGUscC5jYWNoZWQudGFza3MpO3JldHVybiAkTShwLHgpfWxldCB5PWF3YWl0IFhNKGUpLHY9TWF0aC5tYXgoZ00saS1wLmNhY2hlZC50YXNrcy5sZW5ndGgpLHc9Sk0oeS5vcGVuVGFza3MscyksZz1hd2FpdCBRTShlLGMscC5leGlzdGluZ0NvbnRlbnQpLGg9YXdhaXQgTmMoZSx7ZG9tYWluVXVpZDp5LmRvbWFpblV1aWQsdGFyZ2V0RGF0ZTpsfSksYj1WTShsLGQsYyk7aWYoISEhKGcucXVhcnRlcmx5Q29udGVudHx8Zy5tb250aGx5Q29udGVudHx8Zy53ZWVrbHlDb250ZW50KSYmdy5sZW5ndGg9PT0wKXJldHVybiBrKGBbZHJlYW0tdGFza10gTm8gcGxhbm5pbmcgZGF0YSBlcnJvciBmb3IgJHtifS4gcGxhbm5pbmdDb250ZXh0IGlzICR7Z30gKGtleXMgJHtPYmplY3Qua2V5cyhnKX0pLCBjYW5kaWRhdGVUYXNrcyBsZW5ndGggJHt3Lmxlbmd0aH0uIFBsYW4gbm90ZSAnJHtVbSgpfScgZmluZE5vdGUgeWllbGRzICR7YXdhaXQgZS5maW5kTm90ZSh7bmFtZTpVbSgpfSl9YCkse3Rhc2tzOltdLGVycm9yOiJObyBwbGFubmluZyBkYXRhIG9yIHRhc2tzIGZvdW5kIHRvIGdlbmVyYXRlIHN1Z2dlc3Rpb25zIGZyb20uIFBvcHVsYXRlIHlvdXIgcXVhcnRlcmx5IGFuZC9vciBtb250aGx5IHBsYW4gdG8gcmVjZWl2ZSBBSS1zdWdnZXN0ZWQgdGFza3MuIixlcnJvckNvZGU6Im5vX3BsYW5uaW5nX2RhdGEiLG5vdGVVVUlEOnAubm90ZUhhbmRsZS51dWlkfTtsZXQgUz1hd2FpdCBaTSh7YXBwOmUsY2FuZGlkYXRlVGFza3M6dyxkYXRlSGVhZGluZzpiLGRheU5hbWU6ZCxpc1dlZWtlbmQ6dSxub3RlVXVpZEZyb21UYXNrVXVpZDp5Lm5vdGVVdWlkRnJvbVRhc2tVdWlkLHByb3ZpZGVyRW1PdmVycmlkZTphLHBsYW5uaW5nQ29udGV4dDpnLHJlY29tbWVuZGF0aW9uQ29udGV4dDpoLHJlcXVlc3RlZFN1Z2dlc3Rpb25Db3VudDp2fSk7cmV0dXJuIFMuZXJyb3I/e3Rhc2tzOltdLGVycm9yOlMuZXJyb3IsZXJyb3JDb2RlOlMuZXJyb3JDb2RlLGVycm9yRGV0YWlsOlMuZXJyb3JEZXRhaWwsbm90ZVVVSUQ6cC5ub3RlSGFuZGxlLnV1aWR9Oihhd2FpdCByTyhlLHAuZXhpc3RpbmdDb250ZW50LFMuZ29hbHNTdW1tYXJ5LFMubGxtQXR0cmlidXRpb25Gb290ZXIscC5ub3RlSGFuZGxlLFMuZW5mb3JjZWRUYXNrcyksb08ocCx5LFMpKX1mdW5jdGlvbiBWTShlLHQsbil7cmV0dXJuYCR7dH0gJHtufSAke2UuZ2V0RGF0ZSgpfSwgJHtlLmdldEZ1bGxZZWFyKCl9YH1hc3luYyBmdW5jdGlvbiBqTShlLHQsbil7bGV0IHI9YXdhaXQgWU0oZSx0LG4pLG89YXdhaXQgZS5nZXROb3RlQ29udGVudCh7dXVpZDpyLnV1aWR9KSxhPXR5cGVvZiBvPT0ic3RyaW5nIj9vLnJlcGxhY2UoL1xyXG4vZyxgCmApOiIiO3JldHVybntub3RlSGFuZGxlOnIsZXhpc3RpbmdDb250ZW50OmEsY2FjaGVkOmxPKGEpfX1hc3luYyBmdW5jdGlvbiBZTShlLHQsbil7aWYobj8udXVpZClyZXR1cm4gaygiW2RyZWFtLXRhc2tdIF9yZXNvbHZlRHJlYW1UYXNrTm90ZUhhbmRsZTogdXNpbmcgZXhpc3RpbmdOb3RlSGFuZGxlIixuLnV1aWQpLG47bGV0IHI9YXdhaXQgZS5maW5kTm90ZSh7bmFtZTp0LHRhZ3M6W3ZlXX0pO2lmKHIpcmV0dXJuIGsoIltkcmVhbS10YXNrXSBfcmVzb2x2ZURyZWFtVGFza05vdGVIYW5kbGU6IGZpbmROb3RlIGxvY2F0ZWQiLHIudXVpZCwiZm9yIix0KSxyO2xldCBvPWF3YWl0IGUuY3JlYXRlTm90ZSh0LFt2ZV0se2FyY2hpdmU6ITB9KTtyZXR1cm4gayhgW2RyZWFtLXRhc2tdIENyZWF0ZWQgZGFpbHkgbm90ZSAiJHt0fSIgd2l0aCB1dWlkICR7b31gKSx7dXVpZDpvfX1hc3luYyBmdW5jdGlvbiBxTShlLHQpe2xldCBuPXQuZmlsdGVyKHM9PnMudXVpZCYmIUFjKHMpKS5tYXAocz0+cy51dWlkKSxyPShhd2FpdCBQcm9taXNlLmFsbChuLm1hcChzPT5lLmdldFRhc2socykuY2F0Y2goKCk9Pm51bGwpKSkpLmZpbHRlcihCb29sZWFuKSxvPVVrKHIpLGE9X2sociksaT1hd2FpdCBMayhlLHIpO3JldHVybntuYXRpdmVUYXNrRnJvbVRhc2tVdWlkOm8sbm90ZU5hbWVGcm9tTm90ZVV1aWQ6aSxub3RlVXVpZEZyb21UYXNrVXVpZDphLGRlZmF1bHROb3RlVVVJRDpudWxsfX1hc3luYyBmdW5jdGlvbiBYTShlKXtsZXQgdD1hd2FpdCBpTyhlKSxuPWF3YWl0IEZuKGUsdCkscj1uLmZpbHRlcihsPT4hbC5jb21wbGV0ZWRBdCYmIWwuZGlzbWlzc2VkQXQpO2soYFtkcmVhbS10YXNrXSBGb3VuZCAke3IubGVuZ3RofSBvcGVuIHRhc2tzIGZyb20gJHt0P2Bkb21haW4gJHt0fWA6ImFsbCBub3RlcyAoY291bGRuJ3QgZmluZCBhIGRvbWFpblV1aWQpIn1gKTtsZXQgbz1hd2FpdCBMayhlLHIpLGE9VWsociksaT1fayhyKSxzPXNPKG4pO3JldHVybiBrKGBbZHJlYW0tdGFza10gRGVmYXVsdCBub3RlIGZvciBuZXcgdGFza3M6ICR7c31gKSx7YWxsVGFza3M6bixkZWZhdWx0Tm90ZVVVSUQ6cyxkb21haW5VdWlkOnQsbmF0aXZlVGFza0Zyb21UYXNrVXVpZDphLG5vdGVOYW1lRnJvbU5vdGVVdWlkOm8sbm90ZVV1aWRGcm9tVGFza1V1aWQ6aSxvcGVuVGFza3M6cn19YXN5bmMgZnVuY3Rpb24gTGsoZSx0KXtsZXQgbj1uZXcgU2V0O2ZvcihsZXQgbyBvZiB0KW8ubm90ZVVVSUQmJm4uYWRkKG8ubm90ZVVVSUQpO2xldCByPW5ldyBNYXA7Zm9yKGxldCBvIG9mIHQpe2lmKCFvLm5vdGVVVUlEKWNvbnRpbnVlO2xldCBhPShvLm5vdGVOYW1lfHxvLm5vdGVUaXRsZXx8IiIpLnRyaW0oKTthJiZyLnNldChvLm5vdGVVVUlELGEpfXJldHVybiBhd2FpdCBQcm9taXNlLmFsbChbLi4ubl0ubWFwKGFzeW5jIG89PntpZighci5oYXMobykpdHJ5e2xldCBhPWF3YWl0IGUuZmluZE5vdGUoe3V1aWQ6b30pO2E/Lm5hbWUmJnIuc2V0KG8sYS5uYW1lKX1jYXRjaChhKXtrKCJbZHJlYW0tdGFza10gZmluZE5vdGUoeyB1dWlkIH0pIGZhaWxlZDoiLG8sYSl9fSkpLHJ9ZnVuY3Rpb24gX2soZSl7bGV0IHQ9bmV3IE1hcDtmb3IobGV0IG4gb2YgZSluLnV1aWQmJm4ubm90ZVVVSUQmJnQuc2V0KG4udXVpZCxuLm5vdGVVVUlEKTtyZXR1cm4gdH1mdW5jdGlvbiBVayhlKXtsZXQgdD1uZXcgTWFwO2ZvcihsZXQgbiBvZiBlKW4udXVpZCYmdC5zZXQobi51dWlkLG4pO3JldHVybiB0fWZ1bmN0aW9uICRNKGUsdCl7ayhgW2RyZWFtLXRhc2tdIFVzaW5nICR7ZS5jYWNoZWQudGFza3MubGVuZ3RofSBjYWNoZWQgZGFpbHkgc3VnZ2VzdGlvbnMgZnJvbSBub3RlYCk7bGV0e25hdGl2ZVRhc2tGcm9tVGFza1V1aWQ6bixub3RlTmFtZUZyb21Ob3RlVXVpZDpyLG5vdGVVdWlkRnJvbVRhc2tVdWlkOm99PXQ7cmV0dXJue3Rhc2tzOmUuY2FjaGVkLnRhc2tzLmZpbHRlcihpPT4hQWMoaSkpLm1hcChpPT5GayhXayhpKSx7bmF0aXZlVGFza0Zyb21UYXNrVXVpZDpuLG5vdGVOYW1lRnJvbU5vdGVVdWlkOnIsbm90ZVV1aWRGcm9tVGFza1V1aWQ6b30pKSxnb2Fsc1N1bW1hcnk6ZS5jYWNoZWQuZ29hbHNTdW1tYXJ5LGNhY2hlZDohMCxub3RlVVVJRDplLm5vdGVIYW5kbGUudXVpZCxkZWZhdWx0Tm90ZVVVSUQ6dC5kZWZhdWx0Tm90ZVVVSUQsc2hvd25VdWlkczpbXSxsbG1BdHRyaWJ1dGlvbkZvb3RlcjpuTyhlLmV4aXN0aW5nQ29udGVudCl9fWZ1bmN0aW9uIEZrKGUse25hdGl2ZVRhc2tGcm9tVGFza1V1aWQ6dCxub3RlTmFtZUZyb21Ob3RlVXVpZDpuLG5vdGVVdWlkRnJvbVRhc2tVdWlkOnJ9KXtsZXQgbz1lLnV1aWQmJnQuZ2V0KGUudXVpZCl8fG51bGwsYT1lLnV1aWQmJnIuZ2V0KGUudXVpZCl8fG51bGwsaT1lLmlzRXhpc3RpbmchPT12b2lkIDA/ZS5pc0V4aXN0aW5nOiEhZS51dWlkLHM9YSYmbiYmbi5nZXQoYSl8fG51bGw7cmV0dXJuey4uLmUsbm90ZVVVSUQ6YSxpc0V4aXN0aW5nOmksbmF0aXZlVGFzazpvLHNvdXJjZU5vdGVOYW1lOnN9fWZ1bmN0aW9uIEpNKGUsdCl7bGV0IG49dCYmdC5zaXplPjA/ZS5maWx0ZXIocj0+IXQuaGFzKHIudXVpZCkpOmU7cmV0dXJuIGsoYFtkcmVhbS10YXNrXSBBZnRlciBleGNsdXNpb246ICR7bi5sZW5ndGh9IGNhbmRpZGF0ZSB0YXNrcyAoJHtlLmxlbmd0aC1uLmxlbmd0aH0gZXhjbHVkZWQpYCksbn1hc3luYyBmdW5jdGlvbiBRTShlLHQsbil7bGV0IHI9VW0oKSxhPShhd2FpdCBhcihlLmZpbHRlck5vdGVzKHtxdWVyeTpyfSkpKS5maW5kKGM9PmMubmFtZT09PXIpLGk9bnVsbCxzPW51bGwsbD1udWxsO2lmKGEpe2xldCBjPWF3YWl0IGUuZ2V0Tm90ZUNvbnRlbnQoe3V1aWQ6YS51dWlkfSk7aWYoYyl7aT1jLHM9bmkoYyx0KTtsZXQgdT1yYyhuYygpKTtsPW5pKGMsdSl9ZWxzZSBrKGBbZHJlYW0tdGFza10gRXJyb3I6IFBsYW4gbm90ZSAiJHtyfSIgZm91bmQgYnV0IGNvbnRlbnQgaXMgZW1wdHlgKX1lbHNlIGsoYFtkcmVhbS10YXNrXSBObyBwbGFuIG5vdGUgZm91bmQgZm9yICIke3J9ImApO2xldCBkPW4/bi5zdWJzdHJpbmcoMCx1TSk6bnVsbDtyZXR1cm57cXVhcnRlcmx5Q29udGVudDppLG1vbnRobHlDb250ZW50OnMsd2Vla2x5Q29udGVudDpsLHByZXZpb3VzQW5hbHlzZXM6ZH19YXN5bmMgZnVuY3Rpb24gWk0oZSl7bGV0e2FwcDp0LGNhbmRpZGF0ZVRhc2tzOm4sZGF0ZUhlYWRpbmc6cixkYXlOYW1lOm8saXNXZWVrZW5kOmEsbm90ZVV1aWRGcm9tVGFza1V1aWQ6aSxwcm92aWRlckVtT3ZlcnJpZGU6cyxwbGFubmluZ0NvbnRleHQ6bCxyZWNvbW1lbmRhdGlvbkNvbnRleHQ6ZCxyZXF1ZXN0ZWRTdWdnZXN0aW9uQ291bnQ6Y309ZSx1PXN8fExlKClbQi5MTE1fUFJPVklERVJfTU9ERUxdO2lmKCEoISF1JiZ1IT09Im5vbmUiKSl7bGV0IHg9YXdhaXQgdC5maW5kTm90ZSh7bmFtZTpTcn0pO2lmKGsoIltkcmVhbS10YXNrXSBubyBwcm92aWRlciBjb25maWd1cmVkIFx1MjAxNCBjaGVja2luZyBmb3IgQW1wbGUgQWdlbnQgUHJvIGZhbGxiYWNrIix7YW1wbGVBZ2VudE5vdGVGb3VuZDohIXgsYW1wbGVBZ2VudE5vdGVVdWlkOng/LnV1aWQ/P251bGx9KSwheClyZXR1cm57ZXJyb3I6Ik5vIEFJIHByb3ZpZGVyIGNvbmZpZ3VyZWQuIFBsZWFzZSBzZWxlY3QgYSBwcm92aWRlciBpbiB0aGUgcGx1Z2luIHNldHRpbmdzLiIsZXJyb3JDb2RlOiJub19wcm92aWRlcl9jb25maWd1cmVkIn19bGV0IGY9Zk8obikseT1mLm1hcCh4PT5tTyh4KSk7ayhgW2RyZWFtLXRhc2tdIFNlbGVjdGVkICR7eS5sZW5ndGh9IHRvcCB0YXNrcyBmcm9tICR7bi5sZW5ndGh9IGNhbmRpZGF0ZSB0YXNrcyBmb3IgTExNIGFuYWx5c2lzYCk7bGV0IHY9aE8oe2RhdGVIZWFkaW5nOnIsZGF5TmFtZTpvLGlzV2Vla2VuZDphLHRhc2tKc29uT2JqZWN0czp5LHF1YXJ0ZXJseUNvbnRlbnQ6bC5xdWFydGVybHlDb250ZW50LG1vbnRobHlDb250ZW50OmwubW9udGhseUNvbnRlbnQsd2Vla2x5Q29udGVudDpsLndlZWtseUNvbnRlbnQscHJldmlvdXNBbmFseXNlczpsLnByZXZpb3VzQW5hbHlzZXMsb3BlblRhc2tDb3VudDpuLmxlbmd0aCxyZWNvbW1lbmRhdGlvbkNvbnRleHQ6ZCxyZXF1ZXN0ZWRTdWdnZXN0aW9uQ291bnQ6Y30pLHcsZz1wZXJmb3JtYW5jZS5ub3coKTt0cnl7aygiW2RyZWFtLXRhc2tdIFNlbmRpbmcgcHJvbXB0IHRvIExMTSwgbGVuZ3RoOiIsdi5sZW5ndGgpO2xldHthaU1vZGVsOngsYXBpS2V5OkUsanNvblJlc3BvbnNlOlQsdGltZW91dFNlY29uZHM6QX09emsocyk7dz1hd2FpdCBFYyh0LHYse2FpTW9kZWw6eCxhcGlLZXk6RSxqc29uUmVzcG9uc2U6VCx0aW1lb3V0U2Vjb25kczpBfSksaygiW2RyZWFtLXRhc2tdIGxsbVByb21wdFdpdGhQbHVnaW5GYWxsYmFjayByZXR1cm5lZCIse2R1cmF0aW9uTXM6TnVtYmVyKChwZXJmb3JtYW5jZS5ub3coKS1nKS50b0ZpeGVkKDEpKSxyZXN1bHRUeXBlOnc9PT1udWxsPyJudWxsIjp0eXBlb2YgdyxyZXN1bHRJc0FycmF5OkFycmF5LmlzQXJyYXkodyksaGFzVGFza3NGaWVsZDohISh3JiZ0eXBlb2Ygdz09Im9iamVjdCImJiJ0YXNrcyJpbiB3KSx0YXNrc0xlbmd0aDpBcnJheS5pc0FycmF5KHc/LnRhc2tzKT93LnRhc2tzLmxlbmd0aDpudWxsLGdvYWxzU3VtbWFyeVByZXNlbnQ6ISEodyYmdHlwZW9mIHc9PSJvYmplY3QiJiZ3LmdvYWxzU3VtbWFyeSl9KX1jYXRjaCh4KXtjb25zb2xlLmVycm9yKCJbZHJlYW0tdGFza10gTExNIHByb21wdCIsdiwiY2FsbCBmYWlsZWQiLHgpLGsoIltkcmVhbS10YXNrXSBsbG1Qcm9tcHRXaXRoUGx1Z2luRmFsbGJhY2sgdGhyZXciLHtkdXJhdGlvbk1zOk51bWJlcigocGVyZm9ybWFuY2Uubm93KCktZykudG9GaXhlZCgxKSksc3RhdHVzOng/LnJlc3BvbnNlPy5zdGF0dXMsbWVzc2FnZTp4Py5tZXNzYWdlfSk7bGV0IEU9eC5yZXNwb25zZT8uc3RhdHVzO3JldHVybiBFPT09dk18fEU9PT1iTT97ZXJyb3I6IlRoZSBBUEkga2V5IGFwcGVhcnMgdG8gYmUgaW52YWxpZCBvciB1bmF1dGhvcml6ZWQuIixlcnJvckNvZGU6ImludmFsaWRfYXBpX2tleSJ9OntlcnJvcjpgTExNIHJlcXVlc3QgZmFpbGVkICgke3gubWVzc2FnZXx8InVua25vd24gZXJyb3IifSkuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuYCxlcnJvckNvZGU6ImxsbV9lcnJvciIsZXJyb3JEZXRhaWw6eC5tZXNzYWdlfHxudWxsfX1pZighd3x8IXcudGFza3MpcmV0dXJuIGsoIltkcmVhbS10YXNrXSBMTE0gcmV0dXJuZWQgaW52YWxpZCByZXNwb25zZToiLHcpLHtlcnJvcjoiVW5hYmxlIHRvIHByb2Nlc3MgdGhlIEFJIHByb3ZpZGVyJ3MgcmVzcG9uc2UgaW50byB0YXNrIHN1Z2dlc3Rpb25zLiIsZXJyb3JDb2RlOiJwYXJzZV9lcnJvciIsZXJyb3JEZXRhaWw6dz9KU09OLnN0cmluZ2lmeSh3KS5zdWJzdHJpbmcoMCx5TSk6ImVtcHR5IHJlc3BvbnNlIn07bGV0IGg9bmV3IFNldChuLm1hcCh4PT54LnV1aWQpLmZpbHRlcihCb29sZWFuKSksYj1kTyh3LnRhc2tzLGgsYyksbT1jTyhwTyhpLGIsZikpLFM9dU8ody5nb2Fsc1N1bW1hcnkpO3JldHVybntlbmZvcmNlZFRhc2tzOm0sZ29hbHNTdW1tYXJ5OlMsbGxtQXR0cmlidXRpb25Gb290ZXI6dE8ocyl9fWZ1bmN0aW9uIHprKGU9bnVsbCl7bGV0IHQ9TGUoKSxuPXtqc29uUmVzcG9uc2U6ITAsdGltZW91dFNlY29uZHM6aE19LHI9ZTtpZihyKXtsZXQgcz1jbltyXXx8bnVsbCxsPUt0KHIpLGQ9bD8odD8uW2xdfHwiIikudHJpbSgpOiIiO2lmKHMmJmQpcmV0dXJuIG4uYWlNb2RlbD1zLG4uYXBpS2V5PWQsbn1sZXQgbz10W0IuTExNX1BST1ZJREVSX01PREVMXSxhPVdyKG8pLGk9TGQoY24pO2lmKGkpbi5haU1vZGVsPWkubW9kZWwsbi5hcGlLZXk9aS5hcGlLZXksayhgW2RyZWFtLXRhc2tdIERldiBtb2RlOiB1c2luZyAke2kucHJvdmlkZXJ9IGRldiB0b2tlbiAobW9kZWwgJHtpLm1vZGVsfSlgKTtlbHNlIGlmKG8mJmNuW29dKXtuLmFpTW9kZWw9Y25bb107bGV0IHM9S3QoYSk7aWYocyl7bGV0IGw9KHRbc118fCIiKS50cmltKCk7bCYmKG4uYXBpS2V5PWwpfWsoIltkcmVhbS10YXNrXSBfYnVpbGRMbG1PcHRpb25zIHJlc29sdmVkIHByb3ZpZGVyOiIsbywiXHUyMTkyIG1vZGVsOiIsbi5haU1vZGVsKX1yZXR1cm4gbn1mdW5jdGlvbiBVbSgpe3JldHVybmAke1BzKCkubGFiZWx9IFBsYW5gfWZ1bmN0aW9uIGVPKGU9bnVsbCl7bGV0IHQ9emsoZSksbj1rYygpLHI9dC5haU1vZGVsPz9udWxsO3JldHVybiByJiYobj1uLmZpbHRlcihvPT5vIT09ciksbi51bnNoaWZ0KHIpKSxuWzBdPz9udWxsfWZ1bmN0aW9uIHRPKGU9bnVsbCl7bGV0IHQ9ZU8oZSk7aWYoIXQpcmV0dXJuIG51bGw7bGV0IG49TW8odCk7cmV0dXJuYEdlbmVyYXRlZCBieSAke2lpKG4pfSBceEI3ICR7dH1gfWZ1bmN0aW9uIG5PKGUpe2lmKCFlfHx0eXBlb2YgZSE9InN0cmluZyIpcmV0dXJuIG51bGw7bGV0IG49ZS5yZXBsYWNlKC9cclxuL2csYApgKS5tYXRjaCgvXG4tLS1ccypcblxuPlxzKihbXlxuXSspLyk7cmV0dXJuIG4/blsxXS50cmltKCk6bnVsbH1hc3luYyBmdW5jdGlvbiByTyhlLHQsbixyLG8sYSl7bGV0IGk9YERyZWFtVGFzayBzdWdnZXN0aW9ucyBnZW5lcmF0ZWQgJHtuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKFtdLHtob3VyOiIyLWRpZ2l0IixtaW51dGU6IjItZGlnaXQiLHNlY29uZDoiMi1kaWdpdCJ9KX1gLHM9Z08oaSxuLHIsYSksbD1hTyhzLHQpO3RyeXthd2FpdCBlLnJlcGxhY2VOb3RlQ29udGVudChvLGwpLGsoIltkcmVhbS10YXNrXSBQcmVwZW5kZWQgZ2VuZXJhdGVkIHN1Z2dlc3Rpb25zIHRvIGRhaWx5IG5vdGUiKSxrKCJbZHJlYW0tdGFza10gUGVyc2lzdGVkIExMTSBhdHRyaWJ1dGlvbiBpbiBkYWlseSBub3RlIChkYXRhIHN0b3JlKToiLHI/PyIobm9uZSkiKX1jYXRjaChkKXtrKCJbZHJlYW0tdGFza10gRmFpbGVkIHRvIHdyaXRlIHRvIGRhaWx5IG5vdGU6IixkKX19ZnVuY3Rpb24gb08oZSx0LG4pe2xldCByPW4uZW5mb3JjZWRUYXNrcy5maWx0ZXIobD0+bC51dWlkKS5tYXAobD0+bC51dWlkKSx7bmF0aXZlVGFza0Zyb21UYXNrVXVpZDpvLG5vdGVOYW1lRnJvbU5vdGVVdWlkOmEsbm90ZVV1aWRGcm9tVGFza1V1aWQ6aX09dDtyZXR1cm57dGFza3M6Wy4uLm4uZW5mb3JjZWRUYXNrcywuLi5lLmNhY2hlZC50YXNrc10uZmlsdGVyKGw9PiFBYyhsKSkubWFwKGw9PkZrKFdrKGwpLHtuYXRpdmVUYXNrRnJvbVRhc2tVdWlkOm8sbm90ZU5hbWVGcm9tTm90ZVV1aWQ6YSxub3RlVXVpZEZyb21UYXNrVXVpZDppfSkpLGdvYWxzU3VtbWFyeTpuLmdvYWxzU3VtbWFyeSxjYWNoZWQ6ITEsbm90ZVVVSUQ6ZS5ub3RlSGFuZGxlLnV1aWQsZGVmYXVsdE5vdGVVVUlEOnQuZGVmYXVsdE5vdGVVVUlELHNob3duVXVpZHM6cixsbG1BdHRyaWJ1dGlvbkZvb3RlcjpuLmxsbUF0dHJpYnV0aW9uRm9vdGVyPz9udWxsfX1mdW5jdGlvbiBBYyhlKXtyZXR1cm4hIShlPy5jb21wbGV0ZWRBdHx8ZT8ucmVtb3ZlZEF0KX1mdW5jdGlvbiBXayhlKXtyZXR1cm4gZT8uc3VnZ2VzdGlvbklkP2U6ey4uLmUsc3VnZ2VzdGlvbklkOkJrKCl9fWZ1bmN0aW9uIGFPKGUsdCl7cmV0dXJuIXR8fCF0LnRyaW0oKT9lOmAke2V9CiR7dC50cmltKCl9CmB9YXN5bmMgZnVuY3Rpb24gaU8oZSl7bGV0IHQ9TGUoKVtCLlRBU0tfRE9NQUlOU10sbj10P0pTT04ucGFyc2UodCk6e307aWYobi5zZWxlY3RlZERvbWFpblV1aWQpcmV0dXJuIG4uc2VsZWN0ZWREb21haW5VdWlkO2xldCByPWF3YWl0IGUuZ2V0VGFza0RvbWFpbnMoKTtpZighQXJyYXkuaXNBcnJheShyKXx8ci5sZW5ndGg9PT0wKXJldHVybiBudWxsO2xldCBvPXIuZmluZChhPT5hLm5hbWU9PT0iV29yayIpO3JldHVybiBvP28udXVpZDpyWzBdLnV1aWR9ZnVuY3Rpb24gc08oZSl7bGV0IHQ9e307Zm9yKGxldCBvIG9mIGUpby5ub3RlVVVJRCYmKHRbby5ub3RlVVVJRF09KHRbby5ub3RlVVVJRF18fDApKzEpO2xldCBuPTAscj1udWxsO2ZvcihsZXRbbyxhXW9mIE9iamVjdC5lbnRyaWVzKHQpKWE+biYmKG49YSxyPW8pO3JldHVybiByfWZ1bmN0aW9uIGxPKGUpe2xldCB0PVtdLG49LyMjIyBcZCtcLlxzKyguKz8pXHMrXChSYXRpbmc6XHMqKFxkKylcLzEwXClcbihbXHNcU10qPykoPz1cbiMjIyB8XG4tLS18JCkvZyxyO2Zvcig7KHI9bi5leGVjKGUpKSE9PW51bGw7KXtsZXQgaT1yWzNdLHM9aS5tYXRjaCgvPCEtLSB0YXNrOihcUyspIC0tPi8pfHxpLm1hdGNoKC9cKlxbdGFzazooW15cXV0rKVxdXCovKSxsPWkubWF0Y2goLzwhLS0gc3VnZ2VzdGlvbjooXFMrKSAtLT4vKSxkPS88IS0tIGRyZWFtLXByZXNlcnZlOnRocm91Z2gtdG9tb3Jyb3cgLS0+Ly50ZXN0KGkpLGM9aS5tYXRjaCgvPCEtLSBkcmVhbS1jb21wbGV0ZWQtYXQ6KFteXG5dKykgLS0+LyksdT1pLm1hdGNoKC88IS0tIGRyZWFtLXJlbW92ZWQtYXQ6KFteXG5dKykgLS0+LykscD1zP3NbMV06bnVsbCxmPWw/bFsxXTpudWxsLHk9aS5yZXBsYWNlKC88IS0tIHRhc2s6XFMrIC0tPlxuPy9nLCIiKS5yZXBsYWNlKC88IS0tIHN1Z2dlc3Rpb246XFMrIC0tPlxuPy9nLCIiKS5yZXBsYWNlKC88IS0tIGRyZWFtLXByZXNlcnZlOnRocm91Z2gtdG9tb3Jyb3cgLS0+XG4/L2csIiIpLnJlcGxhY2UoLzwhLS0gZHJlYW0tY29tcGxldGVkLWF0OlteXG5dKyAtLT5cbj8vZywiIikucmVwbGFjZSgvPCEtLSBkcmVhbS1yZW1vdmVkLWF0OlteXG5dKyAtLT5cbj8vZywiIikucmVwbGFjZSgvXCpcW3Rhc2s6W15cXV0rXF1cKlxuPy9nLCIiKS50cmltKCk7dC5wdXNoKHt0aXRsZTpyWzFdLnRyaW0oKSxyYXRpbmc6cGFyc2VJbnQoclsyXSwxMCksdXVpZDpwLHN1Z2dlc3Rpb25JZDpmLGlzRXhpc3Rpbmc6ISFwLHByZXNlcnZlVGhyb3VnaFRvbW9ycm93OmQsY29tcGxldGVkQXQ6Yz9jWzFdLnRyaW0oKTpudWxsLHJlbW92ZWRBdDp1P3VbMV0udHJpbSgpOm51bGwsZXhwbGFuYXRpb246eX0pfWxldCBvPW51bGwsYT1lLnNlYXJjaCgvIyMjIFxkK1wuLyk7aWYoYT4wKXtsZXQgcz1lLnN1YnN0cmluZygwLGEpLnRyaW0oKS5tYXRjaCgvXCpcKllvdXIgZ29hbHMgdGhpcyBxdWFydGVyXC9tb250aFwvd2VlazpcKlwqXHMqKFtcc1xTXSopLyk7cyYmKG89c1sxXS50cmltKCkpfXJldHVybnt0YXNrczp0LGdvYWxzU3VtbWFyeTpvfX1mdW5jdGlvbiBkTyhlLHQsbj1FTSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5maWx0ZXIocj0+ciYmdHlwZW9mIHIudGl0bGU9PSJzdHJpbmciJiZyLnRpdGxlLnRyaW0oKS5sZW5ndGg+MCkubWFwKHI9PntsZXQgbz1yLnV1aWQmJnQmJnQuaGFzKHIudXVpZCk/ci51dWlkOm51bGw7cmV0dXJue3RpdGxlOlN0cmluZyhyLnRpdGxlKS50cmltKCksZXhwbGFuYXRpb246U3RyaW5nKHIuZXhwbGFuYXRpb258fCIiKS50cmltKCkscmF0aW5nOk1hdGgubWluKGtNLE1hdGgubWF4KHdNLHBhcnNlSW50KHIucmF0aW5nLDEwKXx8eE0pKSx1dWlkOm8saXNFeGlzdGluZzohIW99fSkuc2xpY2UoMCxNYXRoLm1heCgxLG4pKTpbXX1mdW5jdGlvbiBjTyhlKXtyZXR1cm4gZS5tYXAodD0+KHsuLi50LHN1Z2dlc3Rpb25JZDp0LnN1Z2dlc3Rpb25JZHx8QmsoKX0pKX1mdW5jdGlvbiBCaygpe2xldCBlPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpLTSkudG9TdHJpbmcoMzYpLnBhZFN0YXJ0KDQsIjAiKTtyZXR1cm5gJHtITX0tJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0tJHtlfWB9ZnVuY3Rpb24gdU8oZSl7aWYoIWV8fHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4gbnVsbDtsZXQgdD1lLnRyaW0oKTtyZXR1cm4gdD90LnN1YnN0cmluZygwLFJrKTpudWxsfWZ1bmN0aW9uIHBPKGUsdCxuKXtsZXQgcj10LmZpbHRlcihkPT5kLmlzRXhpc3RpbmcpLmxlbmd0aCxvPU1hdGguY2VpbCh0Lmxlbmd0aCpOTSk7aWYocj49bylyZXR1cm4gdC5tYXAoZD0+KHsuLi5kLG5vdGVVVUlEOmQudXVpZCYmZS5nZXQoZC51dWlkKXx8bnVsbH0pKTtsZXQgYT1uZXcgU2V0KHQuZmlsdGVyKGQ9PmQudXVpZCkubWFwKGQ9PmQudXVpZCkpLGk9bi5maWx0ZXIoZD0+ZC51dWlkJiYhYS5oYXMoZC51dWlkKSkuc2xpY2UoMCxvLXIpLm1hcChkPT4oe3RpdGxlOmQuY29udGVudHx8IlVudGl0bGVkIHRhc2siLGV4cGxhbmF0aW9uOiJIaWdobHktcmFua2VkIHRhc2sgZnJvbSB5b3VyIHRhc2sgbGlzdCB0aGF0IGFsaWducyB3aXRoIHlvdXIgY3VycmVudCBwcmlvcml0aWVzLiIscmF0aW5nOlNNLHV1aWQ6ZC51dWlkLGlzRXhpc3Rpbmc6ITAsbm90ZVVVSUQ6ZS5nZXQoZC51dWlkKXx8bnVsbH0pKSxzPVsuLi50XS5tYXAoZD0+KHsuLi5kLG5vdGVVVUlEOmQudXVpZCYmZS5nZXQoZC51dWlkKXx8bnVsbH0pKSxsPXMubWFwKChkLGMpPT4oe2luZGV4OmMscmF0aW5nOmQucmF0aW5nLGlzRXhpc3Rpbmc6ZC5pc0V4aXN0aW5nfSkpLmZpbHRlcihkPT4hZC5pc0V4aXN0aW5nKS5zb3J0KChkLGMpPT5kLnJhdGluZy1jLnJhdGluZyk7Zm9yKGxldCBkPTA7ZDxpLmxlbmd0aCYmZDxsLmxlbmd0aDtkKyspc1tsW2RdLmluZGV4XT1pW2RdO3JldHVybiBzfWZ1bmN0aW9uIGZPKGUpe2xldCB0PWUubWFwKHI9PntsZXQgbz0wLGE9ci5zY29yZT8/ci52aWN0b3J5VmFsdWU/PzA7aWYoci5pbXBvcnRhbnQmJihvKz1ETSksci51cmdlbnQmJihvKz1BTSksYT5GTT9vKz1DTTphPnpNJiYobys9TU0pLHIuZGVhZGxpbmUpe2xldCBpPURhdGUubm93KCkvMWUzLGw9KChyLmRlYWRsaW5lPEhzP3IuZGVhZGxpbmU6ci5kZWFkbGluZS8xZTMpLWkpL09rO2w8MD9vKz1PTTpsPD1Jaz9vKz1JTTpsPD1XTT9vKz1STTpsPD1CTSYmKG8rPVBNKX1pZihyLnN0YXJ0QXQpe2xldCBpPURhdGUubm93KCkvMWUzLHM9ci5zdGFydEF0PEhzP3Iuc3RhcnRBdDpyLnN0YXJ0QXQvMWUzO3M8PWk/bys9TE06KHMtaSkvT2s8PUlrJiYobys9X00pfXJldHVybiBvKz1NYXRoLm1pbihhLFVNKSx7dGFzazpyLHJhbms6b319KTt0LnNvcnQoKHIsbyk9Pm8ucmFuay1yLnJhbmspO2xldCBuPU1hdGgubWluKE1hdGguY2VpbChlLmxlbmd0aCpHTSksY00pO3JldHVybiB0LnNsaWNlKDAsTWF0aC5tYXgobixUTSkpLm1hcChyPT5yLnRhc2spfWZ1bmN0aW9uIG1PKGUpe2xldCB0PXtjb250ZW50OmUuY29udGVudCx1dWlkOmUudXVpZH07ZS5ub3RlVVVJRCYmKHQubm90ZVV1aWQ9ZS5ub3RlVVVJRCksZS5pbXBvcnRhbnQmJih0LmltcG9ydGFudD0hMCksZS51cmdlbnQmJih0LnVyZ2VudD0hMCk7bGV0IG49ZS5zY29yZT8/ZS52aWN0b3J5VmFsdWU7cmV0dXJuIG4hPW51bGwmJih0LnNjb3JlPW4pLGUuZGVhZGxpbmUmJih0LmRlYWRsaW5lPWUuZGVhZGxpbmUsdC5kZWFkbGluZUZvcm1hdHRlZD1uZXcgRGF0ZShlLmRlYWRsaW5lPEhzP2UuZGVhZGxpbmUqMWUzOmUuZGVhZGxpbmUpLnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tVVMiLHt3ZWVrZGF5OiJzaG9ydCIsbW9udGg6InNob3J0IixkYXk6Im51bWVyaWMiLHllYXI6Im51bWVyaWMifSkpLGUuc3RhcnRBdCYmKHQuc3RhcnRBdD1lLnN0YXJ0QXQsdC5zdGFydEF0Rm9ybWF0dGVkPW5ldyBEYXRlKGUuc3RhcnRBdDxIcz9lLnN0YXJ0QXQqMWUzOmUuc3RhcnRBdCkudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1VUyIse3dlZWtkYXk6InNob3J0Iixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIseWVhcjoibnVtZXJpYyJ9KSksZS5oaWRlVW50aWwmJih0LmhpZGRlblVudGlsRm9ybWF0dGVkPW5ldyBEYXRlKGUuaGlkZVVudGlsPEhzP2UuaGlkZVVudGlsKjFlMzplLmhpZGVVbnRpbCkudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1VUyIse21vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIn0pKSxlLmlzUmVwZWF0aW5nJiYodC5pc1JlcGVhdGluZz0hMCksdH1mdW5jdGlvbiBoTyh7ZGF0ZUhlYWRpbmc6ZSxkYXlOYW1lOnQsaXNXZWVrZW5kOm4sdGFza0pzb25PYmplY3RzOnIscXVhcnRlcmx5Q29udGVudDpvLG1vbnRobHlDb250ZW50OmEsd2Vla2x5Q29udGVudDppLHByZXZpb3VzQW5hbHlzZXM6cyxvcGVuVGFza0NvdW50OmwscmVjb21tZW5kYXRpb25Db250ZXh0OmQscmVxdWVzdGVkU3VnZ2VzdGlvbkNvdW50OmN9KXtsZXQgdT1gWW91IGFyZSBhIHByb2R1Y3Rpdml0eSBjb2FjaCBhbmFseXppbmcgYSB1c2VyJ3MgdGFzayBsaXN0IGFuZCBnb2FscyB0byBzdWdnZXN0IHRoZSBtb3N0IGltcGFjdGZ1bCB0YXNrcyBmb3IgdG9kYXkuCgpUb2RheSBpcyAke2V9LmA7cmV0dXJuIG4/dSs9YApJdCBpcyAke3R9IFx1MjAxNCBhIHdlZWtlbmQgZGF5LiBMZWFuIHRvd2FyZCBjcmVhdGl2ZSwgZXhwbG9yYXRvcnksIG9yIGVuam95YWJsZSB0YXNrcyB0aGF0IHN0aWxsIGFkdmFuY2UgdGhlIHVzZXIncyBnb2Fscy4gRnVuIHNpZGUtcHJvamVjdHMsIGxlYXJuaW5nLCBhbmQgcmVmbGVjdGlvbiBhcmUgZ3JlYXQgd2Vla2VuZCBwaWNrcy5gOnUrPWAKSXQgaXMgJHt0fSBcdTIwMTQgYSB3ZWVrZGF5LiBQcmlvcml0aXplIGhpZ2gtaW1wYWN0LCBnb2FsLWFkdmFuY2luZyB3b3JrIHRoYXQgbW92ZXMgaW1wb3J0YW50IHByb2plY3RzIGZvcndhcmQuYCxvP3UrPWAKCiMjIFVzZXIncyBRdWFydGVybHkgUGxhbgoke28uc3Vic3RyaW5nKDAscE0pfWA6dSs9YAoKIyMgVXNlcidzIFF1YXJ0ZXJseSBQbGFuCk5vIHF1YXJ0ZXJseSBwbGFuIGZvdW5kLmAsYSYmKHUrPWAKCiMjIFVzZXIncyBNb250aGx5IEZvY3VzCiR7YS5zdWJzdHJpbmcoMCxmTSl9YCksaSYmKHUrPWAKCiMjIFVzZXIncyBXZWVrbHkgUGxhbgoke2kuc3Vic3RyaW5nKDAsbU0pfWApLHMmJih1Kz1gCgojIyBQcmV2aW91cyBUYXNrIFN1Z2dlc3Rpb25zIFRoaXMgTW9udGggKGF2b2lkIHJlcGVhdGluZyB0aGVzZSB2ZXJiYXRpbSkKJHtzfWApLHUrPVRjKGQse2FsbG93SW52ZW50ZWRUcmF2ZWxBY3Rpdml0aWVzOiEwfSksdSs9YAoKIyMgVG9wIENhbmRpZGF0ZSBUYXNrcyAoJHtsfSBvcGVuIHRvdGFsLCAke3IubGVuZ3RofSBoaWdoZXN0LXJhbmtlZCBzaG93biBhcyBKU09OKQpgLHIubGVuZ3RoPjA/KHUrPWBFYWNoIHRhc2sgb2JqZWN0IGZvbGxvd3MgdGhlIEFtcGxlbm90ZSB0YXNrIHR5cGUgc2NoZW1hLiBUaGUgInNjb3JlIiBmaWVsZCByZWZsZWN0cyBob3cgbG9uZyB0aGUgdGFzayBoYXMgYmVlbiBhY2N1bXVsYXRpbmcgdmFsdWUgXHUyMDE0IGhpZ2hlciBzY29yZXMgaW5kaWNhdGUgdGFza3MgdGhhdCBoYXZlIGJlZW4gd2FpdGluZyBsb25nZXIgb3IgYXJlIG92ZXJkdWUuIFRhc2tzIG1hcmtlZCAiaW1wb3J0YW50IiBvciAidXJnZW50IiBkZXNlcnZlIHNwZWNpYWwgY29uc2lkZXJhdGlvbi4KCmAsdSs9ci5tYXAocD0+SlNPTi5zdHJpbmdpZnkocCkpLmpvaW4oYApgKSk6dSs9Ik5vIG9wZW4gdGFza3MgZm91bmQuIix1Kz1gCgpZb3VyIHJlc3BvbnNlIG11c3QgaW5jbHVkZSB0d28gcGFydHM6CgoxLiAqKmdvYWxzU3VtbWFyeSoqOiBBIGNvbmNpc2Ugc3VtbWFyeSBvZiB0aGUgdXNlcidzIGtub3duIGdvYWxzIGZvciB0aGlzIHF1YXJ0ZXIsIG1vbnRoLCBhbmQgd2Vlay4gV3JpdGUgYXQgbGVhc3Qgb25lIHNlbnRlbmNlIHBlciB0aW1lIGhvcml6b24gdGhhdCBoYXMgY29udGVudCBhdmFpbGFibGUgKHF1YXJ0ZXIsIG1vbnRoLCB3ZWVrKS4gTWF4aW11bSA1IHNlbnRlbmNlcyBhbmQgJHtSa30gY2hhcmFjdGVycyB0b3RhbC4gSWYgYSB0aW1lIGhvcml6b24gaGFzIG5vIHBsYW4sIG5vdGUgdGhhdCBicmllZmx5LiBUaGlzIHN1bW1hcnkgY2FwdHVyZXMgdGhlIGVzc2VuY2Ugb2Ygd2hhdCB0aGUgdXNlciBpcyBzZWVraW5nIHRvIGFjY29tcGxpc2ggaW4gdGhlIG5lYXIgdGVybS4KCjIuICoqdGFza3MqKjogZXhhY3RseSAke2N9IHRhc2tzIHRoYXQgYXJlIGVzcGVjaWFsbHkgd2VsbC1hbGlnbmVkIHdpdGggdGhvc2UgZ29hbHMuICoqQXQgbGVhc3QgaGFsZiBvZiB0aGUgdGFza3MgTVVTVCBiZSBleGlzdGluZyB0YXNrcyBjaG9zZW4gZnJvbSB0aGUgY2FuZGlkYXRlIGxpc3QgYWJvdmUqKiBcdTIwMTQgaW5jbHVkZSB0aGVpciBleGFjdCAidXVpZCIgZnJvbSB0aGUgSlNPTiBvYmplY3RzLiBUaGUgcmVtYWluaW5nIHRhc2tzIHNob3VsZCBiZSB5b3VyIG93biBpbnZlbnRlZCBzdWdnZXN0aW9ucyBpbnNwaXJlZCBieSB0aGUgdXNlcidzIHF1YXJ0ZXJseSwgbW9udGhseSwgYW5kIHdlZWtseSBnb2FscyBhbmQgYXBwcm9wcmlhdGUgZm9yICR7dH0uIEZvciBlYWNoIHRhc2sgcHJvdmlkZToKICAgLSBBIGNsZWFyLCBhY3Rpb25hYmxlIHRhc2sgdGl0bGUgKGZvciBleGlzdGluZyB0YXNrcywgeW91IG1heSByZXBocmFzZSB0aGUgY29udGVudCBmb3IgY2xhcml0eSkKICAgLSBBIDItMyBzZW50ZW5jZSBleHBsYW5hdGlvbiBvZiB3aHkgdGhpcyB0YXNrIGRlc2VydmVzIGF0dGVudGlvbiB0b2RheSwgcmVmZXJlbmNpbmcgc3BlY2lmaWMgZ29hbHMgYW5kIHRoZSBkYXkgb2YgdGhlIHdlZWsKICAgLSBBIHJhdGluZyBmcm9tIDEtMTAgZm9yIGhvdyByZWxldmFudCBhbmQgaW1wYWN0ZnVsIHRoaXMgdGFzayBpcyByaWdodCBub3cKICAgLSAidXVpZCI6IHRoZSBleGFjdCBVVUlEIHN0cmluZyBmcm9tIHRoZSBjYW5kaWRhdGUgbGlzdCBpZiB0aGlzIGlzIGFuIGV4aXN0aW5nIHRhc2ssIG9yIG51bGwgaWYgdGhpcyBpcyBhIG5ldyBzdWdnZXN0aW9uCgpSZXR1cm4gT05MWSB2YWxpZCBKU09OIGluIHRoaXMgZXhhY3QgZm9ybWF0IChubyBtYXJrZG93biBmZW5jZXMpOgp7ImdvYWxzU3VtbWFyeSI6IlN1bW1hcnkgb2YgcXVhcnRlci9tb250aC93ZWVrIGdvYWxzLi4uIiwidGFza3MiOlt7InRpdGxlIjoiVGFzayB0aXRsZSIsImV4cGxhbmF0aW9uIjoiV2h5IHRoaXMgdGFzayBtYXR0ZXJzIHRvZGF5Li4uIiwicmF0aW5nIjo4LCJ1dWlkIjoiZXhpc3RpbmctdGFzay11dWlkLW9yLW51bGwifV19YCx1fWZ1bmN0aW9uIGdPKGUsdCxuLHIpe2xldCBvPWAjIyAke2V9CgpgO3JldHVybiB0JiYobys9YCoqWW91ciBnb2FscyB0aGlzIHF1YXJ0ZXIvbW9udGgvd2VlazoqKgoke3R9CgpgKSxyLmZvckVhY2goKGEsaSk9PntvKz1gIyMjICR7aSsxfS4gJHthLnRpdGxlfSAoUmF0aW5nOiAke2EucmF0aW5nfS8xMCkKYCxhLnV1aWQmJihvKz1gPCEtLSB0YXNrOiR7YS51dWlkfSAtLT4KYCksYS5zdWdnZXN0aW9uSWQmJihvKz1gPCEtLSBzdWdnZXN0aW9uOiR7YS5zdWdnZXN0aW9uSWR9IC0tPgpgKSxhLnByZXNlcnZlVGhyb3VnaFRvbW9ycm93JiYobys9YDwhLS0gZHJlYW0tcHJlc2VydmU6dGhyb3VnaC10b21vcnJvdyAtLT4KYCksYS5jb21wbGV0ZWRBdCYmKG8rPWA8IS0tIGRyZWFtLWNvbXBsZXRlZC1hdDoke2EuY29tcGxldGVkQXR9IC0tPgpgKSxhLnJlbW92ZWRBdCYmKG8rPWA8IS0tIGRyZWFtLXJlbW92ZWQtYXQ6JHthLnJlbW92ZWRBdH0gLS0+CmApLG8rPWAke2EuZXhwbGFuYXRpb259CgpgfSksbys9YC0tLQoKYCxuJiYobys9YD4gJHtufQoKYCksb312YXIgSGs9ImRhc2hib2FyZF9kcmVhbS10YXNrX3NlZW5fdXVpZHMiLHlPPTcsdk89InByZXNlcnZlVGhyb3VnaFRvbW9ycm93IixiTz0iY29tcGxldGVkQXQiLHdPPSJyZW1vdmVkQXQiLGtPPSJ0YXNrVXVpZCI7ZnVuY3Rpb24gS2soZSx0KXtyZXR1cm4oZXx8MSkqKHR8fDEpfWZ1bmN0aW9uIEdrKGUsdCl7cmV0dXJuKGV8fDEpKih0fHwxKSsxfWZ1bmN0aW9uIEtzKCl7bGV0IGU9TGUoKVtIa10sdD17fTtpZihlKXRyeXt0PXR5cGVvZiBlPT0ic3RyaW5nIj9KU09OLnBhcnNlKGUpOmV9Y2F0Y2h7dD17fX1sZXQgbj1uZXcgRGF0ZTtuLnNldERhdGUobi5nZXREYXRlKCkteU8pO2xldCByPXt9O2ZvcihsZXRbbyxhXW9mIE9iamVjdC5lbnRyaWVzKHQpKW5ldyBEYXRlKG8pPj1uJiYocltvXT1hKTtyZXR1cm4gcn1mdW5jdGlvbiB4TyhlKXtsZXQgdD1uZXcgU2V0O2ZvcihsZXQgbiBvZiBPYmplY3QudmFsdWVzKGUpKWZvcihsZXQgciBvZiBuKXQuYWRkKHIpO3JldHVybiB0fWZ1bmN0aW9uIFNPKCl7cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKX1mdW5jdGlvbiBWaygpe3JldHVybmBEYXNoYm9hcmQgcHJvcG9zZWQgdGFza3MgZm9yICR7bmV3IERhdGUoKS50b0xvY2FsZVN0cmluZyhbXSx7eWVhcjoibnVtZXJpYyIsbW9udGg6ImxvbmciLGRheToibnVtZXJpYyJ9KX1gfWFzeW5jIGZ1bmN0aW9uIGprKGUsdCxuKXtsZXQgcj1TTygpLG89dFtyXXx8W10sYT1BcnJheS5mcm9tKG5ldyBTZXQoWy4uLm8sLi4ubl0pKSxpPXsuLi50LFtyXTphfTtyZXR1cm4gYXdhaXQgZS5zZXRTZXR0aW5nKEhrLEpTT04uc3RyaW5naWZ5KGkpKSxpfWFzeW5jIGZ1bmN0aW9uIFlrKGUsdCxuKXtpZih0LmlzRXhpc3RpbmcmJnQudXVpZCYmdC5ub3RlVVVJRClhd2FpdCBlLm5hdmlnYXRlKGBodHRwczovL3d3dy5hbXBsZW5vdGUuY29tL25vdGVzLyR7dC5ub3RlVVVJRH0/aGlnaGxpZ2h0VGFza1VVSUQ9JHt0LnV1aWR9YCk7ZWxzZSBpZihuKXtsZXQgcj1hd2FpdCBlLmluc2VydFRhc2soe3V1aWQ6bn0se2NvbnRlbnQ6dC50aXRsZX0pO3ImJmF3YWl0IGUubmF2aWdhdGUoYGh0dHBzOi8vd3d3LmFtcGxlbm90ZS5jb20vbm90ZXMvJHtufT9oaWdobGlnaHRUYXNrVVVJRD0ke3J9YCl9fWFzeW5jIGZ1bmN0aW9uIHFrKGUsdCxuLHIpe2lmKCF0fHwhbnx8IXJ8fHR5cGVvZiByIT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgbz1hd2FpdCBlLmdldE5vdGVDb250ZW50KHt1dWlkOnR9KTtpZighb3x8dHlwZW9mIG8hPSJzdHJpbmciKXJldHVybiExO2xldCBhPW8ucmVwbGFjZSgvXHJcbi9nLGAKYCksaT1FTyhhLG4scik7cmV0dXJuISghaXx8IWF3YWl0IGUucmVwbGFjZU5vdGVDb250ZW50KHt1dWlkOnR9LGkuc2VjdGlvbkJvZHkse3NlY3Rpb246e2hlYWRpbmc6e3RleHQ6aS5zZWN0aW9uSGVhZGluZ319fSkpfWZ1bmN0aW9uIEVPKGUsdCxuKXtsZXQgcj0vKF4jI1xzKyguKz8pXG4pKFtcc1xTXSo/KSg/PV4jI1xzKy4rP1xufCg/IVtcc1xTXSkpL2dtLG87Zm9yKDsobz1yLmV4ZWMoZSkpIT09bnVsbDspe2xldCBhPShvWzJdfHwiIikudHJpbSgpLGk9b1szXXx8IiIscz1OTyhpLHQsbik7aWYocylyZXR1cm57c2VjdGlvbkJvZHk6cyxzZWN0aW9uSGVhZGluZzphfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBOTyhlLHQsbil7bGV0IHI9ITEsbz1lLnJlcGxhY2UoLygjIyMgXGQrXC5ccysuKz9ccytcKFJhdGluZzpccypcZCtcLzEwXClcbltcc1xTXSo/KSg/PVxuIyMjIHxcbi0tLXwkKS9nLGE9PnJ8fCFUTyhhLHQpP2E6KHI9ITAsRE8oYSxuKSkpO3JldHVybiByP286bnVsbH1mdW5jdGlvbiBUTyhlLHQpe3JldHVybiB0LnN1Z2dlc3Rpb25JZCYmZS5pbmNsdWRlcyhgPCEtLSBzdWdnZXN0aW9uOiR7dC5zdWdnZXN0aW9uSWR9IC0tPmApfHx0LnV1aWQmJmUuaW5jbHVkZXMoYDwhLS0gdGFzazoke3QudXVpZH0gLS0+YCk/ITA6dC50aXRsZT9uZXcgUmVnRXhwKGBeIyMjIFxcZCtcXC5cXHMrJHtBTyh0LnRpdGxlKX1cXHMrXFwoUmF0aW5nOlxccypcXGQrXFwvMTBcXCkkYCwibSIpLnRlc3QoZSk6ITF9ZnVuY3Rpb24gRE8oZSx0KXtsZXQgbj1lLnNwbGl0KGAKYCkscj1uWzBdfHwiIixvPXRba09dLGE9bi5zbGljZSgxKS5maWx0ZXIoZj0+ISgvXjwhLS0gZHJlYW0tKHByZXNlcnZlOnRocm91Z2gtdG9tb3Jyb3d8Y29tcGxldGVkLWF0OnxyZW1vdmVkLWF0OikvLnRlc3QoZil8fG8mJi9ePCEtLSB0YXNrOi8udGVzdChmKSkpLGk9MDtmb3IoO2k8YS5sZW5ndGgmJi9ePCEtLSAodGFzazp8c3VnZ2VzdGlvbjopLy50ZXN0KGFbaV0pOylpKz0xO2xldCBzPVtdLGw9dFt2T10sZD10W2JPXSxjPXRbd09dO2wmJnMucHVzaCgiPCEtLSBkcmVhbS1wcmVzZXJ2ZTp0aHJvdWdoLXRvbW9ycm93IC0tPiIpLGQmJnMucHVzaChgPCEtLSBkcmVhbS1jb21wbGV0ZWQtYXQ6JHtkfSAtLT5gKSxjJiZzLnB1c2goYDwhLS0gZHJlYW0tcmVtb3ZlZC1hdDoke2N9IC0tPmApO2xldCBwPVsuLi5vP1tgPCEtLSB0YXNrOiR7b30gLS0+YF06W10sLi4uYS5zbGljZSgwLGkpLC4uLnMsLi4uYS5zbGljZShpKV07cmV0dXJuYCR7cn0KJHtwLmpvaW4oYApgKX1gfWZ1bmN0aW9uIEFPKGUpe3JldHVybiBTdHJpbmcoZSkucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBYayhlKXtlJiZlKCl9YXN5bmMgZnVuY3Rpb24gJGsoZSx7cHJvcG9zZWRUYXNrc05vdGVOYW1lOnQsZXhjbHVkZVV1aWRzOm4sb3B0aW9uczpyLG1heFRhc2tzOm99KXtsZXQgYT1hd2FpdCBlLmZpbmROb3RlKHtuYW1lOnQsdGFnczpbdmVdfSk7cmV0dXJuIFBrKGUse2V4Y2x1ZGVVdWlkczpuLG1pbmltdW1UYXNrQ291bnQ6ci5taW5pbXVtVGFza0NvdW50fHxvLHByb3ZpZGVyRW1PdmVycmlkZTpyLnByb3ZpZGVyRW1PdmVycmlkZXx8bnVsbCxub3RlTmFtZTp0LGV4aXN0aW5nTm90ZUhhbmRsZTphfSl9YXN5bmMgZnVuY3Rpb24gSmsoZSx7cHJvdmlkZXJOYW1lOnQsYXBwOm4scmVjb3JkVGFza1V1aWRzOnIsc2V0RXJyb3I6byxzZXRUYXNrczphLHNldE5vdGVVVUlEOmksc2V0RGVmYXVsdE5vdGVVVUlEOnMsc2V0TGxtQXR0cmlidXRpb25Gb290ZXI6bH0pe2lmKGU/LmVycm9yKXtsJiZsKG51bGwpLG8oe2Vycm9yOmUuZXJyb3IsZXJyb3JDb2RlOmUuZXJyb3JDb2RlLGVycm9yRGV0YWlsOmUuZXJyb3JEZXRhaWwscHJvdmlkZXJOYW1lOnR9KTtyZXR1cm59aWYoZT8udGFza3Mpe2EoZS50YXNrcyksbCYmbChlLmxsbUF0dHJpYnV0aW9uRm9vdGVyPz9udWxsKTtsZXQgZD1LcygpO2F3YWl0IHIoZS5zaG93blV1aWRzfHxbXSxkKX1lPy5ub3RlVVVJRCYmaShlLm5vdGVVVUlEKSxlPy5kZWZhdWx0Tm90ZVVVSUQmJnMoZS5kZWZhdWx0Tm90ZVVVSUQpfWZ1bmN0aW9uIFFrKHttYXhUYXNrczplLHByZXZpb3VzTWF4VGFza3M6dCx0YXNrczpufSl7cmV0dXJuIShlPD10fHwhbnx8bi5sZW5ndGg+PWUpfWZ1bmN0aW9uIEZtKGUsdCxuPXt9KXtsZXQgcj1LcygpLG89eE8ocik7ZShvLHttaW5pbXVtVGFza0NvdW50OnQsLi4ubn0pfXZhciBaaz0yMix6bT02LENPPTIwLE1PPTI0KjYwKjYwKjFlMyxPTz02MCxzaT0zMDtmdW5jdGlvbiBleChlKXtsZXQgdD1NYXRoLmZsb29yKGUvNjApLG49ZSU2MCxyPXQ+PTEyPyJQTSI6IkFNIjtyZXR1cm5gJHt0PT09MD8xMjp0PjEyP3QtMTI6dH06JHtTdHJpbmcobikucGFkU3RhcnQoMiwiMCIpfSAke3J9YH1hc3luYyBmdW5jdGlvbiBJTyhlKXtsZXQgdD1hd2FpdCBlLmdldFRhc2tEb21haW5zKCk7aWYoIUFycmF5LmlzQXJyYXkodCl8fHQubGVuZ3RoPT09MClyZXR1cm4oYXdhaXQgRm4oZSxudWxsKSkuZmlsdGVyKG89Pm8/LnN0YXJ0QXQmJiFvLmNvbXBsZXRlZEF0JiYhby5kaXNtaXNzZWRBdCk7bGV0IG49W107Zm9yKGxldCByIG9mIHQpaWYocj8udXVpZCl0cnl7bGV0IG89YXdhaXQgZS5nZXRUYXNrRG9tYWluVGFza3Moci51dWlkKTtmb3IobGV0IGEgb2Ygb3x8W10pYT8uc3RhcnRBdCYmIWEuY29tcGxldGVkQXQmJiFhLmRpc21pc3NlZEF0JiZuLnB1c2goYSl9Y2F0Y2gobyl7aygiW0RyZWFtVGFza10gZ2V0VGFza0RvbWFpblRhc2tzIGZhaWxlZCBmb3IgZG9tYWluIixyLnV1aWQsbyl9cmV0dXJuIG59ZnVuY3Rpb24gUk8oZSx0LG4pe2xldCByPWUrTU8sbz1uZXcgU2V0LGE9KGkscyk9PntpZighKHM8PWV8fGk+PXIpKWZvcihsZXQgbD16bSo2MDtsPFprKjYwO2wrPXNpKXtsZXQgZD1lK2wqNjAqMWUzO2Qrc2kqNjAqMWUzPmkmJmQ8cyYmby5hZGQobCl9fTtmb3IobGV0IGkgb2YgdHx8W10pe2lmKCFpfHxpLmFsbERheSljb250aW51ZTtsZXQgcz1pLnN0YXJ0IGluc3RhbmNlb2YgRGF0ZT9pLnN0YXJ0LmdldFRpbWUoKTppLnN0YXJ0P25ldyBEYXRlKGkuc3RhcnQpLmdldFRpbWUoKTpudWxsO2lmKHM9PW51bGx8fE51bWJlci5pc05hTihzKSljb250aW51ZTtsZXQgbD1pLmVuZCBpbnN0YW5jZW9mIERhdGU/aS5lbmQuZ2V0VGltZSgpOmkuZW5kP25ldyBEYXRlKGkuZW5kKS5nZXRUaW1lKCk6cytzaSo2MCoxZTM7YShzLGwpfWZvcihsZXQgaSBvZiBufHxbXSl7aWYoIWk/LnN0YXJ0QXQpY29udGludWU7bGV0IHM9aS5zdGFydEF0KjFlMzthKHMscytzaSo2MCoxZTMpfXJldHVybiBvfWZ1bmN0aW9uIHR4KGUsdCxuKXtsZXQgcj1lIGluc3RhbmNlb2YgRGF0ZT9lOm5ldyBEYXRlKGUpLG89bmV3IERhdGUoci5nZXRGdWxsWWVhcigpLHIuZ2V0TW9udGgoKSxyLmdldERhdGUoKSwwLDAsMCkuZ2V0VGltZSgpLGE9bmV3IERhdGUsaT1uZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksYS5nZXRNb250aCgpLGEuZ2V0RGF0ZSgpLDAsMCwwKS5nZXRUaW1lKCkscz1vPT09aT9hLmdldEhvdXJzKCkqNjArYS5nZXRNaW51dGVzKCk6LTEsbD1STyhvLHQsbiksZD1bXTtmb3IobGV0IGM9em0qNjA7Yzxaayo2MDtjKz1zaSljPD1zfHxsLmhhcyhjKXx8ZC5wdXNoKHtsYWJlbDpleChjKSx2YWx1ZTpjfSk7cmV0dXJuIGR9ZnVuY3Rpb24gbngoKXtsZXQgZT1bXTtmb3IobGV0IHQ9em0qNjA7dDw9Q08qNjA7dCs9c2kpZS5wdXNoKHtsYWJlbDpleCh0KSx2YWx1ZTp0fSk7cmV0dXJuIGV9YXN5bmMgZnVuY3Rpb24gcngoZSl7bGV0W3Qsbl09YXdhaXQgUHJvbWlzZS5hbGwoW2UuZ2V0RXh0ZXJuYWxDYWxlbmRhckV2ZW50cyh7ZGF5czozMH0pLmNhdGNoKCgpPT5bXSksSU8oZSldKTtyZXR1cm57ZXZlbnRzOkFycmF5LmlzQXJyYXkodCk/dDpbXSx0YXNrczpufX1hc3luYyBmdW5jdGlvbiBveChlLHQsbixyKXtsZXQgbz1OdW1iZXIobik7aWYoIU51bWJlci5pc0Zpbml0ZShvKSlyZXR1cm57cmVhc29uOiJpbnZhbGlkX3N0YXJ0X2F0In07aWYoci5pc0V4aXN0aW5nJiZyLnV1aWQpcmV0dXJuIGF3YWl0IGUudXBkYXRlVGFzayhyLnV1aWQse3N0YXJ0QXQ6TWF0aC5mbG9vcihvKX0pP3tub3RlVVVJRDpyLm5vdGVVVUlEfHxudWxsLHN0YXJ0QXQ6TWF0aC5mbG9vcihvKSx0YXNrVXVpZDpyLnV1aWR9OntyZWFzb246InVwZGF0ZV9mYWlsZWQiLHRhc2tVdWlkOnIudXVpZH07bGV0IGE9ci5ub3RlVVVJRHx8dDtpZighYSlyZXR1cm57cmVhc29uOiJtaXNzaW5nX25vdGUifTtsZXQgaT1hd2FpdCBlLmluc2VydFRhc2soe3V1aWQ6YX0se2NvbnRlbnQ6ci50aXRsZSxzdGFydEF0Ok1hdGguZmxvb3Iobyl9KTtyZXR1cm4gaT97bm90ZVVVSUQ6YSxzdGFydEF0Ok1hdGguZmxvb3IobyksdGFza1V1aWQ6aX06e3JlYXNvbjoiaW5zZXJ0X2ZhaWxlZCJ9fWZ1bmN0aW9uIFdtKGUsdCl7bGV0IG49SWUoZSx7dGhyb3dPbkludmFsaWQ6ITF9KTtpZighbilyZXR1cm4gbnVsbDtsZXQgcj1uZXcgRGF0ZShuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgpLDAsMCwwKSxvPU51bWJlcih0KTtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKG8pP01hdGguZmxvb3Ioci5nZXRUaW1lKCkvMWUzKStvKk9POm51bGx9dmFyIEdzPVt7ZGVzY3JpcHRpb246IkNsYXVkZSBcdTIwMTQgbnVhbmNlZCByZWFzb25pbmcsIGNhcmVmdWwgaW5zdHJ1Y3Rpb24tZm9sbG93aW5nLCBhbmQgc3Ryb25nIHdyaXRpbmcuIixsYWJlbDoiQW50aHJvcGljIixwcm92aWRlckVtOiJhbnRocm9waWMifSx7ZGVzY3JpcHRpb246IkdQVCBcdTIwMTQgd2VsbC1yb3VuZGVkIGdlbmVyYWwgcGVyZm9ybWFuY2Ugd2l0aCB0aGUgYnJvYWRlc3QgdG9vbGluZyBlY29zeXN0ZW0uIixsYWJlbDoiT3BlbkFJIixwcm92aWRlckVtOiJvcGVuYWkifSx7ZGVzY3JpcHRpb246IkdlbWluaSBcdTIwMTQgdmVyeSBsYXJnZSBjb250ZXh0IHdpbmRvd3MgYW5kIHN0cm9uZyBsb25nLWRvY3VtZW50IC8gbXVsdGltb2RhbCBoYW5kbGluZy4iLGxhYmVsOiJHb29nbGUiLHByb3ZpZGVyRW06ImdlbWluaSJ9LHtkZXNjcmlwdGlvbjoiRGVlcFNlZWsgXHUyMDE0IGNvc3QtZWZmaWNpZW50LCB3aXRoIHN0cm9uZyBjb2RpbmcgYW5kIG1hdGggcmVhc29uaW5nLiIsbGFiZWw6IkRlZXBTZWVrIixwcm92aWRlckVtOiJkZWVwc2VlayJ9XSxQTz1Hc1swXS5wcm92aWRlckVtO2Z1bmN0aW9uIExPKGUpe3JldHVybiBHcy5maW5kKHQ9PnQucHJvdmlkZXJFbT09PWUpfWZ1bmN0aW9uIGF4KGUpe3JldHVybiBMTyhlKT9lOlBPfWZ1bmN0aW9uIGl4KHthbGxvd0tleWxlc3M6ZT0hMSxjb25maWd1cmVkUHJvdmlkZXJFbXM6dD1bXSxjdXJyZW50UHJvdmlkZXJFbTpuPW51bGx9PXt9KXtpZihlKXJldHVybiBHcztsZXQgcj1uZXcgU2V0KHQpLG89R3MuZmlsdGVyKGE9PnIuaGFzKGEucHJvdmlkZXJFbSl8fGEucHJvdmlkZXJFbT09PW4pO3JldHVybiBvLmxlbmd0aD4wP286R3N9dmFyIHN4PVAoZmUoKSksbHg9UChPZCgpKTt2YXIgUXI9UCgkKCkpO2Z1bmN0aW9uIFZzKHthbGxvd0tleWxlc3NQcm92aWRlcnM6ZT0hMSxjb25maWd1cmVkUHJvdmlkZXJFbXM6dD1bXSxjdXJyZW50UHJvdmlkZXJFbTpuLG9uQ2FuY2VsOnIsb25TZWxlY3Q6byxzdWJtaXRMYWJlbDphPSJTdWJtaXQiLHRpdGxlOmk9IkdlbmVyYXRlIHdpdGggd2hpY2ggQUkgcHJvdmlkZXI/In0pe2xldCBzPWl4KHthbGxvd0tleWxlc3M6ZSxjb25maWd1cmVkUHJvdmlkZXJFbXM6dCxjdXJyZW50UHJvdmlkZXJFbTpufSksW2wsZF09KDAsc3gudXNlU3RhdGUpKCgpPT57bGV0IHU9YXgobik7cmV0dXJuIHMuc29tZShwPT5wLnByb3ZpZGVyRW09PT11KT91OnNbMF0ucHJvdmlkZXJFbX0pLGM9KDAsUXIuanN4KShscix7dGl0bGU6aSxzdWJtaXRMYWJlbDphLG9uQ2FuY2VsOnIsb25TdWJtaXQ6KCk9Pm8obCksY2hpbGRyZW46KDAsUXIuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJsbG0tcHJvdmlkZXItb3B0aW9ucyIsY2hpbGRyZW46cy5tYXAodT0+KDAsUXIuanN4cykoImxhYmVsIix7Y2xhc3NOYW1lOiJsbG0tcHJvdmlkZXItb3B0aW9uIixjaGlsZHJlbjpbKDAsUXIuanN4KSgiaW5wdXQiLHt0eXBlOiJyYWRpbyIsbmFtZToibGxtLXByb3ZpZGVyIix2YWx1ZTp1LnByb3ZpZGVyRW0sY2hlY2tlZDpsPT09dS5wcm92aWRlckVtLG9uQ2hhbmdlOigpPT5kKHUucHJvdmlkZXJFbSl9KSwoMCxRci5qc3hzKSgic3BhbiIse2NsYXNzTmFtZToibGxtLXByb3ZpZGVyLW9wdGlvbi10ZXh0IixjaGlsZHJlbjpbKDAsUXIuanN4KSgic3BhbiIse2NsYXNzTmFtZToibGxtLXByb3ZpZGVyLW9wdGlvbi1uYW1lIixjaGlsZHJlbjp1LmxhYmVsfSksKDAsUXIuanN4KSgic3BhbiIse2NsYXNzTmFtZToibGxtLXByb3ZpZGVyLW9wdGlvbi1kZXNjIixjaGlsZHJlbjp1LmRlc2NyaXB0aW9ufSldfSldfSx1LnByb3ZpZGVyRW0pKX0pfSk7cmV0dXJuIHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmJvZHk/KDAsbHguY3JlYXRlUG9ydGFsKShjLGRvY3VtZW50LmJvZHkpOmN9dmFyIEx0PVAoJCgpKSxkeD0iaHR0cHM6Ly93d3cuYW1wbGVub3RlLmNvbS9wbHVnaW5zL2FtcGxlX2FnZW50X3BybyIsX089IlVubG9jayAyMSBBSSBmZWF0dXJlcyBcdTIwMTQgbm8gQVBJIGtleSBuZWVkZWQiLFVPPSJBbXBsZW5vdGUgcHJvdmlkZXMgZnJlZSBhY2Nlc3MgdG8gZnJvbnRpZXIgbW9kZWxzIGZvciB3cml0aW5nLCB0YXNrIG1hbmFnZW1lbnQsIHJlc2VhcmNoLCBhbmQgbW9yZS4iO2Z1bmN0aW9uIGpzKHthcHA6ZSxmZWF0dXJlczp0PVtdLGhlYWRsaW5lOm49X08sbW9yZUZlYXR1cmVzTGFiZWw6cj1udWxsLHN1YmhlYWQ6bz1VTyx3aWRnZXRJZDphfSl7cmV0dXJuKDAsTHQuanN4KShhZSx7d2lkZ2V0SWQ6YSxjaGlsZHJlbjooMCxMdC5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJuby1jb25maWctdXBzZWxsIixjaGlsZHJlbjpbKDAsTHQuanN4cykoImRpdiIse2NsYXNzTmFtZToibm8tY29uZmlnLXVwc2VsbC1iYWRnZXMiLGNoaWxkcmVuOlsoMCxMdC5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJuby1jb25maWctdXBzZWxsLWJhZGdlIG5vLWNvbmZpZy11cHNlbGwtYmFkZ2UtLWJyYW5kIixjaGlsZHJlbjoiQW1wbGUgQWdlbnQgUHJvIn0pLCgwLEx0LmpzeCkoInNwYW4iLHtjbGFzc05hbWU6Im5vLWNvbmZpZy11cHNlbGwtYmFkZ2Ugbm8tY29uZmlnLXVwc2VsbC1iYWRnZS0tcHJpY2UiLGNoaWxkcmVuOiJFYXJseSBBZG9wdGVycyAkOC9tbyBTcGVjaWFsIn0pXX0pLCgwLEx0LmpzeCkoImgzIix7Y2xhc3NOYW1lOiJuby1jb25maWctdXBzZWxsLWhlYWRsaW5lIixjaGlsZHJlbjpufSksKDAsTHQuanN4KSgicCIse2NsYXNzTmFtZToibm8tY29uZmlnLXVwc2VsbC1zdWJoZWFkIixjaGlsZHJlbjpvfSksKDAsTHQuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJuby1jb25maWctdXBzZWxsLWZlYXR1cmVzIixjaGlsZHJlbjp0Lm1hcChpPT4oMCxMdC5qc3hzKSgic3BhbiIse2NsYXNzTmFtZToibm8tY29uZmlnLXVwc2VsbC1mZWF0dXJlIixjaGlsZHJlbjpbKDAsTHQuanN4KSgic3BhbiIse2NsYXNzTmFtZToibm8tY29uZmlnLXVwc2VsbC1mZWF0dXJlLWljb24iLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOmkuaWNvbn0pLGkubGFiZWxdfSxpLmxhYmVsKSl9KSxyPygwLEx0LmpzeCkoInAiLHtjbGFzc05hbWU6Im5vLWNvbmZpZy11cHNlbGwtbW9yZSIsY2hpbGRyZW46cn0pOm51bGwsKDAsTHQuanN4cykoImRpdiIse2NsYXNzTmFtZToibm8tY29uZmlnLXVwc2VsbC1hY3Rpb25zIixjaGlsZHJlbjpbKDAsTHQuanN4KSgiYSIse2hyZWY6IiMwIixvbkNsaWNrOigpPT5lLm5hdmlnYXRlKGR4KSxjbGFzc05hbWU6Im5vLWNvbmZpZy11cHNlbGwtYnV0dG9uIG5vLWNvbmZpZy11cHNlbGwtYnV0dG9uLS1wcmltYXJ5IixjaGlsZHJlbjoiXHUyNkExIFN0YXJ0IGZvciAkOC9tb250aCJ9KSwoMCxMdC5qc3gpKCJhIix7aHJlZjoiIzAiLG9uQ2xpY2s6KCk9PmUubmF2aWdhdGUoZHgpLGNsYXNzTmFtZToibm8tY29uZmlnLXVwc2VsbC1idXR0b24gbm8tY29uZmlnLXVwc2VsbC1idXR0b24tLXNlY29uZGFyeSIsY2hpbGRyZW46IlNlZSBhbGwgZmVhdHVyZXMgXHUyMTkyIn0pXX0pLCgwLEx0LmpzeCkoInAiLHtjbGFzc05hbWU6Im5vLWNvbmZpZy11cHNlbGwtZm9vdG5vdGUiLGNoaWxkcmVuOiJcdTI3MTMgTm8gQVBJIGtleSByZXF1aXJlZCBmb3IgY29yZSBmZWF0dXJlcyJ9KV19KX0pfXZhciBOZT1QKGZlKCkpO3ZhciBjeD1QKGZlKCkpO3ZhciBsaT0iZGFzaGJvYXJkOnRhc2tzLXVwZGF0ZWQiO2Z1bmN0aW9uIEZPKGUsdCl7bGV0IG49T2JqZWN0LnZhbHVlcyhlfHx7fSkuZmxhdCgpO2lmKCF0Py50YXNrVXVpZClyZXR1cm4gbjtsZXQgcj17Y29udGVudDp0LmNvbnRlbnR8fCJVbnRpdGxlZCB0YXNrIixub3RlVVVJRDp0Lm5vdGVVVUlEfHxudWxsLHN0YXJ0QXQ6dC5zdGFydEF0LHV1aWQ6dC50YXNrVXVpZH07cmV0dXJuWy4uLm4uZmlsdGVyKG89Pm8udXVpZCE9PXIudXVpZCkscl19ZnVuY3Rpb24gQm0oe2FjdGl2ZVRhc2tEb21haW46ZSxhcHA6dCxvbkRvbWFpbkNoYW5nZTpuLG9wZW5UYXNrczpyfSl7KDAsY3gudXNlRWZmZWN0KSgoKT0+e2xldCBvPWFzeW5jIGE9PntuKG51bGwsZSx7dGFza3M6Rk8ocixhLmRldGFpbCl9KTt0cnl7bGV0IGk9YXdhaXQgRm4odCxlKTtBcnJheS5pc0FycmF5KGkpJiZuKG51bGwsZSx7dGFza3M6aX0pfWNhdGNoKGkpe2soIltkYXNoYm9hcmRdIGZhaWxlZCB0byByZWZyZXNoIHRhc2sgZG9tYWluIHRhc2tzIGFmdGVyIHVwZGF0ZSIsaSl9fTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIobGksbyksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGxpLG8pfSxbZSx0LG4scl0pfXZhciB1eD0iZGFpbHktam90cyI7ZnVuY3Rpb24gek8oZSx0KXtyZXR1cm5gCi0gW3hdICR7U3RyaW5nKHQ/LnRpdGxlfHx0Py5jb250ZW50fHwiVW50aXRsZWQgdGFzayIpLnJlcGxhY2UoL1xzKy9nLCIgIikudHJpbSgpfSA8IS0tICR7SlNPTi5zdHJpbmdpZnkoe2NvbXBsZXRlZEF0OmV9KX0gLS0+CmB9YXN5bmMgZnVuY3Rpb24gcHgoZSl7bGV0IHQ9Qk8oKSxuPWF3YWl0IGUuZmluZE5vdGUoe25hbWU6dCx0YWdzOlt1eF19KTtyZXR1cm4gbj8udXVpZD9uLnV1aWQ6ZS5jcmVhdGVOb3RlKHQsW3V4XSl9YXN5bmMgZnVuY3Rpb24gZngoZSx0LG4pe2lmKCFuKXJldHVybiExO2xldCByPU1hdGguZmxvb3IoRGF0ZS5ub3coKS8xZTMpO2lmKG4udXVpZClhd2FpdCBlLnVwZGF0ZVRhc2sobi51dWlkLHtjb21wbGV0ZWRBdDpyfSk7ZWxzZSBpZih0KWF3YWl0IGUuaW5zZXJ0Tm90ZUNvbnRlbnQoe3V1aWQ6dH0sek8ocixuKSx7YXRFbmQ6ITB9KTtlbHNlIHJldHVybiExO3JldHVybiByfWZ1bmN0aW9uIFdPKGUpe2xldCB0PWUlMTAwO2lmKHQ+PTExJiZ0PD0xMylyZXR1cm4idGgiO3N3aXRjaChlJTEwKXtjYXNlIDE6cmV0dXJuInN0IjtjYXNlIDI6cmV0dXJuIm5kIjtjYXNlIDM6cmV0dXJuInJkIjtkZWZhdWx0OnJldHVybiJ0aCJ9fWZ1bmN0aW9uIEJPKCl7bGV0IGU9bmV3IERhdGUsdD1lLnRvTG9jYWxlU3RyaW5nKFtdLHttb250aDoibG9uZyJ9KSxuPWUuZ2V0RGF0ZSgpLHI9ZS5nZXRGdWxsWWVhcigpO3JldHVybmAke3R9ICR7bn0ke1dPKG4pfSwgJHtyfWB9dmFyIHRlPVAoJCgpKSxITz0yMzAsZGk9ImRyZWFtLXRhc2siLEtPPTI4MCxHTz1uZXcgU2V0KFsibGxtX2Vycm9yIiwibm9fcHJvdmlkZXJfY29uZmlndXJlZCIsInBhcnNlX2Vycm9yIiwiaW52YWxpZF9hcGlfa2V5Il0pO2Z1bmN0aW9uIFZPKGUsdCxuLHIpe2xldCBvPWU/LnNldHRpbmdzfHx7fSxhPW9bQi5MTE1fUFJPVklERVJfTU9ERUxdPz9udWxsLGk9dD9LdCh0KTpudWxsLHM9Yz0+e2xldCB1PWM/b1tjXTpudWxsO3JldHVybiB0eXBlb2YgdT09InN0cmluZyI/dS50cmltKCkubGVuZ3RoOjB9LGw9e2FudGhyb3BpYzpzKEIuTExNX0FQSV9LRVlfQU5USFJPUElDKSxnZW1pbmk6cyhCLkxMTV9BUElfS0VZX0dFTUlOSSksZ3JvazpzKEIuTExNX0FQSV9LRVlfR1JPSyksb3BlbmFpOnMoQi5MTE1fQVBJX0tFWV9PUEVOQUkpfSxkPU9iamVjdC5lbnRyaWVzKGwpLmZpbHRlcigoWyxjXSk9PmM+MCkubWFwKChbY10pPT5jKTtyZXR1cm57cHJvcFByb3ZpZGVyRW06dD8/bnVsbCxwcm9wUHJvdmlkZXJBcGlLZXlMZW5ndGg6dHlwZW9mIG49PSJzdHJpbmciP24udHJpbSgpLmxlbmd0aDowLGhhc0RldlRva2VuOiEhcixzZXR0aW5nc0xsbVByb3ZpZGVyOmEscHJvcFByb3ZpZGVyU2V0dGluZ0tleTppLHNldHRpbmdzS2V5TGVuZ3RoRm9yUHJvcDpzKGkpLGFwaUtleUxlbmd0aEJ5UHJvdmlkZXI6bCxjb25maWd1cmVkUHJvdmlkZXJCdWNrZXRzOmQsaGFzQ2FsbFBsdWdpbjp0eXBlb2YgZT8uY2FsbFBsdWdpbj09ImZ1bmN0aW9uIn19ZnVuY3Rpb24gak8oZSx0KXtyZXR1cm5bLi4uZV0uc29ydCgocixvKT0+by5yYXRpbmctci5yYXRpbmcpLnNsaWNlKDAsdCl9ZnVuY3Rpb24gWU8oZSl7cmV0dXJuIGU+PTg/ImhpZ2giOmU+PTU/Im1lZGl1bSI6ImxvdyJ9ZnVuY3Rpb24gT28oZSl7cmV0dXJuIGU/LnN1Z2dlc3Rpb25JZHx8ZT8udXVpZHx8YCR7ZT8udGl0bGV8fCJ1bnRpdGxlZCJ9Ojoke2U/LnJhdGluZ3x8MH06OiR7ZT8uZXhwbGFuYXRpb258fCIifWB9YXN5bmMgZnVuY3Rpb24gcU8oZSx0LG4pe2xldCByPW5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCksMCwwLDApLG89TWF0aC5mbG9vcihyLmdldFRpbWUoKS8xZTMpO2lmKG4ubGVuZ3RoPjApe2xldCBhPWF3YWl0IGUucHJvbXB0KCJQaWNrIHdoZW4gdG8gc2NoZWR1bGUgdGhpcyB0YXNrLiBPbmx5IGZyZWUgdGltZXMgc3RpbGwgYWhlYWQgdG9kYXkgYXJlIGxpc3RlZCBcdTIwMTQgdXNlIHRoZSBidXR0b24gYmVsb3cgdG8gY2hvb3NlIGEgZnV0dXJlIGRhdGUgaW5zdGVhZC4iLHtpbnB1dHM6W3tsYWJlbDoiRGF0ZSIsdHlwZToic3RyaW5nIix2YWx1ZToiVG9kYXkifSx7bGFiZWw6IlRpbWUiLG9wdGlvbnM6bix0eXBlOiJzZWxlY3QiLHZhbHVlOm5bMF0udmFsdWV9XSxhY3Rpb25zOlt7aWNvbjoiZXZlbnQiLGxhYmVsOiJTY2hlZHVsZSBmb3IgYSBmdXR1cmUgZGF0ZSIsdmFsdWU6ImZ1dHVyZSJ9XX0pO2lmKCFhKXJldHVybiBudWxsO2lmKGFbYS5sZW5ndGgtMV0hPT0iZnV0dXJlIil7bGV0IGk9V20obyxhWzFdKTtyZXR1cm4gaT09bnVsbCYmKGsoIltEcmVhbVRhc2tdIFNjaGVkdWxlOiBpbnZhbGlkIHRvZGF5IHRpbWUgcmV0dXJuZWQgYnkgcHJvbXB0Iix7dG9kYXlSZXN1bHQ6YX0pLGF3YWl0IGUuYWxlcnQoIkNvdWxkIG5vdCBzY2hlZHVsZTogdGhlIHNlbGVjdGVkIHRpbWUgd2FzIGludmFsaWQuIikpLGl9fXJldHVybiBYTyhlLHIpfWFzeW5jIGZ1bmN0aW9uIFhPKGUsdCl7bGV0IG49bmV3IERhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSsxLDAsMCwwKSxyPW54KCksbz1hd2FpdCBlLnByb21wdCgiUGljayBhIGZ1dHVyZSBkYXRlIGFuZCB0aW1lIHRvIHNjaGVkdWxlIHRoaXMgdGFzay4iLHtpbnB1dHM6W3tsYWJlbDoiRGF0ZSIsdHlwZToiZGF0ZSIsdmFsdWU6TWF0aC5mbG9vcihuLmdldFRpbWUoKS8xZTMpfSx7bGFiZWw6IlRpbWUiLG9wdGlvbnM6cix0eXBlOiJzZWxlY3QiLHZhbHVlOnJbMF0udmFsdWV9XX0pO2lmKCFvKXJldHVybiBudWxsO2xldFthLGldPW87aWYoYT09bnVsbHx8aT09bnVsbClyZXR1cm4gbnVsbDtsZXQgcz1XbShhLGkpO3JldHVybiBzPT1udWxsJiYoaygiW0RyZWFtVGFza10gU2NoZWR1bGU6IGludmFsaWQgZnV0dXJlIGRhdGUvdGltZSByZXR1cm5lZCBieSBwcm9tcHQiLHtkYXRlU2VjOmEsdGltZU1pbnV0ZXM6aX0pLGF3YWl0IGUuYWxlcnQoIkNvdWxkIG5vdCBzY2hlZHVsZTogdGhlIHNlbGVjdGVkIGRhdGUgb3IgdGltZSB3YXMgaW52YWxpZC4iKSksc31mdW5jdGlvbiAkTyh7aXNDbGlja2FibGU6ZSx0YXNrOnR9KXtyZXR1cm4gdC5pc0V4aXN0aW5nJiZ0LnNvdXJjZU5vdGVOYW1lPygwLHRlLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImRyZWFtLXRhc2stc291cmNlLW5vdGUtYmFkZ2UiLHRpdGxlOnQuc291cmNlTm90ZU5hbWU/YFRhc2sgaW4gbm90ZTogJHt0LnNvdXJjZU5vdGVOYW1lfWA6Ik9wZW4gdGhpcyB0YXNrIixjaGlsZHJlbjp0LnNvdXJjZU5vdGVOYW1lfSk6IXQuaXNFeGlzdGluZyYmZT8oMCx0ZS5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJkcmVhbS10YXNrLW5ldy1iYWRnZSIsdGl0bGU6Ik5ldyB0YXNrIFx1MjAxNCBjbGljayB0byBjcmVhdGUiLGNoaWxkcmVuOiIrbmV3In0pOm51bGx9ZnVuY3Rpb24gbXgoe25vdGVVVUlEOmUsb25PcGVuTm90ZTp0fSl7cmV0dXJuIGU/KDAsdGUuanN4KSgiYSIse2hyZWY6IiMiLGNsYXNzTmFtZToid2lkZ2V0LWhlYWRlci1hY3Rpb24iLG9uQ2xpY2s6dCx0aXRsZToiT3BlbiB0b2RheSdzIHByb3Bvc2VkIHRhc2tzIG5vdGUiLGNoaWxkcmVuOiJcdXsxRjVEMn1cdUZFMEYgTm90ZSJ9KTpudWxsfWZ1bmN0aW9uIEpPKHtvblJlc2VlZDplfSl7cmV0dXJuKDAsdGUuanN4KSgiYSIse2hyZWY6IiMiLGNsYXNzTmFtZToid2lkZ2V0LWhlYWRlci1hY3Rpb24iLG9uQ2xpY2s6ZSx0aXRsZToiR2V0IG5ldyB0YXNrIHN1Z2dlc3Rpb25zIChleGNsdWRlcyB0YXNrcyBzaG93biB0b2RheSkiLGNoaWxkcmVuOiJcdXsxRjUwNH0gUmVzZWVkIn0pfWZ1bmN0aW9uIFFPKCl7cmV0dXJuKDAsdGUuanN4KShhZSx7d2lkZ2V0SWQ6ZGksY2hpbGRyZW46KDAsdGUuanN4cykoImRpdiIse2NsYXNzTmFtZToiZHJlYW0tdGFzay1sb2FkaW5nIixjaGlsZHJlbjpbKDAsdGUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJkcmVhbS10YXNrLXNwaW5uZXIifSksKDAsdGUuanN4KSgicCIse2NoaWxkcmVuOiJBbmFseXppbmcgdGhlIGZpbmVzdCB0YXNrcyBcdTIwMjYifSldfSl9KX12YXIgWk89W3tpY29uOiJcdXsxRjNBRn0iLGxhYmVsOiJIaWdobGlnaHQgZ29hbC1tYXRjaGVkIHRhc2tzIn0se2ljb246Ilx1MjY5Nlx1RkUwRiIsbGFiZWw6IlNvcnQgdGFza3MgKGZ1biwgZmFzdCwgZXRjKSJ9LHtpY29uOiJcdXsxRjU3NX0iLGxhYmVsOiJEZWVwIG5vdGUgc2VhcmNoIn0se2ljb246Ilx1ezFGNEFBfSIsbGFiZWw6IlRhc2sgY29tcGxldGlvbiBhZ2VudCJ9LHtpY29uOiJcdXsxRjUyQ30iLGxhYmVsOiJNdWx0aS1hZ2VudCBkZWVwIHJlc2VhcmNoIn0se2ljb246Ilx1MjcwRlx1RkUwRiIsbGFiZWw6IkZpbmlzaCBhIG5vdGUgaW4gcHJvZ3Jlc3MifV07ZnVuY3Rpb24gZUkoe2Vycm9ySW5mbzplLG5vdGVMaW5rOnQsb25SZXRyeTpuLG9uU2V0dGluZ3NDbGljazpyfSl7bGV0e2Vycm9yOm8sZXJyb3JDb2RlOmEsZXJyb3JEZXRhaWw6aSxwcm92aWRlck5hbWU6c309ZSxsO3N3aXRjaChhKXtjYXNlImludmFsaWRfYXBpX2tleSI6bD0oMCx0ZS5qc3hzKSh0ZS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLHRlLmpzeCkoInAiLHtjaGlsZHJlbjpgVGhlIEFQSSBrZXkgZm9yICR7c3x8InlvdXIgQUkgcHJvdmlkZXIifSBhcHBlYXJzIHRvIGJlIGludmFsaWQgb3IgdW5hdXRob3JpemVkLmB9KSwoMCx0ZS5qc3hzKSgicCIse2NoaWxkcmVuOlsiUGxlYXNlIGNoZWNrIHlvdXIgQVBJIGtleSBpbiAiLCgwLHRlLmpzeCkoImEiLHtocmVmOiIjIixjbGFzc05hbWU6ImRyZWFtLXRhc2stc2V0dGluZ3MtbGluayIsb25DbGljazpyLGNoaWxkcmVuOiJBSSBzZXR0aW5ncyJ9KSwiLiJdfSldfSk7YnJlYWs7Y2FzZSJub19wbGFubmluZ19kYXRhIjpsPSgwLHRlLmpzeHMpKHRlLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsdGUuanN4KSgicCIse2NoaWxkcmVuOiJEcmVhbVRhc2sgbmVlZHMgcGxhbm5pbmcgY29udGV4dCB0byBnZW5lcmF0ZSBzdWdnZXN0aW9ucy4ifSksKDAsdGUuanN4KSgicCIse2NoaWxkcmVuOiJQb3B1bGF0ZSB5b3VyIHF1YXJ0ZXJseSBhbmQvb3IgbW9udGhseSBwbGFuIHRvIHJlY2VpdmUgQUktc3VnZ2VzdGVkIHRhc2tzLiJ9KV19KTticmVhaztjYXNlInBhcnNlX2Vycm9yIjpsPSgwLHRlLmpzeHMpKHRlLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsdGUuanN4KSgicCIse2NoaWxkcmVuOiJVbmFibGUgdG8gc3VjY2Vzc2Z1bGx5IHByb2Nlc3MgdGhlIEFJIHByb3ZpZGVyJ3MgcmVzcG9uc2UuIn0pLCgwLHRlLmpzeHMpKCJwIix7Y2xhc3NOYW1lOiJkcmVhbS10YXNrLWVycm9yLWRldGFpbCIsY2hpbGRyZW46WyJJZiB0aGlzIHBlcnNpc3RzLCBwbGVhc2UgY29udGFjdCBzdXBwb3J0QGFtcGxlbm90ZS5jb20iLGk/YCB3aXRoIHRoaXMgZGV0YWlsOiAke2l9YDoiIl19KV19KTticmVhaztkZWZhdWx0Omw9KDAsdGUuanN4KSgicCIse2NoaWxkcmVuOm98fCJBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkLiJ9KX1yZXR1cm4oMCx0ZS5qc3gpKGFlLHt3aWRnZXRJZDpkaSxoZWFkZXJBY3Rpb25zOnQsY2hpbGRyZW46KDAsdGUuanN4cykoImRpdiIse2NsYXNzTmFtZToiZHJlYW0tdGFzay1lcnJvciIsY2hpbGRyZW46W2wsKDAsdGUuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJkcmVhbS10YXNrLXJldHJ5IixvbkNsaWNrOm4sY2hpbGRyZW46IlJldHJ5In0pXX0pfSl9ZnVuY3Rpb24gdEkoe25vdGVMaW5rOmUsb25SZXRyeTp0fSl7cmV0dXJuKDAsdGUuanN4KShhZSx7d2lkZ2V0SWQ6ZGksaGVhZGVyQWN0aW9uczplLGNoaWxkcmVuOigwLHRlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRyZWFtLXRhc2stZW1wdHkiLGNoaWxkcmVuOlsoMCx0ZS5qc3gpKCJwIix7Y2hpbGRyZW46Ik5vIHRhc2sgc3VnZ2VzdGlvbnMgYXZhaWxhYmxlLiJ9KSwoMCx0ZS5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6ImRyZWFtLXRhc2stcmV0cnkiLG9uQ2xpY2s6dCxjaGlsZHJlbjoiUmVmcmVzaCJ9KV19KX0pfWZ1bmN0aW9uIG5JKHtkcmVhbVRhc2tzOmUsbWF4VGFza3M6dCxoZWFkZXJBY3Rpb25zOm4sb25UYXNrQ2xpY2s6cixsaXN0UmVmOm8sbGxtQXR0cmlidXRpb25Gb290ZXI6YSxhY3Rpb25IYW5kbGVyczppfSl7bGV0IHM9cGVyZm9ybWFuY2Uubm93KCksbD1qTyhlLHQpO2soYFtEcmVhbVRhc2tdIF9zZWxlY3REaXNwbGF5VGFza3M6ICR7KHBlcmZvcm1hbmNlLm5vdygpLXMpLnRvRml4ZWQoMSl9bXMgKCR7ZS5sZW5ndGh9IFx1MjE5MiAke2wubGVuZ3RofSB0YXNrcylgKTtsZXR7ZGlzbWlzc2luZ1Rhc2tLZXlzOmQsZXhwYW5kZWRFeHBsYW5hdGlvbktleXM6YyxvbkNvbXBsZXRlOnUsb25QcmVzZXJ2ZTpwLG9uUmVtb3ZlOmYsb25TY2hlZHVsZTp5LG9uVG9nZ2xlRXhwbGFuYXRpb246dn09aTtyZXR1cm4oMCx0ZS5qc3gpKGFlLHtoZWFkZXJBY3Rpb25zOm4sd2lkZ2V0SWQ6ZGksY2hpbGRyZW46KDAsdGUuanN4cykoImRpdiIse2NsYXNzTmFtZToiZHJlYW0tdGFzay1saXN0IixyZWY6byxjaGlsZHJlbjpbbC5tYXAoKHcsZyk9PntsZXQgaD0hIXIsbT0ody5uYXRpdmVUYXNrfHxudWxsKT8uc3RhcnRBdCE9bnVsbHx8dy5zdGFydEF0IT1udWxsLFM9T28odykseD1kLmhhcyhTKSxFPXJyKHcudGl0bGUpfHx3LnRpdGxlLFQ9cnIody5leHBsYW5hdGlvbil8fCIiLEE9YGRyZWFtLXRhc2stY2FyZCR7dy5pc0V4aXN0aW5nPyIiOiIgZHJlYW0tdGFzay1jYXJkLS1pbnZlbnRlZCJ9JHt4PyIgZHJlYW0tdGFzay1jYXJkLS1kaXNtaXNzaW5nIjoiIn1gLEM9YGRyZWFtLXRhc2stY2FyZC10aXRsZSR7aD8iIGRyZWFtLXRhc2stY2FyZC10aXRsZS0tY2xpY2thYmxlIjoiIn1gLEw9YGRyZWFtLXRhc2stY2FyZC1leHBsYW5hdGlvbiR7Yy5oYXMoUyk/IiBkcmVhbS10YXNrLWNhcmQtZXhwbGFuYXRpb24tLWV4cGFuZGVkIjoiIn1gO3JldHVybigwLHRlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6QSxjaGlsZHJlbjpbKDAsdGUuanN4cykoImRpdiIse2NsYXNzTmFtZToiZHJlYW0tdGFzay1jYXJkLWhlYWRlciIsY2hpbGRyZW46WygwLHRlLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6QyxvbkNsaWNrOmg/KCk9PnIodyk6dm9pZCAwLHJvbGU6aD8iYnV0dG9uIjp2b2lkIDAsdGFiSW5kZXg6aD8wOnZvaWQgMCxvbktleURvd246aD9PPT57KE8ua2V5PT09IkVudGVyInx8Ty5rZXk9PT0iICIpJiYoTy5wcmV2ZW50RGVmYXVsdCgpLHIodykpfTp2b2lkIDAsdGl0bGU6dy5pc0V4aXN0aW5nPyJPcGVuIHRoaXMgdGFzayI6IkNsaWNrIHRvIGNyZWF0ZSB0aGlzIHRhc2siLGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOntfX2h0bWw6RX19KSwoMCx0ZS5qc3gpKCRPLHtpc0NsaWNrYWJsZTpoLHRhc2s6d30pLCgwLHRlLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6YGRyZWFtLXRhc2stcmF0aW5nIGRyZWFtLXRhc2stcmF0aW5nLS0ke1lPKHcucmF0aW5nKX1gLHRpdGxlOmBSZWxldmFuY2U6ICR7dy5yYXRpbmd9LzEwYCxjaGlsZHJlbjpgJHt3LnJhdGluZ30vMTBgfSldfSksKDAsdGUuanN4KSgicCIse2NsYXNzTmFtZTpMLHRpdGxlOncuZXhwbGFuYXRpb24/Lmxlbmd0aD5ITz93LmV4cGxhbmF0aW9uOm51bGwsb25DbGljazooKT0+dih3KSxkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOlR9fSksKDAsdGUuanN4cykoImRpdiIse2NsYXNzTmFtZToiZHJlYW0tdGFzay1jYXJkLWFjdGlvbnMiLGNoaWxkcmVuOlsoMCx0ZS5qc3gpKCJhIix7aHJlZjoiIyIsY2xhc3NOYW1lOiJkcmVhbS10YXNrLWNhcmQtYWN0aW9uIixvbkNsaWNrOk89PnAoTyx3KSx0aXRsZTp3LnByZXNlcnZlVGhyb3VnaFRvbW9ycm93PyJDbGlja2luZyB0aGlzIHdpbGwgcmVtb3ZlIHByZXNlcnZlIHN0YXR1cyBzbyB0aGUgdGFzayBjYW4gcmVzZWVkIG5vcm1hbGx5IjoiQ2xpY2tpbmcgdGhpcyB3aWxsIGVuc3VyZSB0aGF0IHRoZSB0YXNrIHJlbWFpbnMgcHJlc2VudCBpbiB5b3VyIERyZWFtIFRhc2sgbGlzdCB0aHJvdWdoIHRvbW9ycm93IChub3JtYWxseSB0YXNrcyByZXNlZWQgZGFpbHkpIixjaGlsZHJlbjp3LnByZXNlcnZlVGhyb3VnaFRvbW9ycm93PyJcdXsxRjZBQn0gUmVtb3ZlIHByZXNlcnZlIjoiXHV7MUY0Q0V9IFByZXNlcnZlIn0pLCgwLHRlLmpzeCkoImEiLHtocmVmOiIjIixjbGFzc05hbWU6ImRyZWFtLXRhc2stY2FyZC1hY3Rpb24iLG9uQ2xpY2s6Tz0+dShPLHcpLHRpdGxlOiJNYXJrIHRoaXMgdGFzayBjb21wbGV0ZSBhbmQgcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgc3VnZ2VzdGlvbiB3aGVuIGF2YWlsYWJsZSIsY2hpbGRyZW46Ilx1MjcwNSBDb21wbGV0ZWQifSksbT9udWxsOigwLHRlLmpzeCkoImEiLHtocmVmOiIjIixjbGFzc05hbWU6ImRyZWFtLXRhc2stY2FyZC1hY3Rpb24iLG9uQ2xpY2s6Tz0+eShPLHcpLHRpdGxlOiJTY2hlZHVsZSB0aGlzIHRhc2sgZm9yIGEgc3BlY2lmaWMgZGF0ZSBhbmQgdGltZSIsY2hpbGRyZW46Ilx1ezFGNEM1fSBTY2hlZHVsZSJ9KSwoMCx0ZS5qc3gpKCJhIix7aHJlZjoiIyIsY2xhc3NOYW1lOiJkcmVhbS10YXNrLWNhcmQtYWN0aW9uIixvbkNsaWNrOk89PmYoTyx3KSx0aXRsZToiUmVtb3ZlIHRoaXMgdGFzayBhbmQgcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgc3VnZ2VzdGlvbiB3aGVuIGF2YWlsYWJsZSIsY2hpbGRyZW46Ilx1Mjc0QyBSZW1vdmUifSldfSldfSxTfHxnKX0pLGE/KDAsdGUuanN4KSgicCIse2NsYXNzTmFtZToiZHJlYW0tdGFzay1sbG0tYXR0cmlidXRpb24iLGNoaWxkcmVuOmF9KTpudWxsXX0pfSl9ZnVuY3Rpb24gckkoe2xvYWRpbmc6ZSxlcnJvcjp0LHRhc2tzOm4sbWF4VGFza3M6cixub3RlTGluazpvLGhlYWRlckFjdGlvbnM6YSxvblNldHRpbmdzQ2xpY2s6aSxydW5BbmFseXNpczpzLG9uVGFza0NsaWNrOmwsbGlzdFJlZjpkLGxsbUF0dHJpYnV0aW9uRm9vdGVyOmMsYWN0aW9uSGFuZGxlcnM6dX0pe3JldHVybiBlPygwLHRlLmpzeCkoUU8se30pOnQ/KDAsdGUuanN4KShlSSx7ZXJyb3JJbmZvOnQsbm90ZUxpbms6byxvblJldHJ5OigpPT5zKG51bGwpLG9uU2V0dGluZ3NDbGljazppfSk6IW58fG4ubGVuZ3RoPT09MD8oMCx0ZS5qc3gpKHRJLHtub3RlTGluazpvLG9uUmV0cnk6KCk9PnMobnVsbCl9KTooMCx0ZS5qc3gpKG5JLHtkcmVhbVRhc2tzOm4sbWF4VGFza3M6cixoZWFkZXJBY3Rpb25zOmEsb25UYXNrQ2xpY2s6bCxsaXN0UmVmOmQsbGxtQXR0cmlidXRpb25Gb290ZXI6YyxhY3Rpb25IYW5kbGVyczp1fSl9ZnVuY3Rpb24gb0koe25vdGVVVUlEOmUsb25PcGVuTm90ZTp0LG9uUmVzZWVkOm59KXtyZXR1cm4oMCx0ZS5qc3hzKSgic3BhbiIse2NsYXNzTmFtZToiZHJlYW0tdGFzay1oZWFkZXItYWN0aW9ucyIsY2hpbGRyZW46WygwLHRlLmpzeCkoSk8se29uUmVzZWVkOm59KSwoMCx0ZS5qc3gpKG14LHtub3RlVVVJRDplLG9uT3Blbk5vdGU6dH0pXX0pfWZ1bmN0aW9uIGFJKGUsdCxuLHIpe2xldFtvLGFdPSgwLE5lLnVzZVN0YXRlKSgoKT0+bmV3IFNldCksW2ksc109KDAsTmUudXNlU3RhdGUpKCgpPT5uZXcgU2V0KSxsPSgwLE5lLnVzZUNhbGxiYWNrKSgoKT0+e2EobmV3IFNldCkscyhuZXcgU2V0KX0sW10pLGQ9KDAsTmUudXNlQ2FsbGJhY2spKGFzeW5jKGcsaCk9Pnthd2FpdCBxayhlLG4sZyxoKX0sW2Usbl0pLGM9KDAsTmUudXNlQ2FsbGJhY2spKGc9PntsZXQgaD1PbyhnKTthKGI9PntsZXQgbT1uZXcgU2V0KGIpO3JldHVybiBtLmFkZChoKSxtfSksc2V0VGltZW91dCgoKT0+e3IoYj0+KGJ8fFtdKS5maWx0ZXIobT0+T28obSkhPT1oKSksYShiPT57bGV0IG09bmV3IFNldChiKTtyZXR1cm4gbS5kZWxldGUoaCksbX0pLHMoYj0+e2xldCBtPW5ldyBTZXQoYik7cmV0dXJuIG0uZGVsZXRlKGgpLG19KX0sS08pfSxbcl0pLHU9KDAsTmUudXNlQ2FsbGJhY2spKGc9PntsZXQgaD1nLmN1cnJlbnRUYXJnZXQ/LmNsb3Nlc3Q/LigiLmRyZWFtLXRhc2stY2FyZCIpO2lmKCFofHx0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IGI9aC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTshYi53aWR0aHx8IWIuaGVpZ2h0fHx3Yyh7b3JpZ2luOnt4OihiLmxlZnQrYi53aWR0aC8yKS93aW5kb3cuaW5uZXJXaWR0aCx5OihiLnRvcCtiLmhlaWdodC8yKS93aW5kb3cuaW5uZXJIZWlnaHR9LHBhcnRpY2xlQ291bnQ6OTAsc3ByZWFkOjc1LHN0YXJ0VmVsb2NpdHk6NDJ9KX0sW10pLHA9KDAsTmUudXNlQ2FsbGJhY2spKGFzeW5jKGcsaCk9PntnLnByZXZlbnREZWZhdWx0KCksZXQoImFwcHJvdmVEcmVhbVRhc2siLHt2aWE6ImNvbXBsZXRlIn0pLHUoZyk7bGV0IGI9aC51dWlkP251bGw6YXdhaXQgcHgoZSksbT1hd2FpdCBmeChlLGIsaCk7bSYmYXdhaXQgZChoLHtjb21wbGV0ZWRBdDptLHJlbW92ZWRBdDpudWxsfSksYyhoKX0sW2UsdSxkLGNdKSxmPSgwLE5lLnVzZUNhbGxiYWNrKShhc3luYyhnLGgpPT57Zy5wcmV2ZW50RGVmYXVsdCgpO2xldCBiPU9vKGgpLG09IWgucHJlc2VydmVUaHJvdWdoVG9tb3Jyb3c7cihTPT4oU3x8W10pLm1hcCh4PT5Pbyh4KT09PWI/ey4uLngscHJlc2VydmVUaHJvdWdoVG9tb3Jyb3c6bX06eCkpLGF3YWl0IGQoaCx7cHJlc2VydmVUaHJvdWdoVG9tb3Jyb3c6bX0pfSxbZCxyXSkseT0oMCxOZS51c2VDYWxsYmFjaykoYXN5bmMoZyxoKT0+e2cucHJldmVudERlZmF1bHQoKTtsZXQgYj1uZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7YXdhaXQgZChoLHtjb21wbGV0ZWRBdDpudWxsLHJlbW92ZWRBdDpifSksYyhoKX0sW2QsY10pLHY9KDAsTmUudXNlQ2FsbGJhY2spKGFzeW5jKGcsaCk9PntnLnByZXZlbnREZWZhdWx0KCk7bGV0e2V2ZW50czpiLHRhc2tzOm19PWF3YWl0IHJ4KGUpLFM9bmV3IERhdGUseD10eChTLGIsbSksRT1hd2FpdCBxTyhlLFMseCk7aWYoRT09bnVsbClyZXR1cm47bGV0IFQ9YXdhaXQgb3goZSx0LEUsaCk7aWYoIVQudGFza1V1aWQpe2soIltEcmVhbVRhc2tdIFNjaGVkdWxlIGZhaWxlZCIsVCk7bGV0IEM9VC5yZWFzb249PT0ibWlzc2luZ19ub3RlIj8iQ291bGQgbm90IHNjaGVkdWxlOiBubyB0YXJnZXQgbm90ZSBpcyBhdmFpbGFibGUgZm9yIHRoaXMgc3VnZ2VzdGlvbi4iOiJDb3VsZCBub3Qgc2NoZWR1bGUgdGhpcyB0YXNrLiBQbGVhc2UgdHJ5IGFnYWluIG9yIHNjaGVkdWxlIGl0IG1hbnVhbGx5LiI7YXdhaXQgZS5hbGVydChDKTtyZXR1cm59ZXQoImFwcHJvdmVEcmVhbVRhc2siLHt2aWE6InNjaGVkdWxlIn0pLGF3YWl0IGQoaCx7dGFza1V1aWQ6VC50YXNrVXVpZH0pO2xldCBBPU9vKGgpO2lmKHIoQz0+KEN8fFtdKS5tYXAoTD0+T28oTCk9PT1BP3suLi5MLGlzRXhpc3Rpbmc6ITAsbm90ZVVVSUQ6VC5ub3RlVVVJRHx8TC5ub3RlVVVJRHx8dCxzdGFydEF0OlQuc3RhcnRBdHx8RSx1dWlkOlQudGFza1V1aWR9OkwpKSx0eXBlb2Ygd2luZG93PCJ1Iil7bGV0IEM9bmV3IEN1c3RvbUV2ZW50KGxpLHtjb250ZW50OmgudGl0bGUsbm90ZVVVSUQ6VC5ub3RlVVVJRHx8aC5ub3RlVVVJRHx8dCxzdGFydEF0OkUsdGFza1V1aWQ6VC50YXNrVXVpZH0pO3dpbmRvdy5kaXNwYXRjaEV2ZW50KEMpfX0sW2UsdCxkLHJdKSx3PSgwLE5lLnVzZUNhbGxiYWNrKShnPT57bGV0IGg9T28oZyk7cyhiPT57bGV0IG09bmV3IFNldChiKTtyZXR1cm4gbS5oYXMoaCk/bS5kZWxldGUoaCk6bS5hZGQoaCksbX0pfSxbXSk7cmV0dXJue2Rpc21pc3NpbmdUYXNrS2V5czpvLGV4cGFuZGVkRXhwbGFuYXRpb25LZXlzOmksb25Db21wbGV0ZVRhc2s6cCxvblByZXNlcnZlVGFzazpmLG9uUmVtb3ZlVGFzazp5LG9uU2NoZWR1bGVUYXNrOnYsb25Ub2dnbGVFeHBsYW5hdGlvbjp3LHJlc2V0QWN0aW9uU3RhdGU6bH19ZnVuY3Rpb24gSG0oe2FwcDplLGdyaWRIZWlnaHRTaXplOnQsZ3JpZFdpZHRoU2l6ZTpuLG9uT3BlblNldHRpbmdzOnIscHJvdmlkZXJBcGlLZXk6byxwcm92aWRlckVtOmF9KXtsZXRbaSxzXT0oMCxOZS51c2VTdGF0ZSkoITEpLFtsLGRdPSgwLE5lLnVzZVN0YXRlKShudWxsKSxbYyx1XT0oMCxOZS51c2VTdGF0ZSkobnVsbCksW3AsZl09KDAsTmUudXNlU3RhdGUpKG51bGwpLFt5LHZdPSgwLE5lLnVzZVN0YXRlKShudWxsKSxbdyxnXT0oMCxOZS51c2VTdGF0ZSkobnVsbCksW2gsYl09KDAsTmUudXNlU3RhdGUpKCExKSxbbSxTXT0oMCxOZS51c2VTdGF0ZSkoITEpLFsseF09KDAsTmUudXNlU3RhdGUpKCgpPT5LcygpKSxFPSgwLE5lLnVzZVJlZikobnVsbCksVD0oMCxOZS51c2VSZWYpKDApO1QuY3VycmVudCs9MTtsZXQgQT1QYigpLEM9ISEoQXx8byksTD1hP2lpKGEpOm51bGwsTz1LayhuLHQpLFI9R2sobix0KSxGPVZrKCksVj0oMCxOZS51c2VSZWYpKFIpLHtkaXNtaXNzaW5nVGFza0tleXM6eixleHBhbmRlZEV4cGxhbmF0aW9uS2V5czpuZSxvbkNvbXBsZXRlVGFzazpNLG9uUHJlc2VydmVUYXNrOlcsb25SZW1vdmVUYXNrOkQsb25TY2hlZHVsZVRhc2s6TixvblRvZ2dsZUV4cGxhbmF0aW9uOl8scmVzZXRBY3Rpb25TdGF0ZTpHfT1hSShlLHkscCxkKSxZPSgwLE5lLnVzZUNhbGxiYWNrKShhc3luYyhsZSxEZSk9PntsZXQgR2U9KGxlfHxbXSkuZmlsdGVyKEJvb2xlYW4pO2lmKEdlLmxlbmd0aD09PTApcmV0dXJuIERlO2xldCBYZT1hd2FpdCBqayhlLERlLEdlKTtyZXR1cm4geChYZSksWGV9LFtlXSksaj0oMCxOZS51c2VDYWxsYmFjaykoYXN5bmMobGUsRGU9e30pPT57bGV0IEdlPURlLnByb3ZpZGVyRW1PdmVycmlkZT9paShEZS5wcm92aWRlckVtT3ZlcnJpZGUpOkw7aygiW0RyZWFtVGFza10gcnVuQW5hbHlzaXMgZW50cnkiLHtoYXNMbG1Db25maWc6Qyxwcm92aWRlck5hbWU6R2UsZXhjbHVkZVV1aWRzU2l6ZTpsZT8uc2l6ZT8/MCxvcHRpb25zOkRlLHRhc2tHZW5lcmF0ZUNvdW50OlIscHJvcG9zZWRUYXNrc05vdGVOYW1lOkZ9KSxzKCEwKSx1KG51bGwpLGcobnVsbCk7dHJ5e2xldCBYZT1wZXJmb3JtYW5jZS5ub3coKSxaPWF3YWl0ICRrKGUse2V4Y2x1ZGVVdWlkczpsZSxvcHRpb25zOkRlLHByb3Bvc2VkVGFza3NOb3RlTmFtZTpGLG1heFRhc2tzOlJ9KTtrKGBbRHJlYW1UYXNrXSBmZXRjaERyZWFtVGFza1N1Z2dlc3Rpb25zIHRvb2sgJHsocGVyZm9ybWFuY2Uubm93KCktWGUpLnRvRml4ZWQoMSl9bXNgLHtjYWNoZWQ6Wj8uY2FjaGVkLHRhc2tDb3VudDpaPy50YXNrcz8ubGVuZ3RoPz8wLGVycm9yQ29kZTpaPy5lcnJvckNvZGU/P251bGwsbm90ZVVVSUQ6Wj8ubm90ZVVVSUQ/P251bGx9KSwhWj8uY2FjaGVkJiYhWj8uZXJyb3JDb2RlJiZaPy50YXNrcz8ubGVuZ3RoJiZldCgiZ2VuZXJhdGVEcmVhbVRhc2tzIix7Y291bnQ6Wi50YXNrcy5sZW5ndGh9KTtsZXQgQWU9cGVyZm9ybWFuY2Uubm93KCk7YXdhaXQgSmsoWix7cHJvdmlkZXJOYW1lOkdlLGFwcDplLHJlY29yZFRhc2tVdWlkczpZLHNldEVycm9yOnUsc2V0VGFza3M6ZCxzZXROb3RlVVVJRDpmLHNldERlZmF1bHROb3RlVVVJRDp2LHNldExsbUF0dHJpYnV0aW9uRm9vdGVyOmd9KSxrKGBbRHJlYW1UYXNrXSBhcHBseURyZWFtVGFza0FuYWx5c2lzUmVzdWx0IHRvb2sgJHsocGVyZm9ybWFuY2Uubm93KCktQWUpLnRvRml4ZWQoMSl9bXNgKX1jYXRjaChYZSl7aygiW0RyZWFtVGFza10gcnVuQW5hbHlzaXMgY2F1Z2h0IHVuZXhwZWN0ZWQgZXJyb3IiLFhlKSx1KHtlcnJvcjpYZS5tZXNzYWdlfHwiQW5hbHlzaXMgZmFpbGVkIixlcnJvckNvZGU6ImxsbV9lcnJvciIscHJvdmlkZXJOYW1lOkdlfSl9ZmluYWxseXtzKCExKX19LFtZLFIsRixMLENdKTsoMCxOZS51c2VFZmZlY3QpKCgpPT57eChLcygpKX0sW10pLCgwLE5lLnVzZUVmZmVjdCkoKCk9PntpfHxsPy5sZW5ndGh8fGoobnVsbCx7bWluaW11bVRhc2tDb3VudDpSfSl9LFtDXSksKDAsTmUudXNlRWZmZWN0KSgoKT0+e2xldCBsZT1WTyhlLGEsbyxBKTtrKCJbRHJlYW1UYXNrXSBjb25maWcgc25hcHNob3QiLHtoYXNMbG1Db25maWc6Qyxwcm92aWRlck5hbWU6TCxyZW5kZXJDb3VudDpULmN1cnJlbnQsLi4ubGV9KX0sW0MsYSxvLEEsTF0pLCgwLE5lLnVzZUVmZmVjdCkoKCk9PntsZXQgbGU9ITE7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlLmZpbmROb3RlKHtuYW1lOlNyfSkpLnRoZW4oRGU9PntsZXx8UyghIURlKX0pLCgpPT57bGU9ITB9fSxbZV0pLCgwLE5lLnVzZUVmZmVjdCkoKCk9PntpZighQylyZXR1cm47bGV0IGxlPVYuY3VycmVudDtWLmN1cnJlbnQ9UixRayh7bWF4VGFza3M6UixwcmV2aW91c01heFRhc2tzOmxlLHRhc2tzOmx9KSYmRm0oaixSKX0sW0MsUixsXSksKDAsTmUudXNlRWZmZWN0KSgoKT0+e2xldCBsZT1wZXJmb3JtYW5jZS5ub3coKTtfbihFLmN1cnJlbnQpLGsoYFtEcmVhbVRhc2tdIGF0dGFjaEZvb3Rub3RlUG9wdXBzOiAkeyhwZXJmb3JtYW5jZS5ub3coKS1sZSkudG9GaXhlZCgxKX1tc2ApfSxbbCxjLGldKTtsZXQgZWU9YXN5bmMgbGU9PntsZS5wcmV2ZW50RGVmYXVsdCgpLHAmJmF3YWl0IGUubmF2aWdhdGUoYGh0dHBzOi8vd3d3LmFtcGxlbm90ZS5jb20vbm90ZXMvJHtwfWApfSxxPWxlPT57bGUucHJldmVudERlZmF1bHQoKSxYayhyKX0scmU9bGU9PntsZS5wcmV2ZW50RGVmYXVsdCgpLGIoITApfSx5ZT1sZT0+e2IoITEpLGQobnVsbCksRygpLGcobnVsbCksRm0oaixSLGxlP3twcm92aWRlckVtT3ZlcnJpZGU6bGV9Ont9KX0sYmU9IWkmJiFsJiYhYyxwZT0hIWMmJkdPLmhhcyhjLmVycm9yQ29kZSksd2U9IUMmJiFpJiYoIWx8fGwubGVuZ3RoPT09MCkmJihiZXx8cGUpO3JldHVybiBsdChkaSwhaSYmKHdlfHwhIWx8fCEhYyksISFjKSx3ZT8oaygiW0RyZWFtVGFza10gcmVuZGVyaW5nIG5vLWNvbmZpZyBzdGF0ZSIse3Byb3ZpZGVyTmFtZTpMLGhhc0Vycm9yOiEhYyxlcnJvckNvZGU6Yz8uZXJyb3JDb2RlPz9udWxsLHRhc2tDb3VudDpsPy5sZW5ndGg/PzB9KSwoMCx0ZS5qc3gpKGpzLHthcHA6ZSxmZWF0dXJlczpaTyxtb3JlRmVhdHVyZXNMYWJlbDoiKyAxNSBtb3JlIGZlYXR1cmVzIGluY2x1ZGVkIix3aWRnZXRJZDpkaX0pKTooMCx0ZS5qc3hzKSh0ZS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLHRlLmpzeCkockkse2Vycm9yOmMsaGVhZGVyQWN0aW9uczooMCx0ZS5qc3gpKG9JLHtub3RlVVVJRDpwLG9uT3Blbk5vdGU6ZWUsb25SZXNlZWQ6cmV9KSxsaXN0UmVmOkUsbG9hZGluZzppLGxsbUF0dHJpYnV0aW9uRm9vdGVyOncsbWF4VGFza3M6Tyxub3RlTGluazooMCx0ZS5qc3gpKG14LHtub3RlVVVJRDpwLG9uT3Blbk5vdGU6ZWV9KSxvblRhc2tDbGljazpsZT0+WWsoZSxsZSx5KSx0YXNrczpsLG9uU2V0dGluZ3NDbGljazpxLHJ1bkFuYWx5c2lzOmosYWN0aW9uSGFuZGxlcnM6e2Rpc21pc3NpbmdUYXNrS2V5czp6LGV4cGFuZGVkRXhwbGFuYXRpb25LZXlzOm5lLG9uQ29tcGxldGU6TSxvblByZXNlcnZlOlcsb25SZW1vdmU6RCxvblNjaGVkdWxlOk4sb25Ub2dnbGVFeHBsYW5hdGlvbjpffX0pLGg/KDAsdGUuanN4KShWcyx7YWxsb3dLZXlsZXNzUHJvdmlkZXJzOm0sY29uZmlndXJlZFByb3ZpZGVyRW1zOlBkKExlKCkpLGN1cnJlbnRQcm92aWRlckVtOmEsb25DYW5jZWw6KCk9PmIoITEpLG9uU2VsZWN0OnllLHN1Ym1pdExhYmVsOiJSZXNlZWQiLHRpdGxlOiJSZXNlZWQgc3VnZ2VzdGlvbnMgd2l0aCB3aGljaCBBSSBwcm92aWRlcj8ifSk6bnVsbF19KX12YXIgcG49UChmZSgpKTt2YXIgY2k9MzY1LEdtPTEzLGlJPTE1LHNJPTYwLHZ4PTUsYng9MyxsST0xLEttPTM7ZnVuY3Rpb24gd3goZSl7cmV0dXJuIWV8fHR5cGVvZiBlIT0ic3RyaW5nIj8iIjplLnJlcGxhY2UoL1xbXF4/W15cXV0qXF1cKFteKV0qXCkvZywiICIpLnJlcGxhY2UoL1tccHtFbW9qaV9QcmVzZW50YXRpb259XHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfV0vZ3UsIiAiKS5yZXBsYWNlKC9bXlxwe0xldHRlcn1ccHtOdW1iZXJ9XHNdL2d1LCIgIikucmVwbGFjZSgvXHMrL2csIiAiKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBreChlKXtyZXR1cm4hZXx8dHlwZW9mIGUhPSJzdHJpbmciPyIiOnd4KGUuc3BsaXQoYApgKVswXSl9ZnVuY3Rpb24gQ2MoZSl7cmV0dXJuIWV8fHR5cGVvZiBlIT0ic3RyaW5nIj8iIjp3eChlLnJlcGxhY2UoL1xuKy9nLCIgIikpfWZ1bmN0aW9uIGRJKGUpe3JldHVybiFlfHx0eXBlb2YgZSE9InN0cmluZyI/IlVudGl0bGVkIGhhYml0IjplLnNwbGl0KGAKYClbMF0ucmVwbGFjZSgvXFtcXj8oW15cXV0qKVxdXChbXildKlwpL2csIiQxIikucmVwbGFjZSgvXHMrL2csIiAiKS50cmltKCl8fCJVbnRpdGxlZCBoYWJpdCJ9dmFyIHh4PSJcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfVxccHtFbW9qaV9QcmVzZW50YXRpb259XFx1MjAwZFxcdWZlMGZcXHV7MWYzZmJ9LVxcdXsxZjNmZn0iLGNJPW5ldyBSZWdFeHAoYF4oW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe0Vtb2ppX1ByZXNlbnRhdGlvbn1dWyR7eHh9XSopYCwidSIpLHVJPW5ldyBSZWdFeHAoYF5bJHt4eH1dK1xccypgLCJ1Iik7ZnVuY3Rpb24gVm0oZSl7bGV0IHQ9U3RyaW5nKGV8fCIiKS5tYXRjaChjSSk7cmV0dXJuIHQ/dFsxXS50cmltKCk6IiJ9ZnVuY3Rpb24gam0oZSl7cmV0dXJuIFN0cmluZyhlfHwiIikucmVwbGFjZSh1SSwiIikudHJpbSgpfHxTdHJpbmcoZXx8IiIpLnRyaW0oKX1mdW5jdGlvbiBTeChlLHQ9S20pe3JldHVybiBreChlKS5zcGxpdCgiICIpLmZpbHRlcihCb29sZWFuKS5sZW5ndGg+PXQ/ZEkoZSk6ZS50cmltKCl9ZnVuY3Rpb24gWW0oZSl7cmV0dXJuIENjKFN4KGUpKX1mdW5jdGlvbiBoeChlKXtyZXR1cm4ga3goZSkuc3BsaXQoIiAiKS5maWx0ZXIoQm9vbGVhbil9ZnVuY3Rpb24gcEkoZSx0LG4pe2xldCByPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKTtpZihyPG4pcmV0dXJuITE7bGV0IG89bmV3IFNldCh0KSxhPTA7Zm9yKGxldCBpIG9mIG5ldyBTZXQoZSkpby5oYXMoaSkmJihhKz0xKTtyZXR1cm4gYT5yLzJ9ZnVuY3Rpb24gZkkoZSl7bGV0IHQ9Wy4uLmUua2V5cygpXS5zb3J0KCksbj10LmZpbHRlcihsPT5oeChlLmdldChsKS5sYWJlbCkubGVuZ3RoPj1LbSkscj1uZXcgTWFwKG4ubWFwKGw9PltsLGh4KGUuZ2V0KGwpLmxhYmVsKV0pKSxvPW5ldyBNYXAodC5tYXAobD0+W2wsbF0pKSxhPWw9Pntmb3IoO28uZ2V0KGwpIT09bDspby5zZXQobCxvLmdldChvLmdldChsKSkpLGw9by5nZXQobCk7cmV0dXJuIGx9O2ZvcihsZXQgbD0wO2w8bi5sZW5ndGg7bCsrKWZvcihsZXQgZD1sKzE7ZDxuLmxlbmd0aDtkKyspcEkoci5nZXQobltsXSksci5nZXQobltkXSksS20pJiZvLnNldChhKG5bbF0pLGEobltkXSkpO2xldCBpPW5ldyBNYXA7Zm9yKGxldCBsIG9mIHQpe2xldCBkPWEobCk7aS5oYXMoZCl8fGkuc2V0KGQsW10pLGkuZ2V0KGQpLnB1c2gobCl9bGV0IHM9bmV3IE1hcDtmb3IobGV0IGwgb2YgaS52YWx1ZXMoKSl7bGV0IGQ9bC5zbGljZSgpLnNvcnQoKHksdik9PihlLmdldCh2KS5jb21wbGV0aW9uc3x8MCktKGUuZ2V0KHkpLmNvbXBsZXRpb25zfHwwKXx8KHk8dj8tMToxKSlbMF0sYz1lLmdldChkKSx1PXtsYWJlbDpjLmxhYmVsLHNhbXBsZUNvbnRlbnQ6Yy5zYW1wbGVDb250ZW50fHxjLmxhYmVsLGNvbXBsZXRpb25zOjAsZG9uZU1vb2RzOltdLG1vc3RSZWNlbnREYXlLZXk6bnVsbCxvZmZNb29kczpbXSx3ZWVrU3RyZWFrOjB9LHA9ITEsZj0hMTtmb3IobGV0IHkgb2YgbCl7bGV0IHY9ZS5nZXQoeSk7aWYodS5jb21wbGV0aW9ucys9di5jb21wbGV0aW9uc3x8MCxBcnJheS5pc0FycmF5KHYuZG9uZU1vb2RzKSYmdS5kb25lTW9vZHMucHVzaCguLi52LmRvbmVNb29kcyksQXJyYXkuaXNBcnJheSh2Lm9mZk1vb2RzKSYmdS5vZmZNb29kcy5wdXNoKC4uLnYub2ZmTW9vZHMpLHYubW9zdFJlY2VudERheUtleSYmKCF1Lm1vc3RSZWNlbnREYXlLZXl8fHYubW9zdFJlY2VudERheUtleT51Lm1vc3RSZWNlbnREYXlLZXkpJiYodS5tb3N0UmVjZW50RGF5S2V5PXYubW9zdFJlY2VudERheUtleSksdi53ZWVrU3RyZWFrIT1udWxsJiYodS53ZWVrU3RyZWFrPU1hdGgubWF4KHUud2Vla1N0cmVhayx2LndlZWtTdHJlYWspKSx2LmRheXNEb25lIT1udWxsJiYodS5kYXlzRG9uZT0odS5kYXlzRG9uZXx8MCkrdi5kYXlzRG9uZSxwPSEwKSx2LmRvbmVEYXlLZXlzKXt1LmRvbmVEYXlLZXlzfHwodS5kb25lRGF5S2V5cz1uZXcgU2V0KTtmb3IobGV0IHcgb2Ygdi5kb25lRGF5S2V5cyl1LmRvbmVEYXlLZXlzLmFkZCh3KTtmPSEwfX0hcCYmIWYmJih1LmRheXNEb25lPTApLHMuc2V0KGQsdSl9cmV0dXJuIHN9ZnVuY3Rpb24gRXgoZSl7cmV0dXJuIGU9PW51bGw/bnVsbDppZShlKX1mdW5jdGlvbiBtSShlKXtyZXR1cm4gZT09bnVsbD9udWxsOnVpKEllKGUpKX1mdW5jdGlvbiB1aShlKXtyZXR1cm4gaWUoZSkuc2xpY2UoMCw3KX1mdW5jdGlvbiBNYyhlKXtsZXRbdCxuXT1TdHJpbmcoZSkuc3BsaXQoIi0iKS5tYXAoTnVtYmVyKTtyZXR1cm5gJHtvclsobnx8MSktMV18fCIifSAke3R9YH1mdW5jdGlvbiBOeChlKXtpZighZXx8dHlwZW9mIGUhPSJzdHJpbmciKXJldHVybiBudWxsO2xldCB0PWUudHJpbSgpLm1hdGNoKC9eKFtBLVphLXpdKylccysoXGR7NH0pJC8pO2lmKCF0KXJldHVybiBudWxsO2xldCBuPW9yLmZpbmRJbmRleChyPT5yLnRvTG93ZXJDYXNlKCk9PT10WzFdLnRvTG93ZXJDYXNlKCkpO3JldHVybiBuPDA/bnVsbDpgJHt0WzJdfS0ke1N0cmluZyhuKzEpLnBhZFN0YXJ0KDIsIjAiKX1gfWZ1bmN0aW9uIFR4KGU9bmV3IERhdGUsdD1HbSl7bGV0IG49W107Zm9yKGxldCByPXQtMTtyPj0wO3ItLSl7bGV0IG89bmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKS1yLDEpO24ucHVzaCh1aShvKSl9cmV0dXJuIG59ZnVuY3Rpb24gcW0oZSl7bGV0W3Qsbl09U3RyaW5nKGUpLnNwbGl0KCItIikubWFwKE51bWJlcik7cmV0dXJuIE1hdGguZmxvb3IobmV3IERhdGUodCwobnx8MSktMSwxLDAsMCwwLDApLmdldFRpbWUoKS8xZTMpfWZ1bmN0aW9uIFlzKGUpe3JldHVybiBpZShkbihlKSl9ZnVuY3Rpb24gaEkoZSx0PW5ldyBEYXRlKXtsZXRbbixyXT1TdHJpbmcoZSkuc3BsaXQoIi0iKS5tYXAoTnVtYmVyKSxvPW5ldyBEYXRlKG4sciwwKS5nZXREYXRlKCksYT1ZcyhpZSh0KSksaT1bXSxzPW5ldyBTZXQ7Zm9yKGxldCBsPTE7bDw9bztsKyspe2xldCBkPVlzKGllKG5ldyBEYXRlKG4sci0xLGwpKSk7ZC5zbGljZSgwLDcpPT09ZSYmKHMuaGFzKGQpfHxkPmF8fChzLmFkZChkKSxpLnB1c2goZCkpKX1yZXR1cm4gaX1mdW5jdGlvbiBnSShlKXtsZXQgdD17fTtmb3IobGV0IHIgb2YgZXx8W10pe2lmKCFyfHxyLnJhdGluZz09bnVsbCljb250aW51ZTtsZXQgbz1FeChyLnRpbWVzdGFtcCk7byYmKHRbb118fCh0W29dPXt0b3RhbDowLGNvdW50OjB9KSx0W29dLnRvdGFsKz1yLnJhdGluZyx0W29dLmNvdW50Kz0xKX1sZXQgbj17fTtmb3IobGV0IHIgb2YgT2JqZWN0LmtleXModCkpbltyXT10W3JdLnRvdGFsL3Rbcl0uY291bnQ7cmV0dXJuIG59ZnVuY3Rpb24geUkoZSx0KXtsZXQgbj0wO2ZvcihsZXQgcj10Lmxlbmd0aC0xO3I+PTAmJmUuaGFzKHRbcl0pO3ItLSluKz0xO3JldHVybiBufWZ1bmN0aW9uIGd4KGUpe3JldHVybiFlfHxlLmxlbmd0aD09PTA/MDplLnJlZHVjZSgodCxuKT0+dCtuLDApL2UubGVuZ3RofWZ1bmN0aW9uIHZJKGUse29yZGVyZWRXaW5kb3dLZXlzOnQ9W10sbWluQ29tcGxldGlvbnM6bj12eCxtaW5Nb29kRGF5czpyPWJ4fT17fSl7bGV0IG89ZkkoZSksYT1bXTtmb3IobGV0W2ksc11vZiBvLmVudHJpZXMoKSl7bGV0IGw9cy5kb25lTW9vZHMubGVuZ3RoLGQ9cy5vZmZNb29kcy5sZW5ndGg7aWYocy5jb21wbGV0aW9uczxufHxsPHJ8fGQ9PT0wKWNvbnRpbnVlO2xldCBjPWd4KHMuZG9uZU1vb2RzKSx1PWd4KHMub2ZmTW9vZHMpO2EucHVzaCh7a2V5OmksbGFiZWw6cy5sYWJlbCxzYW1wbGVDb250ZW50OnMuc2FtcGxlQ29udGVudHx8cy5sYWJlbCxjb21wbGV0aW9uczpzLmNvbXBsZXRpb25zLGRheXNEb25lOnMuZGF5c0RvbmUhPW51bGw/cy5kYXlzRG9uZTpzLmRvbmVEYXlLZXlzP3MuZG9uZURheUtleXMuc2l6ZTpsLHN0cmVhazpzLmRvbmVEYXlLZXlzP3lJKHMuZG9uZURheUtleXMsdCk6MCx3ZWVrU3RyZWFrOnMud2Vla1N0cmVhayE9bnVsbD9zLndlZWtTdHJlYWs6MCxkZWx0YTpjLXUsZG9uZVdpdGhNb29kOmwsb2ZmV2l0aE1vb2Q6ZCxhdmdNb29kT25Eb25lOmMsYXZnTW9vZE9uT2ZmOnUsbW9zdFJlY2VudERheUtleTpzLm1vc3RSZWNlbnREYXlLZXl8fG51bGx9KX1yZXR1cm4gYS5zb3J0KChpLHMpPT5zLmRlbHRhLWkuZGVsdGEpLGF9ZnVuY3Rpb24gYkkoZSx0LG4scil7bGV0IG89bnx8MDtmb3IobGV0IGEgb2YgZSl0LmhhcyhhKT9vKz0xOmEhPT1yJiYobz0wKTtyZXR1cm4gb31mdW5jdGlvbiBEeCh7Y29tcGxldGVkVGFza3M6ZSxtb29kUmF0aW5nczp0LG1vbnRoS2V5czpuLG1pbk1vbnRobHlDb21wbGV0aW9uczpyPWxJLHRvZGF5Om89bmV3IERhdGUscHJpb3JTdHJlYWtCeUtleTphPW5ldyBNYXB9KXtsZXQgaT1uZXcgU2V0KG58fFtdKSxzPWdJKHQpLGw9WXMoaWUobykpLGQ9bmV3IE1hcDtmb3IobGV0IHkgb2YgaSlkLnNldCh5LG5ldyBNYXApO2xldCBjPW5ldyBNYXA7Zm9yKGxldCB5IG9mIGV8fFtdKXtpZigheXx8eS5jb21wbGV0ZWRBdD09bnVsbCljb250aW51ZTtsZXQgdj1tSSh5LmNvbXBsZXRlZEF0KTtpZighdnx8IWkuaGFzKHYpKWNvbnRpbnVlO2xldCB3PVltKHkuY29udGVudCk7aWYoIXcpY29udGludWU7bGV0IGc9ZC5nZXQodik7Zy5oYXModyl8fGcuc2V0KHcse2xhYmVsOlN4KHkuY29udGVudCksc2FtcGxlQ29udGVudDp5LmNvbnRlbnQsY291bnQ6MCxkb25lRGF5S2V5czpuZXcgU2V0fSk7bGV0IGg9Zy5nZXQodyk7aC5jb3VudCs9MTtsZXQgYj1FeCh5LmNvbXBsZXRlZEF0KTtiJiYoaC5kb25lRGF5S2V5cy5hZGQoYiksYy5oYXModyl8fGMuc2V0KHcsbmV3IFNldCksYy5nZXQodykuYWRkKFlzKGIpKSl9bGV0IHU9bmV3IE1hcDtmb3IobGV0IHkgb2YgT2JqZWN0LmtleXMocykpe2xldCB2PWAke3kuc2xpY2UoMCw3KX1gO2kuaGFzKHYpJiYodS5oYXModil8fHUuc2V0KHYsW10pLHUuZ2V0KHYpLnB1c2goeSkpfWxldCBwPW5ldyBNYXAsZj1uZXcgTWFwO2ZvcihsZXQgeSBvZlsuLi5pXS5zb3J0KCkpe2xldCB2PWQuZ2V0KHkpLHc9dS5nZXQoeSl8fFtdLGc9aEkoeSxvKSxoPVtdO2ZvcihsZXRbYixtXW9mIHYuZW50cmllcygpKXtsZXQgUz1wLmhhcyhiKT9wLmdldChiKTphLmdldChiKXx8MCx4PWMuZ2V0KGIpfHxuZXcgU2V0LEU9YkkoZyx4LFMsbCk7aWYocC5zZXQoYixFKSxtLmNvdW50PHIpY29udGludWU7bGV0IFQ9W10sQT1bXTtmb3IobGV0IEwgb2Ygdyl7bGV0IE89c1tMXTttLmRvbmVEYXlLZXlzLmhhcyhMKT9ULnB1c2goeXgoTykpOkEucHVzaCh5eChPKSl9bGV0IEM9Wy4uLm0uZG9uZURheUtleXNdLnNvcnQoKS5hdCgtMSl8fG51bGw7aC5wdXNoKHtsYWJlbDptLmxhYmVsLGtleTpiLGNvdW50Om0uY291bnQsd2Vla1N0cmVhazpFLGRvbmVNb29kczpULG1vc3RSZWNlbnREYXlLZXk6QyxvZmZNb29kczpBfSl9aC5zb3J0KChiLG0pPT5tLmNvdW50LWIuY291bnR8fGIubGFiZWwubG9jYWxlQ29tcGFyZShtLmxhYmVsKSksZi5zZXQoeSx7bW9udGhLZXk6eSxsYWJlbDpNYyh5KSxyb3dzOmh9KX1yZXR1cm4gZn1mdW5jdGlvbiBBeChlLHtlbmZvcmNlQWN0aXZpdHlFbGlnaWJpbGl0eTp0PSExLG9yZGVyZWRXaW5kb3dLZXlzOm49W10sbWluQ29tcGxldGlvbnM6cj12eCxtaW5Nb29kRGF5czpvPWJ4LHRvZGF5OmE9bmV3IERhdGV9PXt9KXtsZXQgaT1uZXcgTWFwLHM9bmV3IE1hcDtmb3IobGV0IHcgb2YgZS52YWx1ZXMoKSlmb3IobGV0IGcgb2Ygdy5yb3dzfHxbXSl7bGV0IGg9Zy5rZXl8fENjKGcubGFiZWwpO2lmKCFoKWNvbnRpbnVlO2kuaGFzKGgpfHxpLnNldChoLHtsYWJlbDpnLmxhYmVsLHNhbXBsZUNvbnRlbnQ6Zy5sYWJlbCxjb21wbGV0aW9uczowLGRvbmVNb29kczpbXSxtb3N0UmVjZW50RGF5S2V5Om51bGwsb2ZmTW9vZHM6W10sd2Vla1N0cmVhazowfSk7bGV0IGI9aS5nZXQoaCk7Yi5jb21wbGV0aW9ucys9Zy5jb3VudHx8MCxBcnJheS5pc0FycmF5KGcuZG9uZU1vb2RzKSYmYi5kb25lTW9vZHMucHVzaCguLi5nLmRvbmVNb29kcyksQXJyYXkuaXNBcnJheShnLm9mZk1vb2RzKSYmYi5vZmZNb29kcy5wdXNoKC4uLmcub2ZmTW9vZHMpLGIubGFiZWw9Zy5sYWJlbHx8Yi5sYWJlbCxnLm1vc3RSZWNlbnREYXlLZXkmJighYi5tb3N0UmVjZW50RGF5S2V5fHxnLm1vc3RSZWNlbnREYXlLZXk+Yi5tb3N0UmVjZW50RGF5S2V5KSYmKGIubW9zdFJlY2VudERheUtleT1nLm1vc3RSZWNlbnREYXlLZXkpO2xldCBtPXMuZ2V0KGgpOyghbXx8KHcubW9udGhLZXl8fCIiKT5tKSYmKHMuc2V0KGgsdy5tb250aEtleXx8IiIpLGIud2Vla1N0cmVhaz1nLndlZWtTdHJlYWt8fDApfWZvcihsZXQgdyBvZiBpLnZhbHVlcygpKXcuZGF5c0RvbmU9dy5jb21wbGV0aW9ucztsZXQgbD12SShpLHtvcmRlcmVkV2luZG93S2V5czpuLG1pbkNvbXBsZXRpb25zOnIsbWluTW9vZERheXM6b30pO2lmKCF0KXJldHVybiBsO2xldCBkPWllKGEpLGM9WXMoZCksdT1JZShjKTt1LnNldERhdGUodS5nZXREYXRlKCktNyk7bGV0IHA9aWUodSksZj1JZShkKTtmLnNldERhdGUoZi5nZXREYXRlKCktKHNJLTEpKTtsZXQgeT1pZShmKTtyZXR1cm4gbC5maWx0ZXIodz0+e2lmKHcuY29tcGxldGlvbnM+aUkpcmV0dXJuIHcubW9zdFJlY2VudERheUtleT49eTtsZXQgZz13Lm1vc3RSZWNlbnREYXlLZXk+PXA7cmV0dXJuIHcud2Vla1N0cmVhaz4wJiZnfSl9ZnVuY3Rpb24geXgoZSl7cmV0dXJuIE1hdGgucm91bmQoKGV8fDApKjEwMCkvMTAwfWZ1bmN0aW9uIFhtKGUpe2xldCB0PU1hdGgucm91bmQoKGV8fDApKjEwMCkvMTAwO3JldHVybmAke3Q+MD8iKyI6dDwwPyJcdTIyMTIiOiIifSR7TWF0aC5hYnModCkudG9GaXhlZCgyKX1gfXZhciBxcz0iRW5lcmd5IFBlciBIYWJpdCBEYXRhIiwkbT0zLE94PWBDYWNoZSBmb3JtYXQ6ICR7JG19YCx3ST0iVGhpcyBhcmNoaXZlZCBub3RlIGlzIG1haW50YWluZWQgYnkgdGhlIGRhc2hib2FyZCBwbHVnaW4ncyBFbmVyZ3kgUGVyIEhhYml0IHdpZGdldC4gRWFjaCBtb250aCBiZWxvdyBsaXN0cyBldmVyeSBjb21wbGV0ZWQgdGFzayBvY2N1cnJlbmNlLCB3aXRoIGl0cyBjb21wbGV0aW9uIGNvdW50IGFuZCB0aGUgbW9vZCByYXRpbmdzIHJlY29yZGVkIG9uIHRoZSBkYXlzIGl0IHdhcyAoYW5kIHdhc24ndCkgY29tcGxldGVkLiBQYXN0IG1vbnRocyBhcmUgY2FjaGVkIGhlcmUgc28gdGhlIHdpZGdldCBuZWVkIG5vdCByZS1yZWFkIGEgZnVsbCB5ZWFyIG9mIGNvbXBsZXRlZCB0YXNrcyBvbiBldmVyeSBsb2FkLiI7ZnVuY3Rpb24gQ3goZSl7aWYoIWUpcmV0dXJuW107bGV0IHQ9ZS5yZXBsYWNlKC9eXHMqXFs/LywiIikucmVwbGFjZSgvXF0/XHMqJC8sIiIpLnRyaW0oKTtyZXR1cm4gdD90LnNwbGl0KCIsIikubWFwKG49Pk51bWJlcihuLnRyaW0oKSkpLmZpbHRlcihuPT5OdW1iZXIuaXNGaW5pdGUobikpOltdfWZ1bmN0aW9uIE14KGUpe3JldHVybmBbJHsoZXx8W10pLmpvaW4oIiwgIil9XWB9ZnVuY3Rpb24ga0koZSl7cmV0dXJuIFN0cmluZyhlfHwiIikucmVwbGFjZSgvXHI/XG4vZywiICIpLnJlcGxhY2UoL1x8L2csIlxcfCIpLnRyaW0oKX1mdW5jdGlvbiBYcyhlKXtsZXQgdD1gfCBUYXNrIHwgQ29tcGxldGlvbnMgfCBXZWVrcyBzdHJlYWsgfCBNb29kIG9uIGRvbmUgZGF5cyB8IE1vb2Qgb24gb2ZmIGRheXMgfCBMYXN0IGNvbXBsZXRlZCB8CnwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHwgLS0tIHxgLG49KGV8fFtdKS5tYXAocj0+YHwgJHtrSShyLmxhYmVsKX0gfCAke3IuY291bnR9IHwgJHtyLndlZWtTdHJlYWt8fDB9IHwgJHtNeChyLmRvbmVNb29kcyl9IHwgJHtNeChyLm9mZk1vb2RzKX0gfCAke3IubW9zdFJlY2VudERheUtleXx8IiJ9IHxgKS5qb2luKGAKYCk7cmV0dXJuIG4/YCR7dH0KJHtufWA6dH1mdW5jdGlvbiB4SShlKXtsZXQgdD1bXTtmb3IobGV0IG4gb2YgZS5zcGxpdChgCmApKXtsZXQgcj1uLnRyaW0oKTtpZighci5zdGFydHNXaXRoKCJ8IikpY29udGludWU7bGV0IG89ci5yZXBsYWNlKC9eXHwvLCIiKS5yZXBsYWNlKC9cfCQvLCIiKS5zcGxpdChuZXcgUmVnRXhwKCIoPzwhXFxcXClcXHwiKSkubWFwKHU9PnUudHJpbSgpLnJlcGxhY2UoL1xcXHwvZywifCIpKTtpZihvLmxlbmd0aDw1fHwvXi0rJC8udGVzdChvWzBdLnJlcGxhY2UoL1xzL2csIiIpKXx8b1sxXS50b0xvd2VyQ2FzZSgpPT09ImNvbXBsZXRpb25zIiljb250aW51ZTtsZXQgYT1vWzBdLGk9cGFyc2VJbnQob1sxXSwxMCk7aWYoIWF8fCFOdW1iZXIuaXNGaW5pdGUoaSkpY29udGludWU7bGV0IHM9cGFyc2VJbnQob1syXSwxMCl8fDAsbD1DeChvWzNdKSxkPUN4KG9bNF0pLGM9L15cZHs0fS1cZHsyfS1cZHsyfSQvLnRlc3Qob1s1XXx8IiIpP29bNV06bnVsbDt0LnB1c2goe2xhYmVsOmEsa2V5OkNjKGEpLGNvdW50Omksd2Vla1N0cmVhazpzLGRvbmVNb29kczpsLG1vc3RSZWNlbnREYXlLZXk6YyxvZmZNb29kczpkfSl9cmV0dXJuIHR9ZnVuY3Rpb24gU0koZSl7bGV0IHQ9bmV3IE1hcDtpZighZXx8dHlwZW9mIGUhPSJzdHJpbmciKXJldHVybiB0O2xldCBuPWUucmVwbGFjZSgvXHJcbi9nLGAKYCkscj0vXiMjXHMrKC4rPylccyokL2dtLG89Wy4uLm4ubWF0Y2hBbGwocildO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKXtsZXQgaT1OeChvW2FdWzFdKTtpZighaSljb250aW51ZTtsZXQgcz1vW2FdLmluZGV4K29bYV1bMF0ubGVuZ3RoLGw9YSsxPG8ubGVuZ3RoP29bYSsxXS5pbmRleDpuLmxlbmd0aCxkPXhJKG4uc2xpY2UocyxsKSk7dC5zZXQoaSx7bW9udGhLZXk6aSxsYWJlbDpvW2FdWzFdLnRyaW0oKSxyb3dzOmR9KX1yZXR1cm4gdH1mdW5jdGlvbiBFSShlKXtsZXQgbj1bLi4uZS5rZXlzKCldLnNvcnQoKS5yZXZlcnNlKCkubWFwKHI9PntsZXQgbz1lLmdldChyKTtyZXR1cm5gIyMgJHtNYyhyKX0KCiR7WHMoby5yb3dzKX0KYH0pO3JldHVybltgIyAke3FzfWAsIiIsT3gsIiIsd0ksIiIsLi4ubl0uam9pbihgCmApfWFzeW5jIGZ1bmN0aW9uIEl4KGUpe2xldCB0PWF3YWl0IGUuZmluZE5vdGUoe25hbWU6cXMsdGFnczpbdmVdfSkuY2F0Y2goKCk9Pm51bGwpO2lmKCF0Py51dWlkKXJldHVybntmb3JtYXRWZXJzaW9uOjAsbm90ZUhhbmRsZTpudWxsLG1vbnRoc0J5S2V5Om5ldyBNYXAscmF3Q29udGVudDoiIn07bGV0IG49YXdhaXQgZS5nZXROb3RlQ29udGVudCh7dXVpZDp0LnV1aWR9KS5jYXRjaCgoKT0+IiIpfHwiIixyPW4ubWF0Y2goL15DYWNoZSBmb3JtYXQ6XHMqKFxkKylccyokL20pO3JldHVybntmb3JtYXRWZXJzaW9uOnI/TnVtYmVyKHJbMV0pOjAsbm90ZUhhbmRsZTp0LG1vbnRoc0J5S2V5OlNJKG4pLHJhd0NvbnRlbnQ6bn19YXN5bmMgZnVuY3Rpb24gTkkoZSx0KXtpZih0Py51dWlkKXJldHVybiB0O2xldCBuPWF3YWl0IGUuY3JlYXRlTm90ZShxcyxbdmVdLHthcmNoaXZlOiEwfSkscj17bmFtZTpxcyx1dWlkOnR5cGVvZiBuPT0ib2JqZWN0Ij9uLnV1aWQ6bn07cmV0dXJuIGsoYFtlbmVyZ3ktcGVyLWhhYml0LWNhY2hlXSBjcmVhdGVkIGNhY2hlIG5vdGUgIiR7cXN9IiB1dWlkICR7ci51dWlkfWApLHJ9YXN5bmMgZnVuY3Rpb24gUngoZSx7bm90ZUhhbmRsZTp0LHJhd0NvbnRlbnQ6bixtb250aHNCeUtleTpyLGN1cnJlbnRNb250aEtleTpvLGNoYW5nZWRNb250aEtleXM6YX0pe2xldCBpPWF3YWl0IE5JKGUsdCkscz0obnx8IiIpLmluY2x1ZGVzKE94KSxsPWEubGVuZ3RoPT09MSYmYVswXT09PW8mJnMsZD1NYyhvKSxjPW5ldyBSZWdFeHAoYF4jI1xccyske2R9XFxzKiRgLCJtIikudGVzdChufHwiIik7aWYodD8udXVpZCYmbCYmYyl7bGV0IHU9WHMoci5nZXQobyk/LnJvd3N8fFtdKTt0cnl7cmV0dXJuIGF3YWl0IGUucmVwbGFjZU5vdGVDb250ZW50KGksYAoke3V9CmAse3NlY3Rpb246e2hlYWRpbmc6e3RleHQ6ZH19fSksayhgW2VuZXJneS1wZXItaGFiaXQtY2FjaGVdIHJlZnJlc2hlZCBzZWN0aW9uICIke2R9IiBpbiBwbGFjZWApLGl9Y2F0Y2gocCl7aygiW2VuZXJneS1wZXItaGFiaXQtY2FjaGVdIHNlY3Rpb24gcmVwbGFjZSBmYWlsZWQsIHJld3JpdGluZyB3aG9sZSBub3RlOiIscCl9fXJldHVybiBhd2FpdCBlLnJlcGxhY2VOb3RlQ29udGVudChpLEVJKHIpKS5jYXRjaCh1PT5rKCJbZW5lcmd5LXBlci1oYWJpdC1jYWNoZV0gZmFpbGVkIHRvIHdyaXRlIGNhY2hlIG5vdGU6Iix1KSksayhgW2VuZXJneS1wZXItaGFiaXQtY2FjaGVdIHdyb3RlICR7ci5zaXplfSBtb250aCBzZWN0aW9uKHMpIHRvIGNhY2hlIG5vdGVgKSxpfXZhciBUST0yOCxwaT0iZW5lcmd5LXBlci1oYWJpdCI7ZnVuY3Rpb24gREkoZSx0LG4scixvKXtsZXQgYT1bXTtmb3IobGV0IGk9by5sZW5ndGgtMTtpPj0wO2ktLSl7bGV0IHM9b1tpXTtpZihufHxzPT09dHx8cz49cil7YS5wdXNoKHMpO2NvbnRpbnVlfWlmKGUuaGFzKHMpKWJyZWFrO2EucHVzaChzKX1yZXR1cm4gYS5zb3J0KCl9ZnVuY3Rpb24gQUkoZSx0KXtsZXQgbj1udWxsO2ZvcihsZXRbbyxhXW9mIGUuZW50cmllcygpKXtpZighYS5yb3dzfHxhLnJvd3MubGVuZ3RoPT09MCljb250aW51ZTtsZXQgaT1xbShvKTsobj09bnVsbHx8aTxuKSYmKG49aSl9aWYobj09bnVsbClyZXR1cm4gY2k7bGV0IHI9TWF0aC5mbG9vcigodC1uKS84NjQwMCkrMTtyZXR1cm4gTWF0aC5tYXgoMSxNYXRoLm1pbihjaSxyKSl9ZnVuY3Rpb24gQ0koZSl7bGV0W3Qsbl09U3RyaW5nKGUpLnNwbGl0KCItIikubWFwKE51bWJlcik7cmV0dXJuIHVpKG5ldyBEYXRlKHQsKG58fDEpLTIsMSkpfWZ1bmN0aW9uIE1JKGUsdCl7bGV0IG49bmV3IE1hcCxyPWUuZ2V0KENJKHQpKTtmb3IobGV0IG8gb2Ygcj8ucm93c3x8W10pbi5zZXQoby5rZXksby53ZWVrU3RyZWFrfHwwKTtyZXR1cm4gbn1mdW5jdGlvbiBPSShlKXtsZXQgdD1uZXcgTWFwO2ZvcihsZXQgbiBvZiBlfHxbXSl7aWYoIW58fG4uY29tcGxldGVkQXQ9PW51bGx8fCFuLmNvbnRlbnQpY29udGludWU7bGV0IHI9WW0obi5jb250ZW50KTtpZighciljb250aW51ZTtsZXQgbz10LmdldChyKTsoIW98fG4uY29tcGxldGVkQXQ+by5jb21wbGV0ZWRBdCkmJnQuc2V0KHIse25vdGVVVUlEOm4ubm90ZVVVSUR8fG51bGwsdGFza1VVSUQ6bi51dWlkfHxudWxsLGZ1bGxUZXh0Om4uY29udGVudCxjb21wbGV0ZWRBdDpuLmNvbXBsZXRlZEF0LHRhc2s6bn0pfXJldHVybiB0fWFzeW5jIGZ1bmN0aW9uIFB4KGUse3RvZGF5OnQ9bmV3IERhdGV9PXt9KXtsZXQgbj1wZXJmb3JtYW5jZS5ub3coKSxyPU1hdGguZmxvb3IodC5nZXRUaW1lKCkvMWUzKSxvPXVpKHQpLGE9VHgodCxHbSksaT1uZXcgU2V0KGEpLHM9YXdhaXQgSXgoZSk7ayhgWyR7cGl9XSBjYWNoZSBub3RlICR7cy5ub3RlSGFuZGxlPyJmb3VuZCI6ImFic2VudCJ9IHdpdGggJHtzLm1vbnRoc0J5S2V5LnNpemV9IGNhY2hlZCBtb250aChzKWApO2xldCBsPW5ldyBEYXRlKHQpO2wuc2V0RGF0ZShsLmdldERhdGUoKS0oVEktMSkpO2xldCBkPXVpKGwpLGM9ISFzLm5vdGVIYW5kbGUmJnMuZm9ybWF0VmVyc2lvbiE9PSRtLHU9REkocy5tb250aHNCeUtleSxvLGMsZCxhKSxwPXFtKHVbMF18fG8pLGY9cGVyZm9ybWFuY2Uubm93KCk7ayhgWyR7cGl9XSBmZXRjaGluZyBjb21wbGV0ZWQgdGFza3MgZnJvbSAke25ldyBEYXRlKHAqMWUzKS50b0lTT1N0cmluZygpfSAoJHt1Lmxlbmd0aH0gbW9udGgocykgdG8gcmVjb21wdXRlKWApO2xldCB5PWF3YWl0IGUuZ2V0Q29tcGxldGVkVGFza3MocCxyKS50aGVuKEU9PkFycmF5LmlzQXJyYXkoRSk/RTpbXSk7ayhgWyR7cGl9XSBjb21wbGV0ZWQgdGFza3M6ICR7eS5sZW5ndGh9IGluICR7KHBlcmZvcm1hbmNlLm5vdygpLWYpLnRvRml4ZWQoMSl9bXNgKTtsZXQgdj1wZXJmb3JtYW5jZS5ub3coKSx3PWF3YWl0IGUuZ2V0TW9vZFJhdGluZ3MocCkudGhlbihFPT5BcnJheS5pc0FycmF5KEUpP0U6W10pO2soYFske3BpfV0gbW9vZCByYXRpbmdzOiAke3cubGVuZ3RofSBpbiAkeyhwZXJmb3JtYW5jZS5ub3coKS12KS50b0ZpeGVkKDEpfW1zYCk7bGV0IGc9TUkocy5tb250aHNCeUtleSx1WzBdfHxvKSxoPUR4KHtjb21wbGV0ZWRUYXNrczp5LG1vb2RSYXRpbmdzOncsbW9udGhLZXlzOnUsdG9kYXk6dCxwcmlvclN0cmVha0J5S2V5Omd9KSxiPW5ldyBNYXA7Zm9yKGxldFtFLFRdb2Ygcy5tb250aHNCeUtleS5lbnRyaWVzKCkpaS5oYXMoRSkmJmIuc2V0KEUsVCk7bGV0IG09W107Zm9yKGxldFtFLFRdb2YgaC5lbnRyaWVzKCkpe2xldCBBPWIuZ2V0KEUpOyghQXx8WHMoQS5yb3dzKSE9PVhzKFQucm93cykpJiZtLnB1c2goRSksYi5zZXQoRSxUKX0obS5sZW5ndGg+MHx8Y3x8IXMubm90ZUhhbmRsZSkmJmF3YWl0IFJ4KGUse25vdGVIYW5kbGU6cy5ub3RlSGFuZGxlLHJhd0NvbnRlbnQ6cy5yYXdDb250ZW50LG1vbnRoc0J5S2V5OmIsY3VycmVudE1vbnRoS2V5Om8sY2hhbmdlZE1vbnRoS2V5czptfSk7bGV0IFM9QXgoYix7ZW5mb3JjZUFjdGl2aXR5RWxpZ2liaWxpdHk6ITAsdG9kYXk6dH0pLHg9T0koeSk7Zm9yKGxldCBFIG9mIFMpe2xldCBUPXguZ2V0KEUua2V5KTtUJiYoRS5ub3RlVVVJRD1ULm5vdGVVVUlELEUudGFza1VVSUQ9VC50YXNrVVVJRCxFLmZ1bGxUZXh0PVQuZnVsbFRleHQpfWsoYFske3BpfV0gbG9hZGVkICR7Uy5sZW5ndGh9IGhhYml0KHMpIGZyb20gJHtiLnNpemV9IG1vbnRoKHMpIGluICR7KHBlcmZvcm1hbmNlLm5vdygpLW4pLnRvRml4ZWQoMSl9bXMgKGZldGNoZWQgJHt1Lmxlbmd0aH0gbW9udGgocykpOmApO2ZvcihsZXQgRSBvZiBTKXtsZXQgVD14LmdldChFLmtleSk/LnRhc2t8fG51bGw7ayhgWyR7cGl9XSAgIGhhYml0IGtleT0iJHtFLmtleX0iIGxhYmVsPSIke0UubGFiZWx9IiBjb21wbGV0aW9ucz0ke0UuY29tcGxldGlvbnN9IHdlZWtTdHJlYWs9JHtFLndlZWtTdHJlYWt9IGRlbHRhPSR7RS5kZWx0YS50b0ZpeGVkKDIpfSBtb3N0LXJlY2VudCB0YXNrOmAsVCl9cmV0dXJue2hhYml0czpTLHdpbmRvd0RheXM6QUkoYixyKSxjYWNoZWQ6bS5sZW5ndGg9PT0wJiYhIXMubm90ZUhhbmRsZSxtb250aENvdW50OmIuc2l6ZX19dmFyIFVlPVAoJCgpKSwkcz0iZW5lcmd5LXBlci1oYWJpdCIsSUk9OCxSST0zMzAsUEk9Ilx1ezFGNTAxfSIsTEk9W3twYXR0ZXJuOi9leGVyY2lzZXx3b3Jrb3V0fGd5bS8saWNvbjoiXHV7MUY0QUF9In0se3BhdHRlcm46L2Jpa2V8Y3ljbGluZ3xjeWNsZS8saWNvbjoiXHV7MUY2QjR9In0se3BhdHRlcm46L2xpZnQvLGljb246Ilx1ezFGM0NCfVx1RkUwRlx1MjAwRFx1MjY0MFx1RkUwRiJ9LHtwYXR0ZXJuOi9qb2d8cnVuLyxpY29uOiJcdXsxRjNDM30ifSx7cGF0dGVybjovaGlrZXx0cmFpbC8saWNvbjoiXHV7MUY5N0V9In0se3BhdHRlcm46L3dhbGt8b3V0c2lkZXxvdXRkb29yfHN0ZXBzLyxpY29uOiJcdTI2MDBcdUZFMEYifSx7cGF0dGVybjovaW5ib3h8ZW1haWwvLGljb246Ilx1ezFGNEU1fSJ9LHtwYXR0ZXJuOi9yZWFkfGJvb2t8c3R1ZHl8aG9tZXdvcmsvLGljb246Ilx1ezFGNEQ2fSJ9LHtwYXR0ZXJuOi9kZWVwIHdvcmt8Zm9jdXN8cmV2aWV3fHJlZmxlY3QvLGljb246Ilx1ezFGOUQwfSJ9LHtwYXR0ZXJuOi9zY3JlZW58cGhvbmV8c29jaWFsfGRpZ2l0YWwvLGljb246Ilx1ezFGMzE5fSJ9LHtwYXR0ZXJuOi9sYXRlLj9uaWdodHxuaWdodHxtaWRuaWdodC8saWNvbjoiXHV7MUYzMUN9In0se3BhdHRlcm46L21lZGl0YXR8YnJlYXRofG1pbmRmdWx8eW9nYS8saWNvbjoiXHV7MUY5RDh9In0se3BhdHRlcm46L3NsZWVwfGJlZHxyZXN0LyxpY29uOiJcdXsxRjYzNH0ifSx7cGF0dGVybjovd2F0ZXJ8aHlkcmF0fGRyaW5rLyxpY29uOiJcdXsxRjRBN30ifSx7cGF0dGVybjovcGxhbnxyZXZpZXd8am91cm5hbC8saWNvbjoiXHV7MUY0RER9In0se3BhdHRlcm46L2NvbnRhY3R8ZW1haWx8am91cm5hbHxtZXNzYWdlfHRleHR8d3JpdGV8d3JpdGluZy8saWNvbjoiXHUyNzBEXHVGRTBGIn0se3BhdHRlcm46L291dHJlYWNofGJyb2FkY2FzdHxhZHZlcnRpc2V8ZGlzdHJpYnV0aW9uLyxpY29uOiJcdXsxRjRFMn0ifSx7cGF0dGVybjovZ3JhdGl0dWRlfHRoYW5rLyxpY29uOiJcdXsxRjY0Rn0ifSx7cGF0dGVybjovY2xlYW58dGlkeXxvcmdhbml6ZS8saWNvbjoiXHV7MUY5Rjl9In0se3BhdHRlcm46L2Nvb2t8bWVhbHxyZWNpcGUvLGljb246Ilx1ezFGMzczfSJ9LHtwYXR0ZXJuOi9tdXNpY3xzb25nfHNpbmcvLGljb246Ilx1ezFGM0I1fSJ9LHtwYXR0ZXJuOi9hcnR8ZHJhd3xwYWludC8saWNvbjoiXHV7MUYzQTh9In0se3BhdHRlcm46L2dhbWV8cGxheXxmdW4vLGljb246Ilx1ezFGM0FFfSJ9LHtwYXR0ZXJuOi9mYW1pbHl8ZnJpZW5kfHNvY2lhbC8saWNvbjoiXHV7MUY0NkZ9XHUyMDBEXHUyNjQwXHVGRTBGIn0se3BhdHRlcm46L3ZvbHVudGVlcnxoZWxwfGNoYXJpdHkvLGljb246Ilx1Mjc2NFx1RkUwRiJ9LHtwYXR0ZXJuOi9maW5hbmNlfGJ1ZGdldHxtb25leS8saWNvbjoiXHV7MUY0QjB9In0se3BhdHRlcm46L2xhbmd1YWdlfGxlYXJufHN0dWR5LyxpY29uOiJcdXsxRjIzNn0ifSx7cGF0dGVybjovdHJhdmVsfHRyaXB8dmFjYXRpb24vLGljb246Ilx1MjcwOFx1RkUwRiJ9LHtwYXR0ZXJuOi9nYXJkZW58cGxhbnR8bmF0dXJlLyxpY29uOiJcdXsxRjMzMX0ifSx7cGF0dGVybjovbW92aWV8ZmlsbXxjaW5lbWEvLGljb246Ilx1ezFGM0FDfSJ9LHtwYXR0ZXJuOi9jbGVhbmluZ3xsYXVuZHJ5fGhvdXNld29yay8saWNvbjoiXHV7MUY5RkF9In0se3BhdHRlcm46L3N3aW18cG9vbHx3YXRlci8saWNvbjoiXHV7MUYzQ0F9In0se3BhdHRlcm46L25ldHdvcmtpbmd8Yml6ZGV2LyxpY29uOiJcdXsxRjkxRH0ifV07ZnVuY3Rpb24gX0koZSl7bGV0IHQ9Vm0oZS5sYWJlbCl8fFZtKGUuZnVsbFRleHQpO2lmKHQpcmV0dXJuIHQ7bGV0IG49am0oZS5sYWJlbCkudG9Mb3dlckNhc2UoKTtmb3IobGV0e3BhdHRlcm46cixpY29uOm99b2YgTEkpaWYoci50ZXN0KG4pKXJldHVybiBvO3JldHVybiBQSX1mdW5jdGlvbiBVSShlKXtsZXQgdD1OdW1iZXIoZSl8fDA7aWYodDw9MClyZXR1cm4ibm8gYWN0aXZlIHN0cmVhayI7bGV0IG49InN0cmVhay13ZWVrIjtyZXR1cm4gdD49MiYmKG49InN0cmVhay1hbGl2ZSIpLHQ+PTQmJihuPSJzdHJlYWstbW9udGgiKSx0Pj0xMiYmKG49InN0cmVhay1xdWFydGVyIiksdD49MjYmJihuPSJzdHJlYWstaGFsZi15ZWFyIiksKDAsVWUuanN4cykoImRpdiIse2NsYXNzTmFtZTpgc3RyZWFrLWxhYmVsICR7bn1gLGNoaWxkcmVuOlt0LCItd2VlayBzdHJlYWsgYWN0aXZlIl19KX1mdW5jdGlvbiBMeChlLHQsbil7bGV0IHI9bj09PTE/ImRheSI6ImRheXMiO3JldHVybmAke2V9OiAke1htKHQpfSBhdmcgb3ZlciAke259IHJhdGVkICR7cn1gfWZ1bmN0aW9uIEZJKGUpe3JldHVybmAke0x4KCJXaGVuIGNvbXBsZXRlZCIsZS5hdmdNb29kT25Eb25lLGUuZG9uZVdpdGhNb29kKX0KJHtMeCgiV2hlbiBub3QgY29tcGxldGVkIixlLmF2Z01vb2RPbk9mZixlLm9mZldpdGhNb29kKX1gfWZ1bmN0aW9uIHpJKHtoYWJpdDplLHdpbmRvd0RheXM6dCxtYXhBYnNEZWx0YTpuLG9uT3BlbjpyfSl7bGV0IG89ZS5kZWx0YT49MCxhPW4+MD9NYXRoLm1pbigxMDAsTWF0aC5hYnMoZS5kZWx0YSkvbioxMDApOjAsaT0hIWUubm90ZVVVSUQscz1lLmZ1bGxUZXh0fHxlLmxhYmVsLGw9YGhhYml0LXJvdy1sYWJlbCR7aT8iIGhhYml0LXJvdy1sYWJlbC0tbGluayI6IiJ9YCxkPUZJKGUpO3JldHVybigwLFVlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImhhYml0LXJvdyIsY2hpbGRyZW46WygwLFVlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImhhYml0LXJvdy1sZWFkIixjaGlsZHJlbjpbKDAsVWUuanN4KSgic3BhbiIse2NsYXNzTmFtZToiaGFiaXQtcm93LWljb24iLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOl9JKGUpfSksKDAsVWUuanN4cykoImRpdiIse2NsYXNzTmFtZToiaGFiaXQtcm93LXRleHQiLGNoaWxkcmVuOlsoMCxVZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6bCx0aXRsZTpzLHJvbGU6aT8ibGluayI6dm9pZCAwLHRhYkluZGV4Omk/MDp2b2lkIDAsb25DbGljazppP2M9PntjLnRhcmdldC5jbG9zZXN0KCJhIil8fHIoZSl9OnZvaWQgMCxvbktleURvd246aT9jPT57KGMua2V5PT09IkVudGVyInx8Yy5rZXk9PT0iICIpJiYoYy5wcmV2ZW50RGVmYXVsdCgpLHIoZSkpfTp2b2lkIDAsZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6e19faHRtbDpycihqbShlLmxhYmVsKSl9fSksKDAsVWUuanN4cykoImRpdiIse2NsYXNzTmFtZToiaGFiaXQtcm93LW1ldGEiLGNoaWxkcmVuOlsiQ29tcGxldGVkICIsZS5kYXlzRG9uZSwiIG9mICIsdCwiIGRheXMiXX0pLCgwLFVlLmpzeCkoImRpdiIse2NsYXNzTmFtZToiaGFiaXQtcm93LW1ldGEiLGNoaWxkcmVuOlVJKGUud2Vla1N0cmVhayl9KV19KV19KSwoMCxVZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJoYWJpdC1yb3ctdHJhY2siLGNoaWxkcmVuOlsoMCxVZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImhhYml0LXJvdy1heGlzIn0pLCgwLFVlLmpzeCkoImRpdiIse2NsYXNzTmFtZToiaGFiaXQtcm93LWJhci1oYWxmIGhhYml0LXJvdy1iYXItaGFsZi0tbmVnYXRpdmUiLHRpdGxlOmQsY2hpbGRyZW46IW8mJigwLFVlLmpzeCkoImRpdiIse2NsYXNzTmFtZToiaGFiaXQtcm93LWJhciBoYWJpdC1yb3ctYmFyLS1uZWdhdGl2ZSIsc3R5bGU6e3dpZHRoOmAke2F9JWB9fSl9KSwoMCxVZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImhhYml0LXJvdy1iYXItaGFsZiBoYWJpdC1yb3ctYmFyLWhhbGYtLXBvc2l0aXZlIix0aXRsZTpkLGNoaWxkcmVuOm8mJigwLFVlLmpzeCkoImRpdiIse2NsYXNzTmFtZToiaGFiaXQtcm93LWJhciBoYWJpdC1yb3ctYmFyLS1wb3NpdGl2ZSIsc3R5bGU6e3dpZHRoOmAke2F9JWB9fSl9KV19KSwoMCxVZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6YGhhYml0LXJvdy12YWx1ZSAke28/ImhhYml0LXJvdy12YWx1ZS0tcG9zaXRpdmUiOiJoYWJpdC1yb3ctdmFsdWUtLW5lZ2F0aXZlIn1gLGNoaWxkcmVuOlhtKGUuZGVsdGEpfSldfSl9ZnVuY3Rpb24gSm0oe2FwcDplfSl7bGV0W3Qsbl09KDAscG4udXNlU3RhdGUpKG51bGwpLFtyLG9dPSgwLHBuLnVzZVN0YXRlKSghMSksW2EsaV09KDAscG4udXNlU3RhdGUpKCEwKSxzPSgwLHBuLnVzZVJlZikobnVsbCk7KDAscG4udXNlRWZmZWN0KSgoKT0+e2lmKCFlKXJldHVybjtsZXQgcD0hMTtyZXR1cm4gbyghMSksaSghMCksUHgoZSkudGhlbihmPT57cHx8KG4oZiksaSghMSkpfSkuY2F0Y2goZj0+e2soYFskeyRzfV0gZmFpbGVkIHRvIGxvYWQgaGFiaXQgZGF0YWAsZikscHx8KG4oe2hhYml0czpbXSx3aW5kb3dEYXlzOmNpfSksbyghMCksaSghMSkpfSksKCk9PntwPSEwfX0sW2VdKTtsZXQgbD0oMCxwbi51c2VNZW1vKSgoKT0+KHQ/LmhhYml0c3x8W10pLnNsaWNlKDAsSUkpLFt0XSk7bHQoJHMsIWEmJiEhdCxyKTtsZXQgZD0oMCxwbi51c2VNZW1vKSgoKT0+bC5yZWR1Y2UoKHAsZik9Pk1hdGgubWF4KHAsTWF0aC5hYnMoZi5kZWx0YSkpLDApLFtsXSk7KDAscG4udXNlRWZmZWN0KSgoKT0+e19uKHMuY3VycmVudCl9LFtsXSk7bGV0IGM9KDAscG4udXNlQ2FsbGJhY2spKHA9PnshZXx8IXA/Lm5vdGVVVUlEfHxlLm5hdmlnYXRlKHhjKHAubm90ZVVVSUQpKX0sW2VdKSx1PXQ/LndpbmRvd0RheXN8fGNpO3JldHVybiB1PXU+PVJJPzM2NTp1LGE/KDAsVWUuanN4KShhZSx7d2lkZ2V0SWQ6JHMsY2hpbGRyZW46KDAsVWUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJoYWJpdC1lbXB0eSIsY2hpbGRyZW46IkFuYWx5emluZyB5b3VyIGhhYml0c1x1MjAyNiJ9KX0pOmwubGVuZ3RoPygwLFVlLmpzeHMpKGFlLHt3aWRnZXRJZDokcyxjaGlsZHJlbjpbKDAsVWUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJoYWJpdC1oZWFkZXIiLGNoaWxkcmVuOigwLFVlLmpzeCkoImRpdiIse2NsYXNzTmFtZToiaGFiaXQtZXllYnJvdyIsY2hpbGRyZW46YCR7dX0gREFZUyBBTkFMWVpFRGB9KX0pLCgwLFVlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImhhYml0LWNoYXJ0IixjaGlsZHJlbjpbKDAsVWUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJoYWJpdC16ZXJvLWxpbmUiLGNoaWxkcmVuOigwLFVlLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImhhYml0LXplcm8tbGFiZWwiLGNoaWxkcmVuOiIwIn0pfSksKDAsVWUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJoYWJpdC1yb3dzIixyZWY6cyxjaGlsZHJlbjpsLm1hcChwPT4oMCxVZS5qc3gpKHpJLHtoYWJpdDpwLHdpbmRvd0RheXM6dSxtYXhBYnNEZWx0YTpkLG9uT3BlbjpjfSxwLmtleSkpfSldfSldfSk6KDAsVWUuanN4KShhZSx7d2lkZ2V0SWQ6JHMsY2hpbGRyZW46KDAsVWUuanN4cykoImRpdiIse2NsYXNzTmFtZToiaGFiaXQtZW1wdHkiLGNoaWxkcmVuOlsoMCxVZS5qc3gpKCJwIix7Y2hpbGRyZW46Ik5vIHJlY3VycmluZy10YXNrIGhhYml0cyB3aXRoIGVub3VnaCBtb29kIGhpc3RvcnkgdG8gY29ycmVsYXRlIHlldC4ifSksKDAsVWUuanN4KSgicCIse2NsYXNzTmFtZToiaGFiaXQtZW1wdHktaGludCIsY2hpbGRyZW46IlNldCB0YXNrcyB0byByZXBlYXQgYW5kIGxvZyB5b3VyIG1vb2Qgb3ZlciB0aW1lIHRvIHNlZSB3aGljaCBoYWJpdHMgbGlmdCB5b3VyIGRheXMuIn0pXX0pfSl9dmFyIGR0PVAoZmUoKSk7dmFyIFd4PTIsV0k9NjAwLEJ4PTQsQkk9LjIsX3g9LjksVXg9OTYsSEk9ImVhc2UtaW4tb3V0IixLST0yNTAsSHg9NTAwLEt4PXtibHVyOiIwcHgiLG9wYWNpdHk6MSxzY2FsZVg6MSxzY2FsZVk6MSx4OiIwcHgiLHk6IjBweCJ9O2Z1bmN0aW9uIEZ4KGUsdCl7cmV0dXJuIE1hdGguYWJzKGUpPDE/MDp0L01hdGguYWJzKGUpfWZ1bmN0aW9uIEdJKGUsdCl7aWYodHlwZW9mIHQ/LmFuaW1hdGUhPSJmdW5jdGlvbiIpcmV0dXJuIG51bGw7bGV0IG49dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPWUubGVmdC1uLmxlZnQsbz1lLnRvcC1uLnRvcCxhPWUud2lkdGgvKG4ud2lkdGh8fDEpLGk9ZS5oZWlnaHQvKG4uaGVpZ2h0fHwxKSxzPWB0cmFuc2xhdGUoJHtyfXB4LCAke299cHgpIHNjYWxlKCR7YX0sICR7aX0pYDt0LnN0eWxlLnRyYW5zZm9ybU9yaWdpbj0idG9wIGxlZnQiLHQuc3R5bGUudHJhbnNmb3JtPXM7bGV0IGw9dC5hbmltYXRlKFt7dHJhbnNmb3JtOnN9LHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgwcHgsIDBweCkgc2NhbGUoMSwgMSkifV0se2R1cmF0aW9uOkh4LGVhc2luZzpISX0pO3JldHVybiBsLmZpbmlzaGVkLmNhdGNoKCgpPT57fSkuZmluYWxseSgoKT0+e3QuaXNDb25uZWN0ZWQmJih0LmdldEFuaW1hdGlvbnMoKS5zb21lKGQ9PmQhPT1sKXx8KHQuc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zZm9ybSIpLHQuc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zZm9ybS1vcmlnaW4iKSkpfSksbH1mdW5jdGlvbiBWSShlLHQsbil7bGV0IHI9Vngobik7cmV0dXJue2hlaWdodDpyP1dJOnQuaGVpZ2h0LGxlZnQ6ZS5sZWZ0LHRvcDp3aW5kb3cuaW5uZXJIZWlnaHQqQkksd2lkdGg6cj9lLndpZHRoOnQud2lkdGh9fWZ1bmN0aW9uIEd4KGUsdCxuKXtsZXQgcj10P3siLS1mb2N1cy1ibHVyIjp0LmJsdXIsIi0tZm9jdXMtb3BhY2l0eSI6YCR7dC5vcGFjaXR5fWAsIi0tZm9jdXMtc2NhbGUteCI6YCR7dC5zY2FsZVh9YCwiLS1mb2N1cy1zY2FsZS15IjpgJHt0LnNjYWxlWX1gLCItLWZvY3VzLXgiOnQueCwiLS1mb2N1cy15Ijp0Lnl9OnZvaWQgMDtyZXR1cm57Y2xhc3NOYW1lczpbZT8iZ3JpZC1jZWxsLS1mb2N1cy1tb2RlIjoiIixlJiZlPT09bj8iZ3JpZC1jZWxsLS1mb2N1c2VkIjoiIixlJiZlIT09bj8iZ3JpZC1jZWxsLS1mb2N1cy1oaWRkZW4iOiIiXS5maWx0ZXIoQm9vbGVhbiksc3R5bGU6cn19ZnVuY3Rpb24gakkoZSx0KXtsZXQgbj1lLmxlZnQrZS53aWR0aC8yLHI9ZS50b3ArZS5oZWlnaHQvMixvPW4tdC54LGE9ci10Lnk7TWF0aC5hYnMobyk8MSYmTWF0aC5hYnMoYSk8MSYmKGE9LTEpO2xldCBpPXQueCtlLndpZHRoLzIrVXgscz10LnkrZS5oZWlnaHQvMitVeCxsPVtGeChvLGkpLEZ4KGEscyldLmZpbHRlcihjPT5jPjEpLGQ9TWF0aC5tYXgobC5sZW5ndGg/TWF0aC5taW4oLi4ubCk6MSwxLjM1KTtyZXR1cm57Ymx1cjoiMnB4IixvcGFjaXR5OjAsc2NhbGVYOl94LHNjYWxlWTpfeCx4OmAke28qKGQtMSl9cHhgLHk6YCR7YSooZC0xKX1weGB9fWZ1bmN0aW9uIE9jKGUpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ+InUiP251bGw6ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLmRhc2hib2FyZC1ncmlkIC5ncmlkLWNlbGxbZGF0YS13aWRnZXQtaWQ9IiR7ZX0iXSAuZ3JpZC1jZWxsLXN1cmZhY2VgKX1mdW5jdGlvbiBWeChlKXtsZXQgdD1EdC5maW5kKG89Pm8ud2lkZ2V0SWQ9PT1lKTtpZighdClyZXR1cm4hMTtsZXQgbj10Lm1heEhvcml6b250YWxUaWxlcz09bnVsbHx8dC5tYXhIb3Jpem9udGFsVGlsZXM+PUJ4LHI9dC5tYXhWZXJ0aWNhbFRpbGVzPT1udWxsfHx0Lm1heFZlcnRpY2FsVGlsZXM+PVd4O3JldHVybiBuJiZyfWZ1bmN0aW9uIGp4KGUsdCl7cmV0dXJuIWU/LndpZGdldElkfHxlLndpZGdldElkIT09dHx8IVZ4KHQpP2U6ey4uLmUsZ3JpZEhlaWdodFNpemU6V3gsZ3JpZFdpZHRoU2l6ZTpCeH19ZnVuY3Rpb24gWUkoZSl7aWYodHlwZW9mIGRvY3VtZW50PiJ1Inx8dHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIG51bGw7bGV0IHQ9QXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuZGFzaGJvYXJkLWdyaWQgLmdyaWQtY2VsbFtkYXRhLXdpZGdldC1pZF0iKSk7aWYoIXQubGVuZ3RoKXJldHVybiBudWxsO2xldCBuPXt4OndpbmRvdy5pbm5lcldpZHRoLzIseTp3aW5kb3cuaW5uZXJIZWlnaHQvMn0scj17fTtyZXR1cm4gdC5mb3JFYWNoKG89PntsZXQgYT1vLmdldEF0dHJpYnV0ZSgiZGF0YS13aWRnZXQtaWQiKTtpZighYSlyZXR1cm47bGV0IGk9by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyW2FdPWE9PT1lP0t4OmpJKGksbil9KSxyfWZ1bmN0aW9uIHp4KGUpe3JldHVybntoZWlnaHQ6YCR7ZS5oZWlnaHR9cHhgLGxlZnQ6YCR7ZS5sZWZ0fXB4YCx0b3A6YCR7ZS50b3B9cHhgLHdpZHRoOmAke2Uud2lkdGh9cHhgfX1mdW5jdGlvbiBZeChlLHQpe2xldFtuLHJdPSgwLGR0LnVzZVN0YXRlKShudWxsKSxbbyxhXT0oMCxkdC51c2VTdGF0ZSkobnVsbCksW2ksc109KDAsZHQudXNlU3RhdGUpKG51bGwpLFtsLGRdPSgwLGR0LnVzZVN0YXRlKSh7fSksYz0oMCxkdC51c2VSZWYpKG51bGwpLHU9KDAsZHQudXNlUmVmKShudWxsKSxwPSgwLGR0LnVzZVJlZikobnVsbCksZj0oMCxkdC51c2VSZWYpKG51bGwpLHk9KDAsZHQudXNlUmVmKShudWxsKSx2PSgwLGR0LnVzZUNhbGxiYWNrKSgoKT0+e3dpbmRvdy5jbGVhclRpbWVvdXQodS5jdXJyZW50KSx5LmN1cnJlbnQ/LmNhbmNlbCgpLHkuY3VycmVudD1udWxsfSxbXSksdz0oMCxkdC51c2VDYWxsYmFjaykoKCk9Pnt2KCksd2luZG93LmNsZWFyVGltZW91dChjLmN1cnJlbnQpLHAuY3VycmVudD1udWxsLGYuY3VycmVudD1udWxsLHIobnVsbCksYShudWxsKSxzKG51bGwpLGQoe30pfSxbdl0pLGc9KDAsZHQudXNlQ2FsbGJhY2spKCgpPT57digpO2xldCBoPXAuY3VycmVudCxiPU9jKG8pO2lmKCFvfHwhaXx8IWh8fCFiKXt3KCk7cmV0dXJufWxldCBtPU9iamVjdC5mcm9tRW50cmllcyhPYmplY3Qua2V5cyhsKS5tYXAoeD0+W3gsS3hdKSksUz1iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2QobSksZi5jdXJyZW50PXtmcm9tUmVjdDpTLHdpZGdldElkOm99LHMoengoaCkpLGMuY3VycmVudD13aW5kb3cuc2V0VGltZW91dCh3LEh4KX0sW3csbyxpLHYsbF0pO3JldHVybigwLGR0LnVzZUxheW91dEVmZmVjdCkoKCk9PntsZXQgaD1mLmN1cnJlbnQ7IWg/LmZyb21SZWN0fHwhb3x8IWl8fGgud2lkZ2V0SWQ9PT1vJiYoZi5jdXJyZW50PW51bGwseS5jdXJyZW50Py5jYW5jZWwoKSx5LmN1cnJlbnQ9R0koaC5mcm9tUmVjdCxPYyhvKSkpfSxbbyxpXSksKDAsZHQudXNlRWZmZWN0KSgoKT0+e2xldCBoPWI9PntpZih0IT09YnQuREVGQVVMVHx8ZXx8IXpzKCkpcmV0dXJuO2xldCBtPWI/LmRldGFpbD8ud2lkZ2V0SWQ7aWYoIW0pcmV0dXJuO2lmKG09PT1vKXtnKCk7cmV0dXJufWxldCBTPVlJKG0pOyFPYyhtKXx8IVN8fChkKFMpLGEobSksdS5jdXJyZW50PXdpbmRvdy5zZXRUaW1lb3V0KCgpPT57bGV0IHg9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmRhc2hib2FyZC1ncmlkIiksRT1PYyhtKTtpZigheHx8IUUpcmV0dXJuO2xldCBUPUUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cC5jdXJyZW50PVQ7bGV0IEE9VkkoeC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxULG0pO2YuY3VycmVudD17ZnJvbVJlY3Q6VCx3aWRnZXRJZDptfSxyKG0pLHMoengoQSkpfSxLSSkpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIodWMsaCksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKHVjLGgpfSxbZyxlLG8sdF0pLCgwLGR0LnVzZUVmZmVjdCkoKCk9PigpPT57digpLHdpbmRvdy5jbGVhclRpbWVvdXQoYy5jdXJyZW50KX0sW3ZdKSwoMCxkdC51c2VFZmZlY3QpKCgpPT57byYmKGV8fHQhPT1idC5ERUZBVUxUfHwhenMoKSkmJncoKX0sW2UsdyxvLHRdKSwoMCxkdC51c2VFZmZlY3QpKCgpPT57aWYoIW8pcmV0dXJuO2xldCBoPW09PnttLmtleT09PSJFc2NhcGUiJiZnKCl9LGI9KCk9PncoKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLGIpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGgpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLGIpfX0sW2csdyxvXSkse2NsZWFyRm9jdXNlZFdpZGdldDpnLGV4cGFuZGVkV2lkZ2V0SWQ6bixmb2N1c2VkV2lkZ2V0SWQ6byxmb2N1c2VkV2lkZ2V0U3VyZmFjZVN0eWxlOmksaXNXaWRnZXRGb2N1c01vZGU6ISEobyYmdD09PWJ0LkRFRkFVTFQmJiFlKSx3aWRnZXRGb2N1c1RyYW5zZm9ybXM6bH19dmFyIHFJPTAsWEk9MixRbT0yLCRJPTEsSkk9MzAsUUk9NyxaST1KSSxlUj05LHF4PTI0LHRSPTEwMCxYeD1bIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sJHg9NjAsWm09MWUzLEp4PTYwLG5SPVFJKnF4KiR4Kkp4KlptLHJSPVpJKnF4KiR4Kkp4KlptO2Z1bmN0aW9uIG9SKGUpe2xldCB0PW5ldyBTZXQ7Zm9yKGxldCBuIG9mIGUpZm9yKGxldCByIG9mIG4udXVpZHMpdC5hZGQocik7cmV0dXJuIHR9YXN5bmMgZnVuY3Rpb24gYVIoZSl7bGV0IHQ9aVIobmV3IERhdGUpO2soIltHcmF2ZXlhcmRdIGZpbmRPckNyZWF0ZUdyYXZleWFyZE5vdGU6IGxvb2tpbmcgZm9yIG5vdGUgbmFtZWQiLEpTT04uc3RyaW5naWZ5KHQpLCJ3aXRoIHRhZyIsdmUpO2xldCBuPWF3YWl0IGUuZmluZE5vdGUoe25hbWU6dCx0YWdzOlt2ZV19KTtpZihrKCJbR3JhdmV5YXJkXSBmaW5kT3JDcmVhdGVHcmF2ZXlhcmROb3RlOiBmaW5kTm90ZSByZXN1bHQ6IixuP2B1dWlkPSR7bi51dWlkfWA6Im51bGwvdW5kZWZpbmVkIiksbj8udXVpZClyZXR1cm4gbjtrKCJbR3JhdmV5YXJkXSBmaW5kT3JDcmVhdGVHcmF2ZXlhcmROb3RlOiBub3RlIG5vdCBmb3VuZCwgY3JlYXRpbmcgbmV3IG5vdGUiKTtsZXQgcj1hd2FpdCBlLmNyZWF0ZU5vdGUodCxbdmVdLHthcmNoaXZlOiEwfSk7cmV0dXJuIGsoIltHcmF2ZXlhcmRdIGZpbmRPckNyZWF0ZUdyYXZleWFyZE5vdGU6IGNyZWF0ZWQgbm90ZSB3aXRoIHV1aWQ6IixyKSxhd2FpdCBlLnJlcGxhY2VOb3RlQ29udGVudCh7dXVpZDpyfSxReChbXSkpLHtuYW1lOnQsdXVpZDpyfX1mdW5jdGlvbiBReChlKXtsZXQgdD1gIyBHcmF2ZXlhcmQgdGFzayBjYW5kaWRhdGVzCgp8IERhdGUgfCBUYXNrIFVVSURzIHwgVGFzayBub3RlIG1ldGFkYXRhIHwKfC0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS18CmAsbj1lLm1hcChyPT57bGV0IG89QXJyYXkuaXNBcnJheShyLnRhc2tFbnRyaWVzKSYmci50YXNrRW50cmllcy5sZW5ndGg+MD9yLnRhc2tFbnRyaWVzOnIudXVpZHMubWFwKGk9Pih7bm90ZU5hbWU6bnVsbCxub3RlVVVJRDpudWxsLHV1aWQ6aX0pKSxhPWVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShvLm1hcChpPT4oe25vdGVOYW1lOmkubm90ZU5hbWV8fG51bGwsbm90ZVVVSUQ6aS5ub3RlVVVJRHx8bnVsbCx1dWlkOmkudXVpZH0pKSkpO3JldHVybmB8ICR7ci5kYXRlS2V5fSB8ICR7ci51dWlkcy5qb2luKCIsIil9IHwgJHthfSB8YH0pLmpvaW4oYApgKTtyZXR1cm4gdCtuKyhuP2AKYDoiIil9ZnVuY3Rpb24gaVIoZSl7bGV0IHQ9ZSBpbnN0YW5jZW9mIERhdGU/ZTpuZXcgRGF0ZShlKTtyZXR1cm5gVGFzayBncmF2ZXlhcmQgZGF0YTogJHtYeFt0LmdldE1vbnRoKCldfSAke3QuZ2V0RnVsbFllYXIoKX1gfWZ1bmN0aW9uIHNSKGUpe2xldCB0PWUgaW5zdGFuY2VvZiBEYXRlP2U6bmV3IERhdGUoZSk7cmV0dXJuYFN1Y2Nlc3NmdWxseSByZXRpcmVkIHRhc2tzOiAke1h4W3QuZ2V0TW9udGgoKV19ICR7dC5nZXRGdWxsWWVhcigpfWB9ZnVuY3Rpb24gbFIoZSl7bGV0IHQ9W10sbj0oZXx8IiIpLnNwbGl0KGAKYCkscj0wLG89MCxhPTAsaT0wO2ZvcihsZXQgcyBvZiBuKXtsZXQgbD1zLnRyaW0oKTtpZighbC5zdGFydHNXaXRoKCJ8Iikpe3IrKztjb250aW51ZX1sZXQgZD1sLnNsaWNlKDEsLTEpLnNwbGl0KCJ8IikubWFwKGY9PmYudHJpbSgpKTtpZihkLmxlbmd0aDxYSSl7YSsrO2NvbnRpbnVlfWxldCBjPWRbcUldO2lmKGM9PT0iRGF0ZSJ8fC9eLSskLy50ZXN0KGMpKXtvKys7Y29udGludWV9bGV0IHU9ZFskSV0uc3BsaXQoIiwiKS5tYXAoZj0+Zi50cmltKCkpLmZpbHRlcihCb29sZWFuKSxwPXUubWFwKGY9Pih7bm90ZU5hbWU6bnVsbCxub3RlVVVJRDpudWxsLHV1aWQ6Zn0pKTtpZihkW1FtXSl0cnl7bGV0IGY9SlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQoZFtRbV0pKTtBcnJheS5pc0FycmF5KGYpP3A9Zi5maWx0ZXIoeT0+eT8udXVpZCkubWFwKHk9Pih7bm90ZU5hbWU6eS5ub3RlTmFtZXx8bnVsbCxub3RlVVVJRDp5Lm5vdGVVVUlEfHxudWxsLHV1aWQ6eS51dWlkfSkpOmsoIltHcmF2ZXlhcmRdIHJvd3NGcm9tR3JhdmV5YXJkQ29udGVudDogdGFza0VudHJpZXMgY29sdW1uIHdhcyBub3QgYW4gYXJyYXkgYWZ0ZXIgcGFyc2UsIHZhbHVlOiIsZil9Y2F0Y2goZil7aygiW0dyYXZleWFyZF0gZmFpbGVkIHRvIHBhcnNlIGNhY2hlZCB0YXNrIG5vdGUgbWV0YWRhdGE6IixmLCJcdTIwMTQgcmF3IGNlbGwgdmFsdWU6IixkW1FtXT8uc2xpY2UoMCwxMjApKX1lbHNlIGsoYFtHcmF2ZXlhcmRdIHJvd3NGcm9tR3JhdmV5YXJkQ29udGVudDogbm8gdGFza0VudHJpZXMgY29sdW1uIGZvciBkYXRlS2V5PSR7SlNPTi5zdHJpbmdpZnkoYyl9LCBmYWxsaW5nIGJhY2sgdG8gdXVpZC1vbmx5IGVudHJpZXNgKTtjJiZ1Lmxlbmd0aD4wP3QucHVzaCh7ZGF0ZUtleTpjLHRhc2tFbnRyaWVzOnAsdXVpZHM6dX0pOmkrK31yZXR1cm4gdH1hc3luYyBmdW5jdGlvbiBkUihlLHQsbil7bGV0IHI9YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKG4ubWFwKGE9PmUuZ2V0Tm90ZVRhc2tzKHt1dWlkOmEudXVpZH0se2luY2x1ZGVEb25lOiExfSkudGhlbihpPT4oe25vdGVIYW5kbGU6YSx0YXNrczppfHxbXX0pKSkpLG89W107Zm9yKGxldCBhIG9mIHIpe2lmKGEuc3RhdHVzPT09InJlamVjdGVkIil7aygiW0dyYXZleWFyZF0gZ2V0Tm90ZVRhc2tzIGZhaWxlZDoiLGEucmVhc29uKTtjb250aW51ZX1sZXR7bm90ZUhhbmRsZTppLHRhc2tzOnN9PWEudmFsdWUsbD0wO2ZvcihsZXQgZCBvZiBzKSFkPy51dWlkfHx0LmhhcyhkLnV1aWQpfHxkLmNvbXBsZXRlZEF0fHxkLmRpc21pc3NlZEF0fHwoby5wdXNoKHsuLi5kLG5vdGVOYW1lOmQubm90ZU5hbWV8fGQubm90ZVRpdGxlfHxkLm5vdGU/Lm5hbWV8fGkubmFtZXx8bnVsbCxub3RlVVVJRDpkLm5vdGVVVUlEfHxpLnV1aWR9KSxsKyspfXJldHVybiBvfWFzeW5jIGZ1bmN0aW9uIGNSKGUsdCxuLHIpe2xldCBvPXI/e3Rhc2tEb21haW5VVUlEOnJ9Ont9O289ey4uLm8sZ3JvdXA6InRhc2tMaXN0cyJ9O2xldCBhPVtdO2ZvciBhd2FpdChsZXQgZCBvZiBhd2FpdCBlLmZpbHRlck5vdGVzKG8sIm9wZW5lZCIpKWEucHVzaChkKTtsZXQgaT1bLi4uYV0ucmV2ZXJzZSgpLnNsaWNlKDAsdFIpO2soYFtHcmF2ZXlhcmRdIHNjYW5uaW5nICR7aS5sZW5ndGh9IG5vdGVzIGZvciB0YXNrc2ApO2xldCBzPWF3YWl0IGRSKGUsbixpKSxsPVp4KHQscyk7cmV0dXJuIGsoYFtHcmF2ZXlhcmRdIHRhc2sgY291bnRzIFx1MjAxNCB0b3RhbCBzY29yZWQ6ICR7cy5sZW5ndGh9LCBzZWxlY3RlZDogJHtsLmxlbmd0aH0gKG5lZWQgJHt0fSlgKSxsfWZ1bmN0aW9uIHVSKGUpe2xldCB0PU51bWJlcihlPy5zY29yZT8/ZT8udmljdG9yeVZhbHVlPz8wKTtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpP3Q6MH1mdW5jdGlvbiBwUihlLHQpe2xldCBuPWUxKHQpLHI9bj09PW51bGw/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOk1hdGguYWJzKG4tZSkvblI7cmV0dXJuIHVSKHQpLU1hdGgubG9nKDErcil9YXN5bmMgZnVuY3Rpb24gZlIoZSx0LG4pe2lmKGsoIltHcmF2ZXlhcmRdIGh5ZHJhdGVkVGFza3NGcm9tVXVpZHM6IGNhbGxlZCB3aXRoIHV1aWRDb3VudDoiLG4/Lmxlbmd0aCwidGFza0VudHJ5Q291bnQ6Iix0Py5sZW5ndGgpLCFufHxuLmxlbmd0aD09PTApcmV0dXJuW107bGV0IHI9bmV3IE1hcCgodHx8W10pLmZpbHRlcihkPT5kPy51dWlkKS5tYXAoZD0+W2QudXVpZCxkXSkpLG89YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKG4ubWFwKGQ9PmUuZ2V0VGFzayhkKSkpLGE9MCxpPTAscz0wLGw9by5tYXAoKGQsYyk9PntsZXQgdT1uW2NdO2lmKGQuc3RhdHVzPT09InJlamVjdGVkInx8IWQudmFsdWUpcmV0dXJuIGErKyxrKCJbR3JhdmV5YXJkXSBoeWRyYXRlZFRhc2tzRnJvbVV1aWRzOiB1dWlkIG5vdCBmb3VuZDoiLHUpLG51bGw7bGV0IHA9ZC52YWx1ZTtpZihwLmNvbXBsZXRlZEF0fHxwLmRpc21pc3NlZEF0KXJldHVybiBpKyssaygiW0dyYXZleWFyZF0gaHlkcmF0ZWRUYXNrc0Zyb21VdWlkczogdXVpZCBmaWx0ZXJlZCBcdTIwMTQgY29tcGxldGVkQXQ6IixwLmNvbXBsZXRlZEF0LCJkaXNtaXNzZWRBdDoiLHAuZGlzbWlzc2VkQXQsInV1aWQ6Iix1KSxudWxsO3MrKztsZXQgZj1yLmdldCh1KTtyZXR1cm57Li4ucCxub3RlTmFtZTpwLm5vdGVOYW1lfHxwLm5vdGVUaXRsZXx8cC5ub3RlPy5uYW1lfHxmPy5ub3RlTmFtZXx8bnVsbCxub3RlVVVJRDpwLm5vdGVVVUlEfHxmPy5ub3RlVVVJRHx8bnVsbH19KS5maWx0ZXIoQm9vbGVhbik7cmV0dXJuIGsoYFtHcmF2ZXlhcmRdIGh5ZHJhdGVkVGFza3NGcm9tVXVpZHM6IHJlc3VsdHMgXHUyMDE0IGFjY2VwdGVkPSR7c30gbWlzc2luZz0ke2F9IGNvbXBsZXRlZE9yRGlzbWlzc2VkPSR7aX0gdG90YWw9JHtsLmxlbmd0aH1gKSxsfWZ1bmN0aW9uIG1SKGUsdCl7bGV0IG49ZTEodCk7cmV0dXJuIG4hPT1udWxsJiZuPD1lfWZ1bmN0aW9uIFp4KGUsdCl7aWYodC5sZW5ndGg9PT0wKXJldHVybltdO2xldCBuPW5ldyBEYXRlLHI9aFIobiksbz1uLmdldFRpbWUoKS1yUixhPXQuZmlsdGVyKHM9Pm1SKG8scykpO2lmKGEubGVuZ3RoPT09MClyZXR1cm5bXTtsZXQgaT1hLm1hcCgocyxsKT0+KHsuLi5zLGdyYXZleWFyZEhldXJpc3RpY1JhbmtJbmRleDpsLGdyYXZleWFyZEhldXJpc3RpY1Njb3JlOnBSKHIscyl9KSk7cmV0dXJuIGkuc29ydCgocyxsKT0+cy5ncmF2ZXlhcmRIZXVyaXN0aWNTY29yZSE9PWwuZ3JhdmV5YXJkSGV1cmlzdGljU2NvcmU/bC5ncmF2ZXlhcmRIZXVyaXN0aWNTY29yZT5zLmdyYXZleWFyZEhldXJpc3RpY1Njb3JlPzE6LTE6cy5ncmF2ZXlhcmRIZXVyaXN0aWNSYW5rSW5kZXgtbC5ncmF2ZXlhcmRIZXVyaXN0aWNSYW5rSW5kZXgpLGkuc2xpY2UoMCxlKS5tYXAoKHtncmF2ZXlhcmRIZXVyaXN0aWNSYW5rSW5kZXg6cywuLi5sfSk9PmwpfWZ1bmN0aW9uIGUxKGUpe2xldCB0PU51bWJlcihlPy5jcmVhdGVkQXQ/P2U/LmNyZWF0ZWQpO2lmKCFOdW1iZXIuaXNGaW5pdGUodCkpcmV0dXJuIG51bGw7bGV0IG49dDwxZTEwP3QqWm06dCxyPW5ldyBEYXRlKG4pO3JldHVybiBOdW1iZXIuaXNOYU4oci5nZXRUaW1lKCkpP251bGw6bn1mdW5jdGlvbiBoUihlKXtsZXQgdD1uZXcgRGF0ZShlKTtyZXR1cm4gdC5zZXRNb250aCh0LmdldE1vbnRoKCktZVIpLHQuZ2V0VGltZSgpfWFzeW5jIGZ1bmN0aW9uIHQxKGUsdCl7bGV0IG49c1IobmV3IERhdGUpLHI9YXdhaXQgZS5maW5kTm90ZSh7bmFtZTpuLHRhZ3M6W3ZlXX0pLmNhdGNoKCgpPT5udWxsKTtpZighcj8udXVpZCl7bGV0IHM9YXdhaXQgZS5jcmVhdGVOb3RlKG4sW3ZlXSx7YXJjaGl2ZTohMH0pO3I9e25hbWU6bix1dWlkOnN9LGF3YWl0IGUucmVwbGFjZU5vdGVDb250ZW50KHIsYCMgU3VjY2Vzc2Z1bGx5IHJldGlyZWQgdGFza3MKCmApLmNhdGNoKCgpPT57fSl9bGV0IG89dC50aXRsZXx8dC5jb250ZW50fHwiVW50aXRsZWQgdGFzayIsYT1pZShuZXcgRGF0ZSksaT1gLSBbeF0gJHtvfSA8IS0tIHsicmV0aXJlZEF0IjoiJHthfSJ9IC0tPgpgO2F3YWl0IGUuaW5zZXJ0Tm90ZUNvbnRlbnQocixpLHthdEVuZDohMH0pLmNhdGNoKHM9PmsoIltHcmF2ZXlhcmRdIGFwcGVuZFRhc2tUb1JldGlyZWROb3RlIGZhaWxlZDoiLHMpKX1hc3luYyBmdW5jdGlvbiBuMShlLHQsbixyPXt9KXtsZXQgbz0hIXI/LmZvcmNlUmVmcmVzaDtrKCJbR3JhdmV5YXJkXSBsb2FkR3JhdmV5YXJkQ2FuZGlkYXRlczogc3RhcnQgXHUyMDE0IGNvdW50OiIsdCwidGFza0RvbWFpblVVSUQ6IixuLCJmb3JjZVJlZnJlc2g6IixvKTtsZXQgYT1hd2FpdCBhUihlKTtrKCJbR3JhdmV5YXJkXSBsb2FkR3JhdmV5YXJkQ2FuZGlkYXRlczogdXNpbmcgZGF0YSBub3RlOiIsYT8udXVpZCxhPy5uYW1lKTtsZXQgaT0iIjt0cnl7aT1hd2FpdCBlLmdldE5vdGVDb250ZW50KGEpLGsoIltHcmF2ZXlhcmRdIGxvYWRHcmF2ZXlhcmRDYW5kaWRhdGVzOiBmZXRjaGVkIG5vdGUgY29udGVudCwgbGVuZ3RoOiIsaT8ubGVuZ3RoPz8ibnVsbC91bmRlZmluZWQiKSxpPWl8fCIifWNhdGNoKGYpe2soIltHcmF2ZXlhcmRdIGxvYWRHcmF2ZXlhcmRDYW5kaWRhdGVzOiBnZXROb3RlQ29udGVudCB0aHJldzoiLGYsIlx1MjAxNCB0cmVhdGluZyBhcyBlbXB0eSIpLGk9IiJ9bGV0IHM9bFIoaSk7aygiW0dyYXZleWFyZF0gbG9hZEdyYXZleWFyZENhbmRpZGF0ZXM6IHBhcnNlZCIscy5sZW5ndGgsInJvd3MgZnJvbSBub3RlOyBkYXRlS2V5czoiLHMubWFwKGY9PmYuZGF0ZUtleSkpO2xldCBsPWllKG5ldyBEYXRlKTtrKCJbR3JhdmV5YXJkXSBsb2FkR3JhdmV5YXJkQ2FuZGlkYXRlczogdG9kYXlLZXkgPSIsbCk7bGV0IGQ9cy5maW5kKGY9PmYuZGF0ZUtleT09PWwpO2lmKGsoIltHcmF2ZXlhcmRdIGxvYWRHcmF2ZXlhcmRDYW5kaWRhdGVzOiB0b2RheVJvdyBmb3VuZDoiLCEhZCxkP2B1dWlkcz0ke2QudXVpZHMubGVuZ3RofWA6IiIpLCFvJiZkPy51dWlkcy5sZW5ndGg+MCl7aygiW0dyYXZleWFyZF0gbG9hZEdyYXZleWFyZENhbmRpZGF0ZXM6IGNhY2hlIGhpdCBcdTIwMTQgaHlkcmF0aW5nIixkLnV1aWRzLmxlbmd0aCwidXVpZHM6IixkLnV1aWRzKTtsZXQgZj1hd2FpdCBmUihlLGQudGFza0VudHJpZXMsZC51dWlkcykseT1aeCh0LGYpO2lmKGsoIltHcmF2ZXlhcmRdIGxvYWRlZCBjYWNoZWQgY2FuZGlkYXRlczoiLHkubGVuZ3RoKSx5Lmxlbmd0aD4wKXJldHVybntjYW5kaWRhdGVzOnksbm90ZUhhbmRsZTphfTtrKCJbR3JhdmV5YXJkXSBsb2FkR3JhdmV5YXJkQ2FuZGlkYXRlczogY2FjaGVkIFVVSURzIGFsbCBtaXNzaW5nIGZyb20gZG9tYWluIFx1MjAxNCBkaXNjYXJkaW5nIHN0YWxlIHRvZGF5IHJvdyBhbmQgcmVkaXNjb3ZlcmluZyIpfWVsc2UgbyYmaygiW0dyYXZleWFyZF0gbG9hZEdyYXZleWFyZENhbmRpZGF0ZXM6IGZvcmNlUmVmcmVzaCByZXF1ZXN0ZWQgXHUyMDE0IGJ5cGFzc2luZyB0b2RheSBjYWNoZSByb3ciKTtsZXQgYz1vP3M6cy5maWx0ZXIoZj0+Zi5kYXRlS2V5IT09bCksdT1vUihjKSxwPWF3YWl0IGNSKGUsdCx1LG4pO2lmKHAubGVuZ3RoPjApe2xldCBmPXAubWFwKHY9Pih7bm90ZU5hbWU6di5ub3RlTmFtZXx8di5ub3RlVGl0bGV8fHYubm90ZT8ubmFtZSxub3RlVVVJRDp2Lm5vdGVVVUlELHV1aWQ6di51dWlkfSkpLHk9W3tkYXRlS2V5OmwsdGFza0VudHJpZXM6Zix1dWlkczpwLm1hcCh2PT52LnV1aWQpfSwuLi5zLmZpbHRlcih2PT52LmRhdGVLZXkhPT1sKV07YXdhaXQgZS5yZXBsYWNlTm90ZUNvbnRlbnQoYSxReCh5KSkuY2F0Y2godj0+aygiW0dyYXZleWFyZF0gZmFpbGVkIHRvIHBlcnNpc3QgY2FuZGlkYXRlczoiLHYpKX1yZXR1cm4gaygiW0dyYXZleWFyZF0gZGlzY292ZXJlZCBmcmVzaCBjYW5kaWRhdGVzOiIscC5sZW5ndGgpLHtjYW5kaWRhdGVzOnAsbm90ZUhhbmRsZTphfX12YXIgWnQ9UChmZSgpKTt2YXIgZWg9WyJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwNjkwNTkyNTM0Ni0yMWJkYTRkMzJkZjQiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3MDA3MTQ1OTYwNC0zYjVlYzNhN2ZlMDUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwMTc4NTg4ODA0MS1hZjNlZjI4NWI0NzAiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ2NDgyMjc1OTAyMy1mZWQ2MjJmZjJjM2IiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUxOTY4MTM5Mzc4NC1kMTIwMjY3OTMzYmEiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3NTkyNDE1NjczNC00OTZmNmNhYzZlYzEiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ5MDczMDE0MTEwMy02Y2FjMjdhYWFiOTQiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQzMzA4Njk2NjM1OC01NDg1OWQwZWQ3MTYiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3MjIxNDEwMzQ1MS05Mzc0YmQxYzc5OGUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQxNDYwOTI0NTIyNC1hZmEwMmJmYjNmZGEiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ2OTQ3NDk2ODAyOC01NjYyM2YwMmU0MmUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQyNjYwNDk2Njg0OC1kN2FkYWM0MDJiZmYiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ2NTE0NjM0NDQyNS1mMDBkNWY1YzhmMDciLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ5MTU1Mzg5NTkxMS0wMDU1ZWNhNjQwMmQiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3MDc3MDg0MTA3Mi1mOTc4Y2Y0ZDAxOWUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ2NDgyMzA2MzUzMC0wOGYxMGVkMWEyZGQiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQzOTg1Mzk0OTEyNy1mYTY0NzgyMWViYTAiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3MjM5Njk2MTY5My0xNDJlNmUyNjkwMjciLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQzMTc5NDA2MjIzMi0yYTk5YTU0MzFjNmMiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ0Njc3NjgxMTk1My1iMjNkNTdiZDIxYWEiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwNjc0NDAzODEzNi00NjI3MzgzNGIzZmIiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTU3MjI5MzA3MTI3Ny1lZjFiM2U3NjEwNDUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQxODA2NTQ2MDQ4Ny0zZTQxYTZjODRkYzUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3MDI0Njk3MzkxOC0yOWE5MzIyMWM0NTUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3MzExNjc2MzI0OS0yZmFhZWY4MWNjZGEiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQzOTc5MjY3NTEwNS03MDFlNmE0YWI2ZjAiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ2MzMyMDcyNjI4MS02OTZhNDg1OTI4YzciLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ5OTAwMjIzODQ0MC1kMjY0ZWRkNTk2ZWMiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUxMDc5ODgzMTk3MS02NjFlYjA0YjM3MzkiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwNzUyNTQyODAzNC1iNzIzY2Y5NjFkM2UiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ0MTk3NDIzMTUzMS1jNjIyN2RiNzZiNmUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ1ODY2ODM4Mzk3MC04ZGRkMzkyN2RlZWQiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3MDc3MDkwMzY3Ni02OWI5ODIwMWVhMWMiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ2NDAzNzg2NjU1Ni02ODEyYzlkMWM3MmUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ1NTIxODg3MzUwOS04MDk3MzA1ZWUzNzgiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ2NTkxOTI5MjI3NS1jNjBiYTQ5ZGE2YWUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ0ODM3NTI0MDU4Ni04ODI3MDdkYjg4OGIiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ1MTE4NzU4MDQ1OS00MzQ5MDI3OWMwZmEiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ2NTEwMTA0NjUzMC03MzM5OGM3ZjI4Y2EiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQyMTc4OTY2NTIwOS1jOWIyYTQzNWUzZGMiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3NzQxNDM0ODQ2My1jMGViN2YxMzU5YjYiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwMDUzMDg1NTY5Ny1iNTg2ZDg5YmEzZWUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ1NTE1NjIxODM4OC01ZTYxYjUyNjgxOGIiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ0Nzc1Mjg3NTIxNS1iMjc2MWFjYjNjNWQiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ0Mzg5MDkyMzQyMi03ODE5ZWQ0MTAxYzAiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ5NDc4MzM2NzE5My0xNDkwMzRjMDVlOGYiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTYwODk1MzAyOTYwMS03YTZlNWU3ZmQ1NDgiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwMjA4MjU1MzA0OC1mMDA5YzM3MTI5YjkiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUxOTkwNDk4MTA2My1iMGNmNDQ4ZDQ3OWUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3NjIzMTY4MjgyOC0zN2U1NzFiYzE3MmYiXSxyMT1bImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNTAwNTM0MzE0MjA5LWEyNWRkYjJiZDQyOSIsImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNTAxODU0MTQwODAxLTUwZDAxNjk4OTUwYiIsImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNTU5ODI3MjYwLWRjNjZkNTJiZWYxOSIsImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNTMwOTA4Mjk1NDE4LWExMmUzMjY5NjZiYSIsImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNTkyMjkwNDM1MzM4LTY4MmM0MDBjYjZmOCIsImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNTIwOTYyODgwMjQ3LWNmYWY1NDFjODcyNCIsImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNDQ0MjEwOTcxMDQ4LTYxMzBjZjBjNDZjZiIsImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNTI4MzYwOTgzMjc3LTEzZDQwMWNkYzE4NiIsImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNjA3MTM2MTA0MDgwLTc4YmJmZTJkMTIzNCIsImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNDQwMzQyMzU5NzQzLTg0ZmNiOGMyMWYyMSJdLEljPXtzbWFsbDp7d2lkdGg6NjAwLGhlaWdodDo2MDB9LGxhcmdlOnt3aWR0aDoxOTIwLGhlaWdodDoxMDgwfX0sZmk9ZWgubGVuZ3RoO2Z1bmN0aW9uIG8xKGUpe2xldCB0PVN0cmluZyhlPz8iZGVmYXVsdC1zZWVkIiksbj0wO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cis9MSluPShuPDw1KS1uK3QuY2hhckNvZGVBdChyKSxufD0wO3JldHVybiBNYXRoLmFicyhuKX1mdW5jdGlvbiBhMShlPSJzbWFsbCIsdD0iZ3JhdmV5YXJkIil7bGV0IG49SWNbZV18fEljLnNtYWxsO3JldHVybmAke3IxW28xKHQpJXIxLmxlbmd0aF19P3c9JHtuLndpZHRofSZoPSR7bi5oZWlnaHR9JmZpdD1jcm9wJmF1dG89Zm9ybWF0YH1mdW5jdGlvbiBSYyhlPSJzbWFsbCIsdD0iZGVmYXVsdCIsbj0wKXtyZXR1cm4gdGgoZSxvMShgJHt0fToke259YCkpfWZ1bmN0aW9uIHRoKGU9InNtYWxsIix0PTApe2xldCBuPUljW2VdfHxJYy5zbWFsbCxyPWVoLmxlbmd0aCxvPShNYXRoLnRydW5jKE51bWJlcih0KXx8MCklcityKSVyLGE9YD93PSR7bi53aWR0aH0maD0ke24uaGVpZ2h0fSZmaXQ9Y3JvcCZhdXRvPWZvcm1hdGA7cmV0dXJuYCR7ZWhbb119JHthfWB9dmFyIEZlPVAoJCgpKSxnUj01LHlSPTUwMCxKcz0iZ3JhdmV5YXJkIjtmdW5jdGlvbiB2Uih7aGVhZGVyQWN0aW9uczplfSl7cmV0dXJuKDAsRmUuanN4KShhZSx7aGVhZGVyQWN0aW9uczplLHdpZGdldElkOkpzLGNoaWxkcmVuOigwLEZlLmpzeCkoInAiLHtjbGFzc05hbWU6ImdyYXZleWFyZC1lbXB0eSIsY2hpbGRyZW46Ik5vIG5lZ2xlY3RlZCB0YXNrcyBmb3VuZCBcdTIwMTQgZXZlcnl0aGluZyBsb29rcyBjdXJyZW50ISJ9KX0pfWZ1bmN0aW9uIGJSKHtlcnJvck1lc3NhZ2U6ZSxoZWFkZXJBY3Rpb25zOnQsb25SZXRyeTpufSl7cmV0dXJuKDAsRmUuanN4KShhZSx7aGVhZGVyQWN0aW9uczp0LHdpZGdldElkOkpzLGNoaWxkcmVuOigwLEZlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImdyYXZleWFyZC1lcnJvciIsY2hpbGRyZW46WygwLEZlLmpzeCkoInAiLHtjaGlsZHJlbjplfHwiRmFpbGVkIHRvIGxvYWQgdGFza3MuIn0pLCgwLEZlLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToiZ3JhdmV5YXJkLXJldHJ5IixvbkNsaWNrOm4sdHlwZToiYnV0dG9uIixjaGlsZHJlbjoiUmV0cnkifSldfSl9KX1mdW5jdGlvbiB3Uih7aGVhZGVyQWN0aW9uczplfSl7cmV0dXJuKDAsRmUuanN4KShhZSx7aGVhZGVyQWN0aW9uczplLHdpZGdldElkOkpzLGNoaWxkcmVuOigwLEZlLmpzeCkoInAiLHtjbGFzc05hbWU6ImdyYXZleWFyZC1sb2FkaW5nIixjaGlsZHJlbjoiU2VhcmNoaW5nIGZvciBmb3Jnb3R0ZW4gdGFza3NcdTIwMjYifSl9KX1mdW5jdGlvbiBrUih7aXNSZWZyZXNoaW5nOmUsb25SZWZyZXNoOnR9KXtyZXR1cm4oMCxGZS5qc3gpKCJhIix7ImFyaWEtZGlzYWJsZWQiOmU/InRydWUiOiJmYWxzZSIsY2xhc3NOYW1lOiJ3aWRnZXQtaGVhZGVyLWFjdGlvbiIsaHJlZjoiIyIsb25DbGljazp0LHRhYkluZGV4OmU/LTE6MCx0aXRsZTplPyJSZWZyZXNoaW5nIGdyYXZleWFyZCBjYW5kaWRhdGVzIjoiRmluZCBhIG5ldyBzZXQgb2YgZ3JhdmV5YXJkIGNhbmRpZGF0ZXMiLGNoaWxkcmVuOmU/Ilx1MjFCQiBSZWZyZXNoaW5nXHUyMDI2IjoiXHUyMUJCIFJlZnJlc2gifSl9ZnVuY3Rpb24gaTEoZSl7aWYoIWU/LmNyZWF0ZWRBdClyZXR1cm4gbnVsbDtsZXQgdD1OdW1iZXIoZS5jcmVhdGVkQXQpO2lmKCFOdW1iZXIuaXNGaW5pdGUodCkpcmV0dXJuIG51bGw7bGV0IG49dDwxZTEwP3QqMWUzOnQscj1uZXcgRGF0ZShuKTtyZXR1cm4gTnVtYmVyLmlzTmFOKHIuZ2V0VGltZSgpKT9udWxsOnJ9ZnVuY3Rpb24geFIoZSx0KXtsZXQgbj1pMShlKTtpZighbilyZXR1cm4gbnVsbDtsZXQgcj1uLnRvTG9jYWxlRGF0ZVN0cmluZyh2b2lkIDAse21vbnRoOiJzaG9ydCIseWVhcjoibnVtZXJpYyJ9KTtyZXR1cm4gdD9yOmBDcmVhdGVkICR7cn1gfWZ1bmN0aW9uIHMxKGUpe2xldCB0PU51bWJlcihlPy5zY29yZT8/ZT8udmljdG9yeVZhbHVlPz8wKTtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpP3Q6MH1mdW5jdGlvbiBTUihlKXtsZXQgdD1zMShlKTtyZXR1cm4gdDw9Mz8ibXV0ZWQiOnQ8PTU/ImNvb2wiOnQ8MTA/Indhcm0iOiJob3QifWZ1bmN0aW9uIG5oKGUpe3JldHVybmAke2U/PyIifWAucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7Iil9ZnVuY3Rpb24gRVIoZSx0KXtpZighTnVtYmVyLmlzRmluaXRlKHQpfHx0PD0wKXJldHVybiAwO2xldCBuPW5ldyBEYXRlLG89YCR7YCR7bi5nZXRGdWxsWWVhcigpfToke24uZ2V0TW9udGgoKX06JHtuLmdldERhdGUoKX06JHtuLmdldEhvdXJzKCl9YH06JHtlPz8iIn1gLGE9MDtmb3IobGV0IGk9MDtpPG8ubGVuZ3RoO2krPTEpYT1hKjMxK28uY2hhckNvZGVBdChpKT4+PjA7cmV0dXJuIGEldH1mdW5jdGlvbiBOUihlKXtsZXQgdD1pMShlKSxuPXMxKGUpLHI9TnVtYmVyLmlzSW50ZWdlcihuKT9gJHtufWA6bi50b0ZpeGVkKDIpLnJlcGxhY2UoL1wuPzArJC8sIiIpLG89ZT8ubm90ZU5hbWV8fGU/Lm5vdGVUaXRsZXx8ZT8ubm90ZT8ubmFtZXx8IlVua25vd24gbm90ZSIsYT1TUihlKSxpPXQ/dC50b0xvY2FsZURhdGVTdHJpbmcodm9pZCAwLHtkYXRlU3R5bGU6Im1lZGl1bSJ9KToiVW5rbm93biI7cmV0dXJuYAogICAgPGRpdiBjbGFzcz0iZ3JhdmV5YXJkLXRhc2stdG9vbHRpcCIgcm9sZT0idG9vbHRpcCI+CiAgICAgIDxkaXYgY2xhc3M9ImdyYXZleWFyZC10YXNrLXRvb2x0aXAtbWV0YSI+CiAgICAgICAgPHNwYW4gY2xhc3M9ImdyYXZleWFyZC10YXNrLXRvb2x0aXAtbm90ZSI+JHtuaChvKX08L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9ImdyYXZleWFyZC10YXNrLXRvb2x0aXAtY3JlYXRlZCI+Q3JlYXRlZCAke25oKGkpfTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImdyYXZleWFyZC10YXNrLXRvb2x0aXAtY29udGVudCI+CiAgICAgICAgJHtycihlLmNvbnRlbnR8fGUudGl0bGV8fCJVbnRpdGxlZCB0YXNrIil9CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJncmF2ZXlhcmQtdGFzay10b29sdGlwLWZvb3RlciI+CiAgICAgICAgPHNwYW4gY2xhc3M9ImdyYXZleWFyZC10YXNrLXNjb3JlIGdyYXZleWFyZC10YXNrLXNjb3JlLS0ke2F9Ij4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJncmF2ZXlhcmQtdGFzay1zY29yZS1kb3QiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L3NwYW4+CiAgICAgICAgICA8c3Bhbj5TY29yZSAke25oKHIpfTwvc3Bhbj4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYH1mdW5jdGlvbiBUUihlKXtsZXQgdD1lLmN1cnJlbnRUYXJnZXQ/LmNsb3Nlc3Q/LigiLmdyYXZleWFyZC10YXNrLWl0ZW0iKTtpZighdHx8dHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuO2xldCBuPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IW4ud2lkdGh8fCFuLmhlaWdodHx8d2Moe29yaWdpbjp7eDoobi5sZWZ0K24ud2lkdGgvMikvd2luZG93LmlubmVyV2lkdGgseToobi50b3Arbi5oZWlnaHQvMikvd2luZG93LmlubmVySGVpZ2h0fSxwYXJ0aWNsZUNvdW50OjgwLHNwcmVhZDo3MCxzdGFydFZlbG9jaXR5OjM4fSl9ZnVuY3Rpb24gRFIoe2lzRGlzbWlzc2luZzplLGlzU2luZ2xlQ29sdW1uOnQsdGFza0luZGV4Om4sb25PcGVuTm90ZTpyLG9uR3JhdmV5YXJkOm8sb25LZWVwOmEsdGFzazppfSl7bGV0IHM9aS50aXRsZXx8aS5jb250ZW50fHwiVW50aXRsZWQgdGFzayIsbD14UihpLHQpLGQ9YGdyYXZleWFyZC10YXNrLWl0ZW0ke2U/IiBncmF2ZXlhcmQtdGFzay1pdGVtLS1kaXNtaXNzaW5nIjoiIn1gLGM9WyJEaXNtaXNzIiwiU2VuZCB0byBhIGZhcm0gdXBzdGF0ZSIsIlJldGlyZSIsIkxldCBnbyIsIkV4aWxlIiwiQnVyeSIsIlNlbmQgb2ZmIiwiUmVsZWFzZSBpbnRvIHRoZSB3aWxkIiwiUHV0IG91dCB0byBwYXN0dXJlIiwiTGF5IHRvIHJlc3QiLCJEZWNvbW1pc3Npb24iLCJSZWxlYXNlIHRvIHRoZSBncmVhdCBiZXlvbmQiLCJTZW5kIHRvIHRoZSBldGVybmFsIHJlc3QiLCJBIHNvbGVtbiBmYXJld2VsbCIsIlBheSBhIGZpbmFsIHRyaWJ1dGUiLCJTZW5kIHRvIHRoZSBoZXJlYWZ0ZXIiXSx1PWNbRVIobixjLmxlbmd0aCldO3JldHVybigwLEZlLmpzeHMpKCJsaSIse2NsYXNzTmFtZTpkLGNoaWxkcmVuOlsoMCxGZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJncmF2ZXlhcmQtdGFzay1oZWFkZXIiLGNoaWxkcmVuOlsoMCxGZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImdyYXZleWFyZC10YXNrLXRpdGxlLXdyYXAiLGNoaWxkcmVuOigwLEZlLmpzeCkoTHMse2NvbnRlbnQ6TlIoaSksZGVsYXk6W3lSLDBdLGludGVyYWN0aXZlOiEwLG1heFdpZHRoOnQ/MjgwOjM0MCxvblNob3duOnA9Pl9uKHA/LnBvcHBlcikscGxhY2VtZW50OiJib3R0b20tc3RhcnQiLGNoaWxkcmVuOigwLEZlLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImdyYXZleWFyZC10YXNrLXRpdGxlIixpZDpgZ3JhdmV5YXJkLXRpdGxlLSR7aS51dWlkfWAsdGFiSW5kZXg6MCxjaGlsZHJlbjpzfSl9KX0pLGw/KDAsRmUuanN4KSgic3BhbiIse2NsYXNzTmFtZToiZ3JhdmV5YXJkLXRhc2stYWdlIixjaGlsZHJlbjpsfSk6bnVsbF19KSwoMCxGZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJncmF2ZXlhcmQtdGFzay1hY3Rpb25zIixjaGlsZHJlbjpbKDAsRmUuanN4KSgiYSIse2NsYXNzTmFtZToiZ3JhdmV5YXJkLXRhc2stYWN0aW9uIGdyYXZleWFyZC10YXNrLWFjdGlvbi0tc2VuZCIsaHJlZjoiIyIsb25DbGljazpwPT57cC5wcmV2ZW50RGVmYXVsdCgpLG8ocCxpKX0sdGl0bGU6IkRpc21pc3MgdGhpcyB0YXNrIFx1MjAxNCByZW1vdmVzIGl0IGZyb20geW91ciB0YXNrIGRvbWFpbiBhbmQgcGxhY2VzIGl0IGluIGFuIGFyY2hpdmVkIG5vdGUgeW91IGNhbiByZXZpc2l0IGxhdGVyIGlmIGRlc2lyZWQiLGNoaWxkcmVuOmBcdXsxRjVEMX1cdUZFMEYgJHt1fWB9KSwoMCxGZS5qc3gpKCJhIix7Y2xhc3NOYW1lOiJncmF2ZXlhcmQtdGFzay1hY3Rpb24gZ3JhdmV5YXJkLXRhc2stYWN0aW9uLS1rZWVwIixocmVmOiIjIixvbkNsaWNrOnA9PntwLnByZXZlbnREZWZhdWx0KCksYShpKX0sdGl0bGU6IlByZXNlcnZlIHRoaXMgdGFzayBcdTIwMTQgcmVtb3ZlIGl0IGZyb20gdGhpcyBsaXN0IHdpdGhvdXQgZGlzbWlzc2luZyBpdCIsY2hpbGRyZW46Ilx1ezFGOUYyfSBLZWVwIn0pLCgwLEZlLmpzeCkoImEiLHtjbGFzc05hbWU6ImdyYXZleWFyZC10YXNrLWFjdGlvbiBncmF2ZXlhcmQtdGFzay1hY3Rpb24tLW5vdGUiLGhyZWY6IiMiLG9uQ2xpY2s6cD0+e3AucHJldmVudERlZmF1bHQoKSxyKGkpfSx0aXRsZToiT3BlbiB0aGUgbm90ZSB3aGVyZSB0aGlzIHRhc2sgbGl2ZXMiLGNoaWxkcmVuOiJcdXsxRjREM30gTm90ZSJ9KV19KV19KX1mdW5jdGlvbiBBUih7ZGlzbWlzc2luZ1V1aWRzOmUsaGVhZGVyQWN0aW9uczp0LGlzU2luZ2xlQ29sdW1uOm4sbWVhZG93T3BhY2l0eTpyLG1lYWRvd1VybDpvLG9uT3Blbk5vdGU6YSxvbkdyYXZleWFyZDppLG9uS2VlcDpzLHRhc2tzOmx9KXtyZXR1cm4oMCxGZS5qc3gpKGFlLHtoZWFkZXJBY3Rpb25zOnQsd2lkZ2V0SWQ6SnMsY2hpbGRyZW46KDAsRmUuanN4cykoImRpdiIse2NsYXNzTmFtZToiZ3JhdmV5YXJkLW1lYWRvdy13cmFwcGVyIixjaGlsZHJlbjpbKDAsRmUuanN4KSgiaW1nIix7YWx0OiIiLGNsYXNzTmFtZToiZ3JhdmV5YXJkLW1lYWRvdy1iZyIsc3JjOm8sc3R5bGU6e29wYWNpdHk6cn19KSwoMCxGZS5qc3gpKCJ1bCIse2NsYXNzTmFtZToiZ3JhdmV5YXJkLXRhc2stbGlzdCIsY2hpbGRyZW46bC5tYXAoKGQsYyk9PigwLEZlLmpzeCkoRFIse2lzRGlzbWlzc2luZzplLmhhcyhkLnV1aWQpLGlzU2luZ2xlQ29sdW1uOm4sdGFza0luZGV4OmMsb25PcGVuTm90ZTphLG9uR3JhdmV5YXJkOmksb25LZWVwOnMsdGFzazpkfSxkLnV1aWQpKX0pXX0pfSl9ZnVuY3Rpb24gcmgoe2FwcDplLGdyaWRIZWlnaHRTaXplOnQ9MSxncmlkV2lkdGhTaXplOm49Mix0YXNrRG9tYWluVVVJRDpyfSl7bGV0IG89KHR8fDEpKmdSLGE9TnVtYmVyKG4pPT09MSxbaSxzXT0oMCxadC51c2VTdGF0ZSkoKCk9Pm5ldyBTZXQpLFtsLGRdPSgwLFp0LnVzZVN0YXRlKShudWxsKSxbYyx1XT0oMCxadC51c2VTdGF0ZSkoITApLFtwLGZdPSgwLFp0LnVzZVN0YXRlKShudWxsKSx5PSgwLFp0LnVzZU1lbW8pKCgpPT5hMSgic21hbGwiLG5ldyBEYXRlKCkudG9EYXRlU3RyaW5nKCkpLFtdKSx2PWkuc2l6ZT4wPzE6MCx3PSgwLFp0LnVzZUNhbGxiYWNrKShhc3luYyh4PXt9KT0+e2xldCBFPSEheD8uZm9yY2VSZWZyZXNoO2soIltHcmF2ZXlhcmRdIGxvYWRDYW5kaWRhdGVzIGZpcmVkLCB0YXNrRG9tYWluVVVJRDoiLHIsImZvcmNlUmVmcmVzaDoiLEUpLGQobnVsbCksRSYmcyhuZXcgU2V0KSx1KCEwKTt0cnl7bGV0e2NhbmRpZGF0ZXM6VH09YXdhaXQgbjEoZSxvLHIse2ZvcmNlUmVmcmVzaDpFfSksQT1ULmZpbHRlcihDPT4hQy5pc1BhcmVudCkuc2xpY2UoMCxvKTtmKEEpfWNhdGNoKFQpe2soIltHcmF2ZXlhcmRdIGxvYWQgZmFpbGVkOiIsVCksZChULm1lc3NhZ2V8fCJGYWlsZWQgdG8gbG9hZCB0YXNrcyIpfWZpbmFsbHl7dSghMSl9fSxbZSxvLHJdKTsoMCxadC51c2VFZmZlY3QpKCgpPT57dygpfSxbd10pO2xldCBnPSgwLFp0LnVzZUNhbGxiYWNrKSh4PT57eC5wcmV2ZW50RGVmYXVsdCgpLCFjJiZ3KHtmb3JjZVJlZnJlc2g6ITB9KX0sW3csY10pLGg9KDAsWnQudXNlQ2FsbGJhY2spKGFzeW5jKHgsRSk9PntUUih4KSxzKFQ9PntsZXQgQT1uZXcgU2V0KFQpO3JldHVybiBBLmFkZChFLnV1aWQpLEF9KSxlLnVwZGF0ZVRhc2soRS51dWlkLHtkaXNtaXNzZWRBdDpNYXRoLmZsb29yKERhdGUubm93KCkvMWUzKX0pLmNhdGNoKFQ9PmsoIltHcmF2ZXlhcmRdIHVwZGF0ZVRhc2sgZmFpbGVkOiIsVCkpLHQxKGUsRSkuY2F0Y2goVD0+aygiW0dyYXZleWFyZF0gYXBwZW5kVGFza1RvUmV0aXJlZE5vdGUgZmFpbGVkOiIsVCkpLGV0KCJkaXNtaXNzR3JhdmV5YXJkVGFzayIpfSxbZV0pLGI9KDAsWnQudXNlQ2FsbGJhY2spKHg9PntzKEU9PntsZXQgVD1uZXcgU2V0KEUpO3JldHVybiBULmFkZCh4LnV1aWQpLFR9KX0sW10pLG09KDAsWnQudXNlQ2FsbGJhY2spKGFzeW5jIHg9Pnt4Py5ub3RlVVVJRCYmYXdhaXQgZS5uYXZpZ2F0ZShgaHR0cHM6Ly93d3cuYW1wbGVub3RlLmNvbS9ub3Rlcy8ke3gubm90ZVVVSUR9YCl9LFtlXSksUz0oMCxGZS5qc3gpKGtSLHtpc1JlZnJlc2hpbmc6YyxvblJlZnJlc2g6Z30pO3JldHVybiBsdChKcywhYyYmIWwsISFsKSxjPygwLEZlLmpzeCkod1Ise2hlYWRlckFjdGlvbnM6U30pOmw/KDAsRmUuanN4KShiUix7ZXJyb3JNZXNzYWdlOmwsaGVhZGVyQWN0aW9uczpTLG9uUmV0cnk6d30pOnA9PT1udWxsfHxwLmxlbmd0aD09PTAmJmkuc2l6ZT09PTA/KDAsRmUuanN4KSh2Uix7aGVhZGVyQWN0aW9uczpTfSk6KDAsRmUuanN4KShBUix7ZGlzbWlzc2luZ1V1aWRzOmksaGVhZGVyQWN0aW9uczpTLGlzU2luZ2xlQ29sdW1uOmEsbWVhZG93T3BhY2l0eTp2LG1lYWRvd1VybDp5LG9uT3Blbk5vdGU6bSxvbkdyYXZleWFyZDpoLG9uS2VlcDpiLHRhc2tzOnB9KX12YXIgSG49UChmZSgpKTt2YXIgb2g9NzAwLGwxPSJkYXNoYm9hcmQtYmFja2dyb3VuZC1mYWRlLWluIixDUj00ZTM7ZnVuY3Rpb24gTVIoZSl7aWYoZmk8PTEpcmV0dXJuIDA7bGV0IHQ9ZT49MD9lOk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpmaSksbj0xK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSooZmktMSkpO3JldHVybih0K24pJWZpfWZ1bmN0aW9uIE9SKGUpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57bGV0IG49bmV3IEltYWdlLHI9c2V0VGltZW91dCh0LENSKSxvPSgpPT57Y2xlYXJUaW1lb3V0KHIpLHQoKX07bi5vbmxvYWQ9byxuLm9uZXJyb3I9byxuLnNyYz1lfSl9ZnVuY3Rpb24gYWgoKXtsZXRbZSx0XT0oMCxIbi51c2VTdGF0ZSkobnVsbCksW24scl09KDAsSG4udXNlU3RhdGUpKG51bGwpLG89KDAsSG4udXNlUmVmKSgtMSksYT0oMCxIbi51c2VSZWYpKCEwKSxpPSgwLEhuLnVzZVJlZikoITEpOygwLEhuLnVzZUVmZmVjdCkoKCk9PigpPT57YS5jdXJyZW50PSExfSxbXSk7bGV0IHM9KDAsSG4udXNlQ2FsbGJhY2spKGFzeW5jKCk9PntpZihpLmN1cnJlbnQpcmV0dXJuO2kuY3VycmVudD0hMDtsZXQgbD1NUihvLmN1cnJlbnQpLGQ9dGgoImxhcmdlIixsKTtrKGBbYmFja2dyb3VuZC1zd2FwXSBmYWRpbmcgdG8gc3BsYXNoIGltYWdlICR7bH0gb2YgJHtmaX1gKSxhd2FpdCBPUihkKSxhLmN1cnJlbnQmJihvLmN1cnJlbnQ9bCx0KGQpKX0sW10pO3JldHVybigwLEhuLnVzZUVmZmVjdCkoKCk9PntpZighZSlyZXR1cm47bGV0IGw9c2V0VGltZW91dCgoKT0+e3IoZSksdChudWxsKSxpLmN1cnJlbnQ9ITF9LG9oKTtyZXR1cm4oKT0+Y2xlYXJUaW1lb3V0KGwpfSxbZV0pLHtpbmNvbWluZ0JhY2tncm91bmRVcmw6ZSxzd2FwQmFja2dyb3VuZDpzLHN3YXBwZWRCYWNrZ3JvdW5kVXJsOm59fXZhciBjcj1QKGZlKCkpO2Z1bmN0aW9uIElSKGUpe2xldCB0PXt9O2ZvcihsZXR7ZGF0ZUtleTpuLHRhc2tzOnJ9b2YgZSl0W25dPXI7cmV0dXJuIHR9ZnVuY3Rpb24gaWgoZSl7bGV0W3Qsbl09KDAsY3IudXNlU3RhdGUpKHt9KSxbcixvXT0oMCxjci51c2VTdGF0ZSkoITEpLGE9KDAsY3IudXNlUmVmKSghMSksaT0oMCxjci51c2VSZWYpKG51bGwpLHM9KDAsY3IudXNlUmVmKShuZXcgU2V0KSxsPSgwLGNyLnVzZVJlZikobnVsbCksZD0oMCxjci51c2VSZWYpKHt9KSxjPSgwLGNyLnVzZUNhbGxiYWNrKShhc3luYyh1LHApPT57bC5jdXJyZW50IT09cCYmKGwuY3VycmVudD1wLHMuY3VycmVudD1uZXcgU2V0LGQuY3VycmVudD17fSxvKCExKSk7bGV0e2JvdW5kYXJpZXM6Zix3ZWVrU3RhcnRLZXk6eX09UzAodSksdj1gJHt5fTo6JHtwfHwiIn1gO2lmKHMuY3VycmVudC5oYXModikpcmV0dXJuIG8oITApLGQuY3VycmVudDthLmN1cnJlbnQ9ITAsaS5jdXJyZW50PW51bGw7dHJ5e2xldCB3PWF3YWl0IFByb21pc2UuYWxsKGYubWFwKGFzeW5jKHtmcm9tOmIsdG86bSxkYXRlS2V5OlN9KT0+e2xldCB4PWF3YWl0IGUuZ2V0Q29tcGxldGVkVGFza3MoYixtKTtyZXR1cm57ZGF0ZUtleTpTLHRhc2tzOnh8fFtdfX0pKSxnPUlSKHcpLGg9ey4uLmQuY3VycmVudCwuLi5nfTtyZXR1cm4gbihoKSxkLmN1cnJlbnQ9aCxzLmN1cnJlbnQuYWRkKHYpLG8oITApLGh9Y2F0Y2godyl7cmV0dXJuIGsoInVzZUNvbXBsZXRlZFRhc2tzOiBmYWlsZWQgdG8gZmV0Y2ggY29tcGxldGVkIHRhc2tzIix3KSxpLmN1cnJlbnQ9dyxvKCEwKSxkLmN1cnJlbnR9ZmluYWxseXthLmN1cnJlbnQ9ITF9fSxbXSk7cmV0dXJue2NvbXBsZXRlZFRhc2tzQnlEYXRlOnQsY29tcGxldGVkVGFza3NMb2FkZWQ6cixnZXQgbG9hZGluZygpe3JldHVybiBhLmN1cnJlbnR9LGdldCBlcnJvcigpe3JldHVybiBpLmN1cnJlbnR9LGZldGNoQ29tcGxldGVkVGFza3M6Y319dmFyIGQxPVAoZmUoKSk7ZnVuY3Rpb24gc2goe2NvbmZpZ1BhcmFtczplfSl7cmV0dXJue2FjdGl2ZUNvbXBvbmVudHM6KDAsZDEudXNlTWVtbykoKCk9PntpZighZSlyZXR1cm5bXTtsZXQgbj1lW0IuREFTSEJPQVJEX0NPTVBPTkVOVFNdO3JldHVybiBBcnJheS5pc0FycmF5KG4pJiZuLmxlbmd0aD4wP246SHJ9LFtlXSl9fXZhciBFcj1QKGZlKCkpO2Z1bmN0aW9uIFBjKGUpe3JldHVybiBlLnN0YXJ0QXR8fGUuZGVhZGxpbmV9ZnVuY3Rpb24gbGgoZSx0LG49KCk9PiEwKXtsZXQgcj17fSxvPTAsYT1uZXcgRGF0ZTtyZXR1cm4gZS5mb3JFYWNoKGk9PntpZihvKz0xLCFuKGkpKXJldHVybjtsZXQgcz10KGkpO2lmKCFzKXJldHVybjtsZXQgbD16bihzKTtyW2xdfHwocltsXT1bXSkscltsXS5wdXNoKGkpfSksayhgQW5hbHl6ZWQgJHtvfSB0YXNrcywgZ3JvdXBlZCBpbnRvICR7T2JqZWN0LmtleXMocikubGVuZ3RofSBkYXRlIGtleXMgaW4gJHtuZXcgRGF0ZS1hfW1zYCkscn1mdW5jdGlvbiBjMShlKXtyZXR1cm4gbGgoZSxQYyx0PT4hdC5jb21wbGV0ZWRBdCYmIXQuZGlzbWlzc2VkQXQpfWZ1bmN0aW9uIHUxKGUpe3JldHVybiBsaChlLHQ9PnQuY29tcGxldGVkQXQsdD0+ISF0LmNvbXBsZXRlZEF0KX1mdW5jdGlvbiBSUihlLHQpe2xldCBuPWUuZmlsdGVyKG89Pm8+dCkscj1lLmZpbHRlcihvPT5vPHQpO3JldHVybnt1cGNvbWluZ0RhdGVLZXlzOm4sb2xkZXJEYXRlS2V5czpyfX1mdW5jdGlvbiBQUihlLHQpe2xldCBuPXt9O3JldHVybiB0LmZvckVhY2gocj0+e25bcl09ZVtyXXx8W119KSxufWZ1bmN0aW9uIGRoKCl7bGV0W2UsdF09KDAsRXIudXNlU3RhdGUpKFtdKSxbbixyXT0oMCxFci51c2VTdGF0ZSkobnVsbCksW28sYV09KDAsRXIudXNlU3RhdGUpKG51bGwpLFtpLHNdPSgwLEVyLnVzZVN0YXRlKSh7fSksW2wsZF09KDAsRXIudXNlU3RhdGUpKHt9KSxjPW5ldyBEYXRlLHU9KDAsRXIudXNlQ2FsbGJhY2spKHk9PntpZigheSlyZXR1cm47dCh5LnRhc2tEb21haW5zfHxbXSkscih5LmFjdGl2ZVRhc2tEb21haW58fG51bGwpO2xldCB2PXkudGFza3N8fFtdO3MoYzEodikpLGQodTEodikpLGEoRGF0ZS5ub3coKSl9LFtdKSxwPSgwLEVyLnVzZUNhbGxiYWNrKSgoeSx2LHcpPT57aWYoeSYmdCh5KSx2JiZyKHYpLHcpe2xldCBnPXcudGFza3N8fFtdO3MoYzEoZykpLGQodTEoZykpLGEoRGF0ZS5ub3coKSl9fSxbXSksZj0oMCxFci51c2VDYWxsYmFjaykoeT0+e2xldCB2PXk/bmV3IERhdGUoeSk6bmV3IERhdGUsdz16bih2KSxnPU9iamVjdC52YWx1ZXMoaSkuZmxhdCgpLGg9Zy5maWx0ZXIoRT0+ISEoRS5zdGFydEF0fHxFLmRlYWRsaW5lKSkuc29ydCgoRSxUKT0+UGMoRSktUGMoVCkpO2soYEFnZW5kYSB3aWxsIHJldmlld2VkICR7Zy5sZW5ndGh9IG9wZW4gdGFza3NgLGcubWFwKEU9Pih7ZGVhZGxpbmVUZXh0OkUuZGVhZGxpbmU/em4oRS5kZWFkbGluZSk6Ik4vQSIsc3RhcnRUZXh0OkUuc3RhcnRBdD96bihFLnN0YXJ0QXQpOiJOb25lIn0pKSksayhgJHtoLmxlbmd0aH0gcmVsZXZhbnQgcGVuZGluZyB0YXNrcyBmb3VuZCAod2l0aCBzdGFydEF0KWApO2xldCBiPWxoKGgsUGMpLG09T2JqZWN0LmtleXMoYikuc29ydCgpLHt1cGNvbWluZ0RhdGVLZXlzOlN9PVJSKG0sdykseD1bdywuLi5TXTtyZXR1cm4gUFIoYix4KX0sW2ldKTtyZXR1cm4gayhgdXNlRG9tYWluVGFza3MgaW5pdGlhbGl6ZWQgd2l0aCBhY3RpdmUgZG9tYWluICR7bn0gaW4gJHtuZXcgRGF0ZS1jfW1zYCkse3Rhc2tEb21haW5zOmUsYWN0aXZlVGFza0RvbWFpbjpuLHRhc2tzRmV0Y2hlZEF0Om8sb3BlblRhc2tzOmksY29tcGxldGVkVGFza3M6bCxpbml0aWFsaXplRG9tYWluVGFza3M6dSxvbkRvbWFpbkNoYW5nZTpwLGJ1aWxkQWdlbmRhVGFza3NCeURhdGU6Zn19dmFyIGYxPVAoZmUoKSk7dmFyIGZuPVAoJCgpKSxwMT0ibGF5b3V0LXBpY2tlciI7YXN5bmMgZnVuY3Rpb24gY2goe2FwcDplLGlzUmVzZXQ6dCxvbkxheW91dFBlcnNpc3Q6bixvblNlbGVjdGVkUHJvZmlsZUNoYW5nZTpyLHByb2ZpbGVJZDpvLHNpemluZzphLHdpZGdldElkczppfSl7YXdhaXQgbihpLHQsYSksbyE9bnVsbD8oZS5zZXRTZXR0aW5nKEIuU0VMRUNURURfTEFZT1VUX1BST0ZJTEUsbykscihvKSk6bz09PW51bGwmJihlLnNldFNldHRpbmcoQi5TRUxFQ1RFRF9MQVlPVVRfUFJPRklMRSwiIikscihudWxsKSl9ZnVuY3Rpb24gTFIoe3Byb2ZpbGU6ZSxvbkFwcGx5OnQsYXBwbHlpbmdJZDpuLGlzTWF0Y2g6cn0pe2xldCBvPW49PT1lLmlkLGE9ISFuLGk9bz8iQXBwbHlpbmdcdTIwMjYiOnI/IkFwcGx5IjoiQXBwbHkgXHUyMDE0IHJlcGxhY2VzIGFsbCB3aWRnZXRzIFx1MjE5MiIscz1gbGF5b3V0LXBpY2tlci1wcm9maWxlLWJ1dHRvbiR7bz8iIGxheW91dC1waWNrZXItcHJvZmlsZS1idXR0b24tLWFwcGx5aW5nIjoiIn0ke3I/IiBsYXlvdXQtcGlja2VyLXByb2ZpbGUtYnV0dG9uLS1jdXJyZW50IjoiIn1gLGw9YGxheW91dC1waWNrZXItcHJvZmlsZS1hY3Rpb24ke3I/IiBsYXlvdXQtcGlja2VyLXByb2ZpbGUtYWN0aW9uLS1jdXJyZW50IjoiIn1gO3JldHVybigwLGZuLmpzeCkoImRpdiIse2NsYXNzTmFtZToibGF5b3V0LXBpY2tlci1wcm9maWxlIixjaGlsZHJlbjooMCxmbi5qc3hzKSgiYnV0dG9uIix7Y2xhc3NOYW1lOnMsZGlzYWJsZWQ6YSxvbkNsaWNrOigpPT50KGUpLHR5cGU6ImJ1dHRvbiIsY2hpbGRyZW46WygwLGZuLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImxheW91dC1waWNrZXItcHJvZmlsZS1oZWFkZXIiLGNoaWxkcmVuOlsoMCxmbi5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJsYXlvdXQtcGlja2VyLXByb2ZpbGUtaWNvbiIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46ZS5pY29ufSksKDAsZm4uanN4KSgic3BhbiIse2NsYXNzTmFtZToibGF5b3V0LXBpY2tlci1wcm9maWxlLW5hbWUiLGNoaWxkcmVuOmUubmFtZX0pLCgwLGZuLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6bCxjaGlsZHJlbjppfSldfSksKDAsZm4uanN4KSgicCIse2NsYXNzTmFtZToibGF5b3V0LXBpY2tlci1wcm9maWxlLWRlc2NyaXB0aW9uIixjaGlsZHJlbjplLmRlc2NyaXB0aW9ufSldfSl9KX1mdW5jdGlvbiB1aCh7YXBwOmUsY3VycmVudExheW91dDp0LG9uTGF5b3V0QXBwbHk6bixvblNlbGVjdGVkUHJvZmlsZUNoYW5nZTpyfSl7bGV0W28sYV09KDAsZjEudXNlU3RhdGUpKG51bGwpLGk9WWEubWFwKHU9PkNiKHQsdSkpLHM9aS5zb21lKEJvb2xlYW4pLGw9YXN5bmMgdT0+e2lmKCFvKXthKHUuaWQpO3RyeXtsZXQgcD11LndpZGdldHMubWFwKHk9Pnkud2lkZ2V0SWQpLGY9ZnModSk7YXdhaXQgY2goe2FwcDplLGlzUmVzZXQ6ITAsb25MYXlvdXRQZXJzaXN0Om4sb25TZWxlY3RlZFByb2ZpbGVDaGFuZ2U6cixwcm9maWxlSWQ6dS5pZCxzaXppbmc6Zix3aWRnZXRJZHM6cH0pfWZpbmFsbHl7YShudWxsKX19fTtyZXR1cm4oMCxmbi5qc3hzKShhZSx7aGVhZGVyQWN0aW9uczooMCxmbi5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJ3aWRnZXQtaGVhZGVyLWFjdGlvbiIsb25DbGljazooKT0+e2xldCBwPShBcnJheS5pc0FycmF5KHQpP3Q6W10pLmZpbHRlcihmPT5mLndpZGdldElkIT09cDEpLm1hcChmPT5mLndpZGdldElkKTtuKHAsITEsbnVsbCl9LGNoaWxkcmVuOiJcdTI3MTUgRGlzbWlzcyJ9KSx3aWRnZXRJZDpwMSxjaGlsZHJlbjpbcz9udWxsOigwLGZuLmpzeCkoInAiLHtjbGFzc05hbWU6ImxheW91dC1waWNrZXItd2FybmluZyIsY2hpbGRyZW46Ilx1MjZBMFx1RkUwRiBDbGlja2luZyBhIHByb2ZpbGUgcmVvcmRlcnMgYWxsIGRhc2hib2FyZCB3aWRnZXRzLiJ9KSwoMCxmbi5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImxheW91dC1waWNrZXItcHJvZmlsZXMiLGNoaWxkcmVuOllhLm1hcCgodSxwKT0+KDAsZm4uanN4KShMUix7cHJvZmlsZTp1LG9uQXBwbHk6bCxhcHBseWluZ0lkOm8saXNNYXRjaDppW3BdfSx1LmlkKSl9KV19KX12YXIgbWk9UChmZSgpKTt2YXIgTGM9UCgkKCkpLF9SPSI0MDBweCAwcHgiO2Z1bmN0aW9uIFVSKCl7cmV0dXJuIHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlcjwidSJ9ZnVuY3Rpb24gRlIoe3BsYWNlaG9sZGVyUmVmOmUsd2lkZ2V0SWQ6dH0pe3JldHVybiBiMCh0KSwoMCxMYy5qc3gpKCJkaXYiLHtyZWY6ZSxjbGFzc05hbWU6Imxhenktd2lkZ2V0LXBsYWNlaG9sZGVyIiwiZGF0YS13aWRnZXQtaWQiOnQsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46KDAsTGMuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJsYXp5LXdpZGdldC1wbGFjZWhvbGRlci1zcGlubmVyIn0pfSl9ZnVuY3Rpb24gcGgoe2NoaWxkcmVuOmUsd2lkZ2V0SWQ6dH0pe2xldFtuLHJdPSgwLG1pLnVzZVN0YXRlKSgoKT0+IVVSKCkpLG89KDAsbWkudXNlUmVmKShudWxsKTtyZXR1cm4oMCxtaS51c2VFZmZlY3QpKCgpPT57aWYobilyZXR1cm47bGV0IGE9by5jdXJyZW50O2lmKCFhKXJldHVybjtsZXQgaT1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIocz0+e3Muc29tZShsPT5sLmlzSW50ZXJzZWN0aW5nKSYmKHIoITApLGkuZGlzY29ubmVjdCgpKX0se3Jvb3RNYXJnaW46X1J9KTtyZXR1cm4gaS5vYnNlcnZlKGEpLCgpPT5pLmRpc2Nvbm5lY3QoKX0sW25dKSxuP2U6KDAsTGMuanN4KShGUix7cGxhY2Vob2xkZXJSZWY6byx3aWRnZXRJZDp0fSl9dmFyIGN0PVAoZmUoKSk7dmFyIFJlPVAoJCgpKSx6Uj01ZTMsYjE9NyxXUj0zLEtlPTIyMCx3MT0xNCxrMT0yLEJSPTQsSFI9NzgsS1I9NDAsbTE9NCxHUj00OCxWUj05NSxqUj0xNixZUj0uMDQscVI9MTIsWFI9MTIsaDE9LjUsJFI9MS44LEpSPS00LFFSPTUsZzE9LjcsWlI9My4zLGUyPTE4LHQyPTIyLG4yPS01LHIyPTExLG8yPTEzLGEyPTI2LGkyPTEwLHMyPTMwLGwyPTQ0LGQyPTUsX2M9MS8zLGMyPTEuMyx1Mj1bWzAsIiMyN0FFNjA1MCJdLFsuNSwiI0YyQzk0QzIwIl0sWzEsIiNFODQ1M0MwOCJdXSxwMj0yLGYyPTMuNSxtMj0xLjIsaDI9OCx5MT0uMyxnMj0yLHkyPTEsdjI9MTYsYjI9MjgsdjE9LjcsdzI9MyxrMj0tMTEseDI9MTQsUzI9NTYsRTI9NDYsTjI9MTYsVDI9OCxEMj0zMyxBMj0xMixDMj0uMjUsTTI9Ljc1LE8yPTI1LEkyPTEyMDAsUjI9MWUzLHgxPTMsVWM9W3t2YWx1ZTotMixlbW9qaToiXHV7MUY2MzV9XHUyMDBEXHV7MUY0QUJ9IixsYWJlbDoiQXdmdWwifSx7dmFsdWU6LTEsZW1vamk6Ilx1ezFGQUU0fSIsbGFiZWw6IkJhZCJ9LHt2YWx1ZTowLGVtb2ppOiJcdXsxRjY0Mn0iLGxhYmVsOiJPa2F5In0se3ZhbHVlOjEsZW1vamk6Ilx1ezFGNjAwfSIsbGFiZWw6Ikdvb2QifSx7dmFsdWU6MixlbW9qaToiXHV7MUY5Mjl9IixsYWJlbDoiR3JlYXQifV0sUDI9eyItMiI6IiNFODQ1M0MiLCItMSI6IiNGMjk5NEEiLDA6IiNGMkM5NEMiLDE6IiM2RkNGOTciLDI6IiMyN0FFNjAifSxMMj1PYmplY3QuZnJvbUVudHJpZXMoVWMubWFwKGU9PltlLnZhbHVlLGUuZW1vamldKSk7ZnVuY3Rpb24gaGkoZSl7cmV0dXJuIFAyW01hdGgucm91bmQoZSldfHwiI2NjYyJ9ZnVuY3Rpb24gUzEoZSl7cmV0dXJuIEwyW01hdGgucm91bmQoZSldfHwiXHUyNzUzIn1mdW5jdGlvbiBfMihlKXtsZXQgdD1VYy5maW5kKG49Pm4udmFsdWU9PT1lKTtyZXR1cm4gdD90LmxhYmVsOiIifWZ1bmN0aW9uIEUxKGUpe2lmKCFlKXJldHVybiIiO2xldHtmdWxsRGF0ZTp0LGVudHJpZXM6bn09ZSxyPVtgPGRpdiBjbGFzcz0ibW9vZC12aXotdG9vbHRpcC1kYXRlIj4ke3R9PC9kaXY+YF07Zm9yKGxldCBvIG9mIG4pe2xldCBhPVVjLmZpbmQobD0+bC52YWx1ZT09PW8ucmF0aW5nKT8uZW1vaml8fCJcdTI3NTMiLGk9XzIoby5yYXRpbmcpLHM9YDxkaXYgY2xhc3M9Im1vb2Qtdml6LXRvb2x0aXAtZW50cnkiPjxzcGFuIGNsYXNzPSJtb29kLXZpei10b29sdGlwLXRpbWUiPiR7by50aW1lfTwvc3Bhbj48c3BhbiBjbGFzcz0ibW9vZC12aXotdG9vbHRpcC1tb29kIj4ke2F9IDxzcGFuIGNsYXNzPSJtb29kLXZpei1sYWJlbCI+JHtpfSAoJHtvLnJhdGluZz4wP2ArJHtvLnJhdGluZ31gOm8ucmF0aW5nfSk8L3NwYW4+PC9zcGFuPmA7by5ub3RlcyYmKHMrPWA8ZGl2IGNsYXNzPSJtb29kLXZpei10b29sdGlwLW5vdGUiPiR7by5ub3Rlc308L2Rpdj5gKSxzKz0iPC9kaXY+IixyLnB1c2gocyl9cmV0dXJuIHIuam9pbigiIil9ZnVuY3Rpb24gVTIoZSx0LG4scil7dHx8bnx8cihlKX1mdW5jdGlvbiBGMihlLHQsbixyLG8sYSxpKXt0LmtleT09PSJFbnRlciImJih0LmN0cmxLZXl8fHQubWV0YUtleSkmJih0LnByZXZlbnREZWZhdWx0KCksTjEoZSxuLHIsbyxhLGkpKX1hc3luYyBmdW5jdGlvbiBOMShlLHQsbixyLG8sYSl7cighMCksaygiUmVjb3JkaW5nIG1vb2QgcmF0aW5nIHdpdGggdmFsdWU6Iix0LnZhbHVlKTtsZXQgaT1hd2FpdCBlLnJlY29yZE1vb2RSYXRpbmcodC52YWx1ZSk7ZXQoInN1Ym1pdE1vb2RSYXRpbmciLHtyYXRpbmc6dC52YWx1ZX0pO2xldCBzPW4udHJpbSgpO2soYE1vb2QgcmF0aW5nIHV1aWQgJHtpfSByZWNlaXZlZCwgdHJpbW1lZCBub3RlcyBzaXplICR7cy5sZW5ndGh9IGNoYXJhY3RlcnNgKSxzJiYoYXdhaXQgZS51cGRhdGVNb29kUmF0aW5nKGkse25vdGU6c30pLGsoYE1vb2QgcmF0aW5nIHV1aWQgJHtpfSB1cGRhdGVkIHdpdGggbm90ZXNgKSksbyghMCksYT8oaygiUmV0cmlldmVkIG1vb2QgcmF0aW5nIFVVSUQ6IixpLCJjYWxsaW5nIG9uTW9vZFJlY29yZGVkIiksYSh7cmF0aW5nOnQudmFsdWUsdGltZXN0YW1wOk1hdGguZmxvb3IoRGF0ZS5ub3coKS8xZTMpLG5vdGU6c3x8bnVsbH0pLGsoIm9uTW9vZFJlY29yZGVkIGNhbGxiYWNrIGNvbXBsZXRlIikpOmsoIm9uTW9vZFJlY29yZGVkIGNhbGxiYWNrIG5vdCBwcm92aWRlZCwgc2tpcHBpbmciKSxyKCExKX1mdW5jdGlvbiB6MihlKXtsZXQgdD0oZXx8W10pLnNsaWNlKC1iMSk7aWYoIXQubGVuZ3RoKXJldHVybntyZWNlbnRNb29kczp0LGF2ZXJhZ2VNb29kOiJcdTIwMTQifTtsZXQgbj0odC5yZWR1Y2UoKHIsbyk9PnIrby5yYXRpbmcsMCkvdC5sZW5ndGgpLnRvRml4ZWQoMSk7cmV0dXJue3JlY2VudE1vb2RzOnQsYXZlcmFnZU1vb2Q6bn19ZnVuY3Rpb24gVDEoKXtsZXQgZT1nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCksdD1uPT5lLmdldFByb3BlcnR5VmFsdWUobikudHJpbSgpO3JldHVybntiZ0NhcmQ6dCgiLS1kYXNoYm9hcmQtY29sb3ItYmctY2FyZCIpLGJnUGFnZTp0KCItLWRhc2hib2FyZC1jb2xvci1iZy1wYWdlIiksYm9yZGVyOnQoIi0tZGFzaGJvYXJkLWNvbG9yLWJvcmRlciIpLHRleHRTZWNvbmRhcnk6dCgiLS1kYXNoYm9hcmQtY29sb3ItdGV4dC1zZWNvbmRhcnkiKSx0ZXh0TXV0ZWQ6dCgiLS1kYXNoYm9hcmQtY29sb3ItdGV4dC1tdXRlZCIpfX1mdW5jdGlvbiBmaChlLHQpe3JldHVybiBlLnN0YXJ0c1dpdGgoIiMiKSYmZS5sZW5ndGg9PT03P2UrdDplfWZ1bmN0aW9uIFcyKHttb29kRGF0YTplfSl7bGV0IHQ9KDAsY3QudXNlUmVmKShudWxsKSxuPSgwLGN0LnVzZVJlZikobnVsbCksW3Isb109KDAsY3QudXNlU3RhdGUpKDApLGE9X3MoKSxpPUpTT04uc3RyaW5naWZ5KGUpO3JldHVybigwLGN0LnVzZUVmZmVjdCkoKCk9PntvKDApO2xldCBkLGM9bnVsbCx1PUkyLHA9Zj0+e2N8fChjPWYpO2xldCB5PU1hdGgubWluKChmLWMpL3UsMSksdj0xLU1hdGgucG93KDEteSx4MSk7byh2KSx5PDEmJihkPXJlcXVlc3RBbmltYXRpb25GcmFtZShwKSl9O3JldHVybiBkPXJlcXVlc3RBbmltYXRpb25GcmFtZShwKSwoKT0+Y2FuY2VsQW5pbWF0aW9uRnJhbWUoZCl9LFtpXSksKDAsY3QudXNlRWZmZWN0KSgoKT0+e2xldCBkPXQuY3VycmVudDtpZighZClyZXR1cm47bGV0IGM9ZC5nZXRDb250ZXh0KCIyZCIpLHU9d2luZG93LmRldmljZVBpeGVsUmF0aW98fGsxO2Qud2lkdGg9S2UqdSxkLmhlaWdodD1LZSp1LGMuc2NhbGUodSx1KSxjLmNsZWFyUmVjdCgwLDAsS2UsS2UpO2xldCBwPVQxKCksZj1LZS8yLHk9S2UvMitCUix2PUhSLHc9S1I7Yy5maWxsU3R5bGU9cC5iZ0NhcmQsYy5iZWdpblBhdGgoKSxjLnJvdW5kUmVjdCgwLDAsS2UsS2UsdzEpLGMuZmlsbCgpLGMuc3Ryb2tlU3R5bGU9ZmgocC5ib3JkZXIsIjI4IiksYy5saW5lV2lkdGg9MTtmb3IobGV0IFM9R1I7Uzw9VlI7Uys9alIpYy5iZWdpblBhdGgoKSxjLmFyYyhmLHksUywwLE1hdGguUEkqMiksYy5zdHJva2UoKTtsZXQgZz1lLm1hcChTPT4oe2xhYmVsOlMuZGF5TGFiZWwsZGF0ZUxhYmVsOlMuZGF0ZUxhYmVsLHZhbDpTLnJhdGluZ30pKSxoPU1hdGgubWF4KGcubGVuZ3RoLDEpLGI9TWF0aC5QSSoyL2gsbT1nLmxlbmd0aD4xP1lSOjA7aWYobi5jdXJyZW50PXtjZW50ZXJYOmYsY2VudGVyWTp5LGlubmVyUmFkaXVzOncsb3V0ZXJSYWRpdXM6dixzZWdtZW50Q291bnQ6Zy5sZW5ndGgsc2VnbWVudEFuZ2xlOmIsZ2FwQW5nbGU6bX0sZy5mb3JFYWNoKCh7bGFiZWw6UyxkYXRlTGFiZWw6eCx2YWw6RX0sVCk9PntsZXQgQT0tTWF0aC5QSS8yK1QqYittLEM9QSsoYi1tKjIpKnIsTD1oaShFKTtjLnNoYWRvd0NvbG9yPUwsYy5zaGFkb3dCbHVyPXFSKnIsYy5iZWdpblBhdGgoKSxjLmFyYyhmLHksdixBLEMpLGMuYXJjKGYseSx3LEMsQSwhMCksYy5jbG9zZVBhdGgoKTtsZXQgTz1jLmNyZWF0ZVJhZGlhbEdyYWRpZW50KGYseSx3LGYseSx2KTtpZihPLmFkZENvbG9yU3RvcCgwLEwrIjk5IiksTy5hZGRDb2xvclN0b3AoMSxMKyJmZiIpLGMuZmlsbFN0eWxlPU8sYy5maWxsKCksYy5zaGFkb3dCbHVyPTAscj5oMSl7bGV0IFI9QSsoYi1tKjIpLzIsRj12K1hSLFY9ZitNYXRoLmNvcyhSKSpGLHo9eStNYXRoLnNpbihSKSpGO2MuZmlsbFN0eWxlPXAudGV4dFNlY29uZGFyeSxjLmdsb2JhbEFscGhhPShyLWgxKSokUixjLmZvbnQ9ImJvbGQgOHB4IC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWYiLGMudGV4dEFsaWduPSJjZW50ZXIiLGMudGV4dEJhc2VsaW5lPSJtaWRkbGUiLGMuZmlsbFRleHQoUyxWLHorSlIpLGMuZm9udD0iN3B4IC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWYiLGMuZmlsbFN0eWxlPXAudGV4dE11dGVkLGMuZmlsbFRleHQoeCxWLHorUVIpLGMuZ2xvYmFsQWxwaGE9MX1pZihyPmcxKXtsZXQgUj1BKyhiLW0qMikvMixGPSh2K3cpLzIsVj1mK01hdGguY29zKFIpKkYsej15K01hdGguc2luKFIpKkY7Yy5mb250PSIxM3B4IHNlcmlmIixjLnRleHRBbGlnbj0iY2VudGVyIixjLnRleHRCYXNlbGluZT0ibWlkZGxlIixjLmdsb2JhbEFscGhhPU1hdGgubWluKChyLWcxKSpaUiwxKSxjLmZpbGxUZXh0KFMxKEUpLFYseiksYy5nbG9iYWxBbHBoYT0xfX0pLGMuYmVnaW5QYXRoKCksYy5hcmMoZix5LHctbTEsMCxNYXRoLlBJKjIpLGMuZmlsbFN0eWxlPXAuYmdQYWdlLGMuZmlsbCgpLGcubGVuZ3RoPjApe2xldCBTPShnLnJlZHVjZSgoeCxFKT0+eCtFLnZhbCwwKS9nLmxlbmd0aCkudG9GaXhlZCgxKTtjLmZpbGxTdHlsZT1oaShNYXRoLnJvdW5kKE51bWJlcihTKSkpLGMuZm9udD1gYm9sZCAke3QyfXB4IC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWZgLGMudGV4dEFsaWduPSJjZW50ZXIiLGMudGV4dEJhc2VsaW5lPSJtaWRkbGUiLGMuZ2xvYmFsQWxwaGE9cixjLmZpbGxUZXh0KFMsZix5K24yKSxjLmZpbGxTdHlsZT1wLnRleHRNdXRlZCxjLmZvbnQ9ImJvbGQgN3B4IC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWYiLGMuZmlsbFRleHQoIjctREFZIEFWRyIsZix5K3IyKSxjLmdsb2JhbEFscGhhPTF9Yy5maWxsU3R5bGU9cC50ZXh0TXV0ZWQsYy5mb250PSJib2xkIDhweCAtYXBwbGUtc3lzdGVtLCBzYW5zLXNlcmlmIixjLnRleHRBbGlnbj0iY2VudGVyIixjLnRleHRCYXNlbGluZT0iYWxwaGFiZXRpYyIsYy5maWxsVGV4dCgiVyBFIEUgSyAgIFIgSSBOIEciLGYsbzIpfSxbaSxyXSksKDAsUmUuanN4KSgiZGl2Iix7c3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsbGluZUhlaWdodDowfSxjaGlsZHJlbjooMCxSZS5qc3gpKCJjYW52YXMiLHtyZWY6dCxjbGFzc05hbWU6Im1vb2Qtdml6LWNhbnZhcyIsb25Nb3VzZU1vdmU6ZD0+e2xldCBjPW4uY3VycmVudCx1PXQuY3VycmVudDtpZighY3x8IWMuc2VnbWVudENvdW50fHwhdSl7YS5oaWRlKCk7cmV0dXJufWxldCBwPXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZj0oZC5jbGllbnRYLXAubGVmdCkqKEtlL3Aud2lkdGgpLHk9KGQuY2xpZW50WS1wLnRvcCkqKEtlL3AuaGVpZ2h0KSx2PWYtYy5jZW50ZXJYLHc9eS1jLmNlbnRlclksZz1NYXRoLnNxcnQodip2K3cqdyk7aWYoZzxjLmlubmVyUmFkaXVzLW0xfHxnPmMub3V0ZXJSYWRpdXMrZTIpe2EuaGlkZSgpO3JldHVybn1sZXQgaD1NYXRoLmF0YW4yKHcsdikrTWF0aC5QSS8yO2g8MCYmKGgrPU1hdGguUEkqMik7bGV0IGI9TWF0aC5mbG9vcihoL2Muc2VnbWVudEFuZ2xlKTtpZihiPj0wJiZiPGMuc2VnbWVudENvdW50KXtsZXQgbT1lW2JdLFM9cC5sZWZ0K2YvS2UqcC53aWR0aCx4PXAudG9wK3kvS2UqcC5oZWlnaHQ7YS5zaG93KEUxKHtmdWxsRGF0ZTptLmZ1bGxEYXRlLGVudHJpZXM6bS5lbnRyaWVzfHxbbV19KSxTLHgpfWVsc2UgYS5oaWRlKCl9LG9uTW91c2VMZWF2ZTooKT0+YS5oaWRlKCl9KX0pfWZ1bmN0aW9uIEIyKHttb29kRGF0YTplfSl7bGV0IHQ9KDAsY3QudXNlUmVmKShudWxsKSxuPSgwLGN0LnVzZVJlZikoW10pLFtyLG9dPSgwLGN0LnVzZVN0YXRlKSgwKSxhPV9zKCksaT1KU09OLnN0cmluZ2lmeShlKTtyZXR1cm4oMCxjdC51c2VFZmZlY3QpKCgpPT57bygwKTtsZXQgZCxjPW51bGwsdT1SMixwPWY9PntjfHwoYz1mKTtsZXQgeT1NYXRoLm1pbigoZi1jKS91LDEpO28oMS1NYXRoLnBvdygxLXkseDEpKSx5PDEmJihkPXJlcXVlc3RBbmltYXRpb25GcmFtZShwKSl9O3JldHVybiBkPXJlcXVlc3RBbmltYXRpb25GcmFtZShwKSwoKT0+Y2FuY2VsQW5pbWF0aW9uRnJhbWUoZCl9LFtpXSksKDAsY3QudXNlRWZmZWN0KSgoKT0+e2xldCBkPXQuY3VycmVudDtpZighZClyZXR1cm47bGV0IGM9ZC5nZXRDb250ZXh0KCIyZCIpLHU9d2luZG93LmRldmljZVBpeGVsUmF0aW98fGsxO2Qud2lkdGg9S2UqdSxkLmhlaWdodD1LZSp1LGMuc2NhbGUodSx1KSxjLmNsZWFyUmVjdCgwLDAsS2UsS2UpO2xldCBwPVQxKCk7Yy5iZWdpblBhdGgoKSxjLnJvdW5kUmVjdCgwLDAsS2UsS2UsdzEpLGMuZmlsbFN0eWxlPXAuYmdDYXJkLGMuZmlsbCgpO2xldCBmPWEyLHk9aTIsdj1zMix3PWwyLGc9S2UtZi15LGg9S2Utdi13LGI9ditoO2ZvcihsZXQgQT0tMjtBPD0yO0ErKyl7bGV0IEM9ditoLShBKzIpLzQqaDtjLnN0cm9rZVN0eWxlPWZoKHAuYm9yZGVyLCI1MCIpLGMubGluZVdpZHRoPTEsYy5iZWdpblBhdGgoKSxjLm1vdmVUbyhmLEMpLGMubGluZVRvKEtlLXksQyksYy5zdHJva2UoKSxjLmZpbGxTdHlsZT1wLnRleHRNdXRlZCxjLmZvbnQ9ImJvbGQgOHB4IC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWYiLGMudGV4dEFsaWduPSJyaWdodCIsYy50ZXh0QmFzZWxpbmU9Im1pZGRsZSIsYy5maWxsVGV4dChBPjA/YCske0F9YDpBLGYtZDIsQyl9bGV0IG09ZS5tYXAoQT0+KHtsYWJlbDpBLmRheUxhYmVsLGRhdGVMYWJlbDpBLmRhdGVMYWJlbCx2YWw6QS5yYXRpbmd9KSksUz0oQSxDKT0+Qz09PTE/ZitnLzI6Qz09PTI/ZitnKihBPT09MD9DMjpNMik6ZitBLyhDLTEpKmcseD1tLm1hcCgoQSxDKT0+KHt4OlMoQyxtLmxlbmd0aCkseTp2K2gtKEEudmFsKzIpLzQqaCx2YWw6QS52YWwsbGFiZWw6QS5sYWJlbCxkYXRlTGFiZWw6QS5kYXRlTGFiZWx9KSk7bi5jdXJyZW50PXg7bGV0IEU9eC5tYXAoQT0+KHsuLi5BLHk6ditoLShBLnZhbCsyKS80KmgqTWF0aC5taW4ocipjMiwxKX0pKSxUPShBLEMpPT57Yy5iZWdpblBhdGgoKSxjLm1vdmVUbyhBWzBdLngsQVswXS55KTtmb3IobGV0IEw9MDtMPEEubGVuZ3RoLTE7TCsrKXtsZXQgTz1BW0wrMV0ueC1BW0xdLngsUj1BW0xdLngrTypfYyxGPUFbTCsxXS54LU8qX2M7Yy5iZXppZXJDdXJ2ZVRvKFIsQVtMXS55LEYsQVtMKzFdLnksQVtMKzFdLngsQVtMKzFdLnkpfUMmJihjLmxpbmVUbyhBW0EubGVuZ3RoLTFdLngsYiksYy5saW5lVG8oQVswXS54LGIpLGMuY2xvc2VQYXRoKCkpfTtpZihFLmxlbmd0aD49Mil7bGV0IEE9Yy5jcmVhdGVMaW5lYXJHcmFkaWVudCgwLHYsMCxiKTtmb3IobGV0W0MsTF1vZiB1MilBLmFkZENvbG9yU3RvcChDLEwpO1QoRSwhMCksYy5maWxsU3R5bGU9QSxjLmZpbGwoKSxjLmxpbmVXaWR0aD1wMixjLmxpbmVDYXA9InJvdW5kIjtmb3IobGV0IEM9MDtDPEUubGVuZ3RoLTE7QysrKXtsZXQgTD1FW0NdLE89RVtDKzFdLFI9Yy5jcmVhdGVMaW5lYXJHcmFkaWVudChMLngsTC55LE8ueCxPLnkpO1IuYWRkQ29sb3JTdG9wKDAsaGkoTC52YWwpKSxSLmFkZENvbG9yU3RvcCgxLGhpKE8udmFsKSksYy5zdHJva2VTdHlsZT1SLGMuYmVnaW5QYXRoKCk7bGV0IEY9Ty54LUwueCxWPUwueCtGKl9jLHo9Ty54LUYqX2M7Yy5tb3ZlVG8oTC54LEwueSksYy5iZXppZXJDdXJ2ZVRvKFYsTC55LHosTy55LE8ueCxPLnkpLGMuc3Ryb2tlKCl9fWlmKHI+eTEmJkUuZm9yRWFjaChBPT57bGV0IEM9TWF0aC5taW4oKHIteTEpKmcyLDEpLEw9aGkoQS52YWwpO2Muc2hhZG93Q29sb3I9TCxjLnNoYWRvd0JsdXI9aDIsYy5iZWdpblBhdGgoKSxjLmFyYyhBLngsQS55LGYyLDAsTWF0aC5QSSoyKSxjLmZpbGxTdHlsZT1MLGMuZ2xvYmFsQWxwaGE9QyxjLmZpbGwoKSxjLnNoYWRvd0JsdXI9MCxjLmJlZ2luUGF0aCgpLGMuYXJjKEEueCxBLnksbTIsMCxNYXRoLlBJKjIpLGMuZmlsbFN0eWxlPXAuYmdDYXJkLGMuZmlsbCgpLGMuZ2xvYmFsQWxwaGE9MSxjLmZpbGxTdHlsZT1wLnRleHRTZWNvbmRhcnksYy5nbG9iYWxBbHBoYT1DKnkyLGMuZm9udD0iYm9sZCAxMHB4IC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWYiLGMudGV4dEFsaWduPSJjZW50ZXIiLGMudGV4dEJhc2VsaW5lPSJhbHBoYWJldGljIixjLmZpbGxUZXh0KEEubGFiZWwsQS54LGIrdjIpLGMuZm9udD0iOXB4IC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWYiLGMuZmlsbFRleHQoQS5kYXRlTGFiZWwsQS54LGIrYjIpLGMuZ2xvYmFsQWxwaGE9MSxyPnYxJiYoYy5nbG9iYWxBbHBoYT1NYXRoLm1pbigoci12MSkqdzIsMSksYy5mb250PSIxMXB4IHNlcmlmIixjLmZpbGxUZXh0KFMxKEEudmFsKSxBLngsQS55K2syKSxjLmdsb2JhbEFscGhhPTEpfSksYy5maWxsU3R5bGU9cC50ZXh0TXV0ZWQsYy5mb250PSJib2xkIDhweCAtYXBwbGUtc3lzdGVtLCBzYW5zLXNlcmlmIixjLnRleHRBbGlnbj0iY2VudGVyIixjLnRleHRCYXNlbGluZT0iYWxwaGFiZXRpYyIsYy5maWxsVGV4dCgiTSBPIE8gRCAgIFcgQSBWIEUiLEtlLzIseDIpLG0ubGVuZ3RoPjApe2xldCBBPShtLnJlZHVjZSgoTCxPKT0+TCtPLnZhbCwwKS9tLmxlbmd0aCkudG9GaXhlZCgxKSxDPWhpKE1hdGgucm91bmQoTnVtYmVyKEEpKSk7Yy5maWxsU3R5bGU9ZmgoQywiMjIiKSxjLmJlZ2luUGF0aCgpLGMucm91bmRSZWN0KEtlLVMyLDQsRTIsTjIsVDIpLGMuZmlsbCgpLGMuZmlsbFN0eWxlPUMsYy5mb250PSJib2xkIDhweCAtYXBwbGUtc3lzdGVtLCBzYW5zLXNlcmlmIixjLnRleHRBbGlnbj0iY2VudGVyIixjLnRleHRCYXNlbGluZT0ibWlkZGxlIixjLmZpbGxUZXh0KGBBdmcgJHtBfWAsS2UtRDIsQTIpfX0sW2kscl0pLCgwLFJlLmpzeCkoImRpdiIse3N0eWxlOntwb3NpdGlvbjoicmVsYXRpdmUiLGxpbmVIZWlnaHQ6MH0sY2hpbGRyZW46KDAsUmUuanN4KSgiY2FudmFzIix7cmVmOnQsY2xhc3NOYW1lOiJtb29kLXZpei1jYW52YXMiLG9uTW91c2VNb3ZlOmQ9PntsZXQgYz10LmN1cnJlbnQ7aWYoIWMpcmV0dXJuO2xldCB1PWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscD0oZC5jbGllbnRYLXUubGVmdCkqKEtlL3Uud2lkdGgpLGY9KGQuY2xpZW50WS11LnRvcCkqKEtlL3UuaGVpZ2h0KSx5PW4uY3VycmVudDtpZigheXx8IXkubGVuZ3RoKXthLmhpZGUoKTtyZXR1cm59bGV0IHY9LTEsdz1PMjtmb3IobGV0IGc9MDtnPHkubGVuZ3RoO2crKyl7bGV0IGg9cC15W2ddLngsYj1mLXlbZ10ueSxtPU1hdGguc3FydChoKmgrYipiKTttPHcmJih3PW0sdj1nKX1pZih2Pj0wKXtsZXQgZz15W3ZdLGg9ZVt2XSxiPXUubGVmdCtnLngvS2UqdS53aWR0aCxtPXUudG9wK2cueS9LZSp1LmhlaWdodDthLnNob3coRTEoe2Z1bGxEYXRlOmguZnVsbERhdGUsZW50cmllczpoLmVudHJpZXN8fFtoXX0pLGIsbSl9ZWxzZSBhLmhpZGUoKX0sb25Nb3VzZUxlYXZlOigpPT5hLmhpZGUoKX0pfSl9ZnVuY3Rpb24gSDIoZSl7bGV0IHQ9WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxuPVsuLi5lfHxbXV0uc29ydCgoYSxpKT0+KGEudGltZXN0YW1wfHwwKS0oaS50aW1lc3RhbXB8fDApKTtpZihuLmxlbmd0aCljb25zb2xlLmxvZygiRm91bmQgZXhpc3RpbmcgcmF0aW5ncyIpO2Vsc2UgcmV0dXJuIGNvbnNvbGUubG9nKCJObyByYXRpbmdzIGZvdW5kLCByZXR1cm5pbmcgW10iKSxbXTtsZXQgcj1uZXcgTWFwO2ZvcihsZXQgYSBvZiBuKXtsZXQgaT1hLnRpbWVzdGFtcD9uZXcgRGF0ZShhLnRpbWVzdGFtcCoxZTMpOm5ldyBEYXRlLHM9YCR7aS5nZXRGdWxsWWVhcigpfS0ke2kuZ2V0TW9udGgoKSsxfS0ke2kuZ2V0RGF0ZSgpfWA7ci5oYXMocyl8fHIuc2V0KHMse2RheUxhYmVsOnRbaS5nZXREYXkoKV0sZGF0ZUxhYmVsOmAke2kuZ2V0TW9udGgoKSsxfS8ke2kuZ2V0RGF0ZSgpfWAsZGF0ZUtleTpzLGZ1bGxEYXRlOmkudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1VUyIse3dlZWtkYXk6ImxvbmciLHllYXI6Im51bWVyaWMiLG1vbnRoOiJsb25nIixkYXk6Im51bWVyaWMifSksZW50cmllczpbXSxyYXRpbmdTdW06MCxyYXRpbmdDb3VudDowfSk7bGV0IGw9ci5nZXQocyk7bC5lbnRyaWVzLnB1c2goe3JhdGluZzphLnJhdGluZyx0aW1lOihhLnRpbWVzdGFtcD9uZXcgRGF0ZShhLnRpbWVzdGFtcCoxZTMpOm5ldyBEYXRlKS50b0xvY2FsZVRpbWVTdHJpbmcoImVuLVVTIix7aG91cjoibnVtZXJpYyIsbWludXRlOiIyLWRpZ2l0In0pLG5vdGVzOmEubm90ZXN8fGEubm90ZXx8bnVsbCx0aW1lc3RhbXA6YS50aW1lc3RhbXB9KSxsLnJhdGluZ1N1bSs9YS5yYXRpbmcsbC5yYXRpbmdDb3VudCs9MX1yZXR1cm5bLi4uci52YWx1ZXMoKV0uc2xpY2UoLWIxKS5tYXAoYT0+KHtyYXRpbmc6YS5yYXRpbmdTdW0vYS5yYXRpbmdDb3VudCxkYXlMYWJlbDphLmRheUxhYmVsLGRhdGVMYWJlbDphLmRhdGVMYWJlbCxkYXRlS2V5OmEuZGF0ZUtleSxmdWxsRGF0ZTphLmZ1bGxEYXRlLHRpbWU6YS5lbnRyaWVzW2EuZW50cmllcy5sZW5ndGgtMV0udGltZSx0aW1lc3RhbXA6YS5lbnRyaWVzW2EuZW50cmllcy5sZW5ndGgtMV0udGltZXN0YW1wLG5vdGVzOmEuZW50cmllc1thLmVudHJpZXMubGVuZ3RoLTFdLm5vdGVzLGVudHJpZXM6YS5lbnRyaWVzfSkpfWZ1bmN0aW9uIEsyKHttb29kUmF0aW5nczplLGF2ZXJhZ2VNb29kOnQsdmlzdWFsaXphdGlvbk1vZGU6bix2aXN1YWxpemF0aW9uS2V5OnIsb25Db25maWd1cmU6b30pe2lmKCEoZXx8W10pLmxlbmd0aClyZXR1cm4oMCxSZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6Im1vb2Qtc3VtbWFyeSIsY2hpbGRyZW46KDAsUmUuanN4KSgic3BhbiIse2NoaWxkcmVuOiJBdmcgbW9vZCAoN2QpOiAiK3R9KX0pO2xldCBhPUgyKGUpO3JldHVybigwLFJlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6Im1vb2Qtdml6LXNlY3Rpb24iLGNoaWxkcmVuOlsoMCxSZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6Im1vb2Qtdml6LWNhbnZhcy13cmFwIixjaGlsZHJlbjpuPT09IndhdmUiPygwLFJlLmpzeCkoQjIse21vb2REYXRhOmF9LHIpOigwLFJlLmpzeCkoVzIse21vb2REYXRhOmF9LHIpfSksKDAsUmUuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJtb29kLXZpei1jb25maWd1cmUtbGluayIsb25DbGljazpvLGNoaWxkcmVuOiJcdTI2OTkgQ29uZmlndXJlIn0pXX0pfWZ1bmN0aW9uIG1oKHthcHA6ZSxtb29kUmF0aW5nczp0LG9uTW9vZFJlY29yZGVkOm59KXtsZXRbcixvXT0oMCxjdC51c2VTdGF0ZSkobnVsbCksW2EsaV09KDAsY3QudXNlU3RhdGUpKCIiKSxbcyxsXT0oMCxjdC51c2VTdGF0ZSkoITEpLFtkLGNdPSgwLGN0LnVzZVN0YXRlKSghMSkscD1xYShMZSgpLCJtb29kIilbMF18fCJyaW5nIixbZix5XT0oMCxjdC51c2VTdGF0ZSkocCksW3Ysd109KDAsY3QudXNlU3RhdGUpKHApLFtnLGhdPSgwLGN0LnVzZVN0YXRlKSgwKSxbYixtXT0oMCxjdC51c2VTdGF0ZSkoITEpOygwLGN0LnVzZUVmZmVjdCkoKCk9PntpZighZClyZXR1cm47aygiU2V0dGluZyB0aW1lb3V0IHRvIHJlc2V0IG1vb2QgY29tcG9uZW50IGFmdGVyIHN1Ym1pc3Npb24iKTtsZXQgTz1zZXRUaW1lb3V0KCgpPT57YyghMSksbyhudWxsKSxpKCIiKX0selIpO3JldHVybigpPT5jbGVhclRpbWVvdXQoTyl9LFtkXSk7bGV0IFM9KCk9Pnt3KGYpLG0oITApfSx4PSgpPT57eSh2KSxoKE89Pk8rMSksbSghMSksZS5zZXRTZXR0aW5nKEJyKCJtb29kIiksSlNPTi5zdHJpbmdpZnkoW3ZdKSl9LEU9KCk9Pnt3KGYpLG0oITEpfSxUPSgpPT57byhudWxsKSxpKCIiKX0se2F2ZXJhZ2VNb29kOkF9PXoyKHQpLEM9KDAsUmUuanN4KShLMix7bW9vZFJhdGluZ3M6dCxhdmVyYWdlTW9vZDpBLHZpc3VhbGl6YXRpb25Nb2RlOmYsdmlzdWFsaXphdGlvbktleTpnLG9uQ29uZmlndXJlOlN9KSxMPWI/KDAsUmUuanN4KShscix7dGl0bGU6Ik1vb2QgVmlzdWFsaXphdGlvbiIsb25TdWJtaXQ6eCxvbkNhbmNlbDpFLHN1Ym1pdExhYmVsOiJBcHBseSIsY2hpbGRyZW46KDAsUmUuanN4cykoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLWZpZWxkIixjaGlsZHJlbjpbKDAsUmUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctZmllbGQtbGFiZWwiLGNoaWxkcmVuOiJEaXNwbGF5IHN0eWxlIn0pLFtbInJpbmciLCJSaW5nIl0sWyJ3YXZlIiwiV2F2ZSJdXS5tYXAoKFtPLFJdKT0+KDAsUmUuanN4cykoImxhYmVsIix7Y2xhc3NOYW1lOiJtb29kLXZpei1jb25maWctb3B0aW9uIixjaGlsZHJlbjpbKDAsUmUuanN4KSgiaW5wdXQiLHt0eXBlOiJyYWRpbyIsbmFtZToibW9vZC12aXotbW9kZSIsdmFsdWU6TyxjaGVja2VkOnY9PT1PLG9uQ2hhbmdlOigpPT53KE8pfSksUl19LE8pKV19KX0pOm51bGw7cmV0dXJuIGQ/KDAsUmUuanN4cykoYWUse3dpZGdldElkOiJtb29kIixjaGlsZHJlbjpbTCwoMCxSZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJtb29kLWNvbmZpcm1hdGlvbiIsY2hpbGRyZW46WygwLFJlLmpzeCkoImRpdiIse2NsYXNzTmFtZToibW9vZC1jb25maXJtYXRpb24taWNvbiIsY2hpbGRyZW46ci5lbW9qaX0pLCgwLFJlLmpzeCkoInAiLHtjbGFzc05hbWU6Im1vb2QtY29uZmlybWF0aW9uLXRleHQiLGNoaWxkcmVuOiJNb29kIHJhdGluZyByZWNvcmRlZCJ9KV19KSxDXX0pOigwLFJlLmpzeHMpKGFlLHt3aWRnZXRJZDoibW9vZCIsY2hpbGRyZW46W0wsKDAsUmUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJtb29kLXNlbGVjdG9yIixjaGlsZHJlbjpVYy5tYXAoTz0+KDAsUmUuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJtb29kLWJ0biIrKHI/LnZhbHVlPT09Ty52YWx1ZT8iIG1vb2QtYnRuLS1zZWxlY3RlZCI6IiIpLHRpdGxlOk8ubGFiZWwsb25DbGljazooKT0+VTIoTyxzLGQsbyksY2hpbGRyZW46KDAsUmUuanN4KSgic3BhbiIse2NsYXNzTmFtZToibW9vZC1lbW9qaSIsY2hpbGRyZW46Ty5lbW9qaX0pfSxPLnZhbHVlKSl9KSxyIT09bnVsbCYmKDAsUmUuanN4cykoImRpdiIse2NsYXNzTmFtZToibW9vZC1kZXRhaWxzIixjaGlsZHJlbjpbKDAsUmUuanN4KSgibGFiZWwiLHtjbGFzc05hbWU6Im1vb2QtZGV0YWlscy1sYWJlbCIsY2hpbGRyZW46Ik1vcmUgZGV0YWlscyAob3B0aW9uYWwpIn0pLCgwLFJlLmpzeCkoInRleHRhcmVhIix7Y2xhc3NOYW1lOiJtb29kLWRldGFpbHMtdGV4dGFyZWEiLHZhbHVlOmEsb25DaGFuZ2U6Tz0+aShPLnRhcmdldC52YWx1ZSksb25LZXlEb3duOk89PkYyKGUsTyxyLGEsbCxjLG4pLHBsYWNlaG9sZGVyOiJXaGF0J3Mgb24geW91ciBtaW5kPyIscm93czpXUn0pXX0pLHIhPT1udWxsJiYoMCxSZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJtb29kLXN1Ym1pdC1yb3ciLGNoaWxkcmVuOlsoMCxSZS5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6Im1vb2QtY2FuY2VsLWJ0biIsb25DbGljazpULGRpc2FibGVkOnMsY2hpbGRyZW46IkNhbmNlbCJ9KSwoMCxSZS5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6Im1vb2Qtc3VibWl0LWJ0biIsb25DbGljazooKT0+TjEoZSxyLGEsbCxjLG4pLGRpc2FibGVkOnMsY2hpbGRyZW46cz8iUmVjb3JkaW5nLi4uIjoiU3VibWl0In0pXX0pLHI9PT1udWxsJiZDXX0pfXZhciB1YT0ibm90ZS1wZWVrIjthc3luYyBmdW5jdGlvbiBEMShlLHQpe2xldCBuPWF3YWl0IGUuZ2V0Tm90ZUNvbnRlbnQoe3V1aWQ6dH0pO3R5cGVvZiBuIT0ic3RyaW5nIiYmaygiW05vdGVQZWVrXSBnZXROb3RlQ29udGVudCByZXR1cm5lZCBubyBtYXJrZG93bjoiLG4pO2xldCByPXR5cGVvZiBuPT0ic3RyaW5nIj9uOiIiO2lmKCFyLnRyaW0oKSlyZXR1cm4iIjtsZXQgbz1hd2FpdCBlLmh0bWxGcm9tQ29udGVudChyKTtpZih0eXBlb2YgbyE9InN0cmluZyJ8fCFvKXRocm93IGsoIltOb3RlUGVla10gaHRtbEZyb21Db250ZW50IHJldHVybmVkIG5vIEhUTUw6IixvKSxuZXcgRXJyb3Iobz8uZXJyb3J8fCJUaGlzIG5vdGUncyBjb250ZW50IGNvdWxkIG5vdCBiZSByZW5kZXJlZCIpO3JldHVybiBvfWZ1bmN0aW9uIEExKGUpe2xldCB0PXFhKGUsdWEpLFtuLHJdPUFycmF5LmlzQXJyYXkodCk/dDpbXTtyZXR1cm4hbnx8dHlwZW9mIG4hPSJzdHJpbmciP251bGw6e25vdGVOYW1lOnR5cGVvZiByPT0ic3RyaW5nIj9yOiIiLG5vdGVVVUlEOm59fWFzeW5jIGZ1bmN0aW9uIEMxKGUsdD1udWxsKXtsZXQgbj10P2BOb3RlIFBlZWsgaXMgY3VycmVudGx5IHNob3dpbmcgIiR7dH0iLiBDaG9vc2UgdGhlIG5vdGUgdG8gc2hvdyBpbnN0ZWFkLmA6IkNob29zZSB0aGUgbm90ZSB3aG9zZSBjb250ZW50cyBzaG91bGQgYmUgZGlzcGxheWVkIGluIHRoaXMgTm90ZSBQZWVrIHdpZGdldC4iLHI9YXdhaXQgZS5wcm9tcHQobix7aW5wdXRzOlt7bGFiZWw6Ik5vdGUiLHR5cGU6Im5vdGUifV19KSxvPUFycmF5LmlzQXJyYXkocik/clswXTpyO3JldHVybiBvPy51dWlkP3tub3RlTmFtZTpvLm5hbWV8fCIiLG5vdGVVVUlEOm8udXVpZH06KGsoIltOb3RlUGVla10gbm8gbm90ZSBjaG9zZW4gZnJvbSBwcm9tcHQ6IixyKSxudWxsKX1hc3luYyBmdW5jdGlvbiBNMShlLHtub3RlTmFtZTp0LG5vdGVVVUlEOm59KXtsZXQgcj1bbix0fHwiIl07YXdhaXQgZS5zZXRTZXR0aW5nKEJyKHVhKSxKU09OLnN0cmluZ2lmeShyKSkscXIoQnIodWEpLHIpLGsoIltOb3RlUGVla10gc3RvcmVkIG5vdGUgc2VsZWN0aW9uOiIscil9dmFyIHVyPVAoZmUoKSk7dmFyIEd0PVAoJCgpKSxHMj0iXHUyNjk5IENvbmZpZ3VyZSI7ZnVuY3Rpb24gTzEoe2FwcDplLGNoaWxkcmVuOnQsbm90ZU5hbWU6bixub3RlVVVJRDpyfSl7bGV0IG89eGMocik7cmV0dXJuKDAsR3QuanN4KSgiYSIse2NsYXNzTmFtZToibm90ZS1wZWVrLXRpdGxlLWxpbmsiLGhyZWY6byxvbkNsaWNrOmk9PntpLnByZXZlbnREZWZhdWx0KCksZS5uYXZpZ2F0ZShvKX0sdGl0bGU6YE9wZW4gIiR7bnx8IlVudGl0bGVkIn0iYCxjaGlsZHJlbjp0fSl9ZnVuY3Rpb24gVjIoe2FwcDplLG5vdGVVVUlEOnR9KXtsZXRbbixyXT0oMCx1ci51c2VTdGF0ZSkobnVsbCksW28sYV09KDAsdXIudXNlU3RhdGUpKG51bGwpO3JldHVybigwLHVyLnVzZUVmZmVjdCkoKCk9PntpZihyKG51bGwpLGEobnVsbCksIXQpcmV0dXJuO2xldCBpPSEwO3JldHVybiBEMShlLHQpLnRoZW4ocz0+e2kmJihhKHMpLGsoYFtOb3RlUGVla10gcmVuZGVyZWQgbm90ZSAke3R9ICgke3MubGVuZ3RofSBjaGFycyBvZiBIVE1MKWApKX0pLmNhdGNoKHM9PntpJiYoaygiW05vdGVQZWVrXSBmYWlsZWQgdG8gcmVuZGVyIG5vdGU6IixzKSxyKHMubWVzc2FnZXx8IkZhaWxlZCB0byBsb2FkIHRoaXMgbm90ZSIpKX0pLCgpPT57aT0hMX19LFtlLHRdKSx7ZXJyb3I6bixodG1sOm99fWZ1bmN0aW9uIGoyKHtvbkNob29zZTplfSl7cmV0dXJuKDAsR3QuanN4cykoImRpdiIse2NsYXNzTmFtZToibm90ZS1wZWVrLWNob29zZXIiLG9uQ2xpY2s6ZSxyb2xlOiJwcmVzZW50YXRpb24iLHRpdGxlOiJDaG9vc2UgYSBub3RlIixjaGlsZHJlbjpbKDAsR3QuanN4KSgic3BhbiIse2NsYXNzTmFtZToibm90ZS1wZWVrLWNob29zZXItaWNvbiIsY2hpbGRyZW46Ilx1ezFGNEM0fSJ9KSwoMCxHdC5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJub3RlLXBlZWstY2hvb3Nlci1sYWJlbCIsY2hpbGRyZW46IkNob29zZSBhIG5vdGUgdG8gZGlzcGxheSBoZXJlIn0pLCgwLEd0LmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToibm90ZS1wZWVrLWNob29zZXItYnV0dG9uIix0eXBlOiJidXR0b24iLGNoaWxkcmVuOkcyfSldfSl9ZnVuY3Rpb24gWTIoe2Vycm9yOmUsaHRtbDp0LG9uQ2hvb3NlOm4sc2VsZWN0aW9uOnJ9KXtsZXQgbz0oMCx1ci51c2VSZWYpKG51bGwpO3JldHVybigwLHVyLnVzZUVmZmVjdCkoKCk9Pnt0JiZfbihvLmN1cnJlbnQpfSxbdF0pLHI/ZT8oMCxHdC5qc3gpKCJwIix7Y2xhc3NOYW1lOiJub3RlLWVycm9yIixjaGlsZHJlbjpgRXJyb3I6ICR7ZX1gfSk6dD09PW51bGw/KDAsR3QuanN4KSgicCIse2NsYXNzTmFtZToibm90ZS1sb2FkaW5nIixjaGlsZHJlbjoiTG9hZGluZ1x1MjAyNiJ9KTp0PT09IiI/KDAsR3QuanN4KSgicCIse2NsYXNzTmFtZToibm90ZS1lbXB0eSIsY2hpbGRyZW46IlRoaXMgbm90ZSBoYXMgbm8gY29udGVudCB5ZXQuIn0pOigwLEd0LmpzeCkoImRpdiIse2NsYXNzTmFtZToibm90ZS1wZWVrLWNvbnRlbnQiLHJlZjpvLGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOntfX2h0bWw6dH19KTooMCxHdC5qc3gpKGoyLHtvbkNob29zZTpufSl9ZnVuY3Rpb24gaGgoe2FwcDplfSl7bGV0W3Qsbl09KDAsdXIudXNlU3RhdGUpKCgpPT5BMShMZSgpKSkse2Vycm9yOnIsaHRtbDpvfT1WMih7YXBwOmUsbm90ZVVVSUQ6dD8ubm90ZVVVSUR8fG51bGx9KSxhPSgwLHVyLnVzZUNhbGxiYWNrKShhc3luYygpPT57bGV0IGw9YXdhaXQgQzEoZSx0Py5ub3RlTmFtZXx8bnVsbCk7bCYmKGF3YWl0IE0xKGUsbCksbihsKSl9LFtlLHRdKTtsdCh1YSwhdHx8byE9PW51bGwsISFyKTtsZXQgaT10PygwLEd0LmpzeCkoTzEse2FwcDplLG5vdGVOYW1lOnQubm90ZU5hbWUsbm90ZVVVSUQ6dC5ub3RlVVVJRCxjaGlsZHJlbjpfZCh1YSl9KTp2b2lkIDAscz10PygwLEd0LmpzeCkoTzEse2FwcDplLG5vdGVOYW1lOnQubm90ZU5hbWUsbm90ZVVVSUQ6dC5ub3RlVVVJRCxjaGlsZHJlbjp0Lm5vdGVOYW1lfHwiVW50aXRsZWQifSk6bnVsbDtyZXR1cm4oMCxHdC5qc3gpKGFlLHtjb25maWd1cmFibGU6ISF0LG9uQ29uZmlndXJlOmEsc3VidGl0bGU6cyx0aXRsZTppLHdpZGdldElkOnVhLGNoaWxkcmVuOigwLEd0LmpzeCkoWTIse2Vycm9yOnIsaHRtbDpvLG9uQ2hvb3NlOmEsc2VsZWN0aW9uOnR9KX0pfXZhciBmdD1QKGZlKCkpO3ZhciBNZT1QKCQoKSksRmM9InBlYWstaG91cnMiO2Z1bmN0aW9uIHEyKGUpe3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6MjR9LCh0LG4pPT5yaShuLGUpKX1mdW5jdGlvbiBJMShlKXtyZXR1cm4gZT9lIGluc3RhbmNlb2YgRGF0ZT9lOnR5cGVvZiBlPT0ibnVtYmVyIj9uZXcgRGF0ZShlPDFlMTI/ZSoxZTM6ZSk6bmV3IERhdGUoZSk6bnVsbH1mdW5jdGlvbiBYMihlKXtsZXQgdD1JZShlKSxuPXQuZ2V0RnVsbFllYXIoKSxyPXQuZ2V0TW9udGgoKSxvPW5ldyBEYXRlKG4sciwxLDAsMCwwLDApLGE9bmV3IERhdGUobixyKzEsMSwwLDAsMCwwKTtyZXR1cm57ZnJvbTpNYXRoLmZsb29yKG8uZ2V0VGltZSgpLzFlMyksdG86TWF0aC5mbG9vcihhLmdldFRpbWUoKS8xZTMpLG1vbnRoS2V5OmAke259LSR7U3RyaW5nKHIrMSkucGFkU3RhcnQoMiwiMCIpfWB9fWZ1bmN0aW9uICQyKGUpe2xldCB0PW5ldyBBcnJheSgyNCkuZmlsbCgwKSxuPW5ldyBBcnJheSgyNCkuZmlsbCgwKSxyPTA7Zm9yKGxldCBpIG9mIGUpe2xldCBzPWkudmljdG9yeVZhbHVlfHwxLGw9STEoaS5jcmVhdGVkQXR8fGkuc3RhcnRBdCk7bCYmIWlzTmFOKGwpJiYodFtsLmdldEhvdXJzKCldKz1zLHIrKyk7bGV0IGQ9STEoaS5jb21wbGV0ZWRBdCk7ZCYmIWlzTmFOKGQpJiYobltkLmdldEhvdXJzKCldKz1zKX1sZXQgbz10LmluZGV4T2YoTWF0aC5tYXgoLi4udCkpLGE9bi5pbmRleE9mKE1hdGgubWF4KC4uLm4pKTtyZXR1cm57Y29tcGxldGVkQnlIb3VyOm4sY3JlYXRlZEJ5SG91cjp0LHBlYWtDb21wbGV0ZUhvdXJJbmRleDphLHBlYWtDcmVhdGVIb3VySW5kZXg6byx0b3RhbFRhc2tzOnJ9fWZ1bmN0aW9uIEoyKGUpe2xldCB0PWdldENvbXB1dGVkU3R5bGUoZSk7cmV0dXJue2JhckNyZWF0ZWQ6dC5nZXRQcm9wZXJ0eVZhbHVlKCItLWRhc2hib2FyZC1jb2xvci1ibHVlIikudHJpbSgpfHwiIzViN2JiZiIsYmFyQ29tcGxldGVkOnQuZ2V0UHJvcGVydHlWYWx1ZSgiLS1kYXNoYm9hcmQtY29sb3ItYWNjZW50IikudHJpbSgpfHwiI2U4ODUzZCIsYXhpc1RleHQ6dC5nZXRQcm9wZXJ0eVZhbHVlKCItLWRhc2hib2FyZC1jb2xvci10ZXh0LXNlY29uZGFyeSIpLnRyaW0oKXx8IiM3YTg2OTkiLGdyaWRMaW5lOnQuZ2V0UHJvcGVydHlWYWx1ZSgiLS1kYXNoYm9hcmQtY29sb3ItYm9yZGVyIikudHJpbSgpfHwiI2Q4ZGRlNiJ9fWZ1bmN0aW9uIFIxKGUsdCxuLHIpe2xldCBvPWUuZ2V0Q29udGV4dCgiMmQiKSxhPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxLGk9ZS5wYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9aS53aWR0aCxsPWkuaGVpZ2h0O2lmKHM8PTB8fGw8PTApcmV0dXJuO2Uud2lkdGg9cyphLGUuaGVpZ2h0PWwqYSxlLnN0eWxlLndpZHRoPWAke3N9cHhgLGUuc3R5bGUuaGVpZ2h0PWAke2x9cHhgLG8uc2NhbGUoYSxhKTtsZXQgZD1KMihlKSxjPTQ4LHU9MTIscD0xMixmPTQwLHk9cy1jLXUsdj1sLXAtZix3PU1hdGgubWF4KC4uLnQsLi4ubiwxKSxnPU1hdGguY2VpbCh3LzEwKSoxMHx8MTA7by5jbGVhclJlY3QoMCwwLHMsbCk7bGV0IGg9NTtvLmZvbnQ9IjExcHggLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBzeXN0ZW0tdWksIHNhbnMtc2VyaWYiLG8udGV4dEFsaWduPSJyaWdodCIsby50ZXh0QmFzZWxpbmU9Im1pZGRsZSI7Zm9yKGxldCBUPTA7VDw9aDtUKyspe2xldCBBPU1hdGgucm91bmQoZy9oKlQpLEM9cCt2LXYqVC9oO28uZmlsbFN0eWxlPWQuYXhpc1RleHQsby5maWxsVGV4dChgJHtBfWAsYy04LEMpLFQ+MCYmKG8uc3Ryb2tlU3R5bGU9ZC5ncmlkTGluZSxvLmdsb2JhbEFscGhhPS40LG8ubGluZVdpZHRoPS41LG8uYmVnaW5QYXRoKCksby5tb3ZlVG8oYyxDKSxvLmxpbmVUbyhjK3ksQyksby5zdHJva2UoKSxvLmdsb2JhbEFscGhhPTEpfWxldCBiPTI0LG09eS9iLFM9bSouMzIseD1tKi4wNDtmb3IobGV0IFQ9MDtUPGI7VCsrKXtsZXQgQT1jK1QqbSsobS1TKjIteCkvMixDPXRbVF0vZyp2LEw9bltUXS9nKnY7by5maWxsU3R5bGU9ZC5iYXJDcmVhdGVkLFAxKG8sQSxwK3YtQyxTLEMsMiksby5maWxsU3R5bGU9ZC5iYXJDb21wbGV0ZWQsUDEobyxBK1MreCxwK3YtTCxTLEwsMil9by5maWxsU3R5bGU9ZC5heGlzVGV4dCxvLmZvbnQ9IjEwcHggLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBzeXN0ZW0tdWksIHNhbnMtc2VyaWYiLG8udGV4dEFsaWduPSJjZW50ZXIiLG8udGV4dEJhc2VsaW5lPSJ0b3AiO2xldCBFPXk8MzAwPzQ6Mjtmb3IobGV0IFQ9MDtUPGI7VCs9RSl7bGV0IEE9YytUKm0rbS8yO28uZmlsbFRleHQocltUXSxBLHArdis4KX19ZnVuY3Rpb24gUDEoZSx0LG4scixvLGEpe288MXx8KGE9TWF0aC5taW4oYSxvLzIsci8yKSxlLmJlZ2luUGF0aCgpLGUubW92ZVRvKHQrYSxuKSxlLmxpbmVUbyh0K3ItYSxuKSxlLmFyY1RvKHQrcixuLHQrcixuK2EsYSksZS5saW5lVG8odCtyLG4rbyksZS5saW5lVG8odCxuK28pLGUubGluZVRvKHQsbithKSxlLmFyY1RvKHQsbix0K2EsbixhKSxlLmNsb3NlUGF0aCgpLGUuZmlsbCgpKX1mdW5jdGlvbiBRMihlLHQpe2xldCBuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj10LmNsaWVudFgtbi5sZWZ0LG89bi53aWR0aCxhPTQ4LHM9by1hLTEyLGw9ci1hO3JldHVybiBsPDB8fGw+cz8tMTpNYXRoLmZsb29yKGwvcyoyNCl9ZnVuY3Rpb24gZ2goe2xhYmVsOmUsdmFsdWU6dH0pe3JldHVybigwLE1lLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6InBlYWstaG91cnMtbWV0cmljLWNhcmQiLGNoaWxkcmVuOlsoMCxNZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6InBlYWstaG91cnMtbWV0cmljLWxhYmVsIixjaGlsZHJlbjplfSksKDAsTWUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJwZWFrLWhvdXJzLW1ldHJpYy12YWx1ZSIsY2hpbGRyZW46dH0pXX0pfWZ1bmN0aW9uIEwxKHttb2RpZmllckNsYXNzOmUsbGFiZWw6dH0pe3JldHVybigwLE1lLmpzeHMpKCJzcGFuIix7Y2xhc3NOYW1lOiJwZWFrLWhvdXJzLWxlZ2VuZC1pdGVtIixjaGlsZHJlbjpbKDAsTWUuanN4KSgic3BhbiIse2NsYXNzTmFtZTpgcGVhay1ob3Vycy1sZWdlbmQtc3dhdGNoICR7ZX1gfSksdF19KX1mdW5jdGlvbiBaMih7bGFiZWw6ZSxmb3J3YXJkRGlzYWJsZWQ6dCxvbk5hdmlnYXRlOm59KXtyZXR1cm4oMCxNZS5qc3hzKSgic3BhbiIse2NsYXNzTmFtZToicGVhay1ob3Vycy1tb250aC1uYXYiLGNoaWxkcmVuOlsoMCxNZS5qc3gpKCJidXR0b24iLHt0eXBlOiJidXR0b24iLGNsYXNzTmFtZToicGVhay1ob3Vycy1tb250aC1uYXYtYXJyb3ciLCJhcmlhLWxhYmVsIjoiUHJldmlvdXMgbW9udGgiLG9uQ2xpY2s6KCk9Pm4oLTEpLGNoaWxkcmVuOiJcdTIwMzkifSksKDAsTWUuanN4KSgic3BhbiIse2NsYXNzTmFtZToicGVhay1ob3Vycy1tb250aC1uYXYtbGFiZWwiLGNoaWxkcmVuOmV9KSwoMCxNZS5qc3gpKCJidXR0b24iLHt0eXBlOiJidXR0b24iLGNsYXNzTmFtZToicGVhay1ob3Vycy1tb250aC1uYXYtYXJyb3ciLCJhcmlhLWxhYmVsIjoiTmV4dCBtb250aCIsZGlzYWJsZWQ6dCxvbkNsaWNrOigpPT5uKDEpLGNoaWxkcmVuOiJcdTIwM0EifSldfSl9ZnVuY3Rpb24geWgoe2FwcDplLGN1cnJlbnREYXRlOnQsc2VsZWN0ZWREYXRlOm4sdGltZUZvcm1hdDpyfSl7bGV0IG89KDAsZnQudXNlUmVmKShudWxsKSxbYSxpXT0oMCxmdC51c2VTdGF0ZSkobnVsbCksW3MsbF09KDAsZnQudXNlU3RhdGUpKG51bGwpLFtkLGNdPSgwLGZ0LnVzZVN0YXRlKSghMCksW3UscF09KDAsZnQudXNlU3RhdGUpKFtdKSxmPSgwLGZ0LnVzZVJlZikobnVsbCkseT1ufHx0LHY9eT9zYyh5KTpudWxsLHc9dD9zYyh0KTpudWxsLFtnLGhdPSgwLGZ0LnVzZVN0YXRlKSh2KTsoMCxmdC51c2VFZmZlY3QpKCgpPT57diYmaCh2KX0sW3ZdKTtsZXQgYj0oMCxmdC51c2VNZW1vKSgoKT0+Zz9sbShnKTpudWxsLFtnXSksbT0hZ3x8IXd8fGc+PXcsUz0oMCxmdC51c2VDYWxsYmFjaykoTT0+e2goVz0+e2xldCBEPVd8fHY7aWYoIUQpcmV0dXJuIFc7bGV0IE49c2MoazAobG0oRCksTSkpO3JldHVybiBNPjAmJncmJk4+dz9XOk59KX0sW3Ysd10pOygwLGZ0LnVzZUVmZmVjdCkoKCk9PntpZighYnx8IWUpcmV0dXJuO2xldHtmcm9tOk0sdG86Vyxtb250aEtleTpEfT1YMihiKTtpZihmLmN1cnJlbnQ9PT1EKXJldHVybjtmLmN1cnJlbnQ9RDtsZXQgTj0hMTtyZXR1cm4gbChudWxsKSxjKCEwKSxlLmdldENvbXBsZXRlZFRhc2tzKE0sVykudGhlbihfPT57Tnx8cChBcnJheS5pc0FycmF5KF8pP186W10pfSkuY2F0Y2goXz0+e2soIltwZWFrLWhvdXJzXSBmYWlsZWQgdG8gZmV0Y2ggbW9udGggdGFza3MiLF8pLE58fChsKF8pLHAoW10pKX0pLmZpbmFsbHkoKCk9PntOfHxjKCExKX0pLCgpPT57Tj0hMH19LFtlLGJdKTtsZXQgeD1xMihyKSx7Y29tcGxldGVkQnlIb3VyOkUsY3JlYXRlZEJ5SG91cjpULHBlYWtDb21wbGV0ZUhvdXJJbmRleDpBLHBlYWtDcmVhdGVIb3VySW5kZXg6Qyx0b3RhbFRhc2tzOkx9PSgwLGZ0LnVzZU1lbW8pKCgpPT4kMih1KSxbdV0pLE89eFtDXSxSPXhbQV0sRj0oMCxmdC51c2VNZW1vKSgoKT0+Yj9JZShiKS50b0xvY2FsZURhdGVTdHJpbmcodm9pZCAwLHttb250aDoibG9uZyIseWVhcjoibnVtZXJpYyJ9KTpudWxsLFtiXSk7KDAsZnQudXNlRWZmZWN0KSgoKT0+e2lmKCFvLmN1cnJlbnQpcmV0dXJuO1IxKG8uY3VycmVudCxULEUseCk7bGV0IE09KCk9PntvLmN1cnJlbnQmJlIxKG8uY3VycmVudCxULEUseCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixNKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsTSl9LFtFLFQseF0pO2xldCBWPSgwLGZ0LnVzZUNhbGxiYWNrKShNPT57bGV0IFc9UTIoby5jdXJyZW50LE0pO2lmKFc8MHx8Vz4yMyl7aShudWxsKTtyZXR1cm59bGV0IEQ9by5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2koe3g6TS5jbGllbnRYLUQubGVmdCx5Ok0uY2xpZW50WS1ELnRvcC02MCxob3VyOnhbV10sY3JlYXRlZDpUW1ddLGNvbXBsZXRlZDpFW1ddfSl9LFtULEVdKSx6PSgwLGZ0LnVzZUNhbGxiYWNrKSgoKT0+aShudWxsKSxbXSk7bHQoRmMsIWQmJiFzLCEhcyk7bGV0IG5lPSgwLE1lLmpzeCkoWjIse2xhYmVsOkYsZm9yd2FyZERpc2FibGVkOm0sb25OYXZpZ2F0ZTpTfSk7cmV0dXJuIGQ/KDAsTWUuanN4KShhZSx7c3VidGl0bGU6bmUsd2lkZ2V0SWQ6RmMsY2hpbGRyZW46KDAsTWUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJwZWFrLWhvdXJzLWVtcHR5IixjaGlsZHJlbjooMCxNZS5qc3gpKCJwIix7Y2hpbGRyZW46IkxvYWRpbmcgbW9udGhseSB0YXNrIGhpc3RvcnlcdTIwMjYifSl9KX0pOkw9PT0wPygwLE1lLmpzeCkoYWUse3N1YnRpdGxlOm5lLHdpZGdldElkOkZjLGNoaWxkcmVuOigwLE1lLmpzeCkoImRpdiIse2NsYXNzTmFtZToicGVhay1ob3Vycy1lbXB0eSIsY2hpbGRyZW46KDAsTWUuanN4KSgicCIse2NoaWxkcmVuOiJObyBjb21wbGV0ZWQgdGFzayBkYXRhIGF2YWlsYWJsZSB5ZXQuIn0pfSl9KTooMCxNZS5qc3hzKShhZSx7c3VidGl0bGU6bmUsd2lkZ2V0SWQ6RmMsY2hpbGRyZW46WygwLE1lLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6InBlYWstaG91cnMtbWV0cmljcy1ncmlkIixjaGlsZHJlbjpbKDAsTWUuanN4KShnaCx7bGFiZWw6IlRhc2tzIGFuYWx5emVkIix2YWx1ZTpMfSksKDAsTWUuanN4KShnaCx7bGFiZWw6IlBlYWsgY3JlYXRlIGhvdXIiLHZhbHVlOk99KSwoMCxNZS5qc3gpKGdoLHtsYWJlbDoiUGVhayBjb21wbGV0ZSBob3VyIix2YWx1ZTpSfSldfSksKDAsTWUuanN4cykoImRpdiIse2NsYXNzTmFtZToicGVhay1ob3Vycy1sZWdlbmQiLGNoaWxkcmVuOlsoMCxNZS5qc3gpKEwxLHttb2RpZmllckNsYXNzOiJwZWFrLWhvdXJzLWxlZ2VuZC1zd2F0Y2gtLWNyZWF0ZWQiLGxhYmVsOiJDcmVhdGVkIHZhbHVlIn0pLCgwLE1lLmpzeCkoTDEse21vZGlmaWVyQ2xhc3M6InBlYWstaG91cnMtbGVnZW5kLXN3YXRjaC0tY29tcGxldGVkIixsYWJlbDoiQ29tcGxldGVkIHZhbHVlIn0pXX0pLCgwLE1lLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6InBlYWstaG91cnMtY2hhcnQtY29udGFpbmVyIixjaGlsZHJlbjpbKDAsTWUuanN4KSgiY2FudmFzIix7cmVmOm8sY2xhc3NOYW1lOiJwZWFrLWhvdXJzLWNhbnZhcyIsb25Nb3VzZU1vdmU6Vixvbk1vdXNlTGVhdmU6en0pLGEmJigwLE1lLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6InBlYWstaG91cnMtdG9vbHRpcCIsc3R5bGU6e2xlZnQ6YS54LHRvcDphLnksdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC01MCUpIn0sY2hpbGRyZW46WygwLE1lLmpzeCkoImRpdiIse2NsYXNzTmFtZToicGVhay1ob3Vycy10b29sdGlwLWhlYWRlciIsY2hpbGRyZW46YS5ob3VyfSksKDAsTWUuanN4cykoImRpdiIse2NsYXNzTmFtZToicGVhay1ob3Vycy10b29sdGlwLXJvdyIsY2hpbGRyZW46WygwLE1lLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6InBlYWstaG91cnMtdG9vbHRpcC1sYWJlbCBwZWFrLWhvdXJzLXRvb2x0aXAtbGFiZWwtLWNyZWF0ZWQiLGNoaWxkcmVuOiJDcmVhdGVkOiJ9KSxgICR7YS5jcmVhdGVkfSBwdHNgXX0pLCgwLE1lLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6InBlYWstaG91cnMtdG9vbHRpcC1yb3ciLGNoaWxkcmVuOlsoMCxNZS5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJwZWFrLWhvdXJzLXRvb2x0aXAtbGFiZWwgcGVhay1ob3Vycy10b29sdGlwLWxhYmVsLS1jb21wbGV0ZWQiLGNoaWxkcmVuOiJDb21wbGV0ZWQ6In0pLGAgJHthLmNvbXBsZXRlZH0gcHRzYF19KV19KV19KV19KX12YXIgVnQ9e0RJU01JU1NFRDoiZGlzbWlzc2VkIixQRU5ESU5HOiJwZW5kaW5nIixTQ0hFRFVMRUQ6InNjaGVkdWxlZCJ9LGVQPSJEYXNoYm9hcmQgUHJvcG9zZWQgVGFza3MiLHRQPTc7ZnVuY3Rpb24gXzEoZSl7bGV0IHQ9ZSBpbnN0YW5jZW9mIERhdGU/ZTpuZXcgRGF0ZShlKTtyZXR1cm5gJHtvclt0LmdldE1vbnRoKCldfSAke3QuZ2V0RnVsbFllYXIoKX0gJHtlUH1gfWZ1bmN0aW9uIGdpKGUpe3JldHVybmAke2Uuc3RhcnRNaW51dGVzfTo6JHtlLnRhc2tVdWlkfHxlLnRpdGxlfWB9ZnVuY3Rpb24gdmgoZSx7ZGF0ZUtleTp0LHByaW9yaXR5S2V5Om4scHJvdmlkZXJFbTpyfSl7cmV0dXJuIGUuZGF0ZUtleT09PXQmJmUucHJpb3JpdHlLZXk9PT1uJiZlLnByb3ZpZGVyRW09PT1yfWZ1bmN0aW9uIG5QKGUsdD1udWxsKXtyZXR1cm4gdD9lLmNvbnRleHRGaW5nZXJwcmludD09PWNhKHQpOiEwfWZ1bmN0aW9uIHJQKGUpe3JldHVybntkdXJhdGlvbk1pbnV0ZXM6ZS5kdXJhdGlvbk1pbnV0ZXN8fDAsaXNFeGlzdGluZzohIWUuaXNFeGlzdGluZyxub3RlVXVpZDplLm5vdGVVdWlkfHxudWxsLHJlYXNvbjplLnJlYXNvbnx8IiIsc2NoZWR1bGVkRW06ZS5zY2hlZHVsZWRFbXx8VnQuUEVORElORyxzdGFydE1pbnV0ZXM6ZS5zdGFydE1pbnV0ZXMsdGFyZ2V0TWlkbmlnaHRTZWNvbmRzOmUudGFyZ2V0TWlkbmlnaHRTZWNvbmRzPz9udWxsLHRhc2tVdWlkOmUudGFza1V1aWR8fG51bGwsdGltZTplLnN0YXJ0VGltZSx0aXRsZTplLnRpdGxlfX1mdW5jdGlvbiBvUChlKXtyZXR1cm57ZHVyYXRpb25NaW51dGVzOmUuZHVyYXRpb25NaW51dGVzfHwwLGlzRXhpc3Rpbmc6ISFlLmlzRXhpc3Rpbmcsbm90ZVV1aWQ6ZS5ub3RlVXVpZHx8bnVsbCxyZWFzb246ZS5yZWFzb258fCIiLHNjaGVkdWxlZEVtOmUuc2NoZWR1bGVkRW18fFZ0LlBFTkRJTkcsc291cmNlOiJwcm9wb3NlZCIsc3RhcnRNaW51dGVzOmUuc3RhcnRNaW51dGVzLHN0YXJ0VGltZTplLnRpbWUsdGFyZ2V0TWlkbmlnaHRTZWNvbmRzOmUudGFyZ2V0TWlkbmlnaHRTZWNvbmRzPz9udWxsLHRhc2tVdWlkOmUudGFza1V1aWR8fG51bGwsdGl0bGU6ZS50aXRsZX19ZnVuY3Rpb24gVTEoZSl7aWYoIWV8fHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm57cmVjb3JkczpbXX07bGV0IHQ9ZS5tYXRjaCgvYGBganNvblxzKihbXHNcU10qPylgYGAvaSksbj10P3RbMV06ZTt0cnl7bGV0IHI9SlNPTi5wYXJzZShuKTtyZXR1cm57cmVjb3JkczpBcnJheS5pc0FycmF5KHI/LnJlY29yZHMpP3IucmVjb3JkczpbXX19Y2F0Y2h7cmV0dXJue3JlY29yZHM6W119fX1mdW5jdGlvbiBiaChlLHQpe3JldHVybltgIyBQcm9wb3NlZCBhZ2VuZGEgcmVjb3JkcyBmb3IgJHt0fWAsIiIsIlRoaXMgYXJjaGl2ZWQgbm90ZSBpcyBtYWludGFpbmVkIGJ5IHRoZSBkYXNoYm9hcmQgcGx1Z2luLiBFYWNoIHJlY29yZCBiZWxvdyBjYXB0dXJlcyB3aGljaCB0YXNrcyB0aGUgUHJvcG9zZWQgQWdlbmRhIHdpZGdldCByZWNvbW1lbmRlZCBmb3IgYSBnaXZlbiBkYXRlLCBwcmlvcml0eSwgYW5kIEFJIHByb3ZpZGVyIFx1MjAxNCBhbmQgd2hhdCBiZWNhbWUgb2YgZWFjaC4iLCIiLCJgYGBqc29uIixKU09OLnN0cmluZ2lmeShlLG51bGwsMiksImBgYCIsIiJdLmpvaW4oYApgKX1hc3luYyBmdW5jdGlvbiB3aChlLHQpe2xldCBuPV8xKHQpLHI9YCR7b3JbdC5nZXRNb250aCgpXX0gJHt0LmdldEZ1bGxZZWFyKCl9YCxvPWF3YWl0IGUuZmluZE5vdGUoe25hbWU6bix0YWdzOlt2ZV19KS5jYXRjaCgoKT0+bnVsbCk7aWYobz8udXVpZCl7bGV0IHM9YXdhaXQgZS5nZXROb3RlQ29udGVudCh7dXVpZDpvLnV1aWR9KS5jYXRjaCgoKT0+IiIpO3JldHVybnttb250aExhYmVsOnIsbm90ZUhhbmRsZTpvLHN0YXRlOlUxKHMpfX1sZXQgYT1hd2FpdCBlLmNyZWF0ZU5vdGUobixbdmVdLHthcmNoaXZlOiEwfSk7bz17bmFtZTpuLHV1aWQ6dHlwZW9mIGE9PSJvYmplY3QiP2EudXVpZDphfTtsZXQgaT17cmVjb3JkczpbXX07cmV0dXJuIGF3YWl0IGUucmVwbGFjZU5vdGVDb250ZW50KG8sYmgoaSxyKSkuY2F0Y2gocz0+aygiW3Byb3Bvc2VkLWFnZW5kYS1hcmNoaXZlXSBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBub3RlOiIscykpLGsoYFtwcm9wb3NlZC1hZ2VuZGEtYXJjaGl2ZV0gY3JlYXRlZCBtb250aGx5IG5vdGUgIiR7bn0iIHV1aWQgJHtvLnV1aWR9YCkse21vbnRoTGFiZWw6cixub3RlSGFuZGxlOm8sc3RhdGU6aX19YXN5bmMgZnVuY3Rpb24gYVAoZSx0KXtsZXQgbj1fMSh0KSxyPWF3YWl0IGUuZmluZE5vdGUoe25hbWU6bix0YWdzOlt2ZV19KS5jYXRjaCgoKT0+bnVsbCk7aWYoIXI/LnV1aWQpcmV0dXJuW107bGV0IG89YXdhaXQgZS5nZXROb3RlQ29udGVudCh7dXVpZDpyLnV1aWR9KS5jYXRjaCgoKT0+IiIpO3JldHVybiBVMShvKS5yZWNvcmRzfWZ1bmN0aW9uIGlQKGUsdCl7bGV0IG49W10scj1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLDEpLG89bmV3IERhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSwxKTtmb3IoO3I8PW87KW4ucHVzaChuZXcgRGF0ZShyKSksci5zZXRNb250aChyLmdldE1vbnRoKCkrMSk7cmV0dXJuIG59YXN5bmMgZnVuY3Rpb24gRjEoZSx7ZGF0ZTp0LHdpbmRvd0RheXM6bj10UH0pe2xldCByPWllKHQpLG89bmV3IERhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKS1uLDAsMCwwKSxhPWllKG8pLGk9YXdhaXQgUHJvbWlzZS5hbGwoaVAobyx0KS5tYXAobD0+YVAoZSxsKS5jYXRjaCgoKT0+W10pKSkscz1uZXcgTWFwO2ZvcihsZXQgbCBvZiBpLmZsYXQoKSl7bGV0IGQ9bD8uZGF0ZUtleTtpZighKCFkfHxkPj1yfHxkPGEpKWZvcihsZXQgYyBvZiBBcnJheS5pc0FycmF5KGwucHJvcG9zZWRUYXNrcyk/bC5wcm9wb3NlZFRhc2tzOltdKWM/LnRhc2tVdWlkJiYocy5oYXMoYy50YXNrVXVpZCl8fHMuc2V0KGMudGFza1V1aWQsbmV3IFNldCkscy5nZXQoYy50YXNrVXVpZCkuYWRkKGQpKX1yZXR1cm4gc31hc3luYyBmdW5jdGlvbiB6MShlLHtkYXRlOnQscHJpb3JpdHlLZXk6bixwcm92aWRlckVtOnIscmVjb21tZW5kYXRpb25Db250ZXh0S2V5Om89bnVsbH0pe2xldCBhPXtkYXRlS2V5OmllKHQpLHByaW9yaXR5S2V5Om4scHJvdmlkZXJFbTpyfSx7c3RhdGU6aX09YXdhaXQgd2goZSx0KSxzPWkucmVjb3Jkcy5maW5kKHU9PnZoKHUsYSkmJm5QKHUsbykpO2lmKCFzfHwhQXJyYXkuaXNBcnJheShzLnByb3Bvc2VkVGFza3MpfHxzLnByb3Bvc2VkVGFza3MubGVuZ3RoPT09MClyZXR1cm4gbnVsbDtsZXQgbD1zLnByb3Bvc2VkVGFza3MubWFwKG9QKSxkPXMucHJvcG9zZWRUYXNrcy5maWx0ZXIodT0+dS5zY2hlZHVsZWRFbT09PVZ0LlNDSEVEVUxFRCkubWFwKGdpKSxjPXMucHJvcG9zZWRUYXNrcy5maWx0ZXIodT0+dS5zY2hlZHVsZWRFbT09PVZ0LkRJU01JU1NFRCkubWFwKGdpKTtyZXR1cm4gaygiW3Byb3Bvc2VkLWFnZW5kYS1hcmNoaXZlXSBjYWNoZSBoaXQiLHsuLi5hLHRhc2tDb3VudDpsLmxlbmd0aH0pLHthY3Rpdml0aWVzOmwsZGlzbWlzc2VkS2V5czpjLGxsbUF0dHJpYnV0aW9uRm9vdGVyOnMubGxtQXR0cmlidXRpb25Gb290ZXJ8fG51bGwsc2NoZWR1bGVkS2V5czpkfX1hc3luYyBmdW5jdGlvbiBraChlLHthY3Rpdml0aWVzOnQsZGF0ZTpuLGxsbUF0dHJpYnV0aW9uRm9vdGVyOnI9bnVsbCxwcmlvcml0eUtleTpvLHByb3ZpZGVyRW06YSxyZWNvbW1lbmRhdGlvbkNvbnRleHRLZXk6aT1udWxsfSl7bGV0IHM9e2RhdGVLZXk6aWUobikscHJpb3JpdHlLZXk6byxwcm92aWRlckVtOmF9LHttb250aExhYmVsOmwsbm90ZUhhbmRsZTpkLHN0YXRlOmN9PWF3YWl0IHdoKGUsbiksdT1pP2NhKGkpOm51bGwscD17Li4ucyxjb250ZXh0RmluZ2VycHJpbnQ6dSxsbG1BdHRyaWJ1dGlvbkZvb3RlcjpyLHByb3Bvc2VkVGFza3M6KHR8fFtdKS5tYXAoclApfSxmPVtwLC4uLmMucmVjb3Jkcy5maWx0ZXIoeT0+IXZoKHkscykpXTthd2FpdCBlLnJlcGxhY2VOb3RlQ29udGVudChkLGJoKHtyZWNvcmRzOmZ9LGwpKSxrKCJbcHJvcG9zZWQtYWdlbmRhLWFyY2hpdmVdIHN0b3JlZCByZWNvcmQiLHsuLi5zLHRhc2tDb3VudDpwLnByb3Bvc2VkVGFza3MubGVuZ3RofSl9YXN5bmMgZnVuY3Rpb24gVzEoZSx7YWN0aXZpdHlLZXlzOnQsZGF0ZTpuLHByaW9yaXR5S2V5OnIscHJvdmlkZXJFbTpvLHNjaGVkdWxlZEVtOmF9KXtsZXQgaT1uZXcgU2V0KHR8fFtdKTtpZihpLnNpemU9PT0wKXJldHVybjtsZXQgcz17ZGF0ZUtleTppZShuKSxwcmlvcml0eUtleTpyLHByb3ZpZGVyRW06b30se21vbnRoTGFiZWw6bCxub3RlSGFuZGxlOmQsc3RhdGU6Y309YXdhaXQgd2goZSxuKSx1PWMucmVjb3Jkcy5maW5kKGY9PnZoKGYscykpO2lmKCF1fHwhQXJyYXkuaXNBcnJheSh1LnByb3Bvc2VkVGFza3MpKXJldHVybjtsZXQgcD0hMTt1LnByb3Bvc2VkVGFza3M9dS5wcm9wb3NlZFRhc2tzLm1hcChmPT4haS5oYXMoZ2koZikpfHxmLnNjaGVkdWxlZEVtPT09YT9mOihwPSEwLHsuLi5mLHNjaGVkdWxlZEVtOmF9KSkscCYmKGF3YWl0IGUucmVwbGFjZU5vdGVDb250ZW50KGQsYmgoYyxsKSksaygiW3Byb3Bvc2VkLWFnZW5kYS1hcmNoaXZlXSB1cGRhdGVkIHN0YXR1c2VzIix7Li4ucyxzY2hlZHVsZWRFbTphLGNvdW50Omkuc2l6ZX0pKX12YXIgUXM9W3tpbnN0cnVjdGlvbjoiUHJpb3JpdGl6ZSB0YXNrcyB0aGF0IGRpcmVjdGx5IGFkdmFuY2UgdGhlIHVzZXIncyBxdWFydGVybHkgcGxhbiBhbmQgc3RhdGVkIGdvYWxzLiBTZXF1ZW5jZSB0aGUgaGlnaGVzdC1sZXZlcmFnZSBnb2FsIHdvcmsgaW50byB0aGUgbW9zdCBwcm9kdWN0aXZlIHBhcnRzIG9mIHRoZSBkYXkgc28gbWVhc3VyYWJsZSBwcm9ncmVzcyBpcyBtYWRlLiIsa2V5OiJnb2FsLXByb2dyZXNzIixsYWJlbDoiR29hbCBwcm9ncmVzcyJ9LHtiYXJuYWNsZTohMCxpbnN0cnVjdGlvbjoiUHJpb3JpdGl6ZSAnYmFybmFjbGUnIHRhc2tzIFx1MjAxNCB0YXNrcyB0aGF0IGhhdmUgbGluZ2VyZWQgb24gdGhlIHRvLWRvIGxpc3QgZm9yIGFuIHVudXN1YWxseSBsb25nIHRpbWUuIFN0cm9uZ2x5IHByZWZlciB0YXNrcyBkcmF3biBmcm9tIG5vdGVzIHRoYXQgY2FycnkgaHVuZHJlZHMgb2Ygb3BlbiB0YXNrcywgYmVjYXVzZSB0aG9zZSBsYXJnZSBiYWNrbG9ncyBhcmUgd2hlcmUgYmFybmFjbGVzIGFjY3VtdWxhdGUuIFRoZSBnb2FsIG9mIHRvZGF5IGlzIHRvIGZpbmFsbHkgY2xlYXIgbG9uZy1zdGFsZSBvYmxpZ2F0aW9ucy4iLGtleToiYmFybmFjbGUtY2xlYW51cCIsbGFiZWw6IkJhcm5hY2xlIGNsZWFudXAifSx7aW5zdHJ1Y3Rpb246IkFzc3VtZSB0aGUgdXNlciBoYXMgbG93IGVuZXJneSB0b2RheS4gRmF2b3IgbGlnaHQsIHNob3J0LCBsb3ctY29nbml0aXZlLWxvYWQgdGFza3M7IGF2b2lkIGRlbWFuZGluZyBkZWVwLWZvY3VzIHdvcmssIGFuZCBrZWVwIGFjdGl2aXRpZXMgYnJpZWYgd2l0aCBnZW5lcm91cyByZWNvdmVyeSBicmVha3MgYmV0d2VlbiB0aGVtLiIsa2V5OiJsb3ctZW5lcmd5IixsYWJlbDoiTG93IGVuZXJneSJ9LHtpbnN0cnVjdGlvbjoiUHJpb3JpdGl6ZSB0YXNrcyB3aG9zZSBwYXlvZmYgY29tcG91bmRzIG92ZXIgdGhlIGxvbmcgdGVybSBcdTIwMTQgbGVhcm5pbmcsIHN5c3RlbXMsIGF1dG9tYXRpb24sIGRvY3VtZW50YXRpb24sIGFuZCByZWxhdGlvbnNoaXBzIFx1MjAxNCBldmVuIHdoZW4gdGhleSBmZWVsIGxlc3MgdXJnZW50IHRoYW4gdG9kYXkncyBub2lzZS4iLGtleToibG9uZy10ZXJtLWJlbmVmaXQiLGxhYmVsOiJMb25nLXRlcm0gYmVuZWZpdCJ9LHtpbnN0cnVjdGlvbjoiUHJpb3JpdGl6ZSB0YXNrcyB0aGUgdXNlciBpcyBtb3N0IGxpa2VseSB0byBmaW5kIGVuZXJnaXppbmcgYW5kIGVuam95YWJsZS4gU2VxdWVuY2UgdGhlIGRheSB0byBzdXN0YWluIG1vdGl2YXRpb24gYW5kIHBvc2l0aXZlIG1vbWVudHVtLCBmcm9udC1sb2FkaW5nIGEgc2F0aXNmeWluZyBlYXJseSB3aW4uIixrZXk6ImhhcHBpbmVzcy1tYXhpbWl6ZXIiLGxhYmVsOiJIYXBwaW5lc3MgbWF4aW1pemVyIn1dLEIxPVFzWzBdLmtleTtmdW5jdGlvbiBIMShlKXtyZXR1cm4gUXMuZmluZCh0PT50LmtleT09PWUpfHxRc1swXX12YXIgc1A9MjAwLGxQPTFlMyxkUD0zMCxjUD0yMDAsU2g9MWUxMCxFaD0yNCo2MCo2MCoxZTMsSzE9NjAsdVA9NjAscFA9NGUzLGoxPTYwLGZQPTIwMCxtUD00MDEsaFA9NDAzLGdQPTE2LHlQPTE4LFkxPTYwLHZQPTMwLEcxPSJEYXNoYm9hcmQgdHJhdmVsIHJlY29tbWVuZGF0aW9ucyIsYlA9MCx3UD02LGtQPTUseFA9Mjthc3luYyBmdW5jdGlvbiBxMShlLHthaU1vZGVsT3ZlcnJpZGU6dD1udWxsLGNhbGVuZGFyRXZlbnRzOm49bnVsbCxmb3JjZVJlZ2VuZXJhdGU6cj0hMSxub3c6bz1udWxsLG9ibGlnYXRpb25zOmE9W10scHJpb3JpdHlLZXk6aT1udWxsLHByb3ZpZGVyRW1PdmVycmlkZTpzPW51bGwsdGFyZ2V0RGF0ZTpsPW51bGx9PXt9KXtsZXQgZD1vfHxuZXcgRGF0ZSxjPWw/WHIobCk6TmgoZCksdT1jLnRvTG9jYWxlRGF0ZVN0cmluZyhbXSx7d2Vla2RheToibG9uZyIsbW9udGg6ImxvbmciLGRheToibnVtZXJpYyIseWVhcjoibnVtZXJpYyJ9KSxwPVRQKGMsZCksZj0hJDEoYyxkKSx5PWY/bnVsbDpkLmdldEhvdXJzKCkqWTErZC5nZXRNaW51dGVzKCksdj1IMShpKSx3PSRQKHMpLGc9YXdhaXQgX1AoZSksaD1hd2FpdCBOYyhlLHtjYWxlbmRhckV2ZW50czpuLGRvbWFpblV1aWQ6Zyx0YXJnZXREYXRlOmN9KTtpZihrKCJbcHJvcG9zZWQtYWdlbmRhXSBnZW5lcmF0ZVByb3Bvc2VkQWdlbmRhIGVudHJ5Iix7ZGF0ZUxhYmVsOnUsZGF5V29yZDpwLGlzRnV0dXJlRGF5OmYsbm93TWludXRlczp5LHByaW9yaXR5OnYua2V5LG9ibGlnYXRpb25Db3VudDphLmxlbmd0aCxwcm92aWRlckVtOncsZm9yY2VSZWdlbmVyYXRlOnIscmVjb21tZW5kYXRpb25GaW5nZXJwcmludDpoLmZpbmdlcnByaW50fSksIXIpe2xldCBtPWF3YWl0IHoxKGUse3JlY29tbWVuZGF0aW9uQ29udGV4dEtleTpoLmNhY2hlS2V5LGRhdGU6Yyxwcmlvcml0eUtleTp2LmtleSxwcm92aWRlckVtOnd9KS5jYXRjaChTPT4oaygiW3Byb3Bvc2VkLWFnZW5kYV0gY2FjaGUgbG9va3VwIGZhaWxlZCIsUz8ubWVzc2FnZSksbnVsbCkpO2lmKG0pcmV0dXJuIFNQKGUse2FpTW9kZWxPdmVycmlkZTp0LGNhY2hlZDptLGRhdGVMYWJlbDp1LGRheVdvcmQ6cCxpc0Z1dHVyZURheTpmLGRvbWFpblV1aWQ6Zyxub3dNaW51dGVzOnksb2JsaWdhdGlvbnM6YSxwcmlvcml0eU9wdGlvbjp2LHByb3ZpZGVyRW06dyxwcm92aWRlckVtT3ZlcnJpZGU6cyxyZWNvbW1lbmRhdGlvbkNvbnRleHQ6aCx0YXJnZXREYXRlOmN9KX1sZXQgYj1hd2FpdCBYMShlLHthaU1vZGVsT3ZlcnJpZGU6dCxkYXRlTGFiZWw6dSxkYXlXb3JkOnAsaXNGdXR1cmVEYXk6Zixub3dNaW51dGVzOnksZG9tYWluVXVpZDpnLG9ibGlnYXRpb25zOmEscHJpb3JpdHlPcHRpb246dixwcm92aWRlckVtT3ZlcnJpZGU6cyxyZWNvbW1lbmRhdGlvbkNvbnRleHQ6aCx0YXJnZXREYXRlOmN9KTtyZXR1cm4hYi5lcnJvciYmQXJyYXkuaXNBcnJheShiLmFjdGl2aXRpZXMpJiZiLmFjdGl2aXRpZXMubGVuZ3RoPjAmJmF3YWl0IGtoKGUse2FjdGl2aXRpZXM6Yi5hY3Rpdml0aWVzLGRhdGU6YyxsbG1BdHRyaWJ1dGlvbkZvb3RlcjpiLmxsbUF0dHJpYnV0aW9uRm9vdGVyLHByaW9yaXR5S2V5OnYua2V5LHByb3ZpZGVyRW06dyxyZWNvbW1lbmRhdGlvbkNvbnRleHRLZXk6aC5jYWNoZUtleX0pLmNhdGNoKG09PmsoIltwcm9wb3NlZC1hZ2VuZGFdIGZhaWxlZCB0byBzdG9yZSByZWNvcmQiLG0/Lm1lc3NhZ2UpKSx7Li4uYixmcm9tQ2FjaGU6ITEscHJvdmlkZXJFbTp3fX1hc3luYyBmdW5jdGlvbiBYMShlLHthaU1vZGVsT3ZlcnJpZGU6dCxkYXRlTGFiZWw6bixkYXlXb3JkOnIsZG9tYWluVXVpZDpvLGlzRnV0dXJlRGF5OmEsbm93TWludXRlczppLG9ibGlnYXRpb25zOnMscHJpb3JpdHlPcHRpb246bCxwcm92aWRlckVtT3ZlcnJpZGU6ZCxyZWNvbW1lbmRhdGlvbkNvbnRleHQ6Yyx0YXJnZXREYXRlOnV9KXtsZXQgcD1hd2FpdCBDUChlLGwsdSxvKSxmPWF3YWl0IFVQKGUpO3JldHVybiBrKCJbcHJvcG9zZWQtYWdlbmRhXSBjb250ZXh0IGxvYWRlZCIse3Rhc2tDb3VudDpwLmxlbmd0aCxxdWFydGVybHlDaGFyczpmPy5sZW5ndGg/PzB9KSxwLmxlbmd0aD09PTAmJiFEYyhjKT97YWN0aXZpdGllczpbXSxlcnJvcjoiTm8gdGFza3MgZm91bmQgYXZhaWxhYmxlIHRvIHNjaGVkdWxlIGluIFRhc2sgRG9tYWluLiIsZXJyb3JDb2RlOiJub190YXNrcyJ9OkZQKGUse2FpTW9kZWxPdmVycmlkZTp0LGRhdGVMYWJlbDpuLGRheVdvcmQ6cixpc0Z1dHVyZURheTphLG5vd01pbnV0ZXM6aSxvYmxpZ2F0aW9uczpzLHByaW9yaXR5T3B0aW9uOmwscHJvdmlkZXJFbU92ZXJyaWRlOmQscXVhcnRlcmx5Q29udGVudDpmLHJlY29tbWVuZGF0aW9uQ29udGV4dDpjLHRhcmdldERhdGU6dSx0YXNrczpwfSl9YXN5bmMgZnVuY3Rpb24gU1AoZSx7YWlNb2RlbE92ZXJyaWRlOnQsY2FjaGVkOm4sZGF0ZUxhYmVsOnIsZGF5V29yZDpvLGlzRnV0dXJlRGF5OmEsbm93TWludXRlczppLGRvbWFpblV1aWQ6cyxvYmxpZ2F0aW9uczpsLHByaW9yaXR5T3B0aW9uOmQscHJvdmlkZXJFbTpjLHByb3ZpZGVyRW1PdmVycmlkZTp1LHJlY29tbWVuZGF0aW9uQ29udGV4dDpwLHRhcmdldERhdGU6Zn0pe2xldCB5PWF3YWl0IEVQKGUsbi5hY3Rpdml0aWVzKTtpZih5LnNpemU9PT0wKXJldHVybnthY3Rpdml0aWVzOm4uYWN0aXZpdGllcyxkYXRlTGFiZWw6cixkYXlXb3JkOm8saXNGdXR1cmVEYXk6YSxkaXNtaXNzZWRLZXlzOm4uZGlzbWlzc2VkS2V5cyxmcm9tQ2FjaGU6ITAsbGxtQXR0cmlidXRpb25Gb290ZXI6bi5sbG1BdHRyaWJ1dGlvbkZvb3Rlcixwcm92aWRlckVtOmMsc2NoZWR1bGVkS2V5czpuLnNjaGVkdWxlZEtleXN9O2xldCB2PW4uYWN0aXZpdGllcy5maWx0ZXIoUz0+IShTLnRhc2tVdWlkJiZ5LmhhcyhTLnRhc2tVdWlkKSkpLHc9bi5hY3Rpdml0aWVzLmZpbHRlcihTPT5TLnRhc2tVdWlkJiZ5LmhhcyhTLnRhc2tVdWlkKSk7aygiW3Byb3Bvc2VkLWFnZW5kYV0gcmVjb25jaWxlOiBkcm9wcGluZyBjb21wbGV0ZWQvcmVtb3ZlZCBzdWdnZXN0aW9ucywgcmUtcXVlcnlpbmcgcmVwbGFjZW1lbnRzIix7c3RhbGVDb3VudDp3Lmxlbmd0aCxrZXB0Q291bnQ6di5sZW5ndGh9KTtsZXQgZz1hd2FpdCBYMShlLHthaU1vZGVsT3ZlcnJpZGU6dCxkYXRlTGFiZWw6cixkYXlXb3JkOm8saXNGdXR1cmVEYXk6YSxub3dNaW51dGVzOmksZG9tYWluVXVpZDpzLG9ibGlnYXRpb25zOmwscHJpb3JpdHlPcHRpb246ZCxwcm92aWRlckVtT3ZlcnJpZGU6dSxyZWNvbW1lbmRhdGlvbkNvbnRleHQ6cCx0YXJnZXREYXRlOmZ9KSxoPU5QKGcsdix5LHcpLGI9Wy4uLnYsLi4uaF0uc29ydCgoUyx4KT0+Uy5zdGFydE1pbnV0ZXMteC5zdGFydE1pbnV0ZXMpLG09bi5sbG1BdHRyaWJ1dGlvbkZvb3Rlcnx8Zy5sbG1BdHRyaWJ1dGlvbkZvb3Rlcnx8bnVsbDtyZXR1cm4gYXdhaXQga2goZSx7YWN0aXZpdGllczpiLGRhdGU6ZixsbG1BdHRyaWJ1dGlvbkZvb3RlcjptLHByaW9yaXR5S2V5OmQua2V5LHByb3ZpZGVyRW06YyxyZWNvbW1lbmRhdGlvbkNvbnRleHRLZXk6cC5jYWNoZUtleX0pLHthY3Rpdml0aWVzOmIsZGF0ZUxhYmVsOnIsZGF5V29yZDpvLGlzRnV0dXJlRGF5OmEsZnJvbUNhY2hlOiEwLGxsbUF0dHJpYnV0aW9uRm9vdGVyOm0scHJvdmlkZXJFbTpjLGRpc21pc3NlZEtleXM6Yi5maWx0ZXIoUz0+Uy5zY2hlZHVsZWRFbT09PVZ0LkRJU01JU1NFRCkubWFwKGdpKSxzY2hlZHVsZWRLZXlzOmIuZmlsdGVyKFM9PlMuc2NoZWR1bGVkRW09PT1WdC5TQ0hFRFVMRUQpLm1hcChnaSl9fWFzeW5jIGZ1bmN0aW9uIEVQKGUsdCl7aWYodHlwZW9mIGUuZ2V0VGFzayE9ImZ1bmN0aW9uIilyZXR1cm4gbmV3IFNldDtsZXQgbj0odHx8W10pLmZpbHRlcihvPT5vLnRhc2tVdWlkJiZvLmlzRXhpc3RpbmcmJihvLnNjaGVkdWxlZEVtfHxWdC5QRU5ESU5HKT09PVZ0LlBFTkRJTkcpLHI9YXdhaXQgUHJvbWlzZS5hbGwobi5tYXAoYXN5bmMgbz0+e2xldCBhPWF3YWl0IFByb21pc2UucmVzb2x2ZShlLmdldFRhc2soby50YXNrVXVpZCkpO3JldHVybiFhfHwhIWEuY29tcGxldGVkQXR8fCEhYS5kaXNtaXNzZWRBdD9vLnRhc2tVdWlkOm51bGx9KSk7cmV0dXJuIG5ldyBTZXQoci5maWx0ZXIoQm9vbGVhbikpfWZ1bmN0aW9uIE5QKGUsdCxuLHIpe2lmKGUuZXJyb3J8fCFBcnJheS5pc0FycmF5KGUuYWN0aXZpdGllcyl8fGUuYWN0aXZpdGllcy5sZW5ndGg9PT0wKXJldHVybltdO2xldCBvPW5ldyBTZXQodC5maWx0ZXIoaT0+aS50YXNrVXVpZCkubWFwKGk9PmkudGFza1V1aWQpKSxhPVtdO2ZvcihsZXQgaSBvZiByKXtsZXQgcz1lLmFjdGl2aXRpZXMuZmluZChsPT5sLnRhc2tVdWlkJiYhby5oYXMobC50YXNrVXVpZCkmJiFuLmhhcyhsLnRhc2tVdWlkKSk7aWYoIXMpYnJlYWs7by5hZGQocy50YXNrVXVpZCksYS5wdXNoKHtkdXJhdGlvbk1pbnV0ZXM6aS5kdXJhdGlvbk1pbnV0ZXN8fDAsaXNFeGlzdGluZzohMCxub3RlVXVpZDpzLm5vdGVVdWlkfHxudWxsLHJlYXNvbjpzLnJlYXNvbnx8IiIsc2NoZWR1bGVkRW06VnQuUEVORElORyxzb3VyY2U6InByb3Bvc2VkIixzdGFydE1pbnV0ZXM6aS5zdGFydE1pbnV0ZXMsc3RhcnRUaW1lOmkuc3RhcnRUaW1lLHRhcmdldE1pZG5pZ2h0U2Vjb25kczppLnRhcmdldE1pZG5pZ2h0U2Vjb25kcz8/bnVsbCx0YXNrVXVpZDpzLnRhc2tVdWlkLHRpdGxlOnMudGl0bGV9KX1yZXR1cm4gYX1mdW5jdGlvbiBUUChlLHQ9bmV3IERhdGUpe2xldCBuPW5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCksMCwwLDApLHI9TWF0aC5yb3VuZCgoZS5nZXRUaW1lKCktbi5nZXRUaW1lKCkpL0VoKTtyZXR1cm4gcjw9MD8idG9kYXkiOnI9PT0xPyJ0b21vcnJvdyI6YG9uICR7ZS50b0xvY2FsZURhdGVTdHJpbmcoW10se3dlZWtkYXk6ImxvbmcifSl9YH1mdW5jdGlvbiBOaChlPW5ldyBEYXRlKXtsZXQgdD1lLmdldEhvdXJzKCk+PWdQPzE6MCxuPW5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSxlLmdldE1vbnRoKCksZS5nZXREYXRlKCkrdCwwLDAsMCk7cmV0dXJuIERQKG4pfWZ1bmN0aW9uIERQKGUpe2xldCB0PWUuZ2V0RGF5KCksbj10PT09d1A/Mjp0PT09YlA/MTowO3JldHVybiBuPT09MD9lOm5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSxlLmdldE1vbnRoKCksZS5nZXREYXRlKCkrbiwwLDAsMCl9ZnVuY3Rpb24gJDEoZSx0KXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpPT09dC5nZXRGdWxsWWVhcigpJiZlLmdldE1vbnRoKCk9PT10LmdldE1vbnRoKCkmJmUuZ2V0RGF0ZSgpPT09dC5nZXREYXRlKCl9ZnVuY3Rpb24gQVAoZSx0KXtsZXQgbj1WMSh0LC0xKSxyPVtdO2ZvcihsZXQgYT0xO2E8a1A7YSs9MSlyLnB1c2goVjEodCwtYSkpO2xldCBvPW5ldyBTZXQ7Zm9yKGxldFthLGldb2YgZSl7aWYoaS5oYXMobikpe28uYWRkKGEpO2NvbnRpbnVlfXIuZmlsdGVyKHM9PmkuaGFzKHMpKS5sZW5ndGg+PXhQJiZvLmFkZChhKX1yZXR1cm4gb31mdW5jdGlvbiBWMShlLHQpe3JldHVybiBpZShuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLGUuZ2V0RGF0ZSgpK3QsMCwwLDApKX1hc3luYyBmdW5jdGlvbiBDUChlLHQsbixyPW51bGwpe2xldCBvPWF3YWl0IEZuKGUsciksYT0oQXJyYXkuaXNBcnJheShvKT9vOltdKS5maWx0ZXIoeT0+eSYmIXkuY29tcGxldGVkQXQmJiF5LmRpc21pc3NlZEF0KSxpPU9QKGEpLHM9YS5zbGljZSgpLnNvcnQoKHksdik9PnpjKHYpLXpjKHkpKSxsPU1hdGguZmxvb3IoKERhdGUubm93KCktZFAqRWgpLzFlMyksZD1zLmZpbHRlcih5PT56Yyh5KT49bCksYz1NYXRoLm1pbihsUCxNYXRoLm1heChkLmxlbmd0aCxzUCkpLHU9dD8uYmFybmFjbGU/SVAoYSxpKTpzLHA9cy5maWx0ZXIoeT0+SjEoeSxuKSksZj1NUChbLi4udS5zbGljZSgwLGMpLC4uLnBdKTtyZXR1cm4gaygiW3Byb3Bvc2VkLWFnZW5kYV0gX3NlbGVjdFJlbGV2YW50VGFza3MiLHtiYXJuYWNsZTohIXQ/LmJhcm5hY2xlLGRvbWFpblV1aWQ6cixvcGVuVGFza0NvdW50OmEubGVuZ3RoLHJlY2VudFdpbmRvd0NvdW50OmQubGVuZ3RoLHNjaGVkdWxlZE9uVGFyZ2V0Q291bnQ6cC5sZW5ndGgsc2VsZWN0ZWRDb3VudDpmLmxlbmd0aH0pLGYubWFwKHk9PlJQKHksaSxuKSkuZmlsdGVyKEJvb2xlYW4pfWZ1bmN0aW9uIE1QKGUpe2xldCB0PW5ldyBTZXQ7cmV0dXJuIGUuZmlsdGVyKG49PiFuPy51dWlkfHx0LmhhcyhuLnV1aWQpPyExOih0LmFkZChuLnV1aWQpLCEwKSl9ZnVuY3Rpb24gSjEoZSx0KXtpZighZT8uc3RhcnRBdClyZXR1cm4hMTtsZXQgbj1lLnN0YXJ0QXQ8U2g/ZS5zdGFydEF0KjFlMzplLnN0YXJ0QXQ7cmV0dXJuICQxKG5ldyBEYXRlKG4pLHQpfWZ1bmN0aW9uIE9QKGUpe2xldCB0PW5ldyBNYXA7Zm9yKGxldCBuIG9mIGUpe2xldCByPW4ubm90ZVVVSUR8fG51bGw7ciYmdC5zZXQociwodC5nZXQocil8fDApKzEpfXJldHVybiB0fWZ1bmN0aW9uIElQKGUsdCl7bGV0IG49cj0+KHQuZ2V0KHIubm90ZVVVSUR8fCIiKXx8MCkqMWU2LXpjKHIpLzFlNDtyZXR1cm4gZS5zbGljZSgpLnNvcnQoKHIsbyk9Pm4obyktbihyKSl9ZnVuY3Rpb24gUlAoZSx0LG4pe2xldCByPVN0cmluZyhlLmNvbnRlbnR8fCIiKS5yZXBsYWNlKC9ccysvZywiICIpLnRyaW0oKS5zdWJzdHJpbmcoMCxjUCk7aWYoIXJ8fCFlLnV1aWQpcmV0dXJuIG51bGw7bGV0IG89ZS5ub3RlVVVJRHx8bnVsbDtyZXR1cm57YWdlRGF5czpQUChlKSxkdXJhdGlvbjplLmR1cmF0aW9uPz9udWxsLGltcG9ydGFudDohIWUuaW1wb3J0YW50LG5vdGVPcGVuQ291bnQ6byYmdC5nZXQobyl8fDAsbm90ZVV1aWQ6byxzY2hlZHVsZWRPblRhcmdldDpKMShlLG4pLHRhc2tUZXh0OnIsdGFza1V1aWQ6ZS51dWlkfX1mdW5jdGlvbiBQUChlKXtsZXQgdD1MUChlPy5jcmVhdGVkQXQpO3JldHVybiB0P01hdGgubWF4KDAsTWF0aC5mbG9vcigoRGF0ZS5ub3coKS8xZTMtdCkvKEVoLzFlMykpKTpudWxsfWZ1bmN0aW9uIExQKGUpe3JldHVybiBlP2U8U2g/ZTpNYXRoLmZsb29yKGUvMWUzKTowfWZ1bmN0aW9uIHpjKGUpe2xldCB0PWU/LnVwZGF0ZWRBdD8/ZT8uc3RhcnRBdD8/ZT8uY3JlYXRlZEF0Pz8wO3JldHVybiB0P3Q8U2g/dDpNYXRoLmZsb29yKHQvMWUzKTowfWFzeW5jIGZ1bmN0aW9uIF9QKGUpe2xldCB0PUxlKClbQi5UQVNLX0RPTUFJTlNdLG49dD9KU09OLnBhcnNlKHQpOnt9O2lmKG4uc2VsZWN0ZWREb21haW5VdWlkKXJldHVybiBuLnNlbGVjdGVkRG9tYWluVXVpZDtsZXQgcj1hd2FpdCBlLmdldFRhc2tEb21haW5zKCkuY2F0Y2goKCk9Pm51bGwpO2lmKCFBcnJheS5pc0FycmF5KHIpfHxyLmxlbmd0aD09PTApcmV0dXJuIG51bGw7bGV0IG89ci5maW5kKGE9PmEubmFtZT09PSJXb3JrIik7cmV0dXJuIG8/by51dWlkOnJbMF0udXVpZH1hc3luYyBmdW5jdGlvbiBVUChlKXtsZXQgdD1gJHtQcygpLmxhYmVsfSBQbGFuYCxyPShhd2FpdCBhcihlLmZpbHRlck5vdGVzKHtxdWVyeTp0fSkpKS5maW5kKGE9PmEubmFtZT09PXQpO2lmKCFyKXJldHVybiBudWxsO2xldCBvPWF3YWl0IGUuZ2V0Tm90ZUNvbnRlbnQoe3V1aWQ6ci51dWlkfSk7cmV0dXJuIG8/by5zdWJzdHJpbmcoMCxwUCk6bnVsbH1hc3luYyBmdW5jdGlvbiBGUChlLHthaU1vZGVsT3ZlcnJpZGU6dCxkYXRlTGFiZWw6bixkYXlXb3JkOnIsaXNGdXR1cmVEYXk6byxub3dNaW51dGVzOmE9bnVsbCxvYmxpZ2F0aW9uczppPVtdLHByaW9yaXR5T3B0aW9uOnMscHJvdmlkZXJFbU92ZXJyaWRlOmwscXVhcnRlcmx5Q29udGVudDpkLHJlY29tbWVuZGF0aW9uQ29udGV4dDpjLHRhcmdldERhdGU6dSx0YXNrczpwfSl7bGV0IGY9bHx8TGUoKVtCLkxMTV9QUk9WSURFUl9NT0RFTF07aWYoISghIWYmJmYhPT0ibm9uZSIpJiYhYXdhaXQgZS5maW5kTm90ZSh7bmFtZTpTcn0pKXJldHVybnthY3Rpdml0aWVzOltdLGVycm9yOiJObyBBSSBwcm92aWRlciBjb25maWd1cmVkLiBQbGVhc2Ugc2VsZWN0IGEgcHJvdmlkZXIgaW4gcGx1Z2luIHNldHRpbmdzLiIsZXJyb3JDb2RlOiJub19wcm92aWRlcl9jb25maWd1cmVkIn07bGV0IHY9bmV3IFNldChbLi4uaS5tYXAoTz0+Ty50YXNrVXVpZCkuZmlsdGVyKEJvb2xlYW4pLC4uLnAuZmlsdGVyKE89Pk8uc2NoZWR1bGVkT25UYXJnZXQpLm1hcChPPT5PLnRhc2tVdWlkKV0pLHc9YXdhaXQgRjEoZSx7ZGF0ZTp1fSkuY2F0Y2goTz0+KGsoIltwcm9wb3NlZC1hZ2VuZGFdIHJlY2VudC1oaXN0b3J5IGxvb2t1cCBmYWlsZWQiLE8/Lm1lc3NhZ2UpLG5ldyBNYXApKSxnPUFQKHcsdSksaD1uZXcgU2V0KFsuLi52LC4uLmddKSxiPXAuZmlsdGVyKE89PiFoLmhhcyhPLnRhc2tVdWlkKSk7Yi5sZW5ndGg9PT0wJiZnLnNpemU+MCYmKGI9cC5maWx0ZXIoTz0+IXYuaGFzKE8udGFza1V1aWQpKSxrKCJbcHJvcG9zZWQtYWdlbmRhXSByZWNlbmN5IGV4Y2x1c2lvbnMgZW1wdGllZCB0aGUgY2FuZGlkYXRlIHBvb2w7IHJlbGF4ZWQgdG8gc2NoZWR1bGVkLW9ubHkiKSksaygiW3Byb3Bvc2VkLWFnZW5kYV0gZXhjbHVkZWQgYWxyZWFkeS1zY2hlZHVsZWQgKyByZWNlbnRseS1wcm9wb3NlZCB0YXNrcyBmcm9tIGNhbmRpZGF0ZXMiLHtjYW5kaWRhdGVDb3VudDpwLmxlbmd0aCxwcm9wb3NhYmxlQ291bnQ6Yi5sZW5ndGgsYWxyZWFkeVNjaGVkdWxlZENvdW50OnYuc2l6ZSxyZWNlbnRseVByb3Bvc2VkQ291bnQ6Zy5zaXplfSk7bGV0IG09RGMoYyksUz16UCh7ZGF0ZUxhYmVsOm4saXNGdXR1cmVEYXk6byxub3dNaW51dGVzOmEsb2JsaWdhdGlvbnM6aSxwcmlvcml0eU9wdGlvbjpzLHF1YXJ0ZXJseUNvbnRlbnQ6ZCxyZWNvbW1lbmRhdGlvbkNvbnRleHQ6Yyx0YXJnZXREYXRlOnUsdGFza3M6YixhbGxvd0ludmVudGVkVHJhdmVsQWN0aXZpdGllczptfSkseD1wZXJmb3JtYW5jZS5ub3coKSxFO3RyeXtrKCJbcHJvcG9zZWQtYWdlbmRhXSBzZW5kaW5nIHByb21wdCB0byBMTE0sIGxlbmd0aDoiLFMubGVuZ3RoKTtsZXR7YWlNb2RlbDpPLGFwaUtleTpSLGpzb25SZXNwb25zZTpGLHRpbWVvdXRTZWNvbmRzOlZ9PVoxKGwsdCk7RT1hd2FpdCBFYyhlLFMse2FpTW9kZWw6TyxhcGlLZXk6Uixqc29uUmVzcG9uc2U6Rix0aW1lb3V0U2Vjb25kczpWfSksaygiW3Byb3Bvc2VkLWFnZW5kYV0gTExNIHJldHVybmVkIix7ZHVyYXRpb25NczpOdW1iZXIoKHBlcmZvcm1hbmNlLm5vdygpLXgpLnRvRml4ZWQoMSkpLGFjdGl2aXR5Q291bnQ6QXJyYXkuaXNBcnJheShFPy5hY3Rpdml0aWVzKT9FLmFjdGl2aXRpZXMubGVuZ3RoOm51bGx9KX1jYXRjaChPKXtrKCJbcHJvcG9zZWQtYWdlbmRhXSBMTE0gY2FsbCB0aHJldyIse21lc3NhZ2U6Tz8ubWVzc2FnZSxzdGF0dXM6Tz8ucmVzcG9uc2U/LnN0YXR1c30pO2xldCBSPU8ucmVzcG9uc2U/LnN0YXR1cztyZXR1cm4gUj09PW1QfHxSPT09aFA/e2FjdGl2aXRpZXM6W10sZXJyb3I6IlRoZSBBUEkga2V5IGFwcGVhcnMgdG8gYmUgaW52YWxpZCBvciB1bmF1dGhvcml6ZWQuIixlcnJvckNvZGU6ImludmFsaWRfYXBpX2tleSJ9OnthY3Rpdml0aWVzOltdLGVycm9yOmBMTE0gcmVxdWVzdCBmYWlsZWQgKCR7Ty5tZXNzYWdlfHwidW5rbm93biBlcnJvciJ9KS5gLGVycm9yQ29kZToibGxtX2Vycm9yIixlcnJvckRldGFpbDpPLm1lc3NhZ2V8fG51bGx9fWlmKCFFfHwhQXJyYXkuaXNBcnJheShFLmFjdGl2aXRpZXMpKXtsZXQgTz1FP0pTT04uc3RyaW5naWZ5KEUpLnN1YnN0cmluZygwLGZQKToiZW1wdHkgcmVzcG9uc2UiO3JldHVybnthY3Rpdml0aWVzOltdLGVycm9yOiJVbmFibGUgdG8gcHJvY2VzcyB0aGUgQUkgcHJvdmlkZXIncyByZXNwb25zZSBpbnRvIGEgc2NoZWR1bGUuIixlcnJvckNvZGU6InBhcnNlX2Vycm9yIixlcnJvckRldGFpbDpPfX1sZXQgVD1uZXcgU2V0KGIubWFwKE89Pk8udGFza1V1aWQpKSxBPW5ldyBNYXAoYi5tYXAoTz0+W08udGFza1V1aWQsTy5ub3RlVXVpZF0pKSxDPVlQKGMpO3JldHVybnthY3Rpdml0aWVzOldQKEUuYWN0aXZpdGllcyxULEEsdSx7YWxsb3dJbnZlbnRlZFRyYXZlbEFjdGl2aXRpZXM6bSxpbnZlbnRlZE5vdGVVdWlkOkMsbm93TWludXRlczphLG9ibGlnYXRpb25zOml9KSxkYXRlTGFiZWw6bixkYXlXb3JkOnIsaXNGdXR1cmVEYXk6byxsbG1BdHRyaWJ1dGlvbkZvb3RlcjpKUChsKX19ZnVuY3Rpb24gelAoe2FsbG93SW52ZW50ZWRUcmF2ZWxBY3Rpdml0aWVzOmU9ITEsZGF0ZUxhYmVsOnQsaXNGdXR1cmVEYXk6bixub3dNaW51dGVzOnI9bnVsbCxvYmxpZ2F0aW9uczpvPVtdLHByaW9yaXR5T3B0aW9uOmEscXVhcnRlcmx5Q29udGVudDppLHJlY29tbWVuZGF0aW9uQ29udGV4dDpzLHRhcmdldERhdGU6bCx0YXNrczpkfSl7bGV0IGM9bC50b0xvY2FsZURhdGVTdHJpbmcoW10se3dlZWtkYXk6ImxvbmcifSksdT1uPyIgVGhpcyBhZ2VuZGEgaXMgZm9yIGFuIHVwY29taW5nIGRheSByYXRoZXIgdGhhbiB0b2RheSwgc28gcGxhbiBpdCBhcyBhIGZyZXNoIHN0YXJ0IHRvIHRoYXQgZGF5LiI6IiIscD1acyh5UCpZMSksZj1gWW91IGFyZSBhIHByb2R1Y3Rpdml0eSBjb2FjaC4gQnVpbGQgYSByZWFsaXN0aWMgaG91ci1ieS1ob3VyIHNjaGVkdWxlIGZvciAke3R9LCB3aGljaCBpcyBhICR7Y30uJHt1fQoKIyMgVG9kYXkncyBwcmlvcml0eQoke2E/Lmluc3RydWN0aW9ufHwiQnVpbGQgYSBiYWxhbmNlZCwgaGlnaC1sZXZlcmFnZSBkYXkuIn0KCiMjIFNjaGVkdWxpbmcgcnVsZXMKLSBUYWtlIHRoZSBkYXkgb2YgdGhlIHdlZWsgaW50byBhY2NvdW50OiAke2N9IG1heSBiZSBhIHdlZWtlbmQgb3IgY2FycnkgZGlmZmVyZW50IHdvcmtpbmcgaG91cnMgYW5kIGVuZXJneSB0aGFuIGEgd2Vla2RheSBcdTIwMTQgcGxhbiBhY2NvcmRpbmdseS4KLSBDb25zaWRlciB3aGV0aGVyICR7dH0gaXMgYSBwdWJsaWMgaG9saWRheSBvciBhIGRheSBwZW9wbGUgY29tbW9ubHkgdGFrZSBvZmY7IGlmIHNvLCBsaWdodGVuIHRoZSBzY2hlZHVsZSBvciBza2lwIHdvcmstZm9jdXNlZCBibG9ja3MgYXMgYXBwcm9wcmlhdGUuCi0gUHJvcG9zZSBzcGVjaWZpYyBjbG9jayB0aW1lcyBpbiAyNC1ob3VyICJISDpNTSIgZm9ybWF0LCBvcmRlcmVkIGNocm9ub2xvZ2ljYWxseSBhY3Jvc3MgYSBub3JtYWwgd29ya2luZyBkYXkuCi0gTGVhdmUgQVQgTEVBU1QgJHtqMX0gbWludXRlcyBvZiB1bnNjaGVkdWxlZCBidWZmZXIgYmV0d2VlbiB0aGUgZW5kIG9mIG9uZSBhY3Rpdml0eSBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0LgotIFdvcmsgQVJPVU5EIHRoZSBhbHJlYWR5LXNjaGVkdWxlZCBvYmxpZ2F0aW9ucyBiZWxvdzogbmV2ZXIgb3ZlcmxhcCB0aGVtIGFuZCBuZXZlciByZS1wcm9wb3NlIHRoZW0uCi0gVGhlIENhbmRpZGF0ZSB0YXNrcyBiZWxvdyBhcmUgTk9UIHlldCBzY2hlZHVsZWQgZm9yICR7dH07IGFueXRoaW5nIGFscmVhZHkgY29tbWl0dGVkIHRvIHRoZSBkYXkgYXBwZWFycyBvbmx5IGluIHRoZSBvYmxpZ2F0aW9ucyBzZWN0aW9uIGFuZCBtdXN0IG5vdCBiZSBwcm9wb3NlZCBhZ2Fpbi4KLSAke2U/IlRyYXZlbC92YWNhdGlvbi9jb25mZXJlbmNlIGFsbC1kYXkgY29udGV4dCBpcyBhY3RpdmU6IHByZWZlciB1c2VmdWwgdHJpcC1hcHByb3ByaWF0ZSBhY3Rpdml0aWVzLCBhbmQgeW91IG1heSByZXR1cm4gbnVsbCB0YXNrVXVpZCBmb3IgaW52ZW50ZWQgbG9jYWwgcmVjb21tZW5kYXRpb25zLiI6Ik9OTFkgcHJvcG9zZSBhY3Rpdml0aWVzIGZvciB0YXNrcyB0aGF0IGFwcGVhciBpbiB0aGUgQ2FuZGlkYXRlIHRhc2tzIEpTT04gYmVsb3cuIn0KLSAke2U/IkZvciBleGlzdGluZyB0YXNrcywgdXNlIHRoZSBleGFjdCB0YXNrVXVpZCBmcm9tIG9uZSBjYW5kaWRhdGUgdGFzay4gRm9yIGludmVudGVkIHRyYXZlbCBhY3Rpdml0aWVzLCBzZXQgdGFza1V1aWQgdG8gbnVsbC4iOidFdmVyeSByZXR1cm5lZCBhY3Rpdml0eSBNVVNUIHVzZSB0aGUgZXhhY3QgInRhc2tVdWlkIiBmcm9tIG9uZSBjYW5kaWRhdGUgdGFzazsgbmV2ZXIgaW52ZW50IHRhc2tzIG9yIFVVSURzLid9Ci0gJHtlPyJEbyBub3QgcHJvcG9zZSBnZW5lcmljIGJyZWFrcywgcGxhbm5pbmcsIG9yIHJldmlldyBibG9ja3M7IGludmVudGVkIG51bGwtVVVJRCBpdGVtcyBzaG91bGQgYmUgY29uY3JldGUgbG9jYWwvdHJhdmVsIGFjdGl2aXRpZXMuIjoiRG8gbm90IHByb3Bvc2UgYnJlYWtzLCBwbGFubmluZywgcmV2aWV3LCBjYWxlbmRhciBibG9ja3MsIG9yIG90aGVyIHN1cHBvcnRpbmcgYWN0aXZpdGllcyB1bmxlc3MgdGhleSBhcmUgY2FuZGlkYXRlIHRhc2tzLiJ9Ci0gRmF2b3IgdGhlIHVzZXIncyAiaW1wb3J0YW50IiB0YXNrcyBhbmQgdGFza3MgdGhhdCBhZHZhbmNlIHRoZSBxdWFydGVybHkgcGxhbiwgd2VpZ2h0ZWQgYnkgdG9kYXkncyBwcmlvcml0eS4KLSBSZXNwZWN0IGVhY2ggdGFzaydzICJkdXJhdGlvbiIgKHNlY29uZHMpIHdoZW4gcHJlc2VudDsgb3RoZXJ3aXNlIGVzdGltYXRlIGEgc2Vuc2libGUgZHVyYXRpb24uCmA7ciE9bnVsbCYmKGYrPWAtIFRoZSBjdXJyZW50IGxvY2FsIHRpbWUgaXMgJHtacyhyKX0uIERvIE5PVCBwcm9wb3NlIGFueSBhY3Rpdml0eSB0aGF0IHN0YXJ0cyBiZWZvcmUgdGhpcyB0aW1lIFx1MjAxNCBvbmx5IHNjaGVkdWxlIHRoZSByZW1haW5pbmcgcGFydCBvZiB0aGUgZGF5LgpgLGYrPWAtIFRoZSB3b3JraW5nIGRheSBlbmRzIGF0ICR7cH0gKDZwbSkuIEtlZXAgcHJvcG9zZWQgYWN0aXZpdGllcyBiZXR3ZWVuIHRoZSBjdXJyZW50IHRpbWUgYW5kICR7cH0uIE9ubHkgcHJvcG9zZSBhY3Rpdml0aWVzIGFmdGVyICR7cH0gaWYgdG9kYXkncyBwcmlvcml0eSBleHBsaWNpdGx5IGNhbGxzIGZvciBhY3Rpdml0aWVzIHRoYXQgbmF0dXJhbGx5IGhhcHBlbiBvdXRzaWRlIG9mIHdvcmsgaG91cnMuCmApO2xldCB5PVZQKG8pO3JldHVybiBmKz1gCiMjIEFscmVhZHkgb2NjdXBpZWQgdGltZXMKYCxmKz1gQWxyZWFkeSBvY2N1cGllZCB0aW1lczogWyAke3kuam9pbigiLCAiKXx8Im5vbmUifSBdLiBFbnN1cmUgdGhhdCB5b3VyIHN1Z2dlc3Rpb25zIGRvIE5PVCBpbmNsdWRlIGFueSB0YXNrIHRoYXQgd291bGQgZmFsbCBpbiB0aGVzZSBhbHJlYWR5LXNjaGVkdWxlZCB0aW1lIHNsb3RzIGZvciB0aGUgZGF5LiBBdHRlbXB0IHRvIGxlYXZlIGF0IGxlYXN0IGEgJHt2UH0gbWludXRlIGJ1ZmZlciBiZXR3ZWVuIHRoZSB1c2VyJ3MgZXZlbnRzIGFuZCB5b3VyIHN1Z2dlc3Rpb25zLgpgLGYrPWAKIyMgQWxyZWFkeS1zY2hlZHVsZWQgb2JsaWdhdGlvbnMgKGltbW92YWJsZTsgZG8gbm90IHJlLXByb3Bvc2UpCmAsZis9by5sZW5ndGg+MD9vLm1hcCh2PT5gLSAke1pzKHYuc3RhcnRNaW51dGVzKX0gJHt2LnRpdGxlfSR7di5kdXJhdGlvbk1pbnV0ZXM/YCAoJHt2LmR1cmF0aW9uTWludXRlc31tKWA6IiJ9YCkuam9pbihgCmApOiJOb25lLiIsZis9YApgLGk/Zis9YAojIyBVc2VyJ3MgUXVhcnRlcmx5IFBsYW4KJHtpfQpgOmYrPWAKIyMgVXNlcidzIFF1YXJ0ZXJseSBQbGFuCk5vIHF1YXJ0ZXJseSBwbGFuIGZvdW5kLgpgLGYrPVRjKHMse2FsbG93SW52ZW50ZWRUcmF2ZWxBY3Rpdml0aWVzOmUsc2NoZWR1bGVNb2RlOiEwfSksZis9YAojIyBDYW5kaWRhdGUgdGFza3MgKEpTT047ICR7ZC5sZW5ndGh9IHRvdGFsKQpgLGYrPWQubGVuZ3RoPjA/ZC5tYXAodj0+SlNPTi5zdHJpbmdpZnkodikpLmpvaW4oYApgKToiTm8gY2FuZGlkYXRlIHRhc2tzLiIsZis9YAoKUmV0dXJuIE9OTFkgdmFsaWQgSlNPTiAobm8gbWFya2Rvd24gZmVuY2VzKSBpbiBleGFjdGx5IHRoaXMgc2hhcGU6CnsiYWN0aXZpdGllcyI6W3sic3RhcnRUaW1lIjoiMDk6MDAiLCJkdXJhdGlvbk1pbnV0ZXMiOjYwLCJ0aXRsZSI6IkFjdGl2aXR5IHRpdGxlIiwidGFza1V1aWQiOiJleGlzdGluZy10YXNrLXV1aWQiLCJyZWFzb24iOiJPbmUgc2VudGVuY2Ugb24gd2h5IHRoaXMgc2xvdCBtYXR0ZXJzIHRvZGF5In1dfQotICJzdGFydFRpbWUiOiAyNC1ob3VyICJISDpNTSIuCi0gImR1cmF0aW9uTWludXRlcyI6IGludGVnZXIgbWludXRlcy4KLSAidGFza1V1aWQiOiAke2U/J3RoZSBleGFjdCAidGFza1V1aWQiIGZyb20gYSBjYW5kaWRhdGUgdGFzaywgb3IgbnVsbCBvbmx5IGZvciBhbiBpbnZlbnRlZCB0cmF2ZWwvdmFjYXRpb24vY29uZmVyZW5jZSBhY3Rpdml0eS4nOid0aGUgZXhhY3QgInRhc2tVdWlkIiBmcm9tIGEgY2FuZGlkYXRlIHRhc2suIEFjdGl2aXRpZXMgd2l0aG91dCBhIGNhbmRpZGF0ZSB0YXNrVXVpZCB3aWxsIGJlIGRpc2NhcmRlZC4nfQotIEtlZXAgdGl0bGVzIGNvbmNpc2UuIFByb3ZpZGUgYmV0d2VlbiA0IGFuZCAxMCBhY3Rpdml0aWVzLmAsZn1mdW5jdGlvbiBXUChlLHQsbixyLHthbGxvd0ludmVudGVkVHJhdmVsQWN0aXZpdGllczpvPSExLGludmVudGVkTm90ZVV1aWQ6YT1udWxsLG5vd01pbnV0ZXM6aT1udWxsLG9ibGlnYXRpb25zOnM9W119PXt9KXtsZXQgbD1NYXRoLmZsb29yKHIuZ2V0VGltZSgpLzFlMyksZD1lLm1hcChjPT57bGV0IHU9R1AoYz8uc3RhcnRUaW1lKSxwPVN0cmluZyhjPy50aXRsZXx8IiIpLnRyaW0oKSxmPUJQKGMsdCx7YWxsb3dJbnZlbnRlZFRyYXZlbEFjdGl2aXRpZXM6b30pO2lmKHU9PW51bGx8fCFwfHxmPT09dm9pZCAwKXJldHVybiBudWxsO2xldCB5PU1hdGgubWF4KDAscGFyc2VJbnQoYz8uZHVyYXRpb25NaW51dGVzLDEwKXx8MCksdj0hIWY7cmV0dXJue2R1cmF0aW9uTWludXRlczp5LGlzRXhpc3Rpbmc6dixub3RlVXVpZDp2P24uZ2V0KGYpfHxudWxsOmEscmVhc29uOlN0cmluZyhjPy5yZWFzb258fCIiKS50cmltKCksc291cmNlOiJwcm9wb3NlZCIsc3RhcnRNaW51dGVzOnUsc3RhcnRUaW1lOlpzKHUpLHRhcmdldE1pZG5pZ2h0U2Vjb25kczpsLHRhc2tVdWlkOmZ8fG51bGwsdGl0bGU6cH19KS5maWx0ZXIoQm9vbGVhbikuc29ydCgoYyx1KT0+Yy5zdGFydE1pbnV0ZXMtdS5zdGFydE1pbnV0ZXMpO3JldHVybiBIUChkLHtlYXJsaWVzdFN0YXJ0Oml8fDAsb2NjdXBpZWRCbG9ja3M6alAocyl9KX1mdW5jdGlvbiBCUChlLHQse2FsbG93SW52ZW50ZWRUcmF2ZWxBY3Rpdml0aWVzOm49ITF9PXt9KXtsZXQgcj10eXBlb2YgZT8udGFza1V1aWQ9PSJzdHJpbmciP2UudGFza1V1aWQudHJpbSgpOiIiO2lmKHImJnQuaGFzKHIpKXJldHVybiByO2lmKCFyJiZuKXJldHVybiBudWxsO2soIltwcm9wb3NlZC1hZ2VuZGFdIGRpc2NhcmRpbmcgTExNIGFjdGl2aXR5IHdpdGhvdXQgZXh0YW50IHRhc2tVdWlkIix7dGFza1V1aWQ6cnx8bnVsbCx0aXRsZTpTdHJpbmcoZT8udGl0bGV8fCIiKS50cmltKCl8fG51bGx9KX1mdW5jdGlvbiBIUChlLHtlYXJsaWVzdFN0YXJ0OnQ9MCxvY2N1cGllZEJsb2NrczpuPVtdfT17fSl7bGV0IHI9W10sbz10O2ZvcihsZXQgYSBvZiBlKXtsZXQgaT1NYXRoLm1heChhLnN0YXJ0TWludXRlcyxvKTtpZihpPUtQKGksYS5kdXJhdGlvbk1pbnV0ZXMsbiksaT49MjQqNjApY29udGludWU7bGV0IHM9ey4uLmEsc3RhcnRNaW51dGVzOmksc3RhcnRUaW1lOlpzKGkpfTtyLnB1c2gocyksbz1pK3MuZHVyYXRpb25NaW51dGVzK2oxfXJldHVybiByfWZ1bmN0aW9uIEtQKGUsdCxuKXtpZighbi5sZW5ndGgpcmV0dXJuIGU7bGV0IHI9TWF0aC5tYXgodCwxKSxvPWUsYT0hMDtmb3IoO2E7KXthPSExO2ZvcihsZXQgaSBvZiBuKW88aS5lbmRNaW51dGVzJiZpLnN0YXJ0TWludXRlczxvK3ImJihvPWkuZW5kTWludXRlcyxhPSEwKX1yZXR1cm4gb31mdW5jdGlvbiBHUChlKXtpZih0eXBlb2YgZSE9InN0cmluZyIpcmV0dXJuIG51bGw7bGV0IHQ9ZS50cmltKCkubWF0Y2goL14oXGR7MSwyfSk6KFxkezJ9KSQvKTtpZighdClyZXR1cm4gbnVsbDtsZXQgbj1wYXJzZUludCh0WzFdLDEwKSxyPXBhcnNlSW50KHRbMl0sMTApO3JldHVybiBuPDB8fG4+MjN8fHI8MHx8cj41OT9udWxsOm4qNjArcn1mdW5jdGlvbiBacyhlKXtsZXQgdD1NYXRoLmZsb29yKGUvNjApLG49ZSU2MDtyZXR1cm5gJHtTdHJpbmcodCkucGFkU3RhcnQoMiwiMCIpfToke1N0cmluZyhuKS5wYWRTdGFydCgyLCIwIil9YH1mdW5jdGlvbiB4aChlKXtsZXQgdD1NYXRoLmZsb29yKGUvNjApJTI0LG49ZSU2MCxyPXQ8MTI/ImFtIjoicG0iO3JldHVybmAke3QlMTI9PT0wPzEyOnQlMTJ9OiR7U3RyaW5nKG4pLnBhZFN0YXJ0KDIsIjAiKX0ke3J9YH1mdW5jdGlvbiBWUChlKXtyZXR1cm4oZXx8W10pLmZpbHRlcih0PT50JiZ0eXBlb2YgdC5zdGFydE1pbnV0ZXM9PSJudW1iZXIiKS5zbGljZSgpLnNvcnQoKHQsbik9PnQuc3RhcnRNaW51dGVzLW4uc3RhcnRNaW51dGVzKS5tYXAodD0+dC5kdXJhdGlvbk1pbnV0ZXM/YCR7eGgodC5zdGFydE1pbnV0ZXMpfS0ke3hoKHQuc3RhcnRNaW51dGVzK3QuZHVyYXRpb25NaW51dGVzKX1gOnhoKHQuc3RhcnRNaW51dGVzKSl9ZnVuY3Rpb24galAoZSl7cmV0dXJuKGV8fFtdKS5maWx0ZXIodD0+dCYmdHlwZW9mIHQuc3RhcnRNaW51dGVzPT0ibnVtYmVyIikubWFwKHQ9Pih7ZW5kTWludXRlczp0LnN0YXJ0TWludXRlcysodC5kdXJhdGlvbk1pbnV0ZXN8fDApLHN0YXJ0TWludXRlczp0LnN0YXJ0TWludXRlc30pKS5zb3J0KCh0LG4pPT50LnN0YXJ0TWludXRlcy1uLnN0YXJ0TWludXRlcyl9ZnVuY3Rpb24gWVAoZSl7cmV0dXJuKGU/LnJlc2VhcmNoTm90ZXN8fFtdKS5maW5kKG49Pm4/LnV1aWQpPy51dWlkfHxudWxsfWZ1bmN0aW9uIHFQKGUsdD1udWxsKXtpZih0IT1udWxsKXJldHVybiB0K2UqSzE7bGV0IG49WHIobmV3IERhdGUpO3JldHVybiBNYXRoLmZsb29yKG4uZ2V0VGltZSgpLzFlMykrZSpLMX1hc3luYyBmdW5jdGlvbiBUaChlLHQsbil7bGV0IHI9cVAodC5zdGFydE1pbnV0ZXMsdC50YXJnZXRNaWRuaWdodFNlY29uZHM/P251bGwpO2lmKHQuaXNFeGlzdGluZyYmdC50YXNrVXVpZClyZXR1cm4gYXdhaXQgZS51cGRhdGVUYXNrKHQudGFza1V1aWQse3N0YXJ0QXQ6cn0pP3tzdGFydEF0OnIsdGFza1V1aWQ6dC50YXNrVXVpZH06e3JlYXNvbjoidXBkYXRlX2ZhaWxlZCIsdGFza1V1aWQ6dC50YXNrVXVpZH07bGV0IG89dC5ub3RlVXVpZHx8bnx8YXdhaXQgWFAoZSk7aWYoIW8pcmV0dXJue3JlYXNvbjoibWlzc2luZ19ub3RlIn07bGV0IGE9YXdhaXQgZS5pbnNlcnRUYXNrKHt1dWlkOm99LHtjb250ZW50OnQudGl0bGUsc3RhcnRBdDpyfSk7cmV0dXJuIGE/e25vdGVVdWlkOm8sc3RhcnRBdDpyLHRhc2tVdWlkOmF9OntyZWFzb246Imluc2VydF9mYWlsZWQifX1hc3luYyBmdW5jdGlvbiBYUChlKXtpZih0eXBlb2YgZS5maW5kTm90ZSE9ImZ1bmN0aW9uInx8dHlwZW9mIGUuY3JlYXRlTm90ZSE9ImZ1bmN0aW9uIilyZXR1cm4gbnVsbDtsZXQgdD1hd2FpdCBlLmZpbmROb3RlKHtuYW1lOkcxLHRhZ3M6W3ZlXX0pLmNhdGNoKCgpPT5udWxsKTtpZih0Py51dWlkKXJldHVybiB0LnV1aWQ7bGV0IG49YXdhaXQgZS5jcmVhdGVOb3RlKEcxLFt2ZV0se2FyY2hpdmU6ITF9KS5jYXRjaCgoKT0+bnVsbCk7cmV0dXJuIHR5cGVvZiBuPT0ib2JqZWN0Ij9uPy51dWlkfHxudWxsOm58fG51bGx9YXN5bmMgZnVuY3Rpb24gUTEoZSx0LG4pe2xldCByPTAsbz0wO2ZvcihsZXQgYSBvZiB0KShhd2FpdCBUaChlLGEsbikpLnRhc2tVdWlkP28rPTE6cis9MTtyZXR1cm4gaygiW3Byb3Bvc2VkLWFnZW5kYV0gYXBwcm92ZVByb3Bvc2VkQWdlbmRhIGNvbXBsZXRlIix7ZmFpbGVkOnIsc2NoZWR1bGVkOm99KSx7ZmFpbGVkOnIsc2NoZWR1bGVkOm99fWZ1bmN0aW9uICRQKGU9bnVsbCl7cmV0dXJuIGV8fExlKClbQi5MTE1fUFJPVklERVJfTU9ERUxdfHwiZGVmYXVsdCJ9ZnVuY3Rpb24gWjEoZT1udWxsLHQ9bnVsbCl7bGV0IG49TGUoKSxyPXtqc29uUmVzcG9uc2U6ITAsdGltZW91dFNlY29uZHM6dVB9LG89KCk9Pnt0JiYoci5haU1vZGVsPXQpfTtpZihlKXtsZXQgbD1jbltlXXx8bnVsbCxkPUt0KGUpLGM9ZD8obj8uW2RdfHwiIikudHJpbSgpOiIiO2lmKGwmJmMpcmV0dXJuIHIuYWlNb2RlbD1sLHIuYXBpS2V5PWMsbygpLHJ9bGV0IGE9bltCLkxMTV9QUk9WSURFUl9NT0RFTF0saT1XcihhKSxzPUxkKGNuKTtpZihzKXIuYWlNb2RlbD1zLm1vZGVsLHIuYXBpS2V5PXMuYXBpS2V5LGsoYFtwcm9wb3NlZC1hZ2VuZGFdIERldiBtb2RlOiB1c2luZyAke3MucHJvdmlkZXJ9IGRldiB0b2tlbiAobW9kZWwgJHtzLm1vZGVsfSlgKTtlbHNlIGlmKGEmJmNuW2FdKXtyLmFpTW9kZWw9Y25bYV07bGV0IGw9S3QoaSksZD1sPyhuW2xdfHwiIikudHJpbSgpOiIiO2QmJihyLmFwaUtleT1kKX1yZXR1cm4gbygpLHJ9ZnVuY3Rpb24gSlAoZT1udWxsKXtsZXQgdD1aMShlKS5haU1vZGVsO3JldHVybiB0P2BTY2hlZHVsZSBwcm9wb3NlZCBieSAke3R9YDpudWxsfWZ1bmN0aW9uIGp0KGUpe3JldHVybmAke2Uuc3RhcnRNaW51dGVzfTo6JHtlLnRhc2tVdWlkfHxlLnRpdGxlfWB9YXN5bmMgZnVuY3Rpb24gZWwoZSx0LG4scil7IXQ/LnByb3ZpZGVyRW18fCF0Py5kYXRlfHwhbj8ubGVuZ3RofHxhd2FpdCBXMShlLHthY3Rpdml0eUtleXM6bixkYXRlOnQuZGF0ZSxwcmlvcml0eUtleTp0LnByaW9yaXR5S2V5LHByb3ZpZGVyRW06dC5wcm92aWRlckVtLHNjaGVkdWxlZEVtOnJ9KS5jYXRjaChvPT5sb2dJZkVuYWJsZWQoIltwcm9wb3NlZC1hZ2VuZGFdIGZhaWxlZCB0byBwZXJzaXN0IHRhc2sgc3RhdHVzIixvPy5tZXNzYWdlKSl9YXN5bmMgZnVuY3Rpb24gZVMoZSx7ZGVmYXVsdE5vdGVVdWlkOnQsZGlzbWlzc2VkS2V5czpuLGxsbURhdGVSZWNvcmQ6cixwcm9wb3NlZDpvLHNjaGVkdWxlZEtleXM6YSxzZXRBcHByb3Zpbmc6aSxzZXRTY2hlZHVsZWRLZXlzOnN9KXtsZXQgbD1vLmZpbHRlcihkPT4hYS5oYXMoanQoZCkpJiYhbi5oYXMoanQoZCkpKTtpZihsLmxlbmd0aCE9PTApe2koITApO3RyeXtsZXR7ZmFpbGVkOmQsc2NoZWR1bGVkOmN9PWF3YWl0IFExKGUsbCx0KTtzKHU9PmFTKHUsbC5tYXAoanQpKSksYz4wJiZvUygpLGF3YWl0IGVsKGUscixsLm1hcChqdCksVnQuU0NIRURVTEVEKSxhd2FpdCBlLmFsZXJ0KGQ+MD9gU2NoZWR1bGVkICR7Y30gYWN0aXZpdGllczsgJHtkfSBjb3VsZCBub3QgYmUgc2NoZWR1bGVkLmA6YFNjaGVkdWxlZCBhbGwgJHtjfSBhY3Rpdml0aWVzLmApfWZpbmFsbHl7aSghMSl9fX1mdW5jdGlvbiB0UyhlLHQsbix7aGlkZVBhc3RCZWZvcmVNaW51dGVzOnI9bnVsbH09e30pe2xldCBvPShlfHxbXSkubWFwKGk9Pih7Li4uaSxpc09ibGlnYXRpb246ITB9KSksYT0odHx8W10pLmZpbHRlcihpPT4hbi5oYXMoanQoaSkpKS5maWx0ZXIoaT0+cj09bnVsbHx8aS5zdGFydE1pbnV0ZXM+PXIpLm1hcChpPT4oey4uLmksaXNPYmxpZ2F0aW9uOiExfSkpO3JldHVyblsuLi5vLC4uLmFdLnNvcnQoKGkscyk9Pmkuc3RhcnRNaW51dGVzLXMuc3RhcnRNaW51dGVzKX1mdW5jdGlvbiBEaChlLHQsbil7cmV0dXJuKGV8fFtdKS5maWx0ZXIocj0+IXQuaGFzKGp0KHIpKSYmIW4uaGFzKGp0KHIpKSkubGVuZ3RofWFzeW5jIGZ1bmN0aW9uIG5TKGUse2NhbGVuZGFyRXZlbnRzOnQ9bnVsbCxjdXJyZW50RGF0ZTpuLGRvbWFpblV1aWQ6cixmb3JjZVJlZ2VuZXJhdGU6bz0hMSxwcmlvcml0eUtleTphLHByb3ZpZGVyRW06aSxzZXRBcHByb3Zpbmc6cyxzZXRBdHRyaWJ1dGlvbjpsLHNldERhdGVMYWJlbDpkLHNldERpc21pc3NlZEtleXM6YyxzZXRFcnJvcjp1LHNldElzRnV0dXJlRGF5OnAsc2V0TG9hZGluZzpmLHNldE9ibGlnYXRpb25zOnksc2V0UHJvcG9zZWQ6dixzZXRSZWNvcmRQcm92aWRlckVtOncsc2V0U2NoZWR1bGVkS2V5czpnfSl7ZighMCksdShudWxsKSxzKCExKSxnKG5ldyBTZXQpLGMobmV3IFNldCk7dHJ5e2xldCBoPW4/SWUobik6bmV3IERhdGUsYj1uZXcgRGF0ZSxtPW4/bmV3IERhdGUoaC5nZXRGdWxsWWVhcigpLGguZ2V0TW9udGgoKSxoLmdldERhdGUoKSxiLmdldEhvdXJzKCksYi5nZXRNaW51dGVzKCksYi5nZXRTZWNvbmRzKCkpOmIsUz1OaChtKSx4PWF3YWl0IFgwKGUse2NhbGVuZGFyRXZlbnRzOnQsY3VycmVudERhdGU6Uyxkb21haW5VdWlkOnJ9KTt5KHgpO2xldCBFPWF3YWl0IHExKGUse2NhbGVuZGFyRXZlbnRzOnQsZm9yY2VSZWdlbmVyYXRlOm8sb2JsaWdhdGlvbnM6eCxwcmlvcml0eUtleTphLHByb3ZpZGVyRW1PdmVycmlkZTppfHxudWxsLHRhcmdldERhdGU6U30pO0UuZXJyb3I/KHUoe2Vycm9yOkUuZXJyb3IsZXJyb3JDb2RlOkUuZXJyb3JDb2RlfHxudWxsfSksdihbXSkpOih2KEUuYWN0aXZpdGllcyksZChFLmRhdGVMYWJlbCksbChFLmxsbUF0dHJpYnV0aW9uRm9vdGVyKSxwJiZwKCEhRS5pc0Z1dHVyZURheSksdyYmdyhFLnByb3ZpZGVyRW18fG51bGwpLEUuc2NoZWR1bGVkS2V5cz8ubGVuZ3RoJiZnKG5ldyBTZXQoRS5zY2hlZHVsZWRLZXlzKSksRS5kaXNtaXNzZWRLZXlzPy5sZW5ndGgmJmMobmV3IFNldChFLmRpc21pc3NlZEtleXMpKSxFLmZyb21DYWNoZXx8ZXQoImdlbmVyYXRlUHJvcG9zZWRBZ2VuZGEiLHtjb3VudDpFLmFjdGl2aXRpZXM/Lmxlbmd0aHx8MH0pKX1maW5hbGx5e2YoITEpfX1hc3luYyBmdW5jdGlvbiByUyhlLHQsbixyLG89bnVsbCl7bGV0IGE9YXdhaXQgVGgoZSx0LG4pO2lmKCFhLnRhc2tVdWlkKXthd2FpdCBlLmFsZXJ0KCJDb3VsZCBub3Qgc2NoZWR1bGUgdGhpcyBhY3Rpdml0eS4gUGxlYXNlIHRyeSBhZ2FpbiBvciBzY2hlZHVsZSBpdCBtYW51YWxseS4iKTtyZXR1cm59cihpPT5hUyhpLFtqdCh0KV0pKSxvUyh7Y29udGVudDp0LnRpdGxlLG5vdGVVVUlEOmEubm90ZVV1aWR8fHQubm90ZVV1aWR8fG51bGwsc3RhcnRBdDphLnN0YXJ0QXQsdGFza1V1aWQ6YS50YXNrVXVpZH0pLGF3YWl0IGVsKGUsbyxbanQodCldLFZ0LlNDSEVEVUxFRCl9ZnVuY3Rpb24gb1MoZT17fSl7dHlwZW9mIHdpbmRvdz4idSJ8fCF3aW5kb3cuZGlzcGF0Y2hFdmVudHx8d2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KGxpLHtkZXRhaWw6ZX0pKX1mdW5jdGlvbiBhUyhlLHQpe2xldCBuPW5ldyBTZXQoZSk7cmV0dXJuIHQuZm9yRWFjaChyPT5uLmFkZChyKSksbn12YXIgVGU9UChmZSgpKTt2YXIgY2U9UCgkKCkpLHRsPSJwcm9wb3NlZC1hZ2VuZGEiLFFQPW5ldyBTZXQoWyJpbnZhbGlkX2FwaV9rZXkiLCJsbG1fZXJyb3IiLCJub19wcm92aWRlcl9jb25maWd1cmVkIiwicGFyc2VfZXJyb3IiXSksWlA9W3tpY29uOiJcdXsxRjVEM31cdUZFMEYiLGxhYmVsOiJBdXRvLWRyYWZ0IHlvdXIgZGF5In0se2ljb246Ilx1MjY5Nlx1RkUwRiIsbGFiZWw6IkJhbGFuY2Ugd29yayBieSBwcmlvcml0eSJ9LHtpY29uOiJcdXsxRjNBRn0iLGxhYmVsOiJBbGlnbiB0aGUgZGF5IHRvIGdvYWxzIn0se2ljb246Ilx1MjNGMCIsbGFiZWw6IlNjaGVkdWxlIGFyb3VuZCBvYmxpZ2F0aW9ucyJ9LHtpY29uOiJcdXsxRjUwNH0iLGxhYmVsOiJSZXNlZWQgd2l0aCBhbnkgbW9kZWwifSx7aWNvbjoiXHV7MUY5RTB9IixsYWJlbDoiRnJvbnRpZXIgbW9kZWxzLCBubyBrZXkifV07ZnVuY3Rpb24gZUwoZSl7cmV0dXJuIGNuW2VdfHxlfHwiZGVmYXVsdCBtb2RlbCJ9ZnVuY3Rpb24gdEwoKXtyZXR1cm4oMCxjZS5qc3gpKGFlLHt3aWRnZXRJZDp0bCxjaGlsZHJlbjooMCxjZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJwcm9wb3NlZC1hZ2VuZGEtbG9hZGluZyIsY2hpbGRyZW46WygwLGNlLmpzeCkoImRpdiIse2NsYXNzTmFtZToicHJvcG9zZWQtYWdlbmRhLXNwaW5uZXIifSksKDAsY2UuanN4KSgicCIse2NoaWxkcmVuOiJEcmFmdGluZyB5b3VyIGhvdXItYnktaG91ciBzY2hlZHVsZSBcdTIwMjYifSldfSl9KX1mdW5jdGlvbiBpUyh7bWVzc2FnZTplLG9uUmV0cnk6dH0pe3JldHVybigwLGNlLmpzeCkoYWUse3dpZGdldElkOnRsLGNoaWxkcmVuOigwLGNlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6InByb3Bvc2VkLWFnZW5kYS1tZXNzYWdlIixjaGlsZHJlbjpbKDAsY2UuanN4KSgicCIse2NoaWxkcmVuOmV9KSwoMCxjZS5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6InByb3Bvc2VkLWFnZW5kYS1yZXRyeSIsb25DbGljazp0LGNoaWxkcmVuOiJUcnkgYWdhaW4ifSldfSl9KX1mdW5jdGlvbiBuTCh7bW9kZWxOYW1lOmUsb25DaGFuZ2VNb2RlbDp0LG9uUHJpb3JpdHlDaGFuZ2U6bixwcmlvcml0eUtleTpyfSl7cmV0dXJuKDAsY2UuanN4cykoImRpdiIse2NsYXNzTmFtZToicHJvcG9zZWQtYWdlbmRhLWNvbnRyb2xzIixjaGlsZHJlbjpbKDAsY2UuanN4KSgibGFiZWwiLHtjbGFzc05hbWU6InByb3Bvc2VkLWFnZW5kYS1wcmlvcml0eS1sYWJlbCIsY2hpbGRyZW46IlRvZGF5J3MgcHJpb3JpdHkifSksKDAsY2UuanN4KSgic2VsZWN0Iix7Y2xhc3NOYW1lOiJwcm9wb3NlZC1hZ2VuZGEtcHJpb3JpdHktc2VsZWN0Iix2YWx1ZTpyLG9uQ2hhbmdlOm4sY2hpbGRyZW46UXMubWFwKG89PigwLGNlLmpzeCkoIm9wdGlvbiIse3ZhbHVlOm8ua2V5LGNoaWxkcmVuOm8ubGFiZWx9LG8ua2V5KSl9KSwoMCxjZS5qc3hzKSgic3BhbiIse2NsYXNzTmFtZToicHJvcG9zZWQtYWdlbmRhLW1vZGVsIix0aXRsZToiQUkgbW9kZWwgdXNlZCB0byBnZW5lcmF0ZSB0aGlzIGFnZW5kYSIsY2hpbGRyZW46WyJcdXsxRjMxMH0gIixlXX0pLCgwLGNlLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToicHJvcG9zZWQtYWdlbmRhLW1vZGVsLWNoYW5nZSIsdGl0bGU6IkNoYW5nZSBBSSBwcm92aWRlciIsb25DbGljazp0LGNoaWxkcmVuOiJcdTIxQzUifSldfSl9ZnVuY3Rpb24gckwoe29uRGlzbWlzczplLG9uT3Blbk5vdGU6dCxvblNjaGVkdWxlOm4scm93OnIsc2NoZWR1bGVkS2V5czpvLHRpbWVGb3JtYXQ6YX0pe2xldCBpPXIuaXNPYmxpZ2F0aW9ufHxvLmhhcyhqdChyKSkscz1ycihyLnRpdGxlKXx8ci50aXRsZSxsPSEhKHIubm90ZVV1aWR8fHIudGFza1V1aWQpO3JldHVybigwLGNlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6YHByb3Bvc2VkLWFnZW5kYS1pdGVtJHtpPyIgcHJvcG9zZWQtYWdlbmRhLWl0ZW0tLXNjaGVkdWxlZCI6IiJ9YCxjaGlsZHJlbjpbKDAsY2UuanN4cykoInNwYW4iLHtjbGFzc05hbWU6InByb3Bvc2VkLWFnZW5kYS10aW1lLWNvbCIsY2hpbGRyZW46WygwLGNlLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6YHByb3Bvc2VkLWFnZW5kYS10aW1lJHtpPyIgcHJvcG9zZWQtYWdlbmRhLXRpbWUtLW11dGVkIjoiIn1gLGNoaWxkcmVuOk4wKHIuc3RhcnRNaW51dGVzLGEpfSksbD8oMCxjZS5qc3gpKCJhIix7aHJlZjoiIyIsY2xhc3NOYW1lOiJwcm9wb3NlZC1hZ2VuZGEtbm90ZS1saW5rIix0aXRsZToiT3BlbiB0aGUgbm90ZSBmb3IgdGhpcyB0YXNrIixvbkNsaWNrOmQ9PnQoZCxyKSxjaGlsZHJlbjoiTm90ZSJ9KTpudWxsXX0pLCgwLGNlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6InByb3Bvc2VkLWFnZW5kYS1jb250ZW50IixjaGlsZHJlbjpbKDAsY2UuanN4KSgic3BhbiIse2NsYXNzTmFtZToicHJvcG9zZWQtYWdlbmRhLXRleHQiLGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOntfX2h0bWw6c319KSwhci5pc09ibGlnYXRpb24mJnIucmVhc29uPygwLGNlLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6InByb3Bvc2VkLWFnZW5kYS1yZWFzb24iLGNoaWxkcmVuOnIucmVhc29ufSk6bnVsbF19KSxyLmR1cmF0aW9uTWludXRlcz8oMCxjZS5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJwcm9wb3NlZC1hZ2VuZGEtZHVyYXRpb24iLGNoaWxkcmVuOmAke3IuZHVyYXRpb25NaW51dGVzfW1gfSk6bnVsbCxpPygwLGNlLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6InByb3Bvc2VkLWFnZW5kYS1zY2hlZHVsZWQtYmFkZ2UiLHRpdGxlOiJBbHJlYWR5IHNjaGVkdWxlZCB0b2RheSIsY2hpbGRyZW46IlNjaGVkdWxlZCJ9KTooMCxjZS5qc3hzKSgic3BhbiIse2NsYXNzTmFtZToicHJvcG9zZWQtYWdlbmRhLWFjdGlvbnMiLGNoaWxkcmVuOlsoMCxjZS5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6InByb3Bvc2VkLWFnZW5kYS1hZGQiLHRpdGxlOmBTY2hlZHVsZSBmb3IgJHtyLnN0YXJ0VGltZX0gdG9kYXlgLG9uQ2xpY2s6ZD0+bihkLHIpLGNoaWxkcmVuOiJcdXsxRjRDNX0gQWRkIHRvIHNjaGVkdWxlIn0pLCgwLGNlLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToicHJvcG9zZWQtYWdlbmRhLWRpc21pc3MiLHRpdGxlOiJEaXNtaXNzIHRoaXMgc3VnZ2VzdGlvbiIsb25DbGljazpkPT5lKGQsciksY2hpbGRyZW46Ilx4RDcifSldfSldfSl9ZnVuY3Rpb24gQWgoe2FwcDplLGNhbGVuZGFyRXZlbnRzOnQsY3VycmVudERhdGU6bixkZWZhdWx0Tm90ZVV1aWQ6cixwcm92aWRlckFwaUtleTpvLHByb3ZpZGVyRW06YSx0YXNrRG9tYWluVVVJRDppLHRpbWVGb3JtYXQ6c30pe2xldCBsPUxlKClbQi5QUk9QT1NFRF9BR0VOREFfUFJJT1JJVFldfHxudWxsLGQ9TGUoKVtCLlBST1BPU0VEX0FHRU5EQV9MTE1dfHxudWxsLFtjLHVdPSgwLFRlLnVzZVN0YXRlKSghMSksW3AsZl09KDAsVGUudXNlU3RhdGUpKCExKSxbeSx2XT0oMCxUZS51c2VTdGF0ZSkobnVsbCksW3csZ109KDAsVGUudXNlU3RhdGUpKG51bGwpLFtoLGJdPSgwLFRlLnVzZVN0YXRlKSgoKT0+bmV3IFNldCksW20sU109KDAsVGUudXNlU3RhdGUpKG51bGwpLFt4LEVdPSgwLFRlLnVzZVN0YXRlKSghMSksW1QsQV09KDAsVGUudXNlU3RhdGUpKCEwKSxbQyxMXT0oMCxUZS51c2VTdGF0ZSkoZHx8YXx8bnVsbCksW08sUl09KDAsVGUudXNlU3RhdGUpKFtdKSxbRixWXT0oMCxUZS51c2VTdGF0ZSkobHx8QjEpLFt6LG5lXT0oMCxUZS51c2VTdGF0ZSkoW10pLFtNLFddPSgwLFRlLnVzZVN0YXRlKSghMSksW0QsTl09KDAsVGUudXNlU3RhdGUpKG51bGwpLFtfLEddPSgwLFRlLnVzZVN0YXRlKSgoKT0+bmV3IFNldCksWT0oMCxUZS51c2VSZWYpKG51bGwpLGo9KDAsVGUudXNlTWVtbykoKCk9Pih7ZGF0ZTpuLHByaW9yaXR5S2V5OkYscHJvdmlkZXJFbTpEfSksW24sRixEXSksZWU9KDAsVGUudXNlQ2FsbGJhY2spKCh7Zm9yY2VSZWdlbmVyYXRlOlo9ITF9PXt9KT0+blMoZSx7Y2FsZW5kYXJFdmVudHM6dCxjdXJyZW50RGF0ZTpuLGRvbWFpblV1aWQ6aSxmb3JjZVJlZ2VuZXJhdGU6Wixwcmlvcml0eUtleTpGLHByb3ZpZGVyRW06QyxzZXRBcHByb3Zpbmc6dSxzZXRBdHRyaWJ1dGlvbjp2LHNldERhdGVMYWJlbDpnLHNldERpc21pc3NlZEtleXM6YixzZXRFcnJvcjpTLHNldElzRnV0dXJlRGF5OkUsc2V0TG9hZGluZzpBLHNldE9ibGlnYXRpb25zOlIsc2V0UHJvcG9zZWQ6bmUsc2V0UmVjb3JkUHJvdmlkZXJFbTpOLHNldFNjaGVkdWxlZEtleXM6R30pLFtlLHQsbixDLEYsbyxpXSkscT0oMCxUZS51c2VDYWxsYmFjaykoKCk9PlcoITApLFtdKSxyZT0oMCxUZS51c2VDYWxsYmFjaykoWj0+e1coITEpLFomJlohPT1DJiYoTChaKSxlLnNldFNldHRpbmcoQi5QUk9QT1NFRF9BR0VOREFfTExNLFopLHFyKEIuUFJPUE9TRURfQUdFTkRBX0xMTSxaKSl9LFtlLENdKSx5ZT0oMCxUZS51c2VDYWxsYmFjaykoWj0+e2xldCBBZT1aLnRhcmdldC52YWx1ZTtWKEFlKSxlLnNldFNldHRpbmcoQi5QUk9QT1NFRF9BR0VOREFfUFJJT1JJVFksQWUpLHFyKEIuUFJPUE9TRURfQUdFTkRBX1BSSU9SSVRZLEFlKX0sW2VdKSxiZT0oMCxUZS51c2VDYWxsYmFjaykoKFosQWUpPT57Wi5wcmV2ZW50RGVmYXVsdCgpLGIoVXQ9Pm5ldyBTZXQoVXQpLmFkZChqdChBZSkpKSxlbChlLGosW2p0KEFlKV0sVnQuRElTTUlTU0VEKX0sW2Usal0pLHBlPSgwLFRlLnVzZUNhbGxiYWNrKSgoKT0+e2xldCBaPXouZmlsdGVyKEFlPT4hXy5oYXMoanQoQWUpKSkubWFwKGp0KTtiKEFlPT57bGV0IFV0PW5ldyBTZXQoQWUpO3JldHVybiBaLmZvckVhY2goZW49PlV0LmFkZChlbikpLFV0fSksZWwoZSxqLFosVnQuRElTTUlTU0VEKX0sW2Usaix6LF9dKSx3ZT0oMCxUZS51c2VDYWxsYmFjaykoKFosQWUpPT4oWi5wcmV2ZW50RGVmYXVsdCgpLGV0KCJzY2hlZHVsZVByb3Bvc2VkQWdlbmRhUm93Iix7aGFzVGFzazohIUFlLnRhc2tVdWlkfSksclMoZSxBZSxyLEcsaikpLFtlLHIsal0pLEJlPSgwLFRlLnVzZUNhbGxiYWNrKShhc3luYyhaLEFlKT0+e1oucHJldmVudERlZmF1bHQoKTtsZXQgVXQ9QWUubm90ZVV1aWR8fChhd2FpdCBlLmdldFRhc2soQWUudGFza1V1aWQpKS5ub3RlVVVJRDthd2FpdCBlLm5hdmlnYXRlKGBodHRwczovL3d3dy5hbXBsZW5vdGUuY29tL25vdGVzLyR7VXR9YCl9LFtlXSksdWU9KDAsVGUudXNlQ2FsbGJhY2spKCgpPT4oZXQoInNjaGVkdWxlQWxsUHJvcG9zZWRBZ2VuZGEiLHtjb3VudDpEaCh6LF8saCl9KSxlUyhlLHtkZWZhdWx0Tm90ZVV1aWQ6cixkaXNtaXNzZWRLZXlzOmgsbGxtRGF0ZVJlY29yZDpqLHByb3Bvc2VkOnosc2NoZWR1bGVkS2V5czpfLHNldEFwcHJvdmluZzp1LHNldFNjaGVkdWxlZEtleXM6R30pKSxbZSxyLGgsaix6LF9dKTtpZigoMCxUZS51c2VFZmZlY3QpKCgpPT57ZWUoKX0sW2VlXSksKDAsVGUudXNlRWZmZWN0KSgoKT0+e19uKFkuY3VycmVudCl9LFtPLHpdKSwoMCxUZS51c2VFZmZlY3QpKCgpPT57ZHx8YSYmYSE9PUMmJkwoYSl9LFthLGRdKSwoMCxUZS51c2VFZmZlY3QpKCgpPT57bGV0IFo9ITE7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlLmZpbmROb3RlKHtuYW1lOlNyfSkpLnRoZW4oQWU9PntafHxmKCEhQWUpfSksKCk9PntaPSEwfX0sW2VdKSxsdCh0bCwhVCYmIW0sISFtKSxUKXJldHVybigwLGNlLmpzeCkodEwse30pO2lmKG0pcmV0dXJuISEhKHR5cGVvZiBwcm9jZXNzPCJ1IiYmcHJvY2Vzcy5lbnY/Lk9QRU5fQUlfQUNDRVNTX1RPS0VOfHwiInx8bykmJlFQLmhhcyhtLmVycm9yQ29kZSk/KDAsY2UuanN4KShqcyx7YXBwOmUsZmVhdHVyZXM6WlAsbW9yZUZlYXR1cmVzTGFiZWw6IisgMTUgbW9yZSBmZWF0dXJlcyBpbmNsdWRlZCIsd2lkZ2V0SWQ6dGx9KTooMCxjZS5qc3gpKGlTLHttZXNzYWdlOm0uZXJyb3Isb25SZXRyeTooKT0+ZWUoKX0pO2xldCBWZT1uZXcgRGF0ZSxsZT14P251bGw6VmUuZ2V0SG91cnMoKSo2MCtWZS5nZXRNaW51dGVzKCksRGU9dFMoTyx6LGgse2hpZGVQYXN0QmVmb3JlTWludXRlczpsZX0pO2lmKERlLmxlbmd0aD09PTApcmV0dXJuKDAsY2UuanN4KShpUyx7bWVzc2FnZToiTm8gc2NoZWR1bGUgY291bGQgYmUgcHJvcG9zZWQgeWV0LiIsb25SZXRyeTooKT0+ZWUoKX0pO2xldCBHZT1EaCh6LF8saCk7cmV0dXJuKDAsY2UuanN4cykoY2UuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxjZS5qc3hzKShhZSx7c3VidGl0bGU6dyx3aWRnZXRJZDp0bCxoZWFkZXJBY3Rpb25zOigwLGNlLmpzeCkoImEiLHtocmVmOiIjIixjbGFzc05hbWU6IndpZGdldC1oZWFkZXItYWN0aW9uIix0aXRsZToiUHJvcG9zZSBhIGZyZXNoIHNjaGVkdWxlIChyZXBsYWNlcyB0b2RheSdzIHNhdmVkIHNldCkiLG9uQ2xpY2s6Wj0+e1oucHJldmVudERlZmF1bHQoKSxlZSh7Zm9yY2VSZWdlbmVyYXRlOiEwfSl9LGNoaWxkcmVuOiJcdXsxRjUwNH0gUmVzZWVkIn0pLGNoaWxkcmVuOlsoMCxjZS5qc3gpKG5MLHttb2RlbE5hbWU6ZUwoQyksb25DaGFuZ2VNb2RlbDpxLG9uUHJpb3JpdHlDaGFuZ2U6eWUscHJpb3JpdHlLZXk6Rn0pLCgwLGNlLmpzeCkoImRpdiIse2NsYXNzTmFtZToicHJvcG9zZWQtYWdlbmRhLWxpc3QiLHJlZjpZLGNoaWxkcmVuOkRlLm1hcChaPT4oMCxjZS5qc3gpKHJMLHtvbkRpc21pc3M6YmUsb25PcGVuTm90ZTpCZSxvblNjaGVkdWxlOndlLHJvdzpaLHNjaGVkdWxlZEtleXM6Xyx0aW1lRm9ybWF0OnN9LGp0KFopKSl9KSwoMCxjZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJwcm9wb3NlZC1hZ2VuZGEtZm9vdGVyIixjaGlsZHJlbjpbKDAsY2UuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJwcm9wb3NlZC1hZ2VuZGEtYXBwcm92ZSIsb25DbGljazp1ZSxkaXNhYmxlZDpjfHxHZT09PTAsY2hpbGRyZW46Yz8iQXBwcm92aW5nIFx1MjAyNiI6IkFwcHJvdmUgc2NoZWR1bGUifSksKDAsY2UuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJwcm9wb3NlZC1hZ2VuZGEtZGlzbWlzcy1hbGwiLG9uQ2xpY2s6cGUsZGlzYWJsZWQ6R2U9PT0wLGNoaWxkcmVuOiJEaXNtaXNzIGFsbCJ9KV19KSwoMCxjZS5qc3gpKCJwIix7Y2xhc3NOYW1lOiJwcm9wb3NlZC1hZ2VuZGEtcGVuZGluZyIsY2hpbGRyZW46YCR7R2V9IHBlbmRpbmdgfSkseT8oMCxjZS5qc3gpKCJwIix7Y2xhc3NOYW1lOiJwcm9wb3NlZC1hZ2VuZGEtYXR0cmlidXRpb24iLGNoaWxkcmVuOnl9KTpudWxsXX0pLE0/KDAsY2UuanN4KShWcyx7YWxsb3dLZXlsZXNzUHJvdmlkZXJzOnAsY29uZmlndXJlZFByb3ZpZGVyRW1zOlBkKExlKCkpLGN1cnJlbnRQcm92aWRlckVtOkMsb25DYW5jZWw6KCk9PlcoITEpLG9uU2VsZWN0OnJlLHN1Ym1pdExhYmVsOiJTdWJtaXQiLHRpdGxlOiJHZW5lcmF0ZSB0aGUgYWdlbmRhIHdpdGggd2hpY2ggQUkgcHJvdmlkZXI/In0pOm51bGxdfSl9dmFyIHBhPVAoZmUoKSk7dmFyIG9MPVt7dGV4dDoiVGhlIHNlY3JldCBvZiBnZXR0aW5nIGFoZWFkIGlzIGdldHRpbmcgc3RhcnRlZC4iLGF1dGhvcjoiTWFyayBUd2FpbiJ9LHt0ZXh0OiJZb3UgZG9uJ3QgaGF2ZSB0byBiZSBncmVhdCB0byBzdGFydCwgYnV0IHlvdSBoYXZlIHRvIHN0YXJ0IHRvIGJlIGdyZWF0LiIsYXV0aG9yOiJaaWcgWmlnbGFyIn0se3RleHQ6IkFjdGlvbiBpcyB0aGUgZm91bmRhdGlvbmFsIGtleSB0byBhbGwgc3VjY2Vzcy4iLGF1dGhvcjoiUGFibG8gUGljYXNzbyJ9LHt0ZXh0OiJEb25lIGlzIGJldHRlciB0aGFuIHBlcmZlY3QuIixhdXRob3I6IlNoZXJ5bCBTYW5kYmVyZyJ9LHt0ZXh0OiJBbWF0ZXVycyBzaXQgYW5kIHdhaXQgZm9yIGluc3BpcmF0aW9uOyB0aGUgcmVzdCBvZiB1cyBqdXN0IGdldCB1cCBhbmQgZ28gdG8gd29yay4iLGF1dGhvcjoiU3RlcGhlbiBLaW5nIn0se3RleHQ6IlRoZSB3YXkgdG8gZ2V0IHN0YXJ0ZWQgaXMgdG8gcXVpdCB0YWxraW5nIGFuZCBiZWdpbiBkb2luZy4iLGF1dGhvcjoiV2FsdCBEaXNuZXkifSx7dGV4dDoiRm9jdXMgb24gYmVpbmcgcHJvZHVjdGl2ZSBpbnN0ZWFkIG9mIGJ1c3kuIixhdXRob3I6IlRpbSBGZXJyaXNzIn0se3RleHQ6Ikl0J3Mgbm90IGFib3V0IGhhdmluZyB0aW1lLiBJdCdzIGFib3V0IG1ha2luZyB0aW1lLiIsYXV0aG9yOiIifSx7dGV4dDoiV29yayBleHBhbmRzIHRvIGZpbGwgdGhlIHRpbWUgYXZhaWxhYmxlIGZvciBpdHMgY29tcGxldGlvbi4iLGF1dGhvcjoiQ3lyaWwgTm9ydGhjb3RlIFBhcmtpbnNvbiJ9LHt0ZXh0OiJTdG9wIHdhaXRpbmcgZm9yIHRoZSByaWdodCB0aW1lLiBUaGUgdGltZSB3aWxsIG5ldmVyIGJlIGp1c3QgcmlnaHQuIixhdXRob3I6Ik5hcG9sZW9uIEhpbGwifSx7dGV4dDoiTW90aXZhdGlvbiBpcyB3aGF0IGdldHMgeW91IHN0YXJ0ZWQuIEhhYml0IGlzIHdoYXQga2VlcHMgeW91IGdvaW5nLiIsYXV0aG9yOiJKaW0gUnl1biJ9LHt0ZXh0OiJJZiB5b3Ugc3BlbmQgdG9vIG11Y2ggdGltZSB0aGlua2luZyBhYm91dCBhIHRoaW5nLCB5b3UnbGwgbmV2ZXIgZ2V0IGl0IGRvbmUuIixhdXRob3I6IkJydWNlIExlZSJ9LHt0ZXh0OiJUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9yZGluYXJ5IGFuZCBleHRyYW9yZGluYXJ5IGlzIHRoYXQgbGl0dGxlICdleHRyYScuIixhdXRob3I6IiJ9LHt0ZXh0OiJFZmZpY2llbmN5IGlzIGRvaW5nIHRoaW5ncyByaWdodC4gRWZmZWN0aXZlbmVzcyBpcyBkb2luZyB0aGUgcmlnaHQgdGhpbmdzLiIsYXV0aG9yOiJQZXRlciBEcnVja2VyIn0se3RleHQ6IllvdSBhcmUgbmV2ZXIgdG9vIG9sZCB0byBzZXQgYW5vdGhlciBnb2FsIG9yIHRvIGRyZWFtIGEgbmV3IGRyZWFtLiIsYXV0aG9yOiJDLlMuIExld2lzIn0se3RleHQ6IlNtYWxsIGRhaWx5IGltcHJvdmVtZW50cyBhcmUgdGhlIGtleSB0byBzdGFnZ2VyaW5nIGxvbmctdGVybSByZXN1bHRzLiIsYXV0aG9yOiJSb2JpbiBTaGFybWEifSx7dGV4dDoiRHJlYW1zIGRvbid0IHdvcmsgdW5sZXNzIHlvdSBkby4iLGF1dGhvcjoiSm9obiBDLiBNYXh3ZWxsIn0se3RleHQ6IlRoZSBtb3N0IGVmZmVjdGl2ZSB3YXkgdG8gZG8gaXQgaXMgdG8gZG8gaXQuIixhdXRob3I6IkFtZWxpYSBFYXJoYXJ0In0se3RleHQ6IlRha2UgdGltZSB0byBkZWxpYmVyYXRlLCBidXQgd2hlbiB0aGUgdGltZSBmb3IgYWN0aW9uIGFycml2ZXMsIHN0b3AgdGhpbmtpbmcgYW5kIGdvIGluLiIsYXV0aG9yOiJOYXBvbGVvbiBCb25hcGFydGUifSx7dGV4dDoiU3RyaXZpbmcgZm9yIGV4Y2VsbGVuY2UgbW90aXZhdGVzIHlvdTsgc3RyaXZpbmcgZm9yIHBlcmZlY3Rpb24gaXMgZGVtb3JhbGl6aW5nLiIsYXV0aG9yOiJIYXJyaWV0IEJyYWlrZXIifSx7dGV4dDoiVGhlIGpvdXJuZXkgb2YgYSB0aG91c2FuZCBtaWxlcyBiZWdpbnMgd2l0aCBhIHNpbmdsZSBzdGVwLiIsYXV0aG9yOiJMYW8gVHp1In0se3RleHQ6IkEgeWVhciBmcm9tIG5vdyB5b3UgbWF5IHdpc2ggeW91IGhhZCBzdGFydGVkIHRvZGF5LiIsYXV0aG9yOiJLYXJlbiBMYW1iIn0se3RleHQ6IlRoZSBiZWdpbm5pbmcgaXMgdGhlIG1vc3QgaW1wb3J0YW50IHBhcnQgb2YgdGhlIHdvcmsuIixhdXRob3I6IlBsYXRvIn0se3RleHQ6IllvdSBkb24ndCBuZWVkIHRvIHNlZSB0aGUgd2hvbGUgc3RhaXJjYXNlLCBqdXN0IHRha2UgdGhlIGZpcnN0IHN0ZXAuIixhdXRob3I6Ik1hcnRpbiBMdXRoZXIgS2luZyBKci4ifSx7dGV4dDoiU3RhcnQgd2hlcmUgeW91IGFyZS4gVXNlIHdoYXQgeW91IGhhdmUuIERvIHdoYXQgeW91IGNhbi4iLGF1dGhvcjoiQXJ0aHVyIEFzaGUifSx7dGV4dDoiVGhlIGZpcnN0IHN0ZXAgaXMgeW91IGhhdmUgdG8gc2F5IHRoYXQgeW91IGNhbi4iLGF1dGhvcjoiV2lsbCBTbWl0aCJ9LHt0ZXh0OiJJbiB0aGUgbWlkZGxlIG9mIGV2ZXJ5IGRpZmZpY3VsdHkgbGllcyBvcHBvcnR1bml0eS4iLGF1dGhvcjoiQWxiZXJ0IEVpbnN0ZWluIn0se3RleHQ6IkV2ZW4gdGhlIGxvbmdlc3Qgam91cm5leSBzdGFydHMgd2l0aCBwdXR0aW5nIG9uZSBmb290IGluIGZyb250IG9mIHRoZSBvdGhlci4iLGF1dGhvcjoiIn0se3RleHQ6IllvdSBkb24ndCBoYXZlIHRvIGJlIHBlcmZlY3QgdG8gc3RhcnQsIGJ1dCB5b3UgaGF2ZSB0byBzdGFydCB0byBiZSBwZXJmZWN0LiIsYXV0aG9yOiIifSx7dGV4dDoiQ291cmFnZSBpcyBub3QgdGhlIGFic2VuY2Ugb2YgZmVhciwgYnV0IHRoZSBqdWRnbWVudCB0aGF0IHNvbWV0aGluZyBlbHNlIGlzIG1vcmUgaW1wb3J0YW50LiIsYXV0aG9yOiJBbWJyb3NlIFJlZG1vb24ifSx7dGV4dDoiV2hhdGV2ZXIgeW91IGNhbiBkbywgb3IgZHJlYW0geW91IGNhbiBcdTIwMTQgYmVnaW4gaXQuIEJvbGRuZXNzIGhhcyBnZW5pdXMsIHBvd2VyLCBhbmQgbWFnaWMgaW4gaXQuIixhdXRob3I6IkpvaGFubiBXb2xmZ2FuZyB2b24gR29ldGhlIn0se3RleHQ6IlRoZSBoYXJkZXN0IHBhcnQgaXMgc3RhcnRpbmcuIE9uY2UgeW91IGdldCB0aGF0IG91dCBvZiB0aGUgd2F5LCB5b3UnbGwgZmluZCB0aGUgcmVzdCBvZiB0aGUgam91cm5leSBtdWNoIGVhc2llci4iLGF1dGhvcjoiIn0se3RleHQ6IkluYWN0aW9uIGJyZWVkcyBkb3VidCBhbmQgZmVhci4gQWN0aW9uIGJyZWVkcyBjb25maWRlbmNlIGFuZCBjb3VyYWdlLiIsYXV0aG9yOiJEYWxlIENhcm5lZ2llIn0se3RleHQ6IlRoZSBiZXN0IHRpbWUgdG8gcGxhbnQgYSB0cmVlIHdhcyB0d2VudHkgeWVhcnMgYWdvLiBUaGUgc2Vjb25kIGJlc3QgdGltZSBpcyBub3cuIixhdXRob3I6IkNoaW5lc2UgUHJvdmVyYiJ9LHt0ZXh0OiJZb3UgZG9uJ3QgaGF2ZSB0byBiZSBmZWFybGVzcy4gSnVzdCBkb24ndCBsZXQgZmVhciBzdG9wIHlvdS4iLGF1dGhvcjoiIn0se3RleHQ6IlByb2dyZXNzLCBub3QgcGVyZmVjdGlvbiwgaXMgdGhlIGdvYWwuIixhdXRob3I6IiJ9LHt0ZXh0OiJOb3RoaW5nIHdpbGwgd29yayB1bmxlc3MgeW91IGRvLiIsYXV0aG9yOiJNYXlhIEFuZ2Vsb3UifSx7dGV4dDoiTGVhcCBhbmQgdGhlIG5ldCB3aWxsIGFwcGVhci4iLGF1dGhvcjoiSm9obiBCdXJyb3VnaHMifSx7dGV4dDoiVGhlIGZpcnN0IHN0ZXAgYmluZHMgb25lIHRvIHRoZSBzZWNvbmQuIixhdXRob3I6IkZyZW5jaCBQcm92ZXJiIn0se3RleHQ6IlRha2UgdGhlIGZpcnN0IHN0ZXAgaW4gZmFpdGguIFlvdSBkb24ndCBoYXZlIHRvIHNlZSB0aGUgd2hvbGUgc3RhaXJjYXNlLiIsYXV0aG9yOiJNYXJ0aW4gTHV0aGVyIEtpbmcgSnIuIn0se3RleHQ6IlRvZGF5IGlzIGEgbmV3IGRheS4gRG9uJ3QgbGV0IHllc3RlcmRheSdzIGZhaWx1cmVzIGhhdW50IGl0LiIsYXV0aG9yOiIifSx7dGV4dDoiRXZlcnkgbW9ybmluZyB3ZSBhcmUgYm9ybiBhZ2Fpbi4gV2hhdCB3ZSBkbyB0b2RheSBtYXR0ZXJzIG1vc3QuIixhdXRob3I6IkJ1ZGRoYSJ9LHt0ZXh0OiJXaXRoIHRoZSBuZXcgZGF5IGNvbWVzIG5ldyBzdHJlbmd0aCBhbmQgbmV3IHRob3VnaHRzLiIsYXV0aG9yOiJFbGVhbm9yIFJvb3NldmVsdCJ9LHt0ZXh0OiJUb2RheSBpcyBhbm90aGVyIGNoYW5jZSB0byBnZXQgYmV0dGVyLiIsYXV0aG9yOiIifSx7dGV4dDoiWWVzdGVyZGF5IGlzIG5vdCBvdXJzIHRvIHJlY292ZXIsIGJ1dCB0b21vcnJvdyBpcyBvdXJzIHRvIHdpbiBvciBsb3NlLiIsYXV0aG9yOiJMeW5kb24gQi4gSm9obnNvbiJ9LHt0ZXh0OiJUaGUgc3VuIGlzIGEgZGFpbHkgcmVtaW5kZXIgdGhhdCB3ZSB0b28gY2FuIHJpc2UgYWdhaW4gZnJvbSB0aGUgZGFya25lc3MuIixhdXRob3I6IlMuIEFqbmEifSx7dGV4dDoiRXZlcnkgZGF5IGlzIGEgc2Vjb25kIGNoYW5jZS4iLGF1dGhvcjoiIn0se3RleHQ6IlRvZGF5J3MgYWNjb21wbGlzaG1lbnRzIHdlcmUgeWVzdGVyZGF5J3MgaW1wb3NzaWJpbGl0aWVzLiIsYXV0aG9yOiJSb2JlcnQgSC4gU2NodWxsZXIifSx7dGV4dDoiRWFjaCBuZXcgZGF5IGlzIGEgYmxhbmsgcGFnZSBpbiB0aGUgZGlhcnkgb2YgeW91ciBsaWZlLiIsYXV0aG9yOiIifSx7dGV4dDoiQW4gb3B0aW1pc3Qgc2VlcyBhbiBvcHBvcnR1bml0eSBpbiBldmVyeSBjYWxhbWl0eTsgYSBwZXNzaW1pc3Qgc2VlcyBhIGNhbGFtaXR5IGluIGV2ZXJ5IG9wcG9ydHVuaXR5LiIsYXV0aG9yOiJXaW5zdG9uIENodXJjaGlsbCJ9LHt0ZXh0OiJPcHBvcnR1bml0aWVzIGRvbid0IGhhcHBlbi4gWW91IGNyZWF0ZSB0aGVtLiIsYXV0aG9yOiJDaHJpcyBHcm9zc2VyIn0se3RleHQ6IlRoaXMgaXMgYSB3b25kZXJmdWwgZGF5LiBJJ3ZlIG5ldmVyIHNlZW4gdGhpcyBvbmUgYmVmb3JlLiIsYXV0aG9yOiJNYXlhIEFuZ2Vsb3UifSx7dGV4dDoiWW91IGhhdmUgZXhhY3RseSBvbmUgbGlmZSBpbiB3aGljaCB0byBkbyBldmVyeXRoaW5nIHlvdSdsbCBldmVyIGRvLiBBY3QgYWNjb3JkaW5nbHkuIixhdXRob3I6IkNvbGluIFdyaWdodCJ9LHt0ZXh0OiJMaWZlIGlzIHdoYXQgaGFwcGVucyB3aGVuIHlvdSdyZSBidXN5IG1ha2luZyBvdGhlciBwbGFucy4iLGF1dGhvcjoiSm9obiBMZW5ub24ifSx7dGV4dDoiWW91ciBsaWZlIGRvZXMgbm90IGdldCBiZXR0ZXIgYnkgY2hhbmNlLCBpdCBnZXRzIGJldHRlciBieSBjaGFuZ2UuIixhdXRob3I6IkppbSBSb2huIn0se3RleHQ6IkRvbid0IHdhdGNoIHRoZSBjbG9jazsgZG8gd2hhdCBpdCBkb2VzLiBLZWVwIGdvaW5nLiIsYXV0aG9yOiJTYW0gTGV2ZW5zb24ifSx7dGV4dDoiQmVsaWV2ZSB5b3UgY2FuIGFuZCB5b3UncmUgaGFsZndheSB0aGVyZS4iLGF1dGhvcjoiVGhlb2RvcmUgUm9vc2V2ZWx0In0se3RleHQ6Ikl0IGRvZXMgbm90IG1hdHRlciBob3cgc2xvd2x5IHlvdSBnbyBhcyBsb25nIGFzIHlvdSBkbyBub3Qgc3RvcC4iLGF1dGhvcjoiQ29uZnVjaXVzIn0se3RleHQ6IlRoZSBvbmx5IGxpbWl0IHRvIG91ciByZWFsaXphdGlvbiBvZiB0b21vcnJvdyB3aWxsIGJlIG91ciBkb3VidHMgb2YgdG9kYXkuIixhdXRob3I6IkZyYW5rbGluIEQuIFJvb3NldmVsdCJ9LHt0ZXh0OiJUaGUgZnV0dXJlIGJlbG9uZ3MgdG8gdGhvc2Ugd2hvIGJlbGlldmUgaW4gdGhlIGJlYXV0eSBvZiB0aGVpciBkcmVhbXMuIixhdXRob3I6IkVsZWFub3IgUm9vc2V2ZWx0In0se3RleHQ6IklmIHlvdSdyZSBnb2luZyB0aHJvdWdoIGhlbGwsIGtlZXAgZ29pbmcuIixhdXRob3I6IldpbnN0b24gQ2h1cmNoaWxsIn0se3RleHQ6IlBlcnNpc3RlbmNlIGd1YXJhbnRlZXMgdGhhdCByZXN1bHRzIGFyZSBpbmV2aXRhYmxlLiIsYXV0aG9yOiJQYXJhbWFoYW5zYSBZb2dhbmFuZGEifSx7dGV4dDoiU3VjY2VzcyBpcyBub3QgZmluYWwsIGZhaWx1cmUgaXMgbm90IGZhdGFsOiBpdCBpcyB0aGUgY291cmFnZSB0byBjb250aW51ZSB0aGF0IGNvdW50cy4iLGF1dGhvcjoiV2luc3RvbiBDaHVyY2hpbGwifSx7dGV4dDoiWW91IG1pc3MgMTAwJSBvZiB0aGUgc2hvdHMgeW91IGRvbid0IHRha2UuIixhdXRob3I6IldheW5lIEdyZXR6a3kifSx7dGV4dDoiSXQgYWx3YXlzIHNlZW1zIGltcG9zc2libGUgdW50aWwgaXQncyBkb25lLiIsYXV0aG9yOiJOZWxzb24gTWFuZGVsYSJ9LHt0ZXh0OiJXZSBtYXkgZW5jb3VudGVyIG1hbnkgZGVmZWF0cywgYnV0IHdlIG11c3Qgbm90IGJlIGRlZmVhdGVkLiIsYXV0aG9yOiJNYXlhIEFuZ2Vsb3UifSx7dGV4dDoiSSBuZXZlciBkcmVhbWVkIGFib3V0IHN1Y2Nlc3MuIEkgd29ya2VkIGZvciBpdC4iLGF1dGhvcjoiRXN0XHhFOWUgTGF1ZGVyIn0se3RleHQ6IlRoZSBvbmx5IHdheSBvdXQgaXMgdGhyb3VnaC4iLGF1dGhvcjoiUm9iZXJ0IEZyb3N0In0se3RleHQ6IkhhcmRzaGlwcyBvZnRlbiBwcmVwYXJlIG9yZGluYXJ5IHBlb3BsZSBmb3IgYW4gZXh0cmFvcmRpbmFyeSBkZXN0aW55LiIsYXV0aG9yOiJDLlMuIExld2lzIn0se3RleHQ6IkFjdCBhcyBpZiB3aGF0IHlvdSBkbyBtYWtlcyBhIGRpZmZlcmVuY2UuIEl0IGRvZXMuIixhdXRob3I6IldpbGxpYW0gSmFtZXMifSx7dGV4dDoiSW4gdGhlIG1pZGRsZSBvZiBkaWZmaWN1bHR5IGxpZXMgb3Bwb3J0dW5pdHkuIixhdXRob3I6IkFsYmVydCBFaW5zdGVpbiJ9LHt0ZXh0OiJZb3UgYXJlIGJyYXZlciB0aGFuIHlvdSBiZWxpZXZlLCBzdHJvbmdlciB0aGFuIHlvdSBzZWVtLCBhbmQgc21hcnRlciB0aGFuIHlvdSB0aGluay4iLGF1dGhvcjoiQS5BLiBNaWxuZSJ9LHt0ZXh0OiJLZWVwIHlvdXIgZXllcyBvbiB0aGUgc3RhcnMgYW5kIHlvdXIgZmVldCBvbiB0aGUgZ3JvdW5kLiIsYXV0aG9yOiJUaGVvZG9yZSBSb29zZXZlbHQifSx7dGV4dDoiV2hhdCB5b3UgZG8gdG9kYXkgY2FuIGltcHJvdmUgYWxsIHlvdXIgdG9tb3Jyb3dzLiIsYXV0aG9yOiJSYWxwaCBNYXJzdG9uIn0se3RleHQ6IkRvbid0IGJlIHB1c2hlZCBhcm91bmQgYnkgdGhlIGZlYXJzIGluIHlvdXIgbWluZC4gQmUgbGVkIGJ5IHRoZSBkcmVhbXMgaW4geW91ciBoZWFydC4iLGF1dGhvcjoiUm95IFQuIEJlbm5ldHQifSx7dGV4dDoiVGhlIG9ubHkgcGVyc29uIHlvdSBzaG91bGQgdHJ5IHRvIGJlIGJldHRlciB0aGFuIGlzIHdobyB5b3Ugd2VyZSB5ZXN0ZXJkYXkuIixhdXRob3I6IiJ9LHt0ZXh0OiJJZiB5b3Ugd2FudCB0byBhY2hpZXZlIGdyZWF0bmVzcywgc3RvcCBhc2tpbmcgZm9yIHBlcm1pc3Npb24uIixhdXRob3I6IiJ9LHt0ZXh0OiJUaGluZ3Mgd29yayBvdXQgYmVzdCBmb3IgdGhvc2Ugd2hvIG1ha2UgdGhlIGJlc3Qgb2YgaG93IHRoaW5ncyB3b3JrIG91dC4iLGF1dGhvcjoiSm9obiBXb29kZW4ifSx7dGV4dDoiVG8gbGl2ZSBhIGNyZWF0aXZlIGxpZmUsIHdlIG11c3QgbG9zZSBvdXIgZmVhciBvZiBiZWluZyB3cm9uZy4iLGF1dGhvcjoiSm9zZXBoIENoaWx0b24gUGVhcmNlIn0se3RleHQ6IklmIHlvdSBhcmUgbm90IHdpbGxpbmcgdG8gcmlzayB0aGUgdXN1YWwsIHlvdSB3aWxsIGhhdmUgdG8gc2V0dGxlIGZvciB0aGUgb3JkaW5hcnkuIixhdXRob3I6IkppbSBSb2huIn0se3RleHQ6IlRydXN0IHlvdXJzZWxmLiBZb3Uga25vdyBtb3JlIHRoYW4geW91IHRoaW5rIHlvdSBkby4iLGF1dGhvcjoiQmVuamFtaW4gU3BvY2sifSx7dGV4dDoiV2hhdCBzZWVtcyB0byB1cyBhcyBiaXR0ZXIgdHJpYWxzIGFyZSBvZnRlbiBibGVzc2luZ3MgaW4gZGlzZ3Vpc2UuIixhdXRob3I6Ik9zY2FyIFdpbGRlIn0se3RleHQ6IlRoZSBvbmx5IHBsYWNlIHdoZXJlIHN1Y2Nlc3MgY29tZXMgYmVmb3JlIHdvcmsgaXMgaW4gdGhlIGRpY3Rpb25hcnkuIixhdXRob3I6IlZpZGFsIFNhc3Nvb24ifSx7dGV4dDoiVG9vIG1hbnkgb2YgdXMgYXJlIG5vdCBsaXZpbmcgb3VyIGRyZWFtcyBiZWNhdXNlIHdlIGFyZSBsaXZpbmcgb3VyIGZlYXJzLiIsYXV0aG9yOiJMZXMgQnJvd24ifSx7dGV4dDoiSSBmaW5kIHRoYXQgdGhlIGhhcmRlciBJIHdvcmssIHRoZSBtb3JlIGx1Y2sgSSBzZWVtIHRvIGhhdmUuIixhdXRob3I6IlRob21hcyBKZWZmZXJzb24ifSx7dGV4dDoiU3VjY2VzcyB1c3VhbGx5IGNvbWVzIHRvIHRob3NlIHdobyBhcmUgdG9vIGJ1c3kgdG8gYmUgbG9va2luZyBmb3IgaXQuIixhdXRob3I6IkhlbnJ5IERhdmlkIFRob3JlYXUifSx7dGV4dDoiSWYgeW91IHJlYWxseSBsb29rIGNsb3NlbHksIG1vc3Qgb3Zlcm5pZ2h0IHN1Y2Nlc3NlcyB0b29rIGEgbG9uZyB0aW1lLiIsYXV0aG9yOiJTdGV2ZSBKb2JzIn0se3RleHQ6Ik5ldmVyIGdpdmUgdXAgb24gYSBkcmVhbSBqdXN0IGJlY2F1c2Ugb2YgdGhlIHRpbWUgaXQgd2lsbCB0YWtlIHRvIGFjY29tcGxpc2ggaXQuIixhdXRob3I6IkVhcmwgTmlnaHRpbmdhbGUifSx7dGV4dDoiWW91J3ZlIGdvdCB0byBnZXQgdXAgZXZlcnkgbW9ybmluZyB3aXRoIGRldGVybWluYXRpb24gaWYgeW91J3JlIGdvaW5nIHRvIGdvIHRvIGJlZCB3aXRoIHNhdGlzZmFjdGlvbi4iLGF1dGhvcjoiR2VvcmdlIExvcmltZXIifSx7dGV4dDoiVGhlIHNlY3JldCBvZiB5b3VyIHN1Y2Nlc3MgaXMgZGV0ZXJtaW5lZCBieSB5b3VyIGRhaWx5IGFnZW5kYS4iLGF1dGhvcjoiSm9obiBDLiBNYXh3ZWxsIn1dO2Z1bmN0aW9uIG5sKGU9Mil7cmV0dXJuWy4uLm9MXS5zb3J0KCgpPT5NYXRoLnJhbmRvbSgpLS41KS5zbGljZSgwLGUpfXZhciBOcj1QKCQoKSk7ZnVuY3Rpb24gQ2goe2dyaWRIZWlnaHRTaXplOmUscGxhbkNvbnRlbnQ6dCxxdW90ZXM6bn0pe2xldCByPShlfHwxKT49Mj80OjIsW28sYV09KDAscGEudXNlU3RhdGUpKG58fCh0P1tdOm5sKHIpKSksW2ksc109KDAscGEudXNlU3RhdGUpKCFuJiYhIXQpLFtsXT0oMCxwYS51c2VTdGF0ZSkoKCk9PmAke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKX1gKTsoMCxwYS51c2VFZmZlY3QpKCgpPT57bnx8YShubChyKSl9LFtdKSwoMCxwYS51c2VFZmZlY3QpKCgpPT57IWkmJm8ubGVuZ3RoPHImJmEobmwocikpfSxbcl0pO2xldCBjPSgwLE5yLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToid2lkZ2V0LWhlYWRlci1hY3Rpb24iLG9uQ2xpY2s6KCk9PnthKG5sKHIpKX0sdGl0bGU6IlJlc2VlZCBxdW90ZXMiLGNoaWxkcmVuOiJcdTIxQkIgUmVzZWVkIn0pO3JldHVybiBpPygwLE5yLmpzeCkoYWUse3dpZGdldElkOiJxdW90ZXMiLGNoaWxkcmVuOigwLE5yLmpzeCkoImRpdiIse2NsYXNzTmFtZToicXVvdGVzLWxvYWRpbmciLGNoaWxkcmVuOiJHZW5lcmF0aW5nIHF1b3Rlcy4uLiJ9KX0pOigwLE5yLmpzeCkoYWUse3dpZGdldElkOiJxdW90ZXMiLGhlYWRlckFjdGlvbnM6YyxjaGlsZHJlbjooMCxOci5qc3gpKCJkaXYiLHtjbGFzc05hbWU6InF1b3Rlcy1ncmlkIixjaGlsZHJlbjpvLnNsaWNlKDAscikubWFwKCh1LHApPT4oMCxOci5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJxdW90ZS10aWxlIixzdHlsZTp7YmFja2dyb3VuZEltYWdlOiJsaW5lYXItZ3JhZGllbnQocmdiYSgwLDAsMCwwLjUpLCByZ2JhKDAsMCwwLDAuNikpLCB1cmwoIitSYygic21hbGwiLGwscCkrIikifSxjaGlsZHJlbjpbKDAsTnIuanN4KSgicCIse2NsYXNzTmFtZToicXVvdGUtdGV4dCIsY2hpbGRyZW46JyInK3UudGV4dCsnIid9KSx1LmF1dGhvcj8oMCxOci5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJxdW90ZS1hdXRob3IiLGNoaWxkcmVuOiJcdTIwMTQgIit1LmF1dGhvcn0pOm51bGxdfSxwKSl9KX0pfXZhciBmYT1QKCQoKSksYUw9e2RhaWx5Sm90OiJodHRwczovL3d3dy5hbXBsZW5vdGUuY29tL25vdGVzL2pvdHMiLGpvdXJuYWw6Imh0dHBzOi8vd3d3LmFtcGxlbm90ZS5jb20vbm90ZXMvam90cyIsY2FsZW5kYXI6Imh0dHBzOi8vd3d3LmFtcGxlbm90ZS5jb20vbm90ZXMvY2FsZW5kYXIiLGxlYXZlRmVlZGJhY2s6Imh0dHBzOi8vd3d3LmFtcGxlbm90ZS5jb20vcGx1Z2lucy9IWFJhN0FEVzg4Ym55ZkE3aER3YlhTTFkifTthc3luYyBmdW5jdGlvbiBpTCh7YWN0aW9uOmUsYXBwOnQsb25Td2FwQmFja2dyb3VuZDpufSl7aWYoZT09PSJyYW5kb21Ob3RlIilyZXR1cm4gbEwodCk7aWYoZT09PSJzd2FwQmFja2dyb3VuZCIpcmV0dXJuIG4/LigpO2xldCByPWFMW2VdO3ImJmF3YWl0IHQubmF2aWdhdGUocil9ZnVuY3Rpb24gc0woZSl7bGV0IHQ9W3tsYWJlbDoiRGFpbHkgSm90IixpY29uOiJcdXsxRjRERH0iLGFjdGlvbjoiZGFpbHlKb3QifSx7bGFiZWw6IkpvdXJuYWwiLGljb246Ilx1ezFGNEQzfSIsYWN0aW9uOiJqb3VybmFsIn0se2xhYmVsOiJDYWxlbmRhciIsaWNvbjoiXHV7MUY0QzV9IixhY3Rpb246ImNhbGVuZGFyIn0se2xhYmVsOiJSYW5kb20gTm90ZSIsaWNvbjoiXHV7MUYzQjJ9IixhY3Rpb246InJhbmRvbU5vdGUifV07cmV0dXJuIGUmJnQucHVzaCh7bGFiZWw6IlN3YXAgQmFja2dyb3VuZCIsaWNvbjoiXHV7MUY1QkN9XHVGRTBGIixhY3Rpb246InN3YXBCYWNrZ3JvdW5kIn0pLHQucHVzaCh7bGFiZWw6IkxlYXZlIEZlZWRiYWNrIixpY29uOiJcdXsxRjRBQ30iLGFjdGlvbjoibGVhdmVGZWVkYmFjayJ9KSx0fWFzeW5jIGZ1bmN0aW9uIGxMKGUpe2xldCB0O3RyeXt0PWF3YWl0IGUuZ2V0VGFza0RvbWFpbnMoKX1jYXRjaHtyZXR1cm59bGV0IG49KEFycmF5LmlzQXJyYXkodCk/dDpbXSkuZmlsdGVyKG89Pm8hPW51bGwpLmZsYXRNYXAobz0+by5ub3Rlc3x8W10pO2lmKCFuLmxlbmd0aClyZXR1cm47bGV0IHI9bltNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbi5sZW5ndGgpXTtyPy51dWlkJiZhd2FpdCBlLm5hdmlnYXRlKGBodHRwczovL3d3dy5hbXBsZW5vdGUuY29tL25vdGVzLyR7ci51dWlkfWApfWZ1bmN0aW9uIE1oKHthcHA6ZSxvblN3YXBCYWNrZ3JvdW5kOnR9KXtsZXQgbj1zTCh0eXBlb2YgdD09ImZ1bmN0aW9uIikscj1vPT5pTCh7YWN0aW9uOm8sYXBwOmUsb25Td2FwQmFja2dyb3VuZDp0fSk7cmV0dXJuKDAsZmEuanN4KShhZSx7d2lkZ2V0SWQ6InF1aWNrLWFjdGlvbnMiLGNoaWxkcmVuOigwLGZhLmpzeCkoImRpdiIse2NsYXNzTmFtZToicWEtZ3JpZCIsY2hpbGRyZW46bi5tYXAobz0+KDAsZmEuanN4cykoImJ1dHRvbiIse2NsYXNzTmFtZToicWEtYnV0dG9uIixvbkNsaWNrOigpPT5yKG8uYWN0aW9uKSxjaGlsZHJlbjpbKDAsZmEuanN4KSgic3BhbiIse2NsYXNzTmFtZToicWEtaWNvbiIsY2hpbGRyZW46by5pY29ufSksKDAsZmEuanN4KSgic3BhbiIse2NsYXNzTmFtZToicWEtbGFiZWwiLGNoaWxkcmVuOm8ubGFiZWx9KV19LG8uYWN0aW9uKSl9KX0pfXZhciBJbz1QKGZlKCkpO3ZhciBkTD03KjI0KjYwKjYwKjFlMyxjUz0zLGNMPTUsdUw9NSx1Uz01MCxwTD0yNTAsT2g9MjUwLHBTPTcsZkw9MTtmdW5jdGlvbiBmUyhlKXtyZXR1cm4gbUwoYCR7aWUobmV3IERhdGUpfS0ke2V9YCl9YXN5bmMgZnVuY3Rpb24gc1MoZSx0LG49bmV3IFNldCl7bGV0IHI9bmV3IFNldCxvPVtdLGE9dD97Z3JvdXA6InRhc2tMaXN0cyIsdGFza0RvbWFpblVVSUQ6dH06e2dyb3VwOiJ0YXNrTGlzdHMifTtmb3IgYXdhaXQobGV0IGkgb2YgYXdhaXQgZS5maWx0ZXJOb3RlcyhhLCJjaGFuZ2VkIikpaWYoIW4uaGFzKGk/LnV1aWQpJiZpPy51dWlkJiYhci5oYXMoaS51dWlkKSYmKHIuYWRkKGkudXVpZCksby5wdXNoKGkpLG8ubGVuZ3RoPj1wTCkpcmV0dXJuIG87cmV0dXJuIG99YXN5bmMgZnVuY3Rpb24gbVMoZSx0LG4pe2xldCByPUllKG4uZGF0ZUtleSksbz15TChuLGdTKHIpKTthd2FpdCBlLnJlcGxhY2VOb3RlQ29udGVudCh0LG8pfWFzeW5jIGZ1bmN0aW9uIGhTKHthcHA6ZSxtYXhOb3Rlczp0PWNMLHNlZWQ6bix0YXNrRG9tYWluVVVJRDpyPW51bGx9KXtsZXQgbz1hd2FpdCB2TChlKSxhPWdMKG8uc3RhdGUscixvLnN0YXRlLmRhdGVLZXkpLGk9YS5zZWxlY3RlZE5vdGVzO2lmKGEuc2VsZWN0aW9uU2VlZD09PW4mJmkubGVuZ3RoPj1NYXRoLm1pbihjUyx0KSlyZXR1cm4gbFMoZSxpLnNsaWNlKDAsdCkpO2xldCBzPWF3YWl0IHhMKGUsYSxyKSxsPVdjKFsuLi5hLnN0YWxlQ2FuZGlkYXRlcywuLi5zLnN0YWxlQ2FuZGlkYXRlc10pLGQ9YS5oaXN0b3J5QnlEYXksYz1sLmZpbHRlcih2PT4hYlMoZCkuaGFzKHYudXVpZCkpO2wubGVuZ3RoPjAmJmMubGVuZ3RoPT09MCYmKGQ9e30sYz1sKTtsZXQgdT13TChjLHQsbikscD1hd2FpdCBsUyhlLHUpLGY9a0wocCkseT1mLm1hcCh2PT52LnV1aWQpLmZpbHRlcihCb29sZWFuKTthPXlpKHsuLi5hLGhpc3RvcnlCeURheTpkUyhkLGEuZGF0ZUtleSx5LE9oKSxzZWxlY3Rpb25TZWVkOm4sc2VsZWN0ZWROb3RlczpmLHN0YWxlQ2FuZGlkYXRlczpsLHRhc2tEb21haW5VVUlEOnIsdmlzaXRlZEJ5RGF5OmRTKGEudmlzaXRlZEJ5RGF5LGEuZGF0ZUtleSxzLnZpc2l0ZWRVdWlkcyxPaCl9LGEuZGF0ZUtleSk7dHJ5e2F3YWl0IG1TKGUsby5ub3RlSGFuZGxlLGEpfWNhdGNoKHYpe2soIltSZWNlbnROb3Rlc10gRmFpbGVkIHRvIHBlcnNpc3QgcmVjZW50LW5vdGUgc3RhdGU6Iix2KX1yZXR1cm4gcH1mdW5jdGlvbiBtTChlKXtsZXQgdD0wO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQ9KHQrZS5jaGFyQ29kZUF0KG4pKihuKzEpKSUxMDAwMDAzO3JldHVybiB0fWFzeW5jIGZ1bmN0aW9uIGxTKGUsdCl7bGV0IG49QXJyYXkuaXNBcnJheSh0KT90OltdO3JldHVybiBQcm9taXNlLmFsbChuLm1hcChyPT5lLmZpbmROb3RlKHt1dWlkOnIudXVpZH0pLnRoZW4obz0+KHtsYXRlc3RUYXNrVGltZXN0YW1wOnIubGF0ZXN0VGFza1RpbWVzdGFtcCxub3RlSGFuZGxlOm98fHtuYW1lOnIubmFtZSx1dWlkOnIudXVpZH0sdGFza0NvdW50OnIudGFza0NvdW50fSkpLmNhdGNoKCgpPT4oe2xhdGVzdFRhc2tUaW1lc3RhbXA6ci5sYXRlc3RUYXNrVGltZXN0YW1wLG5vdGVIYW5kbGU6e25hbWU6ci5uYW1lLHV1aWQ6ci51dWlkfSx0YXNrQ291bnQ6ci50YXNrQ291bnR9KSkpKX1mdW5jdGlvbiBoTChlKXtsZXQgdD1OdW1iZXIuaXNGaW5pdGUoZSk/TWF0aC5hYnMoTWF0aC5mbG9vcihlKSk6MTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdD0odCo5MzAxKzQ5Mjk3KSUyMzMyODAsdC8yMzMyODB9fWZ1bmN0aW9uIGRTKGUsdCxuLHIpe2xldCBvPUJjKGUsdCksYT1vW3RdfHxbXSxpPShBcnJheS5pc0FycmF5KG4pP246W10pLmZpbHRlcihsPT50eXBlb2YgbD09InN0cmluZyImJmwubGVuZ3RoPjApLHM9Wy4uLm5ldyBTZXQoWy4uLmEsLi4uaV0pXS5zbGljZSgtcik7cmV0dXJuIEJjKHsuLi5vLFt0XTpzfSx0KX1mdW5jdGlvbiBXYyhlKXtsZXQgdD1uZXcgU2V0LG49W107Zm9yKGxldCByIG9mIEFycmF5LmlzQXJyYXkoZSk/ZTpbXSl7bGV0IG89cj8udXVpZHx8cj8ubm90ZUhhbmRsZT8udXVpZDtpZighKCFvfHx0LmhhcyhvKSkmJih0LmFkZChvKSxuLnB1c2goe2xhdGVzdFRhc2tUaW1lc3RhbXA6TnVtYmVyKHIubGF0ZXN0VGFza1RpbWVzdGFtcCl8fDAsbmFtZTpyLm5hbWV8fHIubm90ZUhhbmRsZT8ubmFtZXx8IlVudGl0bGVkIix0YXNrQ291bnQ6TnVtYmVyKHIudGFza0NvdW50KXx8MCx1dWlkOm99KSxuLmxlbmd0aD49dVMpKWJyZWFrfXJldHVybiBufWZ1bmN0aW9uIEJjKGUsdCl7aWYoIWV8fHR5cGVvZiBlIT0ib2JqZWN0Inx8QXJyYXkuaXNBcnJheShlKSlyZXR1cm57fTtsZXQgbj1JZSh0KTtuLnNldERhdGUobi5nZXREYXRlKCktcFMrMSk7bGV0IHI9aWUobiksbz17fTtmb3IobGV0W2EsaV1vZiBPYmplY3QuZW50cmllcyhlKSl7aWYoIS9eXGR7NH0tXGR7Mn0tXGR7Mn0kLy50ZXN0KGEpfHxhPHIpY29udGludWU7bGV0IHM9QXJyYXkuaXNBcnJheShpKT9pLmZpbHRlcihsPT50eXBlb2YgbD09InN0cmluZyImJmwubGVuZ3RoPjApOltdO29bYV09Wy4uLm5ldyBTZXQocyldLnNsaWNlKC1PaCl9cmV0dXJuIG99ZnVuY3Rpb24geWkoZSx0KXtsZXQgbj1lJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpP2U6e307cmV0dXJue2RhdGVLZXk6dCxoaXN0b3J5QnlEYXk6QmMobi5oaXN0b3J5QnlEYXksdCksc2NoZW1hVmVyc2lvbjpmTCxzZWxlY3Rpb25TZWVkOk51bWJlci5pc0Zpbml0ZShuLnNlbGVjdGlvblNlZWQpP24uc2VsZWN0aW9uU2VlZDpudWxsLHNlbGVjdGVkTm90ZXM6V2Mobi5zZWxlY3RlZE5vdGVzKSxzdGFsZUNhbmRpZGF0ZXM6V2Mobi5zdGFsZUNhbmRpZGF0ZXMpLHRhc2tEb21haW5VVUlEOnR5cGVvZiBuLnRhc2tEb21haW5VVUlEPT0ic3RyaW5nIiYmbi50YXNrRG9tYWluVVVJRC5sZW5ndGg+MD9uLnRhc2tEb21haW5VVUlEOm51bGwsdmlzaXRlZEJ5RGF5OkJjKG4udmlzaXRlZEJ5RGF5LHQpfX1mdW5jdGlvbiBnTChlLHQsbil7cmV0dXJuKGU/LnRhc2tEb21haW5VVUlEfHxudWxsKT09PSh0fHxudWxsKT9lOnlpKHtzZWxlY3Rpb25TZWVkOm51bGwsdGFza0RvbWFpblVVSUQ6dH0sbil9ZnVuY3Rpb24gZ1MoZSl7cmV0dXJuIGUudG9Mb2NhbGVTdHJpbmcoW10se2RheToibnVtZXJpYyIsbW9udGg6ImxvbmciLHllYXI6Im51bWVyaWMifSl9ZnVuY3Rpb24geUwoZSx0KXtyZXR1cm5bYCMgUmVjZW50IE5vdGVzIGRhdGEgZm9yICR7dH1gLCIiLCJUaGlzIGFyY2hpdmVkIG5vdGUgaXMgbWFpbnRhaW5lZCBieSB0aGUgZGFzaGJvYXJkIHBsdWdpbi4iLCIiLCJgYGBqc29uIixKU09OLnN0cmluZ2lmeShlLG51bGwsMiksImBgYCIsIiJdLmpvaW4oYApgKX1mdW5jdGlvbiB5UyhlKXtyZXR1cm5gRGFzaGJvYXJkIHJlY2VudCBub3RlcyBmb3IgJHtnUyhlKX1gfWZ1bmN0aW9uIHZTKGUsdCl7aWYoIWV8fHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4geWkoe30sdCk7bGV0IG49ZS5tYXRjaCgvYGBganNvblxzKihbXHNcU10qPylgYGAvaSkscj1uP25bMV06ZTt0cnl7cmV0dXJuIHlpKEpTT04ucGFyc2UociksdCl9Y2F0Y2h7cmV0dXJuIHlpKHt9LHQpfX1hc3luYyBmdW5jdGlvbiB2TChlKXtsZXQgdD1uZXcgRGF0ZSxuPWllKHQpLHI9eVModCksbz1hd2FpdCBlLmZpbmROb3RlKHtuYW1lOnIsdGFnczpbdmVdfSk7aWYobz8udXVpZCl7bGV0IGw9YXdhaXQgZS5nZXROb3RlQ29udGVudCh7dXVpZDpvLnV1aWR9KTtyZXR1cm57bm90ZUhhbmRsZTpvLHN0YXRlOnZTKGwsbil9fWxldCBhPWF3YWl0IGJMKGUsdCksaT15aSh7Li4uYSxzZWxlY3RlZE5vdGVzOltdfSxuKSxzPWF3YWl0IGUuY3JlYXRlTm90ZShyLFt2ZV0se2FyY2hpdmU6ITB9KTtyZXR1cm4gbz17dXVpZDp0eXBlb2Ygcz09Im9iamVjdCI/cy51dWlkOnN9LGF3YWl0IG1TKGUsbyxpKSxrKGBbUmVjZW50Tm90ZXNdIENyZWF0ZWQgZGFpbHkgbm90ZSAiJHtyfSIgd2l0aCB1dWlkICR7by51dWlkfWApLHtub3RlSGFuZGxlOm8sc3RhdGU6aX19YXN5bmMgZnVuY3Rpb24gYkwoZSx0KXtmb3IobGV0IG49MTtuPD1wUztuKyspe2xldCByPW5ldyBEYXRlKHQpO3Iuc2V0RGF0ZShyLmdldERhdGUoKS1uKTtsZXQgbz1hd2FpdCBlLmZpbmROb3RlKHtuYW1lOnlTKHIpLHRhZ3M6W3ZlXX0pO2lmKCFvPy51dWlkKWNvbnRpbnVlO2xldCBhPWF3YWl0IGUuZ2V0Tm90ZUNvbnRlbnQoe3V1aWQ6by51dWlkfSk7cmV0dXJuIHZTKGEsaWUodCkpfXJldHVybnt9fWZ1bmN0aW9uIHdMKGUsdCxuKXtsZXQgcj1oTChuKSxvPVtdLGE9W107Zm9yKGxldCBpIG9mIGUpe2lmKG8ubGVuZ3RoPj10KWJyZWFrO2EubGVuZ3RoPHVMJiZyKCk8LjU/YS5wdXNoKGkpOm8ucHVzaChpKX1yZXR1cm4gby5sZW5ndGg+PWNTP286Wy4uLm8sLi4uYV0uc2xpY2UoMCx0KX1mdW5jdGlvbiBrTChlKXtyZXR1cm4gV2MoKEFycmF5LmlzQXJyYXkoZSk/ZTpbXSkubWFwKHQ9Pih7bGF0ZXN0VGFza1RpbWVzdGFtcDp0LmxhdGVzdFRhc2tUaW1lc3RhbXAsbmFtZTp0Lm5vdGVIYW5kbGU/Lm5hbWV8fCJVbnRpdGxlZCIsdGFza0NvdW50OnQudGFza0NvdW50LHV1aWQ6dC5ub3RlSGFuZGxlPy51dWlkfSkpKX1hc3luYyBmdW5jdGlvbiB4TChlLHQsbil7bGV0IHI9YlModC52aXNpdGVkQnlEYXkpLG89YXdhaXQgc1MoZSxuLHIpLGE9cjtvLmxlbmd0aD09PTAmJnQuc3RhbGVDYW5kaWRhdGVzLmxlbmd0aD09PTAmJihhPW5ldyBTZXQsbz1hd2FpdCBzUyhlLG4sYSkpO2xldCBpPVtdLHM9W10sbD1uZXcgU2V0KHQuc3RhbGVDYW5kaWRhdGVzLm1hcChkPT5kLnV1aWQpKTtmb3IobGV0IGQgb2YgbylpZighKCFkPy51dWlkfHxhLmhhcyhkLnV1aWQpKSl0cnl7bGV0IGM9YXdhaXQgZS5nZXROb3RlVGFza3Moe3V1aWQ6ZC51dWlkfSx7aW5jbHVkZURvbmU6ITF9KTtpZihzLnB1c2goZC51dWlkKSwhQXJyYXkuaXNBcnJheShjKXx8Yy5sZW5ndGg9PT0wKWNvbnRpbnVlO2xldCB1PWMucmVkdWNlKChwLGYpPT57bGV0IHk9Zi5zdGFydEF0P2Yuc3RhcnRBdCoxZTM6MDtyZXR1cm4gTWF0aC5tYXgocCx5KX0sMCk7aWYodSE9PTAmJnU+PURhdGUubm93KCktZEwpY29udGludWU7aWYobC5oYXMoZC51dWlkKXx8KGkucHVzaCh7bGF0ZXN0VGFza1RpbWVzdGFtcDp1LG5hbWU6ZC5uYW1lLHRhc2tDb3VudDpjLmxlbmd0aCx1dWlkOmQudXVpZH0pLGwuYWRkKGQudXVpZCkpLHQuc3RhbGVDYW5kaWRhdGVzLmxlbmd0aCtpLmxlbmd0aD49dVMpYnJlYWt9Y2F0Y2goYyl7ayhgW1JlY2VudE5vdGVzXSBGYWlsZWQgdG8gZmV0Y2ggdGFza3MgZm9yIG5vdGUgJHtkLnV1aWR9OmAsYyl9cmV0dXJue3N0YWxlQ2FuZGlkYXRlczppLHZpc2l0ZWRVdWlkczpzfX1mdW5jdGlvbiBiUyhlKXtsZXQgdD1uZXcgU2V0O2ZvcihsZXQgbiBvZiBPYmplY3QudmFsdWVzKGV8fHt9KSlBcnJheS5pc0FycmF5KG4pJiZuLmZvckVhY2gocj0+dC5hZGQocikpO3JldHVybiB0fXZhciBTbj1QKCQoKSksU0w9MyxFTD01O2Z1bmN0aW9uIEloKHthcHA6ZSxncmlkSGVpZ2h0U2l6ZTp0PTEsdGFza0RvbWFpblVVSUQ6bj1udWxsfSl7bGV0W3Isb109KDAsSW8udXNlU3RhdGUpKDApLFthLGldPSgwLElvLnVzZVN0YXRlKShudWxsKSxbcyxsXT0oMCxJby51c2VTdGF0ZSkobnVsbCksZD10Pj0yPzEwOkVMLGM9KDAsSW8udXNlTWVtbykoKCk9PmZTKHIpLFtyXSk7KDAsSW8udXNlRWZmZWN0KSgoKT0+e2xldCB5PSEwO3JldHVybiBpKG51bGwpLGwobnVsbCksaFMoe2FwcDplLG1heE5vdGVzOmQsc2VlZDpjLHRhc2tEb21haW5VVUlEOm59KS50aGVuKHY9Pnt5JiYoaSh2KSxrKCJbUmVjZW50Tm90ZXNdIHN0YWxlTm90ZXM6Iix2LCJzZWVkOiIsYywicmVzZWVkQ291bnQ6IixyKSl9KS5jYXRjaCh2PT57eSYmKGsoIltSZWNlbnROb3Rlc10gZmV0Y2ggZXJyb3I6Iix2KSxsKHYubWVzc2FnZXx8IkZhaWxlZCB0byBsb2FkIG5vdGVzIikpfSksKCk9Pnt5PSExfX0sW2UsZCxyLGMsbl0pO2xldCB1PSgpPT5vKHk9PnkrMSk7cmV0dXJuIGx0KCJyZWNlbnQtbm90ZXMiLGEhPT1udWxsJiYhcywhIXMpLCgwLFNuLmpzeCkoYWUse2hlYWRlckFjdGlvbnM6KDAsU24uanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJ3aWRnZXQtaGVhZGVyLWFjdGlvbiIsdHlwZToiYnV0dG9uIixvbkNsaWNrOnUsdGl0bGU6IlNob3cgYSBkaWZmZXJlbnQgc2V0IG9mIG5vdGVzIixjaGlsZHJlbjoiXHUyMUJCIFJlc2VlZCJ9KSx3aWRnZXRJZDoicmVjZW50LW5vdGVzIixjaGlsZHJlbjpzPygwLFNuLmpzeCkoInAiLHtjbGFzc05hbWU6Im5vdGUtZXJyb3IiLGNoaWxkcmVuOmBFcnJvcjogJHtzfWB9KTphPT09bnVsbD8oMCxTbi5qc3gpKCJwIix7Y2xhc3NOYW1lOiJub3RlLWxvYWRpbmciLGNoaWxkcmVuOiJMb2FkaW5nXHUyMDI2In0pOmEubGVuZ3RoPFNMPygwLFNuLmpzeCkoInAiLHtjbGFzc05hbWU6Im5vdGUtZW1wdHkiLGNoaWxkcmVuOiJObyBub3RlcyB3aXRoIHN0YWxlIHRhc2tzIGZvdW5kLiJ9KTooMCxTbi5qc3gpKCJ1bCIse2NsYXNzTmFtZToibm90ZS1saXN0IixjaGlsZHJlbjphLm1hcCgoe25vdGVIYW5kbGU6eSx0YXNrQ291bnQ6dn0pPT4oMCxTbi5qc3hzKSgibGkiLHtjbGFzc05hbWU6Im5vdGUtaXRlbSIsY2hpbGRyZW46WygwLFNuLmpzeHMpKCJidXR0b24iLHtjbGFzc05hbWU6Im5vdGUtbGluayIsdHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT5lLm5hdmlnYXRlKGBodHRwczovL3d3dy5hbXBsZW5vdGUuY29tL25vdGVzLyR7eS51dWlkfWApLHRpdGxlOmBPcGVuICIke3kubmFtZXx8IlVudGl0bGVkIn0iYCxjaGlsZHJlbjpbKDAsU24uanN4KSgic3BhbiIse2NsYXNzTmFtZToibm90ZS1uYW1lIixjaGlsZHJlbjp5Lm5hbWV8fCJVbnRpdGxlZCJ9KSwoMCxTbi5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJub3RlLWNvdW50IixjaGlsZHJlbjpgJHt2fSBvcGVuIHRhc2ske3YhPT0xPyJzIjoiIn1gfSldfSksKDAsU24uanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJub3RlLW1ldGFkYXRhIixjaGlsZHJlbjp5LmNoYW5nZWQ/YExhc3QgdXBkYXRlZDogJHtuZXcgRGF0ZSh5LmNoYW5nZWQpLnRvTG9jYWxlRGF0ZVN0cmluZygpfWA6Ik5vIHVwZGF0ZSBkYXRlIn0pXX0seS51dWlkKSl9KX0pfXZhciBtbj1QKGZlKCkpO3ZhciBSaD02MCoxZTMsUGg9NjAqUmgscmw9MjQqUGgsTkw9MzY1KnJsO2Z1bmN0aW9uIFRMKGUpe3JldHVybiBlPyJ0YXNrTGlzdHMiOiIifWZ1bmN0aW9uIHZpKGUpe2lmKGU9PW51bGwpcmV0dXJuIDA7aWYodHlwZW9mIGU9PSJudW1iZXIiKXJldHVybiBOdW1iZXIuaXNGaW5pdGUoZSk/ZTowO2xldCB0PW5ldyBEYXRlKGUpLmdldFRpbWUoKTtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpP3Q6MH1mdW5jdGlvbiBETChlKXtsZXQgdD12aShlLnVwZGF0ZWQpLG49dmkoZS5jaGFuZ2VkKSxyPXZpKGUuYWN0aXZlKTtyZXR1cm4gdD5ufHx0PnJ9ZnVuY3Rpb24gQUwoZSl7bGV0IHQ9bmV3IE1hcDtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gdDtmb3IobGV0IG4gb2YgZSl7bGV0IHI9bj8uc2hhcmluZz8ubm90ZXM7aWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IG8gb2Ygcil7aWYoIW8pY29udGludWU7bGV0IGE9dC5nZXQobyk7YT9hLnNvbWUoaT0+aS51dWlkPT09bi51dWlkKXx8YS5wdXNoKG4pOnQuc2V0KG8sW25dKX19cmV0dXJuIHR9YXN5bmMgZnVuY3Rpb24gQ0woZSl7bGV0IHQ9RGF0ZS5ub3coKSxuPWF3YWl0IGUuZ2V0UGVvcGxlKCkscj1BTChuKSxvPUFycmF5LmlzQXJyYXkobik/bi5sZW5ndGg6MCxhPUFycmF5LmlzQXJyYXkobik/bi5maWx0ZXIoaT0+QXJyYXkuaXNBcnJheShpPy5zaGFyaW5nPy5ub3RlcykmJmkuc2hhcmluZy5ub3Rlcy5sZW5ndGg+MCkubGVuZ3RoOjA7cmV0dXJuIGNvbnNvbGUubG9nKGBbU2hhcmVkTm90ZXNdIEJ1aWx0IG5vdGU8PnBlcnNvbiBpbmRleCBmcm9tICR7b30gcGVvcGxlICgke2F9IHdpdGggYSBub3RlcyBhcnJheSkgYWNyb3NzICR7ci5zaXplfSBub3RlcyBpbiAke0RhdGUubm93KCktdH1tc2ApLHJ9ZnVuY3Rpb24gd1MoZSl7bGV0IHQ9U3RyaW5nKGV8fCIiKS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gdC5sZW5ndGg9PT0wPyI/Ijp0Lmxlbmd0aD09PTE/dFswXS5zbGljZSgwLDIpLnRvVXBwZXJDYXNlKCk6KHRbMF1bMF0rdFt0Lmxlbmd0aC0xXVswXSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBNTCh7bm90ZUhhbmRsZTplLHBlb3BsZUluZGV4OnR9KXtsZXQgbj10Py5nZXQ/LihlLnV1aWQpO3JldHVybiBBcnJheS5pc0FycmF5KG4pP24ubWFwKHI9Pih7YXZhdGFyOnIuYXZhdGFyfHxudWxsLG5hbWU6ci5uYW1lfHxyLnV1aWR9KSk6W119ZnVuY3Rpb24gTGgoZSx0KXtpZighZSlyZXR1cm4iIjtsZXQgbj10LWU7cmV0dXJuIG48Umg/Imp1c3Qgbm93IjpuPFBoP2Ake01hdGguZmxvb3Iobi9SaCl9bSBhZ29gOm48cmw/YCR7TWF0aC5mbG9vcihuL1BoKX1oIGFnb2A6bjw3KnJsP2Ake01hdGguZmxvb3Iobi9ybCl9ZCBhZ29gOm48MzAqcmw/bmV3IERhdGUoZSkudG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7d2Vla2RheToic2hvcnQiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIn0pOm5ldyBEYXRlKGUpLnRvTG9jYWxlRGF0ZVN0cmluZyh2b2lkIDAse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIn0pfWFzeW5jIGZ1bmN0aW9uIE9MKGUsdCl7bGV0IG49VEwoITApLHI9dD97Z3JvdXA6bix0YXNrRG9tYWluVVVJRDp0fTp7Z3JvdXA6bn0sbz1uZXcgU2V0O2ZvciBhd2FpdChsZXQgYSBvZiBhd2FpdCBlLmZpbHRlck5vdGVzKHIsInVwZGF0ZWQiKSlhPy51dWlkJiZvLmFkZChhLnV1aWQpO3JldHVybiBvfWFzeW5jIGZ1bmN0aW9uIGtTKHthcHA6ZSxtYXhOb3Rlczp0PTEvMCx0YXNrRG9tYWluVVVJRDpuPW51bGwsb25seVdpdGhUYXNrczpyPSExfSl7bGV0IG89RGF0ZS5ub3coKSxbYSxpXT1hd2FpdCBQcm9taXNlLmFsbChbQ0woZSkscj9PTChlLG4pOlByb21pc2UucmVzb2x2ZShudWxsKV0pLHM9Wy4uLmEua2V5cygpXSxsPWF3YWl0IFByb21pc2UuYWxsKHMubWFwKHk9PmUuZmluZE5vdGUoe3V1aWQ6eX0pLmNhdGNoKCgpPT5udWxsKSkpLGQ9W10sYz1bXSx1PTA7Zm9yKGxldCB5PTA7eTxsLmxlbmd0aDt5Kyspe2xldCB2PWxbeV07aWYoIXY/LnV1aWQpe2QucHVzaChzW3ldKTtjb250aW51ZX1pZihpJiYhaS5oYXModi51dWlkKSljb250aW51ZTtsZXQgdz1NTCh7bm90ZUhhbmRsZTp2LHBlb3BsZUluZGV4OmF9KSxnPURMKHYpO2cmJnUrKyxjLnB1c2goey4uLnYsYWN0aXZlTXM6dmkodi5hY3RpdmUpLGNvbGxhYm9yYXRvcnM6dyxvcGVuZWRBdDp2LmFjdGl2ZXx8bnVsbCx1cGRhdGVkTXM6dmkodi51cGRhdGVkKSx1cGRhdGVkU2luY2VTZWVuOmd9KX1jLnNvcnQoKHksdik9PnYudXBkYXRlZE1zLXkudXBkYXRlZE1zKTtsZXQgcD1OdW1iZXIuaXNGaW5pdGUodCk/Yy5zbGljZSgwLHQpOmMsZj1STChwLG8tTkwpO3JldHVybiBjb25zb2xlLmxvZyhgW1NoYXJlZE5vdGVzXSBzaGFyZWQ6JHtzLmxlbmd0aH0gcmVzb2x2ZWQ6JHtsLmxlbmd0aC1kLmxlbmd0aH0gdW5yZXNvbHZlZDoke2QubGVuZ3RofSB1cGRhdGVkU2luY2VTZWVuOiR7dX0gcmV0dXJuZWQ6JHtwLmxlbmd0aH0gc2hhcmVyczoke2YubGVuZ3RofSBvbmx5V2l0aFRhc2tzOiR7cn0gaW4gJHtEYXRlLm5vdygpLW99bXNgKSxkLmxlbmd0aD4wJiYoayhgW1NoYXJlZE5vdGVzXSAke2QubGVuZ3RofSBzaGFyZWQgbm90ZShzKSBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgYnkgZmluZE5vdGU6YCxkKSxrKCJbU2hhcmVkTm90ZXNdIGtub3duIG5vdGUgVVVJRHMgcGVyIHBlcnNvbiAoZnJvbSBnZXRQZW9wbGUpOiIsSUwoYSkpKSx7bm90ZXM6cCxzaGFyZXJOYW1lczpmfX1mdW5jdGlvbiBJTChlKXtsZXQgdD1uZXcgTWFwO2lmKGUmJnR5cGVvZiBlLmVudHJpZXM9PSJmdW5jdGlvbiIpZm9yKGxldFtuLHJdb2YgZS5lbnRyaWVzKCkpZm9yKGxldCBvIG9mIHIpe2xldCBhPW8/Lm5hbWV8fG8/LnV1aWR8fCIodW5rbm93bikiO3QuaGFzKGEpfHx0LnNldChhLFtdKSx0LmdldChhKS5wdXNoKG4pfXJldHVyblsuLi50LmVudHJpZXMoKV0ubWFwKChbbixyXSk9Pih7bmFtZTpuLGNvdW50OnIubGVuZ3RoLG5vdGVVdWlkczpyfSkpLnNvcnQoKG4scik9PnIuY291bnQtbi5jb3VudCl9ZnVuY3Rpb24gUkwoZSx0PTApe2xldCBuPW5ldyBTZXQ7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuW107Zm9yKGxldCByIG9mIGUpaWYoISh0JiZ2aShyLnVwZGF0ZWRNcz8/ci51cGRhdGVkKTx0KSlmb3IobGV0IG8gb2Ygci5jb2xsYWJvcmF0b3JzfHxbXSlvLm5hbWUmJm4uYWRkKG8ubmFtZSk7cmV0dXJuWy4uLm5dLnNvcnQoKHIsbyk9PnIubG9jYWxlQ29tcGFyZShvLHZvaWQgMCx7c2Vuc2l0aXZpdHk6ImJhc2UifSkpfWZ1bmN0aW9uIF9oKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP1suLi5uZXcgU2V0KGUuZmlsdGVyKHQ9PnR5cGVvZiB0PT0ic3RyaW5nIiYmdCkpXTpbXX1mdW5jdGlvbiB4UyhlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybltdO2xldCBuPXQgaW5zdGFuY2VvZiBTZXQ/dDpuZXcgU2V0KHR8fFtdKSxyPVtdLG89W107Zm9yKGxldCBhIG9mIGUpKG4uaGFzKGEudXVpZCk/cjpvKS5wdXNoKGEpO3JldHVyblsuLi5yLC4uLm9dfXZhciBvbD0iRGFzaGJvYXJkIFNoYXJlZCBOb3RlcyBQaW5zIjtmdW5jdGlvbiBTUyhlKXtpZighZXx8dHlwZW9mIGUhPSJzdHJpbmciKXJldHVybltdO2xldCB0PWUubWF0Y2goL2BgYGpzb25ccyooW1xzXFNdKj8pYGBgL2kpLG49dD90WzFdOmUscj1KU09OLnBhcnNlKG4pO3JldHVybiByJiZfaChyLnBpbm5lZFV1aWRzKX1mdW5jdGlvbiBFUyhlKXtyZXR1cm5bIiMgU2hhcmVkIE5vdGVzIHBpbnMiLCIiLCJUaGlzIGFyY2hpdmVkIG5vdGUgaXMgbWFpbnRhaW5lZCBieSB0aGUgZGFzaGJvYXJkIHBsdWdpbi4gSXQgcmVjb3JkcyB3aGljaCBub3RlcyB5b3UgaGF2ZSBwaW5uZWQgdG8gdGhlIHRvcCBvZiB0aGUgU2hhcmVkIE5vdGVzIHdpZGdldC4iLCIiLCJgYGBqc29uIixKU09OLnN0cmluZ2lmeSh7cGlubmVkVXVpZHM6ZX0sbnVsbCwyKSwiYGBgIiwiIl0uam9pbihgCmApfWFzeW5jIGZ1bmN0aW9uIFBMKGUpe2xldCB0PWF3YWl0IGUuZmluZE5vdGUoe25hbWU6b2wsdGFnczpbdmVdfSkuY2F0Y2goKCk9Pm51bGwpO2lmKHQ/LnV1aWQpe2xldCByPWF3YWl0IGUuZ2V0Tm90ZUNvbnRlbnQoe3V1aWQ6dC51dWlkfSkuY2F0Y2goKCk9PiIiKTtyZXR1cm57bm90ZUhhbmRsZTp0LHBpbm5lZFV1aWRzOlNTKHIpfX1sZXQgbj1hd2FpdCBlLmNyZWF0ZU5vdGUob2wsW3ZlXSx7YXJjaGl2ZTohMH0pO3JldHVybiB0PXtuYW1lOm9sLHV1aWQ6dHlwZW9mIG49PSJvYmplY3QiP24udXVpZDpufSxhd2FpdCBlLnJlcGxhY2VOb3RlQ29udGVudCh0LEVTKFtdKSkuY2F0Y2gocj0+aygiW3NoYXJlZC1ub3Rlcy1hcmNoaXZlXSBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBwaW5zIG5vdGU6IixyKSksayhgW3NoYXJlZC1ub3Rlcy1hcmNoaXZlXSBjcmVhdGVkIHBpbnMgbm90ZSAiJHtvbH0iIHV1aWQgJHt0LnV1aWR9YCkse25vdGVIYW5kbGU6dCxwaW5uZWRVdWlkczpbXX19YXN5bmMgZnVuY3Rpb24gTlMoZSl7bGV0IHQ9YXdhaXQgZS5maW5kTm90ZSh7bmFtZTpvbCx0YWdzOlt2ZV19KTtpZighdD8udXVpZClyZXR1cm5bXTtsZXQgbj1hd2FpdCBlLmdldE5vdGVDb250ZW50KHt1dWlkOnQudXVpZH0pO3JldHVybiBTUyhuKX1hc3luYyBmdW5jdGlvbiBUUyhlLHQpe2xldCBuPV9oKHQpLHtub3RlSGFuZGxlOnJ9PWF3YWl0IFBMKGUpO2F3YWl0IGUucmVwbGFjZU5vdGVDb250ZW50KHIsRVMobikpLGsoIltzaGFyZWQtbm90ZXMtYXJjaGl2ZV0gc3RvcmVkIHBpbnMiLHtjb3VudDpuLmxlbmd0aH0pfXZhciBtZT1QKCQoKSksVWg9IiIsTEw9NCxfTD05LFVMPTQsRkw9NTtmdW5jdGlvbiB6TCh7Y29sbGFib3JhdG9yOmV9KXtsZXR7YXZhdGFyOnQsbmFtZTpufT1lO3JldHVybiB0Py5pbWFnZT8oMCxtZS5qc3gpKCJpbWciLHtjbGFzc05hbWU6ImNvbGxhYm9yYXRvci1hdmF0YXIiLHNyYzp0LmltYWdlLGFsdDpuLHRpdGxlOm59KTooMCxtZS5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJjb2xsYWJvcmF0b3ItYXZhdGFyIGNvbGxhYm9yYXRvci1hdmF0YXItdGV4dCIsdGl0bGU6bixjaGlsZHJlbjp0Py50ZXh0fHx3UyhuKX0pfWZ1bmN0aW9uIFdMKHthcHA6ZSxvbmx5V2l0aFRhc2tzOnQsdGFza0RvbWFpblVVSUQ6bn0pe2xldFtyLG9dPSgwLG1uLnVzZVN0YXRlKShudWxsKSxbYSxpXT0oMCxtbi51c2VTdGF0ZSkobnVsbCksW3MsbF09KDAsbW4udXNlU3RhdGUpKFtdKTtyZXR1cm4oMCxtbi51c2VFZmZlY3QpKCgpPT57bGV0IGQ9ITA7cmV0dXJuIG8obnVsbCksaShudWxsKSxrUyh7YXBwOmUsb25seVdpdGhUYXNrczp0LHRhc2tEb21haW5VVUlEOm59KS50aGVuKCh7bm90ZXM6YyxzaGFyZXJOYW1lczp1fSk9PntkJiYoaShjKSxsKHUpLGsoIltTaGFyZWROb3Rlc10gbm90ZXM6IixjLCJvbmx5V2l0aFRhc2tzOiIsdCkpfSkuY2F0Y2goYz0+e2QmJihrKCJbU2hhcmVkTm90ZXNdIGZldGNoIGZhaWxlZDoiLGMpLG8oYyksaShbXSksbChbXSkpfSksKCk9PntkPSExfX0sW2UsdCxuXSkse2Vycm9yOnIsbm90ZXM6YSxzaGFyZXJOYW1lczpzfX1mdW5jdGlvbiBCTChlKXtsZXRbdCxuXT0oMCxtbi51c2VTdGF0ZSkoKCk9Pm5ldyBTZXQpOygwLG1uLnVzZUVmZmVjdCkoKCk9PntsZXQgbz0hMDtyZXR1cm4gTlMoZSkudGhlbihhPT57byYmbihuZXcgU2V0KGEpKX0pLCgpPT57bz0hMX19LFtlXSk7bGV0IHI9KDAsbW4udXNlQ2FsbGJhY2spKG89PntuKGE9PntsZXQgaT1uZXcgU2V0KGEpO3JldHVybiBpLmhhcyhvKT9pLmRlbGV0ZShvKTppLmFkZChvKSxUUyhlLFsuLi5pXSkuY2F0Y2gocz0+aygiW1NoYXJlZE5vdGVzXSBwZXJzaXN0IHBpbnMgZmFpbGVkOiIscykpLGl9KX0sW2VdKTtyZXR1cm57cGlubmVkVXVpZHM6dCx0b2dnbGVQaW46cn19ZnVuY3Rpb24gSEwoe25vdGVzOmUscGFnZTp0LHBhZ2VTaXplOm4scGlubmVkVXVpZHM6cixzZWxlY3RlZFNoYXJlcjpvfSl7bGV0IGE9ZT09PW51bGw/bnVsbDpvPT09VWg/ZS5maWx0ZXIoYz0+Yy51cGRhdGVkU2luY2VTZWVuKTplLmZpbHRlcigoe2NvbGxhYm9yYXRvcnM6Y30pPT5jLnNvbWUodT0+dS5uYW1lPT09bykpLGk9YT09PW51bGw/bnVsbDp4UyhhLHIpLHM9aT09PW51bGw/MTpNYXRoLm1pbihGTCxNYXRoLm1heCgxLE1hdGguY2VpbChpLmxlbmd0aC9uKSkpLGw9TWF0aC5taW4odCxzLTEpLGQ9aT09PW51bGw/bnVsbDppLnNsaWNlKGwqbiwobCsxKSpuKTtyZXR1cm57Y3VycmVudFBhZ2U6bCx0b3RhbFBhZ2VzOnMsdmlzaWJsZU5vdGVzOmR9fWZ1bmN0aW9uIEtMKHtpbkhlYWRlcjplLG9uQ2hhbmdlOnQsb25seVdpdGhUYXNrczpufSl7cmV0dXJuKDAsbWUuanN4cykoImxhYmVsIix7Y2xhc3NOYW1lOmBzaGFyZWQtbm90ZXMtdG9nZ2xlJHtlPyIgd2lkZ2V0LWhlYWRlci1hY3Rpb24iOiIifWAsdGl0bGU6Ik9ubHkgc2hvdyBzaGFyZWQgbm90ZXMgdGhhdCBoYXZlIHRhc2tzIixjaGlsZHJlbjpbKDAsbWUuanN4KSgiaW5wdXQiLHt0eXBlOiJjaGVja2JveCIsY2hlY2tlZDpuLG9uQ2hhbmdlOnI9PnQoci50YXJnZXQuY2hlY2tlZCl9KSwiSGFzIHRhc2tzIl19KX1mdW5jdGlvbiBHTCh7b25TZWxlY3RTaGFyZXI6ZSxzZWxlY3RlZFNoYXJlcjp0LHNoYXJlck5hbWVzOm4sdGFza3NUb2dnbGU6cn0pe3JldHVybigwLG1lLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6InNoYXJlZC1ub3Rlcy1maWx0ZXIiLGNoaWxkcmVuOlsoMCxtZS5qc3hzKSgic2VsZWN0Iix7Y2xhc3NOYW1lOiJzaGFyZWQtbm90ZXMtc2hhcmVyLXNlbGVjdCIsdmFsdWU6dCxvbkNoYW5nZTpvPT5lKG8udGFyZ2V0LnZhbHVlKSxjaGlsZHJlbjpbKDAsbWUuanN4KSgib3B0aW9uIix7dmFsdWU6VWgsY2hpbGRyZW46IkFsbCBjb2xsYWJvcmF0b3JzIn0pLG4ubWFwKG89PigwLG1lLmpzeCkoIm9wdGlvbiIse3ZhbHVlOm8sY2hpbGRyZW46b30sbykpXX0pLHIoITEpXX0pfWZ1bmN0aW9uIFZMKHtjdXJyZW50UGFnZTplLG9uUGFnZUNoYW5nZTp0LHRvdGFsUGFnZXM6bn0pe3JldHVybiBuPD0xP251bGw6KDAsbWUuanN4cykoImRpdiIse2NsYXNzTmFtZToic2hhcmVkLW5vdGVzLXBhZ2luYXRpb24iLGNoaWxkcmVuOlsoMCxtZS5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6InNoYXJlZC1ub3Rlcy1wYWdlLWFycm93Iix0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PnQocj0+TWF0aC5tYXgoMCxyLTEpKSxkaXNhYmxlZDplPT09MCxjaGlsZHJlbjoiXHUyNUMwIn0pLCgwLG1lLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6InNoYXJlZC1ub3Rlcy1wYWdlLWluZGljYXRvciIsY2hpbGRyZW46YCR7ZSsxfSAvICR7bn1gfSksKDAsbWUuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJzaGFyZWQtbm90ZXMtcGFnZS1hcnJvdyIsdHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT50KHI9Pk1hdGgubWluKG4tMSxyKzEpKSxkaXNhYmxlZDplPj1uLTEsY2hpbGRyZW46Ilx1MjVCNiJ9KV19KX1mdW5jdGlvbiBqTCh7aXNQaW5uZWQ6ZSxub3RlOnQsbm93TXM6bixvbk5hdmlnYXRlOnIsb25Ub2dnbGVQaW46b30pe2xldHthY3RpdmVNczphLGNvbGxhYm9yYXRvcnM6aSxuYW1lOnMsb3BlbmVkQXQ6bCx1cGRhdGVkTXM6ZCx1dWlkOmN9PXQ7cmV0dXJuKDAsbWUuanN4cykoImxpIix7Y2xhc3NOYW1lOiJzaGFyZWQtbm90ZS1pdGVtIixjaGlsZHJlbjpbKDAsbWUuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOmBzaGFyZWQtbm90ZS1waW4ke2U/IiBzaGFyZWQtbm90ZS1waW4tYWN0aXZlIjoiIn1gLHR5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+byhjKSx0aXRsZTplPyJVbnBpbiB0aGlzIG5vdGUiOiJQaW4gdGhpcyBub3RlIHRvIHRoZSB0b3AiLCJhcmlhLXByZXNzZWQiOmUsY2hpbGRyZW46Ilx1ezFGNENDfSJ9KSwoMCxtZS5qc3hzKSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJzaGFyZWQtbm90ZS1saW5rIix0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PnIoYyksdGl0bGU6YE9wZW4gIiR7c3x8IlVudGl0bGVkIn0iYCxjaGlsZHJlbjpbKDAsbWUuanN4KSgic3BhbiIse2NsYXNzTmFtZToic2hhcmVkLW5vdGUtdGl0bGUiLGNoaWxkcmVuOnN8fCJVbnRpdGxlZCJ9KSwoMCxtZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJzaGFyZWQtbm90ZS1tZXRhIixjaGlsZHJlbjpbaS5sZW5ndGg+MCYmKDAsbWUuanN4KSgic3BhbiIse2NsYXNzTmFtZToic2hhcmVkLW5vdGUtYXZhdGFycyIsY2hpbGRyZW46aS5zbGljZSgwLFVMKS5tYXAoKHUscCk9PigwLG1lLmpzeCkoekwse2NvbGxhYm9yYXRvcjp1fSxwKSl9KSwoMCxtZS5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJzaGFyZWQtbm90ZS1jb2xsYWJvcmF0b3JzIixjaGlsZHJlbjppLmxlbmd0aD4wP2kubWFwKHU9PnUubmFtZSkuam9pbigiLCAiKToiU2hhcmVkIHdpdGggY29sbGFib3JhdG9ycyJ9KV19KSwoMCxtZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJzaGFyZWQtbm90ZS1kYXRlcyIsY2hpbGRyZW46WygwLG1lLmpzeHMpKCJzcGFuIix7Y2xhc3NOYW1lOiJzaGFyZWQtbm90ZS11cGRhdGVkIix0aXRsZToiV2hlbiBhIGNvbGxhYm9yYXRvciBsYXN0IHVwZGF0ZWQgdGhpcyBub3RlIixjaGlsZHJlbjpbIlVwZGF0ZWQgIixMaChkLG4pXX0pLCgwLG1lLmpzeHMpKCJzcGFuIix7Y2xhc3NOYW1lOiJzaGFyZWQtbm90ZS1vcGVuZWQiLHRpdGxlOmBZb3UgbGFzdCBvcGVuZWQgdGhpcyBub3RlICR7bH1gLGNoaWxkcmVuOlsiWW91IGxhc3Qgb3BlbmVkICIsTGgoYSxuKXx8Ilx1MjAxNCJdfSldfSldfSldfSl9ZnVuY3Rpb24gWUwoe2N1cnJlbnRQYWdlOmUsb25OYXZpZ2F0ZTp0LG9uUGFnZUNoYW5nZTpuLG9uVG9nZ2xlUGluOnIscGlubmVkVXVpZHM6byxzaGFyZXJGaWx0ZXI6YSx0b3RhbFBhZ2VzOmksdmlzaWJsZU5vdGVzOnN9KXtpZihzPT09bnVsbClyZXR1cm4oMCxtZS5qc3hzKShtZS5GcmFnbWVudCx7Y2hpbGRyZW46W2EsKDAsbWUuanN4KSgicCIse2NsYXNzTmFtZToibm90ZS1sb2FkaW5nIixjaGlsZHJlbjoiTG9hZGluZ1x1MjAyNiJ9KV19KTtpZihzLmxlbmd0aD09PTApcmV0dXJuKDAsbWUuanN4cykobWUuRnJhZ21lbnQse2NoaWxkcmVuOlthLCgwLG1lLmpzeCkoInAiLHtjbGFzc05hbWU6Im5vdGUtZW1wdHkiLGNoaWxkcmVuOiJObyBub3RlcyByZWNlbnRseSB1cGRhdGVkIGJ5IGNvbGxhYm9yYXRvcnMuIn0pXX0pO2xldCBsPURhdGUubm93KCk7cmV0dXJuKDAsbWUuanN4cykobWUuRnJhZ21lbnQse2NoaWxkcmVuOlthLCgwLG1lLmpzeCkoInVsIix7Y2xhc3NOYW1lOiJzaGFyZWQtbm90ZS1saXN0IixjaGlsZHJlbjpzLm1hcChkPT4oMCxtZS5qc3gpKGpMLHtub3RlOmQsbm93TXM6bCxvblRvZ2dsZVBpbjpyLG9uTmF2aWdhdGU6dCxpc1Bpbm5lZDpvLmhhcyhkLnV1aWQpfSxkLnV1aWQpKX0pLCgwLG1lLmpzeCkoVkwse2N1cnJlbnRQYWdlOmUsdG90YWxQYWdlczppLG9uUGFnZUNoYW5nZTpufSldfSl9ZnVuY3Rpb24gRmgoe2FwcDplLGdyaWRIZWlnaHRTaXplOnQ9MSx0YXNrRG9tYWluVVVJRDpuPW51bGx9KXtsZXRbcixvXT0oMCxtbi51c2VTdGF0ZSkoITEpLFthLGldPSgwLG1uLnVzZVN0YXRlKShVaCksW3MsbF09KDAsbW4udXNlU3RhdGUpKDApLGQ9dD49Mj9fTDpMTCx7ZXJyb3I6Yyxub3Rlczp1LHNoYXJlck5hbWVzOnB9PVdMKHthcHA6ZSxvbmx5V2l0aFRhc2tzOnIsdGFza0RvbWFpblVVSUQ6bn0pLHtwaW5uZWRVdWlkczpmLHRvZ2dsZVBpbjp5fT1CTChlKSx7Y3VycmVudFBhZ2U6dix0b3RhbFBhZ2VzOncsdmlzaWJsZU5vdGVzOmd9PUhMKHtub3Rlczp1LHBhZ2U6cyxwYWdlU2l6ZTpkLHBpbm5lZFV1aWRzOmYsc2VsZWN0ZWRTaGFyZXI6YX0pOygwLG1uLnVzZUVmZmVjdCkoKCk9PntsKDApfSxbYSxyLG5dKTtsZXQgaD1wLmxlbmd0aD49MjtsdCgic2hhcmVkLW5vdGVzIix1IT09bnVsbCYmIWMsISFjKTtsZXQgYj1TPT4oMCxtZS5qc3gpKEtMLHtpbkhlYWRlcjpTLG9uQ2hhbmdlOm8sb25seVdpdGhUYXNrczpyfSksbT1oPygwLG1lLmpzeCkoR0wse29uU2VsZWN0U2hhcmVyOmksc2VsZWN0ZWRTaGFyZXI6YSxzaGFyZXJOYW1lczpwLHRhc2tzVG9nZ2xlOmJ9KTpudWxsO3JldHVybigwLG1lLmpzeCkoYWUse2hlYWRlckFjdGlvbnM6aD9udWxsOmIoITApLHdpZGdldElkOiJzaGFyZWQtbm90ZXMiLGNoaWxkcmVuOigwLG1lLmpzeCkoWUwse2N1cnJlbnRQYWdlOnYscGlubmVkVXVpZHM6ZixzaGFyZXJGaWx0ZXI6bSx0b3RhbFBhZ2VzOncsdmlzaWJsZU5vdGVzOmcsb25OYXZpZ2F0ZTpTPT5lLm5hdmlnYXRlKGBodHRwczovL3d3dy5hbXBsZW5vdGUuY29tL25vdGVzLyR7U31gKSxvblBhZ2VDaGFuZ2U6bCxvblRvZ2dsZVBpbjp5fSl9KX12YXIgRFM9UChmZSgpKTt2YXIgRW49UCgkKCkpO2Z1bmN0aW9uIHpoKHthY3RpdmVUYXNrRG9tYWluOmUsYXBwOnQsZG9tYWluczpuLG9uRG9tYWluQ2hhbmdlOnJ9KXtsZXRbbyxhXT0oMCxEUy51c2VTdGF0ZSkoITEpLGk9YXN5bmMoKT0+e2soIltUYXNrRG9tYWluc10gUmVmcmVzaCB0cmlnZ2VyZWQiKSxhKCEwKTt0cnl7bGV0IGw9YXdhaXQgQTAodCk7aygiW1Rhc2tEb21haW5zXSBSZWZyZXNoIHJlc3VsdCIsbCksbCYmciYmcihsLmRvbWFpbnMsbC5hY3RpdmVUYXNrRG9tYWluKX1jYXRjaChsKXt0aHJvdyBrKCJbVGFza0RvbWFpbnNdIFJlZnJlc2ggZmFpbGVkIixsKSxsfWZpbmFsbHl7YSghMSl9fSxzPWFzeW5jIGw9PntpZihsPT09ZSlyZXR1cm47bGV0IGQ9YXdhaXQgRDAodCxsKTtkJiZyJiZyKG51bGwsbCxkKX07cmV0dXJuIW58fG4ubGVuZ3RoPT09MD8oMCxFbi5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJ0YXNrLWRvbWFpbnMgdGFzay1kb21haW5zLS1lbXB0eSIsY2hpbGRyZW46WygwLEVuLmpzeCkoImRpdiIse2NsYXNzTmFtZToidGFzay1kb21haW5zLWxpc3QiLGNoaWxkcmVuOigwLEVuLmpzeCkoImRpdiIse2NsYXNzTmFtZToidGFzay1kb21haW4taXRlbSB0YXNrLWRvbWFpbi1lbnRyeSBhY3RpdmUiLHRpdGxlOiJObyB0YXNrIGRvbWFpbiBmb3VuZCBcXHUyMDE0IHNob3dpbmcgdGFza3MgZnJvbSBhbGwgbm90ZXMiLGNoaWxkcmVuOigwLEVuLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6InRhc2stZG9tYWluLW5hbWUiLGNoaWxkcmVuOiJBbGwgTm90ZXMifSl9KX0pLCgwLEVuLmpzeCkoImRpdiIse2NsYXNzTmFtZToidGFzay1kb21haW5zLWVtcHR5IHRhc2stZG9tYWluLWVudHJ5IixjaGlsZHJlbjonVGFzayBEb21haW5zIGluICJTZXR0aW5ncyInfSksKDAsRW4uanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJ0YXNrLWRvbWFpbnMtcmVmcmVzaCIsb25DbGljazppLGRpc2FibGVkOm8sdHlwZToiYnV0dG9uIixjaGlsZHJlbjpvPyJSZWZyZXNoaW5nLi4uIjoiXHUyMUJCIFJlZnJlc2gifSldfSk6KDAsRW4uanN4cykoImRpdiIse2NsYXNzTmFtZToidGFzay1kb21haW5zIixjaGlsZHJlbjpbKDAsRW4uanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJ0YXNrLWRvbWFpbnMtbGlzdCIsY2hpbGRyZW46bi5tYXAobD0+KDAsRW4uanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJ0YXNrLWRvbWFpbi1pdGVtIisobC51dWlkPT09ZT8iIGFjdGl2ZSI6IiIpLG9uQ2xpY2s6KCk9PnMobC51dWlkKSxjaGlsZHJlbjooMCxFbi5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJ0YXNrLWRvbWFpbi1uYW1lIixjaGlsZHJlbjpsLm5hbWV9KX0sbC51dWlkKSl9KSwoMCxFbi5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6InRhc2stZG9tYWlucy1yZWZyZXNoIixvbkNsaWNrOmksZGlzYWJsZWQ6byxjaGlsZHJlbjpvPyJSZWZyZXNoaW5nLi4uIjoiXHUyMUJCIFJlZnJlc2ggVGFzayBEb21haW5zIn0pXX0pfXZhciBIYz1QKGZlKCkpO2Z1bmN0aW9uIEFTKGUpe2xldCB0PSgwLEhjLnVzZVJlZikobnVsbCk7dC5jdXJyZW50PT09bnVsbCYmKHQuY3VycmVudD1wZXJmb3JtYW5jZS5ub3coKSksKDAsSGMudXNlRWZmZWN0KSgoKT0+e3QuY3VycmVudCE9PW51bGwmJihrKGBbZGFzaGJvYXJkXSBXaWRnZXQgIiR7ZX0iIGZpbmlzaGVkIGxvYWRpbmcgaW4gJHsocGVyZm9ybWFuY2Uubm93KCktdC5jdXJyZW50KS50b0ZpeGVkKDEpfW1zYCksdC5jdXJyZW50PW51bGwpfSxbXSl9dmFyIF90PVAoZmUoKSksTVM9UChPZCgpKTt2YXIgV2g9MTAyNCoxMDI0O2Z1bmN0aW9uIGFsKCl7aWYodHlwZW9mIHBlcmZvcm1hbmNlPiJ1IilyZXR1cm4gbnVsbDtsZXQgZT1wZXJmb3JtYW5jZS5tZW1vcnk7aWYoIWV8fHR5cGVvZiBlLnVzZWRKU0hlYXBTaXplIT0ibnVtYmVyIilyZXR1cm4gbnVsbDtsZXQgdD1lLnVzZWRKU0hlYXBTaXplL1doLG49ZS50b3RhbEpTSGVhcFNpemUvV2gscj1lLmpzSGVhcFNpemVMaW1pdC9XaCxvPXI+MD90L3I6MDtyZXR1cm57bGltaXRNYjpLYyhyKSx0b3RhbE1iOktjKG4pLHVzZWRNYjpLYyh0KSx1c2VkUmF0aW86S2MobywzKX19ZnVuY3Rpb24gQmgoKXtyZXR1cm4gdHlwZW9mIHdpbmRvdz4idSJ8fHR5cGVvZiB3aW5kb3cuZ2MhPSJmdW5jdGlvbiI/ITE6KHdpbmRvdy5nYygpLCEwKX1mdW5jdGlvbiBIaChlPTNlMyx0PTI1MCl7cmV0dXJuIWFsKCl8fHR5cGVvZiBzZXRJbnRlcnZhbD4idSI/UHJvbWlzZS5yZXNvbHZlKG51bGwpOm5ldyBQcm9taXNlKG49PntsZXQgcj1hbCgpLG89KCk9PntsZXQgaT1hbCgpO2kmJighcnx8aS51c2VkTWI8ci51c2VkTWIpJiYocj1pKX0sYT1zZXRJbnRlcnZhbChvLHQpO3NldFRpbWVvdXQoKCk9PntvKCksY2xlYXJJbnRlcnZhbChhKSxuKHIpfSxlKX0pfWZ1bmN0aW9uIHFMKGUpe3JldHVybiBlPj0uOT8iY3JpdGljYWwiOmU+PS43NT8iaGlnaCI6ZT49LjU/Im1vZGVyYXRlIjoibG93In1mdW5jdGlvbiBpbChlKXtsZXQgdD1hbCgpO3JldHVybiB0PyhrKGBbbWVtb3J5XSAke2V9OiB1c2VkICR7dC51c2VkTWJ9TUIgLyBsaW1pdCAke3QubGltaXRNYn1NQiAoJHtNYXRoLnJvdW5kKHQudXNlZFJhdGlvKjEwMCl9JSwgJHtxTCh0LnVzZWRSYXRpbyl9KWApLHQpOm51bGx9ZnVuY3Rpb24gQ1MoZT0xNWUzKXtpZighYWwoKXx8dHlwZW9mIHNldEludGVydmFsPiJ1IilyZXR1cm4oKT0+e307aWwoInNhbXBsaW5nLXN0YXJ0Iik7bGV0IHQ9c2V0SW50ZXJ2YWwoKCk9PmlsKCJpbnRlcnZhbCIpLGUpO3JldHVybigpPT5jbGVhckludGVydmFsKHQpfWZ1bmN0aW9uIEtjKGUsdD0xKXtsZXQgbj0xMCoqdDtyZXR1cm4gTWF0aC5yb3VuZChlKm4pL259dmFyIGd0PVAoJCgpKSxLaD0zZTM7ZnVuY3Rpb24gR2goe29uQ2xvc2U6ZSxyZW5kZXJXaWRnZXQ6dH0pe2xldCBuPUR0LFtyLG9dPSgwLF90LnVzZVN0YXRlKShudWxsKSxbYSxpXT0oMCxfdC51c2VTdGF0ZSkoITEpLFtzLGxdPSgwLF90LnVzZVN0YXRlKShudWxsKSxbZCxjXT0oMCxfdC51c2VTdGF0ZSkobnVsbCksW3UscF09KDAsX3QudXNlU3RhdGUpKG5bMF0/LndpZGdldElkfHwiIiksW2YseV09KDAsX3QudXNlU3RhdGUpKCJpZGxlIiksdj0oMCxfdC51c2VSZWYpKG51bGwpLHc9KDAsX3QudXNlUmVmKShudWxsKSxnPSgwLF90LnVzZVJlZikoMCk7dy5jdXJyZW50PXI7bGV0IGg9aWMoZD9bZF06W10se29uU2V0dGxlOih7ZXJyb3JDb3VudDpUfSk9PntUPjA/KHYuY3VycmVudD1udWxsLHkoImVycm9yIikpOnkoIndhaXRpbmdGb3JMb2FkZWRFdmVudCIpfX0pLGI9KDAsX3QudXNlQ2FsbGJhY2spKFQ9Pnt5KCJzYW1wbGluZyIpLGkoQmgoKSksSGgoS2gpLnRoZW4oQT0+e2xldCBDPXcuY3VycmVudDtpZihUPT09Zy5jdXJyZW50KXtpZighQXx8IUMpe3koInVuc3VwcG9ydGVkIik7cmV0dXJufWwoe2FmdGVyU2FtcGxlOkEsZGVsdGFNYjpBLnVzZWRNYi1DLnVzZWRNYn0pLHkoImNvbXBsZXRlIil9fSl9LFtdKTsoMCxfdC51c2VFZmZlY3QpKCgpPT57bGV0IFQ9QT0+e2xldCBDPUEuZGV0YWlsfHx7fTtpZighdi5jdXJyZW50fHxDLndpZGdldElkIT09di5jdXJyZW50KXJldHVybjtsZXQgTD1nLmN1cnJlbnQ7aWYodi5jdXJyZW50PW51bGwsQy5vdXRjb21lPT09ImVycm9yIil7eSgiZXJyb3IiKTtyZXR1cm59YihMKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGFjLFQpLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihhYyxUKX0sW2JdKTtsZXQgbT0oMCxfdC51c2VDYWxsYmFjaykoKCk9PntnLmN1cnJlbnQrPTE7bGV0IFQ9Zy5jdXJyZW50O28obnVsbCksbChudWxsKSxjKG51bGwpLHkoImNsZWFyaW5nIiksd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2xldCBBPUJoKCk7SGgoS2gpLnRoZW4oQz0+e2lmKFQ9PT1nLmN1cnJlbnQpe2lmKCFDKXt5KCJ1bnN1cHBvcnRlZCIpO3JldHVybn0oMCxNUy5mbHVzaFN5bmMpKCgpPT57byhDKSxpKEEpLHkoImJhc2VsaW5lUmVhZHkiKX0pLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57VD09PWcuY3VycmVudCYmKHYuY3VycmVudD11LHkoIm1vdW50aW5nIiksYyh1KSl9KX0pfX0pfSl9LFt1XSksUz0oMCxfdC51c2VDYWxsYmFjaykoKCk9PntnLmN1cnJlbnQrPTEsdi5jdXJyZW50PW51bGwsYyhudWxsKSx5KCJpZGxlIil9LFtdKSx4PW4uZmluZChUPT5ULndpZGdldElkPT09dSksRT1zP2Ake3MuZGVsdGFNYj49MD8iKyI6IiJ9JHtzLmRlbHRhTWIudG9GaXhlZCgxKX0gTUJgOiJcdTIwMTQiO3JldHVybigwLGd0LmpzeCkobHIse3RpdGxlOiJcdXsxRjlFMH0gV2lkZ2V0IE1lbW9yeSBNZWFzdXJlbWVudCIsb25DYW5jZWw6ZSxvblN1Ym1pdDplLHN1Ym1pdExhYmVsOiJDbG9zZSIsY2hpbGRyZW46KDAsZ3QuanN4cykoImRpdiIse2NsYXNzTmFtZToid2lkZ2V0LW1lbW9yeS1tZWFzdXJlbWVudCIsY2hpbGRyZW46WygwLGd0LmpzeCkoInAiLHtjbGFzc05hbWU6IndpZGdldC1tZW1vcnktbWVhc3VyZW1lbnQtZGVzY3JpcHRpb24iLGNoaWxkcmVuOiJNZWFzdXJlcyB0aGUgc2VsZWN0ZWQgd2lkZ2V0IG9uIHRvcCBvZiB0aGUgZGFzaGJvYXJkJ3MgYWxyZWFkeS1sb2FkZWQgc2hhcmVkIGRhdGEuIn0pLCgwLGd0LmpzeCkoImxhYmVsIix7Y2xhc3NOYW1lOiJ3aWRnZXQtbWVtb3J5LW1lYXN1cmVtZW50LWxhYmVsIixodG1sRm9yOiJ3aWRnZXQtbWVtb3J5LXNlbGVjdG9yIixjaGlsZHJlbjoiV2lkZ2V0In0pLCgwLGd0LmpzeCkoInNlbGVjdCIse2NsYXNzTmFtZToid2lkZ2V0LW1lbW9yeS1tZWFzdXJlbWVudC1zZWxlY3QiLGlkOiJ3aWRnZXQtbWVtb3J5LXNlbGVjdG9yIix2YWx1ZTp1LG9uQ2hhbmdlOlQ9PnAoVC50YXJnZXQudmFsdWUpLGRpc2FibGVkOiEhZCxjaGlsZHJlbjpuLm1hcChUPT4oMCxndC5qc3hzKSgib3B0aW9uIix7dmFsdWU6VC53aWRnZXRJZCxjaGlsZHJlbjpbVC5pY29uLCIgIixULnZpc2libGVUaXRsZXx8VC5uYW1lXX0sVC53aWRnZXRJZCkpfSksKDAsZ3QuanN4cykoImRpdiIse2NsYXNzTmFtZToid2lkZ2V0LW1lbW9yeS1tZWFzdXJlbWVudC1hY3Rpb25zIixjaGlsZHJlbjpbKDAsZ3QuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJ3aWRnZXQtbWVtb3J5LW1lYXN1cmVtZW50LWJ1dHRvbiIsdHlwZToiYnV0dG9uIixvbkNsaWNrOm0sY2hpbGRyZW46ZD8iUmVtb3VudCBhbmQgbWVhc3VyZSI6Ik1vdW50IGFuZCBtZWFzdXJlIn0pLCgwLGd0LmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToid2lkZ2V0LW1lbW9yeS1tZWFzdXJlbWVudC1idXR0b24iLHR5cGU6ImJ1dHRvbiIsb25DbGljazpTLGRpc2FibGVkOiFkLGNoaWxkcmVuOiJVbm1vdW50In0pXX0pLCgwLGd0LmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6IndpZGdldC1tZW1vcnktbWVhc3VyZW1lbnQtcmVzdWx0cyIsImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2hpbGRyZW46WygwLGd0LmpzeHMpKCJzcGFuIix7Y2hpbGRyZW46WyJCYXNlbGluZTogIixyP2Ake3IudXNlZE1ifSBNQmA6Ilx1MjAxNCJdfSksKDAsZ3QuanN4cykoInNwYW4iLHtjaGlsZHJlbjpbIkFmdGVyIGxvYWQ6ICIscz9gJHtzLmFmdGVyU2FtcGxlLnVzZWRNYn0gTUJgOiJcdTIwMTQiXX0pLCgwLGd0LmpzeHMpKCJzdHJvbmciLHtjaGlsZHJlbjpbIkluY3JlbWVudGFsIGZvb3RwcmludDogIixFXX0pLCgwLGd0LmpzeCkoInNwYW4iLHtjbGFzc05hbWU6IndpZGdldC1tZW1vcnktbWVhc3VyZW1lbnQtc3RhdHVzIixjaGlsZHJlbjpmPT09ImNvbXBsZXRlIj9gU2FtcGxlZCBmb3IgJHtLaC8xZTN9IHNlY29uZHMgYWZ0ZXIgbW91bnQuYDpmPT09ImVycm9yIj8iVGhlIHdpZGdldCBmYWlsZWQgdG8gbW91bnQ7IG5vIG1lYXN1cmVtZW50IHdhcyByZWNvcmRlZC4iOmY9PT0idW5zdXBwb3J0ZWQiPyJUaGlzIHJ1bnRpbWUgZG9lcyBub3QgZXhwb3NlIHBlcmZvcm1hbmNlLm1lbW9yeS4iOmY9PT0ic2FtcGxpbmciPyJXaWRnZXQgbG9hZGVkOyBzYW1wbGluZyBpdHMgaGVhcCBmb290cHJpbnRcdTIwMjYiOmY9PT0iY2xlYXJpbmciPyJXaWRnZXQgZ3JpZCBpcyBjbGVhcmVkOyBzYW1wbGluZyB0aGUgemVyby13aWRnZXQgYmFzZWxpbmVcdTIwMjYiOmY9PT0iYmFzZWxpbmVSZWFkeSI/IkJhc2VsaW5lIGNhcHR1cmVkIGJlZm9yZSB3aWRnZXQgbW91bnQuIjpmPT09Im1vdW50aW5nIj8iTW91bnRpbmcgc2VsZWN0ZWQgd2lkZ2V0XHUyMDI2IjpmPT09IndhaXRpbmdGb3JMb2FkZWRFdmVudCI/IldpZGdldCBtb3VudGVkOyB3YWl0aW5nIGZvciBpdHMgbG9hZGVkIGV2ZW50XHUyMDI2IjoiQ2hvb3NlIGEgd2lkZ2V0LCB0aGVuIG1vdW50IGl0IHRvIG1lYXN1cmUuIn0pXX0pLCgwLGd0LmpzeCkoInAiLHtjbGFzc05hbWU6IndpZGdldC1tZW1vcnktbWVhc3VyZW1lbnQtbm90ZSIsY2hpbGRyZW46YT8id2luZG93LmdjKCkgd2FzIHJlcXVlc3RlZCBiZWZvcmUgc2FtcGxpbmcuIjoid2luZG93LmdjKCkgaXMgdW5hdmFpbGFibGU7IGxhdW5jaCBDaHJvbWl1bSB3aXRoIC0tanMtZmxhZ3M9LS1leHBvc2UtZ2MgdG8gZW5hYmxlIGl0LiJ9KSxkPygwLGd0LmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6IndpZGdldC1tZW1vcnktbWVhc3VyZW1lbnQtd2lkZ2V0IixjaGlsZHJlbjpbKDAsZ3QuanN4cykoImg0Iix7Y2hpbGRyZW46W3g/Lmljb24sIiAiLHg/LnZpc2libGVUaXRsZXx8eD8ubmFtZV19KSwoMCxndC5qc3gpKHNhLlByb3ZpZGVyLHt2YWx1ZTpoLGNoaWxkcmVuOnQoZCl9KV19KTpudWxsXX0pfSl9dmFyIEtuPVAoZmUoKSk7dmFyIHR0PVAoJCgpKSxYTD1be3ZhbHVlOi0yLGVtb2ppOiJcdXsxRjYyMn0iLGxhYmVsOiJBd2Z1bCJ9LHt2YWx1ZTotMSxlbW9qaToiXHV7MUY2MUZ9IixsYWJlbDoiQmFkIn0se3ZhbHVlOjAsZW1vamk6Ilx1ezFGNjEwfSIsbGFiZWw6Ik9rYXkifSx7dmFsdWU6MSxlbW9qaToiXHV7MUY2NDJ9IixsYWJlbDoiR29vZCJ9LHt2YWx1ZToyLGVtb2ppOiJcdXsxRjYwNH0iLGxhYmVsOiJHcmVhdCJ9XTtmdW5jdGlvbiAkTChlKXtpZighZXx8ZS5sZW5ndGg8NylyZXR1cm4iIjtsZXQgdD1JZShlWzBdLmRhdGUpLG49SWUoZVs2XS5kYXRlKSxyPW89Pm8udG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7bW9udGg6InNob3J0IixkYXk6Im51bWVyaWMifSk7cmV0dXJuYCR7cih0KX0gXHUyMDEzICR7cihuKX1gfWZ1bmN0aW9uIE9TKGUsdCl7bGV0IG49SWUoZSk7cmV0dXJuIG4uc2V0RGF0ZShuLmdldERhdGUoKSt0KjcpLGllKG4pfWZ1bmN0aW9uIEpMKGUsdCl7bGV0IG49ZG4oZSx0KSxyPWRuKG5ldyBEYXRlLHQpO3JldHVybiBuPj1yfWZ1bmN0aW9uIFFMKGUsdCl7cmV0dXJuIUFycmF5LmlzQXJyYXkoZSl8fGUubGVuZ3RoPT09MD9bXTohdHx8dHlwZW9mIHQhPSJvYmplY3QiP2U6ZS5tYXAobj0+e2xldCByPWllKG4uZGF0ZSksbz1BcnJheS5pc0FycmF5KHRbcl0pP3Rbcl06W10sYT1vLnJlZHVjZSgoaSxzKT0+aSsocy52aWN0b3J5VmFsdWV8fDApLDApO3JldHVybnsuLi5uLHZhbHVlOmEsdGFza0NvdW50Om8ubGVuZ3RofX0pfWZ1bmN0aW9uIFpMKGUsdCxuLHIpe2xldCBvPUUwKGUscik7cmV0dXJuIW58fHR5cGVvZiBuIT0ib2JqZWN0Ij9RTCh0LG4pOm8ubWFwKGE9PntsZXQgaT1BcnJheS5pc0FycmF5KG5bYS5kYXRlS2V5XSk/blthLmRhdGVLZXldOltdLHM9aS5yZWR1Y2UoKGwsZCk9PmwrKGQudmljdG9yeVZhbHVlfHwwKSwwKTtyZXR1cm57ZGF5OmEuZGF5LGRhdGU6YS5kYXRlLHZhbHVlOnMsdGFza0NvdW50OmkubGVuZ3RofX0pfWFzeW5jIGZ1bmN0aW9uIGVfKGUsdCxuLHIpe2xldCBvPVt0LFN0cmluZyhuKV07YXdhaXQgZS5zZXRTZXR0aW5nKEJyKCJ2aWN0b3J5LXZhbHVlIiksSlNPTi5zdHJpbmdpZnkobykpLHIoITEpfWZ1bmN0aW9uIElTKGUpe3JldHVybiBlPT1udWxsPyEwOmU9PT0idHJ1ZSJ8fGU9PT0hMH1mdW5jdGlvbiB0XyhlLHQsbixyKXt0KGVbMF18fCJ3ZWVrIiksbihJUyhlWzFdKSkscighMSl9ZnVuY3Rpb24gbl8oZSx0LG4pe2xldCByPWUuY3VycmVudDtpZighcilyZXR1cm47bGV0IG89ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPW4uY2xpZW50WC1vLmxlZnQscz0oby53aWR0aC04MCkvNztmb3IobGV0IGw9MDtsPDc7bCsrKXtsZXQgZD00MCtsKnMsYz1kK3M7aWYoYT49ZCYmYTxjKXt0KGwpO3JldHVybn19dChudWxsKX1mdW5jdGlvbiByXyhlLHQpe2xldCBuPWUuY3VycmVudDtpZighbilyZXR1cm4gMDtsZXQgbz0obi5vZmZzZXRXaWR0aC04MCkvNztyZXR1cm4gNDArdCpvK28qLjV9ZnVuY3Rpb24gb18oZSx0LG4scil7bGV0IG89ZS5jdXJyZW50O2lmKCFvKXJldHVybiAwO2xldCBhPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1vLm9mZnNldEhlaWdodC01MCxkPShuW3RdPy52YWx1ZXx8MCkvcipzKi44NTtyZXR1cm4gYS50b3Arcy1kKzEwfWZ1bmN0aW9uIGFfKGUsdCxuKXtpZighbnx8IXRbZV0pcmV0dXJuW107bGV0IHI9aWUodFtlXS5kYXRlKTtyZXR1cm4obltyXXx8W10pLnNsaWNlKCkuc29ydCgobyxhKT0+KGEudmljdG9yeVZhbHVlfHwwKS0oby52aWN0b3J5VmFsdWV8fDApKX1mdW5jdGlvbiBpXyhlLHQpe2lmKCFlfHwhQXJyYXkuaXNBcnJheShlKXx8IXQpcmV0dXJuW107bGV0IG49e307Zm9yKGxldCByIG9mIGUpe2lmKCFyfHxyLnRpbWVzdGFtcD09bnVsbCljb250aW51ZTtsZXQgbz1uZXcgRGF0ZShyLnRpbWVzdGFtcCoxZTMpLGE9aWUobyk7KCFuW2FdfHxyLnRpbWVzdGFtcD5uW2FdLnRpbWVzdGFtcCkmJihuW2FdPXIpfXJldHVybiB0Lm1hcChyPT57bGV0IG89aWUoci5kYXRlKTtyZXR1cm4gbltvXXx8bnVsbH0pfWZ1bmN0aW9uIHNfKGUsdCxuKXtpZighdHx8IXRbZV0pcmV0dXJuIG51bGw7aWYobiYmbltlXSl7bGV0IG89bmV3IERhdGU7aWYoby5zZXRIb3VycygyMyw1OSw1OSw5OTkpLEllKG5bZV0uZGF0ZSk+bylyZXR1cm4gbnVsbH1sZXQgcj10W2VdLnJhdGluZztyZXR1cm4gWEwuZmluZChvPT5vLnZhbHVlPT09cil8fG51bGx9ZnVuY3Rpb24gbF8oZSx0LG4scixvLGEpe3QuZm9yRWFjaCgoaSxzKT0+e2xldCBsPWkudmFsdWUvbipvKi44NSxkPTQwK3MqcityKi4xNSxjPW8tbCsxMDtlLmZpbGxTdHlsZT1pLnZhbHVlPjA/IiM2MzY2ZjEiOiIjZTVlN2ViIixlLmJlZ2luUGF0aCgpLGUucm91bmRSZWN0KGQsYyxyKi43LGwsWzQsNCwwLDBdKSxlLmZpbGwoKSxlLmZpbGxTdHlsZT0iIzZiNzI4MCIsZS5mb250PSIxMXB4IHN5c3RlbS11aSIsZS50ZXh0QWxpZ249ImNlbnRlciIsZS5maWxsVGV4dChpLmRheSxkK3IqLjM1LGEtMTUpO2xldCBwPUllKGkuZGF0ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7bW9udGg6InNob3J0IixkYXk6Im51bWVyaWMifSk7ZS5maWxsU3R5bGU9IiM5Y2EzYWYiLGUuZm9udD0iOXB4IHN5c3RlbS11aSIsZS5maWxsVGV4dChwLGQrciouMzUsYS0zKSxpLnZhbHVlPjAmJihlLmZpbGxTdHlsZT0iI2ZmZmZmZiIsZS5mb250PSJib2xkIDEwcHggc3lzdGVtLXVpIixlLmZpbGxUZXh0KGRfKGkudmFsdWUpLGQrciouMzUsYysxNCkpfSl9ZnVuY3Rpb24gZF8oZSl7cmV0dXJuKE1hdGgucm91bmQoKGV8fDApKjEwKS8xMCkudG9GaXhlZCgxKX1mdW5jdGlvbiBjXyhlLHQsbixyLG8pe2xldCBhPW5ldyBEYXRlO2Euc2V0SG91cnMoMjMsNTksNTksOTk5KTtsZXQgaT1bXTtpZih0LmZvckVhY2goKHMsbCk9PntpZighc3x8IW5bbF18fEllKG5bbF0uZGF0ZSk+YSlyZXR1cm47bGV0IGM9by0ocy5yYXRpbmcrMikvNCpvKzEwLHU9NDArbCpyK3IqLjU7aS5wdXNoKHtpbmRleDpsLHg6dSx5OmN9KX0pLGkubGVuZ3RoIT09MCl7ZS5zdHJva2VTdHlsZT0iI2Y1OWUwYiIsZS5saW5lV2lkdGg9Mjtmb3IobGV0IHM9MTtzPGkubGVuZ3RoO3MrKyl7bGV0IGw9aVtzLTFdLGQ9aVtzXTtlLnNldExpbmVEYXNoKGQuaW5kZXg9PT1sLmluZGV4KzE/W106WzMsNF0pLGUuYmVnaW5QYXRoKCksZS5tb3ZlVG8obC54LGwueSksZS5saW5lVG8oZC54LGQueSksZS5zdHJva2UoKX1lLnNldExpbmVEYXNoKFtdKSxpLmZvckVhY2goKHt4OnMseTpsfSk9PntlLmZpbGxTdHlsZT0iI2Y1OWUwYiIsZS5iZWdpblBhdGgoKSxlLmFyYyhzLGwsMywwLE1hdGguUEkqMiksZS5maWxsKCl9KX19ZnVuY3Rpb24gdV8oZSx0LG4scixvKXtsZXQgYT1lLmN1cnJlbnQ7aWYoIWEpcmV0dXJuO2xldCBpPWEuZ2V0Q29udGV4dCgiMmQiKSxzPWEud2lkdGg9YS5vZmZzZXRXaWR0aCoyLGw9YS5oZWlnaHQ9YS5vZmZzZXRIZWlnaHQqMjtpLnNjYWxlKDIsMik7bGV0IGQ9cy8yLGM9bC8yLHU9KGQtODApLzcscD1jLTUwO2kuY2xlYXJSZWN0KDAsMCxkLGMpLGxfKGksdCxuLHUscCxjKSxvJiZyJiZyLnNvbWUoZj0+ZiE9PW51bGwpJiZjXyhpLHIsdCx1LHApfWZ1bmN0aW9uIHBfKGUsdCxuLHIpe2xldCBvPWFfKGUsdCxuKSxhPXNfKGUscix0KSxzPVtgPGRpdiBjbGFzcz0iZGFzaGJvYXJkLXRvb2x0aXAtaGVhZGVyIj4ke3RbZV0/VDAodFtlXS5kYXRlKToiIn08L2Rpdj5gXTtpZihhJiZzLnB1c2goYDxkaXYgY2xhc3M9ImRhc2hib2FyZC10b29sdGlwLXNlY3Rpb24iPiR7YS5lbW9qaX0gJHthLmxhYmVsfTwvZGl2PmApLG8ubGVuZ3RoPjApZm9yKGxldCBsIG9mIG8pcy5wdXNoKGA8ZGl2IGNsYXNzPSJkYXNoYm9hcmQtdG9vbHRpcC1yb3ciPjxzcGFuIGNsYXNzPSJkYXNoYm9hcmQtdG9vbHRpcC1yb3ctbGFiZWwiPiR7Q3MobC5jb250ZW50KX08L3NwYW4+PHNwYW4gY2xhc3M9ImRhc2hib2FyZC10b29sdGlwLXJvdy12YWx1ZSI+JHtsLnZpY3RvcnlWYWx1ZXx8MH0gcHRzPC9zcGFuPjwvZGl2PmApO2Vsc2Ugcy5wdXNoKCc8ZGl2IGNsYXNzPSJkYXNoYm9hcmQtdG9vbHRpcC1lbXB0eSI+Tm8gY29tcGxldGVkIHRhc2tzPC9kaXY+Jyk7cmV0dXJuIHMuam9pbigiIil9ZnVuY3Rpb24gZl8oe3RpbWVSYW5nZTplLHNldFRpbWVSYW5nZTp0fSl7cmV0dXJuKDAsdHQuanN4KSh0dC5GcmFnbWVudCx7Y2hpbGRyZW46WyJ3ZWVrIiwibW9udGgiLCIzMGRheXMiXS5tYXAobj0+KDAsdHQuanN4cykoImxhYmVsIix7Y2hpbGRyZW46WygwLHR0LmpzeCkoImlucHV0Iix7dHlwZToicmFkaW8iLG5hbWU6InZ2LXRpbWUtcmFuZ2UiLHZhbHVlOm4sY2hlY2tlZDplPT09bixvbkNoYW5nZTp0LmJpbmQobnVsbCxuKX0pLG49PT0id2VlayI/IlRoaXMgd2VlayI6bj09PSJtb250aCI/IlRoaXMgbW9udGgiOiJMYXN0IDMwIGRheXMiXX0sbikpfSl9ZnVuY3Rpb24gVmgoe2FwcDplLGNvbXBsZXRlZFRhc2tzQnlEYXRlOnQsZGFpbHlWYWx1ZXM6bixtb29kUmF0aW5nczpyLG9uUmVmZXJlbmNlRGF0ZUNoYW5nZTpvLHJlZmVyZW5jZURhdGU6YSx3ZWVrRm9ybWF0Omksd2Vla2x5VG90YWw6c30pe2xldCBsPSgwLEtuLnVzZVJlZikobnVsbCksZD0oMCxLbi51c2VSZWYpKG51bGwpLGM9bGMoaSksdT1aTChhLG4sdCxjKSxwPU1hdGgubWF4KC4uLnUubWFwKHo9PnoudmFsdWUpLDEpLGY9dS5yZWR1Y2UoKHosbmUpPT56KyhuZS52YWx1ZXx8MCksMCkseT1NYXRoLnJvdW5kKGZ8fHN8fDApLHY9aV8ocix1KSxbdyxnXT0oMCxLbi51c2VTdGF0ZSkoITEpLFtoLGJdPSgwLEtuLnVzZVN0YXRlKShudWxsKSxtPXFhKExlKCksInZpY3RvcnktdmFsdWUiKSxbUyx4XT0oMCxLbi51c2VTdGF0ZSkobVswXXx8IndlZWsiKSxbRSxUXT0oMCxLbi51c2VTdGF0ZSkoSVMobVsxXSkpLEE9Zy5iaW5kKG51bGwsITApLEM9ZV8uYmluZChudWxsLGUsUyxFLGcpLEw9dF8uYmluZChudWxsLG0seCxULGcpLE89JEwodSksUj1fcyh7aW50ZXJhY3RpdmU6ITB9KSxGPXo9PntSLmNhbmNlbFNjaGVkdWxlZEhpZGUoKSxuXyhsLGIseil9LFY9KCk9PlIuc2NoZWR1bGVIaWRlKDMwMCwoKT0+YihudWxsKSk7cmV0dXJuKDAsS24udXNlRWZmZWN0KSgoKT0+e2QuY3VycmVudD0oKT0+dV8obCx1LHAsdixFKSxkLmN1cnJlbnQoKX0sW3UscCx2LEVdKSwoMCxLbi51c2VFZmZlY3QpKCgpPT57bGV0IHo9bC5jdXJyZW50O2lmKCF6fHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgbmU9bmV3IFJlc2l6ZU9ic2VydmVyKCgpPT5kLmN1cnJlbnQ/LigpKTtyZXR1cm4gbmUub2JzZXJ2ZSh6KSwoKT0+bmUuZGlzY29ubmVjdCgpfSxbXSksKDAsS24udXNlRWZmZWN0KSgoKT0+e2lmKGg9PT1udWxsKXtSLmhpZGUoKTtyZXR1cm59bGV0IHo9bC5jdXJyZW50O2lmKCF6KXJldHVybjtsZXQgbmU9ei5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxNPXJfKGwsaCksVz1uZS5sZWZ0K00sRD1vXyhsLGgsdSxwKSxOPUQsXz13aW5kb3cuaW5uZXJIZWlnaHQtbmUuYm90dG9tLEc9cF8oaCx1LHQsdik7Xz5OP1Iuc2hvdyhHLFcsbmUuYm90dG9tLHtwbGFjZW1lbnQ6ImJvdHRvbSIsYmVsb3dDaGFydDohMH0pOlIuc2hvdyhHLFcsRCx7cGxhY2VtZW50OiJ0b3AifSl9LFtoXSksKDAsdHQuanN4cykoYWUse2NvbmZpZ3VyYWJsZTohMCxvbkNvbmZpZ3VyZTpBLHdpZGdldElkOiJ2aWN0b3J5LXZhbHVlIixjaGlsZHJlbjpbdz8oMCx0dC5qc3hzKShscix7dGl0bGU6IkNvbmZpZ3VyZSBWaWN0b3J5IFZhbHVlIixvblN1Ym1pdDpDLG9uQ2FuY2VsOkwsY2hpbGRyZW46WygwLHR0LmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1maWVsZCIsY2hpbGRyZW46WygwLHR0LmpzeCkoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLWZpZWxkLWxhYmVsIixjaGlsZHJlbjoiVGltZSByYW5nZSJ9KSwoMCx0dC5qc3gpKGZfLHt0aW1lUmFuZ2U6UyxzZXRUaW1lUmFuZ2U6eH0pXX0pLCgwLHR0LmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1maWVsZCIsY2hpbGRyZW46WygwLHR0LmpzeCkoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLWZpZWxkLWxhYmVsIixjaGlsZHJlbjoiTW9vZCBvdmVybGF5In0pLCgwLHR0LmpzeHMpKCJsYWJlbCIse2NoaWxkcmVuOlsoMCx0dC5qc3gpKCJpbnB1dCIse3R5cGU6ImNoZWNrYm94IixjaGVja2VkOkUsb25DaGFuZ2U6ej0+VCh6LnRhcmdldC5jaGVja2VkKX0pLCJTaG93IG1vb2Qgb3ZlcmxheSJdfSldfSldfSk6bnVsbCwoMCx0dC5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJ2di1oZWFkZXIiLGNoaWxkcmVuOlsoMCx0dC5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJ2di10b3RhbCIsY2hpbGRyZW46eX0pLCgwLHR0LmpzeCkoInNwYW4iLHtjbGFzc05hbWU6InZ2LWxhYmVsIixjaGlsZHJlbjpgcG9pbnRzICR7T31gfSldfSksKDAsdHQuanN4cykoImRpdiIse2NsYXNzTmFtZToidnYtY2hhcnQtY29udGFpbmVyIixjaGlsZHJlbjpbKDAsdHQuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJ2di1uYXYtYXJyb3ciLHR5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+byYmbyhPUyhhLC0xKSksdGl0bGU6IlByZXZpb3VzIHdlZWsiLCJhcmlhLWxhYmVsIjoiUHJldmlvdXMgd2VlayIsY2hpbGRyZW46Ilx1MjAzOSJ9KSwoMCx0dC5qc3gpKCJkaXYiLHtjbGFzc05hbWU6InZ2LWNoYXJ0LXdyYXAiLGNoaWxkcmVuOigwLHR0LmpzeCkoImNhbnZhcyIse3JlZjpsLGNsYXNzTmFtZToidnYtY2hhcnQiLG9uTW91c2VNb3ZlOkYsb25Nb3VzZUxlYXZlOlZ9KX0pLCgwLHR0LmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToidnYtbmF2LWFycm93Iix0eXBlOiJidXR0b24iLGRpc2FibGVkOkpMKGEsYyksb25DbGljazooKT0+byYmbyhPUyhhLDEpKSx0aXRsZToiTmV4dCB3ZWVrIiwiYXJpYS1sYWJlbCI6Ik5leHQgd2VlayIsY2hpbGRyZW46Ilx1MjAzQSJ9KV19KV19KX12YXIgaGU9UCgkKCksMSk7ZnVuY3Rpb24gUlMoZSx0KXtpZighZSlyZXR1cm47bGV0IG49dC5zdGFydHNXaXRoKCJyZXBlYXQiKTtyZXR1cm57YmFja2dyb3VuZEF0dGFjaG1lbnQ6ImZpeGVkIixiYWNrZ3JvdW5kSW1hZ2U6YHVybCgke2V9KWAsYmFja2dyb3VuZFBvc2l0aW9uOiJjZW50ZXIiLGJhY2tncm91bmRSZXBlYXQ6bj90OiJuby1yZXBlYXQiLGJhY2tncm91bmRTaXplOm4/ImF1dG8iOnR9fWZ1bmN0aW9uIG1fKGUpe2xldCB0PU51bWJlcihlPy5ncmlkV2lkdGhTaXplKT4wP051bWJlcihlLmdyaWRXaWR0aFNpemUpOjEsbj1OdW1iZXIoZT8uZ3JpZEhlaWdodFNpemUpPjA/TnVtYmVyKGUuZ3JpZEhlaWdodFNpemUpOjE7cmV0dXJuYGdyaWQtY2VsbCBob3Jpem9udGFsLSR7dH0tY2VsbCB2ZXJ0aWNhbC0ke259LWNlbGxgfWZ1bmN0aW9uIGhfKGUsdCxuLHIpe2xldCBvPWU/LndpZGdldElkLHtjbGFzc05hbWVzOmEsc3R5bGU6aX09R3gobixyLG8pO3JldHVybntjbGFzc05hbWU6W21fKGUpLHQ/ImdyaWQtY2VsbC0tZHJhZy1hY3RpdmUiOiIiLHQmJnQ9PT1vPyJncmlkLWNlbGwtLWRyYWdnaW5nLXJlYWR5IjoiIix0JiZ0IT09bz8iZ3JpZC1jZWxsLS1kcmFnLXNoaWZ0IjoiIiwuLi5hXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpLCJkYXRhLXdpZGdldC1pZCI6byxzdHlsZTppfX12YXIgamg9Y2xhc3MgZXh0ZW5kcyBnZS5Db21wb25lbnR7c3RhdGljIGNvbnRleHRUeXBlPXNhO2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuc3RhdGU9e2hhc0Vycm9yOiExLGVycm9yOm51bGx9fXN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IodCl7cmV0dXJue2hhc0Vycm9yOiEwLGVycm9yOnR9fWNvbXBvbmVudERpZENhdGNoKHQsbil7ayhgW1dpZGdldEVycm9yQm91bmRhcnldIFdpZGdldCAiJHt0aGlzLnByb3BzLndpZGdldElkfSIgY3Jhc2hlZDpgLHQsbiksdGhpcy5jb250ZXh0Py5yZXBvcnRFcnJvcih0aGlzLnByb3BzLndpZGdldElkKX1yZW5kZXIoKXtyZXR1cm4gdGhpcy5zdGF0ZS5oYXNFcnJvcj8oMCxoZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJ3aWRnZXQtZXJyb3ItZmFsbGJhY2siLGNoaWxkcmVuOlsoMCxoZS5qc3gpKCJwIix7Y2xhc3NOYW1lOiJ3aWRnZXQtZXJyb3ItZmFsbGJhY2stdGl0bGUiLGNoaWxkcmVuOmBcdTI2QTAgJHt0aGlzLnByb3BzLndpZGdldElkfWB9KSwoMCxoZS5qc3gpKCJwIix7Y2xhc3NOYW1lOiJ3aWRnZXQtZXJyb3ItZmFsbGJhY2stbWVzc2FnZSIsY2hpbGRyZW46dGhpcy5zdGF0ZS5lcnJvcj8ubWVzc2FnZXx8IkFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQifSksKDAsaGUuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJ3aWRnZXQtZXJyb3ItZmFsbGJhY2stcmV0cnkiLG9uQ2xpY2s6KCk9PnRoaXMuc2V0U3RhdGUoe2hhc0Vycm9yOiExLGVycm9yOm51bGx9KSxjaGlsZHJlbjoiUmV0cnkifSldfSk6dGhpcy5wcm9wcy5jaGlsZHJlbn19O2Z1bmN0aW9uIGdfKHt3aWRnZXRJZDplfSl7cmV0dXJuIHYwKGUpLG51bGx9ZnVuY3Rpb24geV8oe2hhc0Vycm9yOmU9ITEsaXNSZWFkeTp0LHdpZGdldElkOm59KXtyZXR1cm4gbHQobix0LGUpLG51bGx9ZnVuY3Rpb24gTXQoZSx0LG4pe3JldHVybigwLGdlLm1lbW8pKGZ1bmN0aW9uKG8pe0FTKGUpO2xldHtjb25maWc6YSxkcmFnZ2luZ1dpZGdldElkOmksZm9jdXNlZFdpZGdldElkOnMsZm9jdXNlZFdpZGdldFN1cmZhY2VTdHlsZTpsLGxheW91dENvbmZpZzpkLGxvYWRlZEV2ZW50RXJyb3I6Yyxsb2FkZWRFdmVudFJlYWR5OnUsbW91bnRJbW1lZGlhdGVseTpwLHdpZGdldEZvY3VzVHJhbnNmb3JtOmZ9PW8seT17Z3JpZEhlaWdodFNpemU6TnVtYmVyKGE/LmdyaWRIZWlnaHRTaXplKT4wP051bWJlcihhLmdyaWRIZWlnaHRTaXplKToxLGdyaWRXaWR0aFNpemU6TnVtYmVyKGE/LmdyaWRXaWR0aFNpemUpPjA/TnVtYmVyKGEuZ3JpZFdpZHRoU2l6ZSk6MX0sdj1oXyhkfHxhLGkscyxmKTtsJiYodi5jbGFzc05hbWUrPSIgZ3JpZC1jZWxsLS1mb2N1cy1vdmVybGF5LWhvc3QiKTtsZXQgdz1sPyJncmlkLWNlbGwtc3VyZmFjZSBncmlkLWNlbGwtc3VyZmFjZS0tZm9jdXNlZCI6ImdyaWQtY2VsbC1zdXJmYWNlIixnPSgwLGhlLmpzeHMpKGhlLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsaGUuanN4KShnXyx7d2lkZ2V0SWQ6ZX0pLHUhPT12b2lkIDB8fGM/KDAsaGUuanN4KSh5Xyx7aGFzRXJyb3I6ISFjLGlzUmVhZHk6ISF1LHdpZGdldElkOmV9KTpudWxsLCgwLGhlLmpzeCkodCx7Li4ubihvKX0pXX0pO3JldHVybigwLGhlLmpzeCkoImRpdiIsey4uLnYsY2hpbGRyZW46KDAsaGUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOncsc3R5bGU6bHx8dm9pZCAwLGNoaWxkcmVuOigwLGhlLmpzeCkoamgse3dpZGdldElkOmUsY2hpbGRyZW46KDAsaGUuanN4KShmbS5Qcm92aWRlcix7dmFsdWU6eSxjaGlsZHJlbjpwP2c6KDAsaGUuanN4KShwaCx7d2lkZ2V0SWQ6ZSxjaGlsZHJlbjpnfSl9KX0pfSl9KX0pfWZ1bmN0aW9uIG1hKC4uLmUpe3JldHVybiB0PT57bGV0IG49e307Zm9yKGxldCByIG9mIGUpbltyXT10W3JdO3JldHVybiBufX12YXIgdl89TXQoImFnZW5kYSIsd20sKHthZ2VuZGFUYXNrczplLGFwcDp0LGNhbGVuZGFyRXZlbnRzOm4sY2FsZW5kYXJFdmVudHNMb2FkZWQ6cixjdXJyZW50RGF0ZTpvLHNlbGVjdGVkRGF0ZTphLHRpbWVGb3JtYXQ6aX0pPT4oe2FwcDp0LGNhbGVuZGFyRXZlbnRzOnI/bjpudWxsLGN1cnJlbnREYXRlOm8sc2VsZWN0ZWREYXRlOmEsdGFza3M6ZSx0aW1lRm9ybWF0Oml9KSksYl89TXQoImRheS1za2V0Y2giLENtLCh7YWdlbmRhVGFza3M6ZSxhcHA6dCxjYWxlbmRhckV2ZW50czpuLGNhbGVuZGFyRXZlbnRzTG9hZGVkOnIsY3VycmVudERhdGU6byx0aW1lRm9ybWF0OmF9KT0+KHthZ2VuZGFUYXNrczplLGFwcDp0LGNhbGVuZGFyRXZlbnRzOnI/bjpudWxsLGN1cnJlbnREYXRlOm8sdGltZUZvcm1hdDphfSkpLHdfPU10KCJjYWxlbmRhciIsa20sKHthcHA6ZSxjb21wbGV0ZWRUYXNrc0J5RGF0ZTp0LGNvbmZpZzpuLGN1cnJlbnREYXRlOnIsb25EYXRlU2VsZWN0Om8sb25PcGVuU2V0dGluZ3M6YSxvcGVuVGFza3M6aSxzZWxlY3RlZERhdGU6cyx3ZWVrRm9ybWF0Omx9KT0+KHthcHA6ZSxjb21wbGV0ZWRUYXNrc0J5RGF0ZTp0LGN1cnJlbnREYXRlOnIsZ3JpZEhlaWdodFNpemU6bj8uZ3JpZEhlaWdodFNpemUsZ3JpZFdpZHRoU2l6ZTpuPy5ncmlkV2lkdGhTaXplLG9uRGF0ZVNlbGVjdDpvLG9uT3BlblNldHRpbmdzOmEsb3BlblRhc2tzOmksc2VsZWN0ZWREYXRlOnMsd2Vla0Zvcm1hdDpsfSkpLGtfPU10KCJkZWJ1Zy1jb25zb2xlIixNbSwoKT0+KHt9KSkseF89TXQoImVuZXJneS1wZXItaGFiaXQiLEptLG1hKCJhcHAiKSksU189TXQoImRyZWFtLXRhc2siLEhtLCh7YXBwOmUsY29uZmlnOnQsb25PcGVuU2V0dGluZ3M6bixwcm92aWRlckFwaUtleTpyLHByb3ZpZGVyRW06b30pPT4oe2FwcDplLGdyaWRIZWlnaHRTaXplOk51bWJlcih0Py5ncmlkSGVpZ2h0U2l6ZSl8fDEsZ3JpZFdpZHRoU2l6ZTpOdW1iZXIodD8uZ3JpZFdpZHRoU2l6ZSl8fDIsb25PcGVuU2V0dGluZ3M6bixwcm92aWRlckFwaUtleTpyLHByb3ZpZGVyRW06b30pKSxFXz1NdCgibW9vZCIsbWgsbWEoImFwcCIsIm1vb2RSYXRpbmdzIiwib25Nb29kUmVjb3JkZWQiKSksTl89TXQoIm5vdGUtcGVlayIsaGgsbWEoImFwcCIpKSxUXz1NdCgicGVhay1ob3VycyIseWgsbWEoImFwcCIsImN1cnJlbnREYXRlIiwic2VsZWN0ZWREYXRlIiwidGltZUZvcm1hdCIpKSxEXz1NdCgicHJvcG9zZWQtYWdlbmRhIixBaCwoe2FwcDplLGNhbGVuZGFyRXZlbnRzOnQsY2FsZW5kYXJFdmVudHNMb2FkZWQ6bixjdXJyZW50RGF0ZTpyLHByb3ZpZGVyQXBpS2V5Om8scHJvdmlkZXJFbTphLHRhc2tEb21haW5VVUlEOmksdGltZUZvcm1hdDpzfSk9Pih7YXBwOmUsY2FsZW5kYXJFdmVudHM6bj90Om51bGwsY3VycmVudERhdGU6cixkZWZhdWx0Tm90ZVV1aWQ6bnVsbCxwcm92aWRlckFwaUtleTpvLHByb3ZpZGVyRW06YSx0YXNrRG9tYWluVVVJRDppLHRpbWVGb3JtYXQ6c30pKSxBXz1NdCgicGxhbm5pbmciLG1tLCh7YXBwOmUsY29uZmlnOnQscXVhcnRlcmx5UGxhbnM6bn0pPT4oe2FwcDplLGdyaWRIZWlnaHRTaXplOk51bWJlcih0Py5ncmlkSGVpZ2h0U2l6ZSl8fDEscXVhcnRlcmx5UGxhbnM6bn0pKSxDXz1NdCgicXVpY2stYWN0aW9ucyIsTWgsbWEoImFwcCIsIm9uU3dhcEJhY2tncm91bmQiKSksTV89TXQoInF1b3RlcyIsQ2gsKHthcHA6ZSxjb25maWc6dH0pPT4oe2FwcDplLGdyaWRIZWlnaHRTaXplOk51bWJlcih0Py5ncmlkSGVpZ2h0U2l6ZSl8fDEscGxhbkNvbnRlbnQ6bnVsbCxxdW90ZXM6bnVsbH0pKSxPXz1NdCgicmVjZW50LW5vdGVzIixJaCwoe2FwcDplLGNvbmZpZzp0LHRhc2tEb21haW5VVUlEOm59KT0+KHthcHA6ZSxncmlkSGVpZ2h0U2l6ZTpOdW1iZXIodD8uZ3JpZEhlaWdodFNpemUpfHwxLHRhc2tEb21haW5VVUlEOm59KSksSV89TXQoInNoYXJlZC1ub3RlcyIsRmgsKHthcHA6ZSxjb25maWc6dCx0YXNrRG9tYWluVVVJRDpufSk9Pih7YXBwOmUsZ3JpZEhlaWdodFNpemU6TnVtYmVyKHQ/LmdyaWRIZWlnaHRTaXplKXx8MSx0YXNrRG9tYWluVVVJRDpufSkpLFJfPU10KCJncmF2ZXlhcmQiLHJoLCh7YXBwOmUsY29uZmlnOnQsdGFza0RvbWFpblVVSUQ6bn0pPT4oe2FwcDplLGdyaWRIZWlnaHRTaXplOk51bWJlcih0Py5ncmlkSGVpZ2h0U2l6ZSl8fDEsZ3JpZFdpZHRoU2l6ZTpOdW1iZXIodD8uZ3JpZFdpZHRoU2l6ZSl8fDIsdGFza0RvbWFpblVVSUQ6bn0pKSxQXz1NdCgidmljdG9yeS12YWx1ZSIsVmgsbWEoImFwcCIsImNvbXBsZXRlZFRhc2tzQnlEYXRlIiwiZGFpbHlWYWx1ZXMiLCJtb29kUmF0aW5ncyIsIm9uUmVmZXJlbmNlRGF0ZUNoYW5nZSIsInJlZmVyZW5jZURhdGUiLCJ3ZWVrRm9ybWF0Iiwid2Vla2x5VG90YWwiKSksTF89TXQoImxheW91dC1waWNrZXIiLHVoLG1hKCJhcHAiLCJjdXJyZW50TGF5b3V0Iiwib25MYXlvdXRBcHBseSIsIm9uU2VsZWN0ZWRQcm9maWxlQ2hhbmdlIikpLEdjPXthZ2VuZGE6dl8sY2FsZW5kYXI6d18sImRheS1za2V0Y2giOmJfLCJkZWJ1Zy1jb25zb2xlIjprXywiZHJlYW0tdGFzayI6U18sImVuZXJneS1wZXItaGFiaXQiOnhfLGdyYXZleWFyZDpSXywibGF5b3V0LXBpY2tlciI6TF8sbW9vZDpFXywibm90ZS1wZWVrIjpOXywicGVhay1ob3VycyI6VF8scGxhbm5pbmc6QV8sInByb3Bvc2VkLWFnZW5kYSI6RF8sInF1aWNrLWFjdGlvbnMiOkNfLHF1b3RlczpNXywicmVjZW50LW5vdGVzIjpPXywic2hhcmVkLW5vdGVzIjpJXywidmljdG9yeS12YWx1ZSI6UF99O2Z1bmN0aW9uIF9fKGUpe2xldCB0PWU/LltCLkRBU0hCT0FSRF9DT01QT05FTlRTXSxuPXQ7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXRyeXtuPUpTT04ucGFyc2UodCl9Y2F0Y2h7bj1udWxsfXJldHVybiBBcnJheS5pc0FycmF5KG4pfHwobj1Iciksbi5tYXAocj0+cj8ud2lkZ2V0SWQpLmZpbHRlcihyPT5HY1tyXSl9ZnVuY3Rpb24gVV8oZSx7aW5pdERhdGFGcmVzaFJlZjp0LGluaXRpYWxpemVEb21haW5UYXNrczpuLHNldENvbmZpZ1BhcmFtczpyLHNldEN1cnJlbnREYXRlOm8sc2V0RGFpbHlWaWN0b3J5VmFsdWVzOmEsc2V0TW9vZFJhdGluZ3M6aSxzZXRQbHVnaW5Ob3RlVVVJRDpzLHNldFF1YXJ0ZXJseVBsYW5zOmwsc2V0V2Vla2x5VmljdG9yeVZhbHVlOmR9KXtRZihlLnNldHRpbmdzPy5bQi5DT05TT0xFX0xPR0dJTkddKSxrKGBbZGFzaGJvYXJkXSBhcHBseURhc2hib2FyZERhdGEgXHUyMDE0IHRhc2tzOiR7ZS50YXNrcz8ubGVuZ3RoPz8wfSBtb29kUmF0aW5nczogJHtlLm1vb2RSYXRpbmdzPy5sZW5ndGg/PzB9YCksd2luZG93Ll9fZGFzaGJvYXJkVmlld3BvcnREaWFnJiZrKGBbdmlld3BvcnRdICR7SlNPTi5zdHJpbmdpZnkod2luZG93Ll9fZGFzaGJvYXJkVmlld3BvcnREaWFnKX1gKSxuKGUpLGkoZS5tb29kUmF0aW5ncyksbChlLnF1YXJ0ZXJseVBsYW5zKSxyKGUuc2V0dGluZ3MpLGEoZS5kYWlseVZpY3RvcnlWYWx1ZXMpLGQoZS53ZWVrbHlWaWN0b3J5VmFsdWUpLG8oZS5jdXJyZW50RGF0ZSksZS5wbHVnaW5Ob3RlVVVJRCYmcyhlLnBsdWdpbk5vdGVVVUlEKSx0LmN1cnJlbnQ9ITB9ZnVuY3Rpb24gUFMoZSl7bGV0IHQ9bmV3IERhdGUsbj1kbih0LGUpO3JldHVybiB0LmdldFRpbWUoKS1uLmdldFRpbWUoKTwzKjI0KjYwKjYwKjFlM31mdW5jdGlvbiBGXyhlLHQpe2xldCBuPW5ldyBNYXA7Zm9yKGxldCByIG9mWy4uLmV8fFtdLC4uLnR8fFtdXSl7aWYoIXJ8fHIudGltZXN0YW1wPT1udWxsKWNvbnRpbnVlO2xldCBvPXIudXVpZHx8YCR7ci50aW1lc3RhbXB9OiR7ci5yYXRpbmd9OiR7ci5ub3RlfHwiIn1gO24uc2V0KG8scil9cmV0dXJuIEFycmF5LmZyb20obi52YWx1ZXMoKSkuc29ydCgocixvKT0+KHIudGltZXN0YW1wfHwwKS0oby50aW1lc3RhbXB8fDApKX1hc3luYyBmdW5jdGlvbiB6XyhlLHQsbixyKXtsZXQgbz1kbih0LHIpO1BTKHIpJiYobz1uZXcgRGF0ZShvKSxvLnNldERhdGUoby5nZXREYXRlKCktNykpO2xldCBhPU1hdGguZmxvb3Ioby5nZXRUaW1lKCkvMWUzKTt0cnl7bGV0IGk9YXdhaXQgZS5nZXRNb29kUmF0aW5ncyhhKTtBcnJheS5pc0FycmF5KGkpJiZuKHM9PkZfKHMsaSkpfWNhdGNoKGkpe2soImZldGNoTW9vZFJhdGluZ3M6IGZhaWxlZCB0byBsb2FkIG1vb2QgcmF0aW5ncyIsaSl9fWZ1bmN0aW9uIFdfKGUsdCxuLHIsbyxhKXtlKHIsbyxhKSxhJiYodChhLmRhaWx5VmljdG9yeVZhbHVlcyksbihhLndlZWtseVZpY3RvcnlWYWx1ZSkpfWFzeW5jIGZ1bmN0aW9uIEJfKGUsdCxuLHIsbz0hMSxhPW51bGwpe2xldCBpPUFycmF5LmlzQXJyYXkodD8uW0IuREFTSEJPQVJEX0NPTVBPTkVOVFNdKT90W0IuREFTSEJPQVJEX0NPTVBPTkVOVFNdOkhyLHM9e307b3x8aS5mb3JFYWNoKGQ9PntzW2Qud2lkZ2V0SWRdPWR9KTtsZXQgbD1yLm1hcChkPT57bGV0IGM9c1tkXSx1PUR0LmZpbmQoZj0+Zi53aWRnZXRJZD09PWQpLHA9YT8uW2RdO3JldHVybnt3aWRnZXRJZDpkLGdyaWRXaWR0aFNpemU6cD8uZ3JpZFdpZHRoU2l6ZT8/Yz8uZ3JpZFdpZHRoU2l6ZT8/dT8uZGVmYXVsdEdyaWRXaWR0aFNpemU/PzEsZ3JpZEhlaWdodFNpemU6cD8uZ3JpZEhlaWdodFNpemU/P2M/LmdyaWRIZWlnaHRTaXplPz8xLHNldHRpbmdzOmM/LnNldHRpbmdzfHx7fX19KTthd2FpdCBlLnNldFNldHRpbmcoQi5EQVNIQk9BUkRfQ09NUE9ORU5UUyxKU09OLnN0cmluZ2lmeShsKSkscXIoQi5EQVNIQk9BUkRfQ09NUE9ORU5UUyxsKSxuKGQ9Pih7Li4uZCxbQi5EQVNIQk9BUkRfQ09NUE9ORU5UU106bH0pKX1hc3luYyBmdW5jdGlvbiBIXyhlLHQsbixyLG8sYSx7YXBpS2V5OmksYXBpS2V5UHJvdmlkZXI6cyxiYWNrZ3JvdW5kSW1hZ2VVcmw6bCxiYWNrZ3JvdW5kTW9kZTpkLGxsbVByb3ZpZGVyOmMsdGltZUZvcm1hdDp1LHdlZWtGb3JtYXQ6cH0pe2soIltkYXNoYm9hcmRdIGhhbmRsZVNldHRpbmdzU2F2ZSBjYWxsZWQgd2l0aDoiLHtsbG1Qcm92aWRlcjpjLGFwaUtleVByb3ZpZGVyOnMsYmFja2dyb3VuZE1vZGU6ZCxiYWNrZ3JvdW5kSW1hZ2VVcmw6bCE9bnVsbD8iKHNldCkiOiIodW5jaGFuZ2VkKSIsdGltZUZvcm1hdDp1LHdlZWtGb3JtYXQ6cH0pO2xldCBmPUt0KHN8fGMpLHk9W2Uuc2V0U2V0dGluZyhCLkxMTV9QUk9WSURFUl9NT0RFTCxjKSxlLnNldFNldHRpbmcoQi5CQUNLR1JPVU5EX0lNQUdFX1VSTCxsfHwiIildO2YmJmkmJnkucHVzaChlLnNldFNldHRpbmcoZixpKSksbCYmZCYmeS5wdXNoKGUuc2V0U2V0dGluZyhCLkJBQ0tHUk9VTkRfSU1BR0VfTU9ERSxkKSksdC5jdXJyZW50JiYodXx8cCkmJnkucHVzaCh0LmN1cnJlbnQuc2F2ZSh7dGltZUZvcm1hdDp1LHdlZWtGb3JtYXQ6cH0pKTt0cnl7YXdhaXQgUHJvbWlzZS5hbGwoeSksaygiW2Rhc2hib2FyZF0gc2V0dGluZ3Mgc2F2ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Iil9Y2F0Y2godyl7aygiW2Rhc2hib2FyZF0gc2V0dGluZ3Mgc2F2ZSBGQUlMRUQ6Iix3KX1xcihCLkxMTV9QUk9WSURFUl9NT0RFTCxjKSxmJiZxcihmLGkpO2xldCB2PXtbQi5MTE1fUFJPVklERVJfTU9ERUxdOmMsW0IuQkFDS0dST1VORF9JTUFHRV9VUkxdOmx8fCIiLFtCLkJBQ0tHUk9VTkRfSU1BR0VfTU9ERV06bD9kfHwiY292ZXIiOiIifTtmJiYodltmXT1pKSxuKHc9Pih7Li4udywuLi52fSkpLHUmJm8odSkscCYmYShwKSxyKGJ0LkRFRkFVTFQpfWZ1bmN0aW9uIEtfKGUsdCl7ZShuPT5bLi4ubnx8W10sdF0pfWZ1bmN0aW9uIFloKHthcHA6ZSxpbml0UHJvbWlzZTp0fSl7bGV0e2FjdGl2ZVRhc2tEb21haW46bixidWlsZEFnZW5kYVRhc2tzQnlEYXRlOnIsaW5pdGlhbGl6ZURvbWFpblRhc2tzOm8sb25Eb21haW5DaGFuZ2U6YSxvcGVuVGFza3M6aSx0YXNrRG9tYWluczpzfT1kaCgpLHtjb21wbGV0ZWRUYXNrc0J5RGF0ZTpsLGNvbXBsZXRlZFRhc2tzTG9hZGVkOmQsZmV0Y2hDb21wbGV0ZWRUYXNrczpjfT1paChlKSx7Y2FsZW5kYXJFdmVudHM6dSxjYWxlbmRhckV2ZW50c0xvYWRlZDpwfT1obShlLG4pLFtmLHldPSgwLGdlLnVzZVN0YXRlKShudWxsKSxbdix3XT0oMCxnZS51c2VTdGF0ZSkobnVsbCksW2csaF09KDAsZ2UudXNlU3RhdGUpKG51bGwpLFtiLG1dPSgwLGdlLnVzZVN0YXRlKShudWxsKSxbUyx4XT0oMCxnZS51c2VTdGF0ZSkoYnQuREVGQVVMVCksW0UsVF09KDAsZ2UudXNlU3RhdGUpKG51bGwpLFtBLENdPSgwLGdlLnVzZVN0YXRlKShudWxsKSxbTCxPXT0oMCxnZS51c2VTdGF0ZSkobnVsbCksW1IsRl09KDAsZ2UudXNlU3RhdGUpKG51bGwpLFtWLHpdPSgwLGdlLnVzZVN0YXRlKSgibWVyaWRpYW4iKSxbbmUsTV09KDAsZ2UudXNlU3RhdGUpKCJzdW5kYXkiKSxbVyxEXT0oMCxnZS51c2VTdGF0ZSkobnVsbCksTj0oMCxnZS51c2VSZWYpKG51bGwpLF89KDAsZ2UudXNlUmVmKSghMSksRz0oMCxnZS51c2VSZWYpKG51bGwpO0cuY3VycmVudD09PW51bGwmJihHLmN1cnJlbnQ9b20oKSk7bGV0IFk9KDAsZ2UudXNlUmVmKShEYXRlLm5vdygpKSxqPSgwLGdlLnVzZVJlZikobnVsbCksZWU9KDAsZ2UudXNlUmVmKSghMSkscT1sYyhuZSk7KDAsZ2UudXNlRWZmZWN0KSgoKT0+e2xldCBkZT1EYXRlLm5vdygpO2soIltkYXNoYm9hcmRdIGF3YWl0aW5nIGluaXQgZGF0YSIpLHQudGhlbihhc3luYyBDZT0+e2lmKGsoYFtkYXNoYm9hcmRdIGluaXQgZGF0YSByZWNlaXZlZCBpbiAke0RhdGUubm93KCktZGV9bXNgKSxDZT8uZXJyb3IpbShDZS5lcnJvcik7ZWxzZXt3MChDZSksUTAoQ2Uuc2V0dGluZ3MpLGlsKCJpbml0IiksYzAoKSYmKGouY3VycmVudD1aMChlLHtkZXZpY2VQcm9maWxlOkcuY3VycmVudCxzdGFydGVkQXQ6WS5jdXJyZW50LHdpZGdldElkczpfXyhDZS5zZXR0aW5ncyl9KSksVV8oQ2Use2luaXREYXRhRnJlc2hSZWY6Xyxpbml0aWFsaXplRG9tYWluVGFza3M6byxzZXRDb25maWdQYXJhbXM6eSxzZXRDdXJyZW50RGF0ZTp3LHNldERhaWx5VmljdG9yeVZhbHVlczpoLHNldE1vb2RSYXRpbmdzOlQsc2V0UGx1Z2luTm90ZVVVSUQ6QyxzZXRRdWFydGVybHlQbGFuczpPLHNldFdlZWtseVZpY3RvcnlWYWx1ZTpEfSksTi5jdXJyZW50PW5ldyBCcyhlKTtsZXQgRXQ9RGF0ZS5ub3coKTtrKCJbZGFzaGJvYXJkXSBsb2FkaW5nIERhc2hib2FyZFNldHRpbmdOb3RlIik7bGV0e3RpbWVGb3JtYXQ6dG4sd2Vla0Zvcm1hdDpubn09YXdhaXQgTi5jdXJyZW50LmxvYWQoKTtrKGBbZGFzaGJvYXJkXSBEYXNoYm9hcmRTZXR0aW5nTm90ZSBsb2FkZWQgaW4gJHtEYXRlLm5vdygpLUV0fW1zYCksdG4mJnoodG4pLG5uJiZNKG5uKX19KS5jYXRjaChDZT0+bShDZS5tZXNzYWdlKSl9LFtdKSwoMCxnZS51c2VFZmZlY3QpKCgpPT57aWYoWyJ0cnVlIiwieWVzIiwiMSIsIm9uIiwiZW5hYmxlZCJdLmluY2x1ZGVzKFN0cmluZyhmPy5bQi5DT05TT0xFX0xPR0dJTkddfHwiIikudHJpbSgpLnRvTG93ZXJDYXNlKCkpKXJldHVybiBDUygpfSxbZl0pO2xldCByZT0oMCxnZS51c2VNZW1vKSgoKT0+e2lmKFIpcmV0dXJuIFI7aWYoIXYpcmV0dXJuIG51bGw7aWYoUFMocSkpe2xldCBkZT1kbih2LHEpLENlPW5ldyBEYXRlKGRlKTtyZXR1cm4gQ2Uuc2V0RGF0ZShDZS5nZXREYXRlKCktMSksaWUoQ2UpfXJldHVybiB2fSxbdixSLHFdKSx5ZT0oMCxnZS51c2VDYWxsYmFjaykoZGU9PnpfKGUsZGUsVCxxKSxbZSxxXSk7KDAsZ2UudXNlRWZmZWN0KSgoKT0+e2xldCBkZT1SfHx2O2RlJiYoXy5jdXJyZW50P18uY3VycmVudD0hMTp5ZShkZSksYyhkZSxuKSxyZSYmcmUhPT1kZSYmYyhyZSxuKSl9LFtuLHYsYyx5ZSxSLHJlXSk7bGV0IGJlPSgwLGdlLnVzZUNhbGxiYWNrKSgoZGUsQ2UsRXQpPT5XXyhhLGgsRCxkZSxDZSxFdCksW2FdKSxwZT0oMCxnZS51c2VDYWxsYmFjaykoKGRlLENlPSExLEV0PW51bGwpPT5CXyhlLGYseSxkZSxDZSxFdCksW2UsZl0pLHdlPSgwLGdlLnVzZUNhbGxiYWNrKShkZT0+eShDZT0+KHsuLi5DZSxbQi5TRUxFQ1RFRF9MQVlPVVRfUFJPRklMRV06ZGV9KSksW10pLEJlPSgwLGdlLnVzZUNhbGxiYWNrKShhc3luYyhkZSxDZT0hMSxFdD1udWxsLHRuPXZvaWQgMCk9Pnthd2FpdCBjaCh7YXBwOmUsaXNSZXNldDpDZSxvbkxheW91dFBlcnNpc3Q6cGUsb25TZWxlY3RlZFByb2ZpbGVDaGFuZ2U6d2UscHJvZmlsZUlkOnRuLHNpemluZzpFdCx3aWRnZXRJZHM6ZGV9KSx4KGJ0LkRFRkFVTFQpfSxbZSxwZSx3ZV0pLHVlPSgwLGdlLnVzZUNhbGxiYWNrKShkZT0+SF8oZSxOLHkseCx6LE0sZGUpLFtlXSksVmU9KDAsZ2UudXNlQ2FsbGJhY2spKGRlPT5LXyhULGRlKSxbXSksbGU9KDAsZ2UudXNlQ2FsbGJhY2spKCgpPT57ZWUuY3VycmVudHx8IWouY3VycmVudHx8KGVlLmN1cnJlbnQ9ITAsaWwoImxvYWQtc2V0dGxlIiksai5jdXJyZW50LnRoZW4oZGU9PntkZSYmZWsoZSx7ZGV2aWNlUHJvZmlsZTpHLmN1cnJlbnQsc2V0dGxlZEF0OkRhdGUubm93KCksc3RhcnRlZEF0OlkuY3VycmVudCx3aWRnZXRJZHM6ZGUud2lkZ2V0SWRzfSl9KSl9LFtlXSk7Qm0oe2FjdGl2ZVRhc2tEb21haW46bixhcHA6ZSxvbkRvbWFpbkNoYW5nZTphLG9wZW5UYXNrczppfSk7bGV0IERlPSgwLGdlLnVzZU1lbW8pKCgpPT52P3Iodik6e30sW3Isdl0pLHthY3RpdmVDb21wb25lbnRzOkdlfT1zaCh7Y29uZmlnUGFyYW1zOmZ9KSx7ZHJhZ2dpbmdXaWRnZXRJZDpYZSxkaXNwbGF5ZWRDb21wb25lbnRzOlp9PUYwKEdlLHBlKSx7Y2xlYXJGb2N1c2VkV2lkZ2V0OkFlLGV4cGFuZGVkV2lkZ2V0SWQ6VXQsZm9jdXNlZFdpZGdldElkOmVuLGZvY3VzZWRXaWRnZXRTdXJmYWNlU3R5bGU6cHIsaXNXaWRnZXRGb2N1c01vZGU6R24sd2lkZ2V0Rm9jdXNUcmFuc2Zvcm1zOlRyfT1ZeChYZSxTKSx7aW5jb21pbmdCYWNrZ3JvdW5kVXJsOkRyLHN3YXBCYWNrZ3JvdW5kOlpyLHN3YXBwZWRCYWNrZ3JvdW5kVXJsOmhhfT1haCgpLFJvPSgwLGdlLnVzZUNhbGxiYWNrKSgoKT0+eChidC5TRVRUSU5HU19DT05GSUcpLFtdKSxlbz1kZT0+e3N3aXRjaChkZSl7Y2FzZSJhZ2VuZGEiOnJldHVybiBwO2Nhc2UiY2FsZW5kYXIiOnJldHVybiBkO2Nhc2UiZGVidWctY29uc29sZSI6cmV0dXJuITA7Y2FzZSJsYXlvdXQtcGlja2VyIjpyZXR1cm4hMDtjYXNlIm1vb2QiOnJldHVybiBFIT09bnVsbDtjYXNlInF1aWNrLWFjdGlvbnMiOnJldHVybiEwO2Nhc2UicXVvdGVzIjpyZXR1cm4hMDtjYXNlInZpY3RvcnktdmFsdWUiOnJldHVybiBkJiZnIT09bnVsbCYmRSE9PW51bGw7ZGVmYXVsdDpyZXR1cm59fSxiaT1kZT0+e2xldCBDZT1HY1tkZV0sRXQ9RHQuZmluZChxYz0+cWMud2lkZ2V0SWQ9PT1kZSk7aWYoIUNlfHwhRXQpcmV0dXJuIG51bGw7bGV0IHRuPWY/LltCLkxMTV9QUk9WSURFUl9NT0RFTF0sbm49V3IodG4pLGdhPW5uP0t0KG5uKTpudWxsLGxsPWdhJiZmPy5bZ2FdfHwiIixqYz1ubnx8dG58fG51bGwsWWM9e2dyaWRIZWlnaHRTaXplOjEsZ3JpZFdpZHRoU2l6ZTpFdC5kZWZhdWx0R3JpZFdpZHRoU2l6ZXx8MSxzZXR0aW5nczp7fSx3aWRnZXRJZDpkZX07cmV0dXJuKDAsaGUuanN4KShDZSx7YWdlbmRhVGFza3M6RGUsYXBwOmUsY2FsZW5kYXJFdmVudHM6dSxjYWxlbmRhckV2ZW50c0xvYWRlZDpwLGNvbXBsZXRlZFRhc2tzQnlEYXRlOmwsY29uZmlnOlljLGN1cnJlbnREYXRlOnYsY3VycmVudExheW91dDpQbyxkYWlseVZhbHVlczpnLGxvYWRlZEV2ZW50UmVhZHk6ZW8oZGUpLG1vdW50SW1tZWRpYXRlbHk6ITAsbW9vZFJhdGluZ3M6RSxvbkRhdGVTZWxlY3Q6RixvbkxheW91dEFwcGx5OnBlLG9uTW9vZFJlY29yZGVkOlZlLG9uT3BlblNldHRpbmdzOlJvLG9uUmVmZXJlbmNlRGF0ZUNoYW5nZTpGLG9uU2VsZWN0ZWRQcm9maWxlQ2hhbmdlOndlLG9wZW5UYXNrczppLHByb3ZpZGVyQXBpS2V5OmxsLHByb3ZpZGVyRW06amMscXVhcnRlcmx5UGxhbnM6TCxyZWZlcmVuY2VEYXRlOnJlLHNlbGVjdGVkRGF0ZTpSLHRhc2tEb21haW5VVUlEOm4sdGltZUZvcm1hdDpWLHdlZWtGb3JtYXQ6bmUsd2Vla2x5VG90YWw6V30pfSx3aT1aLm1hcCgoZGUsQ2UpPT5kZT8ud2lkZ2V0SWR8fEhyW0NlXT8ud2lkZ2V0SWQpLmZpbHRlcihkZT0+R2NbZGVdKSxJPWljKHdpLHtvblNldHRsZTpsZX0pO2lmKGIpcmV0dXJuKDAsaGUuanN4cykoImRpdiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWVycm9yIixjaGlsZHJlbjpbKDAsaGUuanN4KSgiaDIiLHtjaGlsZHJlbjoiRGFzaGJvYXJkIEVycm9yIn0pLCgwLGhlLmpzeCkoInAiLHtjaGlsZHJlbjpifSldfSk7aWYoIWYpcmV0dXJuKDAsaGUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtb3V0ZXItY29udGFpbmVyIixjaGlsZHJlbjooMCxoZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbG9hZGluZyIsY2hpbGRyZW46WygwLGhlLmpzeCkoImRpdiIse2NsYXNzTmFtZToic3Bpbm5lciJ9KSwoMCxoZS5qc3gpKCJwIix7Y2hpbGRyZW46IkxvYWRpbmcgZGFzaGJvYXJkLi4uIn0pXX0pfSk7bGV0IEo9Zj8uW0IuQkFDS0dST1VORF9JTUFHRV9VUkxdLHNlPWY/LltCLkJBQ0tHUk9VTkRfSU1BR0VfTU9ERV18fCJjb3ZlciIsX2U9Snx8UmMoImxhcmdlIixpZSh2fHxuZXcgRGF0ZSkpO0omJmsoIltkYXNoYm9hcmRdIGJhY2tncm91bmQgaW1hZ2UgVVJMIGZyb20gc2V0dGluZ3M6IixKLCJtb2RlOiIsc2UpO2xldCB4ZT1SUyhoYXx8X2Usc2UpLFN0PURyP3suLi5SUyhEcixzZSksYW5pbWF0aW9uOmAke2wxfSAke29ofW1zIGVhc2UtaW4tb3V0IGZvcndhcmRzYH06bnVsbCxmcj1TdHJpbmcoZltCLkRFQlVHX0NPTlNPTEVdfHwiIikudHJpbSgpPT09InRydWUifHxJbnx8RnMoKS5wbHVnaW5VVUlEPT09IjZkYTAzNTc0LTBmNGItMTFmMS1iYTllLTExYmE5YzcxNmY1OSIsc2w9ZnI7ZnI/ayhgW2Rhc2hib2FyZF0gRGVidWcgY29uc29sZSBlbmFibGVkIChjb25maWdQYXJhbXMgIiR7ZltCLkRFQlVHX0NPTlNPTEVdfHwiKGVtcHR5KSJ9IiBhcHAgc2V0dGluZyBrZXlzICIke09iamVjdC5rZXlzKGUuc2V0dGluZ3MpfHwiKGVtcHR5KSJ9IiwgJHtGcygpLnBsdWdpblVVSUR9KSwgaW5jbHVkaW5nIGluIGxheW91dCBwb3B1cGApOmsoYFtkYXNoYm9hcmRdIERlYnVnIGNvbnNvbGUgZGlzYWJsZWQgKCR7Qi5ERUJVR19DT05TT0xFfSBpcyAnJHtmPy5bQi5ERUJVR19DT05TT0xFXX0nLCBwbHVnaW5VVUlEICR7RnMoKS5wbHVnaW5VVUlEfSwgY29udGV4dCAke0pTT04uc3RyaW5naWZ5KEZzKCkpfSksIGV4Y2x1ZGluZyBmcm9tIGxheW91dCBwb3B1cGApO2xldCBBcj1mcj9bXTpbImRlYnVnLWNvbnNvbGUiXSxQbz1BcnJheS5pc0FycmF5KGY/LltCLkRBU0hCT0FSRF9DT01QT05FTlRTXSk/ZltCLkRBU0hCT0FSRF9DT01QT05FTlRTXTpIcjtyZXR1cm4oMCxoZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtb3V0ZXItY29udGFpbmVyIixzdHlsZTp4ZSxjaGlsZHJlbjpbU3Q/KDAsaGUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtYmFja2dyb3VuZC1mYWRlIixzdHlsZTpTdH0pOm51bGwsUz09PWJ0LkxBWU9VVF9DT05GSUc/KDAsaGUuanN4KShTbSx7Y3VycmVudExheW91dDpQbyxleGNsdWRlV2lkZ2V0SWRzOkFyLG9uU2F2ZTpCZSxvbkNhbmNlbDooKT0+eChidC5ERUZBVUxUKSxzZWxlY3RlZExheW91dFByb2ZpbGU6Zj8uW0IuU0VMRUNURURfTEFZT1VUX1BST0ZJTEVdfHxudWxsfSk6bnVsbCxTPT09YnQuU0VUVElOR1NfQ09ORklHPyhrKCJbZGFzaGJvYXJkXSByZW5kZXJpbmcgRGFzaGJvYXJkU2V0dGluZ3NQb3B1cCwgYmdVcmw6IixmPy5bQi5CQUNLR1JPVU5EX0lNQUdFX1VSTF0pLCgwLGhlLmpzeCkoRG0se2FwcDplLGNvbmZpZ1BhcmFtczpmLG9uQ2FuY2VsOigpPT54KGJ0LkRFRkFVTFQpLG9uT3Blbk1lbW9yeU1lYXN1cmVtZW50OnNsPygpPT54KGJ0Lk1FTU9SWV9NRUFTVVJFTUVOVCk6bnVsbCxvblNhdmU6dWUscGx1Z2luTm90ZVVVSUQ6QSx0aW1lRm9ybWF0OlYsd2Vla0Zvcm1hdDpuZX0pKTpudWxsLFM9PT1idC5NRU1PUllfTUVBU1VSRU1FTlQ/KDAsaGUuanN4KShHaCx7b25DbG9zZTooKT0+eChidC5TRVRUSU5HU19DT05GSUcpLHJlbmRlcldpZGdldDpiaX0pOm51bGwsUyE9PWJ0Lk1FTU9SWV9NRUFTVVJFTUVOVD8oMCxoZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOmBkYXNoYm9hcmQtY29udGVudCR7R24/IiBkYXNoYm9hcmQtY29udGVudC0td2lkZ2V0LWZvY3VzZWQiOiIifWAsY2hpbGRyZW46WygwLGhlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC10b29sYmFyIixjaGlsZHJlbjpbKDAsaGUuanN4KSh6aCx7YWN0aXZlVGFza0RvbWFpbjpuLGFwcDplLGRvbWFpbnM6cyxvbkRvbWFpbkNoYW5nZTpiZX0pLCgwLGhlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC10b29sYmFyLWFjdGlvbnMiLGNoaWxkcmVuOlsoMCxoZS5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1jb25maWd1cmUtYnV0dG9uIix0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntrKCJbZGFzaGJvYXJkXSBvcGVuaW5nIFNldHRpbmdzIHBvcHVwIikseChidC5TRVRUSU5HU19DT05GSUcpfSx0aXRsZToiQ29uZmlndXJlIExMTSBwcm92aWRlciBhbmQgQVBJIGtleSBmb3IgQUktcG93ZXJlZCBmZWF0dXJlcyIsY2hpbGRyZW46Ilx1MjY5OVx1RkUwRiBTZXR0aW5ncyJ9KSwoMCxoZS5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1jb25maWd1cmUtYnV0dG9uIix0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PngoYnQuTEFZT1VUX0NPTkZJRyksdGl0bGU6IkNvbmZpZ3VyZSB3aGljaCB3aWRnZXRzIGFyZSBzaG93biBhbmQgaW4gd2hhdCBvcmRlciIsY2hpbGRyZW46Ilx1MjYzMCBMYXlvdXQifSldfSldfSksKDAsaGUuanN4cykoImRpdiIse2NsYXNzTmFtZTpgZGFzaGJvYXJkLWdyaWQtc2hlbGwke0duPyIgZGFzaGJvYXJkLWdyaWQtc2hlbGwtLWZvY3VzZWQiOiIifWAsY2hpbGRyZW46W0duPygwLGhlLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWdyaWQtZm9jdXMtYmFja2Ryb3AiLHR5cGU6ImJ1dHRvbiIsdGl0bGU6IlJldHVybiBhbGwgd2lkZ2V0cyB0byB0aGUgZGFzaGJvYXJkIGdyaWQiLCJhcmlhLWxhYmVsIjoiUmV0dXJuIGFsbCB3aWRnZXRzIHRvIHRoZSBkYXNoYm9hcmQgZ3JpZCIsb25DbGljazpBZX0pOm51bGwsKDAsaGUuanN4KShzYS5Qcm92aWRlcix7dmFsdWU6SSxjaGlsZHJlbjooMCxoZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6YGRhc2hib2FyZC1ncmlkJHtYZT8iIGRhc2hib2FyZC1ncmlkLS1kcmFnZ2luZyI6IiJ9JHtHbj8iIGRhc2hib2FyZC1ncmlkLS1mb2N1c2VkIjoiIn1gLGNoaWxkcmVuOloubWFwKChkZSxDZSk9PntsZXQgRXQ9ZGU/LndpZGdldElkfHxIcltDZV0/LndpZGdldElkLHRuPUdjW0V0XTtpZighdG4pcmV0dXJuIG51bGw7bGV0IG5uPWY/LltCLkxMTV9QUk9WSURFUl9NT0RFTF0sZ2E9V3Iobm4pLGxsPWdhP0t0KGdhKTpudWxsLGpjPWxsJiZmPy5bbGxdfHwiIixZYz1nYXx8bm58fG51bGwscWM9angoZGUsVXQpO3JldHVybigwLGhlLmpzeCkodG4se2FnZW5kYVRhc2tzOkRlLGFwcDplLGNhbGVuZGFyRXZlbnRzOnUsY2FsZW5kYXJFdmVudHNMb2FkZWQ6cCxjb21wbGV0ZWRUYXNrc0J5RGF0ZTpsLGNvbmZpZzpxYyxjdXJyZW50RGF0ZTp2LGRhaWx5VmFsdWVzOmcsZHJhZ2dpbmdXaWRnZXRJZDpYZSxmb2N1c2VkV2lkZ2V0SWQ6ZW4sZm9jdXNlZFdpZGdldFN1cmZhY2VTdHlsZTplbj09PUV0P3ByOm51bGwsbGF5b3V0Q29uZmlnOmRlLGxvYWRlZEV2ZW50UmVhZHk6ZW8oRXQpLG1vb2RSYXRpbmdzOkUsb25EYXRlU2VsZWN0OkYsY3VycmVudExheW91dDpQbyxvbkxheW91dEFwcGx5OnBlLG9uU2VsZWN0ZWRQcm9maWxlQ2hhbmdlOndlLG9uTW9vZFJlY29yZGVkOlZlLG9uT3BlblNldHRpbmdzOlJvLG9uUmVmZXJlbmNlRGF0ZUNoYW5nZTpGLG9uU3dhcEJhY2tncm91bmQ6WnIsb3BlblRhc2tzOmkscHJvdmlkZXJBcGlLZXk6amMscHJvdmlkZXJFbTpZYyxxdWFydGVybHlQbGFuczpMLHJlZmVyZW5jZURhdGU6cmUsc2VsZWN0ZWREYXRlOlIsdGFza0RvbWFpblVVSUQ6bix0aW1lRm9ybWF0OlYsd2Vla0Zvcm1hdDpuZSx3ZWVrbHlUb3RhbDpXLHdpZGdldEZvY3VzVHJhbnNmb3JtOlRyW0V0XXx8bnVsbH0sRXQpfSkuZmlsdGVyKEJvb2xlYW4pfSl9KV19KV19KTpudWxsXX0pfXZhciBfUz1QKCQoKSwxKTt1MCgpO3ZhciBHXz00MzAsVl89ImRhc2hib2FyZC1sYXJnZS1waG9uZS12aWV3cG9ydCI7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2xldCBuPU1hdGgubWluKHNjcmVlbi53aWR0aCxzY3JlZW4uaGVpZ2h0KSxyPXdpbmRvdy5tYXRjaE1lZGlhKCIob3JpZW50YXRpb246IGxhbmRzY2FwZSkiKS5tYXRjaGVzP01hdGgubWF4KHNjcmVlbi53aWR0aCxzY3JlZW4uaGVpZ2h0KTpuO2lmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKFZfLHI8PUdfKSxyPj13aW5kb3cuaW5uZXJXaWR0aCl7ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm1heFdpZHRoPSIiLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvd1g9IiIsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCItLWRhc2hib2FyZC12aWV3cG9ydC13aWR0aCIpLGRvY3VtZW50LmJvZHkuc3R5bGUubWF4V2lkdGg9IiIsZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvd1g9IiI7cmV0dXJufWxldCBvPXIrInB4Ijtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUubWF4V2lkdGg9byxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3dYPSJoaWRkZW4iLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1kYXNoYm9hcmQtdmlld3BvcnQtd2lkdGgiLG8pLGRvY3VtZW50LmJvZHkuc3R5bGUubWF4V2lkdGg9byxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93WD0iaGlkZGVuIn10KCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdCl9KSgpO3ZhciBWYyxxaDtJbj8oVmM9bm0oKSxxaD1WYy5pbml0KCkpOihWYz1uZXcgUHJveHkoe30se2dldChlLHQpe2lmKHR5cGVvZiB0IT0ic3ltYm9sIilyZXR1cm4oLi4ubik9PndpbmRvdy5jYWxsQW1wbGVub3RlUGx1Z2luKHQsLi4ubil9fSkscWg9d2luZG93LmNhbGxBbXBsZW5vdGVQbHVnaW4oImluaXQiKSk7KDAsTFMuY3JlYXRlUm9vdCkoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRhc2hib2FyZC1yb290IikpLnJlbmRlcigoMCxfUy5qc3gpKFloLHthcHA6VmMsaW5pdFByb21pc2U6cWh9KSk7fSkoKTsKLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjoKCnJlYWN0L2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qczoKICAoKioKICAgKiBAbGljZW5zZSBSZWFjdAogICAqIHJlYWN0LnByb2R1Y3Rpb24ubWluLmpzCiAgICoKICAgKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICAgKgogICAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogICAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICAgKikKCnNjaGVkdWxlci9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzOgogICgqKgogICAqIEBsaWNlbnNlIFJlYWN0CiAgICogc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzCiAgICoKICAgKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICAgKgogICAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogICAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICAgKikKCnJlYWN0LWRvbS9janMvcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzOgogICgqKgogICAqIEBsaWNlbnNlIFJlYWN0CiAgICogcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzCiAgICoKICAgKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICAgKgogICAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogICAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICAgKikKCnJlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qczoKICAoKioKICAgKiBAbGljZW5zZSBSZWFjdAogICAqIHJlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzCiAgICoKICAgKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICAgKgogICAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogICAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICAgKikKKi8K";
 
// css-content:css-content
var compiledCSS = `.rich-footnote-wrap{display:inline}.rich-footnote-indicator{cursor:default;display:inline-block;font-size:.65em;margin-left:2px;opacity:.65;vertical-align:super}.rich-footnote-indicator:hover{opacity:1}.tippy-box[data-theme~=rich-footnote]{background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:10px;box-shadow:0 4px 16px var(--dashboard-color-overlay-shadow);color:var(--dashboard-color-text);font-size:.85rem;line-height:1.5;max-width:420px;min-width:200px}.tippy-box[data-theme~=rich-footnote]>.tippy-arrow{color:var(--dashboard-color-bg-card)}.tippy-box[data-theme~=rich-footnote]>.tippy-content{padding:12px}.rich-footnote-popup{display:flex;flex-direction:column;gap:8px}.rich-footnote-popup-url{align-items:center;display:flex;gap:4px}.rich-footnote-popup-url svg{color:var(--dashboard-color-accent);flex-shrink:0}.rich-footnote-popup-url a{color:var(--dashboard-color-link);overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.rich-footnote-popup-url a:hover{text-decoration:underline}.rich-footnote-popup-text{color:var(--dashboard-color-text)}.rich-footnote-popup-media{border-radius:6px;overflow:hidden}.rich-footnote-popup-media img,.rich-footnote-popup-media video,.rich-footnote-popup-media iframe{display:block;max-width:100%;width:100%}.rich-footnote-popup-media iframe{aspect-ratio:16/9;border:0}.rich-footnote-popup-actions{border-top:1px solid var(--dashboard-color-border);display:flex;justify-content:flex-end;padding-top:8px}.rich-footnote-popup-close{background:none;border:none;color:var(--dashboard-color-accent);cursor:pointer;font-size:.8rem;font-weight:600;letter-spacing:.5px;padding:4px 8px}.rich-footnote-popup-close:hover{opacity:.8}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{border-radius:6px;font-size:.75rem;line-height:1.4;outline:0;position:relative;transition-property:transform,visibility,opacity;white-space:normal}.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}.tippy-content{padding:8px 12px;position:relative;z-index:1}.tippy-arrow{color:var(--dashboard-color-tooltip-bg);height:16px;width:16px}.tippy-arrow:before{border-color:#0000;border-style:solid;content:"";position:absolute}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{border-top-color:initial;border-width:8px 8px 0;bottom:-7px;left:0;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:initial;border-width:0 8px 8px;left:0;top:-7px;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-left-color:initial;border-width:8px 0 8px 8px;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{border-right-color:initial;border-width:8px 8px 8px 0;left:-7px;transform-origin:center right}.tippy-box[data-theme~=dashboard]{background:var(--dashboard-color-tooltip-bg);box-shadow:0 4px 12px var(--dashboard-color-tooltip-shadow);color:var(--dashboard-color-tooltip-text);max-width:260px;min-width:180px}.tippy-box[data-theme~=dashboard]>.tippy-arrow{color:var(--dashboard-color-tooltip-bg)}.tippy-box[data-theme~=dashboard].below-chart>.tippy-content{max-height:40vh;overflow-y:auto}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-header{border-bottom:1px solid var(--dashboard-color-tooltip-border);font-weight:600;margin-bottom:4px;padding-bottom:4px}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-section{border-bottom:1px solid var(--dashboard-color-tooltip-border);margin-bottom:4px;padding-bottom:4px}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-row{align-items:baseline;display:flex;gap:8px;justify-content:space-between;padding:2px 0}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-row-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-row-label p{display:inline;margin:0}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-row-value{color:var(--dashboard-color-tooltip-accent);flex-shrink:0;font-weight:600}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-empty{color:var(--dashboard-color-tooltip-text-muted);font-style:italic}.tippy-box[data-theme~=dashboard] .mood-viz-tooltip-date{border-bottom:1px solid var(--dashboard-color-tooltip-border);font-weight:600;margin-bottom:4px;padding-bottom:4px}.tippy-box[data-theme~=dashboard] .mood-viz-tooltip-entry{align-items:baseline;display:flex;flex-wrap:wrap;gap:4px 6px;padding:2px 0}.tippy-box[data-theme~=dashboard] .mood-viz-tooltip-time{color:var(--dashboard-color-tooltip-text-muted);font-size:.7rem;min-width:52px}.tippy-box[data-theme~=dashboard] .mood-viz-tooltip-mood .mood-viz-label{color:var(--dashboard-color-tooltip-text-muted)}.tippy-box[data-theme~=dashboard] .mood-viz-tooltip-note{color:var(--dashboard-color-tooltip-text);flex-basis:100%;font-size:.7rem;font-style:italic;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-word}.widget .widget-body{overflow-y:auto}.widget .widget-heading-bar,.widget .widget-title{align-items:center;display:flex}.widget .widget-title__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.widget .widget-header-action{text-decoration:none;white-space:nowrap}.widget .widget-header-action:hover{text-decoration:underline}.widget-planning .planning-quarters{display:flex;flex-wrap:wrap;gap:16px;margin-bottom:16px}.widget-planning .quarter-card{border:2px dashed var(--dashboard-color-border);border-radius:10px;cursor:pointer;display:flex;flex:1 1 140px;flex-direction:column;gap:4px;min-width:0;padding:12px 16px;transition:background .15s,border-color .15s}.widget-planning .quarter-card:hover{border-color:var(--dashboard-color-blue)}.widget-planning .quarter-card--has-plan{background:var(--dashboard-color-plan-created-bg);border-color:var(--dashboard-color-plan-created-border);border-style:solid}.widget-planning .quarter-card--has-plan:hover{border-color:var(--dashboard-color-plan-created-border);filter:brightness(.97)}.widget-planning .quarter-card .quarter-label{color:var(--dashboard-color-navy);font-size:.95rem;font-weight:700}.widget-planning .quarter-card .quarter-status-row{align-items:center;display:flex;gap:8px;justify-content:space-between}.widget-planning .quarter-card .quarter-status{color:var(--dashboard-color-text-secondary);font-size:.75rem}.widget-planning .quarter-card .quarter-plan-indicator{cursor:default;flex-shrink:0;font-size:.85rem;line-height:1}.widget-planning .month-tabs{display:flex;flex-wrap:wrap;gap:4px}.widget-planning .month-tab{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;flex:1;font-size:.8rem;padding:8px 12px;transition:background .15s,color .15s}.widget-planning .month-tab:hover{background:var(--dashboard-color-blue-light)}.widget-planning .month-tab.active{background:var(--dashboard-color-accent);border-color:var(--dashboard-color-accent);color:var(--dashboard-color-text-on-accent);font-weight:600}.widget-planning .month-content-area{border:1px solid var(--dashboard-color-border);border-radius:6px;margin-top:12px;overflow:hidden;padding:12px 16px}.widget-planning .month-content-loading{color:var(--dashboard-color-text-muted);font-size:.8rem;font-style:italic}.widget-planning .month-content-header{color:var(--dashboard-color-navy);font-size:.85rem;font-weight:700;margin-bottom:8px}.widget-planning .month-content-text{color:var(--dashboard-color-text);font-size:13px;line-height:1.4}.widget-planning .month-content-text p{margin:0 0 4px}.widget-planning .month-content-text ol,.widget-planning .month-content-text ul{margin:0 0 4px;padding-left:16px}.widget-planning .month-content-text li{margin:0;padding:0}.widget-planning .month-content-text strong{color:var(--dashboard-color-navy)}.widget-planning .month-content-text>:last-child{margin-bottom:0}.widget-planning .month-content-empty{text-align:center}.widget-planning .create-month-plan-link{background:none;border:2px dashed var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-link);cursor:pointer;font-size:.8rem;padding:8px 16px;transition:border-color .15s,color .15s}.widget-planning .create-month-plan-link:hover{border-color:var(--dashboard-color-blue);color:var(--dashboard-color-navy)}.widget-planning .planning-empty{color:var(--dashboard-color-text-muted);font-size:.85rem;font-style:italic;padding:16px 0;text-align:center}.widget-planning .weekly-plan-section{border-top:1px solid var(--dashboard-color-border);margin-top:16px;padding-top:12px}.widget-planning .weekly-plan-header{color:var(--dashboard-color-navy);font-size:.85rem;font-weight:700;margin-bottom:8px}.widget-planning .weekly-plan-loading{color:var(--dashboard-color-text-muted);font-size:.8rem;font-style:italic}.widget-planning .create-week-plan-link{background:none;border:2px dashed var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-link);cursor:pointer;font-size:.8rem;padding:8px 16px;transition:border-color .15s,color .15s;width:100%}.widget-planning .create-week-plan-link:hover{border-color:var(--dashboard-color-blue);color:var(--dashboard-color-navy)}.widget-planning .note-editor{display:flex;flex-direction:column;gap:8px;height:100%}.widget-planning .note-editor-loading{color:var(--dashboard-color-text-muted);font-size:.8rem;font-style:italic;padding:12px}.widget-planning .note-editor-toolbar{display:flex;gap:8px}.widget-planning .note-editor-btn{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;cursor:pointer;font-size:.8rem;padding:4px 12px;transition:background .15s}.widget-planning .note-editor-btn:hover{background:var(--dashboard-color-blue-light)}.widget-planning .note-editor-btn--save{background:var(--dashboard-color-accent);border-color:var(--dashboard-color-accent);color:var(--dashboard-color-text-on-accent);font-weight:600}.widget-planning .note-editor-btn--save:hover{filter:brightness(.92)}.widget-planning .note-editor-btn--save:disabled{cursor:default;opacity:.6}.widget-planning .note-editor-textarea{border:1px solid var(--dashboard-color-border);border-radius:6px;flex:1;line-height:1.5;min-height:180px;padding:12px;resize:vertical}.widget-agenda a{color:var(--dashboard-color-link);text-decoration:none}.widget-agenda a:hover{text-decoration:underline}.widget-agenda img{max-width:100%}.widget-agenda .widget-body{display:flex;flex-direction:column;overflow:hidden}.widget-agenda .agenda-list{display:flex;flex:1;flex-direction:column;gap:12px;min-height:0;overflow-x:hidden;overflow-y:auto;padding-right:4px}.widget-agenda .agenda-day{display:flex;flex-direction:column;gap:4px}.widget-agenda .agenda-date-label{color:var(--dashboard-color-text-secondary);font-size:.75rem;font-weight:700;letter-spacing:.02em;text-transform:uppercase}.widget-agenda .agenda-empty-day{color:var(--dashboard-color-text-muted);font-size:.8rem;font-style:italic;padding:4px 0}.widget-agenda .agenda-item{align-items:center;display:flex;gap:12px;padding:8px 0}.widget-agenda .agenda-item .agenda-indicator{border-radius:2px;flex-shrink:0;height:36px;width:4px}.widget-agenda .agenda-item .agenda-indicator.priority-critical{background-color:var(--dashboard-color-agenda-priority-critical)}.widget-agenda .agenda-item .agenda-indicator.priority-important{background-color:var(--dashboard-color-agenda-priority-important)}.widget-agenda .agenda-item .agenda-indicator.priority-urgent{background-color:var(--dashboard-color-agenda-priority-urgent)}.widget-agenda .agenda-item .agenda-indicator.priority-normal{background-color:var(--dashboard-color-agenda-priority-normal)}.widget-agenda .agenda-item .agenda-content{display:flex;flex:1;flex-direction:column;gap:4px}.widget-agenda .agenda-item .agenda-content .agenda-time{color:var(--dashboard-color-text-secondary);font-size:.75rem;font-weight:600}.widget-agenda .agenda-item .agenda-content .agenda-text{color:var(--dashboard-color-text);font-size:13px;overflow:hidden;white-space:nowrap}.widget-agenda .agenda-item .agenda-content .agenda-note-link{background:#0000;border:0;color:var(--dashboard-color-link);cursor:pointer;font-size:12px;margin:0;padding:0;text-align:left;text-decoration:underline}.widget-agenda .agenda-item .agenda-duration{color:var(--dashboard-color-text-muted);font-size:.7rem}.widget-agenda .agenda-task-row{border-radius:6px;cursor:pointer;padding:8px;transition:background-color .12s ease}.widget-agenda .agenda-task-row:hover{background:var(--dashboard-color-bg-page)}.widget-agenda .agenda-empty{color:var(--dashboard-color-text-secondary);font-size:.85rem;padding:24px 0;text-align:center}.widget-agenda .agenda-pagination{align-items:center;display:flex;gap:4px}.widget-agenda .agenda-page-arrow{background:none;border:none;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.65rem;line-height:1;padding:2px 4px}.widget-agenda .agenda-page-arrow:hover:not(:disabled){color:var(--dashboard-color-navy)}.widget-agenda .agenda-page-arrow:disabled{cursor:default;opacity:.3}.widget-agenda .agenda-page-indicator{color:var(--dashboard-color-text-muted);font-size:.7rem;white-space:nowrap}.widget-calendar.vertical-2-cell .cal-arrow{font-size:.9rem}.widget-calendar.vertical-2-cell .cal-month{font-size:1.1rem}.widget-calendar.vertical-2-cell .cal-header{font-size:.85rem}.widget-calendar.vertical-2-cell .cal-cell{padding-top:0}.widget-calendar.vertical-2-cell .cal-cell .cal-day{font-size:16px;top:0}.widget-calendar.vertical-2-cell .cal-cell .cal-dot{bottom:18%;height:6px;width:6px}.widget-calendar.horizontal-2-cell.vertical-1-cell .widget-body{display:flex;flex-direction:column;padding:8px 16px}.widget-calendar.horizontal-2-cell.vertical-1-cell .cal-nav{margin-bottom:8px}.widget-calendar.horizontal-2-cell.vertical-1-cell .cal-grid{flex:1}.widget-calendar.horizontal-2-cell.vertical-1-cell .cal-header{padding:2px 0}.widget-calendar.horizontal-2-cell.vertical-1-cell .cal-cell{aspect-ratio:auto;border-radius:12px}.widget-calendar .cal-nav{align-items:center;display:flex;justify-content:space-between;margin-bottom:12px}.widget-calendar .cal-arrow{background:none;border:none;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.75rem;padding:4px}.widget-calendar .cal-arrow:hover{color:var(--dashboard-color-navy)}.widget-calendar .cal-month{color:var(--dashboard-color-navy);font-size:.85rem;font-weight:700}.widget-calendar .cal-grid{display:grid;gap:2px;grid-template-columns:repeat(7,1fr);text-align:center}.widget-calendar .cal-header{color:var(--dashboard-color-text-muted);font-size:.7rem;font-weight:600;padding:4px 0}.widget-calendar .cal-cell{align-items:center;aspect-ratio:1;border-radius:50%;cursor:pointer;display:flex;flex-direction:column;justify-content:center;padding:4px 0;position:relative;transition:background-color .12s ease}.widget-calendar .cal-cell:not(.empty):hover{background:var(--dashboard-color-blue-light)}.widget-calendar .cal-cell.empty{cursor:default;visibility:hidden}.widget-calendar .cal-cell.today{background:var(--dashboard-color-blue)}.widget-calendar .cal-cell.today .cal-day{color:var(--dashboard-color-text-on-accent);font-weight:700}.widget-calendar .cal-cell.today:hover{background:var(--dashboard-color-navy)}.widget-calendar .cal-cell.selected{outline:2px solid var(--dashboard-color-accent);outline-offset:0}.widget-calendar .cal-cell.today.selected{outline-color:var(--dashboard-color-accent)}.widget-calendar .cal-cell .cal-day{color:var(--dashboard-color-text);font-size:.8rem;position:relative;top:-2px}.widget-calendar .cal-cell .cal-dot{border-radius:50%;bottom:6px;height:4px;position:absolute;width:4px}@media (max-width: 430px){.widget-calendar .cal-cell{aspect-ratio:auto;min-height:32px}.widget-calendar .cal-cell .cal-dot{bottom:auto;margin-top:6px;position:static}}.dashboard-large-phone-viewport .widget-calendar .cal-cell{aspect-ratio:auto;min-height:32px}.dashboard-large-phone-viewport .widget-calendar .cal-cell .cal-dot{bottom:auto;margin-top:6px;position:static}.dashboard-layout-popup{display:flex;flex-direction:column;margin:16px;max-height:min(800px,100vh - 32px);max-width:min(800px,var(--dashboard-viewport-width, 100vw) - 32px);min-width:0;width:100%}.dashboard-layout-popup .dashboard-layout-popup-tabs{display:flex;gap:4px;margin-top:12px}.dashboard-layout-popup .dashboard-layout-popup-tab{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;flex:1;font-size:.8rem;padding:8px 12px;transition:background .15s ease,color .15s ease}.dashboard-layout-popup .dashboard-layout-popup-tab:hover{background:var(--dashboard-color-blue-light)}.dashboard-layout-popup .dashboard-layout-popup-tab.active{background:var(--dashboard-color-accent);border-color:var(--dashboard-color-accent);color:var(--dashboard-color-text-on-accent);font-weight:600}.dashboard-layout-popup .dashboard-layout-popup-body{display:flex;flex:1;flex-direction:column;gap:16px;overflow-y:auto;padding:16px}.dashboard-layout-popup .dashboard-layout-popup-section{border:2px dashed rgba(0,0,0,0);border-radius:10px;padding:4px;transition:border-color .15s ease,background .15s ease}.dashboard-layout-popup .dashboard-layout-popup-section--drag-over{background:var(--dashboard-color-blue-light);border-color:var(--dashboard-color-accent)}.dashboard-layout-popup .dashboard-layout-popup-section-header{align-items:center;border-bottom:1px solid var(--dashboard-color-border);display:flex;gap:8px;margin-bottom:8px;padding-bottom:8px}.dashboard-layout-popup .dashboard-layout-popup-section-icon{flex-shrink:0;font-size:.9rem;line-height:1}.dashboard-layout-popup .dashboard-layout-popup-section-title{color:var(--dashboard-color-text-secondary);font-size:.72rem;font-weight:700;letter-spacing:.05em;margin:0;text-transform:uppercase}.dashboard-layout-popup .dashboard-layout-popup-list{display:flex;flex-direction:column;gap:4px}.dashboard-layout-popup .dashboard-layout-popup-item{align-items:center;background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;cursor:grab;display:flex;gap:8px;padding:8px 12px;transition:opacity .12s ease,box-shadow .12s ease,background .12s ease;-webkit-user-select:none;user-select:none}.dashboard-layout-popup .dashboard-layout-popup-item:active{cursor:grabbing}.dashboard-layout-popup .dashboard-layout-popup-item--dragging{opacity:.35}.dashboard-layout-popup .dashboard-layout-popup-item--drag-over{background:var(--dashboard-color-bg-card);box-shadow:0 -2px 0 var(--dashboard-color-accent)}.dashboard-layout-popup .dashboard-layout-popup-item-handle{color:var(--dashboard-color-text-muted);cursor:grab;flex-shrink:0;font-size:1rem;line-height:1}.dashboard-layout-popup .dashboard-layout-popup-item-handle:active{cursor:grabbing}.dashboard-layout-popup .dashboard-layout-popup-item-icon{flex-shrink:0;font-size:1rem;line-height:1}.dashboard-layout-popup .dashboard-layout-popup-item-info{display:flex;flex:1;flex-direction:column;gap:1px;min-width:0;overflow:hidden}.dashboard-layout-popup .dashboard-layout-popup-item-name{color:var(--dashboard-color-text);font-size:.875rem;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-layout-popup .dashboard-layout-popup-item-description{color:var(--dashboard-color-text-secondary);font-size:.75rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-layout-popup .dashboard-layout-popup-item-actions{display:flex;flex-shrink:0;gap:2px}.dashboard-layout-popup .dashboard-layout-popup-arrow-button{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.8rem;line-height:1;padding:3px 7px;transition:background .1s ease,color .1s ease}.dashboard-layout-popup .dashboard-layout-popup-arrow-button:hover:not(:disabled){background:var(--dashboard-color-bg-card);color:var(--dashboard-color-text)}.dashboard-layout-popup .dashboard-layout-popup-arrow-button:disabled{cursor:not-allowed;opacity:.3}.dashboard-layout-popup .dashboard-layout-popup-empty{color:var(--dashboard-color-text-muted);font-size:.8rem;font-style:italic;padding:12px 8px;text-align:center}.dashboard-layout-popup .dashboard-layout-popup-sizing{display:flex;flex-direction:column;gap:8px}.dashboard-layout-popup .dashboard-layout-popup-sizing-item{background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;display:flex;align-items:center;gap:12px;padding:8px 12px}.dashboard-layout-popup .dashboard-layout-popup-sizing-item-header{align-items:center;display:flex;gap:8px;flex:1;min-width:0}.dashboard-layout-popup .dashboard-layout-popup-sizing-item-controls{display:flex;flex-shrink:0;gap:16px}.dashboard-layout-popup .dashboard-layout-popup-profile-select{margin-left:8px;padding:3px 6px}.dashboard-layout-popup .dashboard-layout-popup-sizing-field{align-items:center;display:flex;gap:4px}.dashboard-layout-popup .dashboard-layout-popup-sizing-label{color:var(--dashboard-color-text-secondary);font-size:.72rem;font-weight:600;letter-spacing:.03em;text-transform:uppercase;white-space:nowrap}.dashboard-layout-popup .dashboard-layout-popup-sizing-select{background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text);cursor:pointer;font-size:.8rem;padding:4px 8px}.dashboard-layout-popup .config-popup-actions .config-popup-link{background:none;border:none;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.8rem;margin-right:auto;padding:0;text-decoration:underline}.dashboard-layout-popup .config-popup-actions .config-popup-link:hover{color:var(--dashboard-color-text)}.dashboard-toolbar{align-items:stretch;display:flex;flex-wrap:wrap;gap:12px;justify-content:space-between;margin-bottom:16px}.dashboard-toolbar .dashboard-toolbar-actions{align-items:center;display:flex;background-color:var(--dashboard-color-bg-card);border-radius:6px;border:1px solid var(--dashboard-color-border);color:var(--dashboard-color-text-secondary);flex-shrink:0;padding:5px 8px}.dashboard-toolbar .dashboard-configure-button{background-color:var(--dashboard-color-bg-card);border:1px solid rgba(0,0,0,0);border-radius:6px;color:var(--dashboard-color-text);cursor:pointer;font-size:13px;font-weight:500;padding:4px 12px;transition:background .15s ease,color .15s ease,border-color .15s ease;white-space:nowrap}.dashboard-toolbar .dashboard-configure-button:hover{background:var(--dashboard-color-bg-page);border-color:var(--dashboard-color-accent);color:var(--dashboard-color-text)}.config-popup-overlay{align-items:center;background:var(--dashboard-color-overlay-backdrop);bottom:0;display:flex;justify-content:center;left:0;position:fixed;top:0;width:var(--dashboard-viewport-width, 100vw);z-index:1000}.config-popup-container{background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:14px;box-shadow:0 8px 32px var(--dashboard-color-overlay-shadow);max-width:90%;min-width:320px;width:650px}.config-popup-container .explanation-paragraph{font-size:14px;margin:12px 0 20px}.config-popup-container .config-popup-header{border-bottom:1px solid var(--dashboard-color-border);padding:16px}.config-popup-container .config-popup-title{color:var(--dashboard-color-navy);font-size:.95rem;font-weight:700;margin:0}.config-popup-container .config-popup-body{padding:16px}.config-popup-container .config-popup-body label{align-items:center;color:var(--dashboard-color-text);cursor:pointer;display:flex;font-size:.85rem;gap:8px;padding:4px 0}.config-popup-container .config-popup-body input[type=radio],.config-popup-container .config-popup-body input[type=checkbox]{accent-color:var(--dashboard-color-accent)}.config-popup-container .config-popup-body .config-field{margin-bottom:12px}.config-popup-container .config-popup-body .config-field .config-line{margin-bottom:10px;margin-top:10px}.config-popup-container .config-popup-body .config-field:last-child{margin-bottom:0}.config-popup-container .config-popup-body .config-field-label{color:var(--dashboard-color-text-secondary);font-size:.75rem;font-weight:600;letter-spacing:.03em;margin-bottom:4px;text-transform:uppercase}.config-popup-container .config-popup-actions{border-top:1px solid var(--dashboard-color-border);display:flex;gap:8px;justify-content:flex-end;padding:12px 16px}.config-popup-container .config-popup-actions>button{padding-left:8px;padding-right:8px}.config-popup-container .config-popup-btn{border:1px solid var(--dashboard-color-border);border-radius:6px;cursor:pointer;font-size:.8rem;font-weight:600;padding:8px 16px}.config-popup-container .config-popup-btn--cancel{background:#0000;color:var(--dashboard-color-text-secondary)}.config-popup-container .config-popup-btn--cancel:hover{background:var(--dashboard-color-bg-page-hover)}.config-popup-container .config-popup-btn--submit{background:var(--dashboard-color-accent);border-color:var(--dashboard-color-accent);color:var(--dashboard-color-text-on-accent)}.config-popup-container .config-popup-btn--submit:hover{opacity:.9}.dashboard-settings-container .dashboard-settings-section{display:flex;flex-direction:column}.dashboard-settings-container .dashboard-settings-section.section:not(:first-child){border-top:1px solid var(--dashboard-color-border);margin-top:16px;padding-top:16px}.dashboard-settings-container .dashboard-settings-section-header{display:flex;flex-direction:column;gap:4px}.dashboard-settings-container .dashboard-settings-section-title{color:var(--dashboard-color-navy);font-size:.85rem;font-weight:700;letter-spacing:.02em;margin:0}.dashboard-settings-container .dashboard-settings-section-desc{color:var(--dashboard-color-text-secondary);font-size:.8rem;line-height:1.5;margin:0}.dashboard-settings-container .dashboard-settings-select{-webkit-appearance:none;appearance:none;background:var(--dashboard-color-bg-page);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23999' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-position:right 8px center;background-repeat:no-repeat;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text);cursor:pointer;font-size:.85rem;padding:8px 24px 8px 8px;transition:border-color .15s ease;width:100%}.dashboard-settings-container .dashboard-settings-select:focus{border-color:var(--dashboard-color-accent);outline:none}.dashboard-settings-container .dashboard-settings-dropzone{align-items:center;background:var(--dashboard-color-bg-page);border:2px dashed var(--dashboard-color-border);border-radius:6px;cursor:pointer;display:flex;flex-direction:column;gap:8px;justify-content:center;min-height:120px;padding:16px;text-align:center;transition:border-color .15s ease,background .15s ease}.dashboard-settings-container .dashboard-settings-dropzone:hover{border-color:var(--dashboard-color-accent)}.dashboard-settings-container .dashboard-settings-dropzone--active{background:#00000008;border-color:var(--dashboard-color-accent);border-style:solid}.dashboard-settings-container .dashboard-settings-dropzone--uploading{cursor:wait;opacity:.7}.dashboard-settings-container .dashboard-settings-dropzone-input{display:none}.dashboard-settings-container .dashboard-settings-dropzone-text{color:var(--dashboard-color-text-muted);font-size:.8rem}.dashboard-settings-container .dashboard-settings-dropzone-preview{align-items:center;display:flex;flex-direction:column;gap:8px}.dashboard-settings-container .dashboard-settings-dropzone-preview-img{border-radius:6px;max-height:80px;max-width:100%;object-fit:contain}.dashboard-settings-container .dashboard-settings-remove-image{color:var(--dashboard-color-danger);cursor:pointer;display:inline-block;font-size:.8rem;margin-top:4px;text-decoration:none}.dashboard-settings-container .dashboard-settings-remove-image:hover{text-decoration:underline}.dashboard-settings-container .dashboard-settings-api-key-hint{color:var(--dashboard-color-text-secondary);font-size:.8rem;line-height:1.45;margin:0 0 4px}.dashboard-settings-container .dashboard-settings-api-key-link{color:var(--dashboard-color-link);display:inline-block;font-size:.8rem;margin-bottom:4px;text-decoration:none}.dashboard-settings-container .dashboard-settings-api-key-link:hover{text-decoration:underline}.dashboard-settings-container .dashboard-settings-api-key-input-row{align-items:center;display:flex;gap:4px}.dashboard-settings-container .dashboard-settings-api-key-input{background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text);flex:1;font-family:monospace;font-size:.82rem;min-width:0;padding:8px;transition:border-color .15s ease}.dashboard-settings-container .dashboard-settings-api-key-input::placeholder{color:var(--dashboard-color-text-muted)}.dashboard-settings-container .dashboard-settings-api-key-input:focus{border-color:var(--dashboard-color-accent);outline:none}.dashboard-settings-container .dashboard-settings-api-key-toggle{background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;flex-shrink:0;font-size:.9rem;line-height:1;padding:8px;transition:background .1s ease,color .1s ease}.dashboard-settings-container .dashboard-settings-api-key-toggle:hover{background:var(--dashboard-color-bg-card);color:var(--dashboard-color-text)}.dashboard-settings-container .dashboard-settings-debug-button{align-self:flex-start;background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text);cursor:pointer;font-size:.8rem;margin-top:12px;padding:8px 12px}.dashboard-settings-container .dashboard-settings-debug-button:hover{background:var(--dashboard-color-bg-page-hover)}.widget-day-sketch .widget-body{display:flex;flex-direction:column;overflow:hidden;padding:0}.widget-day-sketch .day-sketch-notebook{background-color:#fffef5;background-image:repeating-linear-gradient(transparent,transparent 33px,#b8d4e8 33px,#b8d4e8 34px);background-attachment:local;background-position:0 0;background-size:100% 34px;border-left:3px solid #e88e8e;flex:1;margin-left:0;min-height:0;overflow-y:auto;padding:0 8px 0 0}.widget-day-sketch .day-sketch-line{align-items:center;display:flex;height:34px;padding-left:4px;position:relative}.widget-day-sketch .day-sketch-hour-label{color:#a0a0a0;flex-shrink:0;font-family:Segoe Script,Bradley Hand,Comic Sans MS,cursive,Roboto,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:.78rem;font-weight:700;letter-spacing:.02em;text-align:right;text-transform:lowercase;-webkit-user-select:none;user-select:none;width:64px;padding-right:8px}.widget-day-sketch .day-sketch-input{background:#0000;border:none;color:#333;flex:1;font-family:Segoe Script,Bradley Hand,Comic Sans MS,cursive,Roboto,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:.88rem;height:100%;line-height:34px;outline:none;padding:0 4px}.widget-day-sketch .day-sketch-input::placeholder{color:#0000}.widget-day-sketch .day-sketch-input:focus{background:#b8d4e81f}.widget-day-sketch .day-sketch-loading{align-items:center;color:var(--dashboard-color-text-muted);display:flex;font-size:.85rem;height:100%;justify-content:center;padding:24px}.widget-day-sketch .day-sketch-save-btn{background:none;border:1px solid var(--dashboard-color-blue);border-radius:6px;color:var(--dashboard-color-blue);cursor:pointer;font-size:.72rem;font-weight:600;padding:2px 8px;transition:background .15s ease,color .15s ease}.widget-day-sketch .day-sketch-save-btn:hover:not(:disabled){background:var(--dashboard-color-blue);color:var(--dashboard-color-text-on-accent)}.widget-day-sketch .day-sketch-save-btn--disabled{border-color:var(--dashboard-color-text-muted);color:var(--dashboard-color-text-muted);cursor:default;opacity:.5}@media (prefers-color-scheme: dark){.widget-day-sketch .day-sketch-notebook{background-color:#2a2923;background-image:repeating-linear-gradient(transparent,transparent 33px,#4a5568 33px,#4a5568 34px);border-left-color:#7c4444}.widget-day-sketch .day-sketch-hour-label{color:#6b7280}.widget-day-sketch .day-sketch-input{color:#e2e0d8}.widget-day-sketch .day-sketch-input:focus{background:#4a556826}}.widget-debug-console .widget-body{max-height:2000px;overflow-y:auto;padding:0}.widget-debug-console .debug-console{font-family:Courier New,Courier,monospace;font-size:11px;height:100%;max-height:100%;overflow-y:auto;padding:6px 8px}.widget-debug-console .debug-console__empty{color:var(--color-text-muted, #888);font-family:inherit;font-size:12px;padding:12px 4px}.widget-debug-console .debug-console__entry{align-items:baseline;border-bottom:1px solid var(--color-border, rgba(0, 0, 0, .06));display:flex;gap:8px;line-height:1.4;padding:2px 0}.widget-debug-console .debug-console__entry:last-child{border-bottom:none}.widget-debug-console .debug-console__timestamp{color:var(--color-text-secondary, #888);flex-shrink:0;font-size:10px;opacity:.75;-webkit-user-select:none;user-select:none}.widget-debug-console .debug-console__message{color:var(--color-text, #222);overflow-wrap:break-word;word-break:break-all}.widget-debug-console .debug-console__clear-button{background:none;border:1px solid var(--color-border, rgba(0, 0, 0, .2));border-radius:3px;color:var(--color-text-muted, #888);cursor:pointer;font-size:11px;line-height:1;padding:2px 6px}.widget-debug-console .debug-console__clear-button:hover{background:var(--color-hover, rgba(0, 0, 0, .06));color:var(--color-text, #222)}.config-popup-container .config-popup-body .llm-provider-options{display:flex;flex-direction:column;gap:4px}.config-popup-container .config-popup-body .llm-provider-option{align-items:flex-start;gap:8px;padding:8px 4px}.config-popup-container .config-popup-body .llm-provider-option input[type=radio]{margin-top:3px}.config-popup-container .config-popup-body .llm-provider-option-text{display:flex;flex-direction:column;gap:2px}.config-popup-container .config-popup-body .llm-provider-option-name{color:var(--dashboard-color-text);font-weight:700}.config-popup-container .config-popup-body .llm-provider-option-desc{color:var(--dashboard-color-text-secondary);font-size:.78rem;line-height:1.35}.dashboard-outer-container .no-config-upsell{align-items:center;display:flex;flex-direction:column;gap:8px;padding:4px 12px 12px;text-align:center}.dashboard-outer-container .no-config-upsell-badges{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}.dashboard-outer-container .no-config-upsell-badge{border-radius:999px;font-size:.7rem;font-weight:700;letter-spacing:.04em;padding:4px 12px;text-transform:uppercase;white-space:nowrap}.dashboard-outer-container .no-config-upsell-badge--brand{background:#4a9eff1f;color:var(--dashboard-color-blue)}.dashboard-outer-container .no-config-upsell-badge--price{border:1px solid var(--dashboard-color-border);color:var(--dashboard-color-text-secondary);text-transform:none}.dashboard-outer-container .no-config-upsell-headline{color:var(--dashboard-color-navy);font-size:1.05rem;font-weight:700;line-height:1.25;margin:4px 0 0}.dashboard-outer-container .no-config-upsell-subhead{color:var(--dashboard-color-text-secondary);font-size:.85rem;line-height:1.45;margin:0;max-width:26rem}.dashboard-outer-container .no-config-upsell-features{display:grid;gap:8px;grid-template-columns:repeat(2,minmax(0,1fr));justify-content:center;width:100%}@media (max-width: 430px){.dashboard-outer-container .no-config-upsell-features{grid-template-columns:minmax(0,1fr)}}.dashboard-large-phone-viewport .dashboard-outer-container .no-config-upsell-features{grid-template-columns:minmax(0,1fr)}.dashboard-outer-container .no-config-upsell-feature{align-items:center;border:1px solid var(--dashboard-color-border);border-radius:999px;color:var(--dashboard-color-navy);display:flex;font-size:.8rem;font-weight:600;gap:4px;justify-content:center;padding:4px 12px}.dashboard-outer-container .no-config-upsell-feature-icon{font-size:.85rem;line-height:1}.dashboard-outer-container .no-config-upsell-more{color:var(--dashboard-color-text-muted);font-size:.8rem;margin:0}.dashboard-outer-container .no-config-upsell-actions{align-items:stretch;border-top:1px solid var(--dashboard-color-border);display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-top:4px;padding-top:12px;width:100%}.dashboard-outer-container .no-config-upsell-button{align-items:center;border:1px solid var(--dashboard-color-border);border-radius:10px;color:var(--dashboard-color-navy);display:inline-flex;font-size:.85rem;font-weight:600;gap:4px;justify-content:center;line-height:1.2;padding:8px 16px;text-decoration:none;transition:border-color .15s ease,background .15s ease,color .15s ease}.dashboard-outer-container .no-config-upsell-button--primary:hover{background:#4a9eff1f;border-color:var(--dashboard-color-blue);color:var(--dashboard-color-blue)}.dashboard-outer-container .no-config-upsell-button--secondary:hover{border-color:var(--dashboard-color-blue);color:var(--dashboard-color-blue)}.dashboard-outer-container .no-config-upsell-footnote{color:var(--dashboard-color-success);font-size:.78rem;margin:0}.dashboard-outer-container .widget-dream-task .dream-task-header-actions{align-items:center;display:flex;gap:8px}.dashboard-outer-container .widget-dream-task .dream-task-list{display:flex;flex-direction:column;gap:12px}.dashboard-outer-container .widget-dream-task .dream-task-llm-attribution{color:var(--dashboard-color-text-secondary);font-size:.7rem;line-height:1.4;padding-top:8px}.dashboard-outer-container .widget-dream-task .widget-title{align-items:center;display:flex}@media (max-width: 430px){.dashboard-outer-container .widget-dream-task .widget-title .widget-title__subtitle{display:none}}.dashboard-large-phone-viewport .dashboard-outer-container .widget-dream-task .widget-title .widget-title__subtitle{display:none}.dashboard-outer-container .widget-dream-task .dream-task-goals-summary{border-bottom:1px solid var(--dashboard-color-border);margin-bottom:8px;padding-bottom:12px}.dashboard-outer-container .widget-dream-task .dream-task-goals-text{color:var(--dashboard-color-text-secondary);font-size:.8rem;font-style:italic;line-height:1.5;margin:0}.dashboard-outer-container .widget-dream-task .dream-task-card{border:1px solid var(--dashboard-color-border);border-radius:10px;opacity:1;padding:12px 16px;transition:border-color .15s ease,opacity .28s ease,transform .28s ease}.dashboard-outer-container .widget-dream-task .dream-task-card:hover{border-color:var(--dashboard-color-blue-light)}.dashboard-outer-container .widget-dream-task .dream-task-card--dismissing{opacity:0;pointer-events:none;transform:translateY(6px) scale(.98)}.dashboard-outer-container .widget-dream-task .dream-task-card-header{align-items:flex-start;display:flex;gap:8px;justify-content:space-between;margin-bottom:8px}.dashboard-outer-container .widget-dream-task .dream-task-card-title{color:var(--dashboard-color-navy);font-size:14px;font-weight:500;line-height:1.3}.dashboard-outer-container .widget-dream-task .dream-task-card-title--clickable{cursor:pointer}.dashboard-outer-container .widget-dream-task .dream-task-card-title--clickable:hover{color:var(--dashboard-color-blue);text-decoration:underline}.dashboard-outer-container .widget-dream-task .dream-task-rating{border-radius:6px;flex-shrink:0}.dashboard-outer-container .widget-dream-task .dream-task-rating--high{background:#22c55e1f;color:var(--dashboard-color-success)}.dashboard-outer-container .widget-dream-task .dream-task-rating--medium{background:#eab3081f;color:var(--dashboard-color-warning)}.dashboard-outer-container .widget-dream-task .dream-task-rating--low{background:#ef44441f;color:var(--dashboard-color-danger)}.dashboard-outer-container .widget-dream-task .dream-task-card--invented{border-left:2px solid var(--dashboard-color-blue-light)}.dashboard-outer-container .widget-dream-task .dream-task-new-badge{background:#4a9eff1f;border-radius:6px;color:var(--dashboard-color-blue);flex-shrink:0}.dashboard-outer-container .widget-dream-task .dream-task-source-note-badge{background:#7c3aed1a;border-radius:6px;color:var(--dashboard-color-navy);flex-shrink:0;font-size:11px;font-weight:600;max-width:11rem;overflow:hidden;padding:2px 4px;text-overflow:ellipsis;text-transform:none;white-space:nowrap}.dashboard-outer-container .widget-dream-task .dream-task-new-badge,.dashboard-outer-container .widget-dream-task .dream-task-rating{font-size:11px;font-weight:700;padding:2px 4px;text-transform:uppercase;white-space:nowrap}@media (max-width: 430px){.dashboard-outer-container .widget-dream-task .dream-task-card-header{gap:4px;justify-content:flex-start}.dashboard-outer-container .widget-dream-task .dream-task-card-title{flex:1 0 100%;min-width:0;order:1}.dashboard-outer-container .widget-dream-task .dream-task-new-badge,.dashboard-outer-container .widget-dream-task .dream-task-source-note-badge,.dashboard-outer-container .widget-dream-task .dream-task-rating{display:none}}.dashboard-large-phone-viewport .dashboard-outer-container .widget-dream-task .dream-task-card-header{gap:4px;justify-content:flex-start}.dashboard-large-phone-viewport .dashboard-outer-container .widget-dream-task .dream-task-card-title{flex:1 0 100%;min-width:0;order:1}.dashboard-large-phone-viewport .dashboard-outer-container .widget-dream-task .dream-task-new-badge,.dashboard-large-phone-viewport .dashboard-outer-container .widget-dream-task .dream-task-source-note-badge,.dashboard-large-phone-viewport .dashboard-outer-container .widget-dream-task .dream-task-rating{display:none}.dashboard-outer-container .widget-dream-task .dream-task-card-explanation{color:var(--dashboard-color-text-secondary);cursor:pointer;display:-webkit-box;font-size:12px;line-height:1.5;margin:0;overflow:hidden;text-overflow:ellipsis;line-clamp:3;-webkit-box-orient:vertical;-webkit-line-clamp:3}.dashboard-outer-container .widget-dream-task .dream-task-card-explanation--expanded{display:block;overflow:visible;text-overflow:clip;line-clamp:initial;-webkit-box-orient:initial;-webkit-line-clamp:initial}.dashboard-outer-container .widget-dream-task .dream-task-card-actions{align-items:center;display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.dashboard-outer-container .widget-dream-task .dream-task-card-action{color:var(--dashboard-color-link);cursor:pointer;font-size:.75rem;font-weight:600;text-decoration:none}.dashboard-outer-container .widget-dream-task .dream-task-card-action:hover{text-decoration:underline}.dashboard-outer-container .widget-dream-task .dream-task-settings-link{color:var(--dashboard-color-link);font-weight:600;text-decoration:none}.dashboard-outer-container .widget-dream-task .dream-task-settings-link:hover{text-decoration:underline}.dashboard-outer-container .widget-dream-task .dream-task-loading{align-items:center;display:flex;flex-direction:column;gap:12px;padding:24px;text-align:center}.dashboard-outer-container .widget-dream-task .dream-task-loading p{color:var(--dashboard-color-text-secondary);font-size:.85rem;margin:0}.dashboard-outer-container .widget-dream-task .dream-task-spinner{animation:spin .8s linear infinite;border:3px solid var(--dashboard-color-border);border-radius:50%;border-top-color:var(--dashboard-color-blue);height:24px;width:24px}.dashboard-outer-container .widget-dream-task .dream-task-error{padding:16px;text-align:center}.dashboard-outer-container .widget-dream-task .dream-task-error p{color:var(--dashboard-color-danger);font-size:.85rem;margin:0 0 12px}.dashboard-outer-container .widget-dream-task .dream-task-empty{padding:16px;text-align:center}.dashboard-outer-container .widget-dream-task .dream-task-empty p{color:var(--dashboard-color-text-secondary);font-size:.85rem;margin:0 0 12px}.dashboard-outer-container .widget-dream-task .dream-task-retry{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.8rem;padding:4px 12px}.dashboard-outer-container .widget-dream-task .dream-task-retry:hover{border-color:var(--dashboard-color-blue);color:var(--dashboard-color-blue)}.widget-energy-per-habit .habit-header{margin-bottom:16px}.widget-energy-per-habit .habit-eyebrow{color:var(--dashboard-color-text-muted);font-size:.7rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase}.widget-energy-per-habit .habit-title{color:var(--dashboard-color-text);font-size:1.6rem;font-weight:600;line-height:1.15;margin-top:4px}.widget-energy-per-habit .habit-chart{position:relative}.widget-energy-per-habit .habit-zero-line{border-left:1px solid var(--dashboard-color-border);bottom:0;left:calc(46% + (54% - 3.6rem)/2);position:absolute;top:18px}.widget-energy-per-habit .habit-zero-label{color:var(--dashboard-color-text-muted);font-size:.65rem;left:-3px;position:absolute;top:-14px}.widget-energy-per-habit .habit-rows{display:flex;flex-direction:column;gap:14px}.widget-energy-per-habit .habit-row{align-items:center;display:grid;grid-template-columns:46% 1fr 1fr 3.6rem;gap:0}.widget-energy-per-habit .habit-row-lead{align-items:center;display:flex;gap:8px;min-width:0;padding-right:12px}.widget-energy-per-habit .habit-row-icon{flex:0 0 auto;font-size:1rem;opacity:.85;width:20px}.widget-energy-per-habit .habit-row-text{min-width:0}.widget-energy-per-habit .habit-row-label{color:var(--dashboard-color-text);font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.widget-energy-per-habit .habit-row-label--link{cursor:pointer}.widget-energy-per-habit .habit-row-label--link:hover,.widget-energy-per-habit .habit-row-label--link:focus-visible{color:var(--dashboard-color-accent);text-decoration:underline}.widget-energy-per-habit .habit-row-meta{color:var(--dashboard-color-text-muted);font-size:12px;margin-top:1px}.widget-energy-per-habit .streak-label{align-items:center;display:flex;gap:4px}.widget-energy-per-habit .streak-label:before{background-color:#8a8f98;border-radius:3px;content:"";flex:0 0 auto;height:11px;width:11px}.widget-energy-per-habit .streak-label.streak-week:before{background-color:#8a8f98}.widget-energy-per-habit .streak-label.streak-alive:before{background-color:#5b7bbf}.widget-energy-per-habit .streak-label.streak-month:before{background-color:#e2c541}.widget-energy-per-habit .streak-label.streak-quarter:before{background-color:#e08a2f}.widget-energy-per-habit .streak-label.streak-half-year:before{background-color:#cf3b2e}.widget-energy-per-habit .habit-row-track{display:contents}.widget-energy-per-habit .habit-row-axis{display:none}.widget-energy-per-habit .habit-row-bar-half{align-items:center;display:flex;height:18px}.widget-energy-per-habit .habit-row-bar-half--negative{justify-content:flex-end;border-right:1px solid var(--dashboard-color-border);padding-right:1px}.widget-energy-per-habit .habit-row-bar-half--positive{justify-content:flex-start;padding-left:1px}.widget-energy-per-habit .habit-row-bar{border-radius:3px;height:100%}.widget-energy-per-habit .habit-row-bar--positive{background:#a4b431}.widget-energy-per-habit .habit-row-bar--negative{background:#b0468a}.widget-energy-per-habit .habit-row-value{font-size:.95rem;font-variant-numeric:tabular-nums;font-weight:600;padding-left:12px;text-align:right;white-space:nowrap}.widget-energy-per-habit .habit-row-value--positive{color:#a4b431}.widget-energy-per-habit .habit-row-value--negative{color:#b0468a}.widget-energy-per-habit .habit-footnote{background:var(--dashboard-color-bg-page);border-radius:10px;color:var(--dashboard-color-text-secondary);font-size:.78rem;line-height:1.5;margin-top:16px;padding:12px 16px}.widget-energy-per-habit .habit-footnote strong{color:var(--dashboard-color-text)}.widget-energy-per-habit .habit-empty{color:var(--dashboard-color-text-secondary);padding:24px 12px;text-align:center}.widget-energy-per-habit .habit-empty-hint{color:var(--dashboard-color-text-muted);font-size:.82rem;margin-top:8px}.widget-graveyard .widget-body{display:flex;flex-direction:column;overflow:hidden}.widget-graveyard.horizontal-1-cell .widget-title__subtitle{display:none}.widget-graveyard .graveyard-meadow-wrapper{flex:1;min-height:0;overflow:hidden;position:relative}.widget-graveyard .graveyard-meadow-bg{border-radius:6px;height:100%;inset:0;object-fit:cover;position:absolute;transition:opacity .6s ease;width:100%}.widget-graveyard .graveyard-task-list{display:flex;flex-direction:column;gap:4px;list-style:none;max-height:100%;overflow-y:auto;padding:0;position:relative;z-index:1}.widget-graveyard .graveyard-task-item{background:var(--dashboard-color-bg-card);border-bottom:1px solid var(--dashboard-color-border);display:flex;flex-direction:column;gap:4px;padding:8px 12px}.widget-graveyard .graveyard-task-item:last-child{border-bottom:none}.widget-graveyard .graveyard-task-item--dismissing{pointer-events:none;visibility:hidden}.widget-graveyard .graveyard-task-header{align-items:baseline;display:flex;gap:8px;justify-content:space-between}.widget-graveyard .graveyard-task-title-wrap{flex:1;min-width:0}.widget-graveyard .graveyard-task-title{color:var(--dashboard-color-text);display:block;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.widget-graveyard .graveyard-task-title:focus{outline:1px solid var(--dashboard-color-link);outline-offset:2px}.widget-graveyard .graveyard-task-title-wrap:hover .graveyard-task-title,.widget-graveyard .graveyard-task-title-wrap:focus-within .graveyard-task-title{text-decoration:underline dotted}.widget-graveyard .graveyard-task-tooltip{display:flex;flex-direction:column;gap:8px;max-height:280px;overflow-y:auto;padding:12px}.widget-graveyard .graveyard-task-tooltip-meta{align-items:baseline;display:flex;flex-wrap:wrap;gap:4px 12px;justify-content:space-between}.widget-graveyard .graveyard-task-tooltip-note{color:var(--dashboard-color-tooltip-accent);font-size:.76rem;font-weight:600}.widget-graveyard .graveyard-task-tooltip-created{color:var(--dashboard-color-tooltip-text-muted);font-size:.72rem}.widget-graveyard .graveyard-task-tooltip-content{color:var(--dashboard-color-tooltip-text);font-size:.78rem;line-height:1.4}.widget-graveyard .graveyard-task-tooltip-content code{background:#ffffff14;border-radius:4px;padding:1px 4px}.widget-graveyard .graveyard-task-tooltip-footer{border-top:1px solid var(--dashboard-color-tooltip-border);padding-top:8px}.widget-graveyard .graveyard-task-score--muted{color:var(--dashboard-color-tooltip-text-muted)}.widget-graveyard .graveyard-task-score--cool{color:var(--dashboard-color-blue-light)}.widget-graveyard .graveyard-task-score--warm{color:var(--dashboard-color-warning)}.widget-graveyard .graveyard-task-score--hot{color:var(--dashboard-color-danger)}.widget-graveyard .graveyard-task-score-dot{background:currentColor;border-radius:999px;display:inline-block;height:9px;width:9px}.widget-graveyard .graveyard-task-age{color:var(--dashboard-color-text-muted);flex-shrink:0;font-size:.75rem;white-space:nowrap}.widget-graveyard .graveyard-task-actions{display:flex;gap:12px}.widget-graveyard .graveyard-task-actions>a{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.widget-graveyard .graveyard-task-action{color:var(--dashboard-color-text-secondary);font-size:.75rem;text-decoration:none}.widget-graveyard .graveyard-task-action:hover{text-decoration:underline}.widget-graveyard .graveyard-task-action--send:hover{color:var(--dashboard-color-danger)}.widget-graveyard .graveyard-task-action--keep:hover{color:var(--dashboard-color-link)}.widget-graveyard .graveyard-task-action--note:hover{color:var(--dashboard-color-blue)}.widget-graveyard.vertical-1-cell .graveyard-task-tooltip{max-height:220px}.widget-graveyard.horizontal-1-cell.vertical-1-cell .graveyard-task-header{align-items:flex-start}.widget-graveyard.horizontal-1-cell.vertical-1-cell .graveyard-task-age{font-size:.7rem}.widget-graveyard .graveyard-loading,.widget-graveyard .graveyard-empty{color:var(--dashboard-color-text-secondary);font-size:.85rem;padding:12px 0;text-align:center}.widget-graveyard .graveyard-error{display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px 0}.widget-graveyard .graveyard-error p{color:var(--dashboard-color-danger);font-size:.85rem;text-align:center}.widget-graveyard .graveyard-retry{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.8rem;padding:4px 8px}.widget-graveyard .graveyard-retry:hover{border-color:var(--dashboard-color-border);color:var(--dashboard-color-text)}.widget-layout-picker .layout-picker-warning{background:color-mix(in srgb,var(--dashboard-color-warning) 15%,transparent);border:1px solid color-mix(in srgb,var(--dashboard-color-warning) 40%,transparent);border-radius:6px;color:var(--dashboard-color-text);font-size:.8rem;font-weight:600;margin-bottom:12px;padding:8px 12px}.widget-layout-picker .layout-picker-profiles{display:flex;flex-direction:column;gap:8px}.widget-layout-picker .layout-picker-profile-button{background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:10px;color:var(--dashboard-color-text);cursor:pointer;padding:12px;text-align:left;transition:background .15s ease,border-color .15s ease;width:100%}.widget-layout-picker .layout-picker-profile-button:hover:not(:disabled){background:var(--dashboard-color-bg-page-hover);border-color:var(--dashboard-color-accent)}.widget-layout-picker .layout-picker-profile-button:disabled{cursor:not-allowed;opacity:.6}.widget-layout-picker .layout-picker-profile-button--applying{border-color:var(--dashboard-color-accent)}.widget-layout-picker .layout-picker-profile-button--current{border-color:color-mix(in srgb,var(--dashboard-color-accent) 50%,transparent)}.widget-layout-picker .layout-picker-profile-header{align-items:baseline;display:flex;flex-wrap:wrap;gap:4px 8px;margin-bottom:8px}.widget-layout-picker .layout-picker-profile-icon{flex-shrink:0;font-size:1.1rem;line-height:1}.widget-layout-picker .layout-picker-profile-name{flex:1;font-size:.95rem;font-weight:700;min-width:0}.widget-layout-picker .layout-picker-profile-action{color:var(--dashboard-color-accent);font-size:.72rem;font-weight:600}.widget-layout-picker .layout-picker-profile-action--current{color:var(--dashboard-color-text-muted)}.widget-layout-picker .layout-picker-profile-description{color:var(--dashboard-color-text-secondary);font-size:.8rem;line-height:1.45;margin:0}@keyframes mood-fadeout{0%{opacity:1}to{opacity:0}}.widget-mood .mood-selector{display:flex;gap:8px;justify-content:center;margin-bottom:16px}.widget-mood .mood-btn{align-items:center;background:none;border:2px solid rgba(0,0,0,0);border-radius:50%;cursor:pointer;display:flex;height:44px;justify-content:center;transition:border-color .15s,transform .15s;width:44px}.widget-mood .mood-btn:hover{border-color:var(--dashboard-color-blue);transform:scale(1.15)}.widget-mood .mood-btn--selected{border-color:var(--dashboard-color-blue);background:var(--dashboard-color-blue-light);transform:scale(1.15)}.widget-mood .mood-btn .mood-emoji{font-size:1.5rem}.widget-mood .mood-details{margin-bottom:12px}.widget-mood .mood-details-label{color:var(--dashboard-color-text-secondary);display:block;font-size:.8rem;margin-bottom:4px}.widget-mood .mood-details-textarea{background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text);font-size:.85rem;padding:8px;resize:vertical;width:100%}.widget-mood .mood-details-textarea:focus{border-color:var(--dashboard-color-blue);outline:none}.widget-mood .mood-details-textarea::placeholder{color:var(--dashboard-color-text-muted)}.widget-mood .mood-submit-row{display:flex;gap:8px;margin-bottom:16px}.widget-mood .mood-submit-btn{background:var(--dashboard-color-blue);border:none;border-radius:6px;color:var(--dashboard-color-text-on-accent);cursor:pointer;flex:1;font-size:.85rem;font-weight:600;padding:8px 16px;transition:opacity .15s}.widget-mood .mood-submit-btn:hover:not(:disabled){opacity:.9}.widget-mood .mood-submit-btn:disabled{cursor:not-allowed;opacity:.6}.widget-mood .mood-cancel-btn{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.85rem;font-weight:600;padding:8px 16px;transition:border-color .15s,color .15s}.widget-mood .mood-cancel-btn:hover:not(:disabled){border-color:var(--dashboard-color-text-secondary);color:var(--dashboard-color-text)}.widget-mood .mood-cancel-btn:disabled{cursor:not-allowed;opacity:.6}.widget-mood .mood-confirmation{align-items:center;animation:mood-fadeout 1s ease-out 4s forwards;display:flex;flex-direction:column;gap:8px;margin-bottom:16px;padding:16px 0}.widget-mood .mood-confirmation-icon{font-size:2.5rem}.widget-mood .mood-confirmation-text{color:var(--dashboard-color-success);font-size:.9rem;font-weight:600}.widget-mood .mood-summary{color:var(--dashboard-color-text-secondary);font-size:.8rem;text-align:center}.widget-mood .mood-sparkline{align-items:flex-end;display:flex;gap:3px;height:24px;justify-content:center;margin-top:8px}.widget-mood .mood-dot{background:var(--dashboard-color-blue);border-radius:2px;min-height:4px;position:relative;width:4px}.widget-mood .mood-viz-section{align-items:center;display:flex;flex-direction:column;gap:4px;margin-top:8px}.widget-mood .mood-viz-canvas-wrap{border-radius:10px;line-height:0;overflow:visible;position:relative}.widget-mood .mood-viz-canvas{border-radius:10px;display:block;height:220px;width:220px}.widget-mood .mood-viz-configure-link{background:none;border:none;color:var(--dashboard-color-text-muted);cursor:pointer;font-size:.75rem;padding:4px 8px;transition:color .15s}.widget-mood .mood-viz-configure-link:hover{color:var(--dashboard-color-text-secondary)}.widget-mood .mood-viz-config-option{align-items:center;cursor:pointer;display:flex;font-size:.9rem;gap:8px;padding:4px 0}.widget-mood .mood-viz-config-option input[type=radio]{accent-color:var(--dashboard-color-blue);cursor:pointer}.widget-note-peek .widget-body{display:flex;flex-direction:column;overflow:hidden}.widget-note-peek.horizontal-1-cell .widget-title__subtitle{display:none}@media (max-width: 800px){.widget-note-peek.vertical-1-cell{max-height:420px;min-height:320px}.widget-note-peek.vertical-2-cell{max-height:800px;min-height:600px}}.dashboard-large-phone-viewport .widget-note-peek.vertical-1-cell{max-height:420px;min-height:320px}.dashboard-large-phone-viewport .widget-note-peek.vertical-2-cell{max-height:800px;min-height:600px}.widget-note-peek.widget .widget-configure{font-size:14px}.widget-note-peek .note-peek-chooser{align-items:center;background:none;border:1px dashed var(--dashboard-color-border);border-radius:10px;color:var(--dashboard-color-text-secondary);cursor:pointer;display:flex;flex:1;flex-direction:column;gap:8px;justify-content:center;padding:16px;transition:border-color .15s ease,color .15s ease;width:100%}.widget-note-peek .note-peek-chooser:hover{border-color:var(--dashboard-color-navy);color:var(--dashboard-color-navy)}.widget-note-peek .note-peek-chooser-button{background:var(--dashboard-color-accent);border:1px solid var(--dashboard-color-accent);border-radius:6px;color:var(--dashboard-color-text-on-accent);cursor:pointer;font-size:14px;font-weight:600;padding:4px 12px}.widget-note-peek .note-peek-chooser-button:hover{opacity:.9}.widget-note-peek .note-peek-chooser-icon{font-size:1.6rem}.widget-note-peek .note-peek-chooser-label{font-size:.85rem;text-align:center}.widget-note-peek .note-peek-title-link{color:inherit;cursor:pointer;text-decoration:none}.widget-note-peek .note-peek-title-link:hover{color:var(--dashboard-color-link);text-decoration:underline}.note-peek-content{color:var(--dashboard-color-text);flex:1;font-size:13px;line-height:1.45;min-height:0;overflow:hidden}.note-peek-content .heading-anchor,.note-peek-content .link>.icon{display:none}.note-peek-content h1,.note-peek-content h2,.note-peek-content h3,.note-peek-content h4,.note-peek-content h5,.note-peek-content h6,.note-peek-content .heading{color:var(--dashboard-color-navy);line-height:1.25;margin:0 0 4px;position:relative}.note-peek-content h1,.note-peek-content h1.heading{font-size:1.25rem}.note-peek-content h2,.note-peek-content h2.heading{font-size:1.1rem}.note-peek-content h3,.note-peek-content h3.heading{font-size:1rem}.note-peek-content h4,.note-peek-content h5,.note-peek-content h6{font-size:.9rem}.note-peek-content .heading>a:not(.link):not(.heading-anchor){color:inherit;text-decoration:none}.note-peek-content p,.note-peek-content blockquote,.note-peek-content pre,.note-peek-content table{margin:0 0 8px}.note-peek-content ol,.note-peek-content ul{margin:0 0 8px;padding-left:16px}.note-peek-content li{margin:0;padding:0}.note-peek-content a{color:var(--dashboard-color-link)}.note-peek-content strong{color:var(--dashboard-color-navy)}.note-peek-content blockquote{border-left:3px solid var(--dashboard-color-border);color:var(--dashboard-color-text-secondary);padding-left:8px}.note-peek-content code,.note-peek-content pre{background:var(--dashboard-color-bg-page);border-radius:6px;font-size:12px}.note-peek-content code{padding:1px 4px}.note-peek-content pre{overflow:hidden;padding:8px;white-space:pre}.note-peek-content img{max-width:100%}.note-peek-content table{border-collapse:collapse;max-width:100%}.note-peek-content table td,.note-peek-content table th{border:1px solid var(--dashboard-color-border);padding:4px 8px;text-align:left}.note-peek-content hr{border:none;border-top:1px solid var(--dashboard-color-border);margin:8px 0}.note-peek-content .bullet-list-item,.note-peek-content .number-list-item{margin:0 0 4px;position:relative}.note-peek-content .bullet-list-item.indent-0,.note-peek-content .number-list-item.indent-0{padding-left:21px}.note-peek-content .bullet-list-item.indent-1,.note-peek-content .number-list-item.indent-1{padding-left:37px}.note-peek-content .bullet-list-item.indent-2,.note-peek-content .number-list-item.indent-2{padding-left:53px}.note-peek-content .bullet-list-item.indent-3,.note-peek-content .number-list-item.indent-3{padding-left:69px}.note-peek-content .bullet-list-item.indent-4,.note-peek-content .number-list-item.indent-4{padding-left:85px}.note-peek-content .bullet-list-item.indent-5,.note-peek-content .number-list-item.indent-5{padding-left:101px}.note-peek-content .bullet-list-item.indent-6,.note-peek-content .number-list-item.indent-6{padding-left:117px}.note-peek-content .bullet-list-item.indent-7,.note-peek-content .number-list-item.indent-7{padding-left:133px}.note-peek-content .bullet-list-item.indent-8,.note-peek-content .number-list-item.indent-8{padding-left:149px}.note-peek-content .bullet-list-item.indent-9,.note-peek-content .number-list-item.indent-9{padding-left:165px}.note-peek-content .bullet-list-item .visible-list-item,.note-peek-content .number-list-item .visible-list-item{display:block;position:relative}.note-peek-content .bullet-list-item .visible-list-item p,.note-peek-content .number-list-item .visible-list-item p{margin:0}.note-peek-content .bullet-list-item .visible-list-item:before,.note-peek-content .number-list-item .visible-list-item:before{left:-21px;position:absolute;text-align:center;width:21px}.note-peek-content .bullet-list-item.indent-0 .visible-list-item:before,.note-peek-content .bullet-list-item.indent-2 .visible-list-item:before{content:"\\2022";font-size:1.35em;line-height:1;top:-.15em}.note-peek-content .bullet-list-item.indent-1 .visible-list-item:before,.note-peek-content .bullet-list-item.indent-3 .visible-list-item:before,.note-peek-content .bullet-list-item.indent-4 .visible-list-item:before,.note-peek-content .bullet-list-item.indent-5 .visible-list-item:before,.note-peek-content .bullet-list-item.indent-6 .visible-list-item:before,.note-peek-content .bullet-list-item.indent-7 .visible-list-item:before,.note-peek-content .bullet-list-item.indent-8 .visible-list-item:before,.note-peek-content .bullet-list-item.indent-9 .visible-list-item:before{content:"\\26ac";font-size:.9em;line-height:1;top:.1em}.note-peek-content .bullet-list-item[data-crossed-out-at] .visible-list-item{opacity:.55;text-decoration:line-through}.note-peek-content .number-list-item.indent-0 .visible-list-item{counter-increment:number-list-items-0}.note-peek-content .number-list-item.indent-1 .visible-list-item{counter-increment:number-list-items-1}.note-peek-content .number-list-item.indent-2 .visible-list-item{counter-increment:number-list-items-2}.note-peek-content .number-list-item.indent-3 .visible-list-item{counter-increment:number-list-items-3}.note-peek-content .number-list-item.indent-4 .visible-list-item{counter-increment:number-list-items-4}.note-peek-content .number-list-item.indent-5 .visible-list-item{counter-increment:number-list-items-5}.note-peek-content .number-list-item.indent-6 .visible-list-item{counter-increment:number-list-items-6}.note-peek-content .number-list-item.indent-7 .visible-list-item{counter-increment:number-list-items-7}.note-peek-content .number-list-item.indent-8 .visible-list-item{counter-increment:number-list-items-8}.note-peek-content .number-list-item.indent-9 .visible-list-item{counter-increment:number-list-items-9}.note-peek-content .number-list-item.indent-0 .visible-list-item:before{content:counter(number-list-items-0) ". "}.note-peek-content .number-list-item.indent-1 .visible-list-item:before{content:counter(number-list-items-1,lower-alpha) ". "}.note-peek-content .number-list-item.indent-2 .visible-list-item:before{content:counter(number-list-items-2,lower-roman) ". "}.note-peek-content .number-list-item.indent-3 .visible-list-item:before{content:counter(number-list-items-3,upper-alpha) ". "}.note-peek-content .number-list-item.indent-4 .visible-list-item:before{content:counter(number-list-items-4,upper-roman) ". "}.note-peek-content .number-list-item.indent-5 .visible-list-item:before{content:counter(number-list-items-5) ". "}.note-peek-content .number-list-item.indent-6 .visible-list-item:before{content:counter(number-list-items-6,lower-alpha) ". "}.note-peek-content .number-list-item.indent-7 .visible-list-item:before{content:counter(number-list-items-7,lower-roman) ". "}.note-peek-content .number-list-item.indent-8 .visible-list-item:before{content:counter(number-list-items-8,upper-alpha) ". "}.note-peek-content .number-list-item.indent-9 .visible-list-item:before{content:counter(number-list-items-9,upper-roman) ". "}.note-peek-content .number-list-item .visible-list-item:before{text-align:right}.note-peek-content :not(.number-list-item)+.number-list-item,.note-peek-content .number-list-item:first-child{counter-reset:number-list-items-0 number-list-items-1 number-list-items-2 number-list-items-3 number-list-items-4 number-list-items-5 number-list-items-6 number-list-items-7 number-list-items-8 number-list-items-9}.note-peek-content .check-list-item{align-items:flex-start;display:flex;gap:8px;margin:0 0 4px;position:relative}.note-peek-content .check-list-item.indent-1{padding-left:20px}.note-peek-content .check-list-item.indent-2{padding-left:40px}.note-peek-content .check-list-item.indent-3{padding-left:60px}.note-peek-content .check-list-item.indent-4{padding-left:80px}.note-peek-content .check-list-item.indent-5{padding-left:100px}.note-peek-content .check-list-item.indent-6{padding-left:120px}.note-peek-content .check-list-item.indent-7{padding-left:140px}.note-peek-content .check-list-item.indent-8{padding-left:160px}.note-peek-content .check-list-item.indent-9{padding-left:180px}.note-peek-content .check-list-item>input[type=checkbox]{flex-shrink:0;margin-top:.2em;pointer-events:none}.note-peek-content .check-list-item[data-completedat],.note-peek-content .check-list-item[data-dismissedat]{opacity:.65}.note-peek-content .check-list-item[data-completedat]>.content-container,.note-peek-content .check-list-item[data-completedat]>p,.note-peek-content .check-list-item[data-dismissedat]>.content-container,.note-peek-content .check-list-item[data-dismissedat]>p{text-decoration:line-through}.note-peek-content>:last-child{margin-bottom:0}.widget-peak-hours .peak-hours-month-nav{align-items:center;display:inline-flex;gap:4px}.widget-peak-hours .peak-hours-month-nav-label{text-align:center;white-space:nowrap}.widget-peak-hours .peak-hours-month-nav-arrow{align-items:center;background:#0000;border:none;border-radius:6px;color:inherit;cursor:pointer;display:inline-flex;font-size:1.05em;justify-content:center;line-height:1;padding:4px 8px}.widget-peak-hours .peak-hours-month-nav-arrow:hover:not(:disabled){background:var(--dashboard-color-bg-page-hover);color:var(--dashboard-color-navy)}.widget-peak-hours .peak-hours-month-nav-arrow:disabled{cursor:default;opacity:.3}.widget-peak-hours .peak-hours-metrics-grid{display:grid;gap:12px;grid-template-columns:repeat(3,1fr);margin-bottom:16px}.widget-peak-hours .peak-hours-metric-card{background:var(--dashboard-color-bg-page);border-radius:10px;padding:12px 16px}.widget-peak-hours .peak-hours-metric-label{color:var(--dashboard-color-text-secondary);font-size:.8rem;margin-bottom:4px}.widget-peak-hours .peak-hours-metric-value{color:var(--dashboard-color-navy);font-size:1.25rem;font-weight:600}.widget-peak-hours .peak-hours-legend{color:var(--dashboard-color-text-secondary);display:flex;flex-wrap:wrap;font-size:.75rem;gap:16px;margin-bottom:8px}.widget-peak-hours .peak-hours-legend-item{align-items:center;display:flex;gap:4px}.widget-peak-hours .peak-hours-legend-swatch{border-radius:2px;display:inline-block;height:10px;width:10px}.widget-peak-hours .peak-hours-legend-swatch--created{background:var(--dashboard-color-blue)}.widget-peak-hours .peak-hours-legend-swatch--completed{background:var(--dashboard-color-accent)}.widget-peak-hours .peak-hours-chart-container{height:220px;position:relative;width:100%}.widget-peak-hours .peak-hours-canvas{display:block;height:100%;width:100%}.widget-peak-hours .peak-hours-tooltip{background:var(--dashboard-color-tooltip-bg);border:1px solid var(--dashboard-color-tooltip-border);border-radius:6px;box-shadow:0 2px 8px var(--dashboard-color-tooltip-shadow);color:var(--dashboard-color-tooltip-text);font-size:.75rem;padding:8px 12px;pointer-events:none;position:absolute;white-space:nowrap;z-index:10}.widget-peak-hours .peak-hours-tooltip-header{font-weight:600;margin-bottom:4px}.widget-peak-hours .peak-hours-tooltip-label--created{color:var(--dashboard-color-tooltip-accent)}.widget-peak-hours .peak-hours-tooltip-label--completed{color:var(--dashboard-color-accent)}.widget-peak-hours .peak-hours-empty{padding:24px;text-align:center}.widget-peak-hours .peak-hours-empty p{color:var(--dashboard-color-text-secondary);font-size:.85rem;margin:0}.vertical-1-cell .widget-peak-hours .peak-hours-metrics-grid{gap:8px}.vertical-1-cell .widget-peak-hours .peak-hours-metric-card{padding:4px 8px}.vertical-1-cell .widget-peak-hours .peak-hours-metric-label{font-size:.7rem;margin-bottom:0}.vertical-1-cell .widget-peak-hours .peak-hours-metric-value{font-size:1rem}.vertical-1-cell .widget-peak-hours .peak-hours-legend{margin-bottom:4px}.vertical-1-cell .widget-peak-hours .peak-hours-chart-container{height:160px}.horizontal-2-cell .widget-peak-hours .peak-hours-chart-container{height:220px}.vertical-2-cell .widget-peak-hours .peak-hours-chart-container{height:380px}.horizontal-2-cell.vertical-2-cell .widget-peak-hours .peak-hours-chart-container{height:440px}.widget-proposed-agenda a{color:var(--dashboard-color-link);text-decoration:none}.widget-proposed-agenda a:hover{text-decoration:underline}.widget-proposed-agenda .proposed-agenda-controls{align-items:center;border-bottom:1px solid var(--dashboard-color-border);display:flex;gap:8px;padding-bottom:10px}.widget-proposed-agenda .proposed-agenda-priority-label{color:var(--dashboard-color-text-muted);flex:0 0 auto;font-size:14px}.widget-proposed-agenda .proposed-agenda-priority-select{background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text);flex:1 1 auto;font-size:14px;font-weight:600;min-width:0;padding:7px 10px}.widget-proposed-agenda .proposed-agenda-model{border:1px solid var(--dashboard-color-border);border-radius:999px;color:var(--dashboard-color-text-secondary);flex:0 0 auto;font-size:.78em;padding:4px 10px;white-space:nowrap}.widget-proposed-agenda .proposed-agenda-model-change{background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;flex:0 0 auto;font-size:.95em;padding:4px 8px}.widget-proposed-agenda .proposed-agenda-model-change:hover{color:var(--dashboard-color-link)}.widget-proposed-agenda .proposed-agenda-list{display:flex;flex-direction:column;font-size:14px;margin-top:4px}.widget-proposed-agenda .proposed-agenda-item{align-items:flex-start;border-bottom:1px solid var(--dashboard-color-border);display:flex;gap:10px;padding:10px 2px;transition:opacity .12s ease}.widget-proposed-agenda .proposed-agenda-item--scheduled{opacity:.6}.widget-proposed-agenda .proposed-agenda-time-col{display:flex;flex:0 0 auto;flex-direction:column;gap:2px;min-width:52px}.widget-proposed-agenda .proposed-agenda-time{color:var(--dashboard-color-link);font-variant-numeric:tabular-nums;font-weight:600}.widget-proposed-agenda .proposed-agenda-time--muted{color:var(--dashboard-color-text-secondary);font-weight:500}.widget-proposed-agenda .proposed-agenda-note-link{color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.75em;text-decoration:none}.widget-proposed-agenda .proposed-agenda-note-link:hover{color:var(--dashboard-color-link);text-decoration:underline}.widget-proposed-agenda .proposed-agenda-content{display:flex;flex:1 1 auto;flex-direction:column;gap:3px;min-width:0}.widget-proposed-agenda .proposed-agenda-text{color:var(--dashboard-color-text);font-weight:600;overflow:hidden;text-overflow:ellipsis}.widget-proposed-agenda .proposed-agenda-reason{color:var(--dashboard-color-text-muted);font-size:12px;line-height:1.35}.widget-proposed-agenda .proposed-agenda-duration{color:var(--dashboard-color-text-secondary);flex:0 0 auto;font-size:.8em;padding-top:8px}.widget-proposed-agenda .proposed-agenda-actions{align-items:center;display:flex;flex:0 0 auto;gap:6px}.widget-proposed-agenda .proposed-agenda-add{background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text);cursor:pointer;font-size:.8em;padding:5px 10px;white-space:nowrap}.widget-proposed-agenda .proposed-agenda-add:hover{border-color:var(--dashboard-color-link);color:var(--dashboard-color-link)}.widget-proposed-agenda .proposed-agenda-dismiss{background:#0000;border:2px rgba(0,0,0,0) solid;border-radius:50%;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:1em;line-height:1;padding:4px 6px}.widget-proposed-agenda .proposed-agenda-dismiss:hover{background-color:var(--dashboard-color-bg-warning);border-color:var(--dashboard-color-danger);color:var(--dashboard-color-danger)}.widget-proposed-agenda .proposed-agenda-scheduled-badge{color:var(--dashboard-color-text-secondary);flex:0 0 auto;font-size:.76em;padding:5px 10px;white-space:nowrap}.widget-proposed-agenda .proposed-agenda-footer{display:flex;gap:10px;margin-top:12px}.widget-proposed-agenda .proposed-agenda-approve{background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text);cursor:pointer;flex:1 1 auto;font-weight:600;padding:10px 18px;transition:opacity .12s ease}.widget-proposed-agenda .proposed-agenda-approve:hover:not(:disabled){border-color:var(--dashboard-color-link);color:var(--dashboard-color-link)}.widget-proposed-agenda .proposed-agenda-approve:disabled{cursor:default;opacity:.5}.widget-proposed-agenda .proposed-agenda-dismiss-all{background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;flex:0 0 auto;padding:10px 16px}.widget-proposed-agenda .proposed-agenda-dismiss-all:hover:not(:disabled){border-color:var(--dashboard-color-danger);color:var(--dashboard-color-danger)}.widget-proposed-agenda .proposed-agenda-dismiss-all:disabled{cursor:default;opacity:.5}.widget-proposed-agenda .proposed-agenda-pending{color:var(--dashboard-color-text-muted);font-size:.78em;margin:8px 0 0;text-align:center}.widget-proposed-agenda .proposed-agenda-attribution{color:var(--dashboard-color-text-muted);font-size:.75em;margin:4px 0 0;text-align:center}.widget-proposed-agenda .proposed-agenda-message,.widget-proposed-agenda .proposed-agenda-loading{align-items:center;color:var(--dashboard-color-text-secondary);display:flex;flex-direction:column;gap:10px;padding:18px 12px;text-align:center}.widget-proposed-agenda .proposed-agenda-retry{background:#0000;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-link);cursor:pointer;padding:5px 14px}.widget-proposed-agenda .proposed-agenda-spinner{animation:proposed-agenda-spin .8s linear infinite;border:3px solid var(--dashboard-color-border);border-radius:50%;border-top-color:var(--dashboard-color-link);height:28px;width:28px}@keyframes proposed-agenda-spin{to{transform:rotate(360deg)}}.widget-quotes .widget-body{display:flex;flex-direction:column}.widget-quotes .quotes-grid{display:grid;flex:1;gap:16px;grid-template-columns:1fr 1fr}.widget-quotes .quote-tile{background-position:center;background-size:cover;border-radius:10px;color:var(--dashboard-color-text-on-accent);display:flex;flex-direction:column;justify-content:flex-end;min-height:150px;padding:24px 16px}.widget-quotes .quote-tile .quote-text{font-size:15px;font-style:italic;line-height:1.5;margin:0 0 8px}.widget-quotes .quote-tile .quote-author{font-size:.75rem;opacity:.85}.widget-quotes .quotes-loading{color:var(--dashboard-color-text-secondary);font-size:.85rem;padding:24px 0;text-align:center}.widget-quick-actions .qa-grid{display:grid;gap:8px;grid-template-columns:1fr 1fr}.widget-quick-actions .qa-button{align-items:center;background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:10px;cursor:pointer;display:flex;flex-direction:column;gap:8px;padding:16px 8px;transition:background .15s}.widget-quick-actions .qa-button:hover{background:var(--dashboard-color-bg-page-hover)}.widget-quick-actions .qa-button .qa-icon{font-size:1.4rem}.widget-quick-actions .qa-button .qa-label{color:var(--dashboard-color-text);font-size:.75rem;font-weight:500}.widget-recent-notes .widget-body{display:flex;flex-direction:column;overflow:hidden}.widget-recent-notes .note-list{display:flex;flex:1;flex-direction:column;gap:4px;list-style:none;min-height:0;overflow-y:auto}.widget-recent-notes .note-item:hover{background-color:var(--dashboard-color-bg-page)}.widget-recent-notes .note-link{align-items:center;background:none;border:none;border-radius:6px;color:inherit;cursor:pointer;display:flex;gap:8px;justify-content:space-between;padding:8px 12px;text-align:left;width:100%}.widget-recent-notes .note-name{color:var(--dashboard-color-text);flex:1;font-size:13px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.widget-recent-notes .note-count,.widget-recent-notes .note-metadata{color:var(--dashboard-color-text-muted);flex-shrink:0;font-size:.75rem;white-space:nowrap}.widget-recent-notes .note-loading,.widget-recent-notes .note-empty,.widget-recent-notes .note-error{color:var(--dashboard-color-text-secondary);font-size:.85rem;padding:12px 0;text-align:center}.widget-recent-notes .note-error{color:var(--dashboard-color-danger)}.widget-shared-notes .widget-body{display:flex;flex-direction:column;overflow:hidden}.widget-shared-notes .shared-notes-toggle{align-items:center;cursor:pointer;display:inline-flex;font-size:13px;gap:4px}.widget-shared-notes .shared-notes-filter{align-items:center;display:flex;flex-shrink:0;gap:8px;margin-bottom:10px;padding:0 12px 4px}.widget-shared-notes .shared-notes-filter .shared-notes-toggle{margin-left:auto}.widget-shared-notes .shared-notes-sharer-select{background-color:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text);font-size:13px;min-width:0;padding:2px 4px}.widget-shared-notes .shared-note-list{display:flex;flex:1;flex-direction:column;gap:4px;list-style:none;min-height:0;overflow-y:auto}.widget-shared-notes .shared-notes-pagination{align-items:center;display:flex;flex-shrink:0;gap:8px;justify-content:center;padding:4px 0 0}.widget-shared-notes .shared-notes-page-arrow{background:none;border:none;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.8rem;padding:0 4px}.widget-shared-notes .shared-notes-page-arrow:disabled{cursor:default;opacity:.35}.widget-shared-notes .shared-notes-page-indicator{color:var(--dashboard-color-text-secondary);font-size:.75rem}.widget-shared-notes .shared-note-item{align-items:stretch;display:flex}.widget-shared-notes .shared-note-item:hover{background-color:var(--dashboard-color-bg-page)}.widget-shared-notes .shared-note-pin{background:none;border:none;cursor:pointer;filter:grayscale(1);flex-shrink:0;font-size:.85rem;line-height:1;opacity:.4;padding:8px 0 8px 12px}.widget-shared-notes .shared-note-pin:hover{opacity:.75}.widget-shared-notes .shared-note-pin.shared-note-pin-active{filter:none;opacity:1}.widget-shared-notes .shared-note-link{background:none;border:none;border-radius:6px;color:inherit;cursor:pointer;display:flex;flex:1;flex-direction:column;gap:2px;min-width:0;padding:4px 12px 4px 8px;text-align:left}.widget-shared-notes .shared-note-title{color:var(--dashboard-color-text);font-size:13px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.widget-shared-notes .shared-note-meta{align-items:center;color:var(--dashboard-color-text);display:flex;font-size:12px;gap:8px}.widget-shared-notes .shared-note-avatars{align-items:center;display:inline-flex;flex-shrink:0}.widget-shared-notes .shared-note-avatars .collaborator-avatar{align-items:center;background-color:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-bg-card);border-radius:50%;box-sizing:border-box;display:inline-flex;font-size:11px;font-weight:600;height:1.25rem;justify-content:center;line-height:1;object-fit:cover;overflow:hidden;text-transform:uppercase;width:1.25rem}.widget-shared-notes .shared-note-avatars .collaborator-avatar:not(:first-child){margin-left:-.4rem}.widget-shared-notes .shared-note-avatars .collaborator-avatar-text{color:var(--dashboard-color-text-secondary)}.widget-shared-notes .shared-note-collaborators{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.widget-shared-notes .shared-note-dates{color:var(--dashboard-color-text-secondary);display:flex;flex-wrap:wrap;font-size:.7rem;gap:4px 8px;white-space:nowrap}.widget-shared-notes .shared-note-updated:before{color:var(--dashboard-color-text-muted);content:"\\b7"}.widget-shared-notes .note-loading,.widget-shared-notes .note-empty,.widget-shared-notes .note-error{color:var(--dashboard-color-text-secondary);font-size:.85rem;padding:12px 0;text-align:center}.widget-shared-notes .note-error{color:var(--dashboard-color-danger)}.dashboard-toolbar .task-domains{align-items:center;background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:6px;display:flex;gap:12px;padding:8px 12px}.dashboard-toolbar .task-domains-list{align-items:center;display:flex;flex:1;flex-wrap:wrap;gap:8px}.dashboard-toolbar .task-domain-entry{white-space:nowrap}.dashboard-toolbar .task-domain-item{align-items:center;border:1px solid rgba(0,0,0,0);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;display:inline-flex;font-size:.8rem;font-weight:500;gap:4px;padding:4px 12px;transition:all .15s ease}.dashboard-toolbar .task-domain-item:hover{background:var(--dashboard-color-blue-light);color:var(--dashboard-color-navy)}.dashboard-toolbar .task-domain-item.active{background:var(--dashboard-color-navy);border-color:var(--dashboard-color-navy);color:var(--dashboard-color-bg-card)}.dashboard-toolbar .task-domain-item.active .task-domain-settings{color:var(--dashboard-color-text-on-accent-muted)}.dashboard-toolbar .task-domain-item.active .task-domain-settings:hover{color:var(--dashboard-color-text-on-accent)}.dashboard-toolbar .task-domain-name{-webkit-user-select:none;user-select:none}.dashboard-toolbar .task-domain-settings{background:none;border:none;color:var(--dashboard-color-text-muted);cursor:pointer;font-size:13px;line-height:1;padding:0}.dashboard-toolbar .task-domain-settings:hover{color:var(--dashboard-color-navy)}.dashboard-toolbar .task-domains-refresh{background:none;border:none;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.75rem;padding:4px 8px;white-space:nowrap}@media (max-width: 800px){.dashboard-toolbar .task-domains-refresh{display:none}}.dashboard-toolbar .task-domains-refresh:hover{color:var(--dashboard-color-navy)}.dashboard-toolbar .task-domains-refresh:disabled{cursor:default;opacity:.5}.dashboard-toolbar .task-domains-empty{color:var(--dashboard-color-text-muted);font-size:.8rem}.dashboard-toolbar .task-domains--empty .task-domains-empty{flex:1 1 100%;font-weight:500}.widget-memory-measurement{display:flex;flex-direction:column;gap:8px}.widget-memory-measurement .widget-memory-measurement-description,.widget-memory-measurement .widget-memory-measurement-note{color:var(--dashboard-color-text-secondary);font-size:.8rem;line-height:1.45;margin:0}.widget-memory-measurement .widget-memory-measurement-label{color:var(--dashboard-color-text-secondary);font-size:.75rem;font-weight:600;letter-spacing:.03em;text-transform:uppercase}.widget-memory-measurement .widget-memory-measurement-select{background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text);font-size:.85rem;padding:8px}.widget-memory-measurement .widget-memory-measurement-actions{display:flex;gap:8px}.widget-memory-measurement .widget-memory-measurement-button{background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text);cursor:pointer;font-size:.8rem;padding:8px 12px}.widget-memory-measurement .widget-memory-measurement-button:disabled{cursor:default;opacity:.5}.widget-memory-measurement .widget-memory-measurement-results{background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;display:flex;flex-direction:column;font-size:.8rem;gap:4px;padding:12px}.widget-memory-measurement .widget-memory-measurement-status{color:var(--dashboard-color-text-secondary)}.widget-memory-measurement .widget-memory-measurement-widget{border-top:1px solid var(--dashboard-color-border);max-height:30vh;margin-top:8px;overflow-y:auto;padding-top:12px}.widget-memory-measurement .widget-memory-measurement-widget h4{color:var(--dashboard-color-navy);font-size:.85rem;margin:0 0 8px}.widget-victory-value .widget-body{display:flex;flex-direction:column;justify-content:space-between}.widget-victory-value .vv-header{align-items:baseline;display:flex;gap:8px;margin-bottom:8px}.widget-victory-value .vv-header .vv-total{color:var(--dashboard-color-navy);font-size:2rem;font-weight:700}.widget-victory-value .vv-header .vv-label{color:var(--dashboard-color-text-secondary);font-size:12px}.widget-victory-value .vv-date-range{color:var(--dashboard-color-text-secondary);font-size:.75rem;font-weight:400}.widget-victory-value .vv-chart-container{align-items:center;display:flex;gap:4px}.widget-victory-value .vv-chart-wrap{flex:1;min-width:0;position:relative}.widget-victory-value .vv-chart{border-radius:6px;display:block;width:100%}.widget-victory-value .vv-nav-arrow{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;flex-shrink:0;font-size:1.25rem;line-height:1;padding:4px 8px;transition:background .15s,color .15s}.widget-victory-value .vv-nav-arrow:hover:not(:disabled){background:var(--dashboard-color-bg-page-hover);color:var(--dashboard-color-navy)}.widget-victory-value .vv-nav-arrow:disabled{cursor:not-allowed;opacity:.3}.vertical-1-cell .widget-victory-value .vv-chart{height:180px}.horizontal-2-cell .widget-victory-value .vv-chart{height:260px}.vertical-2-cell .widget-victory-value .vv-chart{height:380px}.horizontal-2-cell.vertical-2-cell .widget-victory-value .vv-chart{height:460px}:root{--dashboard-color-accent: #e8853d;--dashboard-color-agenda-priority-critical: #e85353;--dashboard-color-agenda-priority-important: #e8853d;--dashboard-color-agenda-priority-normal: #7a8699;--dashboard-color-agenda-priority-urgent: #5b7bbf;--dashboard-color-bg-card: #ffffff;--dashboard-color-bg-page: #eef1f5;--dashboard-color-bg-page-hover: #e6ebf2;--dashboard-color-bg-warning: #ffd7d7;--dashboard-color-blue: #5b7bbf;--dashboard-color-blue-light: #e8edf5;--dashboard-color-border: #d8dde6;--dashboard-color-danger: #e85353;--dashboard-color-info: #5b7bbf;--dashboard-color-link: #5b7bbf;--dashboard-color-navy: #2c3e6b;--dashboard-color-overlay-backdrop: rgba(0, 0, 0, .4);--dashboard-color-overlay-shadow: rgba(0, 0, 0, .15);--dashboard-color-success: #4caf80;--dashboard-color-text: #1e2a3a;--dashboard-color-text-muted: #90999f;--dashboard-color-text-on-accent: #ffffff;--dashboard-color-text-on-accent-muted: rgba(255, 255, 255, .6);--dashboard-color-text-secondary: #7a8699;--dashboard-color-tooltip-accent: #5b7bbf;--dashboard-color-tooltip-bg: #1f2937;--dashboard-color-tooltip-border: rgba(255, 255, 255, .15);--dashboard-color-tooltip-shadow: rgba(0, 0, 0, .3);--dashboard-color-tooltip-text: #f9fafb;--dashboard-color-tooltip-text-muted: rgba(255, 255, 255, .5);--dashboard-color-warning: #e8853d;--dashboard-color-plan-created-bg: rgba(76, 175, 128, .08);--dashboard-color-plan-created-border: #4caf80}@media (prefers-color-scheme: dark){:root{--dashboard-color-accent: #ffb36b;--dashboard-color-agenda-priority-critical: #ff7a7a;--dashboard-color-agenda-priority-important: #ffb36b;--dashboard-color-agenda-priority-normal: #a3b0c4;--dashboard-color-agenda-priority-urgent: #8fb2ff;--dashboard-color-bg-card: #1f2937;--dashboard-color-bg-page: #111827;--dashboard-color-bg-page-hover: #1a2436;--dashboard-color-bg-warning: #6c3333;--dashboard-color-blue: #8fb2ff;--dashboard-color-blue-light: #253553;--dashboard-color-border: #374151;--dashboard-color-danger: #ff7a7a;--dashboard-color-info: #8fb2ff;--dashboard-color-link: #60a5fa;--dashboard-color-navy: #c5d8ff;--dashboard-color-overlay-backdrop: rgba(0, 0, 0, .5);--dashboard-color-overlay-shadow: rgba(0, 0, 0, .4);--dashboard-color-success: #73d4a3;--dashboard-color-text: #e5ecf5;--dashboard-color-text-muted: #95a3b8;--dashboard-color-text-on-accent: #ffffff;--dashboard-color-text-on-accent-muted: rgba(255, 255, 255, .6);--dashboard-color-text-secondary: #b6c0cf;--dashboard-color-tooltip-accent: #a5b4fc;--dashboard-color-tooltip-bg: #1f2937;--dashboard-color-tooltip-border: rgba(255, 255, 255, .15);--dashboard-color-tooltip-shadow: rgba(0, 0, 0, .5);--dashboard-color-tooltip-text: #f9fafb;--dashboard-color-tooltip-text-muted: rgba(255, 255, 255, .5);--dashboard-color-warning: #ffb36b;--dashboard-color-plan-created-bg: rgba(115, 212, 163, .1);--dashboard-color-plan-created-border: #73d4a3}}@font-face{font-family:Roboto;font-style:normal;font-weight:100 900;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2")}html{overflow-y:scroll}html *,html *:before,html *:after{box-sizing:border-box;margin:0;padding:0}html body{-webkit-font-smoothing:antialiased;background:var(--dashboard-color-bg-page);color:var(--dashboard-color-text);font-family:Roboto,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}html body button{font-family:inherit}.dashboard-outer-container{min-height:100vh;overflow-x:hidden;position:relative;width:100%}.dashboard-outer-container .dashboard-background-fade{inset:0;opacity:0;pointer-events:none;position:absolute;z-index:0}@media (prefers-reduced-motion: reduce){.dashboard-outer-container .dashboard-background-fade{animation:none!important}}.dashboard-outer-container .dashboard-content{margin:0 auto;max-width:1200px;padding:24px;position:relative}.dashboard-outer-container .dashboard-content .dashboard-grid-shell{isolation:isolate;position:relative}.dashboard-outer-container .dashboard-content .dashboard-grid-shell--focused{z-index:2}.dashboard-outer-container .dashboard-content .dashboard-grid-focus-backdrop{background:rgba(var(--dashboard-color-bg-page),.18);border:none;cursor:zoom-out;inset:0;position:fixed;z-index:2}.dashboard-outer-container .dashboard-content .dashboard-toolbar{transition:opacity .32s ease,transform .32s ease}.dashboard-outer-container .dashboard-content--widget-focused .dashboard-toolbar{opacity:0;pointer-events:none;transform:translateY(-16px)}.dashboard-outer-container .dashboard-content .dashboard-grid{display:grid;gap:16px;grid-template-columns:repeat(4,1fr);position:relative}.dashboard-outer-container .dashboard-content .grid-cell{--drag-scale: 1;--flip-x: 0px;--flip-y: 0px;--focus-blur: 0px;--focus-opacity: 1;--focus-scale-x: 1;--focus-scale-y: 1;--focus-x: 0px;--focus-y: 0px;--grid-cell-base-opacity: .95;filter:blur(var(--focus-blur));min-width:0;opacity:calc(var(--grid-cell-base-opacity)*var(--focus-opacity));position:relative;transform:translate(var(--flip-x),var(--flip-y)) translate(var(--focus-x),var(--focus-y)) scale(var(--drag-scale)) scale(var(--focus-scale-x),var(--focus-scale-y));transition:filter .32s ease,opacity .32s ease,transform .32s ease;will-change:transform}.dashboard-outer-container .dashboard-content .grid-cell:hover{--grid-cell-base-opacity: 1}.dashboard-outer-container .dashboard-content .grid-cell.horizontal-2-cell{grid-column:span 2}.dashboard-outer-container .dashboard-content .grid-cell.horizontal-3-cell{grid-column:span 3}.dashboard-outer-container .dashboard-content .grid-cell.horizontal-4-cell{grid-column:span 4}.dashboard-outer-container .dashboard-content .grid-cell.vertical-1-cell{max-height:420px;min-height:320px}.dashboard-outer-container .dashboard-content .grid-cell.vertical-2-cell{grid-row:span 2;max-height:800px;min-height:600px}.dashboard-outer-container .dashboard-content .grid-cell .grid-cell-surface{height:100%;width:100%}.dashboard-outer-container .dashboard-content .grid-cell .grid-cell-surface--focused{pointer-events:auto;position:fixed;z-index:5}.dashboard-outer-container .dashboard-content .grid-cell.grid-cell--drag-active{cursor:grabbing}.dashboard-outer-container .dashboard-content .grid-cell.grid-cell--dragging-ready{animation:widget-wobble .35s ease-in-out infinite alternate;opacity:1;z-index:3}.dashboard-outer-container .dashboard-content .grid-cell.grid-cell--drag-shift{--drag-scale: .985}.dashboard-outer-container .dashboard-content .grid-cell.grid-cell--focus-mode{pointer-events:none}.dashboard-outer-container .dashboard-content .grid-cell.grid-cell--focused{--grid-cell-base-opacity: 1;pointer-events:auto;z-index:4}.dashboard-outer-container .dashboard-content .grid-cell.grid-cell--focus-overlay-host{filter:none;pointer-events:none;transform:none;transition:none;will-change:auto}.dashboard-outer-container .dashboard-content .grid-cell.grid-cell--focus-hidden{z-index:1}@media (max-width: 800px){.dashboard-outer-container .dashboard-content{padding:12px}.dashboard-outer-container .dashboard-content .dashboard-grid{grid-template-columns:1fr}.dashboard-outer-container .dashboard-content .grid-cell.horizontal-2-cell,.dashboard-outer-container .dashboard-content .grid-cell.horizontal-3-cell,.dashboard-outer-container .dashboard-content .grid-cell.horizontal-4-cell{grid-column:span 1}.dashboard-outer-container .dashboard-content .grid-cell.vertical-1-cell,.dashboard-outer-container .dashboard-content .grid-cell.vertical-2-cell{grid-row:span 1;max-height:none;min-height:auto}}.dashboard-outer-container .widget{background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:14px;display:flex;flex-direction:column;height:100%;max-width:100%;overflow:hidden}.dashboard-outer-container .widget-header{align-items:center;border-bottom:1px solid var(--dashboard-color-border);display:flex;gap:8px;padding:12px 16px}.dashboard-outer-container .widget-heading-bar{-webkit-user-select:none;user-select:none}.dashboard-outer-container .widget-heading-bar.widget-heading-bar--drag-ready{cursor:grabbing}.dashboard-outer-container .widget-icon{font-size:1rem}.dashboard-outer-container .widget-icon-button{background:rgba(var(--dashboard-color-bg-page),.6);border:1px solid rgba(0,0,0,0);border-radius:999px;cursor:pointer;line-height:1;padding:4px;transition:background .2s ease,border-color .2s ease,transform .2s ease}.dashboard-outer-container .widget-icon-button:hover{background:rgba(var(--dashboard-color-blue),.12);border-color:rgba(var(--dashboard-color-blue),.28)}.dashboard-outer-container .widget-title{color:var(--dashboard-color-navy);display:flex;flex:1;font-size:.85rem;font-weight:700;gap:8px;letter-spacing:.03em;margin:0;text-transform:uppercase}.dashboard-outer-container .widget-title__subtitle{color:var(--dashboard-color-text-muted);font-size:.75rem;font-weight:400;letter-spacing:.01em;text-transform:none}.dashboard-outer-container .widget-configure,.dashboard-outer-container .widget-header-action{background:none;border:none;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.75rem;padding:4px 8px}.dashboard-outer-container .widget-configure:hover,.dashboard-outer-container .widget-header-action:hover{color:var(--dashboard-color-navy)}.dashboard-outer-container .widget-body{flex:1;padding:16px}.dashboard-outer-container .dashboard-loading{align-items:center;color:var(--dashboard-color-text-secondary);display:flex;flex-direction:column;gap:16px;height:100vh;justify-content:center;width:100%}.dashboard-outer-container .dashboard-loading .spinner{animation:spin .8s linear infinite;border:3px solid var(--dashboard-color-border);border-radius:50%;border-top-color:var(--dashboard-color-blue);height:32px;width:32px}.dashboard-outer-container .dashboard-error{color:var(--dashboard-color-danger);padding:40px;text-align:center}.dashboard-outer-container .dashboard-error p{color:var(--dashboard-color-text-secondary);margin-top:8px}.dashboard-outer-container .widget-error-fallback{align-items:center;background:var(--dashboard-color-bg-card);border:1px dashed var(--dashboard-color-danger);border-radius:10px;display:flex;flex-direction:column;gap:8px;height:100%;justify-content:center;padding:24px;text-align:center}.dashboard-outer-container .widget-error-fallback-title{color:var(--dashboard-color-danger);font-size:.9rem;font-weight:700}.dashboard-outer-container .widget-error-fallback-message{color:var(--dashboard-color-text-muted);font-size:.8rem;max-width:280px;word-break:break-word}.dashboard-outer-container .widget-error-fallback-retry{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.75rem;margin-top:4px;padding:4px 12px;transition:color .15s ease,border-color .15s ease}.dashboard-outer-container .widget-error-fallback-retry:hover{border-color:var(--dashboard-color-navy);color:var(--dashboard-color-navy)}.dashboard-outer-container .lazy-widget-placeholder{align-items:center;background:var(--dashboard-color-bg-card);border-radius:10px;display:flex;height:100%;justify-content:center;min-height:240px;opacity:.6;width:100%}.dashboard-outer-container .lazy-widget-placeholder .lazy-widget-placeholder-spinner{animation:spin .8s linear infinite;border:3px solid var(--dashboard-color-border);border-radius:50%;border-top-color:var(--dashboard-color-blue);height:32px;opacity:.7;width:32px}@keyframes dashboard-background-fade-in{0%{opacity:0}to{opacity:1}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes widget-wobble{0%{transform:rotate(-1.5deg)}to{transform:rotate(1.5deg)}}
`;
 
// lib/embed-html.js
function buildEmbedHTML() {
return `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>${compiledCSS}</style>
<!-- autoCapturePageviews is disabled because location.href inside the embed is a junk data: URL. -->
<!-- data-api / endpoint must be pinned to the proxy path: the script otherwise auto-derives the event -->
<!-- endpoint as origin + /api/event, hitting amplenote.com's 404 page (no CORS headers) instead of the proxy. -->
<script defer data-domain="amplenote.com" data-api="https://www.amplenote.com/plausible-proxy/api/event" src="https://www.amplenote.com/plausible-proxy/js/script.js"><\/script>
<script>
window.plausible = window.plausible || function () { (window.plausible.q = window.plausible.q || []).push(arguments); };
window.plausible.init = window.plausible.init || function (options) { window.plausible.o = options || {}; };
window.plausible.init({ autoCapturePageviews: false, endpoint: "https://www.amplenote.com/plausible-proxy/api/event" });
<\/script>
<!-- [Claude claude-opus-4-8] Task: surface Plausible tracker load failures (otherwise events queue silently forever) -->
<script>
(function () {
var scriptEl = document.querySelector('script[src="https://www.amplenote.com/plausible-proxy/js/script.js"]');
if (!scriptEl) return;
scriptEl.addEventListener("error", function (event) {
console.error("[plausible] failed to load (404/CSP/network); Dashboard Action events will not be delivered", event);
});
})();
<\/script>
</head>
<body>
<div id="dashboard-root"></div>
<script type="text/javascript" src="data:text/javascript;base64,${clientBase64}"><\/script>
</body>
</html>`;
}
 
// lib/plugin.js
var plugin = {
// --------------------------------------------------------------------------------------
// Constants
// --------------------------------------------------------------------------------------
constants: {},
// --------------------------------------------------------------------------------------
// App Options — Quick Open menu entries
// --------------------------------------------------------------------------------------
appOption: {
"Open Dashboard": async function(app) {
await app.openSidebarEmbed(1.5);
},
"Open Dashboard (Full)": async function(app) {
await app.openEmbed();
}
},
// --------------------------------------------------------------------------------------
// Embed Rendering
// --------------------------------------------------------------------------------------
async renderEmbed(app) {
console.debug("Rendering Dashboard plugin embed");
try {
return buildEmbedHTML();
} catch (error) {
console.error("Dashboard renderEmbed error:", error);
return `<div style="padding:20px;color:red;">Dashboard failed to load: ${error.message}</div>`;
}
},
// --------------------------------------------------------------------------------------
// Embed Communication Bridge
// --------------------------------------------------------------------------------------
// [Claude] Task: generic onEmbedCall — forwards all Amplenote API calls directly to app
// Prompt: "simplify onEmbedCall to generic pass-through, remove manual argument mapping"
// Date: 2026-03-16 | Model: claude-4.6-opus-high-thinking
/**
* Central message-passing bridge between the dashboard React embed and the
* Amplenote host app. Every method call on the `app` Proxy in the embed
* resolves here via `window.callAmplenotePlugin(method, ...args)`.
*
* Custom actions (configure, init) run plugin-specific logic. All other
* calls are forwarded directly to the Amplenote app interface — callers
* must pass arguments matching the real Amplenote API signatures.
*
* @param {object} app - Amplenote app interface
* @param {string} actionType - Method name or custom action identifier
* @param {...*} args - Positional arguments from the embed call
* @returns {Promise<*>} Resolves to the action result, or `{ error }` on failure.
*/
async onEmbedCall(app, actionType, ...args) {
setLoggingEnabled(app.settings[SETTING_KEYS.CONSOLE_LOGGING]);
try {
switch (actionType) {
case "attachNoteMedia":
const noteHandle = { uuid: app.context.noteUUID };
logIfEnabled(`[plugin] attachNoteMedia called \u2014 uploading to plugin note ${noteHandle.uuid}`);
const result = await app.attachNoteMedia(noteHandle, args[1]);
logIfEnabled(`[plugin] attachNoteMedia result:`, result ? "(URL received)" : "(no URL)");
return result;
case "configure":
return await this._handleConfigure(app, args[0]);
case "init":
return await fetchDashboardData(app);
default:
if (typeof app[actionType] === "function") {
return await app[actionType](...args);
}
logIfEnabled(`Unknown embed action: ${actionType}`);
return null;
}
} catch (error) {
logIfEnabled(`onEmbedCall error (${actionType}):`, error);
return { error: error.message };
}
},
// --------------------------------------------------------------------------------------
// Private Methods
// --------------------------------------------------------------------------------------
async _handleConfigure(app, widgetId) {
const configs = {
"victory-value": {
title: "Configure Victory Value",
inputs: [
{ label: "Time range", type: "radio", options: [
{ label: "This week", value: "week" },
{ label: "This month", value: "month" },
{ label: "Last 30 days", value: "30days" }
] },
{ label: "Show mood overlay", type: "checkbox", value: true }
]
},
"calendar": {
title: "Configure Calendar",
inputs: [
{ label: "Week starts on", type: "radio", options: [
{ label: "Sunday", value: "0" },
{ label: "Monday", value: "1" }
] }
]
},
"quotes": {
title: "Configure Quotes",
inputs: [
{ label: "Quote style", type: "radio", options: [
{ label: "Motivational", value: "motivational" },
{ label: "Philosophical", value: "philosophical" },
{ label: "From quarterly goals", value: "goals" }
] }
]
}
};
const config = configs[widgetId];
if (!config)
return null;
const result = await app.prompt(config.title, { inputs: config.inputs });
if (!result)
return null;
await app.setSetting(widgetConfigKey(widgetId), JSON.stringify(
Array.isArray(result) ? result : [result]
));
return result;
}
};
return plugin;
})()