/******/ (function() { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ "./blog/blog-filter.js": /*!*****************************!*\ !*** ./blog/blog-filter.js ***! \*****************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": function() { return /* binding */ blogFilter; } /* harmony export */ }); /* provided dependency */ var jQuery = __webpack_require__(/*! jquery */ "jquery"); function blogFilter() { (function ($) { // jQuery(document).on('init_filter', (e, module) => { // DSInitFilter(module); // }); var DSInitFilter = function DSInitFilter(module) { var filter = { module: null, action: null, form: '', moreBtn: $(), results: null, doing_ajax: null, timeout: null, query: { post_type: null, per_page: 9, page: 1 }, component_styles: {}, ajax_url: ds.ajax_url, preloader: '
', init: function init(module) { var ajaxModule = $(module); if (ajaxModule) { filter.module = ajaxModule; filter.action = ajaxModule.data('action'); filter.query.post_type = ajaxModule.data('post-type'); filter.query.posts_per_page = ajaxModule.data('per-page'); filter.initElementsActions(); } }, initElementsActions: function initElementsActions() { var results = filter.module.find('div[data-container="ajax-result"]'); if (results) { filter.results = results; var moreBtn = filter.module.find('.ajax-load-more'); if (moreBtn) { filter.moreBtn = moreBtn; filter.morePosts(); } var form = filter.module.find('form[data-form="ajax"]'); if (form) { filter.form = form; filter.changeForm(); } } var compClass = filter.module.data('class'); if (compClass) { filter.component_styles.class = compClass; } var compStyles = filter.module.data('styles'); if (compStyles) { filter.component_styles.styles = compStyles; } var compImage = filter.module.data('image'); if (compImage) { filter.component_styles.image = compImage; } }, morePosts: function morePosts() { filter.moreBtn.on('click', function (e) { e.preventDefault(); filter.sendAjax(filter.query.page); }); }, changeForm: function changeForm() { var $input_text = filter.form.find('input[type="text"], textarea'); $input_text.unbind('keyup'); $input_text.not('[data-ajax="false"]').keyup(function () { if (filter.timeout != null) { clearTimeout(filter.timeout); } filter.timeout = setTimeout(function () { filter.timeout = null; filter.sendAjax(); $input_submit.parent().addClass('is-filter-active'); }, 500); }); var $input_submit = filter.form.find('button[type="submit"]'); $input_submit.unbind('click'); $input_submit.not('[data-ajax="false"]').click(function (e) { e.preventDefault(); filter.sendAjax(); $input_submit.parent().addClass('is-filter-active'); }); var $select = filter.form.find('select'); $select.unbind('change'); $select.not('[data-ajax="false"]').change(function () { filter.sendAjax(); }); filter.form.unbind('keydown'); filter.form.on('keydown', function (event) { if (event.keyCode == 13) { event.preventDefault(); filter.sendAjax(); } }); }, sendAjax: function sendAjax() { var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; if (filter.doing_ajax != null) { filter.doing_ajax.abort(); filter.doing_ajax = null; filter.module.find('.loader').remove(); } var data = { action: filter.action, query: { post_type: filter.query.post_type, posts_per_page: filter.query.posts_per_page, paged: page }, component: filter.component_styles, device: $(window).width() <= 768 ? 'mobile' : 'desktop' }; if (filter.form.length > 0) { data.form = filter.form.serialize(); } filter.doing_ajax = $.ajax({ url: filter.ajax_url, type: 'POST', data: data, beforeSend: function beforeSend(xhr) { filter.module.append(filter.preloader); }, success: function success(data) { if (data) { if (data.page === 1) filter.results.html(''); filter.results.append(data.posts); if (data.max_pages === data.page) { filter.moreBtn.hide(); } else { filter.moreBtn.show(); } if (data.total_posts_showing == 0) { filter.module.find('.js-blog-counter-wrapper').hide(); } else { filter.module.find('.js-blog-counter-wrapper').show(); } if (data.total_posts_showing) { filter.module.find('.js-blog-counter-showing').text(data.total_posts_showing); } if (data.total_posts) { filter.module.find('.js-blog-counter-total').text(data.total_posts); } filter.query.page = data.page; filter.module.find('.loader').remove(); } else { filter.moreBtn.hide(); } filter.doing_ajax = null; } }); } }; filter.init(module); }; var doInit = function doInit() { $('.js-ajax-block').each(function (i) { // console.log(i); // console.log($('.js-ajax-block')[i]); // console.log($(this)); DSInitFilter($('.js-ajax-block')[i]); }); }; doInit(); /* jQuery(document).trigger('init_filter', 'ajax-posts'); jQuery(document).trigger('init_filter', 'ajax-content-1'); */ })(jQuery); } /***/ }), /***/ "./blog/data-layers.js": /*!*****************************!*\ !*** ./blog/data-layers.js ***! \*****************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ dataLayers: function() { return /* binding */ dataLayers; } /* harmony export */ }); function dataLayers() { // sidebar CTA link var sideCta = document.querySelector('.m-rel-float .box-cta__wrap'); if (sideCta) { // send the data layer var sendDataLayer = function sendDataLayer() { // Your code to push the data layer goes here window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event': 'sidebarctaclick' }); }; // get the click sideCta.addEventListener('click', function (event) { // stop default reload event.preventDefault(); // push data layer sendDataLayer(); // get back on track with the link setTimeout(function () { window.location.href = sideCta.href; }, 100); // Delay , give the data layer more chance to get trough }); } } /***/ }), /***/ "./blog/dt-subscribe.js": /*!******************************!*\ !*** ./blog/dt-subscribe.js ***! \******************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ subscribeSlideIn: function() { return /* binding */ subscribeSlideIn; } /* harmony export */ }); /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery"); function subscribeSlideIn() { if ($('.dt-subscribe')) { var hide = false; if (localStorage.getItem('subsSlide')) hide = true; // if user already subscribe do not show it $(window).on('scroll', function () { if ($(window).scrollTop() >= 3000 && !hide) { $('.dt-subscribe').addClass('active'); } else { if (!hide) { $('.dt-subscribe').removeClass('active'); } } }); $('.dt-subscribe-close').on('click', function () { $('.dt-subscribe').removeClass('active'); hide = true; }); } } /***/ }), /***/ "./blog/toc-mobile.js": /*!****************************!*\ !*** ./blog/toc-mobile.js ***! \****************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ tocMobile: function() { return /* binding */ tocMobile; } /* harmony export */ }); function tocMobile() { // Function to handle TOC display for mobile function handleMobileTOC() { if (window.innerWidth < 1112) { var toc_container = document.getElementById("ez-toc-container"); if (!toc_container) { return; } else { toc_container.classList.add("toc_close"); } document.querySelector('.ez-toc-list').style = 'display: none'; // Event delegation for dynamically generated .ez-toc-link elements document.querySelector('.ez-toc-toggle').addEventListener('click', function (e) { // Prevent TOC handling if the click occurred within the dark mode component if (e.target.closest('.dark-mode')) return; var tocToggle = document.querySelector('.ez-toc-toggle'); // Check if .ez-toc-link is clicked if (e.target.matches('.ez-toc-link')) { if (tocToggle) { tocToggle.click(); // Open TOC } } // Close TOC if clicked outside the TOC container else if (!e.target.closest('#ez-toc-container')) { var closeToggle = document.querySelector('.toc_close .ez-toc-toggle'); if (closeToggle) { closeToggle.click(); } } }); } else { // Reset the TOC display style when above the threshold var tocList = document.querySelector('.ez-toc-list'); if (tocList) { tocList.style = ''; } } } // Initial call to set up TOC visibility on load handleMobileTOC(); // Resize event listener to handle TOC visibility on screen resize window.addEventListener('resize', handleMobileTOC); } /***/ }), /***/ "./blog/toc-sticky.js": /*!****************************!*\ !*** ./blog/toc-sticky.js ***! \****************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": function() { return /* binding */ tocSticky; } /* harmony export */ }); /* harmony import */ var _utils_u_el_in_viewport_detect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/u_el-in-viewport-detect */ "./utils/u_el-in-viewport-detect.js"); /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery"); // eslint-disable-next-line camelcase function tocSticky() { window.addEventListener('scroll', function () { // u_elementFromTop(document.querySelectorAll('#ez-toc-container + *'), '.counter-hierarchy', 'is-float', -1000, 'pixels'); // as top of element hits top of viewport (0,_utils_u_el_in_viewport_detect__WEBPACK_IMPORTED_MODULE_0__.u_elementFromTop)(document.querySelectorAll('#ez-toc-container + *'), '.m-rel-float', 'rev-m', -1000, 'pixels'); // as top of element hits top of viewport }, false); window.addEventListener('resize', function () { // u_elementFromTop(document.querySelectorAll('#ez-toc-container + *'), '.counter-hierarchy', 'is-float', -1000, 'pixels'); // as top of element hits top of viewport (0,_utils_u_el_in_viewport_detect__WEBPACK_IMPORTED_MODULE_0__.u_elementFromTop)(document.querySelectorAll('#ez-toc-container + *'), '.m-rel-float', 'rev-m', -1000, 'pixels'); // as top of element hits top of viewport }, false); function tocToggleClasses() { var tocCollapser = document.querySelector('.ez-toc-toggle'); var tocContainer = document.querySelector('.ez-toc-title-toggle'); var target = document.querySelector('.ez-toc-list'); if (window.getComputedStyle(target).display === 'block') { tocCollapser.classList.add('active'); } tocCollapser.addEventListener('click', function (event) { function mesure() { if (window.getComputedStyle(target).display === 'none') { tocCollapser.classList.remove('active'); tocContainer.classList.remove('is-shown'); tocContainer.classList.add('is-hide'); } else { tocCollapser.classList.add('active'); tocContainer.classList.add('is-shown'); tocContainer.classList.remove('is-hide'); } } setTimeout(mesure, 300); }); if ($('#ez-toc-container').hasClass('is-shown')) { $('.ez-toc-toggle').addClass('active'); } } // tocToggleClasses(); } /***/ }), /***/ "./components/dark-mode.js": /*!*********************************!*\ !*** ./components/dark-mode.js ***! \*********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": function() { return /* binding */ darkMode; } /* harmony export */ }); /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery"); /* eslint-disable linebreak-style */ /* eslint-disable eqeqeq */ /* eslint-disable no-undef */ /** * Dark Mode */ function darkMode() { var mode = localStorage.getItem('dark-mode'); if (mode === 'on') { $('.dark-mode').addClass('on'); $('body').addClass('dark-on'); $('.dark-mode').attr('aria-pressed', true); } $('.dark-mode').click(function functionName() { if ($(this).hasClass('on')) { $(this).removeClass('on'); $('body').removeClass('dark-on'); $(this).attr('aria-pressed', false); localStorage.setItem('dark-mode', 'off'); } else { $(this).addClass('on'); $('body').addClass('dark-on'); $(this).attr('aria-pressed', true); localStorage.setItem('dark-mode', 'on'); } }); } /***/ }), /***/ "./js-blog.js": /*!********************!*\ !*** ./js-blog.js ***! \********************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony import */ var _components_dark_mode__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components/dark-mode */ "./components/dark-mode.js"); /* harmony import */ var _blog_toc_sticky__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./blog/toc-sticky */ "./blog/toc-sticky.js"); /* harmony import */ var _blog_toc_mobile__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blog/toc-mobile */ "./blog/toc-mobile.js"); /* harmony import */ var _blog_blog_filter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./blog/blog-filter */ "./blog/blog-filter.js"); /* harmony import */ var _blog_dt_subscribe__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./blog/dt-subscribe */ "./blog/dt-subscribe.js"); /* harmony import */ var _blog_data_layers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./blog/data-layers */ "./blog/data-layers.js"); // Blog // import { toggleDarkMode } from './blog/darkmode'; // import tableOfContents from './blog/toc-highlight'; // import {relatedResources} from "./blog/blog-resources"; document.addEventListener('DOMContentLoaded', function () { (0,_components_dark_mode__WEBPACK_IMPORTED_MODULE_0__["default"])(); // toggleDarkMode('.js-dark-mode'); if (document.querySelector('.ez-toc-toggle')) { (0,_blog_toc_sticky__WEBPACK_IMPORTED_MODULE_1__["default"])(); // tableOfContents(); } (0,_blog_toc_mobile__WEBPACK_IMPORTED_MODULE_2__.tocMobile)(); if (document.querySelector('.single-post')) { (0,_blog_data_layers__WEBPACK_IMPORTED_MODULE_5__.dataLayers)(); } if (document.querySelector('.js-ajax-block')) { (0,_blog_blog_filter__WEBPACK_IMPORTED_MODULE_3__["default"])(); } if (document.querySelector('.poll_module')) { /* Simple stupid but works lol */ setTimeout(function () { var polls = document.querySelectorAll('.poll_module'); var buttons = document.querySelectorAll('.basic-vote-button'); polls.forEach(function (poll) { var pollBtn = poll.querySelector('.basic-vote-button'); var pollMsg = poll.querySelector('.basic-message'); pollBtn.addEventListener('click', function (event) { poll.classList.add('is-submitted'); }); if (pollMsg.classList.contains('basic-success')) { poll.classList.add('is-submitted'); } }); }, 100); } (0,_blog_dt_subscribe__WEBPACK_IMPORTED_MODULE_4__.subscribeSlideIn)(); // relatedResources(); }); /***/ }), /***/ "./utils/u_classlist-add-remove.js": /*!*****************************************!*\ !*** ./utils/u_classlist-add-remove.js ***! \*****************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ u_addClass: function() { return /* binding */ u_addClass; }, /* harmony export */ u_delClass: function() { return /* binding */ u_delClass; }, /* harmony export */ u_hasClass: function() { return /* binding */ u_hasClass; } /* harmony export */ }); var u_hasClass = function u_hasClass(el, cls) { if (el.className.match('(?:^|\\s)' + cls + '(?!\\S)')) { return true; } }; var u_addClass = function u_addClass(el, cls) { if (!el.className.match('(?:^|\\s)' + cls + '(?!\\S)')) { el.className += ' ' + cls; } }; var u_delClass = function u_delClass(el, cls) { el.className = el.className.replace(new RegExp('(?:^|\\s)' + cls + '(?!\\S)'), ''); }; /***/ }), /***/ "./utils/u_el-in-viewport-detect.js": /*!******************************************!*\ !*** ./utils/u_el-in-viewport-detect.js ***! \******************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ u_elementFromTop: function() { return /* binding */ u_elementFromTop; }, /* harmony export */ u_isElementIsInView: function() { return /* binding */ u_isElementIsInView; } /* harmony export */ }); /* harmony import */ var _u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./u_classlist-add-remove */ "./utils/u_classlist-add-remove.js"); /** * params: trigger element, target element class, classes to add to target element, trigger element distance from top, unit ('percent' or 'pixels') * usage: elementFromTop(elemTrigger, elemTarget, classToAdd, distanceFromTop, unit); * * http://blog.fofwebdesign.co.uk/41-add-classes-to-an-element-when-scrolled-into-viewport */ var u_elementFromTop = function u_elementFromTop(elemTrigger, elemTarget, classToAdd, distanceFromTop, unit) { var winY = window.innerHeight || document.documentElement.clientHeight, elTriggerLength = elemTrigger.length, elTargetLength, distTop, distPercent, distPixels, distUnit, elTarget, i, j; for (i = 0; i < elTriggerLength; ++i) { elTarget = document.querySelectorAll(elemTarget); elTargetLength = elTarget.length; distTop = elemTrigger[i].getBoundingClientRect().top; distPercent = Math.round(distTop / winY * 100); distPixels = Math.round(distTop); distUnit = unit == 'percent' ? distPercent : distPixels; if (distUnit <= distanceFromTop) { if (!(0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_hasClass)(elemTrigger[i], elemTarget)) { for (j = 0; j < elTargetLength; ++j) { if (!(0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_hasClass)(elTarget[j], classToAdd)) { (0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_addClass)(elTarget[j], classToAdd); } } } else { if (!(0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_hasClass)(elemTrigger[i], classToAdd)) { (0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_addClass)(elemTrigger[i], classToAdd); } } } else { (0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_delClass)(elemTrigger[i], classToAdd); if (!(0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_hasClass)(elemTrigger[i], elemTarget)) { for (j = 0; j < elTargetLength; ++j) { (0,_u_classlist_add_remove__WEBPACK_IMPORTED_MODULE_0__.u_delClass)(elTarget[j], classToAdd); } } } } }; var u_isElementIsInView = function u_isElementIsInView(el) { var scroll = window.scrollY || window.pageYOffset; var boundsTop = el.getBoundingClientRect().top + scroll; var viewport = { top: scroll, bottom: scroll + window.innerHeight }; var bounds = { top: boundsTop, bottom: boundsTop + el.clientHeight }; return bounds.bottom >= viewport.top && bounds.bottom <= viewport.bottom || bounds.top <= viewport.bottom && bounds.top >= viewport.top; }; /***/ }), /***/ "jquery": /*!*************************!*\ !*** external "jQuery" ***! \*************************/ /***/ (function(module) { module.exports = jQuery; /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ if (cachedModule.error !== undefined) throw cachedModule.error; /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ try { /******/ var execOptions = { id: moduleId, module: module, factory: __webpack_modules__[moduleId], require: __webpack_require__ }; /******/ __webpack_require__.i.forEach(function(handler) { handler(execOptions); }); /******/ module = execOptions.module; /******/ execOptions.factory.call(module.exports, module, module.exports, execOptions.require); /******/ } catch(e) { /******/ module.error = e; /******/ throw e; /******/ } /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = __webpack_modules__; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = __webpack_module_cache__; /******/ /******/ // expose the module execution interceptor /******/ __webpack_require__.i = []; /******/ /************************************************************************/ /******/ /* webpack/runtime/define property getters */ /******/ !function() { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = function(exports, definition) { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/get javascript update chunk filename */ /******/ !function() { /******/ // This function allow to reference all chunks /******/ __webpack_require__.hu = function(chunkId) { /******/ // return url for filenames based on template /******/ return "" + chunkId + "." + __webpack_require__.h() + ".hot-update.js"; /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/get update manifest filename */ /******/ !function() { /******/ __webpack_require__.hmrF = function() { return "app_blog." + __webpack_require__.h() + ".hot-update.json"; }; /******/ }(); /******/ /******/ /* webpack/runtime/getFullHash */ /******/ !function() { /******/ __webpack_require__.h = function() { return "b9bbc6303f71f232fb77"; } /******/ }(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ !function() { /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } /******/ }(); /******/ /******/ /* webpack/runtime/load script */ /******/ !function() { /******/ var inProgress = {}; /******/ // data-webpack is not used as build has no uniqueName /******/ // loadScript function to load a script via script tag /******/ __webpack_require__.l = function(url, done, key, chunkId) { /******/ if(inProgress[url]) { inProgress[url].push(done); return; } /******/ var script, needAttach; /******/ if(key !== undefined) { /******/ var scripts = document.getElementsByTagName("script"); /******/ for(var i = 0; i < scripts.length; i++) { /******/ var s = scripts[i]; /******/ if(s.getAttribute("src") == url) { script = s; break; } /******/ } /******/ } /******/ if(!script) { /******/ needAttach = true; /******/ script = document.createElement('script'); /******/ /******/ script.charset = 'utf-8'; /******/ script.timeout = 120; /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } /******/ /******/ /******/ script.src = url; /******/ } /******/ inProgress[url] = [done]; /******/ var onScriptComplete = function(prev, event) { /******/ // avoid mem leaks in IE. /******/ script.onerror = script.onload = null; /******/ clearTimeout(timeout); /******/ var doneFns = inProgress[url]; /******/ delete inProgress[url]; /******/ script.parentNode && script.parentNode.removeChild(script); /******/ doneFns && doneFns.forEach(function(fn) { return fn(event); }); /******/ if(prev) return prev(event); /******/ } /******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); /******/ script.onerror = onScriptComplete.bind(null, script.onerror); /******/ script.onload = onScriptComplete.bind(null, script.onload); /******/ needAttach && document.head.appendChild(script); /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ !function() { /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/hot module replacement */ /******/ !function() { /******/ var currentModuleData = {}; /******/ var installedModules = __webpack_require__.c; /******/ /******/ // module and require creation /******/ var currentChildModule; /******/ var currentParents = []; /******/ /******/ // status /******/ var registeredStatusHandlers = []; /******/ var currentStatus = "idle"; /******/ /******/ // while downloading /******/ var blockingPromises = 0; /******/ var blockingPromisesWaiting = []; /******/ /******/ // The update info /******/ var currentUpdateApplyHandlers; /******/ var queuedInvalidatedModules; /******/ /******/ __webpack_require__.hmrD = currentModuleData; /******/ /******/ __webpack_require__.i.push(function (options) { /******/ var module = options.module; /******/ var require = createRequire(options.require, options.id); /******/ module.hot = createModuleHotObject(options.id, module); /******/ module.parents = currentParents; /******/ module.children = []; /******/ currentParents = []; /******/ options.require = require; /******/ }); /******/ /******/ __webpack_require__.hmrC = {}; /******/ __webpack_require__.hmrI = {}; /******/ /******/ function createRequire(require, moduleId) { /******/ var me = installedModules[moduleId]; /******/ if (!me) return require; /******/ var fn = function (request) { /******/ if (me.hot.active) { /******/ if (installedModules[request]) { /******/ var parents = installedModules[request].parents; /******/ if (parents.indexOf(moduleId) === -1) { /******/ parents.push(moduleId); /******/ } /******/ } else { /******/ currentParents = [moduleId]; /******/ currentChildModule = request; /******/ } /******/ if (me.children.indexOf(request) === -1) { /******/ me.children.push(request); /******/ } /******/ } else { /******/ console.warn( /******/ "[HMR] unexpected require(" + /******/ request + /******/ ") from disposed module " + /******/ moduleId /******/ ); /******/ currentParents = []; /******/ } /******/ return require(request); /******/ }; /******/ var createPropertyDescriptor = function (name) { /******/ return { /******/ configurable: true, /******/ enumerable: true, /******/ get: function () { /******/ return require[name]; /******/ }, /******/ set: function (value) { /******/ require[name] = value; /******/ } /******/ }; /******/ }; /******/ for (var name in require) { /******/ if (Object.prototype.hasOwnProperty.call(require, name) && name !== "e") { /******/ Object.defineProperty(fn, name, createPropertyDescriptor(name)); /******/ } /******/ } /******/ fn.e = function (chunkId, fetchPriority) { /******/ return trackBlockingPromise(require.e(chunkId, fetchPriority)); /******/ }; /******/ return fn; /******/ } /******/ /******/ function createModuleHotObject(moduleId, me) { /******/ var _main = currentChildModule !== moduleId; /******/ var hot = { /******/ // private stuff /******/ _acceptedDependencies: {}, /******/ _acceptedErrorHandlers: {}, /******/ _declinedDependencies: {}, /******/ _selfAccepted: false, /******/ _selfDeclined: false, /******/ _selfInvalidated: false, /******/ _disposeHandlers: [], /******/ _main: _main, /******/ _requireSelf: function () { /******/ currentParents = me.parents.slice(); /******/ currentChildModule = _main ? undefined : moduleId; /******/ __webpack_require__(moduleId); /******/ }, /******/ /******/ // Module API /******/ active: true, /******/ accept: function (dep, callback, errorHandler) { /******/ if (dep === undefined) hot._selfAccepted = true; /******/ else if (typeof dep === "function") hot._selfAccepted = dep; /******/ else if (typeof dep === "object" && dep !== null) { /******/ for (var i = 0; i < dep.length; i++) { /******/ hot._acceptedDependencies[dep[i]] = callback || function () {}; /******/ hot._acceptedErrorHandlers[dep[i]] = errorHandler; /******/ } /******/ } else { /******/ hot._acceptedDependencies[dep] = callback || function () {}; /******/ hot._acceptedErrorHandlers[dep] = errorHandler; /******/ } /******/ }, /******/ decline: function (dep) { /******/ if (dep === undefined) hot._selfDeclined = true; /******/ else if (typeof dep === "object" && dep !== null) /******/ for (var i = 0; i < dep.length; i++) /******/ hot._declinedDependencies[dep[i]] = true; /******/ else hot._declinedDependencies[dep] = true; /******/ }, /******/ dispose: function (callback) { /******/ hot._disposeHandlers.push(callback); /******/ }, /******/ addDisposeHandler: function (callback) { /******/ hot._disposeHandlers.push(callback); /******/ }, /******/ removeDisposeHandler: function (callback) { /******/ var idx = hot._disposeHandlers.indexOf(callback); /******/ if (idx >= 0) hot._disposeHandlers.splice(idx, 1); /******/ }, /******/ invalidate: function () { /******/ this._selfInvalidated = true; /******/ switch (currentStatus) { /******/ case "idle": /******/ currentUpdateApplyHandlers = []; /******/ Object.keys(__webpack_require__.hmrI).forEach(function (key) { /******/ __webpack_require__.hmrI[key]( /******/ moduleId, /******/ currentUpdateApplyHandlers /******/ ); /******/ }); /******/ setStatus("ready"); /******/ break; /******/ case "ready": /******/ Object.keys(__webpack_require__.hmrI).forEach(function (key) { /******/ __webpack_require__.hmrI[key]( /******/ moduleId, /******/ currentUpdateApplyHandlers /******/ ); /******/ }); /******/ break; /******/ case "prepare": /******/ case "check": /******/ case "dispose": /******/ case "apply": /******/ (queuedInvalidatedModules = queuedInvalidatedModules || []).push( /******/ moduleId /******/ ); /******/ break; /******/ default: /******/ // ignore requests in error states /******/ break; /******/ } /******/ }, /******/ /******/ // Management API /******/ check: hotCheck, /******/ apply: hotApply, /******/ status: function (l) { /******/ if (!l) return currentStatus; /******/ registeredStatusHandlers.push(l); /******/ }, /******/ addStatusHandler: function (l) { /******/ registeredStatusHandlers.push(l); /******/ }, /******/ removeStatusHandler: function (l) { /******/ var idx = registeredStatusHandlers.indexOf(l); /******/ if (idx >= 0) registeredStatusHandlers.splice(idx, 1); /******/ }, /******/ /******/ //inherit from previous dispose call /******/ data: currentModuleData[moduleId] /******/ }; /******/ currentChildModule = undefined; /******/ return hot; /******/ } /******/ /******/ function setStatus(newStatus) { /******/ currentStatus = newStatus; /******/ var results = []; /******/ /******/ for (var i = 0; i < registeredStatusHandlers.length; i++) /******/ results[i] = registeredStatusHandlers[i].call(null, newStatus); /******/ /******/ return Promise.all(results).then(function () {}); /******/ } /******/ /******/ function unblock() { /******/ if (--blockingPromises === 0) { /******/ setStatus("ready").then(function () { /******/ if (blockingPromises === 0) { /******/ var list = blockingPromisesWaiting; /******/ blockingPromisesWaiting = []; /******/ for (var i = 0; i < list.length; i++) { /******/ list[i](); /******/ } /******/ } /******/ }); /******/ } /******/ } /******/ /******/ function trackBlockingPromise(promise) { /******/ switch (currentStatus) { /******/ case "ready": /******/ setStatus("prepare"); /******/ /* fallthrough */ /******/ case "prepare": /******/ blockingPromises++; /******/ promise.then(unblock, unblock); /******/ return promise; /******/ default: /******/ return promise; /******/ } /******/ } /******/ /******/ function waitForBlockingPromises(fn) { /******/ if (blockingPromises === 0) return fn(); /******/ return new Promise(function (resolve) { /******/ blockingPromisesWaiting.push(function () { /******/ resolve(fn()); /******/ }); /******/ }); /******/ } /******/ /******/ function hotCheck(applyOnUpdate) { /******/ if (currentStatus !== "idle") { /******/ throw new Error("check() is only allowed in idle status"); /******/ } /******/ return setStatus("check") /******/ .then(__webpack_require__.hmrM) /******/ .then(function (update) { /******/ if (!update) { /******/ return setStatus(applyInvalidatedModules() ? "ready" : "idle").then( /******/ function () { /******/ return null; /******/ } /******/ ); /******/ } /******/ /******/ return setStatus("prepare").then(function () { /******/ var updatedModules = []; /******/ currentUpdateApplyHandlers = []; /******/ /******/ return Promise.all( /******/ Object.keys(__webpack_require__.hmrC).reduce(function ( /******/ promises, /******/ key /******/ ) { /******/ __webpack_require__.hmrC[key]( /******/ update.c, /******/ update.r, /******/ update.m, /******/ promises, /******/ currentUpdateApplyHandlers, /******/ updatedModules /******/ ); /******/ return promises; /******/ }, []) /******/ ).then(function () { /******/ return waitForBlockingPromises(function () { /******/ if (applyOnUpdate) { /******/ return internalApply(applyOnUpdate); /******/ } else { /******/ return setStatus("ready").then(function () { /******/ return updatedModules; /******/ }); /******/ } /******/ }); /******/ }); /******/ }); /******/ }); /******/ } /******/ /******/ function hotApply(options) { /******/ if (currentStatus !== "ready") { /******/ return Promise.resolve().then(function () { /******/ throw new Error( /******/ "apply() is only allowed in ready status (state: " + /******/ currentStatus + /******/ ")" /******/ ); /******/ }); /******/ } /******/ return internalApply(options); /******/ } /******/ /******/ function internalApply(options) { /******/ options = options || {}; /******/ /******/ applyInvalidatedModules(); /******/ /******/ var results = currentUpdateApplyHandlers.map(function (handler) { /******/ return handler(options); /******/ }); /******/ currentUpdateApplyHandlers = undefined; /******/ /******/ var errors = results /******/ .map(function (r) { /******/ return r.error; /******/ }) /******/ .filter(Boolean); /******/ /******/ if (errors.length > 0) { /******/ return setStatus("abort").then(function () { /******/ throw errors[0]; /******/ }); /******/ } /******/ /******/ // Now in "dispose" phase /******/ var disposePromise = setStatus("dispose"); /******/ /******/ results.forEach(function (result) { /******/ if (result.dispose) result.dispose(); /******/ }); /******/ /******/ // Now in "apply" phase /******/ var applyPromise = setStatus("apply"); /******/ /******/ var error; /******/ var reportError = function (err) { /******/ if (!error) error = err; /******/ }; /******/ /******/ var outdatedModules = []; /******/ results.forEach(function (result) { /******/ if (result.apply) { /******/ var modules = result.apply(reportError); /******/ if (modules) { /******/ for (var i = 0; i < modules.length; i++) { /******/ outdatedModules.push(modules[i]); /******/ } /******/ } /******/ } /******/ }); /******/ /******/ return Promise.all([disposePromise, applyPromise]).then(function () { /******/ // handle errors in accept handlers and self accepted module load /******/ if (error) { /******/ return setStatus("fail").then(function () { /******/ throw error; /******/ }); /******/ } /******/ /******/ if (queuedInvalidatedModules) { /******/ return internalApply(options).then(function (list) { /******/ outdatedModules.forEach(function (moduleId) { /******/ if (list.indexOf(moduleId) < 0) list.push(moduleId); /******/ }); /******/ return list; /******/ }); /******/ } /******/ /******/ return setStatus("idle").then(function () { /******/ return outdatedModules; /******/ }); /******/ }); /******/ } /******/ /******/ function applyInvalidatedModules() { /******/ if (queuedInvalidatedModules) { /******/ if (!currentUpdateApplyHandlers) currentUpdateApplyHandlers = []; /******/ Object.keys(__webpack_require__.hmrI).forEach(function (key) { /******/ queuedInvalidatedModules.forEach(function (moduleId) { /******/ __webpack_require__.hmrI[key]( /******/ moduleId, /******/ currentUpdateApplyHandlers /******/ ); /******/ }); /******/ }); /******/ queuedInvalidatedModules = undefined; /******/ return true; /******/ } /******/ } /******/ }(); /******/ /******/ /* webpack/runtime/publicPath */ /******/ !function() { /******/ __webpack_require__.p = "https://digitalsilknew:8888/wp-content/themes/digitalsilk/assets/js/"; /******/ }(); /******/ /******/ /* webpack/runtime/jsonp chunk loading */ /******/ !function() { /******/ // no baseURI /******/ /******/ // object to store loaded and loading chunks /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded /******/ var installedChunks = __webpack_require__.hmrS_jsonp = __webpack_require__.hmrS_jsonp || { /******/ "app_blog": 0 /******/ }; /******/ /******/ // no chunk on demand loading /******/ /******/ // no prefetching /******/ /******/ // no preloaded /******/ /******/ var currentUpdatedModulesList; /******/ var waitingUpdateResolves = {}; /******/ function loadUpdateChunk(chunkId, updatedModulesList) { /******/ currentUpdatedModulesList = updatedModulesList; /******/ return new Promise(function(resolve, reject) { /******/ waitingUpdateResolves[chunkId] = resolve; /******/ // start update chunk loading /******/ var url = __webpack_require__.p + __webpack_require__.hu(chunkId); /******/ // create error before stack unwound to get useful stacktrace later /******/ var error = new Error(); /******/ var loadingEnded = function(event) { /******/ if(waitingUpdateResolves[chunkId]) { /******/ waitingUpdateResolves[chunkId] = undefined /******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); /******/ var realSrc = event && event.target && event.target.src; /******/ error.message = 'Loading hot update chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; /******/ error.name = 'ChunkLoadError'; /******/ error.type = errorType; /******/ error.request = realSrc; /******/ reject(error); /******/ } /******/ }; /******/ __webpack_require__.l(url, loadingEnded); /******/ }); /******/ } /******/ /******/ self["webpackHotUpdate"] = function(chunkId, moreModules, runtime) { /******/ for(var moduleId in moreModules) { /******/ if(__webpack_require__.o(moreModules, moduleId)) { /******/ currentUpdate[moduleId] = moreModules[moduleId]; /******/ if(currentUpdatedModulesList) currentUpdatedModulesList.push(moduleId); /******/ } /******/ } /******/ if(runtime) currentUpdateRuntime.push(runtime); /******/ if(waitingUpdateResolves[chunkId]) { /******/ waitingUpdateResolves[chunkId](); /******/ waitingUpdateResolves[chunkId] = undefined; /******/ } /******/ }; /******/ /******/ var currentUpdateChunks; /******/ var currentUpdate; /******/ var currentUpdateRemovedChunks; /******/ var currentUpdateRuntime; /******/ function applyHandler(options) { /******/ if (__webpack_require__.f) delete __webpack_require__.f.jsonpHmr; /******/ currentUpdateChunks = undefined; /******/ function getAffectedModuleEffects(updateModuleId) { /******/ var outdatedModules = [updateModuleId]; /******/ var outdatedDependencies = {}; /******/ /******/ var queue = outdatedModules.map(function (id) { /******/ return { /******/ chain: [id], /******/ id: id /******/ }; /******/ }); /******/ while (queue.length > 0) { /******/ var queueItem = queue.pop(); /******/ var moduleId = queueItem.id; /******/ var chain = queueItem.chain; /******/ var module = __webpack_require__.c[moduleId]; /******/ if ( /******/ !module || /******/ (module.hot._selfAccepted && !module.hot._selfInvalidated) /******/ ) /******/ continue; /******/ if (module.hot._selfDeclined) { /******/ return { /******/ type: "self-declined", /******/ chain: chain, /******/ moduleId: moduleId /******/ }; /******/ } /******/ if (module.hot._main) { /******/ return { /******/ type: "unaccepted", /******/ chain: chain, /******/ moduleId: moduleId /******/ }; /******/ } /******/ for (var i = 0; i < module.parents.length; i++) { /******/ var parentId = module.parents[i]; /******/ var parent = __webpack_require__.c[parentId]; /******/ if (!parent) continue; /******/ if (parent.hot._declinedDependencies[moduleId]) { /******/ return { /******/ type: "declined", /******/ chain: chain.concat([parentId]), /******/ moduleId: moduleId, /******/ parentId: parentId /******/ }; /******/ } /******/ if (outdatedModules.indexOf(parentId) !== -1) continue; /******/ if (parent.hot._acceptedDependencies[moduleId]) { /******/ if (!outdatedDependencies[parentId]) /******/ outdatedDependencies[parentId] = []; /******/ addAllToSet(outdatedDependencies[parentId], [moduleId]); /******/ continue; /******/ } /******/ delete outdatedDependencies[parentId]; /******/ outdatedModules.push(parentId); /******/ queue.push({ /******/ chain: chain.concat([parentId]), /******/ id: parentId /******/ }); /******/ } /******/ } /******/ /******/ return { /******/ type: "accepted", /******/ moduleId: updateModuleId, /******/ outdatedModules: outdatedModules, /******/ outdatedDependencies: outdatedDependencies /******/ }; /******/ } /******/ /******/ function addAllToSet(a, b) { /******/ for (var i = 0; i < b.length; i++) { /******/ var item = b[i]; /******/ if (a.indexOf(item) === -1) a.push(item); /******/ } /******/ } /******/ /******/ // at begin all updates modules are outdated /******/ // the "outdated" status can propagate to parents if they don't accept the children /******/ var outdatedDependencies = {}; /******/ var outdatedModules = []; /******/ var appliedUpdate = {}; /******/ /******/ var warnUnexpectedRequire = function warnUnexpectedRequire(module) { /******/ console.warn( /******/ "[HMR] unexpected require(" + module.id + ") to disposed module" /******/ ); /******/ }; /******/ /******/ for (var moduleId in currentUpdate) { /******/ if (__webpack_require__.o(currentUpdate, moduleId)) { /******/ var newModuleFactory = currentUpdate[moduleId]; /******/ /** @type {TODO} */ /******/ var result; /******/ if (newModuleFactory) { /******/ result = getAffectedModuleEffects(moduleId); /******/ } else { /******/ result = { /******/ type: "disposed", /******/ moduleId: moduleId /******/ }; /******/ } /******/ /** @type {Error|false} */ /******/ var abortError = false; /******/ var doApply = false; /******/ var doDispose = false; /******/ var chainInfo = ""; /******/ if (result.chain) { /******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); /******/ } /******/ switch (result.type) { /******/ case "self-declined": /******/ if (options.onDeclined) options.onDeclined(result); /******/ if (!options.ignoreDeclined) /******/ abortError = new Error( /******/ "Aborted because of self decline: " + /******/ result.moduleId + /******/ chainInfo /******/ ); /******/ break; /******/ case "declined": /******/ if (options.onDeclined) options.onDeclined(result); /******/ if (!options.ignoreDeclined) /******/ abortError = new Error( /******/ "Aborted because of declined dependency: " + /******/ result.moduleId + /******/ " in " + /******/ result.parentId + /******/ chainInfo /******/ ); /******/ break; /******/ case "unaccepted": /******/ if (options.onUnaccepted) options.onUnaccepted(result); /******/ if (!options.ignoreUnaccepted) /******/ abortError = new Error( /******/ "Aborted because " + moduleId + " is not accepted" + chainInfo /******/ ); /******/ break; /******/ case "accepted": /******/ if (options.onAccepted) options.onAccepted(result); /******/ doApply = true; /******/ break; /******/ case "disposed": /******/ if (options.onDisposed) options.onDisposed(result); /******/ doDispose = true; /******/ break; /******/ default: /******/ throw new Error("Unexception type " + result.type); /******/ } /******/ if (abortError) { /******/ return { /******/ error: abortError /******/ }; /******/ } /******/ if (doApply) { /******/ appliedUpdate[moduleId] = newModuleFactory; /******/ addAllToSet(outdatedModules, result.outdatedModules); /******/ for (moduleId in result.outdatedDependencies) { /******/ if (__webpack_require__.o(result.outdatedDependencies, moduleId)) { /******/ if (!outdatedDependencies[moduleId]) /******/ outdatedDependencies[moduleId] = []; /******/ addAllToSet( /******/ outdatedDependencies[moduleId], /******/ result.outdatedDependencies[moduleId] /******/ ); /******/ } /******/ } /******/ } /******/ if (doDispose) { /******/ addAllToSet(outdatedModules, [result.moduleId]); /******/ appliedUpdate[moduleId] = warnUnexpectedRequire; /******/ } /******/ } /******/ } /******/ currentUpdate = undefined; /******/ /******/ // Store self accepted outdated modules to require them later by the module system /******/ var outdatedSelfAcceptedModules = []; /******/ for (var j = 0; j < outdatedModules.length; j++) { /******/ var outdatedModuleId = outdatedModules[j]; /******/ var module = __webpack_require__.c[outdatedModuleId]; /******/ if ( /******/ module && /******/ (module.hot._selfAccepted || module.hot._main) && /******/ // removed self-accepted modules should not be required /******/ appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire && /******/ // when called invalidate self-accepting is not possible /******/ !module.hot._selfInvalidated /******/ ) { /******/ outdatedSelfAcceptedModules.push({ /******/ module: outdatedModuleId, /******/ require: module.hot._requireSelf, /******/ errorHandler: module.hot._selfAccepted /******/ }); /******/ } /******/ } /******/ /******/ var moduleOutdatedDependencies; /******/ /******/ return { /******/ dispose: function () { /******/ currentUpdateRemovedChunks.forEach(function (chunkId) { /******/ delete installedChunks[chunkId]; /******/ }); /******/ currentUpdateRemovedChunks = undefined; /******/ /******/ var idx; /******/ var queue = outdatedModules.slice(); /******/ while (queue.length > 0) { /******/ var moduleId = queue.pop(); /******/ var module = __webpack_require__.c[moduleId]; /******/ if (!module) continue; /******/ /******/ var data = {}; /******/ /******/ // Call dispose handlers /******/ var disposeHandlers = module.hot._disposeHandlers; /******/ for (j = 0; j < disposeHandlers.length; j++) { /******/ disposeHandlers[j].call(null, data); /******/ } /******/ __webpack_require__.hmrD[moduleId] = data; /******/ /******/ // disable module (this disables requires from this module) /******/ module.hot.active = false; /******/ /******/ // remove module from cache /******/ delete __webpack_require__.c[moduleId]; /******/ /******/ // when disposing there is no need to call dispose handler /******/ delete outdatedDependencies[moduleId]; /******/ /******/ // remove "parents" references from all children /******/ for (j = 0; j < module.children.length; j++) { /******/ var child = __webpack_require__.c[module.children[j]]; /******/ if (!child) continue; /******/ idx = child.parents.indexOf(moduleId); /******/ if (idx >= 0) { /******/ child.parents.splice(idx, 1); /******/ } /******/ } /******/ } /******/ /******/ // remove outdated dependency from module children /******/ var dependency; /******/ for (var outdatedModuleId in outdatedDependencies) { /******/ if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { /******/ module = __webpack_require__.c[outdatedModuleId]; /******/ if (module) { /******/ moduleOutdatedDependencies = /******/ outdatedDependencies[outdatedModuleId]; /******/ for (j = 0; j < moduleOutdatedDependencies.length; j++) { /******/ dependency = moduleOutdatedDependencies[j]; /******/ idx = module.children.indexOf(dependency); /******/ if (idx >= 0) module.children.splice(idx, 1); /******/ } /******/ } /******/ } /******/ } /******/ }, /******/ apply: function (reportError) { /******/ // insert new code /******/ for (var updateModuleId in appliedUpdate) { /******/ if (__webpack_require__.o(appliedUpdate, updateModuleId)) { /******/ __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId]; /******/ } /******/ } /******/ /******/ // run new runtime modules /******/ for (var i = 0; i < currentUpdateRuntime.length; i++) { /******/ currentUpdateRuntime[i](__webpack_require__); /******/ } /******/ /******/ // call accept handlers /******/ for (var outdatedModuleId in outdatedDependencies) { /******/ if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { /******/ var module = __webpack_require__.c[outdatedModuleId]; /******/ if (module) { /******/ moduleOutdatedDependencies = /******/ outdatedDependencies[outdatedModuleId]; /******/ var callbacks = []; /******/ var errorHandlers = []; /******/ var dependenciesForCallbacks = []; /******/ for (var j = 0; j < moduleOutdatedDependencies.length; j++) { /******/ var dependency = moduleOutdatedDependencies[j]; /******/ var acceptCallback = /******/ module.hot._acceptedDependencies[dependency]; /******/ var errorHandler = /******/ module.hot._acceptedErrorHandlers[dependency]; /******/ if (acceptCallback) { /******/ if (callbacks.indexOf(acceptCallback) !== -1) continue; /******/ callbacks.push(acceptCallback); /******/ errorHandlers.push(errorHandler); /******/ dependenciesForCallbacks.push(dependency); /******/ } /******/ } /******/ for (var k = 0; k < callbacks.length; k++) { /******/ try { /******/ callbacks[k].call(null, moduleOutdatedDependencies); /******/ } catch (err) { /******/ if (typeof errorHandlers[k] === "function") { /******/ try { /******/ errorHandlers[k](err, { /******/ moduleId: outdatedModuleId, /******/ dependencyId: dependenciesForCallbacks[k] /******/ }); /******/ } catch (err2) { /******/ if (options.onErrored) { /******/ options.onErrored({ /******/ type: "accept-error-handler-errored", /******/ moduleId: outdatedModuleId, /******/ dependencyId: dependenciesForCallbacks[k], /******/ error: err2, /******/ originalError: err /******/ }); /******/ } /******/ if (!options.ignoreErrored) { /******/ reportError(err2); /******/ reportError(err); /******/ } /******/ } /******/ } else { /******/ if (options.onErrored) { /******/ options.onErrored({ /******/ type: "accept-errored", /******/ moduleId: outdatedModuleId, /******/ dependencyId: dependenciesForCallbacks[k], /******/ error: err /******/ }); /******/ } /******/ if (!options.ignoreErrored) { /******/ reportError(err); /******/ } /******/ } /******/ } /******/ } /******/ } /******/ } /******/ } /******/ /******/ // Load self accepted modules /******/ for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) { /******/ var item = outdatedSelfAcceptedModules[o]; /******/ var moduleId = item.module; /******/ try { /******/ item.require(moduleId); /******/ } catch (err) { /******/ if (typeof item.errorHandler === "function") { /******/ try { /******/ item.errorHandler(err, { /******/ moduleId: moduleId, /******/ module: __webpack_require__.c[moduleId] /******/ }); /******/ } catch (err2) { /******/ if (options.onErrored) { /******/ options.onErrored({ /******/ type: "self-accept-error-handler-errored", /******/ moduleId: moduleId, /******/ error: err2, /******/ originalError: err /******/ }); /******/ } /******/ if (!options.ignoreErrored) { /******/ reportError(err2); /******/ reportError(err); /******/ } /******/ } /******/ } else { /******/ if (options.onErrored) { /******/ options.onErrored({ /******/ type: "self-accept-errored", /******/ moduleId: moduleId, /******/ error: err /******/ }); /******/ } /******/ if (!options.ignoreErrored) { /******/ reportError(err); /******/ } /******/ } /******/ } /******/ } /******/ /******/ return outdatedModules; /******/ } /******/ }; /******/ } /******/ __webpack_require__.hmrI.jsonp = function (moduleId, applyHandlers) { /******/ if (!currentUpdate) { /******/ currentUpdate = {}; /******/ currentUpdateRuntime = []; /******/ currentUpdateRemovedChunks = []; /******/ applyHandlers.push(applyHandler); /******/ } /******/ if (!__webpack_require__.o(currentUpdate, moduleId)) { /******/ currentUpdate[moduleId] = __webpack_require__.m[moduleId]; /******/ } /******/ }; /******/ __webpack_require__.hmrC.jsonp = function ( /******/ chunkIds, /******/ removedChunks, /******/ removedModules, /******/ promises, /******/ applyHandlers, /******/ updatedModulesList /******/ ) { /******/ applyHandlers.push(applyHandler); /******/ currentUpdateChunks = {}; /******/ currentUpdateRemovedChunks = removedChunks; /******/ currentUpdate = removedModules.reduce(function (obj, key) { /******/ obj[key] = false; /******/ return obj; /******/ }, {}); /******/ currentUpdateRuntime = []; /******/ chunkIds.forEach(function (chunkId) { /******/ if ( /******/ __webpack_require__.o(installedChunks, chunkId) && /******/ installedChunks[chunkId] !== undefined /******/ ) { /******/ promises.push(loadUpdateChunk(chunkId, updatedModulesList)); /******/ currentUpdateChunks[chunkId] = true; /******/ } else { /******/ currentUpdateChunks[chunkId] = false; /******/ } /******/ }); /******/ if (__webpack_require__.f) { /******/ __webpack_require__.f.jsonpHmr = function (chunkId, promises) { /******/ if ( /******/ currentUpdateChunks && /******/ __webpack_require__.o(currentUpdateChunks, chunkId) && /******/ !currentUpdateChunks[chunkId] /******/ ) { /******/ promises.push(loadUpdateChunk(chunkId)); /******/ currentUpdateChunks[chunkId] = true; /******/ } /******/ }; /******/ } /******/ }; /******/ /******/ __webpack_require__.hmrM = function() { /******/ if (typeof fetch === "undefined") throw new Error("No browser support: need fetch API"); /******/ return fetch(__webpack_require__.p + __webpack_require__.hmrF()).then(function(response) { /******/ if(response.status === 404) return; // no update available /******/ if(!response.ok) throw new Error("Failed to fetch update manifest " + response.statusText); /******/ return response.json(); /******/ }); /******/ }; /******/ /******/ // no on chunks loaded /******/ /******/ // no jsonp function /******/ }(); /******/ /************************************************************************/ /******/ /******/ // module cache are used so entry inlining is disabled /******/ // startup /******/ // Load entry module and return exports /******/ var __webpack_exports__ = __webpack_require__("./js-blog.js"); /******/ /******/ })() ; //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTtXQUNBO1dBQ0EsRUFBRTs7V0FFRjtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsSUFBSTtXQUNKOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsS0FBSztXQUNMO1dBQ0EsSUFBSTtXQUNKOztXQUVBO1dBQ0E7V0FDQSxHQUFHO1dBQ0gsRUFBRTtXQUNGOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLElBQUk7V0FDSixHQUFHO1dBQ0g7V0FDQTtXQUNBO1dBQ0E7Ozs7O1dDbllBOzs7OztXQ0FBOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTs7V0FFQTs7V0FFQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsRUFBRTtXQUNGOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxHQUFHO1dBQ0g7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsbUJBQW1CLDJCQUEyQjtXQUM5QztXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsS0FBSztXQUNMO1dBQ0E7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7V0FDQSxrQkFBa0IsY0FBYztXQUNoQztXQUNBO1dBQ0E7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOztXQUVBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7V0FDQTtXQUNBO1dBQ0EsY0FBYyxNQUFNO1dBQ3BCO1dBQ0E7V0FDQTtXQUNBLEtBQUs7V0FDTDtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsY0FBYyxhQUFhO1dBQzNCO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTtXQUNBO1dBQ0EsaUJBQWlCLDRCQUE0QjtXQUM3QztXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsSUFBSTtXQUNKO1dBQ0E7O1dBRUE7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQSxJQUFJO1dBQ0o7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOztXQUVBOztXQUVBO1dBQ0E7V0FDQSxnQkFBZ0IsNEJBQTRCO1dBQzVDO1dBQ0E7V0FDQTs7V0FFQTtXQUNBOztXQUVBO1dBQ0E7O1dBRUE7V0FDQTs7V0FFQTtXQUNBLGdCQUFnQiw0QkFBNEI7V0FDNUM7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0Esa0JBQWtCLHVDQUF1QztXQUN6RDtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLEdBQUc7V0FDSDtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTtXQUNBLG1CQUFtQixpQ0FBaUM7V0FDcEQ7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHNCQUFzQix1Q0FBdUM7V0FDN0Q7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0Esc0JBQXNCLHNCQUFzQjtXQUM1QztXQUNBO1dBQ0EsU0FBUztXQUNUO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxXQUFXO1dBQ1gsV0FBVztXQUNYO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsWUFBWTtXQUNaO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLFVBQVU7V0FDVjtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxXQUFXO1dBQ1g7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7V0FDQSxtQkFBbUIsd0NBQXdDO1dBQzNEO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsTUFBTTtXQUNOO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxRQUFRO1dBQ1IsUUFBUTtXQUNSO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLFNBQVM7V0FDVDtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxPQUFPO1dBQ1A7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLFFBQVE7V0FDUjtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsRUFBRSxJQUFJO1dBQ047V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLElBQUk7V0FDSjtXQUNBO1dBQ0EsRUFBRTtXQUNGO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOztXQUVBO1dBQ0E7V0FDQTtXQUNBLHNDQUFzQztXQUN0QztXQUNBO1dBQ0EsRUFBRTtXQUNGOztXQUVBOztXQUVBOzs7OztVRTlmQTtVQUNBO1VBQ0E7VUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Jsb2cvYmxvZy1maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vYmxvZy9kYXRhLWxheWVycy5qcyIsIndlYnBhY2s6Ly8vLi9ibG9nL2R0LXN1YnNjcmliZS5qcyIsIndlYnBhY2s6Ly8vLi9ibG9nL3RvYy1tb2JpbGUuanMiLCJ3ZWJwYWNrOi8vLy4vYmxvZy90b2Mtc3RpY2t5LmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvZGFyay1tb2RlLmpzIiwid2VicGFjazovLy8uL2pzLWJsb2cuanMiLCJ3ZWJwYWNrOi8vLy4vdXRpbHMvdV9jbGFzc2xpc3QtYWRkLXJlbW92ZS5qcyIsIndlYnBhY2s6Ly8vLi91dGlscy91X2VsLWluLXZpZXdwb3J0LWRldGVjdC5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgdmFyIFwialF1ZXJ5XCIiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9nZXQgamF2YXNjcmlwdCB1cGRhdGUgY2h1bmsgZmlsZW5hbWUiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9nZXQgdXBkYXRlIG1hbmlmZXN0IGZpbGVuYW1lIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZ2V0RnVsbEhhc2giLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9sb2FkIHNjcmlwdCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2hvdCBtb2R1bGUgcmVwbGFjZW1lbnQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly8vd2VicGFjay9iZWZvcmUtc3RhcnR1cCIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIiwid2VicGFjazovLy93ZWJwYWNrL2FmdGVyLXN0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmxvZ0ZpbHRlcigpIHtcblxuICAgIChmdW5jdGlvbiAoJCkge1xuXG4gICAgICAgIC8vIGpRdWVyeShkb2N1bWVudCkub24oJ2luaXRfZmlsdGVyJywgKGUsIG1vZHVsZSkgPT4ge1xuICAgICAgICAvLyAgICAgRFNJbml0RmlsdGVyKG1vZHVsZSk7XG4gICAgICAgIC8vIH0pO1xuXG4gICAgICAgIGxldCBEU0luaXRGaWx0ZXIgPSBmdW5jdGlvbiAobW9kdWxlKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB7XG4gICAgICAgICAgICAgICAgbW9kdWxlOiBudWxsLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogbnVsbCxcbiAgICAgICAgICAgICAgICBmb3JtOiAnJyxcbiAgICAgICAgICAgICAgICBtb3JlQnRuOiAkKCksXG4gICAgICAgICAgICAgICAgcmVzdWx0czogbnVsbCxcbiAgICAgICAgICAgICAgICBkb2luZ19hamF4OiBudWxsLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IG51bGwsXG4gICAgICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICAgICAgcG9zdF90eXBlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBwZXJfcGFnZTogOSxcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudF9zdHlsZXM6IHt9LFxuICAgICAgICAgICAgICAgIGFqYXhfdXJsOiBkcy5hamF4X3VybCxcbiAgICAgICAgICAgICAgICBwcmVsb2FkZXI6ICc8ZGl2IGNsYXNzPVwiZmlsdGVyLWxvYWRlciBsb2FkZXJcIj48ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjxkaXYgY2xhc3M9XCJkb3VibGUtYm91bmNlMVwiPjwvZGl2PjxkaXYgY2xhc3M9XCJkb3VibGUtYm91bmNlMlwiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9XCJsb2FkZXItYmdcIj48L2Rpdj48L2Rpdj4nLFxuICAgICAgICAgICAgICAgIGluaXQobW9kdWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFqYXhNb2R1bGUgPSAkKG1vZHVsZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFqYXhNb2R1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5tb2R1bGUgPSBhamF4TW9kdWxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuYWN0aW9uID0gYWpheE1vZHVsZS5kYXRhKCdhY3Rpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5xdWVyeS5wb3N0X3R5cGUgPSBhamF4TW9kdWxlLmRhdGEoJ3Bvc3QtdHlwZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnF1ZXJ5LnBvc3RzX3Blcl9wYWdlID0gYWpheE1vZHVsZS5kYXRhKCdwZXItcGFnZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuaW5pdEVsZW1lbnRzQWN0aW9ucygpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGluaXRFbGVtZW50c0FjdGlvbnMoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBmaWx0ZXIubW9kdWxlLmZpbmQoJ2RpdltkYXRhLWNvbnRhaW5lcj1cImFqYXgtcmVzdWx0XCJdJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5yZXN1bHRzID0gcmVzdWx0cztcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9yZUJ0biA9IGZpbHRlci5tb2R1bGUuZmluZCgnLmFqYXgtbG9hZC1tb3JlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9yZUJ0bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5tb3JlQnRuID0gbW9yZUJ0bjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIubW9yZVBvc3RzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBmaWx0ZXIubW9kdWxlLmZpbmQoJ2Zvcm1bZGF0YS1mb3JtPVwiYWpheFwiXScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuZm9ybSA9IGZvcm07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmNoYW5nZUZvcm0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBDbGFzcyA9IGZpbHRlci5tb2R1bGUuZGF0YSgnY2xhc3MnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBDbGFzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmNvbXBvbmVudF9zdHlsZXMuY2xhc3MgPSBjb21wQ2xhc3M7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wU3R5bGVzID0gZmlsdGVyLm1vZHVsZS5kYXRhKCdzdHlsZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBTdHlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5jb21wb25lbnRfc3R5bGVzLnN0eWxlcyA9IGNvbXBTdHlsZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wSW1hZ2UgPSBmaWx0ZXIubW9kdWxlLmRhdGEoJ2ltYWdlJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5jb21wb25lbnRfc3R5bGVzLmltYWdlID0gY29tcEltYWdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtb3JlUG9zdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlci5tb3JlQnRuLm9uKCdjbGljaycsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5zZW5kQWpheChmaWx0ZXIucXVlcnkucGFnZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2hhbmdlRm9ybSgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJGlucHV0X3RleHQgPSBmaWx0ZXIuZm9ybS5maW5kKCdpbnB1dFt0eXBlPVwidGV4dFwiXSwgdGV4dGFyZWEnKTtcbiAgICAgICAgICAgICAgICAgICAgJGlucHV0X3RleHQudW5iaW5kKCdrZXl1cCcpO1xuICAgICAgICAgICAgICAgICAgICAkaW5wdXRfdGV4dC5ub3QoJ1tkYXRhLWFqYXg9XCJmYWxzZVwiXScpLmtleXVwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIudGltZW91dCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGZpbHRlci50aW1lb3V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5zZW5kQWpheCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dF9zdWJtaXQucGFyZW50KCkuYWRkQ2xhc3MoJ2lzLWZpbHRlci1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCAkaW5wdXRfc3VibWl0ID0gZmlsdGVyLmZvcm0uZmluZCgnYnV0dG9uW3R5cGU9XCJzdWJtaXRcIl0nKTtcbiAgICAgICAgICAgICAgICAgICAgJGlucHV0X3N1Ym1pdC51bmJpbmQoJ2NsaWNrJyk7XG4gICAgICAgICAgICAgICAgICAgICRpbnB1dF9zdWJtaXQubm90KCdbZGF0YS1hamF4PVwiZmFsc2VcIl0nKS5jbGljaygoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnNlbmRBamF4KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXRfc3VibWl0LnBhcmVudCgpLmFkZENsYXNzKCdpcy1maWx0ZXItYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0ICRzZWxlY3QgPSBmaWx0ZXIuZm9ybS5maW5kKCdzZWxlY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgJHNlbGVjdC51bmJpbmQoJ2NoYW5nZScpO1xuICAgICAgICAgICAgICAgICAgICAkc2VsZWN0Lm5vdCgnW2RhdGEtYWpheD1cImZhbHNlXCJdJykuY2hhbmdlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5zZW5kQWpheCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuZm9ybS51bmJpbmQoJ2tleWRvd24nKTtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmZvcm0ub24oJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09IDEzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuc2VuZEFqYXgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZW5kQWpheChwYWdlID0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLmRvaW5nX2FqYXggIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmRvaW5nX2FqYXguYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5kb2luZ19hamF4ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5tb2R1bGUuZmluZCgnLmxvYWRlcicpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogZmlsdGVyLmFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdF90eXBlOiBmaWx0ZXIucXVlcnkucG9zdF90eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RzX3Blcl9wYWdlOiBmaWx0ZXIucXVlcnkucG9zdHNfcGVyX3BhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZWQ6IHBhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiBmaWx0ZXIuY29tcG9uZW50X3N0eWxlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZTogJCh3aW5kb3cpLndpZHRoKCkgPD0gNzY4ID8gJ21vYmlsZScgOiAnZGVza3RvcCcsXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlci5mb3JtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZm9ybSA9IGZpbHRlci5mb3JtLnNlcmlhbGl6ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmRvaW5nX2FqYXggPSAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBmaWx0ZXIuYWpheF91cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlU2VuZCh4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIubW9kdWxlLmFwcGVuZChmaWx0ZXIucHJlbG9hZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnBhZ2UgPT09IDEpIGZpbHRlci5yZXN1bHRzLmh0bWwoJycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5yZXN1bHRzLmFwcGVuZChkYXRhLnBvc3RzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5tYXhfcGFnZXMgPT09IGRhdGEucGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm1vcmVCdG4uaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm1vcmVCdG4uc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEudG90YWxfcG9zdHNfc2hvd2luZyA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIubW9kdWxlLmZpbmQoJy5qcy1ibG9nLWNvdW50ZXItd3JhcHBlcicpLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5tb2R1bGUuZmluZCgnLmpzLWJsb2ctY291bnRlci13cmFwcGVyJykuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEudG90YWxfcG9zdHNfc2hvd2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm1vZHVsZS5maW5kKCcuanMtYmxvZy1jb3VudGVyLXNob3dpbmcnKS50ZXh0KGRhdGEudG90YWxfcG9zdHNfc2hvd2luZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS50b3RhbF9wb3N0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm1vZHVsZS5maW5kKCcuanMtYmxvZy1jb3VudGVyLXRvdGFsJykudGV4dChkYXRhLnRvdGFsX3Bvc3RzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5xdWVyeS5wYWdlID0gZGF0YS5wYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIubW9kdWxlLmZpbmQoJy5sb2FkZXInKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIubW9yZUJ0bi5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmRvaW5nX2FqYXggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZpbHRlci5pbml0KG1vZHVsZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZG9Jbml0ID0gKCkgPT4ge1xuXG4gICAgICAgICAgICAkKCcuanMtYWpheC1ibG9jaycpLmVhY2goZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhpKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygkKCcuanMtYWpheC1ibG9jaycpW2ldKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygkKHRoaXMpKTtcbiAgICAgICAgICAgICAgICBEU0luaXRGaWx0ZXIoJCgnLmpzLWFqYXgtYmxvY2snKVtpXSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9O1xuXG4gICAgICAgIGRvSW5pdCgpO1xuXG4gICAgICAgIC8qIGpRdWVyeShkb2N1bWVudCkudHJpZ2dlcignaW5pdF9maWx0ZXInLCAnYWpheC1wb3N0cycpO1xuICAgICAgICBqUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoJ2luaXRfZmlsdGVyJywgJ2FqYXgtY29udGVudC0xJyk7ICovXG5cbiAgICB9KGpRdWVyeSkpO1xuXG59XG4iLCJleHBvcnQgZnVuY3Rpb24gZGF0YUxheWVycygpe1xuICAgIC8vIHNpZGViYXIgQ1RBIGxpbmtcbiAgICBjb25zdCBzaWRlQ3RhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm0tcmVsLWZsb2F0IC5ib3gtY3RhX193cmFwJyk7XG5cbiAgICBpZiAoc2lkZUN0YSkge1xuXG4gICAgICAgIC8vIGdldCB0aGUgY2xpY2tcbiAgICAgICAgc2lkZUN0YS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgLy8gc3RvcCBkZWZhdWx0IHJlbG9hZFxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgLy8gcHVzaCBkYXRhIGxheWVyXG4gICAgICAgICAgICBzZW5kRGF0YUxheWVyKCk7XG5cbiAgICAgICAgICAgLy8gZ2V0IGJhY2sgb24gdHJhY2sgd2l0aCB0aGUgbGlua1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHNpZGVDdGEuaHJlZjtcbiAgICAgICAgICAgIH0sIDEwMCk7IC8vIERlbGF5ICwgZ2l2ZSB0aGUgZGF0YSBsYXllciBtb3JlIGNoYW5jZSB0byBnZXQgdHJvdWdoXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vICBzZW5kIHRoZSBkYXRhIGxheWVyXG4gICAgICAgIGZ1bmN0aW9uIHNlbmREYXRhTGF5ZXIoKSB7XG4gICAgICAgICAgICAvLyBZb3VyIGNvZGUgdG8gcHVzaCB0aGUgZGF0YSBsYXllciBnb2VzIGhlcmVcbiAgICAgICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIgPSB3aW5kb3cuZGF0YUxheWVyIHx8IFtdO1xuICAgICAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKHtcbiAgICAgICAgICAgICAgICAnZXZlbnQnOiAnc2lkZWJhcmN0YWNsaWNrJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0iLCJleHBvcnQgZnVuY3Rpb24gc3Vic2NyaWJlU2xpZGVJbigpIHtcblxuICAgIGlmICgkKCcuZHQtc3Vic2NyaWJlJykpIHtcbiAgICAgICAgdmFyIGhpZGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzdWJzU2xpZGUnKSkgaGlkZSA9IHRydWU7IC8vIGlmIHVzZXIgYWxyZWFkeSBzdWJzY3JpYmUgZG8gbm90IHNob3cgaXRcblxuICAgICAgICAkKHdpbmRvdykub24oJ3Njcm9sbCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCQod2luZG93KS5zY3JvbGxUb3AoKSA+PSAzMDAwICYmICFoaWRlKSB7XG4gICAgICAgICAgICAgICAgJCgnLmR0LXN1YnNjcmliZScpLmFkZENsYXNzKCdhY3RpdmUnKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIWhpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgJCgnLmR0LXN1YnNjcmliZScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cblxuICAgICAgICAkKCcuZHQtc3Vic2NyaWJlLWNsb3NlJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAkKCcuZHQtc3Vic2NyaWJlJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgaGlkZSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHRvY01vYmlsZSgpIHtcbiAgICAvLyBGdW5jdGlvbiB0byBoYW5kbGUgVE9DIGRpc3BsYXkgZm9yIG1vYmlsZVxuICAgIGZ1bmN0aW9uIGhhbmRsZU1vYmlsZVRPQygpIHtcbiAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTExMikge1xuICAgICAgICAgICAgY29uc3QgdG9jX2NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZXotdG9jLWNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgIGlmICghdG9jX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG9jX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwidG9jX2Nsb3NlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmV6LXRvYy1saXN0Jykuc3R5bGUgPSAnZGlzcGxheTogbm9uZSc7XG5cbiAgICAgICAgICAgIC8vIEV2ZW50IGRlbGVnYXRpb24gZm9yIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCAuZXotdG9jLWxpbmsgZWxlbWVudHNcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lei10b2MtdG9nZ2xlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgLy8gUHJldmVudCBUT0MgaGFuZGxpbmcgaWYgdGhlIGNsaWNrIG9jY3VycmVkIHdpdGhpbiB0aGUgZGFyayBtb2RlIGNvbXBvbmVudFxuICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC5jbG9zZXN0KCcuZGFyay1tb2RlJykpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRvY1RvZ2dsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lei10b2MtdG9nZ2xlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiAuZXotdG9jLWxpbmsgaXMgY2xpY2tlZFxuICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC5tYXRjaGVzKCcuZXotdG9jLWxpbmsnKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9jVG9nZ2xlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2NUb2dnbGUuY2xpY2soKTsgLy8gT3BlbiBUT0NcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIENsb3NlIFRPQyBpZiBjbGlja2VkIG91dHNpZGUgdGhlIFRPQyBjb250YWluZXJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghZS50YXJnZXQuY2xvc2VzdCgnI2V6LXRvYy1jb250YWluZXInKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbG9zZVRvZ2dsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50b2NfY2xvc2UgLmV6LXRvYy10b2dnbGUnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsb3NlVG9nZ2xlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVRvZ2dsZS5jbGljaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZXNldCB0aGUgVE9DIGRpc3BsYXkgc3R5bGUgd2hlbiBhYm92ZSB0aGUgdGhyZXNob2xkXG4gICAgICAgICAgICBjb25zdCB0b2NMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmV6LXRvYy1saXN0Jyk7XG4gICAgICAgICAgICBpZiAodG9jTGlzdCkge1xuICAgICAgICAgICAgICAgIHRvY0xpc3Quc3R5bGUgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluaXRpYWwgY2FsbCB0byBzZXQgdXAgVE9DIHZpc2liaWxpdHkgb24gbG9hZFxuICAgIGhhbmRsZU1vYmlsZVRPQygpO1xuXG4gICAgLy8gUmVzaXplIGV2ZW50IGxpc3RlbmVyIHRvIGhhbmRsZSBUT0MgdmlzaWJpbGl0eSBvbiBzY3JlZW4gcmVzaXplXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZU1vYmlsZVRPQyk7XG59IiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxuaW1wb3J0IHsgdV9lbGVtZW50RnJvbVRvcCB9IGZyb20gJy4uL3V0aWxzL3VfZWwtaW4tdmlld3BvcnQtZGV0ZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9jU3RpY2t5KCkge1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHtcbiAgICAgICAgLy8gdV9lbGVtZW50RnJvbVRvcChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjZXotdG9jLWNvbnRhaW5lciArIConKSwgJy5jb3VudGVyLWhpZXJhcmNoeScsICdpcy1mbG9hdCcsIC0xMDAwLCAncGl4ZWxzJyk7IC8vIGFzIHRvcCBvZiBlbGVtZW50IGhpdHMgdG9wIG9mIHZpZXdwb3J0XG4gICAgICAgIHVfZWxlbWVudEZyb21Ub3AoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2V6LXRvYy1jb250YWluZXIgKyAqJyksICcubS1yZWwtZmxvYXQnLCAncmV2LW0nLCAtMTAwMCwgJ3BpeGVscycpOyAvLyBhcyB0b3Agb2YgZWxlbWVudCBoaXRzIHRvcCBvZiB2aWV3cG9ydFxuICAgIH0sIGZhbHNlKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7XG4gICAgICAgIC8vIHVfZWxlbWVudEZyb21Ub3AoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2V6LXRvYy1jb250YWluZXIgKyAqJyksICcuY291bnRlci1oaWVyYXJjaHknLCAnaXMtZmxvYXQnLCAtMTAwMCwgJ3BpeGVscycpOyAvLyBhcyB0b3Agb2YgZWxlbWVudCBoaXRzIHRvcCBvZiB2aWV3cG9ydFxuICAgICAgICB1X2VsZW1lbnRGcm9tVG9wKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNlei10b2MtY29udGFpbmVyICsgKicpLCAnLm0tcmVsLWZsb2F0JywgJ3Jldi1tJywgLTEwMDAsICdwaXhlbHMnKTsgLy8gYXMgdG9wIG9mIGVsZW1lbnQgaGl0cyB0b3Agb2Ygdmlld3BvcnRcbiAgICB9LCBmYWxzZSk7XG5cbiAgICBmdW5jdGlvbiB0b2NUb2dnbGVDbGFzc2VzKCkge1xuICAgICAgICBjb25zdCB0b2NDb2xsYXBzZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZXotdG9jLXRvZ2dsZScpO1xuICAgICAgICBjb25zdCB0b2NDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZXotdG9jLXRpdGxlLXRvZ2dsZScpO1xuXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lei10b2MtbGlzdCcpO1xuXG4gICAgICAgIGlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmRpc3BsYXkgPT09ICdibG9jaycpIHtcbiAgICAgICAgICAgIHRvY0NvbGxhcHNlci5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvY0NvbGxhcHNlci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBtZXN1cmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvY0NvbGxhcHNlci5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICAgICAgdG9jQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXNob3duJyk7XG4gICAgICAgICAgICAgICAgICAgIHRvY0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdpcy1oaWRlJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9jQ29sbGFwc2VyLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgICAgICAgICB0b2NDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnaXMtc2hvd24nKTtcbiAgICAgICAgICAgICAgICAgICAgdG9jQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWhpZGUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQobWVzdXJlLCAzMDApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoJCgnI2V6LXRvYy1jb250YWluZXInKS5oYXNDbGFzcygnaXMtc2hvd24nKSkge1xuICAgICAgICAgICAgJCgnLmV6LXRvYy10b2dnbGUnKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0b2NUb2dnbGVDbGFzc2VzKCk7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBsaW5lYnJlYWstc3R5bGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIGVxZXFlcSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbi8qKlxuICogRGFyayBNb2RlXG4qL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGFya01vZGUoKSB7XG5cbiAgICBjb25zdCBtb2RlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RhcmstbW9kZScpO1xuICAgIGlmIChtb2RlID09PSAnb24nKSB7XG4gICAgICAkKCcuZGFyay1tb2RlJykuYWRkQ2xhc3MoJ29uJyk7XG4gICAgICAkKCdib2R5JykuYWRkQ2xhc3MoJ2Rhcmstb24nKTtcbiAgICAgICQoJy5kYXJrLW1vZGUnKS5hdHRyKCdhcmlhLXByZXNzZWQnLCB0cnVlKTtcbiAgICB9XG4gICAgJCgnLmRhcmstbW9kZScpLmNsaWNrKGZ1bmN0aW9uIGZ1bmN0aW9uTmFtZSgpIHtcbiAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdvbicpKSB7XG4gICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ29uJyk7XG4gICAgICAgICQoJ2JvZHknKS5yZW1vdmVDbGFzcygnZGFyay1vbicpO1xuICAgICAgICAkKHRoaXMpLmF0dHIoJ2FyaWEtcHJlc3NlZCcsIGZhbHNlKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2RhcmstbW9kZScsICdvZmYnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ29uJyk7XG4gICAgICAgICQoJ2JvZHknKS5hZGRDbGFzcygnZGFyay1vbicpO1xuICAgICAgICAkKHRoaXMpLmF0dHIoJ2FyaWEtcHJlc3NlZCcsIHRydWUpO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZGFyay1tb2RlJywgJ29uJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbn1cbiIsIi8vIEJsb2dcbi8vIGltcG9ydCB7IHRvZ2dsZURhcmtNb2RlIH0gZnJvbSAnLi9ibG9nL2Rhcmttb2RlJztcbmltcG9ydCBkYXJrTW9kZSBmcm9tICcuL2NvbXBvbmVudHMvZGFyay1tb2RlJztcbi8vIGltcG9ydCB0YWJsZU9mQ29udGVudHMgZnJvbSAnLi9ibG9nL3RvYy1oaWdobGlnaHQnO1xuaW1wb3J0IHRvY1N0aWNreSBmcm9tICcuL2Jsb2cvdG9jLXN0aWNreSc7XG5pbXBvcnQge3RvY01vYmlsZX0gZnJvbSAnLi9ibG9nL3RvYy1tb2JpbGUnO1xuaW1wb3J0IGJsb2dGaWx0ZXIgZnJvbSBcIi4vYmxvZy9ibG9nLWZpbHRlclwiO1xuLy8gaW1wb3J0IHtyZWxhdGVkUmVzb3VyY2VzfSBmcm9tIFwiLi9ibG9nL2Jsb2ctcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBzdWJzY3JpYmVTbGlkZUluIH0gZnJvbSBcIi4vYmxvZy9kdC1zdWJzY3JpYmVcIjtcbmltcG9ydCB7ZGF0YUxheWVyc30gZnJvbSBcIi4vYmxvZy9kYXRhLWxheWVyc1wiO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4ge1xuXG5cblxuICAgIGRhcmtNb2RlKCk7XG5cbiAgICAvLyB0b2dnbGVEYXJrTW9kZSgnLmpzLWRhcmstbW9kZScpO1xuXG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lei10b2MtdG9nZ2xlJykpIHtcbiAgICAgICAgdG9jU3RpY2t5KCk7XG4gICAgICAgIC8vIHRhYmxlT2ZDb250ZW50cygpO1xuICAgICAgICBcbiAgICB9XG4gICAgdG9jTW9iaWxlKCk7XG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zaW5nbGUtcG9zdCcpKSB7XG4gICAgICAgIGRhdGFMYXllcnMoKTtcbiAgICB9XG5cbiAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLWFqYXgtYmxvY2snKSkge1xuICAgICAgICBibG9nRmlsdGVyKCk7XG4gICAgfVxuXG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wb2xsX21vZHVsZScpKSB7XG5cbiAgICAgICAgLyogU2ltcGxlIHN0dXBpZCBidXQgd29ya3MgbG9sICovXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwb2xscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wb2xsX21vZHVsZScpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5iYXNpYy12b3RlLWJ1dHRvbicpO1xuXG4gICAgICAgICAgICBwb2xscy5mb3JFYWNoKChwb2xsKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBsZXQgcG9sbEJ0biA9IHBvbGwucXVlcnlTZWxlY3RvcignLmJhc2ljLXZvdGUtYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgbGV0IHBvbGxNc2cgPSBwb2xsLnF1ZXJ5U2VsZWN0b3IoJy5iYXNpYy1tZXNzYWdlJyk7XG5cbiAgICAgICAgICAgICAgICBwb2xsQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBvbGwuY2xhc3NMaXN0LmFkZCgnaXMtc3VibWl0dGVkJyk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocG9sbE1zZy5jbGFzc0xpc3QuY29udGFpbnMoJ2Jhc2ljLXN1Y2Nlc3MnKSkge1xuICAgICAgICAgICAgICAgICAgICBwb2xsLmNsYXNzTGlzdC5hZGQoJ2lzLXN1Ym1pdHRlZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCAxMDApO1xuICAgIH1cblxuICAgIHN1YnNjcmliZVNsaWRlSW4oKTtcblxuICAgIC8vIHJlbGF0ZWRSZXNvdXJjZXMoKTtcblxuXG5cbn0pO1xuIiwiXG5jb25zdCB1X2hhc0NsYXNzID0gKGVsLCBjbHMpID0+IHtcbiAgICBpZiAoZWwuY2xhc3NOYW1lLm1hdGNoKCcoPzpefFxcXFxzKScgKyBjbHMgKyAnKD8hXFxcXFMpJykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuXG5jb25zdCB1X2FkZENsYXNzID0gKGVsLCBjbHMpID0+IHtcbiAgICBpZiAoIWVsLmNsYXNzTmFtZS5tYXRjaCgnKD86XnxcXFxccyknICsgY2xzICsgJyg/IVxcXFxTKScpKSB7XG4gICAgICAgIGVsLmNsYXNzTmFtZSArPSAnICcgKyBjbHM7XG4gICAgfVxufVxuXG5jb25zdCB1X2RlbENsYXNzID0gKGVsLCBjbHMpID0+IHtcbiAgICBlbC5jbGFzc05hbWUgPSBlbC5jbGFzc05hbWUucmVwbGFjZShuZXcgUmVnRXhwKCcoPzpefFxcXFxzKScgKyBjbHMgKyAnKD8hXFxcXFMpJyksICcnKTtcbn1cblxuZXhwb3J0IHtcbiAgICB1X2hhc0NsYXNzLFxuICAgIHVfYWRkQ2xhc3MsXG4gICAgdV9kZWxDbGFzc1xufSIsIi8qKlxuICogcGFyYW1zOiAgdHJpZ2dlciBlbGVtZW50LCB0YXJnZXQgZWxlbWVudCBjbGFzcywgY2xhc3NlcyB0byBhZGQgdG8gdGFyZ2V0IGVsZW1lbnQsIHRyaWdnZXIgZWxlbWVudCBkaXN0YW5jZSBmcm9tIHRvcCwgdW5pdCAoJ3BlcmNlbnQnIG9yICdwaXhlbHMnKVxuICogdXNhZ2U6ICAgZWxlbWVudEZyb21Ub3AoZWxlbVRyaWdnZXIsIGVsZW1UYXJnZXQsIGNsYXNzVG9BZGQsIGRpc3RhbmNlRnJvbVRvcCwgdW5pdCk7XG4gKlxuICogaHR0cDovL2Jsb2cuZm9md2ViZGVzaWduLmNvLnVrLzQxLWFkZC1jbGFzc2VzLXRvLWFuLWVsZW1lbnQtd2hlbi1zY3JvbGxlZC1pbnRvLXZpZXdwb3J0XG4gKi9cbmltcG9ydCB7XG4gICAgdV9hZGRDbGFzcyxcbiAgICB1X2hhc0NsYXNzLFxuICAgIHVfZGVsQ2xhc3Ncbn0gZnJvbSBcIi4vdV9jbGFzc2xpc3QtYWRkLXJlbW92ZVwiO1xuXG5jb25zdCB1X2VsZW1lbnRGcm9tVG9wID0gKGVsZW1UcmlnZ2VyLCBlbGVtVGFyZ2V0LCBjbGFzc1RvQWRkLCBkaXN0YW5jZUZyb21Ub3AsIHVuaXQpID0+IHtcbiAgICBsZXQgd2luWSA9IHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LFxuICAgICAgICBlbFRyaWdnZXJMZW5ndGggPSBlbGVtVHJpZ2dlci5sZW5ndGgsXG4gICAgICAgIGVsVGFyZ2V0TGVuZ3RoLCBkaXN0VG9wLCBkaXN0UGVyY2VudCwgZGlzdFBpeGVscywgZGlzdFVuaXQsIGVsVGFyZ2V0LCBpLCBqO1xuICAgIGZvciAoaSA9IDA7IGkgPCBlbFRyaWdnZXJMZW5ndGg7ICsraSkge1xuICAgICAgICBlbFRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZWxlbVRhcmdldCk7XG4gICAgICAgIGVsVGFyZ2V0TGVuZ3RoID0gZWxUYXJnZXQubGVuZ3RoO1xuICAgICAgICBkaXN0VG9wID0gZWxlbVRyaWdnZXJbaV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgICBkaXN0UGVyY2VudCA9IE1hdGgucm91bmQoKGRpc3RUb3AgLyB3aW5ZKSAqIDEwMCk7XG4gICAgICAgIGRpc3RQaXhlbHMgPSBNYXRoLnJvdW5kKGRpc3RUb3ApO1xuICAgICAgICBkaXN0VW5pdCA9IHVuaXQgPT0gJ3BlcmNlbnQnID8gZGlzdFBlcmNlbnQgOiBkaXN0UGl4ZWxzO1xuICAgICAgICBpZiAoZGlzdFVuaXQgPD0gZGlzdGFuY2VGcm9tVG9wKSB7XG4gICAgICAgICAgICBpZiAoIXVfaGFzQ2xhc3MoZWxlbVRyaWdnZXJbaV0sIGVsZW1UYXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGVsVGFyZ2V0TGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF1X2hhc0NsYXNzKGVsVGFyZ2V0W2pdLCBjbGFzc1RvQWRkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdV9hZGRDbGFzcyhlbFRhcmdldFtqXSwgY2xhc3NUb0FkZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghdV9oYXNDbGFzcyhlbGVtVHJpZ2dlcltpXSwgY2xhc3NUb0FkZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdV9hZGRDbGFzcyhlbGVtVHJpZ2dlcltpXSwgY2xhc3NUb0FkZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdV9kZWxDbGFzcyhlbGVtVHJpZ2dlcltpXSwgY2xhc3NUb0FkZCk7XG4gICAgICAgICAgICBpZiAoIXVfaGFzQ2xhc3MoZWxlbVRyaWdnZXJbaV0sIGVsZW1UYXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGVsVGFyZ2V0TGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgdV9kZWxDbGFzcyhlbFRhcmdldFtqXSwgY2xhc3NUb0FkZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5jb25zdCB1X2lzRWxlbWVudElzSW5WaWV3ID0gKGVsKSA9PiB7XG4gICAgY29uc3Qgc2Nyb2xsID0gd2luZG93LnNjcm9sbFkgfHwgd2luZG93LnBhZ2VZT2Zmc2V0XG4gICAgY29uc3QgYm91bmRzVG9wID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgc2Nyb2xsXG5cbiAgICBjb25zdCB2aWV3cG9ydCA9IHtcbiAgICAgICAgdG9wOiBzY3JvbGwsXG4gICAgICAgIGJvdHRvbTogc2Nyb2xsICsgd2luZG93LmlubmVySGVpZ2h0LFxuICAgIH1cblxuICAgIGNvbnN0IGJvdW5kcyA9IHtcbiAgICAgICAgdG9wOiBib3VuZHNUb3AsXG4gICAgICAgIGJvdHRvbTogYm91bmRzVG9wICsgZWwuY2xpZW50SGVpZ2h0LFxuICAgIH1cblxuICAgIHJldHVybiAoIGJvdW5kcy5ib3R0b20gPj0gdmlld3BvcnQudG9wICYmIGJvdW5kcy5ib3R0b20gPD0gdmlld3BvcnQuYm90dG9tIClcbiAgICAgICAgfHwgKCBib3VuZHMudG9wIDw9IHZpZXdwb3J0LmJvdHRvbSAmJiBib3VuZHMudG9wID49IHZpZXdwb3J0LnRvcCApO1xufVxuXG5leHBvcnQge1xuICAgIHVfZWxlbWVudEZyb21Ub3AsXG4gICAgdV9pc0VsZW1lbnRJc0luVmlld1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBqUXVlcnk7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChjYWNoZWRNb2R1bGUuZXJyb3IgIT09IHVuZGVmaW5lZCkgdGhyb3cgY2FjaGVkTW9kdWxlLmVycm9yO1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHR0cnkge1xuXHRcdHZhciBleGVjT3B0aW9ucyA9IHsgaWQ6IG1vZHVsZUlkLCBtb2R1bGU6IG1vZHVsZSwgZmFjdG9yeTogX193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0sIHJlcXVpcmU6IF9fd2VicGFja19yZXF1aXJlX18gfTtcblx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkuZm9yRWFjaChmdW5jdGlvbihoYW5kbGVyKSB7IGhhbmRsZXIoZXhlY09wdGlvbnMpOyB9KTtcblx0XHRtb2R1bGUgPSBleGVjT3B0aW9ucy5tb2R1bGU7XG5cdFx0ZXhlY09wdGlvbnMuZmFjdG9yeS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBleGVjT3B0aW9ucy5yZXF1aXJlKTtcblx0fSBjYXRjaChlKSB7XG5cdFx0bW9kdWxlLmVycm9yID0gZTtcblx0XHR0aHJvdyBlO1xuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuLy8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbl9fd2VicGFja19yZXF1aXJlX18uYyA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfXztcblxuLy8gZXhwb3NlIHRoZSBtb2R1bGUgZXhlY3V0aW9uIGludGVyY2VwdG9yXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBbXTtcblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgZGVmaW5pdGlvbikge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCIvLyBUaGlzIGZ1bmN0aW9uIGFsbG93IHRvIHJlZmVyZW5jZSBhbGwgY2h1bmtzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmh1ID0gZnVuY3Rpb24oY2h1bmtJZCkge1xuXHQvLyByZXR1cm4gdXJsIGZvciBmaWxlbmFtZXMgYmFzZWQgb24gdGVtcGxhdGVcblx0cmV0dXJuIFwiXCIgKyBjaHVua0lkICsgXCIuXCIgKyBfX3dlYnBhY2tfcmVxdWlyZV9fLmgoKSArIFwiLmhvdC11cGRhdGUuanNcIjtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5obXJGID0gZnVuY3Rpb24oKSB7IHJldHVybiBcImFwcF9ibG9nLlwiICsgX193ZWJwYWNrX3JlcXVpcmVfXy5oKCkgKyBcIi5ob3QtdXBkYXRlLmpzb25cIjsgfTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSBmdW5jdGlvbigpIHsgcmV0dXJuIFwiYjliYmM2MzAzZjcxZjIzMmZiNzdcIjsgfSIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iaiwgcHJvcCkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7IH0iLCJ2YXIgaW5Qcm9ncmVzcyA9IHt9O1xuLy8gZGF0YS13ZWJwYWNrIGlzIG5vdCB1c2VkIGFzIGJ1aWxkIGhhcyBubyB1bmlxdWVOYW1lXG4vLyBsb2FkU2NyaXB0IGZ1bmN0aW9uIHRvIGxvYWQgYSBzY3JpcHQgdmlhIHNjcmlwdCB0YWdcbl9fd2VicGFja19yZXF1aXJlX18ubCA9IGZ1bmN0aW9uKHVybCwgZG9uZSwga2V5LCBjaHVua0lkKSB7XG5cdGlmKGluUHJvZ3Jlc3NbdXJsXSkgeyBpblByb2dyZXNzW3VybF0ucHVzaChkb25lKTsgcmV0dXJuOyB9XG5cdHZhciBzY3JpcHQsIG5lZWRBdHRhY2g7XG5cdGlmKGtleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIHMgPSBzY3JpcHRzW2ldO1xuXHRcdFx0aWYocy5nZXRBdHRyaWJ1dGUoXCJzcmNcIikgPT0gdXJsKSB7IHNjcmlwdCA9IHM7IGJyZWFrOyB9XG5cdFx0fVxuXHR9XG5cdGlmKCFzY3JpcHQpIHtcblx0XHRuZWVkQXR0YWNoID0gdHJ1ZTtcblx0XHRzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblxuXHRcdHNjcmlwdC5jaGFyc2V0ID0gJ3V0Zi04Jztcblx0XHRzY3JpcHQudGltZW91dCA9IDEyMDtcblx0XHRpZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5uYykge1xuXHRcdFx0c2NyaXB0LnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIF9fd2VicGFja19yZXF1aXJlX18ubmMpO1xuXHRcdH1cblxuXG5cdFx0c2NyaXB0LnNyYyA9IHVybDtcblx0fVxuXHRpblByb2dyZXNzW3VybF0gPSBbZG9uZV07XG5cdHZhciBvblNjcmlwdENvbXBsZXRlID0gZnVuY3Rpb24ocHJldiwgZXZlbnQpIHtcblx0XHQvLyBhdm9pZCBtZW0gbGVha3MgaW4gSUUuXG5cdFx0c2NyaXB0Lm9uZXJyb3IgPSBzY3JpcHQub25sb2FkID0gbnVsbDtcblx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0dmFyIGRvbmVGbnMgPSBpblByb2dyZXNzW3VybF07XG5cdFx0ZGVsZXRlIGluUHJvZ3Jlc3NbdXJsXTtcblx0XHRzY3JpcHQucGFyZW50Tm9kZSAmJiBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuXHRcdGRvbmVGbnMgJiYgZG9uZUZucy5mb3JFYWNoKGZ1bmN0aW9uKGZuKSB7IHJldHVybiBmbihldmVudCk7IH0pO1xuXHRcdGlmKHByZXYpIHJldHVybiBwcmV2KGV2ZW50KTtcblx0fVxuXHR2YXIgdGltZW91dCA9IHNldFRpbWVvdXQob25TY3JpcHRDb21wbGV0ZS5iaW5kKG51bGwsIHVuZGVmaW5lZCwgeyB0eXBlOiAndGltZW91dCcsIHRhcmdldDogc2NyaXB0IH0pLCAxMjAwMDApO1xuXHRzY3JpcHQub25lcnJvciA9IG9uU2NyaXB0Q29tcGxldGUuYmluZChudWxsLCBzY3JpcHQub25lcnJvcik7XG5cdHNjcmlwdC5vbmxvYWQgPSBvblNjcmlwdENvbXBsZXRlLmJpbmQobnVsbCwgc2NyaXB0Lm9ubG9hZCk7XG5cdG5lZWRBdHRhY2ggJiYgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xufTsiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsInZhciBjdXJyZW50TW9kdWxlRGF0YSA9IHt9O1xudmFyIGluc3RhbGxlZE1vZHVsZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmM7XG5cbi8vIG1vZHVsZSBhbmQgcmVxdWlyZSBjcmVhdGlvblxudmFyIGN1cnJlbnRDaGlsZE1vZHVsZTtcbnZhciBjdXJyZW50UGFyZW50cyA9IFtdO1xuXG4vLyBzdGF0dXNcbnZhciByZWdpc3RlcmVkU3RhdHVzSGFuZGxlcnMgPSBbXTtcbnZhciBjdXJyZW50U3RhdHVzID0gXCJpZGxlXCI7XG5cbi8vIHdoaWxlIGRvd25sb2FkaW5nXG52YXIgYmxvY2tpbmdQcm9taXNlcyA9IDA7XG52YXIgYmxvY2tpbmdQcm9taXNlc1dhaXRpbmcgPSBbXTtcblxuLy8gVGhlIHVwZGF0ZSBpbmZvXG52YXIgY3VycmVudFVwZGF0ZUFwcGx5SGFuZGxlcnM7XG52YXIgcXVldWVkSW52YWxpZGF0ZWRNb2R1bGVzO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmhtckQgPSBjdXJyZW50TW9kdWxlRGF0YTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXy5pLnB1c2goZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0dmFyIG1vZHVsZSA9IG9wdGlvbnMubW9kdWxlO1xuXHR2YXIgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUob3B0aW9ucy5yZXF1aXJlLCBvcHRpb25zLmlkKTtcblx0bW9kdWxlLmhvdCA9IGNyZWF0ZU1vZHVsZUhvdE9iamVjdChvcHRpb25zLmlkLCBtb2R1bGUpO1xuXHRtb2R1bGUucGFyZW50cyA9IGN1cnJlbnRQYXJlbnRzO1xuXHRtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0Y3VycmVudFBhcmVudHMgPSBbXTtcblx0b3B0aW9ucy5yZXF1aXJlID0gcmVxdWlyZTtcbn0pO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmhtckMgPSB7fTtcbl9fd2VicGFja19yZXF1aXJlX18uaG1ySSA9IHt9O1xuXG5mdW5jdGlvbiBjcmVhdGVSZXF1aXJlKHJlcXVpcmUsIG1vZHVsZUlkKSB7XG5cdHZhciBtZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuXHRpZiAoIW1lKSByZXR1cm4gcmVxdWlyZTtcblx0dmFyIGZuID0gZnVuY3Rpb24gKHJlcXVlc3QpIHtcblx0XHRpZiAobWUuaG90LmFjdGl2ZSkge1xuXHRcdFx0aWYgKGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0pIHtcblx0XHRcdFx0dmFyIHBhcmVudHMgPSBpbnN0YWxsZWRNb2R1bGVzW3JlcXVlc3RdLnBhcmVudHM7XG5cdFx0XHRcdGlmIChwYXJlbnRzLmluZGV4T2YobW9kdWxlSWQpID09PSAtMSkge1xuXHRcdFx0XHRcdHBhcmVudHMucHVzaChtb2R1bGVJZCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN1cnJlbnRQYXJlbnRzID0gW21vZHVsZUlkXTtcblx0XHRcdFx0Y3VycmVudENoaWxkTW9kdWxlID0gcmVxdWVzdDtcblx0XHRcdH1cblx0XHRcdGlmIChtZS5jaGlsZHJlbi5pbmRleE9mKHJlcXVlc3QpID09PSAtMSkge1xuXHRcdFx0XHRtZS5jaGlsZHJlbi5wdXNoKHJlcXVlc3QpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zb2xlLndhcm4oXG5cdFx0XHRcdFwiW0hNUl0gdW5leHBlY3RlZCByZXF1aXJlKFwiICtcblx0XHRcdFx0XHRyZXF1ZXN0ICtcblx0XHRcdFx0XHRcIikgZnJvbSBkaXNwb3NlZCBtb2R1bGUgXCIgK1xuXHRcdFx0XHRcdG1vZHVsZUlkXG5cdFx0XHQpO1xuXHRcdFx0Y3VycmVudFBhcmVudHMgPSBbXTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlcXVpcmUocmVxdWVzdCk7XG5cdH07XG5cdHZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiAobmFtZSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiByZXF1aXJlW25hbWVdO1xuXHRcdFx0fSxcblx0XHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdHJlcXVpcmVbbmFtZV0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9O1xuXHR9O1xuXHRmb3IgKHZhciBuYW1lIGluIHJlcXVpcmUpIHtcblx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcXVpcmUsIG5hbWUpICYmIG5hbWUgIT09IFwiZVwiKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sIG5hbWUsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcihuYW1lKSk7XG5cdFx0fVxuXHR9XG5cdGZuLmUgPSBmdW5jdGlvbiAoY2h1bmtJZCwgZmV0Y2hQcmlvcml0eSkge1xuXHRcdHJldHVybiB0cmFja0Jsb2NraW5nUHJvbWlzZShyZXF1aXJlLmUoY2h1bmtJZCwgZmV0Y2hQcmlvcml0eSkpO1xuXHR9O1xuXHRyZXR1cm4gZm47XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1vZHVsZUhvdE9iamVjdChtb2R1bGVJZCwgbWUpIHtcblx0dmFyIF9tYWluID0gY3VycmVudENoaWxkTW9kdWxlICE9PSBtb2R1bGVJZDtcblx0dmFyIGhvdCA9IHtcblx0XHQvLyBwcml2YXRlIHN0dWZmXG5cdFx0X2FjY2VwdGVkRGVwZW5kZW5jaWVzOiB7fSxcblx0XHRfYWNjZXB0ZWRFcnJvckhhbmRsZXJzOiB7fSxcblx0XHRfZGVjbGluZWREZXBlbmRlbmNpZXM6IHt9LFxuXHRcdF9zZWxmQWNjZXB0ZWQ6IGZhbHNlLFxuXHRcdF9zZWxmRGVjbGluZWQ6IGZhbHNlLFxuXHRcdF9zZWxmSW52YWxpZGF0ZWQ6IGZhbHNlLFxuXHRcdF9kaXNwb3NlSGFuZGxlcnM6IFtdLFxuXHRcdF9tYWluOiBfbWFpbixcblx0XHRfcmVxdWlyZVNlbGY6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGN1cnJlbnRQYXJlbnRzID0gbWUucGFyZW50cy5zbGljZSgpO1xuXHRcdFx0Y3VycmVudENoaWxkTW9kdWxlID0gX21haW4gPyB1bmRlZmluZWQgOiBtb2R1bGVJZDtcblx0XHRcdF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpO1xuXHRcdH0sXG5cblx0XHQvLyBNb2R1bGUgQVBJXG5cdFx0YWN0aXZlOiB0cnVlLFxuXHRcdGFjY2VwdDogZnVuY3Rpb24gKGRlcCwgY2FsbGJhY2ssIGVycm9ySGFuZGxlcikge1xuXHRcdFx0aWYgKGRlcCA9PT0gdW5kZWZpbmVkKSBob3QuX3NlbGZBY2NlcHRlZCA9IHRydWU7XG5cdFx0XHRlbHNlIGlmICh0eXBlb2YgZGVwID09PSBcImZ1bmN0aW9uXCIpIGhvdC5fc2VsZkFjY2VwdGVkID0gZGVwO1xuXHRcdFx0ZWxzZSBpZiAodHlwZW9mIGRlcCA9PT0gXCJvYmplY3RcIiAmJiBkZXAgIT09IG51bGwpIHtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZXAubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcFtpXV0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcblx0XHRcdFx0XHRob3QuX2FjY2VwdGVkRXJyb3JIYW5kbGVyc1tkZXBbaV1dID0gZXJyb3JIYW5kbGVyO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcF0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcblx0XHRcdFx0aG90Ll9hY2NlcHRlZEVycm9ySGFuZGxlcnNbZGVwXSA9IGVycm9ySGFuZGxlcjtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGRlY2xpbmU6IGZ1bmN0aW9uIChkZXApIHtcblx0XHRcdGlmIChkZXAgPT09IHVuZGVmaW5lZCkgaG90Ll9zZWxmRGVjbGluZWQgPSB0cnVlO1xuXHRcdFx0ZWxzZSBpZiAodHlwZW9mIGRlcCA9PT0gXCJvYmplY3RcIiAmJiBkZXAgIT09IG51bGwpXG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGVwLmxlbmd0aDsgaSsrKVxuXHRcdFx0XHRcdGhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbZGVwW2ldXSA9IHRydWU7XG5cdFx0XHRlbHNlIGhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbZGVwXSA9IHRydWU7XG5cdFx0fSxcblx0XHRkaXNwb3NlOiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0XHRcdGhvdC5fZGlzcG9zZUhhbmRsZXJzLnB1c2goY2FsbGJhY2spO1xuXHRcdH0sXG5cdFx0YWRkRGlzcG9zZUhhbmRsZXI6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHRcdFx0aG90Ll9kaXNwb3NlSGFuZGxlcnMucHVzaChjYWxsYmFjayk7XG5cdFx0fSxcblx0XHRyZW1vdmVEaXNwb3NlSGFuZGxlcjogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdFx0XHR2YXIgaWR4ID0gaG90Ll9kaXNwb3NlSGFuZGxlcnMuaW5kZXhPZihjYWxsYmFjayk7XG5cdFx0XHRpZiAoaWR4ID49IDApIGhvdC5fZGlzcG9zZUhhbmRsZXJzLnNwbGljZShpZHgsIDEpO1xuXHRcdH0sXG5cdFx0aW52YWxpZGF0ZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhpcy5fc2VsZkludmFsaWRhdGVkID0gdHJ1ZTtcblx0XHRcdHN3aXRjaCAoY3VycmVudFN0YXR1cykge1xuXHRcdFx0XHRjYXNlIFwiaWRsZVwiOlxuXHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzID0gW107XG5cdFx0XHRcdFx0T2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5obXJJKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18uaG1ySVtrZXldKFxuXHRcdFx0XHRcdFx0XHRtb2R1bGVJZCxcblx0XHRcdFx0XHRcdFx0Y3VycmVudFVwZGF0ZUFwcGx5SGFuZGxlcnNcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0c2V0U3RhdHVzKFwicmVhZHlcIik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJyZWFkeVwiOlxuXHRcdFx0XHRcdE9iamVjdC5rZXlzKF9fd2VicGFja19yZXF1aXJlX18uaG1ySSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmhtcklba2V5XShcblx0XHRcdFx0XHRcdFx0bW9kdWxlSWQsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwicHJlcGFyZVwiOlxuXHRcdFx0XHRjYXNlIFwiY2hlY2tcIjpcblx0XHRcdFx0Y2FzZSBcImRpc3Bvc2VcIjpcblx0XHRcdFx0Y2FzZSBcImFwcGx5XCI6XG5cdFx0XHRcdFx0KHF1ZXVlZEludmFsaWRhdGVkTW9kdWxlcyA9IHF1ZXVlZEludmFsaWRhdGVkTW9kdWxlcyB8fCBbXSkucHVzaChcblx0XHRcdFx0XHRcdG1vZHVsZUlkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHQvLyBpZ25vcmUgcmVxdWVzdHMgaW4gZXJyb3Igc3RhdGVzXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIE1hbmFnZW1lbnQgQVBJXG5cdFx0Y2hlY2s6IGhvdENoZWNrLFxuXHRcdGFwcGx5OiBob3RBcHBseSxcblx0XHRzdGF0dXM6IGZ1bmN0aW9uIChsKSB7XG5cdFx0XHRpZiAoIWwpIHJldHVybiBjdXJyZW50U3RhdHVzO1xuXHRcdFx0cmVnaXN0ZXJlZFN0YXR1c0hhbmRsZXJzLnB1c2gobCk7XG5cdFx0fSxcblx0XHRhZGRTdGF0dXNIYW5kbGVyOiBmdW5jdGlvbiAobCkge1xuXHRcdFx0cmVnaXN0ZXJlZFN0YXR1c0hhbmRsZXJzLnB1c2gobCk7XG5cdFx0fSxcblx0XHRyZW1vdmVTdGF0dXNIYW5kbGVyOiBmdW5jdGlvbiAobCkge1xuXHRcdFx0dmFyIGlkeCA9IHJlZ2lzdGVyZWRTdGF0dXNIYW5kbGVycy5pbmRleE9mKGwpO1xuXHRcdFx0aWYgKGlkeCA+PSAwKSByZWdpc3RlcmVkU3RhdHVzSGFuZGxlcnMuc3BsaWNlKGlkeCwgMSk7XG5cdFx0fSxcblxuXHRcdC8vaW5oZXJpdCBmcm9tIHByZXZpb3VzIGRpc3Bvc2UgY2FsbFxuXHRcdGRhdGE6IGN1cnJlbnRNb2R1bGVEYXRhW21vZHVsZUlkXVxuXHR9O1xuXHRjdXJyZW50Q2hpbGRNb2R1bGUgPSB1bmRlZmluZWQ7XG5cdHJldHVybiBob3Q7XG59XG5cbmZ1bmN0aW9uIHNldFN0YXR1cyhuZXdTdGF0dXMpIHtcblx0Y3VycmVudFN0YXR1cyA9IG5ld1N0YXR1cztcblx0dmFyIHJlc3VsdHMgPSBbXTtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHJlZ2lzdGVyZWRTdGF0dXNIYW5kbGVycy5sZW5ndGg7IGkrKylcblx0XHRyZXN1bHRzW2ldID0gcmVnaXN0ZXJlZFN0YXR1c0hhbmRsZXJzW2ldLmNhbGwobnVsbCwgbmV3U3RhdHVzKTtcblxuXHRyZXR1cm4gUHJvbWlzZS5hbGwocmVzdWx0cykudGhlbihmdW5jdGlvbiAoKSB7fSk7XG59XG5cbmZ1bmN0aW9uIHVuYmxvY2soKSB7XG5cdGlmICgtLWJsb2NraW5nUHJvbWlzZXMgPT09IDApIHtcblx0XHRzZXRTdGF0dXMoXCJyZWFkeVwiKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmIChibG9ja2luZ1Byb21pc2VzID09PSAwKSB7XG5cdFx0XHRcdHZhciBsaXN0ID0gYmxvY2tpbmdQcm9taXNlc1dhaXRpbmc7XG5cdFx0XHRcdGJsb2NraW5nUHJvbWlzZXNXYWl0aW5nID0gW107XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGxpc3RbaV0oKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHRyYWNrQmxvY2tpbmdQcm9taXNlKHByb21pc2UpIHtcblx0c3dpdGNoIChjdXJyZW50U3RhdHVzKSB7XG5cdFx0Y2FzZSBcInJlYWR5XCI6XG5cdFx0XHRzZXRTdGF0dXMoXCJwcmVwYXJlXCIpO1xuXHRcdC8qIGZhbGx0aHJvdWdoICovXG5cdFx0Y2FzZSBcInByZXBhcmVcIjpcblx0XHRcdGJsb2NraW5nUHJvbWlzZXMrKztcblx0XHRcdHByb21pc2UudGhlbih1bmJsb2NrLCB1bmJsb2NrKTtcblx0XHRcdHJldHVybiBwcm9taXNlO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gcHJvbWlzZTtcblx0fVxufVxuXG5mdW5jdGlvbiB3YWl0Rm9yQmxvY2tpbmdQcm9taXNlcyhmbikge1xuXHRpZiAoYmxvY2tpbmdQcm9taXNlcyA9PT0gMCkgcmV0dXJuIGZuKCk7XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdGJsb2NraW5nUHJvbWlzZXNXYWl0aW5nLnB1c2goZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVzb2x2ZShmbigpKTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGhvdENoZWNrKGFwcGx5T25VcGRhdGUpIHtcblx0aWYgKGN1cnJlbnRTdGF0dXMgIT09IFwiaWRsZVwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiY2hlY2soKSBpcyBvbmx5IGFsbG93ZWQgaW4gaWRsZSBzdGF0dXNcIik7XG5cdH1cblx0cmV0dXJuIHNldFN0YXR1cyhcImNoZWNrXCIpXG5cdFx0LnRoZW4oX193ZWJwYWNrX3JlcXVpcmVfXy5obXJNKVxuXHRcdC50aGVuKGZ1bmN0aW9uICh1cGRhdGUpIHtcblx0XHRcdGlmICghdXBkYXRlKSB7XG5cdFx0XHRcdHJldHVybiBzZXRTdGF0dXMoYXBwbHlJbnZhbGlkYXRlZE1vZHVsZXMoKSA/IFwicmVhZHlcIiA6IFwiaWRsZVwiKS50aGVuKFxuXHRcdFx0XHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNldFN0YXR1cyhcInByZXBhcmVcIikudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHZhciB1cGRhdGVkTW9kdWxlcyA9IFtdO1xuXHRcdFx0XHRjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVycyA9IFtdO1xuXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmhtckMpLnJlZHVjZShmdW5jdGlvbiAoXG5cdFx0XHRcdFx0XHRwcm9taXNlcyxcblx0XHRcdFx0XHRcdGtleVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5obXJDW2tleV0oXG5cdFx0XHRcdFx0XHRcdHVwZGF0ZS5jLFxuXHRcdFx0XHRcdFx0XHR1cGRhdGUucixcblx0XHRcdFx0XHRcdFx0dXBkYXRlLm0sXG5cdFx0XHRcdFx0XHRcdHByb21pc2VzLFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVycyxcblx0XHRcdFx0XHRcdFx0dXBkYXRlZE1vZHVsZXNcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZXM7XG5cdFx0XHRcdFx0fSwgW10pXG5cdFx0XHRcdCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHdhaXRGb3JCbG9ja2luZ1Byb21pc2VzKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGlmIChhcHBseU9uVXBkYXRlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpbnRlcm5hbEFwcGx5KGFwcGx5T25VcGRhdGUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNldFN0YXR1cyhcInJlYWR5XCIpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB1cGRhdGVkTW9kdWxlcztcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG59XG5cbmZ1bmN0aW9uIGhvdEFwcGx5KG9wdGlvbnMpIHtcblx0aWYgKGN1cnJlbnRTdGF0dXMgIT09IFwicmVhZHlcIikge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XCJhcHBseSgpIGlzIG9ubHkgYWxsb3dlZCBpbiByZWFkeSBzdGF0dXMgKHN0YXRlOiBcIiArXG5cdFx0XHRcdFx0Y3VycmVudFN0YXR1cyArXG5cdFx0XHRcdFx0XCIpXCJcblx0XHRcdCk7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGludGVybmFsQXBwbHkob3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGludGVybmFsQXBwbHkob3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRhcHBseUludmFsaWRhdGVkTW9kdWxlcygpO1xuXG5cdHZhciByZXN1bHRzID0gY3VycmVudFVwZGF0ZUFwcGx5SGFuZGxlcnMubWFwKGZ1bmN0aW9uIChoYW5kbGVyKSB7XG5cdFx0cmV0dXJuIGhhbmRsZXIob3B0aW9ucyk7XG5cdH0pO1xuXHRjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVycyA9IHVuZGVmaW5lZDtcblxuXHR2YXIgZXJyb3JzID0gcmVzdWx0c1xuXHRcdC5tYXAoZnVuY3Rpb24gKHIpIHtcblx0XHRcdHJldHVybiByLmVycm9yO1xuXHRcdH0pXG5cdFx0LmZpbHRlcihCb29sZWFuKTtcblxuXHRpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gc2V0U3RhdHVzKFwiYWJvcnRcIikudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHR0aHJvdyBlcnJvcnNbMF07XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBOb3cgaW4gXCJkaXNwb3NlXCIgcGhhc2Vcblx0dmFyIGRpc3Bvc2VQcm9taXNlID0gc2V0U3RhdHVzKFwiZGlzcG9zZVwiKTtcblxuXHRyZXN1bHRzLmZvckVhY2goZnVuY3Rpb24gKHJlc3VsdCkge1xuXHRcdGlmIChyZXN1bHQuZGlzcG9zZSkgcmVzdWx0LmRpc3Bvc2UoKTtcblx0fSk7XG5cblx0Ly8gTm93IGluIFwiYXBwbHlcIiBwaGFzZVxuXHR2YXIgYXBwbHlQcm9taXNlID0gc2V0U3RhdHVzKFwiYXBwbHlcIik7XG5cblx0dmFyIGVycm9yO1xuXHR2YXIgcmVwb3J0RXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG5cdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG5cdH07XG5cblx0dmFyIG91dGRhdGVkTW9kdWxlcyA9IFtdO1xuXHRyZXN1bHRzLmZvckVhY2goZnVuY3Rpb24gKHJlc3VsdCkge1xuXHRcdGlmIChyZXN1bHQuYXBwbHkpIHtcblx0XHRcdHZhciBtb2R1bGVzID0gcmVzdWx0LmFwcGx5KHJlcG9ydEVycm9yKTtcblx0XHRcdGlmIChtb2R1bGVzKSB7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdG91dGRhdGVkTW9kdWxlcy5wdXNoKG1vZHVsZXNbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gUHJvbWlzZS5hbGwoW2Rpc3Bvc2VQcm9taXNlLCBhcHBseVByb21pc2VdKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHQvLyBoYW5kbGUgZXJyb3JzIGluIGFjY2VwdCBoYW5kbGVycyBhbmQgc2VsZiBhY2NlcHRlZCBtb2R1bGUgbG9hZFxuXHRcdGlmIChlcnJvcikge1xuXHRcdFx0cmV0dXJuIHNldFN0YXR1cyhcImZhaWxcIikudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKHF1ZXVlZEludmFsaWRhdGVkTW9kdWxlcykge1xuXHRcdFx0cmV0dXJuIGludGVybmFsQXBwbHkob3B0aW9ucykudGhlbihmdW5jdGlvbiAobGlzdCkge1xuXHRcdFx0XHRvdXRkYXRlZE1vZHVsZXMuZm9yRWFjaChmdW5jdGlvbiAobW9kdWxlSWQpIHtcblx0XHRcdFx0XHRpZiAobGlzdC5pbmRleE9mKG1vZHVsZUlkKSA8IDApIGxpc3QucHVzaChtb2R1bGVJZCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gbGlzdDtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBzZXRTdGF0dXMoXCJpZGxlXCIpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIG91dGRhdGVkTW9kdWxlcztcblx0XHR9KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5SW52YWxpZGF0ZWRNb2R1bGVzKCkge1xuXHRpZiAocXVldWVkSW52YWxpZGF0ZWRNb2R1bGVzKSB7XG5cdFx0aWYgKCFjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVycykgY3VycmVudFVwZGF0ZUFwcGx5SGFuZGxlcnMgPSBbXTtcblx0XHRPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmhtckkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cXVldWVkSW52YWxpZGF0ZWRNb2R1bGVzLmZvckVhY2goZnVuY3Rpb24gKG1vZHVsZUlkKSB7XG5cdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18uaG1ySVtrZXldKFxuXHRcdFx0XHRcdG1vZHVsZUlkLFxuXHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRxdWV1ZWRJbnZhbGlkYXRlZE1vZHVsZXMgPSB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn0iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcImh0dHBzOi8vZGlnaXRhbHNpbGtuZXc6ODg4OC93cC1jb250ZW50L3RoZW1lcy9kaWdpdGFsc2lsay9hc3NldHMvanMvXCI7IiwiLy8gbm8gYmFzZVVSSVxuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGFuZCBsb2FkaW5nIGNodW5rc1xuLy8gdW5kZWZpbmVkID0gY2h1bmsgbm90IGxvYWRlZCwgbnVsbCA9IGNodW5rIHByZWxvYWRlZC9wcmVmZXRjaGVkXG4vLyBbcmVzb2x2ZSwgcmVqZWN0LCBQcm9taXNlXSA9IGNodW5rIGxvYWRpbmcsIDAgPSBjaHVuayBsb2FkZWRcbnZhciBpbnN0YWxsZWRDaHVua3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmhtclNfanNvbnAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmhtclNfanNvbnAgfHwge1xuXHRcImFwcF9ibG9nXCI6IDBcbn07XG5cbi8vIG5vIGNodW5rIG9uIGRlbWFuZCBsb2FkaW5nXG5cbi8vIG5vIHByZWZldGNoaW5nXG5cbi8vIG5vIHByZWxvYWRlZFxuXG52YXIgY3VycmVudFVwZGF0ZWRNb2R1bGVzTGlzdDtcbnZhciB3YWl0aW5nVXBkYXRlUmVzb2x2ZXMgPSB7fTtcbmZ1bmN0aW9uIGxvYWRVcGRhdGVDaHVuayhjaHVua0lkLCB1cGRhdGVkTW9kdWxlc0xpc3QpIHtcblx0Y3VycmVudFVwZGF0ZWRNb2R1bGVzTGlzdCA9IHVwZGF0ZWRNb2R1bGVzTGlzdDtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdHdhaXRpbmdVcGRhdGVSZXNvbHZlc1tjaHVua0lkXSA9IHJlc29sdmU7XG5cdFx0Ly8gc3RhcnQgdXBkYXRlIGNodW5rIGxvYWRpbmdcblx0XHR2YXIgdXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgX193ZWJwYWNrX3JlcXVpcmVfXy5odShjaHVua0lkKTtcblx0XHQvLyBjcmVhdGUgZXJyb3IgYmVmb3JlIHN0YWNrIHVud291bmQgdG8gZ2V0IHVzZWZ1bCBzdGFja3RyYWNlIGxhdGVyXG5cdFx0dmFyIGVycm9yID0gbmV3IEVycm9yKCk7XG5cdFx0dmFyIGxvYWRpbmdFbmRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHRpZih3YWl0aW5nVXBkYXRlUmVzb2x2ZXNbY2h1bmtJZF0pIHtcblx0XHRcdFx0d2FpdGluZ1VwZGF0ZVJlc29sdmVzW2NodW5rSWRdID0gdW5kZWZpbmVkXG5cdFx0XHRcdHZhciBlcnJvclR5cGUgPSBldmVudCAmJiAoZXZlbnQudHlwZSA9PT0gJ2xvYWQnID8gJ21pc3NpbmcnIDogZXZlbnQudHlwZSk7XG5cdFx0XHRcdHZhciByZWFsU3JjID0gZXZlbnQgJiYgZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5zcmM7XG5cdFx0XHRcdGVycm9yLm1lc3NhZ2UgPSAnTG9hZGluZyBob3QgdXBkYXRlIGNodW5rICcgKyBjaHVua0lkICsgJyBmYWlsZWQuXFxuKCcgKyBlcnJvclR5cGUgKyAnOiAnICsgcmVhbFNyYyArICcpJztcblx0XHRcdFx0ZXJyb3IubmFtZSA9ICdDaHVua0xvYWRFcnJvcic7XG5cdFx0XHRcdGVycm9yLnR5cGUgPSBlcnJvclR5cGU7XG5cdFx0XHRcdGVycm9yLnJlcXVlc3QgPSByZWFsU3JjO1xuXHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5sKHVybCwgbG9hZGluZ0VuZGVkKTtcblx0fSk7XG59XG5cbnNlbGZbXCJ3ZWJwYWNrSG90VXBkYXRlXCJdID0gZnVuY3Rpb24oY2h1bmtJZCwgbW9yZU1vZHVsZXMsIHJ1bnRpbWUpIHtcblx0Zm9yKHZhciBtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhtb3JlTW9kdWxlcywgbW9kdWxlSWQpKSB7XG5cdFx0XHRjdXJyZW50VXBkYXRlW21vZHVsZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVsZUlkXTtcblx0XHRcdGlmKGN1cnJlbnRVcGRhdGVkTW9kdWxlc0xpc3QpIGN1cnJlbnRVcGRhdGVkTW9kdWxlc0xpc3QucHVzaChtb2R1bGVJZCk7XG5cdFx0fVxuXHR9XG5cdGlmKHJ1bnRpbWUpIGN1cnJlbnRVcGRhdGVSdW50aW1lLnB1c2gocnVudGltZSk7XG5cdGlmKHdhaXRpbmdVcGRhdGVSZXNvbHZlc1tjaHVua0lkXSkge1xuXHRcdHdhaXRpbmdVcGRhdGVSZXNvbHZlc1tjaHVua0lkXSgpO1xuXHRcdHdhaXRpbmdVcGRhdGVSZXNvbHZlc1tjaHVua0lkXSA9IHVuZGVmaW5lZDtcblx0fVxufTtcblxudmFyIGN1cnJlbnRVcGRhdGVDaHVua3M7XG52YXIgY3VycmVudFVwZGF0ZTtcbnZhciBjdXJyZW50VXBkYXRlUmVtb3ZlZENodW5rcztcbnZhciBjdXJyZW50VXBkYXRlUnVudGltZTtcbmZ1bmN0aW9uIGFwcGx5SGFuZGxlcihvcHRpb25zKSB7XG5cdGlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLmYpIGRlbGV0ZSBfX3dlYnBhY2tfcmVxdWlyZV9fLmYuanNvbnBIbXI7XG5cdGN1cnJlbnRVcGRhdGVDaHVua3MgPSB1bmRlZmluZWQ7XG5cdGZ1bmN0aW9uIGdldEFmZmVjdGVkTW9kdWxlRWZmZWN0cyh1cGRhdGVNb2R1bGVJZCkge1xuXHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbdXBkYXRlTW9kdWxlSWRdO1xuXHRcdHZhciBvdXRkYXRlZERlcGVuZGVuY2llcyA9IHt9O1xuXG5cdFx0dmFyIHF1ZXVlID0gb3V0ZGF0ZWRNb2R1bGVzLm1hcChmdW5jdGlvbiAoaWQpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGNoYWluOiBbaWRdLFxuXHRcdFx0XHRpZDogaWRcblx0XHRcdH07XG5cdFx0fSk7XG5cdFx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcblx0XHRcdHZhciBxdWV1ZUl0ZW0gPSBxdWV1ZS5wb3AoKTtcblx0XHRcdHZhciBtb2R1bGVJZCA9IHF1ZXVlSXRlbS5pZDtcblx0XHRcdHZhciBjaGFpbiA9IHF1ZXVlSXRlbS5jaGFpbjtcblx0XHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbbW9kdWxlSWRdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQhbW9kdWxlIHx8XG5cdFx0XHRcdChtb2R1bGUuaG90Ll9zZWxmQWNjZXB0ZWQgJiYgIW1vZHVsZS5ob3QuX3NlbGZJbnZhbGlkYXRlZClcblx0XHRcdClcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRpZiAobW9kdWxlLmhvdC5fc2VsZkRlY2xpbmVkKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0dHlwZTogXCJzZWxmLWRlY2xpbmVkXCIsXG5cdFx0XHRcdFx0Y2hhaW46IGNoYWluLFxuXHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKG1vZHVsZS5ob3QuX21haW4pIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR0eXBlOiBcInVuYWNjZXB0ZWRcIixcblx0XHRcdFx0XHRjaGFpbjogY2hhaW4sXG5cdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG1vZHVsZS5wYXJlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciBwYXJlbnRJZCA9IG1vZHVsZS5wYXJlbnRzW2ldO1xuXHRcdFx0XHR2YXIgcGFyZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5jW3BhcmVudElkXTtcblx0XHRcdFx0aWYgKCFwYXJlbnQpIGNvbnRpbnVlO1xuXHRcdFx0XHRpZiAocGFyZW50LmhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdHR5cGU6IFwiZGVjbGluZWRcIixcblx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbi5jb25jYXQoW3BhcmVudElkXSksXG5cdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG5cdFx0XHRcdFx0XHRwYXJlbnRJZDogcGFyZW50SWRcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvdXRkYXRlZE1vZHVsZXMuaW5kZXhPZihwYXJlbnRJZCkgIT09IC0xKSBjb250aW51ZTtcblx0XHRcdFx0aWYgKHBhcmVudC5ob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSkge1xuXHRcdFx0XHRcdGlmICghb3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdKVxuXHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdID0gW107XG5cdFx0XHRcdFx0YWRkQWxsVG9TZXQob3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdLCBbbW9kdWxlSWRdKTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkZWxldGUgb3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdO1xuXHRcdFx0XHRvdXRkYXRlZE1vZHVsZXMucHVzaChwYXJlbnRJZCk7XG5cdFx0XHRcdHF1ZXVlLnB1c2goe1xuXHRcdFx0XHRcdGNoYWluOiBjaGFpbi5jb25jYXQoW3BhcmVudElkXSksXG5cdFx0XHRcdFx0aWQ6IHBhcmVudElkXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiBcImFjY2VwdGVkXCIsXG5cdFx0XHRtb2R1bGVJZDogdXBkYXRlTW9kdWxlSWQsXG5cdFx0XHRvdXRkYXRlZE1vZHVsZXM6IG91dGRhdGVkTW9kdWxlcyxcblx0XHRcdG91dGRhdGVkRGVwZW5kZW5jaWVzOiBvdXRkYXRlZERlcGVuZGVuY2llc1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRBbGxUb1NldChhLCBiKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IGJbaV07XG5cdFx0XHRpZiAoYS5pbmRleE9mKGl0ZW0pID09PSAtMSkgYS5wdXNoKGl0ZW0pO1xuXHRcdH1cblx0fVxuXG5cdC8vIGF0IGJlZ2luIGFsbCB1cGRhdGVzIG1vZHVsZXMgYXJlIG91dGRhdGVkXG5cdC8vIHRoZSBcIm91dGRhdGVkXCIgc3RhdHVzIGNhbiBwcm9wYWdhdGUgdG8gcGFyZW50cyBpZiB0aGV5IGRvbid0IGFjY2VwdCB0aGUgY2hpbGRyZW5cblx0dmFyIG91dGRhdGVkRGVwZW5kZW5jaWVzID0ge307XG5cdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbXTtcblx0dmFyIGFwcGxpZWRVcGRhdGUgPSB7fTtcblxuXHR2YXIgd2FyblVuZXhwZWN0ZWRSZXF1aXJlID0gZnVuY3Rpb24gd2FyblVuZXhwZWN0ZWRSZXF1aXJlKG1vZHVsZSkge1xuXHRcdGNvbnNvbGUud2Fybihcblx0XHRcdFwiW0hNUl0gdW5leHBlY3RlZCByZXF1aXJlKFwiICsgbW9kdWxlLmlkICsgXCIpIHRvIGRpc3Bvc2VkIG1vZHVsZVwiXG5cdFx0KTtcblx0fTtcblxuXHRmb3IgKHZhciBtb2R1bGVJZCBpbiBjdXJyZW50VXBkYXRlKSB7XG5cdFx0aWYgKF9fd2VicGFja19yZXF1aXJlX18ubyhjdXJyZW50VXBkYXRlLCBtb2R1bGVJZCkpIHtcblx0XHRcdHZhciBuZXdNb2R1bGVGYWN0b3J5ID0gY3VycmVudFVwZGF0ZVttb2R1bGVJZF07XG5cdFx0XHQvKiogQHR5cGUge1RPRE99ICovXG5cdFx0XHR2YXIgcmVzdWx0O1xuXHRcdFx0aWYgKG5ld01vZHVsZUZhY3RvcnkpIHtcblx0XHRcdFx0cmVzdWx0ID0gZ2V0QWZmZWN0ZWRNb2R1bGVFZmZlY3RzKG1vZHVsZUlkKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdCA9IHtcblx0XHRcdFx0XHR0eXBlOiBcImRpc3Bvc2VkXCIsXG5cdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHQvKiogQHR5cGUge0Vycm9yfGZhbHNlfSAqL1xuXHRcdFx0dmFyIGFib3J0RXJyb3IgPSBmYWxzZTtcblx0XHRcdHZhciBkb0FwcGx5ID0gZmFsc2U7XG5cdFx0XHR2YXIgZG9EaXNwb3NlID0gZmFsc2U7XG5cdFx0XHR2YXIgY2hhaW5JbmZvID0gXCJcIjtcblx0XHRcdGlmIChyZXN1bHQuY2hhaW4pIHtcblx0XHRcdFx0Y2hhaW5JbmZvID0gXCJcXG5VcGRhdGUgcHJvcGFnYXRpb246IFwiICsgcmVzdWx0LmNoYWluLmpvaW4oXCIgLT4gXCIpO1xuXHRcdFx0fVxuXHRcdFx0c3dpdGNoIChyZXN1bHQudHlwZSkge1xuXHRcdFx0XHRjYXNlIFwic2VsZi1kZWNsaW5lZFwiOlxuXHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRGVjbGluZWQpIG9wdGlvbnMub25EZWNsaW5lZChyZXN1bHQpO1xuXHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVEZWNsaW5lZClcblx0XHRcdFx0XHRcdGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRcdFwiQWJvcnRlZCBiZWNhdXNlIG9mIHNlbGYgZGVjbGluZTogXCIgK1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5tb2R1bGVJZCArXG5cdFx0XHRcdFx0XHRcdFx0Y2hhaW5JbmZvXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiZGVjbGluZWRcIjpcblx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkRlY2xpbmVkKSBvcHRpb25zLm9uRGVjbGluZWQocmVzdWx0KTtcblx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRGVjbGluZWQpXG5cdFx0XHRcdFx0XHRhYm9ydEVycm9yID0gbmV3IEVycm9yKFxuXHRcdFx0XHRcdFx0XHRcIkFib3J0ZWQgYmVjYXVzZSBvZiBkZWNsaW5lZCBkZXBlbmRlbmN5OiBcIiArXG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0Lm1vZHVsZUlkICtcblx0XHRcdFx0XHRcdFx0XHRcIiBpbiBcIiArXG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0LnBhcmVudElkICtcblx0XHRcdFx0XHRcdFx0XHRjaGFpbkluZm9cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJ1bmFjY2VwdGVkXCI6XG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMub25VbmFjY2VwdGVkKSBvcHRpb25zLm9uVW5hY2NlcHRlZChyZXN1bHQpO1xuXHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVVbmFjY2VwdGVkKVxuXHRcdFx0XHRcdFx0YWJvcnRFcnJvciA9IG5ldyBFcnJvcihcblx0XHRcdFx0XHRcdFx0XCJBYm9ydGVkIGJlY2F1c2UgXCIgKyBtb2R1bGVJZCArIFwiIGlzIG5vdCBhY2NlcHRlZFwiICsgY2hhaW5JbmZvXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiYWNjZXB0ZWRcIjpcblx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkFjY2VwdGVkKSBvcHRpb25zLm9uQWNjZXB0ZWQocmVzdWx0KTtcblx0XHRcdFx0XHRkb0FwcGx5ID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImRpc3Bvc2VkXCI6XG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMub25EaXNwb3NlZCkgb3B0aW9ucy5vbkRpc3Bvc2VkKHJlc3VsdCk7XG5cdFx0XHRcdFx0ZG9EaXNwb3NlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4Y2VwdGlvbiB0eXBlIFwiICsgcmVzdWx0LnR5cGUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGFib3J0RXJyb3IpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRlcnJvcjogYWJvcnRFcnJvclxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKGRvQXBwbHkpIHtcblx0XHRcdFx0YXBwbGllZFVwZGF0ZVttb2R1bGVJZF0gPSBuZXdNb2R1bGVGYWN0b3J5O1xuXHRcdFx0XHRhZGRBbGxUb1NldChvdXRkYXRlZE1vZHVsZXMsIHJlc3VsdC5vdXRkYXRlZE1vZHVsZXMpO1xuXHRcdFx0XHRmb3IgKG1vZHVsZUlkIGluIHJlc3VsdC5vdXRkYXRlZERlcGVuZGVuY2llcykge1xuXHRcdFx0XHRcdGlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLm8ocmVzdWx0Lm91dGRhdGVkRGVwZW5kZW5jaWVzLCBtb2R1bGVJZCkpIHtcblx0XHRcdFx0XHRcdGlmICghb3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKVxuXHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0gPSBbXTtcblx0XHRcdFx0XHRcdGFkZEFsbFRvU2V0KFxuXHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0sXG5cdFx0XHRcdFx0XHRcdHJlc3VsdC5vdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZG9EaXNwb3NlKSB7XG5cdFx0XHRcdGFkZEFsbFRvU2V0KG91dGRhdGVkTW9kdWxlcywgW3Jlc3VsdC5tb2R1bGVJZF0pO1xuXHRcdFx0XHRhcHBsaWVkVXBkYXRlW21vZHVsZUlkXSA9IHdhcm5VbmV4cGVjdGVkUmVxdWlyZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y3VycmVudFVwZGF0ZSA9IHVuZGVmaW5lZDtcblxuXHQvLyBTdG9yZSBzZWxmIGFjY2VwdGVkIG91dGRhdGVkIG1vZHVsZXMgdG8gcmVxdWlyZSB0aGVtIGxhdGVyIGJ5IHRoZSBtb2R1bGUgc3lzdGVtXG5cdHZhciBvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMgPSBbXTtcblx0Zm9yICh2YXIgaiA9IDA7IGogPCBvdXRkYXRlZE1vZHVsZXMubGVuZ3RoOyBqKyspIHtcblx0XHR2YXIgb3V0ZGF0ZWRNb2R1bGVJZCA9IG91dGRhdGVkTW9kdWxlc1tqXTtcblx0XHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXy5jW291dGRhdGVkTW9kdWxlSWRdO1xuXHRcdGlmIChcblx0XHRcdG1vZHVsZSAmJlxuXHRcdFx0KG1vZHVsZS5ob3QuX3NlbGZBY2NlcHRlZCB8fCBtb2R1bGUuaG90Ll9tYWluKSAmJlxuXHRcdFx0Ly8gcmVtb3ZlZCBzZWxmLWFjY2VwdGVkIG1vZHVsZXMgc2hvdWxkIG5vdCBiZSByZXF1aXJlZFxuXHRcdFx0YXBwbGllZFVwZGF0ZVtvdXRkYXRlZE1vZHVsZUlkXSAhPT0gd2FyblVuZXhwZWN0ZWRSZXF1aXJlICYmXG5cdFx0XHQvLyB3aGVuIGNhbGxlZCBpbnZhbGlkYXRlIHNlbGYtYWNjZXB0aW5nIGlzIG5vdCBwb3NzaWJsZVxuXHRcdFx0IW1vZHVsZS5ob3QuX3NlbGZJbnZhbGlkYXRlZFxuXHRcdCkge1xuXHRcdFx0b3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzLnB1c2goe1xuXHRcdFx0XHRtb2R1bGU6IG91dGRhdGVkTW9kdWxlSWQsXG5cdFx0XHRcdHJlcXVpcmU6IG1vZHVsZS5ob3QuX3JlcXVpcmVTZWxmLFxuXHRcdFx0XHRlcnJvckhhbmRsZXI6IG1vZHVsZS5ob3QuX3NlbGZBY2NlcHRlZFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0dmFyIG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzO1xuXG5cdHJldHVybiB7XG5cdFx0ZGlzcG9zZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0Y3VycmVudFVwZGF0ZVJlbW92ZWRDaHVua3MuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmtJZCkge1xuXHRcdFx0XHRkZWxldGUgaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdO1xuXHRcdFx0fSk7XG5cdFx0XHRjdXJyZW50VXBkYXRlUmVtb3ZlZENodW5rcyA9IHVuZGVmaW5lZDtcblxuXHRcdFx0dmFyIGlkeDtcblx0XHRcdHZhciBxdWV1ZSA9IG91dGRhdGVkTW9kdWxlcy5zbGljZSgpO1xuXHRcdFx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0dmFyIG1vZHVsZUlkID0gcXVldWUucG9wKCk7XG5cdFx0XHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbbW9kdWxlSWRdO1xuXHRcdFx0XHRpZiAoIW1vZHVsZSkgY29udGludWU7XG5cblx0XHRcdFx0dmFyIGRhdGEgPSB7fTtcblxuXHRcdFx0XHQvLyBDYWxsIGRpc3Bvc2UgaGFuZGxlcnNcblx0XHRcdFx0dmFyIGRpc3Bvc2VIYW5kbGVycyA9IG1vZHVsZS5ob3QuX2Rpc3Bvc2VIYW5kbGVycztcblx0XHRcdFx0Zm9yIChqID0gMDsgaiA8IGRpc3Bvc2VIYW5kbGVycy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdGRpc3Bvc2VIYW5kbGVyc1tqXS5jYWxsKG51bGwsIGRhdGEpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18uaG1yRFttb2R1bGVJZF0gPSBkYXRhO1xuXG5cdFx0XHRcdC8vIGRpc2FibGUgbW9kdWxlICh0aGlzIGRpc2FibGVzIHJlcXVpcmVzIGZyb20gdGhpcyBtb2R1bGUpXG5cdFx0XHRcdG1vZHVsZS5ob3QuYWN0aXZlID0gZmFsc2U7XG5cblx0XHRcdFx0Ly8gcmVtb3ZlIG1vZHVsZSBmcm9tIGNhY2hlXG5cdFx0XHRcdGRlbGV0ZSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbbW9kdWxlSWRdO1xuXG5cdFx0XHRcdC8vIHdoZW4gZGlzcG9zaW5nIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsbCBkaXNwb3NlIGhhbmRsZXJcblx0XHRcdFx0ZGVsZXRlIG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXTtcblxuXHRcdFx0XHQvLyByZW1vdmUgXCJwYXJlbnRzXCIgcmVmZXJlbmNlcyBmcm9tIGFsbCBjaGlsZHJlblxuXHRcdFx0XHRmb3IgKGogPSAwOyBqIDwgbW9kdWxlLmNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0dmFyIGNoaWxkID0gX193ZWJwYWNrX3JlcXVpcmVfXy5jW21vZHVsZS5jaGlsZHJlbltqXV07XG5cdFx0XHRcdFx0aWYgKCFjaGlsZCkgY29udGludWU7XG5cdFx0XHRcdFx0aWR4ID0gY2hpbGQucGFyZW50cy5pbmRleE9mKG1vZHVsZUlkKTtcblx0XHRcdFx0XHRpZiAoaWR4ID49IDApIHtcblx0XHRcdFx0XHRcdGNoaWxkLnBhcmVudHMuc3BsaWNlKGlkeCwgMSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIHJlbW92ZSBvdXRkYXRlZCBkZXBlbmRlbmN5IGZyb20gbW9kdWxlIGNoaWxkcmVuXG5cdFx0XHR2YXIgZGVwZW5kZW5jeTtcblx0XHRcdGZvciAodmFyIG91dGRhdGVkTW9kdWxlSWQgaW4gb3V0ZGF0ZWREZXBlbmRlbmNpZXMpIHtcblx0XHRcdFx0aWYgKF9fd2VicGFja19yZXF1aXJlX18ubyhvdXRkYXRlZERlcGVuZGVuY2llcywgb3V0ZGF0ZWRNb2R1bGVJZCkpIHtcblx0XHRcdFx0XHRtb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbb3V0ZGF0ZWRNb2R1bGVJZF07XG5cdFx0XHRcdFx0aWYgKG1vZHVsZSkge1xuXHRcdFx0XHRcdFx0bW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMgPVxuXHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1tvdXRkYXRlZE1vZHVsZUlkXTtcblx0XHRcdFx0XHRcdGZvciAoaiA9IDA7IGogPCBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRkZXBlbmRlbmN5ID0gbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXNbal07XG5cdFx0XHRcdFx0XHRcdGlkeCA9IG1vZHVsZS5jaGlsZHJlbi5pbmRleE9mKGRlcGVuZGVuY3kpO1xuXHRcdFx0XHRcdFx0XHRpZiAoaWR4ID49IDApIG1vZHVsZS5jaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAocmVwb3J0RXJyb3IpIHtcblx0XHRcdC8vIGluc2VydCBuZXcgY29kZVxuXHRcdFx0Zm9yICh2YXIgdXBkYXRlTW9kdWxlSWQgaW4gYXBwbGllZFVwZGF0ZSkge1xuXHRcdFx0XHRpZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGFwcGxpZWRVcGRhdGUsIHVwZGF0ZU1vZHVsZUlkKSkge1xuXHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ubVt1cGRhdGVNb2R1bGVJZF0gPSBhcHBsaWVkVXBkYXRlW3VwZGF0ZU1vZHVsZUlkXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBydW4gbmV3IHJ1bnRpbWUgbW9kdWxlc1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50VXBkYXRlUnVudGltZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjdXJyZW50VXBkYXRlUnVudGltZVtpXShfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gY2FsbCBhY2NlcHQgaGFuZGxlcnNcblx0XHRcdGZvciAodmFyIG91dGRhdGVkTW9kdWxlSWQgaW4gb3V0ZGF0ZWREZXBlbmRlbmNpZXMpIHtcblx0XHRcdFx0aWYgKF9fd2VicGFja19yZXF1aXJlX18ubyhvdXRkYXRlZERlcGVuZGVuY2llcywgb3V0ZGF0ZWRNb2R1bGVJZCkpIHtcblx0XHRcdFx0XHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXy5jW291dGRhdGVkTW9kdWxlSWRdO1xuXHRcdFx0XHRcdGlmIChtb2R1bGUpIHtcblx0XHRcdFx0XHRcdG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzID1cblx0XHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbb3V0ZGF0ZWRNb2R1bGVJZF07XG5cdFx0XHRcdFx0XHR2YXIgY2FsbGJhY2tzID0gW107XG5cdFx0XHRcdFx0XHR2YXIgZXJyb3JIYW5kbGVycyA9IFtdO1xuXHRcdFx0XHRcdFx0dmFyIGRlcGVuZGVuY2llc0ZvckNhbGxiYWNrcyA9IFtdO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHR2YXIgZGVwZW5kZW5jeSA9IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzW2pdO1xuXHRcdFx0XHRcdFx0XHR2YXIgYWNjZXB0Q2FsbGJhY2sgPVxuXHRcdFx0XHRcdFx0XHRcdG1vZHVsZS5ob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcGVuZGVuY3ldO1xuXHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JIYW5kbGVyID1cblx0XHRcdFx0XHRcdFx0XHRtb2R1bGUuaG90Ll9hY2NlcHRlZEVycm9ySGFuZGxlcnNbZGVwZW5kZW5jeV07XG5cdFx0XHRcdFx0XHRcdGlmIChhY2NlcHRDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChjYWxsYmFja3MuaW5kZXhPZihhY2NlcHRDYWxsYmFjaykgIT09IC0xKSBjb250aW51ZTtcblx0XHRcdFx0XHRcdFx0XHRjYWxsYmFja3MucHVzaChhY2NlcHRDYWxsYmFjayk7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3JIYW5kbGVycy5wdXNoKGVycm9ySGFuZGxlcik7XG5cdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW5jaWVzRm9yQ2FsbGJhY2tzLnB1c2goZGVwZW5kZW5jeSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZvciAodmFyIGsgPSAwOyBrIDwgY2FsbGJhY2tzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FsbGJhY2tzW2tdLmNhbGwobnVsbCwgbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMpO1xuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIGVycm9ySGFuZGxlcnNba10gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyc1trXShlcnIsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogb3V0ZGF0ZWRNb2R1bGVJZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZXBlbmRlbmN5SWQ6IGRlcGVuZGVuY2llc0ZvckNhbGxiYWNrc1trXVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycjIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25FcnJvcmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5vbkVycm9yZWQoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJhY2NlcHQtZXJyb3ItaGFuZGxlci1lcnJvcmVkXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogb3V0ZGF0ZWRNb2R1bGVJZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVuY3lJZDogZGVwZW5kZW5jaWVzRm9yQ2FsbGJhY2tzW2tdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVycjIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvcmlnaW5hbEVycm9yOiBlcnJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRXJyb3JlZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycjIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25FcnJvcmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcImFjY2VwdC1lcnJvcmVkXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG91dGRhdGVkTW9kdWxlSWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW5jeUlkOiBkZXBlbmRlbmNpZXNGb3JDYWxsYmFja3Nba10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVyclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVFcnJvcmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycik7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvYWQgc2VsZiBhY2NlcHRlZCBtb2R1bGVzXG5cdFx0XHRmb3IgKHZhciBvID0gMDsgbyA8IG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlcy5sZW5ndGg7IG8rKykge1xuXHRcdFx0XHR2YXIgaXRlbSA9IG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlc1tvXTtcblx0XHRcdFx0dmFyIG1vZHVsZUlkID0gaXRlbS5tb2R1bGU7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0aXRlbS5yZXF1aXJlKG1vZHVsZUlkKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBpdGVtLmVycm9ySGFuZGxlciA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRpdGVtLmVycm9ySGFuZGxlcihlcnIsIHtcblx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG5cdFx0XHRcdFx0XHRcdFx0bW9kdWxlOiBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbbW9kdWxlSWRdXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyMikge1xuXHRcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkVycm9yZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLm9uRXJyb3JlZCh7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcInNlbGYtYWNjZXB0LWVycm9yLWhhbmRsZXItZXJyb3JlZFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVycjIsXG5cdFx0XHRcdFx0XHRcdFx0XHRvcmlnaW5hbEVycm9yOiBlcnJcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRXJyb3JlZCkge1xuXHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycjIpO1xuXHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25FcnJvcmVkKSB7XG5cdFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcInNlbGYtYWNjZXB0LWVycm9yZWRcIixcblx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVyclxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVFcnJvcmVkKSB7XG5cdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvdXRkYXRlZE1vZHVsZXM7XG5cdFx0fVxuXHR9O1xufVxuX193ZWJwYWNrX3JlcXVpcmVfXy5obXJJLmpzb25wID0gZnVuY3Rpb24gKG1vZHVsZUlkLCBhcHBseUhhbmRsZXJzKSB7XG5cdGlmICghY3VycmVudFVwZGF0ZSkge1xuXHRcdGN1cnJlbnRVcGRhdGUgPSB7fTtcblx0XHRjdXJyZW50VXBkYXRlUnVudGltZSA9IFtdO1xuXHRcdGN1cnJlbnRVcGRhdGVSZW1vdmVkQ2h1bmtzID0gW107XG5cdFx0YXBwbHlIYW5kbGVycy5wdXNoKGFwcGx5SGFuZGxlcik7XG5cdH1cblx0aWYgKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oY3VycmVudFVwZGF0ZSwgbW9kdWxlSWQpKSB7XG5cdFx0Y3VycmVudFVwZGF0ZVttb2R1bGVJZF0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm1bbW9kdWxlSWRdO1xuXHR9XG59O1xuX193ZWJwYWNrX3JlcXVpcmVfXy5obXJDLmpzb25wID0gZnVuY3Rpb24gKFxuXHRjaHVua0lkcyxcblx0cmVtb3ZlZENodW5rcyxcblx0cmVtb3ZlZE1vZHVsZXMsXG5cdHByb21pc2VzLFxuXHRhcHBseUhhbmRsZXJzLFxuXHR1cGRhdGVkTW9kdWxlc0xpc3Rcbikge1xuXHRhcHBseUhhbmRsZXJzLnB1c2goYXBwbHlIYW5kbGVyKTtcblx0Y3VycmVudFVwZGF0ZUNodW5rcyA9IHt9O1xuXHRjdXJyZW50VXBkYXRlUmVtb3ZlZENodW5rcyA9IHJlbW92ZWRDaHVua3M7XG5cdGN1cnJlbnRVcGRhdGUgPSByZW1vdmVkTW9kdWxlcy5yZWR1Y2UoZnVuY3Rpb24gKG9iaiwga2V5KSB7XG5cdFx0b2JqW2tleV0gPSBmYWxzZTtcblx0XHRyZXR1cm4gb2JqO1xuXHR9LCB7fSk7XG5cdGN1cnJlbnRVcGRhdGVSdW50aW1lID0gW107XG5cdGNodW5rSWRzLmZvckVhY2goZnVuY3Rpb24gKGNodW5rSWQpIHtcblx0XHRpZiAoXG5cdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8oaW5zdGFsbGVkQ2h1bmtzLCBjaHVua0lkKSAmJlxuXHRcdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdICE9PSB1bmRlZmluZWRcblx0XHQpIHtcblx0XHRcdHByb21pc2VzLnB1c2gobG9hZFVwZGF0ZUNodW5rKGNodW5rSWQsIHVwZGF0ZWRNb2R1bGVzTGlzdCkpO1xuXHRcdFx0Y3VycmVudFVwZGF0ZUNodW5rc1tjaHVua0lkXSA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1cnJlbnRVcGRhdGVDaHVua3NbY2h1bmtJZF0gPSBmYWxzZTtcblx0XHR9XG5cdH0pO1xuXHRpZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5mKSB7XG5cdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5mLmpzb25wSG1yID0gZnVuY3Rpb24gKGNodW5rSWQsIHByb21pc2VzKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGN1cnJlbnRVcGRhdGVDaHVua3MgJiZcblx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vKGN1cnJlbnRVcGRhdGVDaHVua3MsIGNodW5rSWQpICYmXG5cdFx0XHRcdCFjdXJyZW50VXBkYXRlQ2h1bmtzW2NodW5rSWRdXG5cdFx0XHQpIHtcblx0XHRcdFx0cHJvbWlzZXMucHVzaChsb2FkVXBkYXRlQ2h1bmsoY2h1bmtJZCkpO1xuXHRcdFx0XHRjdXJyZW50VXBkYXRlQ2h1bmtzW2NodW5rSWRdID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59O1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmhtck0gPSBmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBmZXRjaCA9PT0gXCJ1bmRlZmluZWRcIikgdGhyb3cgbmV3IEVycm9yKFwiTm8gYnJvd3NlciBzdXBwb3J0OiBuZWVkIGZldGNoIEFQSVwiKTtcblx0cmV0dXJuIGZldGNoKF9fd2VicGFja19yZXF1aXJlX18ucCArIF9fd2VicGFja19yZXF1aXJlX18uaG1yRigpKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG5cdFx0aWYocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHJldHVybjsgLy8gbm8gdXBkYXRlIGF2YWlsYWJsZVxuXHRcdGlmKCFyZXNwb25zZS5vaykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIHVwZGF0ZSBtYW5pZmVzdCBcIiArIHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuXHRcdHJldHVybiByZXNwb25zZS5qc29uKCk7XG5cdH0pO1xufTtcblxuLy8gbm8gb24gY2h1bmtzIGxvYWRlZFxuXG4vLyBubyBqc29ucCBmdW5jdGlvbiIsIiIsIi8vIG1vZHVsZSBjYWNoZSBhcmUgdXNlZCBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oXCIuL2pzLWJsb2cuanNcIik7XG4iLCIiXSwibmFtZXMiOlsiYmxvZ0ZpbHRlciIsIiQiLCJEU0luaXRGaWx0ZXIiLCJtb2R1bGUiLCJmaWx0ZXIiLCJhY3Rpb24iLCJmb3JtIiwibW9yZUJ0biIsInJlc3VsdHMiLCJkb2luZ19hamF4IiwidGltZW91dCIsInF1ZXJ5IiwicG9zdF90eXBlIiwicGVyX3BhZ2UiLCJwYWdlIiwiY29tcG9uZW50X3N0eWxlcyIsImFqYXhfdXJsIiwiZHMiLCJwcmVsb2FkZXIiLCJpbml0IiwiYWpheE1vZHVsZSIsImRhdGEiLCJwb3N0c19wZXJfcGFnZSIsImluaXRFbGVtZW50c0FjdGlvbnMiLCJmaW5kIiwibW9yZVBvc3RzIiwiY2hhbmdlRm9ybSIsImNvbXBDbGFzcyIsImNsYXNzIiwiY29tcFN0eWxlcyIsInN0eWxlcyIsImNvbXBJbWFnZSIsImltYWdlIiwib24iLCJlIiwicHJldmVudERlZmF1bHQiLCJzZW5kQWpheCIsIiRpbnB1dF90ZXh0IiwidW5iaW5kIiwibm90Iiwia2V5dXAiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiJGlucHV0X3N1Ym1pdCIsInBhcmVudCIsImFkZENsYXNzIiwiY2xpY2siLCIkc2VsZWN0IiwiY2hhbmdlIiwiZXZlbnQiLCJrZXlDb2RlIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiYWJvcnQiLCJyZW1vdmUiLCJwYWdlZCIsImNvbXBvbmVudCIsImRldmljZSIsIndpbmRvdyIsIndpZHRoIiwic2VyaWFsaXplIiwiYWpheCIsInVybCIsInR5cGUiLCJiZWZvcmVTZW5kIiwieGhyIiwiYXBwZW5kIiwic3VjY2VzcyIsImh0bWwiLCJwb3N0cyIsIm1heF9wYWdlcyIsImhpZGUiLCJzaG93IiwidG90YWxfcG9zdHNfc2hvd2luZyIsInRleHQiLCJ0b3RhbF9wb3N0cyIsImRvSW5pdCIsImVhY2giLCJpIiwialF1ZXJ5IiwiZGF0YUxheWVycyIsInNpZGVDdGEiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJzZW5kRGF0YUxheWVyIiwiZGF0YUxheWVyIiwicHVzaCIsImFkZEV2ZW50TGlzdGVuZXIiLCJsb2NhdGlvbiIsImhyZWYiLCJzdWJzY3JpYmVTbGlkZUluIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsInNjcm9sbFRvcCIsInJlbW92ZUNsYXNzIiwidG9jTW9iaWxlIiwiaGFuZGxlTW9iaWxlVE9DIiwiaW5uZXJXaWR0aCIsInRvY19jb250YWluZXIiLCJnZXRFbGVtZW50QnlJZCIsImNsYXNzTGlzdCIsImFkZCIsInN0eWxlIiwidGFyZ2V0IiwiY2xvc2VzdCIsInRvY1RvZ2dsZSIsIm1hdGNoZXMiLCJjbG9zZVRvZ2dsZSIsInRvY0xpc3QiLCJ1X2VsZW1lbnRGcm9tVG9wIiwidG9jU3RpY2t5IiwicXVlcnlTZWxlY3RvckFsbCIsInRvY1RvZ2dsZUNsYXNzZXMiLCJ0b2NDb2xsYXBzZXIiLCJ0b2NDb250YWluZXIiLCJnZXRDb21wdXRlZFN0eWxlIiwiZGlzcGxheSIsIm1lc3VyZSIsImhhc0NsYXNzIiwiZGFya01vZGUiLCJtb2RlIiwiYXR0ciIsImZ1bmN0aW9uTmFtZSIsInNldEl0ZW0iLCJwb2xscyIsImJ1dHRvbnMiLCJmb3JFYWNoIiwicG9sbCIsInBvbGxCdG4iLCJwb2xsTXNnIiwiY29udGFpbnMiLCJ1X2hhc0NsYXNzIiwiZWwiLCJjbHMiLCJjbGFzc05hbWUiLCJtYXRjaCIsInVfYWRkQ2xhc3MiLCJ1X2RlbENsYXNzIiwicmVwbGFjZSIsIlJlZ0V4cCIsImVsZW1UcmlnZ2VyIiwiZWxlbVRhcmdldCIsImNsYXNzVG9BZGQiLCJkaXN0YW5jZUZyb21Ub3AiLCJ1bml0Iiwid2luWSIsImlubmVySGVpZ2h0IiwiZG9jdW1lbnRFbGVtZW50IiwiY2xpZW50SGVpZ2h0IiwiZWxUcmlnZ2VyTGVuZ3RoIiwiZWxUYXJnZXRMZW5ndGgiLCJkaXN0VG9wIiwiZGlzdFBlcmNlbnQiLCJkaXN0UGl4ZWxzIiwiZGlzdFVuaXQiLCJlbFRhcmdldCIsImoiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ0b3AiLCJNYXRoIiwicm91bmQiLCJ1X2lzRWxlbWVudElzSW5WaWV3Iiwic2Nyb2xsIiwic2Nyb2xsWSIsInBhZ2VZT2Zmc2V0IiwiYm91bmRzVG9wIiwidmlld3BvcnQiLCJib3R0b20iLCJib3VuZHMiXSwic291cmNlUm9vdCI6IiJ9