Текущие и будущие каталоги акций Лысьвы

Главная Избранное 0 Магазины Входящие Профиль
Наверх
. */ adsensePopupRight: "\u003Cstyle\u003E@media (max-width: 949px) { .adlk_product_pc { display: none !important; } }\u003C\/style\u003E\u003Cdiv id=\u0022adlk-product-card-1\u0022 class=\u0022adlk_product_pc\u0022\u003E\u003C\/div\u003E\u003Cscript src=\u0022https:\/\/s.adlook.tv\/vast-player\/production\/adlkPlayerInit.js\u0022 defer data-set-id=\u0022d9ub7ovaimjs73cfrcg0\u0022 data-host=\u0022adlk-product-card-1\u0022 data-h=\u0022225\u0022 data-target=\u0022pc\u0022\u003E\u003C\/script\u003E\u003Cscript\u003E(function () { if (window.adlkCoreAdded || document.querySelector(\u0027script[src*=\u0022adLookInit.js\u0022]\u0027)) return; window.adlkCoreAdded = true; var s = document.createElement(\u0027script\u0027); s.src = \u0027https:\/\/s.adlook.tv\/vast-player\/production\/adLookInit.js\u0027; s.defer = true; document.head.appendChild(s); })();\u003C\/script\u003E", adsensePopupLeft: "\u003C!-- Yandex.RTB R-A-2174167-10 --\u003E\u003Cdiv id=\u0022[ID]\u0022\u003E\u003C\/div\u003E\u003Cscript\u003Ewindow.yaContextCb.push(()=\u003E{Ya.Context.AdvManager.render({renderTo: \u0027[ID]\u0027,blockId: \u0027R-A-2174167-10\u0027,statId: \u0027382\u0027})})\u003C\/script\u003E", sc: '[]', // Ссылки поедлиться товаром, используются когда товары аяксом загружаются /* функция преобразования даты */ cd: function(d,m,y){ return dcorecng.dateformaturl.replace('d',d).replace('m',m).replace('Y',y); }, // функция ковертирования параметров URL в объект deparam: function(str){ var obj = {}; if (str) { // пустой? var pairs = str.split('&'); for (j in pairs) { var split = pairs[j].split('='); obj[decodeURIComponent(split[0])] = decodeURIComponent(split[1]); } } return obj; }, /* add parameter to url */ apu: function(url,param,paramVal){ var TheAnchor = null; var newAdditionalURL = ""; var tempArray = url.split("?"); var baseURL = tempArray[0]; var additionalURL = tempArray[1]; var temp = ""; if (additionalURL) { var tmpAnchor = additionalURL.split("#"); var TheParams = tmpAnchor[0]; TheAnchor = tmpAnchor[1]; if(TheAnchor) additionalURL = TheParams; tempArray = additionalURL.split("&"); for (var i=0; i=2) { var prefix= encodeURIComponent(parameter)+'='; var pars= urlparts[1].split(/[&;]/g); //reverse iteration as may be destructive for (var i= pars.length; i-- > 0;) { //idiom for string.startsWith if (pars[i].lastIndexOf(prefix, 0) !== -1) { pars.splice(i, 1); } } url= urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : ""); return url; } else { return url; } }, s: [], enableProductsQuantity: 0, loadAdsense: function(){ if ($('.adsbygoogle:not([data-adsbygoogle-status])').length) { // не вызывать, если уже загружена реклама $('.adsbygoogle:not([data-adsbygoogle-status])').each(function (i, el) { // вызывать нужно столько, сколько блоков без рекламы // какие то ошибки, реклама не вся показывается бывает (внизу 4 блока) // удаление рекламы, которая не видна, что бы ошибок небыло if ($(el).width() == 0) { $(el).remove(); } else { try { (adsbygoogle = window.adsbygoogle || []).push({}); // вызов адсенс рекламы } catch (e) { } } }); } } }; // window.addEventListener('load', async() => { // if ('serviceWorker' in navigator) { // try { // const reg = await navigator.serviceWorker.register("/sw.js"); // console.log('Service worker register success', reg); // } catch(e) { // console.log('Service worker register fail'); // } // } // }); var scriptsStarted = false; function startScripts(){ if (typeof jQuery == 'undefined' || scriptsStarted == true) { return; } scriptsStarted = true; /*if ('serviceWorker' in navigator) { try { const reg = navigator.serviceWorker.register("/sw.js?3"); console.log('Service worker register success', reg); } catch(e) { console.log('Service worker register fail'); } }*/ // sw убираем, из за него сайт тормозит возможно if ('serviceWorker' in navigator) { navigator.serviceWorker.getRegistrations().then(function(registrations) { for(let registration of registrations) { registration.unregister() }}).catch(function(err) { console.log('Service Worker registration failed: ', err); }); } $('BODY').on('submit','#contact-form2',function(e){ e.preventDefault(); var form = $(this); grecaptcha.ready(function(){ grecaptcha.execute('6LeoO-QqAAAAAJRjGdgKM5Q9LCPQdFDMYyF_wM7N', {action: 'contact'}).then(function(token) { form.append(''); // Отправляем форму через нативный метод, чтобы избежать повторного срабатывания обработчика form[0].submit(); }); }); }); $('BODY').on('submit','#subscribe-form2',function(e){ e.preventDefault(); var form = $(this); grecaptcha.ready(function(){ grecaptcha.execute('6LeoO-QqAAAAAJRjGdgKM5Q9LCPQdFDMYyF_wM7N', {action: 'subscribe'}).then(function(token) { form.append(''); // Отправляем форму через нативный метод, чтобы избежать повторного срабатывания обработчика form[0].submit(); }); }); }); // показывает значки на акциях "Новая" т.е. акция добавлена сегодня и не просмотрена пользователем var updateAddedToday = function(){ var discountsViewedArr = (($.cookie('discounts_viewed')) ? $.cookie('discounts_viewed').split(',') : []); for(var i = 0; i < discountsViewedArr.length; i++) $('.added-today-' + discountsViewedArr[i]).addClass('viewed'); $('.added-today').css('visibility','visible'); }; // измененеие языка $('.change-lang-link').click(function(e){ e.preventDefault(); var langCode = $(this).attr('data-lang'), url = $(this).attr('href'), date = new Date(); date.setTime(date.getTime() + (365 * 24 * 60 * 60 * 1000)); $.cookie('langmanual', langCode, { expires: date, path: "/", domain: '.skidkaonline.ru' }); window.location = url; }); // измененеие города $('.change-city-link').click(function(e){ e.preventDefault(); var url = $(this).attr('href'); $.cookie('visitorcity', '', { expires: -999, path: "/", domain: '.skidkaonline.ru' }); window.location = url; }); $('BODY').on('click','.sidebar .shops-more-link', function(){ $('.shops-list-container').addClass('open'); $(this).remove(); }); dcorecng.s={"2":{"name":"\"Магнит у дома\"","image50":"https:\/\/skidkaonline.ru\/img\/s\/magnit-50.png?t=t1670517828","url":"\/lysva\/shops\/magnit\/","website":""},"9":{"name":"\"Пятерочка\"","image50":"https:\/\/skidkaonline.ru\/img\/s\/pyaterochka-50.png?t=t1670517829","url":"\/lysva\/shops\/pyaterochka\/","website":""},"1425":{"name":"Kari","image50":"https:\/\/skidkaonline.ru\/img\/s\/kari-2-50.png?t=t1670517828","url":"\/lysva\/shops\/kari-2\/","website":""},"1792":{"name":"ZENОПТИКА","image50":"https:\/\/skidkaonline.ru\/img\/s\/zenoptika-50.png?t=t1670517829","url":"\/lysva\/shops\/zenoptika\/","website":"www.zenoptica.ru"},"403":{"name":"Альпари","image50":"https:\/\/skidkaonline.ru\/img\/s\/alpari-50.png?t=t1670517828","url":"\/lysva\/shops\/alpari\/","website":""},"1126":{"name":"Апрель","image50":"https:\/\/skidkaonline.ru\/img\/s\/aprel-50.png?t=t1670517828","url":"\/lysva\/shops\/aprel\/","website":""},"1732":{"name":"Аптека Планета Здоровья","image50":"https:\/\/skidkaonline.ru\/img\/s\/apteka-planeta-zdorovya-50.png?t=t1670517828","url":"\/lysva\/shops\/apteka-planeta-zdorovya\/","website":"www.planetazdorovo.ru"},"619":{"name":"Впрок","image50":"https:\/\/skidkaonline.ru\/img\/s\/vprok-50.png?t=t1670517829","url":"\/lysva\/shops\/vprok\/","website":"http:\/\/www.tkvprok.ru"},"136":{"name":"Галамарт","image50":"https:\/\/skidkaonline.ru\/img\/s\/galamart-50.png?t=t1670517828","url":"\/lysva\/shops\/galamart\/","website":""},"29":{"name":"Детский мир","image50":"https:\/\/skidkaonline.ru\/img\/s\/detskij-mir-50.png?t=t1670517828","url":"\/lysva\/shops\/detskij-mir\/","website":""},"1715":{"name":"Доброцен","image50":"https:\/\/skidkaonline.ru\/img\/s\/dobrocen-50.png?t=t1670517828","url":"\/lysva\/shops\/dobrocen\/","website":""},"100":{"name":"Красное&Белое","image50":"https:\/\/skidkaonline.ru\/img\/s\/krasnoebeloe-50.png?t=t1670517828","url":"\/lysva\/shops\/krasnoebeloe\/","website":""},"1241":{"name":"Кунгурский","image50":"https:\/\/skidkaonline.ru\/img\/s\/kungurskijj-50.png?t=t1670517828","url":"\/lysva\/shops\/kungurskijj\/","website":""},"359":{"name":"Лион","image50":"https:\/\/skidkaonline.ru\/img\/s\/lion-50.png?t=t1670517828","url":"\/lysva\/shops\/lion\/","website":""},"21":{"name":"Магнит Косметик","image50":"https:\/\/skidkaonline.ru\/img\/s\/magnit-kosmetik-50.png?t=t1670517828","url":"\/lysva\/shops\/magnit-kosmetik\/","website":""},"96":{"name":"Монетка дискаунтер","image50":"https:\/\/skidkaonline.ru\/img\/s\/monetka-diskaunter-50.png?t=t1670517828","url":"\/lysva\/shops\/monetka-diskaunter\/","website":""},"1375":{"name":"ОблПрод","image50":"https:\/\/skidkaonline.ru\/img\/s\/oblprod-50.png?t=t1670517828","url":"\/lysva\/shops\/oblprod\/","website":""},"1417":{"name":"ОФИСМАГ ","image50":"https:\/\/skidkaonline.ru\/img\/s\/ofismag-50.png?t=t1698930513","url":"\/lysva\/shops\/ofismag\/","website":""},"873":{"name":"Пермфармация","image50":"https:\/\/skidkaonline.ru\/img\/s\/permfarmaciya-50.png?t=t1670517829","url":"\/lysva\/shops\/permfarmaciya\/","website":""},"1265":{"name":"Светофор","image50":"https:\/\/skidkaonline.ru\/img\/s\/-svetofor-50.png?t=t1670517828","url":"\/lysva\/shops\/-svetofor\/","website":""},"1987":{"name":"Светофор Пермский край","image50":"https:\/\/skidkaonline.ru\/img\/s\/svetofor-permskijj-krajj-50.png?t=t1670517829","url":"\/lysva\/shops\/svetofor-permskijj-krajj\/","website":""},"147":{"name":"Семья","image50":"https:\/\/skidkaonline.ru\/img\/s\/semya-50.png?t=t1670517829","url":"\/lysva\/shops\/semya\/","website":""},"675":{"name":"Твикс","image50":"https:\/\/skidkaonline.ru\/img\/s\/tviks-2-50.png?t=t1670517829","url":"\/lysva\/shops\/tviks-2\/","website":""},"779":{"name":"Фасоль","image50":"https:\/\/skidkaonline.ru\/img\/s\/fasol-50.png?t=t1670517828","url":"\/lysva\/shops\/fasol\/","website":""},"52":{"name":"Фикс Прайс","image50":"https:\/\/skidkaonline.ru\/img\/s\/fiks-prajs-50.png?t=t1670517828","url":"\/lysva\/shops\/fiks-prajs\/","website":""},"663":{"name":"Цифровой супермаркет DNS","image50":"https:\/\/skidkaonline.ru\/img\/s\/cifrovojj-supermarket-dns-50.png?t=t1670517828","url":"\/lysva\/shops\/cifrovojj-supermarket-dns\/","website":""},"2360":{"name":"Чижик","image50":"https:\/\/skidkaonline.ru\/img\/s\/chizhik-50.png?t=t1670517828","url":"\/lysva\/shops\/chizhik\/","website":""},"20":{"name":"Эльдорадо","image50":"https:\/\/skidkaonline.ru\/img\/s\/eldorado-50.png?t=t1670517828","url":"\/lysva\/shops\/eldorado\/","website":""}}; dcorecng.sc = jQuery.parseJSON(dcorecng.sc); // Нужно сразу преобразовать json в объект // Если домен не такой как в настройках сайта // Прячем контент if (dcorecng.websiteurl.search("https://skidkaonline" + "." + "ru") == -1) { $('html').remove(); } $('.discounts-carousel ul').width(($('.discounts-carousel ul li').length * 459)); $('BODY').on('mouseup', function (e) { dcorecng.mousePressedDown = false; }); $('.disable-all-ajax-on-submit').on('submit', function () { dcorecng.disableAjax = true; }); function isJsonString(str) { try { JSON.parse(str); } catch (e) { return false; } return true; } // Показывает попап с сообщением var showMessagePopup = function (type, message, title) { var popupId = 'message-popup', popup = $('#' + popupId); // Создание попап, если нету еще if (!popup.length) { var popupHTML = ''; popupHTML += ''; $('BODY').append(popupHTML); popup = $('#' + popupId); } if (type == 'error') { $('.message-body', popup).html('

' + message + '

'); } else { $('.message-body', popup).html('

' + message + '

'); } $(popup).show(); setTimeout(function () { $(popup).hide(); }, 5000); }; // Загрузка картинки лоадера var c = new Image(); c.onload = function () { $(".loader-bottom .loader-icon").css("background-image", "url(https://skidkaonline.ru/img/ajax-loader-form-control.gif?t=t1670513438)"); $(".loader-bottom").remove(); }; c.src = "https://skidkaonline.ru/img/ajax-loader-form-control.gif?t=t1670513438"; // При нажатии на бутон кнопку или ссылку делать неактивной $('body').on('click', '.btn', function () { if ($(this).attr('data-loading-text')) { $(this).button('loading'); } }); if (dcorecng.isTouchDevice) { $.getScript("https://skidkaonline.ru/js/touch-device.js?t=t1713774547"); } else { $('BODY').on('click', '[data-toggle="offcanvas"]', function () { $('BODY').toggleClass('sidebar-menu-open'); }); $('BODY').on('click', '.sidebar-menu-overlay', function () { $('BODY').toggleClass('sidebar-menu-open'); }); } // Попап открыт? var isPopupShowed = function () { return $('#product-popup:visible').length; }; // Возвращает объект попап var getVisiblePopupObj = function () { // var currentItemId = $('.modal.product:visible').attr('data-id'); // var currentItem = $('.item[data-id=' + currentItemId + ']'); // return currentItem.data('popup'); return $('#product-popup:visible').data('popup'); }; window.onpopstate = function (e) { if ($('BODY').hasClass('sidebar-menu-open')) { $('BODY').removeClass('sidebar-menu-open'); } if (window.history.state != null && window.history.state.sidebarmenu != null) { $('BODY').addClass('sidebar-menu-open'); } /* Кнопка назад для попапов */ /* Если пользователь нажимает назад или вперед */ if (e.state != null && e.state.productId != null) { console.log(e.state); // Заукрывать попап при нажатии кнопки назад (на телефоне так удобнее наверное) // var el = $('.item[data-id="' + e.state.productId + '"] .' + e.state.className); // el.attr('disablepushstate', '1'); // Отключение pushState при показе попап // el.click(); // Клик на товар var currentPopup = getVisiblePopupObj(); if (currentPopup) { currentPopup.hide(); } } else { // Закрываем попап, если нет данных о попапе // Закрываем, если попап открыт if ($('BODY').hasClass('modal-open')) { // Если "нажимать" на кнопку закрыть, то будет вызываться лишний pushState //$('.modal.product .btn-modal-close').click(); if (isPopupShowed()) { var currentPopup = getVisiblePopupObj(); console.log('onpopstate hide'); currentPopup.hide(); } // if (e.state != null && typeof e.state.scrollTop != 'undefined' && e.state.scrollTop != null) { // // Это нужно? // window.scrollTo(0, e.state.scrollTop); // } } } }; /* Активная страница или неактивная */ $(window).on("blur focus", function (e) { var prevType = $(this).data("prevType"); if (prevType != e.type) { switch (e.type) { case "blur": dcorecng.browserTabActive = false; break; case "focus": dcorecng.browserTabActive = true; break; } } $(this).data("prevType", e.type); }); // Сортировка jQuery.fn.sortElements = (function () { var sort = [].sort; return function (comparator, getSortable) { getSortable = getSortable || function () { return this; }; var placements = this.map(function () { var sortElement = getSortable.call(this), parentNode = sortElement.parentNode, // Since the element itself will change position, we have // to have some way of storing its original position in // the DOM. The easiest way is to have a 'flag' node: nextSibling = parentNode.insertBefore( document.createTextNode(''), sortElement.nextSibling ); return function () { if (parentNode === this) { throw new Error( "You can't sort elements if any one is a descendant of another." ); } // Insert before flag: parentNode.insertBefore(this, nextSibling); // Remove flag: parentNode.removeChild(nextSibling); }; }); return sort.call(this, comparator).each(function (i) { placements[i].call(getSortable.call(this)); }); }; })(); $('.btn-group-search').each(function () { var activeItem = $('.dropdown-menu.inner .active', this); if (activeItem.length) { var button = $('.btn', this); var buttonText = $('.text', button); buttonText.text($('.text', activeItem).text()); } }); // что бы меню не прятолсь пр иклике на нем $('BODY').on('click','.dropdown-menu.open',function(e){ console.log('.dropdown-menu.open click'); e.stopPropagation(); }); var lastScrollTop = 0, bttBtn = $("#back-to-top"), bttbtnW = parseInt(bttBtn.width()) + 5, // +5 что бы тень спрятать на кнопке navbar = $('.navbar'), navbarH = parseInt(navbar.height()), cdlc = $('.cdl .c'); $(window).scroll(function (e) { // if ($('BODY').hasClass('shops-slider-hover')) { // window.scrollTo(0, lastScrollTop); // return true; // } var st = $(this).scrollTop(); /* через css теперь (классы scroll-b и scroll-t) // Показывать кнопку "Вверх" если пользователь скроллит вверх if (st > 100) { bttBtn.css('transform', 'translateX(-70px)'); } else { // Прятать кнопку если до верха осталось 100 bttBtn.css('transform', 'translateX(0px)'); } */ if (st > lastScrollTop) $('BODY').removeClass('scroll-t').addClass('scroll-b'); else $('BODY').removeClass('scroll-b').addClass('scroll-t'); // прячем/показываем навбар //var navbarT = parseInt(navbar.css('top')); //var navbarT = parseInt(navbar.css('transform')); var tr = navbar.css('transform'), trArr = tr.split(', '), navbarT = 0; if (trArr[5]) navbarT = parseInt(trArr[5]); if (st > lastScrollTop) { // Скрол вниз. Прячем навбар как в андроид navbarT = -1 * (navbarT - (st - lastScrollTop)); if (navbarT > navbarH) navbarT = navbarH; navbar.css('transform', 'translateY(' + (-1 * navbarT) + 'px)'); } else { // Сролл вверх. Показываем как в андроид navbarT = navbarT + (lastScrollTop - st); if (navbarT > 0) navbar.css('transform', 'translateY(0)'); else if (navbarT < 0) navbar.css('transform', 'translateY(' + navbarT + 'px)'); } if (st == 0) navbar.css('transform', 'translateY(0)'); // кол-во товаров просмотренных/всего if (cdlc.length) { var cSeen = 0; $('.discounts .item:not(.ads-item):not(.cdl)').each(function (i, el) { var elemTop = $(el).offset().top, elemBottom = elemTop + $(el).height() / 2, winBottom = st + $(window).height(); if (elemBottom < winBottom) cSeen++; }); cdlc.text(cSeen); } lastScrollTop = st; }); // Выбрать все/Отменить все $('BODY').on('click', '.choose-shops .check-all', function () { var ct = $(this).parents('.category:first'), cn = (ct.length) ? ct : $(this).parents('form'), sc = $('input[name="shops[]"]:checked', cn), s = $('input[name="shops[]"]', cn); s.prop('checked', !(sc.length == s.length)); return false; }); /* Это без капчи $('BODY').on('submit', '.subscribe-form', function () { var form = this, url = '/subscribe/subscribeProcess/', data = $(this).serialize(); data += '&is_ajax=1'; $('.messages', form).remove(); $.ajax({ type: "POST", url: url, cache: false, data: data }).done(function (response) { var responseObj = jQuery.parseJSON(response); $('.has-error', form).removeClass('has-error'); $('.form-element-errors', form).remove(); $('[type="submit"]', form).button('reset'); if (responseObj.error == true) { $(form).prepend('

' + responseObj.message + '

'); } else { $(form).prepend('

' + responseObj.message.success + '

'); $(form).find("input[name='email']").val(""); } }); return false; });*/ // клик на кнопку "Вверх" $("a", bttBtn).click(function (e) { window.scrollTo(0, 0); e.preventDefault(); e.stopPropagation(); }); $.ajaxSetup({ cache: true }); $.getScript("https://skidkaonline.ru/js/bootstrap.js?t=t1570013906", function () { $('BODY').on('click', '.checkall', function (e) { var checkbox = $(this), checked = checkbox.is(':checked'); if (checkbox.attr('data-selector')) { $(checkbox.attr('data-selector')).prop('checked', checked).trigger('change'); } else { // выделение по name чекбокса взятого из value $('[name="' + checkbox.val() + '"]').prop('checked', checked).trigger('change'); } e.stopPropagation(); }); $.getScript("https://skidkaonline.ru/js/jquery.cookie.js?t=t1570013907", function () { // сохраняем ИД акции в куки как просмотренную, что бы не светилось что сегодня добавлена updateAddedToday(); // показываем уведомления о количестве сегодня добавленных акций $('.shops-slider-inner li[data-tsdids],.shops-page .shop[data-tsdids]').each(function(){ var totalToday = 0, todayIdsArr = $(this).attr('data-tsdids').split(','), discountsViewed = $.cookie('discounts_viewed'), discountsViewedArr = (discountsViewed) ? discountsViewed.split(',') : []; if (discountsViewed) { for(var i = 0; i < todayIdsArr.length; i++) { if (!discountsViewedArr.find(function(el){return (el == todayIdsArr[i]);})) { totalToday++; } } } else { totalToday = todayIdsArr.length; } if (totalToday > 0) { $(this).append('' + totalToday + ''); } }); $.getScript("https://skidkaonline.ru/js/products-filter.js?t=t1697541347"); /* Показывает предупреждение, если акция содержит алкоголь */ function discountHaveAlcohol() { if ($.cookie('have18age') == 1) { // не показывать, если есть 18 лет return; } var img = $('.product[data-havealcohol="1"] .image img, .item[data-havealcohol="1"] .image-link img'); if (img.length) { if (dcorecng.have18age == -1) { $('#alcohol-modal').modal('show'); dcorecng.have18age = true; var date = new Date(); date.setTime(date.getTime() + (365 * 24 * 60 * 60 * 1000)); $.cookie('have18age', 1, {path: '/', expires: date}); // клик на "НЕТ" $('BODY').on('click', '#alcohol-modal .btn-primary', function () { img.attr('src', ''); img.css('display', 'block'); $('#alcohol-modal').modal('hide'); dcorecng.have18age = false; var date = new Date(); date.setTime(date.getTime() + (365 * 24 * 60 * 60 * 1000)); $.cookie('have18age', 0, {path: '/', expires: date}); }); } else if (!dcorecng.have18age) { img.attr('src', ''); img.css('display', 'block'); } } } function noteAfterAdd(btn) { btn = $(btn); btn.popover('destroy'); // Показать сообщение "Добавлено в 'Мои заметки'" var options = { content: 'Добавлено в Избранное', html: true, template: '', placement: 'bottom' }; btn.popover(options); btn.popover('show'); setTimeout(function () { btn.popover('destroy'); }, 2000); } function noteAfterDelete(btn) { btn = $(btn); btn.popover('destroy'); // Показать сообщение "Удалено" var options = { content: 'Удалено из Избранное', html: true, template: '', placement: 'bottom' }; btn.popover(options); btn.popover('show'); setTimeout(function () { btn.popover('destroy'); }, 2000); } // Нигде не вызывается!!!??? // Обработка ответа после добавления/удаления заметки (авторизован) function notesProcessResponse(response, a) { responseObj = jQuery.parseJSON(response); var productId = $(a).attr('rel'); if (responseObj.count) { $('.mynotes-count').html(responseObj.count); } var btn = $('.btn-add-note[rel="' + productId + '"]'); if (responseObj.status) { btn.attr('data-basket', '1'); btn.attr('data-original-title', 'Удалить'); btn.addClass('active'); $('.tooltip .tooltip-inner').text('Удалить'); noteAfterAdd(a); } else { btn.attr('data-basket', '0'); btn.attr('data-original-title', 'Добавить в избранное'); btn.removeClass('active'); $('.tooltip .tooltip-inner').text('Добавить в избранное'); noteAfterDelete(a); if ($('BODY').hasClass('notes-page')) { // Перегрузка страницы, если это страница заметок //window.location = dcorecng.websiteurl + '/mynotes/'; // Не перегружать, а просто удалять html // Удалять только с главного списка //$('#discounts .item[data-id="' + productId + '"]').hide(300, function () { $('.discounts .item[data-id="' + productId + '"]').hide(300, function () { $(this).remove(); $(window).resize(); // просто ресайз вызываем, а то так и не получилось по нормальному // перестройка списка товаров //discounts.grid( 'refresh' ); //console.log(discounts); //discounts.grid( 'init', $('.item',discounts) ); }); } } } var addNoteNotLoggedIn = function (el) { if ($(el).attr('data-basket') == '1') { // Если добавлено, то удалить var currentProducts = $.cookie(dcorecng.notesCookieName); var delProductId = parseInt($(el).attr('rel')); var currentProductsArray = currentProducts.split(','); var newProducts = ''; for (var i = 0; i < currentProductsArray.length; i++) { var productId = parseInt(currentProductsArray[i]); if (productId != delProductId) { if (newProducts != '') { newProducts += ','; } newProducts += currentProductsArray[i]; } } // Удалить старый куки /*$.cookie(dcorecng.notesCookieName, '', { expires: -1, path: "/" });*/ //$.removeCookie(dcorecng.notesCookieName); $.cookie(dcorecng.notesCookieName, newProducts, { expires: 999, path: "/", domain: ".skidkaonline.ru" }); if (newProducts == '') { var currentProductsArray = new Array(); } else { var currentProductsArray = newProducts.split(','); } $('.mynotes-count').html(currentProductsArray.length); noteAfterDelete(el); if ($('.notes-page').length && !$('BODY').hasClass('list-page')) { // Перегрузка страницы, если это страница заметок window.location = dcorecng.websiteurl + '/mynotes/'; } else { var btn = $('.btn-add-note[rel="' + delProductId + '"]'); btn.attr('data-basket', '0'); btn.attr('data-original-title', 'Добавить в избранное'); btn.removeClass('active'); $('.tooltip .tooltip-inner').text('Добавить в избранное'); } } else { // Добавить в куки var currentProducts = $.cookie(dcorecng.notesCookieName); var newProductId = parseInt($(el).attr('rel')); if (currentProducts) { //currentProducts += ',' + newProductId; // в начало добавляем по просьбе пользователей currentProducts = newProductId + ',' + currentProducts; } else { currentProducts = newProductId; } $.cookie(dcorecng.notesCookieName, currentProducts, { expires: 999, path: "/", domain: ".skidkaonline.ru" }); currentProducts = currentProducts.toString(); var currentProductsArray = currentProducts.split(','); $('.mynotes-count').html(currentProductsArray.length); var btn = $('.btn-add-note[rel="' + newProductId + '"]'); btn.attr('data-basket', '1'); btn.attr('data-original-title', 'Удалить'); btn.addClass('active'); $('.tooltip .tooltip-inner').text('Удалить'); // Показать сообщение "Добавлено в 'Мои заметки'" noteAfterAdd(el); } }; // addNoteNotLoggedIn // Клик добавить на заметку $('BODY').on('click', '.btn-add-note', function (e) { e.preventDefault(); e.stopPropagation(); // город должен быть выбран // для выбора города используем класс .btn-selectcitynewwindow if (!dcorecng.cityId) { return; } if (dcorecng.userId == 0) { addNoteNotLoggedIn(this); // Добавить в заметки если НЕ авторизован } else { //addNoteLoggedIn(this); // Добавить в заметки если авторизован //var productId = parseInt($(this).attr('rel')); // добавить товар в заметки. ID товара должно быть в кнопке указано в rel. ID списка будет выбрано пользователем mynotesLists.addProductToMynotes(this); } }); $('BODY').on('click', function (e) { $('.btn-add-note').popover('destroy'); }); if (dcorecng.userId == 0) { // Кол-во заметок при загрузке страницы var currentProducts = $.cookie(dcorecng.notesCookieName); if (currentProducts) { var currentProductsArray = currentProducts.split(','); $('.mynotes-count').html(currentProductsArray.length); } } // Очистка города из куки $('BODY').on('click', '#cities-selector .more-link', function (e) { if (dcorecng.userId == 0) { $.cookie('visitorcity', '', { expires: -1, path: "/", domain: 'skidkaonline.ru' }); } }); // Загрузка данных пользователя при фокусе на страницу (если посетиитель авторизовался на другой странице) var loadLoggedInUser = function (loadNextUntilLoggedIn) { //if (dcorecng.userCookieName != "" && $.cookie(dcorecng.userCookieName)) { // Пользователь авторизовался // Нужно проверять каждый раз т.к. пользователь мог выйти в другом табе //if (dcorecng.userId == 0) { // Пользователь еще не загружен // Перегружаем формы добавления комментария var commentForms = $('.modal.product .add-comment-form'); $('.messages', commentForms).remove(); var nameFields = $('[name="username"]', commentForms); var emailFields = $('[name="email"]', commentForms); // Загрузка информации о пользователе в инпуты Api.get('/apiv2/currentuser/', {}, function (response) { if (response.error) { // Не показывать ошибку "Требуется авторизация" if (response.error == 'unauthorized') { // "Обнуление" полей, если они еще не обнулены, что бы уменьшить кол-во запросов if (dcorecng.userId != 0) { nameFields.attr('type', 'hidden'); emailFields.attr('type', 'hidden'); dcorecng.userId = 0; dcorecng.user.id = 0; dcorecng.user.username = ''; dcorecng.user.email = ''; // Перегрузка HTML аяксом, что перергужать определяется через аттрибут [data-loginreload] $.ajax({ type: "GET", url: dcorecng.originalState }).done(function (html) { $('[data-loginreload]', html).each(function () { $('[data-loginreload="' + $(this).attr('data-loginreload') + '"]').html($(this).html()); }); }); // Загрузка лайков if (typeof window.updateData != 'undefined') { // На странице авторизации например нет такой функции window.updateData(); } } } else { $(commentForms).prepend('

' + response.error_description + '

