vendor: 91 bytes, lines 1-4
1/******/ (() => { // webpackBootstrap 2/******/ var __webpack_modules__ = ({ 3 4/***/ "./src/
4js/article.js": 5/*!***************************!*\ 6 !*** ./src/js/article.js ***! 7 \***************************/ 8/***/ (() => { 9 10$(document).ready(function () { 11 var load_container = $('.js-load-articles'); 12 var articles_loader = $('.js-articles-loader'); 13 var api_url = $(load_container).data('api-url'); 14 var sidebar_half_page = $(load_container).data('sidebar-half-page'); 15 var sidebar_tab = $(load_container).data('sidebar-tab'); 16 var article_id = $(load_container).data('current-post'); 17 var is_editor = $(load_container).data('editor'); 18 var article_to_load = parseInt($(load_container).data('auto-loading-count')); 19 var current_active = loading_url = false; 20 var last_offset = 0; 21 var all_articles = []; 22 var heightWindow = $(window).height(); 23 var heightFooter = $('footer').height(); 24 $('.js-fb-share').click(function (e) { 25 e.preventDefault(); 26 window.open($(this).attr('href'), 'fbShareWindow', 'height=450, width=550, top=' + ($(window).height() / 2 - 275) + ', left=' + ($(window).width() / 2 - 225) + ', toolbar=0, location=0, menubar=0, directories=0, scrollbars=0'); 27 return false; 28 }); 29 $('.js-tweet-share').off('click').on('click', function () { 30 var field_list = { 31 url: $(this).data('url'), 32 text: $(this).data('title') 33 }; 34 window.open('https://twitter.com/share?' + jQuery.param(field_list), '_blank', 'width=550,height=420').focus(); 35 return false; 36 }); 37 $('.js-copy-current-url').click(function () { 38 var _this = this; 39 40 var url = $(this).data('url'); 41 var dummy = document.createElement('p'); 42 dummy.textContent = url; 43 document.body.appendChild(dummy); 44 var range = document.createRange(); 45 range.setStartBefore(dummy); 46 range.setEndAfter(dummy); 47 var selection = window.getSelection(); 48 selection.removeAllRanges(); 49 selection.addRange(range); 50 document.execCommand('copy'); 51 document.body.removeChild(dummy); 52 $(this).find('.copy-success').addClass('active'); 53 setTimeout(function () { 54 $(_this).find('.copy-success').removeClass('active'); 55 }, 1000); 56 return false; 57 }); 58 59 if ($(load_container).length) { 60 history.scrollRestoration = 'auto'; 61 all_articles.push({ 62 top: 0, 63 url: window.location.href, 64 title: document.title 65 }); 66 $(window).scroll(function () { 67 var heightDoc = $(document).height(); 68 var heightScroll = $(window).scrollTop(); 69 var heightScrollDown = heightWindow + heightScroll; 70 var heightDocWithoutFooter = heightDoc - heightFooter; 71 72 var test = _find(all_articles, heightScroll - heightWindow * 1.3); 73 74 if (test.url !== window.location.href && test.url) { 75 changeUrl(test); 76 } 77 78 if (heightScrollDown > heightDocWithoutFooter * 0.8) { 79 loadArticles(); 80 } 81 }); 82 } 83 84 function _find(array, search) { 85 var value = 0; 86 var top = 0; 87 88 for (var i = 0; i < array.length; i++) { 89 top = array[i + 1] ? array[i + 1].top : 99999999999999; 90 91 if (search >= array[i].top && search <= top) { 92 value = array[i]; 93 } 94 } 95 96 return value; 97 } 98 99 function changeUrl(newState) { 100 if (!loading_url) { 101 loading_url = true; 102 window.history.replaceState({}, newState.title, newState.url); 103 document.title = newState.title; 104 105 if (newState.top == 0) { 106 history.scrollRestoration = 'auto'; 107 } else { 108 history.scrollRestoration = 'manual'; 109 } 110 111 setTimeout(function () { 112 loading_url = false; 113 }, 1000); 114 } 115 } 116 117 function loadArticles() { 118 if (current_active || article_to_load == 0) return false; 119 current_active = true; 120 $(articles_loader).addClass('show'); 121 $.post(api_url, { 122 "article_id": article_id, 123 "last_offset": last_offset, 124 'sidebar_half_page': sidebar_half_page, 125 'sidebar_tab': sidebar_tab, 126 'is_editor': is_editor 127 }, function (data) { 128 if (data.force_stop) { 129 article_to_load = 0; 130 } else { 131 article_to_load--; 132 } 133 134 current_active = false; 135 last_offset++; 136 $(articles_loader).removeClass('show'); 137 if (!data.title) return false;
138 ; 139 var new_section = $(load_container).find('.js-copy').clone(); 140 $(new_section).removeClass('js-copy'); 141 $(new_section).show(); 142 $(new_section).find('.js-left').append(data.html); 143 $(new_section).find('.js-right').append(data.html_half_page); 144 $(load_container).append(new_section); 145 all_articles.push({ 146 top: new_section.position().top, 147 url: data.url, 148 title: data.title 149 }); 150 setTimeout(function () { 151 $(new_section).find('.js-gam-wrapper').each(function () { 152 window.prepareGamAd($(this)); 153 }); 154 $(new_section).find('.js-fb-share').click(function (e) { 155 e.preventDefault(); 156 window.open($(this).attr('href'), 'fbShareWindow', 'height=450, width=550, top=' + ($(window).height() / 2 - 275) + ', left=' + ($(window).width() / 2 - 225) + ', toolbar=0, location=0, menubar=0, directories=0, scrollbars=0'); 157 return false; 158 }); 159 $(new_section).find('.js-tweet-share').off('click').on('click', function () { 160 var field_list = { 161 url: $(this).data('url'), 162 text: $(this).data('title') 163 }; 164 window.open('https://twitter.com/share?' + jQuery.param(field_list), '_blank', 'width=550,height=420').focus(); 165 return false; 166 }); 167 $(new_section).find('.js-copy-current-url').click(function () { 168 var _this2 = this; 169 170 var url = $(this).data('url'); 171 var dummy = document.createElement('p'); 172 dummy.textContent = url; 173 document.body.appendChild(dummy); 174 var range = document.createRange(); 175 range.setStartBefore(dummy); 176 range.setEndAfter(dummy); 177 var selection = window.getSelection(); 178 selection.removeAllRanges(); 179 selection.addRange(range); 180 document.execCommand('copy'); 181 document.body.removeChild(dummy); 182 $(this).find('.copy-success').addClass('active'); 183 setTimeout(function () { 184 $(_this2).find('.copy-success').removeClass('active'); 185 }, 1000); 186 return false; 187 }); 188 }, 300); 189 }).fail(function () { 190 current_active = false; 191 }); 192 } 193}); 194 195/***/ }), 196
197/***/ "./src/js/dkcode.js": 198/*!**************************!*\ 199 !*** ./src/js/dkcode.js ***! 200 \**************************/ 201/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 202 203"use strict"; 204__webpack_require__.r(__webpack_exports__); 205/* harmony import */ var lightgallery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lightgallery */ "./node_modules/lightgallery/lightgallery.es5.js"); 206/* harmony import */ var lightgallery_plugins_thumbnail__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lightgallery/plugins/thumbnail */ "./node_modules/lightgallery/plugins/thumbnail/lg-thumbnail.es5.js"); 207/* harmony import */ var lightgallery_plugins_fullscreen__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lightgallery/plugins/fullscreen */ "./node_modules/lightgallery/plugins/fullscreen/lg-fullscreen.es5.js"); 208 209 210 211$(window).on('load', function () { 212 // let touchstart = false; 213 var screenWidth = window.innerWidth; 214 var headerSubmenu = $('.header__submenu'); 215 var translateYHide = 'translateY(-150%)'; 216 var translateYShow = 'translateY(0)'; 217 var translateXHide = 'translateX(-150%)'; 218 var translateXShow = 'translateX(0)'; 219 var openMobileMenuButton = $('.js-open-mobile-menu'); 220 var mobileMenu = $('.js-mobile-menu'); 221 var searchIcon = $('.js-toggle-search'); 222 var searchWrapper = $('.js-search-wrapper'); 223 var is_admin_bar = $('body').hasClass('admin-bar'); 224 225 function handleShowSearch() { 226 searchWrapper.css('display', 'flex'); 227 setTimeout(function () { 228 searchWrapper.css('opacity', 1); 229 $('input[type="text"]', searchWrapper).focus(); 230 }, 150); 231 } 232 233 function handleHideSearch() { 234 searchWrapper.css('opacity', 0); 235 setTimeout(function () { 236 searchWrapper.css('display', 'none'); 237 $('input[type="text"]', searchWrapper).val(''); 238 }, 150); 239 } 240 241 function handleToggleSearch(action) { 242 $('body').toggleClass('active-search'); 243 244 switch (action) { 245 case 'show': 246 return handleShowSearch(); 247 248 case 'hide': 249 return handleHideSearch(); 250 251 default: 252 return null; 253 } 254 } 255 256 $('.overlay', searchWrapper).on('click', function () { 257 handleToggleSearch('hide'); 258 searchIcon.removeClass('active'); 259 }); 260 searchIcon.on('click', function () { 261 if ($(this).hasClass('active')) { 262 handleToggleSearch('hide'); 263 $(this).removeClass('active'); 264 } else { 265 handleToggleSearch('show'); 266 $(this).addClass('active'); 267 } 268 }); 269 270 var handleFindSubmenuElement = function handleFindSubmenuElement(submenuID) { 271 headerSubmenu.each(function () { 272 var attrID = $(this).data('id'); 273 274 if (attrID === submenuID) { 275 if (screenWidth > 1024) { 276 $(this).css('transform', translateYShow); 277 } else { 278 $(this).css('transform', translateXShow); 279 } 280 } 281 }); 282 }; 283 284 if (screenWidth > 1024) { 285 $(document).on('scroll', function () { 286 var bodyScrollTop = $(window).scrollTop(); 287 var submenuTop = 66; 288 if (is_admin_bar) submenuTop += 32; 289 headerSubmenu.css('top', submenuTop + 'px'); 290 }); 291 headerSubmenu.mouseleave(function () { 292 $(this).css('transform', translateYHide); 293 }); 294 headerSubmenu.mouseenter(function () { 295 $(this).css('transform', translateYShow); 296 }); 297 $('.header__grid__nav nav li').mouseenter(function () { 298 headerSubmenu.css('transform', translateYHide); 299 var submenuID = $(this).attr('id'); 300 301 if (submenuID) { 302 handleFindSubmenuElement(submenuID); 303 } 304 }); 305 $('.header__grid__nav nav li').mouseleave(function () { 306 headerSubmenu.css('transform', translateYHide); 307 }); 308 } 309 310 $('.header__grid__nav nav li.has-submenu').click(function (e) { 311 e.preventDefault(); 312 }); 313 openMobileMenuButton.on('click', function () { 314 var checkActiveClass = mobileMenu.hasClass('active'); 315 var body = $('body'); 316 317 if (checkActiveClass) { 318 headerSubmenu.css('transform', translateXHide); 319 } 320 321 body.toggleClass('active--mobile-menu'); 322 mobileMenu.toggleClass('active'); 323 $(this).toggleClass('active'); 324 }); 325 $('ul li', mobileMenu).on('click', function (e) { 326 var submenuID = $(this).attr('id'); 327 328 if ($(this).hasClass('has-submenu')) { 329 e.preventDefault(); 330 } 331 332 if (submenuID) { 333 handleFindSubmenuElement(submenuID); 334 } 335 }); 336 $('.js-back-submenu').on('click', function () { 337 var parentID = $(this).closest(headerSubmenu).data('id'); 338 $(headerSubmenu, ['data-id=' + parentID]).css('transform', translateXHide); 339 }); 340 (0,lightgallery__WEBPACK_IMPORTED_MODULE_0__["default"])(document.getElementById('lightgallery'), { 341 plugins: [lightgallery_plugins_thumbnail__WEBPACK_IMPORTED_MODULE_1__["default"], lightgallery_plugins_fullscreen__WEBPACK_IMPORTED_MODULE_2__["default"]], 342 speed: 500, 343 download: false, 344 exThumbImage: 'data-external-thumb-image' 345 }); 346}); 347 348/***/ }), 349
350/***/ "./src/js/includes.js": 351/*!****************************!*\ 352 !*** ./src/js/includes.js ***! 353 \****************************/ 354/***/ (() => { 355 356function includeHTML() { 357 var z; 358 var i; 359 var elmnt; 360 var file; 361 var xhttp; 362 /* Loop through a collection of all HTML elements: */ 363 364 z = document.getElementsByTagName('*'); // eslint-disable-next-line no-plusplus 365 366 for (i = 0; i < z.length; i++) { 367 elmnt = z[i]; 368 file = elmnt.getAttribute('w3-include-html'); 369 370 if (file) { 371 /* Make an HTTP request using the attribute value as the file name: */ 372 // eslint-disable-next-line no-undef 373 xhttp = new XMLHttpRequest(); // eslint-disable-next-line no-loop-func 374 375 xhttp.onreadystatechange = function () { 376 if (this.readyState === 4) { 377 if (this.status === 200) { 378 elmnt.innerHTML = this.responseText; 379 } 380 381 if (this.status === 404) { 382 elmnt.innerHTML = 'Page not found.'; 383 } 384 385 elmnt.removeAttribute('w3-include-html'); 386 includeHTML(); 387 } 388 }; 389 390 xhttp.open('GET', file, true); 391 xhttp.send(); 392 /* Exit the function: */ 393 394 return; 395 } 396 } 397} 398 399includeHTML(); 400 401/***/ }), 402
403/***/ "./src/js/lazyloading/jquery.lazy.min.js": 404/*!***********************************************!*\ 405 !*** ./src/js/lazyloading/jquery.lazy.min.js ***! 406 \***********************************************/ 407/***/ (() => { 408 409/*! jQuery & Zepto Lazy v1.7.10 - http://jquery.eisbehr.de/lazy - MIT&GPL-2.0 license - Copyright 2012-2018 Daniel 'Eisbehr' Kern */ 410!function (t, e) { 411 "use strict"; 412 413 function r(r, a, i, u, l) { 414 function f() { 415 L = t.devicePixelRatio > 1, i = c(i), a.delay >= 0 && setTimeout(function () { 416 s(!0); 417 }, a.delay), (a.delay < 0 || a.combined) && (u.e = v(a.throttle, function (t) { 418 "resize" === t.type && (w = B = -1), s(t.all); 419 }), u.a = function (t) { 420 t = c(t), i.push.apply(i, t); 421 }, u.g = function () { 422 return i = n(i).filter(function () { 423 return !n(this).data(a.loadedName); 424 }); 425 }, u.f = function (t) { 426 for (var e = 0; e < t.length; e++) { 427 var r = i.filter(function () { 428 return this === t[e]; 429 }); 430 r.length && s(!1, r); 431 } 432 }, s(), n(a.appendScroll).on("scroll." + l + " resize." + l, u.e)); 433 } 434 435 function c(t) { 436 var i = a.defaultImage, 437 o = a.placeholder, 438 u = a.imageBase, 439 l = a.srcsetAttribute, 440 f = a.loaderAttribute, 441 c = a._f || {}; 442 t = n(t).filter(function () { 443 var t = n(this), 444 r = m(this); 445 return !t.data(a.handledName) && (t.attr(a.attribute) || t.attr(l) || t.attr(f) || c[r] !== e); 446 }).data("plugin_" + a.name, r); 447 448 for (var s = 0, d = t.length; s < d; s++) { 449 var A = n(t[s]), 450 g = m(t[s]), 451 h = A.attr(a.imageBaseAttribute) || u; 452 g === N && h && A.attr(l) && A.attr(l, b(A.attr(l), h)), c[g] === e || A.attr(f) || A.attr(f, c[g]), g === N && i && !A.attr(E) ? A.attr(E, i) : g === N || !o || A.css(O) && "none" !== A.css(O) || A.css(O, "url('" + o + "')"); 453 } 454 455 return t; 456 } 457 458 function s(t, e) { 459 if (!i.length) return void (a.autoDestroy && r.destroy()); 460 461 for (var o = e || i, u = !1, l = a.imageBase || "", f = a.srcsetAttribute, c = a.handledName, s = 0; s < o.length; s++) { 462 if (t || e || A(o[s])) { 463 var g = n(o[s]), 464 h = m(o[s]), 465 b = g.attr(a.attribute), 466 v = g.attr(a.imageBaseAttribute) || l, 467 p = g.attr(a.loaderAttribute); 468 g.data(c) || a.visibleOnly && !g.is(":visible") || !((b || g.attr(f)) && (h === N && (v + b !== g.attr(E) || g.attr(f) !== g.attr(F)) || h !== N && v + b !== g.css(O)) || p) || (u = !0, g.data(c, !0), d(g, h, v, p)); 469 } 470 } 471 472 u && (i = n(i).filter(function () { 473 return !n(this).data(c); 474 })); 475 } 476 477 function d(t, e, r, i) { 478 ++z; 479 480 var _o = function o() { 481 y("onError", t), p(), _o = n.noop; 482 }; 483 484 y("beforeLoad", t); 485 var u = a.attribute, 486 l = a.srcsetAttribute, 487 f = a.sizesAttribute, 488 c = a.retinaAttribute, 489 s = a.removeAttribute, 490 d = a.loadedName, 491 A = t.attr(c); 492 493 if (i) { 494 var _g = function g() { 495 s && t.removeAttr(a.loaderAttribute), t.data(d, !0), y(T, t), setTimeout(p, 1), _g = n.noop; 496 }; 497 498 t.off(I).one(I, _o).one(D, _g), y(i, t, function (e) { 499 e ? (t.off(D), _g()) : (t.off(I), _o()); 500 }) || t.trigger(I); 501 } else { 502 var h = n(new Image()); 503 h.one(I, _o).one(D, function () { 504 t.hide(), e === N ? t.attr(C, h.attr(C)).attr(F, h.attr(F)).attr(E, h.attr(E)) : t.css(O, "url('" + h.attr(E) + "')"), t[a.effect](a.effectTime), s && (t.removeAttr(u + " " + l + " " + c + " " + a.imageBaseAttribute), f !== C && t.removeAttr(f)), t.data(d, !0), y(T, t), h.remove(), p(); 505 }); 506 var m = (L && A ? A : t.attr(u)) || ""; 507 h.attr(C, t.attr(f)).attr(F, t.attr(l)).attr(E, m ? r + m : null), h.complete && h.trigger(D); 508 } 509 } 510 511 function A(t) { 512 var e = t.getBoundingClientRect(), 513 r = a.scrollDirection, 514 n = a.threshold, 515 i = h() + n > e.top && -n < e.bottom, 516 o = g() + n > e.left && -n < e.right; 517 return "vertical" === r ? i : "horizontal" === r ? o : i && o; 518 } 519 520 function g() { 521 return w >= 0 ? w : w = n(t).width(); 522 } 523 524 function h() { 525 return B >= 0 ? B : B = n(t).height(); 526 } 527 528 function m(t) { 529 return t.tagName.toLowerCase(); 530 } 531 532 function b(t, e) { 533 if (e) { 534 var r = t.split(","); 535 t = ""; 536 537 for (var a = 0, n = r.length; a < n; a++) { 538 t += e + r[a].trim() + (a !== n - 1 ? "," : ""); 539 } 540 } 541 542 return t; 543 } 544 545 function v(t, e) { 546 var n, 547 i = 0; 548 return function (o, u) { 549 function l() { 550 i = +new Date(), e.call(r, o); 551 } 552 553 var f = +new Date() - i; 554 n && clearTimeout(n), f > t || !a.enableThrottle || u ? l() : n = setTimeout(l, t - f); 555 }; 556 } 557 558 function p() { 559 --z, i.length || z || y("onFinishedAll"); 560 } 561 562 function y(t, e, n) { 563 return !!(t = a[t]) && (t.apply(r, [].slice.call(arguments, 1)), !0); 564 } 565 566 var z = 0, 567 w = -1, 568 B = -1, 569 L = !1, 570 T = "afterLoad", 571 D = "load", 572 I = "error", 573 N = "img", 574 E = "src", 575 F = "srcset", 576 C = "sizes", 577 O = "background-image"; 578 "event" === a.bind || o ? f() : n(t).on(D + "." + l, f); 579 } 580 581 function a(a, o) { 582 var u = this, 583 l = n.extend({}, u.config, o), 584 f = {}, 585 c = l.name + "-" + ++i; 586 return u.config = function (t, r) { 587 return r === e ? l[t] : (l[t] = r, u); 588 }, u.addItems = function (t) { 589 return f.a && f.a("string" === n.type(t) ? n(t) : t), u; 590 }, u.getItems = function () { 591 return f.g ? f.g() : {}; 592 }, u.update = function (t) { 593 return f.e && f.e({}, !t), u; 594 }, u.force = function (t) { 595 return f.f && f.f("string" === n.type(t) ? n(t) : t), u; 596 }, u.loadAll = function () { 597 return f.e && f.e({ 598 all: !0 599 }, !0), u; 600 }, u.destroy = function () { 601 return n(l.appendScroll).off("." + c, f.e), n(t).off("." + c), f = {}, e; 602 }, r(u, l, a, f, c), l.chainable ? a : u; 603 } 604 605 var n = t.jQuery || t.Zepto, 606 i = 0, 607 o = !1; 608 n.fn.Lazy = n.fn.lazy = function (t) { 609 return new a(this, t); 610 }, n.Lazy = n.lazy = function (t, r, i) { 611 if (n.isFunction(r) && (i = r, r = []), n.isFunction(i)) { 612 t = n.isArray(t) ? t : [t], r = n.isArray(r) ? r : [r]; 613 614 for (var o = a.prototype.config, u = o._f || (o._f = {}), l = 0, f = t.length; l < f; l++) { 615 (o[t[l]] === e || n.isFunction(o[t[l]])) && (o[t[l]] = i); 616 } 617 618 for (var c = 0, s = r.length; c < s; c++) { 619 u[r[c]] = t[0]; 620 } 621 } 622 }, a.prototype.config = { 623 name: "lazy", 624 chainable: !0, 625 autoDestroy: !0, 626 bind: "load", 627 threshold: 500, 628 visibleOnly: !1, 629 appendScroll: t, 630 scrollDirection: "both", 631 imageBase: null, 632 defaultImage: "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==", 633 placeholder: null, 634 delay: -1, 635 combined: !1, 636 attribute: "data-src", 637 srcsetAttribute: "data-srcset", 638 sizesAttribute: "data-sizes", 639 retinaAttribute: "data-retina", 640 loaderAttribute: "data-loader", 641 imageBaseAttribute: "data-imagebase", 642 removeAttribute: !0, 643 handledName: "handled", 644 loadedName: "loaded", 645 effect: "show", 646 effectTime: 0, 647 enableThrottle: !0, 648 throttle: 250, 649 beforeLoad: e, 650 afterLoad: e, 651 onError: e, 652 onFinishedAll: e 653 }, n(t).on("load", function () { 654 o = !0; 655 }); 656}(window); 657 658/***/ }), 659
660/***/ "./src/js/lazyloading/jquery.lazy.plugins.min.js": 661/*!*******************************************************!*\ 662 !*** ./src/js/lazyloading/jquery.lazy.plugins.min.js ***! 663 \*******************************************************/ 664/***/ (() => { 665 666/*! jQuery & Zepto Lazy - All Plugins v1.7.10 - http://jquery.eisbehr.de/lazy - MIT&GPL-2.0 license - Copyright 2012-2018 Daniel 'Eisbehr' Kern */ 667!function (t) { 668 function a(a, e, r, o) { 669 o = o ? o.toUpperCase() : "GET"; 670 var i; 671 "POST" !== o && "PUT" !== o || !a.config("ajaxCreateData") || (i = a.config("ajaxCreateData").apply(a, [e])), t.ajax({ 672 url: e.attr("data-src"), 673 type: "POST" === o || "PUT" === o ? o : "GET", 674 data: i, 675 dataType: e.attr("data-type") || "html", 676 success: function success(t) { 677 e.html(t), r(!0), a.config("removeAttribute") && e.removeAttr("data-src data-method data-type"); 678 }, 679 error: function error() { 680 r(!1); 681 } 682 }); 683 } 684 685 t.lazy("ajax", function (t, e) { 686 a(this, t, e, t.attr("data-method")); 687 }), t.lazy("get", function (t, e) { 688 a(this, t, e, "GET"); 689 }), t.lazy("post", function (t, e) { 690 a(this, t, e, "POST"); 691 }), t.lazy("put", function (t, e) { 692 a(this, t, e, "PUT"); 693 }); 694}(window.jQuery || window.Zepto), function (t) { 695 t.lazy(["av", "audio", "video"], ["audio", "video"], function (a, e) { 696 var r = a[0].tagName.toLowerCase(); 697 698 if ("audio" === r || "video" === r) { 699 var o = a.find("data-src"), 700 i = a.find("data-track"), 701 n = 0, 702 c = function c() { 703 ++n === o.length && e(!1); 704 }, 705 s = function s() { 706 var a = t(this), 707 e = a[0].tagName.toLowerCase(), 708 r = a.prop("attributes"), 709 o = t("data-src" === e ? "<source>" : "<track>"); 710 "data-src" === e && o.one("error", c), t.each(r, function (t, a) { 711 o.attr(a.name, a.value); 712 }), a.replaceWith(o); 713 }; 714 715 a.one("loadedmetadata", function () { 716 e(!0); 717 }).off("load error").attr("poster", a.attr("data-poster")), o.length ? o.each(s) : a.attr("data-src") ? (t.each(a.attr("data-src").split(","), function (e, r) { 718 var o = r.split("|"); 719 a.append(t("<source>").one("error", c).attr({ 720 src: o[0].trim(), 721 type: o[1].trim() 722 })); 723 }), this.config("removeAttribute") && a.removeAttr("data-src")) : e(!1), i.length && i.each(s); 724 } else e(!1); 725 }); 726}(window.jQuery || window.Zepto), function (t) { 727 t.lazy(["frame", "iframe"], "iframe", function (a, e) { 728 var r = this; 729 730 if ("iframe" === a[0].tagName.toLowerCase()) { 731 var o = a.attr("data-error-detect"); 732 "true" !== o && "1" !== o ? (a.attr("src", a.attr("data-src")), r.config("removeAttribute") && a.removeAttr("data-src data-error-detect")) : t.ajax({ 733 url: a.attr("data-src"), 734 dataType: "html", 735 crossDomain: !0, 736 xhrFields: { 737 withCredentials: !0 738 }, 739 success: function success(t) { 740 a.html(t).attr("src", a.attr("data-src")), r.config("removeAttribute") && a.removeAttr("data-src data-error-detect"); 741 }, 742 error: function error() { 743 e(!1); 744 } 745 }); 746 } else e(!1); 747 }); 748}(window.jQuery || window.Zepto), function (t) { 749 t.lazy("noop", function () {}), t.lazy("noop-success", function (t, a) { 750 a(!0); 751 }), t.lazy("noop-error", function (t, a) { 752 a(!1); 753 }); 754}(window.jQuery || window.Zepto), function (t) { 755 function a(a, e, i) { 756 var n = a.prop("attributes"), 757 c = t("<" + e + ">"); 758 return t.each(n, function (t, a) { 759 "srcset" !== a.name && a.name !== o || (a.value = r(a.value, i)), c.attr(a.name, a.value); 760 }), a.replaceWith(c), c; 761 } 762 763 function e(a, e, r) { 764 var o = t("<img>").one("load", function () { 765 r(!0); 766 }).one("error", function () { 767 r(!1); 768 }).appendTo(a).attr("src", e); 769 o.complete && o.load(); 770 } 771 772 function r(t, a) { 773 if (a) { 774 var e = t.split(","); 775 t = ""; 776 777 for (var r = 0, o = e.length; r < o; r++) { 778 t += a + e[r].trim() + (r !== o - 1 ? "," : ""); 779 } 780 } 781 782 return t; 783 } 784 785 var o = "data-src"; 786 t.lazy(["pic", "picture"], ["picture"], function (i, n) { 787 if ("picture" === i[0].tagName.toLowerCase()) { 788 var c = i.find(o), 789 s = i.find("data-img"), 790 d = this.config("imageBase") || ""; 791 c.length ? (c.each(function () { 792 a(t(this), "source", d); 793 }), 1 === s.length ? (s = a(s, "img", d), s.on("load", function () { 794 n(!0); 795 }).on("error", function () { 796 n(!1); 797 }), s.attr("src", s.attr(o)), this.config("removeAttribute") && s.removeAttr(o)) : i.attr(o) ? (e(i, d + i.attr(o), n), this.config("removeAttribute") && i.removeAttr(o)) : n(!1)) : i.attr("data-srcset") ? (t("<source>").attr({ 798 media: i.attr("data-media"), 799 sizes: i.attr("data-sizes"), 800 type: i.attr("data-type"), 801 srcset: r(i.attr("data-srcset"), d) 802 }).appendTo(i), e(i, d + i.attr(o), n), this.config("removeAttribute") && i.removeAttr(o + " data-srcset data-media data-sizes data-type")) : n(!1); 803 } else n(!1); 804 }); 805}(window.jQuery || window.Zepto), function (t) { 806 t.lazy(["js", "javascript", "script"], "script", function (t, a) { 807 "script" === t[0].tagName.toLowerCase() ? (t.attr("src", t.attr("data-src")), this.config("removeAttribute") && t.removeAttr("data-src")) : a(!1); 808 }); 809}(window.jQuery || window.Zepto), function (t) { 810 t.lazy("vimeo", function (t, a) { 811 "iframe" === t[0].tagName.toLowerCase() ? (t.attr("src", "https://player.vimeo.com/video/" + t.attr("data-src")), this.config("removeAttribute") && t.removeAttr("data-src")) : a(!1); 812 }); 813}(window.jQuery || window.Zepto), function (t) { 814 t.lazy(["yt", "youtube"], function (t, a) { 815 if ("iframe" === t[0].tagName.toLowerCase()) { 816 var e = /1|true/.test(t.attr("data-nocookie")); 817 t.attr("src", "https://www.youtube" + (e ? "-nocookie" : "") + ".com/embed/" + t.attr("data-src") + "?rel=0&showinfo=0"), this.config("removeAttribute") && t.removeAttr("data-src"); 818 } else a(!1); 819 }); 820}(window.jQuery || window.Zepto); 821 822/***/ }), 823
824/***/ "./src/js/listing.js": 825/*!***************************!*\ 826 !*** ./src/js/listing.js ***! 827 \***************************/ 828/***/ (() => { 829 830$(document).ready(function () { 831 var load_container = $('.js-load-listing'); 832 var listing_loader = $('.js-listing-loader'); 833 var show_more_btn = $('.js-show-more-articles'); 834 var post_per_page = $(load_container).data('post-per-page'); 835 var exclude_posts = $(load_container).data('exclude-posts'); 836 var api_url = $(load_container).data('api-url'); 837 var sidebar_tab = $(load_container).data('sidebar-tab'); 838 var is_editor = $(load_container).data('editor'); 839 var page_to_load = parseInt($(load_container).data('auto-loading-count')); 840 var last_offset = parseInt($(load_container).data('last-offset')); 841 var current_active = false; 842 var heightWindow = $(window).height(); 843 var heightFooter = $('footer').height(); 844 845 if ($(load_container).length) { 846 $(window).scroll(function () { 847 var heightDoc = $(document).height(); 848 var heightScroll = $(window).scrollTop(); 849 var heightScrollDown = heightWindow + heightScroll; 850 var heightDocWithoutFooter = heightDoc - heightFooter; 851 852 if (heightScrollDown > heightDocWithoutFooter * 0.8) { 853 loadPosts(); 854 } 855 }); 856 } 857 858 function loadPosts() { 859 if (current_active || page_to_load == 0) return false; 860 current_active = true; 861 $(listing_loader).addClass('show'); 862 $.post(api_url, { 863 "post_per_page": post_per_page, 864 "last_offset": last_offset, 865 'exclude_posts': exclude_posts, 866 'sidebar_tab': sidebar_tab, 867 'is_editor': is_editor 868 }, function (data) { 869 if (!data.html) return; 870 current_active = false; 871 page_to_load--; 872 last_offset += data.post_loaded; 873 $(listing_loader).removeClass('show'); 874 $(load_container).append(data.html); 875 876 if (window.innerWidth > 1025) { 877 $(load_container).find('div[data-remove="desktop"]').remove(); 878 } 879 880 setTimeout(function () { 881 $(load_container).find('.lazy').Lazy({ 882 afterLoad: function afterLoad(element) { 883 element.css('opacity', 1); 884 } 885 }); 886 }, 300); 887 888 if (page_to_load == 0 && data.last_post_id) { 889 var path = "?check-page=" + data.last_post_id; 890 $(show_more_btn).attr('href', path); 891 $(show_more_btn).show(); 892 } 893 }).fail(function () { 894 current_active = false; 895 }); 896 } 897}); 898 899/***/ }), 900
901/***/ "./src/js/owl-carouse.min.js": 902/*!***********************************!*\ 903 !*** ./src/js/owl-carouse.min.js ***! 904 \***********************************/ 905/***/ (() => { 906 907function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } 908 909/** 910 * Owl Carousel v2.3.4 911 * Copyright 2013-2018 David Deutsch 912 * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 913 */ 914!function (a, b, c, d) { 915 function e(b, c) { 916 this.settings = null, this.options = a.extend({}, e.Defaults, c), this.$element = a(b), this._handlers = {}, this._plugins = {}, this._supress = {}, this._current = null, this._speed = null, this._coordinates = [], this._breakpoint = null, this._width = null, this._items = [], this._clones = [], this._mergers = [], this._widths = [], this._invalidated = {}, this._pipe = [], this._drag = { 917 time: null, 918 target: null, 919 pointer: null, 920 stage: { 921 start: null, 922 current: null 923 }, 924 direction: null 925 }, this._states = { 926 current: {}, 927 tags: { 928 initializing: ["busy"], 929 animating: ["busy"], 930 dragging: ["interacting"] 931 } 932 }, a.each(["onResize", "onThrottledResize"], a.proxy(function (b, c) { 933 this._handlers[c] = a.proxy(this[c], this); 934 }, this)), a.each(e.Plugins, a.proxy(function (a, b) { 935 this._plugins[a.charAt(0).toLowerCase() + a.slice(1)] = new b(this); 936 }, this)), a.each(e.Workers, a.proxy(function (b, c) { 937 this._pipe.push({ 938 filter: c.filter, 939 run: a.proxy(c.run, this) 940 }); 941 }, this)), this.setup(), this.initialize(); 942 } 943 944 e.Defaults = { 945 items: 3, 946 loop: !1, 947 center: !1, 948 rewind: !1, 949 checkVisibility: !0, 950 mouseDrag: !0, 951 touchDrag: !0, 952 pullDrag: !0, 953 freeDrag: !1, 954 margin: 0, 955 stagePadding: 0, 956 merge: !1, 957 mergeFit: !0, 958 autoWidth: !1, 959 startPosition: 0, 960 rtl: !1, 961 smartSpeed: 250, 962 fluidSpeed: !1, 963 dragEndSpeed: !1, 964 responsive: {}, 965 responsiveRefreshRate: 200, 966 responsiveBaseElement: b, 967 fallbackEasing: "swing", 968 slideTransition: "", 969 info: !1, 970 nestedItemSelector: !1, 971 itemElement: "div", 972 stageElement: "div", 973 refreshClass: "owl-refresh", 974 loadedClass: "owl-loaded", 975 loadingClass: "owl-loading", 976 rtlClass: "owl-rtl", 977 responsiveClass: "owl-responsive", 978 dragClass: "owl-drag", 979 itemClass: "owl-item", 980 stageClass: "owl-stage", 981 stageOuterClass: "owl-stage-outer", 982 grabClass: "owl-grab" 983 }, e.Width = { 984 Default: "default", 985 Inner: "inner", 986 Outer: "outer" 987 }, e.Type = { 988 Event: "event", 989 State: "state" 990 }, e.Plugins = {}, e.Workers = [{ 991 filter: ["width", "settings"], 992 run: function run() { 993 this._width = this.$element.width(); 994 } 995 }, { 996 filter: ["width", "items", "settings"], 997 run: function run(a) { 998 a.current = this._items && this._items[this.relative(this._current)]; 999 } 1000 }, { 1001 filter: ["items", "settings"], 1002 run: function run() { 1003 this.$stage.children(".cloned").remove(); 1004 } 1005 }, { 1006 filter: ["width", "items", "settings"], 1007 run: function run(a) { 1008 var b = this.settings.margin || "", 1009 c = !this.settings.autoWidth, 1010 d = this.settings.rtl, 1011 e = { 1012 width: "auto", 1013 "margin-left": d ? b : "", 1014 "margin-right": d ? "" : b 1015 }; 1016 !c && this.$stage.children().css(e), a.css = e; 1017 } 1018 }, { 1019 filter: ["width", "items", "settings"], 1020 run: function run(a) { 1021 var b = (this.width() / this.settings.items).toFixed(3) - this.settings.margin, 1022 c = null, 1023 d = this._items.length, 1024 e = !this.settings.autoWidth, 1025 f = []; 1026 1027 for (a.items = { 1028 merge: !1, 1029 width: b 1030 }; d--;) { 1031 c = this._mergers[d], c = this.settings.mergeFit && Math.min(c, this.settings.items) || c, a.items.merge = c > 1 || a.items.merge, f[d] = e ? b * c : this._items[d].width(); 1032 } 1033 1034 this._widths = f; 1035 } 1036 }, { 1037 filter: ["items", "settings"], 1038 run: function run() { 1039 var b = [], 1040 c = this._items, 1041 d = this.settings, 1042 e = Math.max(2 * d.items, 4), 1043 f = 2 * Math.ceil(c.length / 2), 1044 g = d.loop && c.length ? d.rewind ? e : Math.max(e, f) : 0, 1045 h = "", 1046 i = ""; 1047 1048 for (g /= 2; g > 0;) { 1049 b.push(this.normalize(b.length / 2, !0)), h += c[b[b.length - 1]][0].outerHTML, b.push(this.normalize(c.length - 1 - (b.length - 1) / 2, !0)), i = c[b[b.length - 1]][0].outerHTML + i, g -= 1; 1050 } 1051 1052 this._clones = b, a(h).addClass("cloned").appendTo(this.$stage), a(i).addClass("cloned").prependTo(this.$stage); 1053 } 1054 }, { 1055 filter: ["width", "items", "settings"], 1056 run: function run() { 1057 for (var a = this.settings.rtl ? 1 : -1, b = this._clones.length + this._items.length, c = -1, d = 0, e = 0, f = []; ++c < b;) { 1058 d = f[c - 1] || 0, e = this._widths[this.relative(c)] + this.settings.margin, f.pu
1058sh(d + e * a); 1059 } 1060 1061 this._coordinates = f; 1062 } 1063 }, { 1064 filter: ["width", "items", "settings"], 1065 run: function run() { 1066 var a = this.settings.stagePadding, 1067 b = this._coordinates, 1068 c = { 1069 width: Math.ceil(Math.abs(b[b.length - 1])) + 2 * a, 1070 "padding-left": a || "", 1071 "padding-right": a || "" 1072 }; 1073 this.$stage.css(c); 1074 } 1075 }, { 1076 filter: ["width", "items", "settings"], 1077 run: function run(a) { 1078 var b = this._coordinates.length, 1079 c = !this.settings.autoWidth, 1080 d = this.$stage.children(); 1081 if (c && a.items.merge) for (; b--;) { 1082 a.css.width = this._widths[this.relative(b)], d.eq(b).css(a.css); 1083 } else c && (a.css.width = a.items.width, d.css(a.css)); 1084 } 1085 }, { 1086 filter: ["items"], 1087 run: function run() { 1088 this._coordinates.length < 1 && this.$stage.removeAttr("style"); 1089 } 1090 }, { 1091 filter: ["width", "items", "settings"], 1092 run: function run(a) { 1093 a.current = a.current ? this.$stage.children().index(a.current) : 0, a.current = Math.max(this.minimum(), Math.min(this.maximum(), a.current)), this.reset(a.current); 1094 } 1095 }, { 1096 filter: ["position"], 1097 run: function run() { 1098 this.animate(this.coordinates(this._current)); 1099 } 1100 }, { 1101 filter: ["width", "position", "items", "settings"], 1102 run: function run() { 1103 var a, 1104 b, 1105 c, 1106 d, 1107 e = this.settings.rtl ? 1 : -1, 1108 f = 2 * this.settings.stagePadding, 1109 g = this.coordinates(this.current()) + f, 1110 h = g + this.width() * e, 1111 i = []; 1112 1113 for (c = 0, d = this._coordinates.length; c < d; c++) { 1114 a = this._coordinates[c - 1] || 0, b = Math.abs(this._coordinates[c]) + f * e, (this.op(a, "<=", g) && this.op(a, ">", h) || this.op(b, "<", g) && this.op(b, ">", h)) && i.push(c); 1115 } 1116 1117 this.$stage.children(".active").removeClass("active"), this.$stage.children(":eq(" + i.join("), :eq(") + ")").addClass("active"), this.$stage.children(".center").removeClass("center"), this.settings.center && this.$stage.children().eq(this.current()).addClass("center"); 1118 } 1119 }], e.prototype.initializeStage = function () { 1120 this.$stage = this.$element.find("." + this.settings.stageClass), this.$stage.length || (this.$element.addClass(this.options.loadingClass), this.$stage = a("<" + this.settings.stageElement + ">", { 1121 class: this.settings.stageClass 1122 }).wrap(a("<div/>", { 1123 class: this.settings.stageOuterClass 1124 })), this.$element.append(this.$stage.parent())); 1125 }, e.prototype.initializeItems = function () { 1126 var b = this.$element.find(".owl-item"); 1127 if (b.length) return this._items = b.get().map(function (b) { 1128 return a(b); 1129 }), this._mergers = this._items.map(function () { 1130 return 1; 1131 }), void this.refresh(); 1132 this.replace(this.$element.children().not(this.$stage.parent())), this.isVisible() ? this.refresh() : this.invalidate("width"), this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass); 1133 }, e.prototype.initialize = function () { 1134 if (this.enter("initializing"), this.trigger("initialize"), this.$element.toggleClass(this.settings.rtlClass, this.settings.rtl), this.settings.autoWidth && !this.is("pre-loading")) { 1135 var a, b, c; 1136 a = this.$element.find("img"), b = this.settings.nestedItemSelector ? "." + this.settings.nestedItemSelector : d, c = this.$element.children(b).width(), a.length && c <= 0 && this.preloadAutoWidthImages(a); 1137 } 1138 1139 this.initializeStage(), this.initializeItems(), this.registerEventHandlers(), this.leave("initializing"), this.trigger("initialized"); 1140 }, e.prototype.isVisible = function () { 1141 return !this.settings.checkVisibility || this.$element.is(":visible"); 1142 }, e.prototype.setup = function () { 1143 var b = this.viewport(), 1144 c = this.options.responsive, 1145 d = -1, 1146 e = null; 1147 c ? (a.each(c, function (a) { 1148 a <= b && a > d && (d = Number(a)); 1149 }), e = a.extend({}, this.options, c[d]), "function" == typeof e.stagePadding && (e.stagePadding = e.stagePadding()), delete e.responsive, e.responsiveClass && this.$element.attr("class", this.$element.attr("class").replace(new RegExp("(" + this.options.responsiveClass + "-)\\S+\\s", "g"), "$1" + d))) : e = a.extend({}, this.options), this.trigger("change", { 1150 property: { 1151 name: "settings", 1152 value: e 1153 } 1154 }), this._breakpoint = d, this.settings = e, this.invalidate("settings"), this.trigger("changed", { 1155 property: { 1156 name: "settings", 1157 value: this.settings 1158 } 1159 }); 1160 }, e.prototype.optionsLogic = function () { 1161 this.settings.autoWidth && (this.settings.stagePadding = !1, this.settings.merge = !1); 1162 }, e.prototype.prepare = function (b) { 1163 var c = this.trigger("prepare", { 1164 content: b 1165 }); 1166 return c.data || (c.data = a("<" + this.settings.itemElement + "/>").addClass(this.options.itemClass).append(b)), this.trigger("prepared", { 1167 content: c.data 1168 }), c.data; 1169 }, e.prototype.update = function () { 1170 for (var b = 0, c = this._pipe.length, d = a.proxy(function (a) { 1171 return this[a]; 1172 }, this._invalidated), e = {}; b < c;) { 1173 (this._invalidated.all || a.grep(this._pipe[b].filter, d).length > 0) && this._pipe[b].run(e), b++; 1174 } 1175 1176 this._invalidated = {}, !this.is("valid") && this.enter("valid"); 1177 }, e.prototype.width = function (a) { 1178 switch (a = a || e.Width.Default) { 1179 case e.Width.Inner: 1180 case e.Width.Outer: 1181 return this._width; 1182 1183 default: 1184 return this._width - 2 * this.settings.stagePadding + this.settings.margin; 1185 } 1186 }, e.prototype.refresh = function () { 1187 this.enter("refreshing"), this.trigger("refresh"), this.setup(), this.optionsLogic(), this.$element.addClass(this.options.refreshClass), this.update(), this.$element.removeClass(this.options.refreshClass), this.leave("refreshing"), this.trigger("refreshed"); 1188 }, e.prototype.onThrottledResize = function () { 1189 b.clearTimeout(this.resizeTimer), this.resizeTimer = b.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate); 1190 }, e.prototype.onResize = function () { 1191 return !!this._items.length && this._width !== this.$element.width() && !!this.isVisible() && (this.enter("resizing"), this.trigger("resize").isDefaultPrevented() ? (this.leave("resizing"), !1) : (this.invalidate("width"), this.refresh(), this.leave("resizing"), void this.trigger("resized"))); 1192 }, e.prototype.registerEventHandlers = function () { 1193 a.support.transition && this.$stage.on(a.support.transition.end + ".owl.core", a.proxy(this.onTransitionEnd, this)), !1 !== this.settings.responsive && this.on(b, "resize", this._handlers.onThrottledResize), this.settings.mouseDrag && (this.$element.addClass(this.options.dragClass), this.$stage.on("mousedown.owl.core", a.proxy(this.onDragStart, this)), this.$stage.on("dragstart.owl.core selectstart.owl.core", function () { 1194 return !1; 1195 })), this.settings.touchDrag && (this.$stage.on("touchstart.owl.core", a.proxy(this.onDragStart, this)), this.$stage.on("touchcancel.owl.core", a.proxy(this.onDragEnd, this))); 1196 }, e.prototype.onDragStart = function (b) { 1197 var d = null; 1198 3 !== b.which && (a.support.transform ? (d = this.$stage.css("transform").replace(/.*\(|\)| /g, "").split(","), d = { 1199 x: d[16 === d.length ? 12 : 4],
vendor: 14,105 bytes, lines 1200-1427
1200 y: d[16 === d.length ? 13 : 5] 1201 }) : (d = this.$stage.position(), d = { 1202 x: this.settings.rtl ? d.left + this.$stage.width() - this.width() + this.settings.margin : d.left, 1203 y: d.top 1204 }), this.is("animating") && (a.support.transform ? this.animate(d.x) : this.$stage.stop(), this.invalidate("position")), this.$element.toggleClass(this.options.grabClass, "mousedown" === b.type), this.speed(0), this._drag.time = new Date().getTime(), this._drag.target = a(b.target), this._drag.stage.start = d, this._drag.stage.current = d, this._drag.pointer = this.pointer(b), a(c).on("mouseup.owl.core touchend.owl.core", a.proxy(this.onDragEnd, this)), a(c).one("mousemove.owl.core touchmove.owl.core", a.proxy(function (b) { 1205 var d = this.difference(this._drag.pointer, this.pointer(b)); 1206 a(c).on("mousemove.owl.core touchmove.owl.core", a.proxy(this.onDragMove, this)), Math.abs(d.x) < Math.abs(d.y) && this.is("valid") || (b.preventDefault(), this.enter("dragging"), this.trigger("drag")); 1207 }, this))); 1208 }, e.prototype.onDragMove = function (a) { 1209 var b = null, 1210 c = null, 1211 d = null, 1212 e = this.difference(this._drag.pointer, this.pointer(a)), 1213 f = this.difference(this._drag.stage.start, e); 1214 this.is("dragging") && (a.preventDefault(), this.settings.loop ? (b = this.coordinates(this.minimum()), c = this.coordinates(this.maximum() + 1) - b, f.x = ((f.x - b) % c + c) % c + b) : (b = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum()), c = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum()), d = this.settings.pullDrag ? -1 * e.x / 5 : 0, f.x = Math.max(Math.min(f.x, b + d), c + d)), this._drag.stage.current = f, this.animate(f.x)); 1215 }, e.prototype.onDragEnd = function (b) { 1216 var d = this.difference(this._drag.pointer, this.pointer(b)), 1217 e = this._drag.stage.current, 1218 f = d.x > 0 ^ this.settings.rtl ? "left" : "right"; 1219 a(c).off(".owl.core"), this.$element.removeClass(this.options.grabClass), (0 !== d.x && this.is("dragging") || !this.is("valid")) && (this.speed(this.settings.dragEndSpeed || this.settings.smartSpeed), this.current(this.closest(e.x, 0 !== d.x ? f : this._drag.direction)), this.invalidate("position"), this.update(), this._drag.direction = f, (Math.abs(d.x) > 3 || new Date().getTime() - this._drag.time > 300) && this._drag.target.one("click.owl.core", function () { 1220 return !1; 1221 })), this.is("dragging") && (this.leave("dragging"), this.trigger("dragged")); 1222 }, e.prototype.closest = function (b, c) { 1223 var e = -1, 1224 f = 30, 1225 g = this.width(), 1226 h = this.coordinates(); 1227 return this.settings.freeDrag || a.each(h, a.proxy(function (a, i) { 1228 return "left" === c && b > i - f && b < i + f ? e = a : "right" === c && b > i - g - f && b < i - g + f ? e = a + 1 : this.op(b, "<", i) && this.op(b, ">", h[a + 1] !== d ? h[a + 1] : i - g) && (e = "left" === c ? a + 1 : a), -1 === e; 1229 }, this)), this.settings.loop || (this.op(b, ">", h[this.minimum()]) ? e = b = this.minimum() : this.op(b, "<", h[this.maximum()]) && (e = b = this.maximum())), e; 1230 }, e.prototype.animate = function (b) { 1231 var c = this.speed() > 0; 1232 this.is("animating") && this.onTransitionEnd(), c && (this.enter("animating"), this.trigger("translate")), a.support.transform3d && a.support.transition ? this.$stage.css({ 1233 transform: "translate3d(" + b + "px,0px,0px)", 1234 transition: this.speed() / 1e3 + "s" + (this.settings.slideTransition ? " " + this.settings.slideTransition : "") 1235 }) : c ? this.$stage.animate({ 1236 left: b + "px" 1237 }, this.speed(), this.settings.fallbackEasing, a.proxy(this.onTransitionEnd, this)) : this.$stage.css({ 1238 left: b + "px" 1239 }); 1240 }, e.prototype.is = function (a) { 1241 return this._states.current[a] && this._states.current[a] > 0; 1242 }, e.prototype.current = function (a) { 1243 if (a === d) return this._current; 1244 if (0 === this._items.length) return d; 1245 1246 if (a = this.normalize(a), this._current !== a) { 1247 var b = this.trigger("change", { 1248 property: { 1249 name: "position", 1250 value: a 1251 } 1252 }); 1253 b.data !== d && (a = this.normalize(b.data)), this._current = a, this.invalidate("position"), this.trigger("changed", { 1254 property: { 1255 name: "position", 1256 value: this._current 1257 } 1258 }); 1259 } 1260 1261 return this._current; 1262 }, e.prototype.invalidate = function (b) { 1263 return "string" === a.type(b) && (this._invalidated[b] = !0, this.is("valid") && this.leave("valid")), a.map(this._invalidated, function (a, b) { 1264 return b; 1265 }); 1266 }, e.prototype.reset = function (a) { 1267 (a = this.normalize(a)) !== d && (this._speed = 0, this._current = a, this.suppress(["translate", "translated"]), this.animate(this.coordinates(a)), this.release(["translate", "translated"])); 1268 }, e.prototype.normalize = function (a, b) { 1269 var c = this._items.length, 1270 e = b ? 0 : this._clones.length; 1271 return !this.isNumeric(a) || c < 1 ? a = d : (a < 0 || a >= c + e) && (a = ((a - e / 2) % c + c) % c + e / 2), a; 1272 }, e.prototype.relative = function (a) { 1273 return a -= this._clones.length / 2, this.normalize(a, !0); 1274 }, e.prototype.maximum = function (a) { 1275 var b, 1276 c, 1277 d, 1278 e = this.settings, 1279 f = this._coordinates.length; 1280 if (e.loop) f = this._clones.length / 2 + this._items.length - 1;else if (e.autoWidth || e.merge) { 1281 if (b = this._items.length) for (c = this._items[--b].width(), d = this.$element.width(); b-- && !((c += this._items[b].width() + this.settings.margin) > d);) { 1282 ; 1283 } 1284 f = b + 1; 1285 } else f = e.center ? this._items.length - 1 : this._items.length - e.items; 1286 return a && (f -= this._clones.length / 2), Math.max(f, 0); 1287 }, e.prototype.minimum = function (a) { 1288 return a ? 0 : this._clones.length / 2; 1289 }, e.prototype.items = function (a) { 1290 return a === d ? this._items.slice() : (a = this.normalize(a, !0), this._items[a]); 1291 }, e.prototype.mergers = function (a) { 1292 return a === d ? this._mergers.slice() : (a = this.normalize(a, !0), this._mergers[a]); 1293 }, e.prototype.clones = function (b) { 1294 var c = this._clones.length / 2, 1295 e = c + this._items.length, 1296 f = function f(a) { 1297 return a % 2 == 0 ? e + a / 2 : c - (a + 1) / 2; 1298 }; 1299 1300 return b === d ? a.map(this._clones, function (a, b) { 1301 return f(b); 1302 }) : a.map(this._clones, function (a, c) { 1303 return a === b ? f(c) : null; 1304 }); 1305 }, e.prototype.speed = function (a) { 1306 return a !== d && (this._speed = a), this._speed; 1307 }, e.prototype.coordinates = function (b) { 1308 var c, 1309 e = 1, 1310 f = b - 1; 1311 return b === d ? a.map(this._coordinates, a.proxy(function (a, b) { 1312 return this.coordinates(b); 1313 }, this)) : (this.settings.center ? (this.settings.rtl && (e = -1, f = b + 1), c = this._coordinates[b], c += (this.width() - c + (this._coordinates[f] || 0)) / 2 * e) : c = this._coordinates[f] || 0, c = Math.ceil(c)); 1314 }, e.prototype.duration = function (a, b, c) { 1315 return 0 === c ? 0 : Math.min(Math.max(Math.abs(b - a), 1), 6) * Math.abs(c || this.settings.smartSpeed); 1316 }, e.prototype.to = function (a, b) { 1317 var c = this.current(), 1318 d = null, 1319 e = a - this.relative(c), 1320 f = (e > 0) - (e < 0), 1321 g = this._items.length, 1322 h = this.minimum(), 1323 i = this.maximum(); 1324 this.settings.loop ? (!this.settings.rewind && Math.abs(e) > g / 2 && (e += -1 * f * g), a = c + e, (d = ((a - h) % g + g) % g + h) !== a && d - e <= i && d - e > 0 && (c = d - e, a = d, this.reset(c))) : this.settings.rewind ? (i += 1, a = (a % i + i) % i) : a = Math.max(h, Math.min(i, a)), this.speed(this.duration(c, a, b)), this.current(a), this.isVisible() && this.update(); 1325 }, e.prototype.next = function (a) { 1326 a = a || !1, this.to(this.relative(this.current()) + 1, a); 1327 }, e.prototype.prev = function (a) { 1328 a = a || !1, this.to(this.relative(this.current()) - 1, a); 1329 }, e.prototype.onTransitionEnd = function (a) { 1330 if (a !== d && (a.stopPropagation(), (a.target || a.srcElement || a.originalTarget) !== this.$stage.get(0))) return !1; 1331 this.leave("animating"), this.trigger("translated"); 1332 }, e.prototype.viewport = function () { 1333 var d; 1334 return this.options.responsiveBaseElement !== b ? d = a(this.options.responsiveBaseElement).width() : b.innerWidth ? d = b.innerWidth : c.documentElement && c.documentElement.clientWidth ? d = c.documentElement.clientWidth : console.warn("Can not detect viewport width."), d; 1335 }, e.prototype.replace = function (b) { 1336 this.$stage.empty(), this._items = [], b && (b = b instanceof jQuery ? b : a(b)), this.settings.nestedItemSelector && (b = b.find("." + this.settings.nestedItemSelector)), b.filter(function () { 1337 return 1 === this.nodeType; 1338 }).each(a.proxy(function (a, b) { 1339 b = this.prepare(b), this.$stage.append(b), this._items.push(b), this._mergers.push(1 * b.find("[data-merge]").addBack("[data-merge]").attr("data-merge") || 1); 1340 }, this)), this.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0), this.invalidate("items"); 1341 }, e.prototype.add = function (b, c) { 1342 var e = this.relative(this._current); 1343 c = c === d ? this._items.length : this.normalize(c, !0), b = b instanceof jQuery ? b : a(b), this.trigger("add", { 1344 content: b, 1345 position: c 1346 }), b = this.prepare(b), 0 === this._items.length || c === this._items.length ? (0 === this._items.length && this.$stage.append(b), 0 !== this._items.length && this._items[c - 1].after(b), this._items.push(b), this._mergers.push(1 * b.find("[data-merge]").addBack("[data-merge]").attr("data-merge") || 1)) : (this._items[c].before(b), this._items.splice(c, 0, b), this._mergers.splice(c, 0, 1 * b.find("[data-merge]").addBack("[data-merge]").attr("data-merge") || 1)), this._items[e] && this.reset(this._items[e].index()), this.invalidate("items"), this.trigger("added", { 1347 content: b, 1348 position: c 1349 }); 1350 }, e.prototype.remove = function (a) { 1351 (a = this.normalize(a, !0)) !== d && (this.trigger("remove", { 1352 content: this._items[a], 1353 position: a 1354 }), this._items[a].remove(), this._items.splice(a, 1), this._mergers.splice(a, 1), this.invalidate("items"), this.trigger("removed", { 1355 content: null, 1356 position: a 1357 })); 1358 }, e.prototype.preloadAutoWidthImages = function (b) { 1359 b.each(a.proxy(function (b, c) { 1360 this.enter("pre-loading"), c = a(c), a(new Image()).one("load", a.proxy(function (a) { 1361 c.attr("src", a.target.src), c.css("opacity", 1), this.leave("pre-loading"), !this.is("pre-loading") && !this.is("initializing") && this.refresh(); 1362 }, this)).attr("src", c.attr("src") || c.attr("data-src") || c.attr("data-src-retina")); 1363 }, this)); 1364 }, e.prototype.destroy = function () { 1365 this.$element.off(".owl.core"), this.$stage.off(".owl.core"), a(c).off(".owl.core"), !1 !== this.settings.responsive && (b.clearTimeout(this.resizeTimer), this.off(b, "resize", this._handlers.onThrottledResize)); 1366 1367 for (var d in this._plugins) { 1368 this._plugins[d].destroy(); 1369 } 1370 1371 this.$stage.children(".cloned").remove(), this.$stage.unwrap(), this.$stage.children().contents().unwrap(), this.$stage.children().unwrap(), this.$stage.remove(), this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr("class", this.$element.attr("class").replace(new RegExp(this.options.responsiveClass + "-\\S+\\s", "g"), "")).removeData("owl.carousel"); 1372 }, e.prototype.op = function (a, b, c) { 1373 var d = this.settings.rtl; 1374 1375 switch (b) { 1376 case "<": 1377 return d ? a > c : a < c; 1378 1379 case ">": 1380 return d ? a < c : a > c; 1381 1382 case ">=": 1383 return d ? a <= c : a >= c; 1384 1385 case "<=": 1386 return d ? a >= c : a <= c; 1387 } 1388 }, e.prototype.on = function (a, b, c, d) { 1389 a.addEventListener ? a.addEventListener(b, c, d) : a.attachEvent && a.attachEvent("on" + b, c); 1390 }, e.prototype.off = function (a, b, c, d) { 1391 a.removeEventListener ? a.removeEventListener(b, c, d) : a.detachEvent && a.detachEvent("on" + b, c); 1392 }, e.prototype.trigger = function (b, c, d, f, g) { 1393 var h = { 1394 item: { 1395 count: this._items.length, 1396 index: this.current() 1397 } 1398 }, 1399 i = a.camelCase(a.grep(["on", b, d], function (a) { 1400 return a; 1401 }).join("-").toLowerCase()), 1402 j = a.Event([b, "owl", d || "carousel"].join(".").toLowerCase(), a.extend({ 1403 relatedTarget: this 1404 }, h, c)); 1405 return this._supress[b] || (a.each(this._plugins, function (a, b) { 1406 b.onTrigger && b.onTrigger(j); 1407 }), this.register({ 1408 type: e.Type.Event, 1409 name: b 1410 }), this.$element.trigger(j), this.settings && "function" == typeof this.settings[i] && this.settings[i].call(this, j)), j; 1411 }, e.prototype.enter = function (b) { 1412 a.each([b].concat(this._states.tags[b] || []), a.proxy(function (a, b) { 1413 this._states.current[b] === d && (this._states.current[b] = 0), this._states.current[b]++; 1414 }, this)); 1415 }, e.prototype.leave = function (b) { 1416 a.each([b].concat(this._states.tags[b] || []), a.proxy(function (a, b) { 1417 this._states.current[b]--; 1418 }, this)); 1419 }, e.prototype.register = function (b) { 1420 if (b.type === e.Type.Event) { 1421 if (a.event.special[b.name] || (a.event.special[b.name] = {}), !a.event.special[b.name].owl) { 1422 var c = a.event.special[b.name]._default; 1423 a.event.special[b.name]._default = function (a) { 1424 return !c || !c.apply || a.namespace && -1 !== a.namespace.indexOf("owl") ? a.namespace && a.namespace.indexOf("owl") > -1 : c.apply(this, arguments); 1425 }, a.event.special[b.name].owl = !0; 1426 } 1427 } else b.type === e.Type.State && (this._states.tags[b.name] ? this._states.tags[b.name] = this._states.tags[b.name].
1427concat(b.tags) : this._states.tags[b.name] = b.tags, this._states.tags[b.name] = a.grep(this._states.tags[b.name], a.proxy(function (c, d) { 1428 return a.inArray(c, this._states.tags[b.name]) === d; 1429 }, this))); 1430 }, e.prototype.suppress = function (b) { 1431 a.each(b, a.proxy(function (a, b) { 1432 this._supress[b] = !0; 1433 }, this)); 1434 }, e.prototype.release = function (b) { 1435 a.each(b, a.proxy(function (a, b) { 1436 delete this._supress[b]; 1437 }, this)); 1438 }, e.prototype.pointer = function (a) { 1439 var c = { 1440 x: null, 1441 y: null 1442 }; 1443 return a = a.originalEvent || a || b.event, a = a.touches && a.touches.length ? a.touches[0] : a.changedTouches && a.changedTouches.length ? a.changedTouches[0] : a, a.pageX ? (c.x = a.pageX, c.y = a.pageY) : (c.x = a.clientX, c.y = a.clientY), c; 1444 }, e.prototype.isNumeric = function (a) { 1445 return !isNaN(parseFloat(a)); 1446 }, e.prototype.difference = function (a, b) { 1447 return { 1448 x: a.x - b.x, 1449 y: a.y - b.y 1450 }; 1451 }, a.fn.owlCarousel = function (b) { 1452 var c = Array.prototype.slice.call(arguments, 1); 1453 return this.each(function () { 1454 var d = a(this), 1455 f = d.data("owl.carousel"); 1456 f || (f = new e(this, "object" == _typeof(b) && b), d.data("owl.carousel", f), a.each(["next", "prev", "to", "destroy", "refresh", "replace", "add", "remove"], function (b, c) { 1457 f.register({ 1458 type: e.Type.Event, 1459 name: c 1460 }), f.$element.on(c + ".owl.carousel.core", a.proxy(function (a) { 1461 a.namespace && a.relatedTarget !== this && (this.suppress([c]), f[c].apply(this, [].slice.call(arguments, 1)), this.release([c])); 1462 }, f)); 1463 })), "string" == typeof b && "_" !== b.charAt(0) && f[b].apply(f, c); 1464 }); 1465 }, a.fn.owlCarousel.Constructor = e; 1466}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) { 1467 var e = function e(b) { 1468 this._core = b, this._interval = null, this._visible = null, this._handlers = { 1469 "initialized.owl.carousel": a.proxy(function (a) { 1470 a.namespace && this._core.settings.autoRefresh && this.watch(); 1471 }, this) 1472 }, this._core.options = a.extend({}, e.Defaults, this._core.options), this._core.$element.on(this._handlers); 1473 }; 1474 1475 e.Defaults = { 1476 autoRefresh: !0, 1477 autoRefreshInterval: 500 1478 }, e.prototype.watch = function () { 1479 this._interval || (this._visible = this._core.isVisible(), this._interval = b.setInterval(a.proxy(this.refresh, this), this._core.settings.autoRefreshInterval)); 1480 }, e.prototype.refresh = function () { 1481 this._core.isVisible() !== this._visible && (this._visible = !this._visible, this._core.$element.toggleClass("owl-hidden", !this._visible), this._visible && this._core.invalidate("width") && this._core.refresh()); 1482 }, e.prototype.destroy = function () { 1483 var a, c; 1484 b.clearInterval(this._interval); 1485 1486 for (a in this._handlers) { 1487 this._core.$element.off(a, this._handlers[a]); 1488 } 1489 1490 for (c in Object.getOwnPropertyNames(this)) { 1491 "function" != typeof this[c] && (this[c] = null); 1492 } 1493 }, a.fn.owlCarousel.Constructor.Plugins.AutoRefresh = e; 1494}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) { 1495 var e = function e(b) { 1496 this._core = b, this._loaded = [], this._handlers = { 1497 "initialized.owl.carousel change.owl.carousel resized.owl.carousel": a.proxy(function (b) { 1498 if (b.namespace && this._core.settings && this._core.settings.lazyLoad && (b.property && "position" == b.property.name || "initialized" == b.type)) { 1499 var c = this._core.settings, 1500 e = c.center && Math.ceil(c.items / 2) || c.items, 1501 f = c.center && -1 * e || 0, 1502 g = (b.property && b.property.value !== d ? b.property.value : this._core.current()) + f, 1503 h = this._core.clones().length, 1504 i = a.proxy(function (a, b) { 1505 this.load(b); 1506 }, this); 1507 1508 for (c.lazyLoadEager > 0 && (e += c.lazyLoadEager, c.loop && (g -= c.lazyLoadEager, e++)); f++ < e;) { 1509 this.load(h / 2 + this._core.relative(g)), h && a.each(this._core.clones(this._core.relative(g)), i), g++; 1510 } 1511 } 1512 }, this) 1513 }, this._core.options = a.extend({}, e.Defaults, this._core.options), this._core.$element.on(this._handlers); 1514 }; 1515 1516 e.Defaults = { 1517 lazyLoad: !1, 1518 lazyLoadEager: 0 1519 }, e.prototype.load = function (c) { 1520 var d = this._core.$stage.children().eq(c), 1521 e = d && d.find(".owl-lazy"); 1522 1523 !e || a.inArray(d.get(0), this._loaded) > -1 || (e.each(a.proxy(function (c, d) { 1524 var e, 1525 f = a(d), 1526 g = b.devicePixelRatio > 1 && f.attr("data-src-retina") || f.attr("data-src") || f.attr("data-srcset"); 1527 this._core.trigger("load", { 1528 element: f, 1529 url: g 1530 }, "lazy"), f.is("img") ? f.one("load.owl.lazy", a.proxy(function () { 1531 f.css("opacity", 1), this._core.trigger("loaded", { 1532 element: f, 1533 url: g 1534 }, "lazy"); 1535 }, this)).attr("src", g) : f.is("source") ? f.one("load.owl.lazy", a.proxy(function () { 1536 this._core.trigger("loaded", { 1537 element: f, 1538 url: g 1539 }, "lazy"); 1540 }, this)).attr("srcset", g) : (e = new Image(), e.onload = a.proxy(function () { 1541 f.css({ 1542 "background-image": 'url("' + g + '")', 1543 opacity: "1" 1544 }), this._core.trigger("loaded", { 1545 element: f, 1546 url: g 1547 }, "lazy"); 1548 }, this), e.src = g); 1549 }, this)), this._loaded.push(d.get(0))); 1550 }, e.prototype.destroy = function () { 1551 var a, b; 1552 1553 for (a in this.handlers) { 1554 this._core.$element.off(a, this.handlers[a]); 1555 } 1556 1557 for (b in Object.getOwnPropertyNames(this)) { 1558 "function" != typeof this[b] && (this[b] = null); 1559 } 1560 }, a.fn.owlCarousel.Constructor.Plugins.Lazy = e; 1561}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) { 1562 var e = function e(c) { 1563 this._core = c, this._previousHeight = null, this._handlers = { 1564 "initialized.owl.carousel refreshed.owl.carousel": a.proxy(function (a) { 1565 a.namespace && this._core.settings.autoHeight && this.update(); 1566 }, this), 1567 "changed.owl.carousel": a.proxy(function (a) { 1568 a.namespace && this._core.settings.autoHeight && "position" === a.property.name && this.update(); 1569 }, this), 1570 "loaded.owl.lazy": a.proxy(function (a) { 1571 a.namespace && this._core.settings.autoHeight && a.element.closest("." + this._core.settings.itemClass).index() === this._core.current() && this.update(); 1572 }, this) 1573 }, this._core.options = a.extend({}, e.Defaults, this._core.options), this._core.$element.on(this._handlers), this._intervalId = null; 1574 var d = this; 1575 a(b).on("load", function () { 1576 d._core.settings.autoHeight && d.update(); 1577 }), a(b).resize(function () { 1578 d._core.settings.autoHeight && (null != d._intervalId && clearTimeout(d._intervalId), d._intervalId = setTimeout(function () { 1579 d.update(); 1580 }, 250)); 1581 }); 1582 }; 1583 1584 e.Defaults = { 1585 autoHeight: !1, 1586 autoHeightClass: "owl-height" 1587 }, e.prototype.update = function () { 1588 var b = this._core._current, 1589 c = b + this._core.settings.items, 1590 d = this._core.settings.lazyLoad, 1591 e = this._core.$stage.children().toArray().slice(b, c), 1592 f = [], 1593 g = 0; 1594 1595 a.each(e, function (b, c) { 1596 f.push(a(c).height()); 1597 }), g = Math.max.apply(null, f), g <= 1 && d && this._previousHeight && (g = this._previousHeight), this._previousHeight = g, this._core.$stage.parent().height(g).addClass(this._core.settings.autoHeightClass); 1598 }, e.prototype.destroy = function () { 1599 var a, b; 1600 1601 for (a in this._handlers) { 1602 this._core.$element.off(a, this._handlers[a]); 1603 } 1604 1605 for (b in Object.getOwnPropertyNames(this)) { 1606 "function" != typeof this[b] && (this[b] = null); 1607 } 1608 }, a.fn.owlCarousel.Constructor.Plugins.AutoHeight = e; 1609}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) { 1610 var e = function e(b) { 1611 this._core = b, this._videos = {}, this._playing = null, this._handlers = { 1612 "initialized.owl.carousel": a.proxy(function (a) { 1613 a.namespace && this._core.register({ 1614 type: "state", 1615 name: "playing", 1616 tags: ["interacting"] 1617 }); 1618 }, this), 1619 "resize.owl.carousel": a.proxy(function (a) { 1620 a.namespace && this._core.settings.video && this.isInFullScreen() && a.preventDefault(); 1621 }, this), 1622 "refreshed.owl.carousel": a.proxy(function (a) { 1623 a.namespace && this._core.is("resizing") && this._core.$stage.find(".cloned .owl-video-frame").remove(); 1624 }, this), 1625 "changed.owl.carousel": a.proxy(function (a) { 1626 a.namespace && "position" === a.property.name && this._playing && this.stop(); 1627 }, this), 1628 "prepared.owl.carousel": a.proxy(function (b) { 1629 if (b.namespace) { 1630 var c = a(b.content).find(".owl-video"); 1631 c.length && (c.css("display", "none"), this.fetch(c, a(b.content))); 1632 } 1633 }, this) 1634 }, this._core.options = a.extend({}, e.Defaults, this._core.options), this._core.$element.on(this._handlers), this._core.$element.on("click.owl.video", ".owl-video-play-icon", a.proxy(function (a) { 1635 this.play(a); 1636 }, this)); 1637 }; 1638 1639 e.Defaults = { 1640 video: !1, 1641 videoHeight: !1, 1642 videoWidth: !1 1643 }, e.prototype.fetch = function (a, b) { 1644 var c = function () { 1645 return a.attr("data-vimeo-id") ? "vimeo" : a.attr("data-vzaar-id") ? "vzaar" : "youtube"; 1646 }(), 1647 d = a.attr("data-vimeo-id") || a.attr("data-youtube-id") || a.attr("data-vzaar-id"), 1648 e = a.attr("data-width") || this._core.settings.videoWidth, 1649 f = a.attr("data-height") || this._core.settings.videoHeight, 1650 g = a.attr("href"); 1651 1652 if (!g) throw new Error("Missing video URL."); 1653 if (d = g.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com|be\-nocookie\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/), d[3].indexOf("youtu") > -1) c = "youtube";else if (d[3].indexOf("vimeo") > -1) c = "vimeo";else { 1654 if (!(d[3].indexOf("vzaar") > -1)) throw new Error("Video URL not supported."); 1655 c = "vzaar"; 1656 } 1657 d = d[6], this._videos[g] = { 1658 type: c, 1659 id: d, 1660 width: e, 1661 height: f 1662 }, b.attr("data-video", g), this.thumbnail(a, this._videos[g]); 1663 }, e.prototype.thumbnail = function (b, c) { 1664 var d, 1665 e, 1666 f,
1667 g = c.width && c.height ? "width:" + c.width + "px;height:" + c.height + "px;" : "", 1668 h = b.find("img"), 1669 i = "src", 1670 j = "", 1671 k = this._core.settings, 1672 l = function l(c) { 1673 e = '<div class="owl-video-play-icon"></div>', d = k.lazyLoad ? a("<div/>", { 1674 class: "owl-video-tn " + j, 1675 srcType: c 1676 }) : a("<div/>", { 1677 class: "owl-video-tn", 1678 style: "opacity:1;background-image:url(" + c + ")" 1679 }), b.after(d), b.after(e); 1680 }; 1681 1682 if (b.wrap(a("<div/>", { 1683 class: "owl-video-wrapper", 1684 style: g 1685 })), this._core.settings.lazyLoad && (i = "data-src", j = "owl-lazy"), h.length) return l(h.attr(i)), h.remove(), !1; 1686 "youtube" === c.type ? (f = "//img.youtube.com/vi/" + c.id + "/hqdefault.jpg", l(f)) : "vimeo" === c.type ? a.ajax({ 1687 type: "GET", 1688 url: "//vimeo.com/api/v2/video/" + c.id + ".json", 1689 jsonp: "callback", 1690 dataType: "jsonp", 1691 success: function success(a) { 1692 f = a[0].thumbnail_large, l(f); 1693 } 1694 }) : "vzaar" === c.type && a.ajax({ 1695 type: "GET", 1696 url: "//vzaar.com/api/videos/" + c.id + ".json", 1697 jsonp: "callback", 1698 dataType: "jsonp", 1699 success: function success(a) { 1700 f = a.framegrab_url, l(f); 1701 } 1702 }); 1703 }, e.prototype.stop = function () { 1704 this._core.trigger("stop", null, "video"), this._playing.find(".owl-video-frame").remove(), this._playing.removeClass("owl-video-playing"), this._playing = null, this._core.leave("playing"), this._core.trigger("stopped", null, "video"); 1705 }, e.prototype.play = function (b) { 1706 var c, 1707 d = a(b.target), 1708 e = d.closest("." + this._core.settings.itemClass), 1709 f = this._videos[e.attr("data-video")], 1710 g = f.width || "100%", 1711 h = f.height || this._core.$stage.height(); 1712 1713 this._playing || (this._core.enter("playing"), this._core.trigger("play", null, "video"), e = this._core.items(this._core.relative(e.index())), this._core.reset(e.index()), c = a('<iframe frameborder="0" allowfullscreen mozallowfullscreen webkitAllowFullScreen ></iframe>'), c.attr("height", h), c.attr("width", g), "youtube" === f.type ? c.attr("src", "//www.youtube.com/embed/" + f.id + "?autoplay=1&rel=0&v=" + f.id) : "vimeo" === f.type ? c.attr("src", "//player.vimeo.com/video/" + f.id + "?autoplay=1") : "vzaar" === f.type && c.attr("src", "//view.vzaar.com/" + f.id + "/player?autoplay=true"), a(c).wrap('<div class="owl-video-frame" />').insertAfter(e.find(".owl-video")), this._playing = e.addClass("owl-video-playing")); 1714 }, e.prototype.isInFullScreen = function () { 1715 var b = c.fullscreenElement || c.mozFullScreenElement || c.webkitFullscreenElement; 1716 return b && a(b).parent().hasClass("owl-video-frame"); 1717 }, e.prototype.destroy = function () { 1718 var a, b; 1719 1720 this._core.$element.off("click.owl.video"); 1721 1722 for (a in this._handlers) { 1723 this._core.$element.off(a, this._handlers[a]); 1724 } 1725 1726 for (b in Object.getOwnPropertyNames(this)) { 1727 "function" != typeof this[b] && (this[b] = null); 1728 } 1729 }, a.fn.owlCarousel.Constructor.Plugins.Video = e; 1730}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) { 1731 var e = function e(b) { 1732 this.core = b, this.core.options = a.extend({}, e.Defaults, this.core.options), this.swapping = !0, this.previous = d, this.next = d, this.handlers = { 1733 "change.owl.carousel": a.proxy(function (a) { 1734 a.namespace && "position" == a.property.name && (this.previous = this.core.current(), this.next = a.property.value); 1735 }, this), 1736 "drag.owl.carousel dragged.owl.carousel translated.owl.carousel": a.proxy(function (a) { 1737 a.namespace && (this.swapping = "translated" == a.type); 1738 }, this), 1739 "translate.owl.carousel": a.proxy(function (a) { 1740 a.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn) && this.swap(); 1741 }, this) 1742 }, this.core.$element.on(this.handlers); 1743 }; 1744 1745 e.Defaults = { 1746 animateOut: !1, 1747 animateIn: !1 1748 }, e.prototype.swap = function () { 1749 if (1 === this.core.settings.items && a.support.animation && a.support.transition) { 1750 this.core.speed(0); 1751 var b, 1752 c = a.proxy(this.clear, this), 1753 d = this.core.$stage.children().eq(this.previous), 1754 e = this.core.$stage.children().eq(this.next), 1755 f = this.core.settings.animateIn, 1756 g = this.core.settings.animateOut; 1757 this.core.current() !== this.previous && (g && (b = this.core.coordinates(this.previous) - this.core.coordinates(this.next), d.one(a.support.animation.end, c).css({ 1758 left: b + "px" 1759 }).addClass("animated owl-animated-out").addClass(g)), f && e.one(a.support.animation.end, c).addClass("animated owl-animated-in").addClass(f)); 1760 } 1761 }, e.prototype.clear = function (b) { 1762 a(b.target).css({ 1763 left: "" 1764 }).removeClass("animated owl-animated-out owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut), this.core.onTransitionEnd(); 1765 }, e.prototype.destroy = function () { 1766 var a, b; 1767 1768 for (a in this.handlers) { 1769 this.core.$element.off(a, this.handlers[a]); 1770 } 1771 1772 for (b in Object.getOwnPropertyNames(this)) { 1773 "function" != typeof this[b] && (this[b] = null); 1774 } 1775 }, a.fn.owlCarousel.Constructor.Plugins.Animate = e; 1776}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) { 1777 var e = function e(b) { 1778 this._core = b, this._call = null, this._time = 0, this._timeout = 0, this._paused = !0, this._handlers = { 1779 "changed.owl.carousel": a.proxy(function (a) { 1780 a.namespace && "settings" === a.property.name ? this._core.settings.autoplay ? this.play() : this.stop() : a.namespace && "position" === a.property.name && this._paused && (this._time = 0); 1781 }, this), 1782 "initialized.owl.carousel": a.proxy(function (a) { 1783 a.namespace && this._core.settings.autoplay && this.play(); 1784 }, this), 1785 "play.owl.autoplay": a.proxy(function (a, b, c) { 1786 a.namespace && this.play(b, c); 1787 }, this), 1788 "stop.owl.autoplay": a.proxy(function (a) { 1789 a.namespace && this.stop(); 1790 }, this), 1791 "mouseover.owl.autoplay": a.proxy(function () { 1792 this._core.settings.autoplayHoverPause && this._core.is("rotating") && this.pause(); 1793 }, this), 1794 "mouseleave.owl.autoplay": a.proxy(function () { 1795 this._core.settings.autoplayHoverPause && this._core.is("rotating") && this.play(); 1796 }, this), 1797 "touchstart.owl.core": a.proxy(function () { 1798 this._core.settings.autoplayHoverPause && this._core.is("rotating") && this.pause(); 1799 }, this), 1800 "touchend.owl.core": a.proxy(function () { 1801 this._core.settings.autoplayHoverPause && this.play(); 1802 }, this) 1803 }, this._core.$element.on(this._handlers), this._core.options = a.extend({}, e.Defaults, this._core.options); 1804 }; 1805 1806 e.Defaults = { 1807 autoplay: !1, 1808 autoplayTimeout: 5e3, 1809 autoplayHoverPause: !1, 1810 autoplaySpeed: !1 1811 }, e.prototype._next = function (d) { 1812 this._call = b.setTimeout(a.proxy(this._next, this, d), this._timeout * (Math.round(this.read() / this._timeout) + 1)
1812- this.read()), this._core.is("interacting") || c.hidden || this._core.next(d || this._core.settings.autoplaySpeed); 1813 }, e.prototype.read = function () { 1814 return new Date().getTime() - this._time; 1815 }, e.prototype.play = function (c, d) { 1816 var e; 1817 this._core.is("rotating") || this._core.enter("rotating"), c = c || this._core.settings.autoplayTimeout, e = Math.min(this._time % (this._timeout || c), c), this._paused ? (this._time = this.read(), this._paused = !1) : b.clearTimeout(this._call), this._time += this.read() % c - e, this._timeout = c, this._call = b.setTimeout(a.proxy(this._next, this, d), c - e); 1818 }, e.prototype.stop = function () { 1819 this._core.is("rotating") && (this._time = 0, this._paused = !0, b.clearTimeout(this._call), this._core.leave("rotating")); 1820 }, e.prototype.pause = function () { 1821 this._core.is("rotating") && !this._paused && (this._time = this.read(), this._paused = !0, b.clearTimeout(this._call)); 1822 }, e.prototype.destroy = function () { 1823 var a, b; 1824 this.stop(); 1825 1826 for (a in this._handlers) { 1827 this._core.$element.off(a, this._handlers[a]); 1828 } 1829 1830 for (b in Object.getOwnPropertyNames(this)) { 1831 "function" != typeof this[b] && (this[b] = null); 1832 } 1833 }, a.fn.owlCarousel.Constructor.Plugins.autoplay = e; 1834}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) { 1835 "use strict"; 1836 1837 var e = function e(b) { 1838 this._core = b, this._initialized = !1, this._pages = [], this._controls = {}, this._templates = [], this.$element = this._core.$element, this._overrides = { 1839 next: this._core.next, 1840 prev: this._core.prev, 1841 to: this._core.to 1842 }, this._handlers = { 1843 "prepared.owl.carousel": a.proxy(function (b) { 1844 b.namespace && this._core.settings.dotsData && this._templates.push('<div class="' + this._core.settings.dotClass + '">' + a(b.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot") + "</div>"); 1845 }, this), 1846 "added.owl.carousel": a.proxy(function (a) { 1847 a.namespace && this._core.settings.dotsData && this._templates.splice(a.position, 0, this._templates.pop()); 1848 }, this), 1849 "remove.owl.carousel": a.proxy(function (a) { 1850 a.namespace && this._core.settings.dotsData && this._templates.splice(a.position, 1); 1851 }, this), 1852 "changed.owl.carousel": a.proxy(function (a) { 1853 a.namespace && "position" == a.property.name && this.draw(); 1854 }, this), 1855 "initialized.owl.carousel": a.proxy(function (a) { 1856 a.namespace && !this._initialized && (this._core.trigger("initialize", null, "navigation"), this.initialize(), this.update(), this.draw(), this._initialized = !0, this._core.trigger("initialized", null, "navigation")); 1857 }, this), 1858 "refreshed.owl.carousel": a.proxy(function (a) { 1859 a.namespace && this._initialized && (this._core.trigger("refresh", null, "navigation"), this.update(), this.draw(), this._core.trigger("refreshed", null, "navigation")); 1860 }, this) 1861 }, this._core.options = a.extend({}, e.Defaults, this._core.options), this.$element.on(this._handlers); 1862 }; 1863 1864 e.Defaults = { 1865 nav: !1, 1866 navText: ['<span aria-label="Previous">‹</span>', '<span aria-label="Next">›</span>'], 1867 navSpeed: !1, 1868 navElement: 'button type="button" role="presentation"', 1869 navContainer: !1, 1870 navContainerClass: "owl-nav", 1871 navClass: ["owl-prev", "owl-next"], 1872 slideBy: 1, 1873 dotClass: "owl-dot", 1874 dotsClass: "owl-dots", 1875 dots: !0, 1876 dotsEach: !1, 1877 dotsData: !1, 1878 dotsSpeed: !1, 1879 dotsContainer: !1 1880 }, e.prototype.initialize = function () { 1881 var b, 1882 c = this._core.settings; 1883 this._controls.$relative = (c.navContainer ? a(c.navContainer) : a("<div>").addClass(c.navContainerClass).appendTo(this.$element)).addClass("disabled"), this._controls.$previous = a("<" + c.navElement + ">").addClass(c.navClass[0]).html(c.navText[0]).prependTo(this._controls.$relative).on("click", a.proxy(function (a) { 1884 this.prev(c.navSpeed); 1885 }, this)), this._controls.$next = a("<" + c.navElement + ">").addClass(c.navClass[1]).html(c.navText[1]).appendTo(this._controls.$relative).on("click", a.proxy(function (a) { 1886 this.next(c.navSpeed); 1887 }, this)), c.dotsData || (this._templates = [a('<button role="button">').addClass(c.dotClass).append(a("<span>")).prop("outerHTML")]), this._controls.$absolute = (c.dotsContainer ? a(c.dotsContainer) : a("<div>").addClass(c.dotsClass).appendTo(this.$element)).addClass("disabled"), this._controls.$absolute.on("click", "button", a.proxy(function (b) { 1888 var d = a(b.target).parent().is(this._controls.$absolute) ? a(b.target).index() : a(b.target).parent().index(); 1889 b.preventDefault(), this.to(d, c.dotsSpeed); 1890 }, this)); 1891 1892 for (b in this._overrides) { 1893 this._core[b] = a.proxy(this[b], this); 1894 } 1895 }, e.prototype.destroy = function () { 1896 var a, b, c, d, e; 1897 e = this._core.settings; 1898 1899 for (a in this._handlers) { 1900 this.$element.off(a, this._handlers[a]); 1901 } 1902 1903 for (b in this._controls) { 1904 "$relative" === b && e.navContainer ? this._controls[b].html("") : this._controls[b].remove(); 1905 } 1906 1907 for (d in this.overides) { 1908 this._core[d] = this._overrides[d]; 1909 } 1910 1911 for (c in Object.getOwnPropertyNames(this)) { 1912 "function" != typeof this[c] && (this[c] = null); 1913 } 1914 }, e.prototype.update = function () { 1915 var a, 1916 b, 1917 c, 1918 d = this._core.clones().length / 2, 1919 e = d + this._core.items().length, 1920 f = this._core.maximum(!0), 1921 g = this._core.settings, 1922 h = g.center || g.autoWidth || g.dotsData ? 1 : g.dotsEach || g.items; 1923 1924 if ("page" !== g.slideBy && (g.slideBy = Math.min(g.slideBy, g.items)), g.dots || "page" == g.slideBy) for (this._pages = [], a = d, b = 0, c = 0; a < e; a++) { 1925 if (b >= h || 0 === b) { 1926 if (this._pages.push({ 1927 start: Math.min(f, a - d), 1928 end: a - d + h - 1 1929 }), Math.min(f, a - d) === f) break; 1930 b = 0, ++c; 1931 } 1932 1933 b += this._core.mergers(this._core.relative(a)); 1934 } 1935 }, e.prototype.draw = function () { 1936 var b, 1937 c = this._core.settings, 1938 d = this._core.items().length <= c.items, 1939 e = this._core.relative(this._core.current()), 1940 f = c.loop || c.rewind; 1941 1942 this._controls.$relative.toggleClass("disabled", !c.nav || d), c.nav && (this._controls.$previous.toggleClass("disabled", !f && e <= this._core.minimum(!0)), this._controls.$next.toggleClass("disabled", !f && e >= this._core.maximum(!0))), this._controls.$absolute.toggleClass("disabled", !c.dots || d), c.dots && (b = this._pages.length - this._controls.$absolute.children().length, c.dotsData && 0 !== b ? this._controls.$absolute.html(this._templates.join("")) : b > 0 ? this._controls.$absolute.append(new Array(b + 1).join(this._templates[0])) : b < 0 && this._controls.$absolute.children().slice(b).remove(), this._controls.$absolute.find(".active").removeClass("active"), this._controls.$absolute.children().eq(a.inArray(this.current(), this._pages)).addClass("active")); 1943 }, e.prototype.onTrigger = function (b) { 1944 var c = this._core.settings; 1945 b.page = { 1946 index: a.inArray(this.current(), this._pages), 1947 count: this._pages.length, 1948 size: c && (c.center || c.autoWidth || c.dotsData ? 1 : c.dotsEach || c.items) 1949 }; 1950 }, e.prototype.current = function () { 1951 var b = this._core.relative(this._core.current()); 1952 1953 return a.grep(this._pages, a.proxy(function (a, c) { 1954 return a.start <= b && a.end >= b; 1955 }, this)).pop(); 1956 }, e.prototype.getPosition = function (b) { 1957 var c, 1958 d, 1959 e = this._core.settings; 1960 return "page" == e.slideBy ? (c = a.inArray(this.current(), this._pages), d = this._pages.length, b ? ++c : --c, c = this._pages[(c % d + d) % d].start) : (c = this._core.relative(this._core.current()), d = this._core.items().length, b ? c += e.
1960slideBy : c -= e.slideBy), c; 1961 }, e.prototype.next = function (b) { 1962 a.proxy(this._overrides.to, this._core)(this.getPosition(!0), b); 1963 }, e.prototype.prev = function (b) { 1964 a.proxy(this._overrides.to, this._core)(this.getPosition(!1), b); 1965 }, e.prototype.to = function (b, c, d) { 1966 var e; 1967 !d && this._pages.length ? (e = this._pages.length, a.proxy(this._overrides.to, this._core)(this._pages[(b % e + e) % e].start, c)) : a.proxy(this._overrides.to, this._core)(b, c); 1968 }, a.fn.owlCarousel.Constructor.Plugins.Navigation = e; 1969}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) { 1970 "use strict"; 1971 1972 var e = function e(c) { 1973 this._core = c, this._hashes = {}, this.$element = this._core.$element, this._handlers = { 1974 "initialized.owl.carousel": a.proxy(function (c) { 1975 c.namespace && "URLHash" === this._core.settings.startPosition && a(b).trigger("hashchange.owl.navigation"); 1976 }, this), 1977 "prepared.owl.carousel": a.proxy(function (b) { 1978 if (b.namespace) { 1979 var c = a(b.content).find("[data-hash]").addBack("[data-hash]").attr("data-hash"); 1980 if (!c) return; 1981 this._hashes[c] = b.content; 1982 } 1983 }, this), 1984 "changed.owl.carousel": a.proxy(function (c) { 1985 if (c.namespace && "position" === c.property.name) { 1986 var d = this._core.items(this._core.relative(this._core.current())), 1987 e = a.map(this._hashes, function (a, b) { 1988 return a === d ? b : null; 1989 }).join(); 1990 1991 if (!e || b.location.hash.slice(1) === e) return; 1992 b.location.hash = e; 1993 } 1994 }, this) 1995 }, this._core.options = a.extend({}, e.Defaults, this._core.options), this.$element.on(this._handlers), a(b).on("hashchange.owl.navigation", a.proxy(function (a) { 1996 var c = b.location.hash.substring(1), 1997 e = this._core.$stage.children(), 1998 f = this._hashes[c] && e.index(this._hashes[c]); 1999 2000 f !== d && f !== this._core.current() && this._core.to(this._core.relative(f), !1, !0); 2001 }, this)); 2002 }; 2003 2004 e.Defaults = { 2005 URLhashListener: !1 2006 }, e.prototype.destroy = function () { 2007 var c, d; 2008 a(b).off("hashchange.owl.navigation"); 2009 2010 for (c in this._handlers) { 2011 this._core.$element.off(c, this._handlers[c]); 2012 } 2013 2014 for (d in Object.getOwnPropertyNames(this)) { 2015 "function" != typeof this[d] && (this[d] = null); 2016 } 2017 }, a.fn.owlCarousel.Constructor.Plugins.Hash = e; 2018}(window.Zepto || window.jQuery, window, document), function (a, b, c, d) { 2019 function e(b, c) { 2020 var e = !1, 2021 f = b.charAt(0).toUpperCase() + b.slice(1); 2022 return a.each((b + " " + h.join(f + " ") + f).split(" "), function (a, b) { 2023 if (g[b] !== d) return e = !c || b, !1; 2024 }), e; 2025 } 2026 2027 function f(a) { 2028 return e(a, !0); 2029 } 2030 2031 var g = a("<support>").get(0).style, 2032 h = "Webkit Moz O ms".split(" "), 2033 i = { 2034 transition: { 2035 end: { 2036 WebkitTransition: "webkitTransitionEnd", 2037 MozTransition: "transitionend", 2038 OTransition: "oTransitionEnd", 2039 transition: "transitionend" 2040 } 2041 }, 2042 animation: { 2043 end: { 2044 WebkitAnimation: "webkitAnimationEnd", 2045 MozAnimation: "animationend", 2046 OAnimation: "oAnimationEnd", 2047 animation: "animationend" 2048 } 2049 } 2050 }, 2051 j = { 2052 csstransforms: function csstransforms() { 2053 return !!e("transform"); 2054 }, 2055 csstransforms3d: function csstransforms3d() { 2056 return !!e("perspective"); 2057 }, 2058 csstransitions: function csstransitions() { 2059 return !!e("transition"); 2060 }, 2061 cssanimations: function cssanimations() { 2062 return !!e("animation"); 2063 } 2064 }; 2065 j.csstransitions() && (a.support.transition = new String(f("transition")), a.support.transition.end = i.transition.end[a.support.transition]), j.cssanimations() && (a.support.animation = new String(f("animation")), a.support.animation.end = i.animation.end[a.support.animation]), j.csstransforms() && (a.support.transform = new String(f("transform")), a.support.transform3d = j.csstransforms3d()); 2066}(window.Zepto || window.jQuery, window, document); 2067 2068/***/ }), 2069
2070/***/ "./src/js/owls.js": 2071/*!************************!*\ 2072 !*** ./src/js/owls.js ***! 2073 \************************/ 2074/***/ (() => { 2075 2076$(window).on('load', function () { 2077 var owlArticles = $('.js-article-section'); 2078 var left_arrow_url = $(owlArticles).parent().find('.js-owl-left-arrow').data('url'); 2079 var right_arrow_url = $(owlArticles).parent().find('.js-owl-right-arrow').data('url'); 2080 owlArticles.each(function () { 2081 var articleCount = $(this).find('.small__single__article').length; 2082 owlArticles.owlCarousel({ 2083 stagePadding: 0, 2084 loop: articleCount > 3 ? true : false, 2085 dots: false, 2086 navigation: articleCount > 3 ? true : false, 2087 nav: articleCount > 3 ? true : false, 2088 navText: ['<img alt="Nawigacja" style="width:40px;height:40px;" src="' + left_arrow_url + '">', '<img alt="Nawigacja" style="width:40px;height:40px;" src="' + right_arrow_url + '">'], 2089 margin: 32, 2090 lazyLoad: false, 2091 responsive: { 2092 0: { 2093 items: 1, 2094 stagePadding: 65 2095 }, 2096 575: { 2097 items: 2, 2098 stagePadding: 65 2099 }, 2100 769: { 2101 items: 3, 2102 stagePadding: 45, 2103 margin: 20 2104 }, 2105 1025: { 2106 items: 4 2107 } 2108 } 2109 }); 2110 }); 2111}); 2112 2113/***/ }), 2114
vendor: 114,997 bytes, lines 2115-4859
2115/***/ "./node_modules/lightgallery/lightgallery.es5.js": 2116/*!*******************************************************!*\ 2117 !*** ./node_modules/lightgallery/lightgallery.es5.js ***! 2118 \*******************************************************/ 2119/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2120 2121"use strict"; 2122__webpack_require__.r(__webpack_exports__); 2123/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2124/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 2125/* harmony export */ }); 2126/*! 2127 * lightgallery | 2.7.0 | October 9th 2022 2128 * http://www.lightgalleryjs.com/ 2129 * Copyright (c) 2020 Sachin Neravath; 2130 * @license GPLv3 2131 */ 2132 2133/*! ***************************************************************************** 2134Copyright (c) Microsoft Corporation. 2135 2136Permission to use, copy, modify, and/or distribute this software for any 2137purpose with or without fee is hereby granted. 2138 2139THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 2140REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 2141AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 2142INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 2143LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 2144OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 2145PERFORMANCE OF THIS SOFTWARE. 2146***************************************************************************** */ 2147 2148var __assign = function() { 2149 __assign = Object.assign || function __assign(t) { 2150 for (var s, i = 1, n = arguments.length; i < n; i++) { 2151 s = arguments[i]; 2152 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; 2153 } 2154 return t; 2155 }; 2156 return __assign.apply(this, arguments); 2157}; 2158 2159function __spreadArrays() { 2160 for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; 2161 for (var r = Array(s), k = 0, i = 0; i < il; i++) 2162 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) 2163 r[k] = a[j]; 2164 return r; 2165} 2166 2167/** 2168 * List of lightGallery events 2169 * All events should be documented here 2170 * Below interfaces are used to build the website documentations 2171 * */ 2172var lGEvents = { 2173 afterAppendSlide: 'lgAfterAppendSlide', 2174 init: 'lgInit', 2175 hasVideo: 'lgHasVideo', 2176 containerResize: 'lgContainerResize', 2177 updateSlides: 'lgUpdateSlides', 2178 afterAppendSubHtml: 'lgAfterAppendSubHtml', 2179 beforeOpen: 'lgBeforeOpen', 2180 afterOpen: 'lgAfterOpen', 2181 slideItemLoad: 'lgSlideItemLoad', 2182 beforeSlide: 'lgBeforeSlide', 2183 afterSlide: 'lgAfterSlide', 2184 posterClick: 'lgPosterClick', 2185 dragStart: 'lgDragStart', 2186 dragMove: 'lgDragMove', 2187 dragEnd: 'lgDragEnd', 2188 beforeNextSlide: 'lgBeforeNextSlide', 2189 beforePrevSlide: 'lgBeforePrevSlide', 2190 beforeClose: 'lgBeforeClose', 2191 afterClose: 'lgAfterClose', 2192 rotateLeft: 'lgRotateLeft', 2193 rotateRight: 'lgRotateRight', 2194 flipHorizontal: 'lgFlipHorizontal', 2195 flipVertical: 'lgFlipVertical', 2196 autoplay: 'lgAutoplay', 2197 autoplayStart: 'lgAutoplayStart', 2198 autoplayStop: 'lgAutoplayStop', 2199}; 2200 2201var lightGalleryCoreSettings = { 2202 mode: 'lg-slide', 2203 easing: 'ease', 2204 speed: 400, 2205 licenseKey: '0000-0000-000-0000', 2206 height: '100%', 2207 width: '100%', 2208 addClass: '', 2209 startClass: 'lg-start-zoom', 2210 backdropDuration: 300, 2211 container: '', 2212 startAnimationDuration: 400, 2213 zoomFromOrigin: true, 2214 hideBarsDelay: 0, 2215 showBarsAfter: 10000, 2216 slideDelay: 0, 2217 supportLegacyBrowser: true, 2218 allowMediaOverlap: false, 2219 videoMaxSize: '1280-720', 2220 loadYouTubePoster: true, 2221 defaultCaptionHeight: 0, 2222 ariaLabelledby: '', 2223 ariaDescribedby: '', 2224 resetScrollPosition: true, 2225 hideScrollbar: false, 2226 closable: true, 2227 swipeToClose: true, 2228 closeOnTap: true, 2229 showCloseIcon: true, 2230 showMaximizeIcon: false, 2231 loop: true, 2232 escKey: true, 2233 keyPress: true, 2234 trapFocus: true, 2235 controls: true, 2236 slideEndAnimation: true, 2237 hideControlOnEnd: false, 2238 mousewheel: false, 2239 getCaptionFromTitleOrAlt: true, 2240 appendSubHtmlTo: '.lg-sub-html', 2241 subHtmlSelectorRelative: false, 2242 preload: 2, 2243 numberOfSlideItemsInDom: 10, 2244 selector: '', 2245 selectWithin: '', 2246 nextHtml: '', 2247 prevHtml: '', 2248 index: 0, 2249 iframeWidth: '100%', 2250 iframeHeight: '100%', 2251 iframeMaxWidth: '100%', 2252 iframeMaxHeight: '100%', 2253 download: true, 2254 counter: true, 2255 appendCounterTo: '.lg-toolbar', 2256 swipeThreshold: 50, 2257 enableSwipe: true, 2258 enableDrag: true, 2259 dynamic: false, 2260 dynamicEl: [], 2261 extraProps: [], 2262 exThumbImage: '', 2263 isMobile: undefined, 2264 mobileSettings: { 2265 controls: false, 2266 showCloseIcon: false, 2267 download: false, 2268 }, 2269 plugins: [], 2270 strings: { 2271 closeGallery: 'Close gallery', 2272 toggleMaximize: 'Toggle maximize', 2273 previousSlide: 'Previous slide', 2274 nextSlide: 'Next slide', 2275 download: 'Download', 2276 playVideo: 'Play video', 2277 }, 2278}; 2279 2280function initLgPolyfills() { 2281 (function () { 2282 if (typeof window.CustomEvent === 'function') 2283 return false; 2284 function CustomEvent(event, params) { 2285 params = params || { 2286 bubbles: false, 2287 cancelable: false, 2288 detail: null, 2289 }; 2290 var evt = document.createEvent('CustomEvent'); 2291 evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); 2292 return evt; 2293 } 2294 window.CustomEvent = CustomEvent; 2295 })(); 2296 (function () { 2297 if (!Element.prototype.matches) { 2298 Element.prototype.matches = 2299 Element.prototype.msMatchesSelector || 2300 Element.prototype.webkitMatchesSelector; 2301 } 2302 })(); 2303} 2304var lgQuery = /** @class */ (function () { 2305 function lgQuery(selector) { 2306 this.cssVenderPrefixes = [ 2307 'TransitionDuration', 2308 'TransitionTimingFunction', 2309 'Transform', 2310 'Transition', 2311 ]; 2312 this.selector = this._getSelector(selector); 2313 this.firstElement = this._getFirstEl(); 2314 return this; 2315 } 2316 lgQuery.generateUUID = function () { 2317 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { 2318 var r = (Math.random() * 16) | 0, v = c == 'x' ? r : (r & 0x3) | 0x8; 2319 return v.toString(16); 2320 }); 2321 }; 2322 lgQuery.prototype._getSelector = function (selector, context) { 2323 if (context === void 0) { context = document; } 2324 if (typeof selector !== 'string') { 2325 return selector; 2326 } 2327 context = context || document; 2328 var fl = selector.substring(0, 1); 2329 if (fl === '#') { 2330 return context.querySelector(selector); 2331 } 2332 else { 2333 return context.querySelectorAll(selector); 2334 } 2335 }; 2336 lgQuery.prototype._each = function (func) { 2337 if (!this.selector) { 2338 return this; 2339 } 2340 if (this.selector.length !== undefined) { 2341 [].forEach.call(this.selector, func); 2342 } 2343 else { 2344 func(this.selector, 0); 2345 } 2346 return this; 2347 }; 2348 lgQuery.prototype._setCssVendorPrefix = function (el, cssProperty, value) { 2349 // prettier-ignore 2350 var property = cssProperty.replace(/-([a-z])/gi, function (s, group1) { 2351 return group1.toUpperCase(); 2352 }); 2353 if (this.cssVenderPrefixes.indexOf(property) !== -1) { 2354 el.style[property.charAt(0).toLowerCase() + property.slice(1)] = value; 2355 el.style['webkit' + property] = value; 2356 el.style['moz' + property] = value; 2357 el.style['ms' + property] = value; 2358 el.style['o' + property] = value; 2359 } 2360 else { 2361 el.style[property] = value; 2362 } 2363 }; 2364 lgQuery.prototype._getFirstEl = function () { 2365 if (this.selector && this.selector.length !== undefined) { 2366 return this.selector[0]; 2367 } 2368 else { 2369 return this.selector; 2370 } 2371 }; 2372 lgQuery.prototype.isEventMatched = function (event, eventName) { 2373 var eventNamespace = eventName.split('.'); 2374 return event 2375 .split('.') 2376 .filter(function (e) { return e; }) 2377 .every(function (e) { 2378 return eventNamespace.indexOf(e) !== -1; 2379 }); 2380 }; 2381 lgQuery.prototype.attr = function (attr, value) { 2382 if (value === undefined) { 2383 if (!this.firstElement) { 2384 return ''; 2385 } 2386 return this.firstElement.getAttribute(attr); 2387 } 2388 this._each(function (el) { 2389 el.setAttribute(attr, value); 2390 }); 2391 return this; 2392 }; 2393 lgQuery.prototype.find = function (selector) { 2394 return $LG(this._getSelector(selector, this.selector)); 2395 }; 2396 lgQuery.prototype.first = function () { 2397 if (this.selector && this.selector.length !== undefined) { 2398 return $LG(this.selector[0]); 2399 } 2400 else { 2401 return $LG(this.selector); 2402 } 2403 }; 2404 lgQuery.prototype.eq = function (index) { 2405 return $LG(this.selector[index]); 2406 }; 2407 lgQuery.prototype.parent = function () { 2408 return $LG(this.selector.parentElement); 2409 }; 2410 lgQuery.prototype.get = function () { 2411 return this._getFirstEl(); 2412 }; 2413 lgQuery.prototype.removeAttr = function (attributes) { 2414 var attrs = attributes.split(' '); 2415 this._each(function (el) { 2416 attrs.forEach(function (attr) { return el.removeAttribute(attr); }); 2417 }); 2418 return this; 2419 }; 2420 lgQuery.prototype.wrap = function (className) { 2421 if (!this.firstElement) { 2422 return this; 2423 } 2424 var wrapper = document.createElement('div'); 2425 wrapper.className = className; 2426 this.firstElement.parentNode.insertBefore(wrapper, this.firstElement); 2427 this.firstElement.parentNode.removeChild(this.firstElement); 2428 wrapper.appendChild(this.firstElement); 2429 return this; 2430 }; 2431 lgQuery.prototype.addClass = function (classNames) { 2432 if (classNames === void 0) { classNames = ''; } 2433 this._each(function (el) { 2434 // IE doesn't support multiple arguments 2435 classNames.split(' ').forEach(function (className) { 2436 if (className) { 2437 el.classList.add(className); 2438 } 2439 }); 2440 }); 2441 return this; 2442 }; 2443 lgQuery.prototype.removeClass = function (classNames) { 2444 this._each(function (el) { 2445 // IE doesn't support multiple arguments 2446 classNames.split(' ').forEach(function (className) { 2447 if (className) { 2448 el.classList.remove(className); 2449 } 2450 }); 2451 }); 2452 return this; 2453 }; 2454 lgQuery.prototype.hasClass = function (className) { 2455 if (!this.firstElement) { 2456 return false; 2457 } 2458 return this.firstElement.classList.contains(className); 2459 }; 2460 lgQuery.prototype.hasAttribute = function (attribute) { 2461 if (!this.firstElement) { 2462 return false; 2463 } 2464 return this.firstElement.hasAttribute(attribute); 2465 }; 2466 lgQuery.prototype.toggleClass = function (className) { 2467 if (!this.firstElement) { 2468 return this; 2469 } 2470 if (this.hasClass(className)) { 2471 this.removeClass(className); 2472 } 2473 else { 2474 this.addClass(className); 2475 } 2476 return this; 2477 }; 2478 lgQuery.prototype.css = function (property, value) { 2479 var _this = this; 2480 this._each(function (el) { 2481 _this._setCssVendorPrefix(el, property, value); 2482 }); 2483 return this; 2484 }; 2485 // Need to pass separate namespaces for separate elements 2486 lgQuery.prototype.on = function (events, listener) { 2487 var _this = this; 2488 if (!this.selector) { 2489 return this; 2490 } 2491 events.split(' ').forEach(function (event) { 2492 if (!Array.isArray(lgQuery.eventListeners[event])) { 2493 lgQuery.eventListeners[event] = []; 2494 } 2495 lgQuery.eventListeners[event].push(listener); 2496 _this.selector.addEventListener(event.split('.')[0], listener); 2497 }); 2498 return this; 2499 }; 2500 // @todo - test this 2501 lgQuery.prototype.once = function (event, listener) { 2502 var _this = this; 2503 this.on(event, function () { 2504 _this.off(event); 2505 listener(event); 2506 }); 2507 return this; 2508 }; 2509 lgQuery.prototype.off = function (event) { 2510 var _this = this; 2511 if (!this.selector) { 2512 return this; 2513 } 2514 Object.keys(lgQuery.eventListeners).forEach(function (eventName) { 2515 if (_this.isEventMatched(event, eventName)) { 2516 lgQuery.eventListeners[eventName].forEach(function (listener) { 2517 _this.selector.removeEventListener(eventName.split('.')[0], listener); 2518 }); 2519 lgQuery.eventListeners[eventName] = []; 2520 } 2521 }); 2522 return this; 2523 }; 2524 lgQuery.prototype.trigger = function (event, detail) { 2525 if (!this.firstElement) { 2526 return this; 2527 } 2528 var customEvent = new CustomEvent(event.split('.')[0], { 2529 detail: detail || null, 2530 }); 2531 this.firstElement.dispatchEvent(customEvent); 2532 return this; 2533 }; 2534 // Does not support IE 2535 lgQuery.prototype.load = function (url) { 2536 var _this = this; 2537 fetch(url) 2538 .then(function (res) { return res.text(); }) 2539 .then(function (html) { 2540 _this.selector.innerHTML = html; 2541 }); 2542 return this; 2543 }; 2544 lgQuery.prototype.html = function (html) { 2545 if (html === undefined) { 2546 if (!this.firstElement) { 2547 return ''; 2548 } 2549 return this.firstElement.innerHTML; 2550 } 2551 this._each(function (el) { 2552 el.innerHTML = html; 2553 }); 2554 return this; 2555 }; 2556 lgQuery.prototype.append = function (html) { 2557 this._each(function (el) { 2558 if (typeof html === 'string') { 2559 el.insertAdjacentHTML('beforeend', html); 2560 } 2561 else { 2562 el.appendChild(html); 2563 } 2564 }); 2565 return this; 2566 }; 2567 lgQuery.prototype.prepend = function (html) { 2568 this._each(function (el) { 2569 el.insertAdjacentHTML('afterbegin', html); 2570 }); 2571 return this; 2572 }; 2573 lgQuery.prototype.remove = function () { 2574 this._each(function (el) { 2575 el.parentNode.removeChild(el); 2576 }); 2577 return this; 2578 }; 2579 lgQuery.prototype.empty = function () { 2580 this._each(function (el) { 2581 el.innerHTML = ''; 2582 }); 2583 return this; 2584 }; 2585 lgQuery.prototype.scrollTop = function (scrollTop) { 2586 if (scrollTop !== undefined) { 2587 document.body.scrollTop = scrollTop; 2588 document.documentElement.scrollTop = scrollTop; 2589 return this; 2590 } 2591 else { 2592 return (window.pageYOffset || 2593 document.documentElement.scrollTop || 2594 document.body.scrollTop || 2595 0); 2596 } 2597 }; 2598 lgQuery.prototype.scrollLeft = function (scrollLeft) { 2599 if (scrollLeft !== undefined) { 2600 document.body.scrollLeft = scrollLeft; 2601 document.documentElement.scrollLeft = scrollLeft; 2602 return this; 2603 } 2604 else { 2605 return (window.pageXOffset || 2606 document.documentElement.scrollLeft || 2607 document.body.scrollLeft || 2608 0); 2609 } 2610 }; 2611 lgQuery.prototype.offset = function () { 2612 if (!this.firstElement) { 2613 return { 2614 left: 0, 2615 top: 0, 2616 }; 2617 } 2618 var rect = this.firstElement.getBoundingClientRect(); 2619 var bodyMarginLeft = $LG('body').style().marginLeft; 2620 // Minus body margin - https://stackoverflow.com/questions/30711548/is-getboundingclientrect-left-returning-a-wrong-value 2621 return { 2622 left: rect.left - parseFloat(bodyMarginLeft) + this.scrollLeft(), 2623 top: rect.top + this.scrollTop(), 2624 }; 2625 }; 2626 lgQuery.prototype.style = function () { 2627 if (!this.firstElement) { 2628 return {}; 2629 } 2630 return (this.firstElement.currentStyle || 2631 window.getComputedStyle(this.firstElement)); 2632 }; 2633 // Width without padding and border even if box-sizing is used. 2634 lgQuery.prototype.width = function () { 2635 var style = this.style(); 2636 return (this.firstElement.clientWidth - 2637 parseFloat(style.paddingLeft) - 2638 parseFloat(style.paddingRight)); 2639 }; 2640 // Height without padding and border even if box-sizing is used. 2641 lgQuery.prototype.height = function () { 2642 var style = this.style(); 2643 return (this.firstElement.clientHeight - 2644 parseFloat(style.paddingTop) - 2645 parseFloat(style.paddingBottom)); 2646 }; 2647 lgQuery.eventListeners = {}; 2648 return lgQuery; 2649}()); 2650function $LG(selector) { 2651 initLgPolyfills(); 2652 return new lgQuery(selector); 2653} 2654 2655var defaultDynamicOptions = [ 2656 'src', 2657 'sources', 2658 'subHtml', 2659 'subHtmlUrl', 2660 'html', 2661 'video', 2662 'poster', 2663 'slideName', 2664 'responsive', 2665 'srcset', 2666 'sizes', 2667 'iframe', 2668 'downloadUrl', 2669 'download', 2670 'width', 2671 'facebookShareUrl', 2672 'tweetText', 2673 'iframeTitle', 2674 'twitterShareUrl', 2675 'pinterestShareUrl', 2676 'pinterestText', 2677 'fbHtml', 2678 'disqusIdentifier', 2679 'disqusUrl', 2680]; 2681// Convert html data-attribute to camalcase 2682function convertToData(attr) { 2683 // FInd a way for lgsize 2684 if (attr === 'href') { 2685 return 'src'; 2686 } 2687 attr = attr.replace('data-', ''); 2688 attr = attr.charAt(0).toLowerCase() + attr.slice(1); 2689 attr = attr.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); }); 2690 return attr; 2691} 2692var utils = { 2693 /** 2694 * get possible width and height from the lgSize attribute. Used for ZoomFromOrigin option 2695 */ 2696 getSize: function (el, container, spacing, defaultLgSize) { 2697 if (spacing === void 0) { spacing = 0; } 2698 var LGel = $LG(el); 2699 var lgSize = LGel.attr('data-lg-size') || defaultLgSize; 2700 if (!lgSize) { 2701 return; 2702 } 2703 var isResponsiveSizes = lgSize.split(','); 2704 // if at-least two viewport sizes are available 2705 if (isResponsiveSizes[1]) { 2706 var wWidth = window.innerWidth; 2707 for (var i = 0; i < isResponsiveSizes.length; i++) { 2708 var size_1 = isResponsiveSizes[i]; 2709 var responsiveWidth = parseInt(size_1.split('-')[2], 10); 2710 if (responsiveWidth > wWidth) { 2711 lgSize = size_1; 2712 break; 2713 } 2714 // take last item as last option 2715 if (i === isResponsiveSizes.length - 1) { 2716 lgSize = size_1; 2717 } 2718 } 2719 } 2720 var size = lgSize.split('-'); 2721 var width = parseInt(size[0], 10); 2722 var height = parseInt(size[1], 10); 2723 var cWidth = container.width(); 2724 var cHeight = container.height() - spacing; 2725 var maxWidth = Math.min(cWidth, width); 2726 var maxHeight = Math.min(cHeight, height); 2727 var ratio = Math.min(maxWidth / width, maxHeight / height); 2728 return { width: width * ratio, height: height * ratio }; 2729 }, 2730 /** 2731 * @desc Get transform value based on the imageSize. Used for ZoomFromOrigin option 2732 * @param {jQuery Element} 2733 * @returns {String} Transform CSS string 2734 */ 2735 getTransform: function (el, container, top, bottom, imageSize) { 2736 if (!imageSize) { 2737 return; 2738 } 2739 var LGel = $LG(el).find('img').first(); 2740 if (!LGel.get()) { 2741 return; 2742 } 2743 var containerRect = container.get().getBoundingClientRect(); 2744 var wWidth = containerRect.width; 2745 // using innerWidth to include mobile safari bottom bar 2746 var wHeight = container.height() - (top + bottom); 2747 var elWidth = LGel.width(); 2748 var elHeight = LGel.height(); 2749 var elStyle = LGel.style(); 2750 var x = (wWidth - elWidth) / 2 - 2751 LGel.offset().left + 2752 (parseFloat(elStyle.paddingLeft) || 0) + 2753 (parseFloat(elStyle.borderLeft) || 0) + 2754 $LG(window).scrollLeft() + 2755 containerRect.left; 2756 var y = (wHeight - elHeight) / 2 - 2757 LGel.offset().top + 2758 (parseFloat(elStyle.paddingTop) || 0) + 2759 (parseFloat(elStyle.borderTop) || 0) + 2760 $LG(window).scrollTop() + 2761 top; 2762 var scX = elWidth / imageSize.width; 2763 var scY = elHeight / imageSize.height; 2764 var transform = 'translate3d(' + 2765 (x *= -1) + 2766 'px, ' + 2767 (y *= -1) + 2768 'px, 0) scale3d(' + 2769 scX + 2770 ', ' + 2771 scY + 2772 ', 1)'; 2773 return transform; 2774 }, 2775 getIframeMarkup: function (iframeWidth, iframeHeight, iframeMaxWidth, iframeMaxHeight, src, iframeTitle) { 2776 var title = iframeTitle ? 'title="' + iframeTitle + '"' : ''; 2777 return "<div class=\"lg-video-cont lg-has-iframe\" style=\"width:" + iframeWidth + "; max-width:" + iframeMaxWidth + "; height: " + iframeHeight + "; max-height:" + iframeMaxHeight + "\">\n <iframe class=\"lg-object\" frameborder=\"0\" " + title + " src=\"" + src + "\" allowfullscreen=\"true\"></iframe>\n </div>"; 2778 }, 2779 getImgMarkup: function (index, src, altAttr, srcset, sizes, sources) { 2780 var srcsetAttr = srcset ? "srcset=\"" + srcset + "\"" : ''; 2781 var sizesAttr = sizes ? "sizes=\"" + sizes + "\"" : ''; 2782 var imgMarkup = "<img " + altAttr + " " + srcsetAttr + " " + sizesAttr + " class=\"lg-object lg-image\" data-index=\"" + index + "\" src=\"" + src + "\" />"; 2783 var sourceTag = ''; 2784 if (sources) { 2785 var sourceObj = typeof sources === 'string' ? JSON.parse(sources) : sources; 2786 sourceTag = sourceObj.map(function (source) { 2787 var attrs = ''; 2788 Object.keys(source).forEach(function (key) { 2789 // Do not remove the first space as it is required to separate the attributes 2790 attrs += " " + key + "=\"" + source[key] + "\""; 2791 }); 2792 return "<source " + attrs + "></source>"; 2793 }); 2794 } 2795 return "" + sourceTag + imgMarkup; 2796 }, 2797 // Get src from responsive src 2798 getResponsiveSrc: function (srcItms) { 2799 var rsWidth = []; 2800 var rsSrc = []; 2801 var src = ''; 2802 for (var i = 0; i < srcItms.length; i++) { 2803 var _src = srcItms[i].split(' '); 2804 // Manage empty space 2805 if (_src[0] === '') { 2806 _src.splice(0, 1); 2807 } 2808 rsSrc.push(_src[0]); 2809 rsWidth.push(_src[1]); 2810 } 2811 var wWidth = window.innerWidth; 2812 for (var j = 0; j < rsWidth.length; j++) { 2813 if (parseInt(rsWidth[j], 10) > wWidth) { 2814 src = rsSrc[j]; 2815 break; 2816 } 2817 } 2818 return src; 2819 }, 2820 isImageLoaded: function (img) { 2821 if (!img) 2822 return false; 2823 // During the onload event, IE correctly identifies any images that 2824 // weren’t downloaded as not complete. Others should too. Gecko-based 2825 // browsers act like NS4 in that they report this incorrectly. 2826 if (!img.complete) { 2827 return false; 2828 } 2829 // However, they do have two very useful properties: naturalWidth and 2830 // naturalHeight. These give the true size of the image. If it failed 2831 // to load, either of these should be zero. 2832 if (img.naturalWidth === 0) { 2833 return false; 2834 } 2835 // No other way of checking: assume it’s ok. 2836 return true; 2837 }, 2838 getVideoPosterMarkup: function (_poster, dummyImg, videoContStyle, playVideoString, _isVideo) { 2839 var videoClass = ''; 2840 if (_isVideo && _isVideo.youtube) { 2841 videoClass = 'lg-has-youtube'; 2842 } 2843 else if (_isVideo && _isVideo.vimeo) { 2844 videoClass = 'lg-has-vimeo'; 2845 } 2846 else { 2847 videoClass = 'lg-has-html5'; 2848 } 2849 return "<div class=\"lg-video-cont " + videoClass + "\" style=\"" + videoContStyle + "\">\n <div class=\"lg-video-play-button\">\n <svg\n viewBox=\"0 0 20 20\"\n preserveAspectRatio=\"xMidYMid\"\n focusable=\"false\"\n aria-labelledby=\"" + playVideoString + "\"\n role=\"img\"\n class=\"lg-video-play-icon\"\n >\n <title>" + playVideoString + "</title>\n <polygon class=\"lg-video-play-icon-inner\" points=\"1,0 20,10 1,20\"></polygon>\n </svg>\n <svg class=\"lg-video-play-icon-bg\" viewBox=\"0 0 50 50\" focusable=\"false\">\n <circle cx=\"50%\" cy=\"50%\" r=\"20\"></circle></svg>\n <svg class=\"lg-video-play-icon-circle\" viewBox=\"0 0 50 50\" focusable=\"false\">\n <circle cx=\"50%\" cy=\"50%\" r=\"20\"></circle>\n </svg>\n </div>\n " + (dummyImg || '') + "\n <img class=\"lg-object lg-video-poster\" src=\"" + _poster + "\" />\n </div>"; 2850 }, 2851 getFocusableElements: function (container) { 2852 var elements = container.querySelectorAll('a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type="text"]:not([disabled]), input[type="radio"]:not([disabled]), input[type="checkbox"]:not([disabled]), select:not([disabled])'); 2853 var visibleElements = [].filter.call(elements, function (element) { 2854 var style = window.getComputedStyle(element); 2855 return style.display !== 'none' && style.visibility !== 'hidden'; 2856 }); 2857 return visibleElements; 2858 }, 2859 /** 2860 * @desc Create dynamic elements array from gallery items when dynamic option is false 2861 * It helps to avoid frequent DOM interaction 2862 * and avoid multiple checks for dynamic elments 2863 * 2864 * @returns {Array} dynamicEl 2865 */ 2866 getDynamicOptions: function (items, extraProps, getCaptionFromTitleOrAlt, exThumbImage) { 2867 var dynamicElements = []; 2868 var availableDynamicOptions = __spreadArrays(defaultDynamicOptions, extraProps); 2869 [].forEach.call(items, function (item) { 2870 var dynamicEl = {}; 2871 for (var i = 0; i < item.attributes.length; i++) { 2872 var attr = item.attributes[i]; 2873 if (attr.specified) { 2874 var dynamicAttr = convertToData(attr.name); 2875 var label = ''; 2876 if (availableDynamicOptions.indexOf(dynamicAttr) > -1) { 2877 label = dynamicAttr; 2878 } 2879 if (label) { 2880 dynamicEl[label] = attr.value; 2881 } 2882 } 2883 } 2884 var currentItem = $LG(item); 2885 var alt = currentItem.find('img').first().attr('alt'); 2886 var title = currentItem.attr('title'); 2887 var thumb = exThumbImage 2888 ? currentItem.attr(exThumbImage) 2889 : currentItem.find('img').first().attr('src'); 2890 dynamicEl.thumb = thumb; 2891 if (getCaptionFromTitleOrAlt && !dynamicEl.subHtml) { 2892 dynamicEl.subHtml = title || alt || ''; 2893 } 2894 dynamicEl.alt = alt || title || ''; 2895 dynamicElements.push(dynamicEl); 2896 }); 2897 return dynamicElements; 2898 }, 2899 isMobile: function () { 2900 return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent); 2901 }, 2902 /** 2903 * @desc Check the given src is video 2904 * @param {String} src 2905 * @return {Object} video type 2906 * Ex:{ youtube : ["//www.youtube.com/watch?v=c0asJgSyxcY", "c0asJgSyxcY"] } 2907 * 2908 * @todo - this information can be moved to dynamicEl to avoid frequent calls 2909 */ 2910 isVideo: function (src, isHTML5VIdeo, index) { 2911 if (!src) { 2912 if (isHTML5VIdeo) { 2913 return { 2914 html5: true, 2915 }; 2916 } 2917 else { 2918 console.error('lightGallery :- data-src is not provided on slide item ' + 2919 (index + 1) + 2920 '. Please make sure the selector property is properly configured. More info - https://www.lightgalleryjs.com/demos/html-markup/'); 2921 return; 2922 } 2923 } 2924 var youtube = src.match(/\/\/(?:www\.)?youtu(?:\.be|be\.com|be-nocookie\.com)\/(?:watch\?v=|embed\/)?([a-z0-9\-\_\%]+)([\&|?][\S]*)*/i); 2925 var vimeo = src.match(/\/\/(?:www\.)?(?:player\.)?vimeo.com\/(?:video\/)?([0-9a-z\-_]+)(.*)?/i); 2926 var wistia = src.match(/https?:\/\/(.+)?(wistia\.com|wi\.st)\/(medias|embed)\/([0-9a-z\-_]+)(.*)/); 2927 if (youtube) { 2928 return { 2929 youtube: youtube, 2930 }; 2931 } 2932 else if (vimeo) { 2933 return { 2934 vimeo: vimeo, 2935 }; 2936 } 2937 else if (wistia) { 2938 return { 2939 wistia: wistia, 2940 }; 2941 } 2942 }, 2943}; 2944 2945// @ref - https://stackoverflow.com/questions/3971841/how-to-resize-images-proportionally-keeping-the-aspect-ratio 2946// @ref - https://2ality.com/2017/04/setting-up-multi-platform-packages.html 2947// Unique id for each gallery 2948var lgId = 0; 2949var LightGallery = /** @class */ (function () { 2950 function LightGallery(element, options) { 2951 this.lgOpened = false; 2952 this.index = 0; 2953 // lightGallery modules 2954 this.plugins = []; 2955 // false when lightGallery load first slide content; 2956 this.lGalleryOn = false; 2957 // True when a slide animation is in progress 2958 this.lgBusy = false; 2959 this.currentItemsInDom = []; 2960 // Scroll top value before lightGallery is opened 2961 this.prevScrollTop = 0; 2962 this.bodyPaddingRight = 0; 2963 this.isDummyImageRemoved = false; 2964 this.dragOrSwipeEnabled = false; 2965 this.mediaContainerPosition = { 2966 top: 0, 2967 bottom: 0, 2968 }; 2969 if (!element) { 2970 return this; 2971 } 2972 lgId++; 2973 this.lgId = lgId; 2974 this.el = element; 2975 this.LGel = $LG(element); 2976 this.generateSettings(options); 2977 this.buildModules(); 2978 // When using dynamic mode, ensure dynamicEl is an array 2979 if (this.settings.dynamic && 2980 this.settings.dynamicEl !== undefined && 2981 !Array.isArray(this.settings.dynamicEl)) { 2982 throw 'When using dynamic mode, you must also define dynamicEl as an Array.'; 2983 } 2984 this.galleryItems = this.getItems(); 2985 this.normalizeSettings(); 2986 // Gallery items 2987 this.init(); 2988 this.validateLicense(); 2989 return this; 2990 } 2991 LightGallery.prototype.generateSettings = function (options) { 2992 // lightGallery settings 2993 this.settings = __assign(__assign({}, lightGalleryCoreSettings), options); 2994 if (this.settings.isMobile && 2995 typeof this.settings.isMobile === 'function' 2996 ? this.settings.isMobile() 2997 : utils.isMobile()) { 2998 var mobileSettings = __assign(__assign({}, this.settings.mobileSettings), this.settings.mobileSettings); 2999 this.settings = __assign(__assign({}, this.settings), mobileSettings); 3000 } 3001 }; 3002 LightGallery.prototype.normalizeSettings = function () { 3003 if (this.settings.slideEndAnimation) { 3004 this.settings.hideControlOnEnd = false; 3005 } 3006 if (!this.settings.closable) { 3007 this.settings.swipeToClose = false; 3008 } 3009 // And reset it on close to get the correct value next time 3010 this.zoomFromOrigin = this.settings.zoomFromOrigin; 3011 // At the moment, Zoom from image doesn't support dynamic options 3012 // @todo add zoomFromOrigin support for dynamic images 3013 if (this.settings.dynamic) { 3014 this.zoomFromOrigin = false; 3015 } 3016 if (!this.settings.container) { 3017 this.settings.container = document.body; 3018 } 3019 // settings.preload should not be grater than $item.length 3020 this.settings.preload = Math.min(this.settings.preload, this.galleryItems.length); 3021 }; 3022 LightGallery.prototype.init = function () { 3023 var _this = this; 3024 this.addSlideVideoInfo(this.galleryItems); 3025 this.buildStructure(); 3026 this.LGel.trigger(lGEvents.init, { 3027 instance: this, 3028 }); 3029 if (this.settings.keyPress) { 3030 this.keyPress(); 3031 } 3032 setTimeout(function () { 3033 _this.enableDrag(); 3034 _this.enableSwipe(); 3035 _this.triggerPosterClick(); 3036 }, 50); 3037 this.arrow(); 3038 if (this.settings.mousewheel) { 3039 this.mousewheel(); 3040 } 3041 if (!this.settings.dynamic) { 3042 this.openGalleryOnItemClick(); 3043 } 3044 }; 3045 LightGallery.prototype.openGalleryOnItemClick = function () { 3046 var _this = this; 3047 var _loop_1 = function (index) { 3048 var element = this_1.items[index]; 3049 var $element = $LG(element); 3050 // Using different namespace for click because click event should not unbind if selector is same object('this') 3051 // @todo manage all event listners - should have namespace that represent element 3052 var uuid = lgQuery.generateUUID(); 3053 $element 3054 .attr('data-lg-id', uuid) 3055 .on("click.lgcustom-item-" + uuid, function (e) { 3056 e.preventDefault(); 3057 var currentItemIndex = _this.settings.index || index; 3058 _this.openGallery(currentItemIndex, element); 3059 }); 3060 }; 3061 var this_1 = this; 3062 // Using for loop instead of using bubbling as the items can be any html element. 3063 for (var index = 0; index < this.items.length; index++) { 3064 _loop_1(index); 3065 } 3066 }; 3067 /** 3068 * Module constructor 3069 * Modules are build incrementally. 3070 * Gallery should be opened only once all the modules are initialized. 3071 * use moduleBuildTimeout to make sure this 3072 */ 3073 LightGallery.prototype.buildModules = function () { 3074 var _this = this; 3075 this.settings.plugins.forEach(function (plugin) { 3076 _this.plugins.push(new plugin(_this, $LG)); 3077 }); 3078 }; 3079 LightGallery.prototype.validateLicense = function () { 3080 if (!this.settings.licenseKey) { 3081 console.error('Please provide a valid license key'); 3082 } 3083 else if (this.settings.licenseKey === '0000-0000-000-0000') { 3084 console.warn("lightGallery: " + this.settings.licenseKey + " license key is not valid for production use"); 3085 } 3086 }; 3087 LightGallery.prototype.getSlideItem = function (index) { 3088 return $LG(this.getSlideItemId(index)); 3089 }; 3090 LightGallery.prototype.getSlideItemId = function (index) { 3091 return "#lg-item-" + this.lgId + "-" + index; 3092 }; 3093 LightGallery.prototype.getIdName = function (id) { 3094 return id + "-" + this.lgId; 3095 }; 3096 LightGallery.prototype.getElementById = function (id) { 3097 return $LG("#" + this.getIdName(id)); 3098 }; 3099 LightGallery.prototype.manageSingleSlideClassName = function () { 3100 if (this.galleryItems.length < 2) { 3101 this.outer.addClass('lg-single-item'); 3102 } 3103 else { 3104 this.outer.removeClass('lg-single-item'); 3105 } 3106 }; 3107 LightGallery.prototype.buildStructure = function () { 3108 var _this = this; 3109 var container = this.$container && this.$container.get(); 3110 if (container) { 3111 return; 3112 } 3113 var controls = ''; 3114 var subHtmlCont = ''; 3115 // Create controls 3116 if (this.settings.controls) { 3117 controls = "<button type=\"button\" id=\"" + this.getIdName('lg-prev') + "\" aria-label=\"" + this.settings.strings['previousSlide'] + "\" class=\"lg-prev lg-icon\"> " + this.settings.prevHtml + " </button>\n <button type=\"button\" id=\"" + this.getIdName('lg-next') + "\" aria-label=\"" + this.settings.strings['nextSlide'] + "\" class=\"lg-next lg-icon\"> " + this.settings.nextHtml + " </button>"; 3118 } 3119 if (this.settings.appendSubHtmlTo !== '.lg-item') { 3120 subHtmlCont = 3121 '<div class="lg-sub-html" role="status" aria-live="polite"></div>'; 3122 } 3123 var addClasses = ''; 3124 if (this.settings.allowMediaOverlap) { 3125 // Do not remove space before last single quote 3126 addClasses += 'lg-media-overlap '; 3127 } 3128 var ariaLabelledby = this.settings.ariaLabelledby 3129 ? 'aria-labelledby="' + this.settings.ariaLabelledby + '"' 3130 : ''; 3131 var ariaDescribedby = this.settings.ariaDescribedby 3132 ? 'aria-describedby="' + this.settings.ariaDescribedby + '"' 3133 : ''; 3134 var containerClassName = "lg-container " + this.settings.addClass + " " + (document.body !== this.settings.container ? 'lg-inline' : ''); 3135 var closeIcon = this.settings.closable && this.settings.showCloseIcon 3136 ? "<button type=\"button\" aria-label=\"" + this.settings.strings['closeGallery'] + "\" id=\"" + this.getIdName('lg-close') + "\" class=\"lg-close lg-icon\"></button>" 3137 : ''; 3138 var maximizeIcon = this.settings.showMaximizeIcon 3139 ? "<button type=\"button\" aria-label=\"" + this.settings.strings['toggleMaximize'] + "\" id=\"" + this.getIdName('lg-maximize') + "\" class=\"lg-maximize lg-icon\"></button>" 3140 : ''; 3141 var template = "\n <div class=\"" + containerClassName + "\" id=\"" + this.getIdName('lg-container') + "\" tabindex=\"-1\" aria-modal=\"true\" " + ariaLabelledby + " " + ariaDescribedby + " role=\"dialog\"\n >\n <div id=\"" + this.getIdName('lg-backdrop') + "\" class=\"lg-backdrop\"></div>\n\n <div id=\"" + this.getIdName('lg-outer') + "\" class=\"lg-outer lg-use-css3 lg-css3 lg-hide-items " + addClasses + " \">\n\n <div id=\"" + this.getIdName('lg-content') + "\" class=\"lg-content\">\n <div id=\"" + this.getIdName('lg-inner') + "\" class=\"lg-inner\">\n </div>\n " + controls + "\n </div>\n <div id=\"" + this.getIdName('lg-toolbar') + "\" class=\"lg-toolbar lg-group\">\n " + maximizeIcon + "\n " + closeIcon + "\n </div>\n " + (this.settings.appendSubHtmlTo === '.lg-outer' 3142 ? subHtmlCont 3143 : '') + "\n <div id=\"" + this.getIdName('lg-components') + "\" class=\"lg-components\">\n " + (this.settings.appendSubHtmlTo === '.lg-sub-html' 3144 ? subHtmlCont 3145 : '') + "\n </div>\n </div>\n </div>\n "; 3146 $LG(this.settings.container).append(template); 3147 if (document.body !== this.settings.container) { 3148 $LG(this.settings.container).css('position', 'relative'); 3149 } 3150 this.outer = this.getElementById('lg-outer'); 3151 this.$lgComponents = this.getElementById('lg-components'); 3152 this.$backdrop = this.getElementById('lg-backdrop'); 3153 this.$container = this.getElementById('lg-container'); 3154 this.$inner = this.getElementById('lg-inner'); 3155 this.$content = this.getElementById('lg-content'); 3156 this.$toolbar = this.getElementById('lg-toolbar'); 3157 this.$backdrop.css('transition-duration', this.settings.backdropDuration + 'ms'); 3158 var outerClassNames = this.settings.mode + " "; 3159 this.manageSingleSlideClassName(); 3160 if (this.settings.enableDrag) { 3161 outerClassNames += 'lg-grab '; 3162 } 3163 this.outer.addClass(outerClassNames); 3164 this.$inner.css('transition-timing-function', this.settings.easing); 3165 this.$inner.css('transition-duration', this.settings.speed + 'ms'); 3166 if (this.settings.download) { 3167 this.$toolbar.append("<a id=\"" + this.getIdName('lg-download') + "\" target=\"_blank\" rel=\"noopener\" aria-label=\"" + this.settings.strings['download'] + "\" download class=\"lg-download lg-icon\"></a>"); 3168 } 3169 this.counter(); 3170 $LG(window).on("resize.lg.global" + this.lgId + " orientationchange.lg.global" + this.lgId, function () { 3171 _this.refreshOnResize(); 3172 }); 3173 this.hideBars(); 3174 this.manageCloseGallery(); 3175 this.toggleMaximize(); 3176 this.initModules(); 3177 }; 3178 LightGallery.prototype.refreshOnResize = function () { 3179 if (this.lgOpened) { 3180 var currentGalleryItem = this.galleryItems[this.index]; 3181 var __slideVideoInfo = currentGalleryItem.__slideVideoInfo; 3182 this.mediaContainerPosition = this.getMediaContainerPosition(); 3183 var _a = this.mediaContainerPosition, top_1 = _a.top, bottom = _a.bottom; 3184 this.currentImageSize = utils.getSize(this.items[this.index], this.outer, top_1 + bottom, __slideVideoInfo && this.settings.videoMaxSize); 3185 if (__slideVideoInfo) { 3186 this.resizeVideoSlide(this.index, this.currentImageSize); 3187 } 3188 if (this.zoomFromOrigin && !this.isDummyImageRemoved) { 3189 var imgStyle = this.getDummyImgStyles(this.currentImageSize); 3190 this.outer 3191 .find('.lg-current .lg-dummy-img') 3192 .first() 3193 .attr('style', imgStyle); 3194 } 3195 this.LGel.trigger(lGEvents.containerResize); 3196 } 3197 }; 3198 LightGallery.prototype.resizeVideoSlide = function (index, imageSize) { 3199 var lgVideoStyle = this.getVideoContStyle(imageSize); 3200 var currentSlide = this.getSlideItem(index); 3201 currentSlide.find('.lg-video-cont').attr('style', lgVideoStyle); 3202 }; 3203 /** 3204 * Update slides dynamically. 3205 * Add, edit or delete slides dynamically when lightGallery is opened. 3206 * Modify the current gallery items and pass it via updateSlides method 3207 * @note 3208 * - Do not mutate existing lightGallery items directly. 3209 * - Always pass new list of gallery items 3210 * - You need to take care of thumbnails outside the gallery if any 3211 * - user this method only if you want to update slides when the gallery is opened. Otherwise, use `refresh()` method. 3212 * @param items Gallery items 3213 * @param index After the update operation, which slide gallery should navigate to 3214 * @category lGPublicMethods 3215 * @example 3216 * const plugin = lightGallery(); 3217 * 3218 * // Adding slides dynamically 3219 * let galleryItems = [ 3220 * // Access existing lightGallery items 3221 * // galleryItems are automatically generated internally from the gallery HTML markup 3222 * // or directly from galleryItems when dynamic gallery is used 3223 * ...plugin.galleryItems, 3224 * ...[ 3225 * { 3226 * src: 'img/img-1.png', 3227 * thumb: 'img/thumb1.png', 3228 * }, 3229 * ], 3230 * ]; 3231 * plugin.updateSlides( 3232 * galleryItems, 3233 * plugin.index, 3234 * ); 3235 * 3236 * 3237 * // Remove slides dynamically 3238 * galleryItems = JSON.parse( 3239 * JSON.stringify(updateSlideInstance.galleryItems), 3240 * ); 3241 * galleryItems.shift(); 3242 * updateSlideInstance.updateSlides(galleryItems, 1); 3243 * @see <a href="/demos/update-slides/">Demo</a> 3244 */ 3245 LightGallery.prototype.updateSlides = function (items, index) { 3246 if (this.index > items.length - 1) { 3247 this.index = items.length - 1; 3248 } 3249 if (items.length === 1) { 3250 this.index = 0; 3251 } 3252 if (!items.length) { 3253 this.closeGallery(); 3254 return; 3255 } 3256 var currentSrc = this.galleryItems[index].src; 3257 this.galleryItems = items; 3258 this.updateControls(); 3259 this.$inner.empty(); 3260 this.currentItemsInDom = []; 3261 var _index = 0; 3262 // Find the current index based on source value of the slide 3263 this.galleryItems.some(function (galleryItem, itemIndex) { 3264 if (galleryItem.src === currentSrc) { 3265 _index = itemIndex; 3266 return true; 3267 } 3268 return false; 3269 }); 3270 this.currentItemsInDom = this.organizeSlideItems(_index, -1); 3271 this.loadContent(_index, true); 3272 this.getSlideItem(_index).addClass('lg-current'); 3273 this.index = _index; 3274 this.updateCurrentCounter(_index); 3275 this.LGel.trigger(lGEvents.updateSlides); 3276 }; 3277 // Get gallery items based on multiple conditions 3278 LightGallery.prototype.getItems = function () { 3279 // Gallery items 3280 this.items = []; 3281 if (!this.settings.dynamic) { 3282 if (this.settings.selector === 'this') { 3283 this.items.push(this.el); 3284 } 3285 else if (this.settings.selector) { 3286 if (typeof this.settings.selector === 'string') { 3287 if (this.settings.selectWithin) { 3288 var selectWithin = $LG(this.settings.selectWithin); 3289 this.items = selectWithin 3290 .find(this.settings.selector) 3291 .get(); 3292 } 3293 else { 3294 this.items = this.el.querySelectorAll(this.settings.selector); 3295 } 3296 } 3297 else { 3298 this.items = this.settings.selector; 3299 } 3300 } 3301 else { 3302 this.items = this.el.children; 3303 } 3304 return utils.getDynamicOptions(this.items, this.settings.extraProps, this.settings.getCaptionFromTitleOrAlt, this.settings.exThumbImage); 3305 } 3306 else { 3307 return this.settings.dynamicEl || []; 3308 } 3309 }; 3310 LightGallery.prototype.shouldHideScrollbar = function () { 3311 return (this.settings.hideScrollbar && 3312 document.body === this.settings.container); 3313 }; 3314 LightGallery.prototype.hideScrollbar = function () { 3315 if (!this.shouldHideScrollbar()) { 3316 return; 3317 } 3318 this.bodyPaddingRight = parseFloat($LG('body').style().paddingRight); 3319 var bodyRect = document.documentElement.getBoundingClientRect(); 3320 var scrollbarWidth = window.innerWidth - bodyRect.width; 3321 $LG(document.body).css('padding-right', scrollbarWidth + this.bodyPaddingRight + 'px'); 3322 $LG(document.body).addClass('lg-overlay-open'); 3323 }; 3324 LightGallery.prototype.resetScrollBar = function () { 3325 if (!this.shouldHideScrollbar()) { 3326 return; 3327 } 3328 $LG(document.body).css('padding-right', this.bodyPaddingRight + 'px'); 3329 $LG(document.body).removeClass('lg-overlay-open'); 3330 }; 3331 /** 3332 * Open lightGallery. 3333 * Open gallery with specific slide by passing index of the slide as parameter. 3334 * @category lGPublicMethods 3335 * @param {Number} index - index of the slide 3336 * @param {HTMLElement} element - Which image lightGallery should zoom from 3337 * 3338 * @example 3339 * const $dynamicGallery = document.getElementById('dynamic-gallery-demo'); 3340 * const dynamicGallery = lightGallery($dynamicGallery, { 3341 * dynamic: true, 3342 * dynamicEl: [ 3343 * { 3344 * src: 'img/1.jpg', 3345 * thumb: 'img/thumb-1.jpg', 3346 * subHtml: '<h4>Image 1 title</h4><p>Image 1 descriptions.</p>', 3347 * }, 3348 * ... 3349 * ], 3350 * }); 3351 * $dynamicGallery.addEventListener('click', function () { 3352 * // Starts with third item.(Optional). 3353 * // This is useful if you want use dynamic mode with 3354 * // custom thumbnails (thumbnails outside gallery), 3355 * dynamicGallery.openGallery(2); 3356 * }); 3357 * 3358 */ 3359 LightGallery.prototype.openGallery = function (index, element) { 3360 var _this = this; 3361 if (index === void 0) { index = this.settings.index; } 3362 // prevent accidental double execution 3363 if (this.lgOpened) 3364 return; 3365 this.lgOpened = true; 3366 this.outer.removeClass('lg-hide-items'); 3367 this.hideScrollbar(); 3368 // Add display block, but still has opacity 0 3369 this.$container.addClass('lg-show'); 3370 var itemsToBeInsertedToDom = this.getItemsToBeInsertedToDom(index, index); 3371 this.currentItemsInDom = itemsToBeInsertedToDom; 3372 var items = ''; 3373 itemsToBeInsertedToDom.forEach(function (item) { 3374 items = items + ("<div id=\"" + item + "\" class=\"lg-item\"></div>"); 3375 }); 3376 this.$inner.append(items); 3377 this.addHtml(index); 3378 var transform = ''; 3379 this.mediaContainerPosition = this.getMediaContainerPosition(); 3380 var _a = this.mediaContainerPosition, top = _a.top, bottom = _a.bottom; 3381 if (!this.settings.allowMediaOverlap) { 3382 this.setMediaContainerPosition(top, bottom); 3383 } 3384 var __slideVideoInfo = this.galleryItems[index].__slideVideoInfo; 3385 if (this.zoomFromOrigin && element) { 3386 this.currentImageSize = utils.getSize(element, this.outer, top + bottom, __slideVideoInfo && this.settings.videoMaxSize); 3387 transform = utils.getTransform(element, this.outer, top, bottom, this.currentImageSize); 3388 } 3389 if (!this.zoomFromOrigin || !transform) { 3390 this.outer.addClass(this.settings.startClass); 3391 this.getSlideItem(index).removeClass('lg-complete'); 3392 } 3393 var timeout = this.settings.zoomFromOrigin 3394 ? 100 3395 : this.settings.backdropDuration; 3396 setTimeout(function () { 3397 _this.outer.addClass('lg-components-open'); 3398 }, timeout); 3399 this.index = index; 3400 this.LGel.trigger(lGEvents.beforeOpen); 3401 // add class lg-current to remove initial transition 3402 this.getSlideItem(index).addClass('lg-current'); 3403 this.lGalleryOn = false; 3404 // Store the current scroll top value to scroll back after closing the gallery.. 3405 this.prevScrollTop = $LG(window).scrollTop(); 3406 setTimeout(function () { 3407 // Need to check both zoomFromOrigin and transform values as we need to set set the 3408 // default opening animation if user missed to add the lg-size attribute 3409 if (_this.zoomFromOrigin && transform) { 3410 var currentSlide_1 = _this.getSlideItem(index); 3411 currentSlide_1.css('transform', transform); 3412 setTimeout(function () { 3413 currentSlide_1 3414 .addClass('lg-start-progress lg-start-end-progress') 3415 .css('transition-duration', _this.settings.startAnimationDuration + 'ms'); 3416 _this.outer.addClass('lg-zoom-from-image'); 3417 }); 3418 setTimeout(function () { 3419 currentSlide_1.css('transform', 'translate3d(0, 0, 0)'); 3420 }, 100); 3421 } 3422 setTimeout(function () { 3423 _this.$backdrop.addClass('in'); 3424 _this.$container.addClass('lg-show-in'); 3425 }, 10); 3426 setTimeout(function () { 3427 if (_this.settings.trapFocus && 3428 document.body === _this.settings.container) { 3429 _this.trapFocus(); 3430 } 3431 }, _this.settings.backdropDuration + 50); 3432 // lg-visible class resets gallery opacity to 1 3433 if (!_this.zoomFromOrigin || !transform) { 3434 setTimeout(function () { 3435 _this.outer.addClass('lg-visible'); 3436 }, _this.settings.backdropDuration); 3437 } 3438 // initiate slide function 3439 _this.slide(index, false, false, false); 3440 _this.LGel.trigger(lGEvents.afterOpen); 3441 }); 3442 if (document.body === this.settings.container) { 3443 $LG('html').addClass('lg-on'); 3444 } 3445 }; 3446 /** 3447 * Note - Changing the position of the media on every slide transition creates a flickering effect. 3448 * Therefore, The height of the caption is calculated dynamically, only once based on the first slide caption. 3449 * if you have dynamic captions for each media, 3450 * you can provide an appropriate height for the captions via allowMediaOverlap option 3451 */ 3452 LightGallery.prototype.getMediaContainerPosition = function () { 3453 if (this.settings.allowMediaOverlap) { 3454 return { 3455 top: 0, 3456 bottom: 0, 3457 }; 3458 } 3459 var top = this.$toolbar.get().clientHeight || 0; 3460 var subHtml = this.outer.find('.lg-components .lg-sub-html').get(); 3461 var captionHeight = this.settings.defaultCaptionHeight || 3462 (subHtml && subHtml.clientHeight) || 3463 0; 3464 var thumbContainer = this.outer.find('.lg-thumb-outer').get(); 3465 var thumbHeight = thumbContainer ? thumbContainer.clientHeight : 0; 3466 var bottom = thumbHeight + captionHeight; 3467 return { 3468 top: top, 3469 bottom: bottom, 3470 }; 3471 }; 3472 LightGallery.prototype.setMediaContainerPosition = function (top, bottom) { 3473 if (top === void 0) { top = 0; } 3474 if (bottom === void 0) { bottom = 0; } 3475 this.$content.css('top', top + 'px').css('bottom', bottom + 'px'); 3476 }; 3477 LightGallery.prototype.hideBars = function () { 3478 var _this = this; 3479 // Hide controllers if mouse doesn't move for some period 3480 setTimeout(function () { 3481 _this.outer.removeClass('lg-hide-items'); 3482 if (_this.settings.hideBarsDelay > 0) { 3483 _this.outer.on('mousemove.lg click.lg touchstart.lg', function () { 3484 _this.outer.removeClass('lg-hide-items'); 3485 clearTimeout(_this.hideBarTimeout); 3486 // Timeout will be cleared on each slide movement also 3487 _this.hideBarTimeout = setTimeout(function () { 3488 _this.outer.addClass('lg-hide-items'); 3489 }, _this.settings.hideBarsDelay); 3490 }); 3491 _this.outer.trigger('mousemove.lg'); 3492 } 3493 }, this.settings.showBarsAfter); 3494 }; 3495 LightGallery.prototype.initPictureFill = function ($img) { 3496 if (this.settings.supportLegacyBrowser) { 3497 try { 3498 picturefill({ 3499 elements: [$img.get()], 3500 }); 3501 } 3502 catch (e) { 3503 console.warn('lightGallery :- If you want srcset or picture tag to be supported for older browser please include picturefil javascript library in your document.'); 3504 } 3505 } 3506 }; 3507 /** 3508 * @desc Create image counter 3509 * Ex: 1/10 3510 */ 3511 LightGallery.prototype.counter = function () { 3512 if (this.settings.counter) { 3513 var counterHtml = "<div class=\"lg-counter\" role=\"status\" aria-live=\"polite\">\n <span id=\"" + this.getIdName('lg-counter-current') + "\" class=\"lg-counter-current\">" + (this.index + 1) + " </span> /\n <span id=\"" + this.getIdName('lg-counter-all') + "\" class=\"lg-counter-all\">" + this.galleryItems.length + " </span></div>"; 3514 this.outer.find(this.settings.appendCounterTo).append(counterHtml); 3515 } 3516 }; 3517 /** 3518 * @desc add sub-html into the slide 3519 * @param {Number} index - index of the slide 3520 */ 3521 LightGallery.prototype.addHtml = function (index) { 3522 var subHtml; 3523 var subHtmlUrl; 3524 if (this.galleryItems[index].subHtmlUrl) { 3525 subHtmlUrl = this.galleryItems[index].subHtmlUrl; 3526 } 3527 else { 3528 subHtml = this.galleryItems[index].subHtml; 3529 } 3530 if (!subHtmlUrl) { 3531 if (subHtml) { 3532 // get first letter of sub-html 3533 // if first letter starts with . or # get the html form the jQuery object 3534 var fL = subHtml.substring(0, 1); 3535 if (fL === '.' || fL === '#') { 3536 if (this.settings.subHtmlSelectorRelative && 3537 !this.settings.dynamic) { 3538 subHtml = $LG(this.items) 3539 .eq(index) 3540 .find(subHtml) 3541 .first() 3542 .html(); 3543 } 3544 else { 3545 subHtml = $LG(subHtml).first().html(); 3546 } 3547 } 3548 } 3549 else { 3550 subHtml = ''; 3551 } 3552 } 3553 if (this.settings.appendSubHtmlTo !== '.lg-item') { 3554 if (subHtmlUrl) { 3555 this.outer.find('.lg-sub-html').load(subHtmlUrl); 3556 } 3557 else { 3558 this.outer.find('.lg-sub-html').html(subHtml); 3559 } 3560 } 3561 else { 3562 var currentSlide = $LG(this.getSlideItemId(index)); 3563 if (subHtmlUrl) { 3564 currentSlide.load(subHtmlUrl); 3565 } 3566 else { 3567 currentSlide.append("<div class=\"lg-sub-html\">" + subHtml + "</div>"); 3568 } 3569 } 3570 // Add lg-empty-html class if title doesn't exist 3571 if (typeof subHtml !== 'undefined' && subHtml !== null) { 3572 if (subHtml === '') { 3573 this.outer 3574 .find(this.settings.appendSubHtmlTo) 3575 .addClass('lg-empty-html'); 3576 } 3577 else { 3578 this.outer 3579 .find(this.settings.appendSubHtmlTo) 3580 .removeClass('lg-empty-html'); 3581 } 3582 } 3583 this.LGel.trigger(lGEvents.afterAppendSubHtml, { 3584 index: index, 3585 }); 3586 }; 3587 /** 3588 * @desc Preload slides 3589 * @param {Number} index - index of the slide 3590 * @todo preload not working for the first slide, Also, should work for the first and last slide as well 3591 */ 3592 LightGallery.prototype.preload = function (index) { 3593 for (var i = 1; i <= this.settings.preload; i++) { 3594 if (i >= this.galleryItems.length - index) { 3595 break; 3596 } 3597 this.loadContent(index + i, false); 3598 } 3599 for (var j = 1; j <= this.settings.preload; j++) { 3600 if (index - j < 0) { 3601 break; 3602 } 3603 this.loadContent(index - j, false); 3604 } 3605 }; 3606 LightGallery.prototype.getDummyImgStyles = function (imageSize) { 3607 if (!imageSize) 3608 return ''; 3609 return "width:" + imageSize.width + "px;\n margin-left: -" + imageSize.width / 2 + "px;\n margin-top: -" + imageSize.height / 2 + "px;\n height:" + imageSize.height + "px"; 3610 }; 3611 LightGallery.prototype.getVideoContStyle = function (imageSize) { 3612 if (!imageSize) 3613 return ''; 3614 return "width:" + imageSize.width + "px;\n height:" + imageSize.height + "px"; 3615 }; 3616 LightGallery.prototype.getDummyImageContent = function ($currentSlide, index, alt) { 3617 var $currentItem; 3618 if (!this.settings.dynamic) { 3619 $currentItem = $LG(this.items).eq(index); 3620 } 3621 if ($currentItem) { 3622 var _dummyImgSrc = void 0; 3623 if (!this.settings.exThumbImage) { 3624 _dummyImgSrc = $currentItem.find('img').first().attr('src'); 3625 } 3626 else { 3627 _dummyImgSrc = $currentItem.attr(this.settings.exThumbImage); 3628 } 3629 if (!_dummyImgSrc) 3630 return ''; 3631 var imgStyle = this.getDummyImgStyles(this.currentImageSize); 3632 var dummyImgContent = "<img " + alt + " style=\"" + imgStyle + "\" class=\"lg-dummy-img\" src=\"" + _dummyImgSrc + "\" />"; 3633 $currentSlide.addClass('lg-first-slide'); 3634 this.outer.addClass('lg-first-slide-loading'); 3635 return dummyImgContent; 3636 } 3637 return ''; 3638 }; 3639 LightGallery.prototype.setImgMarkup = function (src, $currentSlide, index) { 3640 var currentGalleryItem = this.galleryItems[index]; 3641 var alt = currentGalleryItem.alt, srcset = currentGalleryItem.srcset, sizes = currentGalleryItem.sizes, sources = currentGalleryItem.sources; 3642 // Use the thumbnail as dummy image which will be resized to actual image size and 3643 // displayed on top of actual image 3644 var imgContent = ''; 3645 var altAttr = alt ? 'alt="' + alt + '"' : ''; 3646 if (this.isFirstSlideWithZoomAnimation()) { 3647 imgContent = this.getDummyImageContent($currentSlide, index, altAttr); 3648 } 3649 else { 3650 imgContent = utils.getImgMarkup(index, src, altAttr, srcset, sizes, sources); 3651 } 3652 var imgMarkup = "<picture class=\"lg-img-wrap\"> " + imgContent + "</picture>"; 3653 $currentSlide.prepend(imgMarkup); 3654 }; 3655 LightGallery.prototype.onSlideObjectLoad = function ($slide, isHTML5VideoWithoutPoster, onLoad, onError) { 3656 var mediaObject = $slide.find('.lg-object').first(); 3657 if (utils.isImageLoaded(mediaObject.get()) || 3658 isHTML5VideoWithoutPoster) { 3659 onLoad(); 3660 } 3661 else { 3662 mediaObject.on('load.lg error.lg', function () { 3663 onLoad && onLoad(); 3664 }); 3665 mediaObject.on('error.lg', function () { 3666 onError && onError(); 3667 }); 3668 } 3669 }; 3670 /** 3671 * 3672 * @param $el Current slide item 3673 * @param index 3674 * @param delay Delay is 0 except first time 3675 * @param speed Speed is same as delay, except it is 0 if gallery is opened via hash plugin 3676 * @param isFirstSlide 3677 */ 3678 LightGallery.prototype.onLgObjectLoad = function (currentSlide, index, delay, speed, isFirstSlide, isHTML5VideoWithoutPoster) { 3679 var _this = this; 3680 this.onSlideObjectLoad(currentSlide, isHTML5VideoWithoutPoster, function () { 3681 _this.triggerSlideItemLoad(currentSlide, index, delay, speed, isFirstSlide); 3682 }, function () { 3683 currentSlide.addClass('lg-complete lg-complete_'); 3684 currentSlide.html('<span class="lg-error-msg">Oops... Failed to load content...</span>'); 3685 }); 3686 }; 3687 LightGallery.prototype.triggerSlideItemLoad = function ($currentSlide, index, delay, speed, isFirstSlide) { 3688 var _this = this; 3689 var currentGalleryItem = this.galleryItems[index]; 3690 // Adding delay for video slides without poster for better performance and user experience 3691 // Videos should start playing once once the gallery is completely loaded 3692 var _speed = isFirstSlide && 3693 this.getSlideType(currentGalleryItem) === 'video' && 3694 !currentGalleryItem.poster 3695 ? speed 3696 : 0; 3697 setTimeout(function () { 3698 $currentSlide.addClass('lg-complete lg-complete_'); 3699 _this.LGel.trigger(lGEvents.slideItemLoad, { 3700 index: index, 3701 delay: delay || 0, 3702 isFirstSlide: isFirstSlide, 3703 }); 3704 }, _speed); 3705 }; 3706 LightGallery.prototype.isFirstSlideWithZoomAnimation = function () { 3707 return !!(!this.lGalleryOn && 3708 this.zoomFromOrigin && 3709 this.currentImageSize); 3710 }; 3711 // Add video slideInfo 3712 LightGallery.prototype.addSlideVideoInfo = function (items) { 3713 var _this = this; 3714 items.forEach(function (element, index) { 3715 element.__slideVideoInfo = utils.isVideo(element.src, !!element.video, index); 3716 if (element.__slideVideoInfo && 3717 _this.settings.loadYouTubePoster && 3718 !element.poster && 3719 element.__slideVideoInfo.youtube) { 3720 element.poster = "//img.youtube.com/vi/" + element.__slideVideoInfo.youtube[1] + "/maxresdefault.jpg"; 3721 } 3722 }); 3723 }; 3724 /** 3725 * Load slide content into slide. 3726 * This is used to load content into slides that is not visible too 3727 * @param {Number} index - index of the slide. 3728 * @param {Boolean} rec - if true call loadcontent() function again. 3729 */ 3730 LightGallery.prototype.loadContent = function (index, rec) { 3731 var _this = this; 3732 var currentGalleryItem = this.galleryItems[index]; 3733 var $currentSlide = $LG(this.getSlideItemId(index)); 3734 var poster = currentGalleryItem.poster, srcset = currentGalleryItem.srcset, sizes = currentGalleryItem.sizes, sources = currentGalleryItem.sources; 3735 var src = currentGalleryItem.src; 3736 var video = currentGalleryItem.video; 3737 var _html5Video = video && typeof video === 'string' ? JSON.parse(video) : video; 3738 if (currentGalleryItem.responsive) { 3739 var srcDyItms = currentGalleryItem.responsive.split(','); 3740 src = utils.getResponsiveSrc(srcDyItms) || src; 3741 } 3742 var videoInfo = currentGalleryItem.__slideVideoInfo; 3743 var lgVideoStyle = ''; 3744 var iframe = !!currentGalleryItem.iframe; 3745 var isFirstSlide = !this.lGalleryOn; 3746 // delay for adding complete class. it is 0 except first time. 3747 var delay = 0; 3748 if (isFirstSlide) { 3749 if (this.zoomFromOrigin && this.currentImageSize) { 3750 delay = this.settings.startAnimationDuration + 10; 3751 } 3752 else { 3753 delay = this.settings.backdropDuration + 10; 3754 } 3755 } 3756 if (!$currentSlide.hasClass('lg-loaded')) { 3757 if (videoInfo) { 3758 var _a = this.mediaContainerPosition, top_2 = _a.top, bottom = _a.bottom; 3759 var videoSize = utils.getSize(this.items[index], this.outer, top_2 + bottom, videoInfo && this.settings.videoMaxSize); 3760 lgVideoStyle = this.getVideoContStyle(videoSize); 3761 } 3762 if (iframe) { 3763 var markup = utils.getIframeMarkup(this.settings.iframeWidth, this.settings.iframeHeight, this.settings.iframeMaxWidth, this.settings.iframeMaxHeight, src, currentGalleryItem.iframeTitle); 3764 $currentSlide.prepend(markup); 3765 } 3766 else if (poster) { 3767 var dummyImg = ''; 3768 var hasStartAnimation = isFirstSlide && 3769 this.zoomFromOrigin && 3770 this.currentImageSize; 3771 if (hasStartAnimation) { 3772 dummyImg = this.getDummyImageContent($currentSlide, index, ''); 3773 } 3774 var markup = utils.getVideoPosterMarkup(poster, dummyImg || '', lgVideoStyle, this.settings.strings['playVideo'], videoInfo); 3775 $currentSlide.prepend(markup); 3776 } 3777 else if (videoInfo) { 3778 var markup = "<div class=\"lg-video-cont \" style=\"" + lgVideoStyle + "\"></div>"; 3779 $currentSlide.prepend(markup); 3780 } 3781 else { 3782 this.setImgMarkup(src, $currentSlide, index); 3783 if (srcset || sources) { 3784 var $img = $currentSlide.find('.lg-object'); 3785 this.initPictureFill($img); 3786 } 3787 } 3788 if (poster || videoInfo) { 3789 this.LGel.trigger(lGEvents.hasVideo, { 3790 index: index, 3791 src: src, 3792 html5Video: _html5Video, 3793 hasPoster: !!poster, 3794 }); 3795 } 3796 this.LGel.trigger(lGEvents.afterAppendSlide, { index: index }); 3797 if (this.lGalleryOn && 3798 this.settings.appendSubHtmlTo === '.lg-item') { 3799 this.addHtml(index); 3800 } 3801 } 3802 // For first time add some delay for displaying the start animation. 3803 var _speed = 0; 3804 // Do not change the delay value because it is required for zoom plugin. 3805 // If gallery opened from direct url (hash) speed value should be 0 3806 if (delay && !$LG(document.body).hasClass('lg-from-hash')) { 3807 _speed = delay; 3808 } 3809 // Only for first slide and zoomFromOrigin is enabled 3810 if (this.isFirstSlideWithZoomAnimation()) { 3811 setTimeout(function () { 3812 $currentSlide 3813 .removeClass('lg-start-end-progress lg-start-progress') 3814 .removeAttr('style'); 3815 }, this.settings.startAnimationDuration + 100); 3816 if (!$currentSlide.hasClass('lg-loaded')) { 3817 setTimeout(function () { 3818 if (_this.getSlideType(currentGalleryItem) === 'image') { 3819 var alt = currentGalleryItem.alt; 3820 var altAttr = alt ? 'alt="' + alt + '"' : ''; 3821 $currentSlide 3822 .find('.lg-img-wrap') 3823 .append(utils.getImgMarkup(index, src, altAttr, srcset, sizes, currentGalleryItem.sources)); 3824 if (srcset || sources) { 3825 var $img = $currentSlide.find('.lg-object'); 3826 _this.initPictureFill($img); 3827 } 3828 } 3829 if (_this.getSlideType(currentGalleryItem) === 'image' || 3830 (_this.getSlideType(currentGalleryItem) === 'video' && 3831 poster)) { 3832 _this.onLgObjectLoad($currentSlide, index, delay, _speed, true, false); 3833 // load remaining slides once the slide is completely loaded 3834 _this.onSlideObjectLoad($currentSlide, !!(videoInfo && videoInfo.html5 && !poster), function () { 3835 _this.loadContentOnFirstSlideLoad(index, $currentSlide, _speed); 3836 }, function () { 3837 _this.loadContentOnFirstSlideLoad(index, $currentSlide, _speed); 3838 }); 3839 } 3840 }, this.settings.startAnimationDuration + 100); 3841 } 3842 } 3843 // SLide content has been added to dom 3844 $currentSlide.addClass('lg-loaded'); 3845 if (!this.isFirstSlideWithZoomAnimation() || 3846 (this.getSlideType(currentGalleryItem) === 'video' && !poster)) { 3847 this.onLgObjectLoad($currentSlide, index, delay, _speed, isFirstSlide, !!(videoInfo && videoInfo.html5 && !poster)); 3848 } 3849 // When gallery is opened once content is loaded (second time) need to add lg-complete class for css styling 3850 if ((!this.zoomFromOrigin || !this.currentImageSize) && 3851 $currentSlide.hasClass('lg-complete_') && 3852 !this.lGalleryOn) { 3853 setTimeout(function () { 3854 $currentSlide.addClass('lg-complete'); 3855 }, this.settings.backdropDuration); 3856 } 3857 // Content loaded 3858 // Need to set lGalleryOn before calling preload function 3859 this.lGalleryOn = true; 3860 if (rec === true) { 3861 if (!$currentSlide.hasClass('lg-complete_')) { 3862 $currentSlide 3863 .find('.lg-object') 3864 .first() 3865 .on('load.lg error.lg', function () { 3866 _this.preload(index); 3867 }); 3868 } 3869 else { 3870 this.preload(index); 3871 } 3872 } 3873 }; 3874 /** 3875 * @desc Remove dummy image content and load next slides 3876 * Called only for the first time if zoomFromOrigin animation is enabled 3877 * @param index 3878 * @param $currentSlide 3879 * @param speed 3880 */ 3881 LightGallery.prototype.loadContentOnFirstSlideLoad = function (index, $currentSlide, speed) { 3882 var _this = this; 3883 setTimeout(function () { 3884 $currentSlide.find('.lg-dummy-img').remove(); 3885 $currentSlide.removeClass('lg-first-slide'); 3886 _this.outer.removeClass('lg-first-slide-loading'); 3887 _this.isDummyImageRemoved = true; 3888 _this.preload(index); 3889 }, speed + 300); 3890 }; 3891 LightGallery.prototype.getItemsToBeInsertedToDom = function (index, prevIndex, numberOfItems) { 3892 var _this = this; 3893 if (numberOfItems === void 0) { numberOfItems = 0; } 3894 var itemsToBeInsertedToDom = []; 3895 // Minimum 2 items should be there 3896 var possibleNumberOfItems = Math.max(numberOfItems, 3); 3897 possibleNumberOfItems = Math.min(possibleNumberOfItems, this.galleryItems.length); 3898 var prevIndexItem = "lg-item-" + this.lgId + "-" + prevIndex; 3899 if (this.galleryItems.length <= 3) { 3900 this.galleryItems.forEach(function (_element, index) { 3901 itemsToBeInsertedToDom.push("lg-item-" + _this.lgId + "-" + index); 3902 }); 3903 return itemsToBeInsertedToDom; 3904 } 3905 if (index < (this.galleryItems.length - 1) / 2) { 3906 for (var idx = index; idx > index - possibleNumberOfItems / 2 && idx >= 0; idx--) { 3907 itemsToBeInsertedToDom.push("lg-item-" + this.lgId + "-" + idx); 3908 } 3909 var numberOfExistingItems = itemsToBeInsertedToDom.length; 3910 for (var idx = 0; idx < possibleNumberOfItems - numberOfExistingItems; idx++) { 3911 itemsToBeInsertedToDom.push("lg-item-" + this.lgId + "-" + (index + idx + 1)); 3912 } 3913 } 3914 else { 3915 for (var idx = index; idx <= this.galleryItems.length - 1 && 3916 idx < index + possibleNumberOfItems / 2; idx++) { 3917 itemsToBeInsertedToDom.push("lg-item-" + this.lgId + "-" + idx); 3918 } 3919 var numberOfExistingItems = itemsToBeInsertedToDom.length; 3920 for (var idx = 0; idx < possibleNumberOfItems - numberOfExistingItems; idx++) { 3921 itemsToBeInsertedToDom.push("lg-item-" + this.lgId + "-" + (index - idx - 1)); 3922 } 3923 } 3924 if (this.settings.loop) { 3925 if (index === this.galleryItems.length - 1) { 3926 itemsToBeInsertedToDom.push("lg-item-" + this.lgId + "-" + 0); 3927 } 3928 else if (index === 0) { 3929 itemsToBeInsertedToDom.push("lg-item-" + this.lgId + "-" + (this.galleryItems.length - 1)); 3930 } 3931 } 3932 if (itemsToBeInsertedToDom.indexOf(prevIndexItem) === -1) { 3933 itemsToBeInsertedToDom.push("lg-item-" + this.lgId + "-" + prevIndex); 3934 } 3935 return itemsToBeInsertedToDom; 3936 }; 3937 LightGallery.prototype.organizeSlideItems = function (index, prevIndex) { 3938 var _this = this; 3939 var itemsToBeInsertedToDom = this.getItemsToBeInsertedToDom(index, prevIndex, this.settings.numberOfSlideItemsInDom); 3940 itemsToBeInsertedToDom.forEach(function (item) { 3941 if (_this.currentItemsInDom.indexOf(item) === -1) { 3942 _this.$inner.append("<div id=\"" + item + "\" class=\"lg-item\"></div>"); 3943 } 3944 }); 3945 this.currentItemsInDom.forEach(function (item) { 3946 if (itemsToBeInsertedToDom.indexOf(item) === -1) { 3947 $LG("#" + item).remove(); 3948 } 3949 }); 3950 return itemsToBeInsertedToDom; 3951 }; 3952 /** 3953 * Get previous index of the slide 3954 */ 3955 LightGallery.prototype.getPreviousSlideIndex = function () { 3956 var prevIndex = 0; 3957 try { 3958 var currentItemId = this.outer 3959 .find('.lg-current') 3960 .first() 3961 .attr('id'); 3962 prevIndex = parseInt(currentItemId.split('-')[3]) || 0; 3963 } 3964 catch (error) { 3965 prevIndex = 0; 3966 } 3967 return prevIndex; 3968 }; 3969 LightGallery.prototype.setDownloadValue = function (index) { 3970 if (this.settings.download) { 3971 var currentGalleryItem = this.galleryItems[index]; 3972 var hideDownloadBtn = currentGalleryItem.downloadUrl === false || 3973 currentGalleryItem.downloadUrl === 'false'; 3974 if (hideDownloadBtn) { 3975 this.outer.addClass('lg-hide-download'); 3976 } 3977 else { 3978 var $download = this.getElementById('lg-download'); 3979 this.outer.removeClass('lg-hide-download'); 3980 $download.attr('href', currentGalleryItem.downloadUrl || 3981 currentGalleryItem.src); 3982 if (currentGalleryItem.download) { 3983 $download.attr('download', currentGalleryItem.download); 3984 } 3985 } 3986 } 3987 }; 3988 LightGallery.prototype.makeSlideAnimation = function (direction, currentSlideItem, previousSlideItem) { 3989 var _this = this; 3990 if (this.lGalleryOn) { 3991 previousSlideItem.addClass('lg-slide-progress'); 3992 } 3993 setTimeout(function () { 3994 // remove all transitions 3995 _this.outer.addClass('lg-no-trans'); 3996 _this.outer 3997 .find('.lg-item') 3998 .removeClass('lg-prev-slide lg-next-slide'); 3999 if (direction === 'prev') { 4000 //prevslide 4001 currentSlideItem.addClass('lg-prev-slide'); 4002 previousSlideItem.addClass('lg-next-slide'); 4003 } 4004 else { 4005 // next slide 4006 currentSlideItem.addClass('lg-next-slide'); 4007 previousSlideItem.addClass('lg-prev-slide'); 4008 } 4009 // give 50 ms for browser to add/remove class 4010 setTimeout(function () { 4011 _this.outer.find('.lg-item').removeClass('lg-current'); 4012 currentSlideItem.addClass('lg-current'); 4013 // reset all transitions 4014 _this.outer.removeClass('lg-no-trans'); 4015 }, 50); 4016 }, this.lGalleryOn ? this.settings.slideDelay : 0); 4017 }; 4018 /** 4019 * Goto a specific slide. 4020 * @param {Number} index - index of the slide 4021 * @param {Boolean} fromTouch - true if slide function called via touch event or mouse drag 4022 * @param {Boolean} fromThumb - true if slide function called via thumbnail click 4023 * @param {String} direction - Direction of the slide(next/prev) 4024 * @category lGPublicMethods 4025 * @example 4026 * const plugin = lightGallery(); 4027 * // to go to 3rd slide 4028 * plugin.slide(2); 4029 * 4030 */ 4031 LightGallery.prototype.slide = function (index, fromTouch, fromThumb, direction) { 4032 var _this = this; 4033 var prevIndex = this.getPreviousSlideIndex(); 4034 this.currentItemsInDom = this.organizeSlideItems(index, prevIndex); 4035 // Prevent multiple call, Required for hsh plugin 4036 if (this.lGalleryOn && prevIndex === index) { 4037 return; 4038 } 4039 var numberOfGalleryItems = this.galleryItems.length; 4040 if (!this.lgBusy) { 4041 if (this.settings.counter) { 4042 this.updateCurrentCounter(index); 4043 } 4044 var currentSlideItem = this.getSlideItem(index); 4045 var previousSlideItem_1 = this.getSlideItem(prevIndex); 4046 var currentGalleryItem = this.galleryItems[index]; 4047 var videoInfo = currentGalleryItem.__slideVideoInfo; 4048 this.outer.attr('data-lg-slide-type', this.getSlideType(currentGalleryItem)); 4049 this.setDownloadValue(index); 4050 if (videoInfo) { 4051 var _a = this.mediaContainerPosition, top_3 = _a.top, bottom = _a.bottom; 4052 var videoSize = utils.getSize(this.items[index], this.outer, top_3 + bottom, videoInfo && this.settings.videoMaxSize); 4053 this.resizeVideoSlide(index, videoSize); 4054 } 4055 this.LGel.trigger(lGEvents.beforeSlide, { 4056 prevIndex: prevIndex, 4057 index: index, 4058 fromTouch: !!fromTouch, 4059 fromThumb: !!fromThumb, 4060 }); 4061 this.lgBusy = true; 4062 clearTimeout(this.hideBarTimeout); 4063 this.arrowDisable(index); 4064 if (!direction) { 4065 if (index < prevIndex) { 4066 direction = 'prev'; 4067 } 4068 else if (index > prevIndex) { 4069 direction = 'next'; 4070 } 4071 } 4072 if (!fromTouch) { 4073 this.makeSlideAnimation(direction, currentSlideItem, previousSlideItem_1); 4074 } 4075 else { 4076 this.outer 4077 .find('.lg-item') 4078 .removeClass('lg-prev-slide lg-current lg-next-slide'); 4079 var touchPrev = void 0; 4080 var touchNext = void 0; 4081 if (numberOfGalleryItems > 2) { 4082 touchPrev = index - 1; 4083 touchNext = index + 1; 4084 if (index === 0 && prevIndex === numberOfGalleryItems - 1) { 4085 // next slide 4086 touchNext = 0; 4087 touchPrev = numberOfGalleryItems - 1; 4088 } 4089 else if (index === numberOfGalleryItems - 1 && 4090 prevIndex === 0) { 4091 // prev slide 4092 touchNext = 0; 4093 touchPrev = numberOfGalleryItems - 1; 4094 } 4095 } 4096 else { 4097 touchPrev = 0; 4098 touchNext = 1; 4099 } 4100 if (direction === 'prev') { 4101 this.getSlideItem(touchNext).addClass('lg-next-slide'); 4102 } 4103 else { 4104 this.getSlideItem(touchPrev).addClass('lg-prev-slide'); 4105 } 4106 currentSlideItem.addClass('lg-current'); 4107 } 4108 // Do not put load content in set timeout as it needs to load immediately when the gallery is opened 4109 if (!this.lGalleryOn) { 4110 this.loadContent(index, true); 4111 } 4112 else { 4113 setTimeout(function () { 4114 _this.loadContent(index, true); 4115 // Add title if this.settings.appendSubHtmlTo === lg-sub-html 4116 if (_this.settings.appendSubHtmlTo !== '.lg-item') { 4117 _this.addHtml(index); 4118 } 4119 }, this.settings.speed + 50 + (fromTouch ? 0 : this.settings.slideDelay)); 4120 } 4121 setTimeout(function () { 4122 _this.lgBusy = false; 4123 previousSlideItem_1.removeClass('lg-slide-progress'); 4124 _this.LGel.trigger(lGEvents.afterSlide, { 4125 prevIndex: prevIndex, 4126 index: index, 4127 fromTouch: fromTouch, 4128 fromThumb: fromThumb, 4129 }); 4130 }, (this.lGalleryOn ? this.settings.speed + 100 : 100) + (fromTouch ? 0 : this.settings.slideDelay)); 4131 } 4132 this.index = index; 4133 }; 4134 LightGallery.prototype.updateCurrentCounter = function (index) { 4135 this.getElementById('lg-counter-current').html(index + 1 + ''); 4136 }; 4137 LightGallery.prototype.updateCounterTotal = function () { 4138 this.getElementById('lg-counter-all').html(this.galleryItems.length + ''); 4139 }; 4140 LightGallery.prototype.getSlideType = function (item) { 4141 if (item.__slideVideoInfo) { 4142 return 'video'; 4143 } 4144 else if (item.iframe) { 4145 return 'iframe'; 4146 } 4147 else { 4148 return 'image'; 4149 } 4150 }; 4151 LightGallery.prototype.touchMove = function (startCoords, endCoords, e) { 4152 var distanceX = endCoords.pageX - startCoords.pageX; 4153 var distanceY = endCoords.pageY - startCoords.pageY; 4154 var allowSwipe = false; 4155 if (this.swipeDirection) { 4156 allowSwipe = true; 4157 } 4158 else { 4159 if (Math.abs(distanceX) > 15) { 4160 this.swipeDirection = 'horizontal'; 4161 allowSwipe = true; 4162 } 4163 else if (Math.abs(distanceY) > 15) { 4164 this.swipeDirection = 'vertical'; 4165 allowSwipe = true; 4166 } 4167 } 4168 if (!allowSwipe) { 4169 return; 4170 } 4171 var $currentSlide = this.getSlideItem(this.index); 4172 if (this.swipeDirection === 'horizontal') { 4173 e === null || e === void 0 ? void 0 : e.preventDefault(); 4174 // reset opacity and transition duration 4175 this.outer.addClass('lg-dragging'); 4176 // move current slide 4177 this.setTranslate($currentSlide, distanceX, 0); 4178 // move next and prev slide with current slide 4179 var width = $currentSlide.get().offsetWidth; 4180 var slideWidthAmount = (width * 15) / 100; 4181 var gutter = slideWidthAmount - Math.abs((distanceX * 10) / 100); 4182 this.setTranslate(this.outer.find('.lg-prev-slide').first(), -width + distanceX - gutter, 0); 4183 this.setTranslate(this.outer.find('.lg-next-slide').first(), width + distanceX + gutter, 0); 4184 } 4185 else if (this.swipeDirection === 'vertical') { 4186 if (this.settings.swipeToClose) { 4187 e === null || e === void 0 ? void 0 : e.preventDefault(); 4188 this.$container.addClass('lg-dragging-vertical'); 4189 var opacity = 1 - Math.abs(distanceY) / window.innerHeight; 4190 this.$backdrop.css('opacity', opacity); 4191 var scale = 1 - Math.abs(distanceY) / (window.innerWidth * 2); 4192 this.setTranslate($currentSlide, 0, distanceY, scale, scale); 4193 if (Math.abs(distanceY) > 100) { 4194 this.outer 4195 .addClass('lg-hide-items') 4196 .removeClass('lg-components-open'); 4197 } 4198 } 4199 } 4200 }; 4201 LightGallery.prototype.touchEnd = function (endCoords, startCoords, event) { 4202 var _this = this; 4203 var distance; 4204 // keep slide animation for any mode while dragg/swipe 4205 if (this.settings.mode !== 'lg-slide') { 4206 this.outer.addClass('lg-slide'); 4207 } 4208 // set transition duration 4209 setTimeout(function () { 4210 _this.$container.removeClass('lg-dragging-vertical'); 4211 _this.outer 4212 .removeClass('lg-dragging lg-hide-items') 4213 .addClass('lg-components-open'); 4214 var triggerClick = true; 4215 if (_this.swipeDirection === 'horizontal') { 4216 distance = endCoords.pageX - startCoords.pageX; 4217 var distanceAbs = Math.abs(endCoords.pageX - startCoords.pageX); 4218 if (distance < 0 && 4219 distanceAbs > _this.settings.swipeThreshold) { 4220 _this.goToNextSlide(true); 4221 triggerClick = false; 4222 } 4223 else if (distance > 0 && 4224 distanceAbs > _this.settings.swipeThreshold) { 4225 _this.goToPrevSlide(true); 4226 triggerClick = false; 4227 } 4228 } 4229 else if (_this.swipeDirection === 'vertical') { 4230 distance = Math.abs(endCoords.pageY - startCoords.pageY); 4231 if (_this.settings.closable && 4232 _this.settings.swipeToClose && 4233 distance > 100) { 4234 _this.closeGallery(); 4235 return; 4236 } 4237 else { 4238 _this.$backdrop.css('opacity', 1); 4239 } 4240 } 4241 _this.outer.find('.lg-item').removeAttr('style'); 4242 if (triggerClick && 4243 Math.abs(endCoords.pageX - startCoords.pageX) < 5) { 4244 // Trigger click if distance is less than 5 pix 4245 var target = $LG(event.target); 4246 if (_this.isPosterElement(target)) { 4247 _this.LGel.trigger(lGEvents.posterClick); 4248 } 4249 } 4250 _this.swipeDirection = undefined; 4251 }); 4252 // remove slide class once drag/swipe is completed if mode is not slide 4253 setTimeout(function () { 4254 if (!_this.outer.hasClass('lg-dragging') && 4255 _this.settings.mode !== 'lg-slide') { 4256 _this.outer.removeClass('lg-slide'); 4257 } 4258 }, this.settings.speed + 100); 4259 }; 4260 LightGallery.prototype.enableSwipe = function () { 4261 var _this = this; 4262 var startCoords = {}; 4263 var endCoords = {}; 4264 var isMoved = false; 4265 var isSwiping = false; 4266 if (this.settings.enableSwipe) { 4267 this.$inner.on('touchstart.lg', function (e) { 4268 _this.dragOrSwipeEnabled = true; 4269 var $item = _this.getSlideItem(_this.index); 4270 if (($LG(e.target).hasClass('lg-item') || 4271 $item.get().contains(e.target)) && 4272 !_this.outer.hasClass('lg-zoomed') && 4273 !_this.lgBusy && 4274 e.touches.length === 1) { 4275 isSwiping = true; 4276 _this.touchAction = 'swipe'; 4277 _this.manageSwipeClass(); 4278 startCoords = { 4279 pageX: e.touches[0].pageX, 4280 pageY: e.touches[0].pageY, 4281 }; 4282 } 4283 }); 4284 this.$inner.on('touchmove.lg', function (e) { 4285 if (isSwiping && 4286 _this.touchAction === 'swipe' && 4287 e.touches.length === 1) { 4288 endCoords = { 4289 pageX: e.touches[0].pageX, 4290 pageY: e.touches[0].pageY, 4291 }; 4292 _this.touchMove(startCoords, endCoords, e); 4293 isMoved = true; 4294 } 4295 }); 4296 this.$inner.on('touchend.lg', function (event) { 4297 if (_this.touchAction === 'swipe') { 4298 if (isMoved) { 4299 isMoved = false; 4300 _this.touchEnd(endCoords, startCoords, event); 4301 } 4302 else if (isSwiping) { 4303 var target = $LG(event.target); 4304 if (_this.isPosterElement(target)) { 4305 _this.LGel.trigger(lGEvents.posterClick); 4306 } 4307 } 4308 _this.touchAction = undefined; 4309 isSwiping = false; 4310 } 4311 }); 4312 } 4313 }; 4314 LightGallery.prototype.enableDrag = function () { 4315 var _this = this; 4316 var startCoords = {}; 4317 var endCoords = {}; 4318 var isDraging = false; 4319 var isMoved = false; 4320 if (this.settings.enableDrag) { 4321 this.outer.on('mousedown.lg', function (e) { 4322 _this.dragOrSwipeEnabled = true; 4323 var $item = _this.getSlideItem(_this.index); 4324 if ($LG(e.target).hasClass('lg-item') || 4325 $item.get().contains(e.target)) { 4326 if (!_this.outer.hasClass('lg-zoomed') && !_this.lgBusy) { 4327 e.preventDefault(); 4328 if (!_this.lgBusy) { 4329 _this.manageSwipeClass(); 4330 startCoords = { 4331 pageX: e.pageX, 4332 pageY: e.pageY, 4333 }; 4334 isDraging = true; 4335 // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723 4336 _this.outer.get().scrollLeft += 1; 4337 _this.outer.get().scrollLeft -= 1; 4338 // * 4339 _this.outer 4340 .removeClass('lg-grab') 4341 .addClass('lg-grabbing'); 4342 _this.LGel.trigger(lGEvents.dragStart); 4343 } 4344 } 4345 } 4346 }); 4347 $LG(window).on("mousemove.lg.global" + this.lgId, function (e) { 4348 if (isDraging && _this.lgOpened) { 4349 isMoved = true; 4350 endCoords = { 4351 pageX: e.pageX, 4352 pageY: e.pageY, 4353 }; 4354 _this.touchMove(startCoords, endCoords); 4355 _this.LGel.trigger(lGEvents.dragMove); 4356 } 4357 }); 4358 $LG(window).on("mouseup.lg.global" + this.lgId, function (event) { 4359 if (!_this.lgOpened) { 4360 return; 4361 } 4362 var target = $LG(event.target); 4363 if (isMoved) { 4364 isMoved = false; 4365 _this.touchEnd(endCoords, startCoords, event); 4366 _this.LGel.trigger(lGEvents.dragEnd); 4367 } 4368 else if (_this.isPosterElement(target)) { 4369 _this.LGel.trigger(lGEvents.posterClick); 4370 } 4371 // Prevent execution on click 4372 if (isDraging) { 4373 isDraging = false; 4374 _this.outer.removeClass('lg-grabbing').addClass('lg-grab'); 4375 } 4376 }); 4377 } 4378 }; 4379 LightGallery.prototype.triggerPosterClick = function () { 4380 var _this = this; 4381 this.$inner.on('click.lg', function (event) { 4382 if (!_this.dragOrSwipeEnabled && 4383 _this.isPosterElement($LG(event.target))) { 4384 _this.LGel.trigger(lGEvents.posterClick); 4385 } 4386 }); 4387 }; 4388 LightGallery.prototype.manageSwipeClass = function () { 4389 var _touchNext = this.index + 1; 4390 var _touchPrev = this.index - 1; 4391 if (this.settings.loop && this.galleryItems.length > 2) { 4392 if (this.index === 0) { 4393 _touchPrev = this.galleryItems.length - 1; 4394 } 4395 else if (this.index === this.galleryItems.length - 1) { 4396 _touchNext = 0; 4397 } 4398 } 4399 this.outer.find('.lg-item').removeClass('lg-next-slide lg-prev-slide'); 4400 if (_touchPrev > -1) { 4401 this.getSlideItem(_touchPrev).addClass('lg-prev-slide'); 4402 } 4403 this.getSlideItem(_touchNext).addClass('lg-next-slide'); 4404 }; 4405 /** 4406 * Go to next slide 4407 * @param {Boolean} fromTouch - true if slide function called via touch event 4408 * @category lGPublicMethods 4409 * @example 4410 * const plugin = lightGallery(); 4411 * plugin.goToNextSlide(); 4412 * @see <a href="/demos/methods/">Demo</a> 4413 */ 4414 LightGallery.prototype.goToNextSlide = function (fromTouch) { 4415 var _this = this; 4416 var _loop = this.settings.loop; 4417 if (fromTouch && this.galleryItems.length < 3) { 4418 _loop = false; 4419 } 4420 if (!this.lgBusy) { 4421 if (this.index + 1 < this.galleryItems.length) { 4422 this.index++; 4423 this.LGel.trigger(lGEvents.beforeNextSlide, { 4424 index: this.index, 4425 }); 4426 this.slide(this.index, !!fromTouch, false, 'next'); 4427 } 4428 else { 4429 if (_loop) { 4430 this.index = 0; 4431 this.LGel.trigger(lGEvents.beforeNextSlide, { 4432 index: this.index, 4433 }); 4434 this.slide(this.index, !!fromTouch, false, 'next'); 4435 } 4436 else if (this.settings.slideEndAnimation && !fromTouch) { 4437 this.outer.addClass('lg-right-end'); 4438 setTimeout(function () { 4439 _this.outer.removeClass('lg-right-end'); 4440 }, 400); 4441 } 4442 } 4443 } 4444 }; 4445 /** 4446 * Go to previous slides 4447 * @param {Boolean} fromTouch - true if slide function called via touch event 4448 * @category lGPublicMethods 4449 * @example 4450 * const plugin = lightGallery({}); 4451 * plugin.goToPrevSlide(); 4452 * @see <a href="/demos/methods/">Demo</a> 4453 * 4454 */ 4455 LightGallery.prototype.goToPrevSlide = function (fromTouch) { 4456 var _this = this; 4457 var _loop = this.settings.loop; 4458 if (fromTouch && this.galleryItems.length < 3) { 4459 _loop = false; 4460 } 4461 if (!this.lgBusy) { 4462 if (this.index > 0) { 4463 this.index--; 4464 this.LGel.trigger(lGEvents.beforePrevSlide, { 4465 index: this.index, 4466 fromTouch: fromTouch, 4467 }); 4468 this.slide(this.index, !!fromTouch, false, 'prev'); 4469 } 4470 else { 4471 if (_loop) { 4472 this.index = this.galleryItems.length - 1; 4473 this.LGel.trigger(lGEvents.beforePrevSlide, { 4474 index: this.index, 4475 fromTouch: fromTouch, 4476 }); 4477 this.slide(this.index, !!fromTouch, false, 'prev'); 4478 } 4479 else if (this.settings.slideEndAnimation && !fromTouch) { 4480 this.outer.addClass('lg-left-end'); 4481 setTimeout(function () { 4482 _this.outer.removeClass('lg-left-end'); 4483 }, 400); 4484 } 4485 } 4486 } 4487 }; 4488 LightGallery.prototype.keyPress = function () { 4489 var _this = this; 4490 $LG(window).on("keydown.lg.global" + this.lgId, function (e) { 4491 if (_this.lgOpened && 4492 _this.settings.escKey === true && 4493 e.keyCode === 27) { 4494 e.preventDefault(); 4495 if (_this.settings.allowMediaOverlap && 4496 _this.outer.hasClass('lg-can-toggle') && 4497 _this.outer.hasClass('lg-components-open')) { 4498 _this.outer.removeClass('lg-components-open'); 4499 } 4500 else { 4501 _this.closeGallery(); 4502 } 4503 } 4504 if (_this.lgOpened && _this.galleryItems.length > 1) { 4505 if (e.keyCode === 37) { 4506 e.preventDefault(); 4507 _this.goToPrevSlide(); 4508 } 4509 if (e.keyCode === 39) { 4510 e.preventDefault(); 4511 _this.goToNextSlide(); 4512 } 4513 } 4514 }); 4515 }; 4516 LightGallery.prototype.arrow = function () { 4517 var _this = this; 4518 this.getElementById('lg-prev').on('click.lg', function () { 4519 _this.goToPrevSlide(); 4520 }); 4521 this.getElementById('lg-next').on('click.lg', function () { 4522 _this.goToNextSlide(); 4523 }); 4524 }; 4525 LightGallery.prototype.arrowDisable = function (index) { 4526 // Disable arrows if settings.hideControlOnEnd is true 4527 if (!this.settings.loop && this.settings.hideControlOnEnd) { 4528 var $prev = this.getElementById('lg-prev'); 4529 var $next = this.getElementById('lg-next'); 4530 if (index + 1 === this.galleryItems.length) { 4531 $next.attr('disabled', 'disabled').addClass('disabled'); 4532 } 4533 else { 4534 $next.removeAttr('disabled').removeClass('disabled'); 4535 } 4536 if (index === 0) { 4537 $prev.attr('disabled', 'disabled').addClass('disabled'); 4538 } 4539 else { 4540 $prev.removeAttr('disabled').removeClass('disabled'); 4541 } 4542 } 4543 }; 4544 LightGallery.prototype.setTranslate = function ($el, xValue, yValue, scaleX, scaleY) { 4545 if (scaleX === void 0) { scaleX = 1; } 4546 if (scaleY === void 0) { scaleY = 1; } 4547 $el.css('transform', 'translate3d(' + 4548 xValue + 4549 'px, ' + 4550 yValue + 4551 'px, 0px) scale3d(' + 4552 scaleX + 4553 ', ' + 4554 scaleY + 4555 ', 1)'); 4556 }; 4557 LightGallery.prototype.mousewheel = function () { 4558 var _this = this; 4559 var lastCall = 0; 4560 this.outer.on('wheel.lg', function (e) { 4561 if (!e.deltaY || _this.galleryItems.length < 2) { 4562 return; 4563 } 4564 e.preventDefault(); 4565 var now = new Date().getTime(); 4566 if (now - lastCall < 1000) { 4567 return; 4568 } 4569 lastCall = now; 4570 if (e.deltaY > 0) { 4571 _this.goToNextSlide(); 4572 } 4573 else if (e.deltaY < 0) { 4574 _this.goToPrevSlide(); 4575 } 4576 }); 4577 }; 4578 LightGallery.prototype.isSlideElement = function (target) { 4579 return (target.hasClass('lg-outer') || 4580 target.hasClass('lg-item') || 4581 target.hasClass('lg-img-wrap')); 4582 }; 4583 LightGallery.prototype.isPosterElement = function (target) { 4584 var playButton = this.getSlideItem(this.index) 4585 .find('.lg-video-play-button') 4586 .get(); 4587 return (target.hasClass('lg-video-poster') || 4588 target.hasClass('lg-video-play-button') || 4589 (playButton && playButton.contains(target.get()))); 4590 }; 4591 /** 4592 * Maximize minimize inline gallery. 4593 * @category lGPublicMethods 4594 */ 4595 LightGallery.prototype.toggleMaximize = function () { 4596 var _this = this; 4597 this.getElementById('lg-maximize').on('click.lg', function () { 4598 _this.$container.toggleClass('lg-inline'); 4599 _this.refreshOnResize(); 4600 }); 4601 }; 4602 LightGallery.prototype.invalidateItems = function () { 4603 for (var index = 0; index < this.items.length; index++) { 4604 var element = this.items[index]; 4605 var $element = $LG(element); 4606 $element.off("click.lgcustom-item-" + $element.attr('data-lg-id')); 4607 } 4608 }; 4609 LightGallery.prototype.trapFocus = function () { 4610 var _this = this; 4611 this.$container.get().focus({ 4612 preventScroll: true, 4613 }); 4614 $LG(window).on("keydown.lg.global" + this.lgId, function (e) { 4615 if (!_this.lgOpened) { 4616 return; 4617 } 4618 var isTabPressed = e.key === 'Tab' || e.keyCode === 9; 4619 if (!isTabPressed) { 4620 return; 4621 } 4622 var focusableEls = utils.getFocusableElements(_this.$container.get()); 4623 var firstFocusableEl = focusableEls[0]; 4624 var lastFocusableEl = focusableEls[focusableEls.length - 1]; 4625 if (e.shiftKey) { 4626 if (document.activeElement === firstFocusableEl) { 4627 lastFocusableEl.focus(); 4628 e.preventDefault(); 4629 } 4630 } 4631 else { 4632 if (document.activeElement === lastFocusableEl) { 4633 firstFocusableEl.focus(); 4634 e.preventDefault(); 4635 } 4636 } 4637 }); 4638 }; 4639 LightGallery.prototype.manageCloseGallery = function () { 4640 var _this = this; 4641 if (!this.settings.closable) 4642 return; 4643 var mousedown = false; 4644 this.getElementById('lg-close').on('click.lg', function () { 4645 _this.closeGallery(); 4646 }); 4647 if (this.settings.closeOnTap) { 4648 // If you drag the slide and release outside gallery gets close on chrome 4649 // for preventing this check mousedown and mouseup happened on .lg-item or lg-outer 4650 this.outer.on('mousedown.lg', function (e) { 4651 var target = $LG(e.target); 4652 if (_this.isSlideElement(target)) { 4653 mousedown = true; 4654 } 4655 else { 4656 mousedown = false; 4657 } 4658 }); 4659 this.outer.on('mousemove.lg', function () { 4660 mousedown = false; 4661 }); 4662 this.outer.on('mouseup.lg', function (e) { 4663 var target = $LG(e.target); 4664 if (_this.isSlideElement(target) && mousedown) { 4665 if (!_this.outer.hasClass('lg-dragging')) { 4666 _this.closeGallery(); 4667 } 4668 } 4669 }); 4670 } 4671 }; 4672 /** 4673 * Close lightGallery if it is opened. 4674 * 4675 * @description If closable is false in the settings, you need to pass true via closeGallery method to force close gallery 4676 * @return returns the estimated time to close gallery completely including the close animation duration 4677 * @category lGPublicMethods 4678 * @example 4679 * const plugin = lightGallery(); 4680 * plugin.closeGallery(); 4681 * 4682 */ 4683 LightGallery.prototype.closeGallery = function (force) { 4684 var _this = this; 4685 if (!this.lgOpened || (!this.settings.closable && !force)) { 4686 return 0; 4687 } 4688 this.LGel.trigger(lGEvents.beforeClose); 4689 if (this.settings.resetScrollPosition && !this.settings.hideScrollbar) { 4690 $LG(window).scrollTop(this.prevScrollTop); 4691 } 4692 var currentItem = this.items[this.index]; 4693 var transform; 4694 if (this.zoomFromOrigin && currentItem) { 4695 var _a = this.mediaContainerPosition, top_4 = _a.top, bottom = _a.bottom; 4696 var _b = this.galleryItems[this.index], __slideVideoInfo = _b.__slideVideoInfo, poster = _b.poster; 4697 var imageSize = utils.getSize(currentItem, this.outer, top_4 + bottom, __slideVideoInfo && poster && this.settings.videoMaxSize); 4698 transform = utils.getTransform(currentItem, this.outer, top_4, bottom, imageSize); 4699 } 4700 if (this.zoomFromOrigin && transform) { 4701 this.outer.addClass('lg-closing lg-zoom-from-image'); 4702 this.getSlideItem(this.index) 4703 .addClass('lg-start-end-progress') 4704 .css('transition-duration', this.settings.startAnimationDuration + 'ms') 4705 .css('transform', transform); 4706 } 4707 else { 4708 this.outer.addClass('lg-hide-items'); 4709 // lg-zoom-from-image is used for setting the opacity to 1 if zoomFromOrigin is true 4710 // If the closing item doesn't have the lg-size attribute, remove this class to avoid the closing css conflicts 4711 this.outer.removeClass('lg-zoom-from-image'); 4712 } 4713 // Unbind all events added by lightGallery 4714 // @todo 4715 //this.$el.off('.lg.tm'); 4716 this.destroyModules(); 4717 this.lGalleryOn = false; 4718 this.isDummyImageRemoved = false; 4719 this.zoomFromOrigin = this.settings.zoomFromOrigin; 4720 clearTimeout(this.hideBarTimeout); 4721 this.hideBarTimeout = false; 4722 $LG('html').removeClass('lg-on'); 4723 this.outer.removeClass('lg-visible lg-components-open'); 4724 // Resetting opacity to 0 isd required as vertical swipe to close function adds inline opacity. 4725 this.$backdrop.removeClass('in').css('opacity', 0); 4726 var removeTimeout = this.zoomFromOrigin && transform 4727 ? Math.max(this.settings.startAnimationDuration, this.settings.backdropDuration) 4728 : this.settings.backdropDuration; 4729 this.$container.removeClass('lg-show-in'); 4730 // Once the closign animation is completed and gallery is invisible 4731 setTimeout(function () { 4732 if (_this.zoomFromOrigin && transform) { 4733 _this.outer.removeClass('lg-zoom-from-image'); 4734 } 4735 _this.$container.removeClass('lg-show'); 4736 // Reset scrollbar 4737 _this.resetScrollBar(); 4738 // Need to remove inline opacity as it is used in the stylesheet as well 4739 _this.$backdrop 4740 .removeAttr('style') 4741 .css('transition-duration', _this.settings.backdropDuration + 'ms'); 4742 _this.outer.removeClass("lg-closing " + _this.settings.startClass); 4743 _this.getSlideItem(_this.index).removeClass('lg-start-end-progress'); 4744 _this.$inner.empty(); 4745 if (_this.lgOpened) { 4746 _this.LGel.trigger(lGEvents.afterClose, { 4747 instance: _this, 4748 }); 4749 } 4750 if (_this.$container.get()) { 4751 _this.$container.get().blur(); 4752 } 4753 _this.lgOpened = false; 4754 }, removeTimeout + 100); 4755 return removeTimeout + 100; 4756 }; 4757 LightGallery.prototype.initModules = function () { 4758 this.plugins.forEach(function (module) { 4759 try { 4760 module.init(); 4761 } 4762 catch (err) { 4763 console.warn("lightGallery:- make sure lightGallery module is properly initiated"); 4764 } 4765 }); 4766 }; 4767 LightGallery.prototype.destroyModules = function (destroy) { 4768 this.plugins.forEach(function (module) { 4769 try { 4770 if (destroy) { 4771 module.destroy(); 4772 } 4773 else { 4774 module.closeGallery && module.closeGallery(); 4775 } 4776 } 4777 catch (err) { 4778 console.warn("lightGallery:- make sure lightGallery module is properly destroyed"); 4779 } 4780 }); 4781 }; 4782 /** 4783 * Refresh lightGallery with new set of children. 4784 * 4785 * @description This is useful to update the gallery when the child elements are changed without calling destroy method. 4786 * 4787 * If you are using dynamic mode, you can pass the modified array of dynamicEl as the first parameter to refresh the dynamic gallery 4788 * @see <a href="/demos/dynamic-mode/">Demo</a> 4789 * @category lGPublicMethods 4790 * @example 4791 * const plugin = lightGallery(); 4792 * // Delete or add children, then call 4793 * plugin.refresh(); 4794 * 4795 */ 4796 LightGallery.prototype.refresh = function (galleryItems) { 4797 if (!this.settings.dynamic) { 4798 this.invalidateItems(); 4799 } 4800 if (galleryItems) { 4801 this.galleryItems = galleryItems; 4802 } 4803 else { 4804 this.galleryItems = this.getItems(); 4805 } 4806 this.updateControls(); 4807 this.openGalleryOnItemClick(); 4808 this.LGel.trigger(lGEvents.updateSlides); 4809 }; 4810 LightGallery.prototype.updateControls = function () { 4811 this.addSlideVideoInfo(this.galleryItems); 4812 this.updateCounterTotal(); 4813 this.manageSingleSlideClassName(); 4814 }; 4815 LightGallery.prototype.destroyGallery = function () { 4816 this.destroyModules(true); 4817 if (!this.settings.dynamic) { 4818 this.invalidateItems(); 4819 } 4820 $LG(window).off(".lg.global" + this.lgId); 4821 this.LGel.off('.lg'); 4822 this.$container.remove(); 4823 }; 4824 /** 4825 * Destroy lightGallery. 4826 * Destroy lightGallery and its plugin instances completely 4827 * 4828 * @description This method also calls CloseGallery function internally. Returns the time takes to completely close and destroy the instance. 4829 * In case if you want to re-initialize lightGallery right after destroying it, initialize it only once the destroy process is completed. 4830 * You can use refresh method most of the times. 4831 * @category lGPublicMethods 4832 * @example 4833 * const plugin = lightGallery(); 4834 * plugin.destroy(); 4835 * 4836 */ 4837 LightGallery.prototype.destroy = function () { 4838 var closeTimeout = this.closeGallery(true); 4839 if (closeTimeout) { 4840 setTimeout(this.destroyGallery.bind(this), closeTimeout); 4841 } 4842 else { 4843 this.destroyGallery(); 4844 } 4845 return closeTimeout; 4846 }; 4847 return LightGallery; 4848}()); 4849 4850function lightGallery(el, options) { 4851 return new LightGallery(el, options); 4852} 4853 4854/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (lightGallery); 4855//# sourceMappingURL=lightgallery.es5.js.map 4856 4857 4858/***/ }), 4859
vendor: 6,046 bytes, lines 4860-5009
4860/***/ "./node_modules/lightgallery/plugins/fullscreen/lg-fullscreen.es5.js": 4861/*!***************************************************************************!*\ 4862 !*** ./node_modules/lightgallery/plugins/fullscreen/lg-fullscreen.es5.js ***! 4863 \***************************************************************************/ 4864/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 4865 4866"use strict"; 4867__webpack_require__.r(__webpack_exports__); 4868/* harmony export */ __webpack_require__.d(__webpack_exports__, { 4869/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 4870/* harmony export */ }); 4871/*! 4872 * lightgallery | 2.7.0 | October 9th 2022 4873 * http://www.lightgalleryjs.com/ 4874 * Copyright (c) 2020 Sachin Neravath; 4875 * @license GPLv3 4876 */ 4877 4878/*! ***************************************************************************** 4879Copyright (c) Microsoft Corporation. 4880 4881Permission to use, copy, modify, and/or distribute this software for any 4882purpose with or without fee is hereby granted. 4883 4884THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 4885REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 4886AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 4887INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 4888LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 4889OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 4890PERFORMANCE OF THIS SOFTWARE. 4891***************************************************************************** */ 4892 4893var __assign = function() { 4894 __assign = Object.assign || function __assign(t) { 4895 for (var s, i = 1, n = arguments.length; i < n; i++) { 4896 s = arguments[i]; 4897 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; 4898 } 4899 return t; 4900 }; 4901 return __assign.apply(this, arguments); 4902}; 4903 4904var fullscreenSettings = { 4905 fullScreen: true, 4906 fullscreenPluginStrings: { 4907 toggleFullscreen: 'Toggle Fullscreen', 4908 }, 4909}; 4910 4911var FullScreen = /** @class */ (function () { 4912 function FullScreen(instance, $LG) { 4913 // get lightGallery core plugin instance 4914 this.core = instance; 4915 this.$LG = $LG; 4916 // extend module default settings with lightGallery core settings 4917 this.settings = __assign(__assign({}, fullscreenSettings), this.core.settings); 4918 return this; 4919 } 4920 FullScreen.prototype.init = function () { 4921 var fullScreen = ''; 4922 if (this.settings.fullScreen) { 4923 // check for fullscreen browser support 4924 if (!document.fullscreenEnabled && 4925 !document.webkitFullscreenEnabled && 4926 !document.mozFullScreenEnabled && 4927 !document.msFullscreenEnabled) { 4928 return; 4929 } 4930 else { 4931 fullScreen = "<button type=\"button\" aria-label=\"" + this.settings.fullscreenPluginStrings['toggleFullscreen'] + "\" class=\"lg-fullscreen lg-icon\"></button>"; 4932 this.core.$toolbar.append(fullScreen); 4933 this.fullScreen(); 4934 } 4935 } 4936 }; 4937 FullScreen.prototype.isFullScreen = function () { 4938 return (document.fullscreenElement || 4939 document.mozFullScreenElement || 4940 document.webkitFullscreenElement || 4941 document.msFullscreenElement); 4942 }; 4943 FullScreen.prototype.requestFullscreen = function () { 4944 var el = document.documentElement; 4945 if (el.requestFullscreen) { 4946 el.requestFullscreen(); 4947 } 4948 else if (el.msRequestFullscreen) { 4949 el.msRequestFullscreen(); 4950 } 4951 else if (el.mozRequestFullScreen) { 4952 el.mozRequestFullScreen(); 4953 } 4954 else if (el.webkitRequestFullscreen) { 4955 el.webkitRequestFullscreen(); 4956 } 4957 }; 4958 FullScreen.prototype.exitFullscreen = function () { 4959 if (document.exitFullscreen) { 4960 document.exitFullscreen(); 4961 } 4962 else if (document.msExitFullscreen) { 4963 document.msExitFullscreen(); 4964 } 4965 else if (document.mozCancelFullScreen) { 4966 document.mozCancelFullScreen(); 4967 } 4968 else if (document.webkitExitFullscreen) { 4969 document.webkitExitFullscreen(); 4970 } 4971 }; 4972 // https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Using_full_screen_mode 4973 FullScreen.prototype.fullScreen = function () { 4974 var _this = this; 4975 this.$LG(document).on("fullscreenchange.lg.global" + this.core.lgId + " \n webkitfullscreenchange.lg.global" + this.core.lgId + " \n mozfullscreenchange.lg.global" + this.core.lgId + " \n MSFullscreenChange.lg.global" + this.core.lgId, function () { 4976 if (!_this.core.lgOpened) 4977 return; 4978 _this.core.outer.toggleClass('lg-fullscreen-on'); 4979 }); 4980 this.core.outer 4981 .find('.lg-fullscreen') 4982 .first() 4983 .on('click.lg', function () { 4984 if (_this.isFullScreen()) { 4985 _this.exitFullscreen(); 4986 } 4987 else { 4988 _this.requestFullscreen(); 4989 } 4990 }); 4991 }; 4992 FullScreen.prototype.closeGallery = function () { 4993 // exit from fullscreen if activated 4994 if (this.isFullScreen()) { 4995 this.exitFullscreen(); 4996 } 4997 }; 4998 FullScreen.prototype.destroy = function () { 4999 this.$LG(document).off("fullscreenchange.lg.global" + this.core.lgId + " \n webkitfullscreenchange.lg.global" + this.core.lgId + " \n mozfullscreenchange.lg.global" + this.core.lgId + " \n MSFullscreenChange.lg.global" + this.core.lgId); 5000 }; 5001 return FullScreen; 5002}()); 5003 5004/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FullScreen); 5005//# sourceMappingURL=lg-fullscreen.es5.js.map 5006 5007 5008/***/ }), 5009
vendor: 20,097 bytes, lines 5010-5507
5010/***/ "./node_modules/lightgallery/plugins/thumbnail/lg-thumbnail.es5.js": 5011/*!*************************************************************************!*\ 5012 !*** ./node_modules/lightgallery/plugins/thumbnail/lg-thumbnail.es5.js ***! 5013 \*************************************************************************/ 5014/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 5015 5016"use strict"; 5017__webpack_require__.r(__webpack_exports__); 5018/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5019/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 5020/* harmony export */ }); 5021/*! 5022 * lightgallery | 2.7.0 | October 9th 2022 5023 * http://www.lightgalleryjs.com/ 5024 * Copyright (c) 2020 Sachin Neravath; 5025 * @license GPLv3 5026 */ 5027 5028/*! ***************************************************************************** 5029Copyright (c) Microsoft Corporation. 5030 5031Permission to use, copy, modify, and/or distribute this software for any 5032purpose with or without fee is hereby granted. 5033 5034THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 5035REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 5036AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 5037INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 5038LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 5039OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 5040PERFORMANCE OF THIS SOFTWARE. 5041***************************************************************************** */ 5042 5043var __assign = function() { 5044 __assign = Object.assign || function __assign(t) { 5045 for (var s, i = 1, n = arguments.length; i < n; i++) { 5046 s = arguments[i]; 5047 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; 5048 } 5049 return t; 5050 }; 5051 return __assign.apply(this, arguments); 5052}; 5053 5054var thumbnailsSettings = { 5055 thumbnail: true, 5056 animateThumb: true, 5057 currentPagerPosition: 'middle', 5058 alignThumbnails: 'middle', 5059 thumbWidth: 100, 5060 thumbHeight: '80px', 5061 thumbMargin: 5, 5062 appendThumbnailsTo: '.lg-components', 5063 toggleThumb: false, 5064 enableThumbDrag: true, 5065 enableThumbSwipe: true, 5066 thumbnailSwipeThreshold: 10, 5067 loadYouTubeThumbnail: true, 5068 youTubeThumbSize: 1, 5069 thumbnailPluginStrings: { 5070 toggleThumbnails: 'Toggle thumbnails', 5071 }, 5072}; 5073 5074/** 5075 * List of lightGallery events 5076 * All events should be documented here 5077 * Below interfaces are used to build the website documentations 5078 * */ 5079var lGEvents = { 5080 afterAppendSlide: 'lgAfterAppendSlide', 5081 init: 'lgInit', 5082 hasVideo: 'lgHasVideo', 5083 containerResize: 'lgContainerResize', 5084 updateSlides: 'lgUpdateSlides', 5085 afterAppendSubHtml: 'lgAfterAppendSubHtml', 5086 beforeOpen: 'lgBeforeOpen', 5087 afterOpen: 'lgAfterOpen', 5088 slideItemLoad: 'lgSlideItemLoad', 5089 beforeSlide: 'lgBeforeSlide', 5090 afterSlide: 'lgAfterSlide', 5091 posterClick: 'lgPosterClick', 5092 dragStart: 'lgDragStart', 5093 dragMove: 'lgDragMove', 5094 dragEnd: 'lgDragEnd', 5095 beforeNextSlide: 'lgBeforeNextSlide', 5096 beforePrevSlide: 'lgBeforePrevSlide', 5097 beforeClose: 'lgBeforeClose', 5098 afterClose: 'lgAfterClose', 5099 rotateLeft: 'lgRotateLeft', 5100 rotateRight: 'lgRotateRight', 5101 flipHorizontal: 'lgFlipHorizontal', 5102 flipVertical: 'lgFlipVertical', 5103 autoplay: 'lgAutoplay', 5104 autoplayStart: 'lgAutoplayStart', 5105 autoplayStop: 'lgAutoplayStop', 5106}; 5107 5108var Thumbnail = /** @class */ (function () { 5109 function Thumbnail(instance, $LG) { 5110 this.thumbOuterWidth = 0; 5111 this.thumbTotalWidth = 0; 5112 this.translateX = 0; 5113 this.thumbClickable = false; 5114 // get lightGallery core plugin instance 5115 this.core = instance; 5116 this.$LG = $LG; 5117 return this; 5118 } 5119 Thumbnail.prototype.init = function () { 5120 // extend module default settings with lightGallery core settings 5121 this.settings = __assign(__assign({}, thumbnailsSettings), this.core.settings); 5122 this.thumbOuterWidth = 0; 5123 this.thumbTotalWidth = 5124 this.core.galleryItems.length * 5125 (this.settings.thumbWidth + this.settings.thumbMargin); 5126 // Thumbnail animation value 5127 this.translateX = 0; 5128 this.setAnimateThumbStyles(); 5129 if (!this.core.settings.allowMediaOverlap) { 5130 this.settings.toggleThumb = false; 5131 } 5132 if (this.settings.thumbnail) { 5133 this.build(); 5134 if (this.settings.animateThumb) { 5135 if (this.settings.enableThumbDrag) { 5136 this.enableThumbDrag(); 5137 } 5138 if (this.settings.enableThumbSwipe) { 5139 this.enableThumbSwipe(); 5140 } 5141 this.thumbClickable = false; 5142 } 5143 else { 5144 this.thumbClickable = true; 5145 } 5146 this.toggleThumbBar(); 5147 this.thumbKeyPress(); 5148 } 5149 }; 5150 Thumbnail.prototype.build = function () { 5151 var _this = this; 5152 this.setThumbMarkup(); 5153 this.manageActiveClassOnSlideChange(); 5154 this.$lgThumb.first().on('click.lg touchend.lg', function (e) { 5155 var $target = _this.$LG(e.target); 5156 if (!$target.hasAttribute('data-lg-item-id')) { 5157 return; 5158 } 5159 setTimeout(function () { 5160 // In IE9 and bellow touch does not support 5161 // Go to slide if browser does not support css transitions 5162 if (_this.thumbClickable && !_this.core.lgBusy) { 5163 var index = parseInt($target.attr('data-lg-item-id')); 5164 _this.core.slide(index, false, true, false); 5165 } 5166 }, 50); 5167 }); 5168 this.core.LGel.on(lGEvents.beforeSlide + ".thumb", function (event) { 5169 var index = event.detail.index; 5170 _this.animateThumb(index); 5171 }); 5172 this.core.LGel.on(lGEvents.beforeOpen + ".thumb", function () { 5173 _this.thumbOuterWidth = _this.core.outer.get().offsetWidth; 5174 }); 5175 this.core.LGel.on(lGEvents.updateSlides + ".thumb", function () { 5176 _this.rebuildThumbnails(); 5177 }); 5178 this.core.LGel.on(lGEvents.containerResize + ".thumb", function () { 5179 if (!_this.core.lgOpened) 5180 return; 5181 setTimeout(function () { 5182 _this.thumbOuterWidth = _this.core.outer.get().offsetWidth; 5183 _this.animateThumb(_this.core.index); 5184 _this.thumbOuterWidth = _this.core.outer.get().offsetWidth; 5185 }, 50); 5186 }); 5187 }; 5188 Thumbnail.prototype.setThumbMarkup = function () { 5189 var thumbOuterClassNames = 'lg-thumb-outer '; 5190 if (this.settings.alignThumbnails) { 5191 thumbOuterClassNames += "lg-thumb-align-" + this.settings.alignThumbnails; 5192 } 5193 var html = "<div class=\"" + thumbOuterClassNames + "\">\n <div class=\"lg-thumb lg-group\">\n </div>\n </div>"; 5194 this.core.outer.addClass('lg-has-thumb'); 5195 if (this.settings.appendThumbnailsTo === '.lg-components') { 5196 this.core.$lgComponents.append(html); 5197 } 5198 else { 5199 this.core.outer.append(html); 5200 } 5201 this.$thumbOuter = this.core.outer.find('.lg-thumb-outer').first(); 5202 this.$lgThumb = this.core.outer.find('.lg-thumb').first(); 5203 if (this.settings.animateThumb) { 5204 this.core.outer 5205 .find('.lg-thumb') 5206 .css('transition-duration', this.core.settings.speed + 'ms') 5207 .css('width', this.thumbTotalWidth + 'px') 5208 .css('position', 'relative'); 5209 } 5210 this.setThumbItemHtml(this.core.galleryItems); 5211 }; 5212 Thumbnail.prototype.enableThumbDrag = function () { 5213 var _this = this; 5214 var thumbDragUtils = { 5215 cords: { 5216 startX: 0, 5217 endX: 0, 5218 }, 5219 isMoved: false, 5220 newTranslateX: 0, 5221 startTime: new Date(), 5222 endTime: new Date(), 5223 touchMoveTime: 0, 5224 }; 5225 var isDragging = false; 5226 this.$thumbOuter.addClass('lg-grab'); 5227 this.core.outer 5228 .find('.lg-thumb') 5229 .first() 5230 .on('mousedown.lg.thumb', function (e) { 5231 if (_this.thumbTotalWidth > _this.thumbOuterWidth) { 5232 // execute only on .lg-object 5233 e.preventDefault(); 5234 thumbDragUtils.cords.startX = e.pageX; 5235 thumbDragUtils.startTime = new Date(); 5236 _this.thumbClickable = false; 5237 isDragging = true; 5238 // ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723 5239 _this.core.outer.get().scrollLeft += 1; 5240 _this.core.outer.get().scrollLeft -= 1; 5241 // * 5242 _this.$thumbOuter 5243 .removeClass('lg-grab') 5244 .addClass('lg-grabbing'); 5245 } 5246 }); 5247 this.$LG(window).on("mousemove.lg.thumb.global" + this.core.lgId, function (e) { 5248 if (!_this.core.lgOpened) 5249 return; 5250 if (isDragging) { 5251 thumbDragUtils.cords.endX = e.pageX; 5252 thumbDragUtils = _this.onThumbTouchMove(thumbDragUtils); 5253 } 5254 }); 5255 this.$LG(window).on("mouseup.lg.thumb.global" + this.core.lgId, function () { 5256 if (!_this.core.lgOpened) 5257 return; 5258 if (thumbDragUtils.isMoved) { 5259 thumbDragUtils = _this.onThumbTouchEnd(thumbDragUtils); 5260 } 5261 else { 5262 _this.thumbClickable = true; 5263 } 5264 if (isDragging) { 5265 isDragging = false; 5266 _this.$thumbOuter.removeClass('lg-grabbing').addClass('lg-grab'); 5267 } 5268 }); 5269 }; 5270 Thumbnail.prototype.enableThumbSwipe = function () { 5271 var _this = this; 5272 var thumbDragUtils = { 5273 cords: { 5274 startX: 0, 5275 endX: 0, 5276 }, 5277 isMoved: false, 5278 newTranslateX: 0, 5279 startTime: new Date(), 5280 endTime: new Date(), 5281 touchMoveTime: 0, 5282 }; 5283 this.$lgThumb.on('touchstart.lg', function (e) { 5284 if (_this.thumbTotalWidth > _this.thumbOuterWidth) { 5285 e.preventDefault(); 5286 thumbDragUtils.cords.startX = e.targetTouches[0].pageX; 5287 _this.thumbClickable = false; 5288 thumbDragUtils.startTime = new Date(); 5289 } 5290 }); 5291 this.$lgThumb.on('touchmove.lg', function (e) { 5292 if (_this.thumbTotalWidth > _this.thumbOuterWidth) { 5293 e.preventDefault(); 5294 thumbDragUtils.cords.endX = e.targetTouches[0].pageX; 5295 thumbDragUtils = _this.onThumbTouchMove(thumbDragUtils); 5296 } 5297 }); 5298 this.$lgThumb.on('touchend.lg', function () { 5299 if (thumbDragUtils.isMoved) { 5300 thumbDragUtils = _this.onThumbTouchEnd(thumbDragUtils); 5301 } 5302 else { 5303 _this.thumbClickable = true; 5304 } 5305 }); 5306 }; 5307 // Rebuild thumbnails 5308 Thumbnail.prototype.rebuildThumbnails = function () { 5309 var _this = this; 5310 // Remove transitions 5311 this.$thumbOuter.addClass('lg-rebuilding-thumbnails'); 5312 setTimeout(function () { 5313 _this.thumbTotalWidth = 5314 _this.core.galleryItems.length * 5315 (_this.settings.thumbWidth + _this.settings.thumbMargin); 5316 _this.$lgThumb.css('width', _this.thumbTotalWidth + 'px'); 5317 _this.$lgThumb.empty(); 5318 _this.setThumbItemHtml(_this.core.galleryItems); 5319 _this.animateThumb(_this.core.index); 5320 }, 50); 5321 setTimeout(function () { 5322 _this.$thumbOuter.removeClass('lg-rebuilding-thumbnails'); 5323 }, 200); 5324 }; 5325 // @ts-check 5326 Thumbnail.prototype.setTranslate = function (value) { 5327 this.$lgThumb.css('transform', 'translate3d(-' + value + 'px, 0px, 0px)'); 5328 }; 5329 Thumbnail.prototype.getPossibleTransformX = function (left) { 5330 if (left > this.thumbTotalWidth - this.thumbOuterWidth) { 5331 left = this.thumbTotalWidth - this.thumbOuterWidth; 5332 } 5333 if (left < 0) { 5334 left = 0; 5335 } 5336 return left; 5337 }; 5338 Thumbnail.prototype.animateThumb = function (index) { 5339 this.$lgThumb.css('transition-duration', this.core.settings.speed + 'ms'); 5340 if (this.settings.animateThumb) { 5341 var position = 0; 5342 switch (this.settings.currentPagerPosition) { 5343 case 'left': 5344 position = 0; 5345 break; 5346 case 'middle': 5347 position = 5348 this.thumbOuterWidth / 2 - this.settings.thumbWidth / 2; 5349 break; 5350 case 'right': 5351 position = this.thumbOuterWidth - this.settings.thumbWidth; 5352 } 5353 this.translateX = 5354 (this.settings.thumbWidth + this.settings.thumbMargin) * index - 5355 1 - 5356 position; 5357 if (this.translateX > this.thumbTotalWidth - this.thumbOuterWidth) { 5358 this.translateX = this.thumbTotalWidth - this.thumbOuterWidth; 5359 } 5360 if (this.translateX < 0) { 5361 this.translateX = 0; 5362 } 5363 this.setTranslate(this.translateX); 5364 } 5365 }; 5366 Thumbnail.prototype.onThumbTouchMove = function (thumbDragUtils) { 5367 thumbDragUtils.newTranslateX = this.translateX; 5368 thumbDragUtils.isMoved = true; 5369 thumbDragUtils.touchMoveTime = new Date().valueOf(); 5370 thumbDragUtils.newTranslateX -= 5371 thumbDragUtils.cords.endX - thumbDragUtils.cords.startX; 5372 thumbDragUtils.newTranslateX = this.getPossibleTransformX(thumbDragUtils.newTranslateX); 5373 // move current slide 5374 this.setTranslate(thumbDragUtils.newTranslateX); 5375 this.$thumbOuter.addClass('lg-dragging'); 5376 return thumbDragUtils; 5377 }; 5378 Thumbnail.prototype.onThumbTouchEnd = function (thumbDragUtils) { 5379 thumbDragUtils.isMoved = false; 5380 thumbDragUtils.endTime = new Date(); 5381 this.$thumbOuter.removeClass('lg-dragging'); 5382 var touchDuration = thumbDragUtils.endTime.valueOf() - 5383 thumbDragUtils.startTime.valueOf(); 5384 var distanceXnew = thumbDragUtils.cords.endX - thumbDragUtils.cords.startX; 5385 var speedX = Math.abs(distanceXnew) / touchDuration; 5386 // Some magical numbers 5387 // Can be improved 5388 if (speedX > 0.15 && 5389 thumbDragUtils.endTime.valueOf() - thumbDragUtils.touchMoveTime < 30) { 5390 speedX += 1; 5391 if (speedX > 2) { 5392 speedX += 1; 5393 } 5394 speedX = 5395 speedX + 5396 speedX * (Math.abs(distanceXnew) / this.thumbOuterWidth); 5397 this.$lgThumb.css('transition-duration', Math.min(speedX - 1, 2) + 'settings'); 5398 distanceXnew = distanceXnew * speedX; 5399 this.translateX = this.getPossibleTransformX(this.translateX - distanceXnew); 5400 this.setTranslate(this.translateX); 5401 } 5402 else { 5403 this.translateX = thumbDragUtils.newTranslateX; 5404 } 5405 if (Math.abs(thumbDragUtils.cords.endX - thumbDragUtils.cords.startX) < 5406 this.settings.thumbnailSwipeThreshold) { 5407 this.thumbClickable = true; 5408 } 5409 return thumbDragUtils; 5410 }; 5411 Thumbnail.prototype.getThumbHtml = function (thumb, index) { 5412 var slideVideoInfo = this.core.galleryItems[index].__slideVideoInfo || {}; 5413 var thumbImg; 5414 if (slideVideoInfo.youtube) { 5415 if (this.settings.loadYouTubeThumbnail) { 5416 thumbImg = 5417 '//img.youtube.com/vi/' + 5418 slideVideoInfo.youtube[1] + 5419 '/' + 5420 this.settings.youTubeThumbSize + 5421 '.jpg'; 5422 } 5423 else { 5424 thumbImg = thumb; 5425 } 5426 } 5427 else { 5428 thumbImg = thumb; 5429 } 5430 return "<div data-lg-item-id=\"" + index + "\" class=\"lg-thumb-item " + (index === this.core.index ? ' active' : '') + "\" \n style=\"width:" + this.settings.thumbWidth + "px; height: " + this.settings.thumbHeight + ";\n margin-right: " + this.settings.thumbMargin + "px;\">\n <img data-lg-item-id=\"" + index + "\" src=\"" + thumbImg + "\" />\n </div>"; 5431 }; 5432 Thumbnail.prototype.getThumbItemHtml = function (items) { 5433 var thumbList = ''; 5434 for (var i = 0; i < items.length; i++) { 5435 thumbList += this.getThumbHtml(items[i].thumb, i); 5436 } 5437 return thumbList; 5438 }; 5439 Thumbnail.prototype.setThumbItemHtml = function (items) { 5440 var thumbList = this.getThumbItemHtml(items); 5441 this.$lgThumb.html(thumbList); 5442 }; 5443 Thumbnail.prototype.setAnimateThumbStyles = function () { 5444 if (this.settings.animateThumb) { 5445 this.core.outer.addClass('lg-animate-thumb'); 5446 } 5447 }; 5448 // Manage thumbnail active calss 5449 Thumbnail.prototype.manageActiveClassOnSlideChange = function () { 5450 var _this = this; 5451 // manage active class for thumbnail 5452 this.core.LGel.on(lGEvents.beforeSlide + ".thumb", function (event) { 5453 var $thumb = _this.core.outer.find('.lg-thumb-item'); 5454 var index = event.detail.index; 5455 $thumb.removeClass('active'); 5456 $thumb.eq(index).addClass('active'); 5457 }); 5458 }; 5459 // Toggle thumbnail bar 5460 Thumbnail.prototype.toggleThumbBar = function () { 5461 var _this = this; 5462 if (this.settings.toggleThumb) { 5463 this.core.outer.addClass('lg-can-toggle'); 5464 this.core.$toolbar.append('<button type="button" aria-label="' + 5465 this.settings.thumbnailPluginStrings['toggleThumbnails'] + 5466 '" class="lg-toggle-thumb lg-icon"></button>'); 5467 this.core.outer 5468 .find('.lg-toggle-thumb') 5469 .first() 5470 .on('click.lg', function () { 5471 _this.core.outer.toggleClass('lg-components-open'); 5472 }); 5473 } 5474 }; 5475 Thumbnail.prototype.thumbKeyPress = function () { 5476 var _this = this; 5477 this.$LG(window).on("keydown.lg.thumb.global" + this.core.lgId, function (e) { 5478 if (!_this.core.lgOpened || !_this.settings.toggleThumb) 5479 return; 5480 if (e.keyCode === 38) { 5481 e.preventDefault(); 5482 _this.core.outer.addClass('lg-components-open'); 5483 } 5484 else if (e.keyCode === 40) { 5485 e.preventDefault(); 5486 _this.core.outer.removeClass('lg-components-open'); 5487 } 5488 }); 5489 }; 5490 Thumbnail.prototype.destroy = function () { 5491 if (this.settings.thumbnail) { 5492 this.$LG(window).off(".lg.thumb.global" + this.core.lgId); 5493 this.core.LGel.off('.lg.thumb'); 5494 this.core.LGel.off('.thumb'); 5495 this.$thumbOuter.remove(); 5496 this.core.outer.removeClass('lg-has-thumb'); 5497 } 5498 }; 5499 return Thumbnail; 5500}()); 5501 5502/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Thumbnail); 5503//# sourceMappingURL=lg-thumbnail.es5.js.map 5504 5505 5506/***/ }), 5507
5508/***/ "./src/scss/app.scss": 5509/*!***************************!*\ 5510 !*** ./src/scss/app.scss ***! 5511 \***************************/ 5512/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 5513 5514"use strict"; 5515__webpack_require__.r(__webpack_exports__); 5516// extracted by mini-css-extract-plugin 5517 5518 5519/***/ })
vendor: 4,922 bytes, lines 5519-5608
5519 5520 5521/******/ }); 5522/************************************************************************/ 5523/******/ // The module cache 5524/******/ var __webpack_module_cache__ = {}; 5525/******/ 5526/******/ // The require function 5527/******/ function __webpack_require__(moduleId) { 5528/******/ // Check if module is in cache 5529/******/ var cachedModule = __webpack_module_cache__[moduleId]; 5530/******/ if (cachedModule !== undefined) { 5531/******/ return cachedModule.exports; 5532/******/ } 5533/******/ // Create a new module (and put it into the cache) 5534/******/ var module = __webpack_module_cache__[moduleId] = { 5535/******/ // no module.id needed 5536/******/ // no module.loaded needed 5537/******/ exports: {} 5538/******/ }; 5539/******/ 5540/******/ // Execute the module function 5541/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); 5542/******/ 5543/******/ // Return the exports of the module 5544/******/ return module.exports; 5545/******/ } 5546/******/ 5547/************************************************************************/ 5548/******/ /* webpack/runtime/compat get default export */ 5549/******/ (() => { 5550/******/ // getDefaultExport function for compatibility with non-harmony modules 5551/******/ __webpack_require__.n = (module) => { 5552/******/ var getter = module && module.__esModule ? 5553/******/ () => (module['default']) : 5554/******/ () => (module); 5555/******/ __webpack_require__.d(getter, { a: getter }); 5556/******/ return getter; 5557/******/ }; 5558/******/ })(); 5559/******/ 5560/******/ /* webpack/runtime/define property getters */ 5561/******/ (() => { 5562/******/ // define getter functions for harmony exports 5563/******/ __webpack_require__.d = (exports, definition) => { 5564/******/ for(var key in definition) { 5565/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 5566/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 5567/******/ } 5568/******/ } 5569/******/ }; 5570/******/ })(); 5571/******/ 5572/******/ /* webpack/runtime/hasOwnProperty shorthand */ 5573/******/ (() => { 5574/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) 5575/******/ })(); 5576/******/ 5577/******/ /* webpack/runtime/make namespace object */ 5578/******/ (() => { 5579/******/ // define __esModule on exports 5580/******/ __webpack_require__.r = (exports) => { 5581/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 5582/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 5583/******/ } 5584/******/ Object.defineProperty(exports, '__esModule', { value: true }); 5585/******/ }; 5586/******/ })(); 5587/******/ 5588/************************************************************************/ 5589var __webpack_exports__ = {}; 5590// This entry need to be wrapped in an IIFE because it need to be in strict mode. 5591(() => { 5592"use strict"; 5593/*!***********************!*\ 5594 !*** ./src/js/app.js ***! 5595 \***********************/ 5596__webpack_require__.r(__webpack_exports__); 5597/* harmony import */ var _scss_app_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../scss/app.scss */ "./src/scss/app.scss"); 5598/* harmony import */ var _includes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./includes.js */ "./src/js/includes.js"); 5599/* harmony import */ var _includes_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_includes_js__WEBPACK_IMPORTED_MODULE_1__); 5600/* harmony import */ var _owl_carouse_min_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./owl-carouse.min.js */ "./src/js/owl-carouse.min.js"); 5601/* harmony import */ var _owl_carouse_min_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_owl_carouse_min_js__WEBPACK_IMPORTED_MODULE_2__); 5602/* harmony import */ var _lazyloading_jquery_lazy_min_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lazyloading/jquery.lazy.min.js */ "./src/js/lazyloading/jquery.lazy.min.js"); 5603/* harmony import */ var _lazyloading_jquery_lazy_min_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_lazyloading_jquery_lazy_min_js__WEBPACK_IMPORTED_MODULE_3__); 5604/* harmony import */ var _lazyloading_jquery_lazy_plugins_min_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lazyloading/jquery.lazy.plugins.min.js */ "./src/js/lazyloading/jquery.lazy.plugins.min.js"); 5605/* harmony import */ var _lazyloading_jquery_lazy_plugins_min_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_lazyloading_jquery_lazy_plugins_min_js__WEBPACK_IMPORTED_MODULE_4__); 5606/* harmony import */ var _dkcode_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dkcode.js */ "./src/js/dkcode.js"); 5607/* harmony import */ var _owls_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./owls.js */ "./src/js/owls.js"); 5608/* harmony import */ var _owls_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_owl
5608s_js__WEBPACK_IMPORTED_MODULE_6__); 5609/* harmony import */ var _listing_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./listing.js */ "./src/js/listing.js"); 5610/* harmony import */ var _listing_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_listing_js__WEBPACK_IMPORTED_MODULE_7__); 5611/* harmony import */ var _article_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./article.js */ "./src/js/article.js"); 5612/* harmony import */ var _article_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_article_js__WEBPACK_IMPORTED_MODULE_8__); 5613 5614 5615 5616 5617 5618 5619 5620 // import './gam.js'; 5621 5622 5623})(); 5624 5625/******/ })() 5626; 5627//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QU
5627FDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLFdBQVc7QUFDOUM7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxrQ0FBa0M7QUFDOUUsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsb0JBQW9CO0FBQ3ZEO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLGFBQWE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUIsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDRCQUE0QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDRCQUE0QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsOERBQThELDhEQUE4RDtBQUM1SztBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QU
5627FDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEIsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLDJEQUEyRCxjQUFjO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHFEQUFxRDtBQUN2RjtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIscURBQXFEO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLHlEQUF5RDtBQUN6RDtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIscURBQXFEO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsU0FBUztBQUN4QixlQUFlLFNBQVM7QUFDeEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QU
5627FDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQyxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSw0QkFBNEIsMkJBQTJCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxZQUFZLEVBQUM7QUFDNUI7Ozs7Ozs7Ozs7Ozs7Ozs7QUN6cUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELE9BQU87QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0F
5627BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELGlFQUFlLFVBQVUsRUFBQztBQUMxQjs7Ozs7Ozs7Ozs7Ozs7OztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxPQUFPO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ01BQWdNLDBDQUEwQyxnRUFBZ0U7QUFDMVM7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QU
5627FFRCxpRUFBZSxTQUFTLEVBQUM7QUFDekI7Ozs7Ozs7Ozs7Ozs7QUNsZUE7Ozs7Ozs7VUNBQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7OztXQ3RCQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsaUNBQWlDLFdBQVc7V0FDNUM7V0FDQTs7Ozs7V0NQQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHlDQUF5Qyx3Q0FBd0M7V0FDakY7V0FDQTtXQUNBOzs7OztXQ1BBOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHVEQUF1RCxpQkFBaUI7V0FDeEU7V0FDQSxnREFBZ0QsYUFBYTtXQUM3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0NBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ad2VhcmVhdGhsb24vZnJvbnRlbmQtd2VicGFjay1ib2lsZXJwbGF0ZS8uL3NyYy9qcy9hcnRpY2xlLmpzIiwid2VicGFjazovL0B3ZWFyZWF0aGxvbi9mcm9udGVuZC13ZWJwYWNrLWJvaWxlcnBsYXRlLy4vc3JjL2pzL2RrY29kZS5qcyIsIndlYnBhY2s6Ly9Ad2VhcmVhdGhsb24vZnJvbnRlbmQtd2VicGFjay1ib2lsZXJwbGF0ZS8uL3NyYy9qcy9pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9Ad2VhcmVhdGhsb24vZnJvbnRlbmQtd2VicGFjay1ib2lsZXJwbGF0ZS8uL3NyYy9qcy9sYXp5bG9hZGluZy9qcXVlcnkubGF6eS5taW4uanMiLCJ3ZWJwYWNrOi8vQHdlYXJlYXRobG9uL2Zyb250ZW5kLXdlYnBhY2stYm9pbGVycGxhdGUvLi9zcmMvanMvbGF6eWxvYWRpbmcvanF1ZXJ5LmxhenkucGx1Z2lucy5taW4uanMiLCJ3ZWJwYWNrOi8vQHdlYXJlYXRobG9uL2Zyb250ZW5kLXdlYnBhY2stYm9pbGVycGxhdGUvLi9zcmMvanMvbGlzdGluZy5qcyIsIndlYnBhY2s6Ly9Ad2VhcmVhdGhsb24vZnJvbnRlbmQtd2VicGFjay1ib2lsZXJwbGF0ZS8uL3NyYy9qcy9vd2wtY2Fyb3VzZS5taW4uanMiLCJ3ZWJwYWNrOi8vQHdlYXJlYXRobG9uL2Zyb250ZW5kLXdlYnBhY2stYm9pbGVycGxhdGUvLi9zcmMvanMvb3dscy5qcyIsIndlYnBhY2s6Ly9Ad2VhcmVhdGhsb24vZnJvbnRlbmQtd2VicGFjay1ib2lsZXJwbGF0ZS8uL25vZGVfbW9kdWxlcy9saWdodGdhbGxlcnkvbGlnaHRnYWxsZXJ5LmVzNS5qcyIsIndlYnBhY2s6Ly9Ad2VhcmVhdGhsb24vZnJvbnRlbmQtd2VicGFjay1ib2lsZXJwbGF0ZS8uL25vZGVfbW9kdWxlcy9saWdodGdhbGxlcnkvcGx1Z2lucy9mdWxsc2NyZWVuL2xnLWZ1bGxzY3JlZW4uZXM1LmpzIiwid2VicGFjazovL0B3ZWFyZWF0aGxvbi9mcm9udGVuZC13ZWJwYWNrLWJvaWxlcnBsYXRlLy4vbm9kZV9tb2R1bGVzL2xpZ2h0Z2FsbGVyeS9wbHVnaW5zL3RodW1ibmFpbC9sZy10aHVtYm5haWwuZXM1LmpzIiwid2VicGFjazovL0B3ZWFyZWF0aGxvbi9mcm9udGVuZC13ZWJwYWNrLWJvaWxlcnBsYXRlLy4vc3JjL3Njc3MvYXBwLnNjc3M/NjI5ZSIsIndlYnBhY2s6Ly9Ad2VhcmVhdGhsb24vZnJvbnRlbmQtd2VicGFjay1ib2lsZXJwbGF0ZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Ad2VhcmVhdGhsb24vZnJvbnRlbmQtd2VicGFjay1ib2lsZXJwbGF0ZS93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9Ad2VhcmVhdGhsb24vZnJvbnRlbmQtd2VicGFjay1ib2lsZXJwbGF0ZS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQHdlYXJlYXRobG9uL2Zyb250ZW5kLXdlYnBhY2stYm9pbGVycGxhdGUvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9Ad2VhcmVhdGhsb24vZnJvbnRlbmQtd2VicGFjay1ib2lsZXJwbGF0ZS93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL0B3ZWFyZWF0aGxvbi9mcm9udGVuZC13ZWJwYWNrLWJvaWxlcnBsYXRlLy4vc3JjL2pzL2FwcC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcbiAgY29uc3QgbG9hZF9jb250YWluZXIgPSAkKCcuanMtbG9hZC1hcnRpY2xlcycpO1xuICBjb25zdCBhcnRpY2xlc19sb2FkZXIgPSAkKCcuanMtYXJ0aWNsZXMtbG9hZGVyJyk7XG4gIGNvbnN0IGFwaV91cmwgPSAkKGxvYWRfY29udGFpbmVyKS5kYXRhKCdhcGktdXJsJyk7XG4gIGNvbnN0IHNpZGViYXJfaGFsZl9wYWdlID0gJChsb2FkX2NvbnRhaW5lcikuZGF0YSgnc2lkZWJhci1oYWxmLXBhZ2UnKTtcbiAgY29uc3Qgc2lkZWJhcl90YWIgPSAkKGxvYWRfY29udGFpbmVyKS5kYXRhKCdzaWRlYmFyLXRhYicpO1xuICBjb25zdCBhcnRpY2xlX2lkID0gJChsb2FkX2NvbnRhaW5lcikuZGF0YSgnY3VycmVudC1wb3N0Jyk7XG4gIGNvbnN0IGlzX2VkaXRvciA9ICQobG9hZF9jb250YWluZXIpLmRhdGEoJ2VkaXRvcicpO1xuXG4gIGxldCBhcnRpY2xlX3RvX2xvYWQgPSBwYXJzZUludCgkKGxvYWRfY29udGFpbmVyKS5kYXRhKCdhdXRvLWxvYWRpbmctY291bnQnKSk7XG4gIGxldCBjdXJyZW50X2FjdGl2ZSA9IGxvYWRpbmdfdXJsID0gZmFsc2U7XG4gIGxldCBsYXN0X29mZnNldCA9IDA7XG4gIGxldCBhbGxfYXJ0aWNsZXMgPSBbXTtcblxuICBjb25zdCBoZWlnaHRXaW5kb3cgPSAkKHdpbmRvdykuaGVpZ2h0KCk7XG4gIGNvbnN0IGhlaWdodEZvb3RlciA9ICQoJ2Zvb3RlcicpLmhlaWdodCgpO1xuXG4gICQoJy5qcy1mYi1zaGFyZScpLmNsaWNrKGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgd2luZG93Lm9wZW4oJCh0aGlzKS5hdHRyKCdocmVmJyksICdmYlNoYXJlV2luZG93JywgJ2hlaWdodD00NTAsIHdpZHRoPTU1MCwgdG9wPScgKyAoJCh3aW5kb3cpLmhlaWdodCgpIC8gMiAtIDI3NSkgKyAnLCBsZWZ0PScgKyAoJCh3aW5kb3cpLndpZHRoKCkgLyAyIC0gMjI1KSArICcsIHRvb2xiYXI9MCwgbG9jYXRpb249MCwgbWVudWJhcj0wLCBkaXJlY3Rvcmllcz0wLCBzY3JvbGxiYXJzPTAnKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xuXG4gICQoJy5qcy10d2VldC1zaGFyZScpLm9mZignY2xpY2snKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgZmllbGRfbGlzdCA9IHtcbiAgICAgIHVybDogJCh0aGlzKS5kYXRhKCd1cmwnKSxcbiAgICAgIHRleHQ6ICQodGhpcykuZGF0YSgndGl0bGUnKVxuICAgIH1cbiAgICB3aW5kb3cub3BlbignaHR0cHM6Ly90d2l0dGVyLmNvbS9zaGFyZT8nK2pRdWVyeS5wYXJhbShmaWVsZF9saXN0KSwgJ19ibGFuaycsICd3aWR0aD01NTAsaGVpZ2h0PTQyMCcpLmZvY3VzKCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcblxuICAkKCcuanMtY29weS1jdXJyZW50LXVybCcpLmNsaWNrKGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IHVybCA9ICQodGhpcykuZGF0YSgndXJsJyk7XG4gICAgY29uc3QgZHVtbXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gICAgZHVtbXkudGV4dENvbnRlbnQgPSB1cmw7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkdW1teSk7XG5cbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnRCZWZvcmUoZHVtbXkpO1xuICAgIHJhbmdlLnNldEVuZEFmdGVyKGR1bW15KTtcblxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcblxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkdW1teSk7XG4gICAgJCh0aGlzKS5maW5kKCcuY29we
5627S1zdWNjZXNzJykuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgJCh0aGlzKS5maW5kKCcuY29weS1zdWNjZXNzJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgIH0sIDEwMDApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG5cbiAgaWYgKCQobG9hZF9jb250YWluZXIpLmxlbmd0aCkge1xuICAgIGhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24gPSAnYXV0byc7XG4gICAgYWxsX2FydGljbGVzLnB1c2goe1xuICAgICAgdG9wOiAwLFxuICAgICAgdXJsOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgIHRpdGxlOiBkb2N1bWVudC50aXRsZVxuICAgIH0pO1xuXG4gICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBoZWlnaHREb2MgPSAkKGRvY3VtZW50KS5oZWlnaHQoKTtcbiAgICAgIHZhciBoZWlnaHRTY3JvbGwgPSAkKHdpbmRvdykuc2Nyb2xsVG9wKCk7XG4gICAgICB2YXIgaGVpZ2h0U2Nyb2xsRG93biA9IGhlaWdodFdpbmRvdyArIGhlaWdodFNjcm9sbDtcbiAgICAgIHZhciBoZWlnaHREb2NXaXRob3V0Rm9vdGVyID0gaGVpZ2h0RG9jIC0gaGVpZ2h0Rm9vdGVyO1xuICAgICAgdmFyIHRlc3QgPSBfZmluZChhbGxfYXJ0aWNsZXMsIGhlaWdodFNjcm9sbCAtIGhlaWdodFdpbmRvdyoxLjMpO1xuICAgICAgaWYodGVzdC51cmwgIT09IHdpbmRvdy5sb2NhdGlvbi5ocmVmICYmIHRlc3QudXJsKSB7XG4gICAgICAgIGNoYW5nZVVybCh0ZXN0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhlaWdodFNjcm9sbERvd24gPiBoZWlnaHREb2NXaXRob3V0Rm9vdGVyICogMC44KSB7XG4gICAgICAgIGxvYWRBcnRpY2xlcygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gX2ZpbmQoYXJyYXksIHNlYXJjaCkge1xuICAgIHZhciB2YWx1ZSA9IDA7XG4gICAgdmFyIHRvcCA9IDA7XG4gICAgZm9yKHZhciBpID0gMDsgaTxhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdG9wID0gYXJyYXlbaSsxXSA/IGFycmF5W2krMV0udG9wIDogOTk5OTk5OTk5OTk5OTk7XG4gICAgICBpZihzZWFyY2ggPj0gYXJyYXlbaV0udG9wICYmIHNlYXJjaCA8PSB0b3ApIHtcbiAgICAgICAgdmFsdWUgPSBhcnJheVtpXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hhbmdlVXJsKG5ld1N0YXRlKSB7XG4gICAgaWYoIWxvYWRpbmdfdXJsKXtcbiAgICAgIGxvYWRpbmdfdXJsID0gdHJ1ZTtcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgbmV3U3RhdGUudGl0bGUsIG5ld1N0YXRlLnVybCk7XG4gICAgICBkb2
5627N1bWVudC50aXRsZSA9IG5ld1N0YXRlLnRpdGxlO1xuXG4gICAgICBpZihuZXdTdGF0ZS50b3AgPT0gMCkge1xuICAgICAgICBoaXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiA9ICdtYW51YWwnO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbG9hZGluZ191cmwgPSBmYWxzZTtcbiAgICAgIH0sIDEwMDApO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGxvYWRBcnRpY2xlcygpIHtcbiAgICBpZiAoY3VycmVudF9hY3RpdmUgfHwgYXJ0aWNsZV90b19sb2FkID09IDApIHJldHVybiBmYWxzZTtcblxuICAgIGN1cnJlbnRfYWN0aXZlID0gdHJ1ZTtcbiAgICAkKGFydGljbGVzX2xvYWRlcikuYWRkQ2xhc3MoJ3Nob3cnKTtcblxuICAgICQucG9zdChhcGlfdXJsLCB7XG4gICAgICAgIFwiYXJ0aWNsZV9pZFwiOiBhcnRpY2xlX2lkLFxuICAgICAgICBcImxhc3Rfb2Zmc2V0XCI6IGxhc3Rfb2Zmc2V0LFxuICAgICAgICAnc2lkZWJhcl9oYWxmX3BhZ2UnOiBzaWRlYmFyX2hhbGZfcGFnZSxcbiAgICAgICAgJ3NpZGViYXJfdGFiJzogc2lkZWJhcl90YWIsXG4gICAgICAgICdpc19lZGl0b3InOiBpc19lZGl0b3JcbiAgICAgIH0sXG4gICAgICBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhLmZvcmNlX3N0b3ApIHtcbiAgICAgICAgICBhcnRpY2xlX3RvX2xvYWQgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFydGljbGVfdG9fbG9hZC0tO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudF9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgbGFzdF9vZmZzZXQrKztcblxuICAgICAgICAkKGFydGljbGVzX2xvYWRlcikucmVtb3ZlQ2xhc3MoJ3Nob3cnKTtcbiAgICAgICAgaWYgKCFkYXRhLnRpdGxlKSByZXR1cm4gZmFsc2U7O1xuICAgICAgICBsZXQgbmV3X3NlY3Rpb24gPSAkKGxvYWRfY29udGFpbmVyKS5maW5kKCcuanMtY29weScpLmNsb25lKCk7XG4gICAgICAgICQobmV3X3NlY3Rpb24pLnJlbW92ZUNsYXNzKCdqcy1jb3B5Jyk7XG4gICAgICAgICQobmV3X3NlY3Rpb24pLnNob3coKTtcbiAgICAgICAgJChuZXdfc2VjdGlvbikuZmluZCgnLmpzLWxlZnQnKS5hcHBlbmQoZGF0YS5odG1sKTtcbiAgICAgICAgJChuZXdfc2VjdGlvbikuZmluZCgnLmpzLXJpZ2h0JykuYXBwZW5kKGRhdGEuaHRtbF9oYWxmX3BhZ2UpO1xuICAgICAgICAkKGxvYWRfY29udGFpbmVyKS5hcHBlbmQobmV3X3NlY3Rpb24pO1xuXG4gICAgICAgIGFsbF9hcnRpY2xlcy5wdXNoKHtcbiAgICAgICAgICB0b3A6IG5ld19zZWN0aW9uLnBvc2l0aW9uKCkudG9wLFxuICAgICAgICAgIHVybDogZGF0YS51cmwsXG4gICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJChuZXdfc2VjdGlvbikuZmluZCgnLmpzLWdhbS13cmFwcGVyJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHdpbmRvdy5wcmVwYXJlR2FtQWQoJCh0aGlzKSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAkKG5ld19zZWN0aW9uKS5maW5kKCcuanMtZmItc2hhcmUnKS5jbGljayhmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB3aW5kb3cub3BlbigkKHRoaXMpLmF0dHIoJ2hyZWYnKSwgJ2ZiU2hhcmVXaW5kb3cnLCAnaGVpZ2h0PTQ1MCwgd2lkdGg9NTUwLCB0b3A9JyArICgkKHdpbmRvdykuaGVpZ2h0KCkgLyAyIC0gMjc1KSArICcsIGxlZnQ9JyArICgkKHdpbmRvdykud2lkdGgoKSAvIDIgLSAyMjUpICsgJywgdG9vbGJhcj0wLCBsb2NhdGlvbj0wLCBtZW51YmFyPTAsIGRpcmVjdG9yaWVzPTAsIHNjcm9sbGJhcnM9MCcpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIFxuICAgICAgICAkKG5ld19zZWN0aW9uKS5maW5kKCcuanMtdHdlZXQtc2hhcmUnKS5vZmYoJ2NsaWNrJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGZpZWxkX2xpc3QgPSB7XG4gICAgICAgICAgICB1cmw6ICQodGhpcykuZGF0YSgndXJsJyksXG4gICAgICAgICAgICB0ZXh0OiAkKHRoaXMpLmRhdGEoJ3RpdGxlJylcbiAgICAgICAgICB9XG4gICAgICAgICAgd2luZG93Lm9wZW4oJ2h0dHBzOi8vdHdpdHRlci5jb20vc2hhcmU/JytqUXVlcnkucGFyYW0oZmllbGRfbGlzdCksICdfYmxhbmsnLCAnd2lkdGg9NTUwLGhlaWdodD00MjAnKS5mb2N1cygpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICBcbiAgICAgICAgJChuZXdfc2VjdGlvbikuZmluZCgnLmpzLWNvcHktY3VycmVudC11cmwnKS5jbGljayhmdW5jdGlvbigpIHtcbiAgICAgICAgICBjb25zdCB1cmwgPSAkKHRoaXMpLmRhdGEoJ3VybCcpO1xuICAgICAgICAgIGNvbnN0IGR1bW15ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xuICAgICAgICAgIGR1bW15LnRleHRDb250ZW50ID0gdXJsO1xuICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZHVtbXkpO1xuICAgICAgXG4gICAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICAgIHJhbmdlLnNldFN0YXJ0QmVmb3JlKGR1bW15KTtcbiAgICAgICAgICByYW5nZS5zZXRFbmRBZnRlcihkdW1teSk7XG4gICAgICBcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgICBcbiAgICAgICAgICBkb2
5627N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZHVtbXkpO1xuICAgICAgICAgICQodGhpcykuZmluZCgnLmNvcHktc3VjY2VzcycpLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICQodGhpcykuZmluZCgnLmNvcHktc3VjY2VzcycpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIH0sIDMwMCk7XG4gICAgICB9KS5mYWlsKGZ1bmN0aW9uKCkge1xuICAgICAgY3VycmVudF9hY3RpdmUgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCJpbXBvcnQgbGlnaHRHYWxsZXJ5IGZyb20gJ2xpZ2h0Z2FsbGVyeSc7XG5pbXBvcnQgbGdUaHVtYm5haWwgZnJvbSAnbGlnaHRnYWxsZXJ5L3BsdWdpbnMvdGh1bWJuYWlsJ1xuaW1wb3J0IGxnRnVsbHNjcmVlbiBmcm9tICdsaWdodGdhbGxlcnkvcGx1Z2lucy9mdWxsc2NyZWVuJ1xuXG4kKHdpbmRvdykub24oJ2xvYWQnLCAoKSA9PiB7XG4gIC8vIGxldCB0b3VjaHN0YXJ0ID0gZmFsc2U7XG4gIGNvbnN0IHNjcmVlbldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gIGNvbnN0IGhlYWRlclN1Ym1lbnUgPSAkKCcuaGVhZGVyX19zdWJtZW51Jyk7XG4gIGNvbnN0IHRyYW5zbGF0ZVlIaWRlID0gJ3RyYW5zbGF0ZVkoLTE1MCUpJztcbiAgY29uc3QgdHJhbnNsYXRlWVNob3cgPSAndHJhbnNsYXRlWSgwKSc7XG4gIGNvbnN0IHRyYW5zbGF0ZVhIaWRlID0gJ3RyYW5zbGF0ZVgoLTE1MCUpJztcbiAgY29uc3QgdHJhbnNsYXRlWFNob3cgPSAndHJhbnNsYXRlWCgwKSc7XG4gIGNvbnN0IG9wZW5Nb2JpbGVNZW51QnV0dG9uID0gJCgnLmpzLW9wZW4tbW9iaWxlLW1lbnUnKTtcbiAgY29uc3QgbW9iaWxlTWVudSA9ICQoJy5qcy1tb2JpbGUtbWVudScpO1xuICBjb25zdCBzZWFyY2hJY29uID0gJCgnLmpzLXRvZ2dsZS1zZWFyY2gnKTtcbiAgY29uc3Qgc2VhcmNoV3JhcHBlciA9ICQoJy5qcy1zZWFyY2gtd3JhcHBlcicpO1xuICBjb25zdCBpc19hZG1pbl9iYXIgPSAkKCdib2R5JykuaGFzQ2xhc3MoJ2FkbWluLWJhcicpO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVNob3dTZWFyY2goKSB7XG4gICAgc2VhcmNoV3JhcHBlci5jc3MoJ2Rpc3BsYXknLCAnZmxleCcpO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBzZWFyY2hXcmFwcGVyLmNzcygnb3BhY2l0eScsIDEpO1xuICAgICAgJCgnaW5wdXRbdHlwZT1cInRleHRcIl0nLCBzZWFyY2hXcmFwcGVyKS5mb2N1cygpO1xuICAgIH0sIDE1MCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVIaWRlU2VhcmNoKCkge1xuICAgIHNlYXJjaFdyYXBwZXIuY3NzKCdvcGFjaXR5JywgMCk7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHNlYXJjaFdyYXBwZXIuY3NzKCdkaXNwbGF5J
5627ywgJ25vbmUnKTtcbiAgICAgICQoJ2lucHV0W3R5cGU9XCJ0ZXh0XCJdJywgc2VhcmNoV3JhcHBlcikudmFsKCcnKTtcbiAgICB9LCAxNTApO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlVG9nZ2xlU2VhcmNoKGFjdGlvbikge1xuICAgICQoJ2JvZHknKS50b2dnbGVDbGFzcygnYWN0aXZlLXNlYXJjaCcpO1xuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlICdzaG93JzpcbiAgICAgICAgcmV0dXJuIGhhbmRsZVNob3dTZWFyY2goKTtcbiAgICAgIGNhc2UgJ2hpZGUnOlxuICAgICAgICByZXR1cm4gaGFuZGxlSGlkZVNlYXJjaCgpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgJCgnLm92ZXJsYXknLCBzZWFyY2hXcmFwcGVyKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICBoYW5kbGVUb2dnbGVTZWFyY2goJ2hpZGUnKTtcbiAgICBzZWFyY2hJY29uLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgfSk7XG5cbiAgc2VhcmNoSWNvbi5vbignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcygnYWN0aXZlJykpIHtcbiAgICAgIGhhbmRsZVRvZ2dsZVNlYXJjaCgnaGlkZScpO1xuICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZVRvZ2dsZVNlYXJjaCgnc2hvdycpO1xuICAgICAgJCh0aGlzKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBoYW5kbGVGaW5kU3VibWVudUVsZW1lbnQgPSAoc3VibWVudUlEKSA9PiB7XG4gICAgaGVhZGVyU3VibWVudS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgYXR0cklEID0gJCh0aGlzKS5kYXRhKCdpZCcpO1xuICAgICAgaWYgKGF0dHJJRCA9PT0gc3VibWVudUlEKSB7XG4gICAgICAgIGlmIChzY3JlZW5XaWR0aCA+IDEwMjQpIHtcbiAgICAgICAgICAkKHRoaXMpLmNzcygndHJhbnNmb3JtJywgdHJhbnNsYXRlWVNob3cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICQodGhpcykuY3NzKCd0cmFuc2Zvcm0nLCB0cmFuc2xhdGVYU2hvdyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBpZiAoc2NyZWVuV2lkdGggPiAxMDI0KSB7XG4gICAgJChkb2N1bWVudCkub24oJ3Njcm9sbCcsIGZ1bmN0aW9uKCl7XG4gICAgICBjb25zdCBib2R5U2Nyb2xsVG9wID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpO1xuICAgICAgbGV0IHN1Ym1lbnVUb3AgPSA2NjtcbiAgICAgIGlmKGlzX2FkbWluX2Jhcikgc3VibWVudVRvcCArPSAzMjtcbiAgICAgIGhlYWRlclN1Ym1lbnUuY3NzKCd0b3AnLCBzdWJtZW51VG9wICsgJ3B4Jyk7XG4gICAgfSk7XG5cbiAgICBoZWFkZXJTdWJtZW51Lm1vdXNlbGVhdmUoZnVuY3Rpb24gKCkge1xuICAgICAgJCh0aGlzKS5jc3MoJ3RyYW5zZm9ybScsIHRyYW5zbGF0ZVlIaWRlKTtcbiAgICB9KTtcblxuICAgIGhlYWRlclN1Ym1lbnUubW91c2VlbnRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAkKHRoaXMpLmNzcygndHJhbnNmb3JtJywgdHJhbnNsYXRlWVNob3cpO1xuICAgIH0pO1xuXG4gICAgJCgnLmhlYWRlcl9fZ3JpZF9fbmF2IG5hdiBsaScpLm1vdXNlZW50ZXIoZnVuY3Rpb24oKSB7XG4gICAgICBoZWFkZXJTdWJtZW51LmNzcygndHJhbnNmb3JtJywgdHJhbnNsYXRlWUhpZGUpO1xuICAgICAgY29uc3Qgc3VibWVudUlEID0gJCh0aGlzKS5hdHRyKCdpZCcpO1xuICAgICAgaWYgKHN1Ym1lbnVJRCkge1xuICAgICAgICBoYW5kbGVGaW5kU3VibWVudUVsZW1lbnQoc3VibWVudUlEKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgICQoJy5oZWFkZXJfX2dyaWRfX25hdiBuYXYgbGknKS5tb3VzZWxlYXZlKGZ1bmN0aW9uKCkge1xuICAgICAgaGVhZGVyU3VibWVudS5jc3MoJ3RyYW5zZm9ybScsIHRyYW5zbGF0ZVlIaWRlKTtcbiAgICB9KTtcbiAgfVxuXG4gICQoJy5oZWFkZXJfX2dyaWRfX25hdiBuYXYgbGkuaGFzLXN1Ym1lbnUnKS5jbGljayhmdW5jdGlvbihlKXtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH0pO1xuXG4gIG9wZW5Nb2JpbGVNZW51QnV0dG9uLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGNoZWNrQWN0aXZlQ2xhc3MgPSBtb2JpbGVNZW51Lmhhc0NsYXNzKCdhY3RpdmUnKTtcbiAgICBjb25zdCBib2R5ID0gJCgnYm9keScpO1xuICAgIGlmIChjaGVja0FjdGl2ZUNsYXNzKSB7XG4gICAgICBoZWFkZXJTdWJtZW51LmNzcygndHJhbnNmb3JtJywgdHJhbnNsYXRlWEhpZGUpO1xuICAgIH1cbiAgICBib2R5LnRvZ2dsZUNsYXNzKCdhY3RpdmUtLW1vYmlsZS1tZW51Jyk7XG4gICAgbW9iaWxlTWVudS50b2dnbGVDbGFzcygnYWN0aXZlJyk7XG4gICAgJCh0aGlzKS50b2dnbGVDbGFzcygnYWN0aXZlJyk7XG4gIH0pO1xuXG4gICQoJ3VsIGxpJywgbW9iaWxlTWVudSkub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuICAgIGNvbnN0IHN1Ym1lbnVJRCA9ICQodGhpcykuYXR0cignaWQnKTtcbiAgICBpZigkKHRoaXMpLmhhc0NsYXNzKCdoYXMtc3VibWVudScpKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChzdWJtZW51SUQpIHtcbiAgICAgIGhhbmRsZUZpbmRTdWJtZW51RWxlbWVudChzdWJtZW51SUQpO1xuICAgIH1cbiAgfSk7XG5cbiAgJCgnLmpzLWJhY2stc3VibWVudScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IHBhcmVudElEID0gJCh0aGlzKS5jbG9zZXN0KGhlYWRlclN1Ym1lbnUpLmRhdGEoJ2lkJyk7XG4gICAgJChoZWFkZXJTdWJtZW51LCBbJ2RhdGEtaWQ9JyArIHBhcmVudElEXSkuY3NzKCd0cmFuc2Zvcm0nLCB0cmFuc2xhdGVYSGlkZSk7XG4gIH0pO1xuXG4gIGxpZ2h0R2FsbGVyeShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGlnaHRnYWxsZXJ5JyksIHtcbiAgICBwbHVnaW5zOiBbbGdUaHVtYm5haWwsIGxnRnVsbHNjcmVlbl0sXG4gICAgc3BlZWQ6IDUwMCxcbiAgICBkb3dubG9hZDogZmFsc2UsXG4gICAgZXhUaHVtYkltYWdlOiAnZGF0YS1leHRlcm5hbC10aHVtYi1pbWFnZSdcbiAgfSk7XG59KTtcbiIsImZ1bmN0aW9uIGluY2x1ZGVIVE1MKCkge1xuICB2YXIgejsgdmFyIGk7IHZhciBlbG1udDsgdmFyIGZpbGU7IHZhciB4aHR0cDtcbiAgLyogTG9vcCB0aHJvdWdoIGEgY29sbGVjdGlvbiBvZiBhbGwgSFRNTCBlbGVtZW50czogKi9cbiAgeiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wbHVzcGx1c1xuICBmb3IgKGkgPSAwOyBpIDwgei5sZW5ndGg7IGkrKykge1xuICAgIGVsbW50ID0geltpXTtcbiAgICBmaWxlID0gZWxtbnQuZ2V0QXR0cmlidXRlKCd3My1pbmNsdWRlLWh0bWwnKTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgLyogTWFrZSBhbiBIVFRQIHJlcXVlc3QgdXNpbmcgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhcyB0aGUgZmlsZSBuYW1lOiAqL1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgICB4aHR0cCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgeGh0dHAub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCkgeyBlbG1udC5pbm5lckhUTUwgPSB0aGlzLnJlc3BvbnNlVGV4dDsgfVxuICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gNDA0KSB7IGVsbW50LmlubmVySFRNTCA9ICdQYWdlIG5vdCBmb3VuZC4nOyB9XG4gICAgICAgICAgZWxtbnQucmVtb3ZlQXR0cmlidXRlKCd3My1pbmNsdWRlLWh0bWwnKTtcbiAgICAgICAgICBpbmNsdWRlSFRNTCgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgeGh0dHAub3BlbignR0VUJywgZmlsZSwgdHJ1ZSk7XG4gICAgICB4aHR0cC5zZW5kKCk7XG4gICAgICAvKiBFeGl0IHRoZSBmdW5jdGlvbjogKi9cbiAgICAgIHJldHVybjtcbiAgICB9XG4gI
5627H1cbn1cbmluY2x1ZGVIVE1MKCk7XG4iLCIvKiEgalF1ZXJ5ICYgWmVwdG8gTGF6eSB2MS43LjEwIC0gaHR0cDovL2pxdWVyeS5laXNiZWhyLmRlL2xhenkgLSBNSVQmR1BMLTIuMCBsaWNlbnNlIC0gQ29weXJpZ2h0IDIwMTItMjAxOCBEYW5pZWwgJ0Vpc2JlaHInIEtlcm4gKi9cbiFmdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIocixhLGksdSxsKXtmdW5jdGlvbiBmKCl7TD10LmRldmljZVBpeGVsUmF0aW8+MSxpPWMoaSksYS5kZWxheT49MCYmc2V0VGltZW91dChmdW5jdGlvbigpe3MoITApfSxhLmRlbGF5KSwoYS5kZWxheTwwfHxhLmNvbWJpbmVkKSYmKHUuZT12KGEudGhyb3R0bGUsZnVuY3Rpb24odCl7XCJyZXNpemVcIj09PXQudHlwZSYmKHc9Qj0tMSkscyh0LmFsbCl9KSx1LmE9ZnVuY3Rpb24odCl7dD1jKHQpLGkucHVzaC5hcHBseShpLHQpfSx1Lmc9ZnVuY3Rpb24oKXtyZXR1cm4gaT1uKGkpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiFuKHRoaXMpLmRhdGEoYS5sb2FkZWROYW1lKX0pfSx1LmY9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPWkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT10W2VdfSk7ci5sZW5ndGgmJnMoITEscil9fSxzKCksbihhLmFwcGVuZFNjcm9sbCkub24oXCJzY3JvbGwuXCIrbCtcIiByZXNpemUuXCIrbCx1LmUpKX1mdW5jdGlvbiBjKHQpe3ZhciBpPWEuZGVmYXVsdEltYWdlLG89YS5wbGFjZWhvbGRlcix1PWEuaW1hZ2VCYXNlLGw9YS5zcmNzZXRBdHRyaWJ1dGUsZj1hLmxvYWRlckF0dHJpYnV0ZSxjPWEuX2Z8fHt9O3Q9bih0KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgdD1uKHRoaXMpLHI9bSh0aGlzKTtyZXR1cm4hdC5kYXRhKGEuaGFuZGxlZE5hbWUpJiYodC5hdHRyKGEuYXR0cmlidXRlKXx8dC5hdHRyKGwpfHx0LmF0dHIoZil8fGNbcl0hPT1lKX0pLmRhdGEoXCJwbHVnaW5fXCIrYS5uYW1lLHIpO2Zvcih2YXIgcz0wLGQ9dC5sZW5ndGg7czxkO3MrKyl7dmFyIEE9bih0W3NdKSxnPW0odFtzXSksaD1BLmF0dHIoYS5pbWFnZUJhc2VBdHRyaWJ1dGUpfHx1O2c9PT1OJiZoJiZBLmF0dHIobCkmJkEuYXR0cihsLGIoQS5hdHRyKGwpLGgpKSxjW2ddPT09ZXx8QS5hdHRyKGYpfHxBLmF0dHIoZixjW2ddKSxnPT09TiYmaSYmIUEuYXR0cihFKT9BLmF0dHIoRSxpKTpnPT09Tnx8IW98fEEuY3NzKE8pJiZcIm5vbmVcIiE9PUEuY3NzKE8pfHxBLmNzcyhPLFwidXJsKCdcIitvK1wiJylcIil9cmV0dXJuIHR9ZnVuY3Rpb24gcyh0LGUpe2lmKCFpLmxlbmd0aClyZXR1cm4gdm9pZChhLmF1dG9EZXN0cm95JiZyLmRlc3Ryb3koKSk7Zm9yKHZhciBvPWV8fGksdT0hMSxsPWEuaW1hZ2VCYXNlfHxcIlwiLGY9YS5zcmNzZXRBdHRyaWJ1dGUsYz1hLmhhbmRsZWROYW1lLHM9MDtzPG8ubGVuZ3RoO3MrKylpZih0fHxlfHxBKG9bc10pKXt2YXIgZz1uKG9bc10pLGg9bShvW3NdKSxiPWcuYXR0cihhLmF0dHJpYnV0ZSksdj1nLmF0dHIoYS5pbWFnZUJhc2VBdHRyaWJ1dGUpfHxsLHA9Zy5hdHRyKGEubG9hZGVyQXR0cmlidXRlKTtnLmRhdGEoYyl8fGEudmlzaWJsZU9ubHkmJiFnLmlzKFwiOnZpc2libGVcIil8fCEoKGJ8fGcuYXR0cihmKSkmJihoPT09TiYmKHYrYiE9PWcuYXR0cihFKXx8Zy5hdHRyKGYpIT09Zy5hdHRyKEYpKXx8aCE9PU4mJnYrYiE9PWcuY3NzKE8pKXx8cCl8fCh1PSEwLGcuZGF0YShjLCEwKSxkKGcsaCx2LHApKX11JiYoaT1uKGkpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiFuKHRoaXMpLmRhdGEoYyl9KSl9ZnVuY3Rpb24gZCh0LGUscixpKXsrK3o7dmFyIG89ZnVuY3Rpb24oKXt5KFwib25FcnJvclwiLHQpLHAoKSxvPW4ubm9vcH07eShcImJlZm9yZUxvYWRcIix0KTt2YXIgdT1hLmF0dHJpYnV0ZSxsPWEuc3Jjc2V0QXR0cmlidXRlLGY9YS5zaXplc0F0dHJpYnV0ZSxjPWEucmV0aW5hQXR0cmlidXRlLHM9YS5yZW1vdmVBdHRyaWJ1dGUsZD1hLmxvYWRlZE5hbWUsQT10LmF0dHIoYyk7aWYoaSl7dmFyIGc9ZnVuY3Rpb24oKXtzJiZ0LnJlbW92ZUF0dHIoYS5sb2FkZXJBdHRyaWJ1dGUpLHQuZGF0YShkLCEwKSx5KFQsdCksc2V0VGltZW91dChwLDEpLGc9bi5ub29wfTt0Lm9mZihJKS5vbmUoSSxvKS5vbmUoRCxnKSx5KGksdCxmdW5jdGlvbihlKXtlPyh0Lm9mZihEKSxnKCkpOih0Lm9mZihJKSxvKCkpfSl8fHQudHJpZ2dlcihJKX1lbHNle3ZhciBoPW4obmV3IEltYWdlKTtoLm9uZShJLG8pLm9uZShELGZ1bmN0aW9uKCl7dC5oaWRlKCksZT09PU4/dC5hdHRyKEMsaC5hdHRyKEMpKS5hdHRyKEYsaC5hdHRyKEYpKS5hdHRyKEUsaC5hdHRyKEUpKTp0LmNzcyhPLFwidXJsKCdcIitoLmF0dHIoRSkrXCInKVwiKSx0W2EuZWZmZWN0XShhLmVmZmVjdFRpbWUpLHMmJih0LnJlbW92ZUF0dHIodStcIiBcIitsK1wiIFwiK2MrXCIgXCIrYS5pbWFnZUJhc2VBdHRyaWJ1dGUpLGYhPT1DJiZ0LnJlbW92ZUF0dHIoZikpLHQuZGF0YShkLCEwKSx5KFQsdCksaC5yZW1vdmUoKSxwKCl9KTt2YXIgbT0oTCYmQT9BOnQuYXR0cih1KSl8fFwiXCI7aC5hdHRyKEMsdC5hdHRyKGYpKS5hdHRyKEYsdC5hdHRyKGwpKS5hdHRyKEUsbT9yK206bnVsbCksaC5jb21wbGV0ZSYmaC50cmlnZ2VyKEQpfX1mdW5jdGlvbiBBKHQpe3ZhciBlPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj1hLnNjcm9sbERpcmVjdGlvbixuPWEudGhyZXNob2xkLGk9aCgpK24+ZS50b3AmJi1uPGUuYm90dG9tLG89ZygpK24+ZS5sZWZ0JiYtbjxlLnJpZ2h0O3JldHVyblwidmVydGljYWxcIj09PXI/aTpcImhvcml6b250YWxcIj09PXI/bzppJiZvfWZ1bmN0aW9uIGcoKXtyZXR1cm4gdz49MD93Onc9bih0KS53aWR0aCgpfWZ1bmN0aW9uIGgoKXtyZXR1cm4gQj49MD9COkI9bih0KS5oZWlnaHQoKX1mdW5jdGlvbiBtKHQpe3JldHVybiB0LnRhZ05hbWUudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBiKHQsZSl7aWYoZSl7dmFyIHI9dC5zcGxpdChcIixcIik7dD1cIlwiO2Zvcih2YXIgYT0wLG49ci5sZW5ndGg7YTxuO2ErKyl0Kz1lK3JbYV0udHJpbSgpKyhhIT09bi0xP1wiLFwiOlwiXCIpfXJldHVybiB0fWZ1bmN0aW9uIHYodCxlKXt2YXIgbixpPTA7cmV0dXJuIGZ1bmN0aW9uKG8sdSl7ZnVuY3Rpb24gbCgpe2k9K25ldyBEYXRlLGUuY2FsbChyLG8pfXZhciBmPStuZXcgRGF0ZS1pO24mJmNsZWFyVGltZW91dChuKSxmPnR8fCFhLmVuYWJsZVRocm90dGxlfHx1P2woKTpuPXNldFRpbWVvdXQobCx0LWYpfX1mdW5jdGlvbiBwKCl7LS16LGkubGVuZ3RofHx6fHx5KFwib25GaW5pc2hlZEFsbFwiKX1mdW5jdGlvbiB5KHQsZSxuKXtyZXR1cm4hISh0PWFbdF0pJiYodC5hcHBseShyLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKSwhMCl9dmFyIHo9MCx3PS0xLEI9LTEsTD0hMSxUPVwiYWZ0ZXJMb2FkXCIsRD1cImxvYWRcIixJPVwiZXJyb3JcIixOPVwiaW1nXCIsRT1cInNyY1wiLEY9XCJzcmNzZXRcIixDPVwic2l6ZXNcIixPPVwiYmFja2dyb3VuZC1pbWFnZVwiO1wiZXZlbnRcIj09PWEuYmluZHx8bz9mKCk6bih0KS5vbihEK1wiLlwiK2wsZil9ZnVuY3Rpb24gYShhLG8pe3ZhciB1PXRoaXMsbD1uLmV4dGVuZCh7fSx1LmNvbmZpZyxvKSxmPXt9LGM9bC5uYW1lK1wiLVwiKyArK2k7cmV0dXJuIHUuY29uZmlnPWZ1bmN0aW9uKHQscil7cmV0dXJuIHI9PT1lP2xbdF06KGxbdF09cix1KX0sdS5hZGRJdGVtcz1mdW5jdGlvbih0KXtyZXR1cm4gZi5hJiZmLmEoXCJzdHJpbmdcIj09PW4udHlwZSh0KT9uKHQpOnQpLHV9LHUuZ2V0SXRlbXM9ZnVuY3Rpb24oKXtyZXR1cm4gZi5nP2YuZygpOnt9fSx1LnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZi5lJiZmLmUoe30sIXQpLHV9LHUuZm9yY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGYuZiYmZi5mKFwic3RyaW5nXCI9PT1uLnR5cGUodCk/bih0KTp0KSx1fSx1LmxvYWRBbGw9ZnVuY3Rpb24oKXtyZXR1cm4gZi5lJiZmLmUoe2FsbDohMH0sITApLHV9LHUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiBuKGwuYXBwZW5kU2Nyb2xsKS5vZmYoXCIuXCIrYyxmLmUpLG4odCkub2ZmKFwiLlwiK2MpLGY9e30sZX0scih1LGwsYSxmLGMpLGwuY2hhaW5hYmxlP2E6dX12YXIgbj10LmpRdWVyeXx8dC5aZXB0byxpPTAsbz0hMTtuLmZuLkxhenk9bi5mbi5sYXp5PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh0aGlzLHQpfSxuLkxhenk9bi5sYXp5PWZ1bmN0aW9uKHQscixpKXtpZihuLmlzRnVuY3Rpb24ocikmJihpPXIscj1bXSksbi5pc0Z1bmN0aW9uKGkpKXt0PW4uaXNBcnJheSh0KT90Olt0XSxyPW4uaXNBcnJheShyKT9yOltyXTtmb3IodmFyIG89YS5wcm90b3R5cGUuY29uZmlnLHU9by5fZnx8KG8uX2Y9e30pLGw9MCxmPXQubGVuZ3RoO2w8ZjtsKyspKG9bdFtsXV09PT1lfHxuLmlzRnVuY3Rpb24ob1t0W2xdXSkpJiYob1t0W2xdXT1pKTtmb3IodmFyIGM9MCxzPXIubGVuZ3RoO2M8cztjKyspdVtyW2NdXT10WzBdfX0sYS5wcm90b3R5cGUuY29uZmlnPXtuYW1lOlwibGF6eVwiLGNoYWluYWJsZTohMCxhdXRvRGVzdHJveTohMCxiaW5kOlwibG9hZFwiLHRocmVzaG9sZDo1MDAsdmlzaWJsZU9ubHk6ITEsYXBwZW5kU2Nyb2xsOnQsc2Nyb2xsRGlyZWN0aW9uOlwiYm90aFwiLGltYWdlQmFzZTpudWxsLGRlZmF1bHRJbWFnZTpcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBSUFBQVAvLy93QUFBQ0g1QkFFQUFBQUFMQUFBQUFBQkFBRUFBQUlDUkFFQU93PT1cIixwbGFjZWhvbGRlcjpudWxsLGRlbGF5Oi0xLGNvbWJpbmVkOiExLGF0dHJpYnV0ZTpcImRhdGEtc3JjXCIsc3Jjc2V0QXR0cmlidXRlOlwiZGF0YS1zcmNzZXRcIixzaXplc0F0dHJpYnV0ZTpcImRhdGEtc2l6ZXNcIixyZXRpbmFBdHRyaWJ1dGU6XCJkYXRhLXJldGluYVwiLGxvYWRlckF0dHJpYnV0ZTpcImRhdGEtbG9hZGVyXCIsaW1hZ2VCYXNlQXR0cmlidXRlOlwiZGF0YS1pbWFnZWJhc2VcIixyZW1vdmVBdHRyaWJ1dGU6ITAsaGFuZGxlZE5hbWU6XCJoYW5kbGVkXCIsbG9hZGVkTmFtZTpcImxvYWRlZFwiLGVmZmVjdDpcInNob3dcIixlZmZlY3RUaW1lOjAsZW5hYmxlVGhyb3R0bGU6ITAsdGhyb3R0bGU6MjUwLGJlZm9yZUxvYWQ6ZSxhZnRlckxvYWQ6ZSxvbkVycm9yOmUsb25GaW5pc2hlZEFsbDplfSxuKHQpLm9uKFwibG9h
5627ZFwiLGZ1bmN0aW9uKCl7bz0hMH0pfSh3aW5kb3cpOyIsIi8qISBqUXVlcnkgJiBaZXB0byBMYXp5IC0gQWxsIFBsdWdpbnMgdjEuNy4xMCAtIGh0dHA6Ly9qcXVlcnkuZWlzYmVoci5kZS9sYXp5IC0gTUlUJkdQTC0yLjAgbGljZW5zZSAtIENvcHlyaWdodCAyMDEyLTIwMTggRGFuaWVsICdFaXNiZWhyJyBLZXJuICovXG4hZnVuY3Rpb24odCl7ZnVuY3Rpb24gYShhLGUscixvKXtvPW8/by50b1VwcGVyQ2FzZSgpOlwiR0VUXCI7dmFyIGk7XCJQT1NUXCIhPT1vJiZcIlBVVFwiIT09b3x8IWEuY29uZmlnKFwiYWpheENyZWF0ZURhdGFcIil8fChpPWEuY29uZmlnKFwiYWpheENyZWF0ZURhdGFcIikuYXBwbHkoYSxbZV0pKSx0LmFqYXgoe3VybDplLmF0dHIoXCJkYXRhLXNyY1wiKSx0eXBlOlwiUE9TVFwiPT09b3x8XCJQVVRcIj09PW8/bzpcIkdFVFwiLGRhdGE6aSxkYXRhVHlwZTplLmF0dHIoXCJkYXRhLXR5cGVcIil8fFwiaHRtbFwiLHN1Y2Nlc3M6ZnVuY3Rpb24odCl7ZS5odG1sKHQpLHIoITApLGEuY29uZmlnKFwicmVtb3ZlQXR0cmlidXRlXCIpJiZlLnJlbW92ZUF0dHIoXCJkYXRhLXNyYyBkYXRhLW1ldGhvZCBkYXRhLXR5cGVcIil9LGVycm9yOmZ1bmN0aW9uKCl7cighMSl9fSl9dC5sYXp5KFwiYWpheFwiLGZ1bmN0aW9uKHQsZSl7YSh0aGlzLHQsZSx0LmF0dHIoXCJkYXRhLW1ldGhvZFwiKSl9KSx0LmxhenkoXCJnZXRcIixmdW5jdGlvbih0LGUpe2EodGhpcyx0LGUsXCJHRVRcIil9KSx0LmxhenkoXCJwb3N0XCIsZnVuY3Rpb24odCxlKXthKHRoaXMsdCxlLFwiUE9TVFwiKX0pLHQubGF6eShcInB1dFwiLGZ1bmN0aW9uKHQsZSl7YSh0aGlzLHQsZSxcIlBVVFwiKX0pfSh3aW5kb3cualF1ZXJ5fHx3aW5kb3cuWmVwdG8pLGZ1bmN0aW9uKHQpe3QubGF6eShbXCJhdlwiLFwiYXVkaW9cIixcInZpZGVvXCJdLFtcImF1ZGlvXCIsXCJ2aWRlb1wiXSxmdW5jdGlvbihhLGUpe3ZhciByPWFbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpO2lmKFwiYXVkaW9cIj09PXJ8fFwidmlkZW9cIj09PXIpe3ZhciBvPWEuZmluZChcImRhdGEtc3JjXCIpLGk9YS5maW5kKFwiZGF0YS10cmFja1wiKSxuPTAsYz1mdW5jdGlvbigpeysrbj09PW8ubGVuZ3RoJiZlKCExKX0scz1mdW5jdGlvbigpe3ZhciBhPXQodGhpcyksZT1hWzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSxyPWEucHJvcChcImF0dHJpYnV0ZXNcIiksbz10KFwiZGF0YS1zcmNcIj09PWU/XCI8c291cmNlPlwiOlwiPHRyYWNrPlwiKTtcImRhdGEtc3JjXCI9PT1lJiZvLm9uZShcImVycm9yXCIsYyksdC5lYWNoKHIsZnVuY3Rpb24odCxhKXtvLmF0dHIoYS5uYW1lLGEudmFsdWUpfSksYS5yZXBsYWNlV2l0aChvKX07YS5vbmUoXCJsb2FkZWRtZXRhZGF0YVwiLGZ1bmN0aW9uKCl7ZSghMCl9KS5vZmYoXCJsb2FkIGVycm9yXCIpLmF0dHIoXCJwb3N0ZXJcIixhLmF0dHIoXCJkYXRhLXBvc3RlclwiKSksby5sZW5ndGg/by5lYWNoKHMpOmEuYXR0cihcImRhdGEtc3JjXCIpPyh0LmVhY2goYS5hdHRyKFwiZGF0YS1zcmNcIikuc3BsaXQoXCIsXCIpLGZ1bmN0aW9uKGUscil7dmFyIG89ci5zcGxpdChcInxcIik7YS5hcHBlbmQodChcIjxzb3VyY2U+XCIpLm9uZShcImVycm9yXCIsYykuYXR0cih7c3JjOm9bMF0udHJpbSgpLHR5cGU6b1sxXS50cmltKCl9KSl9KSx0aGlzLmNvbmZpZyhcInJlbW92ZUF0dHJpYnV0ZVwiKSYmYS5yZW1vdmVBdHRyKFwiZGF0YS1zcmNcIikpOmUoITEpLGkubGVuZ3RoJiZpLmVhY2gocyl9ZWxzZSBlKCExKX0pfSh3aW5kb3cualF1ZXJ5fHx3aW5kb3cuWmVwdG8pLGZ1bmN0aW9uKHQpe3QubGF6eShbXCJmcmFtZVwiLFwiaWZyYW1lXCJdLFwiaWZyYW1lXCIsZnVuY3Rpb24oYSxlKXt2YXIgcj10aGlzO2lmKFwiaWZyYW1lXCI9PT1hWzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSl7dmFyIG89YS5hdHRyKFwiZGF0YS1lcnJvci1kZXRlY3RcIik7XCJ0cnVlXCIhPT1vJiZcIjFcIiE9PW8/KGEuYXR0cihcInNyY1wiLGEuYXR0cihcImRhdGEtc3JjXCIpKSxyLmNvbmZpZyhcInJlbW92ZUF0dHJpYnV0ZVwiKSYmYS5yZW1vdmVBdHRyKFwiZGF0YS1zcmMgZGF0YS1lcnJvci1kZXRlY3RcIikpOnQuYWpheCh7dXJsOmEuYXR0cihcImRhdGEtc3JjXCIpLGRhdGFUeXBlOlwiaHRtbFwiLGNyb3NzRG9tYWluOiEwLHhockZpZWxkczp7d2l0aENyZWRlbnRpYWxzOiEwfSxzdWNjZXNzOmZ1bmN0aW9uKHQpe2EuaHRtbCh0KS5hdHRyKFwic3JjXCIsYS5hdHRyKFwiZGF0YS1zcmNcIikpLHIuY29uZmlnKFwicmVtb3ZlQXR0cmlidXRlXCIpJiZhLnJlbW92ZUF0dHIoXCJkYXRhLXNyYyBkYXRhLWVycm9yLWRldGVjdFwiKX0sZXJyb3I6ZnVuY3Rpb24oKXtlKCExKX19KX1lbHNlIGUoITEpfSl9KHdpbmRvdy5qUXVlcnl8fHdpbmRvdy5aZXB0byksZnVuY3Rpb24odCl7dC5sYXp5KFwibm9vcFwiLGZ1bmN0aW9uKCl7fSksdC5sYXp5KFwibm9vcC1zdWNjZXNzXCIsZnVuY3Rpb24odCxhKXthKCEwKX0pLHQubGF6eShcIm5vb3AtZXJyb3JcIixmdW5jdGlvbih0LGEpe2EoITEpfSl9KHdpbmRvdy5qUXVlcnl8fHdpbmRvdy5aZXB0byksZnVuY3Rpb24odCl7ZnVuY3Rpb24gYShhLGUsaSl7dmFyIG49YS5wcm9wKFwiYXR0cmlidXRlc1wiKSxjPXQoXCI8XCIrZStcIj5cIik7cmV0dXJuIHQuZWFjaChuLGZ1bmN0aW9uKHQsYSl7XCJzcmNzZXRcIiE9PWEubmFtZSYmYS5uYW1lIT09b3x8KGEudmFsdWU9cihhLnZhbHVlLGkpKSxjLmF0dHIoYS5uYW1lLGEudmFsdWUpfSksYS5yZXBsYWNlV2l0aChjKSxjfWZ1bmN0aW9uIGUoYSxlLHIpe3ZhciBvPXQoXCI8aW1nPlwiKS5vbmUoXCJsb2FkXCIsZnVuY3Rpb24oKXtyKCEwKX0pLm9uZShcImVycm9yXCIsZnVuY3Rpb24oKXtyKCExKX0pLmFwcGVuZFRvKGEpLmF0dHIoXCJzcmNcIixlKTtvLmNvbXBsZXRlJiZvLmxvYWQoKX1mdW5jdGlvbiByKHQsYSl7aWYoYSl7dmFyIGU9dC5zcGxpdChcIixcIik7dD1cIlwiO2Zvcih2YXIgcj0wLG89ZS5sZW5ndGg7cjxvO3IrKyl0Kz1hK2Vbcl0udHJpbSgpKyhyIT09by0xP1wiLFwiOlwiXCIpfXJldHVybiB0fXZhciBvPVwiZGF0YS1zcmNcIjt0LmxhenkoW1wicGljXCIsXCJwaWN0dXJlXCJdLFtcInBpY3R1cmVcIl0sZnVuY3Rpb24oaSxuKXtpZihcInBpY3R1cmVcIj09PWlbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKXt2YXIgYz1pLmZpbmQobykscz1pLmZpbmQoXCJkYXRhLWltZ1wiKSxkPXRoaXMuY29uZmlnKFwiaW1hZ2VCYXNlXCIpfHxcIlwiO2MubGVuZ3RoPyhjLmVhY2goZnVuY3Rpb24oKXthKHQodGhpcyksXCJzb3VyY2VcIixkKX0pLDE9PT1zLmxlbmd0aD8ocz1hKHMsXCJpbWdcIixkKSxzLm9uKFwibG9h
5627ZFwiLGZ1bmN0aW9uKCl7bighMCl9KS5vbihcImVycm9yXCIsZnVuY3Rpb24oKXtuKCExKX0pLHMuYXR0cihcInNyY1wiLHMuYXR0cihvKSksdGhpcy5jb25maWcoXCJyZW1vdmVBdHRyaWJ1dGVcIikmJnMucmVtb3ZlQXR0cihvKSk6aS5hdHRyKG8pPyhlKGksZCtpLmF0dHIobyksbiksdGhpcy5jb25maWcoXCJyZW1vdmVBdHRyaWJ1dGVcIikmJmkucmVtb3ZlQXR0cihvKSk6bighMSkpOmkuYXR0cihcImRhdGEtc3Jjc2V0XCIpPyh0KFwiPHNvdXJjZT5cIikuYXR0cih7bWVkaWE6aS5hdHRyKFwiZGF0YS1tZWRpYVwiKSxzaXplczppLmF0dHIoXCJkYXRhLXNpemVzXCIpLHR5cGU6aS5hdHRyKFwiZGF0YS10eXBlXCIpLHNyY3NldDpyKGkuYXR0cihcImRhdGEtc3Jjc2V0XCIpLGQpfSkuYXBwZW5kVG8oaSksZShpLGQraS5hdHRyKG8pLG4pLHRoaXMuY29uZmlnKFwicmVtb3ZlQXR0cmlidXRlXCIpJiZpLnJlbW92ZUF0dHIobytcIiBkYXRhLXNyY3NldCBkYXRhLW1lZGlhIGRhdGEtc2l6ZXMgZGF0YS10eXBlXCIpKTpuKCExKX1lbHNlIG4oITEpfSl9KHdpbmRvdy5qUXVlcnl8fHdpbmRvdy5aZXB0byksZnVuY3Rpb24odCl7dC5sYXp5KFtcImpzXCIsXCJqYXZhc2NyaXB0XCIsXCJzY3JpcHRcIl0sXCJzY3JpcHRcIixmdW5jdGlvbih0LGEpe1wic2NyaXB0XCI9PT10WzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKT8odC5hdHRyKFwic3JjXCIsdC5hdHRyKFwiZGF0YS1zcmNcIikpLHRoaXMuY29uZmlnKFwicmVtb3ZlQXR0cmlidXRlXCIpJiZ0LnJlbW92ZUF0dHIoXCJkYXRhLXNyY1wiKSk6YSghMSl9KX0od2luZG93LmpRdWVyeXx8d2luZG93LlplcHRvKSxmdW5jdGlvbih0KXt0LmxhenkoXCJ2aW1lb1wiLGZ1bmN0aW9uKHQsYSl7XCJpZnJhbWVcIj09PXRbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpPyh0LmF0dHIoXCJzcmNcIixcImh0dHBzOi8vcGxheWVyLnZpbWVvLmNvbS92aWRlby9cIit0LmF0dHIoXCJkYXRhLXNyY1wiKSksdGhpcy5jb25maWcoXCJyZW1vdmVBdHRyaWJ1dGVcIikmJnQucmVtb3ZlQXR0cihcImRhdGEtc3JjXCIpKTphKCExKX0pfSh3aW5kb3cualF1ZXJ5fHx3aW5kb3cuWmVwdG8pLGZ1bmN0aW9uKHQpe3QubGF6eShbXCJ5dFwiLFwieW91dHViZVwiXSxmdW5jdGlvbih0LGEpe2lmKFwiaWZyYW1lXCI9PT10WzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSl7dmFyIGU9LzF8dHJ1ZS8udGVzdCh0LmF0dHIoXCJkYXRhLW5vY29va2llXCIpKTt0LmF0dHIoXCJzcmNcIixcImh0dHBzOi8vd3d3LnlvdXR1YmVcIisoZT9cIi1ub2Nvb2tpZVwiOlwiXCIpK1wiLmNvbS9lbWJlZC9cIit0LmF0dHIoXCJkYXRhLXNyY1wiKStcIj9yZWw9MCZhbXA7c2hvd2luZm89MFwiKSx0aGlzLmNvbmZpZyhcInJlbW92ZUF0dHJpYnV0ZVwiKSYmdC5yZW1vdmVBdHRyKFwiZGF0YS1zcmNcIil9ZWxzZSBhKCExKX0pfSh3aW5kb3cualF1ZXJ5fHx3aW5kb3cuWmVwdG8pOyIsIiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkge1xuICBjb25zdCBsb2FkX2NvbnRhaW5lciA9ICQoJy5qcy1sb2FkLWxpc3RpbmcnKTtcbiAgY29uc3QgbGlzdGluZ19sb2FkZXIgPSAkKCcuanMtbGlzdGluZy1sb2FkZXInKTtcbiAgY29uc3Qgc2hvd19tb3JlX2J0biA9ICQoJy5qcy1zaG93LW1vcmUtYXJ0aWNsZXMnKTtcbiAgY29uc3QgcG9zdF9wZXJfcGFnZSA9ICQobG9hZF9jb250YWluZXIpLmRhdGEoJ3Bvc3QtcGVyLXBhZ2UnKTtcbiAgY29uc3QgZXhjbHVkZV9wb3N0cyA9ICQobG9hZF9jb250YWluZXIpLmRhdGEoJ2V4Y2x1ZGUtcG9zdHMnKTtcbiAgY29uc3QgYXBpX3VybCA9ICQobG9hZF9jb250YWluZXIpLmRhdGEoJ2FwaS11cmwnKTtcbiAgY29uc3Qgc2lkZWJhcl90YWIgPSAkKGxvYWRfY29udGFpbmVyKS5kYXRhKCdzaWRlYmFyLXRhYicpO1xuICBjb25zdCBpc19lZGl0b3IgPSAkKGxvYWRfY29udGFpbmVyKS5kYXRhKCdlZGl0b3InKTtcblxuICBsZXQgcGFnZV90b19sb2FkID0gcGFyc2VJbnQoJChsb2FkX2NvbnRhaW5lcikuZGF0YSgnYXV0by1sb2FkaW5nLWNvdW50JykpO1xuICBsZXQgbGFzdF9vZmZzZXQgPSBwYXJzZUludCgkKGxvYWRfY29udGFpbmVyKS5kYXRhKCdsYXN0LW9mZnNldCcpKTtcbiAgbGV0IGN1cnJlbnRfYWN0aXZlID0gZmFsc2U7XG5cbiAgY29uc3QgaGVpZ2h0V2luZG93ID0gJCh3aW5kb3cpLmhlaWdodCgpO1xuICBjb25zdCBoZWlnaHRGb290ZXIgPSAkKCdmb290ZXInKS5oZWlnaHQoKTtcblxuICBpZigkKGxvYWRfY29udGFpbmVyKS5sZW5ndGgpIHtcbiAgICAkKHdpbmRvdykuc2Nyb2xsKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGhlaWdodERvYyA9ICQoZG9jdW1lbnQpLmhlaWdodCgpO1xuICAgICAgdmFyIGhlaWdodFNjcm9sbCA9ICQod2luZG93KS5zY3JvbGxUb3AoKTtcbiAgICAgIHZhciBoZWlnaHRTY3JvbGxEb3duID0gaGVpZ2h0V2luZG93ICsgaGVpZ2h0U2Nyb2xsO1xuICAgICAgdmFyIGhlaWdodERvY1dpdGhvdXRGb290ZXIgPSBoZWlnaHREb2MgLSBoZWlnaHRGb290ZXI7XG4gIFxuICAgICAgaWYgKGhlaWdodFNjcm9sbERvd24gPiBoZWlnaHREb2NXaXRob3V0Rm9vdGVyICogMC44KSB7XG4gICAgICAgIGxvYWRQb3N0cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gbG9hZFBvc3RzKCkge1xuICAgIGlmIChjdXJyZW50X2FjdGl2ZSB8fCBwYWdlX3RvX2xvYWQgPT0gMCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY3VycmVudF9hY3RpdmUgPSB0cnVlO1xuICAgICQobGlzdGluZ19sb2FkZXIpLmFkZENsYXNzKCdzaG93Jyk7XG5cbiAgICAkLnBvc3QoYXBpX3VybCwge1xuICAgICAgICBcInBvc3RfcGVyX3BhZ2VcIjogcG9zdF9wZXJfcGFnZSxcbiAgICAgICAgXCJsYXN0X29mZnNldFwiOiBsYXN0X29mZnNldCxcbiAgICAgICAgJ2V4Y2x1ZGVfcG9zdHMnOiBleGNsdWRlX3Bvc3RzLFxuICAgICAgICAnc2lkZWJhcl90YWInOiBzaWRlYmFyX3RhYixcbiAgICAgICAgJ2lzX2VkaXRvcic6IGlzX2VkaXRvclxuICAgICAgfSxcbiAgICAgIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgaWYgKCFkYXRhLmh0bWwpIHJldHVybjtcblxuICAgICAgICBjdXJyZW50X2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBwYWdlX3RvX2xvYWQtLTtcbiAgICAgICAgbGFzdF9vZmZzZXQgKz0gZGF0YS5wb3N0X2xvYWRlZDtcbiAgICAgICAgJChsaXN0aW5nX2xvYWRlcikucmVtb3ZlQ2xhc3MoJ3Nob3cnKTtcbiAgICAgICAgJChsb2FkX2NvbnRhaW5lcikuYXBwZW5kKGRhdGEuaHRtbCk7XG4gICAgICAgIGlmKHdpbmRvdy5pbm5lcldpZHRoID4gMTAyNSkge1xuICAgICAgICAgICQobG9hZF9jb250YWluZXIpLmZpbmQoJ2RpdltkYXRhLXJlbW92ZT1cImRlc2t0b3BcIl0nKS5yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgI
5627HNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJChsb2FkX2NvbnRhaW5lcikuZmluZCgnLmxhenknKS5MYXp5KHtcbiAgICAgICAgICAgIGFmdGVyTG9hZDogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgICAgICBlbGVtZW50LmNzcygnb3BhY2l0eScsIDEpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgMzAwKTtcblxuICAgICAgICBpZihwYWdlX3RvX2xvYWQgPT0gMCAmJiBkYXRhLmxhc3RfcG9zdF9pZCkge1xuICAgICAgICAgIGxldCBwYXRoID0gXCI/Y2hlY2stcGFnZT1cIiArIGRhdGEubGFzdF9wb3N0X2lkO1xuICAgICAgICAgICQoc2hvd19tb3JlX2J0bikuYXR0cignaHJlZicsIHBhdGgpO1xuICAgICAgICAgICQoc2hvd19tb3JlX2J0bikuc2hvdygpO1xuICAgICAgICB9XG4gICAgICB9KS5mYWlsKGZ1bmN0aW9uKCkge1xuICAgICAgY3VycmVudF9hY3RpdmUgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIvKipcbiAqIE93bCBDYXJvdXNlbCB2Mi4zLjRcbiAqIENvcHlyaWdodCAyMDEzLTIwMTggRGF2aWQgRGV1dHNjaFxuICogTGljZW5zZWQgdW5kZXI6IFNFRSBMSUNFTlNFIElOIGh0dHBzOi8vZ2l0aHViLmNvbS9Pd2xDYXJvdXNlbDIvT3dsQ2Fyb3VzZWwyL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuICFmdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBlKGIsYyl7dGhpcy5zZXR0aW5ncz1udWxsLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxlLkRlZmF1bHRzLGMpLHRoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLl9oYW5kbGVycz17fSx0aGlzLl9wbHVnaW5zPXt9LHRoaXMuX3N1cHJlc3M9e30sdGhpcy5fY3VycmVudD1udWxsLHRoaXMuX3NwZWVkPW51bGwsdGhpcy5fY29vcmRpbmF0ZXM9W10sdGhpcy5fYnJlYWtwb2ludD1udWxsLHRoaXMuX3dpZHRoPW51bGwsdGhpcy5faXRlbXM9W10sdGhpcy5fY2xvbmVzPVtdLHRoaXMuX21lcmdlcnM9W10sdGhpcy5fd2lkdGhzPVtdLHRoaXMuX2ludmFsaWRhdGVkPXt9LHRoaXMuX3BpcGU9W10sdGhpcy5fZHJhZz17dGltZTpudWxsLHRhcmdldDpudWxsLHBvaW50ZXI6bnVsbCxzdGFnZTp7c3RhcnQ6bnVsbCxjdXJyZW50Om51bGx9LGRpcmVjdGlvbjpudWxsfSx0aGlzLl9zdGF0ZXM9e2N1cnJlbnQ6e30sdGFnczp7aW5pdGlhbGl6aW5nOltcImJ1c3lcIl0sYW5pbWF0aW5nOltcImJ1c3lcIl0sZHJhZ2dpbmc6W1wiaW50ZXJhY3RpbmdcIl19fSxhLmVhY2goW1wib25SZXNpemVcIixcIm9uVGhyb3R0bGVkUmVzaXplXCJdLGEucHJveHkoZnVuY3Rpb24oYixjKXt0aGlzLl9oYW5kbGVyc1tjXT1hLnByb3h5KHRoaXNbY10sdGhpcyl9LHRoaXMpKSxhLmVhY2goZS5QbHVnaW5zLGEucHJveHkoZnVuY3Rpb24oYSxiKXt0aGlzLl9wbHVnaW5zW2EuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkrYS5zbGljZSgxKV09bmV3IGIodGhpcyl9LHRoaXMpKSxhLmVhY2goZS5Xb3JrZXJzLGEucHJveHkoZnVuY3Rpb24oYixjKXt0aGlzLl9waXBlLnB1c2goe2ZpbHRlcjpjLmZpbHRlcixydW46YS5wcm94eShjLnJ1bix0aGlzKX0pfSx0aGlzKSksdGhpcy5zZXR1cCgpLHRoaXMuaW5pdGlhbGl6ZSgpfWUuRGVmYXVsdHM9e2l0ZW1zOjMsbG9vcDohMSxjZW50ZXI6ITEscmV3aW5kOiExLGNoZWNrVmlzaWJpbGl0eTohMCxtb3VzZURyYWc6ITAsdG91Y2hEcmFnOiEwLHB1bGxEcmFnOiEwLGZyZWVEcmFnOiExLG1hcmdpbjowLHN0YWdlUGFkZGluZzowLG1lcmdlOiExLG1lcmdlRml0OiEwLGF1dG9XaWR0aDohMSxzdGFydFBvc2l0aW9uOjAscnRsOiExLHNtYXJ0U3BlZWQ6MjUwLGZsdWlkU3BlZWQ6ITEsZHJhZ0VuZFNwZWVkOiExLHJlc3BvbnNpdmU6e30scmVzcG9uc2l2ZVJlZnJlc2hSYXRlOjIwMCxyZXNwb25zaXZlQmFzZUVsZW1lbnQ6YixmYWxsYmFja0Vhc2luZzpcInN3aW5nXCIsc2xpZGVUcmFuc2l0aW9uOlwiXCIsaW5mbzohMSxuZXN0ZWRJdGVtU2VsZWN0b3I6ITEsaXRlbUVsZW1lbnQ6XCJkaXZcIixzdGFnZUVsZW1lbnQ6XCJkaXZcIixyZWZyZXNoQ2xhc3M6XCJvd2wtcmVmcmVzaFwiLGxvYWRlZENsYXNzOlwib3dsLWxvYWRlZFwiLGxvYWRpbmdDbGFzczpcIm93bC1sb2FkaW5nXCIscnRsQ2xhc3M6XCJvd2wtcnRsXCIscmVzcG9uc2l2ZUNsYXNzOlwib3dsLXJlc3BvbnNpdmVcIixkcmFnQ2xhc3M6XCJvd2wtZHJhZ1wiLGl0ZW1DbGFzczpcIm93bC1pdGVtXCIsc3RhZ2VDbGFzczpcIm93bC1zdGFnZVwiLHN0YWdlT3V0ZXJDbGFzczpcIm93bC1zdGFnZS1vdXRlclwiLGdyYWJDbGFzczpcIm93bC1ncmFiXCJ9LGUuV2lkdGg9e0RlZmF1bHQ6XCJkZWZhdWx0XCIsSW5uZXI6XCJpbm5lclwiLE91dGVyOlwib3V0ZXJcIn0sZS5UeXBlPXtFdmVudDpcImV2ZW50XCIsU3RhdGU6XCJzdGF0ZVwifSxlLlBsdWdpbnM9e30sZS5Xb3JrZXJzPVt7ZmlsdGVyOltcIndpZHRoXCIsXCJzZXR0aW5nc1wiXSxydW46ZnVuY3Rpb24oKXt0aGlzLl93aWR0aD10aGlzLiRlbGVtZW50LndpZHRoKCl9fSx7ZmlsdGVyOltcIndpZHRoXCIsXCJpdGVtc1wiLFwic2V0dGluZ3NcIl0scnVuOmZ1bmN0aW9uKGEpe2EuY3VycmVudD10aGlzLl9pdGVtcyYmdGhpcy5faXRlbXNbdGhpcy5yZWxhdGl2ZSh0aGlzLl9jdXJyZW50KV19fSx7ZmlsdGVyOltcIml0ZW1zXCIsXCJzZXR0aW5nc1wiXSxydW46ZnVuY3Rpb24oKXt0aGlzLiRzdGFnZS5jaGlsZHJlbihcIi5jbG9uZWRcIikucmVtb3ZlKCl9fSx7ZmlsdGVyOltcIndpZHRoXCIsXCJpdGVtc1wiLFwic2V0dGluZ3NcIl0scnVuOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuc2V0dGluZ3MubWFyZ2lufHxcIlwiLGM9IXRoaXMuc2V0dGluZ3MuYXV0b1dpZHRoLGQ9dGhpcy5zZXR0aW5ncy5ydGwsZT17d2lkdGg6XCJhdXRvXCIsXCJtYXJnaW4tbGVmdFwiOmQ/YjpcIlwiLFwibWFyZ2luLXJpZ2h0XCI6ZD9cIlwiOmJ9OyFjJiZ0aGlzLiRzdGFnZS5jaGlsZHJlbigpLmNzcyhlKSxhLmNzcz1lfX0se2ZpbHRlcjpbXCJ3aWR0aFwiLFwiaXRlbXNcIixcInNldHRpbmdzXCJdLHJ1bjpmdW5jdGlvbihhKXt2YXIgYj0odGhpcy53aWR0aCgpL3RoaXMuc2V0dGluZ3MuaXRlbXMpLnRvRml4ZWQoMyktdGh
5627pcy5zZXR0aW5ncy5tYXJnaW4sYz1udWxsLGQ9dGhpcy5faXRlbXMubGVuZ3RoLGU9IXRoaXMuc2V0dGluZ3MuYXV0b1dpZHRoLGY9W107Zm9yKGEuaXRlbXM9e21lcmdlOiExLHdpZHRoOmJ9O2QtLTspYz10aGlzLl9tZXJnZXJzW2RdLGM9dGhpcy5zZXR0aW5ncy5tZXJnZUZpdCYmTWF0aC5taW4oYyx0aGlzLnNldHRpbmdzLml0ZW1zKXx8YyxhLml0ZW1zLm1lcmdlPWM+MXx8YS5pdGVtcy5tZXJnZSxmW2RdPWU/YipjOnRoaXMuX2l0ZW1zW2RdLndpZHRoKCk7dGhpcy5fd2lkdGhzPWZ9fSx7ZmlsdGVyOltcIml0ZW1zXCIsXCJzZXR0aW5nc1wiXSxydW46ZnVuY3Rpb24oKXt2YXIgYj1bXSxjPXRoaXMuX2l0ZW1zLGQ9dGhpcy5zZXR0aW5ncyxlPU1hdGgubWF4KDIqZC5pdGVtcyw0KSxmPTIqTWF0aC5jZWlsKGMubGVuZ3RoLzIpLGc9ZC5sb29wJiZjLmxlbmd0aD9kLnJld2luZD9lOk1hdGgubWF4KGUsZik6MCxoPVwiXCIsaT1cIlwiO2ZvcihnLz0yO2c+MDspYi5wdXNoKHRoaXMubm9ybWFsaXplKGIubGVuZ3RoLzIsITApKSxoKz1jW2JbYi5sZW5ndGgtMV1dWzBdLm91dGVySFRNTCxiLnB1c2godGhpcy5ub3JtYWxpemUoYy5sZW5ndGgtMS0oYi5sZW5ndGgtMSkvMiwhMCkpLGk9Y1tiW2IubGVuZ3RoLTFdXVswXS5vdXRlckhUTUwraSxnLT0xO3RoaXMuX2Nsb25lcz1iLGEoaCkuYWRkQ2xhc3MoXCJjbG9uZWRcIikuYXBwZW5kVG8odGhpcy4kc3RhZ2UpLGEoaSkuYWRkQ2xhc3MoXCJjbG9uZWRcIikucHJlcGVuZFRvKHRoaXMuJHN0YWdlKX19LHtmaWx0ZXI6W1wid2lkdGhcIixcIml0ZW1zXCIsXCJzZXR0aW5nc1wiXSxydW46ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5zZXR0aW5ncy5ydGw/MTotMSxiPXRoaXMuX2Nsb25lcy5sZW5ndGgrdGhpcy5faXRlbXMubGVuZ3RoLGM9LTEsZD0wLGU9MCxmPVtdOysrYzxiOylkPWZbYy0xXXx8MCxlPXRoaXMuX3dpZHRoc1t0aGlzLnJlbGF0aXZlKGMpXSt0aGlzLnNldHRpbmdzLm1hcmdpbixmLnB1c2goZCtlKmEpO3RoaXMuX2Nvb3JkaW5hdGVzPWZ9fSx7ZmlsdGVyOltcIndpZHRoXCIsXCJpdGVtc1wiLFwic2V0dGluZ3NcIl0scnVuOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZXR0aW5ncy5zdGFnZVBhZGRpbmcsYj10aGlzLl9jb29yZGluYXRlcyxjPXt3aWR0aDpNYXRoLmNlaWwoTWF0aC5hYnMoYltiLmxlbmd0aC0xXSkpKzIqYSxcInBhZGRpbmctbGVmdFwiOmF8fFwiXCIsXCJwYWRkaW5nLXJpZ2h0XCI6YXx8XCJcIn07dGhpcy4kc3RhZ2UuY3NzKGMpfX0se2ZpbHRlcjpbXCJ3aWR0aFwiLFwiaXRlbXNcIixcInNldHRpbmdzXCJdLHJ1bjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLl9jb29yZGluYXRlcy5sZW5ndGgsYz0hdGhpcy5zZXR0aW5ncy5hdXRvV2lkdGgsZD10aGlzLiRzdGFnZS5jaGlsZHJlbigpO2lmKGMmJmEuaXRlbXMubWVyZ2UpZm9yKDtiLS07KWEuY3NzLndpZHRoPXRoaXMuX3dpZHRoc1t0aGlzLnJlbGF0aXZlKGIpXSxkLmVxKGIpLmNzcyhhLmNzcyk7ZWxzZSBjJiYoYS5jc3Mud2lkdGg9YS5pdGVtcy53aWR0aCxkLmNzcyhhLmNzcykpfX0se2ZpbHRlcjpbXCJpdGVtc1wiXSxydW46ZnVuY3Rpb24oKXt0aGlzLl9jb29yZGluYXRlcy5sZW5ndGg8MSYmdGhpcy4kc3RhZ2UucmVtb3ZlQXR0cihcInN0eWxlXCIpfX0se2ZpbHRlcjpbXCJ3aWR0aFwiLFwiaXRlbXNcIixcInNldHRpbmdzXCJdLHJ1bjpmdW5jdGlvbihhKXthLmN1cnJlbnQ9YS5jdXJyZW50P3RoaXMuJHN0YWdlLmNoaWxkcmVuKCkuaW5kZXgoYS5jdXJyZW50KTowLGEuY3VycmVudD1NYXRoLm1heCh0aGlzLm1pbmltdW0oKSxNYXRoLm1pbih0aGlzLm1heGltdW0oKSxhLmN1cnJlbnQpKSx0aGlzLnJlc2V0KGEuY3VycmVudCl9fSx7ZmlsdGVyOltcInBvc2l0aW9uXCJdLHJ1bjpmdW5jdGlvbigpe3RoaXMuYW5pbWF0ZSh0aGlzLmNvb3JkaW5hdGVzKHRoaXMuX2N1cnJlbnQpKX19LHtmaWx0ZXI6W1wid2lkdGhcIixcInBvc2l0aW9uXCIsXCJpdGVtc1wiLFwic2V0dGluZ3NcIl0scnVuOmZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZT10aGlzLnNldHRpbmdzLnJ0bD8xOi0xLGY9Mip0aGlzLnNldHRpbmdzLnN0YWdlUGFkZGluZyxnPXRoaXMuY29vcmRpbmF0ZXModGhpcy5jdXJyZW50KCkpK2YsaD1nK3RoaXMud2lkdGgoKSplLGk9W107Zm9yKGM9MCxkPXRoaXMuX2Nvb3JkaW5hdGVzLmxlbmd0aDtjPGQ7YysrKWE9dGhpcy5fY29vcmRpbmF0ZXNbYy0xXXx8MCxiPU1hdGguYWJzKHRoaXMuX2Nvb3JkaW5hdGVzW2NdKStmKmUsKHRoaXMub3AoYSxcIjw9XCIsZykmJnRoaXMub3AoYSxcIj5cIixoKXx8dGhpcy5vcChiLFwiPFwiLGcpJiZ0aGlzLm9wKGIsXCI+XCIsaCkpJiZpLnB1c2goYyk7dGhpcy4kc3RhZ2UuY2hpbGRyZW4oXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLHRoaXMuJHN0YWdlLmNoaWxkcmVuKFwiOmVxKFwiK2kuam9pbihcIiksIDplcShcIikrXCIpXCIpLmFkZENsYXNzKFwiYWN0aXZlXCIpLHRoaXMuJHN0YWdlLmNoaWxkcmVuKFwiLmNlbnRlclwiKS5yZW1vdmVDbGFzcyhcImNlbnRlclwiKSx0aGlzLnNldHRpbmdzLmNlbnRlciYmdGhpcy4kc3RhZ2UuY2hpbGRyZW4oKS5lcSh0aGlzLmN1cnJlbnQoKSkuYWRkQ2xhc3MoXCJjZW50ZXJcIil9fV0sZS5wcm90b3R5cGUuaW5pdGlhbGl6ZVN0YWdlPWZ1bmN0aW9uKCl7dGhpcy4kc3RhZ2U9dGhpcy4kZWxlbWVudC5maW5kKFwiLlwiK3RoaXMuc2V0dGluZ3Muc3RhZ2VDbGFzcyksdGhpcy4kc3RhZ2UubGVuZ3RofHwodGhpcy4kZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMubG9hZGluZ0NsYXNzKSx0aGlzLiRzdGFnZT1hKFwiPFwiK3RoaXMuc2V0dGluZ3Muc3RhZ2VFbGVtZW50K1wiPlwiLHtjbGFzczp0aGlzLnNldHRpbmdzLnN0YWdlQ2xhc3N9KS53cmFwKGEoXCI8ZGl2Lz5cIix7Y2xhc3M6dGhpcy5zZXR0aW5ncy5zdGFnZU91dGVyQ2xhc3N9KSksdGhpcy4kZWxlbWVudC5hcHBlbmQodGhpcy4kc3RhZ2UucGFyZW50KCkpKX0sZS5wcm90b3R5cGUuaW5pdGlhbGl6ZUl0ZW1zPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy4kZWxlbWVudC5maW5kKFwiLm93bC1pdGVtXCIpO2lmKGIubGVuZ3RoKXJldHVybi
5627B0aGlzLl9pdGVtcz1iLmdldCgpLm1hcChmdW5jdGlvbihiKXtyZXR1cm4gYShiKX0pLHRoaXMuX21lcmdlcnM9dGhpcy5faXRlbXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIDF9KSx2b2lkIHRoaXMucmVmcmVzaCgpO3RoaXMucmVwbGFjZSh0aGlzLiRlbGVtZW50LmNoaWxkcmVuKCkubm90KHRoaXMuJHN0YWdlLnBhcmVudCgpKSksdGhpcy5pc1Zpc2libGUoKT90aGlzLnJlZnJlc2goKTp0aGlzLmludmFsaWRhdGUoXCJ3aWR0aFwiKSx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5sb2FkaW5nQ2xhc3MpLmFkZENsYXNzKHRoaXMub3B0aW9ucy5sb2FkZWRDbGFzcyl9LGUucHJvdG90eXBlLmluaXRpYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLmVudGVyKFwiaW5pdGlhbGl6aW5nXCIpLHRoaXMudHJpZ2dlcihcImluaXRpYWxpemVcIiksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcyh0aGlzLnNldHRpbmdzLnJ0bENsYXNzLHRoaXMuc2V0dGluZ3MucnRsKSx0aGlzLnNldHRpbmdzLmF1dG9XaWR0aCYmIXRoaXMuaXMoXCJwcmUtbG9hZGluZ1wiKSl7dmFyIGEsYixjO2E9dGhpcy4kZWxlbWVudC5maW5kKFwiaW1nXCIpLGI9dGhpcy5zZXR0aW5ncy5uZXN0ZWRJdGVtU2VsZWN0b3I/XCIuXCIrdGhpcy5zZXR0aW5ncy5uZXN0ZWRJdGVtU2VsZWN0b3I6ZCxjPXRoaXMuJGVsZW1lbnQuY2hpbGRyZW4oYikud2lkdGgoKSxhLmxlbmd0aCYmYzw9MCYmdGhpcy5wcmVsb2FkQXV0b1dpZHRoSW1hZ2VzKGEpfXRoaXMuaW5pdGlhbGl6ZVN0YWdlKCksdGhpcy5pbml0aWFsaXplSXRlbXMoKSx0aGlzLnJlZ2lzdGVyRXZlbnRIYW5kbGVycygpLHRoaXMubGVhdmUoXCJpbml0aWFsaXppbmdcIiksdGhpcy50cmlnZ2VyKFwiaW5pdGlhbGl6ZWRcIil9LGUucHJvdG90eXBlLmlzVmlzaWJsZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLnNldHRpbmdzLmNoZWNrVmlzaWJpbGl0eXx8dGhpcy4kZWxlbWVudC5pcyhcIjp2aXNpYmxlXCIpfSxlLnByb3RvdHlwZS5zZXR1cD1mdW5jdGlvbigpe3ZhciBiPXRoaXMudmlld3BvcnQoKSxjPXRoaXMub3B0aW9ucy5yZXNwb25zaXZlLGQ9LTEsZT1udWxsO2M/KGEuZWFjaChjLGZ1bmN0aW9uKGEpe2E8PWImJmE+ZCYmKGQ9TnVtYmVyKGEpKX0pLGU9YS5leHRlbmQoe30sdGhpcy5vcHRpb25zLGNbZF0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuc3RhZ2VQYWRkaW5nJiYoZS5zdGFnZVBhZGRpbmc9ZS5zdGFnZVBhZGRpbmcoKSksZGVsZXRlIGUucmVzcG9uc2l2ZSxlLnJlc3BvbnNpdmVDbGFzcyYmdGhpcy4kZWxlbWVudC5hdHRyKFwiY2xhc3NcIix0aGlzLiRlbGVtZW50LmF0dHIoXCJjbGFzc1wiKS5yZXBsYWNlKG5ldyBSZWdFeHAoXCIoXCIrdGhpcy5vcHRpb25zLnJlc3BvbnNpdmVDbGFzcytcIi0pXFxcXFMrXFxcXHNcIixcImdcIiksXCIkMVwiK2QpKSk6ZT1hLmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMpLHRoaXMudHJpZ2dlcihcImNoYW5nZVwiLHtwcm9wZXJ0eTp7bmFtZTpcInNldHRpbmdzXCIsdmFsdWU6ZX19KSx0aGlzLl9icmVha3BvaW50PWQsdGhpcy5zZXR0aW5ncz1lLHRoaXMuaW52YWxpZGF0ZShcInNldHRpbmdzXCIpLHRoaXMudHJpZ2dlcihcImNoYW5nZWRcIix7cHJvcGVydHk6e25hbWU6XCJzZXR0aW5nc1wiLHZhbHVlOnRoaXMuc2V0dGluZ3N9fSl9LGUucHJvdG90eXBlLm9wdGlvbnNMb2dpYz1mdW5jdGlvbigpe3RoaXMuc2V0dGluZ3MuYXV0b1dpZHRoJiYodGhpcy5zZXR0aW5ncy5zdGFnZVBhZGRpbmc9ITEsdGhpcy5zZXR0aW5ncy5tZXJnZT0hMSl9LGUucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy50cmlnZ2VyKFwicHJlcGFyZVwiLHtjb250ZW50OmJ9KTtyZXR1cm4gYy5kYXRhfHwoYy5kYXRhPWEoXCI8XCIrdGhpcy5zZXR0aW5ncy5pdGVtRWxlbWVudCtcIi8+XCIpLmFkZENsYXNzKHRoaXMub3B0aW9ucy5pdGVtQ2xhc3MpLmFwcGVuZChiKSksdGhpcy50cmlnZ2VyKFwicHJlcGFyZWRcIix7Y29udGVudDpjLmRhdGF9KSxjLmRhdGF9LGUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgYj0wLGM9dGhpcy5fcGlwZS5sZW5ndGgsZD1hLnByb3h5KGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzW2FdfSx0aGlzLl9pbnZhbGlkYXRlZCksZT17fTtiPGM7KSh0aGlzLl9pbnZhbGlkYXRlZC5hbGx8fGEuZ3JlcCh0aGlzLl9waXBlW2JdLmZpbHRlcixkKS5sZW5ndGg+MCkmJnRoaXMuX3BpcGVbYl0ucnVuKGUpLGIrKzt0aGlzLl9pbnZhbGlkYXRlZD17fSwhdGhpcy5pcyhcInZhbGlkXCIpJiZ0aGlzLmVudGVyKFwidmFsaWRcIil9LGUucHJvdG90eXBlLndpZHRoPWZ1bmN0aW9uKGEpe3N3aXRjaChhPWF8fGUuV2lkdGguRGVmYXVsdCl7Y2FzZSBlLldpZHRoLklubmVyOmNhc2UgZS5XaWR0aC5PdXRlcjpyZXR1cm4gdGhpcy5fd2lkdGg7ZGVmYXVsdDpyZXR1cm4gdGhpcy5fd2lkdGgtMip0aGlzLnNldHRpbmdzLnN0YWdlUGFkZGluZyt0aGlzLnNldHRpbmdzLm1hcmdpbn19LGUucHJvdG90eXBlLnJlZnJlc2g9ZnVuY3Rpb24oKXt0aGlzLmVudGVyKFwicmVmcmVzaGluZ1wiKSx0aGlzLnRyaWdnZXIoXCJyZWZyZXNoXCIpLHRoaXMuc2V0dXAoKSx0aGlzLm9wdGlvbnNMb2dpYygpLHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLnJlZnJlc2hDbGFzcyksdGhpcy51cGRhdGUoKSx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5yZWZyZXNoQ2xhc3MpLHRoaXMubGVhdmUoXCJyZWZyZXNoaW5nXCIpLHRoaXMudHJpZ2dlcihcInJlZnJlc2hlZFwiKX0sZS5wcm90b3R5cGUub25UaHJvdHRsZWRSZXNpemU9ZnVuY3Rpb24oKXtiLmNsZWFyVGltZW91dCh0aGlzLnJlc2l6ZVRpbWVyKSx0aGlzLnJlc2l6ZVRpbWVyPWIuc2V0VGltZW91dCh0aGlzLl9oYW5kbGVycy5vblJlc2l6ZSx0aGlzLnNldHRpbmdzLnJlc3BvbnNpdmVSZWZyZXNoUmF0ZSl9LGUucHJvdG90eXBlLm9uUmVzaXplPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9pdGVtcy5sZW5ndGgmJih0aGlzLl93aWR0aCE9PXRoaXMuJGVsZW1lbnQud2lkdGgoKSYmKCEhdGhpcy5pc1Zpc2libGUoKSYmKHRoaXMuZW50ZXIoXCJyZXNpemluZ1wiKSx0aGlzLnRyaWdnZXIoXCJyZXNpemVcIikuaXNEZWZhdWx0UHJldmVudGVkKCk/KHRoaXMubGVhdmUoXCJyZXNpemluZ1wiKSwhMSk6KHRoaXMuaW52YWxpZGF0ZShcIndpZHRoXCIpLHRoaXMucmVmcmVzaCgpLHRoaXMubGVhdmUoXCJyZXNpemluZ1wiKSx2b2lkIHRoaXMudHJpZ2dlcihcInJlc2l6ZWRcIikpKSkpfSxlLnByb3RvdHlwZS5yZWdpc3RlckV2ZW50SGFuZGxlcnM9ZnVuY3Rpb24oKXthLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kc3RhZ2Uub24oYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kK1wiLm93bC5jb3JlXCIsYS5wcm94eSh0aGlzLm9uVHJhbnNpdGlvbkVuZCx0aGlzKSksITEhPT10aGlzLnNldHRpbmdzLnJlc3BvbnNpdmUmJnRoaXMub24oYixcInJlc2l6ZVwiLHRoaXMuX2hhbmRsZXJzLm9uVGhyb3R0bGVkUmVzaXplKSx0aGlzLnNldHRpbmdzLm1vdXNlRHJhZyYmKHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmRyYWdDbGFzcyksdGhpcy4kc3RhZ2Uub24oXCJtb3VzZWRvd24ub3dsLmNvcmVcIixhLnByb3h5KHRoaXMub25EcmFnU3RhcnQsdGhpcykpLHRoaXMuJHN0YWdlLm9uKFwiZHJhZ3N0YXJ0Lm93bC5jb3JlIHNlbGVjdHN0YXJ0Lm93bC5jb3JlXCIsZnVuY3Rpb24oKXtyZXR1cm4hMX0pKSx0aGlzLnNldHRpbmdzLnRvdWNoRHJhZyYmKHRoaXMuJHN0YWdlLm9uKFwidG91Y2hzdGFydC5vd2wuY29yZVwiLGEucHJveHkodGhpcy5vbkRyYWdTdGFydCx0aGlzKSksdGhpcy4kc3RhZ2Uub24oXCJ0b3VjaGNhbmNlbC5vd2wuY29yZVwiLGEucHJveHkodGhpcy5vbkRyYWdFbmQsdGhpcykpKX0sZS5wcm90b3R5cGUub25EcmFnU3RhcnQ9ZnVuY3Rpb24oYil7dmFyIGQ9bnVsbDszIT09Yi53aGljaCYmKGEuc3VwcG9ydC50cmFuc2Zvcm0/KGQ9dGhpcy4kc3RhZ2UuY3NzKFwidHJhbnNmb3JtXCIpLnJlcGxhY2UoLy4qXFwofFxcKXwgL2csXCJcIikuc3BsaXQoXCIsXCIpLGQ9e3g6ZFsxNj09PWQubGVuZ3RoPzEyOjRdLHk6ZFsxNj09PWQubGVuZ3RoPzEzOjVdfSk6KGQ9dGhpcy4kc3RhZ2UucG9zaXRpb24oKSxkPXt4OnRoaXMuc2V0dGluZ3MucnRsP2QubGVmdCt0aGlzLiRzdGFnZS53aWR0aCgpLXRoaXMud2lkdGgoKSt0aGlzLnNldHRpbmdzLm1hcmdpbjpkLmxlZnQseTpkLnRvcH0pLHRoaXMuaXMoXCJhbmltYXRpbmdcIikmJihhLnN1cHBvcnQudHJhbnNmb3JtP3RoaXMuYW5pbWF0ZShkLngpOnRoaXMuJHN0YWdlLnN0b3AoKSx0aGlzLmludmFsaWRhdGUoXCJwb3NpdGlvblwiKSksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcyh0aGlzLm9wdGlvbnMuZ3JhYkNsYXNzLFwibW91c2Vkb3duXCI9PT1iLnR5cGUpLHRoaXMuc3BlZWQoMCksdGhpcy5fZHJhZy
562750aW1lPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHRoaXMuX2RyYWcudGFyZ2V0PWEoYi50YXJnZXQpLHRoaXMuX2RyYWcuc3RhZ2Uuc3RhcnQ9ZCx0aGlzLl9kcmFnLnN0YWdlLmN1cnJlbnQ9ZCx0aGlzLl9kcmFnLnBvaW50ZXI9dGhpcy5wb2ludGVyKGIpLGEoYykub24oXCJtb3VzZXVwLm93bC5jb3JlIHRvdWNoZW5kLm93bC5jb3JlXCIsYS5wcm94eSh0aGlzLm9uRHJhZ0VuZCx0aGlzKSksYShjKS5vbmUoXCJtb3VzZW1vdmUub3dsLmNvcmUgdG91Y2htb3ZlLm93bC5jb3JlXCIsYS5wcm94eShmdW5jdGlvbihiKXt2YXIgZD10aGlzLmRpZmZlcmVuY2UodGhpcy5fZHJhZy5wb2ludGVyLHRoaXMucG9pbnRlcihiKSk7YShjKS5vbihcIm1vdXNlbW92ZS5vd2wuY29yZSB0b3VjaG1vdmUub3dsLmNvcmVcIixhLnByb3h5KHRoaXMub25EcmFnTW92ZSx0aGlzKSksTWF0aC5hYnMoZC54KTxNYXRoLmFicyhkLnkpJiZ0aGlzLmlzKFwidmFsaWRcIil8fChiLnByZXZlbnREZWZhdWx0KCksdGhpcy5lbnRlcihcImRyYWdnaW5nXCIpLHRoaXMudHJpZ2dlcihcImRyYWdcIikpfSx0aGlzKSkpfSxlLnByb3RvdHlwZS5vbkRyYWdNb3ZlPWZ1bmN0aW9uKGEpe3ZhciBiPW51bGwsYz1udWxsLGQ9bnVsbCxlPXRoaXMuZGlmZmVyZW5jZSh0aGlzLl9kcmFnLnBvaW50ZXIsdGhpcy5wb2ludGVyKGEpKSxmPXRoaXMuZGlmZmVyZW5jZSh0aGlzLl9kcmFnLnN0YWdlLnN0YXJ0LGUpO3RoaXMuaXMoXCJkcmFnZ2luZ1wiKSYmKGEucHJldmVudERlZmF1bHQoKSx0aGlzLnNldHRpbmdzLmxvb3A/KGI9dGhpcy5jb29yZGluYXRlcyh0aGlzLm1pbmltdW0oKSksYz10aGlzLmNvb3JkaW5hdGVzKHRoaXMubWF4aW11bSgpKzEpLWIsZi54PSgoZi54LWIpJWMrYyklYytiKTooYj10aGlzLnNldHRpbmdzLnJ0bD90aGlzLmNvb3JkaW5hdGVzKHRoaXMubWF4aW11bSgpKTp0aGlzLmNvb3JkaW5hdGVzKHRoaXMubWluaW11bSgpKSxjPXRoaXMuc2V0dGluZ3MucnRsP3RoaXMuY29vcmRpbmF0ZXModGhpcy5taW5pbXVtKCkpOnRoaXMuY29vcmRpbmF0ZXModGhpcy5tYXhpbXVtKCkpLGQ9dGhpcy5zZXR0aW5ncy5wdWxsRHJhZz8tMSplLngvNTowLGYueD1NYXRoLm1heChNYXRoLm1pbihmLngsYitkKSxjK2QpKSx0aGlzLl9kcmFnLnN0YWdlLmN1cnJlbnQ9Zix0aGlzLmFuaW1hdGUoZi54KSl9LGUucHJvdG90eXBlLm9uRHJhZ0VuZD1mdW5jdGlvbihiKXt2YXIgZD10aGlzLmRpZmZlcmVuY2UodGhpcy5fZHJhZy5wb2ludGVyLHRoaXMucG9pbnRlcihiKSksZT10aGlzLl9kcmFnLnN0YWdlLmN1cnJlbnQsZj1kLng+MF50aGlzLnNldHRpbmdzLnJ0bD9cImxlZnRcIjpcInJpZ2h0XCI7YShjKS5vZmYoXCIub3dsLmNvcmVcIiksdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuZ3JhYkNsYXNzKSwoMCE9PWQueCYmdGhpcy5pcyhcImRyYWdnaW5nXCIpfHwhdGhpcy5pcyhcInZhbGlkXCIpKSYmKHRoaXMuc3BlZWQodGhpcy5zZXR0aW5ncy5kcmFnRW5kU3BlZWR8fHRoaXMuc2V0dGluZ3Muc21hcnRTcGVlZCksdGhpcy5jdXJyZW50KHRoaXMuY2xvc2VzdChlLngsMCE9PWQueD9mOnRoaXMuX2RyYWcuZGlyZWN0aW9uKSksdGhpcy5pbnZhbGlkYXRlKFwicG9zaXRpb25cIiksdGhpcy51cGRhdGUoKSx0aGlzLl9kcmFnLmRpcmVjdGlvbj1mLChNYXRoLmFicyhkLngpPjN8fChuZXcgRGF0ZSkuZ2V0VGltZSgpLXRoaXMuX2RyYWcudGltZT4zMDApJiZ0aGlzLl9kcmFnLnRhcmdldC5vbmUoXCJjbGljay5vd2wuY29yZVwiLGZ1bmN0aW9uKCl7cmV0dXJuITF9KSksdGhpcy5pcyhcImRyYWdnaW5nXCIpJiYodGhpcy5sZWF2ZShcImRyYWdnaW5nXCIpLHRoaXMudHJpZ2dlcihcImRyYWdnZWRcIikpfSxlLnByb3RvdHlwZS5jbG9zZXN0PWZ1bmN0aW9uKGIsYyl7dmFyIGU9LTEsZj0zMCxnPXRoaXMud2lkdGgoKSxoPXRoaXMuY29vcmRpbmF0ZXMoKTtyZXR1cm4gdGhpcy5zZXR0aW5ncy5mcmVlRHJhZ3x8YS5lYWNoKGgsYS5wcm94eShmdW5jdGlvbihhLGkpe3JldHVyblwibGVmdFwiPT09YyYmYj5pLWYmJmI8aStmP2U9YTpcInJpZ2h0XCI9PT1jJiZiPmktZy1mJiZiPGktZytmP2U9YSsxOnRoaXMub3AoYixcIjxcIixpKSYmdGhpcy5vcChiLFwiPlwiLGhbYSsxXSE9PWQ/aFthKzFdOmktZykmJihlPVwibGVmdFwiPT09Yz9hKzE6YSksLTE9PT1lfSx0aGlzKSksdGhpcy5zZXR0aW5ncy5sb29wfHwodGhpcy5vcChiLFwiPlwiLGhbdGhpcy5taW5pbXVtKCldKT9lPWI9dGhpcy5taW5pbXVtKCk6dGhpcy5vcChiLFwiPFwiLGhbdGhpcy5tYXhpbXVtKCldKSYmKGU9Yj10aGlzLm1heGltdW0oKSkpLGV9LGUucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5zcGVlZCgpPjA7dGhpcy5pcyhcImFuaW1hdGluZ1wiKSYmdGhpcy5vblRyYW5zaXRpb25FbmQoKSxjJiYodGhpcy5lbnRlcihcImFuaW1hdGluZ1wiKSx0aGlzLnRyaWdnZXIoXCJ0cmFuc2xhdGVcIikpLGEuc3VwcG9ydC50cmFuc2Zvcm0zZCYmYS5zdXBwb3J0LnRyYW5zaXRpb24/dGhpcy4kc3RhZ2UuY3NzKHt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUzZChcIitiK1wicHgsMHB4LDBweClcIix0cmFuc2l0aW9uOnRoaXMuc3BlZWQoKS8xZTMrXCJzXCIrKHRoaXMuc2V0dGluZ3Muc2xpZGVUcmFuc2l0aW9uP1wiIFwiK3RoaXMuc2V0dGluZ3Muc2xpZGVUcmFuc2l0aW9uOlwiXCIpfSk6Yz90aGlzLiRzdGFnZS5hbmltYXRlKHtsZWZ0OmIrXCJweFwifSx0aGlzLnNwZWVkKCksdGhpcy5zZXR0aW5ncy5mYWxsYmFja0Vhc2luZyxhLnByb3h5KHRoaXMub25UcmFuc2l0aW9uRW5kLHRoaXMpKTp0aGlzLiRzdGFnZS5jc3Moe2xlZnQ6YitcInB4XCJ9KX0sZS5wcm90b3R5cGUuaXM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX3N0YXRlcy5jdXJyZW50W2FdJiZ0aGlzLl9zdGF0ZXMuY3VycmVudFthXT4wfSxlLnByb3RvdHlwZS5jdXJyZW50PWZ1bmN0aW9uKGEpe2lmKGE9PT1kKXJldHVybiB0aGlzLl9jdXJyZW50O2lmKDA9PT10aGlzLl9pdGVtcy5sZW5ndGgpcmV0dXJuIGQ7aWYoYT10aGlzLm5vcm1hbGl6ZShhKSx0aGlzLl9jdXJyZW50IT09YSl7dmFyIGI9dGhpcy50cmlnZ2VyKFwiY2hhbmdlXCIse3Byb3BlcnR5OntuYW1lOlwicG9zaXRpb25cIix2YWx1ZTphfX0pO2IuZGF0YSE9PWQmJihhPXRoaXMubm9ybWFsaXplKGIuZGF0YSkpLHRoaXMuX2N1cnJlbnQ9YSx0aGlzLmludmFsaWRhdGUoXCJwb3NpdGlvblwiKSx0aGlzLnRyaWdnZXIoXCJjaGFuZ2VkXCIse3Byb3BlcnR5OntuYW1lOlwicG9zaXRpb25cIix2YWx1ZTp0aGlzLl9jdXJyZW50fX0pfXJldHVybi
5627B0aGlzLl9jdXJyZW50fSxlLnByb3RvdHlwZS5pbnZhbGlkYXRlPWZ1bmN0aW9uKGIpe3JldHVyblwic3RyaW5nXCI9PT1hLnR5cGUoYikmJih0aGlzLl9pbnZhbGlkYXRlZFtiXT0hMCx0aGlzLmlzKFwidmFsaWRcIikmJnRoaXMubGVhdmUoXCJ2YWxpZFwiKSksYS5tYXAodGhpcy5faW52YWxpZGF0ZWQsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYn0pfSxlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbihhKXsoYT10aGlzLm5vcm1hbGl6ZShhKSkhPT1kJiYodGhpcy5fc3BlZWQ9MCx0aGlzLl9jdXJyZW50PWEsdGhpcy5zdXBwcmVzcyhbXCJ0cmFuc2xhdGVcIixcInRyYW5zbGF0ZWRcIl0pLHRoaXMuYW5pbWF0ZSh0aGlzLmNvb3JkaW5hdGVzKGEpKSx0aGlzLnJlbGVhc2UoW1widHJhbnNsYXRlXCIsXCJ0cmFuc2xhdGVkXCJdKSl9LGUucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX2l0ZW1zLmxlbmd0aCxlPWI/MDp0aGlzLl9jbG9uZXMubGVuZ3RoO3JldHVybiF0aGlzLmlzTnVtZXJpYyhhKXx8YzwxP2E9ZDooYTwwfHxhPj1jK2UpJiYoYT0oKGEtZS8yKSVjK2MpJWMrZS8yKSxhfSxlLnByb3RvdHlwZS5yZWxhdGl2ZT1mdW5jdGlvbihhKXtyZXR1cm4gYS09dGhpcy5fY2xvbmVzLmxlbmd0aC8yLHRoaXMubm9ybWFsaXplKGEsITApfSxlLnByb3RvdHlwZS5tYXhpbXVtPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXMuc2V0dGluZ3MsZj10aGlzLl9jb29yZGluYXRlcy5sZW5ndGg7aWYoZS5sb29wKWY9dGhpcy5fY2xvbmVzLmxlbmd0aC8yK3RoaXMuX2l0ZW1zLmxlbmd0aC0xO2Vsc2UgaWYoZS5hdXRvV2lkdGh8fGUubWVyZ2Upe2lmKGI9dGhpcy5faXRlbXMubGVuZ3RoKWZvcihjPXRoaXMuX2l0ZW1zWy0tYl0ud2lkdGgoKSxkPXRoaXMuJGVsZW1lbnQud2lkdGgoKTtiLS0mJiEoKGMrPXRoaXMuX2l0ZW1zW2JdLndpZHRoKCkrdGhpcy5zZXR0aW5ncy5tYXJnaW4pPmQpOyk7Zj1iKzF9ZWxzZSBmPWUuY2VudGVyP3RoaXMuX2l0ZW1zLmxlbmd0aC0xOnRoaXMuX2l0ZW1zLmxlbmd0aC1lLml0ZW1zO3JldHVybiBhJiYoZi09dGhpcy5fY2xvbmVzLmxlbmd0aC8yKSxNYXRoLm1heChmLDApfSxlLnByb3RvdHlwZS5taW5pbXVtPWZ1bmN0aW9uKGEpe3JldHVybiBhPzA6dGhpcy5fY2xvbmVzLmxlbmd0aC8yfSxlLnByb3RvdHlwZS5pdGVtcz1mdW5jdGlvbihhKXtyZXR1cm4gYT09PWQ/dGhpcy5faXRlbXMuc2xpY2UoKTooYT10aGlzLm5vcm1hbGl6ZShhLCEwKSx0aGlzLl9pdGVtc1thXSl9LGUucHJvdG90eXBlLm1lcmdlcnM9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1kP3RoaXMuX21lcmdlcnMuc2xpY2UoKTooYT10aGlzLm5vcm1hbGl6ZShhLCEwKSx0aGlzLl9tZXJnZXJzW2FdKX0sZS5wcm90b3R5cGUuY2xvbmVzPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXMuX2Nsb25lcy5sZW5ndGgvMixlPWMrdGhpcy5faXRlbXMubGVuZ3RoLGY9ZnVuY3Rpb24oYSl7cmV0dXJuIGElMj09MD9lK2EvMjpjLShhKzEpLzJ9O3JldHVybiBiPT09ZD9hLm1hcCh0aGlzLl9jbG9uZXMsZnVuY3Rpb24oYSxiKXtyZXR1cm4gZihiKX0pOmEubWFwKHRoaXMuX2Nsb25lcyxmdW5jdGlvbihhLGMpe3JldHVybiBhPT09Yj9mKGMpOm51bGx9KX0sZS5wcm90b3R5cGUuc3BlZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1kJiYodGhpcy5fc3BlZWQ9YSksdGhpcy5fc3BlZWR9LGUucHJvdG90eXBlLmNvb3JkaW5hdGVzPWZ1bmN0aW9uKGIpe3ZhciBjLGU9MSxmPWItMTtyZXR1cm4gYj09PWQ/YS5tYXAodGhpcy5fY29vcmRpbmF0ZXMsYS5wcm94eShmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmNvb3JkaW5hdGVzKGIpfSx0aGlzKSk6KHRoaXMuc2V0dGluZ3MuY2VudGVyPyh0aGlzLnNldHRpbmdzLnJ0bCYmKGU9LTEsZj1iKzEpLGM9dGhpcy5fY29vcmRpbmF0ZXNbYl0sYys9KHRoaXMud2lkdGgoKS1jKyh0aGlzLl9jb29yZGluYXRlc1tmXXx8MCkpLzIqZSk6Yz10aGlzLl9jb29yZGluYXRlc1tmXXx8MCxjPU1hdGguY2VpbChjKSl9LGUucHJvdG90eXBlLmR1cmF0aW9uPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gMD09PWM/MDpNYXRoLm1pbihNYXRoLm1heChNYXRoLmFicyhiLWEpLDEpLDYpKk1hdGguYWJzKGN8fHRoaXMuc2V0dGluZ3Muc21hcnRTcGVlZCl9LGUucHJvdG90eXBlLnRvPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5jdXJyZW50KCksZD1udWxsLGU9YS10aGlzLnJlbGF0aXZlKGMpLGY9KGU+MCktKGU8MCksZz10aGlzLl9pdGVtcy5sZW5ndGgsaD10aGlzLm1pbmltdW0oKSxpPXRoaXMubWF4aW11bSgpO3RoaXMuc2V0dGluZ3MubG9vcD8oIXRoaXMuc2V0dGluZ3MucmV3aW5kJiZNYXRoLmFicyhlKT5nLzImJihlKz0tMSpmKmcpLGE9YytlLChkPSgoYS1oKSVnK2cpJWcraCkhPT1hJiZkLWU8PWkmJmQtZT4wJiYoYz1kLWUsYT1kLHRoaXMucmVzZXQoYykpKTp0aGlzLnNldHRpbmdzLnJld2luZD8oaSs9MSxhPShhJWkraSklaSk6YT1NYXRoLm1heChoLE1hdGgubWluKGksYSkpLHRoaXMuc3BlZWQodGhpcy5kdXJhdGlvbihjLGEsYikpLHRoaXMuY3VycmVudChhKSx0aGlzLmlzVmlzaWJsZSgpJiZ0aGlzLnVwZGF0ZSgpfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKGEpe2E9YXx8ITEsdGhpcy50byh0aGlzLnJlbGF0aXZlKHRoaXMuY3VycmVudCgpKSsxLGEpfSxlLnByb3RvdHlwZS5wcmV2PWZ1bmN0aW9uKGEpe2E9YXx8ITEsdGhpcy50byh0aGlzLnJlbGF0aXZlKHRoaXMuY3VycmVudCgpKS0xLGEpfSxlLnByb3RvdHlwZS5vblRyYW5zaXRpb25FbmQ9ZnVuY3Rpb24oYSl7aWYoYSE9PWQmJihhLnN0b3BQcm9wYWdhdGlvbigpLChhLnRhcmdldHx8YS5zcmNFbGVtZW50fHxhLm9yaWdpbmFsVGFyZ2V0KSE9PXRoaXMuJHN0YWdlLmdldCgwKSkpcmV0dXJuITE7dGhpcy5sZWF2ZShcImFuaW1hdGluZ1wiKSx0aGlzLnRyaWdnZXIoXCJ0cmFuc2xhdGVkXCIpfSxlLnByb3RvdHlwZS52aWV3cG9ydD1mdW5jdGlvbigpe3ZhciBkO3JldHVybiB0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZUJhc2VFbGVtZW50IT09Yj9kPWEodGhpcy5vcHRpb25zLnJlc3BvbnNpdmVCYXNlRWxlbWVudCkud2lkdGgoKTpiLmlubmVyV2lkdGg/ZD1iLmlubmVyV2lkdGg6Yy5kb2N1bWVudEVsZW1lbnQmJmMuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoP2Q9Yy5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg6Y29uc29sZS53YXJuKFwiQ2FuIG5vdCBkZXRlY3Qgdmlld3BvcnQgd2lkdGguXCIpLGR9LGUucHJvdG90eXBlLnJlcGxhY2U9ZnVuY3Rpb24oYil7dGhpcy4kc3RhZ2UuZW1wdHkoKSx0aGlzLl9pdGVtcz1bXSxiJiYoYj1iIGluc3RhbmNlb2YgalF1ZXJ5P2I6YShiKSksdGhpcy5zZXR0aW5ncy5uZXN0ZWRJdGVtU2VsZWN0b3ImJihiPWIuZmluZChcIi5cIit0aGlzLnNldHRpbmdzLm5lc3RlZEl0ZW1TZWxlY3RvcikpLGIuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLm5vZGVUeXBlfSkuZWFjaChhLnByb3h5KGZ1bmN0aW9uKGEsYil7Yj10aGlzLnByZXBhcmUoYiksdGhpcy4kc3RhZ2UuYXBwZW5kKGIpLHRoaXMuX2l0ZW
56271zLnB1c2goYiksdGhpcy5fbWVyZ2Vycy5wdXNoKDEqYi5maW5kKFwiW2RhdGEtbWVyZ2VdXCIpLmFkZEJhY2soXCJbZGF0YS1tZXJnZV1cIikuYXR0cihcImRhdGEtbWVyZ2VcIil8fDEpfSx0aGlzKSksdGhpcy5yZXNldCh0aGlzLmlzTnVtZXJpYyh0aGlzLnNldHRpbmdzLnN0YXJ0UG9zaXRpb24pP3RoaXMuc2V0dGluZ3Muc3RhcnRQb3NpdGlvbjowKSx0aGlzLmludmFsaWRhdGUoXCJpdGVtc1wiKX0sZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIsYyl7dmFyIGU9dGhpcy5yZWxhdGl2ZSh0aGlzLl9jdXJyZW50KTtjPWM9PT1kP3RoaXMuX2l0ZW1zLmxlbmd0aDp0aGlzLm5vcm1hbGl6ZShjLCEwKSxiPWIgaW5zdGFuY2VvZiBqUXVlcnk/YjphKGIpLHRoaXMudHJpZ2dlcihcImFkZFwiLHtjb250ZW50OmIscG9zaXRpb246Y30pLGI9dGhpcy5wcmVwYXJlKGIpLDA9PT10aGlzLl9pdGVtcy5sZW5ndGh8fGM9PT10aGlzLl9pdGVtcy5sZW5ndGg/KDA9PT10aGlzLl9pdGVtcy5sZW5ndGgmJnRoaXMuJHN0YWdlLmFwcGVuZChiKSwwIT09dGhpcy5faXRlbXMubGVuZ3RoJiZ0aGlzLl9pdGVtc1tjLTFdLmFmdGVyKGIpLHRoaXMuX2l0ZW1zLnB1c2goYiksdGhpcy5fbWVyZ2Vycy5wdXNoKDEqYi5maW5kKFwiW2RhdGEtbWVyZ2VdXCIpLmFkZEJhY2soXCJbZGF0YS1tZXJnZV1cIikuYXR0cihcImRhdGEtbWVyZ2VcIil8fDEpKToodGhpcy5faXRlbXNbY10uYmVmb3JlKGIpLHRoaXMuX2l0ZW1zLnNwbGljZShjLDAsYiksdGhpcy5fbWVyZ2Vycy5zcGxpY2UoYywwLDEqYi5maW5kKFwiW2RhdGEtbWVyZ2VdXCIpLmFkZEJhY2soXCJbZGF0YS1tZXJnZV1cIikuYXR0cihcImRhdGEtbWVyZ2VcIil8fDEpKSx0aGlzLl9pdGVtc1tlXSYmdGhpcy5yZXNldCh0aGlzLl9pdGVtc1tlXS5pbmRleCgpKSx0aGlzLmludmFsaWRhdGUoXCJpdGVtc1wiKSx0aGlzLnRyaWdnZXIoXCJhZGRlZFwiLHtjb250ZW50OmIscG9zaXRpb246Y30pfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oYSl7KGE9dGhpcy5ub3JtYWxpemUoYSwhMCkpIT09ZCYmKHRoaXMudHJpZ2dlcihcInJlbW92ZVwiLHtjb250ZW50OnRoaXMuX2l0ZW1zW2FdLHBvc2l0aW9uOmF9KSx0aGlzLl9pdGVtc1thXS5yZW1vdmUoKSx0aGlzLl9pdGVtcy5zcGxpY2UoYSwxKSx0aGlzLl9tZXJnZXJzLnNwbGljZShhLDEpLHRoaXMuaW52YWxpZGF0ZShcIml0ZW1zXCIpLHRoaXMudHJpZ2dlcihcInJlbW92ZWRcIix7Y29udGVudDpudWxsLHBvc2l0aW9uOmF9KSl9LGUucHJvdG90eXBlLnByZWxvYWRBdXRvV2lkdGhJbWFnZXM9ZnVuY3Rpb24oYil7Yi5lYWNoKGEucHJveHkoZnVuY3Rpb24oYixjKXt0aGlzLmVudGVyKFwicHJlLWxvYWRpbmdcIiksYz1hKGMpLGEobmV3IEltYWdlKS5vbmUoXCJsb2FkXCIsYS5wcm94eShmdW5jdGlvbihhKXtjLmF0dHIoXCJzcmNcIixhLnRhcmdldC5zcmMpLGMuY3NzKFwib3BhY2l0eVwiLDEpLHRoaXMubGVhdmUoXCJwcmUtbG9hZGluZ1wiKSwhdGhpcy5pcyhcInByZS1sb2FkaW5nXCIpJiYhdGhpcy5pcyhcImluaXRpYWxpemluZ1wiKSYmdGhpcy5yZWZyZXNoKCl9LHRoaXMpKS5hdHRyKFwic3JjXCIsYy5hdHRyKFwic3JjXCIpfHxjLmF0dHIoXCJkYXRhLXNyY1wiKXx8Yy5hdHRyKFwiZGF0YS1zcmMtcmV0aW5hXCIpKX0sdGhpcykpfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5vZmYoXCIub3dsLmNvcmVcIiksdGhpcy4kc3RhZ2Uub2ZmKFwiLm93bC5jb3JlXCIpLGEoYykub2ZmKFwiLm93bC5jb3JlXCIpLCExIT09dGhpcy5zZXR0aW5ncy5yZXNwb25zaXZlJiYoYi5jbGVhclRpbWVvdXQodGhpcy5yZXNpemVUaW1lciksdGhpcy5vZmYoYixcInJlc2l6ZVwiLHRoaXMuX2hhbmRsZXJzLm9uVGhyb3R0bGVkUmVzaXplKSk7Zm9yKHZhciBkIGluIHRoaXMuX3BsdWdpbnMpdGhpcy5fcGx1Z2luc1tkXS5kZXN0cm95KCk7dGhpcy4kc3RhZ2UuY2hpbGRyZW4oXCIuY2xvbmVkXCIpLnJlbW92ZSgpLHRoaXMuJHN0YWdlLnVud3JhcCgpLHRoaXMuJHN0YWdlLmNoaWxkcmVuKCkuY29udGVudHMoKS51bndyYXAoKSx0aGlzLiRzdGFnZS5jaGlsZHJlbigpLnVud3JhcCgpLHRoaXMuJHN0YWdlLnJlbW92ZSgpLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLnJlZnJlc2hDbGFzcykucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmxvYWRpbmdDbGFzcykucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmxvYWRlZENsYXNzKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMucnRsQ2xhc3MpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5kcmFnQ2xhc3MpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5ncmFiQ2xhc3MpLmF0dHIoXCJjbGFzc1wiLHRoaXMuJGVsZW1lbnQuYXR0cihcImNsYXNzXCIpLnJlcGxhY2UobmV3IFJlZ0V4cCh0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZUNsYXNzK1wiLVxcXFxTK1xcXFxzXCIsXCJnXCIpLFwiXCIpKS5yZW1vdmVEYXRhKFwib3dsLmNhcm91c2VsXCIpfSxlLnByb3RvdHlwZS5vcD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5zZXR0aW5ncy5ydGw7c3dpdGNoKGIpe2Nhc2VcIjxcIjpyZXR1cm4gZD9hPmM6YTxjO2Nhc2VcIj5cIjpyZXR1cm4gZD9hPGM6YT5jO2Nhc2VcIj49XCI6cmV0dXJuIGQ/YTw9YzphPj1jO2Nhc2VcIjw9XCI6cmV0dXJuIGQ/YT49YzphPD1jfX0sZS5wcm90b3R5cGUub249ZnVuY3Rpb24oYSxiLGMsZCl7YS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcihiLGMsZCk6YS5hdHRhY2hFdmVudCYmYS5hdHRhY2hFdmVudChcIm9uXCIrYixjKX0sZS5wcm90b3R5cGUub2ZmPWZ1bmN0aW9uKGEsYixjLGQpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcj9hLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixjLGQpOmEuZGV0YWNoRXZlbnQmJmEuZGV0YWNoRXZlbnQoXCJvblwiK2IsYyl9LGUucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24oYixjLGQsZixnKXt2YXIgaD17aXRlbTp7Y291bnQ6dGhpcy5faXRlbXMubGVuZ3RoLGluZGV4OnRoaXMuY3VycmVudCgpfX0saT1hLmNhbWVsQ2FzZShhLmdyZXAoW1wib25cIixiLGRdLGZ1bmN0aW9uKGEpe3JldHVybiBhfSkuam9pbihcIi1cIikudG9Mb3dlckNhc2UoKSksaj1hLkV2ZW50KFtiLFwib3dsXCIsZHx8XCJjYXJvdXNlbFwiXS5qb2luKFwiLlwiKS50b0xvd2VyQ2FzZSgpLGEuZXh0
5627ZW5kKHtyZWxhdGVkVGFyZ2V0OnRoaXN9LGgsYykpO3JldHVybiB0aGlzLl9zdXByZXNzW2JdfHwoYS5lYWNoKHRoaXMuX3BsdWdpbnMsZnVuY3Rpb24oYSxiKXtiLm9uVHJpZ2dlciYmYi5vblRyaWdnZXIoail9KSx0aGlzLnJlZ2lzdGVyKHt0eXBlOmUuVHlwZS5FdmVudCxuYW1lOmJ9KSx0aGlzLiRlbGVtZW50LnRyaWdnZXIoaiksdGhpcy5zZXR0aW5ncyYmXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5zZXR0aW5nc1tpXSYmdGhpcy5zZXR0aW5nc1tpXS5jYWxsKHRoaXMsaikpLGp9LGUucHJvdG90eXBlLmVudGVyPWZ1bmN0aW9uKGIpe2EuZWFjaChbYl0uY29uY2F0KHRoaXMuX3N0YXRlcy50YWdzW2JdfHxbXSksYS5wcm94eShmdW5jdGlvbihhLGIpe3RoaXMuX3N0YXRlcy5jdXJyZW50W2JdPT09ZCYmKHRoaXMuX3N0YXRlcy5jdXJyZW50W2JdPTApLHRoaXMuX3N0YXRlcy5jdXJyZW50W2JdKyt9LHRoaXMpKX0sZS5wcm90b3R5cGUubGVhdmU9ZnVuY3Rpb24oYil7YS5lYWNoKFtiXS5jb25jYXQodGhpcy5fc3RhdGVzLnRhZ3NbYl18fFtdKSxhLnByb3h5KGZ1bmN0aW9uKGEsYil7dGhpcy5fc3RhdGVzLmN1cnJlbnRbYl0tLX0sdGhpcykpfSxlLnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbihiKXtpZihiLnR5cGU9PT1lLlR5cGUuRXZlbnQpe2lmKGEuZXZlbnQuc3BlY2lhbFtiLm5hbWVdfHwoYS5ldmVudC5zcGVjaWFsW2IubmFtZV09e30pLCFhLmV2ZW50LnNwZWNpYWxbYi5uYW1lXS5vd2wpe3ZhciBjPWEuZXZlbnQuc3BlY2lhbFtiLm5hbWVdLl9kZWZhdWx0O2EuZXZlbnQuc3BlY2lhbFtiLm5hbWVdLl9kZWZhdWx0PWZ1bmN0aW9uKGEpe3JldHVybiFjfHwhYy5hcHBseXx8YS5uYW1lc3BhY2UmJi0xIT09YS5uYW1lc3BhY2UuaW5kZXhPZihcIm93bFwiKT9hLm5hbWVzcGFjZSYmYS5uYW1lc3BhY2UuaW5kZXhPZihcIm93bFwiKT4tMTpjLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sYS5ldmVudC5zcGVjaWFsW2IubmFtZV0ub3dsPSEwfX1lbHNlIGIudHlwZT09PWUuVHlwZS5TdGF0ZSYmKHRoaXMuX3N0YXRlcy50YWdzW2IubmFtZV0/dGhpcy5fc3RhdGVzLnRhZ3NbYi5uYW1lXT10aGlzLl9zdGF0ZXMudGFnc1tiLm5hbWVdLmNvbmNhdChiLnRhZ3MpOnRoaXMuX3N0YXRlcy50YWdzW2IubmFtZV09Yi50YWdzLHRoaXMuX3N0YXRlcy50YWdzW2IubmFtZV09YS5ncmVwKHRoaXMuX3N0YXRlcy50YWdzW2IubmFtZV0sYS5wcm94eShmdW5jdGlvbihjLGQpe3JldHVybiBhLmluQXJyYXkoYyx0aGlzLl9zdGF0ZXMudGFnc1tiLm5hbWVdKT09PWR9LHRoaXMpKSl9LGUucHJvdG90eXBlLnN1cHByZXNzPWZ1bmN0aW9uKGIpe2EuZWFjaChiLGEucHJveHkoZnVuY3Rpb24oYSxiKXt0aGlzLl9zdXByZXNzW2JdPSEwfSx0aGlzKSl9LGUucHJvdG90eXBlLnJlbGVhc2U9ZnVuY3Rpb24oYil7YS5lYWNoKGIsYS5wcm94eShmdW5jdGlvbihhLGIpe2RlbGV0ZSB0aGlzLl9zdXByZXNzW2JdfSx0aGlzKSl9LGUucHJvdG90eXBlLnBvaW50ZXI9ZnVuY3Rpb24oYSl7dmFyIGM9e3g6bnVsbCx5Om51bGx9O3JldHVybiBhPWEub3JpZ2luYWxFdmVudHx8YXx8Yi5ldmVudCxhPWEudG91Y2hlcyYmYS50b3VjaGVzLmxlbmd0aD9hLnRvdWNoZXNbMF06YS5jaGFuZ2VkVG91Y2hlcyYmYS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg/YS5jaGFuZ2VkVG91Y2hlc1swXTphLGEucGFnZVg/KGMueD1hLnBhZ2VYLGMueT1hLnBhZ2VZKTooYy54PWEuY2xpZW50WCxjLnk9YS5jbGllbnRZKSxjfSxlLnByb3RvdHlwZS5pc051bWVyaWM9ZnVuY3Rpb24oYSl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQoYSkpfSxlLnByb3RvdHlwZS5kaWZmZXJlbmNlPWZ1bmN0aW9uKGEsYil7cmV0dXJue3g6YS54LWIueCx5OmEueS1iLnl9fSxhLmZuLm93bENhcm91c2VsPWZ1bmN0aW9uKGIpe3ZhciBjPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxmPWQuZGF0YShcIm93bC5jYXJvdXNlbFwiKTtmfHwoZj1uZXcgZSh0aGlzLFwib2JqZWN0XCI9PXR5cGVvZiBiJiZiKSxkLmRhdGEoXCJvd2wuY2Fyb3VzZWxcIixmKSxhLmVhY2goW1wibmV4dFwiLFwicHJldlwiLFwidG9cIixcImRlc3Ryb3lcIixcInJlZnJlc2hcIixcInJlcGxhY2VcIixcImFkZFwiLFwicmVtb3ZlXCJdLGZ1bmN0aW9uKGIsYyl7Zi5yZWdpc3Rlcih7dHlwZTplLlR5cGUuRXZlbnQsbmFtZTpjfSksZi4kZWxlbWVudC5vbihjK1wiLm93bC5jYXJvdXNlbC5jb3JlXCIsYS5wcm94eShmdW5jdGlvbihhKXthLm5hbWVzcGFjZSYmYS5yZWxhdGVkVGFyZ2V0IT09dGhpcyYmKHRoaXMuc3VwcHJlc3MoW2NdKSxmW2NdLmFwcGx5KHRoaXMsW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpLHRoaXMucmVsZWFzZShbY10pKX0sZikpfSkpLFwic3RyaW5nXCI9PXR5cGVvZiBiJiZcIl9cIiE9PWIuY2hhckF0KDApJiZmW2JdLmFwcGx5KGYsYyl9KX0sYS5mbi5vd2xDYXJvdXNlbC5Db25zdHJ1Y3Rvcj1lfSh3aW5kb3cuWmVwdG98fHdpbmRvdy5qUXVlcnksd2luZG93LGRvY3VtZW50KSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1mdW5jdGlvbihiKXt0aGlzLl9jb3JlPWIsdGhpcy5faW50ZXJ2YWw9bnVsbCx0aGlzLl92aXNpYmxlPW51bGwsdGhpcy5faGFuZGxlcnM9e1wiaW5pdGlhbGl6ZWQub3dsLmNhcm91c2VsXCI6YS5wcm94eShmdW5jdGlvbihhKXthLm5hbWVzcGFjZSYmdGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvUmVmcmVzaCYmdGhpcy53YXRjaCgpfSx0aGlzKX0sdGhpcy5fY29yZS5vcHRpb25zPWEuZXh0ZW5kKHt9LGUuRGVmYXVsdHMsdGhpcy5fY29yZS5vcHRpb25zKSx0aGlzLl9jb3JlLiRlbGVtZW50Lm9uKHRoaXMuX2hhbmRsZXJzKX07ZS5EZWZhdWx0cz17YXV0b1JlZnJlc2g6ITAsYXV0b1JlZnJlc2hJbnRlcnZhbDo1MDB9LGUucHJvdG90eXBlLndhdGNoPWZ1bmN0aW9uKCl7dGhpcy5faW50ZXJ2YWx8fCh0aGlzLl92aXNpYmxlPXRoaXMuX2NvcmUuaXNWaXNpYmxlKCksdGhpcy5faW50ZXJ2YWw9Yi5zZXRJbnRlcnZhbChhLnByb3h5KHRoaXMucmVmcmVzaCx0aGlzKSx0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9SZWZyZXNoSW50ZXJ2YWwpKX0sZS5wcm90b3R5cGUucmVmcmVzaD1mdW5jdGlvbigpe3RoaXMuX2NvcmUuaXNWaXNpYmxlKCkhPT10aGlzLl92aXNpYmxlJiYodGhpcy5fdmlzaWJsZT0hdGhpcy5fdmlzaWJsZSx0aGlzLl9jb3JlLiRlbGVtZW50LnRvZ2dsZUNsYXNzKFwib3dsLWhpZGRlblwiLCF0aGlzLl92aXNpYmxlKSx0aGlzLl92aXNpYmxlJiZ0aGlzLl9jb3JlLmludmFsaWRhdGUoXCJ3aWR0aFwiKSYmdGhpcy5fY29yZS5yZWZyZXNoKCkpfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGEsYztiLmNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpO2ZvcihhIGluIHRoaXMuX2hhbmRsZXJzKXRoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKGEsdGhpcy5faGFuZGxlcnNbYV0pO2ZvcihjIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKVwiZnVuY3Rpb25cIiE9dHlwZW9mIHRoaXNbY10mJih0aGlzW2NdPW51bGwpfSxhLmZuLm93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnMuQXV0b1JlZnJlc2g9ZX0od2luZG93LlplcHRvfHx3aW5kb3cualF1ZXJ5LHdpbmRvdyxkb2N1bWVudCksZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ZnVuY3Rpb24oYil7dGhpcy5fY29yZT1iLHRoaXMuX2xvYWRlZD1bXSx0aGlzLl9oYW5kbGVycz17XCJpbml0
5627aWFsaXplZC5vd2wuY2Fyb3VzZWwgY2hhbmdlLm93bC5jYXJvdXNlbCByZXNpemVkLm93bC5jYXJvdXNlbFwiOmEucHJveHkoZnVuY3Rpb24oYil7aWYoYi5uYW1lc3BhY2UmJnRoaXMuX2NvcmUuc2V0dGluZ3MmJnRoaXMuX2NvcmUuc2V0dGluZ3MubGF6eUxvYWQmJihiLnByb3BlcnR5JiZcInBvc2l0aW9uXCI9PWIucHJvcGVydHkubmFtZXx8XCJpbml0aWFsaXplZFwiPT1iLnR5cGUpKXt2YXIgYz10aGlzLl9jb3JlLnNldHRpbmdzLGU9Yy5jZW50ZXImJk1hdGguY2VpbChjLml0ZW1zLzIpfHxjLml0ZW1zLGY9Yy5jZW50ZXImJi0xKmV8fDAsZz0oYi5wcm9wZXJ0eSYmYi5wcm9wZXJ0eS52YWx1ZSE9PWQ/Yi5wcm9wZXJ0eS52YWx1ZTp0aGlzLl9jb3JlLmN1cnJlbnQoKSkrZixoPXRoaXMuX2NvcmUuY2xvbmVzKCkubGVuZ3RoLGk9YS5wcm94eShmdW5jdGlvbihhLGIpe3RoaXMubG9hZChiKX0sdGhpcyk7Zm9yKGMubGF6eUxvYWRFYWdlcj4wJiYoZSs9Yy5sYXp5TG9hZEVhZ2VyLGMubG9vcCYmKGctPWMubGF6eUxvYWRFYWdlcixlKyspKTtmKys8ZTspdGhpcy5sb2FkKGgvMit0aGlzLl9jb3JlLnJlbGF0aXZlKGcpKSxoJiZhLmVhY2godGhpcy5fY29yZS5jbG9uZXModGhpcy5fY29yZS5yZWxhdGl2ZShnKSksaSksZysrfX0sdGhpcyl9LHRoaXMuX2NvcmUub3B0aW9ucz1hLmV4dGVuZCh7fSxlLkRlZmF1bHRzLHRoaXMuX2NvcmUub3B0aW9ucyksdGhpcy5fY29yZS4kZWxlbWVudC5vbih0aGlzLl9oYW5kbGVycyl9O2UuRGVmYXVsdHM9e2xhenlMb2FkOiExLGxhenlMb2FkRWFnZXI6MH0sZS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihjKXt2YXIgZD10aGlzLl9jb3JlLiRzdGFnZS5jaGlsZHJlbigpLmVxKGMpLGU9ZCYmZC5maW5kKFwiLm93bC1sYXp5XCIpOyFlfHxhLmluQXJyYXkoZC5nZXQoMCksdGhpcy5fbG9hZGVkKT4tMXx8KGUuZWFjaChhLnByb3h5KGZ1bmN0aW9uKGMsZCl7dmFyIGUsZj1hKGQpLGc9Yi5kZXZpY2VQaXhlbFJhdGlvPjEmJmYuYXR0cihcImRhdGEtc3JjLXJldGluYVwiKXx8Zi5hdHRyKFwiZGF0YS1zcmNcIil8fGYuYXR0cihcImRhdGEtc3Jjc2V0XCIpO3RoaXMuX2NvcmUudHJpZ2dlcihcImxvYWRcIix7ZWxlbWVudDpmLHVybDpnfSxcImxhenlcIiksZi5pcyhcImltZ1wiKT9mLm9uZShcImxvYWQub3dsLmxhenlcIixhLnByb3h5KGZ1bmN0aW9uKCl7Zi5jc3MoXCJvcGFjaXR5XCIsMSksdGhpcy5fY29yZS50cmlnZ2VyKFwibG9hZGVkXCIse2VsZW1lbnQ6Zix1cmw6Z30sXCJsYXp5XCIpfSx0aGlzKSkuYXR0cihcInNyY1wiLGcpOmYuaXMoXCJzb3VyY2VcIik/Zi5vbmUoXCJsb2FkLm93bC5sYXp5XCIsYS5wcm94eShmdW5jdGlvbigpe3RoaXMuX2NvcmUudHJpZ2dlcihcImxvYWRlZFwiLHtlbGVtZW50OmYsdXJsOmd9LFwibGF6eVwiKX0sdGhpcykpLmF0dHIoXCJzcmNzZXRcIixnKTooZT1uZXcgSW1hZ2UsZS5vbmxvYWQ9YS5wcm94eShmdW5jdGlvbigpe2YuY3NzKHtcImJhY2tncm91bmQtaW1hZ2VcIjondXJsKFwiJytnKydcIiknLG9wYWNpdHk6XCIxXCJ9KSx0aGlzLl9jb3JlLnRyaWdnZXIoXCJsb2FkZWRcIix7ZWxlbWVudDpmLHVybDpnfSxcImxhenlcIil9LHRoaXMpLGUuc3JjPWcpfSx0aGlzKSksdGhpcy5fbG9hZGVkLnB1c2goZC5nZXQoMCkpKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBhLGI7Zm9yKGEgaW4gdGhpcy5oYW5kbGVycyl0aGlzLl9jb3JlLiRlbGVtZW50Lm9mZihhLHRoaXMuaGFuZGxlcnNbYV0pO2ZvcihiIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKVwiZnVuY3Rpb25cIiE9dHlwZW9mIHRoaXNbYl0mJih0aGlzW2JdPW51bGwpfSxhLmZuLm93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnMuTGF6eT1lfSh3aW5kb3cuWmVwdG98fHdpbmRvdy5qUXVlcnksd2luZG93LGRvY3VtZW50KSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1mdW5jdGlvbihjKXt0aGlzLl9jb3JlPWMsdGhpcy5fcHJldmlvdXNIZWlnaHQ9bnVsbCx0aGlzLl9oYW5kbGVycz17XCJpbml0aWFsaXplZC5vd2wuY2Fyb3VzZWwgcmVmcmVzaGVkLm93bC5jYXJvdXNlbFwiOmEucHJveHkoZnVuY3Rpb24oYSl7YS5uYW1lc3BhY2UmJnRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b0hlaWdodCYmdGhpcy51cGRhdGUoKX0sdGhpcyksXCJjaGFuZ2VkLm93bC5jYXJvdXNlbFwiOmEucHJveHkoZnVuY3Rpb24oYSl7YS5uYW1lc3BhY2UmJnRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b0hlaWdodCYmXCJwb3NpdGlvblwiPT09YS5wcm9wZXJ0eS5uYW1lJiZ0aGlzLnVwZGF0ZSgpfSx0aGlzKSxcImxvYWRlZC5vd2wubGF6eVwiOmEucHJveHkoZnVuY3Rpb24oYSl7YS5uYW1lc3BhY2UmJnRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b0hlaWdodCYmYS5lbGVtZW50LmNsb3Nlc3QoXCIuXCIrdGhpcy5fY29yZS5zZXR0aW5ncy5pdGVtQ2xhc3MpLmluZGV4KCk9PT10aGlzLl9jb3JlLmN1cnJlbnQoKSYmdGhpcy51cGRhdGUoKX0sdGhpcyl9LHRoaXMuX2NvcmUub3B0aW9ucz1hLmV4dGVuZCh7fSxlLkRlZmF1bHRzLHRoaXMuX2NvcmUub3B0aW9ucyksdGhpcy5fY29yZS4kZWxlbWVudC5vbih0aGlzLl9oYW5kbGVycyksdGhpcy5faW50ZXJ2YWxJZD1udWxsO3ZhciBkPXRoaXM7YShiKS5vbihcImxvYWRcIixmdW5jdGlvbigpe2QuX2NvcmUuc2V0dGluZ3MuYXV0b0hlaWdodCYmZC51cGRhdGUoKX0pLGEoYikucmVzaXplKGZ1bmN0aW9uKCl7ZC5fY29yZS5zZXR0aW5ncy5hdXRvSGVpZ2h0JiYobnVsbCE9ZC5faW50ZXJ2YWxJZCYmY2xlYXJUaW1lb3V0KGQuX2ludGVydmFsSWQpLGQuX2ludGVydmFsSWQ9c2V0VGltZW91dChmdW5jdGlvbigpe2QudXBkYXRlKCl9LDI1MCkpfSl9O2UuRGVmYXVsdHM9e2F1dG9IZWlnaHQ6ITEsYXV0b0hlaWdodENsYXNzOlwib3dsLWhlaWdodFwifSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3JlLl9jdXJyZW50LGM9Yit0aGlzLl9jb3JlLnNldHRpbmdzLml0ZW1zLGQ9dGhpcy5fY29yZS5zZXR0aW5ncy5sYXp5TG9hZCxlPXRoaXMuX2NvcmUuJHN0YWdlLmNoaWxkcmVuKCkudG9BcnJheSgpLnNsaWNlKGIsYyksZj1bXSxnPTA7YS5lYWNoKGUsZnVuY3Rpb24oYixjKXtmLnB1c2goYShjKS5oZWlnaHQoKSl9KSxnPU1hdGgubWF4LmFwcGx5KG51bGwsZiksZzw9MSYmZCYmdGhpcy5fcHJldmlvdXNIZWlnaHQmJihnPXRoaXMuX3ByZXZpb3VzSGVpZ2h0KSx0aGlzLl9wcmV2aW91c0hlaWdodD1nLHRoaXMuX2NvcmUuJHN0YWdlLnBhcmVudCgpLmhlaWdodChnKS5hZGRDbGFzcyh0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9IZWlnaHRDbGFzcyl9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYS
5627xiO2ZvcihhIGluIHRoaXMuX2hhbmRsZXJzKXRoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKGEsdGhpcy5faGFuZGxlcnNbYV0pO2ZvcihiIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKVwiZnVuY3Rpb25cIiE9dHlwZW9mIHRoaXNbYl0mJih0aGlzW2JdPW51bGwpfSxhLmZuLm93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnMuQXV0b0hlaWdodD1lfSh3aW5kb3cuWmVwdG98fHdpbmRvdy5qUXVlcnksd2luZG93LGRvY3VtZW50KSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1mdW5jdGlvbihiKXt0aGlzLl9jb3JlPWIsdGhpcy5fdmlkZW9zPXt9LHRoaXMuX3BsYXlpbmc9bnVsbCx0aGlzLl9oYW5kbGVycz17XCJpbml0aWFsaXplZC5vd2wuY2Fyb3VzZWxcIjphLnByb3h5KGZ1bmN0aW9uKGEpe2EubmFtZXNwYWNlJiZ0aGlzLl9jb3JlLnJlZ2lzdGVyKHt0eXBlOlwic3RhdGVcIixuYW1lOlwicGxheWluZ1wiLHRhZ3M6W1wiaW50ZXJhY3RpbmdcIl19KX0sdGhpcyksXCJyZXNpemUub3dsLmNhcm91c2VsXCI6YS5wcm94eShmdW5jdGlvbihhKXthLm5hbWVzcGFjZSYmdGhpcy5fY29yZS5zZXR0aW5ncy52aWRlbyYmdGhpcy5pc0luRnVsbFNjcmVlbigpJiZhLnByZXZlbnREZWZhdWx0KCl9LHRoaXMpLFwicmVmcmVzaGVkLm93bC5jYXJvdXNlbFwiOmEucHJveHkoZnVuY3Rpb24oYSl7YS5uYW1lc3BhY2UmJnRoaXMuX2NvcmUuaXMoXCJyZXNpemluZ1wiKSYmdGhpcy5fY29yZS4kc3RhZ2UuZmluZChcIi5jbG9uZWQgLm93bC12aWRlby1mcmFtZVwiKS5yZW1vdmUoKX0sdGhpcyksXCJjaGFuZ2VkLm93bC5jYXJvdXNlbFwiOmEucHJveHkoZnVuY3Rpb24oYSl7YS5uYW1lc3BhY2UmJlwicG9zaXRpb25cIj09PWEucHJvcGVydHkubmFtZSYmdGhpcy5fcGxheWluZyYmdGhpcy5zdG9wKCl9LHRoaXMpLFwicHJlcGFyZWQub3dsLmNhcm91c2VsXCI6YS5wcm94eShmdW5jdGlvbihiKXtpZihiLm5hbWVzcGFjZSl7dmFyIGM9YShiLmNvbnRlbnQpLmZpbmQoXCIub3dsLXZpZGVvXCIpO2MubGVuZ3RoJiYoYy5jc3MoXCJkaXNwbGF5XCIsXCJub25lXCIpLHRoaXMuZmV0Y2goYyxhKGIuY29udGVudCkpKX19LHRoaXMpfSx0aGlzLl9jb3JlLm9wdGlvbnM9YS5leHRlbmQoe30sZS5EZWZhdWx0cyx0aGlzLl9jb3JlLm9wdGlvbnMpLHRoaXMuX2NvcmUuJGVsZW1lbnQub24odGhpcy5faGFuZGxlcnMpLHRoaXMuX2NvcmUuJGVsZW1lbnQub24oXCJjbGljay5vd2wudmlkZW9cIixcIi5vd2wtdmlkZW8tcGxheS1pY29uXCIsYS5wcm94eShmdW5jdGlvbihhKXt0aGlzLnBsYXkoYSl9LHRoaXMpKX07ZS5EZWZhdWx0cz17dmlkZW86ITEsdmlkZW9IZWlnaHQ6ITEsdmlkZW9XaWR0aDohMX0sZS5wcm90b3R5cGUuZmV0Y2g9ZnVuY3Rpb24oYSxiKXt2YXIgYz1mdW5jdGlvbigpe3JldHVybiBhLmF0dHIoXCJkYXRhLXZpbWVvLWlkXCIpP1widmltZW9cIjphLmF0dHIoXCJkYXRhLXZ6YWFyLWlkXCIpP1widnphYXJcIjpcInlvdXR1YmVcIn0oKSxkPWEuYXR0cihcImRhdGEtdmltZW8taWRcIil8fGEuYXR0cihcImRhdGEteW91dHViZS1pZFwiKXx8YS5hdHRyKFwiZGF0YS12emFhci1pZFwiKSxlPWEuYXR0cihcImRhdGEtd2lkdGhcIil8fHRoaXMuX2NvcmUuc2V0dGluZ3MudmlkZW9XaWR0aCxmPWEuYXR0cihcImRhdGEtaGVpZ2h0XCIpfHx0aGlzLl9jb3JlLnNldHRpbmdzLnZpZGVvSGVpZ2h0LGc9YS5hdHRyKFwiaHJlZlwiKTtpZighZyl0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHZpZGVvIFVSTC5cIik7aWYoZD1nLm1hdGNoKC8oaHR0cDp8aHR0cHM6fClcXC9cXC8ocGxheWVyLnx3d3cufGFwcC4pPyh2aW1lb1xcLmNvbXx5b3V0dShiZVxcLmNvbXxcXC5iZXxiZVxcLmdvb2dsZWFwaXNcXC5jb218YmVcXC1ub2Nvb2tpZVxcLmNvbSl8dnphYXJcXC5jb20pXFwvKHZpZGVvXFwvfHZpZGVvc1xcL3xlbWJlZFxcL3xjaGFubmVsc1xcLy4rXFwvfGdyb3Vwc1xcLy4rXFwvfHdhdGNoXFw/dj18dlxcLyk/KFtBLVphLXowLTkuXyUtXSopKFxcJlxcUyspPy8pLGRbM10uaW5kZXhPZihcInlvdXR1XCIpPi0xKWM9XCJ5b3V0dWJlXCI7ZWxzZSBpZihkWzNdLmluZGV4T2YoXCJ2aW1lb1wiKT4tMSljPVwidmltZW9cIjtlbHNle2lmKCEoZFszXS5pbmRleE9mKFwidnphYXJcIik+LTEpKXRocm93IG5ldyBFcnJvcihcIlZpZGVvIFVSTCBub3Qgc3VwcG9ydGVkLlwiKTtjPVwidnphYXJcIn1kPWRbNl0sdGhpcy5fdmlkZW9zW2ddPXt0eXBlOmMsaWQ6ZCx3aWR0aDplLGhlaWdodDpmfSxiLmF0dHIoXCJkYXRhLXZpZGVvXCIsZyksdGhpcy50aHVtYm5haWwoYSx0aGlzLl92aWRlb3NbZ10pfSxlLnByb3RvdHlwZS50aHVtYm5haWw9ZnVuY3Rpb24oYixjKXt2YXIgZCxlLGYsZz1jLndpZHRoJiZjLmhlaWdodD9cIndpZHRoOlwiK2Mud2lkdGgrXCJweDtoZWlnaHQ6XCIrYy5oZWlnaHQrXCJweDtcIjpcIlwiLGg9Yi5maW5kKFwiaW1nXCIpLGk9XCJzcmNcIixqPVwiXCIsaz10aGlzLl9jb3JlLnNldHRpbmdzLGw9ZnVuY3Rpb24oYyl7ZT0nPGRpdiBjbGFzcz1cIm93bC12aWRlby1wbGF5LWljb25cIj48L2Rpdj4nLGQ9ay5sYXp5TG9hZD9hKFwiPGRpdi8+XCIse2NsYXNzOlwib3dsLXZpZGVvLXRuIFwiK2osc3JjVHlwZTpjfSk6YShcIjxkaXYvPlwiLHtjbGFzczpcIm93bC12aWRlby10blwiLHN0eWxlOlwib3BhY2l0eToxO2JhY2tncm91bmQtaW1hZ2U6dXJsKFwiK2MrXCIpXCJ9KSxiLmFmdGVyKGQpLGIuYWZ0ZXIoZSl9O2lmKGIud3JhcChhKFwiPGRpdi8+XCIse2NsYXNzOlwib3dsLXZpZGVvLXdyYXBwZXJcIixzdHlsZTpnfSkpLHRoaXMuX2NvcmUuc2V0dGluZ3MubGF6eUxvYWQmJihpPVwiZGF0YS1zcmNcIixqPVwib3dsLWxhenlcIiksaC5sZW5ndGgpcmV0dXJuIGwoaC5hdHRyKGkpKSxoLnJlbW92ZSgpLCExO1wieW91dHViZVwiPT09Yy50eXBlPyhmPVwiLy9pbWcueW91dHViZS5jb20vdmkvXCIrYy5pZCtcIi9ocWRlZmF1bHQuanBnXCIsbChmKSk6XCJ2aW1lb1wiPT09Yy50eXBlP2EuYWpheCh7dHlwZTpcIkdFVFwiLHVybDpcIi8vdmltZW8uY29tL2FwaS92Mi92aWRlby9cIitjLmlkK1wiLmpzb25cIixqc29ucDpcImNhbGxiYWNrXCIsZGF0YVR5cGU6XCJqc29ucFwiLHN1Y2Nlc3M6ZnVuY3Rpb24oYSl7Zj1hWzBdLnRodW1ibmFpbF9sYXJnZSxsKGYpfX0pOlwidnphYXJcIj09PWMudHlwZSYmYS5hamF4KHt0eXBlOlwiR0VUXCIsdXJsOlwiLy92emFhci5jb20vYXBpL3ZpZGVvcy9cIitjLmlkK1wiLmpzb25cIixqc29ucDpcImNhbGxiYWNrXCIsZGF0YVR5cGU6XCJqc29ucFwiLHN1Y2Nlc3M6ZnVuY3Rpb24oYSl7Zj1hLmZyYW1lZ3JhYl91cmwsbChmKX19KX0sZS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3RoaXMuX2NvcmUudHJpZ2dlcihcInN0b3BcIixudWxsLFwidmlkZW9cIiksdGhpcy5fcGxheWluZy5maW5kKFwiLm93bC12aWRlby1mcmFtZVwiKS5yZW1vdmUoKSx0aGlzLl9wbGF5aW5nLnJlbW92ZUNsYXNzKFwib3dsLXZpZGVvLXBsYXlpbmdcIiksdGhpcy5fcGxheWluZz1udWxsLHRoaXMuX2NvcmUubGVhdmUoXCJwbGF5aW5nXCIpLHRoaXMuX2NvcmUudHJpZ2dlcihcInN0b3BwZWRcIixudWxsLFwidmlkZW9cIil9LGUucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oYil7dmFyIGMsZD1hKGIudGFyZ2V0KSxlPWQuY2xvc2VzdChcIi5cIit0aGlzLl9jb3JlLnNldHRpbmdzLml0ZW1DbGFzcyksZj10aGlzLl92aWRlb3NbZS5hdHRyKFwiZGF0YS12aWRlb1wiKV0sZz1mLndpZHRofHxcIjEwMCVcIixoPWYuaGVpZ2h0fHx0aGlzLl9jb3JlLiRzdGFnZS5oZWlnaHQoKTt0aGlzLl9wbGF5aW5nfHwodGhpcy5fY29yZS5lbnRlcihcInBsYXlpbmdcIiksdGhpcy5fY29yZS50cmlnZ2VyKFwicGxheVwiLG51bGwsXCJ2aWRlb1wiKSxlPXRoaXMuX2NvcmUuaXRlbXModGhpcy5fY29yZS5yZWxhdGl2ZS
5627hlLmluZGV4KCkpKSx0aGlzLl9jb3JlLnJlc2V0KGUuaW5kZXgoKSksYz1hKCc8aWZyYW1lIGZyYW1lYm9yZGVyPVwiMFwiIGFsbG93ZnVsbHNjcmVlbiBtb3phbGxvd2Z1bGxzY3JlZW4gd2Via2l0QWxsb3dGdWxsU2NyZWVuID48L2lmcmFtZT4nKSxjLmF0dHIoXCJoZWlnaHRcIixoKSxjLmF0dHIoXCJ3aWR0aFwiLGcpLFwieW91dHViZVwiPT09Zi50eXBlP2MuYXR0cihcInNyY1wiLFwiLy93d3cueW91dHViZS5jb20vZW1iZWQvXCIrZi5pZCtcIj9hdXRvcGxheT0xJnJlbD0wJnY9XCIrZi5pZCk6XCJ2aW1lb1wiPT09Zi50eXBlP2MuYXR0cihcInNyY1wiLFwiLy9wbGF5ZXIudmltZW8uY29tL3ZpZGVvL1wiK2YuaWQrXCI/YXV0b3BsYXk9MVwiKTpcInZ6YWFyXCI9PT1mLnR5cGUmJmMuYXR0cihcInNyY1wiLFwiLy92aWV3LnZ6YWFyLmNvbS9cIitmLmlkK1wiL3BsYXllcj9hdXRvcGxheT10cnVlXCIpLGEoYykud3JhcCgnPGRpdiBjbGFzcz1cIm93bC12aWRlby1mcmFtZVwiIC8+JykuaW5zZXJ0QWZ0ZXIoZS5maW5kKFwiLm93bC12aWRlb1wiKSksdGhpcy5fcGxheWluZz1lLmFkZENsYXNzKFwib3dsLXZpZGVvLXBsYXlpbmdcIikpfSxlLnByb3RvdHlwZS5pc0luRnVsbFNjcmVlbj1mdW5jdGlvbigpe3ZhciBiPWMuZnVsbHNjcmVlbkVsZW1lbnR8fGMubW96RnVsbFNjcmVlbkVsZW1lbnR8fGMud2Via2l0RnVsbHNjcmVlbkVsZW1lbnQ7cmV0dXJuIGImJmEoYikucGFyZW50KCkuaGFzQ2xhc3MoXCJvd2wtdmlkZW8tZnJhbWVcIil9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYSxiO3RoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKFwiY2xpY2sub3dsLnZpZGVvXCIpO2ZvcihhIGluIHRoaXMuX2hhbmRsZXJzKXRoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKGEsdGhpcy5faGFuZGxlcnNbYV0pO2ZvcihiIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKVwiZnVuY3Rpb25cIiE9dHlwZW9mIHRoaXNbYl0mJih0aGlzW2JdPW51bGwpfSxhLmZuLm93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnMuVmlkZW89ZX0od2luZG93LlplcHRvfHx3aW5kb3cualF1ZXJ5LHdpbmRvdyxkb2N1bWVudCksZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ZnVuY3Rpb24oYil7dGhpcy5jb3JlPWIsdGhpcy5jb3JlLm9wdGlvbnM9YS5leHRlbmQoe30sZS5EZWZhdWx0cyx0aGlzLmNvcmUub3B0aW9ucyksdGhpcy5zd2FwcGluZz0hMCx0aGlzLnByZXZpb3VzPWQsdGhpcy5uZXh0PWQsdGhpcy5oYW5kbGVycz17XCJjaGFuZ2Uub3dsLmNhcm91c2VsXCI6YS5wcm94eShmdW5jdGlvbihhKXthLm5hbWVzcGFjZSYmXCJwb3NpdGlvblwiPT1hLnByb3BlcnR5Lm5hbWUmJih0aGlzLnByZXZpb3VzPXRoaXMuY29yZS5jdXJyZW50KCksdGhpcy5uZXh0PWEucHJvcGVydHkudmFsdWUpfSx0aGlzKSxcImRyYWcub3dsLmNhcm91c2VsIGRyYWdnZWQub3dsLmNhcm91c2VsIHRyYW5zbGF0ZWQub3dsLmNhcm91c2VsXCI6YS5wcm94eShmdW5jdGlvbihhKXthLm5hbWVzcGFjZSYmKHRoaXMuc3dhcHBpbmc9XCJ0cmFuc2xhdGVkXCI9PWEudHlwZSl9LHRoaXMpLFwidHJhbnNsYXRlLm93bC5jYXJvdXNlbFwiOmEucHJveHkoZnVuY3Rpb24oYSl7YS5uYW1lc3BhY2UmJnRoaXMuc3dhcHBpbmcmJih0aGlzLmNvcmUub3B0aW9ucy5hbmltYXRlT3V0fHx0aGlzLmNvcmUub3B0aW9ucy5hbmltYXRlSW4pJiZ0aGlzLnN3YXAoKX0sdGhpcyl9LHRoaXMuY29yZS4kZWxlbWVudC5vbih0aGlzLmhhbmRsZXJzKX07ZS5EZWZhdWx0cz17YW5pbWF0ZU91dDohMSxcbiBhbmltYXRlSW46ITF9LGUucHJvdG90eXBlLnN3YXA9ZnVuY3Rpb24oKXtpZigxPT09dGhpcy5jb3JlLnNldHRpbmdzLml0ZW1zJiZhLnN1cHBvcnQuYW5pbWF0aW9uJiZhLnN1cHBvcnQudHJhbnNpdGlvbil7dGhpcy5jb3JlLnNwZWVkKDApO3ZhciBiLGM9YS5wcm94eSh0aGlzLmNsZWFyLHRoaXMpLGQ9dGhpcy5jb3JlLiRzdGFnZS5jaGlsZHJlbigpLmVxKHRoaXMucHJldmlvdXMpLGU9dGhpcy5jb3JlLiRzdGFnZS5jaGlsZHJlbigpLmVxKHRoaXMubmV4dCksZj10aGlzLmNvcmUuc2V0dGluZ3MuYW5pbWF0ZUluLGc9dGhpcy5jb3JlLnNldHRpbmdzLmFuaW1hdGVPdXQ7dGhpcy5jb3JlLmN1cnJlbnQoKSE9PXRoaXMucHJldmlvdXMmJihnJiYoYj10aGlzLmNvcmUuY29vcmRpbmF0ZXModGhpcy5wcmV2aW91cyktdGhpcy5jb3JlLmNvb3JkaW5hdGVzKHRoaXMubmV4dCksZC5vbmUoYS5zdXBwb3J0LmFuaW1hdGlvbi5lbmQsYykuY3NzKHtsZWZ0OmIrXCJweFwifSkuYWRkQ2xhc3MoXCJhbmltYXRlZCBvd2wtYW5pbWF0ZWQtb3V0XCIpLmFkZENsYXNzKGcpKSxmJiZlLm9uZShhLnN1cHBvcnQuYW5pbWF0aW9uLmVuZCxjKS5hZGRDbGFzcyhcImFuaW1hdGVkIG93bC1hbmltYXRlZC1pblwiKS5hZGRDbGFzcyhmKSl9fSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbihiKXthKGIudGFyZ2V0KS5jc3Moe2xlZnQ6XCJcIn0pLnJlbW92ZUNsYXNzKFwiYW5pbWF0ZWQgb3dsLWFuaW1hdGVkLW91dCBvd2wtYW5pbWF0ZWQtaW5cIikucmVtb3ZlQ2xhc3ModGhpcy5jb3JlLnNldHRpbmdzLmFuaW1hdGVJbikucmVtb3ZlQ2xhc3ModGhpcy5jb3JlLnNldHRpbmdzLmFuaW1hdGVPdXQpLHRoaXMuY29yZS5vblRyYW5zaXRpb25FbmQoKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBhLGI7Zm9yKGEgaW4gdGhpcy5oYW5kbGVycyl0aGlzLmNvcmUuJGVsZW1lbnQub2ZmKGEsdGhpcy5oYW5kbGVyc1thXSk7Zm9yKGIgaW4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpXCJmdW5jdGlvblwiIT10eXBlb2YgdGhpc1tiXSYmKHRoaXNbYl09bnVsbCl9LGEuZm4ub3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5BbmltYXRlPWV9KHdpbmRvdy5aZXB0b3x8d2luZG93LmpRdWVyeSx3aW5kb3csZG9jdW1lbnQpLGZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWZ1bmN0aW9uKGIpe3RoaXMuX2NvcmU9Yix0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0wLHRoaXMuX3RpbWVvdXQ9MCx0aGlzLl9wYXVzZWQ9ITAsdGhpcy5faGFuZGxlcnM9e1wiY2hhbmdlZC5vd2wuY2Fyb3VzZWxcIjphLnByb3h5KGZ1bmN0aW9uKGEpe2EubmFtZXNwYWNlJiZcInNldHRpbmdzXCI9PT1hLnByb3BlcnR5Lm5hbWU/dGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvcGxheT90aGlzLnBsYXkoKTp0aGlzLnN0b3AoKTphLm5hbWVzcGFjZSYmXCJwb3NpdGlvblwiPT09YS5wcm9wZXJ0eS5uYW1lJiZ0aGlzLl9wYXVzZWQmJih0aGlzLl90
5627aW1lPTApfSx0aGlzKSxcImluaXRpYWxpemVkLm93bC5jYXJvdXNlbFwiOmEucHJveHkoZnVuY3Rpb24oYSl7YS5uYW1lc3BhY2UmJnRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b3BsYXkmJnRoaXMucGxheSgpfSx0aGlzKSxcInBsYXkub3dsLmF1dG9wbGF5XCI6YS5wcm94eShmdW5jdGlvbihhLGIsYyl7YS5uYW1lc3BhY2UmJnRoaXMucGxheShiLGMpfSx0aGlzKSxcInN0b3Aub3dsLmF1dG9wbGF5XCI6YS5wcm94eShmdW5jdGlvbihhKXthLm5hbWVzcGFjZSYmdGhpcy5zdG9wKCl9LHRoaXMpLFwibW91c2VvdmVyLm93bC5hdXRvcGxheVwiOmEucHJveHkoZnVuY3Rpb24oKXt0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5SG92ZXJQYXVzZSYmdGhpcy5fY29yZS5pcyhcInJvdGF0aW5nXCIpJiZ0aGlzLnBhdXNlKCl9LHRoaXMpLFwibW91c2VsZWF2ZS5vd2wuYXV0b3BsYXlcIjphLnByb3h5KGZ1bmN0aW9uKCl7dGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvcGxheUhvdmVyUGF1c2UmJnRoaXMuX2NvcmUuaXMoXCJyb3RhdGluZ1wiKSYmdGhpcy5wbGF5KCl9LHRoaXMpLFwidG91Y2hzdGFydC5vd2wuY29yZVwiOmEucHJveHkoZnVuY3Rpb24oKXt0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5SG92ZXJQYXVzZSYmdGhpcy5fY29yZS5pcyhcInJvdGF0aW5nXCIpJiZ0aGlzLnBhdXNlKCl9LHRoaXMpLFwidG91Y2hlbmQub3dsLmNvcmVcIjphLnByb3h5KGZ1bmN0aW9uKCl7dGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvcGxheUhvdmVyUGF1c2UmJnRoaXMucGxheSgpfSx0aGlzKX0sdGhpcy5fY29yZS4kZWxlbWVudC5vbih0aGlzLl9oYW5kbGVycyksdGhpcy5fY29yZS5vcHRpb25zPWEuZXh0ZW5kKHt9LGUuRGVmYXVsdHMsdGhpcy5fY29yZS5vcHRpb25zKX07ZS5EZWZhdWx0cz17YXV0b3BsYXk6ITEsYXV0b3BsYXlUaW1lb3V0OjVlMyxhdXRvcGxheUhvdmVyUGF1c2U6ITEsYXV0b3BsYXlTcGVlZDohMX0sZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24oZCl7dGhpcy5fY2FsbD1iLnNldFRpbWVvdXQoYS5wcm94eSh0aGlzLl9uZXh0LHRoaXMsZCksdGhpcy5fdGltZW91dCooTWF0aC5yb3VuZCh0aGlzLnJlYWQoKS90aGlzLl90aW1lb3V0KSsxKS10aGlzLnJlYWQoKSksdGhpcy5fY29yZS5pcyhcImludGVyYWN0aW5nXCIpfHxjLmhpZGRlbnx8dGhpcy5fY29yZS5uZXh0KGR8fHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b3BsYXlTcGVlZCl9LGUucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKS10aGlzLl90aW1lfSxlLnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKGMsZCl7dmFyIGU7dGhpcy5fY29yZS5pcyhcInJvdGF0aW5nXCIpfHx0aGlzLl9jb3JlLmVudGVyKFwicm90YXRpbmdcIiksYz1jfHx0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5VGltZW91dCxlPU1hdGgubWluKHRoaXMuX3RpbWUlKHRoaXMuX3RpbWVvdXR8fGMpLGMpLHRoaXMuX3BhdXNlZD8odGhpcy5fdGltZT10aGlzLnJlYWQoKSx0aGlzLl9wYXVzZWQ9ITEpOmIuY2xlYXJUaW1lb3V0KHRoaXMuX2NhbGwpLHRoaXMuX3RpbWUrPXRoaXMucmVhZCgpJWMtZSx0aGlzLl90
5627aW1lb3V0PWMsdGhpcy5fY2FsbD1iLnNldFRpbWVvdXQoYS5wcm94eSh0aGlzLl9uZXh0LHRoaXMsZCksYy1lKX0sZS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3RoaXMuX2NvcmUuaXMoXCJyb3RhdGluZ1wiKSYmKHRoaXMuX3RpbWU9MCx0aGlzLl9wYXVzZWQ9ITAsYi5jbGVhclRpbWVvdXQodGhpcy5fY2FsbCksdGhpcy5fY29yZS5sZWF2ZShcInJvdGF0aW5nXCIpKX0sZS5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLl9jb3JlLmlzKFwicm90YXRpbmdcIikmJiF0aGlzLl9wYXVzZWQmJih0aGlzLl90aW1lPXRoaXMucmVhZCgpLHRoaXMuX3BhdXNlZD0hMCxiLmNsZWFyVGltZW91dCh0aGlzLl9jYWxsKSl9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYSxiO3RoaXMuc3RvcCgpO2ZvcihhIGluIHRoaXMuX2hhbmRsZXJzKXRoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKGEsdGhpcy5faGFuZGxlcnNbYV0pO2ZvcihiIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKVwiZnVuY3Rpb25cIiE9dHlwZW9mIHRoaXNbYl0mJih0aGlzW2JdPW51bGwpfSxhLmZuLm93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnMuYXV0b3BsYXk9ZX0od2luZG93LlplcHRvfHx3aW5kb3cualF1ZXJ5LHdpbmRvdyxkb2N1bWVudCksZnVuY3Rpb24oYSxiLGMsZCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9ZnVuY3Rpb24oYil7dGhpcy5fY29yZT1iLHRoaXMuX2luaXRpYWxpemVkPSExLHRoaXMuX3BhZ2VzPVtdLHRoaXMuX2NvbnRyb2xzPXt9LHRoaXMuX3RlbXBsYXRlcz1bXSx0aGlzLiRlbGVtZW50PXRoaXMuX2NvcmUuJGVsZW1lbnQsdGhpcy5fb3ZlcnJpZGVzPXtuZXh0OnRoaXMuX2NvcmUubmV4dCxwcmV2OnRoaXMuX2NvcmUucHJldix0bzp0aGlzLl9jb3JlLnRvfSx0aGlzLl9oYW5kbGVycz17XCJwcmVwYXJlZC5vd2wuY2Fyb3VzZWxcIjphLnByb3h5KGZ1bmN0aW9uKGIpe2IubmFtZXNwYWNlJiZ0aGlzLl9jb3JlLnNldHRpbmdzLmRvdHNEYXRhJiZ0aGlzLl90ZW1wbGF0ZXMucHVzaCgnPGRpdiBjbGFzcz1cIicrdGhpcy5fY29yZS5zZXR0aW5ncy5kb3RDbGFzcysnXCI+JythKGIuY29udGVudCkuZmluZChcIltkYXRhLWRvdF1cIikuYWRkQmFjayhcIltkYXRhLWRvdF1cIikuYXR0cihcImRhdGEtZG90XCIpK1wiPC9kaXY+XCIpfSx0aGlzKSxcImFkZGVkLm93bC5jYXJvdXNlbFwiOmEucHJveHkoZnVuY3Rpb24oYSl7YS5uYW1lc3BhY2UmJnRoaXMuX2NvcmUuc2V0dGluZ3MuZG90c0RhdGEmJnRoaXMuX3RlbXBsYXRlcy5zcGxpY2UoYS5wb3NpdGlvbiwwLHRoaXMuX3RlbXBsYXRlcy5wb3AoKSl9LHRoaXMpLFwicmVtb3ZlLm93bC5jYXJvdXNlbFwiOmEucHJveHkoZnVuY3Rpb24oYSl7YS5uYW1lc3BhY2UmJnRoaXMuX2NvcmUuc2V0dGluZ3MuZG90c0RhdGEmJnRoaXMuX3RlbXBsYXRlcy5zcGxpY2UoYS5wb3NpdGlvbiwxKX0sdGhpcyksXCJjaGFuZ2VkLm93bC5jYXJvdXNlbFwiOmEucHJveHkoZnVuY3Rpb24oYSl7YS5uYW1lc3BhY2UmJlwicG9zaXRpb25cIj09YS5wcm9wZXJ0eS5uYW1lJiZ0aGlzLmRyYXcoKX0sdGhpcyksXCJpbml0aWFsaXplZC5vd2wuY2Fyb3VzZWxcIjphLnByb3h5KGZ1bmN0aW9uKGEpe2EubmFtZXNwYWNlJiYhdGhpcy5faW5pdGlhbGl6ZWQmJih0aGlzLl9jb3JlLnRyaWdnZXIoXCJpbml0aWFsaXplXCIsbnVsbCxcIm5hdmlnYXRpb25cIiksdGhpcy5pbml0aWFsaXplKCksdGhpcy51cGRhdGUoKSx0aGlzLmRyYXcoKSx0aGlzLl9pbml0aWFsaXplZD0hMCx0aGlzLl9jb3JlLnRyaWdnZXIoXCJpbml0aWFsaXplZFwiLG51bGwsXCJuYXZpZ2F0aW9uXCIpKX0sdGhpcyksXCJyZWZyZXNoZWQub3dsLmNhcm91c2VsXCI6YS5wcm94eShmdW5jdGlvbihhKXthLm5hbWVzcGFjZSYmdGhpcy5faW5pdGlhbGl6ZWQmJih0aGlzLl9jb3JlLnRyaWdnZXIoXCJyZWZyZXNoXCIsbnVsbCxcIm5hdmlnYXRpb25cIiksdGhpcy51cGRhdGUoKSx0aGlzLmRyYXcoKSx0aGlzLl9jb3JlLnRyaWdnZXIoXCJyZWZyZXNoZWRcIixudWxsLFwibmF2aWdhdGlvblwiKSl9LHRoaXMpfSx0aGlzLl9jb3JlLm9wdGlvbnM9YS5leHRlbmQoe30sZS5EZWZhdWx0cyx0aGlzLl9jb3JlLm9wdGlvbnMpLHRoaXMuJGVsZW1lbnQub24odGhpcy5faGFuZGxlcnMpfTtlLkRlZmF1bHRzPXtuYXY6ITEsbmF2VGV4dDpbJzxzcGFuIGFyaWEtbGFiZWw9XCJQcmV2aW91c1wiPiYjeDIwMzk7PC9zcGFuPicsJzxzcGFuIGFyaWEtbGFiZWw9XCJOZXh0XCI+JiN4MjAzYTs8L3NwYW4+J10sbmF2U3BlZWQ6ITEsbmF2RWxlbWVudDonYnV0dG9uIHR5cGU9XCJidXR0b25cIiByb2xlPVwicHJlc2VudGF0aW9uXCInLG5hdkNvbnRhaW5lcjohMSxuYXZDb250YWluZXJDbGFzczpcIm93bC1uYXZcIixuYXZDbGFzczpbXCJvd2wtcHJldlwiLFwib3dsLW5leHRcIl0sc2xpZGVCeToxLGRvdENsYXNzOlwib3dsLWRvdFwiLGRvdHNDbGFzczpcIm93bC1kb3RzXCIsZG90czohMCxkb3RzRWFjaDohMSxkb3RzRGF0YTohMSxkb3RzU3BlZWQ6ITEsZG90c0NvbnRhaW5lcjohMX0sZS5wcm90b3R5cGUuaW5pdGlhbGl6ZT1mdW5jdGlvbigpe3ZhciBiLGM9dGhpcy5fY29yZS5zZXR0aW5nczt0aGlzLl9jb250cm9scy4kcmVsYXRpdmU9KGMubmF2Q29udGFpbmVyP2EoYy5uYXZDb250YWluZXIpOmEoXCI8ZGl2PlwiKS5hZGRDbGFzcyhjLm5hdkNvbnRhaW5lckNsYXNzKS5hcHBlbmRUbyh0aGlzLiRlbGVtZW50KSkuYWRkQ2xhc3MoXCJkaXNhYmxlZFwiKSx0aGlzLl9jb250cm9scy4kcHJldmlvdXM9YShcIjxcIitjLm5hdkVsZW1lbnQrXCI+XCIpLmFkZENsYXNzKGMubmF2Q2xhc3NbMF0pLmh0bWwoYy5uYXZUZXh0WzBdKS5wcmVwZW5kVG8odGhpcy5fY29udHJvbHMuJHJlbGF0aXZlKS5vbihcImNsaWNrXCIsYS5wcm94eShmdW5jdGlvbihhKXt0aGlzLnByZXYoYy5uYXZTcGVlZCl9LHRoaXMpKSx0aGlzLl9jb250cm9scy4kbmV4dD1hKFwiPFwiK2MubmF2RWxlbWVudCtcIj5cIikuYWRkQ2xhc3MoYy5uYXZDbGFzc1sxXSkuaHRtbChjLm5hdlRleHRbMV0pLmFwcGVuZFRvKHRoaXMuX2NvbnRyb2xzLiRyZWxhdGl2ZSkub24oXCJjbGlja1wiLGEucHJveHkoZnVuY3Rpb24oYSl7dGhpcy5uZXh0KGMubmF2U3BlZWQpfSx0aGlzKSksYy5kb3RzRGF0YXx8KHRoaXMuX3RlbXBsYXRlcz1bYSgnPGJ1dHRvbiByb2xlPVwiYnV0dG9uXCI+JykuYWRkQ2xhc3MoYy5kb3RDbGFzcykuYXBwZW5kKGEoXCI8c3Bhbj5cIikpLnByb3AoXCJvdXRlckhUTUxcIildKSx0aGlzLl9jb250cm9scy4kYWJzb2x1dGU9KGMuZG90c0NvbnRhaW5lcj9hKGMuZG90c0NvbnRhaW5lcik6YShcIjxkaXY+XCIpLmFkZENsYXNzKGMuZG90c0NsYXNzKS5hcHBlbmRUbyh0aGlzLiRlbGVtZW50KSkuYWRk
5627Q2xhc3MoXCJkaXNhYmxlZFwiKSx0aGlzLl9jb250cm9scy4kYWJzb2x1dGUub24oXCJjbGlja1wiLFwiYnV0dG9uXCIsYS5wcm94eShmdW5jdGlvbihiKXt2YXIgZD1hKGIudGFyZ2V0KS5wYXJlbnQoKS5pcyh0aGlzLl9jb250cm9scy4kYWJzb2x1dGUpP2EoYi50YXJnZXQpLmluZGV4KCk6YShiLnRhcmdldCkucGFyZW50KCkuaW5kZXgoKTtiLnByZXZlbnREZWZhdWx0KCksdGhpcy50byhkLGMuZG90c1NwZWVkKX0sdGhpcykpO2ZvcihiIGluIHRoaXMuX292ZXJyaWRlcyl0aGlzLl9jb3JlW2JdPWEucHJveHkodGhpc1tiXSx0aGlzKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBhLGIsYyxkLGU7ZT10aGlzLl9jb3JlLnNldHRpbmdzO2ZvcihhIGluIHRoaXMuX2hhbmRsZXJzKXRoaXMuJGVsZW1lbnQub2ZmKGEsdGhpcy5faGFuZGxlcnNbYV0pO2ZvcihiIGluIHRoaXMuX2NvbnRyb2xzKVwiJHJlbGF0aXZlXCI9PT1iJiZlLm5hdkNvbnRhaW5lcj90aGlzLl9jb250cm9sc1tiXS5odG1sKFwiXCIpOnRoaXMuX2NvbnRyb2xzW2JdLnJlbW92ZSgpO2ZvcihkIGluIHRoaXMub3ZlcmlkZXMpdGhpcy5fY29yZVtkXT10aGlzLl9vdmVycmlkZXNbZF07Zm9yKGMgaW4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpXCJmdW5jdGlvblwiIT10eXBlb2YgdGhpc1tjXSYmKHRoaXNbY109bnVsbCl9LGUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBhLGIsYyxkPXRoaXMuX2NvcmUuY2xvbmVzKCkubGVuZ3RoLzIsZT1kK3RoaXMuX2NvcmUuaXRlbXMoKS5sZW5ndGgsZj10aGlzLl9jb3JlLm1heGltdW0oITApLGc9dGhpcy5fY29yZS5zZXR0aW5ncyxoPWcuY2VudGVyfHxnLmF1dG9XaWR0aHx8Zy5kb3RzRGF0YT8xOmcuZG90c0VhY2h8fGcuaXRlbXM7aWYoXCJwYWdlXCIhPT1nLnNsaWRlQnkmJihnLnNsaWRlQnk9TWF0aC5taW4oZy5zbGlkZUJ5LGcuaXRlbXMpKSxnLmRvdHN8fFwicGFnZVwiPT1nLnNsaWRlQnkpZm9yKHRoaXMuX3BhZ2VzPVtdLGE9ZCxiPTAsYz0wO2E8ZTthKyspe2lmKGI+PWh8fDA9PT1iKXtpZih0aGlzLl9wYWdlcy5wdXNoKHtzdGFydDpNYXRoLm1pbihmLGEtZCksZW5kOmEtZCtoLTF9KSxNYXRoLm1pbihmLGEtZCk9PT1mKWJyZWFrO2I9MCwrK2N9Yis9dGhpcy5fY29yZS5tZXJnZXJzKHRoaXMuX2NvcmUucmVsYXRpdmUoYSkpfX0sZS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe3ZhciBiLGM9dGhpcy5fY29yZS5zZXR0aW5ncyxkPXRoaXMuX2NvcmUuaXRlbXMoKS5sZW5ndGg8PWMuaXRlbXMsZT10aGlzLl9jb3JlLnJlbGF0aXZlKHRoaXMuX2NvcmUuY3VycmVudCgpKSxmPWMubG9vcHx8Yy5yZXdpbmQ7dGhpcy5fY29udHJvbHMuJHJlbGF0aXZlLnRvZ2dsZUNsYXNzKFwiZGlzYWJsZWRcIiwhYy5uYXZ8fGQpLGMubmF2JiYodGhpcy5fY29udHJvbHMuJHByZXZpb3VzLnRvZ2dsZUNsYXNzKFwiZGlzYWJsZWRcIiwhZiYmZTw9dGhpcy5fY29yZS5taW5pbXVtKCEwKSksdGhpcy5fY29udHJvbHMuJG5leHQudG9nZ2xlQ2xhc3MoXCJkaXNhYmxlZFwiLCFmJiZlPj10aGlzLl9jb3JlLm1heGltdW0oITApKSksdGhpcy5fY29udHJvbHMuJGFic29sdXRlLnRvZ2dsZUNsYXNzKFwiZGlzYWJsZWRcIiwhYy5kb3RzfHxkKSxjLmRvdHMmJihiPXRoaXMuX3BhZ2VzLmxlbmd0aC10aGlzLl9jb250cm9scy4kYWJzb2x1dGUuY2hpbGRyZW4oKS5sZW5ndGgsYy5kb3RzRGF0YSYmMCE9PWI/dGhpcy5fY29udHJvbHMuJGFic29sdXRlLmh0bWwodGhpcy5fdGVtcGxhdGVzLmpvaW4oXCJcIikpOmI+MD90aGlzLl9jb250cm9scy4kYWJzb2x1dGUuYXBwZW5kKG5ldyBBcnJheShiKzEpLmpvaW4odGhpcy5fdGVtcGxhdGVzWzBdKSk6YjwwJiZ0aGlzLl9jb250cm9scy4kYWJzb2x1dGUuY2hpbGRyZW4oKS5zbGljZShiKS5yZW1vdmUoKSx0aGlzLl9jb250cm9scy4kYWJzb2x1dGUuZmluZChcIi5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIiksdGhpcy5fY29udHJvbHMuJGFic29sdXRlLmNoaWxkcmVuKCkuZXEoYS5pbkFycmF5KHRoaXMuY3VycmVudCgpLHRoaXMuX3BhZ2VzKSkuYWRkQ2xhc3MoXCJhY3RpdmVcIikpfSxlLnByb3RvdHlwZS5vblRyaWdnZXI9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5fY29yZS5zZXR0aW5ncztiLnBhZ2U9e2luZGV4OmEuaW5BcnJheSh0aGlzLmN1cnJlbnQoKSx0aGlzLl9wYWdlcyksY291bnQ6dGhpcy5fcGFnZXMubGVuZ3RoLHNpemU6YyYmKGMuY2VudGVyfHxjLmF1dG9XaWR0aHx8Yy5kb3RzRGF0YT8xOmMuZG90c0VhY2h8fGMuaXRlbXMpfX0sZS5wcm90b3R5cGUuY3VycmVudD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvcmUucmVsYXRpdmUodGhpcy5fY29yZS5jdXJyZW50KCkpO3JldHVybiBhLmdyZXAodGhpcy5fcGFnZXMsYS5wcm94eShmdW5jdGlvbihhLGMpe3JldHVybiBhLnN0YXJ0PD1iJiZhLmVuZD49Yn0sdGhpcykpLnBvcCgpfSxlLnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbihiKXt2YXIgYyxkLGU9dGhpcy5fY29yZS5zZXR0aW5ncztyZXR1cm5cInBhZ2VcIj09ZS5zbGlkZUJ5PyhjPWEuaW5BcnJheSh0aGlzLmN1cnJlbnQoKSx0aGlzLl9wYWdlcyksZD10aGlzLl9wYWdlcy5sZW5ndGgsYj8rK2M6LS1jLGM9dGhpcy5fcGFnZXNbKGMlZCtkKSVkXS5zdGFydCk6KGM9dGhpcy5fY29yZS5yZWxhdGl2ZSh0aGlzLl9jb3JlLmN1cnJlbnQoKSksZD10aGlzLl9jb3JlLml0ZW1zKCkubGVuZ3RoLGI/Yys9ZS5zbGlkZUJ5OmMtPWUuc2xpZGVCeSksY30sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihiKXthLnByb3h5KHRoaXMuX292ZXJyaWRlcy50byx0aGlzLl9jb3JlKSh0aGlzLmdldFBvc2l0aW9uKCEwKSxiKX0sZS5wcm90b3R5cGUucHJldj1mdW5jdGlvbihiKXthLnByb3h5KHRoaXMuX292ZXJyaWRlcy50byx0aGlzLl9jb3JlKSh0aGlzLmdldFBvc2l0aW9uKCExKSxiKX0sZS5wcm90b3R5cGUudG89ZnVuY3Rpb24oYixjLGQpe3ZhciBlOyFkJiZ0aGlzLl9wYWdlcy5sZW5ndGg/KGU9dGhpcy5fcGFnZXMubGVuZ3RoLGEucHJveHkodGhpcy5fb3ZlcnJpZGVzLnRvLHRoaXMuX2NvcmUpKHRoaXMuX3BhZ2VzWyhiJWUrZSklZV0uc3RhcnQsYykpOmEucHJveHkodGhpcy5fb3ZlcnJpZGVzLnRvLHRoaXMuX2NvcmUpKGIsYyl9LGEuZm4ub3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5OYXZpZ2F0aW9uPWV9KHdpbmRvdy5aZXB0b3x8d2luZG93LmpRdWVyeSx3aW5kb3csZG9jdW1lbnQpLGZ1bmN0aW9uKGEsYixjLGQpe1widXNlIHN0cmljdFwiO3ZhciBlPWZ1bmN0aW9uKGMpe3RoaXMuX2NvcmU9Yyx0aGlzLl9oYXNoZXM9e30sdGhpcy4kZWxlbWVudD10aGlzLl9jb3JlLiRlbGVtZW50LHRoaXMuX2hhbmRsZXJzPXtcImluaXRpYWxpemVkLm93bC5jYXJvdXNlbFwiOmEucHJveHkoZnVuY3Rpb24oYyl7Yy5uYW1lc3BhY2UmJlwiVVJMSGFzaFwiPT09dGhpcy5fY29yZS5zZXR0aW5ncy5zdGFydFBvc2l0aW9uJiZhKGIpLnRyaWdnZXIoXCJoYXNoY2hhbmdlLm93bC5uYXZpZ2F0aW9uXCIpfSx0aGlzKSxcInByZXBhcmVkLm93bC5jYXJvdXNlbFwiOmEucHJveHkoZnVuY3Rpb24oYil7aWYoYi5uYW1lc3BhY2Upe3ZhciBjPWEoYi5jb250ZW50KS5maW5kKFwiW2RhdGEtaGFzaF1cIikuYWRkQmFjayhcIltkYXRhLWhhc2hdXCIpLmF0dHIoXCJkYXRhLWhhc2hcIik7aWYoIWMpcmV0dXJuO3RoaXMuX2hhc2hlc1tjXT1iLmNvbnRlbn
5627R9fSx0aGlzKSxcImNoYW5nZWQub3dsLmNhcm91c2VsXCI6YS5wcm94eShmdW5jdGlvbihjKXtpZihjLm5hbWVzcGFjZSYmXCJwb3NpdGlvblwiPT09Yy5wcm9wZXJ0eS5uYW1lKXt2YXIgZD10aGlzLl9jb3JlLml0ZW1zKHRoaXMuX2NvcmUucmVsYXRpdmUodGhpcy5fY29yZS5jdXJyZW50KCkpKSxlPWEubWFwKHRoaXMuX2hhc2hlcyxmdW5jdGlvbihhLGIpe3JldHVybiBhPT09ZD9iOm51bGx9KS5qb2luKCk7aWYoIWV8fGIubG9jYXRpb24uaGFzaC5zbGljZSgxKT09PWUpcmV0dXJuO2IubG9jYXRpb24uaGFzaD1lfX0sdGhpcyl9LHRoaXMuX2NvcmUub3B0aW9ucz1hLmV4dGVuZCh7fSxlLkRlZmF1bHRzLHRoaXMuX2NvcmUub3B0aW9ucyksdGhpcy4kZWxlbWVudC5vbih0aGlzLl9oYW5kbGVycyksYShiKS5vbihcImhhc2hjaGFuZ2Uub3dsLm5hdmlnYXRpb25cIixhLnByb3h5KGZ1bmN0aW9uKGEpe3ZhciBjPWIubG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSksZT10aGlzLl9jb3JlLiRzdGFnZS5jaGlsZHJlbigpLGY9dGhpcy5faGFzaGVzW2NdJiZlLmluZGV4KHRoaXMuX2hhc2hlc1tjXSk7ZiE9PWQmJmYhPT10aGlzLl9jb3JlLmN1cnJlbnQoKSYmdGhpcy5fY29yZS50byh0aGlzLl9jb3JlLnJlbGF0aXZlKGYpLCExLCEwKX0sdGhpcykpfTtlLkRlZmF1bHRzPXtVUkxoYXNoTGlzdGVuZXI6ITF9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYyxkO2EoYikub2ZmKFwiaGFzaGNoYW5nZS5vd2wubmF2aWdhdGlvblwiKTtmb3IoYyBpbiB0aGlzLl9oYW5kbGVycyl0aGlzLl9jb3JlLiRlbGVtZW50Lm9mZihjLHRoaXMuX2hhbmRsZXJzW2NdKTtmb3IoZCBpbiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSlcImZ1bmN0aW9uXCIhPXR5cGVvZiB0aGlzW2RdJiYodGhpc1tkXT1udWxsKX0sYS5mbi5vd2xDYXJvdXNlbC5Db25zdHJ1Y3Rvci5QbHVnaW5zLkhhc2g9ZX0od2luZG93LlplcHRvfHx3aW5kb3cualF1ZXJ5LHdpbmRvdyxkb2N1bWVudCksZnVuY3Rpb24oYSxiLGMsZCl7ZnVuY3Rpb24gZShiLGMpe3ZhciBlPSExLGY9Yi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStiLnNsaWNlKDEpO3JldHVybiBhLmVhY2goKGIrXCIgXCIraC5qb2luKGYrXCIgXCIpK2YpLnNwbGl0KFwiIFwiKSxmdW5jdGlvbihhLGIpe2lmKGdbYl0hPT1kKXJldHVybiBlPSFjfHxiLCExfSksZX1mdW5jdGlvbiBmKGEpe3JldHVybiBlKGEsITApfXZhciBnPWEoXCI8c3VwcG9ydD5cIikuZ2V0KDApLnN0eWxlLGg9XCJXZWJraXQgTW96IE8gbXNcIi5zcGxpdChcIiBcIiksaT17dHJhbnNpdGlvbjp7ZW5kOntXZWJraXRUcmFuc2l0aW9uOlwid2Via2l0VHJhbnNpdGlvbkVuZFwiLE1velRyYW5zaXRpb246XCJ0cmFuc2l0aW9uZW5kXCIsT1RyYW5zaXRpb246XCJvVHJhbnNpdGlvbkVuZFwiLHRyYW5zaXRpb246XCJ0cmFuc2l0aW9uZW5kXCJ9fSxhbmltYXRpb246e2VuZDp7V2Via2l0QW5pbWF0aW9uOlwid2Via2l0QW5pbWF0aW9uRW5kXCIsTW96QW5pbWF0aW9uOlwiYW5pbWF0aW9uZW5kXCIsT0FuaW1hdGlvbjpcIm9BbmltYXRpb25FbmRcIixhbmltYXRpb246XCJhbmltYXRpb25lbmRcIn19fSxqPXtjc3N0cmFuc2Zvcm1zOmZ1bmN0aW9uKCl7cmV0dXJuISFlKFwidHJhbnNmb3JtXCIpfSxjc3N0cmFuc2Zvcm1zM2Q6ZnVuY3Rpb24oKXtyZXR1cm4hIWUoXCJwZXJzcGVjdGl2ZVwiKX0sY3NzdHJhbnNpdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4hIWUoXCJ0cmFuc2l0aW9uXCIpfSxjc3NhbmltYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuISFlKFwiYW5pbWF0aW9uXCIpfX07ai5jc3N0cmFuc2l0aW9ucygpJiYoYS5zdXBwb3J0LnRyYW5zaXRpb249bmV3IFN0cmluZyhmKFwidHJhbnNpdGlvblwiKSksYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kPWkudHJhbnNpdGlvbi5lbmRbYS5zdXBwb3J0LnRyYW5zaXRpb25dKSxqLmNzc2FuaW1hdGlvbnMoKSYmKGEuc3VwcG9ydC5hbmltYXRpb249bmV3IFN0cmluZyhmKFwiYW5pbWF0aW9uXCIpKSxhLnN1cHBvcnQuYW5pbWF0aW9uLmVuZD1pLmFuaW1hdGlvbi5lbmRbYS5zdXBwb3J0LmFuaW1hdGlvbl0pLGouY3NzdHJhbnNmb3JtcygpJiYoYS5zdXBwb3J0LnRyYW5zZm9ybT1uZXcgU3RyaW5nKGYoXCJ0cmFuc2Zvcm1cIikpLGEuc3VwcG9ydC50cmFuc2Zvcm0zZD1qLmNzc3RyYW5zZm9ybXMzZCgpKX0od2luZG93LlplcHRvfHx3aW5kb3cualF1ZXJ5LHdpbmRvdyxkb2N1bWVudCk7IiwiJCh3aW5kb3cpLm9uKCdsb2FkJywgKCkgPT4ge1xuICBjb25zdCBvd2xBcnRpY2xlcyA9ICQoJy5qcy1hcnRpY2xlLXNlY3Rpb24nKTtcbiAgdmFyIGxlZnRfYXJyb3dfdXJsID0gJChvd2xBcnRpY2xlcykucGFyZW50KCkuZmluZCgnLmpzLW93bC1sZWZ0LWFycm93JykuZGF0YSgndXJsJyk7XG4gIHZhciByaWdodF9hcnJvd191cmwgPSAkKG93bEFydGljbGVzKS5wYXJlbnQoKS5maW5kKCcuanMtb3dsLXJpZ2h0LWFycm93JykuZGF0YSgndXJsJyk7XG5cbiAgb3dsQXJ0aWNsZXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICBjb25zdCBhcnRpY2xlQ291bnQgPSAkKHRoaXMpLmZpbmQoJy5zbWFsbF9fc2luZ2xlX19hcnRpY2xlJykubGVuZ3RoO1xuXG4gICAgb3dsQXJ0aWNsZXMub3dsQ2Fyb3VzZWwoe1xuICAgICAgc3RhZ2VQYWRkaW5nOiAwLFxuICAgICAgbG9vcDogYXJ0aWNsZUNvdW50ID4gMyA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGRvdHM6IGZhbHNlLFxuICAgICAgbmF2aWdhdGlvbjogYXJ0aWNsZUNvdW50ID4gMyA/IHRydWUgOiBmYWxzZSxcbiAgICAgIG5hdjogYXJ0aWNsZUNvdW50ID4gMyA/IHRydWUgOiBmYWxzZSxcbiAgICAgIG5hdlRleHQ6IFsnPGltZyBhbHQ9XCJOYXdpZ2FjamFcIiBzdHlsZT1cIndpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7XCIgc3JjPVwiJytsZWZ0X2Fycm93X3VybCsnXCI+JywgJzxpbWcgYWx0PVwiTmF3aWdhY2phXCIgc3R5bGU9XCJ3aWR0aDo0MHB4O2hlaWdodDo0MHB4O1wiIHNyYz1cIicrcmlnaHRfYXJyb3dfdXJsKydcIj4nXSxcbiAgICAgIG1hcmdpbjogMzIsXG4gICAgICBsYXp5TG9hZDogZmFsc2UsXG4gICAgICByZXNwb25zaXZlOiB7XG4gICAgICAgIDA6IHtcbiAgICAgICAgICBpdGVtczogMSxcbiAgICAgICAgICBzdGFnZVBhZGRpbmc6IDY1LFxuICAgICAgICB9LFxuICAgICAgICA1NzU6IHtcbiAgICAgICAgICBpdGVtczogMixcbiAgICAgICAgICBzdGFnZVBhZGRpbmc6IDY1LFxuICAgICAgICB9LFxuICAgICAgICA3Njk6IHtcbiAgICAgICAgICBpdGVtczogMyxcbiAgICAgICAgICBzdGFnZVBhZGRpbmc6IDQ1LFxuICAgICAgICAgIG1hcmdpbjogMjAsXG4gICAgICAgI
5627H0sXG4gICAgICAgIDEwMjU6IHtcbiAgICAgICAgICBpdGVtczogNCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xufSk7XG4iLCIvKiFcbiAqIGxpZ2h0Z2FsbGVyeSB8IDIuNy4wIHwgT2N0b2JlciA5dGggMjAyMlxuICogaHR0cDovL3d3dy5saWdodGdhbGxlcnlqcy5jb20vXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAgU2FjaGluIE5lcmF2YXRoO1xuICogQGxpY2Vuc2UgR1BMdjNcbiAqL1xuXG4vKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxudmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cblxuLyoqXHJcbiAqIExpc3Qgb2YgbGlnaHRHYWxsZXJ5IGV2ZW50c1xyXG4gKiBBbGwgZXZlbnRzIHNob3VsZCBiZSBkb2N1bWVudGVkIGhlcmVcclxuICogQmVsb3cgaW50ZXJmYWNlcyBhcmUgdXNlZCB0byBidWlsZCB0aGUgd2Vic2l0ZSBkb2N1bWVudGF0aW9uc1xyXG4gKiAqL1xyXG52YXIgbEdFdmVudHMgPSB7XHJcbiAgICBhZnRlckFwcGVuZFNsaWRlOiAnbGdBZnRlckFwcGVuZFNsaWRlJyxcclxuICAgIGluaXQ6ICdsZ0luaXQnLFxyXG4gICAgaGFzVmlkZW86ICdsZ0hhc1ZpZGVvJyxcclxuICAgIGNvbnRhaW5lclJlc2l6ZTogJ2xnQ29udGFpbmVyUmVzaXplJyxcclxuICAgIHVwZGF0ZVNsaWRlczogJ2xnVXBkYXRlU2xpZGVzJyxcclxuICAgIGFmdGVyQXBwZW5kU3ViSHRtbDogJ2xnQWZ0ZXJBcHBlbmRTdWJIdG1sJyxcclxuICAgIGJlZm9yZU9wZW46ICdsZ0JlZm9yZU9wZW4nLFxyXG4gICAgYWZ0ZXJPcGVuOiAnbGdBZnRlck9wZW4nLFxyXG4gICAgc2xpZGVJdGVtTG9hZDogJ2xnU2xpZGVJdGVtTG9hZCcsXHJcbiAgICBiZWZvcmVTbGlkZTogJ2xnQmVmb3JlU2xpZGUnLFxyXG4gICAgYWZ0ZXJTbGlkZTogJ2xnQWZ0ZXJTbGlkZScsXHJcbiAgICBwb3N0ZXJDbGljazogJ2xnUG9zdGVyQ2xpY2snLFxyXG4gICAgZHJhZ1N0YXJ0OiAnbGdEcmFnU3RhcnQnLFxyXG4gICAgZHJhZ01vdmU6ICdsZ0RyYWdNb3ZlJyxcclxuICAgIGRyYWdFbmQ6ICdsZ0RyYWdFbmQnLFxyXG4gICAgYmVmb3JlTmV4dFNsaWRlOiAnbGdCZWZvcmVOZXh0U2xpZGUnLFxyXG4gICAgYmVmb3JlUHJldlNsaWRlOiAnbGdCZWZvcmVQcmV2U2xpZGUnLFxyXG4gICAgYmVmb3JlQ2xvc2U6ICdsZ0JlZm9yZUNsb3NlJyxcclxuICAgIGFmdGVyQ2xvc2U6ICdsZ0FmdGVyQ2xvc2UnLFxyXG4gICAgcm90YXRlTGVmdDogJ2xnUm90YXRlTGVmdCcsXHJcbiAgICByb3RhdGVSaWdodDogJ2xnUm90YXRlUmlnaHQnLFxyXG4gICAgZmxpcEhvcml6b250YWw6ICdsZ0ZsaXBIb3Jpem9udGFsJyxcclxuICAgIGZsaXBWZXJ0aWNhbDogJ2xnRmxpcFZlcnRpY2FsJyxcclxuICAgIGF1dG9wbGF5OiAnbGdBdXRvcGxheScsXHJcbiAgICBhdXRvcGxheVN0YXJ0OiAnbGdBdXRvcGxheVN0YXJ0JyxcclxuICAgIGF1dG9wbGF5U3RvcDogJ2xnQXV0b3BsYXlTdG9wJyxcclxufTtcblxudmFyIGxpZ2h0R2FsbGVyeUNvcmVTZXR0aW5ncyA9IHtcclxuICAgIG1vZGU6ICdsZy1zbGlkZScsXHJcbiAgICBlYXNpbmc6ICdlYXNlJyxcclxuICAgIHNwZWVkOiA0MDAsXHJcbiAgICBsaWNlbnNlS2V5OiAnMDAwMC0wMDAwLTAwMC0wMDAwJyxcclxuICAgIGhlaWdodDogJzEwMCUnLFxyXG4gICAgd2lkdGg6ICcxMDAlJyxcclxuICAgIGFkZENsYXNzOiAnJyxcclxuICAgIHN0YXJ0Q2xhc3M6ICdsZy1zdGFydC16b29tJyxcclxuICAgIGJhY2tkcm9wRHVyYXRpb246IDMwMCxcclxuICAgIGNvbnRhaW5lcjogJycsXHJcbiAgICBzdGFydEFuaW1hdGlvbkR1cmF0aW9uOiA0MDAsXHJcbiAgICB6b29tRnJvbU9yaWdpbjogdHJ1ZSxcclxuICAgIGhpZGVCYXJzRGVsYXk6IDAsXHJcbiAgICBzaG93QmFyc0FmdGVyOiAxMDAwMCxcclxuICAgIHNsaWRlRGVsYXk6IDAsXHJcbiAgICBzdXBwb3J0TGVnYWN5QnJvd3NlcjogdHJ1ZSxcclxuICAgIGFsbG93TWVkaWFPdmVybGFwOiBmYWxzZSxcclxuICAgIHZpZGVvTWF4U2l6ZTogJzEyODAtNzIwJyxcclxuICAgIGxvYWRZb3VUdWJlUG9zdGVyOiB0cnVlLFxyXG4gICAgZGVmYXVsdENhcH
5627Rpb25IZWlnaHQ6IDAsXHJcbiAgICBhcmlhTGFiZWxsZWRieTogJycsXHJcbiAgICBhcmlhRGVzY3JpYmVkYnk6ICcnLFxyXG4gICAgcmVzZXRTY3JvbGxQb3NpdGlvbjogdHJ1ZSxcclxuICAgIGhpZGVTY3JvbGxiYXI6IGZhbHNlLFxyXG4gICAgY2xvc2FibGU6IHRydWUsXHJcbiAgICBzd2lwZVRvQ2xvc2U6IHRydWUsXHJcbiAgICBjbG9zZU9uVGFwOiB0cnVlLFxyXG4gICAgc2hvd0Nsb3NlSWNvbjogdHJ1ZSxcclxuICAgIHNob3dNYXhpbWl6ZUljb246IGZhbHNlLFxyXG4gICAgbG9vcDogdHJ1ZSxcclxuICAgIGVzY0tleTogdHJ1ZSxcclxuICAgIGtleVByZXNzOiB0cnVlLFxyXG4gICAgdHJhcEZvY3VzOiB0cnVlLFxyXG4gICAgY29udHJvbHM6IHRydWUsXHJcbiAgICBzbGlkZUVuZEFuaW1hdGlvbjogdHJ1ZSxcclxuICAgIGhpZGVDb250cm9sT25FbmQ6IGZhbHNlLFxyXG4gICAgbW91c2V3aGVlbDogZmFsc2UsXHJcbiAgICBnZXRDYXB0aW9uRnJvbVRpdGxlT3JBbHQ6IHRydWUsXHJcbiAgICBhcHBlbmRTdWJIdG1sVG86ICcubGctc3ViLWh0bWwnLFxyXG4gICAgc3ViSHRtbFNlbGVjdG9yUmVsYXRpdmU6IGZhbHNlLFxyXG4gICAgcHJlbG9hZDogMixcclxuICAgIG51bWJlck9mU2xpZGVJdGVtc0luRG9tOiAxMCxcclxuICAgIHNlbGVjdG9yOiAnJyxcclxuICAgIHNlbGVjdFdpdGhpbjogJycsXHJcbiAgICBuZXh0SHRtbDogJycsXHJcbiAgICBwcmV2SHRtbDogJycsXHJcbiAgICBpbmRleDogMCxcclxuICAgIGlmcmFtZVdpZHRoOiAnMTAwJScsXHJcbiAgICBpZnJhbWVIZWlnaHQ6ICcxMDAlJyxcclxuICAgIGlmcmFtZU1heFdpZHRoOiAnMTAwJScsXHJcbiAgICBpZnJhbWVNYXhIZWlnaHQ6ICcxMDAlJyxcclxuICAgIGRvd25sb2FkOiB0cnVlLFxyXG4gICAgY291bnRlcjogdHJ1ZSxcclxuICAgIGFwcGVuZENvdW50ZXJUbzogJy5sZy10b29sYmFyJyxcclxuICAgIHN3aXBlVGhyZXNob2xkOiA1MCxcclxuICAgIGVuYWJsZVN3aXBlOiB0cnVlLFxyXG4gICAgZW5hYmxlRHJhZzogdHJ1ZSxcclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgZHluYW1pY0VsOiBbXSxcclxuICAgIGV4dHJhUHJvcHM6IFtdLFxyXG4gICAgZXhUaHVtYkltYWdlOiAnJyxcclxuICAgIGlzTW9iaWxlOiB1bmRlZmluZWQsXHJcbiAgICBtb2JpbGVTZXR0aW5nczoge1xyXG4gICAgICAgIGNvbnRyb2xzOiBmYWxzZSxcclxuICAgICAgICBzaG93Q2xvc2VJY29uOiBmYWxzZSxcclxuICAgICAgICBkb3dubG9hZDogZmFsc2UsXHJcbiAgICB9LFxyXG4gICAgcGx1Z2luczogW10sXHJcbiAgICBzdHJpbmdzOiB7XHJcbiAgICAgICAgY2xvc2VHYWxsZXJ5OiAnQ2xvc2UgZ2FsbGVyeScsXHJcbiAgICAgICAgdG9nZ2xlTWF4aW1pemU6ICdUb2dnbGUgbWF4aW1pemUnLFxyXG4gICAgICAgIHByZXZpb3VzU2xpZGU6ICdQcmV2aW91cyBzbGlkZScsXHJcbiAgICAgICAgbmV4dFNsaWRlOiAnTmV4dCBzbGlkZScsXHJcbiAgICAgICAgZG93bmxvYWQ6ICdEb3dubG9hZCcsXHJcbiAgICAgICAgcGxheVZpZGVvOiAnUGxheSB2aWRlbycsXHJcbiAgICB9LFxyXG59O1xuXG5mdW5jdGlvbiBpbml0TGdQb2x5ZmlsbHMoKSB7XHJcbiAgICAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LkN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgZnVuY3Rpb24gQ3VzdG9tRXZlbnQoZXZlbnQsIHBhcmFtcykge1xyXG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge1xyXG4gICAgICAgICAgICAgICAgYnViYmxlczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGRldGFpbDogbnVsbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpO1xyXG4gICAgICAgICAgICBldnQuaW5pdEN1c3RvbUV2ZW50KGV2ZW50LCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibG
5627UsIHBhcmFtcy5kZXRhaWwpO1xyXG4gICAgICAgICAgICByZXR1cm4gZXZ0O1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cuQ3VzdG9tRXZlbnQgPSBDdXN0b21FdmVudDtcclxuICAgIH0pKCk7XHJcbiAgICAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcykge1xyXG4gICAgICAgICAgICBFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzID1cclxuICAgICAgICAgICAgICAgIEVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgRWxlbWVudC5wcm90b3R5cGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yO1xyXG4gICAgICAgIH1cclxuICAgIH0pKCk7XHJcbn1cclxudmFyIGxnUXVlcnkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBsZ1F1ZXJ5KHNlbGVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy5jc3NWZW5kZXJQcmVmaXhlcyA9IFtcclxuICAgICAgICAgICAgJ1RyYW5zaXRpb25EdXJhdGlvbicsXHJcbiAgICAgICAgICAgICdUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24nLFxyXG4gICAgICAgICAgICAnVHJhbnNmb3JtJyxcclxuICAgICAgICAgICAgJ1RyYW5zaXRpb24nLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy5zZWxlY3RvciA9IHRoaXMuX2dldFNlbGVjdG9yKHNlbGVjdG9yKTtcclxuICAgICAgICB0aGlzLmZpcnN0RWxlbWVudCA9IHRoaXMuX2dldEZpcnN0RWwoKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGxnUXVlcnkuZ2VuZXJhdGVVVUlEID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgIHZhciByID0gKE1hdGgucmFuZG9tKCkgKiAxNikgfCAwLCB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMpIHwgMHg4O1xyXG4gICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgbGdRdWVyeS5wcm90b3R5cGUuX2dldFNlbGVjdG9yID0gZnVuY3Rpb24gKHNlbGVjdG9yLCBjb250ZXh0KSB7XHJcbiAgICAgICAgaWYgKGNvbnRleHQgPT09IHZvaWQgMCkgeyBjb250ZXh0ID0gZG9jdW1lbnQ7IH1cclxuICAgICAgICBpZiAodHlwZW9mIHNlbGVjdG9yICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xyXG4gICAgICAgIHZhciBmbCA9IHNlbGVjdG9yLnN1YnN0cmluZygwLCAxKTtcclxuICAgICAgICBpZiAoZmwgPT09ICcjJykge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnF1
5627ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBsZ1F1ZXJ5LnByb3RvdHlwZS5fZWFjaCA9IGZ1bmN0aW9uIChmdW5jKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdG9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rvci5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBbXS5mb3JFYWNoLmNhbGwodGhpcy5zZWxlY3RvciwgZnVuYyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmdW5jKHRoaXMuc2VsZWN0b3IsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICBsZ1F1ZXJ5LnByb3RvdHlwZS5fc2V0Q3NzVmVuZG9yUHJlZml4ID0gZnVuY3Rpb24gKGVsLCBjc3NQcm9wZXJ0eSwgdmFsdWUpIHtcclxuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcclxuICAgICAgICB2YXIgcHJvcGVydHkgPSBjc3NQcm9wZXJ0eS5yZXBsYWNlKC8tKFthLXpdKS9naSwgZnVuY3Rpb24gKHMsIGdyb3VwMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXAxLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuY3NzVmVuZGVyUHJlZml4ZXMuaW5kZXhPZihwcm9wZXJ0eSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGVsLnN0eWxlW3Byb3BlcnR5LmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgcHJvcGVydHkuc2xpY2UoMSldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGVsLnN0eWxlWyd3ZWJraXQnICsgcHJvcGVydHldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGVsLnN0eWxlWydtb3onICsgcHJvcGVydHldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGVsLnN0eWxlWydtcycgKyBwcm9wZXJ0eV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgZWwuc3R5bGVbJ28nICsgcHJvcGVydHldID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBlbC5zdHlsZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgbGdRdWVyeS5wcm90b3R5cGUuX2dldEZpcnN0RWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0b3IgJiYgdGhpcy5zZWxlY3Rvci5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RvclswXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdG9yO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBsZ1F1ZXJ5LnByb3RvdHlwZS5pc0V2ZW50TWF0Y2hlZCA9IGZ1bmN0aW9uIChldmVudCwgZXZlbnROYW1lKSB7XHJcbiAgICAgICAgdmFyIGV2ZW50TmFtZXNwYWNlID0gZXZlbnROYW1lLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50XHJcbiAgICAgICAgICAgIC5zcGxpdCgnLicpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGU7IH0pXHJcbiAgICAgICAgICAgIC5ldmVyeShmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZXZlbnROYW1lc3BhY2UuaW5kZXhPZihlKSAhPT0gLTE7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgbGdRdWVyeS5wcm90b3R5cGUuYXR0ciA9IGZ1bmN0aW9uIChhdHRyLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5maXJzdEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXJzdEVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9lYWNoKGZ1bmN0aW9uIChlbCkge1xyXG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoYXR0ciwgdmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfTtcclxuICAgIGxnUXVlcnkucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbiAoc2VsZWN0b3IpIHtcclxuICAgICAgICByZXR1cm4gJExHKHRoaXMuX2dldFNlbGVjdG9yKHNlbGVjdG9yLCB0aGlzLnNlbGVjdG9yKSk7XHJcbiAgICB9O1xyXG4gICAgbGdRdWVyeS5wcm90b3R5cGUuZmlyc3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0b3IgJiYgdGhpcy5zZWxlY3Rvci5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJExHKHRoaXMuc2VsZWN0b3JbMF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICRMRyh0aGlzLnNlbGVjdG9yKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgbGdRdWVyeS5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiAoaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gJExHKHRoaXMuc2VsZWN0b3JbaW5kZXhdKTtcclxuICAgIH07XHJcbiAgICBsZ1F1ZXJ5LnByb3RvdHlwZS5wYXJlbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuICRMRyh0aGlzLnNlbGVjdG9yLnBhcmVudEVsZW1lbnQpO1xyXG4gICAgfTtcclxuICAgIGxnUXVlcnkucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Rmlyc3RFbCgpO1xyXG4gICAgfTtcclxuICAgIGxnUXVlcnkucHJvdG90eXBlLnJlbW92ZUF0dHIgPSBmdW5jdGlvbiAoYXR0cmlidXRlcykge1xyXG4gICAgICAgIHZhciBhdHRycyA9IGF0dHJpYnV0ZXMuc3BsaXQoJyAnKTtcclxuICAgICAgICB0aGlzLl9lYWNoKGZ1bmN0aW9uIChlbCkge1xyXG4gICAgICAgICAgICBhdHRycy5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyKSB7IHJldHVybiBlbC5yZW1vdmVBdHRyaWJ1dGUoYXR0cik7IH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfTtcclxuICAgIGxnUXVlcnkucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZpcnN0RWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcclxuICAgICAgICB0aGlzLmZpcnN0RWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwcGVyLCB0aGlzLmZpcnN0RWxlbWVudCk7XHJcbiAgICAgICAgdGhpcy5maXJzdEVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmZpcnN0RWxlbWVudCk7XHJcbiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLmZpcnN0RWxlbWVudCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9O1xyXG4gICAgbGdRdWVyeS5wcm90b3R5cGUuYWRkQ2xhc3MgPSBmdW5jdGlvbiAoY2xhc3NOYW1lcykge1xyXG4gICAgICAgIGlmIChjbGFzc05hbWVzID09PSB2b2lkIDApIHsgY2xhc3NOYW1lcyA9ICcnOyB9XHJcbiAgICAgICAgdGhpcy5fZWFjaChmdW5jdGlvbiAoZWwpIHtcclxuICAgICAgICAgICAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IG11bHRpcGxlIGFyZ3VtZW50c1xyXG4gICAgICAgICAgICBjbGFzc05hbWVzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICBsZ1F1ZXJ5LnByb3RvdHlwZS5yZW1vdmVDbGFzcyA9IGZ1bmN0aW9uIChjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgdGhpcy5fZWFjaChmdW5jdGlvbiAoZWwpIHtcclxuICAgICAgICAgICAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IG11bHRpcGxlIGFyZ3VtZW50c1xyXG4gICAgICAgICAgICBjbGFzc05hbWVzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICBsZ1F1ZXJ5LnByb3RvdHlwZS5oYXNDbGFzcyA9IGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmlyc3RFbGVtZW50KSB7XHJcbiAgICAgICAgICAgI
5627HJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xyXG4gICAgfTtcclxuICAgIGxnUXVlcnkucHJvdG90eXBlLmhhc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmlyc3RFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpO1xyXG4gICAgfTtcclxuICAgIGxnUXVlcnkucHJvdG90eXBlLnRvZ2dsZUNsYXNzID0gZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5maXJzdEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmhhc0NsYXNzKGNsYXNzTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVDbGFzcyhjbGFzc05hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRDbGFzcyhjbGFzc05hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICBsZ1F1ZXJ5LnByb3RvdHlwZS5jc3MgPSBmdW5jdGlvbiAocHJvcGVydHksIHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLl9lYWNoKGZ1bmN0aW9uIChlbCkge1xyXG4gICAgICAgICAgICBfdGhpcy5fc2V0Q3NzVmVuZG9yUHJlZml4KGVsLCBwcm9wZXJ0eSwgdmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfTtcclxuICAgIC8vIE5lZWQgdG8gcGFzcyBzZXBhcmF0ZSBuYW1lc3BhY2VzIGZvciBzZXBhcmF0ZSBlbGVtZW50c1xyXG4gICAgbGdRdWVyeS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXZlbnRzLCBsaXN0ZW5lcikge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdG9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBldmVudHMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobGdRdWVyeS5ldmVudExpc3RlbmVyc1tldmVudF0pKSB7XHJcbiAgICAgICAgICAgICAgICBsZ1F1ZXJ5LmV2ZW50TGlzdGVuZXJzW2V2ZW50XSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxnUXVlcnkuZXZlbnRMaXN0ZW5lcnNbZXZlbnRdLnB1c2gobGlzdGVuZXIpO1xyXG4gICAgICAgICAgICBfdGhpcy5zZWxlY3Rvci5hZGRFdmVudExpc3RlbmVyKGV2ZW50LnNwbGl0KCcuJylbMF0sIGxpc3RlbmVyKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICAvLyBAdG9kbyAtIHRlc3QgdGhpc1xyXG4gICAgbGdRdWVyeS5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcclxuICAgICAgICB2Y
5627XIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMub24oZXZlbnQsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgX3RoaXMub2ZmKGV2ZW50KTtcclxuICAgICAgICAgICAgbGlzdGVuZXIoZXZlbnQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfTtcclxuICAgIGxnUXVlcnkucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdG9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBPYmplY3Qua2V5cyhsZ1F1ZXJ5LmV2ZW50TGlzdGVuZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudE5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKF90aGlzLmlzRXZlbnRNYXRjaGVkKGV2ZW50LCBldmVudE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBsZ1F1ZXJ5LmV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0uZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5zZWxlY3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZS5zcGxpdCgnLicpWzBdLCBsaXN0ZW5lcik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGxnUXVlcnkuZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9O1xyXG4gICAgbGdRdWVyeS5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uIChldmVudCwgZGV0YWlsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZpcnN0RWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KGV2ZW50LnNwbGl0KCcuJylbMF0sIHtcclxuICAgICAgICAgICAgZGV0YWlsOiBkZXRhaWwgfHwgbnVsbCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmZpcnN0RWxlbWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICAvLyBEb2VzIG5vdCBzdXBwb3J0IElFXHJcbiAgICBsZ1F1ZXJ5LnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKHVybCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgZmV0Y2godXJsKVxyXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7IHJldHVybiByZXMudGV4dCgpOyB9KVxyXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoaHRtbCkge1xyXG4gICAgICAgICAgICBfdGhpcy5zZWxlY3Rvci5pbm5lckhUTUwgPSBodG1sO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfTtcclxuICAgIGxnUXVlcnkucHJvdG90eXBlLmh0bWwgPSBmdW5jdGlvbiAoaHRtbCkge1xyXG4gICAgICAgIGlmIChodG1sID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmZpcnN0RWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcnN0RWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2VhY2goZnVuY3Rpb24gKGVsKSB7XHJcbiAgICAgICAgICAgIGVsLmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9O1xyXG4gICAgbGdRdWVyeS5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKGh0bWwpIHtcclxuICAgICAgICB0aGlzLl9lYWNoKGZ1bmN0aW9uIChlbCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGh0bWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICBlbC5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZWVuZCcsIGh0bWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWwuYXBwZW5kQ2hpbGQoaHRtbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICBsZ1F1ZXJ5LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gKGh0bWwpIHtcclxuICAgICAgICB0aGlzLl9lYWNoKGZ1bmN0aW9uIChlbCkge1xyXG4gICAgICAgICAgICBlbC5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyYmVnaW4nLCBodG1sKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH07XHJcbiAgICBsZ1F1ZXJ5LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fZWFjaChmdW5jdGlvbiAoZWwpIHtcclxuICAgICAgICAgICAgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9O1xyXG4gICAgbGdRdWVyeS5wcm90b3R5cGUuZW1wdHkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fZWFjaChmdW5jdGlvbiAoZWwpIHtcclxuICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9O1xyXG4gICAgbGdRdWVyeS5wcm90b3R5cGUuc2Nyb2xsVG9wID0gZnVuY3Rpb24gKHNjcm9sbFRvcCkge1xyXG4gICAgICAgIGlmIChzY3JvbGxUb3AgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBkb2
5627N1bWVudC5ib2R5LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gKHdpbmRvdy5wYWdlWU9mZnNldCB8fFxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8fFxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgfHxcclxuICAgICAgICAgICAgICAgIDApO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBsZ1F1ZXJ5LnByb3RvdHlwZS5zY3JvbGxMZWZ0ID0gZnVuY3Rpb24gKHNjcm9sbExlZnQpIHtcclxuICAgICAgICBpZiAoc2Nyb2xsTGVmdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gKHdpbmRvdy5wYWdlWE9mZnNldCB8fFxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgfHxcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCB8fFxyXG4gICAgICAgICAgICAgICAgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGxnUXVlcnkucHJvdG90eXBlLm9mZnNldCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmlyc3RFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiAwLFxyXG4gICAgICAgICAgICAgICAgdG9wOiAwLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB2Y
5627XIgcmVjdCA9IHRoaXMuZmlyc3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIHZhciBib2R5TWFyZ2luTGVmdCA9ICRMRygnYm9keScpLnN0eWxlKCkubWFyZ2luTGVmdDtcclxuICAgICAgICAvLyBNaW51cyBib2R5IG1hcmdpbiAtIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzMwNzExNTQ4L2lzLWdldGJvdW5kaW5nY2xpZW50cmVjdC1sZWZ0LXJldHVybmluZy1hLXdyb25nLXZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbGVmdDogcmVjdC5sZWZ0IC0gcGFyc2VGbG9hdChib2R5TWFyZ2luTGVmdCkgKyB0aGlzLnNjcm9sbExlZnQoKSxcclxuICAgICAgICAgICAgdG9wOiByZWN0LnRvcCArIHRoaXMuc2Nyb2xsVG9wKCksXHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICBsZ1F1ZXJ5LnByb3RvdHlwZS5zdHlsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmlyc3RFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmZpcnN0RWxlbWVudC5jdXJyZW50U3R5bGUgfHxcclxuICAgICAgICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5maXJzdEVsZW1lbnQpKTtcclxuICAgIH07XHJcbiAgICAvLyBXaWR0aCB3aXRob3V0IHBhZGRpbmcgYW5kIGJvcmRlciBldmVuIGlmIGJveC1zaXppbmcgaXMgdXNlZC5cclxuICAgIGxnUXVlcnkucHJvdG90eXBlLndpZHRoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzdHlsZSA9IHRoaXMuc3R5bGUoKTtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZmlyc3RFbGVtZW50LmNsaWVudFdpZHRoIC1cclxuICAgICAgICAgICAgcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nTGVmdCkgLVxyXG4gICAgICAgICAgICBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdSaWdodCkpO1xyXG4gICAgfTtcclxuICAgIC8vIEhlaWdodCB3aXRob3V0IHBhZGRpbmcgYW5kIGJvcmRlciBldmVuIGlmIGJveC1zaXppbmcgaXMgdXNlZC5cclxuICAgIGxnUXVlcnkucHJvdG90eXBlLmhlaWdodCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2Y
5627XIgc3R5bGUgPSB0aGlzLnN0eWxlKCk7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmZpcnN0RWxlbWVudC5jbGllbnRIZWlnaHQgLVxyXG4gICAgICAgICAgICBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdUb3ApIC1cclxuICAgICAgICAgICAgcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nQm90dG9tKSk7XHJcbiAgICB9O1xyXG4gICAgbGdRdWVyeS5ldmVudExpc3RlbmVycyA9IHt9O1xyXG4gICAgcmV0dXJuIGxnUXVlcnk7XHJcbn0oKSk7XHJcbmZ1bmN0aW9uICRMRyhzZWxlY3Rvcikge1xyXG4gICAgaW5pdExnUG9seWZpbGxzKCk7XHJcbiAgICByZXR1cm4gbmV3IGxnUXVlcnkoc2VsZWN0b3IpO1xyXG59XG5cbnZhciBkZWZhdWx0RHluYW1pY09wdGlvbnMgPSBbXHJcbiAgICAnc3JjJyxcclxuICAgICdzb3VyY2VzJyxcclxuICAgICdzdWJIdG1sJyxcclxuICAgICdzdWJIdG1sVXJsJyxcclxuICAgICdodG1sJyxcclxuICAgICd2aWRlbycsXHJcbiAgICAncG9zdGVyJyxcclxuICAgICdzbGlkZU5hbWUnLFxyXG4gICAgJ3Jlc3BvbnNpdmUnLFxyXG4gICAgJ3NyY3NldCcsXHJcbiAgICAnc2l6ZXMnLFxyXG4gICAgJ2lmcmFtZScsXHJcbiAgICAnZG93bmxvYWRVcmwnLFxyXG4gICAgJ2Rvd25sb2FkJyxcclxuICAgICd3aWR0aCcsXHJcbiAgICAnZmFjZWJvb2tTaGFyZVVybCcsXHJcbiAgICAndHdlZXRUZXh0JyxcclxuICAgICdpZnJhbWVUaXRsZScsXHJcbiAgICAndHdpdHRlclNoYXJlVXJsJyxcclxuICAgICdwaW50ZXJlc3RTaGFyZVVybCcsXHJcbiAgICAncGludGVyZXN0VGV4dCcsXHJcbiAgICAnZmJIdG1sJyxcclxuICAgICdkaXNxdXNJZGVudGlmaWVyJyxcclxuICAgICdkaXNxdXNVcmwnLFxyXG5dO1xyXG4vLyBDb252ZXJ0IGh0bWwgZGF0YS1hdHRyaWJ1dGUgdG8gY2FtYWxjYXNlXHJcbmZ1bmN0aW9uIGNvbnZlcnRUb0RhdGEoYXR0cikge1xyXG4gICAgLy8gRkluZCBhIHdheSBmb3IgbGdzaXplXHJcbiAgICBpZiAoYXR0ciA9PT0gJ2hyZWYnKSB7XHJcbiAgICAgICAgcmV0dXJuICdzcmMnO1xyXG4gICAgfVxyXG4gICAgYXR0ciA9IGF0dHIucmVwbGFjZSgnZGF0YS0nLCAnJyk7XHJcbiAgICBhdHRyID0gYXR0ci5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIGF0dHIuc2xpY2UoMSk7XHJcbiAgICBhdHRyID0gYXR0ci5yZXBsYWNlKC8tKFthLXpdKS9nLCBmdW5jdGlvbiAoZykgeyByZXR1cm4gZ1sxXS50b1VwcGVyQ2FzZSgpOyB9KTtcclxuICAgIHJldHVybiBhdHRyO1xyXG59XHJcbnZhciB1dGlscyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogZ2V0IHBvc3NpYmxlIHdpZHRoIGFuZCBoZWlnaHQgZnJvbSB0aGUgbGdTaXplIGF0dHJpYnV0ZS4gVXNlZCBmb3IgWm9vbUZyb21PcmlnaW4gb3B0aW9uXHJcbiAgICAgKi9cclxuICAgIGdldFNpemU6IGZ1bmN0aW9uIChlbCwgY29udGFpbmVyLCBzcGFjaW5nLCBkZWZhdWx0TGdTaXplKSB7XHJcbiAgICAgICAgaWYgKHNwYWNpbmcgPT09IHZvaWQgMCkgeyBzcGFjaW5nID0gMDsgfVxyXG4gICAgICAgIHZhciBMR2VsID0gJExHKGVsKTtcclxuICAgICAgICB2Y
5627XIgbGdTaXplID0gTEdlbC5hdHRyKCdkYXRhLWxnLXNpemUnKSB8fCBkZWZhdWx0TGdTaXplO1xyXG4gICAgICAgIGlmICghbGdTaXplKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGlzUmVzcG9uc2l2ZVNpemVzID0gbGdTaXplLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgLy8gaWYgYXQtbGVhc3QgdHdvIHZpZXdwb3J0IHNpemVzIGFyZSBhdmFpbGFibGVcclxuICAgICAgICBpZiAoaXNSZXNwb25zaXZlU2l6ZXNbMV0pIHtcclxuICAgICAgICAgICAgdmFyIHdXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlzUmVzcG9uc2l2ZVNpemVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2l6ZV8xID0gaXNSZXNwb25zaXZlU2l6ZXNbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2l2ZVdpZHRoID0gcGFyc2VJbnQoc2l6ZV8xLnNwbGl0KCctJylbMl0sIDEwKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zaXZlV2lkdGggPiB3V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZ1NpemUgPSBzaXplXzE7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyB0YWtlIGxhc3QgaXRlbSBhcyBsYXN0IG9wdGlvblxyXG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IGlzUmVzcG9uc2l2ZVNpemVzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZ1NpemUgPSBzaXplXzE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNpemUgPSBsZ1NpemUuc3BsaXQoJy0nKTtcclxuICAgICAgICB2Y
5627XIgd2lkdGggPSBwYXJzZUludChzaXplWzBdLCAxMCk7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHBhcnNlSW50KHNpemVbMV0sIDEwKTtcclxuICAgICAgICB2YXIgY1dpZHRoID0gY29udGFpbmVyLndpZHRoKCk7XHJcbiAgICAgICAgdmFyIGNIZWlnaHQgPSBjb250YWluZXIuaGVpZ2h0KCkgLSBzcGFjaW5nO1xyXG4gICAgICAgIHZhciBtYXhXaWR0aCA9IE1hdGgubWluKGNXaWR0aCwgd2lkdGgpO1xyXG4gICAgICAgIHZhciBtYXhIZWlnaHQgPSBNYXRoLm1pbihjSGVpZ2h0LCBoZWlnaHQpO1xyXG4gICAgICAgIHZhciByYXRpbyA9IE1hdGgubWluKG1heFdpZHRoIC8gd2lkdGgsIG1heEhlaWdodCAvIGhlaWdodCk7XHJcbiAgICAgICAgcmV0dXJuIHsgd2lkdGg6IHdpZHRoICogcmF0aW8sIGhlaWdodDogaGVpZ2h0ICogcmF0aW8gfTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjIEdldCB0cmFuc2Zvcm0gdmFsdWUgYmFzZWQgb24gdGhlIGltYWdlU2l6ZS4gVXNlZCBmb3IgWm9vbUZyb21PcmlnaW4gb3B0aW9uXHJcbiAgICAgKiBAcGFyYW0ge2pRdWVyeSBFbGVtZW50fVxyXG4gICAgICogQHJldHVybnMge1N0cmluZ30gVHJhbnNmb3JtIENTUyBzdHJpbmdcclxuICAgICAqL1xyXG4gICAgZ2V0VHJhbnNmb3JtOiBmdW5jdGlvbiAoZWwsIGNvbnRhaW5lciwgdG9wLCBib3R0b20sIGltYWdlU2l6ZSkge1xyXG4gICAgICAgIGlmICghaW1hZ2VTaXplKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIExHZWwgPSAkTEcoZWwpLmZpbmQoJ2ltZycpLmZpcnN0KCk7XHJcbiAgICAgICAgaWYgKCFMR2VsLmdldCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgdmFyIHdXaWR0aCA9IGNvbnRhaW5lclJlY3Qud2lkdGg7XHJcbiAgICAgICAgLy8gdXNpbmcgaW5uZXJXaWR0aCB0byBpbmNsdWRlIG1vYmlsZSBzYWZhcmkgYm90dG9tIGJhclxyXG4gICAgICAgIHZhciB3SGVpZ2h0ID0gY29udGFpbmVyLmhlaWdodCgpIC0gKHRvcCArIGJvdHRvbSk7XHJcbiAgICAgICAgdmFyIGVsV2lkdGggPSBMR2VsLndpZHRoKCk7XHJcbiAgICAgICAgdmFyIGVsSGVpZ2h0ID0gTEdlbC5oZWlnaHQoKTtcclxuICAgICAgICB2Y
5627XIgZWxTdHlsZSA9IExHZWwuc3R5bGUoKTtcclxuICAgICAgICB2YXIgeCA9ICh3V2lkdGggLSBlbFdpZHRoKSAvIDIgLVxyXG4gICAgICAgICAgICBMR2VsLm9mZnNldCgpLmxlZnQgK1xyXG4gICAgICAgICAgICAocGFyc2VGbG9hdChlbFN0eWxlLnBhZGRpbmdMZWZ0KSB8fCAwKSArXHJcbiAgICAgICAgICAgIChwYXJzZUZsb2F0KGVsU3R5bGUuYm9yZGVyTGVmdCkgfHwgMCkgK1xyXG4gICAgICAgICAgICAkTEcod2luZG93KS5zY3JvbGxMZWZ0KCkgK1xyXG4gICAgICAgICAgICBjb250YWluZXJSZWN0LmxlZnQ7XHJcbiAgICAgICAgdmFyIHkgPSAod0hlaWdodCAtIGVsSGVpZ2h0KSAvIDIgLVxyXG4gICAgICAgICAgICBMR2VsLm9mZnNldCgpLnRvcCArXHJcbiAgICAgICAgICAgIChwYXJzZUZsb2F0KGVsU3R5bGUucGFkZGluZ1RvcCkgfHwgMCkgK1xyXG4gICAgICAgICAgICAocGFyc2VGbG9hdChlbFN0eWxlLmJvcmRlclRvcCkgfHwgMCkgK1xyXG4gICAgICAgICAgICAkTEcod2luZG93KS5zY3JvbGxUb3AoKSArXHJcbiAgICAgICAgICAgIHRvcDtcclxuICAgICAgICB2YXIgc2NYID0gZWxXaWR0aCAvIGltYWdlU2l6ZS53aWR0aDtcclxuICAgICAgICB2YXIgc2NZID0gZWxIZWlnaHQgLyBpbWFnZVNpemUuaGVpZ2h0O1xyXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSAndHJhbnNsYXRlM2QoJyArXHJcbiAgICAgICAgICAgICh4ICo9IC0xKSArXHJcbiAgICAgICAgICAgICdweCwgJyArXHJcbiAgICAgICAgICAgICh5ICo9IC0xKSArXHJcbiAgICAgICAgICAgICdweCwgMCkgc2NhbGUzZCgnICtcclxuICAgICAgICAgICAgc2NYICtcclxuICAgICAgICAgICAgJywgJyArXHJcbiAgICAgICAgICAgIHNjWSArXHJcbiAgICAgICAgICAgICcsIDEpJztcclxuICAgICAgICByZXR1cm4gdHJhbnNmb3JtO1xyXG4gICAgfSxcclxuICAgIGdldElmcmFtZU1hcmt1cDogZnVuY3Rpb24gKGlmcmFtZVdpZHRoLCBpZnJhbWVIZWlnaHQsIGlmcmFtZU1heFdpZHRoLCBpZnJhbWVNYXhIZWlnaHQsIHNyYywgaWZyYW1lVGl0bGUpIHtcclxuICAgICAgICB2Y
5627XIgdGl0bGUgPSBpZnJhbWVUaXRsZSA/ICd0aXRsZT1cIicgKyBpZnJhbWVUaXRsZSArICdcIicgOiAnJztcclxuICAgICAgICByZXR1cm4gXCI8ZGl2IGNsYXNzPVxcXCJsZy12aWRlby1jb250IGxnLWhhcy1pZnJhbWVcXFwiIHN0eWxlPVxcXCJ3aWR0aDpcIiArIGlmcmFtZVdpZHRoICsgXCI7IG1heC13aWR0aDpcIiArIGlmcmFtZU1heFdpZHRoICsgXCI7IGhlaWdodDogXCIgKyBpZnJhbWVIZWlnaHQgKyBcIjsgbWF4LWhlaWdodDpcIiArIGlmcmFtZU1heEhlaWdodCArIFwiXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxpZnJhbWUgY2xhc3M9XFxcImxnLW9iamVjdFxcXCIgZnJhbWVib3JkZXI9XFxcIjBcXFwiIFwiICsgdGl0bGUgKyBcIiBzcmM9XFxcIlwiICsgc3JjICsgXCJcXFwiICBhbGxvd2Z1bGxzY3JlZW49XFxcInRydWVcXFwiPjwvaWZyYW1lPlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cIjtcclxuICAgIH0sXHJcbiAgICBnZXRJbWdNYXJrdXA6IGZ1bmN0aW9uIChpbmRleCwgc3JjLCBhbHRBdHRyLCBzcmNzZXQsIHNpemVzLCBzb3VyY2VzKSB7XHJcbiAgICAgICAgdmFyIHNyY3NldEF0dHIgPSBzcmNzZXQgPyBcInNyY3NldD1cXFwiXCIgKyBzcmNzZXQgKyBcIlxcXCJcIiA6ICcnO1xyXG4gICAgICAgIHZhciBzaXplc0F0dHIgPSBzaXplcyA/IFwic2l6ZXM9XFxcIlwiICsgc2l6ZXMgKyBcIlxcXCJcIiA6ICcnO1xyXG4gICAgICAgIHZhciBpbWdNYXJrdXAgPSBcIjxpbWcgXCIgKyBhbHRBdHRyICsgXCIgXCIgKyBzcmNzZXRBdHRyICsgXCIgIFwiICsgc2l6ZXNBdHRyICsgXCIgY2xhc3M9XFxcImxnLW9iamVjdCBsZy1pbWFnZVxcXCIgZGF0YS1pbmRleD1cXFwiXCIgKyBpbmRleCArIFwiXFxcIiBzcmM9XFxcIlwiICsgc3JjICsgXCJcXFwiIC8+XCI7XHJcbiAgICAgICAgdmFyIHNvdXJjZVRhZyA9ICcnO1xyXG4gICAgICAgIGlmIChzb3VyY2VzKSB7XHJcbiAgICAgICAgICAgIHZhciBzb3VyY2VPYmogPSB0eXBlb2Ygc291cmNlcyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHNvdXJjZXMpIDogc291cmNlcztcclxuICAgICAgICAgICAgc291cmNlVGFnID0gc291cmNlT2JqLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICB2Y
5627XIgYXR0cnMgPSAnJztcclxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IHJlbW92ZSB0aGUgZmlyc3Qgc3BhY2UgYXMgaXQgaXMgcmVxdWlyZWQgdG8gc2VwYXJhdGUgdGhlIGF0dHJpYnV0ZXNcclxuICAgICAgICAgICAgICAgICAgICBhdHRycyArPSBcIiBcIiArIGtleSArIFwiPVxcXCJcIiArIHNvdXJjZVtrZXldICsgXCJcXFwiXCI7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIjxzb3VyY2UgXCIgKyBhdHRycyArIFwiPjwvc291cmNlPlwiO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiXCIgKyBzb3VyY2VUYWcgKyBpbWdNYXJrdXA7XHJcbiAgICB9LFxyXG4gICAgLy8gR2V0IHNyYyBmcm9tIHJlc3BvbnNpdmUgc3JjXHJcbiAgICBnZXRSZXNwb25zaXZlU3JjOiBmdW5jdGlvbiAoc3JjSXRtcykge1xyXG4gICAgICAgIHZhciByc1dpZHRoID0gW107XHJcbiAgICAgICAgdmFyIHJzU3JjID0gW107XHJcbiAgICAgICAgdmFyIHNyYyA9ICcnO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3JjSXRtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgX3NyYyA9IHNyY0l0bXNbaV0uc3BsaXQoJyAnKTtcclxuICAgICAgICAgICAgLy8gTWFuYWdlIGVtcHR5IHNwYWNlXHJcbiAgICAgICAgICAgIGlmIChfc3JjWzBdID09PSAnJykge1xyXG4gICAgICAgICAgICAgICAgX3NyYy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcnNTcmMucHVzaChfc3JjWzBdKTtcclxuICAgICAgICAgICAgcnNXaWR0aC5wdXNoKF9zcmNbMV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2Y
5627XIgd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCByc1dpZHRoLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJzZUludChyc1dpZHRoW2pdLCAxMCkgPiB3V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIHNyYyA9IHJzU3JjW2pdO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNyYztcclxuICAgIH0sXHJcbiAgICBpc0ltYWdlTG9hZGVkOiBmdW5jdGlvbiAoaW1nKSB7XHJcbiAgICAgICAgaWYgKCFpbWcpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAvLyBEdXJpbmcgdGhlIG9ubG9hZCBldmVudCwgSUUgY29ycmVjdGx5IGlkZW50aWZpZXMgYW55IGltYWdlcyB0aGF0XHJcbiAgICAgICAgLy8gd2VyZW7igJl0IGRvd25sb2FkZWQgYXMgbm90IGNvbXBsZXRlLiBPdGhlcnMgc2hvdWxkIHRvby4gR2Vja28tYmFzZWRcclxuICAgICAgICAvLyBicm93c2VycyBhY3QgbGlrZSBOUzQgaW4gdGhhdCB0aGV5IHJlcG9ydCB0aGlzIGluY29ycmVjdGx5LlxyXG4gICAgICAgIGlmICghaW1nLmNvbXBsZXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSG93ZXZlciwgdGhleSBkbyBoYXZlIHR3byB2ZXJ5IHVzZWZ1bCBwcm9wZXJ0aWVzOiBuYXR1cmFsV2lkdGggYW5kXHJcbiAgICAgICAgLy8gbmF0dXJhbEhlaWdodC4gVGhlc2UgZ2l2ZSB0aGUgdHJ1ZSBzaXplIG9mIHRoZSBpbWFnZS4gSWYgaXQgZmFpbGVkXHJcbiAgICAgICAgLy8gdG8gbG9hZCwgZWl0aGVyIG9mIHRoZXNlIHNob3VsZCBiZSB6ZXJvLlxyXG4gICAgICAgIGlmIChpbWcubmF0dXJhbFdpZHRoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gTm8gb3RoZXIgd2F5IG9mIGNoZWNraW5nOiBhc3N1bWUgaXTigJlzIG9rLlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuICAgIGdldFZpZGVvUG9zdGVyTWFya3VwOiBmdW5jdGlvbiAoX3Bvc3RlciwgZHVtbXlJbWcsIHZpZGVvQ29udFN0eWxlLCBwbGF5VmlkZW9TdHJpbmcsIF9pc1ZpZGVvKSB7XHJcbiAgICAgICAgdmFyIHZpZGVvQ2xhc3MgPSAnJztcclxuICAgICAgICBpZiAoX2lzVmlkZW8gJiYgX2lzVmlkZW8ueW91dHViZSkge1xyXG4gICAgICAgICAgICB2aWRlb0NsYXNzID0gJ2xnLWhhcy15b3V0dWJlJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoX2lzVmlkZW8gJiYgX2lzVmlkZW8udmltZW8pIHtcclxuICAgICAgICAgICAgdmlkZW9DbGFzcyA9ICdsZy1oYXMtdmltZW8nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmlkZW9DbGFzcyA9ICdsZy1oYXMtaHRtbDUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCI8ZGl2IGNsYXNzPVxcXCJsZy12aWRlby1jb250IFwiICsgdmlkZW9DbGFzcyArIFwiXFxcIiBzdHlsZT1cXFwiXCIgKyB2aWRlb0NvbnRTdHlsZSArIFwiXFxcIj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibGctdmlkZW8tcGxheS1idXR0b25cXFwiPlxcbiAgICAgICAgICAgICAgICA8c3ZnXFxuICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVxcXCIwIDAgMjAgMjBcXFwiXFxuICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPVxcXCJ4TWlkWU1pZFxcXCJcXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XFxcIlwiICsgcGxheVZpZGVvU3RyaW5nICsgXCJcXFwiXFxuICAgICAgICAgICAgICAgICAgICByb2xlPVxcXCJpbWdcXFwiXFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cXFwibGctdmlkZW8tcGxheS1pY29uXFxcIlxcbiAgICAgICAgICAgICAgICA+XFxuICAgICAgICAgICAgICAgICAgICA8dGl0bGU+XCIgKyBwbGF5VmlkZW9TdHJpbmcgKyBcIjwvdGl0bGU+XFxuICAgICAgICAgICAgICAgICAgICA8cG9seWdvbiBjbGFzcz1cXFwibGctdmlkZW8tcGxheS1pY29uLWlubmVyXFxcIiBwb2ludHM9XFxcIjEsMCAyMCwxMCAxLDIwXFxcIj48L3BvbHlnb24+XFxuICAgICAgICAgICAgICAgIDwvc3ZnPlxcbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVxcXCJsZy12aWRlby1wbGF5LWljb24tYmdcXFwiIHZpZXdCb3g9XFxcIjAgMCA1MCA1MFxcXCIgZm9jdXNhYmxlPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVxcXCI1MCVcXFwiIGN5PVxcXCI1MCVcXFwiIHI9XFxcIjIwXFxcIj48L2NpcmNsZT48L3N2Zz5cXG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cXFwibGctdmlkZW8tcGxheS1pY29uLWNpcmNsZVxcXCIgdmlld0JveD1cXFwiMCAwIDUwIDUwXFxcIiBmb2N1c2FibGU9XFxcImZhbHNlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XFxcIjUwJVxcXCIgY3k9XFxcIjUwJVxcXCIgcj1cXFwiMjBcXFwiPjwvY2lyY2xlPlxcbiAgICAgICAgICAgICAgICA8L3N2Zz5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcIiArIChkdW1teUltZyB8fCAnJykgKyBcIlxcbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XFxcImxnLW9iamVjdCBsZy12aWRlby1wb3N0ZXJcXFwiIHNyYz1cXFwiXCIgKyBfcG9zdGVyICsgXCJcXFwiIC8+XFxuICAgICAgICA8L2Rpdj5cIjtcclxuICAgIH0sXHJcbiAgICBnZXRGb2N1c2FibGVFbGVtZW50czogZnVuY3Rpb24gKGNvbnRhaW5lcikge1xyXG4gICAgICAgIHZhciBlbGVtZW50cyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdhW2hyZWZdOm5vdChbZGlzYWJsZWRdKSwgYnV0dG9uOm5vdChbZGlzYWJsZWRdKSwgdGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pLCBpbnB1dFt0eXBlPVwidGV4dFwiXTpub3QoW2Rpc2FibGVkXSksIGlucHV0W3R5cGU9XCJyYWRpb1wiXTpub3QoW2Rpc2FibGVkXSksIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpub3QoW2Rpc2FibGVkXSksIHNlbGVjdDpub3QoW2Rpc2FibGVkXSknKTtcclxuICAgICAgICB2Y
5627XIgdmlzaWJsZUVsZW1lbnRzID0gW10uZmlsdGVyLmNhbGwoZWxlbWVudHMsIGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHZhciBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICByZXR1cm4gc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnICYmIHN0eWxlLnZpc2liaWxpdHkgIT09ICdoaWRkZW4nO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB2aXNpYmxlRWxlbWVudHM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzYyBDcmVhdGUgZHluYW1pYyBlbGVtZW50cyBhcnJheSBmcm9tIGdhbGxlcnkgaXRlbXMgd2hlbiBkeW5hbWljIG9wdGlvbiBpcyBmYWxzZVxyXG4gICAgICogSXQgaGVscHMgdG8gYXZvaWQgZnJlcXVlbnQgRE9NIGludGVyYWN0aW9uXHJcbiAgICAgKiBhbmQgYXZvaWQgbXVsdGlwbGUgY2hlY2tzIGZvciBkeW5hbWljIGVsbWVudHNcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IGR5bmFtaWNFbFxyXG4gICAgICovXHJcbiAgICBnZXREeW5hbWljT3B0aW9uczogZnVuY3Rpb24gKGl0ZW1zLCBleHRyYVByb3BzLCBnZXRDYXB0aW9uRnJvbVRpdGxlT3JBbHQsIGV4VGh1bWJJbWFnZSkge1xyXG4gICAgICAgIHZhciBkeW5hbWljRWxlbWVudHMgPSBbXTtcclxuICAgICAgICB2YXIgYXZhaWxhYmxlRHluYW1pY09wdGlvbnMgPSBfX3NwcmVhZEFycmF5cyhkZWZhdWx0RHluYW1pY09wdGlvbnMsIGV4dHJhUHJvcHMpO1xyXG4gICAgICAgIFtdLmZvckVhY2guY2FsbChpdGVtcywgZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgdmFyIGR5bmFtaWNFbCA9IHt9O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW0uYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBpdGVtLmF0dHJpYnV0ZXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoYXR0ci5zcGVjaWZpZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2Y
5627XIgZHluYW1pY0F0dHIgPSBjb252ZXJ0VG9EYXRhKGF0dHIubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxhYmVsID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUR5bmFtaWNPcHRpb25zLmluZGV4T2YoZHluYW1pY0F0dHIpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBkeW5hbWljQXR0cjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWNFbFtsYWJlbF0gPSBhdHRyLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgY3VycmVudEl0ZW0gPSAkTEcoaXRlbSk7XHJcbiAgICAgICAgICAgIHZhciBhbHQgPSBjdXJyZW50SXRlbS5maW5kKCdpbWcnKS5maXJzdCgpLmF0dHIoJ2FsdCcpO1xyXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBjdXJyZW50SXRlbS5hdHRyKCd0aXRsZScpO1xyXG4gICAgICAgICAgICB2YXIgdGh1bWIgPSBleFRodW1iSW1hZ2VcclxuICAgICAgICAgICAgICAgID8gY3VycmVudEl0ZW0uYXR0cihleFRodW1iSW1hZ2UpXHJcbiAgICAgICAgICAgICAgICA6IGN1cnJlbnRJdGVtLmZpbmQoJ2ltZycpLmZpcnN0KCkuYXR0cignc3JjJyk7XHJcbiAgICAgICAgICAgIGR5bmFtaWNFbC50aHVtYiA9IHRodW1iO1xyXG4gICAgICAgICAgICBpZiAoZ2V0Q2FwdGlvbkZyb21UaXRsZU9yQWx0ICYmICFkeW5hbWljRWwuc3ViSHRtbCkge1xyXG4gICAgICAgICAgICAgICAgZHluYW1pY0VsLnN1Ykh0bWwgPSB0aXRsZSB8fCBhbHQgfHwgJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZHluYW1pY0VsLmFsdCA9IGFsdCB8fCB0aXRsZSB8fCAnJztcclxuICAgICAgICAgICAgZHluYW1pY0VsZW1lbnRzLnB1c2goZHluYW1pY0VsKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZHluYW1pY0VsZW1lbnRzO1xyXG4gICAgfSxcclxuICAgIGlzTW9iaWxlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIC9pUGhvbmV8aVBhZHxpUG9kfEFuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2MgQ2hlY2sgdGhlIGdpdmVuIHNyYyBpcyB2aWRlb1xyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHNyY1xyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSB2aWRlbyB0eXBlXHJcbiAgICAgKiBFeDp7IHlvdXR1YmUgIDogIFtcIi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9YzBhc0pnU3l4Y1lcIiwgXCJjMGFzSmdTeXhjWVwiXSB9XHJcbiAgICAgKlxyXG4gICAgICogQHRvZG8gLSB0aGlzIGluZm9ybWF0aW9uIGNhbiBiZSBtb3ZlZCB0byBkeW5hbWljRWwgdG8gYXZvaWQgZnJlcXVlbnQgY2FsbHNcclxuICAgICAqL1xyXG4gICAgaXNWaWRlbzogZnVuY3Rpb24gKHNyYywgaXNIVE1MNVZJZGVvLCBpbmRleCkge1xyXG4gICAgICAgIGlmICghc3JjKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0hUTUw1VklkZW8pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbDU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignbGlnaHRHYWxsZXJ5IDotIGRhdGEtc3JjIGlzIG5vdCBwcm92aWRlZCBvbiBzbGlkZSBpdGVtICcgK1xyXG4gICAgICAgICAgICAgICAgICAgIChpbmRleCArIDEpICtcclxuICAgICAgICAgICAgICAgICAgICAnLiBQbGVhc2UgbWFrZSBzdXJlIHRoZSBzZWxlY3RvciBwcm9wZXJ0eSBpcyBwcm9wZXJseSBjb25maWd1cmVkLiBNb3JlIGluZm8gLSBodHRwczovL3d3dy5saWdodGdhbGxlcnlqcy5jb20vZGVtb3MvaHRtbC1tYXJrdXAvJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHlvdXR1YmUgPSBzcmMubWF0Y2goL1xcL1xcLyg/Ond3d1xcLik/eW91dHUoPzpcXC5iZXxiZVxcLmNvbXxiZS1ub2Nvb2tpZVxcLmNvbSlcXC8oPzp3YXRjaFxcP3Y9fGVtYmVkXFwvKT8oW2EtejAtOVxcLVxcX1xcJV0rKShbXFwmfD9dW1xcU10qKSovaSk7XHJcbiAgICAgICAgdmFyIHZpbWVvID0gc3JjLm1hdGNoKC9cXC9cXC8oPzp3d3dcXC4pPyg/OnBsYXllclxcLik/dmltZW8uY29tXFwvKD86dmlkZW9cXC8pPyhbMC05YS16XFwtX10rKSguKik/L2kpO1xyXG4gICAgICAgIHZhciB3aXN0aWEgPSBzcmMubWF0Y2goL2h0dHBzPzpcXC9cXC8oLispPyh3aXN0aWFcXC5jb218d2lcXC5zdClcXC8obWVkaWFzfGVtYmVkKVxcLyhbMC05YS16XFwtX10rKSguKikvKTtcclxuICAgICAgICBpZiAoeW91dHViZSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgeW91dHViZTogeW91dHViZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodmltZW8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZpbWVvOiB2aW1lbyxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAod2lzdGlhKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB3aXN0aWE6IHdpc3RpYSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG59O1xuXG4vLyBAcmVmIC0gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzk3MTg0MS9ob3ctdG8tcmVzaXplLWltYWdlcy1wcm9wb3J0aW9uYWxseS1rZWVwaW5nLXRoZS1hc3BlY3QtcmF0aW9cclxuLy8gQHJlZiAtIGh0dHBzOi8vMmFsaXR5LmNvbS8yMDE3LzA0L3NldHRpbmctdXAtbXVsdGktcGxhdGZvcm0tcGFja2FnZXMuaHRtbFxyXG4vLyBVbmlxdWUgaWQgZm9yIGVhY2ggZ2FsbGVyeVxyXG52YXIgbGdJZCA9IDA7XHJcbnZhciBMaWdodEdhbGxlcnkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBMaWdodEdhbGxlcnkoZWxlbWVudCwgb3B0aW9ucykge1xyXG4gICAgICAgI
5627HRoaXMubGdPcGVuZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmluZGV4ID0gMDtcclxuICAgICAgICAvLyBsaWdodEdhbGxlcnkgbW9kdWxlc1xyXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IFtdO1xyXG4gICAgICAgIC8vIGZhbHNlIHdoZW4gbGlnaHRHYWxsZXJ5IGxvYWQgZmlyc3Qgc2xpZGUgY29udGVudDtcclxuICAgICAgICB0aGlzLmxHYWxsZXJ5T24gPSBmYWxzZTtcclxuICAgICAgICAvLyBUcnVlIHdoZW4gYSBzbGlkZSBhbmltYXRpb24gaXMgaW4gcHJvZ3Jlc3NcclxuICAgICAgICB0aGlzLmxnQnVzeSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEl0ZW1zSW5Eb20gPSBbXTtcclxuICAgICAgICAvLyBTY3JvbGwgdG9wIHZhbHVlIGJlZm9yZSBsaWdodEdhbGxlcnkgaXMgb3BlbmVkXHJcbiAgICAgICAgdGhpcy5wcmV2U2Nyb2xsVG9wID0gMDtcclxuICAgICAgICB0aGlzLmJvZHlQYWRkaW5nUmlnaHQgPSAwO1xyXG4gICAgICAgIHRoaXMuaXNEdW1teUltYWdlUmVtb3ZlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZHJhZ09yU3dpcGVFbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tZWRpYUNvbnRhaW5lclBvc2l0aW9uID0ge1xyXG4gICAgICAgICAgICB0b3A6IDAsXHJcbiAgICAgICAgICAgIGJvdHRvbTogMCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICghZWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGdJZCsrO1xyXG4gICAgICAgIHRoaXMubGdJZCA9IGxnSWQ7XHJcbiAgICAgICAgdGhpcy5lbCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5MR2VsID0gJExHKGVsZW1lbnQpO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVTZXR0aW5ncyhvcHRpb25zKTtcclxuICAgICAgICB0aGlzLmJ1aWxkTW9kdWxlcygpO1xyXG4gICAgICAgIC8vIFdoZW4gdXNpbmcgZHluYW1pYyBtb2RlLCBlbnN1cmUgZHluYW1pY0VsIGlzIGFuIGFycmF5XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZHluYW1pYyAmJlxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzLmR5bmFtaWNFbCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHRoaXMuc2V0dGluZ3MuZHluYW1pY0VsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyAnV2hlbiB1c2luZyBkeW5hbWljIG1vZGUsIHlvdSBtdXN0IGFsc28gZGVmaW5lIGR5bmFtaWNFbCBhcyBhbiBBcnJheS4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdhbGxlcnlJdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgLy8gR2FsbGVyeSBpdGVtc1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGVMaWNlbnNlKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLmdlbmVyYXRlU2V0dGluZ3MgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIC8vIGxpZ2h0R2FsbGVyeSBzZXR0aW5nc1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgbGlnaHRHYWxsZXJ5Q29yZVNldHRpbmdzKSwgb3B0aW9ucyk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuaXNNb2JpbGUgJiZcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2V0dGluZ3MuaXNNb2JpbGUgPT09ICdmdW5jdGlvbidcclxuICAgICAgICAgICAgPyB0aGlzLnNldHRpbmdzLmlzTW9iaWxlKClcclxuICAgICAgICAgICAgOiB1dGlscy5pc01vYmlsZSgpKSB7XHJcbiAgICAgICAgICAgIHZhciBtb2JpbGVTZXR0aW5ncyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCB0aGlzLnNldHRpbmdzLm1vYmlsZVNldHRpbmdzKSwgdGhpcy5zZXR0aW5ncy5tb2JpbGVTZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgdGhpcy5zZXR0aW5ncyksIG1vYmlsZVNldHRpbmdzKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5ub3JtYWxpemVTZXR0aW5ncyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5zbGlkZUVuZEFuaW1hdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzLmhpZGVDb250cm9sT25FbmQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmdzLmNsb3NhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3Muc3dpcGVUb0Nsb3NlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEFuZCByZXNldCBpdCBvbiBjbG9zZSB0byBnZXQgdGhlIGNvcnJlY3QgdmFsdWUgbmV4dCB0aW1lXHJcbiAgICAgICAgdGhpcy56b29tRnJvbU9yaWdpbiA9IHRoaXMuc2V0dGluZ3Muem9vbUZyb21PcmlnaW47XHJcbiAgICAgICAgLy8gQXQgdGhlIG1vbWVudCwgWm9vbSBmcm9tIGltYWdlIGRvZXNuJ3Qgc3VwcG9ydCBkeW5hbWljIG9wdGlvbnNcclxuICAgICAgICAvLyBAdG9kbyBhZGQgem9vbUZyb21PcmlnaW4gc3VwcG9ydCBmb3IgZHluYW1pYyBpbWFnZXNcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5keW5hbWljKSB7XHJcbiAgICAgICAgICAgIHRoaXMuem9vbUZyb21PcmlnaW4gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmdzLmNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzLmNvbnRhaW5lciA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNldHRpbmdzLnByZWxvYWQgc2hvdWxkIG5vdCBiZSBncmF0ZXIgdGhhbiAkaXRlbS5sZW5ndGhcclxuICAgICAgICB0aGlzLnNldHRpbmdzLnByZWxvYWQgPSBNYXRoLm1pbih0aGlzLnNldHRpbmdzLnByZWxvYWQsIHRoaXMuZ2FsbGVyeUl0ZW1zLmxlbmd0aCk7XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgI
5627HZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5hZGRTbGlkZVZpZGVvSW5mbyh0aGlzLmdhbGxlcnlJdGVtcyk7XHJcbiAgICAgICAgdGhpcy5idWlsZFN0cnVjdHVyZSgpO1xyXG4gICAgICAgIHRoaXMuTEdlbC50cmlnZ2VyKGxHRXZlbnRzLmluaXQsIHtcclxuICAgICAgICAgICAgaW5zdGFuY2U6IHRoaXMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3Mua2V5UHJlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5rZXlQcmVzcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgX3RoaXMuZW5hYmxlRHJhZygpO1xyXG4gICAgICAgICAgICBfdGhpcy5lbmFibGVTd2lwZSgpO1xyXG4gICAgICAgICAgICBfdGhpcy50cmlnZ2VyUG9zdGVyQ2xpY2soKTtcclxuICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgdGhpcy5hcnJvdygpO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLm1vdXNld2hlZWwpIHtcclxuICAgICAgICAgICAgdGhpcy5tb3VzZXdoZWVsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5ncy5keW5hbWljKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbkdhbGxlcnlPbkl0ZW1DbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLm9wZW5HYWxsZXJ5T25JdGVtQ2xpY2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2Y
5627XIgX2xvb3BfMSA9IGZ1bmN0aW9uIChpbmRleCkge1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXNfMS5pdGVtc1tpbmRleF07XHJcbiAgICAgICAgICAgIHZhciAkZWxlbWVudCA9ICRMRyhlbGVtZW50KTtcclxuICAgICAgICAgICAgLy8gVXNpbmcgZGlmZmVyZW50IG5hbWVzcGFjZSBmb3IgY2xpY2sgYmVjYXVzZSBjbGljayBldmVudCBzaG91bGQgbm90IHVuYmluZCBpZiBzZWxlY3RvciBpcyBzYW1lIG9iamVjdCgndGhpcycpXHJcbiAgICAgICAgICAgIC8vIEB0b2RvIG1hbmFnZSBhbGwgZXZlbnQgbGlzdG5lcnMgLSBzaG91bGQgaGF2ZSBuYW1lc3BhY2UgdGhhdCByZXByZXNlbnQgZWxlbWVudFxyXG4gICAgICAgICAgICB2YXIgdXVpZCA9IGxnUXVlcnkuZ2VuZXJhdGVVVUlEKCk7XHJcbiAgICAgICAgICAgICRlbGVtZW50XHJcbiAgICAgICAgICAgICAgICAuYXR0cignZGF0YS1sZy1pZCcsIHV1aWQpXHJcbiAgICAgICAgICAgICAgICAub24oXCJjbGljay5sZ2N1c3RvbS1pdGVtLVwiICsgdXVpZCwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50SXRlbUluZGV4ID0gX3RoaXMuc2V0dGluZ3MuaW5kZXggfHwgaW5kZXg7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5vcGVuR2FsbGVyeShjdXJyZW50SXRlbUluZGV4LCBlbGVtZW50KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgdGhpc18xID0gdGhpcztcclxuICAgICAgICAvLyBVc2luZyBmb3IgbG9vcCBpbnN0ZWFkIG9mIHVzaW5nIGJ1YmJsaW5nIGFzIHRoZSBpdGVtcyBjYW4gYmUgYW55IGh0bWwgZWxlbWVudC5cclxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5pdGVtcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgX2xvb3BfMShpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogTW9kdWxlIGNvbnN0cnVjdG9yXHJcbiAgICAgKiBNb2R1bGVzIGFyZSBidWlsZCBpbmNyZW1lbnRhbGx5LlxyXG4gICAgICogR2FsbGVyeSBzaG91bGQgYmUgb3BlbmVkIG9ubHkgb25jZSBhbGwgdGhlIG1vZHVsZXMgYXJlIGluaXRpYWxpemVkLlxyXG4gICAgICogdXNlIG1vZHVsZUJ1aWxkVGltZW91dCB0byBtYWtlIHN1cmUgdGhpc1xyXG4gICAgICovXHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLmJ1aWxkTW9kdWxlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2Y
5627XIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MucGx1Z2lucy5mb3JFYWNoKGZ1bmN0aW9uIChwbHVnaW4pIHtcclxuICAgICAgICAgICAgX3RoaXMucGx1Z2lucy5wdXNoKG5ldyBwbHVnaW4oX3RoaXMsICRMRykpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUudmFsaWRhdGVMaWNlbnNlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5ncy5saWNlbnNlS2V5KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BsZWFzZSBwcm92aWRlIGEgdmFsaWQgbGljZW5zZSBrZXknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5zZXR0aW5ncy5saWNlbnNlS2V5ID09PSAnMDAwMC0wMDAwLTAwMC0wMDAwJykge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJsaWdodEdhbGxlcnk6IFwiICsgdGhpcy5zZXR0aW5ncy5saWNlbnNlS2V5ICsgXCIgbGljZW5zZSBrZXkgaXMgbm90IHZhbGlkIGZvciBwcm9kdWN0aW9uIHVzZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5nZXRTbGlkZUl0ZW0gPSBmdW5jdGlvbiAoaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gJExHKHRoaXMuZ2V0U2xpZGVJdGVtSWQoaW5kZXgpKTtcclxuICAgIH07XHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLmdldFNsaWRlSXRlbUlkID0gZnVuY3Rpb24gKGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIFwiI2xnLWl0ZW0tXCIgKyB0aGlzLmxnSWQgKyBcIi1cIiArIGluZGV4O1xyXG4gICAgfTtcclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUuZ2V0SWROYW1lID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIGlkICsgXCItXCIgKyB0aGlzLmxnSWQ7XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5nZXRFbGVtZW50QnlJZCA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICAgIHJldHVybiAkTEcoXCIjXCIgKyB0aGlzLmdldElkTmFtZShpZCkpO1xyXG4gICAgfTtcclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUubWFuYWdlU2luZ2xlU2xpZGVDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2FsbGVyeUl0ZW1zLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICAgICAgdGhpcy5vdXRlci5hZGRDbGFzcygnbGctc2luZ2xlLWl0ZW0nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub3V0ZXIucmVtb3ZlQ2xhc3MoJ2xnLXNpbmdsZS1pdGVtJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUuYnVpbGRTdHJ1Y3R1cmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2Y
5627XIgY29udGFpbmVyID0gdGhpcy4kY29udGFpbmVyICYmIHRoaXMuJGNvbnRhaW5lci5nZXQoKTtcclxuICAgICAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGNvbnRyb2xzID0gJyc7XHJcbiAgICAgICAgdmFyIHN1Ykh0bWxDb250ID0gJyc7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGNvbnRyb2xzXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuY29udHJvbHMpIHtcclxuICAgICAgICAgICAgY29udHJvbHMgPSBcIjxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBpZD1cXFwiXCIgKyB0aGlzLmdldElkTmFtZSgnbGctcHJldicpICsgXCJcXFwiIGFyaWEtbGFiZWw9XFxcIlwiICsgdGhpcy5zZXR0aW5ncy5zdHJpbmdzWydwcmV2aW91c1NsaWRlJ10gKyBcIlxcXCIgY2xhc3M9XFxcImxnLXByZXYgbGctaWNvblxcXCI+IFwiICsgdGhpcy5zZXR0aW5ncy5wcmV2SHRtbCArIFwiIDwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgaWQ9XFxcIlwiICsgdGhpcy5nZXRJZE5hbWUoJ2xnLW5leHQnKSArIFwiXFxcIiBhcmlhLWxhYmVsPVxcXCJcIiArIHRoaXMuc2V0dGluZ3Muc3RyaW5nc1snbmV4dFNsaWRlJ10gKyBcIlxcXCIgY2xhc3M9XFxcImxnLW5leHQgbGctaWNvblxcXCI+IFwiICsgdGhpcy5zZXR0aW5ncy5uZXh0SHRtbCArIFwiIDwvYnV0dG9uPlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5hcHBlbmRTdWJIdG1sVG8gIT09ICcubGctaXRlbScpIHtcclxuICAgICAgICAgICAgc3ViSHRtbENvbnQgPVxyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJsZy1zdWItaHRtbFwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj48L2Rpdj4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2Y
5627XIgYWRkQ2xhc3NlcyA9ICcnO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmFsbG93TWVkaWFPdmVybGFwKSB7XHJcbiAgICAgICAgICAgIC8vIERvIG5vdCByZW1vdmUgc3BhY2UgYmVmb3JlIGxhc3Qgc2luZ2xlIHF1b3RlXHJcbiAgICAgICAgICAgIGFkZENsYXNzZXMgKz0gJ2xnLW1lZGlhLW92ZXJsYXAgJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGFyaWFMYWJlbGxlZGJ5ID0gdGhpcy5zZXR0aW5ncy5hcmlhTGFiZWxsZWRieVxyXG4gICAgICAgICAgICA/ICdhcmlhLWxhYmVsbGVkYnk9XCInICsgdGhpcy5zZXR0aW5ncy5hcmlhTGFiZWxsZWRieSArICdcIidcclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICB2YXIgYXJpYURlc2NyaWJlZGJ5ID0gdGhpcy5zZXR0aW5ncy5hcmlhRGVzY3JpYmVkYnlcclxuICAgICAgICAgICAgPyAnYXJpYS1kZXNjcmliZWRieT1cIicgKyB0aGlzLnNldHRpbmdzLmFyaWFEZXNjcmliZWRieSArICdcIidcclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICB2YXIgY29udGFpbmVyQ2xhc3NOYW1lID0gXCJsZy1jb250YWluZXIgXCIgKyB0aGlzLnNldHRpbmdzLmFkZENsYXNzICsgXCIgXCIgKyAoZG9jdW1lbnQuYm9keSAhPT0gdGhpcy5zZXR0aW5ncy5jb250YWluZXIgPyAnbGctaW5saW5lJyA6ICcnKTtcclxuICAgICAgICB2YXIgY2xvc2VJY29uID0gdGhpcy5zZXR0aW5ncy5jbG9zYWJsZSAmJiB0aGlzLnNldHRpbmdzLnNob3dDbG9zZUljb25cclxuICAgICAgICAgICAgPyBcIjxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBhcmlhLWxhYmVsPVxcXCJcIiArIHRoaXMuc2V0dGluZ3Muc3RyaW5nc1snY2xvc2VHYWxsZXJ5J10gKyBcIlxcXCIgaWQ9XFxcIlwiICsgdGhpcy5nZXRJZE5hbWUoJ2xnLWNsb3NlJykgKyBcIlxcXCIgY2xhc3M9XFxcImxnLWNsb3NlIGxnLWljb25cXFwiPjwvYnV0dG9uPlwiXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgdmFyIG1heGltaXplSWNvbiA9IHRoaXMuc2V0dGluZ3Muc2hvd01heGltaXplSWNvblxyXG4gICAgICAgICAgICA/IFwiPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGFyaWEtbGFiZWw9XFxcIlwiICsgdGhpcy5zZXR0aW5ncy5zdHJpbmdzWyd0b2dnbGVNYXhpbWl6ZSddICsgXCJcXFwiIGlkPVxcXCJcIiArIHRoaXMuZ2V0SWROYW1lKCdsZy1tYXhpbWl6ZScpICsgXCJcXFwiIGNsYXNzPVxcXCJsZy1tYXhpbWl6ZSBsZy1pY29uXFxcIj48L2J1dHRvbj5cIlxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgIHZhciB0ZW1wbGF0ZSA9IFwiXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJcIiArIGNvbnRhaW5lckNsYXNzTmFtZSArIFwiXFxcIiBpZD1cXFwiXCIgKyB0aGlzLmdldElkTmFtZSgnbGctY29udGFpbmVyJykgKyBcIlxcXCIgdGFiaW5kZXg9XFxcIi0xXFxcIiBhcmlhLW1vZGFsPVxcXCJ0cnVlXFxcIiBcIiArIGFyaWFMYWJlbGxlZGJ5ICsgXCIgXCIgKyBhcmlhRGVzY3JpYmVkYnkgKyBcIiByb2xlPVxcXCJkaWFsb2dcXFwiXFxuICAgICAgICA+XFxuICAgICAgICAgICAgPGRpdiBpZD1cXFwiXCIgKyB0aGlzLmdldElkTmFtZSgnbGctYmFja2Ryb3AnKSArIFwiXFxcIiBjbGFzcz1cXFwibGctYmFja2Ryb3BcXFwiPjwvZGl2PlxcblxcbiAgICAgICAgICAgIDxkaXYgaWQ9XFxcIlwiICsgdGhpcy5nZXRJZE5hbWUoJ2xnLW91dGVyJykgKyBcIlxcXCIgY2xhc3M9XFxcImxnLW91dGVyIGxnLXVzZS1jc3MzIGxnLWNzczMgbGctaGlkZS1pdGVtcyBcIiArIGFkZENsYXNzZXMgKyBcIiBcXFwiPlxcblxcbiAgICAgICAgICAgICAgPGRpdiBpZD1cXFwiXCIgKyB0aGlzLmdldElkTmFtZSgnbGctY29udGVudCcpICsgXCJcXFwiIGNsYXNzPVxcXCJsZy1jb250ZW50XFxcIj5cXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cXFwiXCIgKyB0aGlzLmdldElkTmFtZSgnbGctaW5uZXInKSArIFwiXFxcIiBjbGFzcz1cXFwibGctaW5uZXJcXFwiPlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgXCIgKyBjb250cm9scyArIFwiXFxuICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cXFwiXCIgKyB0aGlzLmdldElkTmFtZSgnbGctdG9vbGJhcicpICsgXCJcXFwiIGNsYXNzPVxcXCJsZy10b29sYmFyIGxnLWdyb3VwXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIFwiICsgbWF4aW1pemVJY29uICsgXCJcXG4gICAgICAgICAgICAgICAgICAgIFwiICsgY2xvc2VJY29uICsgXCJcXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgXCIgKyAodGhpcy5zZXR0aW5ncy5hcHBlbmRTdWJIdG1sVG8gPT09ICcubGctb3V0ZXInXHJcbiAgICAgICAgICAgID8gc3ViSHRtbENvbnRcclxuICAgICAgICAgICAgOiAnJykgKyBcIlxcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVxcXCJcIiArIHRoaXMuZ2V0SWROYW1lKCdsZy1jb21wb25lbnRzJykgKyBcIlxcXCIgY2xhc3M9XFxcImxnLWNvbXBvbmVudHNcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgXCIgKyAodGhpcy5zZXR0aW5ncy5hcHBlbmRTdWJIdG1sVG8gPT09ICcubGctc3ViLWh0bWwnXHJcbiAgICAgICAgICAgID8gc3ViSHRtbENvbnRcclxuICAgICAgICAgICAgOiAnJykgKyBcIlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgXCI7XHJcbiAgICAgICAgJExHKHRoaXMuc2V0dGluZ3MuY29udGFpbmVyKS5hcHBlbmQodGVtcGxhdGUpO1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5ib2R5ICE9PSB0aGlzLnNldHRpbmdzLmNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAkTEcodGhpcy5zZXR0aW5ncy5jb250YWluZXIpLmNzcygncG9zaXRpb24nLCAncmVsYXRpdmUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vdXRlciA9IHRoaXMuZ2V0RWxlbWVudEJ5SWQoJ2xnLW91dGVyJyk7XHJcbiAgICAgICAgdGhpcy4kbGdDb21wb25lbnRzID0gdGhpcy5nZXRFbGVtZW50QnlJZCgnbGctY29tcG9uZW50cycpO1xyXG4gICAgICAgI
5627HRoaXMuJGJhY2tkcm9wID0gdGhpcy5nZXRFbGVtZW50QnlJZCgnbGctYmFja2Ryb3AnKTtcclxuICAgICAgICB0aGlzLiRjb250YWluZXIgPSB0aGlzLmdldEVsZW1lbnRCeUlkKCdsZy1jb250YWluZXInKTtcclxuICAgICAgICB0aGlzLiRpbm5lciA9IHRoaXMuZ2V0RWxlbWVudEJ5SWQoJ2xnLWlubmVyJyk7XHJcbiAgICAgICAgdGhpcy4kY29udGVudCA9IHRoaXMuZ2V0RWxlbWVudEJ5SWQoJ2xnLWNvbnRlbnQnKTtcclxuICAgICAgICB0aGlzLiR0b29sYmFyID0gdGhpcy5nZXRFbGVtZW50QnlJZCgnbGctdG9vbGJhcicpO1xyXG4gICAgICAgIHRoaXMuJGJhY2tkcm9wLmNzcygndHJhbnNpdGlvbi1kdXJhdGlvbicsIHRoaXMuc2V0dGluZ3MuYmFja2Ryb3BEdXJhdGlvbiArICdtcycpO1xyXG4gICAgICAgIHZhciBvdXRlckNsYXNzTmFtZXMgPSB0aGlzLnNldHRpbmdzLm1vZGUgKyBcIiBcIjtcclxuICAgICAgICB0aGlzLm1hbmFnZVNpbmdsZVNsaWRlQ2xhc3NOYW1lKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlRHJhZykge1xyXG4gICAgICAgICAgICBvdXRlckNsYXNzTmFtZXMgKz0gJ2xnLWdyYWIgJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vdXRlci5hZGRDbGFzcyhvdXRlckNsYXNzTmFtZXMpO1xyXG4gICAgICAgIHRoaXMuJGlubmVyLmNzcygndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nLCB0aGlzLnNldHRpbmdzLmVhc2luZyk7XHJcbiAgICAgICAgdGhpcy4kaW5uZXIuY3NzKCd0cmFuc2l0aW9uLWR1cmF0aW9uJywgdGhpcy5zZXR0aW5ncy5zcGVlZCArICdtcycpO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmRvd25sb2FkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHRvb2xiYXIuYXBwZW5kKFwiPGEgaWQ9XFxcIlwiICsgdGhpcy5nZXRJZE5hbWUoJ2xnLWRvd25sb2FkJykgKyBcIlxcXCIgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiIHJlbD1cXFwibm9vcGVuZXJcXFwiIGFyaWEtbGFiZWw9XFxcIlwiICsgdGhpcy5zZXR0aW5ncy5zdHJpbmdzWydkb3dubG9hZCddICsgXCJcXFwiIGRvd25sb2FkIGNsYXNzPVxcXCJsZy1kb3dubG9hZCBsZy1pY29uXFxcIj48L2E+XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvdW50ZXIoKTtcclxuICAgICAgICAkTEcod2luZG93KS5vbihcInJlc2l6ZS5sZy5nbG9iYWxcIiArIHRoaXMubGdJZCArIFwiIG9yaWVudGF0aW9uY2hhbmdlLmxnLmdsb2JhbFwiICsgdGhpcy5sZ0lkLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIF90aGlzLnJlZnJlc2hPblJlc2l6ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaGlkZUJhcnMoKTtcclxuICAgICAgICB0aGlzLm1hbmFnZUNsb3NlR2FsbGVyeSgpO1xyXG4gICAgICAgIHRoaXMudG9nZ2xlTWF4aW1pemUoKTtcclxuICAgICAgICB0aGlzLmluaXRNb2R1bGVzKCk7XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5yZWZyZXNoT25SZXNpemUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubGdPcGVuZWQpIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRHYWxsZXJ5SXRlbSA9IHRoaXMuZ2FsbGVyeUl0ZW1zW3RoaXMuaW5kZXhdO1xyXG4gICAgICAgICAgICB2Y
5627XIgX19zbGlkZVZpZGVvSW5mbyA9IGN1cnJlbnRHYWxsZXJ5SXRlbS5fX3NsaWRlVmlkZW9JbmZvO1xyXG4gICAgICAgICAgICB0aGlzLm1lZGlhQ29udGFpbmVyUG9zaXRpb24gPSB0aGlzLmdldE1lZGlhQ29udGFpbmVyUG9zaXRpb24oKTtcclxuICAgICAgICAgICAgdmFyIF9hID0gdGhpcy5tZWRpYUNvbnRhaW5lclBvc2l0aW9uLCB0b3BfMSA9IF9hLnRvcCwgYm90dG9tID0gX2EuYm90dG9tO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRJbWFnZVNpemUgPSB1dGlscy5nZXRTaXplKHRoaXMuaXRlbXNbdGhpcy5pbmRleF0sIHRoaXMub3V0ZXIsIHRvcF8xICsgYm90dG9tLCBfX3NsaWRlVmlkZW9JbmZvICYmIHRoaXMuc2V0dGluZ3MudmlkZW9NYXhTaXplKTtcclxuICAgICAgICAgICAgaWYgKF9fc2xpZGVWaWRlb0luZm8pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplVmlkZW9TbGlkZSh0aGlzLmluZGV4LCB0aGlzLmN1cnJlbnRJbWFnZVNpemUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnpvb21Gcm9tT3JpZ2luICYmICF0aGlzLmlzRHVtbXlJbWFnZVJlbW92ZWQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbWdTdHlsZSA9IHRoaXMuZ2V0RHVtbXlJbWdTdHlsZXModGhpcy5jdXJyZW50SW1hZ2VTaXplKTtcclxuICAgICAgICAgICAgICAgIHRoaXMub3V0ZXJcclxuICAgICAgICAgICAgICAgICAgICAuZmluZCgnLmxnLWN1cnJlbnQgLmxnLWR1bW15LWltZycpXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpcnN0KClcclxuICAgICAgICAgICAgICAgICAgICAuYXR0cignc3R5bGUnLCBpbWdTdHlsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5MR2VsLnRyaWdnZXIobEdFdmVudHMuY29udGFpbmVyUmVzaXplKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5yZXNpemVWaWRlb1NsaWRlID0gZnVuY3Rpb24gKGluZGV4LCBpbWFnZVNpemUpIHtcclxuICAgICAgICB2Y
5627XIgbGdWaWRlb1N0eWxlID0gdGhpcy5nZXRWaWRlb0NvbnRTdHlsZShpbWFnZVNpemUpO1xyXG4gICAgICAgIHZhciBjdXJyZW50U2xpZGUgPSB0aGlzLmdldFNsaWRlSXRlbShpbmRleCk7XHJcbiAgICAgICAgY3VycmVudFNsaWRlLmZpbmQoJy5sZy12aWRlby1jb250JykuYXR0cignc3R5bGUnLCBsZ1ZpZGVvU3R5bGUpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHNsaWRlcyBkeW5hbWljYWxseS5cclxuICAgICAqIEFkZCwgZWRpdCBvciBkZWxldGUgc2xpZGVzIGR5bmFtaWNhbGx5IHdoZW4gbGlnaHRHYWxsZXJ5IGlzIG9wZW5lZC5cclxuICAgICAqIE1vZGlmeSB0aGUgY3VycmVudCBnYWxsZXJ5IGl0ZW1zIGFuZCBwYXNzIGl0IHZpYSB1cGRhdGVTbGlkZXMgbWV0aG9kXHJcbiAgICAgKiBAbm90ZVxyXG4gICAgICogLSBEbyBub3QgbXV0YXRlIGV4aXN0aW5nIGxpZ2h0R2FsbGVyeSBpdGVtcyBkaXJlY3RseS5cclxuICAgICAqIC0gQWx3YXlzIHBhc3MgbmV3IGxpc3Qgb2YgZ2FsbGVyeSBpdGVtc1xyXG4gICAgICogLSBZb3UgbmVlZCB0byB0YWtlIGNhcmUgb2YgdGh1bWJuYWlscyBvdXRzaWRlIHRoZSBnYWxsZXJ5IGlmIGFueVxyXG4gICAgICogLSB1c2VyIHRoaXMgbWV0aG9kIG9ubHkgaWYgeW91IHdhbnQgdG8gdXBkYXRlIHNsaWRlcyB3aGVuIHRoZSBnYWxsZXJ5IGlzIG9wZW5lZC4gT3RoZXJ3aXNlLCB1c2UgYHJlZnJlc2goKWAgbWV0aG9kLlxyXG4gICAgICogQHBhcmFtIGl0ZW1zIEdhbGxlcnkgaXRlbXNcclxuICAgICAqIEBwYXJhbSBpbmRleCBBZnRlciB0aGUgdXBkYXRlIG9wZXJhdGlvbiwgd2hpY2ggc2xpZGUgZ2FsbGVyeSBzaG91bGQgbmF2aWdhdGUgdG9cclxuICAgICAqIEBjYXRlZ29yeSBsR1B1YmxpY01ldGhvZHNcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBjb25zdCBwbHVnaW4gPSBsaWdodEdhbGxlcnkoKTtcclxuICAgICAqXHJcbiAgICAgKiAvLyBBZGRpbmcgc2xpZGVzIGR5bmFtaWNhbGx5XHJcbiAgICAgKiBsZXQgZ2FsbGVyeUl0ZW1zID0gW1xyXG4gICAgICogLy8gQWNjZXNzIGV4aXN0aW5nIGxpZ2h0R2FsbGVyeSBpdGVtc1xyXG4gICAgICogLy8gZ2FsbGVyeUl0ZW1zIGFyZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBpbnRlcm5hbGx5IGZyb20gdGhlIGdhbGxlcnkgSFRNTCBtYXJrdXBcclxuICAgICAqIC8vIG9yIGRpcmVjdGx5IGZyb20gZ2FsbGVyeUl0ZW1zIHdoZW4gZHluYW1pYyBnYWxsZXJ5IGlzIHVzZWRcclxuICAgICAqICAgLi4ucGx1Z2luLmdhbGxlcnlJdGVtcyxcclxuICAgICAqICAgICAuLi5bXHJcbiAgICAgKiAgICAgICB7XHJcbiAgICAgKiAgICAgICAgIHNyYzogJ2ltZy9pbWctMS5wbmcnLFxyXG4gICAgICogICAgICAgICAgIHRodW1iOiAnaW1nL3RodW1iMS5wbmcnLFxyXG4gICAgICogICAgICAgICB9LFxyXG4gICAgICogICAgIF0sXHJcbiAgICAgKiAgIF07XHJcbiAgICAgKiAgIHBsdWdpbi51cGRhdGVTbGlkZXMoXHJcbiAgICAgKiAgICAgZ2FsbGVyeUl0ZW1zLFxyXG4gICAgICogICAgIHBsdWdpbi5pbmRleCxcclxuICAgICAqICAgKTtcclxuICAgICAqXHJcbiAgICAgKlxyXG4gICAgICogLy8gUmVtb3ZlIHNsaWRlcyBkeW5hbWljYWxseVxyXG4gICAgICogZ2FsbGVyeUl0ZW1zID0gSlNPTi5wYXJzZShcclxuICAgICAqICAgSlNPTi5zdHJpbmdpZnkodXBkYXRlU2xpZGVJbnN0YW5jZS5nYWxsZXJ5SXRlbXMpLFxyXG4gICAgICogKTtcclxuICAgICAqIGdhbGxlcnlJdGVtcy5zaGlmdCgpO1xyXG4gICAgICogdXBkYXRlU2xpZGVJbnN0YW5jZS51cGRhdGVTbGlkZXMoZ2FsbGVyeUl0ZW1zLCAxKTtcclxuICAgICAqIEBzZWUgPGEgaHJlZj1cIi9kZW1vcy91cGRhdGUtc2xpZGVzL1wiPkRlbW88L2E+XHJcbiAgICAgKi9cclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUudXBkYXRlU2xpZGVzID0gZnVuY3Rpb24gKGl0ZW1zLCBpbmRleCkge1xyXG4gICAgICAgIGlmICh0aGlzLmluZGV4ID4gaXRlbXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLmluZGV4ID0gaXRlbXMubGVuZ3RoIC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLmluZGV4ID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZUdhbGxlcnkoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2Y
5627XIgY3VycmVudFNyYyA9IHRoaXMuZ2FsbGVyeUl0ZW1zW2luZGV4XS5zcmM7XHJcbiAgICAgICAgdGhpcy5nYWxsZXJ5SXRlbXMgPSBpdGVtcztcclxuICAgICAgICB0aGlzLnVwZGF0ZUNvbnRyb2xzKCk7XHJcbiAgICAgICAgdGhpcy4kaW5uZXIuZW1wdHkoKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRJdGVtc0luRG9tID0gW107XHJcbiAgICAgICAgdmFyIF9pbmRleCA9IDA7XHJcbiAgICAgICAgLy8gRmluZCB0aGUgY3VycmVudCBpbmRleCBiYXNlZCBvbiBzb3VyY2UgdmFsdWUgb2YgdGhlIHNsaWRlXHJcbiAgICAgICAgdGhpcy5nYWxsZXJ5SXRlbXMuc29tZShmdW5jdGlvbiAoZ2FsbGVyeUl0ZW0sIGl0ZW1JbmRleCkge1xyXG4gICAgICAgICAgICBpZiAoZ2FsbGVyeUl0ZW0uc3JjID09PSBjdXJyZW50U3JjKSB7XHJcbiAgICAgICAgICAgICAgICBfaW5kZXggPSBpdGVtSW5kZXg7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50SXRlbXNJbkRvbSA9IHRoaXMub3JnYW5pemVTbGlkZUl0ZW1zKF9pbmRleCwgLTEpO1xyXG4gICAgICAgIHRoaXMubG9hZENvbnRlbnQoX2luZGV4LCB0cnVlKTtcclxuICAgICAgICB0aGlzLmdldFNsaWRlSXRlbShfaW5kZXgpLmFkZENsYXNzKCdsZy1jdXJyZW50Jyk7XHJcbiAgICAgICAgdGhpcy5pbmRleCA9IF9pbmRleDtcclxuICAgICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRDb3VudGVyKF9pbmRleCk7XHJcbiAgICAgICAgdGhpcy5MR2VsLnRyaWdnZXIobEdFdmVudHMudXBkYXRlU2xpZGVzKTtcclxuICAgIH07XHJcbiAgICAvLyBHZXQgZ2FsbGVyeSBpdGVtcyBiYXNlZCBvbiBtdWx0aXBsZSBjb25kaXRpb25zXHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLmdldEl0ZW1zID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIEdhbGxlcnkgaXRlbXNcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmdzLmR5bmFtaWMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3Muc2VsZWN0b3IgPT09ICd0aGlzJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHRoaXMuZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc2V0dGluZ3Muc2VsZWN0b3IpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXR0aW5ncy5zZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5zZWxlY3RXaXRoaW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdFdpdGhpbiA9ICRMRyh0aGlzLnNldHRpbmdzLnNlbGVjdFdpdGhpbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMgPSBzZWxlY3RXaXRoaW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKHRoaXMuc2V0dGluZ3Muc2VsZWN0b3IpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuc2V0dGluZ3Muc2VsZWN0b3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLnNldHRpbmdzLnNlbGVjdG9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuZWwuY2hpbGRyZW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHV0aWxzLmdldER5bmFtaWNPcHRpb25zKHRoaXMuaXRlbXMsIHRoaXMuc2V0dGluZ3MuZXh0cmFQcm9wcywgdGhpcy5zZXR0aW5ncy5nZXRDYXB0aW9uRnJvbVRpdGxlT3JBbHQsIHRoaXMuc2V0dGluZ3MuZXhUaHVtYkltYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmR5bmFtaWNFbCB8fCBbXTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5zaG91bGRIaWRlU2Nyb2xsYmFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zZXR0aW5ncy5oaWRlU2Nyb2xsYmFyICYmXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkgPT09IHRoaXMuc2V0dGluZ3MuY29udGFpbmVyKTtcclxuICAgIH07XHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLmhpZGVTY3JvbGxiYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZEhpZGVTY3JvbGxiYXIoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYm9keVBhZGRpbmdSaWdodCA9IHBhcnNlRmxvYXQoJExHKCdib2R5Jykuc3R5bGUoKS5wYWRkaW5nUmlnaHQpO1xyXG4gICAgICAgIHZhciBib2R5UmVjdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICB2Y
5627XIgc2Nyb2xsYmFyV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCAtIGJvZHlSZWN0LndpZHRoO1xyXG4gICAgICAgICRMRyhkb2N1bWVudC5ib2R5KS5jc3MoJ3BhZGRpbmctcmlnaHQnLCBzY3JvbGxiYXJXaWR0aCArIHRoaXMuYm9keVBhZGRpbmdSaWdodCArICdweCcpO1xyXG4gICAgICAgICRMRyhkb2N1bWVudC5ib2R5KS5hZGRDbGFzcygnbGctb3ZlcmxheS1vcGVuJyk7XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5yZXNldFNjcm9sbEJhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkSGlkZVNjcm9sbGJhcigpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgJExHKGRvY3VtZW50LmJvZHkpLmNzcygncGFkZGluZy1yaWdodCcsIHRoaXMuYm9keVBhZGRpbmdSaWdodCArICdweCcpO1xyXG4gICAgICAgICRMRyhkb2N1bWVudC5ib2R5KS5yZW1vdmVDbGFzcygnbGctb3ZlcmxheS1vcGVuJyk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBPcGVuIGxpZ2h0R2FsbGVyeS5cclxuICAgICAqIE9wZW4gZ2FsbGVyeSB3aXRoIHNwZWNpZmljIHNsaWRlIGJ5IHBhc3NpbmcgaW5kZXggb2YgdGhlIHNsaWRlIGFzIHBhcmFtZXRlci5cclxuICAgICAqIEBjYXRlZ29yeSBsR1B1YmxpY01ldGhvZHNcclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBpbmRleCAgLSBpbmRleCBvZiB0aGUgc2xpZGVcclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBXaGljaCBpbWFnZSBsaWdodEdhbGxlcnkgc2hvdWxkIHpvb20gZnJvbVxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBjb25zdCAkZHluYW1pY0dhbGxlcnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHluYW1pYy1nYWxsZXJ5LWRlbW8nKTtcclxuICAgICAqIGNvbnN0IGR5bmFtaWNHYWxsZXJ5ID0gbGlnaHRHYWxsZXJ5KCRkeW5hbWljR2FsbGVyeSwge1xyXG4gICAgICogICAgIGR5bmFtaWM6IHRydWUsXHJcbiAgICAgKiAgICAgZHluYW1pY0VsOiBbXHJcbiAgICAgKiAgICAgICAgIHtcclxuICAgICAqICAgICAgICAgICAgICBzcmM6ICdpbWcvMS5qcGcnLFxyXG4gICAgICogICAgICAgICAgICAgIHRodW1iOiAnaW1nL3RodW1iLTEuanBnJyxcclxuICAgICAqICAgICAgICAgICAgICBzdWJIdG1sOiAnPGg0PkltYWdlIDEgdGl0bGU8L2g0PjxwPkltYWdlIDEgZGVzY3JpcHRpb25zLjwvcD4nLFxyXG4gICAgICogICAgICAgICB9LFxyXG4gICAgICogICAgICAgICAuLi5cclxuICAgICAqICAgICBdLFxyXG4gICAgICogfSk7XHJcbiAgICAgKiAkZHluYW1pY0dhbGxlcnkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgKiAgICAgLy8gU3RhcnRzIHdpdGggdGhpcmQgaXRlbS4oT3B0aW9uYWwpLlxyXG4gICAgICogICAgIC8vIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHVzZSBkeW5hbWljIG1vZGUgd2l0aFxyXG4gICAgICogICAgIC8vIGN1c3RvbSB0aHVtYm5haWxzICh0aHVtYm5haWxzIG91dHNpZGUgZ2FsbGVyeSksXHJcbiAgICAgKiAgICAgZHluYW1pY0dhbGxlcnkub3BlbkdhbGxlcnkoMik7XHJcbiAgICAgKiB9KTtcclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUub3BlbkdhbGxlcnkgPSBmdW5jdGlvbiAoaW5kZXgsIGVsZW1lbnQpIHtcclxuICAgICAgICB2Y
5627XIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmIChpbmRleCA9PT0gdm9pZCAwKSB7IGluZGV4ID0gdGhpcy5zZXR0aW5ncy5pbmRleDsgfVxyXG4gICAgICAgIC8vIHByZXZlbnQgYWNjaWRlbnRhbCBkb3VibGUgZXhlY3V0aW9uXHJcbiAgICAgICAgaWYgKHRoaXMubGdPcGVuZWQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB0aGlzLmxnT3BlbmVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm91dGVyLnJlbW92ZUNsYXNzKCdsZy1oaWRlLWl0ZW1zJyk7XHJcbiAgICAgICAgdGhpcy5oaWRlU2Nyb2xsYmFyKCk7XHJcbiAgICAgICAgLy8gQWRkIGRpc3BsYXkgYmxvY2ssIGJ1dCBzdGlsbCBoYXMgb3BhY2l0eSAwXHJcbiAgICAgICAgdGhpcy4kY29udGFpbmVyLmFkZENsYXNzKCdsZy1zaG93Jyk7XHJcbiAgICAgICAgdmFyIGl0ZW1zVG9CZUluc2VydGVkVG9Eb20gPSB0aGlzLmdldEl0ZW1zVG9CZUluc2VydGVkVG9Eb20oaW5kZXgsIGluZGV4KTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRJdGVtc0luRG9tID0gaXRlbXNUb0JlSW5zZXJ0ZWRUb0RvbTtcclxuICAgICAgICB2YXIgaXRlbXMgPSAnJztcclxuICAgICAgICBpdGVtc1RvQmVJbnNlcnRlZFRvRG9tLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgaXRlbXMgPSBpdGVtcyArIChcIjxkaXYgaWQ9XFxcIlwiICsgaXRlbSArIFwiXFxcIiBjbGFzcz1cXFwibGctaXRlbVxcXCI+PC9kaXY+XCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuJGlubmVyLmFwcGVuZChpdGVtcyk7XHJcbiAgICAgICAgdGhpcy5hZGRIdG1sKGluZGV4KTtcclxuICAgICAgICB2Y
5627XIgdHJhbnNmb3JtID0gJyc7XHJcbiAgICAgICAgdGhpcy5tZWRpYUNvbnRhaW5lclBvc2l0aW9uID0gdGhpcy5nZXRNZWRpYUNvbnRhaW5lclBvc2l0aW9uKCk7XHJcbiAgICAgICAgdmFyIF9hID0gdGhpcy5tZWRpYUNvbnRhaW5lclBvc2l0aW9uLCB0b3AgPSBfYS50b3AsIGJvdHRvbSA9IF9hLmJvdHRvbTtcclxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZ3MuYWxsb3dNZWRpYU92ZXJsYXApIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRNZWRpYUNvbnRhaW5lclBvc2l0aW9uKHRvcCwgYm90dG9tKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIF9fc2xpZGVWaWRlb0luZm8gPSB0aGlzLmdhbGxlcnlJdGVtc1tpbmRleF0uX19zbGlkZVZpZGVvSW5mbztcclxuICAgICAgICBpZiAodGhpcy56b29tRnJvbU9yaWdpbiAmJiBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEltYWdlU2l6ZSA9IHV0aWxzLmdldFNpemUoZWxlbWVudCwgdGhpcy5vdXRlciwgdG9wICsgYm90dG9tLCBfX3NsaWRlVmlkZW9JbmZvICYmIHRoaXMuc2V0dGluZ3MudmlkZW9NYXhTaXplKTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtID0gdXRpbHMuZ2V0VHJhbnNmb3JtKGVsZW1lbnQsIHRoaXMub3V0ZXIsIHRvcCwgYm90dG9tLCB0aGlzLmN1cnJlbnRJbWFnZVNpemUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuem9vbUZyb21PcmlnaW4gfHwgIXRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLm91dGVyLmFkZENsYXNzKHRoaXMuc2V0dGluZ3Muc3RhcnRDbGFzcyk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0U2xpZGVJdGVtKGluZGV4KS5yZW1vdmVDbGFzcygnbGctY29tcGxldGUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHRpbWVvdXQgPSB0aGlzLnNldHRpbmdzLnpvb21Gcm9tT3JpZ2luXHJcbiAgICAgICAgICAgID8gMTAwXHJcbiAgICAgICAgICAgIDogdGhpcy5zZXR0aW5ncy5iYWNrZHJvcER1cmF0aW9uO1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBfdGhpcy5vdXRlci5hZGRDbGFzcygnbGctY29tcG9uZW50cy1vcGVuJyk7XHJcbiAgICAgICAgfSwgdGltZW91dCk7XHJcbiAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xyXG4gICAgICAgIHRoaXMuTEdlbC50cmlnZ2VyKGxHRXZlbnRzLmJlZm9yZU9wZW4pO1xyXG4gICAgICAgIC8vIGFkZCBjbGFzcyBsZy1jdXJyZW50IHRvIHJlbW92ZSBpbml0aWFsIHRyYW5zaXRpb25cclxuICAgICAgICB0aGlzLmdldFNsaWRlSXRlbShpbmRleCkuYWRkQ2xhc3MoJ2xnLWN1cnJlbnQnKTtcclxuICAgICAgICB0aGlzLmxHYWxsZXJ5T24gPSBmYWxzZTtcclxuICAgICAgICAvLyBTdG9yZSB0aGUgY3VycmVudCBzY3JvbGwgdG9wIHZhbHVlIHRvIHNjcm9sbCBiYWNrIGFmdGVyIGNsb3NpbmcgdGhlIGdhbGxlcnkuLlxyXG4gICAgICAgIHRoaXMucHJldlNjcm9sbFRvcCA9ICRM
5627Ryh3aW5kb3cpLnNjcm9sbFRvcCgpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAvLyBOZWVkIHRvIGNoZWNrIGJvdGggem9vbUZyb21PcmlnaW4gYW5kIHRyYW5zZm9ybSB2YWx1ZXMgYXMgd2UgbmVlZCB0byBzZXQgc2V0IHRoZVxyXG4gICAgICAgICAgICAvLyBkZWZhdWx0IG9wZW5pbmcgYW5pbWF0aW9uIGlmIHVzZXIgbWlzc2VkIHRvIGFkZCB0aGUgbGctc2l6ZSBhdHRyaWJ1dGVcclxuICAgICAgICAgICAgaWYgKF90aGlzLnpvb21Gcm9tT3JpZ2luICYmIHRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRTbGlkZV8xID0gX3RoaXMuZ2V0U2xpZGVJdGVtKGluZGV4KTtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRTbGlkZV8xLmNzcygndHJhbnNmb3JtJywgdHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTbGlkZV8xXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnbGctc3RhcnQtcHJvZ3Jlc3MgbGctc3RhcnQtZW5kLXByb2dyZXNzJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygndHJhbnNpdGlvbi1kdXJhdGlvbicsIF90aGlzLnNldHRpbmdzLnN0YXJ0QW5pbWF0aW9uRHVyYXRpb24gKyAnbXMnKTtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5vdXRlci5hZGRDbGFzcygnbGctem9vbS1mcm9tLWltYWdlJyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTbGlkZV8xLmNzcygndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZTNkKDAsIDAsIDApJyk7XHJcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuJGJhY2tkcm9wLmFkZENsYXNzKCdpbicpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuJGNvbnRhaW5lci5hZGRDbGFzcygnbGctc2hvdy1pbicpO1xyXG4gICAgICAgICAgICB9LCAxMCk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLnNldHRpbmdzLnRyYXBGb2N1cyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkgPT09IF90aGlzLnNldHRpbmdzLmNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnRyYXBGb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCBfdGhpcy5zZXR0aW5ncy5iYWNrZHJvcER1cmF0aW9uICsgNTApO1xyXG4gICAgICAgICAgICAvLyBsZy12aXNpYmxlIGNsYXNzIHJlc2V0cyBnYWxsZXJ5IG9wYWNpdHkgdG8gMVxyXG4gICAgICAgICAgICBpZiAoIV90aGlzLnpvb21Gcm9tT3JpZ2luIHx8ICF0cmFuc2Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLm91dGVyLmFkZENsYXNzKCdsZy12aXNpYmxlJyk7XHJcbiAgICAgICAgICAgICAgICB9LCBfdGhpcy5zZXR0aW5ncy5iYWNrZHJvcER1cmF0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpbml0aWF0ZSBzbGlkZSBmdW5jdGlvblxyXG4gICAgICAgICAgICBfdGhpcy5zbGlkZShpbmRleCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIF90aGlzLkxHZWwudHJpZ2dlcihsR0V2ZW50cy5hZnRlck9wZW4pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5ib2R5ID09PSB0aGlzLnNldHRpbmdzLmNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAkTEcoJ2h0bWwnKS5hZGRDbGFzcygnbGctb24nKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBOb3RlIC0gQ2hhbmdpbmcgdGhlIHBvc2l0aW9uIG9mIHRoZSBtZWRpYSBvbiBldmVyeSBzbGlkZSB0cmFuc2l0aW9uIGNyZWF0ZXMgYSBmbGlja2VyaW5nIGVmZmVjdC5cclxuICAgICAqIFRoZXJlZm9yZSzCoFRoZSBoZWlnaHQgb2YgdGhlIGNhcHRpb24gaXMgY2FsY3VsYXRlZCBkeW5hbWljYWxseSwgb25seSBvbmNlIGJhc2VkIG9uIHRoZSBmaXJzdCBzbGlkZSBjYXB0aW9uLlxyXG4gICAgICogaWYgeW91IGhhdmUgZHluYW1pYyBjYXB0aW9ucyBmb3IgZWFjaCBtZWRpYSxcclxuICAgICAqIHlvdSBjYW4gcHJvdmlkZSBhbiBhcHByb3ByaWF0ZSBoZWlnaHQgZm9yIHRoZSBjYXB0aW9ucyB2aWEgYWxsb3dNZWRpYU92ZXJsYXAgb3B0aW9uXHJcbiAgICAgKi9cclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUuZ2V0TWVkaWFDb250YWluZXJQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5hbGxvd01lZGlhT3ZlcmxhcCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdG9wOiAwLFxyXG4gICAgICAgICAgICAgICAgYm90dG9tOiAwLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB2Y
5627XIgdG9wID0gdGhpcy4kdG9vbGJhci5nZXQoKS5jbGllbnRIZWlnaHQgfHwgMDtcclxuICAgICAgICB2YXIgc3ViSHRtbCA9IHRoaXMub3V0ZXIuZmluZCgnLmxnLWNvbXBvbmVudHMgLmxnLXN1Yi1odG1sJykuZ2V0KCk7XHJcbiAgICAgICAgdmFyIGNhcHRpb25IZWlnaHQgPSB0aGlzLnNldHRpbmdzLmRlZmF1bHRDYXB0aW9uSGVpZ2h0IHx8XHJcbiAgICAgICAgICAgIChzdWJIdG1sICYmIHN1Ykh0bWwuY2xpZW50SGVpZ2h0KSB8fFxyXG4gICAgICAgICAgICAwO1xyXG4gICAgICAgIHZhciB0aHVtYkNvbnRhaW5lciA9IHRoaXMub3V0ZXIuZmluZCgnLmxnLXRodW1iLW91dGVyJykuZ2V0KCk7XHJcbiAgICAgICAgdmFyIHRodW1iSGVpZ2h0ID0gdGh1bWJDb250YWluZXIgPyB0aHVtYkNvbnRhaW5lci5jbGllbnRIZWlnaHQgOiAwO1xyXG4gICAgICAgIHZhciBib3R0b20gPSB0aHVtYkhlaWdodCArIGNhcHRpb25IZWlnaHQ7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdG9wOiB0b3AsXHJcbiAgICAgICAgICAgIGJvdHRvbTogYm90dG9tLFxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5zZXRNZWRpYUNvbnRhaW5lclBvc2l0aW9uID0gZnVuY3Rpb24gKHRvcCwgYm90dG9tKSB7XHJcbiAgICAgICAgaWYgKHRvcCA9PT0gdm9pZCAwKSB7IHRvcCA9IDA7IH1cclxuICAgICAgICBpZiAoYm90dG9tID09PSB2b2lkIDApIHsgYm90dG9tID0gMDsgfVxyXG4gICAgICAgIHRoaXMuJGNvbnRlbnQuY3NzKCd0b3AnLCB0b3AgKyAncHgnKS5jc3MoJ2JvdHRvbScsIGJvdHRvbSArICdweCcpO1xyXG4gICAgfTtcclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUuaGlkZUJhcnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICAvLyBIaWRlIGNvbnRyb2xsZXJzIGlmIG1vdXNlIGRvZXNuJ3QgbW92ZSBmb3Igc29tZSBwZXJpb2RcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgX3RoaXMub3V0ZXIucmVtb3ZlQ2xhc3MoJ2xnLWhpZGUtaXRlbXMnKTtcclxuICAgICAgICAgICAgaWYgKF90aGlzLnNldHRpbmdzLmhpZGVCYXJzRGVsYXkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5vdXRlci5vbignbW91c2Vtb3ZlLmxnIGNsaWNrLmxnIHRvdWNoc3RhcnQubGcnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMub3V0ZXIucmVtb3ZlQ2xhc3MoJ2xnLWhpZGUtaXRlbXMnKTtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoX3RoaXMuaGlkZUJhclRpbWVvdXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRpbWVvdXQgd2lsbCBiZSBjbGVhcmVkIG9uIGVhY2ggc2xpZGUgbW92ZW1lbnQgYWxzb1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmhpZGVCYXJUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLm91dGVyLmFkZENsYXNzKCdsZy1oaWRlLWl0ZW1zJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgX3RoaXMuc2V0dGluZ3MuaGlkZUJhcnNEZWxheSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIF90aGlzLm91dGVyLnRyaWdnZXIoJ21vdXNlbW92ZS5sZycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdGhpcy5zZXR0aW5ncy5zaG93QmFyc0FmdGVyKTtcclxuICAgIH07XHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLmluaXRQaWN0dXJlRmlsbCA9IGZ1bmN0aW9uICgkaW1nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3Muc3VwcG9ydExlZ2FjeUJyb3dzZXIpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHBpY3R1cmVmaWxsKHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50czogWyRpbWcuZ2V0KCldLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignbGlnaHRHYWxsZXJ5IDotIElmIHlvdSB3YW50IHNyY3NldCBvciBwaWN0dXJlIHRhZyB0byBiZSBzdXBwb3J0ZWQgZm9yIG9sZGVyIGJyb3dzZXIgcGxlYXNlIGluY2x1ZGUgcGljdHVyZWZpbCBqYXZhc2NyaXB0IGxpYnJhcnkgaW4geW91ciBkb2N1bWVudC4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqICBAZGVzYyBDcmVhdGUgaW1hZ2UgY291bnRlclxyXG4gICAgICogIEV4OiAxLzEwXHJcbiAgICAgKi9cclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUuY291bnRlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5jb3VudGVyKSB7XHJcbiAgICAgICAgICAgIHZhciBjb3VudGVySHRtbCA9IFwiPGRpdiBjbGFzcz1cXFwibGctY291bnRlclxcXCIgcm9sZT1cXFwic3RhdHVzXFxcIiBhcmlhLWxpdmU9XFxcInBvbGl0ZVxcXCI+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGlkPVxcXCJcIiArIHRoaXMuZ2V0SWROYW1lKCdsZy1jb3VudGVyLWN1cnJlbnQnKSArIFwiXFxcIiBjbGFzcz1cXFwibGctY291bnRlci1jdXJyZW50XFxcIj5cIiArICh0aGlzLmluZGV4ICsgMSkgKyBcIiA8L3NwYW4+IC9cXG4gICAgICAgICAgICAgICAgPHNwYW4gaWQ9XFxcIlwiICsgdGhpcy5nZXRJZE5hbWUoJ2xnLWNvdW50ZXItYWxsJykgKyBcIlxcXCIgY2xhc3M9XFxcImxnLWNvdW50ZXItYWxsXFxcIj5cIiArIHRoaXMuZ2FsbGVyeUl0ZW1zLmxlbmd0aCArIFwiIDwvc3Bhbj48L2Rpdj5cIjtcclxuICAgICAgICAgICAgdGhpcy5vdXRlci5maW5kKHRoaXMuc2V0dGluZ3MuYXBwZW5kQ291bnRlclRvKS5hcHBlbmQoY291bnRlckh0bWwpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqICBAZGVzYyBhZGQgc3ViLWh0bWwgaW50byB0aGUgc2xpZGVcclxuICAgICAqICBAcGFyYW0ge051bWJlcn0gaW5kZXggLSBpbmRleCBvZiB0aGUgc2xpZGVcclxuICAgICAqL1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5hZGRIdG1sID0gZnVuY3Rpb24gKGluZGV4KSB7XHJcbiAgICAgICAgdmFyIHN1Ykh0bWw7XHJcbiAgICAgICAgdmFyIHN1Ykh0bWxVcmw7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2FsbGVyeUl0ZW1zW2luZGV4XS5zdWJIdG1sVXJsKSB7X
5627HJcbiAgICAgICAgICAgIHN1Ykh0bWxVcmwgPSB0aGlzLmdhbGxlcnlJdGVtc1tpbmRleF0uc3ViSHRtbFVybDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHN1Ykh0bWwgPSB0aGlzLmdhbGxlcnlJdGVtc1tpbmRleF0uc3ViSHRtbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzdWJIdG1sVXJsKSB7XHJcbiAgICAgICAgICAgIGlmIChzdWJIdG1sKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBnZXQgZmlyc3QgbGV0dGVyIG9mIHN1Yi1odG1sXHJcbiAgICAgICAgICAgICAgICAvLyBpZiBmaXJzdCBsZXR0ZXIgc3RhcnRzIHdpdGggLiBvciAjIGdldCB0aGUgaHRtbCBmb3JtIHRoZSBqUXVlcnkgb2JqZWN0XHJcbiAgICAgICAgICAgICAgICB2YXIgZkwgPSBzdWJIdG1sLnN1YnN0cmluZygwLCAxKTtcclxuICAgICAgICAgICAgICAgIGlmIChmTCA9PT0gJy4nIHx8IGZMID09PSAnIycpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5zdWJIdG1sU2VsZWN0b3JSZWxhdGl2ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5zZXR0aW5ncy5keW5hbWljKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Ykh0bWwgPSAkTEcodGhpcy5pdGVtcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5lcShpbmRleClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKHN1Ykh0bWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlyc3QoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmh0bWwoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Ykh0bWwgPSAkTEcoc3ViSHRtbCkuZmlyc3QoKS5odG1sKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3ViSHRtbCA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmFwcGVuZFN1Ykh0bWxUbyAhPT0gJy5sZy1pdGVtJykge1xyXG4gICAgICAgICAgICBpZiAoc3ViSHRtbFVybCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRlci5maW5kKCcubGctc3ViLWh0bWwnKS5sb2FkKHN1Ykh0bWxVcmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRlci5maW5kKCcubGctc3ViLWh0bWwnKS5odG1sKHN1Ykh0bWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2Y
5627XIgY3VycmVudFNsaWRlID0gJExHKHRoaXMuZ2V0U2xpZGVJdGVtSWQoaW5kZXgpKTtcclxuICAgICAgICAgICAgaWYgKHN1Ykh0bWxVcmwpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRTbGlkZS5sb2FkKHN1Ykh0bWxVcmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudFNsaWRlLmFwcGVuZChcIjxkaXYgY2xhc3M9XFxcImxnLXN1Yi1odG1sXFxcIj5cIiArIHN1Ykh0bWwgKyBcIjwvZGl2PlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBBZGQgbGctZW1wdHktaHRtbCBjbGFzcyBpZiB0aXRsZSBkb2Vzbid0IGV4aXN0XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzdWJIdG1sICE9PSAndW5kZWZpbmVkJyAmJiBzdWJIdG1sICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChzdWJIdG1sID09PSAnJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRlclxyXG4gICAgICAgICAgICAgICAgICAgIC5maW5kKHRoaXMuc2V0dGluZ3MuYXBwZW5kU3ViSHRtbFRvKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnbGctZW1wdHktaHRtbCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRlclxyXG4gICAgICAgICAgICAgICAgICAgIC5maW5kKHRoaXMuc2V0dGluZ3MuYXBwZW5kU3ViSHRtbFRvKVxyXG4gICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnbGctZW1wdHktaHRtbCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuTEdlbC50cmlnZ2VyKGxHRXZlbnRzLmFmdGVyQXBwZW5kU3ViSHRtbCwge1xyXG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiAgQGRlc2MgUHJlbG9hZCBzbGlkZXNcclxuICAgICAqICBAcGFyYW0ge051bWJlcn0gaW5kZXggLSBpbmRleCBvZiB0aGUgc2xpZGVcclxuICAgICAqIEB0b2RvIHByZWxvYWQgbm90IHdvcmtpbmcgZm9yIHRoZSBmaXJzdCBzbGlkZSwgQWxzbywgc2hvdWxkIHdvcmsgZm9yIHRoZSBmaXJzdCBhbmQgbGFzdCBzbGlkZSBhcyB3ZWxsXHJcbiAgICAgKi9cclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUucHJlbG9hZCA9IGZ1bmN0aW9uIChpbmRleCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHRoaXMuc2V0dGluZ3MucHJlbG9hZDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpID49IHRoaXMuZ2FsbGVyeUl0ZW1zLmxlbmd0aCAtIGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmxvYWRDb250ZW50KGluZGV4ICsgaSwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8PSB0aGlzLnNldHRpbmdzLnByZWxvYWQ7IGorKykge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggLSBqIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5sb2FkQ29udGVudChpbmRleCAtIGosIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5nZXREdW1teUltZ1N0eWxlcyA9IGZ1bmN0aW9uIChpbWFnZVNpemUpIHtcclxuICAgICAgICBpZiAoIWltYWdlU2l6ZSlcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIHJldHVybiBcIndpZHRoOlwiICsgaW1hZ2VTaXplLndpZHRoICsgXCJweDtcXG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC1cIiArIGltYWdlU2l6ZS53aWR0aCAvIDIgKyBcInB4O1xcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAtXCIgKyBpbWFnZVNpemUuaGVpZ2h0IC8gMiArIFwicHg7XFxuICAgICAgICAgICAgICAgIGhlaWdodDpcIiArIGltYWdlU2l6ZS5oZWlnaHQgKyBcInB4XCI7XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5nZXRWaWRlb0NvbnRTdHlsZSA9IGZ1bmN0aW9uIChpbWFnZVNpemUpIHtcclxuICAgICAgICBpZiAoIWltYWdlU2l6ZSlcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIHJldHVybiBcIndpZHRoOlwiICsgaW1hZ2VTaXplLndpZHRoICsgXCJweDtcXG4gICAgICAgICAgICAgICAgaGVpZ2h0OlwiICsgaW1hZ2VTaXplLmhlaWdodCArIFwicHhcIjtcclxuICAgIH07XHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLmdldER1bW15SW1hZ2VDb250ZW50ID0gZnVuY3Rpb24gKCRjdXJyZW50U2xpZGUsIGluZGV4LCBhbHQpIHtcclxuICAgICAgICB2Y
5627XIgJGN1cnJlbnRJdGVtO1xyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5ncy5keW5hbWljKSB7XHJcbiAgICAgICAgICAgICRjdXJyZW50SXRlbSA9ICRMRyh0aGlzLml0ZW1zKS5lcShpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgkY3VycmVudEl0ZW0pIHtcclxuICAgICAgICAgICAgdmFyIF9kdW1teUltZ1NyYyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnNldHRpbmdzLmV4VGh1bWJJbWFnZSkge1xyXG4gICAgICAgICAgICAgICAgX2R1bW15SW1nU3JjID0gJGN1cnJlbnRJdGVtLmZpbmQoJ2ltZycpLmZpcnN0KCkuYXR0cignc3JjJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBfZHVtbXlJbWdTcmMgPSAkY3VycmVudEl0ZW0uYXR0cih0aGlzLnNldHRpbmdzLmV4VGh1bWJJbWFnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFfZHVtbXlJbWdTcmMpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgIHZhciBpbWdTdHlsZSA9IHRoaXMuZ2V0RHVtbXlJbWdTdHlsZXModGhpcy5jdXJyZW50SW1hZ2VTaXplKTtcclxuICAgICAgICAgICAgdmFyIGR1bW15SW1nQ29udGVudCA9IFwiPGltZyBcIiArIGFsdCArIFwiIHN0eWxlPVxcXCJcIiArIGltZ1N0eWxlICsgXCJcXFwiIGNsYXNzPVxcXCJsZy1kdW1teS1pbWdcXFwiIHNyYz1cXFwiXCIgKyBfZHVtbXlJbWdTcmMgKyBcIlxcXCIgLz5cIjtcclxuICAgICAgICAgICAgJGN1cnJlbnRTbGlkZS5hZGRDbGFzcygnbGctZmlyc3Qtc2xpZGUnKTtcclxuICAgICAgICAgICAgdGhpcy5vdXRlci5hZGRDbGFzcygnbGctZmlyc3Qtc2xpZGUtbG9hZGluZycpO1xyXG4gICAgICAgICAgICByZXR1cm4gZHVtbXlJbWdDb250ZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5zZXRJbWdNYXJrdXAgPSBmdW5jdGlvbiAoc3JjLCAkY3VycmVudFNsaWRlLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50R2FsbGVyeUl0ZW0gPSB0aGlzLmdhbGxlcnlJdGVtc1tpbmRleF07XHJcbiAgICAgICAgdmFyIGFsdCA9IGN1cnJlbnRHYWxsZXJ5SXRlbS5hbHQsIHNyY3NldCA9IGN1cnJlbnRHYWxsZXJ5SXRlbS5zcmNzZXQsIHNpemVzID0gY3VycmVudEdhbGxlcnlJdGVtLnNpemVzLCBzb3VyY2VzID0gY3VycmVudEdhbGxlcnlJdGVtLnNvdXJjZXM7XHJcbiAgICAgICAgLy8gVXNlIHRoZSB0aHVtYm5haWwgYXMgZHVtbXkgaW1hZ2Ugd2hpY2ggd2lsbCBiZSByZXNpemVkIHRvIGFjdHVhbCBpbWFnZSBzaXplIGFuZFxyXG4gICAgICAgIC8vIGRpc3BsYXllZCBvbiB0b3Agb2YgYWN0dWFsIGltYWdlXHJcbiAgICAgICAgdmFyIGltZ0NvbnRlbnQgPSAnJztcclxuICAgICAgICB2Y
5627XIgYWx0QXR0ciA9IGFsdCA/ICdhbHQ9XCInICsgYWx0ICsgJ1wiJyA6ICcnO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRmlyc3RTbGlkZVdpdGhab29tQW5pbWF0aW9uKCkpIHtcclxuICAgICAgICAgICAgaW1nQ29udGVudCA9IHRoaXMuZ2V0RHVtbXlJbWFnZUNvbnRlbnQoJGN1cnJlbnRTbGlkZSwgaW5kZXgsIGFsdEF0dHIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaW1nQ29udGVudCA9IHV0aWxzLmdldEltZ01hcmt1cChpbmRleCwgc3JjLCBhbHRBdHRyLCBzcmNzZXQsIHNpemVzLCBzb3VyY2VzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGltZ01hcmt1cCA9IFwiPHBpY3R1cmUgY2xhc3M9XFxcImxnLWltZy13cmFwXFxcIj4gXCIgKyBpbWdDb250ZW50ICsgXCI8L3BpY3R1cmU+XCI7XHJcbiAgICAgICAgJGN1cnJlbnRTbGlkZS5wcmVwZW5kKGltZ01hcmt1cCk7XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5vblNsaWRlT2JqZWN0TG9hZCA9IGZ1bmN0aW9uICgkc2xpZGUsIGlzSFRNTDVWaWRlb1dpdGhvdXRQb3N0ZXIsIG9uTG9hZCwgb25FcnJvcikge1xyXG4gICAgICAgIHZhciBtZWRpYU9iamVjdCA9ICRzbGlkZS5maW5kKCcubGctb2JqZWN0JykuZmlyc3QoKTtcclxuICAgICAgICBpZiAodXRpbHMuaXNJbWFnZUxvYWRlZChtZWRpYU9iamVjdC5nZXQoKSkgfHxcclxuICAgICAgICAgICAgaXNIVE1MNVZpZGVvV2l0aG91dFBvc3Rlcikge1xyXG4gICAgICAgICAgICBvbkxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1lZGlhT2JqZWN0Lm9uKCdsb2FkLmxnIGVycm9yLmxnJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgb25Mb2FkICYmIG9uTG9hZCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbWVkaWFPYmplY3Qub24oJ2Vycm9yLmxnJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgb25FcnJvciAmJiBvbkVycm9yKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gJGVsIEN1cnJlbnQgc2xpZGUgaXRlbVxyXG4gICAgICogQHBhcmFtIGluZGV4XHJcbiAgICAgKiBAcGFyYW0gZGVsYXkgRGVsYXkgaXMgMCBleGNlcHQgZmlyc3QgdGltZVxyXG4gICAgICogQHBhcmFtIHNwZWVkIFNwZWVkIGlzIHNhbWUgYXMgZGVsYXksIGV4Y2VwdCBpdCBpcyAwIGlmIGdhbGxlcnkgaXMgb3BlbmVkIHZpYSBoYXNoIHBsdWdpblxyXG4gICAgICogQHBhcmFtIGlzRmlyc3RTbGlkZVxyXG4gICAgICovXHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLm9uTGdPYmplY3RMb2FkID0gZnVuY3Rpb24gKGN1cnJlbnRTbGlkZSwgaW5kZXgsIGRlbGF5LCBzcGVlZCwgaXNGaXJzdFNsaWRlLCBpc0hUTUw1VmlkZW9XaXRob3V0UG9zdGVyKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLm9uU2xpZGVPYmplY3RMb2FkKGN1cnJlbnRTbGlkZSwgaXNIVE1MNVZpZGVvV2l0aG91dFBvc3RlciwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBfdGhpcy50cmlnZ2VyU2xpZGVJdGVtTG9hZChjdXJyZW50U2xpZGUsIGluZGV4LCBkZWxheSwgc3BlZWQsIGlzRmlyc3RTbGlkZSk7XHJcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjdXJyZW50U2xpZGUuYWRkQ2xhc3MoJ2xnLWNvbXBsZXRlIGxnLWNvbXBsZXRlXycpO1xyXG4gICAgICAgICAgICBjdXJyZW50U2xpZGUuaHRtbCgnPHNwYW4gY2xhc3M9XCJsZy1lcnJvci1tc2dcIj5Pb3BzLi4uIEZhaWxlZCB0byBsb2FkIGNvbnRlbnQuLi48L3NwYW4+Jyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS50cmlnZ2VyU2xpZGVJdGVtTG9hZCA9IGZ1bmN0aW9uICgkY3VycmVudFNsaWRlLCBpbmRleCwgZGVsYXksIHNwZWVkLCBpc0ZpcnN0U2xpZGUpIHtcclxuICAgICAgICB2Y
5627XIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBjdXJyZW50R2FsbGVyeUl0ZW0gPSB0aGlzLmdhbGxlcnlJdGVtc1tpbmRleF07XHJcbiAgICAgICAgLy8gQWRkaW5nIGRlbGF5IGZvciB2aWRlbyBzbGlkZXMgd2l0aG91dCBwb3N0ZXIgZm9yIGJldHRlciBwZXJmb3JtYW5jZSBhbmQgdXNlciBleHBlcmllbmNlXHJcbiAgICAgICAgLy8gVmlkZW9zIHNob3VsZCBzdGFydCBwbGF5aW5nIG9uY2Ugb25jZSB0aGUgZ2FsbGVyeSBpcyBjb21wbGV0ZWx5IGxvYWRlZFxyXG4gICAgICAgIHZhciBfc3BlZWQgPSBpc0ZpcnN0U2xpZGUgJiZcclxuICAgICAgICAgICAgdGhpcy5nZXRTbGlkZVR5cGUoY3VycmVudEdhbGxlcnlJdGVtKSA9PT0gJ3ZpZGVvJyAmJlxyXG4gICAgICAgICAgICAhY3VycmVudEdhbGxlcnlJdGVtLnBvc3RlclxyXG4gICAgICAgICAgICA/IHNwZWVkXHJcbiAgICAgICAgICAgIDogMDtcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgJGN1cnJlbnRTbGlkZS5hZGRDbGFzcygnbGctY29tcGxldGUgbGctY29tcGxldGVfJyk7XHJcbiAgICAgICAgICAgIF90aGlzLkxHZWwudHJpZ2dlcihsR0V2ZW50cy5zbGlkZUl0ZW1Mb2FkLCB7XHJcbiAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXHJcbiAgICAgICAgICAgICAgICBkZWxheTogZGVsYXkgfHwgMCxcclxuICAgICAgICAgICAgICAgIGlzRmlyc3RTbGlkZTogaXNGaXJzdFNsaWRlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LCBfc3BlZWQpO1xyXG4gICAgfTtcclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUuaXNGaXJzdFNsaWRlV2l0aFpvb21BbmltYXRpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuICEhKCF0aGlzLmxHYWxsZXJ5T24gJiZcclxuICAgICAgICAgICAgdGhpcy56b29tRnJvbU9yaWdpbiAmJlxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRJbWFnZVNpemUpO1xyXG4gICAgfTtcclxuICAgIC8vIEFkZCB2aWRlbyBzbGlkZUluZm9cclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUuYWRkU2xpZGVWaWRlb0luZm8gPSBmdW5jdGlvbiAoaXRlbXMpIHtcclxuICAgICAgICB2Y
5627XIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4KSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuX19zbGlkZVZpZGVvSW5mbyA9IHV0aWxzLmlzVmlkZW8oZWxlbWVudC5zcmMsICEhZWxlbWVudC52aWRlbywgaW5kZXgpO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5fX3NsaWRlVmlkZW9JbmZvICYmXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5zZXR0aW5ncy5sb2FkWW91VHViZVBvc3RlciAmJlxyXG4gICAgICAgICAgICAgICAgIWVsZW1lbnQucG9zdGVyICYmXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50Ll9fc2xpZGVWaWRlb0luZm8ueW91dHViZSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5wb3N0ZXIgPSBcIi8vaW1nLnlvdXR1YmUuY29tL3ZpL1wiICsgZWxlbWVudC5fX3NsaWRlVmlkZW9JbmZvLnlvdXR1YmVbMV0gKyBcIi9tYXhyZXNkZWZhdWx0LmpwZ1wiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiAgTG9hZCBzbGlkZSBjb250ZW50IGludG8gc2xpZGUuXHJcbiAgICAgKiAgVGhpcyBpcyB1c2VkIHRvIGxvYWQgY29udGVudCBpbnRvIHNsaWRlcyB0aGF0IGlzIG5vdCB2aXNpYmxlIHRvb1xyXG4gICAgICogIEBwYXJhbSB7TnVtYmVyfSBpbmRleCAtIGluZGV4IG9mIHRoZSBzbGlkZS5cclxuICAgICAqICBAcGFyYW0ge0Jvb2xlYW59IHJlYyAtIGlmIHRydWUgY2FsbCBsb2FkY29udGVudCgpIGZ1bmN0aW9uIGFnYWluLlxyXG4gICAgICovXHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLmxvYWRDb250ZW50ID0gZnVuY3Rpb24gKGluZGV4LCByZWMpIHtcclxuICAgICAgICB2Y
5627XIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBjdXJyZW50R2FsbGVyeUl0ZW0gPSB0aGlzLmdhbGxlcnlJdGVtc1tpbmRleF07XHJcbiAgICAgICAgdmFyICRjdXJyZW50U2xpZGUgPSAkTEcodGhpcy5nZXRTbGlkZUl0ZW1JZChpbmRleCkpO1xyXG4gICAgICAgIHZhciBwb3N0ZXIgPSBjdXJyZW50R2FsbGVyeUl0ZW0ucG9zdGVyLCBzcmNzZXQgPSBjdXJyZW50R2FsbGVyeUl0ZW0uc3Jjc2V0LCBzaXplcyA9IGN1cnJlbnRHYWxsZXJ5SXRlbS5zaXplcywgc291cmNlcyA9IGN1cnJlbnRHYWxsZXJ5SXRlbS5zb3VyY2VzO1xyXG4gICAgICAgIHZhciBzcmMgPSBjdXJyZW50R2FsbGVyeUl0ZW0uc3JjO1xyXG4gICAgICAgIHZhciB2aWRlbyA9IGN1cnJlbnRHYWxsZXJ5SXRlbS52aWRlbztcclxuICAgICAgICB2YXIgX2h0bWw1VmlkZW8gPSB2aWRlbyAmJiB0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSh2aWRlbykgOiB2aWRlbztcclxuICAgICAgICBpZiAoY3VycmVudEdhbGxlcnlJdGVtLnJlc3BvbnNpdmUpIHtcclxuICAgICAgICAgICAgdmFyIHNyY0R5SXRtcyA9IGN1cnJlbnRHYWxsZXJ5SXRlbS5yZXNwb25zaXZlLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgIHNyYyA9IHV0aWxzLmdldFJlc3BvbnNpdmVTcmMoc3JjRHlJdG1zKSB8fCBzcmM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB2aWRlb0luZm8gPSBjdXJyZW50R2FsbGVyeUl0ZW0uX19zbGlkZVZpZGVvSW5mbztcclxuICAgICAgICB2YXIgbGdWaWRlb1N0eWxlID0gJyc7XHJcbiAgICAgICAgdmFyIGlmcmFtZSA9ICEhY3VycmVudEdhbGxlcnlJdGVtLmlmcmFtZTtcclxuICAgICAgICB2Y
5627XIgaXNGaXJzdFNsaWRlID0gIXRoaXMubEdhbGxlcnlPbjtcclxuICAgICAgICAvLyBkZWxheSBmb3IgYWRkaW5nIGNvbXBsZXRlIGNsYXNzLiBpdCBpcyAwIGV4Y2VwdCBmaXJzdCB0aW1lLlxyXG4gICAgICAgIHZhciBkZWxheSA9IDA7XHJcbiAgICAgICAgaWYgKGlzRmlyc3RTbGlkZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy56b29tRnJvbU9yaWdpbiAmJiB0aGlzLmN1cnJlbnRJbWFnZVNpemUpIHtcclxuICAgICAgICAgICAgICAgIGRlbGF5ID0gdGhpcy5zZXR0aW5ncy5zdGFydEFuaW1hdGlvbkR1cmF0aW9uICsgMTA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkZWxheSA9IHRoaXMuc2V0dGluZ3MuYmFja2Ryb3BEdXJhdGlvbiArIDEwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghJGN1cnJlbnRTbGlkZS5oYXNDbGFzcygnbGctbG9hZGVkJykpIHtcclxuICAgICAgICAgICAgaWYgKHZpZGVvSW5mbykge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9hID0gdGhpcy5tZWRpYUNvbnRhaW5lclBvc2l0aW9uLCB0b3BfMiA9IF9hLnRvcCwgYm90dG9tID0gX2EuYm90dG9tO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZpZGVvU2l6ZSA9IHV0aWxzLmdldFNpemUodGhpcy5pdGVtc1tpbmRleF0sIHRoaXMub3V0ZXIsIHRvcF8yICsgYm90dG9tLCB2aWRlb0luZm8gJiYgdGhpcy5zZXR0aW5ncy52aWRlb01heFNpemUpO1xyXG4gICAgICAgICAgICAgICAgbGdWaWRlb1N0eWxlID0gdGhpcy5nZXRWaWRlb0NvbnRTdHlsZSh2aWRlb1NpemUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpZnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYXJrdXAgPSB1dGlscy5nZXRJZnJhbWVNYXJrdXAodGhpcy5zZXR0aW5ncy5pZnJhbWVXaWR0aCwgdGhpcy5zZXR0aW5ncy5pZnJhbWVIZWlnaHQsIHRoaXMuc2V0dGluZ3MuaWZyYW1lTWF4V2lkdGgsIHRoaXMuc2V0dGluZ3MuaWZyYW1lTWF4SGVpZ2h0LCBzcmMsIGN1cnJlbnRHYWxsZXJ5SXRlbS5pZnJhbWVUaXRsZSk7XHJcbiAgICAgICAgICAgICAgICAkY3VycmVudFNsaWRlLnByZXBlbmQobWFya3VwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChwb3N0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBkdW1teUltZyA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdmFyIGhhc1N0YXJ0QW5pbWF0aW9uID0gaXNGaXJzdFNsaWRlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy56b29tRnJvbU9yaWdpbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEltYWdlU2l6ZTtcclxuICAgICAgICAgICAgICAgIGlmIChoYXNTdGFydEFuaW1hdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGR1bW15SW1nID0gdGhpcy5nZXREdW1teUltYWdlQ29udGVudCgkY3VycmVudFNsaWRlLCBpbmRleCwgJycpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIG1hcmt1cCA9IHV0aWxzLmdldFZpZGVvUG9zdGVyTWFya3VwKHBvc3RlciwgZHVtbXlJbWcgfHwgJycsIGxnVmlkZW9TdHlsZSwgdGhpcy5zZXR0aW5ncy5zdHJpbmdzWydwbGF5VmlkZW8nXSwgdmlkZW9JbmZvKTtcclxuICAgICAgICAgICAgICAgICRjdXJyZW50U2xpZGUucHJlcGVuZChtYXJrdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHZpZGVvSW5mbykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hcmt1cCA9IFwiPGRpdiBjbGFzcz1cXFwibGctdmlkZW8tY29udCBcXFwiIHN0eWxlPVxcXCJcIiArIGxnVmlkZW9TdHlsZSArIFwiXFxcIj48L2Rpdj5cIjtcclxuICAgICAgICAgICAgICAgICRjdXJyZW50U2xpZGUucHJlcGVuZChtYXJrdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbWdNYXJrdXAoc3JjLCAkY3VycmVudFNsaWRlLCBpbmRleCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3Jjc2V0IHx8IHNvdXJjZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2Y
5627XIgJGltZyA9ICRjdXJyZW50U2xpZGUuZmluZCgnLmxnLW9iamVjdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdFBpY3R1cmVGaWxsKCRpbWcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwb3N0ZXIgfHwgdmlkZW9JbmZvKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkxHZWwudHJpZ2dlcihsR0V2ZW50cy5oYXNWaWRlbywge1xyXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcclxuICAgICAgICAgICAgICAgICAgICBzcmM6IHNyYyxcclxuICAgICAgICAgICAgICAgICAgICBodG1sNVZpZGVvOiBfaHRtbDVWaWRlbyxcclxuICAgICAgICAgICAgICAgICAgICBoYXNQb3N0ZXI6ICEhcG9zdGVyLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5MR2VsLnRyaWdnZXIobEdFdmVudHMuYWZ0ZXJBcHBlbmRTbGlkZSwgeyBpbmRleDogaW5kZXggfSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxHYWxsZXJ5T24gJiZcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuYXBwZW5kU3ViSHRtbFRvID09PSAnLmxnLWl0ZW0nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEh0bWwoaW5kZXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEZvciBmaXJzdCB0aW1lIGFkZCBzb21lIGRlbGF5IGZvciBkaXNwbGF5aW5nIHRoZSBzdGFydCBhbmltYXRpb24uXHJcbiAgICAgICAgdmFyIF9zcGVlZCA9IDA7XHJcbiAgICAgICAgLy8gRG8gbm90IGNoYW5nZSB0aGUgZGVsYXkgdmFsdWUgYmVjYXVzZSBpdCBpcyByZXF1aXJlZCBmb3Igem9vbSBwbHVnaW4uXHJcbiAgICAgICAgLy8gSWYgZ2FsbGVyeSBvcGVuZWQgZnJvbSBkaXJlY3QgdXJsIChoYXNoKSBzcGVlZCB2YWx1ZSBzaG91bGQgYmUgMFxyXG4gICAgICAgIGlmIChkZWxheSAmJiAhJExHKGRvY3VtZW50LmJvZHkpLmhhc0NsYXNzKCdsZy1mcm9tLWhhc2gnKSkge1xyXG4gICAgICAgICAgICBfc3BlZWQgPSBkZWxheTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gT25seSBmb3IgZmlyc3Qgc2xpZGUgYW5kIHpvb21Gcm9tT3JpZ2luIGlzIGVuYWJsZWRcclxuICAgICAgICBpZiAodGhpcy5pc0ZpcnN0U2xpZGVXaXRoWm9vbUFuaW1hdGlvbigpKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgJGN1cnJlbnRTbGlkZVxyXG4gICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnbGctc3RhcnQtZW5kLXByb2dyZXNzIGxnLXN0YXJ0LXByb2dyZXNzJylcclxuICAgICAgICAgICAgICAgICAgICAucmVtb3ZlQXR0cignc3R5bGUnKTtcclxuICAgICAgICAgICAgfSwgdGhpcy5zZXR0aW5ncy5zdGFydEFuaW1hdGlvbkR1cmF0aW9uICsgMTAwKTtcclxuICAgICAgICAgICAgaWYgKCEkY3VycmVudFNsaWRlLmhhc0NsYXNzKCdsZy1sb2FkZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmdldFNsaWRlVHlwZShjdXJyZW50R2FsbGVyeUl0ZW0pID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbHQgPSBjdXJyZW50R2FsbGVyeUl0ZW0uYWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
5627XIgYWx0QXR0ciA9IGFsdCA/ICdhbHQ9XCInICsgYWx0ICsgJ1wiJyA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkY3VycmVudFNsaWRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmluZCgnLmxnLWltZy13cmFwJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQodXRpbHMuZ2V0SW1nTWFya3VwKGluZGV4LCBzcmMsIGFsdEF0dHIsIHNyY3NldCwgc2l6ZXMsIGN1cnJlbnRHYWxsZXJ5SXRlbS5zb3VyY2VzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNzZXQgfHwgc291cmNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRpbWcgPSAkY3VycmVudFNsaWRlLmZpbmQoJy5sZy1vYmplY3QnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmluaXRQaWN0dXJlRmlsbCgkaW1nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuZ2V0U2xpZGVUeXBlKGN1cnJlbnRHYWxsZXJ5SXRlbSkgPT09ICdpbWFnZScgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKF90aGlzLmdldFNsaWRlVHlwZShjdXJyZW50R2FsbGVyeUl0ZW0pID09PSAndmlkZW8nICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLm9uTGdPYmplY3RMb2FkKCRjdXJyZW50U2xpZGUsIGluZGV4LCBkZWxheSwgX3NwZWVkLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvYWQgcmVtYWluaW5nIHNsaWRlcyBvbmNlIHRoZSBzbGlkZSBpcyBjb21wbGV0ZWx5IGxvYWRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5vblNsaWRlT2JqZWN0TG9hZCgkY3VycmVudFNsaWRlLCAhISh2aWRlb0luZm8gJiYgdmlkZW9JbmZvLmh0bWw1ICYmICFwb3N0ZXIpLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5sb2FkQ29udGVudE9uRmlyc3RTbGlkZUxvYWQoaW5kZXgsICRjdXJyZW50U2xpZGUsIF9zcGVlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmxvYWRDb250ZW50T25GaXJzdFNsaWRlTG9hZChpbmRleCwgJGN1cnJlbnRTbGlkZSwgX3NwZWVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgdGhpcy5zZXR0aW5ncy5zdGFydEFuaW1hdGlvbkR1cmF0aW9uICsgMTAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBTTGlkZSBjb250ZW50IGhhcyBiZWVuIGFkZGVkIHRvIGRvbVxyXG4gICAgICAgICRjdXJyZW50U2xpZGUuYWRkQ2xhc3MoJ2xnLWxvYWRlZCcpO1xyXG4gICAgICAgIGlmICghdGhpcy5pc0ZpcnN0U2xpZGVXaXRoWm9vbUFuaW1hdGlvbigpIHx8XHJcbiAgICAgICAgICAgICh0aGlzLmdldFNsaWRlVHlwZShjdXJyZW50R2FsbGVyeUl0ZW0pID09PSAndmlkZW8nICYmICFwb3N0ZXIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25MZ09iamVjdExvYWQoJGN1cnJlbnRTbGlkZSwgaW5kZXgsIGRlbGF5LCBfc3BlZWQsIGlzRmlyc3RTbGlkZSwgISEodmlkZW9JbmZvICYmIHZpZGVvSW5mby5odG1sNSAmJiAhcG9zdGVyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFdoZW4gZ2FsbGVyeSBpcyBvcGVuZWQgb25jZSBjb250ZW50IGlzIGxvYWRlZCAoc2Vjb25kIHRpbWUpIG5lZWQgdG8gYWRkIGxnLWNvbXBsZXRlIGNsYXNzIGZvciBjc3Mgc3R5bGluZ1xyXG4gICAgICAgIGlmICgoIXRoaXMuem9vbUZyb21PcmlnaW4gfHwgIXRoaXMuY3VycmVudEltYWdlU2l6ZSkgJiZcclxuICAgICAgICAgICAgJGN1cnJlbnRTbGlkZS5oYXNDbGFzcygnbGctY29tcGxldGVfJykgJiZcclxuICAgICAgICAgICAgIXRoaXMubEdhbGxlcnlPbikge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICRjdXJyZW50U2xpZGUuYWRkQ2xhc3MoJ2xnLWNvbXBsZXRlJyk7XHJcbiAgICAgICAgICAgIH0sIHRoaXMuc2V0dGluZ3MuYmFja2Ryb3BEdXJhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIENvbnRlbnQgbG9hZGVkXHJcbiAgICAgICAgLy8gTmVlZCB0byBzZXQgbEdhbGxlcnlPbiBiZWZvcmUgY2FsbGluZyBwcmVsb2FkIGZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5sR2FsbGVyeU9uID0gdHJ1ZTtcclxuICAgICAgICBpZiAocmVjID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGlmICghJGN1cnJlbnRTbGlkZS5oYXNDbGFzcygnbGctY29tcGxldGVfJykpIHtcclxuICAgICAgICAgICAgICAgICRjdXJyZW50U2xpZGVcclxuICAgICAgICAgICAgICAgICAgICAuZmluZCgnLmxnLW9iamVjdCcpXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpcnN0KClcclxuICAgICAgICAgICAgICAgICAgICAub24oJ2xvYWQubGcgZXJyb3IubGcnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucHJlbG9hZChpbmRleCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlbG9hZChpbmRleCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzYyBSZW1vdmUgZHVtbXkgaW1hZ2UgY29udGVudCBhbmQgbG9hZCBuZXh0IHNsaWRlc1xyXG4gICAgICogQ2FsbGVkIG9ubHkgZm9yIHRoZSBmaXJzdCB0aW1lIGlmIHpvb21Gcm9tT3JpZ2luIGFuaW1hdGlvbiBpcyBlbmFibGVkXHJcbiAgICAgKiBAcGFyYW0gaW5kZXhcclxuICAgICAqIEBwYXJhbSAkY3VycmVudFNsaWRlXHJcbiAgICAgKiBAcGFyYW0gc3BlZWRcclxuICAgICAqL1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5sb2FkQ29udGVudE9uRmlyc3RTbGlkZUxvYWQgPSBmdW5jdGlvbiAoaW5kZXgsICRjdXJyZW50U2xpZGUsIHNwZWVkKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBzZXRUaW
56271lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgJGN1cnJlbnRTbGlkZS5maW5kKCcubGctZHVtbXktaW1nJykucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICRjdXJyZW50U2xpZGUucmVtb3ZlQ2xhc3MoJ2xnLWZpcnN0LXNsaWRlJyk7XHJcbiAgICAgICAgICAgIF90aGlzLm91dGVyLnJlbW92ZUNsYXNzKCdsZy1maXJzdC1zbGlkZS1sb2FkaW5nJyk7XHJcbiAgICAgICAgICAgIF90aGlzLmlzRHVtbXlJbWFnZVJlbW92ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBfdGhpcy5wcmVsb2FkKGluZGV4KTtcclxuICAgICAgICB9LCBzcGVlZCArIDMwMCk7XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5nZXRJdGVtc1RvQmVJbnNlcnRlZFRvRG9tID0gZnVuY3Rpb24gKGluZGV4LCBwcmV2SW5kZXgsIG51bWJlck9mSXRlbXMpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmIChudW1iZXJPZkl0ZW1zID09PSB2b2lkIDApIHsgbnVtYmVyT2ZJdGVtcyA9IDA7IH1cclxuICAgICAgICB2YXIgaXRlbXNUb0JlSW5zZXJ0ZWRUb0RvbSA9IFtdO1xyXG4gICAgICAgIC8vIE1pbmltdW0gMiBpdGVtcyBzaG91bGQgYmUgdGhlcmVcclxuICAgICAgICB2YXIgcG9zc2libGVOdW1iZXJPZkl0ZW1zID0gTWF0aC5tYXgobnVtYmVyT2ZJdGVtcywgMyk7XHJcbiAgICAgICAgcG9zc2libGVOdW1iZXJPZkl0ZW1zID0gTWF0aC5taW4ocG9zc2libGVOdW1iZXJPZkl0ZW1zLCB0aGlzLmdhbGxlcnlJdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgIHZhciBwcmV2SW5kZXhJdGVtID0gXCJsZy1pdGVtLVwiICsgdGhpcy5sZ0lkICsgXCItXCIgKyBwcmV2SW5kZXg7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2FsbGVyeUl0ZW1zLmxlbmd0aCA8PSAzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKF9lbGVtZW50LCBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgaXRlbXNUb0JlSW5zZXJ0ZWRUb0RvbS5wdXNoKFwibGctaXRlbS1cIiArIF90aGlzLmxnSWQgKyBcIi1cIiArIGluZGV4KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtc1RvQmVJbnNlcnRlZFRvRG9tO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kZXggPCAodGhpcy5nYWxsZXJ5SXRlbXMubGVuZ3RoIC0gMSkgLyAyKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGlkeCA9IGluZGV4OyBpZHggPiBpbmRleCAtIHBvc3NpYmxlTnVtYmVyT2ZJdGVtcyAvIDIgJiYgaWR4ID49IDA7IGlkeC0tKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc1RvQmVJbnNlcnRlZFRvRG9tLnB1c2goXCJsZy1pdGVtLVwiICsgdGhpcy5sZ0lkICsgXCItXCIgKyBpZHgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBudW1iZXJPZkV4aXN0aW5nSXRlbXMgPSBpdGVtc1RvQmVJbnNlcnRlZFRvRG9tLmxlbmd0aDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgcG9zc2libGVOdW1iZXJPZkl0ZW1zIC0gbnVtYmVyT2ZFeGlzdGluZ0l0ZW1zOyBpZHgrKykge1xyXG4gICAgICAgICAgICAgICAgaXRlbXNUb0JlSW5zZXJ0ZWRUb0RvbS5wdXNoKFwibGctaXRlbS1cIiArIHRoaXMubGdJZCArIFwiLVwiICsgKGluZGV4ICsgaWR4ICsgMSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpZHggPSBpbmRleDsgaWR4IDw9IHRoaXMuZ2FsbGVyeUl0ZW1zLmxlbmd0aCAtIDEgJiZcclxuICAgICAgICAgICAgICAgIGlkeCA8IGluZGV4ICsgcG9zc2libGVOdW1iZXJPZkl0ZW1zIC8gMjsgaWR4KyspIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zVG9CZUluc2VydGVkVG9Eb20ucHVzaChcImxnLWl0ZW0tXCIgKyB0aGlzLmxnSWQgKyBcIi1cIiArIGlkeCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIG51bWJlck9mRXhpc3RpbmdJdGVtcyA9IGl0ZW1zVG9CZUluc2VydGVkVG9Eb20ubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBwb3NzaWJsZU51bWJlck9mSXRlbXMgLSBudW1iZXJPZkV4aXN0aW5nSXRlbXM7IGlkeCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc1RvQmVJbnNlcnRlZFRvRG9tLnB1c2goXCJsZy1pdGVtLVwiICsgdGhpcy5sZ0lkICsgXCItXCIgKyAoaW5kZXggLSBpZHggLSAxKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MubG9vcCkge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuZ2FsbGVyeUl0ZW1zLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zVG9CZUluc2VydGVkVG9Eb20ucHVzaChcImxnLWl0ZW0tXCIgKyB0aGlzLmxnSWQgKyBcIi1cIiArIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc1RvQmVJbnNlcnRlZFRvRG9tLnB1c2goXCJsZy1pdGVtLVwiICsgdGhpcy5sZ0lkICsgXCItXCIgKyAodGhpcy5nYWxsZXJ5SXRlbXMubGVuZ3RoIC0gMSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtc1RvQmVJbnNlcnRlZFRvRG9tLmluZGV4T2YocHJldkluZGV4SXRlbSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGl0ZW1zVG9CZUluc2VydGVkVG9Eb20ucHVzaChcImxnLWl0ZW0tXCIgKyB0aGlzLmxnSWQgKyBcIi1cIiArIHByZXZJbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtc1RvQmVJbnNlcnRlZFRvRG9tO1xyXG4gICAgfTtcclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUub3JnYW5pemVTbGlkZUl0ZW1zID0gZnVuY3Rpb24gKGluZGV4LCBwcmV2SW5kZXgpIHtcclxuICAgICAgICB2Y
5627XIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBpdGVtc1RvQmVJbnNlcnRlZFRvRG9tID0gdGhpcy5nZXRJdGVtc1RvQmVJbnNlcnRlZFRvRG9tKGluZGV4LCBwcmV2SW5kZXgsIHRoaXMuc2V0dGluZ3MubnVtYmVyT2ZTbGlkZUl0ZW1zSW5Eb20pO1xyXG4gICAgICAgIGl0ZW1zVG9CZUluc2VydGVkVG9Eb20uZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICBpZiAoX3RoaXMuY3VycmVudEl0ZW1zSW5Eb20uaW5kZXhPZihpdGVtKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLiRpbm5lci5hcHBlbmQoXCI8ZGl2IGlkPVxcXCJcIiArIGl0ZW0gKyBcIlxcXCIgY2xhc3M9XFxcImxnLWl0ZW1cXFwiPjwvZGl2PlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEl0ZW1zSW5Eb20uZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbXNUb0JlSW5zZXJ0ZWRUb0RvbS5pbmRleE9mKGl0ZW0pID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgJExHKFwiI1wiICsgaXRlbSkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gaXRlbXNUb0JlSW5zZXJ0ZWRUb0RvbTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEdldCBwcmV2aW91cyBpbmRleCBvZiB0aGUgc2xpZGVcclxuICAgICAqL1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5nZXRQcmV2aW91c1NsaWRlSW5kZXggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHByZXZJbmRleCA9IDA7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRJdGVtSWQgPSB0aGlzLm91dGVyXHJcbiAgICAgICAgICAgICAgICAuZmluZCgnLmxnLWN1cnJlbnQnKVxyXG4gICAgICAgICAgICAgICAgLmZpcnN0KClcclxuICAgICAgICAgICAgICAgIC5hdHRyKCdpZCcpO1xyXG4gICAgICAgICAgICBwcmV2SW5kZXggPSBwYXJzZUludChjdXJyZW50SXRlbUlkLnNwbGl0KCctJylbM10pIHx8IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBwcmV2SW5kZXggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJldkluZGV4O1xyXG4gICAgfTtcclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUuc2V0RG93bmxvYWRWYWx1ZSA9IGZ1bmN0aW9uIChpbmRleCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmRvd25sb2FkKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50R2FsbGVyeUl0ZW0gPSB0aGlzLmdhbGxlcnlJdGVtc1tpbmRleF07XHJcbiAgICAgICAgICAgIHZhciBoaWRlRG93bmxvYWRCdG4gPSBjdXJyZW50R2FsbGVyeUl0ZW0uZG93bmxvYWRVcmwgPT09IGZhbHNlIHx8XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50R2FsbGVyeUl0ZW0uZG93bmxvYWRVcmwgPT09ICdmYWxzZSc7XHJcbiAgICAgICAgICAgIGlmIChoaWRlRG93bmxvYWRCdG4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3V0ZXIuYWRkQ2xhc3MoJ2xnLWhpZGUtZG93bmxvYWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciAkZG93bmxvYWQgPSB0aGlzLmdldEVsZW1lbnRCeUlkKCdsZy1kb3dubG9hZCcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRlci5yZW1vdmVDbGFzcygnbGctaGlkZS1kb3dubG9hZCcpO1xyXG4gICAgICAgICAgICAgICAgJGRvd25sb2FkLmF0dHIoJ2hyZWYnLCBjdXJyZW50R2FsbGVyeUl0ZW0uZG93bmxvYWRVcmwgfHxcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50R2FsbGVyeUl0ZW0uc3JjKTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50R2FsbGVyeUl0ZW0uZG93bmxvYWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAkZG93bmxvYWQuYXR0cignZG93bmxvYWQnLCBjdXJyZW50R2FsbGVyeUl0ZW0uZG93bmxvYWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUubWFrZVNsaWRlQW5pbWF0aW9uID0gZnVuY3Rpb24gKGRpcmVjdGlvbiwgY3VycmVudFNsaWRlSXRlbSwgcHJldmlvdXNTbGlkZUl0ZW0pIHtcclxuICAgICAgICB2Y
5627XIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmICh0aGlzLmxHYWxsZXJ5T24pIHtcclxuICAgICAgICAgICAgcHJldmlvdXNTbGlkZUl0ZW0uYWRkQ2xhc3MoJ2xnLXNsaWRlLXByb2dyZXNzJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAvLyByZW1vdmUgYWxsIHRyYW5zaXRpb25zXHJcbiAgICAgICAgICAgIF90aGlzLm91dGVyLmFkZENsYXNzKCdsZy1uby10cmFucycpO1xyXG4gICAgICAgICAgICBfdGhpcy5vdXRlclxyXG4gICAgICAgICAgICAgICAgLmZpbmQoJy5sZy1pdGVtJylcclxuICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnbGctcHJldi1zbGlkZSBsZy1uZXh0LXNsaWRlJyk7XHJcbiAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdwcmV2Jykge1xyXG4gICAgICAgICAgICAgICAgLy9wcmV2c2xpZGVcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRTbGlkZUl0ZW0uYWRkQ2xhc3MoJ2xnLXByZXYtc2xpZGUnKTtcclxuICAgICAgICAgICAgICAgIHByZXZpb3VzU2xpZGVJdGVtLmFkZENsYXNzKCdsZy1uZXh0LXNsaWRlJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBuZXh0IHNsaWRlXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50U2xpZGVJdGVtLmFkZENsYXNzKCdsZy1uZXh0LXNsaWRlJyk7XHJcbiAgICAgICAgICAgICAgICBwcmV2aW91c1NsaWRlSXRlbS5hZGRDbGFzcygnbGctcHJldi1zbGlkZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGdpdmUgNTAgbXMgZm9yIGJyb3dzZXIgdG8gYWRkL3JlbW92ZSBjbGFzc1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm91dGVyLmZpbmQoJy5sZy1pdGVtJykucmVtb3ZlQ2xhc3MoJ2xnLWN1cnJlbnQnKTtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRTbGlkZUl0ZW0uYWRkQ2xhc3MoJ2xnLWN1cnJlbnQnKTtcclxuICAgICAgICAgICAgICAgIC8vIHJlc2V0IGFsbCB0cmFuc2l0aW9uc1xyXG4gICAgICAgICAgICAgICAgX3RoaXMub3V0ZXIucmVtb3ZlQ2xhc3MoJ2xnLW5vLXRyYW5zJyk7XHJcbiAgICAgICAgICAgIH0sIDUwKTtcclxuICAgICAgICB9LCB0aGlzLmxHYWxsZXJ5T24gPyB0aGlzLnNldHRpbmdzLnNsaWRlRGVsYXkgOiAwKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEdvdG8gYSBzcGVjaWZpYyBzbGlkZS5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBpbmRleCAtIGluZGV4IG9mIHRoZSBzbGlkZVxyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBmcm9tVG91Y2ggLSB0cnVlIGlmIHNsaWRlIGZ1bmN0aW9uIGNhbGxlZCB2aWEgdG91Y2ggZXZlbnQgb3IgbW91c2UgZHJhZ1xyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBmcm9tVGh1bWIgLSB0cnVlIGlmIHNsaWRlIGZ1bmN0aW9uIGNhbGxlZCB2aWEgdGh1bWJuYWlsIGNsaWNrXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZGlyZWN0aW9uIC0gRGlyZWN0aW9uIG9mIHRoZSBzbGlkZShuZXh0L3ByZXYpXHJcbiAgICAgKiBAY2F0ZWdvcnkgbEdQdWJsaWNNZXRob2RzXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogIGNvbnN0IHBsdWdpbiA9IGxpZ2h0R2FsbGVyeSgpO1xyXG4gICAgICogIC8vIHRvIGdvIHRvIDNyZCBzbGlkZVxyXG4gICAgICogIHBsdWdpbi5zbGlkZSgyKTtcclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUuc2xpZGUgPSBmdW5jdGlvbiAoaW5kZXgsIGZyb21Ub3VjaCwgZnJvbVRodW1iLCBkaXJlY3Rpb24pIHtcclxuICAgICAgICB2Y
5627XIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBwcmV2SW5kZXggPSB0aGlzLmdldFByZXZpb3VzU2xpZGVJbmRleCgpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEl0ZW1zSW5Eb20gPSB0aGlzLm9yZ2FuaXplU2xpZGVJdGVtcyhpbmRleCwgcHJldkluZGV4KTtcclxuICAgICAgICAvLyBQcmV2ZW50IG11bHRpcGxlIGNhbGwsIFJlcXVpcmVkIGZvciBoc2ggcGx1Z2luXHJcbiAgICAgICAgaWYgKHRoaXMubEdhbGxlcnlPbiAmJiBwcmV2SW5kZXggPT09IGluZGV4KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG51bWJlck9mR2FsbGVyeUl0ZW1zID0gdGhpcy5nYWxsZXJ5SXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy5sZ0J1c3kpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuY291bnRlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDdXJyZW50Q291bnRlcihpbmRleCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRTbGlkZUl0ZW0gPSB0aGlzLmdldFNsaWRlSXRlbShpbmRleCk7XHJcbiAgICAgICAgICAgIHZhciBwcmV2aW91c1NsaWRlSXRlbV8xID0gdGhpcy5nZXRTbGlkZUl0ZW0ocHJldkluZGV4KTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRHYWxsZXJ5SXRlbSA9IHRoaXMuZ2FsbGVyeUl0ZW1zW2luZGV4XTtcclxuICAgICAgICAgICAgdmFyIHZpZGVvSW5mbyA9IGN1cnJlbnRHYWxsZXJ5SXRlbS5fX3NsaWRlVmlkZW9JbmZvO1xyXG4gICAgICAgICAgICB0aGlzLm91dGVyLmF0dHIoJ2RhdGEtbGctc2xpZGUtdHlwZScsIHRoaXMuZ2V0U2xpZGVUeXBlKGN1cnJlbnRHYWxsZXJ5SXRlbSkpO1xyXG4gICAgICAgICAgICB0aGlzLnNldERvd25sb2FkVmFsdWUoaW5kZXgpO1xyXG4gICAgICAgICAgICBpZiAodmlkZW9JbmZvKSB7XHJcbiAgICAgICAgICAgICAgICB2Y
5627XIgX2EgPSB0aGlzLm1lZGlhQ29udGFpbmVyUG9zaXRpb24sIHRvcF8zID0gX2EudG9wLCBib3R0b20gPSBfYS5ib3R0b207XHJcbiAgICAgICAgICAgICAgICB2YXIgdmlkZW9TaXplID0gdXRpbHMuZ2V0U2l6ZSh0aGlzLml0ZW1zW2luZGV4XSwgdGhpcy5vdXRlciwgdG9wXzMgKyBib3R0b20sIHZpZGVvSW5mbyAmJiB0aGlzLnNldHRpbmdzLnZpZGVvTWF4U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZVZpZGVvU2xpZGUoaW5kZXgsIHZpZGVvU2l6ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5MR2VsLnRyaWdnZXIobEdFdmVudHMuYmVmb3JlU2xpZGUsIHtcclxuICAgICAgICAgICAgICAgIHByZXZJbmRleDogcHJldkluZGV4LFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxyXG4gICAgICAgICAgICAgICAgZnJvbVRvdWNoOiAhIWZyb21Ub3VjaCxcclxuICAgICAgICAgICAgICAgIGZyb21UaHVtYjogISFmcm9tVGh1bWIsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmxnQnVzeSA9IHRydWU7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmhpZGVCYXJUaW1lb3V0KTtcclxuICAgICAgICAgICAgdGhpcy5hcnJvd0Rpc2FibGUoaW5kZXgpO1xyXG4gICAgICAgICAgICBpZiAoIWRpcmVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgcHJldkluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gJ3ByZXYnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPiBwcmV2SW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAnbmV4dCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFmcm9tVG91Y2gpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFrZVNsaWRlQW5pbWF0aW9uKGRpcmVjdGlvbiwgY3VycmVudFNsaWRlSXRlbSwgcHJldmlvdXNTbGlkZUl0ZW1fMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm91dGVyXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoJy5sZy1pdGVtJylcclxuICAgICAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2xnLXByZXYtc2xpZGUgbGctY3VycmVudCBsZy1uZXh0LXNsaWRlJyk7XHJcbiAgICAgICAgICAgICAgICB2Y
5627XIgdG91Y2hQcmV2ID0gdm9pZCAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRvdWNoTmV4dCA9IHZvaWQgMDtcclxuICAgICAgICAgICAgICAgIGlmIChudW1iZXJPZkdhbGxlcnlJdGVtcyA+IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b3VjaFByZXYgPSBpbmRleCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgdG91Y2hOZXh0ID0gaW5kZXggKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCAmJiBwcmV2SW5kZXggPT09IG51bWJlck9mR2FsbGVyeUl0ZW1zIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IHNsaWRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoTmV4dCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoUHJldiA9IG51bWJlck9mR2FsbGVyeUl0ZW1zIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPT09IG51bWJlck9mR2FsbGVyeUl0ZW1zIC0gMSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2SW5kZXggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJldiBzbGlkZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3VjaE5leHQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3VjaFByZXYgPSBudW1iZXJPZkdhbGxlcnlJdGVtcyAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG91Y2hQcmV2ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB0b3VjaE5leHQgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3ByZXYnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTbGlkZUl0ZW0odG91Y2hOZXh0KS5hZGRDbGFzcygnbGctbmV4dC1zbGlkZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTbGlkZUl0ZW0odG91Y2hQcmV2KS5hZGRDbGFzcygnbGctcHJldi1zbGlkZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY3VycmVudFNsaWRlSXRlbS5hZGRDbGFzcygnbGctY3VycmVudCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIERvIG5vdCBwdXQgbG9hZCBjb250ZW50IGluIHNldCB0aW1lb3V0IGFzIGl0IG5lZWRzIHRvIGxvYWQgaW1tZWRpYXRlbHkgd2hlbiB0aGUgZ2FsbGVyeSBpcyBvcGVuZWRcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxHYWxsZXJ5T24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZENvbnRlbnQoaW5kZXgsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMubG9hZENvbnRlbnQoaW5kZXgsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aXRsZSBpZiB0aGlzLnNldHRpbmdzLmFwcGVuZFN1Ykh0bWxUbyA9PT0gbGctc3ViLWh0bWxcclxuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuc2V0dGluZ3MuYXBwZW5kU3ViSHRtbFRvICE9PSAnLmxnLWl0ZW0nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmFkZEh0bWwoaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIHRoaXMuc2V0dGluZ3Muc3BlZWQgKyA1MCArIChmcm9tVG91Y2ggPyAwIDogdGhpcy5zZXR0aW5ncy5zbGlkZURlbGF5KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5sZ0J1c3kgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHByZXZpb3VzU2xpZGVJdGVtXzEucmVtb3ZlQ2xhc3MoJ2xnLXNsaWRlLXByb2dyZXNzJyk7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5MR2VsLnRyaWdnZXIobEdFdmVudHMuYWZ0ZXJTbGlkZSwge1xyXG4gICAgICAgICAgICAgICAgICAgIHByZXZJbmRleDogcHJldkluZGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcclxuICAgICAgICAgICAgICAgICAgICBmcm9tVG91Y2g6IGZyb21Ub3VjaCxcclxuICAgICAgICAgICAgICAgICAgICBmcm9tVGh1bWI6IGZyb21UaHVtYixcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LCAodGhpcy5sR2FsbGVyeU9uID8gdGhpcy5zZXR0aW5ncy5zcGVlZCArIDEwMCA6IDEwMCkgKyAoZnJvbVRvdWNoID8gMCA6IHRoaXMuc2V0dGluZ3Muc2xpZGVEZWxheSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS51cGRhdGVDdXJyZW50Q291bnRlciA9IGZ1bmN0aW9uIChpbmRleCkge1xyXG4gICAgICAgIHRoaXMuZ2V0RWxlbWVudEJ5SWQoJ2xnLWNvdW50ZXItY3VycmVudCcpLmh0bWwoaW5kZXggKyAxICsgJycpO1xyXG4gICAgfTtcclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUudXBkYXRlQ291bnRlclRvdGFsID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuZ2V0RWxlbWVudEJ5SWQoJ2xnLWNvdW50ZXItYWxsJykuaHRtbCh0aGlzLmdhbGxlcnlJdGVtcy5sZW5ndGggKyAnJyk7XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5nZXRTbGlkZVR5cGUgPSBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgIGlmIChpdGVtLl9fc2xpZGVWaWRlb0luZm8pIHtcclxuICAgICAgICAgICAgcmV0dXJuICd2aWRlbyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGl0ZW0uaWZyYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnaWZyYW1lJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgI
5627HJldHVybiAnaW1hZ2UnO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLnRvdWNoTW92ZSA9IGZ1bmN0aW9uIChzdGFydENvb3JkcywgZW5kQ29vcmRzLCBlKSB7XHJcbiAgICAgICAgdmFyIGRpc3RhbmNlWCA9IGVuZENvb3Jkcy5wYWdlWCAtIHN0YXJ0Q29vcmRzLnBhZ2VYO1xyXG4gICAgICAgIHZhciBkaXN0YW5jZVkgPSBlbmRDb29yZHMucGFnZVkgLSBzdGFydENvb3Jkcy5wYWdlWTtcclxuICAgICAgICB2YXIgYWxsb3dTd2lwZSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLnN3aXBlRGlyZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGFsbG93U3dpcGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpc3RhbmNlWCkgPiAxNSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zd2lwZURpcmVjdGlvbiA9ICdob3Jpem9udGFsJztcclxuICAgICAgICAgICAgICAgIGFsbG93U3dpcGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKE1hdGguYWJzKGRpc3RhbmNlWSkgPiAxNSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zd2lwZURpcmVjdGlvbiA9ICd2ZXJ0aWNhbCc7XHJcbiAgICAgICAgICAgICAgICBhbGxvd1N3aXBlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFsbG93U3dpcGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2Y
5627XIgJGN1cnJlbnRTbGlkZSA9IHRoaXMuZ2V0U2xpZGVJdGVtKHRoaXMuaW5kZXgpO1xyXG4gICAgICAgIGlmICh0aGlzLnN3aXBlRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcclxuICAgICAgICAgICAgZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIC8vIHJlc2V0IG9wYWNpdHkgYW5kIHRyYW5zaXRpb24gZHVyYXRpb25cclxuICAgICAgICAgICAgdGhpcy5vdXRlci5hZGRDbGFzcygnbGctZHJhZ2dpbmcnKTtcclxuICAgICAgICAgICAgLy8gbW92ZSBjdXJyZW50IHNsaWRlXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VHJhbnNsYXRlKCRjdXJyZW50U2xpZGUsIGRpc3RhbmNlWCwgMCk7XHJcbiAgICAgICAgICAgIC8vIG1vdmUgbmV4dCBhbmQgcHJldiBzbGlkZSB3aXRoIGN1cnJlbnQgc2xpZGVcclxuICAgICAgICAgICAgdmFyIHdpZHRoID0gJGN1cnJlbnRTbGlkZS5nZXQoKS5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgdmFyIHNsaWRlV2lkdGhBbW91bnQgPSAod2lkdGggKiAxNSkgLyAxMDA7XHJcbiAgICAgICAgICAgIHZhciBndXR0ZXIgPSBzbGlkZVdpZHRoQW1vdW50IC0gTWF0aC5hYnMoKGRpc3RhbmNlWCAqIDEwKSAvIDEwMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VHJhbnNsYXRlKHRoaXMub3V0ZXIuZmluZCgnLmxnLXByZXYtc2xpZGUnKS5maXJzdCgpLCAtd2lkdGggKyBkaXN0YW5jZVggLSBndXR0ZXIsIDApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFRyYW5zbGF0ZSh0aGlzLm91dGVyLmZpbmQoJy5sZy1uZXh0LXNsaWRlJykuZmlyc3QoKSwgd2lkdGggKyBkaXN0YW5jZVggKyBndXR0ZXIsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnN3aXBlRGlyZWN0aW9uID09PSAndmVydGljYWwnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLnN3aXBlVG9DbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRjb250YWluZXIuYWRkQ2xhc3MoJ2xnLWRyYWdnaW5nLXZlcnRpY2FsJyk7XHJcbiAgICAgICAgICAgICAgICB2Y
5627XIgb3BhY2l0eSA9IDEgLSBNYXRoLmFicyhkaXN0YW5jZVkpIC8gd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kYmFja2Ryb3AuY3NzKCdvcGFjaXR5Jywgb3BhY2l0eSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSAxIC0gTWF0aC5hYnMoZGlzdGFuY2VZKSAvICh3aW5kb3cuaW5uZXJXaWR0aCAqIDIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUcmFuc2xhdGUoJGN1cnJlbnRTbGlkZSwgMCwgZGlzdGFuY2VZLCBzY2FsZSwgc2NhbGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpc3RhbmNlWSkgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm91dGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnbGctaGlkZS1pdGVtcycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnbGctY29tcG9uZW50cy1vcGVuJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS50b3VjaEVuZCA9IGZ1bmN0aW9uIChlbmRDb29yZHMsIHN0YXJ0Q29vcmRzLCBldmVudCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGRpc3RhbmNlO1xyXG4gICAgICAgIC8vIGtlZXAgc2xpZGUgYW5pbWF0aW9uIGZvciBhbnkgbW9kZSB3aGlsZSBkcmFnZy9zd2lwZVxyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLm1vZGUgIT09ICdsZy1zbGlkZScpIHtcclxuICAgICAgICAgICAgdGhpcy5vdXRlci5hZGRDbGFzcygnbGctc2xpZGUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IHRyYW5zaXRpb24gZHVyYXRpb25cclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgX3RoaXMuJGNvbnRhaW5lci5yZW1vdmVDbGFzcygnbGctZHJhZ2dpbmctdmVydGljYWwnKTtcclxuICAgICAgICAgICAgX3RoaXMub3V0ZXJcclxuICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnbGctZHJhZ2dpbmcgbGctaGlkZS1pdGVtcycpXHJcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ2xnLWNvbXBvbmVudHMtb3BlbicpO1xyXG4gICAgICAgICAgICB2Y
5627XIgdHJpZ2dlckNsaWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKF90aGlzLnN3aXBlRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcclxuICAgICAgICAgICAgICAgIGRpc3RhbmNlID0gZW5kQ29vcmRzLnBhZ2VYIC0gc3RhcnRDb29yZHMucGFnZVg7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2VBYnMgPSBNYXRoLmFicyhlbmRDb29yZHMucGFnZVggLSBzdGFydENvb3Jkcy5wYWdlWCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPCAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2VBYnMgPiBfdGhpcy5zZXR0aW5ncy5zd2lwZVRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmdvVG9OZXh0U2xpZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckNsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChkaXN0YW5jZSA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZUFicyA+IF90aGlzLnNldHRpbmdzLnN3aXBlVGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZ29Ub1ByZXZTbGlkZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyQ2xpY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChfdGhpcy5zd2lwZURpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xyXG4gICAgICAgICAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhlbmRDb29yZHMucGFnZVkgLSBzdGFydENvb3Jkcy5wYWdlWSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuc2V0dGluZ3MuY2xvc2FibGUgJiZcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5zZXR0aW5ncy5zd2lwZVRvQ2xvc2UgJiZcclxuICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSA+IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmNsb3NlR2FsbGVyeSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLiRiYWNrZHJvcC5jc3MoJ29wYWNpdHknLCAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBfdGhpcy5vdXRlci5maW5kKCcubGctaXRlbScpLnJlbW92ZUF0dHIoJ3N0eWxlJyk7XHJcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2xpY2sgJiZcclxuICAgICAgICAgICAgICAgIE1hdGguYWJzKGVuZENvb3Jkcy5wYWdlWCAtIHN0YXJ0Q29vcmRzLnBhZ2VYKSA8IDUpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgY2xpY2sgaWYgZGlzdGFuY2UgaXMgbGVzcyB0aGFuIDUgcGl4XHJcbiAgICAgICAgICAgICAgICB2Y
5627XIgdGFyZ2V0ID0gJExHKGV2ZW50LnRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuaXNQb3N0ZXJFbGVtZW50KHRhcmdldCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5MR2VsLnRyaWdnZXIobEdFdmVudHMucG9zdGVyQ2xpY2spO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF90aGlzLnN3aXBlRGlyZWN0aW9uID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIHJlbW92ZSBzbGlkZSBjbGFzcyBvbmNlIGRyYWcvc3dpcGUgaXMgY29tcGxldGVkIGlmIG1vZGUgaXMgbm90IHNsaWRlXHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghX3RoaXMub3V0ZXIuaGFzQ2xhc3MoJ2xnLWRyYWdnaW5nJykgJiZcclxuICAgICAgICAgICAgICAgIF90aGlzLnNldHRpbmdzLm1vZGUgIT09ICdsZy1zbGlkZScpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLm91dGVyLnJlbW92ZUNsYXNzKCdsZy1zbGlkZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdGhpcy5zZXR0aW5ncy5zcGVlZCArIDEwMCk7XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5lbmFibGVTd2lwZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBzdGFydENvb3JkcyA9IHt9O1xyXG4gICAgICAgIHZhciBlbmRDb29yZHMgPSB7fTtcclxuICAgICAgICB2Y
5627XIgaXNNb3ZlZCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBpc1N3aXBpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5lbmFibGVTd2lwZSkge1xyXG4gICAgICAgICAgICB0aGlzLiRpbm5lci5vbigndG91Y2hzdGFydC5sZycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5kcmFnT3JTd2lwZUVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdmFyICRpdGVtID0gX3RoaXMuZ2V0U2xpZGVJdGVtKF90aGlzLmluZGV4KTtcclxuICAgICAgICAgICAgICAgIGlmICgoJExHKGUudGFyZ2V0KS5oYXNDbGFzcygnbGctaXRlbScpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgJGl0ZW0uZ2V0KCkuY29udGFpbnMoZS50YXJnZXQpKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICFfdGhpcy5vdXRlci5oYXNDbGFzcygnbGctem9vbWVkJykgJiZcclxuICAgICAgICAgICAgICAgICAgICAhX3RoaXMubGdCdXN5ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZS50b3VjaGVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzU3dpcGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMudG91Y2hBY3Rpb24gPSAnc3dpcGUnO1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLm1hbmFnZVN3aXBlQ2xhc3MoKTtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydENvb3JkcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVg6IGUudG91Y2hlc1swXS5wYWdlWCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVk6IGUudG91Y2hlc1swXS5wYWdlWSxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy4kaW5uZXIub24oJ3RvdWNobW92ZS5sZycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNTd2lwaW5nICYmXHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMudG91Y2hBY3Rpb24gPT09ICdzd2lwZScgJiZcclxuICAgICAgICAgICAgICAgICAgICBlLnRvdWNoZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kQ29vcmRzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlWDogZS50b3VjaGVzWzBdLnBhZ2VYLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlWTogZS50b3VjaGVzWzBdLnBhZ2VZLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMudG91Y2hNb3ZlKHN0YXJ0Q29vcmRzLCBlbmRDb29yZHMsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlzTW92ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy4kaW5uZXIub24oJ3RvdWNoZW5kLmxnJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMudG91Y2hBY3Rpb24gPT09ICdzd2lwZScpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNNb3ZlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc01vdmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnRvdWNoRW5kKGVuZENvb3Jkcywgc3RhcnRDb29yZHMsIGV2ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNTd2lwaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSAkTEcoZXZlbnQudGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmlzUG9zdGVyRWxlbWVudCh0YXJnZXQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5MR2VsLnRyaWdnZXIobEdFdmVudHMucG9zdGVyQ2xpY2spO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnRvdWNoQWN0aW9uID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIGlzU3dpcGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5lbmFibGVEcmFnID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHN0YXJ0Q29vcmRzID0ge307XHJcbiAgICAgICAgdmFyIGVuZENvb3JkcyA9IHt9O1xyXG4gICAgICAgIHZhciBpc0RyYWdpbmcgPSBmYWxzZTtcclxuICAgICAgICB2Y
5627XIgaXNNb3ZlZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmVuYWJsZURyYWcpIHtcclxuICAgICAgICAgICAgdGhpcy5vdXRlci5vbignbW91c2Vkb3duLmxnJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmRyYWdPclN3aXBlRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgJGl0ZW0gPSBfdGhpcy5nZXRTbGlkZUl0ZW0oX3RoaXMuaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCRMRyhlLnRhcmdldCkuaGFzQ2xhc3MoJ2xnLWl0ZW0nKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICRpdGVtLmdldCgpLmNvbnRhaW5zKGUudGFyZ2V0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghX3RoaXMub3V0ZXIuaGFzQ2xhc3MoJ2xnLXpvb21lZCcpICYmICFfdGhpcy5sZ0J1c3kpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmxnQnVzeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMubWFuYWdlU3dpcGVDbGFzcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRDb29yZHMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVg6IGUucGFnZVgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVk6IGUucGFnZVksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNEcmFnaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICoqIEZpeCBmb3Igd2Via2l0IGN1cnNvciBpc3N1ZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjY3MjNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLm91dGVyLmdldCgpLnNjcm9sbExlZnQgKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLm91dGVyLmdldCgpLnNjcm9sbExlZnQgLT0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLm91dGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdsZy1ncmFiJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ2xnLWdyYWJiaW5nJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5MR2VsLnRyaWdnZXIobEdFdmVudHMuZHJhZ1N0YXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICRMRyh3aW5kb3cpLm9uKFwibW91c2Vtb3ZlLmxnLmdsb2JhbFwiICsgdGhpcy5sZ0lkLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRHJhZ2luZyAmJiBfdGhpcy5sZ09wZW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzTW92ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZENvb3JkcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVg6IGUucGFnZVgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VZOiBlLnBhZ2VZLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMudG91Y2hNb3ZlKHN0YXJ0Q29vcmRzLCBlbmRDb29yZHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLkxHZWwudHJpZ2dlcihsR0V2ZW50cy5kcmFnTW92ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAkTEcod2luZG93KS5vbihcIm1vdXNldXAubGcuZ2xvYmFsXCIgKyB0aGlzLmxnSWQsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5sZ09wZW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSAkTEcoZXZlbnQudGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIGlmIChpc01vdmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNNb3ZlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnRvdWNoRW5kKGVuZENvb3Jkcywgc3RhcnRDb29yZHMsIGV2ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5MR2VsLnRyaWdnZXIobEdFdmVudHMuZHJhZ0VuZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChfdGhpcy5pc1Bvc3RlckVsZW1lbnQodGFyZ2V0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLkxHZWwudHJpZ2dlcihsR0V2ZW50cy5wb3N0ZXJDbGljayk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IGV4ZWN1dGlvbiBvbiBjbGlja1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRHJhZ2luZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzRHJhZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLm91dGVyLnJlbW92ZUNsYXNzKCdsZy1ncmFiYmluZycpLmFkZENsYXNzKCdsZy1ncmFiJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLnRyaWdnZXJQb3N0ZXJDbGljayA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2Y
5627XIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuJGlubmVyLm9uKCdjbGljay5sZycsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoIV90aGlzLmRyYWdPclN3aXBlRW5hYmxlZCAmJlxyXG4gICAgICAgICAgICAgICAgX3RoaXMuaXNQb3N0ZXJFbGVtZW50KCRMRyhldmVudC50YXJnZXQpKSkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuTEdlbC50cmlnZ2VyKGxHRXZlbnRzLnBvc3RlckNsaWNrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUubWFuYWdlU3dpcGVDbGFzcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RvdWNoTmV4dCA9IHRoaXMuaW5kZXggKyAxO1xyXG4gICAgICAgIHZhciBfdG91Y2hQcmV2ID0gdGhpcy5pbmRleCAtIDE7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MubG9vcCAmJiB0aGlzLmdhbGxlcnlJdGVtcy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBfdG91Y2hQcmV2ID0gdGhpcy5nYWxsZXJ5SXRlbXMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmluZGV4ID09PSB0aGlzLmdhbGxlcnlJdGVtcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICBfdG91Y2hOZXh0ID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm91dGVyLmZpbmQoJy5sZy1pdGVtJykucmVtb3ZlQ2xhc3MoJ2xnLW5leHQtc2xpZGUgbGctcHJldi1zbGlkZScpO1xyXG4gICAgICAgIGlmIChfdG91Y2hQcmV2ID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRTbGlkZUl0ZW0oX3RvdWNoUHJldikuYWRkQ2xhc3MoJ2xnLXByZXYtc2xpZGUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZXRTbGlkZUl0ZW0oX3RvdWNoTmV4dCkuYWRkQ2xhc3MoJ2xnLW5leHQtc2xpZGUnKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEdvIHRvIG5leHQgc2xpZGVcclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gZnJvbVRvdWNoIC0gdHJ1ZSBpZiBzbGlkZSBmdW5jdGlvbiBjYWxsZWQgdmlhIHRvdWNoIGV2ZW50XHJcbiAgICAgKiBAY2F0ZWdvcnkgbEdQdWJsaWNNZXRob2RzXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogIGNvbnN0IHBsdWdpbiA9IGxpZ2h0R2FsbGVyeSgpO1xyXG4gICAgICogIHBsdWdpbi5nb1RvTmV4dFNsaWRlKCk7XHJcbiAgICAgKiBAc2VlIDxhIGhyZWY9XCIvZGVtb3MvbWV0aG9kcy9cIj5EZW1vPC9hPlxyXG4gICAgICovXHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLmdvVG9OZXh0U2xpZGUgPSBmdW5jdGlvbiAoZnJvbVRvdWNoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2Y
5627XIgX2xvb3AgPSB0aGlzLnNldHRpbmdzLmxvb3A7XHJcbiAgICAgICAgaWYgKGZyb21Ub3VjaCAmJiB0aGlzLmdhbGxlcnlJdGVtcy5sZW5ndGggPCAzKSB7XHJcbiAgICAgICAgICAgIF9sb29wID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5sZ0J1c3kpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggKyAxIDwgdGhpcy5nYWxsZXJ5SXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkxHZWwudHJpZ2dlcihsR0V2ZW50cy5iZWZvcmVOZXh0U2xpZGUsIHtcclxuICAgICAgICAgICAgICAgICAgICBpbmRleDogdGhpcy5pbmRleCxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZSh0aGlzLmluZGV4LCAhIWZyb21Ub3VjaCwgZmFsc2UsICduZXh0Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX2xvb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLkxHZWwudHJpZ2dlcihsR0V2ZW50cy5iZWZvcmVOZXh0U2xpZGUsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbGlkZSh0aGlzLmluZGV4LCAhIWZyb21Ub3VjaCwgZmFsc2UsICduZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnNldHRpbmdzLnNsaWRlRW5kQW5pbWF0aW9uICYmICFmcm9tVG91Y2gpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm91dGVyLmFkZENsYXNzKCdsZy1yaWdodC1lbmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMub3V0ZXIucmVtb3ZlQ2xhc3MoJ2xnLXJpZ2h0LWVuZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDQwMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBHbyB0byBwcmV2aW91cyBzbGlkZXNcclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gZnJvbVRvdWNoIC0gdHJ1ZSBpZiBzbGlkZSBmdW5jdGlvbiBjYWxsZWQgdmlhIHRvdWNoIGV2ZW50XHJcbiAgICAgKiBAY2F0ZWdvcnkgbEdQdWJsaWNNZXRob2RzXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogIGNvbnN0IHBsdWdpbiA9IGxpZ2h0R2FsbGVyeSh7fSk7XHJcbiAgICAgKiAgcGx1Z2luLmdvVG9QcmV2U2xpZGUoKTtcclxuICAgICAqIEBzZWUgPGEgaHJlZj1cIi9kZW1vcy9tZXRob2RzL1wiPkRlbW88L2E+XHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLmdvVG9QcmV2U2xpZGUgPSBmdW5jdGlvbiAoZnJvbVRvdWNoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2Y
5627XIgX2xvb3AgPSB0aGlzLnNldHRpbmdzLmxvb3A7XHJcbiAgICAgICAgaWYgKGZyb21Ub3VjaCAmJiB0aGlzLmdhbGxlcnlJdGVtcy5sZW5ndGggPCAzKSB7XHJcbiAgICAgICAgICAgIF9sb29wID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5sZ0J1c3kpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4LS07XHJcbiAgICAgICAgICAgICAgICB0aGlzLkxHZWwudHJpZ2dlcihsR0V2ZW50cy5iZWZvcmVQcmV2U2xpZGUsIHtcclxuICAgICAgICAgICAgICAgICAgICBpbmRleDogdGhpcy5pbmRleCxcclxuICAgICAgICAgICAgICAgICAgICBmcm9tVG91Y2g6IGZyb21Ub3VjaCxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZSh0aGlzLmluZGV4LCAhIWZyb21Ub3VjaCwgZmFsc2UsICdwcmV2Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX2xvb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy5nYWxsZXJ5SXRlbXMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLkxHZWwudHJpZ2dlcihsR0V2ZW50cy5iZWZvcmVQcmV2U2xpZGUsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb21Ub3VjaDogZnJvbVRvdWNoLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpZGUodGhpcy5pbmRleCwgISFmcm9tVG91Y2gsIGZhbHNlLCAncHJldicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zZXR0aW5ncy5zbGlkZUVuZEFuaW1hdGlvbiAmJiAhZnJvbVRvdWNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRlci5hZGRDbGFzcygnbGctbGVmdC1lbmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMub3V0ZXIucmVtb3ZlQ2xhc3MoJ2xnLWxlZnQtZW5kJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgNDAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLmtleVByZXNzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgJExHKHdpbmRvdykub24oXCJrZXlkb3duLmxnLmdsb2JhbFwiICsgdGhpcy5sZ0lkLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpZiAoX3RoaXMubGdPcGVuZWQgJiZcclxuICAgICAgICAgICAgICAgIF90aGlzLnNldHRpbmdzLmVzY0tleSA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgICAgICAgICAgZS5rZXlDb2RlID09PSAyNykge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLnNldHRpbmdzLmFsbG93TWVkaWFPdmVybGFwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMub3V0ZXIuaGFzQ2xhc3MoJ2xnLWNhbi10b2dnbGUnKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLm91dGVyLmhhc0NsYXNzKCdsZy1jb21wb25lbnRzLW9wZW4nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLm91dGVyLnJlbW92ZUNsYXNzKCdsZy1jb21wb25lbnRzLW9wZW4nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmNsb3NlR2FsbGVyeSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5sZ09wZW5lZCAmJiBfdGhpcy5nYWxsZXJ5SXRlbXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMzcpIHtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZ29Ub1ByZXZTbGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMzkpIHtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZ29Ub05leHRTbGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5hcnJvdyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2Y
5627XIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuZ2V0RWxlbWVudEJ5SWQoJ2xnLXByZXYnKS5vbignY2xpY2subGcnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIF90aGlzLmdvVG9QcmV2U2xpZGUoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmdldEVsZW1lbnRCeUlkKCdsZy1uZXh0Jykub24oJ2NsaWNrLmxnJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBfdGhpcy5nb1RvTmV4dFNsaWRlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5hcnJvd0Rpc2FibGUgPSBmdW5jdGlvbiAoaW5kZXgpIHtcclxuICAgICAgICAvLyBEaXNhYmxlIGFycm93cyBpZiBzZXR0aW5ncy5oaWRlQ29udHJvbE9uRW5kIGlzIHRydWVcclxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZ3MubG9vcCAmJiB0aGlzLnNldHRpbmdzLmhpZGVDb250cm9sT25FbmQpIHtcclxuICAgICAgICAgICAgdmFyICRwcmV2ID0gdGhpcy5nZXRFbGVtZW50QnlJZCgnbGctcHJldicpO1xyXG4gICAgICAgICAgICB2YXIgJG5leHQgPSB0aGlzLmdldEVsZW1lbnRCeUlkKCdsZy1uZXh0Jyk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCArIDEgPT09IHRoaXMuZ2FsbGVyeUl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgJG5leHQuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKS5hZGRDbGFzcygnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICRuZXh0LnJlbW92ZUF0dHIoJ2Rpc2FibGVkJykucmVtb3ZlQ2xhc3MoJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAkcHJldi5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpLmFkZENsYXNzKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgJHByZXYucmVtb3ZlQXR0cignZGlzYWJsZWQnKS5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLnNldFRyYW5zbGF0ZSA9IGZ1bmN0aW9uICgkZWwsIHhWYWx1ZSwgeVZhbHVlLCBzY2FsZVgsIHNjYWxlWSkge1xyXG4gICAgICAgIGlmIChzY2FsZVggPT09IHZvaWQgMCkgeyBzY2FsZVggPSAxOyB9XHJcbiAgICAgICAgaWYgKHNjYWxlWSA9PT0gdm9pZCAwKSB7IHNjYWxlWSA9IDE7IH1cclxuICAgICAgICAkZWwuY3NzKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlM2QoJyArXHJcbiAgICAgICAgICAgIHhWYWx1ZSArXHJcbiAgICAgICAgICAgICdweCwgJyArXHJcbiAgICAgICAgICAgIHlWYWx1ZSArXHJcbiAgICAgICAgICAgICdweCwgMHB4KSBzY2FsZTNkKCcgK1xyXG4gICAgICAgICAgICBzY2FsZVggK1xyXG4gICAgICAgICAgICAnLCAnICtcclxuICAgICAgICAgICAgc2NhbGVZICtcclxuICAgICAgICAgICAgJywgMSknKTtcclxuICAgIH07XHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLm1vdXNld2hlZWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2Y
5627XIgbGFzdENhbGwgPSAwO1xyXG4gICAgICAgIHRoaXMub3V0ZXIub24oJ3doZWVsLmxnJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKCFlLmRlbHRhWSB8fCBfdGhpcy5nYWxsZXJ5SXRlbXMubGVuZ3RoIDwgMikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICBpZiAobm93IC0gbGFzdENhbGwgPCAxMDAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGFzdENhbGwgPSBub3c7XHJcbiAgICAgICAgICAgIGlmIChlLmRlbHRhWSA+IDApIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmdvVG9OZXh0U2xpZGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlLmRlbHRhWSA8IDApIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmdvVG9QcmV2U2xpZGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUuaXNTbGlkZUVsZW1lbnQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgcmV0dXJuICh0YXJnZXQuaGFzQ2xhc3MoJ2xnLW91dGVyJykgfHxcclxuICAgICAgICAgICAgdGFyZ2V0Lmhhc0NsYXNzKCdsZy1pdGVtJykgfHxcclxuICAgICAgICAgICAgdGFyZ2V0Lmhhc0NsYXNzKCdsZy1pbWctd3JhcCcpKTtcclxuICAgIH07XHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLmlzUG9zdGVyRWxlbWVudCA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICB2Y
5627XIgcGxheUJ1dHRvbiA9IHRoaXMuZ2V0U2xpZGVJdGVtKHRoaXMuaW5kZXgpXHJcbiAgICAgICAgICAgIC5maW5kKCcubGctdmlkZW8tcGxheS1idXR0b24nKVxyXG4gICAgICAgICAgICAuZ2V0KCk7XHJcbiAgICAgICAgcmV0dXJuICh0YXJnZXQuaGFzQ2xhc3MoJ2xnLXZpZGVvLXBvc3RlcicpIHx8XHJcbiAgICAgICAgICAgIHRhcmdldC5oYXNDbGFzcygnbGctdmlkZW8tcGxheS1idXR0b24nKSB8fFxyXG4gICAgICAgICAgICAocGxheUJ1dHRvbiAmJiBwbGF5QnV0dG9uLmNvbnRhaW5zKHRhcmdldC5nZXQoKSkpKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIE1heGltaXplIG1pbmltaXplIGlubGluZSBnYWxsZXJ5LlxyXG4gICAgICogQGNhdGVnb3J5IGxHUHVibGljTWV0aG9kc1xyXG4gICAgICovXHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLnRvZ2dsZU1heGltaXplID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5nZXRFbGVtZW50QnlJZCgnbGctbWF4aW1pemUnKS5vbignY2xpY2subGcnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIF90aGlzLiRjb250YWluZXIudG9nZ2xlQ2xhc3MoJ2xnLWlubGluZScpO1xyXG4gICAgICAgICAgICBfdGhpcy5yZWZyZXNoT25SZXNpemUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLmludmFsaWRhdGVJdGVtcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5pdGVtcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLml0ZW1zW2luZGV4XTtcclxuICAgICAgICAgICAgdmFyICRlbGVtZW50ID0gJExHKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAkZWxlbWVudC5vZmYoXCJjbGljay5sZ2N1c3RvbS1pdGVtLVwiICsgJGVsZW1lbnQuYXR0cignZGF0YS1sZy1pZCcpKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS50cmFwRm9jdXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLiRjb250YWluZXIuZ2V0KCkuZm9jdXMoe1xyXG4gICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICRMRyh3aW5kb3cpLm9uKFwia2V5ZG93bi5sZy5nbG9iYWxcIiArIHRoaXMubGdJZCwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKCFfdGhpcy5sZ09wZW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBpc1RhYlByZXNzZWQgPSBlLmtleSA9PT0gJ1RhYicgfHwgZS5rZXlDb2RlID09PSA5O1xyXG4gICAgICAgICAgICBpZiAoIWlzVGFiUHJlc3NlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBmb2N1c2FibGVFbHMgPSB1dGlscy5nZXRGb2N1c2FibGVFbGVtZW50cyhfdGhpcy4kY29udGFpbmVyLmdldCgpKTtcclxuICAgICAgICAgICAgdmFyIGZpcnN0Rm9jdXNhYmxlRWwgPSBmb2N1c2FibGVFbHNbMF07XHJcbiAgICAgICAgICAgIHZhciBsYXN0Rm9jdXNhYmxlRWwgPSBmb2N1c2FibGVFbHNbZm9jdXNhYmxlRWxzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICBpZiAoZS5zaGlmdEtleSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGZpcnN0Rm9jdXNhYmxlRWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBsYXN0Rm9jdXNhYmxlRWwuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gbGFzdEZvY3VzYWJsZUVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RGb2N1c2FibGVFbC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUubWFuYWdlQ2xvc2VHYWxsZXJ5ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmdzLmNsb3NhYmxlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgdmFyIG1vdXNlZG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2V0RWxlbWVudEJ5SWQoJ2xnLWNsb3NlJykub24oJ2NsaWNrLmxnJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBfdGhpcy5jbG9zZUdhbGxlcnkoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5jbG9zZU9uVGFwKSB7XHJcbiAgICAgICAgICAgIC8vIElmIHlvdSBkcmFnIHRoZSBzbGlkZSBhbmQgcmVsZWFzZSBvdXRzaWRlIGdhbGxlcnkgZ2V0cyBjbG9zZSBvbiBjaHJvbWVcclxuICAgICAgICAgICAgLy8gZm9yIHByZXZlbnRpbmcgdGhpcyBjaGVjayBtb3VzZWRvd24gYW5kIG1vdXNldXAgaGFwcGVuZWQgb24gLmxnLWl0ZW0gb3IgbGctb3V0ZXJcclxuICAgICAgICAgICAgdGhpcy5vdXRlci5vbignbW91c2Vkb3duLmxnJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSAkTEcoZS50YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmlzU2xpZGVFbGVtZW50KHRhcmdldCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBtb3VzZWRvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW91c2Vkb3duID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgI
5627H0pO1xyXG4gICAgICAgICAgICB0aGlzLm91dGVyLm9uKCdtb3VzZW1vdmUubGcnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBtb3VzZWRvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMub3V0ZXIub24oJ21vdXNldXAubGcnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9ICRMRyhlLnRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuaXNTbGlkZUVsZW1lbnQodGFyZ2V0KSAmJiBtb3VzZWRvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIV90aGlzLm91dGVyLmhhc0NsYXNzKCdsZy1kcmFnZ2luZycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmNsb3NlR2FsbGVyeSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2xvc2UgbGlnaHRHYWxsZXJ5IGlmIGl0IGlzIG9wZW5lZC5cclxuICAgICAqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSWYgY2xvc2FibGUgaXMgZmFsc2UgaW4gdGhlIHNldHRpbmdzLCB5b3UgbmVlZCB0byBwYXNzIHRydWUgdmlhIGNsb3NlR2FsbGVyeSBtZXRob2QgdG8gZm9yY2UgY2xvc2UgZ2FsbGVyeVxyXG4gICAgICogQHJldHVybiByZXR1cm5zIHRoZSBlc3RpbWF0ZWQgdGltZSB0byBjbG9zZSBnYWxsZXJ5IGNvbXBsZXRlbHkgaW5jbHVkaW5nIHRoZSBjbG9zZSBhbmltYXRpb24gZHVyYXRpb25cclxuICAgICAqIEBjYXRlZ29yeSBsR1B1YmxpY01ldGhvZHNcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiAgY29uc3QgcGx1Z2luID0gbGlnaHRHYWxsZXJ5KCk7XHJcbiAgICAgKiAgcGx1Z2luLmNsb3NlR2FsbGVyeSgpO1xyXG4gICAgICpcclxuICAgICAqL1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5jbG9zZUdhbGxlcnkgPSBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgICAgICB2Y
5627XIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmICghdGhpcy5sZ09wZW5lZCB8fCAoIXRoaXMuc2V0dGluZ3MuY2xvc2FibGUgJiYgIWZvcmNlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5MR2VsLnRyaWdnZXIobEdFdmVudHMuYmVmb3JlQ2xvc2UpO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLnJlc2V0U2Nyb2xsUG9zaXRpb24gJiYgIXRoaXMuc2V0dGluZ3MuaGlkZVNjcm9sbGJhcikge1xyXG4gICAgICAgICAgICAkTEcod2luZG93KS5zY3JvbGxUb3AodGhpcy5wcmV2U2Nyb2xsVG9wKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGN1cnJlbnRJdGVtID0gdGhpcy5pdGVtc1t0aGlzLmluZGV4XTtcclxuICAgICAgICB2YXIgdHJhbnNmb3JtO1xyXG4gICAgICAgIGlmICh0aGlzLnpvb21Gcm9tT3JpZ2luICYmIGN1cnJlbnRJdGVtKSB7XHJcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMubWVkaWFDb250YWluZXJQb3NpdGlvbiwgdG9wXzQgPSBfYS50b3AsIGJvdHRvbSA9IF9hLmJvdHRvbTtcclxuICAgICAgICAgICAgdmFyIF9iID0gdGhpcy5nYWxsZXJ5SXRlbXNbdGhpcy5pbmRleF0sIF9fc2xpZGVWaWRlb0luZm8gPSBfYi5fX3NsaWRlVmlkZW9JbmZvLCBwb3N0ZXIgPSBfYi5wb3N0ZXI7XHJcbiAgICAgICAgICAgIHZhciBpbWFnZVNpemUgPSB1dGlscy5nZXRTaXplKGN1cnJlbnRJdGVtLCB0aGlzLm91dGVyLCB0b3BfNCArIGJvdHRvbSwgX19zbGlkZVZpZGVvSW5mbyAmJiBwb3N0ZXIgJiYgdGhpcy5zZXR0aW5ncy52aWRlb01heFNpemUpO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm0gPSB1dGlscy5nZXRUcmFuc2Zvcm0oY3VycmVudEl0ZW0sIHRoaXMub3V0ZXIsIHRvcF80LCBib3R0b20sIGltYWdlU2l6ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnpvb21Gcm9tT3JpZ2luICYmIHRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLm91dGVyLmFkZENsYXNzKCdsZy1jbG9zaW5nIGxnLXpvb20tZnJvbS1pbWFnZScpO1xyXG4gICAgICAgICAgICB0aGlzLmdldFNsaWRlSXRlbSh0aGlzLmluZGV4KVxyXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKCdsZy1zdGFydC1lbmQtcHJvZ3Jlc3MnKVxyXG4gICAgICAgICAgICAgICAgLmNzcygndHJhbnNpdGlvbi1kdXJhdGlvbicsIHRoaXMuc2V0dGluZ3Muc3RhcnRBbmltYXRpb25EdXJhdGlvbiArICdtcycpXHJcbiAgICAgICAgICAgICAgICAuY3NzKCd0cmFuc2Zvcm0nLCB0cmFuc2Zvcm0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5vdXRlci5hZGRDbGFzcygnbGctaGlkZS1pdGVtcycpO1xyXG4gICAgICAgICAgICAvLyBsZy16b29tLWZyb20taW1hZ2UgaXMgdXNlZCBmb3Igc2V0dGluZyB0aGUgb3BhY2l0eSB0byAxIGlmIHpvb21Gcm9tT3JpZ2luIGlzIHRydWVcclxuICAgICAgICAgICAgLy8gSWYgdGhlIGNsb3NpbmcgaXRlbSBkb2Vzbid0IGhhdmUgdGhlIGxnLXNpemUgYXR0cmlidXRlLCByZW1vdmUgdGhpcyBjbGFzcyB0byBhdm9pZCB0aGUgY2xvc2luZyBjc3MgY29uZmxpY3RzXHJcbiAgICAgICAgICAgIHRoaXMub3V0ZXIucmVtb3ZlQ2xhc3MoJ2xnLXpvb20tZnJvbS1pbWFnZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBVbmJpbmQgYWxsIGV2ZW50cyBhZGRlZCBieSBsaWdodEdhbGxlcnlcclxuICAgICAgICAvLyBAdG9kb1xyXG4gICAgICAgIC8vdGhpcy4kZWwub2ZmKCcubGcudG0nKTtcclxuICAgICAgICB0aGlzLmRlc3Ryb3lNb2R1bGVzKCk7XHJcbiAgICAgICAgdGhpcy5sR2FsbGVyeU9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0R1bW15SW1hZ2VSZW1vdmVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy56b29tRnJvbU9yaWdpbiA9IHRoaXMuc2V0dGluZ3Muem9vbUZyb21PcmlnaW47XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaGlkZUJhclRpbWVvdXQpO1xyXG4gICAgICAgIHRoaXMuaGlkZUJhclRpbWVvdXQgPSBmYWxzZTtcclxuICAgICAgICAkTEcoJ2h0bWwnKS5yZW1vdmVDbGFzcygnbGctb24nKTtcclxuICAgICAgICB0aGlzLm91dGVyLnJlbW92ZUNsYXNzKCdsZy12aXNpYmxlIGxnLWNvbXBvbmVudHMtb3BlbicpO1xyXG4gICAgICAgIC8vIFJlc2V0dGluZyBvcGFjaXR5IHRvIDAgaXNkIHJlcXVpcmVkIGFzICB2ZXJ0aWNhbCBzd2lwZSB0byBjbG9zZSBmdW5jdGlvbiBhZGRzIGlubGluZSBvcGFjaXR5LlxyXG4gICAgICAgIHRoaXMuJGJhY2tkcm9wLnJlbW92ZUNsYXNzKCdpbicpLmNzcygnb3BhY2l0eScsIDApO1xyXG4gICAgICAgIHZhciByZW1vdmVUaW1lb3V0ID0gdGhpcy56b29tRnJvbU9yaWdpbiAmJiB0cmFuc2Zvcm1cclxuICAgICAgICAgICAgPyBNYXRoLm1heCh0aGlzLnNldHRpbmdzLnN0YXJ0QW5pbWF0aW9uRHVyYXRpb24sIHRoaXMuc2V0dGluZ3MuYmFja2Ryb3BEdXJhdGlvbilcclxuICAgICAgICAgICAgOiB0aGlzLnNldHRpbmdzLmJhY2tkcm9wRHVyYXRpb247XHJcbiAgICAgICAgdGhpcy4kY29udGFpbmVyLnJlbW92ZUNsYXNzKCdsZy1zaG93LWluJyk7XHJcbiAgICAgICAgLy8gT25jZSB0aGUgY2xvc2lnbiBhbmltYXRpb24gaXMgY29tcGxldGVkIGFuZCBnYWxsZXJ5IGlzIGludmlzaWJsZVxyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoX3RoaXMuem9vbUZyb21PcmlnaW4gJiYgdHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5vdXRlci5yZW1vdmVDbGFzcygnbGctem9vbS1mcm9tLWltYWdlJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgX3RoaXMuJGNvbnRhaW5lci5yZW1vdmVDbGFzcygnbGctc2hvdycpO1xyXG4gICAgICAgICAgICAvLyBSZXNldCBzY3JvbGxiYXJcclxuICAgICAgICAgICAgX3RoaXMucmVzZXRTY3JvbGxCYXIoKTtcclxuICAgICAgICAgICAgLy8gTmVlZCB0byByZW1vdmUgaW5saW5lIG9wYWNpdHkgYXMgaXQgaXMgdXNlZCBpbiB0aGUgc3R5bGVzaGVldCBhcyB3ZWxsXHJcbiAgICAgICAgICAgIF90aGlzLiRiYWNrZHJvcF
5627xyXG4gICAgICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ3N0eWxlJylcclxuICAgICAgICAgICAgICAgIC5jc3MoJ3RyYW5zaXRpb24tZHVyYXRpb24nLCBfdGhpcy5zZXR0aW5ncy5iYWNrZHJvcER1cmF0aW9uICsgJ21zJyk7XHJcbiAgICAgICAgICAgIF90aGlzLm91dGVyLnJlbW92ZUNsYXNzKFwibGctY2xvc2luZyBcIiArIF90aGlzLnNldHRpbmdzLnN0YXJ0Q2xhc3MpO1xyXG4gICAgICAgICAgICBfdGhpcy5nZXRTbGlkZUl0ZW0oX3RoaXMuaW5kZXgpLnJlbW92ZUNsYXNzKCdsZy1zdGFydC1lbmQtcHJvZ3Jlc3MnKTtcclxuICAgICAgICAgICAgX3RoaXMuJGlubmVyLmVtcHR5KCk7XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5sZ09wZW5lZCkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuTEdlbC50cmlnZ2VyKGxHRXZlbnRzLmFmdGVyQ2xvc2UsIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZTogX3RoaXMsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoX3RoaXMuJGNvbnRhaW5lci5nZXQoKSkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuJGNvbnRhaW5lci5nZXQoKS5ibHVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgX3RoaXMubGdPcGVuZWQgPSBmYWxzZTtcclxuICAgICAgICB9LCByZW1vdmVUaW1lb3V0ICsgMTAwKTtcclxuICAgICAgICByZXR1cm4gcmVtb3ZlVGltZW91dCArIDEwMDtcclxuICAgIH07XHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLmluaXRNb2R1bGVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGUpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIG1vZHVsZS5pbml0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwibGlnaHRHYWxsZXJ5Oi0gbWFrZSBzdXJlIGxpZ2h0R2FsbGVyeSBtb2R1bGUgaXMgcHJvcGVybHkgaW5pdGlhdGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgTGlnaHRHYWxsZXJ5LnByb3RvdHlwZS5kZXN0cm95TW9kdWxlcyA9IGZ1bmN0aW9uIChkZXN0cm95KSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmZvckVhY2goZnVuY3Rpb24gKG1vZHVsZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlc3Ryb3kpIHtcclxuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmNsb3NlR2FsbGVyeSAmJiBtb2R1bGUuY2xvc2VHYWxsZXJ5KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwibGlnaHRHYWxsZXJ5Oi0gbWFrZSBzdXJlIGxpZ2h0R2FsbGVyeSBtb2R1bGUgaXMgcHJvcGVybHkgZGVzdHJveWVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZWZyZXNoIGxpZ2h0R2FsbGVyeSB3aXRoIG5ldyBzZXQgb2YgY2hpbGRyZW4uXHJcbiAgICAgKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoaXMgaXMgdXNlZnVsIHRvIHVwZGF0ZSB0aGUgZ2FsbGVyeSB3aGVuIHRoZSBjaGlsZCBlbGVtZW50cyBhcmUgY2hhbmdlZCB3aXRob3V0IGNhbGxpbmcgZGVzdHJveSBtZXRob2QuXHJcbiAgICAgKlxyXG4gICAgICogSWYgeW91IGFyZSB1c2luZyBkeW5hbWljIG1vZGUsIHlvdSBjYW4gcGFzcyB0aGUgbW9kaWZpZWQgYXJyYXkgb2YgZHluYW1pY0VsIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gcmVmcmVzaCB0aGUgZHluYW1pYyBnYWxsZXJ5XHJcbiAgICAgKiBAc2VlIDxhIGhyZWY9XCIvZGVtb3MvZHluYW1pYy1tb2RlL1wiPkRlbW88L2E+XHJcbiAgICAgKiBAY2F0ZWdvcnkgbEdQdWJsaWNNZXRob2RzXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogIGNvbnN0IHBsdWdpbiA9IGxpZ2h0R2FsbGVyeSgpO1xyXG4gICAgICogIC8vIERlbGV0ZSBvciBhZGQgY2hpbGRyZW4sIHRoZW4gY2FsbFxyXG4gICAgICogIHBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoZ2FsbGVyeUl0ZW1zKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmdzLmR5bmFtaWMpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlSXRlbXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGdhbGxlcnlJdGVtcykge1xyXG4gICAgICAgICAgICB0aGlzLmdhbGxlcnlJdGVtcyA9IGdhbGxlcnlJdGVtcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZUNvbnRyb2xzKCk7XHJcbiAgICAgICAgdGhpcy5vcGVuR2FsbGVyeU9uSXRlbUNsaWNrKCk7XHJcbiAgICAgICAgdGhpcy5MR2VsLnRyaWdnZXIobEdFdmVudHMudXBkYXRlU2xpZGVzKTtcclxuICAgIH07XHJcbiAgICBMaWdodEdhbGxlcnkucHJvdG90eXBlLnVwZGF0ZUNvbnRyb2xzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuYWRkU2xpZGVWaWRlb0luZm8odGhpcy5nYWxsZXJ5SXRlbXMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ291bnRlclRvdGFsKCk7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VTaW5nbGVTbGlkZUNsYXNzTmFtZSgpO1xyXG4gICAgfTtcclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUuZGVzdHJveUdhbGxlcnkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95TW9kdWxlcyh0cnVlKTtcclxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZ3MuZHluYW1pYykge1xyXG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGVJdGVtcygpO1xyXG4gICAgICAgI
5627H1cclxuICAgICAgICAkTEcod2luZG93KS5vZmYoXCIubGcuZ2xvYmFsXCIgKyB0aGlzLmxnSWQpO1xyXG4gICAgICAgIHRoaXMuTEdlbC5vZmYoJy5sZycpO1xyXG4gICAgICAgIHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3kgbGlnaHRHYWxsZXJ5LlxyXG4gICAgICogRGVzdHJveSBsaWdodEdhbGxlcnkgYW5kIGl0cyBwbHVnaW4gaW5zdGFuY2VzIGNvbXBsZXRlbHlcclxuICAgICAqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhpcyBtZXRob2QgYWxzbyBjYWxscyBDbG9zZUdhbGxlcnkgZnVuY3Rpb24gaW50ZXJuYWxseS4gUmV0dXJucyB0aGUgdGltZSB0YWtlcyB0byBjb21wbGV0ZWx5IGNsb3NlIGFuZCBkZXN0cm95IHRoZSBpbnN0YW5jZS5cclxuICAgICAqIEluIGNhc2UgaWYgeW91IHdhbnQgdG8gcmUtaW5pdGlhbGl6ZSBsaWdodEdhbGxlcnkgcmlnaHQgYWZ0ZXIgZGVzdHJveWluZyBpdCwgaW5pdGlhbGl6ZSBpdCBvbmx5IG9uY2UgdGhlIGRlc3Ryb3kgcHJvY2VzcyBpcyBjb21wbGV0ZWQuXHJcbiAgICAgKiBZb3UgY2FuIHVzZSByZWZyZXNoIG1ldGhvZCBtb3N0IG9mIHRoZSB0aW1lcy5cclxuICAgICAqIEBjYXRlZ29yeSBsR1B1YmxpY01ldGhvZHNcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiAgY29uc3QgcGx1Z2luID0gbGlnaHRHYWxsZXJ5KCk7XHJcbiAgICAgKiAgcGx1Z2luLmRlc3Ryb3koKTtcclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIExpZ2h0R2FsbGVyeS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2Y
5627XIgY2xvc2VUaW1lb3V0ID0gdGhpcy5jbG9zZUdhbGxlcnkodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGNsb3NlVGltZW91dCkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRoaXMuZGVzdHJveUdhbGxlcnkuYmluZCh0aGlzKSwgY2xvc2VUaW1lb3V0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveUdhbGxlcnkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNsb3NlVGltZW91dDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gTGlnaHRHYWxsZXJ5O1xyXG59KCkpO1xuXG5mdW5jdGlvbiBsaWdodEdhbGxlcnkoZWwsIG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBuZXcgTGlnaHRHYWxsZXJ5KGVsLCBvcHRpb25zKTtcclxufVxuXG5leHBvcnQgZGVmYXVsdCBsaWdodEdhbGxlcnk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saWdodGdhbGxlcnkuZXM1LmpzLm1hcFxuIiwiLyohXG4gKiBsaWdodGdhbGxlcnkgfCAyLjcuMCB8IE9jdG9iZXIgOXRoIDIwMjJcbiAqIGh0dHA6Ly93d3cubGlnaHRnYWxsZXJ5anMuY29tL1xuICogQ29weXJpZ2h0IChjKSAyMDIwIFNhY2hpbiBOZXJhdmF0aDtcbiAqIEBsaWNlbnNlIEdQTHYzXG4gKi9cblxuLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuXHJcbnZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn07XG5cbnZhciBmdWxsc2NyZWVuU2V0dGluZ3MgPSB7XHJcbiAgICBmdWxsU2NyZWVuOiB0cnVlLFxyXG4gICAgZnVsbHNjcmVlblBsdWdpblN0cmluZ3M6IHtcclxuICAgICAgICB0b2dnbGVGdWxsc2NyZWVuOiAnVG9nZ2xlIEZ1bGxzY3JlZW4nLFxyXG4gICAgfSxcclxufTtcblxudmFyIEZ1bGxTY3JlZW4gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBGdWxsU2NyZWVuKGluc3RhbmNlLCAkTEcpIHtcclxuICAgICAgICAvLyBnZXQgbGlnaHRHYWxsZXJ5IGNvcmUgcGx1Z2luIGluc3RhbmNlXHJcbiAgICAgICAgdGhpcy5jb3JlID0gaW5zdGFuY2U7XHJcbiAgICAgICAgdGhpcy4kTEcgPSAkTEc7XHJcbiAgICAgICAgLy8gZXh0ZW5kIG1vZHVsZSBkZWZhdWx0IHNldHRpbmdzIHdpdGggbGlnaHRHYWxsZXJ5IGNvcmUgc2V0dGluZ3NcclxuICAgICAgICB0aGlzLnNldHRpbmdzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGZ1bGxzY3JlZW5TZXR0aW5ncyksIHRoaXMuY29yZS5zZXR0aW5ncyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBGdWxsU2NyZWVuLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBmdWxsU2NyZWVuID0gJyc7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZnVsbFNjcmVlbikge1xyXG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgZnVsbHNjcmVlbiBicm93c2VyIHN1cHBvcnRcclxuICAgICAgICAgICAgaWYgKCFkb2N1bWVudC5mdWxsc2NyZWVuRW5hYmxlZCAmJlxyXG4gICAgICAgICAgICAgICAgIWRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkICYmXHJcbiAgICAgICAgICAgICAgICAhZG9jdW1lbnQubW96RnVsbFNjcmVlbkVuYWJsZWQgJiZcclxuICAgICAgICAgICAgICAgICFkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmdWxsU2NyZWVuID0gXCI8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgYXJpYS1sYWJlbD1cXFwiXCIgKyB0aGlzLnNldHRpbmdzLmZ1bGxzY3JlZW5QbHVnaW5TdHJpbmdzWyd0b2dnbGVGdWxsc2NyZWVuJ10gKyBcIlxcXCIgY2xhc3M9XFxcImxnLWZ1bGxzY3JlZW4gbGctaWNvblxcXCI+PC9idXR0b24+XCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvcmUuJHRvb2xiYXIuYXBwZW5kKGZ1bGxTY3JlZW4pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mdWxsU2NyZWVuKCk7XHJcbiAgICAgICAgICAgI
5627H1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgRnVsbFNjcmVlbi5wcm90b3R5cGUuaXNGdWxsU2NyZWVuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAoZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQgfHxcclxuICAgICAgICAgICAgZG9jdW1lbnQubW96RnVsbFNjcmVlbkVsZW1lbnQgfHxcclxuICAgICAgICAgICAgZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVsZW1lbnQgfHxcclxuICAgICAgICAgICAgZG9jdW1lbnQubXNGdWxsc2NyZWVuRWxlbWVudCk7XHJcbiAgICB9O1xyXG4gICAgRnVsbFNjcmVlbi5wcm90b3R5cGUucmVxdWVzdEZ1bGxzY3JlZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG4gICAgICAgIGlmIChlbC5yZXF1ZXN0RnVsbHNjcmVlbikge1xyXG4gICAgICAgICAgICBlbC5yZXF1ZXN0RnVsbHNjcmVlbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbC5tc1JlcXVlc3RGdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgICAgIGVsLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZWwubW96UmVxdWVzdEZ1bGxTY3JlZW4pIHtcclxuICAgICAgICAgICAgZWwubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZWwud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4pIHtcclxuICAgICAgICAgICAgZWwud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgRnVsbFNjcmVlbi5wcm90b3R5cGUuZXhpdEZ1bGxzY3JlZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4pIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChkb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4pIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvR3VpZGUvQVBJL0RPTS9Vc2luZ19mdWxsX3NjcmVlbl9tb2RlXHJcbiAgICBGdWxsU2NyZWVuLnByb3RvdHlwZS5mdWxsU2NyZWVuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy4kTEcoZG9jdW1lbnQpLm9uKFwiZnVsbHNjcmVlbmNoYW5nZS5sZy5nbG9iYWxcIiArIHRoaXMuY29yZS5sZ0lkICsgXCIgXFxuICAgICAgICAgICAgd2Via2l0ZnVsbHNjcmVlbmNoYW5nZS5sZy5nbG9iYWxcIiArIHRoaXMuY29yZS5sZ0lkICsgXCIgXFxuICAgICAgICAgICAgbW96ZnVsbHNjcmVlbmNoYW5nZS5sZy5nbG9iYWxcIiArIHRoaXMuY29yZS5sZ0lkICsgXCIgXFxuICAgICAgICAgICAgTVNGdWxsc2NyZWVuQ2hhbmdlLmxnLmdsb2JhbFwiICsgdGhpcy5jb3JlLmxnSWQsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCFfdGhpcy5jb3JlLmxnT3BlbmVkKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBfdGhpcy5jb3JlLm91dGVyLnRvZ2dsZUNsYXNzKCdsZy1mdWxsc2NyZWVuLW9uJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jb3JlLm91dGVyXHJcbiAgICAgICAgICAgIC5maW5kKCcubGctZnVsbHNjcmVlbicpXHJcbiAgICAgICAgICAgIC5maXJzdCgpXHJcbiAgICAgICAgICAgIC5vbignY2xpY2subGcnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5pc0Z1bGxTY3JlZW4oKSkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuZXhpdEZ1bGxzY3JlZW4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLnJlcXVlc3RGdWxsc2NyZWVuKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBGdWxsU2NyZWVuLnByb3RvdHlwZS5jbG9zZUdhbGxlcnkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gZXhpdCBmcm9tIGZ1bGxzY3JlZW4gaWYgYWN0aXZhdGVkXHJcbiAgICAgICAgaWYgKHRoaXMuaXNGdWxsU2NyZWVuKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5leGl0RnVsbHNjcmVlbigpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBGdWxsU2NyZWVuLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuJExHKGRvY3VtZW50KS5vZmYoXCJmdWxsc2NyZWVuY2hhbmdlLmxnLmdsb2JhbFwiICsgdGhpcy5jb3JlLmxnSWQgKyBcIiBcXG4gICAgICAgICAgICB3ZWJraXRmdWxsc2NyZWVuY2hhbmdlLmxnLmdsb2JhbFwiICsgdGhpcy5jb3JlLmxnSWQgKyBcIiBcXG4gICAgICAgICAgICBtb3pmdWxsc2NyZWVuY2hhbmdlLmxnLmdsb2JhbFwiICsgdGhpcy5jb3JlLmxnSWQgKyBcIiBcXG4gICAgICAgICAgICBNU0Z1bGxzY3JlZW5DaGFuZ2UubGcuZ2xvYmFsXCIgKyB0aGlzLmNvcmUubGdJZCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEZ1bGxTY3JlZW47XHJcbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZ1bGxTY3JlZW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sZy1mdWxsc2NyZWVuLmVzNS5qcy5tYXBcbiIsIi8qIVxuICogbGlnaHRnYWxsZXJ5IHwgMi43LjAgfCBPY3RvYmVyIDl0aCAyMDIyXG4gKiBodHRwOi8vd3d3LmxpZ2h0Z2FsbGVyeWpzLmNvbS9cbiAqIENvcHlyaWdodCAoYykgMjAyMCBTYWNoaW4gTmVyYXZhdGg7XG4gKiBAbGljZW5zZSBHUEx2M1xuICovXG5cbi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcblxyXG52YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgI
5627HMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59O1xuXG52YXIgdGh1bWJuYWlsc1NldHRpbmdzID0ge1xyXG4gICAgdGh1bWJuYWlsOiB0cnVlLFxyXG4gICAgYW5pbWF0ZVRodW1iOiB0cnVlLFxyXG4gICAgY3VycmVudFBhZ2VyUG9zaXRpb246ICdtaWRkbGUnLFxyXG4gICAgYWxpZ25UaHVtYm5haWxzOiAnbWlkZGxlJyxcclxuICAgIHRodW1iV2lkdGg6IDEwMCxcclxuICAgIHRodW1iSGVpZ2h0OiAnODBweCcsXHJcbiAgICB0aHVtYk1hcmdpbjogNSxcclxuICAgIGFwcGVuZFRodW1ibmFpbHNUbzogJy5sZy1jb21wb25lbnRzJyxcclxuICAgIHRvZ2dsZVRodW1iOiBmYWxzZSxcclxuICAgIGVuYWJsZVRodW1iRHJhZzogdHJ1ZSxcclxuICAgIGVuYWJsZVRodW1iU3dpcGU6IHRydWUsXHJcbiAgICB0aHVtYm5haWxTd2lwZVRocmVzaG9sZDogMTAsXHJcbiAgICBsb2FkWW91VHViZVRodW1ibmFpbDogdHJ1ZSxcclxuICAgIHlvdVR1YmVUaHVtYlNpemU6IDEsXHJcbiAgICB0aHVtYm5haWxQbHVnaW5TdHJpbmdzOiB7XHJcbiAgICAgICAgdG9nZ2xlVGh1bWJuYWlsczogJ1RvZ2dsZSB0aHVtYm5haWxzJyxcclxuICAgIH0sXHJcbn07XG5cbi8qKlxyXG4gKiBMaXN0IG9mIGxpZ2h0R2FsbGVyeSBldmVudHNcclxuICogQWxsIGV2ZW50cyBzaG91bGQgYmUgZG9jdW1lbnRlZCBoZXJlXHJcbiAqIEJlbG93IGludGVyZmFjZXMgYXJlIHVzZWQgdG8gYnVpbGQgdGhlIHdlYnNpdGUgZG9jdW1lbnRhdGlvbnNcclxuICogKi9cclxudmFyIGxHRXZlbnRzID0ge1xyXG4gICAgYWZ0ZXJBcHBlbmRTbGlkZTogJ2xnQWZ0ZXJBcHBlbmRTbGlkZScsXHJcbiAgICBpbml0OiAnbGdJbml0JyxcclxuICAgIGhhc1ZpZGVvOiAnbGdIYXNWaWRlbycsXHJcbiAgICBjb250YWluZXJSZXNpemU6ICdsZ0NvbnRhaW5lclJlc2l6ZScsXHJcbiAgICB1cGRhdGVTbGlkZXM6ICdsZ1VwZGF0ZVNsaWRlcycsXHJcbiAgICBhZnRlckFwcGVuZFN1Ykh0bWw6ICdsZ0FmdGVyQXBwZW5kU3ViSHRtbCcsXHJcbiAgICBiZWZvcmVPcGVuOiAnbGdCZWZvcmVPcGVuJyxcclxuICAgIGFmdGVyT3BlbjogJ2xnQWZ0ZXJPcGVuJyxcclxuICAgIHNsaWRlSXRlbUxvYWQ6ICdsZ1NsaWRlSXRlbUxvYWQnLFxyXG4gICAgYmVmb3JlU2xpZGU6ICdsZ0JlZm9yZVNsaWRlJyxcclxuICAgIGFmdGVyU2xpZGU6ICdsZ0FmdGVyU2xpZGUnLFxyXG4gICAgcG9zdGVyQ2xpY2s6ICdsZ1Bvc3RlckNsaWNrJyxcclxuICAgIGRyYWdTdGFydDogJ2xnRHJhZ1N0YXJ0JyxcclxuICAgIGRyYWdNb3ZlOiAnbGdEcmFnTW92ZScsXHJcbiAgICBkcmFnRW5kOiAnbGdEcmFnRW5kJyxcclxuICAgIGJlZm9yZU5leHRTbGlkZTogJ2xnQmVmb3JlTmV4dFNsaWRlJyxcclxuICAgIGJlZm9yZVByZXZTbGlkZTogJ2xnQmVmb3JlUHJldlNsaWRlJyxcclxuICAgIGJlZm9yZUNsb3NlOiAnbGdCZWZvcmVDbG9zZScsXHJcbiAgICBhZnRlckNsb3NlOiAnbGdBZnRlckNsb3NlJyxcclxuICAgIHJvdGF0ZUxlZnQ6ICdsZ1JvdGF0ZUxlZnQnLFxyXG4gICAgcm90YXRlUmlnaHQ6ICdsZ1JvdGF0ZVJpZ2h0JyxcclxuICAgIGZsaXBIb3Jpem9udGFsOiAnbGdGbGlwSG9yaXpvbnRhbCcsXHJcbiAgICBmbGlwVmVydGljYWw6ICdsZ0ZsaXBWZXJ0aWNhbCcsXHJcbiAgICBhdXRvcGxheTogJ2xnQXV0b3BsYXknLFxyXG4gICAgYXV0b3BsYXlTdGFydDogJ2xnQXV0b3BsYXlTdGFydCcsXHJcbiAgICBhdXRvcGxheVN0b3A6ICdsZ0F1dG9wbGF5U3RvcCcsXHJcbn07XG5cbnZhciBUaHVtYm5haWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBUaHVtYm5haWwoaW5zdGFuY2UsICRMRykge1xyXG4gICAgICAgIHRoaXMudGh1bWJPdXRlcldpZHRoID0gMDtcclxuICAgICAgICB0aGlzLnRodW1iVG90YWxXaWR0aCA9IDA7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVYID0gMDtcclxuICAgICAgICB0aGlzLnRodW1iQ2xpY2thYmxlID0gZmFsc2U7XHJcbiAgICAgICAgLy8gZ2V0IGxpZ2h0R2FsbGVyeSBjb3JlIHBsdWdpbiBpbnN0YW5jZVxyXG4gICAgICAgIHRoaXMuY29yZSA9IGluc3RhbmNlO1xyXG4gICAgICAgIHRoaXMuJExHID0gJExHO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgVGh1bWJuYWlsLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIGV4dGVuZCBtb2R1bGUgZGVmYXVsdCBzZXR0aW5ncyB3aXRoIGxpZ2h0R2FsbGVyeSBjb3JlIHNldHRpbmdzXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCB0aHVtYm5haWxzU2V0dGluZ3MpLCB0aGlzLmNvcmUuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudGh1bWJPdXRlcldpZHRoID0gMDtcclxuICAgICAgICB0aGlzLnRodW1iVG90YWxXaWR0aCA9XHJcbiAgICAgICAgICAgIHRoaXMuY29yZS5nYWxsZXJ5SXRlbXMubGVuZ3RoICpcclxuICAgICAgICAgICAgICAgICh0aGlzLnNldHRpbmdzLnRodW1iV2lkdGggKyB0aGlzLnNldHRpbmdzLnRodW1iTWFyZ2luKTtcclxuICAgICAgICAvLyBUaHVtYm5haWwgYW5pbWF0aW9uIHZhbHVlXHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVYID0gMDtcclxuICAgICAgICB0aGlzLnNldEFuaW1hdGVUaHVtYlN0eWxlcygpO1xyXG4gICAgICAgIGlmICghdGhpcy5jb3JlLnNldHRpbmdzLmFsbG93TWVkaWFPdmVybGFwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MudG9nZ2xlVGh1bWIgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MudGh1bWJuYWlsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnVpbGQoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYW5pbWF0ZVRodW1iKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5lbmFibGVUaHVtYkRyYWcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVRodW1iRHJhZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZW5hYmxlVGh1bWJTd2lwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgI
5627HRoaXMuZW5hYmxlVGh1bWJTd2lwZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy50aHVtYkNsaWNrYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aHVtYkNsaWNrYWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy50b2dnbGVUaHVtYkJhcigpO1xyXG4gICAgICAgICAgICB0aGlzLnRodW1iS2V5UHJlc3MoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgVGh1bWJuYWlsLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuc2V0VGh1bWJNYXJrdXAoKTtcclxuICAgICAgICB0aGlzLm1hbmFnZUFjdGl2ZUNsYXNzT25TbGlkZUNoYW5nZSgpO1xyXG4gICAgICAgIHRoaXMuJGxnVGh1bWIuZmlyc3QoKS5vbignY2xpY2subGcgdG91Y2hlbmQubGcnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICB2YXIgJHRhcmdldCA9IF90aGlzLiRMRyhlLnRhcmdldCk7XHJcbiAgICAgICAgICAgIGlmICghJHRhcmdldC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbGctaXRlbS1pZCcpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJbiBJRTkgYW5kIGJlbGxvdyB0b3VjaCBkb2VzIG5vdCBzdXBwb3J0XHJcbiAgICAgICAgICAgICAgICAvLyBHbyB0byBzbGlkZSBpZiBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgY3NzIHRyYW5zaXRpb25zXHJcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMudGh1bWJDbGlja2FibGUgJiYgIV90aGlzLmNvcmUubGdCdXN5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gcGFyc2VJbnQoJHRhcmdldC5hdHRyKCdkYXRhLWxnLWl0ZW0taWQnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY29yZS5zbGlkZShpbmRleCwgZmFsc2UsIHRydWUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgNTApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY29yZS5MR2VsLm9uKGxHRXZlbnRzLmJlZm9yZVNsaWRlICsgXCIudGh1bWJcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGV2ZW50LmRldGFpbC5pbmRleDtcclxuICAgICAgICAgICAgX3RoaXMuYW5pbWF0ZVRodW1iKGluZGV4KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNvcmUuTEdlbC5vbihsR0V2ZW50cy5iZWZvcmVPcGVuICsgXCIudGh1bWJcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBfdGhpcy50aHVtYk91dGVyV2lkdGggPSBfdGhpcy5jb3JlLm91dGVyLmdldCgpLm9mZnNldFdpZHRoO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY29yZS5MR2VsLm9uKGxHRXZlbnRzLnVwZGF0ZVNsaWRlcyArIFwiLnRodW1iXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgX3RoaXMucmVidWlsZFRodW1ibmFpbHMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNvcmUuTEdlbC5vbihsR0V2ZW50cy5jb250YWluZXJSZXNpemUgKyBcIi50aHVtYlwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghX3RoaXMuY29yZS5sZ09wZW5lZClcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy50aHVtYk91dGVyV2lkdGggPSBfdGhpcy5jb3JlLm91dGVyLmdldCgpLm9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuYW5pbWF0ZVRodW1iKF90aGlzLmNvcmUuaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMudGh1bWJPdXRlcldpZHRoID0gX3RoaXMuY29yZS5vdXRlci5nZXQoKS5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgfSwgNTApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIFRodW1ibmFpbC5wcm90b3R5cGUuc2V0VGh1bWJNYXJrdXAgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHRodW1iT3V0ZXJDbGFzc05hbWVzID0gJ2xnLXRodW1iLW91dGVyICc7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYWxpZ25UaHVtYm5haWxzKSB7XHJcbiAgICAgICAgICAgIHRodW1iT3V0ZXJDbGFzc05hbWVzICs9IFwibGctdGh1bWItYWxpZ24tXCIgKyB0aGlzLnNldHRpbmdzLmFsaWduVGh1bWJuYWlscztcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGh0bWwgPSBcIjxkaXYgY2xhc3M9XFxcIlwiICsgdGh1bWJPdXRlckNsYXNzTmFtZXMgKyBcIlxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJsZy10aHVtYiBsZy1ncm91cFxcXCI+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlwiO1xyXG4gICAgICAgIHRoaXMuY29yZS5vdXRlci5hZGRDbGFzcygnbGctaGFzLXRodW1iJyk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYXBwZW5kVGh1bWJuYWlsc1RvID09PSAnLmxnLWNvbXBvbmVudHMnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29yZS4kbGdDb21wb25lbnRzLmFwcGVuZChodG1sKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29yZS5vdXRlci5hcHBlbmQoaHRtbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuJHRodW1iT3V0ZXIgPSB0aGlzLmNvcmUub3V0ZXIuZmluZCgnLmxnLXRodW1iLW91dGVyJykuZmlyc3QoKTtcclxuICAgICAgICB0aGlzLiRsZ1RodW1iID0gdGhpcy5jb3JlLm91dGVyLmZpbmQoJy5sZy10aHVtYicpLmZpcnN0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYW5pbWF0ZVRodW1iKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29yZS5vdXRlclxyXG4gICAgICAgICAgICAgICAgLmZpbmQoJy5sZy10aHVtYicpXHJcbiAgICAgICAgICAgICAgICAuY3NzKCd0cmFuc2l0aW9uLWR1cmF0aW9uJywgdGhpcy5jb3JlLnNldHRpbmdzLnNwZWVkICsgJ21zJylcclxuICAgICAgICAgICAgICAgIC5jc3MoJ3dpZHRoJywgdGhpcy50aHVtYlRvdGFsV2lkdGggKyAncHgnKVxyXG4gICAgICAgICAgICAgICAgLmNzcygncG9zaXRpb24nLCAncmVsYXRpdmUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUaHVtYkl0ZW1IdG1sKHRoaXMuY29yZS5nYWxsZXJ5SXRlbXMpO1xyXG4gICAgfTtcclxuICAgIFRodW1ibmFpbC5wcm90b3R5cGUuZW5hYmxlVGh1bWJEcmFnI
5627D0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHRodW1iRHJhZ1V0aWxzID0ge1xyXG4gICAgICAgICAgICBjb3Jkczoge1xyXG4gICAgICAgICAgICAgICAgc3RhcnRYOiAwLFxyXG4gICAgICAgICAgICAgICAgZW5kWDogMCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaXNNb3ZlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIG5ld1RyYW5zbGF0ZVg6IDAsXHJcbiAgICAgICAgICAgIHN0YXJ0VGltZTogbmV3IERhdGUoKSxcclxuICAgICAgICAgICAgZW5kVGltZTogbmV3IERhdGUoKSxcclxuICAgICAgICAgICAgdG91Y2hNb3ZlVGltZTogMCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy4kdGh1bWJPdXRlci5hZGRDbGFzcygnbGctZ3JhYicpO1xyXG4gICAgICAgIHRoaXMuY29yZS5vdXRlclxyXG4gICAgICAgICAgICAuZmluZCgnLmxnLXRodW1iJylcclxuICAgICAgICAgICAgLmZpcnN0KClcclxuICAgICAgICAgICAgLm9uKCdtb3VzZWRvd24ubGcudGh1bWInLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpZiAoX3RoaXMudGh1bWJUb3RhbFdpZHRoID4gX3RoaXMudGh1bWJPdXRlcldpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBleGVjdXRlIG9ubHkgb24gLmxnLW9iamVjdFxyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdGh1bWJEcmFnVXRpbHMuY29yZH
5627Muc3RhcnRYID0gZS5wYWdlWDtcclxuICAgICAgICAgICAgICAgIHRodW1iRHJhZ1V0aWxzLnN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy50aHVtYkNsaWNrYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaXNEcmFnZ2luZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAvLyAqKiBGaXggZm9yIHdlYmtpdCBjdXJzb3IgaXNzdWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTI2NzIzXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5jb3JlLm91dGVyLmdldCgpLnNjcm9sbExlZnQgKz0gMTtcclxuICAgICAgICAgICAgICAgIF90aGlzLmNvcmUub3V0ZXIuZ2V0KCkuc2Nyb2xsTGVmdCAtPSAxO1xyXG4gICAgICAgICAgICAgICAgLy8gKlxyXG4gICAgICAgICAgICAgICAgX3RoaXMuJHRodW1iT3V0ZXJcclxuICAgICAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2xnLWdyYWInKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnbGctZ3JhYmJpbmcnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuJExHKHdpbmRvdykub24oXCJtb3VzZW1vdmUubGcudGh1bWIuZ2xvYmFsXCIgKyB0aGlzLmNvcmUubGdJZCwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKCFfdGhpcy5jb3JlLmxnT3BlbmVkKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoaXNEcmFnZ2luZykge1xyXG4gICAgICAgICAgICAgICAgdGh1bWJEcmFnVXRpbHMuY29yZH
5627MuZW5kWCA9IGUucGFnZVg7XHJcbiAgICAgICAgICAgICAgICB0aHVtYkRyYWdVdGlscyA9IF90aGlzLm9uVGh1bWJUb3VjaE1vdmUodGh1bWJEcmFnVXRpbHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy4kTEcod2luZG93KS5vbihcIm1vdXNldXAubGcudGh1bWIuZ2xvYmFsXCIgKyB0aGlzLmNvcmUubGdJZCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIV90aGlzLmNvcmUubGdPcGVuZWQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0aHVtYkRyYWdVdGlscy5pc01vdmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aHVtYkRyYWdVdGlscyA9IF90aGlzLm9uVGh1bWJUb3VjaEVuZCh0aHVtYkRyYWdVdGlscyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy50aHVtYkNsaWNrYWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzRHJhZ2dpbmcpIHtcclxuICAgICAgICAgICAgICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIF90aGlzLiR0aHVtYk91dGVyLnJlbW92ZUNsYXNzKCdsZy1ncmFiYmluZycpLmFkZENsYXNzKCdsZy1ncmFiJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBUaHVtYm5haWwucHJvdG90eXBlLmVuYWJsZVRodW1iU3dpcGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2Y
5627XIgdGh1bWJEcmFnVXRpbHMgPSB7XHJcbiAgICAgICAgICAgIGNvcmRzOiB7XHJcbiAgICAgICAgICAgICAgICBzdGFydFg6IDAsXHJcbiAgICAgICAgICAgICAgICBlbmRYOiAwLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBpc01vdmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgbmV3VHJhbnNsYXRlWDogMCxcclxuICAgICAgICAgICAgc3RhcnRUaW1lOiBuZXcgRGF0ZSgpLFxyXG4gICAgICAgICAgICBlbmRUaW1lOiBuZXcgRGF0ZSgpLFxyXG4gICAgICAgICAgICB0b3VjaE1vdmVUaW1lOiAwLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy4kbGdUaHVtYi5vbigndG91Y2hzdGFydC5sZycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy50aHVtYlRvdGFsV2lkdGggPiBfdGhpcy50aHVtYk91dGVyV2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHRodW1iRHJhZ1V0aWxzLmNvcmRzLnN0YXJ0WCA9IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWDtcclxuICAgICAgICAgICAgICAgIF90aGlzLnRodW1iQ2xpY2thYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aHVtYkRyYWdVdGlscy5zdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy4kbGdUaHVtYi5vbigndG91Y2htb3ZlLmxnJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKF90aGlzLnRodW1iVG90YWxXaWR0aCA+IF90aGlzLnRodW1iT3V0ZXJXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdGh1bWJEcmFnVXRpbHMuY29yZH
5627MuZW5kWCA9IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWDtcclxuICAgICAgICAgICAgICAgIHRodW1iRHJhZ1V0aWxzID0gX3RoaXMub25UaHVtYlRvdWNoTW92ZSh0aHVtYkRyYWdVdGlscyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLiRsZ1RodW1iLm9uKCd0b3VjaGVuZC5sZycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHRodW1iRHJhZ1V0aWxzLmlzTW92ZWQpIHtcclxuICAgICAgICAgICAgICAgIHRodW1iRHJhZ1V0aWxzID0gX3RoaXMub25UaHVtYlRvdWNoRW5kKHRodW1iRHJhZ1V0aWxzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLnRodW1iQ2xpY2thYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIC8vIFJlYnVpbGQgdGh1bWJuYWlsc1xyXG4gICAgVGh1bWJuYWlsLnByb3RvdHlwZS5yZWJ1aWxkVGh1bWJuYWlscyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIC8vIFJlbW92ZSB0cmFuc2l0aW9uc1xyXG4gICAgICAgIHRoaXMuJHRodW1iT3V0ZXIuYWRkQ2xhc3MoJ2xnLXJlYnVpbGRpbmctdGh1bWJuYWlscycpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBfdGhpcy50aHVtYlRvdGFsV2lkdGggPVxyXG4gICAgICAgICAgICAgICAgX3RoaXMuY29yZS5nYWxsZXJ5SXRlbXMubGVuZ3RoICpcclxuICAgICAgICAgICAgICAgICAgICAoX3RoaXMuc2V0dGluZ3MudGh1bWJXaWR0aCArIF90aGlzLnNldHRpbmdzLnRodW1iTWFyZ2luKTtcclxuICAgICAgICAgICAgX3RoaXMuJGxnVGh1bWIuY3NzKCd3aWR0aCcsIF90aGlzLnRodW1iVG90YWxXaWR0aCArICdweCcpO1xyXG4gICAgICAgICAgICBfdGhpcy4kbGdUaHVtYi5lbXB0eSgpO1xyXG4gICAgICAgICAgICBfdGhpcy5zZXRUaHVtYkl0ZW1IdG1sKF90aGlzLmNvcmUuZ2FsbGVyeUl0ZW1zKTtcclxuICAgICAgICAgICAgX3RoaXMuYW5pbWF0ZVRodW1iKF90aGlzLmNvcmUuaW5kZXgpO1xyXG4gICAgICAgIH0sIDUwKTtcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgX3RoaXMuJHRodW1iT3V0ZXIucmVtb3ZlQ2xhc3MoJ2xnLXJlYnVpbGRpbmctdGh1bWJuYWlscycpO1xyXG4gICAgICAgIH0sIDIwMCk7XHJcbiAgICB9O1xyXG4gICAgLy8gQHRzLWNoZWNrXHJcbiAgICBUaHVtYm5haWwucHJvdG90eXBlLnNldFRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuJGxnVGh1bWIuY3NzKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlM2QoLScgKyB2YWx1ZSArICdweCwgMHB4LCAwcHgpJyk7XHJcbiAgICB9O1xyXG4gICAgVGh1bWJuYWlsLnByb3RvdHlwZS5nZXRQb3NzaWJsZVRyYW5zZm9ybVggPSBmdW5jdGlvbiAobGVmdCkge1xyXG4gICAgICAgIGlmIChsZWZ0ID4gdGhpcy50aHVtYlRvdGFsV2lkdGggLSB0aGlzLnRodW1iT3V0ZXJXaWR0aCkge1xyXG4gICAgICAgICAgICBsZWZ0ID0gdGhpcy50aHVtYlRvdGFsV2lkdGggLSB0aGlzLnRodW1iT3V0ZXJXaWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxlZnQgPCAwKSB7XHJcbiAgICAgICAgICAgIGxlZnQgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGVmdDtcclxuICAgIH07XHJcbiAgICBUaHVtYm5haWwucHJvdG90eXBlLmFuaW1hdGVUaHVtYiA9IGZ1bmN0aW9uIChpbmRleCkge1xyXG4gICAgICAgIHRoaXMuJGxnVGh1bWIuY3NzKCd0cmFuc2l0aW9uLWR1cmF0aW9uJywgdGhpcy5jb3JlLnNldHRpbmdzLnNwZWVkICsgJ21zJyk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYW5pbWF0ZVRodW1iKSB7XHJcbiAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IDA7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5zZXR0aW5ncy5jdXJyZW50UGFnZXJQb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnbGVmdCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnbWlkZGxlJzpcclxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGh1bWJPdXRlcldpZHRoIC8gMiAtIHRoaXMuc2V0dGluZ3MudGh1bWJXaWR0aCAvIDI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdyaWdodCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSB0aGlzLnRodW1iT3V0ZXJXaWR0aCAtIHRoaXMuc2V0dGluZ3MudGh1bWJXaWR0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVggPVxyXG4gICAgICAgICAgICAgICAgKHRoaXMuc2V0dGluZ3MudGh1bWJXaWR0aCArIHRoaXMuc2V0dGluZ3MudGh1bWJNYXJnaW4pICogaW5kZXggLVxyXG4gICAgICAgICAgICAgICAgICAgIDEgLVxyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50cmFuc2xhdGVYID4gdGhpcy50aHVtYlRvdGFsV2lkdGggLSB0aGlzLnRodW1iT3V0ZXJXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVYID0gdGhpcy50aHVtYlRvdGFsV2lkdGggLSB0aGlzLnRodW1iT3V0ZXJXaWR0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy50cmFuc2xhdGVYIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVYID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNldFRyYW5zbGF0ZSh0aGlzLnRyYW5zbGF0ZVgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBUaHVtYm5haWwucHJvdG90eXBlLm9uVGh1bWJUb3VjaE1vdmUgPSBmdW5jdGlvbiAodGh1bWJEcmFnVXRpbHMpIHtcclxuICAgICAgICB0aHVtYkRyYWdVdGlscy5uZXdUcmFuc2xhdGVYID0gdGhpcy50cmFuc2xhdGVYO1xyXG4gICAgICAgI
5627HRodW1iRHJhZ1V0aWxzLmlzTW92ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRodW1iRHJhZ1V0aWxzLnRvdWNoTW92ZVRpbWUgPSBuZXcgRGF0ZSgpLnZhbHVlT2YoKTtcclxuICAgICAgICB0aHVtYkRyYWdVdGlscy5uZXdUcmFuc2xhdGVYIC09XHJcbiAgICAgICAgICAgIHRodW1iRHJhZ1V0aWxzLmNvcmRzLmVuZFggLSB0aHVtYkRyYWdVdGlscy5jb3Jkcy5zdGFydFg7XHJcbiAgICAgICAgdGh1bWJEcmFnVXRpbHMubmV3VHJhbnNsYXRlWCA9IHRoaXMuZ2V0UG9zc2libGVUcmFuc2Zvcm1YKHRodW1iRHJhZ1V0aWxzLm5ld1RyYW5zbGF0ZVgpO1xyXG4gICAgICAgIC8vIG1vdmUgY3VycmVudCBzbGlkZVxyXG4gICAgICAgIHRoaXMuc2V0VHJhbnNsYXRlKHRodW1iRHJhZ1V0aWxzLm5ld1RyYW5zbGF0ZVgpO1xyXG4gICAgICAgIHRoaXMuJHRodW1iT3V0ZXIuYWRkQ2xhc3MoJ2xnLWRyYWdnaW5nJyk7XHJcbiAgICAgICAgcmV0dXJuIHRodW1iRHJhZ1V0aWxzO1xyXG4gICAgfTtcclxuICAgIFRodW1ibmFpbC5wcm90b3R5cGUub25UaHVtYlRvdWNoRW5kID0gZnVuY3Rpb24gKHRodW1iRHJhZ1V0aWxzKSB7XHJcbiAgICAgICAgdGh1bWJEcmFnVXRpbHMuaXNNb3ZlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRodW1iRHJhZ1V0aWxzLmVuZFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuJHRodW1iT3V0ZXIucmVtb3ZlQ2xhc3MoJ2xnLWRyYWdnaW5nJyk7XHJcbiAgICAgICAgdmFyIHRvdWNoRHVyYXRpb24gPSB0aHVtYkRyYWdVdGlscy5lbmRUaW1lLnZhbHVlT2YoKSAtXHJcbiAgICAgICAgICAgIHRodW1iRHJhZ1V0aWxzLnN0YXJ0VGltZS52YWx1ZU9mKCk7XHJcbiAgICAgICAgdmFyIGRpc3RhbmNlWG5ldyA9IHRodW1iRHJhZ1V0aWxzLmNvcmRzLmVuZFggLSB0aHVtYkRyYWdVdGlscy5jb3Jkcy5zdGFydFg7XHJcbiAgICAgICAgdmFyIHNwZWVkWCA9IE1hdGguYWJzKGRpc3RhbmNlWG5ldykgLyB0b3VjaER1cmF0aW9uO1xyXG4gICAgICAgIC8vIFNvbWUgbWFnaWNhbCBudW1iZXJzXHJcbiAgICAgICAgLy8gQ2FuIGJlIGltcHJvdmVkXHJcbiAgICAgICAgaWYgKHNwZWVkWCA+IDAuMTUgJiZcclxuICAgICAgICAgICAgdGh1bWJEcmFnVXRpbHMuZW5kVGltZS52YWx1ZU9mKCkgLSB0aHVtYkRyYWdVdGlscy50b3VjaE1vdmVUaW1lIDwgMzApIHtcclxuICAgICAgICAgICAgc3BlZWRYICs9IDE7XHJcbiAgICAgICAgICAgIGlmIChzcGVlZFggPiAyKSB7XHJcbiAgICAgICAgICAgICAgICBzcGVlZFggKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzcGVlZFggPVxyXG4gICAgICAgICAgICAgICAgc3BlZWRYICtcclxuICAgICAgICAgICAgICAgICAgICBzcGVlZFggKiAoTWF0aC5hYnMoZGlzdGFuY2VYbmV3KSAvIHRoaXMudGh1bWJPdXRlcldpZHRoKTtcclxuICAgICAgICAgICAgdGhpcy4kbGdUaHVtYi5jc3MoJ3RyYW5zaXRpb24tZHVyYXRpb24nLCBNYXRoLm1pbihzcGVlZFggLSAxLCAyKSArICdzZXR0aW5ncycpO1xyXG4gICAgICAgICAgICBkaXN0YW5jZVhuZXcgPSBkaXN0YW5jZVhuZXcgKiBzcGVlZFg7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlWCA9IHRoaXMuZ2V0UG9zc2libGVUcmFuc2Zvcm1YKHRoaXMudHJhbnNsYXRlWCAtIGRpc3RhbmNlWG5ldyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VHJhbnNsYXRlKHRoaXMudHJhbnNsYXRlWCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVggPSB0aHVtYkRyYWdVdGlscy5uZXdUcmFuc2xhdGVYO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTWF0aC5hYnModGh1bWJEcmFnVXRpbHMuY29yZH
5627MuZW5kWCAtIHRodW1iRHJhZ1V0aWxzLmNvcmRzLnN0YXJ0WCkgPFxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzLnRodW1ibmFpbFN3aXBlVGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGh1bWJDbGlja2FibGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGh1bWJEcmFnVXRpbHM7XHJcbiAgICB9O1xyXG4gICAgVGh1bWJuYWlsLnByb3RvdHlwZS5nZXRUaHVtYkh0bWwgPSBmdW5jdGlvbiAodGh1bWIsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIHNsaWRlVmlkZW9JbmZvID0gdGhpcy5jb3JlLmdhbGxlcnlJdGVtc1tpbmRleF0uX19zbGlkZVZpZGVvSW5mbyB8fCB7fTtcclxuICAgICAgICB2YXIgdGh1bWJJbWc7XHJcbiAgICAgICAgaWYgKHNsaWRlVmlkZW9JbmZvLnlvdXR1YmUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MubG9hZFlvdVR1YmVUaHVtYm5haWwpIHtcclxuICAgICAgICAgICAgICAgIHRodW1iSW1nID1cclxuICAgICAgICAgICAgICAgICAgICAnLy9pbWcueW91dHViZS5jb20vdmkvJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlVmlkZW9JbmZvLnlvdXR1YmVbMV0gK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnLycgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzLnlvdVR1YmVUaHVtYlNpemUgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnLmpwZyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHVtYkltZyA9IHRodW1iO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aHVtYkltZyA9IHRodW1iO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCI8ZGl2IGRhdGEtbGctaXRlbS1pZD1cXFwiXCIgKyBpbmRleCArIFwiXFxcIiBjbGFzcz1cXFwibGctdGh1bWItaXRlbSBcIiArIChpbmRleCA9PT0gdGhpcy5jb3JlLmluZGV4ID8gJyBhY3RpdmUnIDogJycpICsgXCJcXFwiIFxcbiAgICAgICAgc3R5bGU9XFxcIndpZHRoOlwiICsgdGhpcy5zZXR0aW5ncy50aHVtYldpZHRoICsgXCJweDsgaGVpZ2h0OiBcIiArIHRoaXMuc2V0dGluZ3MudGh1bWJIZWlnaHQgKyBcIjtcXG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IFwiICsgdGhpcy5zZXR0aW5ncy50aHVtYk1hcmdpbiArIFwicHg7XFxcIj5cXG4gICAgICAgICAgICA8aW1nIGRhdGEtbGctaXRlbS1pZD1cXFwiXCIgKyBpbmRleCArIFwiXFxcIiBzcmM9XFxcIlwiICsgdGh1bWJJbWcgKyBcIlxcXCIgLz5cXG4gICAgICAgIDwvZGl2PlwiO1xyXG4gICAgfTtcclxuICAgIFRodW1ibmFpbC5wcm90b3R5cGUuZ2V0VGh1bWJJdGVtSHRtbCA9IGZ1bmN0aW9uIChpdGVtcykge1xyXG4gICAgICAgIHZhciB0aHVtYkxpc3QgPSAnJztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRodW1iTGlzdCArPSB0aGlzLmdldFRodW1iSHRtbChpdGVtc1tpXS50aHVtYiwgaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aHVtYkxpc3Q7XHJcbiAgICB9O1xyXG4gICAgVGh1bWJuYWlsLnByb3RvdHlwZS5zZXRUaHVtYkl0ZW1IdG1sID0gZnVuY3Rpb24gKGl0ZW1zKSB7XHJcbiAgICAgICAgdmFyIHRodW1iTGlzdCA9IHRoaXMuZ2V0VGh1bWJJdGVtSHRtbChpdGVtcyk7XHJcbiAgICAgICAgdGhpcy4kbGdUaHVtYi5odG1sKHRodW1iTGlzdCk7XHJcbiAgICB9O1xyXG4gICAgVGh1bWJuYWlsLnByb3RvdHlwZS5zZXRBbmltYXRlVGh1bWJTdHlsZXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYW5pbWF0ZVRodW1iKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29yZS5vdXRlci5hZGRDbGFzcygnbGctYW5pbWF0ZS10aHVtYicpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBNYW5hZ2UgdGh1bWJuYWlsIGFjdGl2ZSBjYWxzc1xyXG4gICAgVGh1bWJuYWlsLnByb3RvdHlwZS5tYW5hZ2VBY3RpdmVDbGFzc09uU2xpZGVDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICAvLyBtYW5hZ2UgYWN0aXZlIGNsYXNzIGZvciB0aHVtYm5haWxcclxuICAgICAgICB0aGlzLmNvcmUuTEdlbC5vbihsR0V2ZW50cy5iZWZvcmVTbGlkZSArIFwiLnRodW1iXCIsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICB2Y
5627XIgJHRodW1iID0gX3RoaXMuY29yZS5vdXRlci5maW5kKCcubGctdGh1bWItaXRlbScpO1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBldmVudC5kZXRhaWwuaW5kZXg7XHJcbiAgICAgICAgICAgICR0aHVtYi5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICR0aHVtYi5lcShpbmRleCkuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIC8vIFRvZ2dsZSB0aHVtYm5haWwgYmFyXHJcbiAgICBUaHVtYm5haWwucHJvdG90eXBlLnRvZ2dsZVRodW1iQmFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MudG9nZ2xlVGh1bWIpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3JlLm91dGVyLmFkZENsYXNzKCdsZy1jYW4tdG9nZ2xlJyk7XHJcbiAgICAgICAgICAgIHRoaXMuY29yZS4kdG9vbGJhci5hcHBlbmQoJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCInICtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MudGh1bWJuYWlsUGx1Z2luU3RyaW5nc1sndG9nZ2xlVGh1bWJuYWlscyddICtcclxuICAgICAgICAgICAgICAgICdcIiBjbGFzcz1cImxnLXRvZ2dsZS10aHVtYiBsZy1pY29uXCI+PC9idXR0b24+Jyk7XHJcbiAgICAgICAgICAgIHRoaXMuY29yZS5vdXRlclxyXG4gICAgICAgICAgICAgICAgLmZpbmQoJy5sZy10b2dnbGUtdGh1bWInKVxyXG4gICAgICAgICAgICAgICAgLmZpcnN0KClcclxuICAgICAgICAgICAgICAgIC5vbignY2xpY2subGcnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5jb3JlLm91dGVyLnRvZ2dsZUNsYXNzKCdsZy1jb21wb25lbnRzLW9wZW4nKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFRodW1ibmFpbC5wcm90b3R5cGUudGh1bWJLZXlQcmVzcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2Y
5627XIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuJExHKHdpbmRvdykub24oXCJrZXlkb3duLmxnLnRodW1iLmdsb2JhbFwiICsgdGhpcy5jb3JlLmxnSWQsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmICghX3RoaXMuY29yZS5sZ09wZW5lZCB8fCAhX3RoaXMuc2V0dGluZ3MudG9nZ2xlVGh1bWIpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT09IDM4KSB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5jb3JlLm91dGVyLmFkZENsYXNzKCdsZy1jb21wb25lbnRzLW9wZW4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlLmtleUNvZGUgPT09IDQwKSB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5jb3JlLm91dGVyLnJlbW92ZUNsYXNzKCdsZy1jb21wb25lbnRzLW9wZW4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIFRodW1ibmFpbC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy50aHVtYm5haWwpIHtcclxuICAgICAgICAgICAgdGhpcy4kTEcod2luZG93KS5vZmYoXCIubGcudGh1bWIuZ2xvYmFsXCIgKyB0aGlzLmNvcmUubGdJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29yZS5MR2VsLm9mZignLmxnLnRodW1iJyk7XHJcbiAgICAgICAgICAgIHRoaXMuY29yZS5MR2VsLm9mZignLnRodW1iJyk7XHJcbiAgICAgICAgICAgIHRoaXMuJHRodW1iT3V0ZXIucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29yZS5vdXRlci5yZW1vdmVDbGFzcygnbGctaGFzLXRodW1iJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBUaHVtYm5haWw7XHJcbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IFRodW1ibmFpbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxnLXRodW1ibmFpbC5lczUuanMubWFwXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYn
5627BhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiaW1wb3J0ICcuLi9zY3NzL2FwcC5zY3NzJztcbmltcG9ydCAnLi9pbmNsdWRlcy5qcyc7XG5pbXBvcnQgJy4vb3dsLWNhcm91c2UubWluLmpzJztcbmltcG9ydCAnLi9sYXp5bG9hZGluZy9qcXVlcnkubGF6eS5taW4uanMnO1xuaW1wb3J0ICcuL2xhenlsb2FkaW5nL2pxdWVyeS5sYXp5LnBsdWdpbnMubWluLmpzJztcbmltcG9ydCAnLi9ka2NvZGUuanMnO1xuaW1wb3J0ICcuL293bHMuanMnO1xuaW1wb3J0ICcuL2xpc3RpbmcuanMnO1xuLy8gaW1wb3J0ICcuL2dhbS5qcyc7XG5pbXBvcnQgJy4vYXJ0aWNsZS5qcyc7XG4iXSwibmFtZXMiOlsiJCIsImRvY3VtZW50IiwicmVhZHkiLCJsb2FkX2NvbnRhaW5lciIsImFydGljbGVzX2xvYWRlciIsImFwaV91cmwiLCJkYXRhIiwic2lkZWJhcl9oYWxmX3BhZ2UiLCJzaWRlYmFyX3RhYiIsImFydGljbGVfaWQiLCJpc19lZGl0b3IiLCJhcnRpY2xlX3RvX2xvYWQiLCJwYXJzZUludCIsImN1cnJlbnRfYWN0aXZlIiwibG9hZGluZ191cmwiLCJsYXN0X29mZnNldCIsImFsbF9hcnRpY2xlcyIsImhlaWdodFdpbmRvdyIsIndpbmRvdyIsImhlaWdodCIsImhlaWdodEZvb3RlciIsImNsaWNrIiwiZSIsInByZXZlbnREZWZhdWx0Iiwib3BlbiIsImF0dHIiLCJ3aWR0aCIsIm9mZiIsIm9uIiwiZmllbGRfbGlzdCIsInVybCIsInRleHQiLCJqUXVlcnkiLCJwYXJhbSIsImZvY3VzIiwiZHVtbXkiLCJjcmVhdGVFbGVtZW50IiwidGV4dENvbnRlbnQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJyYW5nZSIsImNyZWF0ZVJhbmdlIiwic2V0U3RhcnRCZWZvcmUiLCJzZXRFbmRBZnRlciIsInNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsInJlbW92ZUFsbFJhbmdlcyIsImFkZFJhbmdlIiwiZXhlY0NvbW1hbmQiLCJyZW1vdmVDaGlsZCIsImZpbmQiLCJhZGRDbGFzcyIsInNldFRpbWVvdXQiLCJyZW1vdmVDbGFzcyIsImxlbmd0aCIsImhpc3RvcnkiLCJzY3JvbGxSZXN0b3JhdGlvbiIsInB1c2giLCJ0b3AiLCJsb2NhdGlvbiIsImhyZWYiLCJ0aXRsZSIsInNjcm9sbCIsImhlaWdodERvYyIsImhlaWdodFNjcm9sbCIsInNjcm9sbFRvcCIsImhlaWdodFNjcm9sbERvd24iLCJoZWlnaHREb2NXaXRob3V0Rm9vdGVyIiwidGVzdCIsIl9maW5kIiwiY2hhbmdlVXJsIiwibG9hZEFydGljbGVzIiwiYXJyYXkiLCJzZWFyY2giLCJ2YWx1ZSIsImkiLCJuZXdTdGF0ZSIsInJlcGxhY2VTdGF0ZSIsInBvc3QiLCJmb3JjZV9zdG9wIiwibmV3X3NlY3Rpb24iLCJjbG9uZSIsInNob3ciLCJhcHBlbmQiLCJodG1sIiwiaHRtbF9oYWxmX3BhZ2UiLCJwb3NpdGlvbiIsImVhY2giLCJwcmVwYXJlR2FtQWQiLCJmYWlsIiwibGlnaHRHYWxsZXJ5IiwibGdUaHVtYm5haWwiLCJsZ0Z1bGxzY3JlZW4iLCJzY3JlZW5XaWR0aCIsImlubmVyV2lkdGgiLCJoZWFkZXJTdWJtZW51IiwidHJhbnNsYXRlWUhpZGUiLCJ0cmFuc2xhdGVZU2hvdyIsInRyYW5zbGF0ZVhIaWRlIiwidHJhbnNsYXRlWFNob3ciLCJvcGVuTW9iaWxlTWVudUJ1dHRvbiIsIm1vYmlsZU1lbnUiLCJzZWFyY2hJY29uIiwic2VhcmNoV3JhcHBlciIsImlzX2FkbWluX2JhciIsImhhc0NsYXNzIiwiaGFuZGxlU2hvd1NlYXJjaCIsImNzcyIsImhhbmRsZUhpZGVTZWFyY2giLCJ2YWwiLCJoYW5kbGVUb2dnbGVTZWFyY2giLCJhY3Rpb24iLCJ0b2dnbGVDbGFzcyIsImhhbmRsZUZpbmRTdWJtZW51RWxlbWVudCIsInN1Ym1lbnVJRCIsImF0dHJJRCIsImJvZHlTY3JvbGxUb3AiLCJzdWJtZW51VG9wIiwibW91c2VsZWF2ZSIsIm1vdXNlZW50ZXIiLCJjaGVja0FjdGl2ZUNsYXNzIiwicGFyZW50SUQiLCJjbG9zZXN0IiwiZ2V0RWxlbWVudEJ5SWQiLCJwbHVnaW5zIiwic3BlZWQiLCJkb3dubG9hZCIsImV4VGh1bWJJbWFnZSIsImluY2x1ZGVIVE1MIiwieiIsImVsbW50IiwiZmlsZSIsInhodHRwIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJnZXRBdHRyaWJ1dGUiLCJYTUxIdHRwUmVxdWVzdCIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJpbm5lckhUTUwiLCJyZXNwb25zZVRleHQiLCJyZW1vdmVBdHRyaWJ1dGUiLCJzZW5kIiwidCIsInIiLCJhIiwidSIsImwiLCJmIiwiTCIsImRldmljZVBpeGVsUmF0aW8iLCJjIiwiZGVsYXkiLCJzIiwiY29tYmluZWQiLCJ2IiwidGhyb3R0bGUiLCJ0eXBlIiwidyIsIkIiLCJhbGwiLCJhcHBseSIsImciLCJuIiwiZmlsdGVyIiwibG9hZGVkTmFtZSIsImFwcGVuZFNjcm9sbCIsImRlZmF1bHRJbWFnZSIsIm8iLCJwbGFjZWhvbGRlciIsImltYWdlQmFzZSIsInNyY3NldEF0dHJpYnV0ZSIsImxvYWRlckF0dHJpYnV0ZSIsIl9mIiwibSIsImhhbmRsZWROYW1lIiwiYXR0cmlidXRlIiwibmFtZSIsImQiLCJBIiwiaCIsImltYWdlQmFzZUF0dHJpYnV0ZSIsIk4iLCJiIiwiRSIsIk8iLCJhdXRvRGVzdHJveSIsImRlc3Ryb3kiLCJwIiwidmlzaWJsZU9ubHkiLCJpcyIsIkYiLCJ5Iiwibm9vcCIsInNpemVzQXR0cmlidXRlIiwicmV0aW5hQXR0cmlidXRlIiwicmVtb3ZlQXR0ciIsIlQiLCJJIiwib25lIiwiRCIsInRyaWdnZXIiLCJJbWFnZSIsImhpZGUiLCJDIiwiZWZmZWN0IiwiZWZmZWN0VGltZSIsInJlbW92ZSIsIm
5627NvbXBsZXRlIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwic2Nyb2xsRGlyZWN0aW9uIiwidGhyZXNob2xkIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwidGFnTmFtZSIsInRvTG93ZXJDYXNlIiwic3BsaXQiLCJ0cmltIiwiRGF0ZSIsImNhbGwiLCJjbGVhclRpbWVvdXQiLCJlbmFibGVUaHJvdHRsZSIsInNsaWNlIiwiYXJndW1lbnRzIiwiYmluZCIsImV4dGVuZCIsImNvbmZpZyIsImFkZEl0ZW1zIiwiZ2V0SXRlbXMiLCJ1cGRhdGUiLCJmb3JjZSIsImxvYWRBbGwiLCJjaGFpbmFibGUiLCJaZXB0byIsImZuIiwiTGF6eSIsImxhenkiLCJpc0Z1bmN0aW9uIiwiaXNBcnJheSIsInByb3RvdHlwZSIsImJlZm9yZUxvYWQiLCJhZnRlckxvYWQiLCJvbkVycm9yIiwib25GaW5pc2hlZEFsbCIsInRvVXBwZXJDYXNlIiwiYWpheCIsImRhdGFUeXBlIiwic3VjY2VzcyIsImVycm9yIiwicHJvcCIsInJlcGxhY2VXaXRoIiwic3JjIiwiY3Jvc3NEb21haW4iLCJ4aHJGaWVsZHMiLCJ3aXRoQ3JlZGVudGlhbHMiLCJhcHBlbmRUbyIsImxvYWQiLCJtZWRpYSIsInNpemVzIiwic3Jjc2V0IiwibGlzdGluZ19sb2FkZXIiLCJzaG93X21vcmVfYnRuIiwicG9zdF9wZXJfcGFnZSIsImV4Y2x1ZGVfcG9zdHMiLCJwYWdlX3RvX2xvYWQiLCJsb2FkUG9zdHMiLCJwb3N0X2xvYWRlZCIsImVsZW1lbnQiLCJsYXN0X3Bvc3RfaWQiLCJwYXRoIiwic2V0dGluZ3MiLCJvcHRpb25zIiwiRGVmYXVsdHMiLCIkZWxlbWVudCIsIl9oYW5kbGVycyIsIl9wbHVnaW5zIiwiX3N1cHJlc3MiLCJfY3VycmVudCIsIl9zcGVlZCIsIl9jb29yZGluYXRlcyIsIl9icmVha3BvaW50IiwiX3dpZHRoIiwiX2l0ZW1zIiwiX2Nsb25lcyIsIl9tZXJnZXJzIiwiX3dpZHRocyIsIl9pbnZhbGlkYXRlZCIsIl9waXBlIiwiX2RyYWciLCJ0aW1lIiwidGFyZ2V0IiwicG9pbnRlciIsInN0YWdlIiwic3RhcnQiLCJjdXJyZW50Iiwi
5627ZGlyZWN0aW9uIiwiX3N0YXRlcyIsInRhZ3MiLCJpbml0aWFsaXppbmciLCJhbmltYXRpbmciLCJkcmFnZ2luZyIsInByb3h5IiwiUGx1Z2lucyIsImNoYXJBdCIsIldvcmtlcnMiLCJydW4iLCJzZXR1cCIsImluaXRpYWxpemUiLCJpdGVtcyIsImxvb3AiLCJjZW50ZXIiLCJyZXdpbmQiLCJjaGVja1Zpc2liaWxpdHkiLCJtb3VzZURyYWciLCJ0b3VjaERyYWciLCJwdWxsRHJhZyIsImZyZWVEcmFnIiwibWFyZ2luIiwic3RhZ2VQYWRkaW5nIiwibWVyZ2UiLCJtZXJnZUZpdCIsImF1dG9XaWR0aCIsInN0YXJ0UG9zaXRpb24iLCJydGwiLCJzbWFydFNwZWVkIiwiZmx1aWRTcGVlZCIsImRyYWdFbmRTcGVlZCIsInJlc3BvbnNpdmUiLCJyZXNwb25zaXZlUmVmcmVzaFJhdGUiLCJyZXNwb25zaXZlQmFzZUVsZW1lbnQiLCJmYWxsYmFja0Vhc2luZyIsInNsaWRlVHJhbnNpdGlvbiIsImluZm8iLCJuZXN0ZWRJdGVtU2VsZWN0b3IiLCJpdGVtRWxlbWVudCIsInN0YWdlRWxlbWVudCIsInJlZnJlc2hDbGFzcyIsImxvYWRlZENsYXNzIiwibG9hZGluZ0NsYXNzIiwicnRsQ2xhc3MiLCJyZXNwb25zaXZlQ2xhc3MiLCJkcmFnQ2xhc3MiLCJpdGVtQ2xhc3MiLCJzdGFnZUNsYXNzIiwic3RhZ2VPdXRlckNsYXNzIiwiZ3JhYkNsYXNzIiwiV2lkdGgiLCJEZWZhdWx0IiwiSW5uZXIiLCJPdXRlciIsIlR5cGUiLCJFdmVudCIsIlN0YXRlIiwicmVsYXRpdmUiLCIkc3RhZ2UiLCJjaGlsZHJlbiIsInRvRml4ZWQiLCJNYXRoIiwibWluIiwibWF4IiwiY2VpbCIsIm5vcm1hbGl6ZSIsIm91dGVySFRNTCIsInByZXBlbmRUbyIsImFicyIsImVxIiwiaW5kZXgiLCJtaW5pbXVtIiwibWF4aW11bSIsInJlc2V0IiwiYW5pbWF0ZSIsImNvb3JkaW5hdGVzIiwib3AiLCJqb2luIiwiaW5pdGlhbGl6ZVN0YWdlIiwiY2xhc3MiLCJ3cmFwIiwicGFyZW50IiwiaW5pdGlhbGl6ZUl0ZW1zIiwiZ2V0IiwibWFwIiwicmVmcmVzaCIsInJlcGxhY2UiLCJub3QiLCJpc1Zpc2libGUiLCJpbnZhbGlkYXRlIiwiZW50ZXIiLCJwcmVsb2FkQXV0b1dpZHRoSW1hZ2VzIiwicmVnaXN0ZXJFdmVudEhhbmRsZXJzIiwibGVhdmUiLCJ2aWV3cG9ydCIsIk51bWJlciIsIlJlZ0V4cCIsInByb3BlcnR5Iiwib3B0aW9uc0xvZ2ljIiwicHJlcGFyZSIsImNvbnRlbnQiLCJncmVwIiwib25UaHJvdHRsZWRSZXNpemUiLCJyZXNpemVUaW1lciIsIm9uUmVzaXplIiwiaXNEZWZhdWx0UHJldmVudGVkIiwic3VwcG9ydCIsInRyYW5zaXRpb24iLCJlbmQiLCJvblRyYW5zaXRpb25FbmQiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ0VuZCIsIndoaWNoIiwidHJhbnNmb3JtIiwieCIsInN0b3AiLCJnZXRUaW1lIiwiZGlmZmVyZW5jZSIsIm9uRHJhZ01vdmUiLCJ0cmFuc2Zvcm0zZCIsInN1cHByZXNzIiwicmVsZWFzZSIsImlzTnVtZXJpYyIsIm1lcmdlcnMiLCJjbG9uZXMiLCJkdXJhdGlvbiIsInRvIiwibmV4dCIsInByZXYiLCJzdG9wUHJvcGFnYXRpb24iLCJzcmNFbGVtZW50Iiwib3JpZ2luYWxUYXJnZXQiLCJkb2N1bWVudEVsZW1lbnQiLCJjbGllbnRXaWR0aCIsIm
5627NvbnNvbGUiLCJ3YXJuIiwiZW1wdHkiLCJub2RlVHlwZSIsImFkZEJhY2siLCJhZGQiLCJhZnRlciIsImJlZm9yZSIsInNwbGljZSIsInVud3JhcCIsImNvbnRlbnRzIiwicmVtb3ZlRGF0YSIsImFkZEV2ZW50TGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkZXRhY2hFdmVudCIsIml0ZW0iLCJjb3VudCIsImNhbWVsQ2FzZSIsImoiLCJyZWxhdGVkVGFyZ2V0Iiwib25UcmlnZ2VyIiwicmVnaXN0ZXIiLCJjb25jYXQiLCJldmVudCIsInNwZWNpYWwiLCJvd2wiLCJfZGVmYXVsdCIsIm5hbWVzcGFjZSIsImluZGV4T2YiLCJpbkFycmF5Iiwib3JpZ2luYWxFdmVudCIsInRvdWNoZXMiLCJjaGFuZ2VkVG91Y2hlcyIsInBhZ2VYIiwicGFnZVkiLCJjbGllbnRYIiwiY2xpZW50WSIsImlzTmFOIiwicGFyc2VGbG9hdCIsIm93bENhcm91c2VsIiwiQXJyYXkiLCJDb25zdHJ1Y3RvciIsIl9jb3JlIiwiX2ludGVydmFsIiwiX3Zpc2libGUiLCJhdXRvUmVmcmVzaCIsIndhdGNoIiwiYXV0b1JlZnJlc2hJbnRlcnZhbCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsIk9iamVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCJBdXRvUmVmcmVzaCIsIl9sb2FkZWQiLCJsYXp5TG9hZCIsImxhenlMb2FkRWFnZXIiLCJvbmxvYWQiLCJvcGFjaXR5IiwiaGFuZGxlcnMiLCJfcHJldmlvdXNIZWlnaHQiLCJhdXRvSGVpZ2h0IiwiX2ludGVydmFsSWQiLCJyZXNpemUiLCJhdXRvSGVpZ2h0Q2xhc3MiLCJ0b0FycmF5IiwiQXV0b0hlaWdodCIsIl92aWRlb3MiLCJfcGxheWluZyIsInZpZGVvIiwiaXNJbkZ1bGxTY3JlZW4iLCJmZXRjaCIsInBsYXkiLCJ2aWRlb0hlaWdodCIsInZpZGVvV2lkdGgiLCJFcnJvciIsIm1hdGNoIiwiaWQiLCJ0aHVtYm5haWwiLCJrIiwic3JjVHlwZSIsInN0eWxlIiwianNvbnAiLCJ0aHVtYm5haWxfbGFyZ2UiLCJmcmFtZWdyYWJfdXJsIiwiaW5zZXJ0QWZ0ZXIiLCJmdWxsc2NyZWVuRWxlbWVudCIsIm1vekZ1bGxTY3JlZW5FbGVtZW50Iiwid2Via2l0RnVsbHNjcmVlbkVsZW1lbnQiLCJWaWRlbyIsImNvcmUiLCJzd2FwcGluZyIsInByZXZpb3VzIiwiYW5pbWF0ZU91dCIsImFuaW1hdGVJbiIsInN3YXAiLCJhbmltYXRpb24iLCJjbGVhciIsIkFuaW1hdGUiLCJfY2FsbCIsIl90aW1lIiwiX3RpbWVvdXQiLCJfcGF1c2VkIiwiYXV0b3BsYXkiLCJhdXRvcGxheUhvdmVyUGF1c2UiLCJwYXVzZSIsImF1dG9wbGF5VGltZW91dCIsImF1dG9wbGF5U3BlZWQiLCJfbmV4dCIsInJvdW5kIiwicmVhZCIsImhpZGRlbiIsIl9pbml0aWFsaXplZCIsIl9wYWdlcyIsIl9jb250cm9scyIsIl90ZW1wbGF0ZXMiLCJfb3ZlcnJpZGVzIiwiZG90c0RhdGEiLCJkb3RDbGFzcyIsInBvcCIsImRyYXciLCJuYXYiLCJuYXZUZXh0IiwibmF2U3BlZWQiLCJuYXZFbGVtZW50IiwibmF2Q29udGFpbmVyIiwibmF2Q29udGFpbmVyQ2xhc3MiLCJuYXZDbGFzcyIsInNsaWRlQnkiLCJkb3RzQ2xhc3MiLCJkb3RzIiwiZG90c0VhY2giLCJkb3RzU3BlZWQiLCJkb3RzQ29udGFpbmVyIiwiJHJlbGF0aXZlIiwiJHByZXZpb3VzIiwiJG5leHQiLCIkYWJzb2x1dGUiLCJvdmVyaWRlcyIsInBhZ2UiLCJzaXplIiwiZ2V0UG9zaXRpb24iLCJOYXZpZ2F0aW9uIiwiX2hhc2hlcyIsImhhc2giLCJzdWJzdHJpbmciLCJVUkxoYXNoTGlzdGVuZXIiLCJIYXNoIiwiV2Via2l0VHJhbnNpdGlvbiIsIk1velRyYW5zaXRpb24iLCJPVHJhbnNpdGlvbiIsIldlYmtpdEFuaW1hdGlvbiIsIk1vekFuaW1hdGlvbiIsIk9BbmltYXRpb24iLCJjc3N0cmFuc2Zvcm1zIiwiY3NzdHJhbnNmb3JtczNkIiwiY3NzdHJhbnNpdGlvbnMiLCJjc3NhbmltYXRpb25zIiwiU3RyaW5nIiwib3dsQXJ0aWNsZXMiLCJsZWZ0X2Fycm93X3VybCIsInJpZ2h0X2Fycm93X3VybCIsImFydGljbGVDb3VudCIsIm5hdmlnYXRpb24iXSwic291cmNlUm9vdCI6IiJ9
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.