PageSourceSearch

https://www.serialowa.pl/wpr/wp-content/themes/serialowa/assets/js/app.js?ver=1.13

js serialowa.pl collected 2026-10-02 11:50:47 UTC 736,893 bytes, 5,627 lines download raw bytes

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&amp;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">&#x2039;</span>', '<span aria-label="Next">&#x203a;</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
5627FDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQyxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSw0QkFBNEIsMkJBQTJCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQU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7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ01BQWdNLDBDQUEwQyxnRUFBZ0U7QUFDMVM7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QU
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.