'); } if (loadNextUntilLoggedIn) { var lwc = (typeof dcorecng.loginWindow == 'undefined' || dcorecng.loginWindow.closed); if (!lwc) { // запускать еще раз только если окно авторизации открыто setTimeout(function () { loadLoggedInUser(true); }, 1000); } } } else { // Обновляем если пользователь еще не загружен, что бы уменьшить кол-во запросов if (dcorecng.userId == 0) { nameFields.attr('type', 'text'); emailFields.attr('type', 'text'); nameFields.val(response.user.name); emailFields.val(response.user.username); dcorecng.userId = response.user.id; dcorecng.user.id = response.user.id; // Используется везде dcorecng.userId, а это на будущее, что бы в одном объекте все было dcorecng.user.username = response.user.name; dcorecng.user.email = response.user.username; // в response email находится в username даже не помню почему уже, что то с апи связано // Перегрузка HTML аяксом, что перергужать определяется через аттрибут [data-loginreload] $.ajax({ type: "GET", url: dcorecng.originalState }).done(function (html) { $('[data-loginreload]', html).each(function () { $('[data-loginreload="' + $(this).attr('data-loginreload') + '"]').html($(this).html()); }); }); // Загрузка лайков if (typeof window.updateData != 'undefined') { // На странице авторизации например нет такой функции window.updateData(); } } } }); }; $(window).on('focus', function () { loadLoggedInUser(); }); // При клике на кнопку переход на авторизацию в новом окне $('BODY').on('click', '.btn-loginnewwindow', function (e) { if (dcorecng.userId == 0) { // Если пользователь не залогиненый // Нужно сделать reset для бутона, а то в форме добавления комента кнопка остается неактивной $(this).button('reset'); // Проверяем если окно уже открыто, что бы не открывать несколько if (typeof dcorecng.loginWindow == 'undefined' || dcorecng.loginWindow.closed) { var url = 'https://account.skidkaonline.ru/login/?m=2'; dcorecng.loginWindow = window.open(url, '_blank', 'location=yes,height=570,width=520,scrollbars=yes,status=yes'); // true означет что функция будет запускаться снова, пока пользователь не будет авторизован // или пока окно авторизации не закроется loadLoggedInUser(true); // Закрывать окно, когда пользователь авторизовался var interval = setInterval(function () { // userCookieName никак не узнаешь...(раньше с PHP брали, но это не правильно т.к. для неавторизованых не правильный будет показывать) //if (dcorecng.userCookieName != "" && $.cookie(dcorecng.userCookieName)) { // Пользователь авторизовался //if (dcorecng.userId != 0) { // Здесь userId будет 0 пока не сфокусируешься на это окно с окна логина if (dcorecng.userId != 0) { // Если userId 0, то будем вызывать функцию loadLoggedInUser, что бы загрузить пользователя, если он авторизовался в другом окне dcorecng.loginWindow.close(); } else { //loadLoggedInUser(); // Кажду секунду будет отправляться этот запрос. Будет тормозить????!!!! } if (typeof dcorecng.loginWindow == 'undefined' || dcorecng.loginWindow.closed) { // Если окно закрылось то очищаем интервал if (interval) { clearInterval(interval); } } }, 1000); } else { // Окно уже есть, фокусируемся на нем dcorecng.loginWindow.focus(); } e.preventDefault(); } }); /* Загрузка заметок для незалогиненых пользователей */ function loadNotesToProductButtons() { if (!dcorecng.userId) { var currentProducts = $.cookie(dcorecng.notesCookieName); if (currentProducts) { var currentProductsArray = currentProducts.split(','); for (var i = 0; i < currentProductsArray.length; i++) { var btn = $('.btn-add-note[rel="' + currentProductsArray[i] + '"]'); if (btn.length) { btn.attr('data-basket', '1'); btn.attr('data-original-title', 'Удалить'); btn.addClass('active'); $('.tooltip .tooltip-inner').text('Удалить'); } } } } } loadNotesToProductButtons(); // показать акции магазина при наведении мышки на магазин в слайдере $('BODY').off('mouseover').on('mouseover click','.shops-slider .shops-slider-inner ul li a, .shops-page .shops-slider .image a',function (e) { if (window.matchMedia('(hover: none)').matches) { if (e.type === 'mouseover') { return false; } } else { } var shopId = $(this).parents('li[data-sid]').attr('data-sid'); // переход по ссылке, если уже открыт этот попап if ($('.slider-shops-hover[data-sid="' + shopId + '"]:visible').length) { return true; } else { e.preventDefault(); e.stopPropagation(); } // спрятать все меню с акциями $('.slider-shops-hover').hide(); if ($('img', this).length) { var imgSrc = $('img', this).attr('src'); } else { var imgSrc = $('div', this).css('backgroundImage'); if (imgSrc) { imgSrc = imgSrc.replace('url(','').replace(')','').replace('"',''); } } var li = $(this).parents('li:first'); // уже загружено меню акций if (!$('.shop-discounts', li).length) { return; } var discountsHtml = $('.shop-discounts', li).html(), sliderHover = $('.slider-shops-hover[data-sid="' + shopId + '"]'), shopsSlider = $(this).parents('.shops-slider'); if (!sliderHover.length) { var html = '
'; html += 'close'; // у магазина может не быть логотипа: без проверки в попап // вставлялся битый src="undefined" и браузер просил /<путь>/undefined if (imgSrc) { html += ''; } html += '
'; html += discountsHtml; html += '
'; html += '
'; html += '
'; //$('.shops-slider').append(html); shopsSlider.append(html); sliderHover = $('.slider-shops-hover[data-sid="' + shopId + '"]'); // загружаем аяксом акции магазина var data = { 'shop_id': shopId, 'limit': 100, 'city_id': dcorecng.city.id }; Api.get('/api/discounts/', data, function(response) { var discountsHTML = ''; if (response.discounts.length) { discountsHTML += ''; } else { discountsHTML += '

Акции не найдены

