| 1 |
"use strict"; |
| 2 |
|
| 3 |
/** |
| 4 |
* Appearance / Theme settings page UI. |
| 5 |
*/ |
| 6 |
(function ($, w) { |
| 7 |
'use strict'; |
| 8 |
|
| 9 |
var cfg = w.wpbc_settings_themes_page || {}; |
| 10 |
var localized_default_form_accent_color = String(cfg.form_accent_defaults && cfg.form_accent_defaults.booking_form_accent_color || '').trim(); |
| 11 |
|
| 12 |
/** @type {string} Default accent supplied by the PHP configuration constant. */ |
| 13 |
var default_form_accent_color = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i.test(localized_default_form_accent_color) ? localized_default_form_accent_color : ''; |
| 14 |
var preview_ajax = null; |
| 15 |
var preview_timer = 0; |
| 16 |
var preview_notice_timer = 0; |
| 17 |
var preview_notice_message_timer = 0; |
| 18 |
function trim_text(value) { |
| 19 |
return String(value || '').trim(); |
| 20 |
} |
| 21 |
function make_asset_url(path) { |
| 22 |
path = String(path || ''); |
| 23 |
if (/^https?:\/\//i.test(path) || /^\/\//.test(path)) { |
| 24 |
return path; |
| 25 |
} |
| 26 |
return String(cfg.plugin_url || '').replace(/\/$/, '') + path; |
| 27 |
} |
| 28 |
function show_message(message, type, delay) { |
| 29 |
if (typeof w.wpbc_admin_show_message === 'function') { |
| 30 |
w.wpbc_admin_show_message(message, type || 'info', delay || 4000, false); |
| 31 |
} |
| 32 |
} |
| 33 |
function pulse_element($element, duration) { |
| 34 |
if (!$element || !$element.length) { |
| 35 |
return; |
| 36 |
} |
| 37 |
$element.removeClass('wpbc_theme_attention_pulse').each(function () { |
| 38 |
void this.offsetWidth; |
| 39 |
}).addClass('wpbc_theme_attention_pulse'); |
| 40 |
setTimeout(function () { |
| 41 |
$element.removeClass('wpbc_theme_attention_pulse'); |
| 42 |
}, duration || 2100); |
| 43 |
} |
| 44 |
function pulse_latest_warning_notice() { |
| 45 |
clearTimeout(preview_notice_message_timer); |
| 46 |
preview_notice_message_timer = setTimeout(function () { |
| 47 |
pulse_element($('#ajax_working .wpbc_inner_message.notice-warning').last()); |
| 48 |
}, 50); |
| 49 |
} |
| 50 |
function show_highlighted_notice(message, type, delay, $control) { |
| 51 |
if ($control && $control.length) { |
| 52 |
pulse_element($control); |
| 53 |
} |
| 54 |
show_message(message, type || 'warning', delay || 9000); |
| 55 |
pulse_latest_warning_notice(); |
| 56 |
} |
| 57 |
function switch_panel($tab) { |
| 58 |
var panel_id = $tab.attr('aria-controls'); |
| 59 |
var $tabs = $tab.closest('.wpbc_theme_rightbar_tabs').find('[role="tab"]'); |
| 60 |
var $panels = $('.wpbc_theme_rightbar_panels [role="tabpanel"]'); |
| 61 |
$tabs.attr('aria-selected', 'false'); |
| 62 |
$tab.attr('aria-selected', 'true'); |
| 63 |
$panels.attr('hidden', 'hidden').attr('aria-hidden', 'true'); |
| 64 |
$('#' + panel_id).removeAttr('hidden').attr('aria-hidden', 'false'); |
| 65 |
} |
| 66 |
function toggle_group($button) { |
| 67 |
var $group = $button.closest('.wpbc_ui__collapsible_group'); |
| 68 |
var $fields = $group.find('> .group__fields'); |
| 69 |
var is_open = $group.hasClass('is-open'); |
| 70 |
$group.toggleClass('is-open', !is_open); |
| 71 |
$button.attr('aria-expanded', is_open ? 'false' : 'true'); |
| 72 |
$fields.prop('hidden', is_open).attr('aria-hidden', is_open ? 'true' : 'false'); |
| 73 |
} |
| 74 |
function get_form() { |
| 75 |
return $('[data-wpbc-theme-settings-form="1"]').first(); |
| 76 |
} |
| 77 |
function collect_payload() { |
| 78 |
var $form = get_form(); |
| 79 |
var data = {}; |
| 80 |
sync_form_style_choice(); |
| 81 |
$.each($form.serializeArray(), function (index, item) { |
| 82 |
if (0 === String(item.name || '').indexOf('wpbc_setup')) { |
| 83 |
return; |
| 84 |
} |
| 85 |
data[item.name] = item.value; |
| 86 |
}); |
| 87 |
data.booking_timeslot_picker = $form.find('[name="booking_timeslot_picker"]').prop('checked') ? 'On' : 'Off'; |
| 88 |
data.booking_form_accent_enabled = $form.find('[name="booking_form_accent_enabled"]').prop('checked') ? 'On' : 'Off'; |
| 89 |
data.resource_id = $('#wpbc_theme_resource_id').val() || ''; |
| 90 |
data.months_count = $('#wpbc_theme_months_count').val() || ''; |
| 91 |
data.preview_mode = $('#wpbc_theme_preview_mode').val() || 'form'; |
| 92 |
data.custom_booking_form = $('#wpbc_theme_custom_form').val() || 'standard'; |
| 93 |
return data; |
| 94 |
} |
| 95 |
function map_form_style_choice(value) { |
| 96 |
var choice = String(value || 'light_bordered'); |
| 97 |
var current_theme = $('#booking_form_theme').val() || ''; |
| 98 |
var parts; |
| 99 |
var preset; |
| 100 |
if ('custom' === choice) { |
| 101 |
return { |
| 102 |
theme: current_theme, |
| 103 |
preset: 'custom' |
| 104 |
}; |
| 105 |
} |
| 106 |
parts = choice.split('_'); |
| 107 |
preset = parts[1] || 'bordered'; |
| 108 |
if (['bordered', 'none', 'soft'].indexOf(preset) === -1) { |
| 109 |
preset = 'bordered'; |
| 110 |
} |
| 111 |
return { |
| 112 |
theme: 'dark' === parts[0] ? 'wpbc_theme_dark_1' : '', |
| 113 |
preset: preset |
| 114 |
}; |
| 115 |
} |
| 116 |
function get_form_style_choice_from_values() { |
| 117 |
var theme = $('#booking_form_theme').val() || ''; |
| 118 |
var preset = $('#booking_form_appearance_preset').val() || 'bordered'; |
| 119 |
var prefix = theme ? 'dark' : 'light'; |
| 120 |
if ('custom' === preset) { |
| 121 |
return 'custom'; |
| 122 |
} |
| 123 |
if (['bordered', 'none', 'soft'].indexOf(preset) === -1) { |
| 124 |
preset = 'bordered'; |
| 125 |
} |
| 126 |
return prefix + '_' + preset; |
| 127 |
} |
| 128 |
function sync_form_style_choice() { |
| 129 |
var $checked = get_form().find('[name="booking_form_style"]:checked'); |
| 130 |
var mapped; |
| 131 |
if (!$checked.length) { |
| 132 |
return; |
| 133 |
} |
| 134 |
mapped = map_form_style_choice($checked.val()); |
| 135 |
$('#booking_form_theme').val(mapped.theme); |
| 136 |
$('#booking_form_appearance_preset').val(mapped.preset); |
| 137 |
} |
| 138 |
function sync_form_style_choice_selection() { |
| 139 |
var choice = get_form_style_choice_from_values(); |
| 140 |
var $choices = get_form().find('[name="booking_form_style"]'); |
| 141 |
$choices.prop('checked', false); |
| 142 |
$choices.filter('[value="' + choice + '"]').prop('checked', true); |
| 143 |
$('.wpbc_theme_choice').removeClass('is-selected'); |
| 144 |
$choices.filter(':checked').closest('.wpbc_theme_choice').addClass('is-selected'); |
| 145 |
} |
| 146 |
function apply_form_theme() { |
| 147 |
var theme = $('#booking_form_theme').val() || ''; |
| 148 |
var $preview = $('[data-wpbc-theme-preview="1"]'); |
| 149 |
var $theme_targets = $preview.add($preview.find('.wpbc_container.wpbc_form, .wpbc_container_booking_form')); |
| 150 |
$theme_targets.each(function () { |
| 151 |
var $target = $(this); |
| 152 |
var classes = String(this.className || '').split(/\s+/); |
| 153 |
$.each(classes, function (index, class_name) { |
| 154 |
if (/^wpbc_theme_/.test(class_name) && !/^wpbc_theme_preview/.test(class_name)) { |
| 155 |
$target.removeClass(class_name); |
| 156 |
} |
| 157 |
}); |
| 158 |
}); |
| 159 |
if (theme) { |
| 160 |
$theme_targets.addClass(theme); |
| 161 |
} |
| 162 |
sync_form_style_choice_selection(); |
| 163 |
} |
| 164 |
function get_form_appearance_presets() { |
| 165 |
return { |
| 166 |
bordered: { |
| 167 |
background: '#ffffff', |
| 168 |
borderColor: '#cccccc', |
| 169 |
borderWidth: '1px', |
| 170 |
radius: '2px', |
| 171 |
padding: '10px 30px', |
| 172 |
shadow: 'rgba(0, 0, 0, 0.05) 0px 2px 6px 0px' |
| 173 |
}, |
| 174 |
none: { |
| 175 |
background: 'transparent', |
| 176 |
borderColor: 'transparent', |
| 177 |
borderWidth: '0px', |
| 178 |
radius: '0px', |
| 179 |
padding: '0px', |
| 180 |
shadow: 'none' |
| 181 |
}, |
| 182 |
soft: { |
| 183 |
background: '#f9f9fa', |
| 184 |
borderColor: '#fff', |
| 185 |
borderWidth: '3px', |
| 186 |
radius: '8px', |
| 187 |
padding: '20px', |
| 188 |
shadow: 'rgba(15, 23, 42, 0.06) 0px 4px 16px 0px' |
| 189 |
} |
| 190 |
}; |
| 191 |
} |
| 192 |
function is_dark_form_theme() { |
| 193 |
return 'wpbc_theme_dark_1' === String($('#booking_form_theme').val() || ''); |
| 194 |
} |
| 195 |
function get_form_appearance_preset_for_theme(preset) { |
| 196 |
var presets = get_form_appearance_presets(); |
| 197 |
if (!is_dark_form_theme()) { |
| 198 |
return presets[preset] || presets.bordered; |
| 199 |
} |
| 200 |
if ('soft' === preset) { |
| 201 |
return { |
| 202 |
background: '#1f2937', |
| 203 |
borderColor: '#334155', |
| 204 |
borderWidth: '3px', |
| 205 |
radius: '8px', |
| 206 |
padding: '20px', |
| 207 |
shadow: 'rgba(0, 0, 0, 0.24) 0px 4px 16px 0px' |
| 208 |
}; |
| 209 |
} |
| 210 |
return presets[preset] || presets.bordered; |
| 211 |
} |
| 212 |
function sanitize_theme_color(value, fallback) { |
| 213 |
var v = String(value || '').trim(); |
| 214 |
return /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i.test(v) || 'transparent' === v ? v : fallback; |
| 215 |
} |
| 216 |
function sanitize_theme_length(value, fallback) { |
| 217 |
var v = String(value || '').trim(); |
| 218 |
return /^\d+(?:\.\d+)?(?:px|rem|em|%)$/i.test(v) ? v : fallback; |
| 219 |
} |
| 220 |
function sanitize_theme_spacing(value, fallback) { |
| 221 |
var v = String(value || '').trim().replace(/\s+/g, ' '); |
| 222 |
var parts = v ? v.split(' ') : []; |
| 223 |
var i; |
| 224 |
if (parts.length < 1 || parts.length > 4) { |
| 225 |
return fallback; |
| 226 |
} |
| 227 |
for (i = 0; i < parts.length; i++) { |
| 228 |
if (!/^\d+(?:\.\d+)?(?:px|rem|em|%)$/i.test(parts[i])) { |
| 229 |
return fallback; |
| 230 |
} |
| 231 |
} |
| 232 |
return parts.join(' '); |
| 233 |
} |
| 234 |
function mix_theme_colors(color, target, amount) { |
| 235 |
var source = sanitize_theme_color(color, default_form_accent_color).replace('#', ''); |
| 236 |
var destination = sanitize_theme_color(target, '#000000').replace('#', ''); |
| 237 |
var channels = []; |
| 238 |
var index; |
| 239 |
if (3 === source.length) { |
| 240 |
source = source.replace(/./g, function (value) { |
| 241 |
return value + value; |
| 242 |
}); |
| 243 |
} |
| 244 |
for (index = 0; index < 3; index++) { |
| 245 |
channels.push(Math.round(parseInt(source.substr(index * 2, 2), 16) + (parseInt(destination.substr(index * 2, 2), 16) - parseInt(source.substr(index * 2, 2), 16)) * amount)); |
| 246 |
} |
| 247 |
return '#' + channels.map(function (channel) { |
| 248 |
return ('0' + channel.toString(16)).slice(-2); |
| 249 |
}).join(''); |
| 250 |
} |
| 251 |
function get_theme_color_luminance(color) { |
| 252 |
var hex = sanitize_theme_color(color, default_form_accent_color).replace('#', ''); |
| 253 |
var channels; |
| 254 |
if (3 === hex.length) { |
| 255 |
hex = hex.replace(/./g, function (value) { |
| 256 |
return value + value; |
| 257 |
}); |
| 258 |
} |
| 259 |
channels = [0, 1, 2].map(function (index) { |
| 260 |
var channel = parseInt(hex.substr(index * 2, 2), 16) / 255; |
| 261 |
return channel <= 0.03928 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4); |
| 262 |
}); |
| 263 |
return 0.2126 * channels[0] + 0.7152 * channels[1] + 0.0722 * channels[2]; |
| 264 |
} |
| 265 |
|
| 266 |
/** |
| 267 |
* Apply the accent to preview variables while respecting Custom button controls. |
| 268 |
* |
| 269 |
* @param {Object} css_vars Resolved preview variables. |
| 270 |
* @param {boolean} preserve_custom_button_colors Whether Custom button variables remain authoritative. |
| 271 |
* @return {Object} Preview variables with the optional accent overlay. |
| 272 |
*/ |
| 273 |
function apply_form_accent_css_vars(css_vars, preserve_custom_button_colors) { |
| 274 |
var enabled = get_form().find('[name="booking_form_accent_enabled"]').prop('checked'); |
| 275 |
var accent_raw = String(get_form().find('[name="booking_form_accent_color"]').val() || '').trim(); |
| 276 |
var accent = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i.test(accent_raw) ? accent_raw : default_form_accent_color; |
| 277 |
var luminance; |
| 278 |
var hover; |
| 279 |
var contrast; |
| 280 |
var hover_contrast; |
| 281 |
if (!enabled) { |
| 282 |
return css_vars; |
| 283 |
} |
| 284 |
if (!/^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i.test(accent)) { |
| 285 |
return css_vars; |
| 286 |
} |
| 287 |
luminance = get_theme_color_luminance(accent); |
| 288 |
contrast = luminance > 0.18 ? '#000000' : '#ffffff'; |
| 289 |
hover = mix_theme_colors(accent, '#ffffff' === contrast ? '#000000' : '#ffffff', 0.10); |
| 290 |
hover_contrast = contrast; |
| 291 |
var accent_overlay = { |
| 292 |
'--wpbc_form-accent-color': accent, |
| 293 |
'--wpbc_form-accent-hover-color': hover, |
| 294 |
'--wpbc_form-accent-contrast-color': contrast, |
| 295 |
'--wpbc_form-field-focus-border-color': accent, |
| 296 |
'--wpbc_form-field-focus-shadow-color': accent, |
| 297 |
'--wpbc_form-choice-checked-border-color': accent, |
| 298 |
'--wpbc_form-choice-checked-color': accent, |
| 299 |
'--wpbc_form-choice-focus-color': accent, |
| 300 |
'--wpbc_form-button-background-color': accent, |
| 301 |
'--wpbc_form-button-background-color-alt': accent, |
| 302 |
'--wpbc_form-button-border-color': accent, |
| 303 |
'--wpbc_form-button-text-color': contrast, |
| 304 |
'--wpbc_form-button-text-color-alt': contrast, |
| 305 |
'--wpbc_form-button-hover-background-color': hover, |
| 306 |
'--wpbc_form-button-hover-border-color': hover, |
| 307 |
'--wpbc_form-button-hover-text-color': hover_contrast, |
| 308 |
'--wpbc_form-button-light-hover-border-color': accent, |
| 309 |
'--wpbc_form-button-primary-hover-border-color': hover, |
| 310 |
'--wpbc_form-page-break-color': accent |
| 311 |
}; |
| 312 |
if (preserve_custom_button_colors) { |
| 313 |
['--wpbc_form-button-background-color', '--wpbc_form-button-background-color-alt', '--wpbc_form-button-border-color', '--wpbc_form-button-text-color', '--wpbc_form-button-text-color-alt', '--wpbc_form-button-hover-background-color', '--wpbc_form-button-hover-border-color', '--wpbc_form-button-hover-text-color', '--wpbc_form-button-light-hover-border-color', '--wpbc_form-button-primary-hover-border-color'].forEach(function (css_var_name) { |
| 314 |
delete accent_overlay[css_var_name]; |
| 315 |
}); |
| 316 |
} |
| 317 |
return $.extend({}, css_vars, accent_overlay); |
| 318 |
} |
| 319 |
function get_form_style_presets() { |
| 320 |
return cfg.form_style_presets && 'object' === typeof cfg.form_style_presets ? cfg.form_style_presets : {}; |
| 321 |
} |
| 322 |
function get_current_form_style() { |
| 323 |
var $checked = get_form().find('[name="booking_form_style"]:checked'); |
| 324 |
return $checked.length ? String($checked.val() || 'light_bordered') : 'light_bordered'; |
| 325 |
} |
| 326 |
function get_custom_form_style_defaults() { |
| 327 |
return $.extend({ |
| 328 |
booking_form_custom_background_color: '#ffffff', |
| 329 |
booking_form_custom_border_color: '#cccccc', |
| 330 |
booking_form_custom_border_width: '1px', |
| 331 |
booking_form_custom_border_radius: '2px', |
| 332 |
booking_form_custom_padding_vertical: '10px', |
| 333 |
booking_form_custom_padding_horizontal: '30px', |
| 334 |
booking_form_custom_text_color: '#1d2327', |
| 335 |
booking_form_custom_field_background_color: '#ffffff', |
| 336 |
booking_form_custom_field_text_color: '#3c434a', |
| 337 |
booking_form_custom_field_border_color: '#cccccc', |
| 338 |
booking_form_custom_button_background_color: '#066aab', |
| 339 |
booking_form_custom_button_text_color: '#ffffff', |
| 340 |
booking_form_custom_button_border_color: '#066aab', |
| 341 |
booking_form_custom_button_hover_background_color: '#055589', |
| 342 |
booking_form_custom_button_hover_text_color: '#ffffff', |
| 343 |
booking_form_custom_button_hover_border_color: '#055589', |
| 344 |
booking_form_custom_secondary_button_background_color: '#fdfdfd', |
| 345 |
booking_form_custom_secondary_button_text_color: '#444444', |
| 346 |
booking_form_custom_secondary_button_border_color: '#eeeeee', |
| 347 |
booking_form_custom_secondary_button_hover_background_color: '#fdfdfd', |
| 348 |
booking_form_custom_secondary_button_hover_text_color: '#444444', |
| 349 |
booking_form_custom_secondary_button_hover_border_color: '#4d91cd', |
| 350 |
booking_form_custom_button_border_width: '1px', |
| 351 |
booking_form_custom_button_border_radius: '3px' |
| 352 |
}, cfg.custom_form_style_defaults && 'object' === typeof cfg.custom_form_style_defaults ? cfg.custom_form_style_defaults : {}); |
| 353 |
} |
| 354 |
function get_custom_form_style_css_vars() { |
| 355 |
var defaults = get_custom_form_style_defaults(); |
| 356 |
var values = $.extend({}, defaults, cfg.settings && 'object' === typeof cfg.settings ? cfg.settings : {}); |
| 357 |
return { |
| 358 |
'--wpbc-bfb-form-background': sanitize_theme_color(values.booking_form_custom_background_color, defaults.booking_form_custom_background_color), |
| 359 |
'--wpbc-bfb-form-border-color': sanitize_theme_color(values.booking_form_custom_border_color, defaults.booking_form_custom_border_color), |
| 360 |
'--wpbc-bfb-form-border-width': sanitize_theme_length(values.booking_form_custom_border_width, defaults.booking_form_custom_border_width), |
| 361 |
'--wpbc-bfb-form-border-radius': sanitize_theme_length(values.booking_form_custom_border_radius, defaults.booking_form_custom_border_radius), |
| 362 |
'--wpbc-bfb-form-padding': sanitize_theme_length(values.booking_form_custom_padding_vertical, defaults.booking_form_custom_padding_vertical) + ' ' + sanitize_theme_length(values.booking_form_custom_padding_horizontal, defaults.booking_form_custom_padding_horizontal), |
| 363 |
'--wpbc-bfb-form-box-shadow': 'rgba(0, 0, 0, 0.05) 0px 2px 6px 0px', |
| 364 |
'--wpbc_form-label-color': sanitize_theme_color(values.booking_form_custom_text_color, defaults.booking_form_custom_text_color), |
| 365 |
'--wpbc_form-label-sublabel-color': sanitize_theme_color(values.booking_form_custom_text_color, defaults.booking_form_custom_text_color), |
| 366 |
'--wpbc_form-label-error-color': '#d63637', |
| 367 |
'--wpbc_form-field-background-color': sanitize_theme_color(values.booking_form_custom_field_background_color, defaults.booking_form_custom_field_background_color), |
| 368 |
'--wpbc_form-field-menu-color': sanitize_theme_color(values.booking_form_custom_field_background_color, defaults.booking_form_custom_field_background_color), |
| 369 |
'--wpbc_form-field-text-color': sanitize_theme_color(values.booking_form_custom_field_text_color, defaults.booking_form_custom_field_text_color), |
| 370 |
'--wpbc_form-field-border-color': sanitize_theme_color(values.booking_form_custom_field_border_color, defaults.booking_form_custom_field_border_color), |
| 371 |
'--wpbc_form-field-border-color-spare': sanitize_theme_color(values.booking_form_custom_field_border_color, defaults.booking_form_custom_field_border_color), |
| 372 |
'--wpbc_form-field-focus-border-color': '#066aab', |
| 373 |
'--wpbc_form-field-focus-shadow-color': '#066aab', |
| 374 |
'--wpbc_form-field-disabled-color': 'rgba(0, 0, 0, 0.2)', |
| 375 |
'--wpbc_form-button-border-radius': sanitize_theme_length(values.booking_form_custom_button_border_radius, defaults.booking_form_custom_button_border_radius), |
| 376 |
'--wpbc_form-button-border-style': 'solid', |
| 377 |
'--wpbc_form-button-border-size': sanitize_theme_length(values.booking_form_custom_button_border_width, defaults.booking_form_custom_button_border_width), |
| 378 |
'--wpbc_form-button-background-color': sanitize_theme_color(values.booking_form_custom_button_background_color, defaults.booking_form_custom_button_background_color), |
| 379 |
'--wpbc_form-button-background-color-alt': sanitize_theme_color(values.booking_form_custom_button_background_color, defaults.booking_form_custom_button_background_color), |
| 380 |
'--wpbc_form-button-border-color': sanitize_theme_color(values.booking_form_custom_button_border_color, defaults.booking_form_custom_button_border_color), |
| 381 |
'--wpbc_form-button-text-color': sanitize_theme_color(values.booking_form_custom_button_text_color, defaults.booking_form_custom_button_text_color), |
| 382 |
'--wpbc_form-button-text-color-alt': sanitize_theme_color(values.booking_form_custom_button_text_color, defaults.booking_form_custom_button_text_color), |
| 383 |
'--wpbc_form-button-hover-background-color': sanitize_theme_color(values.booking_form_custom_button_hover_background_color, defaults.booking_form_custom_button_hover_background_color), |
| 384 |
'--wpbc_form-button-hover-border-color': sanitize_theme_color(values.booking_form_custom_button_hover_border_color, defaults.booking_form_custom_button_hover_border_color), |
| 385 |
'--wpbc_form-button-hover-text-color': sanitize_theme_color(values.booking_form_custom_button_hover_text_color, defaults.booking_form_custom_button_hover_text_color), |
| 386 |
'--wpbc_form-choice-checked-border-color': '#066aab', |
| 387 |
'--wpbc_form-choice-checked-color': '#066aab', |
| 388 |
'--wpbc_form-choice-focus-color': '#066aab', |
| 389 |
'--wpbc_form-button-light-background-color': sanitize_theme_color(values.booking_form_custom_secondary_button_background_color, defaults.booking_form_custom_secondary_button_background_color), |
| 390 |
'--wpbc_form-button-light-border-color': sanitize_theme_color(values.booking_form_custom_secondary_button_border_color, defaults.booking_form_custom_secondary_button_border_color), |
| 391 |
'--wpbc_form-button-light-border-size': sanitize_theme_length(values.booking_form_custom_button_border_width, defaults.booking_form_custom_button_border_width), |
| 392 |
'--wpbc_form-button-light-text-color': sanitize_theme_color(values.booking_form_custom_secondary_button_text_color, defaults.booking_form_custom_secondary_button_text_color), |
| 393 |
'--wpbc_form-button-light-box-shadow': '0 2px 10px 2px #ffffff54', |
| 394 |
'--wpbc_form-button-light-hover-background-color': sanitize_theme_color(values.booking_form_custom_secondary_button_hover_background_color, defaults.booking_form_custom_secondary_button_hover_background_color), |
| 395 |
'--wpbc_form-button-light-hover-border-color': sanitize_theme_color(values.booking_form_custom_secondary_button_hover_border_color, defaults.booking_form_custom_secondary_button_hover_border_color), |
| 396 |
'--wpbc_form-button-light-hover-text-color': sanitize_theme_color(values.booking_form_custom_secondary_button_hover_text_color, defaults.booking_form_custom_secondary_button_hover_text_color), |
| 397 |
'--wpbc_form-button-light-hover-box-shadow': '0 2px 10px 2px #ffffff54', |
| 398 |
'--wpbc_form-button-primary-hover-border-color': sanitize_theme_color(values.booking_form_custom_button_hover_border_color, defaults.booking_form_custom_button_hover_border_color), |
| 399 |
'--wpbc_form-page-break-color': '#066aab' |
| 400 |
}; |
| 401 |
} |
| 402 |
function get_form_style_css_var_names() { |
| 403 |
var keys = []; |
| 404 |
var presets; |
| 405 |
if (Array.isArray(cfg.form_style_css_var_names) && cfg.form_style_css_var_names.length) { |
| 406 |
return cfg.form_style_css_var_names; |
| 407 |
} |
| 408 |
presets = get_form_style_presets(); |
| 409 |
$.each(presets, function (preset_key, preset) { |
| 410 |
if (preset && preset.css_vars && 'object' === typeof preset.css_vars) { |
| 411 |
$.each(preset.css_vars, function (var_name) { |
| 412 |
if (-1 === keys.indexOf(var_name)) { |
| 413 |
keys.push(var_name); |
| 414 |
} |
| 415 |
}); |
| 416 |
} |
| 417 |
}); |
| 418 |
$.each(get_custom_form_style_css_vars(), function (var_name) { |
| 419 |
if (-1 === keys.indexOf(var_name)) { |
| 420 |
keys.push(var_name); |
| 421 |
} |
| 422 |
}); |
| 423 |
return keys; |
| 424 |
} |
| 425 |
function resolve_form_style_css_vars(style) { |
| 426 |
var presets = get_form_style_presets(); |
| 427 |
var preset = presets[style] || presets.light_bordered || {}; |
| 428 |
if ('custom' === style || preset.custom) { |
| 429 |
return apply_form_accent_css_vars(get_custom_form_style_css_vars(), true); |
| 430 |
} |
| 431 |
return apply_form_accent_css_vars(preset.css_vars && 'object' === typeof preset.css_vars ? preset.css_vars : {}); |
| 432 |
} |
| 433 |
function apply_form_style_to_preview() { |
| 434 |
var style = get_current_form_style(); |
| 435 |
var presets = get_form_style_presets(); |
| 436 |
var preset = presets[style] || presets.light_bordered || {}; |
| 437 |
var css_vars = resolve_form_style_css_vars(style); |
| 438 |
var css_var_names = get_form_style_css_var_names(); |
| 439 |
var is_custom = 'custom' === style || preset.custom; |
| 440 |
var $preview = $('[data-wpbc-theme-preview="1"]'); |
| 441 |
var $targets = $preview.find('.wpbc_container.wpbc_form, .wpbc_bfb_form, .wpbc_bfb__form_preview_section_container'); |
| 442 |
$('[data-wpbc-theme-custom-appearance-notice="1"]').toggle(is_custom); |
| 443 |
if (!$targets.length) { |
| 444 |
return; |
| 445 |
} |
| 446 |
$targets.removeClass('wpbc_bfb_form_appearance_custom').each(function () { |
| 447 |
var style_obj = this.style; |
| 448 |
$.each(css_var_names, function (index, var_name) { |
| 449 |
style_obj.removeProperty(var_name); |
| 450 |
}); |
| 451 |
$.each(css_vars, function (var_name, value) { |
| 452 |
if ('' !== String(value || '')) { |
| 453 |
style_obj.setProperty(var_name, value); |
| 454 |
} |
| 455 |
}); |
| 456 |
}); |
| 457 |
if (is_custom) { |
| 458 |
$targets.filter('.wpbc_container.wpbc_form, .wpbc_bfb_form').addClass('wpbc_bfb_form_appearance_custom'); |
| 459 |
} |
| 460 |
} |
| 461 |
function resolve_form_appearance() { |
| 462 |
var preset = $('#booking_form_appearance_preset').val() || 'bordered'; |
| 463 |
if ('custom' === preset) { |
| 464 |
return get_form_appearance_presets().bordered; |
| 465 |
} |
| 466 |
return get_form_appearance_preset_for_theme(preset); |
| 467 |
} |
| 468 |
function apply_form_appearance() { |
| 469 |
apply_form_style_to_preview(); |
| 470 |
} |
| 471 |
function apply_calendar_skin() { |
| 472 |
var $select = $('[data-wpbc-theme-calendar-skin="1"]'); |
| 473 |
var value = $select.find('option:selected').attr('data-wpbc-calendar-skin-url') || $select.val() || ''; |
| 474 |
var skin_url = value ? make_asset_url(value) : ''; |
| 475 |
if (skin_url && typeof w.wpbc__calendar__change_skin === 'function' && $('#wpbc-calendar-skin-css').length) { |
| 476 |
w.wpbc__calendar__change_skin(skin_url); |
| 477 |
} |
| 478 |
} |
| 479 |
function apply_time_skin() { |
| 480 |
var value = $('[data-wpbc-theme-time-skin="1"]').val() || ''; |
| 481 |
var skin_url = value ? make_asset_url(value) : ''; |
| 482 |
if (skin_url && typeof w.wpbc__css__change_skin === 'function' && $('#wpbc-time_picker-skin-css').length) { |
| 483 |
w.wpbc__css__change_skin(skin_url, 'wpbc-time_picker-skin-css'); |
| 484 |
} |
| 485 |
} |
| 486 |
function select_if_option_exists($select, value) { |
| 487 |
var $option; |
| 488 |
if (!$select.length || !value) { |
| 489 |
return false; |
| 490 |
} |
| 491 |
$option = $select.find('option[value="' + value + '"]'); |
| 492 |
if (!$option.length) { |
| 493 |
return false; |
| 494 |
} |
| 495 |
if ($select.val() === value) { |
| 496 |
return false; |
| 497 |
} |
| 498 |
$select.val(value).trigger('change'); |
| 499 |
return true; |
| 500 |
} |
| 501 |
function parse_number_list(value) { |
| 502 |
if (Array.isArray(value)) { |
| 503 |
return $.map(value, function (item) { |
| 504 |
var parsed = parseInt(item, 10); |
| 505 |
return isNaN(parsed) ? null : parsed; |
| 506 |
}); |
| 507 |
} |
| 508 |
return $.map(String(value || '').split(/\s*,\s*/), function (item) { |
| 509 |
var parsed = parseInt(item, 10); |
| 510 |
return '' === item || isNaN(parsed) ? null : parsed; |
| 511 |
}); |
| 512 |
} |
| 513 |
function set_calendar_param(resource_id, key, value) { |
| 514 |
if (w._wpbc && typeof w._wpbc.calendar__set_param_value === 'function') { |
| 515 |
w._wpbc.calendar__set_param_value(resource_id, key, value); |
| 516 |
} |
| 517 |
} |
| 518 |
function apply_days_selection_to_calendar(resource_id, days_selection, should_reinit) { |
| 519 |
var ds = days_selection || {}; |
| 520 |
var fixed_week_days; |
| 521 |
var dynamic_specific; |
| 522 |
var dynamic_week_days; |
| 523 |
if (!resource_id || !w._wpbc || typeof w._wpbc.calendar__set_param_value !== 'function') { |
| 524 |
return; |
| 525 |
} |
| 526 |
fixed_week_days = parse_number_list(ds.fixed__week_days__start); |
| 527 |
dynamic_specific = parse_number_list(ds.dynamic__days_specific); |
| 528 |
dynamic_week_days = parse_number_list(ds.dynamic__week_days__start); |
| 529 |
set_calendar_param(resource_id, 'days_select_mode', String(ds.days_select_mode || 'multiple')); |
| 530 |
set_calendar_param(resource_id, 'fixed__days_num', parseInt(ds.fixed__days_num || 0, 10)); |
| 531 |
set_calendar_param(resource_id, 'fixed__week_days__start', fixed_week_days.length ? fixed_week_days : [-1]); |
| 532 |
set_calendar_param(resource_id, 'dynamic__days_min', parseInt(ds.dynamic__days_min || 0, 10)); |
| 533 |
set_calendar_param(resource_id, 'dynamic__days_max', parseInt(ds.dynamic__days_max || 0, 10)); |
| 534 |
set_calendar_param(resource_id, 'dynamic__days_specific', dynamic_specific); |
| 535 |
set_calendar_param(resource_id, 'dynamic__week_days__start', dynamic_week_days.length ? dynamic_week_days : [-1]); |
| 536 |
if (typeof w.wpbc__conditions__SAVE_INITIAL__days_selection_params__bm === 'function') { |
| 537 |
w.wpbc__conditions__SAVE_INITIAL__days_selection_params__bm(resource_id); |
| 538 |
} |
| 539 |
if (should_reinit && typeof w.wpbc_cal__re_init === 'function') { |
| 540 |
w.wpbc_cal__re_init(resource_id); |
| 541 |
} |
| 542 |
} |
| 543 |
function ensure_calendar_only_days_selection() { |
| 544 |
var $preview = $('[data-wpbc-theme-preview="1"]').first(); |
| 545 |
var preview_mode = $preview.attr('data-preview-mode') || $('#wpbc_theme_preview_mode').val() || 'form'; |
| 546 |
var resource_id = parseInt($preview.attr('data-resource-id') || 0, 10); |
| 547 |
var expected = cfg.days_selection || {}; |
| 548 |
var expected_mode = String(expected.days_select_mode || 'multiple'); |
| 549 |
var current_mode = null; |
| 550 |
var $calendar; |
| 551 |
var should_reinit = false; |
| 552 |
if ('calendar' !== preview_mode || !resource_id || !expected_mode) { |
| 553 |
return; |
| 554 |
} |
| 555 |
if (!w._wpbc || typeof w._wpbc.calendar__get_param_value !== 'function') { |
| 556 |
return; |
| 557 |
} |
| 558 |
current_mode = w._wpbc.calendar__get_param_value(resource_id, 'days_select_mode'); |
| 559 |
if (String(current_mode || '') === expected_mode) { |
| 560 |
return; |
| 561 |
} |
| 562 |
$calendar = $('#calendar_booking' + resource_id); |
| 563 |
should_reinit = $calendar.length && $calendar.hasClass('hasDatepick'); |
| 564 |
apply_days_selection_to_calendar(resource_id, expected, should_reinit); |
| 565 |
} |
| 566 |
function apply_related_skins_for_theme(theme) { |
| 567 |
var calendar_skin = theme ? '/css/skins/24_9__dark_1.css' : '/css/skins/25_5__square_1.css'; |
| 568 |
var time_skin = '/css/time_picker_skins/form_style.css'; |
| 569 |
select_if_option_exists($('[data-wpbc-theme-calendar-skin="1"]'), calendar_skin); |
| 570 |
select_if_option_exists($('[data-wpbc-theme-time-skin="1"]'), time_skin); |
| 571 |
} |
| 572 |
function pulse_preview_mode_control() { |
| 573 |
var $control = $('.wpbc_theme_control_preview_mode').first(); |
| 574 |
pulse_element($control); |
| 575 |
clearTimeout(preview_notice_timer); |
| 576 |
preview_notice_timer = setTimeout(function () { |
| 577 |
$control.removeClass('wpbc_theme_attention_pulse'); |
| 578 |
}, 2100); |
| 579 |
} |
| 580 |
function get_preview_notice_message(notice_type) { |
| 581 |
var i18n = cfg.i18n || {}; |
| 582 |
if ('form' === notice_type) { |
| 583 |
return i18n.form_preview_option_notice || 'This option is visible in the Booking form preview. Switch Preview to Booking form to inspect it.'; |
| 584 |
} |
| 585 |
return ''; |
| 586 |
} |
| 587 |
function maybe_show_preview_notice($source) { |
| 588 |
var notice_type = $source.attr('data-wpbc-theme-preview-notice') || ''; |
| 589 |
var preview_mode = $('#wpbc_theme_preview_mode').val() || 'form'; |
| 590 |
var message = get_preview_notice_message(notice_type); |
| 591 |
var $control = $('.wpbc_theme_control_preview_mode').first(); |
| 592 |
if (!message) { |
| 593 |
return; |
| 594 |
} |
| 595 |
if ('form' === notice_type && 'calendar' !== preview_mode) { |
| 596 |
return; |
| 597 |
} |
| 598 |
if ('form' === notice_type) { |
| 599 |
pulse_preview_mode_control(); |
| 600 |
show_highlighted_notice(message, 'warning', 9000); |
| 601 |
return; |
| 602 |
} |
| 603 |
show_highlighted_notice(message, 'warning', 9000, $control); |
| 604 |
} |
| 605 |
function show_calendar_only_theme_notice() { |
| 606 |
var preview_mode = $('#wpbc_theme_preview_mode').val() || 'form'; |
| 607 |
if ('calendar' !== preview_mode) { |
| 608 |
return; |
| 609 |
} |
| 610 |
pulse_preview_mode_control(); |
| 611 |
show_highlighted_notice(cfg.i18n && cfg.i18n.calendar_only_theme_notice ? cfg.i18n.calendar_only_theme_notice : 'Preview is set to Calendar only. Switch Preview to Booking form to inspect the form theme.', 'warning', 9000); |
| 612 |
} |
| 613 |
function sync_time_picker_preview() { |
| 614 |
var is_enabled = get_form().find('[name="booking_timeslot_picker"]').prop('checked'); |
| 615 |
var $preview = $('[data-wpbc-theme-preview="1"]'); |
| 616 |
var time_selectors = 'select[name^="rangetime"], select[name^="starttime"], select[name^="endtime"], select[name^="durationtime"]'; |
| 617 |
if (w._wpbc && typeof w._wpbc.set_other_param === 'function') { |
| 618 |
w._wpbc.set_other_param('is_enabled_booking_timeslot_picker', !!is_enabled); |
| 619 |
} |
| 620 |
if (is_enabled) { |
| 621 |
if (w._wpbc && typeof w.wpbc_hook__init_timeselector === 'function') { |
| 622 |
w.wpbc_hook__init_timeselector(); |
| 623 |
} |
| 624 |
return; |
| 625 |
} |
| 626 |
$preview.find('.wpbc_times_selector').remove(); |
| 627 |
$preview.find(time_selectors).show(); |
| 628 |
} |
| 629 |
function refresh_preview_mode_controls() { |
| 630 |
var preview_mode = $('#wpbc_theme_preview_mode').val() || 'form'; |
| 631 |
$('[data-wpbc-theme-form-control="1"]').toggleClass('is-visible', 'form' === preview_mode); |
| 632 |
} |
| 633 |
function set_calendar_loading(is_loading) { |
| 634 |
var $panel = $('[data-wpbc-theme-calendar-panel="1"]'); |
| 635 |
$panel.toggleClass('is-loading', !!is_loading); |
| 636 |
$panel.find('.wpbc_theme_calendar_loading').remove(); |
| 637 |
if (is_loading) { |
| 638 |
$panel.append('<div class="wpbc_calendar_loading wpbc_theme_calendar_loading">' + '<span class="wpbc_icn_autorenew wpbc_animation_spin"></span> ' + trim_text(cfg.i18n && cfg.i18n.loading ? cfg.i18n.loading : 'Loading') + '</div>'); |
| 639 |
} |
| 640 |
} |
| 641 |
function refresh_preview() { |
| 642 |
var data = collect_payload(); |
| 643 |
if (preview_ajax && preview_ajax.readyState !== 4) { |
| 644 |
preview_ajax.abort(); |
| 645 |
} |
| 646 |
data.action = cfg.preview_action; |
| 647 |
data.nonce = cfg.nonce; |
| 648 |
set_calendar_loading(true); |
| 649 |
preview_ajax = $.post(cfg.ajax_url, data).done(function (response) { |
| 650 |
if (response && response.success && response.data && response.data.html) { |
| 651 |
$('[data-wpbc-theme-preview="1"]').replaceWith(response.data.html); |
| 652 |
if (response.data.days_selection) { |
| 653 |
cfg.days_selection = response.data.days_selection; |
| 654 |
} |
| 655 |
apply_form_theme(); |
| 656 |
apply_form_appearance(); |
| 657 |
apply_calendar_skin(); |
| 658 |
apply_time_skin(); |
| 659 |
ensure_calendar_only_days_selection(); |
| 660 |
sync_time_picker_preview(); |
| 661 |
return; |
| 662 |
} |
| 663 |
show_message(response && response.data && response.data.message ? response.data.message : cfg.i18n && cfg.i18n.preview_failed ? cfg.i18n.preview_failed : 'Unable to refresh calendar preview.', 'error', 10000); |
| 664 |
}).fail(function (xhr, text_status) { |
| 665 |
if ('abort' === text_status) { |
| 666 |
return; |
| 667 |
} |
| 668 |
show_message(cfg.i18n && cfg.i18n.preview_failed ? cfg.i18n.preview_failed : 'Unable to refresh calendar preview.', 'error', 10000); |
| 669 |
}).always(function () { |
| 670 |
set_calendar_loading(false); |
| 671 |
}); |
| 672 |
} |
| 673 |
function schedule_preview_refresh() { |
| 674 |
clearTimeout(preview_timer); |
| 675 |
preview_timer = setTimeout(refresh_preview, 180); |
| 676 |
} |
| 677 |
function save_settings() { |
| 678 |
var $button = $('[data-wpbc-theme-save="1"]'); |
| 679 |
var original_text = $button.data('wpbc-original-text'); |
| 680 |
var data = collect_payload(); |
| 681 |
if (!original_text) { |
| 682 |
original_text = $button.html(); |
| 683 |
$button.data('wpbc-original-text', original_text); |
| 684 |
} |
| 685 |
data.action = cfg.action; |
| 686 |
data.nonce = cfg.nonce; |
| 687 |
$button.addClass('disabled').attr('aria-disabled', 'true'); |
| 688 |
$button.find('.in-button-text').html(' ' + trim_text(cfg.i18n && cfg.i18n.saving ? cfg.i18n.saving : 'Saving') + '...'); |
| 689 |
$.post(cfg.ajax_url, data).done(function (response) { |
| 690 |
if (response && response.success) { |
| 691 |
show_message(response.data && response.data.message ? response.data.message : cfg.i18n && cfg.i18n.saved ? cfg.i18n.saved : 'Saved', 'success', 3000); |
| 692 |
cfg.settings = response.data && response.data.settings ? response.data.settings : cfg.settings; |
| 693 |
return; |
| 694 |
} |
| 695 |
show_message(response && response.data && response.data.message ? response.data.message : cfg.i18n && cfg.i18n.save_failed ? cfg.i18n.save_failed : 'Unable to save appearance settings.', 'error', 10000); |
| 696 |
}).fail(function () { |
| 697 |
show_message(cfg.i18n && cfg.i18n.save_failed ? cfg.i18n.save_failed : 'Unable to save appearance settings.', 'error', 10000); |
| 698 |
}).always(function () { |
| 699 |
$button.removeClass('disabled').removeAttr('aria-disabled').html(original_text); |
| 700 |
}); |
| 701 |
} |
| 702 |
function bind_events() { |
| 703 |
$(document).on('click', '.wpbc_theme_rightbar_tabs [role="tab"]', function (event) { |
| 704 |
event.preventDefault(); |
| 705 |
switch_panel($(this)); |
| 706 |
}); |
| 707 |
$(document).on('click', '.wpbc_theme_premium_dismiss a', function (event) { |
| 708 |
event.stopPropagation(); |
| 709 |
}); |
| 710 |
$(document).on('click', '.wpbc_theme_rightbar_panels .wpbc_ui__collapsible_group > .group__header', function (event) { |
| 711 |
event.preventDefault(); |
| 712 |
toggle_group($(this)); |
| 713 |
}); |
| 714 |
$(document).on('click', '[data-wpbc-theme-save="1"]', function (event) { |
| 715 |
event.preventDefault(); |
| 716 |
if (!$(this).hasClass('disabled')) { |
| 717 |
save_settings(); |
| 718 |
} |
| 719 |
}); |
| 720 |
$(document).on('submit', '[data-wpbc-theme-settings-form="1"]', function () { |
| 721 |
return true; |
| 722 |
}); |
| 723 |
$(document).on('change', '[name="booking_form_theme"]', function () { |
| 724 |
apply_form_theme(); |
| 725 |
apply_related_skins_for_theme($(this).val() || ''); |
| 726 |
show_calendar_only_theme_notice(); |
| 727 |
}); |
| 728 |
$(document).on('change', '[name="booking_form_style"]', function () { |
| 729 |
sync_form_style_choice(); |
| 730 |
apply_form_theme(); |
| 731 |
apply_form_appearance(); |
| 732 |
apply_related_skins_for_theme($('#booking_form_theme').val() || ''); |
| 733 |
show_calendar_only_theme_notice(); |
| 734 |
schedule_preview_refresh(); |
| 735 |
}); |
| 736 |
$(document).on('input change', '[data-wpbc-theme-appearance-control]', function () { |
| 737 |
// Coloris emits continuous input events. Accent and appearance values are |
| 738 |
// CSS-only, so update the existing preview without rebuilding it by AJAX. |
| 739 |
apply_form_appearance(); |
| 740 |
}); |
| 741 |
$(document).on('change', '[data-wpbc-theme-accent-toggle="1"]', function () { |
| 742 |
$('[data-wpbc-theme-accent-dependent="1"]').toggle($(this).prop('checked')); |
| 743 |
apply_form_appearance(); |
| 744 |
}); |
| 745 |
$(document).on('change', '[data-wpbc-theme-calendar-skin="1"]', function () { |
| 746 |
apply_calendar_skin(); |
| 747 |
}); |
| 748 |
$(document).on('change', '[data-wpbc-theme-time-skin="1"]', function () { |
| 749 |
apply_time_skin(); |
| 750 |
}); |
| 751 |
$(document).on('change', '[name="booking_timeslot_picker"]', function () { |
| 752 |
sync_time_picker_preview(); |
| 753 |
schedule_preview_refresh(); |
| 754 |
}); |
| 755 |
$(document).on('change', '[data-wpbc-theme-preview-notice]', function () { |
| 756 |
maybe_show_preview_notice($(this)); |
| 757 |
}); |
| 758 |
$(document).on('change', '#wpbc_theme_resource_id, #wpbc_theme_months_count, #wpbc_theme_custom_form', function () { |
| 759 |
schedule_preview_refresh(); |
| 760 |
}); |
| 761 |
$(document).on('change', '#wpbc_theme_preview_mode', function () { |
| 762 |
refresh_preview_mode_controls(); |
| 763 |
schedule_preview_refresh(); |
| 764 |
}); |
| 765 |
} |
| 766 |
$(function () { |
| 767 |
if (!$('[data-wpbc-theme-page="1"]').length) { |
| 768 |
return; |
| 769 |
} |
| 770 |
bind_events(); |
| 771 |
if (w.Coloris) { |
| 772 |
w.Coloris({ |
| 773 |
el: '.wpbc_theme_coloris', |
| 774 |
alpha: false, |
| 775 |
format: 'hex', |
| 776 |
themeMode: 'auto' |
| 777 |
}); |
| 778 |
} |
| 779 |
refresh_preview_mode_controls(); |
| 780 |
apply_form_theme(); |
| 781 |
apply_form_appearance(); |
| 782 |
ensure_calendar_only_days_selection(); |
| 783 |
sync_time_picker_preview(); |
| 784 |
}); |
| 785 |
})(jQuery, window); |
| 786 |
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1zZXR0aW5ncy10aGVtZXMvX291dC9zZXR0aW5nc190aGVtZXNfcGFnZS5qcyIsIm5hbWVzIjpbIiQiLCJ3IiwiY2ZnIiwid3BiY19zZXR0aW5nc190aGVtZXNfcGFnZSIsImxvY2FsaXplZF9kZWZhdWx0X2Zvcm1fYWNjZW50X2NvbG9yIiwiU3RyaW5nIiwiZm9ybV9hY2NlbnRfZGVmYXVsdHMiLCJib29raW5nX2Zvcm1fYWNjZW50X2NvbG9yIiwidHJpbSIsImRlZmF1bHRfZm9ybV9hY2NlbnRfY29sb3IiLCJ0ZXN0IiwicHJldmlld19hamF4IiwicHJldmlld190aW1lciIsInByZXZpZXdfbm90aWNlX3RpbWVyIiwicHJldmlld19ub3RpY2VfbWVzc2FnZV90aW1lciIsInRyaW1fdGV4dCIsInZhbHVlIiwibWFrZV9hc3NldF91cmwiLCJwYXRoIiwicGx1Z2luX3VybCIsInJlcGxhY2UiLCJzaG93X21lc3NhZ2UiLCJtZXNzYWdlIiwidHlwZSIsImRlbGF5Iiwid3BiY19hZG1pbl9zaG93X21lc3NhZ2UiLCJwdWxzZV9lbGVtZW50IiwiJGVsZW1lbnQiLCJkdXJhdGlvbiIsImxlbmd0aCIsInJlbW92ZUNsYXNzIiwiZWFjaCIsIm9mZnNldFdpZHRoIiwiYWRkQ2xhc3MiLCJzZXRUaW1lb3V0IiwicHVsc2VfbGF0ZXN0X3dhcm5pbmdfbm90aWNlIiwiY2xlYXJUaW1lb3V0IiwibGFzdCIsInNob3dfaGlnaGxpZ2h0ZWRfbm90aWNlIiwiJGNvbnRyb2wiLCJzd2l0Y2hfcGFuZWwiLCIkdGFiIiwicGFuZWxfaWQiLCJhdHRyIiwiJHRhYnMiLCJjbG9zZXN0IiwiZmluZCIsIiRwYW5lbHMiLCJyZW1vdmVBdHRyIiwidG9nZ2xlX2dyb3VwIiwiJGJ1dHRvbiIsIiRncm91cCIsIiRmaWVsZHMiLCJpc19vcGVuIiwiaGFzQ2xhc3MiLCJ0b2dnbGVDbGFzcyIsInByb3AiLCJnZXRfZm9ybSIsImZpcnN0IiwiY29sbGVjdF9wYXlsb2FkIiwiJGZvcm0iLCJkYXRhIiwic3luY19mb3JtX3N0eWxlX2Nob2ljZSIsInNlcmlhbGl6ZUFycmF5IiwiaW5kZXgiLCJpdGVtIiwibmFtZSIsImluZGV4T2YiLCJib29raW5nX3RpbWVzbG90X3BpY2tlciIsImJvb2tpbmdfZm9ybV9hY2NlbnRfZW5hYmxlZCIsInJlc291cmNlX2lkIiwidmFsIiwibW9udGhzX2NvdW50IiwicHJldmlld19tb2RlIiwiY3VzdG9tX2Jvb2tpbmdfZm9ybSIsIm1hcF9mb3JtX3N0eWxlX2Nob2ljZSIsImNob2ljZSIsImN1cnJlbnRfdGhlbWUiLCJwYXJ0cyIsInByZXNldCIsInRoZW1lIiwic3BsaXQiLCJnZXRfZm9ybV9zdHlsZV9jaG9pY2VfZnJvbV92YWx1ZXMiLCJwcmVmaXgiLCIkY2hlY2tlZCIsIm1hcHBlZCIsInN5bmNfZm9ybV9zdHlsZV9jaG9pY2Vfc2VsZWN0aW9uIiwiJGNob2ljZXMiLCJmaWx0ZXIiLCJhcHBseV9mb3JtX3RoZW1lIiwiJHByZXZpZXciLCIkdGhlbWVfdGFyZ2V0cyIsImFkZCIsIiR0YXJnZXQiLCJjbGFzc2VzIiwiY2xhc3NOYW1lIiwiY2xhc3NfbmFtZSIsImdldF9mb3JtX2FwcGVhcmFuY2VfcHJlc2V0cyIsImJvcmRlcmVkIiwiYmFja2dyb3VuZCIsImJvcmRlckNvbG9yIiwiYm9yZGVyV2lkdGgiLCJyYWRpdXMiLCJwYWRkaW5nIiwic2hhZG93Iiwibm9uZSIsInNvZnQiLCJpc19kYXJrX2Zvcm1fdGhlbWUiLCJnZXRfZm9ybV9hcHBlYXJhbmNlX3ByZXNldF9mb3JfdGhlbWUiLCJwcmVzZXRzIiwic2FuaXRpemVfdGhlbWVfY29sb3IiLCJmYWxsYmFjayIsInYiLCJzYW5pdGl6ZV90aGVtZV9sZW5ndGgiLCJzYW5pdGl6ZV90aGVtZV9zcGFjaW5nIiwiaSIsImpvaW4iLCJtaXhfdGhlbWVfY29sb3JzIiwiY29sb3IiLCJ0YXJnZXQiLCJhbW91bnQiLCJzb3VyY2UiLCJkZXN0aW5hdGlvbiIsImNoYW5uZWxzIiwicHVzaCIsIk1hdGgiLCJyb3VuZCIsInBhcnNlSW50Iiwic3Vic3RyIiwibWFwIiwiY2hhbm5lbCIsInRvU3RyaW5nIiwic2xpY2UiLCJnZXRfdGhlbWVfY29sb3JfbHVtaW5hbmNlIiwiaGV4IiwicG93IiwiYXBwbHlfZm9ybV9hY2NlbnRfY3NzX3ZhcnMiLCJjc3NfdmFycyIsInByZXNlcnZlX2N1c3RvbV9idXR0b25fY29sb3JzIiwiZW5hYmxlZCIsImFjY2VudF9yYXciLCJhY2NlbnQiLCJsdW1pbmFuY2UiLCJob3ZlciIsImNvbnRyYXN0IiwiaG92ZXJfY29udHJhc3QiLCJhY2NlbnRfb3ZlcmxheSIsImZvckVhY2giLCJjc3NfdmFyX25hbWUiLCJleHRlbmQiLCJnZXRfZm9ybV9zdHlsZV9wcmVzZXRzIiwiZm9ybV9zdHlsZV9wcmVzZXRzIiwiZ2V0X2N1cnJlbnRfZm9ybV9zdHlsZSIsImdldF9jdXN0b21fZm9ybV9zdHlsZV9kZWZhdWx0cyIsImJvb2tpbmdfZm9ybV9jdXN0b21fYmFja2dyb3VuZF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfd2lkdGgiLCJib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9yYWRpdXMiLCJib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfdmVydGljYWwiLCJib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfaG9yaXpvbnRhbCIsImJvb2tpbmdfZm9ybV9jdXN0b21fdGV4dF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYmFja2dyb3VuZF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfdGV4dF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYm9yZGVyX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYmFja2dyb3VuZF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX3RleHRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9iYWNrZ3JvdW5kX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfdGV4dF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX3RleHRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYm9yZGVyX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfdGV4dF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfd2lkdGgiLCJib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfcmFkaXVzIiwiY3VzdG9tX2Zvcm1fc3R5bGVfZGVmYXVsdHMiLCJnZXRfY3VzdG9tX2Zvcm1fc3R5bGVfY3NzX3ZhcnMiLCJkZWZhdWx0cyIsInZhbHVlcyIsInNldHRpbmdzIiwiZ2V0X2Zvcm1fc3R5bGVfY3NzX3Zhcl9uYW1lcyIsImtleXMiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JtX3N0eWxlX2Nzc192YXJfbmFtZXMiLCJwcmVzZXRfa2V5IiwidmFyX25hbWUiLCJyZXNvbHZlX2Zvcm1fc3R5bGVfY3NzX3ZhcnMiLCJzdHlsZSIsImxpZ2h0X2JvcmRlcmVkIiwiY3VzdG9tIiwiYXBwbHlfZm9ybV9zdHlsZV90b19wcmV2aWV3IiwiY3NzX3Zhcl9uYW1lcyIsImlzX2N1c3RvbSIsIiR0YXJnZXRzIiwidG9nZ2xlIiwic3R5bGVfb2JqIiwicmVtb3ZlUHJvcGVydHkiLCJzZXRQcm9wZXJ0eSIsInJlc29sdmVfZm9ybV9hcHBlYXJhbmNlIiwiYXBwbHlfZm9ybV9hcHBlYXJhbmNlIiwiYXBwbHlfY2FsZW5kYXJfc2tpbiIsIiRzZWxlY3QiLCJza2luX3VybCIsIndwYmNfX2NhbGVuZGFyX19jaGFuZ2Vfc2tpbiIsImFwcGx5X3RpbWVfc2tpbiIsIndwYmNfX2Nzc19fY2hhbmdlX3NraW4iLCJzZWxlY3RfaWZfb3B0aW9uX2V4aXN0cyIsIiRvcHRpb24iLCJ0cmlnZ2VyIiwicGFyc2VfbnVtYmVyX2xpc3QiLCJwYXJzZWQiLCJpc05hTiIsInNldF9jYWxlbmRhcl9wYXJhbSIsImtleSIsIl93cGJjIiwiY2FsZW5kYXJfX3NldF9wYXJhbV92YWx1ZSIsImFwcGx5X2RheXNfc2VsZWN0aW9uX3RvX2NhbGVuZGFyIiwiZGF5c19zZWxlY3Rpb24iLCJzaG91bGRfcmVpbml0IiwiZHMiLCJmaXhlZF93ZWVrX2RheXMiLCJkeW5hbWljX3NwZWNpZmljIiwiZHluYW1pY193ZWVrX2RheXMiLCJmaXhlZF9fd2Vla19kYXlzX19zdGFydCIsImR5bmFtaWNfX2RheXNfc3BlY2lmaWMiLCJkeW5hbWljX193ZWVrX2RheXNfX3N0YXJ0IiwiZGF5c19zZWxlY3RfbW9kZSIsImZpeGVkX19kYXlzX251bSIsImR5bmFtaWNfX2RheXNfbWluIiwiZHluYW1pY19fZGF5c19tYXgiLCJ3cGJjX19jb25kaXRpb25zX19TQVZFX0lOSVRJQUxfX2RheXNfc2VsZWN0aW9uX3BhcmFtc19fYm0iLCJ3cGJjX2NhbF9fcmVfaW5pdCIsImVuc3VyZV9jYWxlbmRhcl9vbmx5X2RheXNfc2VsZWN0aW9uIiwiZXhwZWN0ZWQiLCJleHBlY3RlZF9tb2RlIiwiY3VycmVudF9tb2RlIiwiJGNhbGVuZGFyIiwiY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSIsImFwcGx5X3JlbGF0ZWRfc2tpbnNfZm9yX3RoZW1lIiwiY2FsZW5kYXJfc2tpbiIsInRpbWVfc2tpbiIsInB1bHNlX3ByZXZpZXdfbW9kZV9jb250cm9sIiwiZ2V0X3ByZXZpZXdfbm90aWNlX21lc3NhZ2UiLCJub3RpY2VfdHlwZSIsImkxOG4iLCJmb3JtX3ByZXZpZXdfb3B0aW9uX25vdGljZSIsIm1heWJlX3Nob3dfcHJldmlld19ub3RpY2UiLCIkc291cmNlIiwic2hvd19jYWxlbmRhcl9vbmx5X3RoZW1lX25vdGljZSIsImNhbGVuZGFyX29ubHlfdGhlbWVfbm90aWNlIiwic3luY190aW1lX3BpY2tlcl9wcmV2aWV3IiwiaXNfZW5hYmxlZCIsInRpbWVfc2VsZWN0b3JzIiwic2V0X290aGVyX3BhcmFtIiwid3BiY19ob29rX19pbml0X3RpbWVzZWxlY3RvciIsInJlbW92ZSIsInNob3ciLCJyZWZyZXNoX3ByZXZpZXdfbW9kZV9jb250cm9scyIsInNldF9jYWxlbmRhcl9sb2FkaW5nIiwiaXNfbG9hZGluZyIsIiRwYW5lbCIsImFwcGVuZCIsImxvYWRpbmciLCJyZWZyZXNoX3ByZXZpZXciLCJyZWFkeVN0YXRlIiwiYWJvcnQiLCJhY3Rpb24iLCJwcmV2aWV3X2FjdGlvbiIsIm5vbmNlIiwicG9zdCIsImFqYXhfdXJsIiwiZG9uZSIsInJlc3BvbnNlIiwic3VjY2VzcyIsImh0bWwiLCJyZXBsYWNlV2l0aCIsInByZXZpZXdfZmFpbGVkIiwiZmFpbCIsInhociIsInRleHRfc3RhdHVzIiwiYWx3YXlzIiwic2NoZWR1bGVfcHJldmlld19yZWZyZXNoIiwic2F2ZV9zZXR0aW5ncyIsIm9yaWdpbmFsX3RleHQiLCJzYXZpbmciLCJzYXZlZCIsInNhdmVfZmFpbGVkIiwiYmluZF9ldmVudHMiLCJkb2N1bWVudCIsIm9uIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsIkNvbG9yaXMiLCJlbCIsImFscGhhIiwiZm9ybWF0IiwidGhlbWVNb2RlIiwialF1ZXJ5Iiwid2luZG93Il0sInNvdXJjZXMiOlsiaW5jbHVkZXMvcGFnZS1zZXR0aW5ncy10aGVtZXMvX3NyYy9zZXR0aW5nc190aGVtZXNfcGFnZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFwcGVhcmFuY2UgLyBUaGVtZSBzZXR0aW5ncyBwYWdlIFVJLlxuICovXG4oIGZ1bmN0aW9uICggJCwgdyApIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBjZmcgPSB3LndwYmNfc2V0dGluZ3NfdGhlbWVzX3BhZ2UgfHwge307XG5cdHZhciBsb2NhbGl6ZWRfZGVmYXVsdF9mb3JtX2FjY2VudF9jb2xvciA9IFN0cmluZyggY2ZnLmZvcm1fYWNjZW50X2RlZmF1bHRzICYmIGNmZy5mb3JtX2FjY2VudF9kZWZhdWx0cy5ib29raW5nX2Zvcm1fYWNjZW50X2NvbG9yIHx8ICcnICkudHJpbSgpO1xuXG5cdC8qKiBAdHlwZSB7c3RyaW5nfSBEZWZhdWx0IGFjY2VudCBzdXBwbGllZCBieSB0aGUgUEhQIGNvbmZpZ3VyYXRpb24gY29uc3RhbnQuICovXG5cdHZhciBkZWZhdWx0X2Zvcm1fYWNjZW50X2NvbG9yID0gL14jKD86WzAtOWEtZl17M318WzAtOWEtZl17Nn0pJC9pLnRlc3QoIGxvY2FsaXplZF9kZWZhdWx0X2Zvcm1fYWNjZW50X2NvbG9yIClcblx0XHQ/IGxvY2FsaXplZF9kZWZhdWx0X2Zvcm1fYWNjZW50X2NvbG9yXG5cdFx0OiAnJztcblx0dmFyIHByZXZpZXdfYWpheCA9IG51bGw7XG5cdHZhciBwcmV2aWV3X3RpbWVyID0gMDtcblx0dmFyIHByZXZpZXdfbm90aWNlX3RpbWVyID0gMDtcblx0dmFyIHByZXZpZXdfbm90aWNlX21lc3NhZ2VfdGltZXIgPSAwO1xuXG5cdGZ1bmN0aW9uIHRyaW1fdGV4dCggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIFN0cmluZyggdmFsdWUgfHwgJycgKS50cmltKCk7XG5cdH1cblxuXHRmdW5jdGlvbiBtYWtlX2Fzc2V0X3VybCggcGF0aCApIHtcblx0XHRwYXRoID0gU3RyaW5nKCBwYXRoIHx8ICcnICk7XG5cdFx0aWYgKCAvXmh0dHBzPzpcXC9cXC8vaS50ZXN0KCBwYXRoICkgfHwgL15cXC9cXC8vLnRlc3QoIHBhdGggKSApIHtcblx0XHRcdHJldHVybiBwYXRoO1xuXHRcdH1cblx0XHRyZXR1cm4gU3RyaW5nKCBjZmcucGx1Z2luX3VybCB8fCAnJyApLnJlcGxhY2UoIC9cXC8kLywgJycgKSArIHBhdGg7XG5cdH1cblxuXHRmdW5jdGlvbiBzaG93X21lc3NhZ2UoIG1lc3NhZ2UsIHR5cGUsIGRlbGF5ICkge1xuXHRcdGlmICggdHlwZW9mIHcud3BiY19hZG1pbl9zaG93X21lc3NhZ2UgPT09ICdmdW5jdGlvbicgKSB7XG5cdFx0XHR3LndwYmNfYWRtaW5fc2hvd19tZXNzYWdlKCBtZXNzYWdlLCB0eXBlIHx8ICdpbmZvJywgZGVsYXkgfHwgNDAwMCwgZmFsc2UgKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBwdWxzZV9lbGVtZW50KCAkZWxlbWVudCwgZHVyYXRpb24gKSB7XG5cdFx0aWYgKCAhICRlbGVtZW50IHx8ICEgJGVsZW1lbnQubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdCRlbGVtZW50XG5cdFx0XHQucmVtb3ZlQ2xhc3MoICd3cGJjX3RoZW1lX2F0dGVudGlvbl9wdWxzZScgKVxuXHRcdFx0LmVhY2goIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dm9pZCB0aGlzLm9mZnNldFdpZHRoO1xuXHRcdFx0fSApXG5cdFx0XHQuYWRkQ2xhc3MoICd3cGJjX3RoZW1lX2F0dGVudGlvbl9wdWxzZScgKTtcblxuXHRcdHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHtcblx0XHRcdCRlbGVtZW50LnJlbW92ZUNsYXNzKCAnd3BiY190aGVtZV9hdHRlbnRpb25fcHVsc2UnICk7XG5cdFx0fSwgZHVyYXRpb24gfHwgMjEwMCApO1xuXHR9XG5cblx0ZnVuY3Rpb24gcHVsc2VfbGF0ZXN0X3dhcm5pbmdfbm90aWNlKCkge1xuXHRcdGNsZWFyVGltZW91dCggcHJldmlld19ub3RpY2VfbWVzc2FnZV90aW1lciApO1xuXHRcdHByZXZpZXdfbm90aWNlX21lc3NhZ2VfdGltZXIgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRwdWxzZV9lbGVtZW50KCAkKCAnI2FqYXhfd29ya2luZyAud3BiY19pbm5lcl9tZXNzYWdlLm5vdGljZS13YXJuaW5nJyApLmxhc3QoKSApO1xuXHRcdH0sIDUwICk7XG5cdH1cblxuXHRmdW5jdGlvbiBzaG93X2hpZ2hsaWdodGVkX25vdGljZSggbWVzc2FnZSwgdHlwZSwgZGVsYXksICRjb250cm9sICkge1xuXHRcdGlmICggJGNvbnRyb2wgJiYgJGNvbnRyb2wubGVuZ3RoICkge1xuXHRcdFx0cHVsc2VfZWxlbWVudCggJGNvbnRyb2wgKTtcblx0XHR9XG5cblx0XHRzaG93X21lc3NhZ2UoIG1lc3NhZ2UsIHR5cGUgfHwgJ3dhcm5pbmcnLCBkZWxheSB8fCA5MDAwICk7XG5cdFx0cHVsc2VfbGF0ZXN0X3dhcm5pbmdfbm90aWNlKCk7XG5cdH1cblxuXHRmdW5jdGlvbiBzd2l0Y2hfcGFuZWwoICR0YWIgKSB7XG5cdFx0dmFyIHBhbmVsX2lkID0gJHRhYi5hdHRyKCAnYXJpYS1jb250cm9scycgKTtcblx0XHR2YXIgJHRhYnMgPSAkdGFiLmNsb3Nlc3QoICcud3BiY190aGVtZV9yaWdodGJhcl90YWJzJyApLmZpbmQoICdbcm9sZT1cInRhYlwiXScgKTtcblx0XHR2YXIgJHBhbmVscyA9ICQoICcud3BiY190aGVtZV9yaWdodGJhcl9wYW5lbHMgW3JvbGU9XCJ0YWJwYW5lbFwiXScgKTtcblxuXHRcdCR0YWJzLmF0dHIoICdhcmlhLXNlbGVjdGVkJywgJ2ZhbHNlJyApO1xuXHRcdCR0YWIuYXR0ciggJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScgKTtcblxuXHRcdCRwYW5lbHMuYXR0ciggJ2hpZGRlbicsICdoaWRkZW4nICkuYXR0ciggJ2FyaWEtaGlkZGVuJywgJ3RydWUnICk7XG5cdFx0JCggJyMnICsgcGFuZWxfaWQgKS5yZW1vdmVBdHRyKCAnaGlkZGVuJyApLmF0dHIoICdhcmlhLWhpZGRlbicsICdmYWxzZScgKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHRvZ2dsZV9ncm91cCggJGJ1dHRvbiApIHtcblx0XHR2YXIgJGdyb3VwID0gJGJ1dHRvbi5jbG9zZXN0KCAnLndwYmNfdWlfX2NvbGxhcHNpYmxlX2dyb3VwJyApO1xuXHRcdHZhciAkZmllbGRzID0gJGdyb3VwLmZpbmQoICc+IC5ncm91cF9fZmllbGRzJyApO1xuXHRcdHZhciBpc19vcGVuID0gJGdyb3VwLmhhc0NsYXNzKCAnaXMtb3BlbicgKTtcblxuXHRcdCRncm91cC50b2dnbGVDbGFzcyggJ2lzLW9wZW4nLCAhIGlzX29wZW4gKTtcblx0XHQkYnV0dG9uLmF0dHIoICdhcmlhLWV4cGFuZGVkJywgaXNfb3BlbiA/ICdmYWxzZScgOiAndHJ1ZScgKTtcblx0XHQkZmllbGRzLnByb3AoICdoaWRkZW4nLCBpc19vcGVuICkuYXR0ciggJ2FyaWEtaGlkZGVuJywgaXNfb3BlbiA/ICd0cnVlJyA6ICdmYWxzZScgKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldF9mb3JtKCkge1xuXHRcdHJldHVybiAkKCAnW2RhdGEtd3BiYy10aGVtZS1zZXR0aW5ncy1mb3JtPVwiMVwiXScgKS5maXJzdCgpO1xuXHR9XG5cblx0ZnVuY3Rpb24gY29sbGVjdF9wYXlsb2FkKCkge1xuXHRcdHZhciAkZm9ybSA9IGdldF9mb3JtKCk7XG5cdFx0dmFyIGRhdGEgPSB7fTtcblxuXHRcdHN5bmNfZm9ybV9zdHlsZV9jaG9pY2UoKTtcblxuXHRcdCQuZWFjaCggJGZvcm0uc2VyaWFsaXplQXJyYXkoKSwgZnVuY3Rpb24gKCBpbmRleCwgaXRlbSApIHtcblx0XHRcdGlmICggMCA9PT0gU3RyaW5nKCBpdGVtLm5hbWUgfHwgJycgKS5pbmRleE9mKCAnd3BiY19zZXR1cCcgKSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZGF0YVsgaXRlbS5uYW1lIF0gPSBpdGVtLnZhbHVlO1xuXHRcdH0gKTtcblxuXHRcdGRhdGEuYm9va2luZ190aW1lc2xvdF9waWNrZXIgPSAkZm9ybS5maW5kKCAnW25hbWU9XCJib29raW5nX3RpbWVzbG90X3BpY2tlclwiXScgKS5wcm9wKCAnY2hlY2tlZCcgKSA/ICdPbicgOiAnT2ZmJztcblx0XHRkYXRhLmJvb2tpbmdfZm9ybV9hY2NlbnRfZW5hYmxlZCA9ICRmb3JtLmZpbmQoICdbbmFtZT1cImJvb2tpbmdfZm9ybV9hY2NlbnRfZW5hYmxlZFwiXScgKS5wcm9wKCAnY2hlY2tlZCcgKSA/ICdPbicgOiAnT2ZmJztcblx0XHRkYXRhLnJlc291cmNlX2lkID0gJCggJyN3cGJjX3RoZW1lX3Jlc291cmNlX2lkJyApLnZhbCgpIHx8ICcnO1xuXHRcdGRhdGEubW9udGhzX2NvdW50ID0gJCggJyN3cGJjX3RoZW1lX21vbnRoc19jb3VudCcgKS52YWwoKSB8fCAnJztcblx0XHRkYXRhLnByZXZpZXdfbW9kZSA9ICQoICcjd3BiY190aGVtZV9wcmV2aWV3X21vZGUnICkudmFsKCkgfHwgJ2Zvcm0nO1xuXHRcdGRhdGEuY3VzdG9tX2Jvb2tpbmdfZm9ybSA9ICQoICcjd3BiY190aGVtZV9jdXN0b21fZm9ybScgKS52YWwoKSB8fCAnc3RhbmRhcmQnO1xuXG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxuXHRmdW5jdGlvbiBtYXBfZm9ybV9zdHlsZV9jaG9pY2UoIHZhbHVlICkge1xuXHRcdHZhciBjaG9pY2UgPSBTdHJpbmcoIHZhbHVlIHx8ICdsaWdodF9ib3JkZXJlZCcgKTtcblx0XHR2YXIgY3VycmVudF90aGVtZSA9ICQoICcjYm9va2luZ19mb3JtX3RoZW1lJyApLnZhbCgpIHx8ICcnO1xuXHRcdHZhciBwYXJ0cztcblx0XHR2YXIgcHJlc2V0O1xuXG5cdFx0aWYgKCAnY3VzdG9tJyA9PT0gY2hvaWNlICkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dGhlbWUgOiBjdXJyZW50X3RoZW1lLFxuXHRcdFx0XHRwcmVzZXQ6ICdjdXN0b20nXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHBhcnRzID0gY2hvaWNlLnNwbGl0KCAnXycgKTtcblx0XHRwcmVzZXQgPSBwYXJ0c1sxXSB8fCAnYm9yZGVyZWQnO1xuXHRcdGlmICggWyAnYm9yZGVyZWQnLCAnbm9uZScsICdzb2Z0JyBdLmluZGV4T2YoIHByZXNldCApID09PSAtMSApIHtcblx0XHRcdHByZXNldCA9ICdib3JkZXJlZCc7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRoZW1lIDogKCAnZGFyaycgPT09IHBhcnRzWzBdICkgPyAnd3BiY190aGVtZV9kYXJrXzEnIDogJycsXG5cdFx0XHRwcmVzZXQ6IHByZXNldFxuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRfZm9ybV9zdHlsZV9jaG9pY2VfZnJvbV92YWx1ZXMoKSB7XG5cdFx0dmFyIHRoZW1lID0gJCggJyNib29raW5nX2Zvcm1fdGhlbWUnICkudmFsKCkgfHwgJyc7XG5cdFx0dmFyIHByZXNldCA9ICQoICcjYm9va2luZ19mb3JtX2FwcGVhcmFuY2VfcHJlc2V0JyApLnZhbCgpIHx8ICdib3JkZXJlZCc7XG5cdFx0dmFyIHByZWZpeCA9IHRoZW1lID8gJ2RhcmsnIDogJ2xpZ2h0JztcblxuXHRcdGlmICggJ2N1c3RvbScgPT09IHByZXNldCApIHtcblx0XHRcdHJldHVybiAnY3VzdG9tJztcblx0XHR9XG5cdFx0aWYgKCBbICdib3JkZXJlZCcsICdub25lJywgJ3NvZnQnIF0uaW5kZXhPZiggcHJlc2V0ICkgPT09IC0xICkge1xuXHRcdFx0cHJlc2V0ID0gJ2JvcmRlcmVkJztcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJlZml4ICsgJ18nICsgcHJlc2V0O1xuXHR9XG5cblx0ZnVuY3Rpb24gc3luY19mb3JtX3N0eWxlX2Nob2ljZSgpIHtcblx0XHR2YXIgJGNoZWNrZWQgPSBnZXRfZm9ybSgpLmZpbmQoICdbbmFtZT1cImJvb2tpbmdfZm9ybV9zdHlsZVwiXTpjaGVja2VkJyApO1xuXHRcdHZhciBtYXBwZWQ7XG5cblx0XHRpZiAoICEgJGNoZWNrZWQubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdG1hcHBlZCA9IG1hcF9mb3JtX3N0eWxlX2Nob2ljZSggJGNoZWNrZWQudmFsKCkgKTtcblx0XHQkKCAnI2Jvb2tpbmdfZm9ybV90aGVtZScgKS52YWwoIG1hcHBlZC50aGVtZSApO1xuXHRcdCQoICcjYm9va2luZ19mb3JtX2FwcGVhcmFuY2VfcHJlc2V0JyApLnZhbCggbWFwcGVkLnByZXNldCApO1xuXHR9XG5cblx0ZnVuY3Rpb24gc3luY19mb3JtX3N0eWxlX2Nob2ljZV9zZWxlY3Rpb24oKSB7XG5cdFx0dmFyIGNob2ljZSA9IGdldF9mb3JtX3N0eWxlX2Nob2ljZV9mcm9tX3ZhbHVlcygpO1xuXHRcdHZhciAkY2hvaWNlcyA9IGdldF9mb3JtKCkuZmluZCggJ1tuYW1lPVwiYm9va2luZ19mb3JtX3N0eWxlXCJdJyApO1xuXG5cdFx0JGNob2ljZXMucHJvcCggJ2NoZWNrZWQnLCBmYWxzZSApO1xuXHRcdCRjaG9pY2VzLmZpbHRlciggJ1t2YWx1ZT1cIicgKyBjaG9pY2UgKyAnXCJdJyApLnByb3AoICdjaGVja2VkJywgdHJ1ZSApO1xuXG5cdFx0JCggJy53cGJjX3RoZW1lX2Nob2ljZScgKS5yZW1vdmVDbGFzcyggJ2lzLXNlbGVjdGVkJyApO1xuXHRcdCRjaG9pY2VzLmZpbHRlciggJzpjaGVja2VkJyApLmNsb3Nlc3QoICcud3BiY190aGVtZV9jaG9pY2UnICkuYWRkQ2xhc3MoICdpcy1zZWxlY3RlZCcgKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGx5X2Zvcm1fdGhlbWUoKSB7XG5cdFx0dmFyIHRoZW1lID0gJCggJyNib29raW5nX2Zvcm1fdGhlbWUnICkudmFsKCkgfHwgJyc7XG5cdFx0dmFyICRwcmV2aWV3ID0gJCggJ1tkYXRhLXdwYmMtdGhlbWUtcHJldmlldz1cIjFcIl0nICk7XG5cdFx0dmFyICR0aGVtZV90YXJnZXRzID0gJHByZXZpZXcuYWRkKCAkcHJldmlldy5maW5kKCAnLndwYmNfY29udGFpbmVyLndwYmNfZm9ybSwgLndwYmNfY29udGFpbmVyX2Jvb2tpbmdfZm9ybScgKSApO1xuXG5cdFx0JHRoZW1lX3RhcmdldHMuZWFjaCggZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyICR0YXJnZXQgPSAkKCB0aGlzICk7XG5cdFx0XHR2YXIgY2xhc3NlcyA9IFN0cmluZyggdGhpcy5jbGFzc05hbWUgfHwgJycgKS5zcGxpdCggL1xccysvICk7XG5cblx0XHRcdCQuZWFjaCggY2xhc3NlcywgZnVuY3Rpb24gKCBpbmRleCwgY2xhc3NfbmFtZSApIHtcblx0XHRcdFx0aWYgKCAvXndwYmNfdGhlbWVfLy50ZXN0KCBjbGFzc19uYW1lICkgJiYgISAvXndwYmNfdGhlbWVfcHJldmlldy8udGVzdCggY2xhc3NfbmFtZSApICkge1xuXHRcdFx0XHRcdCR0YXJnZXQucmVtb3ZlQ2xhc3MoIGNsYXNzX25hbWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0XHRpZiAoIHRoZW1lICkge1xuXHRcdFx0JHRoZW1lX3RhcmdldHMuYWRkQ2xhc3MoIHRoZW1lICk7XG5cdFx0fVxuXG5cdFx0c3luY19mb3JtX3N0eWxlX2Nob2ljZV9zZWxlY3Rpb24oKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldF9mb3JtX2FwcGVhcmFuY2VfcHJlc2V0cygpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Ym9yZGVyZWQ6IHtcblx0XHRcdFx0YmFja2dyb3VuZCA6ICcjZmZmZmZmJyxcblx0XHRcdFx0Ym9yZGVyQ29sb3I6ICcjY2NjY2NjJyxcblx0XHRcdFx0Ym9yZGVyV2lkdGg6ICcxcHgnLFxuXHRcdFx0XHRyYWRpdXMgICAgIDogJzJweCcsXG5cdFx0XHRcdHBhZGRpbmcgICAgOiAnMTBweCAzMHB4Jyxcblx0XHRcdFx0c2hhZG93ICAgICA6ICdyZ2JhKDAsIDAsIDAsIDAuMDUpIDBweCAycHggNnB4IDBweCdcblx0XHRcdH0sXG5cdFx0XHRub25lICAgIDoge1xuXHRcdFx0XHRiYWNrZ3JvdW5kIDogJ3RyYW5zcGFyZW50Jyxcblx0XHRcdFx0Ym9yZGVyQ29sb3I6ICd0cmFuc3BhcmVudCcsXG5cdFx0XHRcdGJvcmRlcldpZHRoOiAnMHB4Jyxcblx0XHRcdFx0cmFkaXVzICAgICA6ICcwcHgnLFxuXHRcdFx0XHRwYWRkaW5nICAgIDogJzBweCcsXG5cdFx0XHRcdHNoYWRvdyAgICAgOiAnbm9uZSdcblx0XHRcdH0sXG5cdFx0XHRzb2Z0ICAgIDoge1xuXHRcdFx0XHRiYWNrZ3JvdW5kIDogJyNmOWY5ZmEnLFxuXHRcdFx0XHRib3JkZXJDb2xvcjogJyNmZmYnLFxuXHRcdFx0XHRib3JkZXJXaWR0aDogJzNweCcsXG5cdFx0XHRcdHJhZGl1cyAgICAgOiAnOHB4Jyxcblx0XHRcdFx0cGFkZGluZyAgICA6ICcyMHB4Jyxcblx0XHRcdFx0c2hhZG93ICAgICA6ICdyZ2JhKDE1LCAyMywgNDIsIDAuMDYpIDBweCA0cHggMTZweCAwcHgnXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIGlzX2RhcmtfZm9ybV90aGVtZSgpIHtcblx0XHRyZXR1cm4gJ3dwYmNfdGhlbWVfZGFya18xJyA9PT0gU3RyaW5nKCAkKCAnI2Jvb2tpbmdfZm9ybV90aGVtZScgKS52YWwoKSB8fCAnJyApO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0X2Zvcm1fYXBwZWFyYW5jZV9wcmVzZXRfZm9yX3RoZW1lKCBwcmVzZXQgKSB7XG5cdFx0dmFyIHByZXNldHMgPSBnZXRfZm9ybV9hcHBlYXJhbmNlX3ByZXNldHMoKTtcblxuXHRcdGlmICggISBpc19kYXJrX2Zvcm1fdGhlbWUoKSApIHtcblx0XHRcdHJldHVybiBwcmVzZXRzW3ByZXNldF0gfHwgcHJlc2V0cy5ib3JkZXJlZDtcblx0XHR9XG5cblx0XHRpZiAoICdzb2Z0JyA9PT0gcHJlc2V0ICkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0YmFja2dyb3VuZCA6ICcjMWYyOTM3Jyxcblx0XHRcdFx0Ym9yZGVyQ29sb3I6ICcjMzM0MTU1Jyxcblx0XHRcdFx0Ym9yZGVyV2lkdGg6ICczcHgnLFxuXHRcdFx0XHRyYWRpdXMgICAgIDogJzhweCcsXG5cdFx0XHRcdHBhZGRpbmcgICAgOiAnMjBweCcsXG5cdFx0XHRcdHNoYWRvdyAgICAgOiAncmdiYSgwLCAwLCAwLCAwLjI0KSAwcHggNHB4IDE2cHggMHB4J1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJlc2V0c1twcmVzZXRdIHx8IHByZXNldHMuYm9yZGVyZWQ7XG5cdH1cblxuXHRmdW5jdGlvbiBzYW5pdGl6ZV90aGVtZV9jb2xvciggdmFsdWUsIGZhbGxiYWNrICkge1xuXHRcdHZhciB2ID0gU3RyaW5nKCB2YWx1ZSB8fCAnJyApLnRyaW0oKTtcblx0XHRyZXR1cm4gL14jKD86WzAtOWEtZl17M318WzAtOWEtZl17Nn0pJC9pLnRlc3QoIHYgKSB8fCAndHJhbnNwYXJlbnQnID09PSB2ID8gdiA6IGZhbGxiYWNrO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2FuaXRpemVfdGhlbWVfbGVuZ3RoKCB2YWx1ZSwgZmFsbGJhY2sgKSB7XG5cdFx0dmFyIHYgPSBTdHJpbmcoIHZhbHVlIHx8ICcnICkudHJpbSgpO1xuXHRcdHJldHVybiAvXlxcZCsoPzpcXC5cXGQrKT8oPzpweHxyZW18ZW18JSkkL2kudGVzdCggdiApID8gdiA6IGZhbGxiYWNrO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2FuaXRpemVfdGhlbWVfc3BhY2luZyggdmFsdWUsIGZhbGxiYWNrICkge1xuXHRcdHZhciB2ID0gU3RyaW5nKCB2YWx1ZSB8fCAnJyApLnRyaW0oKS5yZXBsYWNlKCAvXFxzKy9nLCAnICcgKTtcblx0XHR2YXIgcGFydHMgPSB2ID8gdi5zcGxpdCggJyAnICkgOiBbXTtcblx0XHR2YXIgaTtcblxuXHRcdGlmICggcGFydHMubGVuZ3RoIDwgMSB8fCBwYXJ0cy5sZW5ndGggPiA0ICkge1xuXHRcdFx0cmV0dXJuIGZhbGxiYWNrO1xuXHRcdH1cblx0XHRmb3IgKCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0aWYgKCAhIC9eXFxkKyg/OlxcLlxcZCspPyg/OnB4fHJlbXxlbXwlKSQvaS50ZXN0KCBwYXJ0c1tpXSApICkge1xuXHRcdFx0XHRyZXR1cm4gZmFsbGJhY2s7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBwYXJ0cy5qb2luKCAnICcgKTtcblx0fVxuXG5cdGZ1bmN0aW9uIG1peF90aGVtZV9jb2xvcnMoIGNvbG9yLCB0YXJnZXQsIGFtb3VudCApIHtcblx0XHR2YXIgc291cmNlID0gc2FuaXRpemVfdGhlbWVfY29sb3IoIGNvbG9yLCBkZWZhdWx0X2Zvcm1fYWNjZW50X2NvbG9yICkucmVwbGFjZSggJyMnLCAnJyApO1xuXHRcdHZhciBkZXN0aW5hdGlvbiA9IHNhbml0aXplX3RoZW1lX2NvbG9yKCB0YXJnZXQsICcjMDAwMDAwJyApLnJlcGxhY2UoICcjJywgJycgKTtcblx0XHR2YXIgY2hhbm5lbHMgPSBbXTtcblx0XHR2YXIgaW5kZXg7XG5cblx0XHRpZiAoIDMgPT09IHNvdXJjZS5sZW5ndGggKSB7XG5cdFx0XHRzb3VyY2UgPSBzb3VyY2UucmVwbGFjZSggLy4vZywgZnVuY3Rpb24gKCB2YWx1ZSApIHsgcmV0dXJuIHZhbHVlICsgdmFsdWU7IH0gKTtcblx0XHR9XG5cdFx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IDM7IGluZGV4KysgKSB7XG5cdFx0XHRjaGFubmVscy5wdXNoKCBNYXRoLnJvdW5kKCBwYXJzZUludCggc291cmNlLnN1YnN0ciggaW5kZXggKiAyLCAyICksIDE2ICkgKyAoICggcGFyc2VJbnQoIGRlc3RpbmF0aW9uLnN1YnN0ciggaW5kZXggKiAyLCAyICksIDE2ICkgLSBwYXJzZUludCggc291cmNlLnN1YnN0ciggaW5kZXggKiAyLCAyICksIDE2ICkgKSAqIGFtb3VudCApICkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gJyMnICsgY2hhbm5lbHMubWFwKCBmdW5jdGlvbiAoIGNoYW5uZWwgKSB7IHJldHVybiAoICcwJyArIGNoYW5uZWwudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLTIgKTsgfSApLmpvaW4oICcnICk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRfdGhlbWVfY29sb3JfbHVtaW5hbmNlKCBjb2xvciApIHtcblx0XHR2YXIgaGV4ID0gc2FuaXRpemVfdGhlbWVfY29sb3IoIGNvbG9yLCBkZWZhdWx0X2Zvcm1fYWNjZW50X2NvbG9yICkucmVwbGFjZSggJyMnLCAnJyApO1xuXHRcdHZhciBjaGFubmVscztcblx0XHRpZiAoIDMgPT09IGhleC5sZW5ndGggKSB7XG5cdFx0XHRoZXggPSBoZXgucmVwbGFjZSggLy4vZywgZnVuY3Rpb24gKCB2YWx1ZSApIHsgcmV0dXJuIHZhbHVlICsgdmFsdWU7IH0gKTtcblx0XHR9XG5cdFx0Y2hhbm5lbHMgPSBbIDAsIDEsIDIgXS5tYXAoIGZ1bmN0aW9uICggaW5kZXggKSB7XG5cdFx0XHR2YXIgY2hhbm5lbCA9IHBhcnNlSW50KCBoZXguc3Vic3RyKCBpbmRleCAqIDIsIDIgKSwgMTYgKSAvIDI1NTtcblx0XHRcdHJldHVybiBjaGFubmVsIDw9IDAuMDM5MjggPyBjaGFubmVsIC8gMTIuOTIgOiBNYXRoLnBvdyggKCBjaGFubmVsICsgMC4wNTUgKSAvIDEuMDU1LCAyLjQgKTtcblx0XHR9ICk7XG5cdFx0cmV0dXJuICggMC4yMTI2ICogY2hhbm5lbHNbMF0gKSArICggMC43MTUyICogY2hhbm5lbHNbMV0gKSArICggMC4wNzIyICogY2hhbm5lbHNbMl0gKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBseSB0aGUgYWNjZW50IHRvIHByZXZpZXcgdmFyaWFibGVzIHdoaWxlIHJlc3BlY3RpbmcgQ3VzdG9tIGJ1dHRvbiBjb250cm9scy5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9ICBjc3NfdmFycyAgICAgICAgICAgICAgICAgICAgICBSZXNvbHZlZCBwcmV2aWV3IHZhcmlhYmxlcy5cblx0ICogQHBhcmFtIHtib29sZWFufSBwcmVzZXJ2ZV9jdXN0b21fYnV0dG9uX2NvbG9ycyBXaGV0aGVyIEN1c3RvbSBidXR0b24gdmFyaWFibGVzIHJlbWFpbiBhdXRob3JpdGF0aXZlLlxuXHQgKiBAcmV0dXJuIHtPYmplY3R9IFByZXZpZXcgdmFyaWFibGVzIHdpdGggdGhlIG9wdGlvbmFsIGFjY2VudCBvdmVybGF5LlxuXHQgKi9cblx0ZnVuY3Rpb24gYXBwbHlfZm9ybV9hY2NlbnRfY3NzX3ZhcnMoIGNzc192YXJzLCBwcmVzZXJ2ZV9jdXN0b21fYnV0dG9uX2NvbG9ycyApIHtcblx0XHR2YXIgZW5hYmxlZCA9IGdldF9mb3JtKCkuZmluZCggJ1tuYW1lPVwiYm9va2luZ19mb3JtX2FjY2VudF9lbmFibGVkXCJdJyApLnByb3AoICdjaGVja2VkJyApO1xuXHRcdHZhciBhY2NlbnRfcmF3ID0gU3RyaW5nKCBnZXRfZm9ybSgpLmZpbmQoICdbbmFtZT1cImJvb2tpbmdfZm9ybV9hY2NlbnRfY29sb3JcIl0nICkudmFsKCkgfHwgJycgKS50cmltKCk7XG5cdFx0dmFyIGFjY2VudCA9IC9eIyg/OlswLTlhLWZdezN9fFswLTlhLWZdezZ9KSQvaS50ZXN0KCBhY2NlbnRfcmF3ICkgPyBhY2NlbnRfcmF3IDogZGVmYXVsdF9mb3JtX2FjY2VudF9jb2xvcjtcblx0XHR2YXIgbHVtaW5hbmNlO1xuXHRcdHZhciBob3Zlcjtcblx0XHR2YXIgY29udHJhc3Q7XG5cdFx0dmFyIGhvdmVyX2NvbnRyYXN0O1xuXG5cdFx0aWYgKCAhIGVuYWJsZWQgKSB7XG5cdFx0XHRyZXR1cm4gY3NzX3ZhcnM7XG5cdFx0fVxuXHRcdGlmICggISAvXiMoPzpbMC05YS1mXXszfXxbMC05YS1mXXs2fSkkL2kudGVzdCggYWNjZW50ICkgKSB7XG5cdFx0XHRyZXR1cm4gY3NzX3ZhcnM7XG5cdFx0fVxuXHRcdGx1bWluYW5jZSA9IGdldF90aGVtZV9jb2xvcl9sdW1pbmFuY2UoIGFjY2VudCApO1xuXHRcdGNvbnRyYXN0ID0gbHVtaW5hbmNlID4gMC4xOCA/ICcjMDAwMDAwJyA6ICcjZmZmZmZmJztcblx0XHRob3ZlciA9IG1peF90aGVtZV9jb2xvcnMoIGFjY2VudCwgJyNmZmZmZmYnID09PSBjb250cmFzdCA/ICcjMDAwMDAwJyA6ICcjZmZmZmZmJywgMC4xMCApO1xuXHRcdGhvdmVyX2NvbnRyYXN0ID0gY29udHJhc3Q7XG5cblx0XHR2YXIgYWNjZW50X292ZXJsYXkgPSB7XG5cdFx0XHQnLS13cGJjX2Zvcm0tYWNjZW50LWNvbG9yJzogYWNjZW50LFxuXHRcdFx0Jy0td3BiY19mb3JtLWFjY2VudC1ob3Zlci1jb2xvcic6IGhvdmVyLFxuXHRcdFx0Jy0td3BiY19mb3JtLWFjY2VudC1jb250cmFzdC1jb2xvcic6IGNvbnRyYXN0LFxuXHRcdFx0Jy0td3BiY19mb3JtLWZpZWxkLWZvY3VzLWJvcmRlci1jb2xvcic6IGFjY2VudCxcblx0XHRcdCctLXdwYmNfZm9ybS1maWVsZC1mb2N1cy1zaGFkb3ctY29sb3InOiBhY2NlbnQsXG5cdFx0XHQnLS13cGJjX2Zvcm0tY2hvaWNlLWNoZWNrZWQtYm9yZGVyLWNvbG9yJzogYWNjZW50LFxuXHRcdFx0Jy0td3BiY19mb3JtLWNob2ljZS1jaGVja2VkLWNvbG9yJzogYWNjZW50LFxuXHRcdFx0Jy0td3BiY19mb3JtLWNob2ljZS1mb2N1cy1jb2xvcic6IGFjY2VudCxcblx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tYmFja2dyb3VuZC1jb2xvcic6IGFjY2VudCxcblx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tYmFja2dyb3VuZC1jb2xvci1hbHQnOiBhY2NlbnQsXG5cdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWJvcmRlci1jb2xvcic6IGFjY2VudCxcblx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tdGV4dC1jb2xvcic6IGNvbnRyYXN0LFxuXHRcdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi10ZXh0LWNvbG9yLWFsdCc6IGNvbnRyYXN0LFxuXHRcdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yJzogaG92ZXIsXG5cdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWhvdmVyLWJvcmRlci1jb2xvcic6IGhvdmVyLFxuXHRcdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1ob3Zlci10ZXh0LWNvbG9yJzogaG92ZXJfY29udHJhc3QsXG5cdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWxpZ2h0LWhvdmVyLWJvcmRlci1jb2xvcic6IGFjY2VudCxcblx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tcHJpbWFyeS1ob3Zlci1ib3JkZXItY29sb3InOiBob3Zlcixcblx0XHRcdCctLXdwYmNfZm9ybS1wYWdlLWJyZWFrLWNvbG9yJzogYWNjZW50XG5cdFx0fTtcblxuXHRcdGlmICggcHJlc2VydmVfY3VzdG9tX2J1dHRvbl9jb2xvcnMgKSB7XG5cdFx0XHRbXG5cdFx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tYmFja2dyb3VuZC1jb2xvcicsXG5cdFx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tYmFja2dyb3VuZC1jb2xvci1hbHQnLFxuXHRcdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWJvcmRlci1jb2xvcicsXG5cdFx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tdGV4dC1jb2xvcicsXG5cdFx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tdGV4dC1jb2xvci1hbHQnLFxuXHRcdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWhvdmVyLWJhY2tncm91bmQtY29sb3InLFxuXHRcdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWhvdmVyLWJvcmRlci1jb2xvcicsXG5cdFx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24taG92ZXItdGV4dC1jb2xvcicsXG5cdFx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tbGlnaHQtaG92ZXItYm9yZGVyLWNvbG9yJyxcblx0XHRcdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1wcmltYXJ5LWhvdmVyLWJvcmRlci1jb2xvcidcblx0XHRcdF0uZm9yRWFjaCggZnVuY3Rpb24gKCBjc3NfdmFyX25hbWUgKSB7XG5cdFx0XHRcdGRlbGV0ZSBhY2NlbnRfb3ZlcmxheVsgY3NzX3Zhcl9uYW1lIF07XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICQuZXh0ZW5kKCB7fSwgY3NzX3ZhcnMsIGFjY2VudF9vdmVybGF5ICk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRfZm9ybV9zdHlsZV9wcmVzZXRzKCkge1xuXHRcdHJldHVybiBjZmcuZm9ybV9zdHlsZV9wcmVzZXRzICYmICdvYmplY3QnID09PSB0eXBlb2YgY2ZnLmZvcm1fc3R5bGVfcHJlc2V0cyA/IGNmZy5mb3JtX3N0eWxlX3ByZXNldHMgOiB7fTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldF9jdXJyZW50X2Zvcm1fc3R5bGUoKSB7XG5cdFx0dmFyICRjaGVja2VkID0gZ2V0X2Zvcm0oKS5maW5kKCAnW25hbWU9XCJib29raW5nX2Zvcm1fc3R5bGVcIl06Y2hlY2tlZCcgKTtcblx0XHRyZXR1cm4gJGNoZWNrZWQubGVuZ3RoID8gU3RyaW5nKCAkY2hlY2tlZC52YWwoKSB8fCAnbGlnaHRfYm9yZGVyZWQnICkgOiAnbGlnaHRfYm9yZGVyZWQnO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0X2N1c3RvbV9mb3JtX3N0eWxlX2RlZmF1bHRzKCkge1xuXHRcdHJldHVybiAkLmV4dGVuZCgge1xuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9iYWNrZ3JvdW5kX2NvbG9yICAgICAgIDogJyNmZmZmZmYnLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfY29sb3IgICAgICAgICAgIDogJyNjY2NjY2MnLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfd2lkdGggICAgICAgICAgIDogJzFweCcsXG5cdFx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9yYWRpdXMgICAgICAgICAgOiAnMnB4Jyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fcGFkZGluZ192ZXJ0aWNhbCAgICAgICA6ICcxMHB4Jyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fcGFkZGluZ19ob3Jpem9udGFsICAgICA6ICczMHB4Jyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fdGV4dF9jb2xvciAgICAgICAgICAgICA6ICcjMWQyMzI3Jyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYmFja2dyb3VuZF9jb2xvciA6ICcjZmZmZmZmJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfdGV4dF9jb2xvciAgICAgICA6ICcjM2M0MzRhJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYm9yZGVyX2NvbG9yICAgICA6ICcjY2NjY2NjJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JhY2tncm91bmRfY29sb3I6ICcjMDY2YWFiJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX3RleHRfY29sb3IgICAgICA6ICcjZmZmZmZmJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl9jb2xvciAgICA6ICcjMDY2YWFiJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3I6ICcjMDU1NTg5Jyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX3RleHRfY29sb3I6ICcjZmZmZmZmJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvcjogJyMwNTU1ODknLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2JhY2tncm91bmRfY29sb3I6ICcjZmRmZGZkJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl90ZXh0X2NvbG9yOiAnIzQ0NDQ0NCcsXG5cdFx0XHRib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYm9yZGVyX2NvbG9yOiAnI2VlZWVlZScsXG5cdFx0XHRib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfYmFja2dyb3VuZF9jb2xvcjogJyNmZGZkZmQnLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX3RleHRfY29sb3I6ICcjNDQ0NDQ0Jyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3I6ICcjNGQ5MWNkJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl93aWR0aDogJzFweCcsXG5cdFx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfcmFkaXVzOiAnM3B4J1xuXHRcdH0sIGNmZy5jdXN0b21fZm9ybV9zdHlsZV9kZWZhdWx0cyAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIGNmZy5jdXN0b21fZm9ybV9zdHlsZV9kZWZhdWx0cyA/IGNmZy5jdXN0b21fZm9ybV9zdHlsZV9kZWZhdWx0cyA6IHt9ICk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRfY3VzdG9tX2Zvcm1fc3R5bGVfY3NzX3ZhcnMoKSB7XG5cdFx0dmFyIGRlZmF1bHRzID0gZ2V0X2N1c3RvbV9mb3JtX3N0eWxlX2RlZmF1bHRzKCk7XG5cdFx0dmFyIHZhbHVlcyA9ICQuZXh0ZW5kKCB7fSwgZGVmYXVsdHMsIGNmZy5zZXR0aW5ncyAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIGNmZy5zZXR0aW5ncyA/IGNmZy5zZXR0aW5ncyA6IHt9ICk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0Jy0td3BiYy1iZmItZm9ybS1iYWNrZ3JvdW5kJyAgICAgICAgICA6IHNhbml0aXplX3RoZW1lX2NvbG9yKCB2YWx1ZXMuYm9va2luZ19mb3JtX2N1c3RvbV9iYWNrZ3JvdW5kX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2JhY2tncm91bmRfY29sb3IgKSxcblx0XHRcdCctLXdwYmMtYmZiLWZvcm0tYm9yZGVyLWNvbG9yJyAgICAgICAgOiBzYW5pdGl6ZV90aGVtZV9jb2xvciggdmFsdWVzLmJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9jb2xvciApLFxuXHRcdFx0Jy0td3BiYy1iZmItZm9ybS1ib3JkZXItd2lkdGgnICAgICAgICA6IHNhbml0aXplX3RoZW1lX2xlbmd0aCggdmFsdWVzLmJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX3dpZHRoLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl93aWR0aCApLFxuXHRcdFx0Jy0td3BiYy1iZmItZm9ybS1ib3JkZXItcmFkaXVzJyAgICAgICA6IHNhbml0aXplX3RoZW1lX2xlbmd0aCggdmFsdWVzLmJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX3JhZGl1cywgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfcmFkaXVzICksXG5cdFx0XHQnLS13cGJjLWJmYi1mb3JtLXBhZGRpbmcnICAgICAgICAgICAgIDogc2FuaXRpemVfdGhlbWVfbGVuZ3RoKCB2YWx1ZXMuYm9va2luZ19mb3JtX2N1c3RvbV9wYWRkaW5nX3ZlcnRpY2FsLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfdmVydGljYWwgKSArICcgJyArIHNhbml0aXplX3RoZW1lX2xlbmd0aCggdmFsdWVzLmJvb2tpbmdfZm9ybV9jdXN0b21fcGFkZGluZ19ob3Jpem9udGFsLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfaG9yaXpvbnRhbCApLFxuXHRcdFx0Jy0td3BiYy1iZmItZm9ybS1ib3gtc2hhZG93JyAgICAgICAgICA6ICdyZ2JhKDAsIDAsIDAsIDAuMDUpIDBweCAycHggNnB4IDBweCcsXG5cdFx0XHQnLS13cGJjX2Zvcm0tbGFiZWwtY29sb3InICAgICAgICAgICAgIDogc2FuaXRpemVfdGhlbWVfY29sb3IoIHZhbHVlcy5ib29raW5nX2Zvcm1fY3VzdG9tX3RleHRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fdGV4dF9jb2xvciApLFxuXHRcdFx0Jy0td3BiY19mb3JtLWxhYmVsLXN1YmxhYmVsLWNvbG9yJyAgICA6IHNhbml0aXplX3RoZW1lX2NvbG9yKCB2YWx1ZXMuYm9va2luZ19mb3JtX2N1c3RvbV90ZXh0X2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX3RleHRfY29sb3IgKSxcblx0XHRcdCctLXdwYmNfZm9ybS1sYWJlbC1lcnJvci1jb2xvcicgICAgICAgOiAnI2Q2MzYzNycsXG5cdFx0XHQnLS13cGJjX2Zvcm0tZmllbGQtYmFja2dyb3VuZC1jb2xvcicgIDogc2FuaXRpemVfdGhlbWVfY29sb3IoIHZhbHVlcy5ib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JhY2tncm91bmRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYmFja2dyb3VuZF9jb2xvciApLFxuXHRcdFx0Jy0td3BiY19mb3JtLWZpZWxkLW1lbnUtY29sb3InICAgICAgICA6IHNhbml0aXplX3RoZW1lX2NvbG9yKCB2YWx1ZXMuYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9iYWNrZ3JvdW5kX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JhY2tncm91bmRfY29sb3IgKSxcblx0XHRcdCctLXdwYmNfZm9ybS1maWVsZC10ZXh0LWNvbG9yJyAgICAgICAgOiBzYW5pdGl6ZV90aGVtZV9jb2xvciggdmFsdWVzLmJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfdGV4dF9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF90ZXh0X2NvbG9yICksXG5cdFx0XHQnLS13cGJjX2Zvcm0tZmllbGQtYm9yZGVyLWNvbG9yJyAgICAgIDogc2FuaXRpemVfdGhlbWVfY29sb3IoIHZhbHVlcy5ib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JvcmRlcl9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9ib3JkZXJfY29sb3IgKSxcblx0XHRcdCctLXdwYmNfZm9ybS1maWVsZC1ib3JkZXItY29sb3Itc3BhcmUnOiBzYW5pdGl6ZV90aGVtZV9jb2xvciggdmFsdWVzLmJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYm9yZGVyX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JvcmRlcl9jb2xvciApLFxuXHRcdFx0Jy0td3BiY19mb3JtLWZpZWxkLWZvY3VzLWJvcmRlci1jb2xvcic6ICcjMDY2YWFiJyxcblx0XHRcdCctLXdwYmNfZm9ybS1maWVsZC1mb2N1cy1zaGFkb3ctY29sb3InOiAnIzA2NmFhYicsXG5cdFx0XHQnLS13cGJjX2Zvcm0tZmllbGQtZGlzYWJsZWQtY29sb3InICAgIDogJ3JnYmEoMCwgMCwgMCwgMC4yKScsXG5cdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWJvcmRlci1yYWRpdXMnICAgIDogc2FuaXRpemVfdGhlbWVfbGVuZ3RoKCB2YWx1ZXMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX3JhZGl1cywgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX3JhZGl1cyApLFxuXHRcdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1ib3JkZXItc3R5bGUnICAgICA6ICdzb2xpZCcsXG5cdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWJvcmRlci1zaXplJyAgICAgIDogc2FuaXRpemVfdGhlbWVfbGVuZ3RoKCB2YWx1ZXMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX3dpZHRoLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfd2lkdGggKSxcblx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tYmFja2dyb3VuZC1jb2xvcicgOiBzYW5pdGl6ZV90aGVtZV9jb2xvciggdmFsdWVzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JhY2tncm91bmRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JhY2tncm91bmRfY29sb3IgKSxcblx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tYmFja2dyb3VuZC1jb2xvci1hbHQnOiBzYW5pdGl6ZV90aGVtZV9jb2xvciggdmFsdWVzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JhY2tncm91bmRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JhY2tncm91bmRfY29sb3IgKSxcblx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tYm9yZGVyLWNvbG9yJyAgICAgOiBzYW5pdGl6ZV90aGVtZV9jb2xvciggdmFsdWVzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX2NvbG9yICksXG5cdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLXRleHQtY29sb3InICAgICAgIDogc2FuaXRpemVfdGhlbWVfY29sb3IoIHZhbHVlcy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl90ZXh0X2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl90ZXh0X2NvbG9yICksXG5cdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLXRleHQtY29sb3ItYWx0JyAgIDogc2FuaXRpemVfdGhlbWVfY29sb3IoIHZhbHVlcy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl90ZXh0X2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl90ZXh0X2NvbG9yICksXG5cdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWhvdmVyLWJhY2tncm91bmQtY29sb3InOiBzYW5pdGl6ZV90aGVtZV9jb2xvciggdmFsdWVzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3IgKSxcblx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24taG92ZXItYm9yZGVyLWNvbG9yJzogc2FuaXRpemVfdGhlbWVfY29sb3IoIHZhbHVlcy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvciApLFxuXHRcdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1ob3Zlci10ZXh0LWNvbG9yJyA6IHNhbml0aXplX3RoZW1lX2NvbG9yKCB2YWx1ZXMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfdGV4dF9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfdGV4dF9jb2xvciApLFxuXHRcdFx0Jy0td3BiY19mb3JtLWNob2ljZS1jaGVja2VkLWJvcmRlci1jb2xvcic6ICcjMDY2YWFiJyxcblx0XHRcdCctLXdwYmNfZm9ybS1jaG9pY2UtY2hlY2tlZC1jb2xvcicgICAgOiAnIzA2NmFhYicsXG5cdFx0XHQnLS13cGJjX2Zvcm0tY2hvaWNlLWZvY3VzLWNvbG9yJyAgICAgIDogJyMwNjZhYWInLFxuXHRcdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1saWdodC1iYWNrZ3JvdW5kLWNvbG9yJzogc2FuaXRpemVfdGhlbWVfY29sb3IoIHZhbHVlcy5ib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYmFja2dyb3VuZF9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2JhY2tncm91bmRfY29sb3IgKSxcblx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tbGlnaHQtYm9yZGVyLWNvbG9yJzogc2FuaXRpemVfdGhlbWVfY29sb3IoIHZhbHVlcy5ib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYm9yZGVyX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYm9yZGVyX2NvbG9yICksXG5cdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWxpZ2h0LWJvcmRlci1zaXplJzogc2FuaXRpemVfdGhlbWVfbGVuZ3RoKCB2YWx1ZXMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX3dpZHRoLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfd2lkdGggKSxcblx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tbGlnaHQtdGV4dC1jb2xvcicgOiBzYW5pdGl6ZV90aGVtZV9jb2xvciggdmFsdWVzLmJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl90ZXh0X2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fdGV4dF9jb2xvciApLFxuXHRcdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1saWdodC1ib3gtc2hhZG93JyA6ICcwIDJweCAxMHB4IDJweCAjZmZmZmZmNTQnLFxuXHRcdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1saWdodC1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yJzogc2FuaXRpemVfdGhlbWVfY29sb3IoIHZhbHVlcy5ib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfYmFja2dyb3VuZF9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3IgKSxcblx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tbGlnaHQtaG92ZXItYm9yZGVyLWNvbG9yJzogc2FuaXRpemVfdGhlbWVfY29sb3IoIHZhbHVlcy5ib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfYm9yZGVyX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfYm9yZGVyX2NvbG9yICksXG5cdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWxpZ2h0LWhvdmVyLXRleHQtY29sb3InOiBzYW5pdGl6ZV90aGVtZV9jb2xvciggdmFsdWVzLmJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl90ZXh0X2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfdGV4dF9jb2xvciApLFxuXHRcdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1saWdodC1ob3Zlci1ib3gtc2hhZG93JzogJzAgMnB4IDEwcHggMnB4ICNmZmZmZmY1NCcsXG5cdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLXByaW1hcnktaG92ZXItYm9yZGVyLWNvbG9yJzogc2FuaXRpemVfdGhlbWVfY29sb3IoIHZhbHVlcy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvciApLFxuXHRcdFx0Jy0td3BiY19mb3JtLXBhZ2UtYnJlYWstY29sb3InICAgICAgICA6ICcjMDY2YWFiJ1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRfZm9ybV9zdHlsZV9jc3NfdmFyX25hbWVzKCkge1xuXHRcdHZhciBrZXlzID0gW107XG5cdFx0dmFyIHByZXNldHM7XG5cblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGNmZy5mb3JtX3N0eWxlX2Nzc192YXJfbmFtZXMgKSAmJiBjZmcuZm9ybV9zdHlsZV9jc3NfdmFyX25hbWVzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiBjZmcuZm9ybV9zdHlsZV9jc3NfdmFyX25hbWVzO1xuXHRcdH1cblxuXHRcdHByZXNldHMgPSBnZXRfZm9ybV9zdHlsZV9wcmVzZXRzKCk7XG5cdFx0JC5lYWNoKCBwcmVzZXRzLCBmdW5jdGlvbiAoIHByZXNldF9rZXksIHByZXNldCApIHtcblx0XHRcdGlmICggcHJlc2V0ICYmIHByZXNldC5jc3NfdmFycyAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIHByZXNldC5jc3NfdmFycyApIHtcblx0XHRcdFx0JC5lYWNoKCBwcmVzZXQuY3NzX3ZhcnMsIGZ1bmN0aW9uICggdmFyX25hbWUgKSB7XG5cdFx0XHRcdFx0aWYgKCAtMSA9PT0ga2V5cy5pbmRleE9mKCB2YXJfbmFtZSApICkge1xuXHRcdFx0XHRcdFx0a2V5cy5wdXNoKCB2YXJfbmFtZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdCQuZWFjaCggZ2V0X2N1c3RvbV9mb3JtX3N0eWxlX2Nzc192YXJzKCksIGZ1bmN0aW9uICggdmFyX25hbWUgKSB7XG5cdFx0XHRpZiAoIC0xID09PSBrZXlzLmluZGV4T2YoIHZhcl9uYW1lICkgKSB7XG5cdFx0XHRcdGtleXMucHVzaCggdmFyX25hbWUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHRyZXR1cm4ga2V5cztcblx0fVxuXG5cdGZ1bmN0aW9uIHJlc29sdmVfZm9ybV9zdHlsZV9jc3NfdmFycyggc3R5bGUgKSB7XG5cdFx0dmFyIHByZXNldHMgPSBnZXRfZm9ybV9zdHlsZV9wcmVzZXRzKCk7XG5cdFx0dmFyIHByZXNldCA9IHByZXNldHNbIHN0eWxlIF0gfHwgcHJlc2V0cy5saWdodF9ib3JkZXJlZCB8fCB7fTtcblxuXHRcdGlmICggJ2N1c3RvbScgPT09IHN0eWxlIHx8IHByZXNldC5jdXN0b20gKSB7XG5cdFx0XHRyZXR1cm4gYXBwbHlfZm9ybV9hY2NlbnRfY3NzX3ZhcnMoIGdldF9jdXN0b21fZm9ybV9zdHlsZV9jc3NfdmFycygpLCB0cnVlICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFwcGx5X2Zvcm1fYWNjZW50X2Nzc192YXJzKCBwcmVzZXQuY3NzX3ZhcnMgJiYgJ29iamVjdCcgPT09IHR5cGVvZiBwcmVzZXQuY3NzX3ZhcnMgPyBwcmVzZXQuY3NzX3ZhcnMgOiB7fSApO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwbHlfZm9ybV9zdHlsZV90b19wcmV2aWV3KCkge1xuXHRcdHZhciBzdHlsZSA9IGdldF9jdXJyZW50X2Zvcm1fc3R5bGUoKTtcblx0XHR2YXIgcHJlc2V0cyA9IGdldF9mb3JtX3N0eWxlX3ByZXNldHMoKTtcblx0XHR2YXIgcHJlc2V0ID0gcHJlc2V0c1sgc3R5bGUgXSB8fCBwcmVzZXRzLmxpZ2h0X2JvcmRlcmVkIHx8IHt9O1xuXHRcdHZhciBjc3NfdmFycyA9IHJlc29sdmVfZm9ybV9zdHlsZV9jc3NfdmFycyggc3R5bGUgKTtcblx0XHR2YXIgY3NzX3Zhcl9uYW1lcyA9IGdldF9mb3JtX3N0eWxlX2Nzc192YXJfbmFtZXMoKTtcblx0XHR2YXIgaXNfY3VzdG9tID0gKCAnY3VzdG9tJyA9PT0gc3R5bGUgfHwgcHJlc2V0LmN1c3RvbSApO1xuXHRcdHZhciAkcHJldmlldyA9ICQoICdbZGF0YS13cGJjLXRoZW1lLXByZXZpZXc9XCIxXCJdJyApO1xuXHRcdHZhciAkdGFyZ2V0cyA9ICRwcmV2aWV3LmZpbmQoICcud3BiY19jb250YWluZXIud3BiY19mb3JtLCAud3BiY19iZmJfZm9ybSwgLndwYmNfYmZiX19mb3JtX3ByZXZpZXdfc2VjdGlvbl9jb250YWluZXInICk7XG5cblx0XHQkKCAnW2RhdGEtd3BiYy10aGVtZS1jdXN0b20tYXBwZWFyYW5jZS1ub3RpY2U9XCIxXCJdJyApLnRvZ2dsZSggaXNfY3VzdG9tICk7XG5cblx0XHRpZiAoICEgJHRhcmdldHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdCR0YXJnZXRzXG5cdFx0XHQucmVtb3ZlQ2xhc3MoICd3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfY3VzdG9tJyApXG5cdFx0XHQuZWFjaCggZnVuY3Rpb24gKCkge1xuXHRcdFx0XHR2YXIgc3R5bGVfb2JqID0gdGhpcy5zdHlsZTtcblxuXHRcdFx0XHQkLmVhY2goIGNzc192YXJfbmFtZXMsIGZ1bmN0aW9uICggaW5kZXgsIHZhcl9uYW1lICkge1xuXHRcdFx0XHRcdHN0eWxlX29iai5yZW1vdmVQcm9wZXJ0eSggdmFyX25hbWUgKTtcblx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdCQuZWFjaCggY3NzX3ZhcnMsIGZ1bmN0aW9uICggdmFyX25hbWUsIHZhbHVlICkge1xuXHRcdFx0XHRcdGlmICggJycgIT09IFN0cmluZyggdmFsdWUgfHwgJycgKSApIHtcblx0XHRcdFx0XHRcdHN0eWxlX29iai5zZXRQcm9wZXJ0eSggdmFyX25hbWUsIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9ICk7XG5cblx0XHRpZiAoIGlzX2N1c3RvbSApIHtcblx0XHRcdCR0YXJnZXRzLmZpbHRlciggJy53cGJjX2NvbnRhaW5lci53cGJjX2Zvcm0sIC53cGJjX2JmYl9mb3JtJyApLmFkZENsYXNzKCAnd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX2N1c3RvbScgKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiByZXNvbHZlX2Zvcm1fYXBwZWFyYW5jZSgpIHtcblx0XHR2YXIgcHJlc2V0ID0gJCggJyNib29raW5nX2Zvcm1fYXBwZWFyYW5jZV9wcmVzZXQnICkudmFsKCkgfHwgJ2JvcmRlcmVkJztcblxuXHRcdGlmICggJ2N1c3RvbScgPT09IHByZXNldCApIHtcblx0XHRcdHJldHVybiBnZXRfZm9ybV9hcHBlYXJhbmNlX3ByZXNldHMoKS5ib3JkZXJlZDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZ2V0X2Zvcm1fYXBwZWFyYW5jZV9wcmVzZXRfZm9yX3RoZW1lKCBwcmVzZXQgKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGx5X2Zvcm1fYXBwZWFyYW5jZSgpIHtcblx0XHRhcHBseV9mb3JtX3N0eWxlX3RvX3ByZXZpZXcoKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGx5X2NhbGVuZGFyX3NraW4oKSB7XG5cdFx0dmFyICRzZWxlY3QgPSAkKCAnW2RhdGEtd3BiYy10aGVtZS1jYWxlbmRhci1za2luPVwiMVwiXScgKTtcblx0XHR2YXIgdmFsdWUgPSAkc2VsZWN0LmZpbmQoICdvcHRpb246c2VsZWN0ZWQnICkuYXR0ciggJ2RhdGEtd3BiYy1jYWxlbmRhci1za2luLXVybCcgKSB8fCAkc2VsZWN0LnZhbCgpIHx8ICcnO1xuXHRcdHZhciBza2luX3VybCA9IHZhbHVlID8gbWFrZV9hc3NldF91cmwoIHZhbHVlICkgOiAnJztcblxuXHRcdGlmICggc2tpbl91cmwgJiYgdHlwZW9mIHcud3BiY19fY2FsZW5kYXJfX2NoYW5nZV9za2luID09PSAnZnVuY3Rpb24nICYmICQoICcjd3BiYy1jYWxlbmRhci1za2luLWNzcycgKS5sZW5ndGggKSB7XG5cdFx0XHR3LndwYmNfX2NhbGVuZGFyX19jaGFuZ2Vfc2tpbiggc2tpbl91cmwgKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBseV90aW1lX3NraW4oKSB7XG5cdFx0dmFyIHZhbHVlID0gJCggJ1tkYXRhLXdwYmMtdGhlbWUtdGltZS1za2luPVwiMVwiXScgKS52YWwoKSB8fCAnJztcblx0XHR2YXIgc2tpbl91cmwgPSB2YWx1ZSA/IG1ha2VfYXNzZXRfdXJsKCB2YWx1ZSApIDogJyc7XG5cblx0XHRpZiAoIHNraW5fdXJsICYmIHR5cGVvZiB3LndwYmNfX2Nzc19fY2hhbmdlX3NraW4gPT09ICdmdW5jdGlvbicgJiYgJCggJyN3cGJjLXRpbWVfcGlja2VyLXNraW4tY3NzJyApLmxlbmd0aCApIHtcblx0XHRcdHcud3BiY19fY3NzX19jaGFuZ2Vfc2tpbiggc2tpbl91cmwsICd3cGJjLXRpbWVfcGlja2VyLXNraW4tY3NzJyApO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHNlbGVjdF9pZl9vcHRpb25fZXhpc3RzKCAkc2VsZWN0LCB2YWx1ZSApIHtcblx0XHR2YXIgJG9wdGlvbjtcblxuXHRcdGlmICggISAkc2VsZWN0Lmxlbmd0aCB8fCAhIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdCRvcHRpb24gPSAkc2VsZWN0LmZpbmQoICdvcHRpb25bdmFsdWU9XCInICsgdmFsdWUgKyAnXCJdJyApO1xuXHRcdGlmICggISAkb3B0aW9uLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoICRzZWxlY3QudmFsKCkgPT09IHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdCRzZWxlY3QudmFsKCB2YWx1ZSApLnRyaWdnZXIoICdjaGFuZ2UnICk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRmdW5jdGlvbiBwYXJzZV9udW1iZXJfbGlzdCggdmFsdWUgKSB7XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuICQubWFwKCB2YWx1ZSwgZnVuY3Rpb24gKCBpdGVtICkge1xuXHRcdFx0XHR2YXIgcGFyc2VkID0gcGFyc2VJbnQoIGl0ZW0sIDEwICk7XG5cdFx0XHRcdHJldHVybiBpc05hTiggcGFyc2VkICkgPyBudWxsIDogcGFyc2VkO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiAkLm1hcCggU3RyaW5nKCB2YWx1ZSB8fCAnJyApLnNwbGl0KCAvXFxzKixcXHMqLyApLCBmdW5jdGlvbiAoIGl0ZW0gKSB7XG5cdFx0XHR2YXIgcGFyc2VkID0gcGFyc2VJbnQoIGl0ZW0sIDEwICk7XG5cdFx0XHRyZXR1cm4gKCAnJyA9PT0gaXRlbSB8fCBpc05hTiggcGFyc2VkICkgKSA/IG51bGwgOiBwYXJzZWQ7XG5cdFx0fSApO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2V0X2NhbGVuZGFyX3BhcmFtKCByZXNvdXJjZV9pZCwga2V5LCB2YWx1ZSApIHtcblx0XHRpZiAoIHcuX3dwYmMgJiYgdHlwZW9mIHcuX3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbV92YWx1ZSA9PT0gJ2Z1bmN0aW9uJyApIHtcblx0XHRcdHcuX3dwYmMuY2FsZW5kYXJfX3NldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsIGtleSwgdmFsdWUgKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBseV9kYXlzX3NlbGVjdGlvbl90b19jYWxlbmRhciggcmVzb3VyY2VfaWQsIGRheXNfc2VsZWN0aW9uLCBzaG91bGRfcmVpbml0ICkge1xuXHRcdHZhciBkcyA9IGRheXNfc2VsZWN0aW9uIHx8IHt9O1xuXHRcdHZhciBmaXhlZF93ZWVrX2RheXM7XG5cdFx0dmFyIGR5bmFtaWNfc3BlY2lmaWM7XG5cdFx0dmFyIGR5bmFtaWNfd2Vla19kYXlzO1xuXG5cdFx0aWYgKCAhIHJlc291cmNlX2lkIHx8ICEgdy5fd3BiYyB8fCB0eXBlb2Ygdy5fd3BiYy5jYWxlbmRhcl9fc2V0X3BhcmFtX3ZhbHVlICE9PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGZpeGVkX3dlZWtfZGF5cyA9IHBhcnNlX251bWJlcl9saXN0KCBkcy5maXhlZF9fd2Vla19kYXlzX19zdGFydCApO1xuXHRcdGR5bmFtaWNfc3BlY2lmaWMgPSBwYXJzZV9udW1iZXJfbGlzdCggZHMuZHluYW1pY19fZGF5c19zcGVjaWZpYyApO1xuXHRcdGR5bmFtaWNfd2Vla19kYXlzID0gcGFyc2VfbnVtYmVyX2xpc3QoIGRzLmR5bmFtaWNfX3dlZWtfZGF5c19fc3RhcnQgKTtcblxuXHRcdHNldF9jYWxlbmRhcl9wYXJhbSggcmVzb3VyY2VfaWQsICdkYXlzX3NlbGVjdF9tb2RlJywgU3RyaW5nKCBkcy5kYXlzX3NlbGVjdF9tb2RlIHx8ICdtdWx0aXBsZScgKSApO1xuXHRcdHNldF9jYWxlbmRhcl9wYXJhbSggcmVzb3VyY2VfaWQsICdmaXhlZF9fZGF5c19udW0nLCBwYXJzZUludCggZHMuZml4ZWRfX2RheXNfbnVtIHx8IDAsIDEwICkgKTtcblx0XHRzZXRfY2FsZW5kYXJfcGFyYW0oIHJlc291cmNlX2lkLCAnZml4ZWRfX3dlZWtfZGF5c19fc3RhcnQnLCBmaXhlZF93ZWVrX2RheXMubGVuZ3RoID8gZml4ZWRfd2Vla19kYXlzIDogWyAtMSBdICk7XG5cdFx0c2V0X2NhbGVuZGFyX3BhcmFtKCByZXNvdXJjZV9pZCwgJ2R5bmFtaWNfX2RheXNfbWluJywgcGFyc2VJbnQoIGRzLmR5bmFtaWNfX2RheXNfbWluIHx8IDAsIDEwICkgKTtcblx0XHRzZXRfY2FsZW5kYXJfcGFyYW0oIHJlc291cmNlX2lkLCAnZHluYW1pY19fZGF5c19tYXgnLCBwYXJzZUludCggZHMuZHluYW1pY19fZGF5c19tYXggfHwgMCwgMTAgKSApO1xuXHRcdHNldF9jYWxlbmRhcl9wYXJhbSggcmVzb3VyY2VfaWQsICdkeW5hbWljX19kYXlzX3NwZWNpZmljJywgZHluYW1pY19zcGVjaWZpYyApO1xuXHRcdHNldF9jYWxlbmRhcl9wYXJhbSggcmVzb3VyY2VfaWQsICdkeW5hbWljX193ZWVrX2RheXNfX3N0YXJ0JywgZHluYW1pY193ZWVrX2RheXMubGVuZ3RoID8gZHluYW1pY193ZWVrX2RheXMgOiBbIC0xIF0gKTtcblxuXHRcdGlmICggdHlwZW9mIHcud3BiY19fY29uZGl0aW9uc19fU0FWRV9JTklUSUFMX19kYXlzX3NlbGVjdGlvbl9wYXJhbXNfX2JtID09PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0dy53cGJjX19jb25kaXRpb25zX19TQVZFX0lOSVRJQUxfX2RheXNfc2VsZWN0aW9uX3BhcmFtc19fYm0oIHJlc291cmNlX2lkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBzaG91bGRfcmVpbml0ICYmIHR5cGVvZiB3LndwYmNfY2FsX19yZV9pbml0ID09PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0dy53cGJjX2NhbF9fcmVfaW5pdCggcmVzb3VyY2VfaWQgKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBlbnN1cmVfY2FsZW5kYXJfb25seV9kYXlzX3NlbGVjdGlvbigpIHtcblx0XHR2YXIgJHByZXZpZXcgPSAkKCAnW2RhdGEtd3BiYy10aGVtZS1wcmV2aWV3PVwiMVwiXScgKS5maXJzdCgpO1xuXHRcdHZhciBwcmV2aWV3X21vZGUgPSAkcHJldmlldy5hdHRyKCAnZGF0YS1wcmV2aWV3LW1vZGUnICkgfHwgJCggJyN3cGJjX3RoZW1lX3ByZXZpZXdfbW9kZScgKS52YWwoKSB8fCAnZm9ybSc7XG5cdFx0dmFyIHJlc291cmNlX2lkID0gcGFyc2VJbnQoICRwcmV2aWV3LmF0dHIoICdkYXRhLXJlc291cmNlLWlkJyApIHx8IDAsIDEwICk7XG5cdFx0dmFyIGV4cGVjdGVkID0gY2ZnLmRheXNfc2VsZWN0aW9uIHx8IHt9O1xuXHRcdHZhciBleHBlY3RlZF9tb2RlID0gU3RyaW5nKCBleHBlY3RlZC5kYXlzX3NlbGVjdF9tb2RlIHx8ICdtdWx0aXBsZScgKTtcblx0XHR2YXIgY3VycmVudF9tb2RlID0gbnVsbDtcblx0XHR2YXIgJGNhbGVuZGFyO1xuXHRcdHZhciBzaG91bGRfcmVpbml0ID0gZmFsc2U7XG5cblx0XHRpZiAoICdjYWxlbmRhcicgIT09IHByZXZpZXdfbW9kZSB8fCAhIHJlc291cmNlX2lkIHx8ICEgZXhwZWN0ZWRfbW9kZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoICEgdy5fd3BiYyB8fCB0eXBlb2Ygdy5fd3BiYy5jYWxlbmRhcl9fZ2V0X3BhcmFtX3ZhbHVlICE9PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGN1cnJlbnRfbW9kZSA9IHcuX3dwYmMuY2FsZW5kYXJfX2dldF9wYXJhbV92YWx1ZSggcmVzb3VyY2VfaWQsICdkYXlzX3NlbGVjdF9tb2RlJyApO1xuXHRcdGlmICggU3RyaW5nKCBjdXJyZW50X21vZGUgfHwgJycgKSA9PT0gZXhwZWN0ZWRfbW9kZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQkY2FsZW5kYXIgPSAkKCAnI2NhbGVuZGFyX2Jvb2tpbmcnICsgcmVzb3VyY2VfaWQgKTtcblx0XHRzaG91bGRfcmVpbml0ID0gJGNhbGVuZGFyLmxlbmd0aCAmJiAkY2FsZW5kYXIuaGFzQ2xhc3MoICdoYXNEYXRlcGljaycgKTtcblxuXHRcdGFwcGx5X2RheXNfc2VsZWN0aW9uX3RvX2NhbGVuZGFyKCByZXNvdXJjZV9pZCwgZXhwZWN0ZWQsIHNob3VsZF9yZWluaXQgKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGx5X3JlbGF0ZWRfc2tpbnNfZm9yX3RoZW1lKCB0aGVtZSApIHtcblx0XHR2YXIgY2FsZW5kYXJfc2tpbiA9IHRoZW1lID8gJy9jc3Mvc2tpbnMvMjRfOV9fZGFya18xLmNzcycgOiAnL2Nzcy9za2lucy8yNV81X19zcXVhcmVfMS5jc3MnO1xuXHRcdHZhciB0aW1lX3NraW4gPSAnL2Nzcy90aW1lX3BpY2tlcl9za2lucy9mb3JtX3N0eWxlLmNzcyc7XG5cblx0XHRzZWxlY3RfaWZfb3B0aW9uX2V4aXN0cyggJCggJ1tkYXRhLXdwYmMtdGhlbWUtY2FsZW5kYXItc2tpbj1cIjFcIl0nICksIGNhbGVuZGFyX3NraW4gKTtcblx0XHRzZWxlY3RfaWZfb3B0aW9uX2V4aXN0cyggJCggJ1tkYXRhLXdwYmMtdGhlbWUtdGltZS1za2luPVwiMVwiXScgKSwgdGltZV9za2luICk7XG5cdH1cblxuXHRmdW5jdGlvbiBwdWxzZV9wcmV2aWV3X21vZGVfY29udHJvbCgpIHtcblx0XHR2YXIgJGNvbnRyb2wgPSAkKCAnLndwYmNfdGhlbWVfY29udHJvbF9wcmV2aWV3X21vZGUnICkuZmlyc3QoKTtcblxuXHRcdHB1bHNlX2VsZW1lbnQoICRjb250cm9sICk7XG5cblx0XHRjbGVhclRpbWVvdXQoIHByZXZpZXdfbm90aWNlX3RpbWVyICk7XG5cdFx0cHJldmlld19ub3RpY2VfdGltZXIgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7XG5cdFx0XHQkY29udHJvbC5yZW1vdmVDbGFzcyggJ3dwYmNfdGhlbWVfYXR0ZW50aW9uX3B1bHNlJyApO1xuXHRcdH0sIDIxMDAgKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldF9wcmV2aWV3X25vdGljZV9tZXNzYWdlKCBub3RpY2VfdHlwZSApIHtcblx0XHR2YXIgaTE4biA9IGNmZy5pMThuIHx8IHt9O1xuXG5cdFx0aWYgKCAnZm9ybScgPT09IG5vdGljZV90eXBlICkge1xuXHRcdFx0cmV0dXJuIGkxOG4uZm9ybV9wcmV2aWV3X29wdGlvbl9ub3RpY2UgfHwgJ1RoaXMgb3B0aW9uIGlzIHZpc2libGUgaW4gdGhlIEJvb2tpbmcgZm9ybSBwcmV2aWV3LiBTd2l0Y2ggUHJldmlldyB0byBCb29raW5nIGZvcm0gdG8gaW5zcGVjdCBpdC4nO1xuXHRcdH1cblxuXHRcdHJldHVybiAnJztcblx0fVxuXG5cdGZ1bmN0aW9uIG1heWJlX3Nob3dfcHJldmlld19ub3RpY2UoICRzb3VyY2UgKSB7XG5cdFx0dmFyIG5vdGljZV90eXBlID0gJHNvdXJjZS5hdHRyKCAnZGF0YS13cGJjLXRoZW1lLXByZXZpZXctbm90aWNlJyApIHx8ICcnO1xuXHRcdHZhciBwcmV2aWV3X21vZGUgPSAkKCAnI3dwYmNfdGhlbWVfcHJldmlld19tb2RlJyApLnZhbCgpIHx8ICdmb3JtJztcblx0XHR2YXIgbWVzc2FnZSA9IGdldF9wcmV2aWV3X25vdGljZV9tZXNzYWdlKCBub3RpY2VfdHlwZSApO1xuXHRcdHZhciAkY29udHJvbCA9ICQoICcud3BiY190aGVtZV9jb250cm9sX3ByZXZpZXdfbW9kZScgKS5maXJzdCgpO1xuXG5cdFx0aWYgKCAhIG1lc3NhZ2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCAnZm9ybScgPT09IG5vdGljZV90eXBlICYmICdjYWxlbmRhcicgIT09IHByZXZpZXdfbW9kZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoICdmb3JtJyA9PT0gbm90aWNlX3R5cGUgKSB7XG5cdFx0XHRwdWxzZV9wcmV2aWV3X21vZGVfY29udHJvbCgpO1xuXHRcdFx0c2hvd19oaWdobGlnaHRlZF9ub3RpY2UoIG1lc3NhZ2UsICd3YXJuaW5nJywgOTAwMCApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHNob3dfaGlnaGxpZ2h0ZWRfbm90aWNlKCBtZXNzYWdlLCAnd2FybmluZycsIDkwMDAsICRjb250cm9sICk7XG5cdH1cblxuXHRmdW5jdGlvbiBzaG93X2NhbGVuZGFyX29ubHlfdGhlbWVfbm90aWNlKCkge1xuXHRcdHZhciBwcmV2aWV3X21vZGUgPSAkKCAnI3dwYmNfdGhlbWVfcHJldmlld19tb2RlJyApLnZhbCgpIHx8ICdmb3JtJztcblxuXHRcdGlmICggJ2NhbGVuZGFyJyAhPT0gcHJldmlld19tb2RlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHB1bHNlX3ByZXZpZXdfbW9kZV9jb250cm9sKCk7XG5cdFx0c2hvd19oaWdobGlnaHRlZF9ub3RpY2UoXG5cdFx0XHRjZmcuaTE4biAmJiBjZmcuaTE4bi5jYWxlbmRhcl9vbmx5X3RoZW1lX25vdGljZSA/IGNmZy5pMThuLmNhbGVuZGFyX29ubHlfdGhlbWVfbm90aWNlIDogJ1ByZXZpZXcgaXMgc2V0IHRvIENhbGVuZGFyIG9ubHkuIFN3aXRjaCBQcmV2aWV3IHRvIEJvb2tpbmcgZm9ybSB0byBpbnNwZWN0IHRoZSBmb3JtIHRoZW1lLicsXG5cdFx0XHQnd2FybmluZycsXG5cdFx0XHQ5MDAwXG5cdFx0KTtcblx0fVxuXG5cdGZ1bmN0aW9uIHN5bmNfdGltZV9waWNrZXJfcHJldmlldygpIHtcblx0XHR2YXIgaXNfZW5hYmxlZCA9IGdldF9mb3JtKCkuZmluZCggJ1tuYW1lPVwiYm9va2luZ190aW1lc2xvdF9waWNrZXJcIl0nICkucHJvcCggJ2NoZWNrZWQnICk7XG5cdFx0dmFyICRwcmV2aWV3ID0gJCggJ1tkYXRhLXdwYmMtdGhlbWUtcHJldmlldz1cIjFcIl0nICk7XG5cdFx0dmFyIHRpbWVfc2VsZWN0b3JzID0gJ3NlbGVjdFtuYW1lXj1cInJhbmdldGltZVwiXSwgc2VsZWN0W25hbWVePVwic3RhcnR0aW1lXCJdLCBzZWxlY3RbbmFtZV49XCJlbmR0aW1lXCJdLCBzZWxlY3RbbmFtZV49XCJkdXJhdGlvbnRpbWVcIl0nO1xuXG5cdFx0aWYgKCB3Ll93cGJjICYmIHR5cGVvZiB3Ll93cGJjLnNldF9vdGhlcl9wYXJhbSA9PT0gJ2Z1bmN0aW9uJyApIHtcblx0XHRcdHcuX3dwYmMuc2V0X290aGVyX3BhcmFtKCAnaXNfZW5hYmxlZF9ib29raW5nX3RpbWVzbG90X3BpY2tlcicsICEhIGlzX2VuYWJsZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIGlzX2VuYWJsZWQgKSB7XG5cdFx0XHRpZiAoIHcuX3dwYmMgJiYgdHlwZW9mIHcud3BiY19ob29rX19pbml0X3RpbWVzZWxlY3RvciA9PT0gJ2Z1bmN0aW9uJyApIHtcblx0XHRcdFx0dy53cGJjX2hvb2tfX2luaXRfdGltZXNlbGVjdG9yKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0JHByZXZpZXcuZmluZCggJy53cGJjX3RpbWVzX3NlbGVjdG9yJyApLnJlbW92ZSgpO1xuXHRcdCRwcmV2aWV3LmZpbmQoIHRpbWVfc2VsZWN0b3JzICkuc2hvdygpO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVmcmVzaF9wcmV2aWV3X21vZGVfY29udHJvbHMoKSB7XG5cdFx0dmFyIHByZXZpZXdfbW9kZSA9ICQoICcjd3BiY190aGVtZV9wcmV2aWV3X21vZGUnICkudmFsKCkgfHwgJ2Zvcm0nO1xuXHRcdCQoICdbZGF0YS13cGJjLXRoZW1lLWZvcm0tY29udHJvbD1cIjFcIl0nICkudG9nZ2xlQ2xhc3MoICdpcy12aXNpYmxlJywgJ2Zvcm0nID09PSBwcmV2aWV3X21vZGUgKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHNldF9jYWxlbmRhcl9sb2FkaW5nKCBpc19sb2FkaW5nICkge1xuXHRcdHZhciAkcGFuZWwgPSAkKCAnW2RhdGEtd3BiYy10aGVtZS1jYWxlbmRhci1wYW5lbD1cIjFcIl0nICk7XG5cblx0XHQkcGFuZWwudG9nZ2xlQ2xhc3MoICdpcy1sb2FkaW5nJywgISEgaXNfbG9hZGluZyApO1xuXHRcdCRwYW5lbC5maW5kKCAnLndwYmNfdGhlbWVfY2FsZW5kYXJfbG9hZGluZycgKS5yZW1vdmUoKTtcblxuXHRcdGlmICggaXNfbG9hZGluZyApIHtcblx0XHRcdCRwYW5lbC5hcHBlbmQoXG5cdFx0XHRcdCc8ZGl2IGNsYXNzPVwid3BiY19jYWxlbmRhcl9sb2FkaW5nIHdwYmNfdGhlbWVfY2FsZW5kYXJfbG9hZGluZ1wiPicgK1xuXHRcdFx0XHRcdCc8c3BhbiBjbGFzcz1cIndwYmNfaWNuX2F1dG9yZW5ldyB3cGJjX2FuaW1hdGlvbl9zcGluXCI+PC9zcGFuPiZuYnNwOycgK1xuXHRcdFx0XHRcdHRyaW1fdGV4dCggY2ZnLmkxOG4gJiYgY2ZnLmkxOG4ubG9hZGluZyA/IGNmZy5pMThuLmxvYWRpbmcgOiAnTG9hZGluZycgKSArXG5cdFx0XHRcdCc8L2Rpdj4nXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlZnJlc2hfcHJldmlldygpIHtcblx0XHR2YXIgZGF0YSA9IGNvbGxlY3RfcGF5bG9hZCgpO1xuXG5cdFx0aWYgKCBwcmV2aWV3X2FqYXggJiYgcHJldmlld19hamF4LnJlYWR5U3RhdGUgIT09IDQgKSB7XG5cdFx0XHRwcmV2aWV3X2FqYXguYWJvcnQoKTtcblx0XHR9XG5cblx0XHRkYXRhLmFjdGlvbiA9IGNmZy5wcmV2aWV3X2FjdGlvbjtcblx0XHRkYXRhLm5vbmNlID0gY2ZnLm5vbmNlO1xuXG5cdFx0c2V0X2NhbGVuZGFyX2xvYWRpbmcoIHRydWUgKTtcblx0XHRwcmV2aWV3X2FqYXggPSAkLnBvc3QoIGNmZy5hamF4X3VybCwgZGF0YSApXG5cdFx0XHQuZG9uZSggZnVuY3Rpb24gKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCByZXNwb25zZSAmJiByZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5odG1sICkge1xuXHRcdFx0XHRcdCQoICdbZGF0YS13cGJjLXRoZW1lLXByZXZpZXc9XCIxXCJdJyApLnJlcGxhY2VXaXRoKCByZXNwb25zZS5kYXRhLmh0bWwgKTtcblx0XHRcdFx0XHRpZiAoIHJlc3BvbnNlLmRhdGEuZGF5c19zZWxlY3Rpb24gKSB7XG5cdFx0XHRcdFx0XHRjZmcuZGF5c19zZWxlY3Rpb24gPSByZXNwb25zZS5kYXRhLmRheXNfc2VsZWN0aW9uO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhcHBseV9mb3JtX3RoZW1lKCk7XG5cdFx0XHRcdFx0YXBwbHlfZm9ybV9hcHBlYXJhbmNlKCk7XG5cdFx0XHRcdFx0YXBwbHlfY2FsZW5kYXJfc2tpbigpO1xuXHRcdFx0XHRcdGFwcGx5X3RpbWVfc2tpbigpO1xuXHRcdFx0XHRcdGVuc3VyZV9jYWxlbmRhcl9vbmx5X2RheXNfc2VsZWN0aW9uKCk7XG5cdFx0XHRcdFx0c3luY190aW1lX3BpY2tlcl9wcmV2aWV3KCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2hvd19tZXNzYWdlKFxuXHRcdFx0XHRcdHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5tZXNzYWdlID8gcmVzcG9uc2UuZGF0YS5tZXNzYWdlIDogKCBjZmcuaTE4biAmJiBjZmcuaTE4bi5wcmV2aWV3X2ZhaWxlZCA/IGNmZy5pMThuLnByZXZpZXdfZmFpbGVkIDogJ1VuYWJsZSB0byByZWZyZXNoIGNhbGVuZGFyIHByZXZpZXcuJyApLFxuXHRcdFx0XHRcdCdlcnJvcicsXG5cdFx0XHRcdFx0MTAwMDBcblx0XHRcdFx0KTtcblx0XHRcdH0gKVxuXHRcdFx0LmZhaWwoIGZ1bmN0aW9uICggeGhyLCB0ZXh0X3N0YXR1cyApIHtcblx0XHRcdFx0aWYgKCAnYWJvcnQnID09PSB0ZXh0X3N0YXR1cyApIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0c2hvd19tZXNzYWdlKCBjZmcuaTE4biAmJiBjZmcuaTE4bi5wcmV2aWV3X2ZhaWxlZCA/IGNmZy5pMThuLnByZXZpZXdfZmFpbGVkIDogJ1VuYWJsZSB0byByZWZyZXNoIGNhbGVuZGFyIHByZXZpZXcuJywgJ2Vycm9yJywgMTAwMDAgKTtcblx0XHRcdH0gKVxuXHRcdFx0LmFsd2F5cyggZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRzZXRfY2FsZW5kYXJfbG9hZGluZyggZmFsc2UgKTtcblx0XHRcdH0gKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHNjaGVkdWxlX3ByZXZpZXdfcmVmcmVzaCgpIHtcblx0XHRjbGVhclRpbWVvdXQoIHByZXZpZXdfdGltZXIgKTtcblx0XHRwcmV2aWV3X3RpbWVyID0gc2V0VGltZW91dCggcmVmcmVzaF9wcmV2aWV3LCAxODAgKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHNhdmVfc2V0dGluZ3MoKSB7XG5cdFx0dmFyICRidXR0b24gPSAkKCAnW2RhdGEtd3BiYy10aGVtZS1zYXZlPVwiMVwiXScgKTtcblx0XHR2YXIgb3JpZ2luYWxfdGV4dCA9ICRidXR0b24uZGF0YSggJ3dwYmMtb3JpZ2luYWwtdGV4dCcgKTtcblx0XHR2YXIgZGF0YSA9IGNvbGxlY3RfcGF5bG9hZCgpO1xuXG5cdFx0aWYgKCAhIG9yaWdpbmFsX3RleHQgKSB7XG5cdFx0XHRvcmlnaW5hbF90ZXh0ID0gJGJ1dHRvbi5odG1sKCk7XG5cdFx0XHQkYnV0dG9uLmRhdGEoICd3cGJjLW9yaWdpbmFsLXRleHQnLCBvcmlnaW5hbF90ZXh0ICk7XG5cdFx0fVxuXG5cdFx0ZGF0YS5hY3Rpb24gPSBjZmcuYWN0aW9uO1xuXHRcdGRhdGEubm9uY2UgPSBjZmcubm9uY2U7XG5cblx0XHQkYnV0dG9uLmFkZENsYXNzKCAnZGlzYWJsZWQnICkuYXR0ciggJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScgKTtcblx0XHQkYnV0dG9uLmZpbmQoICcuaW4tYnV0dG9uLXRleHQnICkuaHRtbCggJyZuYnNwOyZuYnNwOycgKyB0cmltX3RleHQoIGNmZy5pMThuICYmIGNmZy5pMThuLnNhdmluZyA/IGNmZy5pMThuLnNhdmluZyA6ICdTYXZpbmcnICkgKyAnLi4uJyApO1xuXG5cdFx0JC5wb3N0KCBjZmcuYWpheF91cmwsIGRhdGEgKVxuXHRcdFx0LmRvbmUoIGZ1bmN0aW9uICggcmVzcG9uc2UgKSB7XG5cdFx0XHRcdGlmICggcmVzcG9uc2UgJiYgcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0XHRzaG93X21lc3NhZ2UoIHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5tZXNzYWdlID8gcmVzcG9uc2UuZGF0YS5tZXNzYWdlIDogKCBjZmcuaTE4biAmJiBjZmcuaTE4bi5zYXZlZCA/IGNmZy5pMThuLnNhdmVkIDogJ1NhdmVkJyApLCAnc3VjY2VzcycsIDMwMDAgKTtcblx0XHRcdFx0XHRjZmcuc2V0dGluZ3MgPSByZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEuc2V0dGluZ3MgPyByZXNwb25zZS5kYXRhLnNldHRpbmdzIDogY2ZnLnNldHRpbmdzO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNob3dfbWVzc2FnZShcblx0XHRcdFx0XHRyZXNwb25zZSAmJiByZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEubWVzc2FnZSA/IHJlc3BvbnNlLmRhdGEubWVzc2FnZSA6ICggY2ZnLmkxOG4gJiYgY2ZnLmkxOG4uc2F2ZV9mYWlsZWQgPyBjZmcuaTE4bi5zYXZlX2ZhaWxlZCA6ICdVbmFibGUgdG8gc2F2ZSBhcHBlYXJhbmNlIHNldHRpbmdzLicgKSxcblx0XHRcdFx0XHQnZXJyb3InLFxuXHRcdFx0XHRcdDEwMDAwXG5cdFx0XHRcdCk7XG5cdFx0XHR9IClcblx0XHRcdC5mYWlsKCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHNob3dfbWVzc2FnZSggY2ZnLmkxOG4gJiYgY2ZnLmkxOG4uc2F2ZV9mYWlsZWQgPyBjZmcuaTE4bi5zYXZlX2ZhaWxlZCA6ICdVbmFibGUgdG8gc2F2ZSBhcHBlYXJhbmNlIHNldHRpbmdzLicsICdlcnJvcicsIDEwMDAwICk7XG5cdFx0XHR9IClcblx0XHRcdC5hbHdheXMoIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0JGJ1dHRvbi5yZW1vdmVDbGFzcyggJ2Rpc2FibGVkJyApLnJlbW92ZUF0dHIoICdhcmlhLWRpc2FibGVkJyApLmh0bWwoIG9yaWdpbmFsX3RleHQgKTtcblx0XHRcdH0gKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGJpbmRfZXZlbnRzKCkge1xuXHRcdCQoIGRvY3VtZW50ICkub24oICdjbGljaycsICcud3BiY190aGVtZV9yaWdodGJhcl90YWJzIFtyb2xlPVwidGFiXCJdJywgZnVuY3Rpb24gKCBldmVudCApIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRzd2l0Y2hfcGFuZWwoICQoIHRoaXMgKSApO1xuXHRcdH0gKTtcblxuXHRcdCQoIGRvY3VtZW50ICkub24oICdjbGljaycsICcud3BiY190aGVtZV9wcmVtaXVtX2Rpc21pc3MgYScsIGZ1bmN0aW9uICggZXZlbnQgKSB7XG5cdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHR9ICk7XG5cblx0XHQkKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLndwYmNfdGhlbWVfcmlnaHRiYXJfcGFuZWxzIC53cGJjX3VpX19jb2xsYXBzaWJsZV9ncm91cCA+IC5ncm91cF9faGVhZGVyJywgZnVuY3Rpb24gKCBldmVudCApIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0b2dnbGVfZ3JvdXAoICQoIHRoaXMgKSApO1xuXHRcdH0gKTtcblxuXHRcdCQoIGRvY3VtZW50ICkub24oICdjbGljaycsICdbZGF0YS13cGJjLXRoZW1lLXNhdmU9XCIxXCJdJywgZnVuY3Rpb24gKCBldmVudCApIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRpZiAoICEgJCggdGhpcyApLmhhc0NsYXNzKCAnZGlzYWJsZWQnICkgKSB7XG5cdFx0XHRcdHNhdmVfc2V0dGluZ3MoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHQkKCBkb2N1bWVudCApLm9uKCAnc3VibWl0JywgJ1tkYXRhLXdwYmMtdGhlbWUtc2V0dGluZ3MtZm9ybT1cIjFcIl0nLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9ICk7XG5cblx0XHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ1tuYW1lPVwiYm9va2luZ19mb3JtX3RoZW1lXCJdJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0YXBwbHlfZm9ybV90aGVtZSgpO1xuXHRcdFx0YXBwbHlfcmVsYXRlZF9za2luc19mb3JfdGhlbWUoICQoIHRoaXMgKS52YWwoKSB8fCAnJyApO1xuXHRcdFx0c2hvd19jYWxlbmRhcl9vbmx5X3RoZW1lX25vdGljZSgpO1xuXHRcdH0gKTtcblxuXHRcdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnW25hbWU9XCJib29raW5nX2Zvcm1fc3R5bGVcIl0nLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRzeW5jX2Zvcm1fc3R5bGVfY2hvaWNlKCk7XG5cdFx0XHRhcHBseV9mb3JtX3RoZW1lKCk7XG5cdFx0XHRhcHBseV9mb3JtX2FwcGVhcmFuY2UoKTtcblx0XHRcdGFwcGx5X3JlbGF0ZWRfc2tpbnNfZm9yX3RoZW1lKCAkKCAnI2Jvb2tpbmdfZm9ybV90aGVtZScgKS52YWwoKSB8fCAnJyApO1xuXHRcdFx0c2hvd19jYWxlbmRhcl9vbmx5X3RoZW1lX25vdGljZSgpO1xuXHRcdFx0c2NoZWR1bGVfcHJldmlld19yZWZyZXNoKCk7XG5cdFx0fSApO1xuXG5cdFx0JCggZG9jdW1lbnQgKS5vbiggJ2lucHV0IGNoYW5nZScsICdbZGF0YS13cGJjLXRoZW1lLWFwcGVhcmFuY2UtY29udHJvbF0nLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBDb2xvcmlzIGVtaXRzIGNvbnRpbnVvdXMgaW5wdXQgZXZlbnRzLiBBY2NlbnQgYW5kIGFwcGVhcmFuY2UgdmFsdWVzIGFyZVxuXHRcdFx0Ly8gQ1NTLW9ubHksIHNvIHVwZGF0ZSB0aGUgZXhpc3RpbmcgcHJldmlldyB3aXRob3V0IHJlYnVpbGRpbmcgaXQgYnkgQUpBWC5cblx0XHRcdGFwcGx5X2Zvcm1fYXBwZWFyYW5jZSgpO1xuXHRcdH0gKTtcblxuXHRcdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnW2RhdGEtd3BiYy10aGVtZS1hY2NlbnQtdG9nZ2xlPVwiMVwiXScsIGZ1bmN0aW9uICgpIHtcblx0XHRcdCQoICdbZGF0YS13cGJjLXRoZW1lLWFjY2VudC1kZXBlbmRlbnQ9XCIxXCJdJyApLnRvZ2dsZSggJCggdGhpcyApLnByb3AoICdjaGVja2VkJyApICk7XG5cdFx0XHRhcHBseV9mb3JtX2FwcGVhcmFuY2UoKTtcblx0XHR9ICk7XG5cblx0XHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ1tkYXRhLXdwYmMtdGhlbWUtY2FsZW5kYXItc2tpbj1cIjFcIl0nLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRhcHBseV9jYWxlbmRhcl9za2luKCk7XG5cdFx0fSApO1xuXG5cdFx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdbZGF0YS13cGJjLXRoZW1lLXRpbWUtc2tpbj1cIjFcIl0nLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRhcHBseV90aW1lX3NraW4oKTtcblx0XHR9ICk7XG5cblx0XHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ1tuYW1lPVwiYm9va2luZ190aW1lc2xvdF9waWNrZXJcIl0nLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRzeW5jX3RpbWVfcGlja2VyX3ByZXZpZXcoKTtcblx0XHRcdHNjaGVkdWxlX3ByZXZpZXdfcmVmcmVzaCgpO1xuXHRcdH0gKTtcblxuXHRcdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnW2RhdGEtd3BiYy10aGVtZS1wcmV2aWV3LW5vdGljZV0nLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRtYXliZV9zaG93X3ByZXZpZXdfbm90aWNlKCAkKCB0aGlzICkgKTtcblx0XHR9ICk7XG5cblx0XHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJyN3cGJjX3RoZW1lX3Jlc291cmNlX2lkLCAjd3BiY190aGVtZV9tb250aHNfY291bnQsICN3cGJjX3RoZW1lX2N1c3RvbV9mb3JtJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0c2NoZWR1bGVfcHJldmlld19yZWZyZXNoKCk7XG5cdFx0fSApO1xuXG5cdFx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICcjd3BiY190aGVtZV9wcmV2aWV3X21vZGUnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZWZyZXNoX3ByZXZpZXdfbW9kZV9jb250cm9scygpO1xuXHRcdFx0c2NoZWR1bGVfcHJldmlld19yZWZyZXNoKCk7XG5cdFx0fSApO1xuXHR9XG5cblx0JCggZnVuY3Rpb24gKCkge1xuXHRcdGlmICggISAkKCAnW2RhdGEtd3BiYy10aGVtZS1wYWdlPVwiMVwiXScgKS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0YmluZF9ldmVudHMoKTtcblx0XHRpZiAoIHcuQ29sb3JpcyApIHtcblx0XHRcdHcuQ29sb3Jpcygge1xuXHRcdFx0XHRlbDogJy53cGJjX3RoZW1lX2NvbG9yaXMnLFxuXHRcdFx0XHRhbHBoYTogZmFsc2UsXG5cdFx0XHRcdGZvcm1hdDogJ2hleCcsXG5cdFx0XHRcdHRoZW1lTW9kZTogJ2F1dG8nXG5cdFx0XHR9ICk7XG5cdFx0fVxuXHRcdHJlZnJlc2hfcHJldmlld19tb2RlX2NvbnRyb2xzKCk7XG5cdFx0YXBwbHlfZm9ybV90aGVtZSgpO1xuXHRcdGFwcGx5X2Zvcm1fYXBwZWFyYW5jZSgpO1xuXHRcdGVuc3VyZV9jYWxlbmRhcl9vbmx5X2RheXNfc2VsZWN0aW9uKCk7XG5cdFx0c3luY190aW1lX3BpY2tlcl9wcmV2aWV3KCk7XG5cdH0gKTtcbn0oIGpRdWVyeSwgd2luZG93ICkgKTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDRSxXQUFXQSxDQUFDLEVBQUVDLENBQUMsRUFBRztFQUNuQixZQUFZOztFQUVaLElBQUlDLEdBQUcsR0FBR0QsQ0FBQyxDQUFDRSx5QkFBeUIsSUFBSSxDQUFDLENBQUM7RUFDM0MsSUFBSUMsbUNBQW1DLEdBQUdDLE1BQU0sQ0FBRUgsR0FBRyxDQUFDSSxvQkFBb0IsSUFBSUosR0FBRyxDQUFDSSxvQkFBb0IsQ0FBQ0MseUJBQXlCLElBQUksRUFBRyxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFDOztFQUUvSTtFQUNBLElBQUlDLHlCQUF5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 |
| 787 |
|