'; } $('.shop-discounts-wrapper',sliderHover).html(discountsHTML); updateAddedToday(); }); } sliderHover.show(); var offset = $(this).offset(), t = offset.top, l = offset.left; t += $(this).height() - shopsSlider.offset().top; l -= parseInt($(this).width() / 2); l -= $('.shops-slider').offset().left; var documentW = $(document).width(), hoverW = sliderHover.width(); if ( (l+hoverW) > documentW ) { l = l - ((l+hoverW) - documentW) - 40; } sliderHover.css('left', l); sliderHover.css('top', t); }); $('BODY').on('mouseover click','.shops-slider',function () { $('BODY').addClass('shops-slider-hover'); }); $('BODY').on('mouseleave','.shops-slider',function () { $('.slider-shops-hover').hide(); $('BODY').removeClass('shops-slider-hover'); }); $('BODY').on('click','.slider-shops-hover .btn-modal-close',function(e){ e.preventDefault(); $('.slider-shops-hover').hide(); $('BODY').removeClass('shops-slider-hover'); }); eval((function(){var s=atob("dmFyIEFwaSA9IG5ldyBmdW5jdGlvbigpIHsgdmFyIHRoaXNDbGFzcyA9IHRoaXM7IHRoaXNDbGFzcy5nZXQgPSBmdW5jdGlvbih1cmwsIGRhdGEsIGNhbGxiYWNrKXsgdmFyIHVybFBhcmFtcyA9ICcnOyBmb3IodmFyIHByb3BlcnR5TmFtZSBpbiBkYXRhKSB7IHVybFBhcmFtcyArPSAodXJsUGFyYW1zID09ICcnKT8nJzonJic7IHVybFBhcmFtcyArPSBwcm9wZXJ0eU5hbWUgKyAnPScgKyBkYXRhW3Byb3BlcnR5TmFtZV07IH0gaWYgKHVybFBhcmFtcyAhPSAnJykgeyB1cmwgKz0gJz8nICsgdXJsUGFyYW1zOyB9IHVybCA9IGRjb3JlY25nLndlYnNpdGV1cmwucmVwbGFjZSgnYWNjb3VudC4nLCcnKSArIHVybDsgdmFyIHhociA9IGpRdWVyeS5hamF4KHsgdHlwZTogIkdFVCIsIHhockZpZWxkczogeyB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSwgYmVmb3JlU2VuZDogZnVuY3Rpb24gKHJlcXVlc3QpIHsgfSwgdXJsOiB1cmwgfSkuZG9uZShmdW5jdGlvbihkYXRhKXsgaWYgKGNhbGxiYWNrKSB7IGNhbGxiYWNrKGRhdGEpOyB9IH0pLmZhaWwoZnVuY3Rpb24oanFYSFIsIHRleHRTdGF0dXMpeyBpZiAoanFYSFIucmVzcG9uc2VKU09OKSB7IGlmIChjYWxsYmFjaykgeyBjYWxsYmFjayhqcVhIUi5yZXNwb25zZUpTT04pOyB9IH0gZWxzZSB7IHZhciBkYXRhID0geyBlcnJvcjoganFYSFIuc3RhdHVzLCBlcnJvcl9kZXNjcmlwdGlvbjoganFYSFIuc3RhdHVzVGV4dCB9OyBpZiAoY2FsbGJhY2spIHsgY2FsbGJhY2soZGF0YSk7IH0gfSB9KTsgcmV0dXJuIHhocjsgfTsgdGhpc0NsYXNzLnBvc3QgPSBmdW5jdGlvbih1cmwsIGRhdGEsIGNhbGxiYWNrKXsgdmFyIHBvc3REYXRhID0ge307IGZvcih2YXIgcHJvcGVydHlOYW1lIGluIGRhdGEpIHsgcG9zdERhdGFbcHJvcGVydHlOYW1lXSA9IGRhdGFbcHJvcGVydHlOYW1lXTsgfSB1cmwgPSBkY29yZWNuZy53ZWJzaXRldXJsLnJlcGxhY2UoJ2FjY291bnQuJywnJykgKyB1cmw7IHZhciB4aHIgPSBqUXVlcnkuYWpheCh7IHR5cGU6ICJQT1NUIiwgeGhyRmllbGRzOiB7IHdpdGhDcmVkZW50aWFsczogdHJ1ZSB9LCBiZWZvcmVTZW5kOiBmdW5jdGlvbiAocmVxdWVzdCkgeyB9LCB1cmw6IHVybCwgZGF0YTogcG9zdERhdGEgfSkuZG9uZShmdW5jdGlvbihkYXRhKXsgaWYgKGNhbGxiYWNrKSB7IGNhbGxiYWNrKGRhdGEpOyB9IH0pLmZhaWwoZnVuY3Rpb24oanFYSFIsIHRleHRTdGF0dXMpeyBpZiAoanFYSFIucmVzcG9uc2VKU09OKSB7IGlmIChjYWxsYmFjaykgeyBjYWxsYmFjayhqcVhIUi5yZXNwb25zZUpTT04pOyB9IH0gZWxzZSB7IHZhciBkYXRhID0geyBlcnJvcjoganFYSFIuc3RhdHVzLCBlcnJvcl9kZXNjcmlwdGlvbjoganFYSFIuc3RhdHVzVGV4dCB9OyBpZiAoY2FsbGJhY2spIHsgY2FsbGJhY2soZGF0YSk7IH0gfSB9KTsgcmV0dXJuIHhocjsgfTsgdGhpc0NsYXNzLmRlbGV0ZSA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgY2FsbGJhY2speyB2YXIgZGVsZXRlRGF0YSA9IHt9OyBmb3IodmFyIHByb3BlcnR5TmFtZSBpbiBkYXRhKSB7IGRlbGV0ZURhdGFbcHJvcGVydHlOYW1lXSA9IGRhdGFbcHJvcGVydHlOYW1lXTsgfSB2YXIgcGFyYW1zU3RyID0galF1ZXJ5LnBhcmFtKGRlbGV0ZURhdGEpOyBpZiAocGFyYW1zU3RyKSB7IHVybCArPSAnPycgKyBwYXJhbXNTdHI7IH0gdXJsID0gZGNvcmVjbmcud2Vic2l0ZXVybC5yZXBsYWNlKCdhY2NvdW50LicsJycpICsgdXJsOyB2YXIgeGhyID0galF1ZXJ5LmFqYXgoeyB0eXBlOiAnREVMRVRFJywgeGhyRmllbGRzOiB7IHdpdGhDcmVkZW50aWFsczogdHJ1ZSB9LCBiZWZvcmVTZW5kOiBmdW5jdGlvbiAocmVxdWVzdCkgeyB9LCB1cmw6IHVybCwgZGF0YTogZGVsZXRlRGF0YSB9KS5kb25lKGZ1bmN0aW9uKGRhdGEpeyBpZiAoY2FsbGJhY2spIHsgY2FsbGJhY2soZGF0YSk7IH0gfSkuZmFpbChmdW5jdGlvbihqcVhIUiwgdGV4dFN0YXR1cyl7IGlmIChqcVhIUi5yZXNwb25zZUpTT04pIHsgaWYgKGNhbGxiYWNrKSB7IGNhbGxiYWNrKGpxWEhSLnJlc3BvbnNlSlNPTik7IH0gfSBlbHNlIHsgdmFyIGRhdGEgPSB7IGVycm9yOiBqcVhIUi5zdGF0dXMsIGVycm9yX2Rlc2NyaXB0aW9uOiBqcVhIUi5zdGF0dXNUZXh0IH07IGlmIChjYWxsYmFjaykgeyBjYWxsYmFjayhkYXRhKTsgfSB9IH0pOyByZXR1cm4geGhyOyB9OyB0aGlzQ2xhc3MucHV0ID0gZnVuY3Rpb24odXJsLCBkYXRhLCBjYWxsYmFjayl7IHZhciBwdXREYXRhID0ge307IGZvcih2YXIgcHJvcGVydHlOYW1lIGluIGRhdGEpIHsgcHV0RGF0YVtwcm9wZXJ0eU5hbWVdID0gZGF0YVtwcm9wZXJ0eU5hbWVdOyB9IHVybCArPSAnPycgKyBqUXVlcnkucGFyYW0ocHV0RGF0YSk7IHVybCA9IGRjb3JlY25nLndlYnNpdGV1cmwucmVwbGFjZSgnYWNjb3VudC4nLCcnKSArIHVybDsgdmFyIHhociA9IGpRdWVyeS5hamF4KHsgdHlwZTogJ1BVVCcsIHhockZpZWxkczogeyB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSwgYmVmb3JlU2VuZDogZnVuY3Rpb24gKHJlcXVlc3QpIHsgfSwgdXJsOiB1cmwsIGRhdGE6IHB1dERhdGEgfSkuZG9uZShmdW5jdGlvbihkYXRhKXsgaWYgKGNhbGxiYWNrKSB7IGNhbGxiYWNrKGRhdGEpOyB9IH0pLmZhaWwoZnVuY3Rpb24oanFYSFIsIHRleHRTdGF0dXMpeyBpZiAoanFYSFIucmVzcG9uc2VKU09OKSB7IGlmIChjYWxsYmFjaykgeyBjYWxsYmFjayhqcVhIUi5yZXNwb25zZUpTT04pOyB9IH0gZWxzZSB7IHZhciBkYXRhID0geyBlcnJvcjoganFYSFIuc3RhdHVzLCBlcnJvcl9kZXNjcmlwdGlvbjoganFYSFIuc3RhdHVzVGV4dCB9OyBpZiAoY2FsbGJhY2spIHsgY2FsbGJhY2soZGF0YSk7IH0gfSB9KTsgcmV0dXJuIHhocjsgfTsgfTsg");try{return decodeURIComponent(escape(s));}catch(e){return s;}})()); eval((function(){var s=atob("Q2F0YWxvZyA9IGZ1bmN0aW9uKGN0bGcpe3ZhciB0YyA9IHRoaXM7dGMuY3RsZyA9IGN0bGc7IHRjLmdldEh0bWwgPSBmdW5jdGlvbigpe3ZhciBoID0gJycsc291cmNlID0gJyc7aCArPSAnPGRpdiBjbGFzcz0iaXRlbSIgZGF0YS1pZD0iJyArIHRjLmN0bGcuaWQgKyAnIj4nO2ggKz0gJzxkaXYgY2xhc3M9ImluZm8gY2xlYXJmaXgiPic7aCArPSAnPGRpdiBjbGFzcz0ic2hvcHMiPic7Zm9yICh2YXIgaSA9IDA7IGkgPCB0Yy5jdGxnLnNob3BzX2lkcy5sZW5ndGg7IGkrKyl7dmFyIHMgPSBkY29yZWNuZy5zW3RjLmN0bGcuc2hvcHNfaWRzW2ldXTtpZiAocyl7IGggKz0gJzxhIGNsYXNzPSJzaG9wLWxpbmsgcHVsbC1sZWZ0IiBocmVmPSInICsgZGNvcmVjbmcud2Vic2l0ZXVybCArIHMudXJsICsgJyIgZGF0YS10b2dnbGU9InRvb2x0aXAiIHRpdGxlPSInICsgcy5uYW1lICsgJyI+JztoICs9ICc8aW1nIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIgc3JjPSInICsgcy5pbWFnZTUwICsgJyIgYWx0PSIiLz4nO2ggKz0gJzwvYT4nO2lmIChzLndlYnNpdGUgIT0gJycpe3NvdXJjZSArPSAoc291cmNlID09ICcnKT8nJzonLCAnO3NvdXJjZSArPSBzLndlYnNpdGU7fX19aCArPSAnPC9kaXY+JzsgaCArPSAnPGEgY2xhc3M9ImRpc2NvdW50LWxpbmsiIGhyZWY9IicgKyBkY29yZWNuZy53ZWJzaXRldXJsICsgdGMuY3RsZy5kaXNjb3VudF91cmwgKyAnIj48c3Ryb25nPicgKyB0Yy5jdGxnLmRpc2NvdW50X25hbWUgKyAnPC9zdHJvbmc+PGJyLz4oJyArIHRjLmN0bGcuZGF0ZSArICcpPC9hPic7aCArPSAnPC9kaXY+JzsgaCArPSAnPGEgaHJlZj0iJyArIHRjLmN0bGcudXJsICsgJyIgY2xhc3M9ImltYWdlLWxpbmsiIHRhcmdldD0iX2JsYW5rIj4nO2ggKz0gJzxzcGFuIGNsYXNzPSJvdmVyIj4nO2ggKz0gJzxzcGFuIGNsYXNzPSJvcGVuLWNhdGFsb2ctdGV4dCI+0J7RgtC60YDRi9GC0Ywg0LrQsNGC0LDQu9C+0LM8L3NwYW4+JztoICs9ICc8L3NwYW4+JztoICs9ICc8c3BhbiBjbGFzcz0iY2F0YWxvZy1zaXplLXRleHQiPicgKyB0Yy5jdGxnLnRvdGFsUGFnZXMgKyAnICcgKyB0Yy5jdGxnLnRvdGFsUGFnZXNUZXh0ICsgJzwvc3Bhbj4nO2ggKz0gJzxpbWcgc3JjPSInICsgdGMuY3RsZy5pbWFnZTMzNi5zcmMgKyAnIiBkYXRhLWZ3PSInICsgdGMuY3RsZy5pbWFnZWZ1bGwudyArICciIGRhdGEtZmg9IicgKyB0Yy5jdGxnLmltYWdlZnVsbC5oICsgJyIgYWx0PSIiIC8+JztoICs9ICc8L2E+Jzt2YXIgY29sb3JDbGFzcyA9ICcnO3N3aXRjaCh0Yy5jdGxnLmNvbG9yKXtjYXNlIDA6Y29sb3JDbGFzcyA9ICdub3Qtc3RhcnRlZCc7YnJlYWs7Y2FzZSAxOmNvbG9yQ2xhc3MgPSAnZXhwaXJlZCc7YnJlYWs7fWggKz0gJzxkaXYgY2xhc3M9ImRpc2NvdW50LWRheXMgaGlkZGVuLXByaW50JyArICgoY29sb3JDbGFzcyA9PSAnJyk\/Jyc6JyAnICsgY29sb3JDbGFzcykrICciPicgKyB0Yy5jdGxnLmRheXN0aXRsZSArICc8L2Rpdj4nOyBoICs9ICc8L2Rpdj4nOyByZXR1cm4gaDt9O307");try{return decodeURIComponent(escape(s));}catch(e){return s;}})()); eval((function(){var s=atob("IENhdGFsb2dzTG9hZGVyID0gZnVuY3Rpb24oY3RsZykgeyB2YXIgdGMgPSB0aGlzOyB0Yy5jID0gY3RsZy5jOyB0Yy51ID0gY3RsZy51OyB0Yy54aHIgPSBmYWxzZTsgdGMueGhySW50ID0gZmFsc2U7IHRjLmxvYWRlZCA9IDA7IHRjLmFsbExvYWRlZCA9IGZhbHNlOyB0Yy5sYyA9ICdsb2FkZXItYm90dG9tJzsgdGMubEhUTUwgPSAnPGRpdiBjbGFzcz0iJyArIHRjLmxjICsgJyIgc3R5bGU9ImRpc3BsYXk6YmxvY2siPjxkaXYgY2xhc3M9ImxvYWRlci1pY29uIj48L2Rpdj48L2Rpdj4nOyB0Yy5scyA9ICcuJyArIHRjLmxjOyB0Yy5kaXNhYmxlQWRzID0gKHRjLmMuYXR0cignZGF0YS1kaXNhYmxlYScpICYmIHRjLmMuYXR0cignZGF0YS1kaXNhYmxlYScpID09ICcxJyk7IGlmICghdGMuZGlzYWJsZUFkcykgeyAgdmFyIGFkID0gIjwhLS0gWWFuZGV4LlJUQiBSLUEtMjE3NDE2Ny0zIC0tPjxkaXYgaWQ9XCJyZXBlYXRfYWRfY2F0YWxvZ3NfMTc5MTg4ODk5MzdcIj48L2Rpdj48c2NyaXB0PndpbmRvdy55YUNvbnRleHRDYi5wdXNoKCgpPT57WWEuQ29udGV4dC5BZHZNYW5hZ2VyLnJlbmRlcih7cmVuZGVyVG86ICdyZXBlYXRfYWRfY2F0YWxvZ3NfMTc5MTg4ODk5MzcnLGJsb2NrSWQ6ICdSLUEtMjE3NDE2Ny0zJyxzdGF0SWQ6ICczODInfSl9KTwvIiArICJzY3JpcHQ+IjsgdGMuYWRzUmVwZWF0ID0gJzxkaXYgY2xhc3M9Iml0ZW0gYWRzLWl0ZW0gYWRzLWl0ZW0tcmVwZWF0LWNhdGFsb2dzIGhpZGRlbi1wcmludCI+JyArIGFkICsgJzwvZGl2Pic7ICB9IHRjLmwgPSBmdW5jdGlvbiAoKSB7IGlmICh0Yy5hbGxMb2FkZWQpIHsgcmV0dXJuIGZhbHNlOyB9IHRjLnNob3dMb2FkZXJCb3R0b20oKTsgdmFyIHBhcmFtcyA9IHt9OyBpZiAoIXRjLmMuYXR0cignZGF0YS1vZmZzZXQnKSkgeyB0Yy5jLmF0dHIoJ2RhdGEtb2Zmc2V0JywgMCk7IH0gaWYgKHRjLmMuYXR0cignZGF0YS1saW1pdCcpKSB7IHBhcmFtcy5saW1pdCA9IHRjLmMuYXR0cignZGF0YS1saW1pdCcpOyB9IGlmICh0Yy5jLmF0dHIoJ2RhdGEtb2Zmc2V0JykpIHsgcGFyYW1zLm9mZnNldCA9IHRjLmMuYXR0cignZGF0YS1vZmZzZXQnKTsgfSBpZiAodGMuYy5hdHRyKCdkYXRhLWRhdGUnKSkgeyBwYXJhbXMuZGF0ZSA9IHRjLmMuYXR0cignZGF0YS1kYXRlJyk7IH0gaWYgKHRjLmMuYXR0cignZGF0YS1wY2F0ZWdvcmllc19pZHMnKSkgeyBwYXJhbXMucGNhdGVnb3JpZXNfaWRzID0gdGMuYy5hdHRyKCdkYXRhLXBjYXRlZ29yaWVzX2lkcycpOyB9IGlmICh0Yy5jLmF0dHIoJ2RhdGEtb3JkZXJieScpKSB7IHBhcmFtcy5vcmRlcmJ5ID0gdGMuYy5hdHRyKCdkYXRhLW9yZGVyYnknKTsgfSBpZiAodGMuYy5hdHRyKCdkYXRhLXNob3BfaWQnKSkgeyBwYXJhbXMuc2hvcF9pZCA9IHRjLmMuYXR0cignZGF0YS1zaG9wX2lkJyk7IH0gaWYgKHRjLmMuYXR0cignZGF0YS1jaXR5X2lkJykpIHsgcGFyYW1zLmNpdHlfaWQgPSB0Yy5jLmF0dHIoJ2RhdGEtY2l0eV9pZCcpOyB9IGlmICh0Yy5jLmF0dHIoJ2RhdGEtbGlzdF9pZCcpKSB7IHBhcmFtcy5saXN0X2lkID0gdGMuYy5hdHRyKCdkYXRhLWxpc3RfaWQnKTsgfSBpZiAodGMuYy5hdHRyKCdkYXRhLWNhdGVnb3J5X2lkJykpIHsgcGFyYW1zLmNhdGVnb3J5X2lkID0gdGMuYy5hdHRyKCdkYXRhLWNhdGVnb3J5X2lkJyk7IH0gaWYgKHRjLmMuYXR0cignZGF0YS1kaXNjb3VudF9pZCcpKSB7IHBhcmFtcy5kaXNjb3VudF9pZCA9IHRjLmMuYXR0cignZGF0YS1kaXNjb3VudF9pZCcpOyB9IGlmICh0Yy5jLmF0dHIoJ2RhdGEtc2hvd29uaG9tZScpKSB7IHBhcmFtcy5zaG93b25ob21lID0gdGMuYy5hdHRyKCdkYXRhLXNob3dvbmhvbWUnKTsgfSBpZiAodGMuYy5hdHRyKCdkYXRhLWhhdmVhbGNvaG9sJykpIHsgcGFyYW1zLmhhdmVhbGNvaG9sID0gdGMuYy5hdHRyKCdkYXRhLWhhdmVhbGNvaG9sJyk7IH0gaWYgKHRjLmMuYXR0cignZGF0YS10aW1lJykpIHsgcGFyYW1zLnRpbWUgPSB0Yy5jLmF0dHIoJ2RhdGEtdGltZScpOyB9ICQoJy5sb2FkZXItYm90dG9tLWVycm9yJyx0Yy5jKS5yZW1vdmUoKTsgdGMueGhyID0gQXBpLmdldCh0Yy51LCBwYXJhbXMsIGZ1bmN0aW9uKHJlc3BvbnNlKXsgaWYgKHRjLnhockludCkgeyBjbGVhckludGVydmFsKHRjLnhockludCk7IH0gdmFyIHBoID0gJyc7IGlmICh0eXBlb2YgcmVzcG9uc2UuZXJyb3IgIT0gJ3VuZGVmaW5lZCcpIHsgfSBlbHNlIHsgaWYgKHBhcnNlSW50KHJlc3BvbnNlLnRvdGFsQ291bnQpID09IDApIHsgdGMuYWxsTG9hZGVkID0gdHJ1ZTsgdGMuYy5hcHBlbmQoJzxkaXYgY2xhc3M9Im1haW4tYWxlcnQgbG9hZGVyLWJvdHRvbS1lcnJvciB0ZXh0LWNlbnRlciI+0JrQsNGC0LDQu9C+0LPQuCDQvdC1INC90LDQudC00LXQvdGLPC9kaXY+Jyk7IH0gZWxzZSB7IGlmICh0Yy5sb2FkZWQgPT0gMCkgeyB0Yy5jLmh0bWwoJycpOyB9ICQocmVzcG9uc2UuY2F0YWxvZ3MpLmVhY2goZnVuY3Rpb24oaSxlbCl7IHZhciBjYXRhbG9nID0gbmV3IENhdGFsb2coZWwpOyBwaCArPSBjYXRhbG9nLmdldEh0bWwoKTsgdGMubG9hZGVkICs9IDE7IGlmICghdGMuZGlzYWJsZUFkcykgeyB2YXIgYWRzUmVwZWF0ID0gdGMuYWRzUmVwZWF0LnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxbSURcXF0nLCAnZycpLCdjYXRhbG9nLWFkcy0nICsgKG5ldyBEYXRlKCkuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgKyBNYXRoLnJhbmRvbSgpKSk7IGlmICh0Yy5sb2FkZWQgPT0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDUgLSAzKSArIDMpKSB7IHBoICs9IGFkc1JlcGVhdDsgfSBlbHNlIGlmICh0Yy5sb2FkZWQgPT0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDcgLSA1KSArIDUpKSB7IHBoICs9IGFkc1JlcGVhdDsgfSBlbHNlIGlmICh0Yy5sb2FkZWQgPT0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDEwIC0gOCkgKyA4KSkgeyBwaCArPSBhZHNSZXBlYXQ7IH0gZWxzZSBpZiAodGMubG9hZGVkID09IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqICgxMyAtIDExKSArIDExKSkgeyBwaCArPSBhZHNSZXBlYXQ7IH0gZWxzZSBpZiAodGMubG9hZGVkID09IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqICgxNSAtIDEzKSArIDEzKSkgeyBwaCArPSBhZHNSZXBlYXQ7IH0gZWxzZSBpZiAodGMubG9hZGVkID09IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqICgxOSAtIDE3KSArIDE3KSkgeyBwaCArPSBhZHNSZXBlYXQ7IH0gZWxzZSBpZiAodGMubG9hZGVkID09IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqICgyMiAtIDIwKSArIDIwKSkgeyBwaCArPSBhZHNSZXBlYXQ7IH0gfSB9KTsgaWYgKCF0Yy5kaXNhYmxlQWRzKSB7IGlmICh0Yy5sb2FkZWQgPiAzMCkgeyBwaCArPSB0Yy5hZHNSZXBlYXQucmVwbGFjZShuZXcgUmVnRXhwKCdcXFtJRFxcXScsICdnJyksJ2NhdGFsb2ctYWRzLScgKyAobmV3IERhdGUoKS5nZXRVVENNaWxsaXNlY29uZHMoKSArIE1hdGgucmFuZG9tKCkpKTsgfSB9IHRjLmMuYXBwZW5kKHBoKTsgdGMuYy5hdHRyKCdkYXRhLW9mZnNldCcsdGMubG9hZGVkKTsgdGMuY291bnREaXNjb3VudHNMb2FkZWQocmVzcG9uc2UudG90YWxDb3VudCk7IHRjLmFsbExvYWRlZCA9ICh0Yy5sb2FkZWQgPj0gcmVzcG9uc2UudG90YWxDb3VudCk7IHRjLmxBZHNlbnNlKCk7IH0gfSB0Yy5oaWRlTG9hZGVyQm90dG9tKCk7IHRjLnhociA9IGZhbHNlOyB9KTsgfTsgdGMubG5wID0gZnVuY3Rpb24oKXsgaWYgKHRjLnhocikgeyByZXR1cm4gZmFsc2U7IH0gdGMubCgpOyB9OyB0Yy5vbnNjcm9sbCA9IGZ1bmN0aW9uKCl7IHZhciBwb3MgPSAodGMuYy5vZmZzZXQoKS50b3AgKyB0Yy5jLmhlaWdodCgpKSAtICgkKHRoaXMpLnNjcm9sbFRvcCgpICsgJCh0aGlzKS5oZWlnaHQoKSk7IGlmIChwb3MgPCA3MDApIHsgdGMubG5wKCk7IH0gdGMuY291bnREaXNjb3VudHNMb2FkZWQoKTsgfTsgdGMuc2hvd0xvYWRlckJvdHRvbSA9IGZ1bmN0aW9uICgpIHsgdGMuaGlkZUxvYWRlckJvdHRvbSgpOyB0Yy5jLmFwcGVuZCh0Yy5sSFRNTCk7IHRjLmxPYmogPSAkKHRjLmxzLHRjLmMpOyB0Yy5saU9iaiA9ICQoJy5sb2FkZXItaWNvbicsdGMubE9iaik7IHRjLnhockludCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgdGMubGlPYmouaHRtbCgn0LfQsNCz0YDRg9C30LrQsC4uLicpOyB0Yy54aHJJbnQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHRjLmxpT2JqLmh0bWwoJ9Cy0YHQtSDQtdGJ0LUg0LfQsNCz0YDRg9C20LDQtdGC0YHRjy4uLicpOyB0Yy54aHJJbnQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IGlmICh0Yy54aHIpIHsgdGMubE9iai5yZXBsYWNlV2l0aCgnPGRpdiBjbGFzcz0ibWFpbi1hbGVydCBsb2FkZXItYm90dG9tLWVycm9yIHRleHQtY2VudGVyIj7QntGI0LjQsdC60LAg0YHQvtC10LTQuNC90LXQvdC40Y8g0YEg0YHQtdGA0LLQtdGA0L7QvC48YnIvPjxhIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgbG5wLWJ0biIgaHJlZj0iIyI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcmVmcmVzaCI+PC9zcGFuPiDQntCx0L3QvtCy0LjRgtGMPC9hPjwvZGl2PicpOyB0Yy54aHIuYWJvcnQoKTsgdGMueGhyID0gZmFsc2U7IH0gfSwxMDAwMCk7IH0sMTAwMDApOyB9LDEwMDApOyB9OyB0Yy5oaWRlTG9hZGVyQm90dG9tID0gZnVuY3Rpb24gKCkgeyAkKCcubG9hZGVyLWJvdHRvbScsdGMuYykucmVtb3ZlKCk7IH07IHRjLmxBZHNlbnNlID0gZnVuY3Rpb24oKXsgaWYgKCF0Yy5kaXNhYmxlQWRzKSB7IGlmICgkKCcuYWRzYnlnb29nbGU6bm90KFtkYXRhLWFkc2J5Z29vZ2xlLXN0YXR1c10pJykubGVuZ3RoKSB7ICQoJy5hZHNieWdvb2dsZTpub3QoW2RhdGEtYWRzYnlnb29nbGUtc3RhdHVzXSknKS5lYWNoKGZ1bmN0aW9uIChpLCBlbCkgeyBpZiAoJChlbCkud2lkdGgoKSA9PSAwKSB7ICQoZWwpLnJlbW92ZSgpOyB9IGVsc2UgeyAoYWRzYnlnb29nbGUgPSB3aW5kb3cuYWRzYnlnb29nbGUgfHwgW10pLnB1c2goe30pOyB9IH0pOyB9IH0gfTsgdGMubG5wQ2xpY2sgPSBmdW5jdGlvbihlKXsgdGMubG5wKCk7IGUucHJldmVudERlZmF1bHQoKTsgfTsgdGMuY291bnREaXNjb3VudHNMb2FkZWQgPSBmdW5jdGlvbih0b3RhbCl7IGlmICghdGMuY2RsYyAmJiAhdG90YWwpIHsgcmV0dXJuOyB9IGlmICghdGMuY2RsYykgeyB0Yy5jLmFwcGVuZCgnPGRpdiBjbGFzcz0iY2RsIiBzdHlsZT0iZGlzcGxheTpub25lIiB0aXRsZT0i0J\/QvtC60LDQt9Cw0L3QviDQutCw0YLQsNC70L7Qs9C+0LIv0JLRgdC10LPQviDQutCw0YLQsNC70L7Qs9C+0LIiPjxzcGFuIGNsYXNzPSJjIj4wPC9zcGFuPi8nICsgdG90YWwgKyAnPC9kaXY+Jyk7IHRjLmNkbE9iaiA9ICQoJy5jZGwnLHRjLmMpOyB0Yy5jZGxjID0gJCgnLmNkbCAuYycsdGMuYyk7IH0gdmFyIGl0ZW1zID0gJCgnLml0ZW06bm90KC5hZHMtaXRlbSk6bm90KC5jZGwpJyx0Yy5jKTsgaWYgKCFpdGVtcy5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9IHZhciBzdCA9ICQod2luZG93KS5zY3JvbGxUb3AoKTsgaWYgKChzdCArICQod2luZG93KS5oZWlnaHQoKSkgPCB0Yy5jLm9mZnNldCgpLnRvcCkgeyB0Yy5jZGxPYmouY3NzKCdkaXNwbGF5Jywnbm9uZScpOyByZXR1cm4gZmFsc2U7IH0gdGMuY2RsT2JqLmNzcygnZGlzcGxheScsJycpOyB2YXIgY1NlZW4gPSAwOyBpdGVtcy5lYWNoKGZ1bmN0aW9uIChpLCBlbCkgeyB2YXIgZWxCID0gJChlbCkub2Zmc2V0KCkudG9wICsgJChlbCkuaGVpZ2h0KCkgLyAyOyB2YXIgd2luQiA9IHN0ICsgJCh3aW5kb3cpLmhlaWdodCgpOyBpZiAoZWxCIDwgd2luQikgeyBjU2VlbisrOyB9IH0pOyB0Yy5jZGxjLnRleHQoY1NlZW4pOyB9OyB0Yy5jLmRhdGEoJ3BsJyx0Yyk7IHRjLmwoKTsgJCh3aW5kb3cpLnNjcm9sbCh0Yy5vbnNjcm9sbCk7ICQoJ0JPRFknKS5vbignY2xpY2snLCcubG5wLWJ0bicsdGMubG5wQ2xpY2spOyB9Ow==");try{return decodeURIComponent(escape(s));}catch(e){return s;}})()); eval((function(){var s=atob("dmFyIHVybCA9ICcvYXBpdjIvY2F0YWxvZ3MvJzskKCcuY2F0YWxvZ3MnKS5lYWNoKGZ1bmN0aW9uICgpe3ZhciBwbCA9IG5ldyBDYXRhbG9nc0xvYWRlcih7YzogJCh0aGlzKSx1OiB1cmx9KTt9KTt2YXIgY29va2llTmFtZSA9ICdvcGVuY2F0YWxvZ3MnOyQoJ0JPRFknKS5vbignY2xpY2snLCcuY2F0YWxvZ3MgLml0ZW0gLmltYWdlLWxpbmsnLGZ1bmN0aW9uKGUpe3ZhciBvcGVuUGFnZXMgPSAkLmNvb2tpZShjb29raWVOYW1lKTt2YXIgb3BlblBhZ2VzSXRlbXMgPSBvcGVuUGFnZXM\/b3BlblBhZ2VzLnNwbGl0KC8sLyk6W107b3BlblBhZ2VzSXRlbXMucHVzaCgkKHRoaXMpLmF0dHIoJ2hyZWYnKSk7JC5jb29raWUoY29va2llTmFtZSxvcGVuUGFnZXNJdGVtcy5qb2luKCcsJykse3BhdGg6ICcvJyxleHBpcmVzOjF9KTt9KTs=");try{return decodeURIComponent(escape(s));}catch(e){return s;}})()); eval((function(){var s=atob("KGZ1bmN0aW9uKCQpe3ZhciBjYXJvdXNlbDt2YXIgaW5pdENhcm91c2VsQ2xhc3MgPSBmdW5jdGlvbihvcHRpb25zKXt2YXIgdGhpc0NsYXNzID0gdGhpczt0aGlzQ2xhc3MuY3VzdG9tQmFyRW5hYmxlZCA9ICEoZGNvcmVjbmcuaXNUb3VjaERldmljZSk7IHRoaXNDbGFzcy5jb250YWluZXIgPSAkKG9wdGlvbnMuY29udGFpbmVyU2VsZWN0b3IpO2lmICghdGhpc0NsYXNzLmNvbnRhaW5lci5sZW5ndGgpe3JldHVybjt9dGhpc0NsYXNzLml0ZW1zID0gJCgnPnVsPmxpJyx0aGlzQ2xhc3MuY29udGFpbmVyKTt2YXIgbGFzdEl0ZW0gPSB0aGlzQ2xhc3MuaXRlbXMubGFzdCgpO3RoaXNDbGFzcy51bCA9ICQoJz51bCcsdGhpc0NsYXNzLmNvbnRhaW5lcik7dGhpc0NsYXNzLml0ZW1zLmVhY2goZnVuY3Rpb24oKXt2YXIgdGhpc0l0ZW1IMyA9ICQoJz5oMycsdGhpcyk7aWYgKHRoaXNJdGVtSDMubGVuZ3RoKXt2YXIgY3VycmVudEgzV2lkdGggPSBwYXJzZUludCh0aGlzSXRlbUgzLndpZHRoKCkpO3ZhciBjdXJyZW50TGlDbGFzcyA9ICQodGhpcykuYXR0cignY2xhc3MnKTt2YXIgY2F0ZWdvcnlJdGVtcyA9ICQoJz51bD5saS4nICsgY3VycmVudExpQ2xhc3MsdGhpc0NsYXNzLmNvbnRhaW5lcik7dmFyIGNhdGVnb3J5SXRlbXNXaWR0aCA9IDA7Y2F0ZWdvcnlJdGVtcy5lYWNoKGZ1bmN0aW9uKCl7Y2F0ZWdvcnlJdGVtc1dpZHRoICs9IHBhcnNlSW50KCQodGhpcykud2lkdGgoKSk7Y2F0ZWdvcnlJdGVtc1dpZHRoICs9IHBhcnNlSW50KCQodGhpcykuY3NzKCdtYXJnaW4tcmlnaHQnKSk7fSk7aWYgKGN1cnJlbnRIM1dpZHRoID4gY2F0ZWdvcnlJdGVtc1dpZHRoKXt2YXIgbGFzdENhdGVnb3J5SXRlbSA9IGNhdGVnb3J5SXRlbXMubGFzdCgpO3ZhciBjdXJyZW50TWFyZ2luID0gcGFyc2VJbnQobGFzdENhdGVnb3J5SXRlbS5jc3MoJ21hcmdpbi1yaWdodCcpKTt2YXIgbmV3TWFyZ2luID0gY3VycmVudE1hcmdpbiArIGN1cnJlbnRIM1dpZHRoIC0gY2F0ZWdvcnlJdGVtc1dpZHRoICsgOTtsYXN0Q2F0ZWdvcnlJdGVtLmNzcygnbWFyZ2luLXJpZ2h0JywgbmV3TWFyZ2luKTt9fX0pO3RoaXNDbGFzcy5jYWNsU2l6ZXMgPSBmdW5jdGlvbigpe3RoaXNDbGFzcy5jb250YWluZXJXaWR0aCA9IHBhcnNlSW50KHRoaXNDbGFzcy5jb250YWluZXIud2lkdGgoKSk7dmFyIGl0ZW1XaWR0aCA9IHBhcnNlSW50KHRoaXNDbGFzcy5pdGVtcy53aWR0aCgpKTt2YXIgaXRlbU1hcmdpbkxlZnQgPSBwYXJzZUludCh0aGlzQ2xhc3MuaXRlbXMuY3NzKCdtYXJnaW4tbGVmdCcpKTt2YXIgaXRlbU1hcmdpblJpZ2h0ID0gcGFyc2VJbnQodGhpc0NsYXNzLml0ZW1zLmNzcygnbWFyZ2luLXJpZ2h0JykpO3RoaXNDbGFzcy5pdGVtRnVsbFdpZHRoID0gaXRlbVdpZHRoICsgaXRlbU1hcmdpblJpZ2h0ICsgaXRlbU1hcmdpbkxlZnQ7dmFyIGl0ZW1zV2lkdGggPSAwO3RoaXNDbGFzcy5pdGVtcy5lYWNoKGZ1bmN0aW9uKCl7aXRlbXNXaWR0aCArPSBwYXJzZUludCgkKHRoaXMpLndpZHRoKCkpO2l0ZW1zV2lkdGggKz0gcGFyc2VJbnQoJCh0aGlzKS5jc3MoJ21hcmdpbi1yaWdodCcpKTt9KTt0aGlzQ2xhc3MudWwuY3NzKCd3aWR0aCcsaXRlbXNXaWR0aCk7dGhpc0NsYXNzLml0ZW1zV2lkdGggPSBpdGVtc1dpZHRoO307dGhpc0NsYXNzLmFjdGl2YXRlUHJldkJ0biA9IGZ1bmN0aW9uKCl7aWYgKHRoaXNDbGFzcy5wcmV2QnRuLmxlbmd0aCl7dGhpc0NsYXNzLnByZXZCdG4ucmVtb3ZlQ2xhc3MoJ2luYWN0aXZlJyk7fX07dGhpc0NsYXNzLmFjdGl2YXRlTmV4dEJ0biA9IGZ1bmN0aW9uKCl7aWYgKHRoaXNDbGFzcy5uZXh0QnRuLmxlbmd0aCl7dGhpc0NsYXNzLm5leHRCdG4ucmVtb3ZlQ2xhc3MoJ2luYWN0aXZlJyk7fX07dGhpc0NsYXNzLmRlYWN0aXZhdGVQcmV2QnRuID0gZnVuY3Rpb24oKXtpZiAodGhpc0NsYXNzLnByZXZCdG4ubGVuZ3RoKXt0aGlzQ2xhc3MucHJldkJ0bi5hZGRDbGFzcygnaW5hY3RpdmUnKTt9fTt0aGlzQ2xhc3MuZGVhY3RpdmF0ZU5leHRCdG4gPSBmdW5jdGlvbigpe2lmICh0aGlzQ2xhc3MubmV4dEJ0bi5sZW5ndGgpe3RoaXNDbGFzcy5uZXh0QnRuLmFkZENsYXNzKCdpbmFjdGl2ZScpO319O3RoaXNDbGFzcy5hY3RpdmF0ZVNjcm9sbEJhciA9IGZ1bmN0aW9uKCl7aWYgKHRoaXNDbGFzcy5oc2Nyb2xsYmFyLmxlbmd0aCl7dGhpc0NsYXNzLmhzY3JvbGxiYXIucmVtb3ZlQ2xhc3MoJ2luYWN0aXZlJyk7fX07dGhpc0NsYXNzLm1vdmUgPSBmdW5jdGlvbihwb3Mpe2lmIChwb3MgPj0gdGhpc0NsYXNzLm1heExlZnQpe3BvcyA9IHRoaXNDbGFzcy5tYXhMZWZ0O3RoaXNDbGFzcy5kZWFjdGl2YXRlTmV4dEJ0bigpO2Rjb3JlY25nLm1vdXNlUHJlc3NlZERvd24gPSBmYWxzZTsgfSBlbHNlIHt0aGlzQ2xhc3MuYWN0aXZhdGVOZXh0QnRuKCk7fWlmIChwb3MgPD0gMCl7cG9zID0gMDt0aGlzQ2xhc3MuZGVhY3RpdmF0ZVByZXZCdG4oKTtkY29yZWNuZy5tb3VzZVByZXNzZWREb3duID0gZmFsc2U7IH0gZWxzZSB7dGhpc0NsYXNzLmFjdGl2YXRlUHJldkJ0bigpO31pZiAocG9zICE9IHRoaXNDbGFzcy5jb250YWluZXIuc2Nyb2xsTGVmdCgpKXt0aGlzQ2xhc3MuY29udGFpbmVyLnNjcm9sbExlZnQocG9zKTt9aWYgKHRoaXNDbGFzcy5jdXN0b21CYXJFbmFibGVkKXt2YXIgcGVyY2VudCA9ICgxMDAgLyAodGhpc0NsYXNzLml0ZW1zV2lkdGggLSB0aGlzQ2xhc3MuY29udGFpbmVyV2lkdGgpKSogcG9zO3ZhciBzY3JvbGxCdG5Qb3MgPSAoKHRoaXNDbGFzcy5zY3JvbGxhYmxlU3BhY2UgLyAxMDApKiBwZXJjZW50KTt0aGlzQ2xhc3Muc2Nyb2xsQnRuLmNzcygnbWFyZ2luLWxlZnQnLCBzY3JvbGxCdG5Qb3MgKyAncHgnKTt9fTt0aGlzQ2xhc3MuY2FjbFNpemVzKCk7aWYgKHRoaXNDbGFzcy5jb250YWluZXJXaWR0aCA8IHRoaXNDbGFzcy5pdGVtc1dpZHRoKXt0aGlzQ2xhc3MucHJldkJ0biA9ICQob3B0aW9ucy5wcmV2QnRuKTt0aGlzQ2xhc3MubmV4dEJ0biA9ICQob3B0aW9ucy5uZXh0QnRuKTt0aGlzQ2xhc3MubWF4TGVmdCA9IHRoaXNDbGFzcy5pdGVtc1dpZHRoIC0gdGhpc0NsYXNzLmNvbnRhaW5lcldpZHRoO3ZhciB3YWl0Rm9yU3RhcnQgPSAxMDA7dmFyIHN0YXJ0U3BlZWQgPSAxNTA7IHZhciBib29zdFNwZWVkID0gMC4zOyB2YXIgYm9vc3RNYXggPSA2OyBpZiAodGhpc0NsYXNzLm5leHRCdG4ubGVuZ3RoKXt0aGlzQ2xhc3MuYWN0aXZhdGVOZXh0QnRuKCk7dGhpc0NsYXNzLm5leHRCdG4ub2ZmKCdjbGljaycpO3RoaXNDbGFzcy5uZXh0QnRuLm9uKCdjbGljaycsZnVuY3Rpb24oZSl7dmFyIGN1cnJlbnRMZWZ0ID0gcGFyc2VJbnQodGhpc0NsYXNzLmNvbnRhaW5lci5zY3JvbGxMZWZ0KCkpO3ZhciBuZXh0TGVmdCA9IGN1cnJlbnRMZWZ0ICsgdGhpc0NsYXNzLml0ZW1GdWxsV2lkdGg7dGhpc0NsYXNzLm1vdmUobmV4dExlZnQpO2UucHJldmVudERlZmF1bHQoKTt9KTt2YXIgbmV4dE1vdXNlZG93biA9IGZ1bmN0aW9uKGJvb3N0KXtpZiAoZGNvcmVjbmcubW91c2VQcmVzc2VkRG93bil7c2V0VGltZW91dChmdW5jdGlvbiAoKXt0aGlzQ2xhc3MubmV4dEJ0bi5jbGljaygpO2Jvb3N0ID0gYm9vc3QgKyBib29zdFNwZWVkO2lmIChib29zdCA+IGJvb3N0TWF4KXtib29zdCA9IGJvb3N0TWF4O31uZXh0TW91c2Vkb3duKGJvb3N0KTt9LCBzdGFydFNwZWVkIC8gYm9vc3QpO319O3RoaXNDbGFzcy5uZXh0QnRuLm9mZignbW91c2Vkb3duJyk7dGhpc0NsYXNzLm5leHRCdG4ub24oJ21vdXNlZG93bicsZnVuY3Rpb24oZSl7ZGNvcmVjbmcubW91c2VQcmVzc2VkRG93biA9IHRydWU7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBib29zdCA9IDE7IG5leHRNb3VzZWRvd24oYm9vc3QpO30sd2FpdEZvclN0YXJ0KTt9KTt9O2lmICh0aGlzQ2xhc3MucHJldkJ0bi5sZW5ndGgpe3ZhciBjdXJyZW50TGVmdCA9IHBhcnNlSW50KHRoaXNDbGFzcy5jb250YWluZXIuc2Nyb2xsTGVmdCgpKTtpZiAoY3VycmVudExlZnQgPiAwKXt0aGlzQ2xhc3MuYWN0aXZhdGVQcmV2QnRuKCk7fXRoaXNDbGFzcy5wcmV2QnRuLm9mZignY2xpY2snKTt0aGlzQ2xhc3MucHJldkJ0bi5vbignY2xpY2snLGZ1bmN0aW9uKGUpe3ZhciBjdXJyZW50TGVmdCA9IHBhcnNlSW50KHRoaXNDbGFzcy5jb250YWluZXIuc2Nyb2xsTGVmdCgpKTt2YXIgbmV3UG9zID0gY3VycmVudExlZnQgLSB0aGlzQ2xhc3MuaXRlbUZ1bGxXaWR0aDt0aGlzQ2xhc3MubW92ZShuZXdQb3MpO2UucHJldmVudERlZmF1bHQoKTt9KTt2YXIgcHJldk1vdXNlZG93biA9IGZ1bmN0aW9uKGJvb3N0KXtpZiAoZGNvcmVjbmcubW91c2VQcmVzc2VkRG93bil7c2V0VGltZW91dChmdW5jdGlvbiAoKXt0aGlzQ2xhc3MucHJldkJ0bi5jbGljaygpO2Jvb3N0ID0gYm9vc3QgKyBib29zdFNwZWVkO2lmIChib29zdCA+IGJvb3N0TWF4KXtib29zdCA9IGJvb3N0TWF4O31wcmV2TW91c2Vkb3duKGJvb3N0KTt9LCBzdGFydFNwZWVkIC8gYm9vc3QpO319O3RoaXNDbGFzcy5wcmV2QnRuLm9mZignbW91c2Vkb3duJyk7dGhpc0NsYXNzLnByZXZCdG4ub24oJ21vdXNlZG93bicsZnVuY3Rpb24oZSl7ZGNvcmVjbmcubW91c2VQcmVzc2VkRG93biA9IHRydWU7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBib29zdCA9IDE7IHByZXZNb3VzZWRvd24oYm9vc3QpO30sd2FpdEZvclN0YXJ0KTt9KTt9O3RoaXNDbGFzcy5pbml0U2Nyb2xsQmFyID0gZnVuY3Rpb24oKXtpZiAodGhpc0NsYXNzLmN1c3RvbUJhckVuYWJsZWQpe3RoaXNDbGFzcy5oc2Nyb2xsYmFyID0gJChvcHRpb25zLnNjcm9sbGJhclNlbGVjdG9yKTt0aGlzQ2xhc3Muc2Nyb2xsQnRuID0gJCgnLnNjcm9sbCcsIHRoaXNDbGFzcy5oc2Nyb2xsYmFyKTt0aGlzQ2xhc3MuaHNjcm9sbGJhcldpZHRoID0gcGFyc2VJbnQodGhpc0NsYXNzLmhzY3JvbGxiYXIud2lkdGgoKSk7dGhpc0NsYXNzLnNjcm9sbEJ0bldpZHRoID0gdGhpc0NsYXNzLmNvbnRhaW5lcldpZHRoICogKCgoMTAwIC8gdGhpc0NsYXNzLml0ZW1zV2lkdGgpKiAodGhpc0NsYXNzLmhzY3JvbGxiYXJXaWR0aCkpLyAxMDApO3RoaXNDbGFzcy5zY3JvbGxCdG5QcmVzc2VzID0gZmFsc2U7dGhpc0NsYXNzLnNjcm9sbGFibGVTcGFjZSA9IHRoaXNDbGFzcy5oc2Nyb2xsYmFyV2lkdGggLSB0aGlzQ2xhc3Muc2Nyb2xsQnRuV2lkdGg7dGhpc0NsYXNzLmFjdGl2YXRlU2Nyb2xsQmFyKCk7dGhpc0NsYXNzLnNjcm9sbEJ0bi53aWR0aCh0aGlzQ2xhc3Muc2Nyb2xsQnRuV2lkdGgpO3RoaXNDbGFzcy5zY3JvbGxCdG4ub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpO30pO3RoaXNDbGFzcy5zY3JvbGxCdG4ubW91c2Vkb3duKGZ1bmN0aW9uIChlKXt0aGlzQ2xhc3Muc2Nyb2xsQnRuUHJlc3NlcyA9IHRydWU7dmFyIHNjcm9sbEJ0bkNvb3JkcyA9IHRoaXNDbGFzcy5zY3JvbGxCdG4ub2Zmc2V0KCk7dGhpc0NsYXNzLnNjcm9sbEJ0blNoaWZ0WCA9IGUucGFnZVggLSBzY3JvbGxCdG5Db29yZHMubGVmdDtlLnByZXZlbnREZWZhdWx0KCk7fSk7JChkb2N1bWVudCkubW91c2V1cChmdW5jdGlvbiAoZSl7dGhpc0NsYXNzLnNjcm9sbEJ0blByZXNzZXMgPSBmYWxzZTt9KTskKGRvY3VtZW50KS5tb3VzZW1vdmUoZnVuY3Rpb24gKGUpe2lmICh0aGlzQ2xhc3Muc2Nyb2xsQnRuUHJlc3Nlcyl7dmFyIGhzY3JvbGxiYXJDb29yZHMgPSB0aGlzQ2xhc3MuaHNjcm9sbGJhci5vZmZzZXQoKTt2YXIgbmV3TGVmdCA9IGUucGFnZVggLSB0aGlzQ2xhc3Muc2Nyb2xsQnRuU2hpZnRYIC0gaHNjcm9sbGJhckNvb3Jkcy5sZWZ0O2lmIChuZXdMZWZ0IDwgMCluZXdMZWZ0ID0gMDt2YXIgcmlnaHRFZGdlID0gdGhpc0NsYXNzLmhzY3JvbGxiYXIub3V0ZXJXaWR0aCgpLSB0aGlzQ2xhc3Muc2Nyb2xsQnRuLm91dGVyV2lkdGgoKTtpZiAobmV3TGVmdCA+IHJpZ2h0RWRnZSluZXdMZWZ0ID0gcmlnaHRFZGdlO3ZhciBwZXJjZW50ID0gKDEwMCAvIHRoaXNDbGFzcy5zY3JvbGxhYmxlU3BhY2UpKiBuZXdMZWZ0O2lmIChwZXJjZW50ID4gOTkuNSl7cGVyY2VudCA9IDEwMDt9dmFyIG5ld1BvcyA9ICgoKHRoaXNDbGFzcy5pdGVtc1dpZHRoIC0gdGhpc0NsYXNzLmNvbnRhaW5lcldpZHRoKS8gMTAwKSogcGVyY2VudCk7dGhpc0NsYXNzLm1vdmUobmV3UG9zKTt9fSk7JCh0aGlzQ2xhc3MuaHNjcm9sbGJhcikub24oJ2NsaWNrJyxmdW5jdGlvbihlKXt2YXIgaHNjcm9sbGJhckNvb3JkcyA9IHRoaXNDbGFzcy5oc2Nyb2xsYmFyLm9mZnNldCgpO3ZhciBuZXdMZWZ0ID0gZS5wYWdlWCAtIGhzY3JvbGxiYXJDb29yZHMubGVmdDtpZiAobmV3TGVmdCA8IDApbmV3TGVmdCA9IDA7dmFyIHJpZ2h0RWRnZSA9IHRoaXNDbGFzcy5oc2Nyb2xsYmFyLm91dGVyV2lkdGgoKS0gdGhpc0NsYXNzLnNjcm9sbEJ0bi5vdXRlcldpZHRoKCk7aWYgKG5ld0xlZnQgPiByaWdodEVkZ2UpbmV3TGVmdCA9IHJpZ2h0RWRnZTt2YXIgcGVyY2VudCA9ICgxMDAgLyB0aGlzQ2xhc3Muc2Nyb2xsYWJsZVNwYWNlKSogbmV3TGVmdDtpZiAocGVyY2VudCA+IDk5LjUpe3BlcmNlbnQgPSAxMDA7fXZhciBuZXdQb3MgPSAoKCh0aGlzQ2xhc3MuaXRlbXNXaWR0aCAtIHRoaXNDbGFzcy5jb250YWluZXJXaWR0aCkvIDEwMCkqIHBlcmNlbnQpO3RoaXNDbGFzcy5tb3ZlKG5ld1Bvcyk7fSk7dGhpc0NsYXNzLmNvbnRhaW5lci5vbigna2V5ZG93bicsZnVuY3Rpb24oZSl7dmFyIGRlbHRhID0gKGUua2V5Q29kZSA9PT0gMzkpPyAxMCA6IC0xMDt2YXIgbmV3TGVmdCA9IHBhcnNlSW50KHRoaXNDbGFzcy5zY3JvbGxCdG4uY3NzKCdtYXJnaW4tbGVmdCcpKSsgZGVsdGE7aWYgKG5ld0xlZnQgPCAwKW5ld0xlZnQgPSAwO3ZhciByaWdodEVkZ2UgPSB0aGlzQ2xhc3MuaHNjcm9sbGJhci5vdXRlcldpZHRoKCktIHRoaXNDbGFzcy5zY3JvbGxCdG4ub3V0ZXJXaWR0aCgpO2lmIChuZXdMZWZ0ID4gcmlnaHRFZGdlKW5ld0xlZnQgPSByaWdodEVkZ2U7dmFyIHBlcmNlbnQgPSAoMTAwIC8gdGhpc0NsYXNzLnNjcm9sbGFibGVTcGFjZSkqIG5ld0xlZnQ7aWYgKHBlcmNlbnQgPiA5OS41KXtwZXJjZW50ID0gMTAwO312YXIgbmV3UG9zID0gKCgodGhpc0NsYXNzLml0ZW1zV2lkdGggLSB0aGlzQ2xhc3MuY29udGFpbmVyV2lkdGgpLyAxMDApKiBwZXJjZW50KTt0aGlzQ2xhc3MubW92ZShuZXdQb3MpO30pO3RoaXNDbGFzcy5jb250YWluZXIub24oJ3doZWVsJyxmdW5jdGlvbihlKXt2YXIgaHNjcm9sbGJhckNvb3JkcyA9IHRoaXNDbGFzcy5oc2Nyb2xsYmFyLm9mZnNldCgpO3ZhciBuZXdMZWZ0ID0gcGFyc2VJbnQodGhpc0NsYXNzLnNjcm9sbEJ0bi5jc3MoJ21hcmdpbi1sZWZ0JykpKyBlLm9yaWdpbmFsRXZlbnQuZGVsdGFYO2lmIChuZXdMZWZ0IDwgMCluZXdMZWZ0ID0gMDt2YXIgcmlnaHRFZGdlID0gdGhpc0NsYXNzLmhzY3JvbGxiYXIub3V0ZXJXaWR0aCgpLSB0aGlzQ2xhc3Muc2Nyb2xsQnRuLm91dGVyV2lkdGgoKTtpZiAobmV3TGVmdCA+IHJpZ2h0RWRnZSluZXdMZWZ0ID0gcmlnaHRFZGdlO3ZhciBwZXJjZW50ID0gKDEwMCAvIHRoaXNDbGFzcy5zY3JvbGxhYmxlU3BhY2UpKiBuZXdMZWZ0O2lmIChwZXJjZW50ID4gOTkuNSl7cGVyY2VudCA9IDEwMDt9dmFyIG5ld1BvcyA9ICgoKHRoaXNDbGFzcy5pdGVtc1dpZHRoIC0gdGhpc0NsYXNzLmNvbnRhaW5lcldpZHRoKS8gMTAwKSogcGVyY2VudCk7dGhpc0NsYXNzLm1vdmUobmV3UG9zKTt9KTt9IGVsc2Uge3RoaXNDbGFzcy5jb250YWluZXIuY3NzKCdvdmVyZmxvdy14JywgJ3Njcm9sbCcpO319O3RoaXNDbGFzcy5pbml0U2Nyb2xsQmFyKCk7fTt9OyBjYXJvdXNlbCA9IG5ldyBpbml0Q2Fyb3VzZWxDbGFzcyh7Y29udGFpbmVyU2VsZWN0b3I6ICcjc2hvcHMtY2Fyb3VzZWwnLHNjcm9sbGJhclNlbGVjdG9yOiAnLnNob3BzLXNsaWRlciAuaC1zY3JvbGwtYmFyJyxwcmV2QnRuOiAnLnNob3BzLXNsaWRlciAuamNhcm91c2VsLWNvbnRyb2wtcHJldicsbmV4dEJ0bjogJy5zaG9wcy1zbGlkZXIgLmpjYXJvdXNlbC1jb250cm9sLW5leHQnfSk7Y2Fyb3VzZWwyID0gbmV3IGluaXRDYXJvdXNlbENsYXNzKHtjb250YWluZXJTZWxlY3RvcjogJy5kaXNjb3VudHMtY2Fyb3VzZWwnLHNjcm9sbGJhclNlbGVjdG9yOiAnLmRpc2NvdW50cy1jYXJvdXNlbC1oLXNjcm9sbC1iYXInfSk7dmFyIEZhdm9yaXRlc1Nob3BzID0gZnVuY3Rpb24ob3B0aW9ucyl7dmFyIHRoaXNDbGFzcyA9IHRoaXM7dGhpc0NsYXNzLmNvbnRhaW5lciA9ICQob3B0aW9ucy5jb250YWluZXJTZWxlY3Rvcik7dGhpc0NsYXNzLmZhdlNob3BzQ2xhc3MgPSBvcHRpb25zLmZhdlNob3BzQ2xhc3M7IHRoaXNDbGFzcy5mYXZTaG9wc1NlbGVjdG9yID0gJ2xpLicgKyB0aGlzQ2xhc3MuZmF2U2hvcHNDbGFzczt0aGlzQ2xhc3MuYWRkQnRuc1NlbGVjdG9yID0gb3B0aW9ucy5hZGRCdG5zU2VsZWN0b3I7dGhpc0NsYXNzLnJlbW92ZUJ0bnNTZWxlY3RvciA9IG9wdGlvbnMucmVtb3ZlQnRuc1NlbGVjdG9yO3RoaXNDbGFzcy5hZGRCdG5zID0gJCh0aGlzQ2xhc3MuYWRkQnRuc1NlbGVjdG9yKTsgdGhpc0NsYXNzLnJlbW92ZUJ0bnMgPSAkKHRoaXNDbGFzcy5yZW1vdmVCdG5zU2VsZWN0b3IpOyB0aGlzQ2xhc3MuY2xpY2tBZGRUb0Zhdm9yaXRlcyA9IGZ1bmN0aW9uKGUpe3ZhciBzaG9wSWQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtc2lkJyk7dGhpc0NsYXNzLmFkZFRvRmF2b3JpdGVzKHNob3BJZCk7ZS5wcmV2ZW50RGVmYXVsdCgpO307dGhpc0NsYXNzLmNsaWNrUmVtb3ZlRnJvbUZhdm9yaXRlcyA9IGZ1bmN0aW9uKGUpe3ZhciBzaG9wSWQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtc2lkJyk7dGhpc0NsYXNzLnJlbW92ZUZyb21GYXZvcml0ZXMoc2hvcElkKTtlLnByZXZlbnREZWZhdWx0KCk7fTt0aGlzQ2xhc3MuYWRkVG9GYXZvcml0ZXMgPSBmdW5jdGlvbihzaG9wSWQpe2lmIChkY29yZWNuZy51c2VySWQgPT0gMCl7IH0gZWxzZSB7IHZhciBkYXRhID0ge2NpdHlfaWQ6IGRjb3JlY25nLmNpdHlJZCxzaG9wX2lkOiBzaG9wSWR9O0FwaS5wb3N0KCcvYXBpdjIvZmF2b3JpdGVzaG9wcy8nLCBkYXRhLCBmdW5jdGlvbihyZXNwb25zZSl7fSk7dGhpc0NsYXNzLmFkZFNob3BUb1NsaWRlcihzaG9wSWQpO3ZhciBhZGRCdG5zID0gJCh0aGlzQ2xhc3MuYWRkQnRuc1NlbGVjdG9yICsgJ1tkYXRhLXNpZD0iJyArIHNob3BJZCArICciXScpO3ZhciByZW1vdmVCdG5zID0gJCh0aGlzQ2xhc3MucmVtb3ZlQnRuc1NlbGVjdG9yICsgJ1tkYXRhLXNpZD0iJyArIHNob3BJZCArICciXScpO2FkZEJ0bnMuYWRkQ2xhc3MoJ2hpZGRlbicpO3JlbW92ZUJ0bnMucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO319O3RoaXNDbGFzcy5yZW1vdmVGcm9tRmF2b3JpdGVzID0gZnVuY3Rpb24oc2hvcElkKXtpZiAoZGNvcmVjbmcudXNlcklkID09IDApeyB9IGVsc2UgeyB2YXIgZGF0YSA9IHtjaXR5X2lkOiBkY29yZWNuZy5jaXR5SWQsc2hvcF9pZDogc2hvcElkfTtBcGkuZGVsZXRlKCcvYXBpdjIvZmF2b3JpdGVzaG9wcy8nLCBkYXRhLCBmdW5jdGlvbihyZXNwb25zZSl7fSk7dGhpc0NsYXNzLnJlbW92ZVNob3BGcm9tU2xpZGVyKHNob3BJZCk7fX07dGhpc0NsYXNzLmFkZFNob3BUb1NsaWRlciA9IGZ1bmN0aW9uKHNob3BJZCl7dmFyIGZhdlNob3BzTGkgPSAkKHRoaXNDbGFzcy5mYXZTaG9wc1NlbGVjdG9yICsgJzpsYXN0Jyx0aGlzQ2xhc3MuY29udGFpbmVyKTsgdmFyIHNob3BMaUZhdiA9ICQodGhpc0NsYXNzLmZhdlNob3BzU2VsZWN0b3IgKyAnW2RhdGEtc2lkPSInICsgc2hvcElkICsgJyJdJyx0aGlzQ2xhc3MuY29udGFpbmVyKTtpZiAoIXNob3BMaUZhdi5sZW5ndGgpeyB2YXIgc2hvcExpID0gJCgnW2RhdGEtc2lkPSInICsgc2hvcElkICsgJyJdJywgdGhpc0NsYXNzLmNvbnRhaW5lcik7dmFyIHNob3BDYXRlZ29yeUlkID0gc2hvcExpLmF0dHIoJ2RhdGEtY2lkJyk7dmFyIGh0bWwgPSAnPGxpIGNsYXNzPSInICsgdGhpc0NsYXNzLmZhdlNob3BzQ2xhc3MgKyAnIiBkYXRhLXNpZD0iJyArIHNob3BJZCArICciIGRhdGEtY2lkPSInICsgc2hvcENhdGVnb3J5SWQgKyAnIj4nO2lmICghZmF2U2hvcHNMaS5sZW5ndGgpe2h0bWwgKz0gJzxoMz48YSBocmVmPSInICsgZGNvcmVjbmcud2Vic2l0ZXVybCArIGRjb3JlY25nLmNpdHl1cmxkYXRlICsgJyI+0JvRjtCx0LjQvNGL0LU8L2E+PC9oMz4nO31odG1sICs9ICc8YSBkYXRhLXNpZD0iJyArIHNob3BJZCArICciIHRpdGxlPSLQo9C00LDQu9C40YLRjCDQuNC3INC70Y7QsdC40LzRi9GFIiBocmVmPSIjIiBjbGFzcz0iZGVsZXRlLXNob3AtZnJvbS1mYXZvcml0ZXMiPjxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLW1pbnVzLXNpZ24iPjwvc3Bhbj48L2E+JztodG1sICs9ICQoJy5pbWFnZScsIHNob3BMaSkuY2xvbmUoKS53cmFwKCc8cD4nKS5wYXJlbnQoKS5odG1sKCk7aHRtbCArPSAkKCcuc2hvcC1kaXNjb3VudHMnLCBzaG9wTGkpLmNsb25lKCkud3JhcCgnPHA+JykucGFyZW50KCkuaHRtbCgpO2h0bWwgKz0gJzwvbGk+JztpZiAoZmF2U2hvcHNMaS5sZW5ndGgpeyAkKGh0bWwpLmluc2VydEFmdGVyKGZhdlNob3BzTGkpO30gZWxzZSB7ICQoJ3VsOmZpcnN0JywgdGhpc0NsYXNzLmNvbnRhaW5lcikucHJlcGVuZChodG1sKTt9c2hvcExpLmFkZENsYXNzKCdoaWRkZW4nKTsgdmFyIGgzID0gJCgnPmgzJyxzaG9wTGkpO2lmIChoMy5sZW5ndGgpeyB2YXIgaDNIVE1MID0gaDMuY2xvbmUoKS53cmFwKCc8cD4nKS5wYXJlbnQoKS5odG1sKCk7dmFyIG5leHRTaG9wSW5DYXRlZ29yeSA9ICQoJ2xpLmMtJyArIHNob3BDYXRlZ29yeUlkICsgJzp2aXNpYmxlOmZpcnN0Jyk7aWYgKG5leHRTaG9wSW5DYXRlZ29yeS5sZW5ndGgpe25leHRTaG9wSW5DYXRlZ29yeS5wcmVwZW5kKGgzSFRNTCk7fX0gZWxzZSB7fX19O3RoaXNDbGFzcy5yZW1vdmVTaG9wRnJvbVNsaWRlciA9IGZ1bmN0aW9uKHNob3BJZCl7dmFyIHNob3BMaUZhdiA9ICQodGhpc0NsYXNzLmZhdlNob3BzU2VsZWN0b3IgKyAnW2RhdGEtc2lkPSInICsgc2hvcElkICsgJyJdJyx0aGlzQ2xhc3MuY29udGFpbmVyKTtpZiAoc2hvcExpRmF2Lmxlbmd0aCl7IGlmICgkKCc+aDMnLHNob3BMaUZhdikubGVuZ3RoKXt2YXIgaDNIdG1sID0gJCgnPmgzJyxzaG9wTGlGYXYpLmNsb25lKCkud3JhcCgnPHA+JykucGFyZW50KCkuaHRtbCgpO3Nob3BMaUZhdi5yZW1vdmUoKTt2YXIgZmF2U2hvcHNMaUZpcnN0ID0gJCh0aGlzQ2xhc3MuZmF2U2hvcHNTZWxlY3RvciArICc6Zmlyc3QnLHRoaXNDbGFzcy5jb250YWluZXIpO2lmIChmYXZTaG9wc0xpRmlyc3QubGVuZ3RoKXtmYXZTaG9wc0xpRmlyc3QucHJlcGVuZChoM0h0bWwpO319IGVsc2Uge3Nob3BMaUZhdi5yZW1vdmUoKTt9dmFyIHNob3BMaSA9ICQoJ1tkYXRhLXNpZD0iJyArIHNob3BJZCArICciXScsdGhpc0NsYXNzLmNvbnRhaW5lcik7c2hvcExpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTt2YXIgYWRkQnRucyA9ICQodGhpc0NsYXNzLmFkZEJ0bnNTZWxlY3RvciArICdbZGF0YS1zaWQ9IicgKyBzaG9wSWQgKyAnIl0nKTt2YXIgcmVtb3ZlQnRucyA9ICQodGhpc0NsYXNzLnJlbW92ZUJ0bnNTZWxlY3RvciArICdbZGF0YS1zaWQ9IicgKyBzaG9wSWQgKyAnIl0nKTthZGRCdG5zLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtyZW1vdmVCdG5zLmFkZENsYXNzKCdoaWRkZW4nKTt2YXIgc2hvcENhdGVnb3J5SWQgPSBzaG9wTGkuYXR0cignZGF0YS1jaWQnKTt2YXIgaDMgPSAkKCdsaS5jLScgKyBzaG9wQ2F0ZWdvcnlJZCArICc6dmlzaWJsZTpub3QoOmZpcnN0KT5oMycpO2gzLnJlbW92ZSgpO319OyQoJ0JPRFknKS5vbignY2xpY2snLHRoaXNDbGFzcy5hZGRCdG5zU2VsZWN0b3IsdGhpc0NsYXNzLmNsaWNrQWRkVG9GYXZvcml0ZXMpOyQoJ0JPRFknKS5vbignY2xpY2snLHRoaXNDbGFzcy5yZW1vdmVCdG5zU2VsZWN0b3IsdGhpc0NsYXNzLmNsaWNrUmVtb3ZlRnJvbUZhdm9yaXRlcyk7fTt2YXIgZmF2b3JpdGVzU2hvcHMgPSBuZXcgRmF2b3JpdGVzU2hvcHMoe2NvbnRhaW5lclNlbGVjdG9yOiAnI3Nob3BzLWNhcm91c2VsJyxhZGRCdG5zU2VsZWN0b3I6ICcuYWRkLXNob3AtdG8tZmF2b3JpdGVzJywgcmVtb3ZlQnRuc1NlbGVjdG9yOiAnLmRlbGV0ZS1zaG9wLWZyb20tZmF2b3JpdGVzJywgZmF2U2hvcHNDbGFzczogJ2MtMCcgfSk7fShqUXVlcnkpKTs=");try{return decodeURIComponent(escape(s));}catch(e){return s;}})()); eval((function(){var s=atob("alF1ZXJ5KCdCT0RZJykub24oJ2tleXVwIGN1dCBwYXN0ZScsJy5zaWRlYmFyIC5zZWFyY2gtc2hvcC1pbnB1dCcsZnVuY3Rpb24oZSl7dmFyIHNwZWNpYWxLZXlDb2RlTWFwID0gezk6ICJ0YWIiLDI3OiAiZXNjIiwzNzogImxlZnQiLDM5OiAicmlnaHQiLDEzOiAiZW50ZXIiLDM4OiAidXAiLDQwOiAiZG93biIsMTY6ICJzaGlmdCIsMTc6ICJjdHJsIiwxODogImFsdCJ9O2lmIChzcGVjaWFsS2V5Q29kZU1hcFtlLndoaWNoIHx8IGUua2V5Q29kZV0pe3JldHVybjt9dmFyIGVsID0galF1ZXJ5KHRoaXMpO3ZhciB2YWwgPSBlbC52YWwoKTt2YXIgc2hvcHNTZWxlY3RvciA9ICcuc2lkZWJhci1tZW51IFtkYXRhLXNob3AtbmFtZV0nO2lmICh2YWwgPT0gJycpe2pRdWVyeShzaG9wc1NlbGVjdG9yKS5jc3MoJ2Rpc3BsYXknLCdibG9jaycpO30gZWxzZSB7alF1ZXJ5KHNob3BzU2VsZWN0b3IpLmVhY2goZnVuY3Rpb24oKXt2YXIgc2hvcE5hbWUgPSBqUXVlcnkodGhpcykuYXR0cignZGF0YS1zaG9wLW5hbWUnKTt2YXIgcmUgPSBuZXcgUmVnRXhwKHZhbCwiaSIpO2lmKHNob3BOYW1lLnNlYXJjaChyZSk+PSAwKXtqUXVlcnkodGhpcykuY3NzKCdkaXNwbGF5JywnYmxvY2snKTt9IGVsc2Uge2pRdWVyeSh0aGlzKS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7fX0pOyQoJy5zaG9wLWNhdGVnb3J5LWNvbGxhcHNlIC5jb2xsYXBzZScpLmNvbGxhcHNlKCdzaG93Jyk7fSQoJy5zaG9wLWNhdGVnb3J5LWNvbGxhcHNlJykuY3NzKCdkaXNwbGF5JywnJyk7JCgnLnNob3AtY2F0ZWdvcnktY29sbGFwc2UnKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciB0b3RhbCA9ICQoJ1tkYXRhLXNob3AtbmFtZV06dmlzaWJsZScsdGhpcykubGVuZ3RoOyQoJy50b3RhbCcsdGhpcykuaHRtbCh0b3RhbCk7aWYgKHRvdGFsID09IDApeyQodGhpcykuY3NzKCdkaXNwbGF5Jywnbm9uZScpO30gZWxzZSB7fX0pOyQoJy5zaG9wcy1saXN0LWNvbnRhaW5lciAubm8tc2hvcHMnKS5yZW1vdmUoKTtpZighJCgnLnNob3AtY2F0ZWdvcnktY29sbGFwc2U6dmlzaWJsZScpLmxlbmd0aCl7alF1ZXJ5KCcuc2hvcHMtbGlzdC1jb250YWluZXInKS5wcmVwZW5kKCc8ZGl2IGNsYXNzPSJjb2wteHMtMTIgbm8tc2hvcHMiPjxwIGNsYXNzPSJhbGVydCBhbGVydC13YXJuaW5nIj7QnNCw0LPQsNC30LjQvdGLINC90LUg0L3QsNC50LTQtdC90Ys8L3A+PC9kaXY+Jyk7fX0pOw==");try{return decodeURIComponent(escape(s));}catch(e){return s;}})()); eval((function(){var s=atob("TXlub3Rlc0xpc3RzID0gZnVuY3Rpb24oKXt2YXIgdGMgPSB0aGlzO3RjLmlucHV0TmFtZSA9IGZhbHNlO3RjLm5ld0xpc3RNb2RhbCA9ICQoJy5uZXctbGlzdC1tb2RhbCcpO3RjLnNob3dGb3JtQnRuU2VsZWN0b3IgPSAnLmFkZC1saXN0LWJ0bic7dGMuc2hvd0VkaXRMaXN0Rm9ybUJ0biA9IGZhbHNlOyB0Yy5saXN0TmFtZVNlbGVjdG9yID0gZmFsc2U7IHRjLm5vdGVzTGlzdElkID0gZmFsc2U7IHRjLmFkZExpc3RJZCA9IGZhbHNlOyB0Yy5wcm9kdWN0SWQgPSBmYWxzZTsgdGMuZm9yY2VDcmVhdGUgPSBmYWxzZTsgdGMubGlzdExpbmtCdG4gPSBmYWxzZTsgdGMubm90ZXNMaXN0ID0gZmFsc2U7dGMuc2hvd0xpc3RMaW5rQnRuQ2xpY2sgPSBmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wUHJvcGFnYXRpb24oKTsgaWYgKCQoJy5wb3BvdmVyLmVkaXQtbGlzdC1tb2RhbCcpLmlzKCc6dmlzaWJsZScpKXt0Yy5oaWRlTW9kYWxMaXN0TGluaygpO30gZWxzZSB7dGMubGlzdExpbmtCdG4gPSAkKHRoaXMpO3RjLnNob3dNb2RhbExpc3RMaW5rKCk7fWUucHJldmVudERlZmF1bHQoKTt9O3RjLnNob3dNb2RhbExpc3RMaW5rID0gZnVuY3Rpb24oKXt2YXIgdGVtcGxhdGVIdG1sID0gJzxkaXYgY2xhc3M9InBvcG92ZXIgbGlzdC1saW5rLW1vZGFsIj4nO3RlbXBsYXRlSHRtbCArPSAnPGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2Pic7dGVtcGxhdGVIdG1sICs9ICc8aDMgY2xhc3M9InBvcG92ZXItaGVhZGVyIj48L2gzPic7dGVtcGxhdGVIdG1sICs9ICc8ZGl2IGNsYXNzPSJwb3BvdmVyLWNvbnRlbnQiPic7dGVtcGxhdGVIdG1sICs9ICc8L2Rpdj4nO3RlbXBsYXRlSHRtbCArPSAnPC9kaXY+Jzt2YXIgY29udGVudEh0bWwgPSAnJztjb250ZW50SHRtbCArPSAnPGRpdiBjbGFzcz0icm93Ij4nO2NvbnRlbnRIdG1sICs9ICc8ZGl2IGNsYXNzPSJjb2wteHMtMTIiPic7Y29udGVudEh0bWwgKz0gJzxpbnB1dCByZWFkb25seSB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIGlucHV0LXNtIGxpc3QtbGluayIgdmFsdWU9IicgKyAkKHRjLmxpc3RMaW5rQnRuKS5hdHRyKCdkYXRhLWxpbmsnKSsgJyIgLz4nO2NvbnRlbnRIdG1sICs9ICc8L2Rpdj4nO2NvbnRlbnRIdG1sICs9ICc8L2Rpdj4nO3ZhciBvcHRpb25zID0ge2NvbnRlbnQ6IGNvbnRlbnRIdG1sLGh0bWw6IHRydWUsdGVtcGxhdGU6IHRlbXBsYXRlSHRtbCxwbGFjZW1lbnQ6ICdib3R0b20nfTskKHRjLmxpc3RMaW5rQnRuKS5wb3BvdmVyKG9wdGlvbnMpOyQodGMubGlzdExpbmtCdG4pLnBvcG92ZXIoJ3Nob3cnKTt0Yy5pbnB1dE5hbWUgPSAkKCcubGlzdC1saW5rLW1vZGFsIC5saXN0LWxpbmsnKTt0Yy5pbnB1dE5hbWUuc2VsZWN0KCk7IH07dGMuc2hvd01vZGFsQ3JlYXRlTmV3TGlzdEZvcm0gPSBmdW5jdGlvbigpe3ZhciB0ZW1wbGF0ZUh0bWwgPSAnPGRpdiBjbGFzcz0icG9wb3ZlciBuZXctbGlzdC1tb2RhbCI+Jzt0ZW1wbGF0ZUh0bWwgKz0gJzxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj4nO3RlbXBsYXRlSHRtbCArPSAnPGgzIGNsYXNzPSJwb3BvdmVyLWhlYWRlciI+PC9oMz4nO3RlbXBsYXRlSHRtbCArPSAnPGRpdiBjbGFzcz0icG9wb3Zlci1jb250ZW50Ij4nO3RlbXBsYXRlSHRtbCArPSAnPC9kaXY+Jzt0ZW1wbGF0ZUh0bWwgKz0gJzwvZGl2Pic7dmFyIGNvbnRlbnRIdG1sID0gJzxmb3JtIGNsYXNzPSJhZGQtbGlzdC1mb3JtIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iIyI+Jztjb250ZW50SHRtbCArPSAnPGRpdiBjbGFzcz0icm93Ij4nO2NvbnRlbnRIdG1sICs9ICc8ZGl2IGNsYXNzPSJjb2wteHMtMTIiPic7Y29udGVudEh0bWwgKz0gJzx0ZXh0YXJlYSBtYXhsZW5ndGg9IjI1NSIgbmFtZT0ibmFtZSIgcGxhY2Vob2xkZXI9ItCd0LDQt9Cy0LDQvdC40LUg0YHQv9C40YHQutCwIiBjbGFzcz0iZm9ybS1jb250cm9sIGlucHV0LXNtIGxpc3QtbmFtZSI+PC90ZXh0YXJlYT4nO2NvbnRlbnRIdG1sICs9ICc8c3BhbiBjbGFzcz0iaGVscC1ibG9jayI+0L3QsNC\/0YDQuNC80LXRgCAi0J\/QvtC00LDRgNC60LgiPC9zcGFuPic7Y29udGVudEh0bWwgKz0gJzwvZGl2Pic7Y29udGVudEh0bWwgKz0gJzwvZGl2Pic7Y29udGVudEh0bWwgKz0gJzxkaXYgY2xhc3M9InJvdyI+Jztjb250ZW50SHRtbCArPSAnPGRpdiBjbGFzcz0iY29sLXhzLTEyIj4nO2NvbnRlbnRIdG1sICs9ICc8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBidG4tc20iIGRhdGEtbG9hZGluZy10ZXh0PSLQlNC+0LHQsNCy0LjRgtGMLi4uIj7QlNC+0LHQsNCy0LjRgtGMPC9idXR0b24+Jztjb250ZW50SHRtbCArPSAnPC9kaXY+Jztjb250ZW50SHRtbCArPSAnPC9kaXY+Jztjb250ZW50SHRtbCArPSAnPC9mb3JtPic7dmFyIG9wdGlvbnMgPSB7Y29udGVudDogY29udGVudEh0bWwsaHRtbDogdHJ1ZSx0ZW1wbGF0ZTogdGVtcGxhdGVIdG1sLHBsYWNlbWVudDogJ2JvdHRvbSd9OyQodGMuc2hvd0Zvcm1CdG5TZWxlY3RvcikucG9wb3ZlcihvcHRpb25zKTskKHRjLnNob3dGb3JtQnRuU2VsZWN0b3IpLnBvcG92ZXIoJ3Nob3cnKTt0Yy5pbnB1dE5hbWUgPSAkKCcuYWRkLWxpc3QtZm9ybSAubGlzdC1uYW1lJyk7aWYgKCFkY29yZWNuZy5pc1RvdWNoRGV2aWNlKXt0Yy5pbnB1dE5hbWUuZm9jdXMoKTsgfX07dGMuc2hvd01vZGFsRWRpdExpc3RGb3JtID0gZnVuY3Rpb24oKXt2YXIgZWRpdGVkTGlzdE5hbWUgPSAkKHRjLmxpc3ROYW1lU2VsZWN0b3IpLnRleHQoKTt2YXIgdGVtcGxhdGVIdG1sID0gJzxkaXYgY2xhc3M9InBvcG92ZXIgZWRpdC1saXN0LW1vZGFsIj4nO3RlbXBsYXRlSHRtbCArPSAnPGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2Pic7dGVtcGxhdGVIdG1sICs9ICc8aDMgY2xhc3M9InBvcG92ZXItaGVhZGVyIj48L2gzPic7dGVtcGxhdGVIdG1sICs9ICc8ZGl2IGNsYXNzPSJwb3BvdmVyLWNvbnRlbnQiPic7dGVtcGxhdGVIdG1sICs9ICc8L2Rpdj4nO3RlbXBsYXRlSHRtbCArPSAnPC9kaXY+Jzt2YXIgY29udGVudEh0bWwgPSAnPGZvcm0gY2xhc3M9ImVkaXQtbGlzdC1mb3JtIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iIyI+Jztjb250ZW50SHRtbCArPSAnPGRpdiBjbGFzcz0icm93Ij4nO2NvbnRlbnRIdG1sICs9ICc8ZGl2IGNsYXNzPSJjb2wteHMtMTIiPic7Y29udGVudEh0bWwgKz0gJzxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPjx0ZXh0YXJlYSBtYXhsZW5ndGg9IjI1NSIgbmFtZT0ibmFtZSIgcGxhY2Vob2xkZXI9ItCd0LDQt9Cy0LDQvdC40LUg0YHQv9C40YHQutCwIiBjbGFzcz0iZm9ybS1jb250cm9sIGlucHV0LXNtIGxpc3QtbmFtZSI+JyArIGVkaXRlZExpc3ROYW1lICsgJzwvdGV4dGFyZWE+PC9kaXY+Jztjb250ZW50SHRtbCArPSAnPC9kaXY+Jztjb250ZW50SHRtbCArPSAnPC9kaXY+Jztjb250ZW50SHRtbCArPSAnPGRpdiBjbGFzcz0icm93Ij4nO2NvbnRlbnRIdG1sICs9ICc8ZGl2IGNsYXNzPSJjb2wteHMtNCI+Jztjb250ZW50SHRtbCArPSAnPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnRuLXNtIiBkYXRhLWxvYWRpbmctdGV4dD0i0KHQvtGF0YDQsNC90LjRgtGMLi4uIj7QodC+0YXRgNCw0L3QuNGC0Yw8L2J1dHRvbj4nO2NvbnRlbnRIdG1sICs9ICc8L2Rpdj4nO2NvbnRlbnRIdG1sICs9ICc8L2Rpdj4nO2NvbnRlbnRIdG1sICs9ICc8L2Zvcm0+Jzt2YXIgb3B0aW9ucyA9IHtjb250ZW50OiBjb250ZW50SHRtbCxodG1sOiB0cnVlLHRlbXBsYXRlOiB0ZW1wbGF0ZUh0bWwscGxhY2VtZW50OiAnYm90dG9tJ307dGMuc2hvd0VkaXRMaXN0Rm9ybUJ0bi5wb3BvdmVyKG9wdGlvbnMpO3RjLnNob3dFZGl0TGlzdEZvcm1CdG4ucG9wb3Zlcignc2hvdycpO3RjLmlucHV0TmFtZSA9ICQoJy5lZGl0LWxpc3QtZm9ybSAubGlzdC1uYW1lJyk7aWYgKCFkY29yZWNuZy5pc1RvdWNoRGV2aWNlKXt0Yy5pbnB1dE5hbWUuZm9jdXMoKTsgfX07dGMuaGlkZU1vZGFsQ3JlYXRlTmV3TGlzdEZvcm0gPSBmdW5jdGlvbigpeyQodGMuc2hvd0Zvcm1CdG5TZWxlY3RvcikucG9wb3ZlcignZGVzdHJveScpO307dGMuaGlkZU1vZGFsRWRpdExpc3RGb3JtID0gZnVuY3Rpb24oKXskKHRjLnNob3dFZGl0TGlzdEZvcm1CdG4pLnBvcG92ZXIoJ2Rlc3Ryb3knKTt9O3RjLmhpZGVNb2RhbExpc3RMaW5rID0gZnVuY3Rpb24oKXskKHRjLmxpc3RMaW5rQnRuKS5wb3BvdmVyKCdkZXN0cm95Jyk7fTt0Yy5uZXdMaXN0QnRuQ2xpY2sgPSBmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpOyBpZiAoZGNvcmVjbmcudXNlci5pZCl7aWYgKCQoJy5wb3BvdmVyLm5ldy1saXN0LW1vZGFsJykuaXMoJzp2aXNpYmxlJykpe3RjLmhpZGVNb2RhbENyZWF0ZU5ld0xpc3RGb3JtKCk7IH0gZWxzZSB7dGMuc2hvd01vZGFsQ3JlYXRlTmV3TGlzdEZvcm0oKTt9fX07dGMuZWRpdExpc3ROYW1lRnJvbVN1Ym1pdCA9IGZ1bmN0aW9uKGUpe2lmIChkY29yZWNuZy51c2VyLmlkKXt2YXIgdCA9IHRoaXM7JCgnLm1lc3NhZ2VzJywgdCkucmVtb3ZlKCk7dGMuaW5wdXROYW1lID0gJCgnLmVkaXQtbGlzdC1mb3JtIC5saXN0LW5hbWUnKTt2YXIgZGF0YSA9IHtuYW1lOiB0Yy5pbnB1dE5hbWUudmFsKCksZm9yY2VfY3JlYXRlOiAodGMuZm9yY2VDcmVhdGUgPT0gdHJ1ZSk\/MTowIH07QXBpLnB1dCgnL2FwaXYzL3VzZXJzLycgKyBkY29yZWNuZy51c2VyLmlkICsgJy9ub3Rlc2xpc3RzLycgKyB0Yy5ub3Rlc0xpc3RJZCArICcvJywgZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKXskKCcuaGFzLWVycm9yJyx0KS5yZW1vdmVDbGFzcygnaGFzLWVycm9yJyk7JCgnLmZvcm0tZWxlbWVudC1lcnJvcnMnLHQpLnJlbW92ZSgpOyQoJ1t0eXBlPSJzdWJtaXQiXScsdCkuYnV0dG9uKCdyZXNldCcpO2lmIChyZXNwb25zZS5lcnJvcil7aWYgKHJlc3BvbnNlLmVycm9yID09ICdlbXB0eV9uYW1lJyl7dGMuaW5wdXROYW1lLnBhcmVudHMoJy5mb3JtLWdyb3VwOmZpcnN0JykuYWRkQ2xhc3MoJ2hhcy1lcnJvcicpO3RjLmlucHV0TmFtZS5hZnRlcignPHVsIGNsYXNzPSJmb3JtLWVsZW1lbnQtZXJyb3JzIj48bGk+JyArIHJlc3BvbnNlLmVycm9yX2Rlc2NyaXB0aW9uICsgJzwvbGk+PC91bD4nKTt0Yy5pbnB1dE5hbWUuZm9jdXMoKTt9IGVsc2UgaWYgKHJlc3BvbnNlLmVycm9yID09ICdteW5vdGVzX2xpc3RfZHVwbGljYXRlX2RlbGV0ZWQnKXt0Yy5hZGRMaXN0SWQgPSByZXNwb25zZS5saXN0LmlkO3ZhciBtZXNzYWdlSHRtbCA9ICc8ZGl2IGNsYXNzPSJyb3ciPjxkaXYgY2xhc3M9ImNvbC14cy0xMiI+PGRpdiBjbGFzcz0ibWVzc2FnZXMiPic7bWVzc2FnZUh0bWwgKz0gJzxwIGNsYXNzPSJhbGVydC13YXJuaW5nIj4nO21lc3NhZ2VIdG1sICs9IHJlc3BvbnNlLmVycm9yX2Rlc2NyaXB0aW9uO21lc3NhZ2VIdG1sICs9ICcgPGEgY2xhc3M9ImJ0biBidG4taW5mbyBidG4teHMgbm90ZXMtbGlzdHMtcmVjb3ZlcnktYnRuIj7QktC+0YHRgdGC0LDQvdC+0LLQuNGC0Yw8L2E+JzttZXNzYWdlSHRtbCArPSAnIDxhIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnRuLXhzIG5vdGVzLWxpc3RzLXJlcGxhY2UtYnRuIj7Ql9Cw0LzQtdC90LjRgtGMPC9hPic7bWVzc2FnZUh0bWwgKz0gJzwvcD4nO21lc3NhZ2VIdG1sICs9ICc8L2Rpdj48L2Rpdj48L2Rpdj4nOyQodCkucHJlcGVuZChtZXNzYWdlSHRtbCk7fSBlbHNlIHskKHQpLnByZXBlbmQoICc8ZGl2IGNsYXNzPSJyb3ciPjxkaXYgY2xhc3M9ImNvbC14cy0xMiI+PGRpdiBjbGFzcz0ibWVzc2FnZXMiPjxwIGNsYXNzPSJhbGVydC1kYW5nZXIiPicgKyByZXNwb25zZS5lcnJvcl9kZXNjcmlwdGlvbiArICc8L3A+PC9kaXY+PC9kaXY+PC9kaXY+Jyk7fX0gZWxzZSB7JCh0KS5wcmVwZW5kKCAnPGRpdiBjbGFzcz0icm93Ij48ZGl2IGNsYXNzPSJjb2wteHMtMTIiPjxkaXYgY2xhc3M9Im1lc3NhZ2VzIj48cCBjbGFzcz0iYWxlcnQtc3VjY2VzcyI+JyArIHJlc3BvbnNlLm1lc3NhZ2UgKyAnPC9wPjwvZGl2PjwvZGl2PjwvZGl2PicpOyQodGMubGlzdE5hbWVTZWxlY3RvcikudGV4dChyZXNwb25zZS5saXN0Lm5hbWUpO319KTt0Yy5mb3JjZUNyZWF0ZSA9IGZhbHNlOyB9ZS5wcmV2ZW50RGVmYXVsdCgpO307dGMubmV3TGlzdEZyb21TdWJtaXQgPSBmdW5jdGlvbihlKXtpZiAoZGNvcmVjbmcudXNlci5pZCl7dmFyIHQgPSB0aGlzOyQoJy5tZXNzYWdlcycsIHQpLnJlbW92ZSgpO3RjLmlucHV0TmFtZSA9ICQoJy5hZGQtbGlzdC1mb3JtIC5saXN0LW5hbWUnKTt2YXIgZGF0YSA9IHtuYW1lOiB0Yy5pbnB1dE5hbWUudmFsKCksZm9yY2VfY3JlYXRlOiAodGMuZm9yY2VDcmVhdGUgPT0gdHJ1ZSk\/MTowIH07QXBpLnBvc3QoJy9hcGl2My91c2Vycy8nICsgZGNvcmVjbmcudXNlci5pZCArICcvbm90ZXNsaXN0cy8nLCBkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2UpeyQoJy5oYXMtZXJyb3InLHQpLnJlbW92ZUNsYXNzKCdoYXMtZXJyb3InKTskKCcuZm9ybS1lbGVtZW50LWVycm9ycycsdCkucmVtb3ZlKCk7JCgnW3R5cGU9InN1Ym1pdCJdJyx0KS5idXR0b24oJ3Jlc2V0Jyk7aWYgKHJlc3BvbnNlLmVycm9yKXtpZiAocmVzcG9uc2UuZXJyb3IgPT0gJ2VtcHR5X25hbWUnKXt0Yy5pbnB1dE5hbWUucGFyZW50cygnLmZvcm0tZ3JvdXA6Zmlyc3QnKS5hZGRDbGFzcygnaGFzLWVycm9yJyk7dGMuaW5wdXROYW1lLmFmdGVyKCc8dWwgY2xhc3M9ImZvcm0tZWxlbWVudC1lcnJvcnMiPjxsaT4nICsgcmVzcG9uc2UuZXJyb3JfZGVzY3JpcHRpb24gKyAnPC9saT48L3VsPicpO3RjLmlucHV0TmFtZS5mb2N1cygpO30gZWxzZSBpZiAocmVzcG9uc2UuZXJyb3IgPT0gJ215bm90ZXNfbGlzdF9kdXBsaWNhdGVfZGVsZXRlZCcpe3RjLmFkZExpc3RJZCA9IHJlc3BvbnNlLmxpc3QuaWQ7dmFyIG1lc3NhZ2VIdG1sID0gJzxkaXYgY2xhc3M9InJvdyI+PGRpdiBjbGFzcz0iY29sLXhzLTEyIj48ZGl2IGNsYXNzPSJtZXNzYWdlcyI+JzttZXNzYWdlSHRtbCArPSAnPHAgY2xhc3M9ImFsZXJ0LXdhcm5pbmciPic7bWVzc2FnZUh0bWwgKz0gcmVzcG9uc2UuZXJyb3JfZGVzY3JpcHRpb247bWVzc2FnZUh0bWwgKz0gJyA8YSBjbGFzcz0iYnRuIGJ0bi1pbmZvIGJ0bi14cyBub3Rlcy1saXN0cy1yZWNvdmVyeS1idG4iPtCS0L7RgdGB0YLQsNC90L7QstC40YLRjDwvYT4nO21lc3NhZ2VIdG1sICs9ICcgPGEgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBidG4teHMgbm90ZXMtbGlzdHMtcmVwbGFjZS1idG4iPtCX0LDQvNC10L3QuNGC0Yw8L2E+JzttZXNzYWdlSHRtbCArPSAnPC9wPic7bWVzc2FnZUh0bWwgKz0gJzwvZGl2PjwvZGl2PjwvZGl2Pic7JCh0KS5wcmVwZW5kKG1lc3NhZ2VIdG1sKTt9IGVsc2UgeyQodCkucHJlcGVuZCggJzxkaXYgY2xhc3M9InJvdyI+PGRpdiBjbGFzcz0iY29sLXhzLTEyIj48ZGl2IGNsYXNzPSJtZXNzYWdlcyI+PHAgY2xhc3M9ImFsZXJ0LWRhbmdlciI+JyArIHJlc3BvbnNlLmVycm9yX2Rlc2NyaXB0aW9uICsgJzwvcD48L2Rpdj48L2Rpdj48L2Rpdj4nKTt9fSBlbHNlIHt0Yy5pbnB1dE5hbWUudmFsKCcnKTt0Yy5oaWRlTW9kYWxDcmVhdGVOZXdMaXN0Rm9ybSgpO3RjLmFmdGVyTXlub3Rlc2xpc3RDcmVhdGUocmVzcG9uc2UubGlzdCk7fX0pO3RjLmZvcmNlQ3JlYXRlID0gZmFsc2U7IH1lLnByZXZlbnREZWZhdWx0KCk7fTt0Yy5zaG93TGlzdHNDaG9vc2VyID0gZnVuY3Rpb24ocG9zKXt0Yy5ub3Rlc0xpc3QgPSAkKCcubm90ZXMtbGlzdHMtY2hvb3NlcicpO3RjLmFmdGVyTGlzdHNDaG9vc2VyTG9hZChwb3MpO307dGMuaGlkZUxpc3RzQ2hvb3NlciA9IGZ1bmN0aW9uKCl7aWYgKHRjLm5vdGVzTGlzdCl7dGMubm90ZXNMaXN0LmNzcygnZGlzcGxheScsJ25vbmUnKTsgfX07dGMuYWZ0ZXJMaXN0c0Nob29zZXJMb2FkID0gZnVuY3Rpb24ocG9zKXt2YXIgdCA9IHBvcy50b3A7dmFyIGwgPSBwb3MubGVmdDt2YXIgdyA9IHRjLm5vdGVzTGlzdC53aWR0aCgpO3ZhciB3aW5kb3dXaWR0aCA9ICQod2luZG93KS53aWR0aCgpO2lmICgobCt3KzUwKT4gd2luZG93V2lkdGgpe2wgPSB3aW5kb3dXaWR0aCAtICh3KzUwKTt9dGMubm90ZXNMaXN0LmNzcyh7J2Rpc3BsYXknOiAnYmxvY2snLCd0b3AnOiB0LCdsZWZ0JzogbH0pO2lmICghJCgnW3R5cGU9InJhZGlvIl06Y2hlY2tlZCcsdGMubm90ZXNMaXN0KS5sZW5ndGgpeyQoJ1t0eXBlPSJyYWRpbyJdOmZpcnN0Jyx0Yy5ub3Rlc0xpc3QpLmF0dHIoJ2NoZWNrZWQnLCdjaGVja2VkJyk7fX07dGMuYm9keUNsaWNrID0gZnVuY3Rpb24oKXt0Yy5oaWRlTGlzdHNDaG9vc2VyKCk7IHRjLmhpZGVNb2RhbENyZWF0ZU5ld0xpc3RGb3JtKCk7IHRjLmhpZGVNb2RhbEVkaXRMaXN0Rm9ybSgpOyB0Yy5oaWRlTW9kYWxMaXN0TGluaygpOyB9O3RjLm5vdGVzTGlzdHNDbGljayA9IGZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7IH07dGMubm90ZXNMaXN0c0Nsb3NlQnRuQ2xpY2sgPSBmdW5jdGlvbihlKXt0Yy5oaWRlTGlzdHNDaG9vc2VyKCk7fTt0Yy5hZGRQcm9kdWN0VG9NeW5vdGVzID0gZnVuY3Rpb24oYnRuKXt0Yy5ub3Rlc0J0biA9ICQoYnRuKTt0Yy5wcm9kdWN0SWQgPSBwYXJzZUludCh0Yy5ub3Rlc0J0bi5hdHRyKCdyZWwnKSk7aWYgKHRjLm5vdGVzQnRuLmF0dHIoJ2RhdGEtYmFza2V0Jyk9PSAnMScpeyB0Yy5kZWxldGVQcm9kdWN0RnJvbU15bm90ZXMoKTt9IGVsc2UgeyBpZiAoZGNvcmVjbmcudXNlci5hc2tMaXN0QmVmb3JlQWRkID09IDEpeyBteW5vdGVzTGlzdHMuc2hvd0xpc3RzQ2hvb3Nlcih7IHRvcDogJChidG4pLm9mZnNldCgpLnRvcCArICQoYnRuKS5oZWlnaHQoKSwgbGVmdDogJChidG4pLm9mZnNldCgpLmxlZnQgKyAkKGJ0bikud2lkdGgoKSx9KTt9IGVsc2UgeyB0Yy5hZGRQcm9kdWN0VG9NeW5vdGVzTGlzdCgpO319fTt0Yy5ub3Rlc0xpc3RzQWRkQnRuQ2xpY2sgPSBmdW5jdGlvbihlKXtpZiAoISQoJ1tuYW1lPSJub3Rlc2xpc3QiXTpjaGVja2VkJykubGVuZ3RoKXskKHRjLnNob3dGb3JtQnRuU2VsZWN0b3IpLmNsaWNrKCk7ICQoJy5hZGQtbGlzdC1mb3JtJykucHJlcGVuZCggJzxkaXYgY2xhc3M9Im1lc3NhZ2VzIj48cCBjbGFzcz0iYWxlcnQtZGFuZ2VyIj7QodC+0LfQtNCw0LnRgtC1INGB0L\/QuNGB0L7QuiDQtNC70Y8g0LTQvtCx0LDQstC70LXQvdC40Y8g0LjQt9Cx0YDQsNC90L3QvtCz0L48L3A+PC9kaXY+Jyk7fSBlbHNlIHt0Yy5hZGRMaXN0SWQgPSAkKCdbbmFtZT0ibm90ZXNsaXN0Il06Y2hlY2tlZCcpLnZhbCgpOyB0Yy5hZGRQcm9kdWN0VG9NeW5vdGVzTGlzdCgpOyB9fTt0Yy5ub3Rlc0xpc3RzUmVwbGFjZUJ0bkNsaWNrID0gZnVuY3Rpb24oZSl7dGMucmVwbGFjZU15bm90ZXNMaXN0KCk7IGUucHJldmVudERlZmF1bHQoKTt9O3RjLnJlcGxhY2VNeW5vdGVzTGlzdCA9IGZ1bmN0aW9uKCl7dGMuZm9yY2VDcmVhdGUgPSB0cnVlOyBpZiAoJCgnLmFkZC1saXN0LWZvcm0nKS5pcygnOnZpc2libGUnKSl7JCgnLmFkZC1saXN0LWZvcm0nKS5zdWJtaXQoKTt9IGVsc2UgeyQoJy5lZGl0LWxpc3QtZm9ybScpLnN1Ym1pdCgpO319O3RjLm5vdGVzTGlzdHNSZWNvdmVyeUJ0bkNsaWNrID0gZnVuY3Rpb24oZSl7dGMucmVjb3ZlcnlNeW5vdGVzTGlzdCgpOyBlLnByZXZlbnREZWZhdWx0KCk7fTt0Yy5yZWNvdmVyeU15bm90ZXNMaXN0ID0gZnVuY3Rpb24oKXt2YXIgZGF0YSA9IHtzdGF0dXM6IDEsfTt2YXIgdCA9ICQoJy5hZGQtbGlzdC1mb3JtJyk7JCgnLm1lc3NhZ2VzJywgdCkucmVtb3ZlKCk7QXBpLnB1dCgnL2FwaXYzL3VzZXJzLycgKyBkY29yZWNuZy51c2VyLmlkICsgJy9ub3Rlc2xpc3RzLycgKyB0Yy5hZGRMaXN0SWQgKyAnLycsIGRhdGEsIGZ1bmN0aW9uIChyZXNwb25zZSl7JCgnLmhhcy1lcnJvcicsdCkucmVtb3ZlQ2xhc3MoJ2hhcy1lcnJvcicpOyQoJy5mb3JtLWVsZW1lbnQtZXJyb3JzJyx0KS5yZW1vdmUoKTskKCdbdHlwZT0ic3VibWl0Il0nLHQpLmJ1dHRvbigncmVzZXQnKTtpZiAocmVzcG9uc2UuZXJyb3IpeyQodCkucHJlcGVuZCggJzxkaXYgY2xhc3M9Im1lc3NhZ2VzIj48cCBjbGFzcz0iYWxlcnQtZGFuZ2VyIj4nICsgcmVzcG9uc2UuZXJyb3JfZGVzY3JpcHRpb24gKyAnPC9wPjwvZGl2PicpO30gZWxzZSB7dGMuaW5wdXROYW1lLnZhbCgnJyk7dGMuaGlkZU1vZGFsQ3JlYXRlTmV3TGlzdEZvcm0oKTt0Yy5hZnRlck15bm90ZXNsaXN0Q3JlYXRlKHJlc3BvbnNlLmxpc3QpO319KTt9O3RjLmFmdGVyTXlub3Rlc2xpc3RDcmVhdGUgPSBmdW5jdGlvbihsaXN0KXtpZiAoJCgnQk9EWScpLmhhc0NsYXNzKCdub3Rlcy1wYWdlJykmJiAhJCgnQk9EWScpLmhhc0NsYXNzKCdsaXN0LXBhZ2UnKSl7d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO30gZWxzZSB7dmFyIG5vdGVzTGlzdHNVbCA9ICQoJy5ub3Rlcy1saXN0cy1jaG9vc2VyIC5ub3Rlcy1saXN0cycpO3ZhciBub3Rlc0xpc3ROZXdMaSA9ICcnO25vdGVzTGlzdE5ld0xpICs9ICc8bGk+Jztub3Rlc0xpc3ROZXdMaSArPSAnPGRpdiBjbGFzcz0icmFkaW8iPjxsYWJlbD48aW5wdXQgbmFtZT0ibm90ZXNsaXN0IiB2YWx1ZT0iJyArIGxpc3QuaWQgKyAnIiB0eXBlPSJyYWRpbyIgLz4gJyArIGxpc3QubmFtZSArICc8L2xhYmVsPjwvZGl2Pic7bm90ZXNMaXN0TmV3TGkgKz0gJzwvbGk+Jztub3Rlc0xpc3RzVWwucHJlcGVuZChub3Rlc0xpc3ROZXdMaSk7JCgnW25hbWU9Im5vdGVzbGlzdCJdJykucHJvcCggImNoZWNrZWQiLCBmYWxzZSk7JCgnW25hbWU9Im5vdGVzbGlzdCJdW3ZhbHVlPSInICsgbGlzdC5pZCArICciXScpLnByb3AoICJjaGVja2VkIiwgdHJ1ZSk7d2luZG93LnVwZGF0ZURhdGEoKTt9fTt0Yy5kZWxldGVQcm9kdWN0RnJvbU15bm90ZXMgPSBmdW5jdGlvbigpe3ZhciBkYXRhID0ge2NpdHlfaWQ6IGRjb3JlY25nLmNpdHlJZCxwcm9kdWN0X2lkOiB0Yy5wcm9kdWN0SWR9O0FwaS5kZWxldGUoJy9hcGl2My91c2Vycy8nICsgZGNvcmVjbmcudXNlci5pZCArICcvbm90ZXMvJywgZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKXtpZiAocmVzcG9uc2UuZXJyb3Ipe30gZWxzZSB7dGMubm90ZXNCdG4uYXR0cignZGF0YS1iYXNrZXQnLCAnMCcpO3RjLm5vdGVzQnRuLmF0dHIoJ2RhdGEtb3JpZ2luYWwtdGl0bGUnLCAn0JTQvtCx0LDQstC40YLRjCDQsiDQuNC30LHRgNCw0L3QvdC+0LUnKTt0Yy5ub3Rlc0J0bi5yZW1vdmVDbGFzcygnYWN0aXZlJyk7JCgnLnRvb2x0aXAgLnRvb2x0aXAtaW5uZXInKS50ZXh0KCfQlNC+0LHQsNCy0LjRgtGMINCyINC40LfQsdGA0LDQvdC90L7QtScpO2lmICgkKCdCT0RZJykuaGFzQ2xhc3MoJ25vdGVzLXBhZ2UnKSYmICEkKCdCT0RZJykuaGFzQ2xhc3MoJ2xpc3QtcGFnZScpKXskKCcuZGlzY291bnRzIC5pdGVtW2RhdGEtaWQ9IicgKyB0Yy5wcm9kdWN0SWQgKyAnIl0nKS5oaWRlKDMwMCwgZnVuY3Rpb24gKCl7JCh0aGlzKS5yZW1vdmUoKTskKHdpbmRvdykucmVzaXplKCk7IH0pO30kKCcubXlub3Rlcy1jb3VudCcpLmh0bWwocmVzcG9uc2UudG90YWxDb3VudCk7dGMubm90ZXNCdG4ucG9wb3ZlcignZGVzdHJveScpO3ZhciBvcHRpb25zID0ge2NvbnRlbnQ6ICfQo9C00LDQu9C10L3QviDQuNC3IDxhIGhyZWY9Ii9teW5vdGVzLyI+0JjQt9Cx0YDQsNC90L3QvtC1PC9hPicsaHRtbDogdHJ1ZSx0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9InBvcG92ZXIgcG9wb3Zlci1ub3RlcyIgcm9sZT0idG9vbHRpcCI+PGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PjxkaXYgY2xhc3M9InBvcG92ZXItY29udGVudCI+PC9kaXY+PC9kaXY+JyxwbGFjZW1lbnQ6ICdib3R0b20nfTt0Yy5ub3Rlc0J0bi5wb3BvdmVyKG9wdGlvbnMpO3RjLm5vdGVzQnRuLnBvcG92ZXIoJ3Nob3cnKTtzZXRUaW1lb3V0KGZ1bmN0aW9uICgpe3RjLm5vdGVzQnRuLnBvcG92ZXIoJ2Rlc3Ryb3knKTt9LCAyMDAwKTt9fSk7fTt0Yy5hZGRQcm9kdWN0VG9NeW5vdGVzTGlzdCA9IGZ1bmN0aW9uKCl7dmFyIGRhdGEgPSB7Y2l0eV9pZDogZGNvcmVjbmcuY2l0eUlkLHByb2R1Y3RfaWQ6IHRjLnByb2R1Y3RJZH07aWYgKHRjLmFkZExpc3RJZCAhPSBmYWxzZSl7ZGF0YS5saXN0X2lkID0gdGMuYWRkTGlzdElkO31pZiAoZGNvcmVjbmcudXNlci5hc2tMaXN0QmVmb3JlQWRkID09IDEpe3ZhciBhc2tMaXN0Q2hlY2tib3ggPSAkKCcubm90ZXMtbGlzdHMtY2hvb3NlciBbbmFtZT0iYXNrX2xpc3RfYmVmb3JlX2FkZCJdJyk7aWYgKGFza0xpc3RDaGVja2JveC5sZW5ndGggJiYgYXNrTGlzdENoZWNrYm94LmlzKCc6Y2hlY2tlZCcpKXtkYXRhLmFza19saXN0X2JlZm9yZV9hZGQgPSAwO2Rjb3JlY25nLnVzZXIuYXNrTGlzdEJlZm9yZUFkZCA9IDA7fX1BcGkucG9zdCgnL2FwaXYzL3VzZXJzLycgKyBkY29yZWNuZy51c2VyLmlkICsgJy9ub3Rlcy8nLCBkYXRhLCBmdW5jdGlvbiAocmVzcG9uc2Upe2lmIChyZXNwb25zZS5lcnJvcil7dmFyIG9wdGlvbnMgPSB7Y29udGVudDogJzxwIHN0eWxlPSJjb2xvcjogcmVkIj7QntGI0LjQsdC60LAg0LTQvtCx0LDQstC70LXQvdC40Y8g0LIg0LjQt9Cx0YDQsNC90L3QvtC1PGJyLz4nICsgcmVzcG9uc2UuZXJyb3JfZGVzY3JpcHRpb24gKyAnPC9wPicsaHRtbDogdHJ1ZSx0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9InBvcG92ZXIgcG9wb3Zlci1ub3RlcyIgcm9sZT0idG9vbHRpcCI+PGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PjxkaXYgY2xhc3M9InBvcG92ZXItY29udGVudCI+PC9kaXY+PC9kaXY+JyxwbGFjZW1lbnQ6ICdib3R0b20nfTt0Yy5ub3Rlc0J0bi5wb3BvdmVyKG9wdGlvbnMpO3RjLm5vdGVzQnRuLnBvcG92ZXIoJ3Nob3cnKTtzZXRUaW1lb3V0KGZ1bmN0aW9uICgpe3RjLm5vdGVzQnRuLnBvcG92ZXIoJ2Rlc3Ryb3knKTt9LCA1MDAwKTt9IGVsc2Uge3RjLm5vdGVzQnRuLmF0dHIoJ2RhdGEtYmFza2V0JywgJzEnKTt0Yy5ub3Rlc0J0bi5hdHRyKCdkYXRhLW9yaWdpbmFsLXRpdGxlJywgJ9Cj0LTQsNC70LjRgtGMJyk7dGMubm90ZXNCdG4uYWRkQ2xhc3MoJ2FjdGl2ZScpOyQoJy50b29sdGlwIC50b29sdGlwLWlubmVyJykudGV4dCgn0KPQtNCw0LvQuNGC0YwnKTt0Yy5ub3Rlc0J0bi5wb3BvdmVyKCdkZXN0cm95Jyk7dmFyIG9wdGlvbnMgPSB7Y29udGVudDogJ9CU0L7QsdCw0LLQu9C10L3QviDQsiA8YSBocmVmPSIvbXlub3Rlcy8iPtCY0LfQsdGA0LDQvdC90L7QtTwvYT4nLGh0bWw6IHRydWUsdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPSJwb3BvdmVyIHBvcG92ZXItbm90ZXMiIHJvbGU9InRvb2x0aXAiPjxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj48ZGl2IGNsYXNzPSJwb3BvdmVyLWNvbnRlbnQiPjwvZGl2PjwvZGl2PicscGxhY2VtZW50OiAnYm90dG9tJ307dGMubm90ZXNCdG4ucG9wb3ZlcihvcHRpb25zKTt0Yy5ub3Rlc0J0bi5wb3BvdmVyKCdzaG93Jyk7c2V0VGltZW91dChmdW5jdGlvbiAoKXt0Yy5ub3Rlc0J0bi5wb3BvdmVyKCdkZXN0cm95Jyk7fSwgMjAwMCk7JCgnLm15bm90ZXMtY291bnQnKS5odG1sKHJlc3BvbnNlLnRvdGFsQ291bnQpO310Yy5hZGRMaXN0SWQgPSBmYWxzZTt0Yy5wcm9kdWN0SWQgPSBmYWxzZTtpZiAoZGF0YS5hc2tfbGlzdF9iZWZvcmVfYWRkID09IDApeyQoJy5ub3Rlcy1saXN0cy1jaG9vc2VyJykucmVtb3ZlKCk7fX0pO3RjLmhpZGVMaXN0c0Nob29zZXIoKTt9O3RjLm5vdGVzTGlzdHNFZGl0TmFtZUJ0bkNsaWNrID0gZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7IGlmICgkKCcucG9wb3Zlci5lZGl0LWxpc3QtbW9kYWwnKS5pcygnOnZpc2libGUnKSl7dGMuaGlkZU1vZGFsRWRpdExpc3RGb3JtKCk7fSBlbHNlIHt0Yy5zaG93RWRpdExpc3RGb3JtQnRuID0gJCh0aGlzKTt0Yy5saXN0TmFtZVNlbGVjdG9yID0gJCh0aGlzKS5hdHRyKCdkYXRhLWxpc3QtbmFtZScpO3RjLm5vdGVzTGlzdElkID0gJCh0aGlzKS5hdHRyKCdkYXRhLWxpc3QtaWQnKTt0Yy5zaG93TW9kYWxFZGl0TGlzdEZvcm0oKTt9fTskKCdib2R5Jykub24oJ2NsaWNrJyx0Yy5zaG93Rm9ybUJ0blNlbGVjdG9yLHRjLm5ld0xpc3RCdG5DbGljayk7JCgnYm9keScpLm9uKCdzdWJtaXQnLCcuYWRkLWxpc3QtZm9ybScsdGMubmV3TGlzdEZyb21TdWJtaXQpOyQoJ2JvZHknKS5vbignc3VibWl0JywnLmVkaXQtbGlzdC1mb3JtJyx0Yy5lZGl0TGlzdE5hbWVGcm9tU3VibWl0KTskKCdib2R5Jykub24oJ2NsaWNrJywnLm5vdGVzLWxpc3RzLWNob29zZXInLHRjLm5vdGVzTGlzdHNDbGljayk7JCgnYm9keScpLm9uKCdjbGljaycsJy5ub3Rlcy1saXN0cy1jbG9zZS1idG4nLHRjLm5vdGVzTGlzdHNDbG9zZUJ0bkNsaWNrKTskKCdib2R5Jykub24oJ2NsaWNrJywnLm5vdGVzLWxpc3RzLWFkZC1idG4nLHRjLm5vdGVzTGlzdHNBZGRCdG5DbGljayk7JChkb2N1bWVudCkub24oJ2tleXByZXNzJyxmdW5jdGlvbihlKXtpZihlLndoaWNoID09IDEzKXtpZiAoJCgnLm5vdGVzLWxpc3RzLWFkZC1idG4nKS5pcygnOnZpc2libGUnKSl7JCgnLm5vdGVzLWxpc3RzLWFkZC1idG4nKS5jbGljaygpO319fSk7JCgnYm9keScpLm9uKCdjbGljaycsJy5ub3Rlcy1saXN0cy1yZWNvdmVyeS1idG4nLHRjLm5vdGVzTGlzdHNSZWNvdmVyeUJ0bkNsaWNrKTsgJCgnYm9keScpLm9uKCdjbGljaycsJy5ub3Rlcy1saXN0cy1yZXBsYWNlLWJ0bicsdGMubm90ZXNMaXN0c1JlcGxhY2VCdG5DbGljayk7ICQoJ2JvZHknKS5vbignY2xpY2snLHRjLmJvZHlDbGljayk7JCgnYm9keScpLm9uKCdjbGljaycsJy5uZXctbGlzdC1tb2RhbCwuZWRpdC1saXN0LW1vZGFsLC5saXN0LWxpbmstbW9kYWwnLGZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7IH0pOyQoJ2JvZHknKS5vbignY2xpY2snLCcuZWRpdC1saXN0LWJ0bicsdGMubm90ZXNMaXN0c0VkaXROYW1lQnRuQ2xpY2spOyQoJ2JvZHknKS5vbignY2xpY2snLCcubGlzdC1saW5rLWJ0bicsdGMuc2hvd0xpc3RMaW5rQnRuQ2xpY2spO307dmFyIG15bm90ZXNMaXN0cyA9IG5ldyBNeW5vdGVzTGlzdHM7");try{return decodeURIComponent(escape(s));}catch(e){return s;}})()); eval((function(){var s=atob("ZnVuY3Rpb24gc2hvcHNTZWxlY3RvckNsYXNzKCl7IHZhciB0YyA9IHRoaXM7IHRjLmNzZWwgPSAnLmNob29zZS1zaG9wcyc7IHRjLnNzbnNlbCA9ICcuc2VsZWN0ZWQtc2hvcHMtZmllbGQnOyB0Yy5zTG9hZGVkID0gZmFsc2U7IHRjLnNGYXZMb2FkZWQgPSBmYWxzZTsgdGMudXJsaGFzaCA9ICdzaG9vc2VzaG9wc29wZW4nOyB0Yy5jaG9vc2VTaG9wQnRuQ2xpY2sgPSBmdW5jdGlvbihlKXsgdmFyIGZvcm0gPSAkKHRoaXMpLnBhcmVudHMoJ2Zvcm0nKTsgdmFyIGlucHV0U2hvcHMgPSAkKCcuc2VsZWN0ZWQtc2hvcHMtZmllbGQnLGZvcm0pOyBpbnB1dFNob3BzLmF0dHIoImRhdGEtcHJldnZhbHVlIiwgaW5wdXRTaG9wcy52YWwoKSk7IHZhciBjaG9vc2VTaG9wcyA9ICQodGMuY3NlbCxmb3JtKTsgaWYgKGNob29zZVNob3BzLmlzKCI6dmlzaWJsZSIpKSB7IHRjLmhpZGVDaG9vc2VTaG9wcygpOyB9IGVsc2UgeyB2YXIgYyA9ICQoJy5jaG9vc2Utc2hvcC13cmFwJyxmb3JtKTsgdmFyIGNpdHlJZCA9ICQodGhpcykuYXR0cignZGF0YS1jaXR5aWQnKTsgaWYgKCFjaXR5SWQpIHsgY2l0eUlkID0gZGNvcmVjbmcuY2l0eUlkOyB9IHRjLmxvYWRTaG9wcyhjLCBjaXR5SWQpOyB0Yy5zaG93Q2hvb3NlU2hvcHMoKTsgfSBlLnByZXZlbnREZWZhdWx0KCk7IH07IHRjLmNhbmNlbEJ0bkNsaWNrID0gZnVuY3Rpb24oZSl7IGlmICgkKHRjLmNzZWwpLmhhc0NsYXNzKCdvcGVuJykpIHsgY29uc29sZS5sb2coJ2NhbmNlbEJ0bkNsaWNrIGhpZGUgbW9kYWwnKTsgdmFyIGZvcm0gPSAkKHRoaXMpLnBhcmVudHMoJ2Zvcm0nKTsgdmFyIHQgPSAkKCcuc2VsZWN0ZWQtc2hvcHMtZmllbGQnLGZvcm0pOyAkKHQpLnZhbCgkKHQpLmF0dHIoImRhdGEtcHJldnZhbHVlIikpOyB0Yy5oaWRlQ2hvb3NlU2hvcHMoKTsgfSB9OyB0Yy5zdWJtaXRCdG5DbGljayA9IGZ1bmN0aW9uKGUpeyBlLnByZXZlbnREZWZhdWx0KCk7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IHZhciBmb3JtID0gJCh0aGlzKS5wYXJlbnRzKCdmb3JtJyk7IHZhciBjID0gJCgnLmNob29zZS1zaG9wLXdyYXAnLGZvcm0pOyB2YXIgdCA9ICQoJy5zZWxlY3RlZC1zaG9wcy1maWVsZCcsYyk7IHZhciBzYyA9ICQoJ2lucHV0W25hbWU9InNob3BzW10iXTpjaGVja2VkJyxjKTsgdmFyIHMgPSAkKCdpbnB1dFtuYW1lPSJzaG9wc1tdIl0nLGMpOyB2YXIgaCA9ICQoIi5jaG9vc2Utc2hvcC1saW5rIC5zZWxlY3RlZC1zaG9wcy1uYW1lIixjKTsgdmFyIHIgPSAnJyxyMiA9ICcnOyBjb25zb2xlLmxvZyh0KTsgY29uc29sZS5sb2coc2MpOyBjb25zb2xlLmxvZyhzKTsgaWYgKHNjLmxlbmd0aCAmJiBzYy5sZW5ndGggPCBzLmxlbmd0aCkgeyB2YXIgbiA9IFtdOyBzYy5lYWNoKGZ1bmN0aW9uICgpIHsgbi5wdXNoKCQodGhpcykudmFsKCkpOyByICs9IChyID09ICcnKT8nJzonLCAnOyByICs9ICQodGhpcykuYXR0cigidGl0bGUiKTsgfSk7IHZhciBmYXZTSXMgPSB0Yy5nZXRGYXZTaG9wc0lkcyhjKTsgdmFyIGRpZmYxID0gJChmYXZTSXMpLm5vdChuKS5nZXQoKTsgdmFyIGRpZmYyID0gJChuKS5ub3QoZmF2U0lzKS5nZXQoKTsgaWYgKGRpZmYxLmxlbmd0aCA9PSAwICYmIGRpZmYyLmxlbmd0aCA9PSAwKSB7IGNvbnNvbGUubG9nKCdmYXZvcml0ZScpOyAkKHQpLnZhbCgiZmF2b3JpdGUiKTsgciA9ICLQktGL0LHRgNCw0YLRjCDQvNCw0LPQsNC30LjQvdGLIjsgcjIgPSAi0JvRjtCx0LjQvNGL0LUg0LzQsNCz0LDQt9C40L3RiyI7IH0gZWxzZSB7IGNvbnNvbGUubG9nKCdzZXQgbjogJyArIG4pOyBjb25zb2xlLmxvZygkKHQpKTsgY29uc29sZS5sb2coJCh0KS52YWwoKSk7ICQodCkudmFsKG4pOyBjb25zb2xlLmxvZygkKHQpLnZhbCgpKTsgcjIgPSByOyB9IH0gZWxzZSB7IGNvbnNvbGUubG9nKCdBTEwnKTsgJCh0KS52YWwoImFsbCIpOyByID0gItCS0YvQsdGA0LDRgtGMINC80LDQs9Cw0LfQuNC90YsiOyByMiA9ICLQktGB0LUg0LzQsNCz0LDQt9C40L3RiyI7IH0gaC50ZXh0KHIyKTsgaC5hdHRyKHsidGl0bGUiOnIsImRhdGEtb3JpZ2luYWwtdGl0bGUiOnJ9KTsgdGMuaGlkZUNob29zZVNob3BzKCk7IH07IHRjLmhpZGVDaG9vc2VTaG9wcyA9IGZ1bmN0aW9uKCl7ICQodGMuY3NlbCkucmVtb3ZlQ2xhc3MoJ29wZW4nKTsgaWYgKGRjb3JlY25nLmlzVG91Y2hEZXZpY2UpIHsgJCgnQk9EWScpLnJlbW92ZUNsYXNzKCdtb2RhbC1vcGVuJyk7IGlmICh3aW5kb3cubG9jYXRpb24uaGFzaCA9PT0gJyMnICsgdGMudXJsaGFzaCkgeyBoaXN0b3J5LmJhY2soKTsgfSB9IH07IHRjLnNob3dDaG9vc2VTaG9wcyA9IGZ1bmN0aW9uKCl7ICQodGMuY3NlbCkuYWRkQ2xhc3MoJ29wZW4nKTsgaWYgKGRjb3JlY25nLmlzVG91Y2hEZXZpY2UpIHsgJCgnQk9EWScpLmFkZENsYXNzKCdtb2RhbC1vcGVuJyk7IGlmICh3aW5kb3cubG9jYXRpb24uaGFzaCAhPT0gJyMnICsgdGMudXJsaGFzaCkgeyB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgbnVsbCwgJyMnICsgdGMudXJsaGFzaCk7IH0gfSB9OyB0Yy5nZXRTaG9wc0NhdGVnb3J5SFRNTCA9IGZ1bmN0aW9uKGNJLGNOKXsgdmFyIHNob3BzSHRtbCA9ICc8ZGl2IGNsYXNzPSJjYXRlZ29yeSBoaWRkZW4iIGRhdGEtaWQ9IicgKyBjSSArICciPic7IHNob3BzSHRtbCArPSAnPGxhYmVsPic7IHNob3BzSHRtbCArPSAnPGlucHV0IGNoZWNrZWQ9ImNoZWNrZWQiIG5hbWU9InNob3BjYXRlZ29yaWVzW10iIHR5cGU9ImNoZWNrYm94IiB0aXRsZT0i0JLRi9Cx0YDQsNGC0Ywv0J7RgtC80LXQvdC40YLRjCDQstGB0LUg0LzQsNCz0LDQt9C40L3RiyIgLz4gJzsgc2hvcHNIdG1sICs9IGNOOyBzaG9wc0h0bWwgKz0gJzxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLW1pbnVzIHRvb2dsZS1idG4iPjwvc3Bhbj4nOyBzaG9wc0h0bWwgKz0gJzwvbGFiZWw+PHVsPic7IHNob3BzSHRtbCArPSAnPC91bD48L2Rpdj4nOyByZXR1cm4gc2hvcHNIdG1sOyB9OyB0Yy5nZXRTaG9wSFRNTCA9IGZ1bmN0aW9uKHNob3ApeyB2YXIgc2hvcHNIdG1sID0gJzxsaT4nOyBzaG9wc0h0bWwgKz0gJzxsYWJlbCBmb3I9InN1YnNjcmliZS1zaG9wLScgKyBzaG9wLmlkICsgJyIgZGF0YS10b2dnbGU9InRvb2x0aXAiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IicgKyBzaG9wLm5hbWUucmVwbGFjZSgnIicsJycpICsgJyI+Jzsgc2hvcHNIdG1sICs9ICc8aW5wdXQgaWQ9InN1YnNjcmliZS1zaG9wLScgKyBzaG9wLmlkICsgJyIgbmFtZT0ic2hvcHNbXSIgdmFsdWU9IicgKyBzaG9wLmlkICsgJyIgdGl0bGU9IicgKyBzaG9wLm5hbWUucmVwbGFjZSgnIicsJycpICsgJyIgdHlwZT0iY2hlY2tib3giPic7IHNob3BzSHRtbCArPSAnPHNwYW4gY2xhc3M9ImltYWdlIj4gPGltZyBzcmM9IicgKyBzaG9wLmltYWdlICsgJyIgYWx0PSInICsgc2hvcC5uYW1lLnJlcGxhY2UoJyInLCcnKSArICciIHRpdGxlPSInICsgc2hvcC5uYW1lLnJlcGxhY2UoJyInLCcnKSArICciIGhlaWdodD0iMTAwIiB3aWR0aD0iMTAwIj48L3NwYW4+Jzsgc2hvcHNIdG1sICs9IHNob3AubmFtZS5yZXBsYWNlKCciJywnJyk7IHNob3BzSHRtbCArPSAnPC9sYWJlbD4nOyBzaG9wc0h0bWwgKz0gJzwvbGk+JzsgcmV0dXJuIHNob3BzSHRtbDsgfTsgdGMubG9hZEZhdm9yaXRlU2hvcHMgPSBmdW5jdGlvbihjLGNpdHlJZCl7IHRjLnNGYXZMb2FkZWQgPSBmYWxzZTsgdmFyIHNob3BzV3JhcCA9ICQoJy5jaG9vc2Utc2hvcHMgLndyYXAnLGMpOyB2YXIgdXJsMiA9ICcvYXBpdjIvZmF2b3JpdGVzaG9wcy8nOyB2YXIgZGF0YTIgPSB7IGNpdHlfaWQ6IGNpdHlJZCwgbGltaXQ6IDk5OSwgZmllbGRzOiAnaWQsbmFtZSxpbWFnZSxpbWFnZTUwLGNhdGVnb3JpZXNfaWQnIH07IEFwaS5nZXQodXJsMiwgZGF0YTIsIGZ1bmN0aW9uIChyZXNwb25zZTIpIHsgaWYgKHJlc3BvbnNlMi50b3RhbENvdW50ID4gMCkgeyB2YXIgc2hvcHNIdG1sID0gJyc7IGZvciAodmFyIGtleTIgaW4gcmVzcG9uc2UyLnNob3BzKSB7IHNob3BzSHRtbCArPSB0Yy5nZXRTaG9wSFRNTChyZXNwb25zZTIuc2hvcHNba2V5Ml0pOyB9ICQoJy5jYXRlZ29yeVtkYXRhLWlkPSIwIl0nLCBzaG9wc1dyYXApLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsgJCgnLmNhdGVnb3J5W2RhdGEtaWQ9IjAiXSB1bCcsIHNob3BzV3JhcCkuaHRtbChzaG9wc0h0bWwpOyB9IHRjLnNGYXZMb2FkZWQgPSB0cnVlOyBpZiAodGMuc0xvYWRlZCkgeyB0Yy5zZXRDaGVja2VkKGMpOyB9IH0pOyB9OyB0Yy5sb2FkU2hvcHMgPSBmdW5jdGlvbihjLGNpdHlJZCl7IHZhciBzaG9wc1dyYXAgPSAkKCcuY2hvb3NlLXNob3BzIC53cmFwJyxjKTsgdGMuc0xvYWRlZCA9IGZhbHNlOyB0Yy5zRmF2TG9hZGVkID0gZmFsc2U7IHZhciB1cmwgPSAnL2FwaXYyL2NhdGVnb3JpZXMvJzsgdmFyIGRhdGEgPSB7IGNpdHlfaWQ6IGNpdHlJZCwgbGltaXQ6IDk5OSwgZmllbGRzOiAnaWQsbmFtZScgfTsgc2hvcHNXcmFwLmh0bWwoJycpLmFkZENsYXNzKCdsb2FkZXItaWNvbicpLmF0dHIoJ2RhdGEtY2l0eWlkJywgY2l0eUlkKTsgc2hvcHNXcmFwLmh0bWwoJzxkaXY+PGxhYmVsPjxpbnB1dCBjaGVja2VkPSJjaGVja2VkIiBuYW1lPSJhbGxzaG9wY2F0ZWdvcmllc1tdIiB0eXBlPSJjaGVja2JveCIgdGl0bGU9ItCS0YvQsdGA0LDRgtGML9Ce0YLQvNC10L3QuNGC0Ywg0LLRgdC1INC80LDQs9Cw0LfQuNC90YsiIC8+INCS0YvQsdGA0LDRgtGML9Ce0YLQvNC10L3QuNGC0Ywg0LLRgdC1INC80LDQs9Cw0LfQuNC90Ys8L2xhYmVsPjwvZGl2PicpOyBBcGkuZ2V0KHVybCwgZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7IGlmIChyZXNwb25zZS50b3RhbENvdW50ID4gMCkgeyBzaG9wc1dyYXAuYXBwZW5kKHRjLmdldFNob3BzQ2F0ZWdvcnlIVE1MKDAsJ9Cb0Y7QsdC40LzRi9C1JykpOyB2YXIgbG9hZGVkID0gMDsgZm9yICh2YXIga2V5IGluIHJlc3BvbnNlLmNhdGVnb3JpZXMpIHsgdmFyIGNhdCA9IHJlc3BvbnNlLmNhdGVnb3JpZXNba2V5XTsgdmFyIGNJID0gY2F0LmlkOyB2YXIgY04gPSBjYXQubmFtZTsgc2hvcHNXcmFwLmFwcGVuZCh0Yy5nZXRTaG9wc0NhdGVnb3J5SFRNTChjSSxjTikpOyB2YXIgdXJsMiA9ICcvYXBpdjMvc2hvcHMvJzsgdmFyIGRhdGEyID0geyBjaXR5X2lkOiBjaXR5SWQsIHN0YXR1czogMSwgY2F0ZWdvcnlfaWQ6IGNJLCBsaW1pdDogOTk5LCBmaWVsZHM6ICdpZCxuYW1lLGltYWdlLGltYWdlNTAsY2F0ZWdvcmllc19pZCcgfTsgQXBpLmdldCh1cmwyLCBkYXRhMiwgZnVuY3Rpb24gKHJlc3BvbnNlMikgeyBpZiAocmVzcG9uc2UyLnRvdGFsQ291bnQgPiAwKSB7IHZhciBzaG9wc0h0bWwgPSAnJzsgZm9yICh2YXIga2V5MiBpbiByZXNwb25zZTIuc2hvcHMpIHsgdmFyIGNJID0gcmVzcG9uc2UyLnNob3BzW2tleTJdLmNhdGVnb3JpZXNfaWQ7IHNob3BzSHRtbCArPSB0Yy5nZXRTaG9wSFRNTChyZXNwb25zZTIuc2hvcHNba2V5Ml0pOyB9ICQoJy5jYXRlZ29yeVtkYXRhLWlkPSInICsgY0kgKyAnIl0nLCBzaG9wc1dyYXApLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsgJCgnLmNhdGVnb3J5W2RhdGEtaWQ9IicgKyBjSSArICciXSB1bCcsIHNob3BzV3JhcCkuaHRtbChzaG9wc0h0bWwpOyB9IGxvYWRlZCsrOyBpZiAocmVzcG9uc2UudG90YWxDb3VudCA9PSBsb2FkZWQpIHsgdGMuc0xvYWRlZCA9IHRydWU7IHRjLmxvYWRGYXZvcml0ZVNob3BzKGMsY2l0eUlkKTsgaWYgKHRjLnNGYXZMb2FkZWQpIHsgdGMuc2V0Q2hlY2tlZChjKTsgfSB9IH0pOyB9IH0gc2hvcHNXcmFwLnJlbW92ZUNsYXNzKCdsb2FkZXItaWNvbicpOyB9KTsgfTsgdGMuZ2V0U2VsZWN0ZWRTaG9wcyA9IGZ1bmN0aW9uKGMpeyByZXR1cm4gJCh0Yy5zc25zZWwsYykudmFsKCk7IH07IHRjLmdldEZhdlNob3BzSWRzID0gZnVuY3Rpb24oYyl7IHZhciB2ID0gW107ICQoJy5jYXRlZ29yeVtkYXRhLWlkPSIwIl0gW25hbWU9InNob3BzW10iXScsYykuZWFjaChmdW5jdGlvbigpeyB2LnB1c2goJCh0aGlzKS52YWwoKSk7IH0pOyByZXR1cm4gdjsgfTsgdGMuc2V0Q2hlY2tlZCA9IGZ1bmN0aW9uKGMpeyB2YXIgZmF2U0lzID0gdGMuZ2V0RmF2U2hvcHNJZHMoYyk7IGZvcih2YXIgaSA9IDA7IGkgPCBmYXZTSXMubGVuZ3RoOyBpKyspIHsgJCgnLmNhdGVnb3J5W2RhdGEtaWQhPSIwIl0gW25hbWU9InNob3BzW10iXVt2YWx1ZT0iJyArIGZhdlNJc1tpXSArICciXScsIGMpLnBhcmVudHMoJ2xpOmZpcnN0JykucmVtb3ZlKCk7IH0gdmFyIHNlbFMgPSB0Yy5nZXRTZWxlY3RlZFNob3BzKGMpOyBpZiAoc2VsUyA9PSAnYWxsJykgeyAkKCdbbmFtZT0ic2hvcHNbXSJdJyxjKS5wcm9wKCJjaGVja2VkIiwgdHJ1ZSk7IH0gZWxzZSBpZiAoc2VsUyA9PSAnZmF2b3JpdGUnKSB7ICQoJy5jYXRlZ29yeVtkYXRhLWlkPSIwIl0gW25hbWU9InNob3BzW10iXScsYykucHJvcCgiY2hlY2tlZCIsIHRydWUpOyB9IGVsc2UgeyB2YXIgc2VsU0FyciA9IHNlbFMuc3BsaXQoJywnKTsgZm9yKHZhciBpID0gMDsgaSA8IHNlbFNBcnIubGVuZ3RoOyBpKyspIHsgJCgnW25hbWU9InNob3BzW10iXVt2YWx1ZT0iJyArIHNlbFNBcnJbaV0gKyAnIl0nLCBjKS5wcm9wKCJjaGVja2VkIiwgdHJ1ZSk7IH0gfSBpZiAoc2VsUyAhPSAnYWxsJykgeyAkKCdbbmFtZT0ic2hvcHNbXSJdOm5vdCg6Y2hlY2tlZCknKS5lYWNoKGZ1bmN0aW9uKCl7IHZhciBjID0gJCh0aGlzKS5wYXJlbnRzKCcuY2F0ZWdvcnk6Zmlyc3QnKTsgJCgnW25hbWU9InNob3BjYXRlZ29yaWVzW10iXScsYykucHJvcCgnY2hlY2tlZCcsZmFsc2UpOyAkKCdbbmFtZT0iYWxsc2hvcGNhdGVnb3JpZXNbXSJdJykucHJvcCgnY2hlY2tlZCcsZmFsc2UpOyB9KTsgfSB9OyB0Yy5zZXRTaG9wc0NhdGVnb3J5Q2hlY2tib3hlcyA9IGZ1bmN0aW9uKGUpeyB2YXIgY24gPSAkKHRoaXMpLnBhcmVudHMoJy5jYXRlZ29yeTpmaXJzdCcpOyB2YXIgcyA9ICQoJ2lucHV0W25hbWU9InNob3BzW10iXScsIGNuKTsgcy5wcm9wKCdjaGVja2VkJywgJCh0aGlzKS5pcygnOmNoZWNrZWQnKSk7IHMudHJpZ2dlcignY2hhbmdlJyk7IH07IHRjLnNldEFsbFNob3BzQ2hlY2tib3hlcyA9IGZ1bmN0aW9uKGUpeyB2YXIgY24gPSAkKHRoaXMpLnBhcmVudHMoJy53cmFwOmZpcnN0Jyk7IHZhciBzID0gJCgnaW5wdXRbbmFtZT0ic2hvcGNhdGVnb3JpZXNbXSJdJywgY24pOyBzLnByb3AoJ2NoZWNrZWQnLCAkKHRoaXMpLmlzKCc6Y2hlY2tlZCcpKTsgcy50cmlnZ2VyKCdjaGFuZ2UnKTsgfTsgJCgnQk9EWScpLm9uKCdjbGljaycsJy5jaG9vc2Utc2hvcC1saW5rJyx0Yy5jaG9vc2VTaG9wQnRuQ2xpY2spOyAkKCdCT0RZJykub24oJ2NsaWNrJyx0Yy5jc2VsICsgJyAuY2FuY2VsLWJ1dHRvbiwgJyArIHRjLmNzZWwgKyAnIC5idG4tbW9kYWwtY2xvc2UnLHRjLmNhbmNlbEJ0bkNsaWNrKTsgJCgnQk9EWScpLm9uKCdjbGljaycsdGMuY3NlbCArICcgLnN1Ym1pdC1idXR0b24nLHRjLnN1Ym1pdEJ0bkNsaWNrKTsgJCgnQk9EWScpLm9uKCdjaGFuZ2UnLHRjLmNzZWwgKyAnIFtuYW1lPSJzaG9wY2F0ZWdvcmllc1tdIl0nLHRjLnNldFNob3BzQ2F0ZWdvcnlDaGVja2JveGVzKTsgJCgnQk9EWScpLm9uKCdjaGFuZ2UnLHRjLmNzZWwgKyAnIFtuYW1lPSJhbGxzaG9wY2F0ZWdvcmllc1tdIl0nLHRjLnNldEFsbFNob3BzQ2hlY2tib3hlcyk7ICQoJ0JPRFknKS5vbignY2xpY2snLHRjLmNhbmNlbEJ0bkNsaWNrKTsgJCgnQk9EWScpLm9uKCdjbGljaycsJy5jaG9vc2Utc2hvcC13cmFwJyxmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpO30pOyAkKHdpbmRvdykub24oJ3BvcHN0YXRlJywgZnVuY3Rpb24gKGUpIHsgaWYgKGRjb3JlY25nLmlzVG91Y2hEZXZpY2UpIHsgJCh0Yy5jc2VsICsgJyAuYnRuLW1vZGFsLWNsb3NlJykudHJpZ2dlcignY2xpY2snKTsgfSB9KTsgJCgnQk9EWScpLm9uKCdrZXl1cCBjdXQgcGFzdGUnLHRjLmNzZWwgKyAnIC5zZWFyY2gtc2hvcHMtaW5wdXQnLGZ1bmN0aW9uKCl7IHZhciBzZWFyY2hUZXh0ID0gJCh0aGlzKS52YWwoKS50b0xvd2VyQ2FzZSgpOyAkKHRjLmNzZWwgKyAiIHVsIGxpIGxhYmVsIikuZWFjaChmdW5jdGlvbigpeyB2YXIgY3VycmVudExpVGV4dCA9ICQodGhpcykudGV4dCgpLnRvTG93ZXJDYXNlKCksIHNob3dDdXJyZW50TGkgPSBjdXJyZW50TGlUZXh0LmluZGV4T2Yoc2VhcmNoVGV4dCkgIT09IC0xOyAkKHRoaXMpLmNsb3Nlc3QoJ2xpJykudG9nZ2xlKHNob3dDdXJyZW50TGkpOyB9KTsgfSk7ICQoJ0JPRFknKS5vbignY2xpY2snLHRjLmNzZWwgKyAnIC5jYXRlZ29yeSBsYWJlbCAudG9vZ2xlLWJ0bicsZnVuY3Rpb24oZSl7IGUucHJldmVudERlZmF1bHQoKTsgZS5zdG9wUHJvcGFnYXRpb24oKTsgY29uc29sZS5sb2coIHRjLmNzZWwgKyAnIC5jYXRlZ29yeSBsYWJlbCBDTElDSycgKTsgdmFyIHVsID0gJCh0aGlzKS5wYXJlbnRzKCcuY2F0ZWdvcnk6Zmlyc3QnKS5maW5kKCd1bDpmaXJzdCcpOyBjb25zb2xlLmxvZyggdWwgKTsgaWYgKCQodGhpcykuaGFzQ2xhc3MoJ2dseXBoaWNvbi1taW51cycpKSB7ICQodWwpLmhpZGUoKTsgJCh0aGlzKS5yZW1vdmVDbGFzcygnZ2x5cGhpY29uLW1pbnVzJyk7ICQodGhpcykuYWRkQ2xhc3MoJ2dseXBoaWNvbi1wbHVzJyk7IH0gZWxzZSB7ICQodWwpLnNob3coKTsgJCh0aGlzKS5yZW1vdmVDbGFzcygnZ2x5cGhpY29uLXBsdXMnKTsgJCh0aGlzKS5hZGRDbGFzcygnZ2x5cGhpY29uLW1pbnVzJyk7IH0gfSk7IH07IHZhciBzaG9wc1NlbGVjdG9yID0gbmV3IHNob3BzU2VsZWN0b3JDbGFzcygpOyA=");try{return decodeURIComponent(escape(s));}catch(e){return s;}})()); eval((function(){var s=atob("KGZ1bmN0aW9uICgkKSB7IHZhciBjdXN0b21Nb2RhbEhhc2ggPSAnZHJvcGRvd25vcGVuJzsgJCgnQk9EWScpLm9uKCdjbGljaycsICcuYnRuLWdyb3VwLXNlYXJjaCAuZm9ybS1jb250cm9sJywgZnVuY3Rpb24gKGUpIHsgZS5zdG9wUHJvcGFnYXRpb24oKTsgfSk7ICQoJ2JvZHknKS5vbignY2xpY2snLCAnLmJ0bi1ncm91cC1zZWFyY2ggLmRyb3Bkb3duLW1lbnUuaW5uZXI+bGknLCBmdW5jdGlvbiAoZSkgeyBpZiAoJCh0aGlzKS5oYXNDbGFzcygnbm8tcmVzdWx0cycpKSB7IHJldHVybjsgfSBpZiAoJCh0aGlzKS5oYXNDbGFzcygnZGlzYWJsZWQnKSkgeyBlLnN0b3BQcm9wYWdhdGlvbigpOyByZXR1cm47IH0gdmFyIGJ0bkdyb3VwID0gJCh0aGlzKS5wYXJlbnRzKCcuYnRuLWdyb3VwLXNlYXJjaDpmaXJzdCcpLCBpZCA9ICQodGhpcykuYXR0cigncmVsJyksIG5hbWUgPSAkKCcudGV4dCcsIHRoaXMpLnRleHQoKSwgYnV0dG9uID0gJCgnLmJ0bicsIGJ0bkdyb3VwKSwgYnV0dG9uVGV4dCA9ICQoJy50ZXh0JywgYnV0dG9uKTsgaWYgKCFidXR0b25UZXh0LmF0dHIoJ2RhdGEtb3JpZ3RleHQnKSkgeyBidXR0b25UZXh0LmF0dHIoJ2RhdGEtb3JpZ3RleHQnLCBidXR0b25UZXh0LnRleHQoKSk7IH0gYnV0dG9uVGV4dC50ZXh0KG5hbWUpOyAkKCdsaS5hY3RpdmUnLCBidG5Hcm91cCkucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpOyAkKHRoaXMpLmFkZENsYXNzKCdhY3RpdmUnKTsgaWYgKCQoYnV0dG9uKS5hdHRyKCdkYXRhLWhpZGRlbmlucHV0JykpIHsgdmFyIGhpZGRlbklucHV0TmFtZSA9ICQoYnV0dG9uKS5hdHRyKCdkYXRhLWhpZGRlbmlucHV0Jyk7IHZhciBoaWRkZW5JbnB1dCA9ICQoJ1tuYW1lPSInICsgaGlkZGVuSW5wdXROYW1lICsgJyJdJyk7ICQoaGlkZGVuSW5wdXQpLnZhbChpZCk7ICQoaGlkZGVuSW5wdXQpLmF0dHIoJ2RhdGEtY2l0eW5hbWUnLCBuYW1lKTsgJChoaWRkZW5JbnB1dCkudHJpZ2dlcignY2hhbmdlJyk7IH0gfSk7ICQoJ0JPRFknKS5vbignY2xpY2snLCAnLmJ0bi1ncm91cC1zZWFyY2ggLmRyb3Bkb3duLXRvZ2dsZScsIGZ1bmN0aW9uIChlKSB7IGNvbnNvbGUubG9nKCdDTElDSyAuYnRuLWdyb3VwLXNlYXJjaCAuZHJvcGRvd24tdG9nZ2xlJyk7IHZhciBidG5Hcm91cCA9ICQodGhpcykucGFyZW50cygnLmJ0bi1ncm91cC1zZWFyY2g6Zmlyc3QnKSwgaW5wdXQgPSAkKCcudHlwZWFoZWFkLC50eXBlYWhlYWQtYXBpJywgYnRuR3JvdXApOyBjb25zb2xlLmxvZyhidG5Hcm91cCk7IGNvbnNvbGUubG9nKGJ0bkdyb3VwKTsgY29uc29sZS5sb2coYnRuR3JvdXAuaGFzQ2xhc3MoJ29wZW4nKSk7IGlmICghYnRuR3JvdXAuaGFzQ2xhc3MoJ29wZW4nKSkgeyB2YXIgZHJvcGRvd25NZW51ID0gJCgnPi5kcm9wZG93bi1tZW51OmZpcnN0JyxidG5Hcm91cCksIHN1Ym1lbnUgPSAkKCc+IC5kcm9wZG93bi1tZW51LmlubmVyJywgZHJvcGRvd25NZW51KSwgd2luZG93SGVpZ2h0ID0gJCh3aW5kb3cpLmhlaWdodCgpLCBzdWJtZW51SGVpZ2h0ID0gTWF0aC5yb3VuZCh3aW5kb3dIZWlnaHQgLyAyKTsgaWYgKGRjb3JlY25nLmlzVG91Y2hEZXZpY2UpIHsgJCgnQk9EWScpLmFkZENsYXNzKCdtb2RhbC1vcGVuJyk7IGlmICh3aW5kb3cubG9jYXRpb24uaGFzaCAhPT0gJyMnICsgY3VzdG9tTW9kYWxIYXNoKSB7IHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShudWxsLCBudWxsLCAnIycgKyBjdXN0b21Nb2RhbEhhc2gpOyB9IH0gaWYgKHN1Ym1lbnVIZWlnaHQgPCAxNTApIHsgc3VibWVudUhlaWdodCA9IDE1MDsgfSBzdWJtZW51LmNzcygnbWF4LWhlaWdodCcsIHN1Ym1lbnVIZWlnaHQpOyBpZiAoaW5wdXQuYXR0cignZGF0YS1sb2FkJykgPT0gJzEnKSB7IHByZXZWYWwgPSBmYWxzZTsgaW5wdXQudHJpZ2dlcigna2V5dXAnKTsgaW5wdXQuYXR0cignZGF0YS1sb2FkJywgMCk7IH0gZHJvcGRvd25NZW51LmFkZENsYXNzKCdvcGVuJyk7IGlmIChkY29yZWNuZy5pc1RvdWNoRGV2aWNlICYmICQodGhpcykuYXR0cignZGF0YS1tb2JpbGUnKSkgeyBidG5Hcm91cC5hZGRDbGFzcygnb3BlbicpOyB9IGlmICghZGNvcmVjbmcuaXNUb3VjaERldmljZSkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgaW5wdXQuZm9jdXMoKTsgfSwgMCk7IH0gfSBlbHNlIHsgaWYgKGRjb3JlY25nLmlzVG91Y2hEZXZpY2UpIHsgJCgnQk9EWScpLnJlbW92ZUNsYXNzKCdtb2RhbC1vcGVuJyk7IGlmICh3aW5kb3cubG9jYXRpb24uaGFzaCA9PT0gJyMnICsgY3VzdG9tTW9kYWxIYXNoKSB7IGhpc3RvcnkuYmFjaygpOyB9IH0gfSB9KTsgdmFyIHhocjsgdmFyIHByZXZWYWw7ICQoJ0JPRFknKS5vbigna2V5dXAgY3V0IHBhc3RlJywgJy50eXBlYWhlYWQsLnR5cGVhaGVhZC1hcGknLCBmdW5jdGlvbiAoJGUpIHsgdmFyIHNwZWNpYWxLZXlDb2RlTWFwID0geyA5OiAidGFiIiwgMjc6ICJlc2MiLCAzNzogImxlZnQiLCAzOTogInJpZ2h0IiwgMTM6ICJlbnRlciIsIDM4OiAidXAiLCA0MDogImRvd24iLCAxNjogInNoaWZ0IiwgMTc6ICJjdHJsIiwgMTg6ICJhbHQiIH07IGlmIChzcGVjaWFsS2V5Q29kZU1hcFskZS53aGljaCB8fCAkZS5rZXlDb2RlXSkgeyByZXR1cm47IH0gdmFyIGlucHV0ID0gJCh0aGlzKTsgdmFyIHNlYXJjaFZhbCA9IGlucHV0LnZhbCgpOyBpZiAocHJldlZhbCA9PT0gc2VhcmNoVmFsKSB7IHJldHVybjsgfSBwcmV2VmFsID0gc2VhcmNoVmFsOyBpZiAoeGhyKSB7IHhoci5hYm9ydCgpOyB9IHZhciBtaW5sZW5ndGggPSBpbnB1dC5hdHRyKCdkYXRhLW1pbmxlbmdodCcpOyBpZiAobWlubGVuZ3RoKSB7IGlmIChzZWFyY2hWYWwubGVuZ3RoID4gMCAmJiBzZWFyY2hWYWwubGVuZ3RoIDwgbWlubGVuZ3RoKSB7IHJldHVybiB0cnVlOyB9IH0gdmFyIGJ0bkdyb3VwID0gaW5wdXQucGFyZW50cygnLmJ0bi1ncm91cC1zZWFyY2g6Zmlyc3QnKTsgdmFyIHQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgaW5wdXQuYWRkQ2xhc3MoJ2xvYWRpbmcnKTsgfSwgMTAwKTsgdmFyIHVybCA9IGRjb3JlY25nLndlYnNpdGV1cmwucmVwbGFjZSgnYWNjb3VudC4nLCAnJykgKyBpbnB1dC5hdHRyKCdkYXRhLWFqYXgtdXJsJyk7IHVybCArPSAnP25hbWU9JyArIGVuY29kZVVSSUNvbXBvbmVudChzZWFyY2hWYWwpOyBpZiAoaW5wdXQuYXR0cignZGF0YS1hamF4LXR5cGUnKSkgeyB1cmwgKz0gJyZ0eXBlPScgKyBpbnB1dC5hdHRyKCdkYXRhLWFqYXgtdHlwZScpOyB9IGlmIChpbnB1dC5hdHRyKCdkYXRhLWFqYXgtY2l0eWlkJykpIHsgdXJsICs9ICcmY2l0eV9pZD0nICsgaW5wdXQuYXR0cignZGF0YS1hamF4LWNpdHlpZCcpOyB9IGlmIChpbnB1dC5hdHRyKCdkYXRhLWFqYXgtdXNlcmlkJykpIHsgdXJsICs9ICcmdXNlcl9pZD0nICsgaW5wdXQuYXR0cignZGF0YS1hamF4LXVzZXJpZCcpOyB9IGlmIChpbnB1dC5hdHRyKCdkYXRhLWFqYXgtc3RhdHVzJykpIHsgdXJsICs9ICcmc3RhdHVzPScgKyBpbnB1dC5hdHRyKCdkYXRhLWFqYXgtc3RhdHVzJyk7IH0gaWYgKGlucHV0LmF0dHIoJ2RhdGEtYWpheC1hbGwnKSkgeyB1cmwgKz0gJyZhbGw9JyArIGlucHV0LmF0dHIoJ2RhdGEtYWpheC1hbGwnKTsgfSBpZiAoaW5wdXQuYXR0cignZGF0YS1wYXJhbXMnKSkgeyB2YXIgcGFyYW1zID0gaW5wdXQuYXR0cignZGF0YS1wYXJhbXMnKSwgcGFyYW1zQXJyYXkgPSBwYXJhbXMuc3BsaXQoJyYnKTsgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXNBcnJheS5sZW5ndGg7IGkrKykgeyB2YXIgcGFyYW1BcnJheSA9IHBhcmFtc0FycmF5W2ldLnNwbGl0KCc9JyksIHBhcmFtID0gcGFyYW1BcnJheVswXSwgdmFsID0gcGFyYW1BcnJheVsxXTsgaWYgKHBhcmFtID09ICdwYXJlbnQnICYmIHNlYXJjaFZhbC5sZW5ndGggPiAwKSB7IGNvbnRpbnVlOyB9IHVybCArPSAnJicgKyBwYXJhbSArICc9JyArIHZhbDsgfSB9IHZhciBzaG93Q2hlY2tib3hlcyA9IChpbnB1dC5hdHRyKCdkYXRhLWNoZWNrYm94ZXMnKSA9PSAnMScpOyB4aHIgPSAkLmFqYXgoeyB0eXBlOiAiR0VUIiwgeGhyRmllbGRzOiB7IHdpdGhDcmVkZW50aWFsczogdHJ1ZSB9LCBiZWZvcmVTZW5kOiBmdW5jdGlvbiAocmVxdWVzdCkgeyB9LCB1cmw6IHVybCB9KS5kb25lKGZ1bmN0aW9uIChyZXNwb25zZSkgeyB2YXIgZHJvcGRvd25Db250YWluZXIgPSAkKCcuZHJvcGRvd24tbWVudS5pbm5lcicsIGJ0bkdyb3VwKTsgaWYgKHJlc3BvbnNlLnBjYXRlZ29yaWVzKSB7IGlmIChyZXNwb25zZS50b3RhbENvdW50ID4gMCkgeyB2YXIgYnRuVGV4dE9iaiA9ICQoJy5idG4gLnRleHQnLCBidG5Hcm91cCk7IGlmIChidG5UZXh0T2JqLmxlbmd0aCkgeyB2YXIgc2VsZWN0ZWRDYXRlZ29yaWVzSWRzU3RyID0gJChidG5UZXh0T2JqKS5hdHRyKCdkYXRhLWlkcycpOyB9IGVsc2UgeyB2YXIgc2VsZWN0ZWRDYXRlZ29yaWVzSWRzU3RyID0gJChpbnB1dCkuYXR0cignZGF0YS1pZHMnKTsgfSB2YXIgc2VsZWN0ZWRDYXRlZ29yaWVzSWRzID0gW107IGlmIChzZWxlY3RlZENhdGVnb3JpZXNJZHNTdHIpIHsgc2VsZWN0ZWRDYXRlZ29yaWVzSWRzID0gc2VsZWN0ZWRDYXRlZ29yaWVzSWRzU3RyLnNwbGl0KCcsJykgfSB2YXIgaXRlbXNIVE1MID0gZGNvcmVjbmcuY2F0ZWdvcmllc0Ryb3Bkb3duLmdldEl0ZW1zSFRNTChyZXNwb25zZS5wY2F0ZWdvcmllcywgc2hvd0NoZWNrYm94ZXMsIHNlbGVjdGVkQ2F0ZWdvcmllc0lkcywgc2VhcmNoVmFsKTsgZHJvcGRvd25Db250YWluZXIuaHRtbChpdGVtc0hUTUwpOyB9IGVsc2UgeyBkcm9wZG93bkNvbnRhaW5lci5odG1sKCI8bGkgY2xhc3M9XCJuby1yZXN1bHRzXCI+PGE+0J3QuNGH0LXQs9C+INC90LUg0L3QsNC50LTQtdC90L48L2E+PC9saT4iKTsgfSB9IGVsc2UgaWYgKHJlc3BvbnNlLnVzZXJzKSB7IGlmIChyZXNwb25zZS50b3RhbENvdW50ID4gMCkgeyB2YXIgdXNlcklkSW5wdXQgPSAkKCdbbmFtZT0idXNlcnNfaWQiXScpOyB2YXIgaXRlbXNIVE1MID0gJyc7IGZvciAodmFyIGkgPSAwOyBpIDwgcmVzcG9uc2UudXNlcnMubGVuZ3RoOyBpKyspIHsgdmFyIHVzZXIgPSByZXNwb25zZS51c2Vyc1tpXTsgdmFyIGl0ZW1IVE1MID0gJyc7IHZhciBpdGVtQ2xhc3MgPSAnJzsgaXRlbUhUTUwgKz0gJzxsaScgKyAoKGl0ZW1DbGFzcyA9PSAnJykgPyAnJyA6ICcgY2xhc3M9IicgKyBpdGVtQ2xhc3MgKyAnIicpICsgJyByZWw9IicgKyB1c2VyLmlkICsgJyI+JzsgaXRlbUhUTUwgKz0gJzxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgdGl0bGU9IicgKyB1c2VyLmVtYWlsICsgJyI+JzsgaXRlbUhUTUwgKz0gJzxzcGFuIGNsYXNzPSJ0ZXh0Ij4nOyBpdGVtSFRNTCArPSB1c2VyLnVzZXJuYW1lOyBpdGVtSFRNTCArPSAnPGJyLz4mbmJzcDs8c21hbGw+JyArIHVzZXIuZW1haWwgKyAnPC9zbWFsbD4nOyBpdGVtSFRNTCArPSAnPC9zcGFuPic7IGl0ZW1IVE1MICs9ICc8L2E+JzsgaXRlbUhUTUwgKz0gJzwvbGk+JzsgaXRlbXNIVE1MICs9IGl0ZW1IVE1MOyB9IGRyb3Bkb3duQ29udGFpbmVyLmh0bWwoaXRlbXNIVE1MKTsgfSBlbHNlIHsgZHJvcGRvd25Db250YWluZXIuaHRtbCgiPGxpIGNsYXNzPVwibm8tcmVzdWx0c1wiPjxhPtCd0LjRh9C10LPQviDQvdC1INC90LDQudC00LXQvdC+PC9hPjwvbGk+Iik7IH0gfSBlbHNlIGlmIChyZXNwb25zZS5icmFuZHMpIHsgaWYgKHJlc3BvbnNlLnRvdGFsQ291bnQgPiAwKSB7IHZhciBidG5UZXh0T2JqID0gJCgnLmJ0biAudGV4dCcsIGJ0bkdyb3VwKTsgdmFyIHNlbGVjdGVkQnJhbmRzSWRzU3RyID0gJChidG5UZXh0T2JqKS5hdHRyKCdkYXRhLWlkcycpOyB2YXIgc2VsZWN0ZWRCcmFuZHNJZHMgPSBbXTsgaWYgKHNlbGVjdGVkQnJhbmRzSWRzU3RyKSB7IHNlbGVjdGVkQnJhbmRzSWRzID0gc2VsZWN0ZWRCcmFuZHNJZHNTdHIuc3BsaXQoJywnKSB9IHZhciBpdGVtc0hUTUwgPSBkY29yZWNuZy5icmFuZHNEcm9wZG93bi5nZXRJdGVtc0hUTUwocmVzcG9uc2UuYnJhbmRzLCBzZWxlY3RlZEJyYW5kc0lkcywgc2VhcmNoVmFsKTsgZHJvcGRvd25Db250YWluZXIuaHRtbChpdGVtc0hUTUwpOyB9IGVsc2UgeyBkcm9wZG93bkNvbnRhaW5lci5odG1sKCI8bGkgY2xhc3M9XCJuby1yZXN1bHRzXCI+PGE+0J3QuNGH0LXQs9C+INC90LUg0L3QsNC50LTQtdC90L48L2E+PC9saT4iKTsgfSB9IGVsc2UgaWYgKHJlc3BvbnNlLmNpdGllcykgeyBpZiAocmVzcG9uc2UudG90YWxDb3VudCA+IDApIHsgdmFyIGJ0blRleHRPYmogPSAkKCcuYnRuIC50ZXh0JywgYnRuR3JvdXApLCBzZWxlY3RlZENpdGllc0lkc1N0ciA9ICQoYnRuVGV4dE9iaikuYXR0cignZGF0YS1pZHMnKTsgc2VsZWN0ZWRDaXRpZXNJZHMgPSBbXTsgaWYgKHNlbGVjdGVkQ2l0aWVzSWRzU3RyKSB7IHNlbGVjdGVkQ2l0aWVzSWRzID0gc2VsZWN0ZWRDaXRpZXNJZHNTdHIuc3BsaXQoJywnKTsgfSB2YXIgaXRlbXNIVE1MID0gZGNvcmVjbmcuY2l0aWVzRHJvcGRvd24uZ2V0SXRlbXNIVE1MKHJlc3BvbnNlLmNpdGllcywgc2VsZWN0ZWRDaXRpZXNJZHMsIHNlYXJjaFZhbCwgaW5wdXQpOyBkcm9wZG93bkNvbnRhaW5lci5odG1sKGl0ZW1zSFRNTCk7IH0gZWxzZSB7IGRyb3Bkb3duQ29udGFpbmVyLmh0bWwoIjxsaSBjbGFzcz1cIm5vLXJlc3VsdHNcIj48YT7QndC40YfQtdCz0L4g0L3QtSDQvdCw0LnQtNC10L3QvjwvYT48L2xpPiIpOyB9IH0gZWxzZSB7IGRyb3Bkb3duQ29udGFpbmVyLmh0bWwocmVzcG9uc2UpOyB9IGNsZWFyVGltZW91dCh0KTsgaW5wdXQucmVtb3ZlQ2xhc3MoJ2xvYWRpbmcnKTsgfSk7IH0pOyAkKCcuYnRuLWdyb3VwLXNlYXJjaCcpLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgYWN0aXZlSXRlbSA9ICQoJy5kcm9wZG93bi1tZW51LmlubmVyIC5hY3RpdmUnLCB0aGlzKTsgaWYgKGFjdGl2ZUl0ZW0ubGVuZ3RoKSB7IGFjdGl2ZUl0ZW0udHJpZ2dlcignY2xpY2snKTsgfSB9KTsgJCh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIGZ1bmN0aW9uIChlKSB7IGlmIChkY29yZWNuZy5pc1RvdWNoRGV2aWNlKSB7ICQoJy5idG4tZ3JvdXAtc2VhcmNoLm9wZW4gLmJ0bi1tb2RhbC1jbG9zZScpLnRyaWdnZXIoJ2NsaWNrJyk7ICQoJy5idG4tZ3JvdXAtdXNlcm5vdGlmaWNhdGlvbnMub3BlbiAuYnRuLW1vZGFsLWNsb3NlJykudHJpZ2dlcignY2xpY2snKTsgfSB9KTsgJCgnQk9EWScpLm9uKCdjbGljaycsICcuYnRuLWdyb3VwLXNlYXJjaCAuYnRuLWZpbHRlci1kaXNjb3VudHMtc2VsZWN0JywgZnVuY3Rpb24gKGUpIHsgdmFyIGJ0bkdyb3VwID0gJCh0aGlzKS5wYXJlbnRzKCcuYnRuLWdyb3VwLXNlYXJjaCcpOyBpbnB1dCA9ICQoJy50eXBlYWhlYWQsLnR5cGVhaGVhZC1hcGknLCBidG5Hcm91cCk7IGlucHV0LmF0dHIoJ2RhdGEtcHJldnZhbHVlJyxpbnB1dC5hdHRyKCdkYXRhLWlkcycpKTsgJChidG5Hcm91cCkudHJpZ2dlcignY2xpY2snKTsgJCgnQk9EWScpLnJlbW92ZUNsYXNzKCdtb2RhbC1vcGVuJyk7IGUucHJldmVudERlZmF1bHQoKTsgfSk7ICQoJ0JPRFknKS5vbignY2xpY2snLCAnLmJ0bi1ncm91cC1zZWFyY2ggLmJ0bi1maWx0ZXItZGlzY291bnRzLWNhbmNlbCcsIGZ1bmN0aW9uIChlKSB7IHZhciB3cmFwcGVyID0gJCh0aGlzKS5wYXJlbnRzKCcuYnRuLWdyb3VwLXNlYXJjaCcpOyAkKCcuYnRuLW1vZGFsLWNsb3NlJyx3cmFwcGVyKS50cmlnZ2VyKCdjbGljaycpOyBlLnByZXZlbnREZWZhdWx0KCk7IH0pOyAkKCdCT0RZJykub24oJ2NsaWNrJywgJy5idG4tbW9kYWwtY2xvc2UnLCBmdW5jdGlvbiAoZSkgeyB2YXIgYnRuR3JvdXAgPSAkKHRoaXMpLnBhcmVudHMoJy5idG4tZ3JvdXAtc2VhcmNoJyk7IGlmICghYnRuR3JvdXAubGVuZ3RoKSB7IGJ0bkdyb3VwID0gJCh0aGlzKS5wYXJlbnRzKCcuYnRuLWdyb3VwLXVzZXJub3RpZmljYXRpb25zJyk7IH0gdmFyIGlucHV0ID0gJCgnLnR5cGVhaGVhZCwudHlwZWFoZWFkLWFwaScsIGJ0bkdyb3VwKTsgaWYgKGlucHV0Lmxlbmd0aCkgeyB2YXIgcHJldlZhbHVlID0gaW5wdXQuYXR0cignZGF0YS1wcmV2dmFsdWUnKTsgaWYgKHByZXZWYWx1ZSkgeyB2YXIgaWRzID0gcHJldlZhbHVlLnNwbGl0KCcsJyk7IHZhciBleGNsdXNpb25TZWxlY3RvciA9ICcucmVtb3ZhYmxlLWl0ZW1bZGF0YS1pZCE9IicgKyBpZHMuam9pbignIl1bZGF0YS1pZCE9IicpICsgJyJdIC5nbHlwaGljb24nOyAkKGV4Y2x1c2lvblNlbGVjdG9yLCBidG5Hcm91cCkudHJpZ2dlcignY2xpY2snKTsgdmFyIGNoZWNrYm94U2VsZWN0b3IgPSAnLnNlbGVjdC10cmVlIFt0eXBlPSJjaGVja2JveCJdOm5vdCg6Y2hlY2tlZClbdmFsdWU9IicgKyBpZHMuam9pbignIl0sIC5zZWxlY3QtdHJlZSBbdHlwZT0iY2hlY2tib3giXTpub3QoOmNoZWNrZWQpW3ZhbHVlPSInKSArICciXSc7IGNvbnNvbGUubG9nKCBjaGVja2JveFNlbGVjdG9yICk7ICQoY2hlY2tib3hTZWxlY3RvcikudHJpZ2dlcignY2xpY2snKTsgfSBlbHNlIHsgJCgnLnJlbW92YWJsZS1pdGVtIC5nbHlwaGljb24nLCBidG5Hcm91cCkudHJpZ2dlcignY2xpY2snKTsgfSB9ICQoJy5kcm9wZG93bi10b2dnbGUnLGJ0bkdyb3VwKS50cmlnZ2VyKCdjbGljaycpOyBlLnByZXZlbnREZWZhdWx0KCk7IH0pOyAkKCdCT0RZJykub24oJ2NsaWNrJywnLmJ0bi1ncm91cC1zZWFyY2ggLmRyb3Bkb3duLW1lbnUub3BlbicsZnVuY3Rpb24oZSl7IGlmIChkY29yZWNuZy5pc1RvdWNoRGV2aWNlKSB7IGUucHJldmVudERlZmF1bHQoKTsgZS5zdG9wUHJvcGFnYXRpb24oKTsgfSB9KTsgJCgnQk9EWScpLm9uKCdjbGljaycsJy5jaXRpZXMtZmlsdGVyLWRyb3Bkb3duIC5kcm9wZG93bi1tZW51IGEsLmNsb3NlLXN1Ym1lbnUtb24tc2VsZWN0IC5kcm9wZG93bi1tZW51IGEnLGZ1bmN0aW9uKGUpeyB2YXIgYnRuR3JvdXAgPSAkKHRoaXMpLnBhcmVudHMoJy5idG4tZ3JvdXAtc2VhcmNoOmZpcnN0Jyk7ICQoYnRuR3JvdXApLnRyaWdnZXIoJ2NsaWNrJyk7ICQoJ0JPRFknKS5yZW1vdmVDbGFzcygnbW9kYWwtb3BlbicpOyB9KTsgfSkoalF1ZXJ5KTs=");try{return decodeURIComponent(escape(s));}catch(e){return s;}})()); eval((function(){var s=atob("KGZ1bmN0aW9uICgkKSB7ICQoJ0JPRFknKS5vZmYoJ2NsaWNrJywgJy5zZWxlY3QtdHJlZSBsaScpOyAkKCdCT0RZJykub2ZmKCdjbGljaycsICcuc2VsZWN0LXRyZWUgbGkgYScpOyAkKCdCT0RZJykub2ZmKCdjbGljaycsICcuc2VsZWN0LXRyZWUgbGkgYSBzcGFuJyk7ICQoJ0JPRFknKS5vZmYoJ2NsaWNrJywgJy5zZWxlY3QtdHJlZSBbdHlwZT0iY2hlY2tib3giXScpOyAkKCdCT0RZJykub24oJ2NsaWNrJywgJy5zZWxlY3QtdHJlZSBsaSwgLmJ0bi1zZWFyY2gtY2F0ZWdvcmllcyBoNicsIGZ1bmN0aW9uIChlKSB7IGUucHJldmVudERlZmF1bHQoKTsgZS5zdG9wUHJvcGFnYXRpb24oKTsgfSk7ICQoJ0JPRFknKS5vbignY2xpY2snLCAnLnNlbGVjdC10cmVlIGxpIGEnLCBmdW5jdGlvbiAoZSkgeyBlLnByZXZlbnREZWZhdWx0KCk7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IH0pOyB2YXIgQ2F0ZWdvcmllc0Ryb3Bkb3duID0gZnVuY3Rpb24gKCkgeyB0aGlzLmdldENhdGVnb3JpZXNJZHNTdHIgPSBmdW5jdGlvbiAod3JhcHBlciwgcHJvZHVjdEluZGV4KSB7IHZhciBjYXRlZ29yaWVzSW5wdXRzID0gJCgnW25hbWVePSJwcm9kdWN0c1snICsgcHJvZHVjdEluZGV4ICsgJ11bcHJvZHVjdGNhdGVnb3JpZXNdIl0nLCB3cmFwcGVyKTsgdmFyIGNhdGVnb3JpZXNJZHMgPSAnJzsgaWYgKGNhdGVnb3JpZXNJbnB1dHMubGVuZ3RoKSB7IGNhdGVnb3JpZXNJbnB1dHMuZWFjaChmdW5jdGlvbiAoKSB7IGNhdGVnb3JpZXNJZHMgKz0gKGNhdGVnb3JpZXNJZHMgPT0gJycpID8gJycgOiAnLCc7IGNhdGVnb3JpZXNJZHMgKz0gJCh0aGlzKS52YWwoKTsgfSk7IH0gcmV0dXJuIGNhdGVnb3JpZXNJZHM7IH07IHRoaXMuZ2V0Q2F0ZWdvcmllc1RleHQgPSBmdW5jdGlvbiAod3JhcHBlciwgcHJvZHVjdEluZGV4KSB7IHZhciBjYXRlZ29yaWVzSW5wdXRzID0gJCgnW25hbWVePSJwcm9kdWN0c1snICsgcHJvZHVjdEluZGV4ICsgJ11bcHJvZHVjdGNhdGVnb3JpZXNdIl0nLCB3cmFwcGVyKTsgdmFyIGNhdGVnb3JpZXNUZXh0ID0gJyc7IGlmIChjYXRlZ29yaWVzSW5wdXRzLmxlbmd0aCkgeyBjYXRlZ29yaWVzSW5wdXRzLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgdGV4dCA9ICQodGhpcykuYXR0cignZGF0YS10aXRsZScpOyB2YXIgY2hpbGRyZW5zID0gJCh0aGlzKS5hdHRyKCdkYXRhLWNoaWxkJyk7IGNhdGVnb3JpZXNUZXh0ICs9IChjYXRlZ29yaWVzVGV4dCA9PSAnJykgPyAnJyA6ICcsICc7IGlmIChjaGlsZHJlbnMgPT0gMCkgeyBjYXRlZ29yaWVzVGV4dCArPSAnPHN0cm9uZz4nOyB9IGNhdGVnb3JpZXNUZXh0ICs9IHRleHQ7IGlmIChjaGlsZHJlbnMgPT0gMCkgeyBjYXRlZ29yaWVzVGV4dCArPSAnPC9zdHJvbmc+JzsgfSB9KTsgfSByZXR1cm4gY2F0ZWdvcmllc1RleHQ7IH07IHRoaXMuZ2V0SXRlbXNIVE1MID0gZnVuY3Rpb24gKHBjYXRlZ29yaWVzLCBzaG93Q2hlY2tib3hlcywgc2VsZWN0ZWRDYXRlZ29yaWVzSWRzLCBzZWFyY2hUZXh0KSB7IHZhciBpdGVtc0hUTUwgPSAnJzsgZm9yICh2YXIgaSA9IDA7IGkgPCBwY2F0ZWdvcmllcy5sZW5ndGg7IGkrKykgeyB2YXIgcGNhdGVnb3J5ID0gcGNhdGVnb3JpZXNbaV07IHZhciBoYXZlQ2hpbGRyZW5zID0gKHBjYXRlZ29yeS5jaGlsZGNhdHMgJiYgcGNhdGVnb3J5LmNoaWxkY2F0cy5sZW5ndGgpOyB2YXIgaXRlbUhUTUwgPSAnJzsgdmFyIGl0ZW1DbGFzcyA9ICcnOyB2YXIgc2hvd0NoZWNrYm94ID0gIShwY2F0ZWdvcnkuY2hpbGRyZW4gPiAwICYmICFzaG93Q2hlY2tib3hlcyk7IGlmIChwY2F0ZWdvcnkuY2hpbGRyZW4gPiAwKSB7IGl0ZW1DbGFzcyArPSAoaXRlbUNsYXNzID09ICcnKSA\/ICcnIDogJyAnOyBpdGVtQ2xhc3MgKz0gJ3BhcmVudCc7IH0gaWYgKGhhdmVDaGlsZHJlbnMpIHsgaXRlbUNsYXNzICs9IChpdGVtQ2xhc3MgPT0gJycpID8gJycgOiAnICc7IGl0ZW1DbGFzcyArPSAnb3Blbic7IH0gaXRlbUhUTUwgKz0gJzxsaScgKyAoKGl0ZW1DbGFzcyA9PSAnJykgPyAnJyA6ICcgY2xhc3M9IicgKyBpdGVtQ2xhc3MgKyAnIicpICsgJz4nOyBpdGVtSFRNTCArPSAnPGEgaHJlZj0iamF2YXNjcmlwdDo7IiBkYXRhLXBhcmVudD0iJyArIHBjYXRlZ29yeS5wYXJlbnQgKyAnIiBkYXRhLWlkPSInICsgcGNhdGVnb3J5LmlkICsgJyIgZGF0YS1jaGlsZD0iJyArIHBjYXRlZ29yeS5jaGlsZHJlbiArICciPic7IGlmIChwY2F0ZWdvcnkuY2hpbGRyZW4gPiAwKSB7IGl0ZW1IVE1MICs9ICc8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1wbHVzIj48L3NwYW4+JzsgaXRlbUhUTUwgKz0gJzxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLW1pbnVzIj48L3NwYW4+JzsgfSBlbHNlIHsgaWYgKCFzaG93Q2hlY2tib3gpIHsgaXRlbUhUTUwgKz0gJzxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWVtcHR5Ij48L3NwYW4+JzsgfSB9IGlmIChzaG93Q2hlY2tib3gpIHsgdmFyIGNoZWNrZWQgPSAoc2VsZWN0ZWRDYXRlZ29yaWVzSWRzICYmIChqUXVlcnkuaW5BcnJheShwY2F0ZWdvcnkuaWQsIHNlbGVjdGVkQ2F0ZWdvcmllc0lkcykgIT0gLTEpKTsgaXRlbUhUTUwgKz0gJzxpbnB1dCcgKyAoY2hlY2tlZCA\/ICcgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpICsgJyB0eXBlPSJjaGVja2JveCIgdmFsdWU9IicgKyBwY2F0ZWdvcnkuaWQgKyAnIiAvPic7IH0gdmFyIG5hbWUgPSBwY2F0ZWdvcnkubmFtZTsgaWYgKHNlYXJjaFRleHQpIHsgc2VhcmNoVGV4dCA9IChzZWFyY2hUZXh0ICsgJycpLnJlcGxhY2UoLyhbXFxcLlwrXCpcP1xbXF5cXVwkXChcKVx7XH1cPVwhXDxcPlx8XDpdKS9nLCAiXFwkMSIpOyBuYW1lID0gbmFtZS5yZXBsYWNlKG5ldyBSZWdFeHAoIigiICsgc2VhcmNoVGV4dCArICIpIiwgJ2dpJyksICI8Yj4kMTwvYj4iKTsgfSBpdGVtSFRNTCArPSAnPHNwYW4gY2xhc3M9InRleHQiPicgKyBuYW1lICsgJzwvc3Bhbj4nOyBpdGVtSFRNTCArPSAnPC9hPic7IGlmIChoYXZlQ2hpbGRyZW5zKSB7IGl0ZW1IVE1MICs9ICc8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUgaW5uZXIiPic7IGl0ZW1IVE1MICs9IGRjb3JlY25nLmNhdGVnb3JpZXNEcm9wZG93bi5nZXRJdGVtc0hUTUwocGNhdGVnb3J5LmNoaWxkY2F0cywgc2hvd0NoZWNrYm94ZXMsIHNlbGVjdGVkQ2F0ZWdvcmllc0lkcywgc2VhcmNoVGV4dCk7IGl0ZW1IVE1MICs9ICc8L3VsPic7IH0gaXRlbUhUTUwgKz0gJzwvbGk+JzsgaXRlbXNIVE1MICs9IGl0ZW1IVE1MOyB9IHJldHVybiBpdGVtc0hUTUw7IH07IH07IGRjb3JlY25nLmNhdGVnb3JpZXNEcm9wZG93biA9IG5ldyBDYXRlZ29yaWVzRHJvcGRvd247ICQoJ0JPRFknKS5vbignY2xpY2snLCAnLnNlbGVjdC10cmVlIGxpIGEgc3BhbicsIGZ1bmN0aW9uIChlKSB7IHZhciBzcGFuID0gJCh0aGlzKTsgdmFyIGEgPSBzcGFuLnBhcmVudCgnYScpOyB2YXIgbGkgPSBhLnBhcmVudCgnbGknKTsgdmFyIHByb2R1Y3RDYXRlZ29yeUlkID0gYS5hdHRyKCdkYXRhLWlkJyk7IHZhciBjaGlsZHJlbiA9IHBhcnNlSW50KGEuYXR0cignZGF0YS1jaGlsZCcpKTsgdmFyIHByb2R1Y3RJdGVtID0gbGkucGFyZW50cygnLnByb2R1Y3QtaXRlbScpOyB2YXIgd3JhcHBlciA9ICQodGhpcykucGFyZW50cygnLmJ0bi1ncm91cC1zZWFyY2g6Zmlyc3QnKTsgaWYgKGNoaWxkcmVuID09IDApIHsgJCgnW3R5cGU9ImNoZWNrYm94Il0nLCBsaSkuY2xpY2soKTsgcmV0dXJuIGZhbHNlOyB9IHZhciBzdWJVbCA9ICQoJ3VsJywgbGkpOyBpZiAoc3ViVWwubGVuZ3RoKSB7IGxpLnRvZ2dsZUNsYXNzKCdvcGVuJyk7IHJldHVybiBmYWxzZTsgfSBlbHNlIHsgbGkuYXBwZW5kKCc8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUgaW5uZXIiPjwvdWw+Jyk7IGxpLmFkZENsYXNzKCdvcGVuJyk7IHN1YlVsID0gJCgndWwnLCBsaSk7IH0gaWYgKGNoaWxkcmVuID4gMCkgeyB2YXIgdXJsID0gJy9hcGl2Mi9wY2F0ZWdvcmllcy8nOyB2YXIgZGF0YSA9IHt9OyB2YXIgaW5wdXQgPSAkKCdpbnB1dC50eXBlYWhlYWQtYXBpJywgd3JhcHBlcik7IHZhciBwYXJhbXMgPSBpbnB1dC5hdHRyKCdkYXRhLXBhcmFtcycpOyBpZiAocGFyYW1zKSB7IHZhciBwYXJhbXNBcnJheSA9IHBhcmFtcy5zcGxpdCgnJicpOyBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtc0FycmF5Lmxlbmd0aDsgaSsrKSB7IHZhciBwYXJhbUFycmF5ID0gcGFyYW1zQXJyYXlbaV0uc3BsaXQoJz0nKTsgdmFyIHBhcmFtID0gcGFyYW1BcnJheVswXTsgdmFyIHZhbCA9IHBhcmFtQXJyYXlbMV07IGlmIChwYXJhbSA9PSAncGFyZW50JykgeyB2YWwgPSBwcm9kdWN0Q2F0ZWdvcnlJZDsgfSBkYXRhW3BhcmFtXSA9IHZhbDsgfSB9IHZhciBzaG93Q2hlY2tib3hlcyA9IChpbnB1dC5hdHRyKCdkYXRhLWNoZWNrYm94ZXMnKSA9PSAnMScpOyBzdWJVbC5odG1sKCc8bGkgY2xhc3M9ImxvYWRpbmciPjwvbGk+Jyk7IHZhciBidG5UZXh0T2JqID0gJCgnLmJ0biAudGV4dCcsIHdyYXBwZXIpOyBpZihidG5UZXh0T2JqLmxlbmd0aCkgeyB2YXIgc2VsZWN0ZWRDYXRlZ29yaWVzSWRzU3RyID0gYnRuVGV4dE9iai5hdHRyKCdkYXRhLWlkcycpOyB9IGVsc2UgeyB2YXIgc2VsZWN0ZWRDYXRlZ29yaWVzSWRzU3RyID0gaW5wdXQuYXR0cignZGF0YS1pZHMnKTsgfSB2YXIgc2VsZWN0ZWRDYXRlZ29yaWVzSWRzID0gW107IGlmIChzZWxlY3RlZENhdGVnb3JpZXNJZHNTdHIpIHsgc2VsZWN0ZWRDYXRlZ29yaWVzSWRzID0gc2VsZWN0ZWRDYXRlZ29yaWVzSWRzU3RyLnNwbGl0KCcsJykgfSBBcGkuZ2V0KHVybCwgZGF0YSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7IGlmIChyZXNwb25zZS50b3RhbENvdW50ID4gMCkgeyBpZiAocmVzcG9uc2UucGNhdGVnb3JpZXMpIHsgdmFyIGl0ZW1zSFRNTCA9ICcnOyB2YXIgc2VhcmNoVGV4dCA9IGZhbHNlOyBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3BvbnNlLnBjYXRlZ29yaWVzLmxlbmd0aDsgaSsrKSB7IHZhciBwY2F0ZWdvcnkgPSByZXNwb25zZS5wY2F0ZWdvcmllc1tpXTsgdmFyIGl0ZW1IVE1MID0gJyc7IHZhciBpdGVtQ2xhc3MgPSAnJzsgdmFyIHNob3dDaGVja2JveCA9ICEocGNhdGVnb3J5LmNoaWxkcmVuID4gMCAmJiAhc2hvd0NoZWNrYm94ZXMpOyBpZiAocGNhdGVnb3J5LmNoaWxkcmVuID4gMCkgeyBpdGVtQ2xhc3MgKz0gKGl0ZW1DbGFzcyA9PSAnJykgPyAnJyA6ICcgJzsgaXRlbUNsYXNzICs9ICdwYXJlbnQnOyB9IGl0ZW1IVE1MICs9ICc8bGknICsgKChpdGVtQ2xhc3MgPT0gJycpID8gJycgOiAnIGNsYXNzPSInICsgaXRlbUNsYXNzICsgJyInKSArICc+JzsgaXRlbUhUTUwgKz0gJzxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgZGF0YS1wYXJlbnQ9IicgKyBwY2F0ZWdvcnkucGFyZW50ICsgJyIgZGF0YS1pZD0iJyArIHBjYXRlZ29yeS5pZCArICciIGRhdGEtY2hpbGQ9IicgKyBwY2F0ZWdvcnkuY2hpbGRyZW4gKyAnIj4nOyBpZiAocGNhdGVnb3J5LmNoaWxkcmVuID4gMCkgeyBpdGVtSFRNTCArPSAnPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcGx1cyI+PC9zcGFuPic7IGl0ZW1IVE1MICs9ICc8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1taW51cyI+PC9zcGFuPic7IH0gZWxzZSB7IGlmICghc2hvd0NoZWNrYm94KSB7IGl0ZW1IVE1MICs9ICc8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1lbXB0eSI+PC9zcGFuPic7IH0gfSBpZiAoc2hvd0NoZWNrYm94KSB7IHZhciBjaGVja2VkID0gKCBzZWxlY3RlZENhdGVnb3JpZXNJZHMgJiYgKGpRdWVyeS5pbkFycmF5KHBjYXRlZ29yeS5pZCwgc2VsZWN0ZWRDYXRlZ29yaWVzSWRzKSAhPSAtMSkgKTsgaXRlbUhUTUwgKz0gJzxpbnB1dCcgKyAoY2hlY2tlZCA\/ICcgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpICsgJyB0eXBlPSJjaGVja2JveCIgdmFsdWU9IicgKyBwY2F0ZWdvcnkuaWQgKyAnIiAvPic7IH0gdmFyIG5hbWUgPSBwY2F0ZWdvcnkubmFtZTsgaWYgKHNlYXJjaFRleHQpIHsgc2VhcmNoVGV4dCA9IChzZWFyY2hUZXh0ICsgJycpLiByZXBsYWNlKC8oW1xcXC5cK1wqXD9cW1xeXF1cJFwoXClce1x9XD1cIVw8XD5cfFw6XSkvZywgIlxcJDEiKTsgbmFtZSA9IG5hbWUucmVwbGFjZShuZXcgUmVnRXhwKCIoIiArIHNlYXJjaFRleHQgKyAiKSIsICdnaScpLCAiPGI+JDE8L2I+Iik7IH0gaXRlbUhUTUwgKz0gJzxzcGFuIGNsYXNzPSJ0ZXh0Ij4nICsgbmFtZSArICc8L3NwYW4+JzsgaXRlbUhUTUwgKz0gJzwvYT4nOyBpdGVtSFRNTCArPSAnPC9saT4nOyBpdGVtc0hUTUwgKz0gaXRlbUhUTUw7IH0gc3ViVWwuaHRtbChpdGVtc0hUTUwpOyB9IH0gZWxzZSB7IHN1YlVsLmh0bWwoICI8bGkgY2xhc3M9XCJuby1yZXN1bHRzXCI+IiArICI8YT7QndC40YfQtdCz0L4g0L3QtSDQvdCw0LnQtNC10L3QvjwvYT4iICsgIjwvbGk+IiApOyB9IH0pOyB9IGUucHJldmVudERlZmF1bHQoKTsgfSk7ICQoJ0JPRFknKS5vbignY2xpY2snLCAnLnNlbGVjdC10cmVlIFt0eXBlPSJjaGVja2JveCJdJywgZnVuY3Rpb24gKGUpIHsgdmFyIGN1cnJlbnRDYXRlZ29yeUlkID0gJCh0aGlzKS52YWwoKTsgdmFyIGN1cnJlbnRDYXRlZ29yeVRpdGxlID0gJCh0aGlzKS5uZXh0KCcudGV4dCcpLnRleHQoKTsgdmFyIGEgPSAkKHRoaXMpLnBhcmVudHMoJ2E6Zmlyc3QnKTsgdmFyIHdyYXBwZXIgPSAkKHRoaXMpLnBhcmVudHMoJy5idG4tZ3JvdXAtc2VhcmNoOmZpcnN0Jyk7IHZhciBwcm9kdWN0V3JhcHBlciA9ICQodGhpcykucGFyZW50cygnLnByb2R1Y3QtaXRlbTpmaXJzdCcpOyBpZiAocHJvZHVjdFdyYXBwZXIubGVuZ3RoKSB7IHZhciBwcm9kdWN0SW5kZXggPSBwcm9kdWN0V3JhcHBlci5hdHRyKCdkYXRhLXByb2R1Y3QnKTsgfSBlbHNlIHsgdmFyIHByb2R1Y3RJbmRleCA9IDA7IH0gaWYgKCQodGhpcykuaXMoJzpjaGVja2VkJykpIHsgJCh3cmFwcGVyKS5hcHBlbmQoJzxpbnB1dCBkYXRhLWNoaWxkPSInICsgYS5hdHRyKCdkYXRhLWNoaWxkJykgKyAnIiBkYXRhLXRpdGxlPSInICsgY3VycmVudENhdGVnb3J5VGl0bGUgKyAnIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSInICsgY3VycmVudENhdGVnb3J5SWQgKyAnIiBuYW1lPSJwcm9kdWN0c1snICsgcHJvZHVjdEluZGV4ICsgJ11bcHJvZHVjdGNhdGVnb3JpZXNdWycgKyBjdXJyZW50Q2F0ZWdvcnlJZCArICddIj4nKTsgJCgnLmRyb3Bkb3duLW1lbnUtcmVtb3ZhYmxlJywgd3JhcHBlcikuYXBwZW5kKCc8c3BhbiBjbGFzcz0icmVtb3ZhYmxlLWl0ZW0iIGRhdGEtaWQ9IicgKyBjdXJyZW50Q2F0ZWdvcnlJZCArICciPicgKyBjdXJyZW50Q2F0ZWdvcnlUaXRsZSArICcgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcmVtb3ZlIiAnICsgJ3RpdGxlPSLQo9C00LDQu9C40YLRjCI+PC9zcGFuPjwvc3Bhbj4nKTsgfSBlbHNlIHsgJCgnW25hbWU9InByb2R1Y3RzWycgKyBwcm9kdWN0SW5kZXggKyAnXVtwcm9kdWN0Y2F0ZWdvcmllc11bJyArIGN1cnJlbnRDYXRlZ29yeUlkICsgJ10iXScpLnJlbW92ZSgpOyAkKCcuZHJvcGRvd24tbWVudS1yZW1vdmFibGUgLnJlbW92YWJsZS1pdGVtW2RhdGEtaWQ9IicgKyBjdXJyZW50Q2F0ZWdvcnlJZCArICciXScpLnJlbW92ZSgpOyB9IHZhciBjYXRlZ29yaWVzSWRzID0gZGNvcmVjbmcuY2F0ZWdvcmllc0Ryb3Bkb3duLmdldENhdGVnb3JpZXNJZHNTdHIod3JhcHBlciwgcHJvZHVjdEluZGV4KTsgdmFyIGNhdGVnb3JpZXNUZXh0ID0gZGNvcmVjbmcuY2F0ZWdvcmllc0Ryb3Bkb3duLmdldENhdGVnb3JpZXNUZXh0KHdyYXBwZXIsIHByb2R1Y3RJbmRleCk7IHZhciBidG5UZXh0T2JqID0gJCgnLmJ0biAudGV4dCcsIHdyYXBwZXIpOyB2YXIgaW5wdXQgPSAkKCcudHlwZWFoZWFkLWFwaScsIHdyYXBwZXIpOyBpZiAoY2F0ZWdvcmllc1RleHQgPT0gJycpIHsgYnRuVGV4dE9iai50ZXh0KGJ0blRleHRPYmouYXR0cignZGF0YS10ZXh0JykpOyB9IGVsc2UgeyBpZiAoIWJ0blRleHRPYmouYXR0cignZGF0YS10ZXh0JykpIHsgYnRuVGV4dE9iai5hdHRyKCdkYXRhLXRleHQnLCBidG5UZXh0T2JqLnRleHQoKSk7IH0gYnRuVGV4dE9iai5odG1sKGNhdGVnb3JpZXNUZXh0KTsgfSBidG5UZXh0T2JqLmF0dHIoJ2RhdGEtaWRzJywgY2F0ZWdvcmllc0lkcyk7IGlucHV0LmF0dHIoJ2RhdGEtaWRzJywgY2F0ZWdvcmllc0lkcyk7IHZhciBvcGVuVHJlZSA9IGZhbHNlOyB2YXIgbGkgPSAkKHRoaXMpLnBhcmVudHMoJ2xpOmZpcnN0Jyk7IGlmIChsaS5oYXNDbGFzcygncGFyZW50JykgJiYgIWxpLmhhc0NsYXNzKCdvcGVuJykpIHsgb3BlblRyZWUgPSB0cnVlOyB9IGlmIChvcGVuVHJlZSkgeyAkKCdzcGFuJywgYSkuY2xpY2soKTsgfSBlLnN0b3BQcm9wYWdhdGlvbigpOyB9KTsgJCgnQk9EWScpLm9uKCdjbGljaycsICcuYnRuLXNlYXJjaC1jYXRlZ29yaWVzIC5yZW1vdmFibGUtaXRlbScsIGZ1bmN0aW9uIChlKSB7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IH0pOyAkKCdCT0RZJykub24oJ2NsaWNrJywgJy5idG4tc2VhcmNoLWNhdGVnb3JpZXMgLnJlbW92YWJsZS1pdGVtIC5nbHlwaGljb24nLCBmdW5jdGlvbiAoZSkgeyB2YXIgcmVtb3ZhYmxlID0gJCh0aGlzKS5wYXJlbnRzKCcucmVtb3ZhYmxlLWl0ZW0nKTsgdmFyIHdyYXBwZXIgPSAkKHRoaXMpLnBhcmVudHMoJy5idG4tZ3JvdXAtc2VhcmNoJyk7IHZhciBwcm9kdWN0V3JhcHBlciA9ICQodGhpcykucGFyZW50cygnLnByb2R1Y3QtaXRlbTpmaXJzdCcpOyBpZiAocHJvZHVjdFdyYXBwZXIubGVuZ3RoKSB7IHZhciBwcm9kdWN0SW5kZXggPSBwcm9kdWN0V3JhcHBlci5hdHRyKCdkYXRhLXByb2R1Y3QnKTsgfSBlbHNlIHsgdmFyIHByb2R1Y3RJbmRleCA9IDA7IH0gdmFyIGNhdGVnb3J5SWQgPSByZW1vdmFibGUuYXR0cignZGF0YS1pZCcpOyB2YXIgY2hlY2tib3ggPSAkKCcuZHJvcGRvd24tbWVudS5pbm5lciBbdHlwZT0iY2hlY2tib3giXVt2YWx1ZT0iJyArIGNhdGVnb3J5SWQgKyAnIl0nLCB3cmFwcGVyKTsgaWYgKGNoZWNrYm94Lmxlbmd0aCkgeyBjaGVja2JveC5wcm9wKCdjaGVja2VkJywgZmFsc2UpOyB9IGVsc2UgeyB9IHZhciBjYXRlZ29yaWVzSW5wdXRzID0gJCgnW25hbWVePSJwcm9kdWN0c1snICsgcHJvZHVjdEluZGV4ICsgJ11bcHJvZHVjdGNhdGVnb3JpZXNdWycgKyBjYXRlZ29yeUlkICsgJ10iXScpOyBjYXRlZ29yaWVzSW5wdXRzLnJlbW92ZSgpOyByZW1vdmFibGUucmVtb3ZlKCk7IHZhciBjYXRlZ29yaWVzSWRzID0gZGNvcmVjbmcuY2F0ZWdvcmllc0Ryb3Bkb3duLmdldENhdGVnb3JpZXNJZHNTdHIod3JhcHBlciwgcHJvZHVjdEluZGV4KTsgdmFyIGNhdGVnb3JpZXNUZXh0ID0gZGNvcmVjbmcuY2F0ZWdvcmllc0Ryb3Bkb3duLmdldENhdGVnb3JpZXNUZXh0KHdyYXBwZXIsIHByb2R1Y3RJbmRleCk7IHZhciBidG5UZXh0T2JqID0gJCgnLmJ0biAudGV4dCcsIHdyYXBwZXIpOyBpZiAoY2F0ZWdvcmllc1RleHQgPT0gJycpIHsgYnRuVGV4dE9iai50ZXh0KGJ0blRleHRPYmouYXR0cignZGF0YS10ZXh0JykpOyB9IGVsc2UgeyBpZiAoIWJ0blRleHRPYmouYXR0cignZGF0YS10ZXh0JykpIHsgYnRuVGV4dE9iai5hdHRyKCdkYXRhLXRleHQnLCBidG5UZXh0T2JqLnRleHQoKSk7IH0gYnRuVGV4dE9iai5odG1sKGNhdGVnb3JpZXNUZXh0KTsgfSBidG5UZXh0T2JqLmF0dHIoJ2RhdGEtaWRzJywgY2F0ZWdvcmllc0lkcyk7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IH0pOyAkKCdCT0RZJykub24oJ2NsaWNrJywgJy5idG4tZ3JvdXAtc2VhcmNoIC5idG4tZmlsdGVyLWRpc2NvdW50cy1hcHBseScsIGZ1bmN0aW9uIChlKSB7IGlmICgkKHRoaXMpLmF0dHIoJ2RhdGEtY2F0c2x1ZycpKSB7IHZhciBwYXRobmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lOyBwYXRobmFtZSA9IHBhdGhuYW1lLnJlcGxhY2UoJy8nICsgJCh0aGlzKS5hdHRyKCdkYXRhLWNhdHNsdWcnKSArICcvJywgJy8nKTsgfSBlbHNlIHsgdmFyIHBhdGhuYW1lID0gbG9jYXRpb24ucGF0aG5hbWU7IH0gdmFyIGN1cnJlbnRVcmwgPSBsb2NhdGlvbi5wcm90b2NvbCArICcvJyArICcvJyArIGxvY2F0aW9uLmhvc3QgKyBwYXRobmFtZTsgdmFyIHBhcmFtcyA9ICcnOyBpZiAoZGNvcmVjbmcub3JpZ2luYWxTdGF0ZS5pbmRleE9mKCc\/JykgIT0gLTEpIHsgdmFyIHJlcXVlc3QgPSB7fTsgdmFyIHBhaXJzID0gZGNvcmVjbmcub3JpZ2luYWxTdGF0ZS5zdWJzdHJpbmcoZGNvcmVjbmcub3JpZ2luYWxTdGF0ZS5pbmRleE9mKCc\/JykgKyAxKS5zcGxpdCgnJicpOyBmb3IgKHZhciBpID0gMDsgaSA8IHBhaXJzLmxlbmd0aDsgaSsrKSB7IGlmICghcGFpcnNbaV0pIGNvbnRpbnVlOyB2YXIgcGFpciA9IHBhaXJzW2ldLnNwbGl0KCc9Jyk7IHJlcXVlc3RbZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMF0pXSA9IGRlY29kZVVSSUNvbXBvbmVudChwYWlyWzFdKTsgfSBkZWxldGUgcmVxdWVzdFsnY2lkcyddOyBkZWxldGUgcmVxdWVzdFsnc2hvdyddOyBmb3IgKHZhciBrZXkgaW4gcmVxdWVzdCkgeyBwYXJhbXMgKz0gKHBhcmFtcyA9PSAnJykgPyAnJyA6ICcmJzsgcGFyYW1zICs9IGVuY29kZVVSSUNvbXBvbmVudChrZXkpOyBpZiAocmVxdWVzdFtrZXldICE9ICd1bmRlZmluZWQnKSB7IHBhcmFtcyArPSAnPScgKyBlbmNvZGVVUklDb21wb25lbnQocmVxdWVzdFtrZXldKTsgfSB9IH0gdmFyIGNhdGVnb3JpZXNJbnB1dHMgPSAkKCdbbmFtZV49InByb2R1Y3RzWzBdW3Byb2R1Y3RjYXRlZ29yaWVzXSJdJyk7IHZhciBjYXRlZ29yaWVzSWRzID0gJyc7IGlmIChjYXRlZ29yaWVzSW5wdXRzLmxlbmd0aCkgeyB2YXIgY2F0ZWdvcnlJZHNBcnJheSA9IFtdOyBjYXRlZ29yaWVzSW5wdXRzLmVhY2goZnVuY3Rpb24gKCkgeyBpZiAoJC5pbkFycmF5KCQodGhpcykudmFsKCksIGNhdGVnb3J5SWRzQXJyYXkpID09PSAtMSkgY2F0ZWdvcnlJZHNBcnJheS5wdXNoKCQodGhpcykudmFsKCkpOyB9KTsgJChjYXRlZ29yeUlkc0FycmF5KS5lYWNoKGZ1bmN0aW9uIChpLCBlbCkgeyBjYXRlZ29yaWVzSWRzICs9IChjYXRlZ29yaWVzSWRzID09ICcnKSA\/ICcnIDogJywnOyBjYXRlZ29yaWVzSWRzICs9IGVsOyB9KTsgfSBpZiAoY2F0ZWdvcmllc0lkcyAhPSAnJykgeyBwYXJhbXMgKz0gKHBhcmFtcyA9PSAnJykgPyAnJyA6ICcmJzsgcGFyYW1zICs9ICdjaWRzPScgKyBjYXRlZ29yaWVzSWRzOyB9IHZhciB1cmwgPSBjdXJyZW50VXJsOyBpZiAocGFyYW1zICE9ICcnKSB7IHVybCArPSAnPycgKyBwYXJhbXM7IH0gd2luZG93LmxvY2F0aW9uID0gdXJsOyBlLnByZXZlbnREZWZhdWx0KCk7IH0pOyAkKCdCT0RZJykub24oJ2NsaWNrJywgJy5idG4tZ3JvdXAtc2VhcmNoIC5idG4tZmlsdGVyLWRpc2NvdW50cy1jbGVhcicsIGZ1bmN0aW9uIChlKSB7IHZhciBjYXRlZ29yaWVzSW5wdXRzID0gJCgnW25hbWVePSJwcm9kdWN0c1swXVtwcm9kdWN0Y2F0ZWdvcmllc10iXScpOyBjYXRlZ29yaWVzSW5wdXRzLnJlbW92ZSgpOyB2YXIgY3VycmVudFVybCA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpOyBjdXJyZW50VXJsLnNlYXJjaFBhcmFtcy5kZWxldGUoJ2NpZHMnKTsgY3VycmVudFVybC5zZWFyY2hQYXJhbXMuZGVsZXRlKCdzaG93Jyk7IGlmICgkKHRoaXMpLmF0dHIoJ2RhdGEtY2F0c2x1ZycpKSB7IHZhciBwYXRobmFtZSA9IGN1cnJlbnRVcmwucGF0aG5hbWU7IHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgnLycgKyAkKHRoaXMpLmF0dHIoJ2RhdGEtY2F0c2x1ZycpICsgJy8nLCAnLycpOyBjdXJyZW50VXJsLnBhdGhuYW1lID0gcGF0aG5hbWU7IH0gZWxzZSB7IH0gY3VycmVudFVybC5oYXNoID0gJyc7IHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gY3VycmVudFVybC50b1N0cmluZygpOyBlLnByZXZlbnREZWZhdWx0KCk7IH0pOyB9KShqUXVlcnkpOyA=");try{return decodeURIComponent(escape(s));}catch(e){return s;}})()); eval((function(){var s=atob("KGZ1bmN0aW9uICgkKXt2YXIgeGhyOyQoJ0JPRFknKS5vbigna2V5dXAgY3V0IHBhc3RlIGlucHV0JywgJy5zZWFyY2ggaW5wdXRbdHlwZT0ic2VhcmNoIl0nLCBmdW5jdGlvbiAoJGUpe3ZhciBzcGVjaWFsS2V5Q29kZU1hcCA9IHs5OiAidGFiIiwyNzogImVzYyIsMzc6ICJsZWZ0IiwzOTogInJpZ2h0IiwzODogInVwIiw0MDogImRvd24iLDE2OiAic2hpZnQiLDE3OiAiY3RybCIsMTg6ICJhbHQifTtpZiAoc3BlY2lhbEtleUNvZGVNYXBbJGUud2hpY2ggfHwgJGUua2V5Q29kZV0pe3JldHVybjt9dmFyIGlucHV0ID0gJCh0aGlzKSxzZWFyY2hDb250YWluZXIgPSAkKHRoaXMpLnBhcmVudHMoJy5zZWFyY2g6Zmlyc3QnKSxyZXN1bHRzQ29udGFpbmVyID0gJCgnLmRyb3Bkb3duLW1lbnUnLHNlYXJjaENvbnRhaW5lciksc2VhcmNoVmFsID0gaW5wdXQudmFsKCkscHJldlNlYXJjaFZhbCA9ICQoJy5kaXNjb3VudHMnKS5hdHRyKCdkYXRhLXMnKTtpZiAoc2VhcmNoVmFsICE9PSAnJyl7dmFyIGVudGVyQ29kZU1hcCA9IHsxMzogImVudGVyIix9O2lmIChlbnRlckNvZGVNYXBbJGUud2hpY2ggfHwgJGUua2V5Q29kZV0pe2lmICh4aHIpeGhyLmFib3J0KCk7dmFyIHVybFRvUmVkaXJlY3QgPSBkY29yZWNuZy5hcHUod2luZG93LmxvY2F0aW9uLmhyZWYsICdzaG93JywgJycpO3VybFRvUmVkaXJlY3QgPSBkY29yZWNuZy5hcHUodXJsVG9SZWRpcmVjdCwgJ2NpZHMnLCAnJyk7dXJsVG9SZWRpcmVjdCA9IGRjb3JlY25nLmFwdSh1cmxUb1JlZGlyZWN0LCAnYnJhbmRfaWQnLCAnJyk7d2luZG93LmxvY2F0aW9uID0gZGNvcmVjbmcuYXB1KHVybFRvUmVkaXJlY3QsICdzJywgJCh0aGlzKS52YWwoKSk7fX1pZiAoIXJlc3VsdHNDb250YWluZXIubGVuZ3RoKXskKHNlYXJjaENvbnRhaW5lcikuYXBwZW5kKCc8ZGl2IGNsYXNzPSJkcm9wZG93bi1tZW51IG11bHRpLXNlYXJjaC1jb250YWluZXIiPjwvZGl2PicpO3Jlc3VsdHNDb250YWluZXIgPSAkKCcuZHJvcGRvd24tbWVudScsc2VhcmNoQ29udGFpbmVyKTt9aWYgKHhocil4aHIuYWJvcnQoKTtpZiAoc2VhcmNoVmFsID09PSAnJyAmJiBwcmV2U2VhcmNoVmFsID09PSAnJyl7c2VhcmNoQ29udGFpbmVyLnJlbW92ZUNsYXNzKCdvcGVuJyk7cmV0dXJuO31pZiAoc2VhcmNoVmFsID09PSAnJyAmJiBwcmV2U2VhcmNoVmFsICE9PSAnJyl7c2VhcmNoQ29udGFpbmVyLnJlbW92ZUNsYXNzKCdvcGVuJyk7JCgnLmRpc2NvdW50cycpLmF0dHIoJ2RhdGEtcycsJycpO3ZhciBwYXJhbXMgPSBbXTtwYXJhbXNbJ3MnXSA9ICcnO2NoYW5nZUhpc3RvcnlTdGF0ZShwYXJhbXMpO3JlbG9hZFByb2R1Y3RzKCk7cmV0dXJuO312YXIgbWlubGVuZ3RoID0gaW5wdXQuYXR0cignZGF0YS1taW5sZW5naHQnKTtpZiAobWlubGVuZ3RoKXtpZiAoc2VhcmNoVmFsLmxlbmd0aCA+IDAgJiYgc2VhcmNoVmFsLmxlbmd0aCA8IG1pbmxlbmd0aCl7cmV0dXJuIHRydWU7fX12YXIgdCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCl7aW5wdXQuYWRkQ2xhc3MoJ2xvYWRpbmcnKTt9LCAxMDApO3ZhciB1cmwgPSBkY29yZWNuZy53ZWJzaXRldXJsLnJlcGxhY2UoJ2FjY291bnQuJywgJycpKyBpbnB1dC5hdHRyKCdkYXRhLWFqYXgtdXJsJyk7dXJsICs9ICc\/bmFtZT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHNlYXJjaFZhbCk7dmFyIGRpc2NvdW50cyA9ICQoJy5kaXNjb3VudHMnKTtpZiAoZGlzY291bnRzLmF0dHIoJ2RhdGEtY2l0eV9pZCcpKXt1cmwgKz0gJyZjaXR5X2lkPScgKyBkaXNjb3VudHMuYXR0cignZGF0YS1jaXR5X2lkJyk7fWlmIChkaXNjb3VudHMuYXR0cignZGF0YS1jYXRlZ29yeV9pZCcpKXt1cmwgKz0gJyZjYXRlZ29yeV9pZD0nICsgZGlzY291bnRzLmF0dHIoJ2RhdGEtY2F0ZWdvcnlfaWQnKTt9aWYgKGRpc2NvdW50cy5hdHRyKCdkYXRhLXNob3BfaWQnKSl7dXJsICs9ICcmc2hvcF9pZD0nICsgZGlzY291bnRzLmF0dHIoJ2RhdGEtc2hvcF9pZCcpO31pZiAoZGlzY291bnRzLmF0dHIoJ2RhdGEtZGlzY291bnRfaWQnKSl7dXJsICs9ICcmZGlzY291bnRfaWQ9JyArIGRpc2NvdW50cy5hdHRyKCdkYXRhLWRpc2NvdW50X2lkJyk7fWlmIChkaXNjb3VudHMuYXR0cignZGF0YS1kYXRlJykpe3VybCArPSAnJmRhdGU9JyArIGRpc2NvdW50cy5hdHRyKCdkYXRhLWRhdGUnKTt9aWYgKGRpc2NvdW50cy5hdHRyKCdkYXRhLXRpbWUnKSl7dXJsICs9ICcmdGltZT0nICsgZGlzY291bnRzLmF0dHIoJ2RhdGEtdGltZScpO311cmwgKz0gJyZpc19hamF4PTEnO3hociA9ICQuYWpheCh7dHlwZTogIkdFVCIseGhyRmllbGRzOiB7d2l0aENyZWRlbnRpYWxzOiB0cnVlfSxiZWZvcmVTZW5kOiBmdW5jdGlvbiAocmVxdWVzdCl7fSx1cmw6IHVybH0pLmRvbmUoZnVuY3Rpb24gKHJlc3BvbnNlKXtyZXN1bHRzQ29udGFpbmVyLmh0bWwocmVzcG9uc2UpO3NlYXJjaENvbnRhaW5lci5hZGRDbGFzcygnb3BlbicpO3ZhciB3aW5kb3dIZWlnaHQgPSAkKHdpbmRvdykuaGVpZ2h0KCk7dmFyIHN1Ym1lbnVIZWlnaHQgPSBNYXRoLnJvdW5kKHdpbmRvd0hlaWdodCAvIDIpO2lmIChzdWJtZW51SGVpZ2h0IDwgMTUwKXtzdWJtZW51SGVpZ2h0ID0gMTUwO31yZXN1bHRzQ29udGFpbmVyLmNzcygnbWF4LWhlaWdodCcsIHN1Ym1lbnVIZWlnaHQpO3Jlc3VsdHNDb250YWluZXIuY3NzKCdvdmVyZmxvdy14JywgJ2F1dG8nKTtjbGVhclRpbWVvdXQodCk7aW5wdXQucmVtb3ZlQ2xhc3MoJ2xvYWRpbmcnKTt9KTt9KTskKCdCT0RZJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCRlKXskKCcuc2VhcmNoLm9wZW4nKS5yZW1vdmVDbGFzcygnb3BlbicpO30pOyQoJ0JPRFknKS5vbignY2xpY2snLCAnLnNlYXJjaCcsIGZ1bmN0aW9uICgkZSl7JGUuc3RvcFByb3BhZ2F0aW9uKCk7fSk7fSkoalF1ZXJ5KTs=");try{return decodeURIComponent(escape(s));}catch(e){return s;}})()); eval((function(){var s=atob("dmFyIENvbnRlbnRMb2FkVmlhQWpheCA9IGZ1bmN0aW9uKCl7dmFyIHRoaXNDbGFzcyA9IHRoaXM7dGhpc0NsYXNzLnhocnMgPSBbXTt0aGlzQ2xhc3MubG9hZEFsbCA9IGZ1bmN0aW9uKGVsZW1lbnRzKXtlbGVtZW50cy5lYWNoKGZ1bmN0aW9uKGksZWwpe3RoaXNDbGFzcy5sb2FkSXRlbShpLCBlbCk7fSk7fTt0aGlzQ2xhc3MubG9hZEl0ZW0gPSBmdW5jdGlvbihpLCBlbCl7dmFyIHBhdGggPSAkKGVsKS5hdHRyKCdkYXRhLWx2YScpO3ZhciBwYXJhbXMgPSAkKGVsKS5hdHRyKCdkYXRhLWx2YXAnKTt2YXIgb2JqID0gZGNvcmVjbmcuZGVwYXJhbShwYXJhbXMpOyAkKGVsKS5hZGRDbGFzcygnbG9hZGVyLW1pbmktY2VudGVyJyk7dmFyIHhociA9IEFwaS5nZXQocGF0aCwgb2JqLCBmdW5jdGlvbihyZXNwb25zZSl7aWYgKHJlc3BvbnNlLnN1Y2Nlc3MpeyQoZWwpLmh0bWwocmVzcG9uc2UucmVzdWx0KTt9IGVsc2UgeyQoZWwpLmh0bWwocmVzcG9uc2UuZXJyb3JfZGVzY3JpcHRpb24pO30kKGVsKS5yZW1vdmVDbGFzcygnbG9hZGVyLW1pbmktY2VudGVyJyk7dGhpc0NsYXNzLnhocnNbaV0gPSBmYWxzZTskKGVsKS5hcHBlbmQoJyA8YSB0aXRsZT0i0J7QsdC90L7QstC40YLRjCIgY2xhc3M9Imx2YS1ycHYiIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIj48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1yZWZyZXNoIj48L3NwYW4+PC9hPicpOyB9KTt0aGlzQ2xhc3MueGhyc1tpXSA9IHhocjt9O307dmFyIGx2YSA9IG5ldyBDb250ZW50TG9hZFZpYUFqYXgoKTtsdmEubG9hZEFsbCgkKCdbZGF0YS1sdmFdJykpOyQoJ0JPRFknKS5vbignY2xpY2snLCcubHZhLXJwdicsZnVuY3Rpb24oKXt2YXIgZWwgPSAkKHRoaXMpLnBhcmVudHMoJ1tkYXRhLWx2YV0nKTt2YXIgb2JqID0gZGNvcmVjbmcuZGVwYXJhbSgkKGVsKS5hdHRyKCdkYXRhLWx2YXAnKSk7IG9iai51YyA9IDE7ICQoZWwpLmF0dHIoJ2RhdGEtbHZhcCcsalF1ZXJ5LnBhcmFtKG9iaikpOyBsdmEubG9hZEl0ZW0oMCwgZWwpOyB9KTskKHdpbmRvdykub24oImJlZm9yZXVubG9hZCIsIGZ1bmN0aW9uKCl7Zm9yKCB2YXIgaSA9IDA7IGkgPCBsdmEueGhycy5sZW5ndGg7IGkrKyl7aWYgKGx2YS54aHJzW2ldKXtsdmEueGhyc1tpXS5hYm9ydCgpO319fSk7");try{return decodeURIComponent(escape(s));}catch(e){return s;}})()); /* уже не нужно, в фильтре заменил на ссылку. Нужно для админки, перенес в function initDatepicker() { $('.datepicker').datepicker({ format: dcorecng.datepickerFormat, language: 'ru', autoclose: true, todayHighlight: true }); $('.input-daterange input').each(function() { $('.input-daterange').datepicker({ format: dcorecng.datepickerFormat, language: 'ru', todayHighlight: true }); }); dcorecng.dpLoaded = true; // обозначает что datepicker загрузился, нужно в графике в админке } initDatepicker(); */ /* $('BODY').on('click', '#btn-discounts-date', function () { if ($('#form-control-discounts-date').val() != '') { //window.location = dcorecng.websiteurl + dcorecng.cityurl + $('#form-control-discounts-date').val() + '/'; var url = dcorecng.originalState; if (typeof dcorecng.discountsdate == 'undefined') { url = url.replace(dcorecng.cityurl, dcorecng.cityurl + $('#form-control-discounts-date').val() + '/'); } else { url = url.replace(dcorecng.discountsdate + '/', $('#form-control-discounts-date').val() + '/'); } // Удалить параметр time со ссылки url = dcorecng.rpu(url,'time'); window.location = url; } });*/ }); // Timepicker $.getScript("https://skidkaonline.ru/js/bootstrap-timepicker.js?t=t1570013906", function () { $('.timepicker').timepicker({ minuteStep: 5, showMeridian: false, showInputs: false, disableFocus: true }); }); }); dcorecng.loadAdsense(); // Загрузка табов аяксом с задержкой // Загружать только для экранов больше чем 960px if ($(window).width() > 950) { setTimeout(function () { $.ajax({ url: '/ajax/ajaxgetfixedtabshtml/', type: 'POST', data: {is_ajax: 1}, success: function (response) { $('BODY').append(response); // устанавливаем страницу теекущую в контактной форме $('[name="currentpage"]').val(window.location.href); // выбор времени $('.timepicker').timepicker({ minuteStep: 5, showMeridian: false, showInputs: false, disableFocus: true }); if (!$.cookie("subscribe_showed")) { if ($('.fixed-tabs').is(':visible') && $(".subscribe-form").length) { setTimeout(function () { //$(".fixed-tabs").css("left", "12px"); $(".fixed-tabs").css('transform', 'translateX(100px)'); if (!$(".subscribe-form").is(":visible")) { $(".fixed-tabs .subscribe .show-tab-link").click() } $.cookie("subscribe_showed", "1", { expires: 999, path: "/" }) }, 15e3) } } } }); }, 1000); } } /** * Функция, которая отслеживает клики по исходящим ссылк в Analytics. * Эта функция применяет в качестве аргумента строку с действительным URL, после чего использует ее * как ярлык события. Если указать beacon в качестве метода передачи, данные обращений * будут отправляться с использованием метода navigator.sendBeacon в поддерживающих его браузерах. */ var trackOutboundLink = function(url) { }, trackEvent = function(eventCategory, eventAction, value) { }, trackPageview = function(url,params){ params = typeof params !== 'undefined' ? params : {}; }; (function() { var script = document.createElement("script"); script.src = "https://skidkaonline.ru/js/jquery-3.5.1.js"; script.onload = script.onreadystatechange = startScripts; script.async = true; document.body.appendChild( script ); })();