PageSourceSearch

https://www.mariuszkwiecien.com/components.js

js mariuszkwiecien.com collected 2026-10-02 12:05:55 UTC 66,179 bytes, 591 lines download raw bytes

1(function ($$1,Modernizr,svg4everybody,Swiper) {
2  'use strict';
3
4  $$1 = 'default' in $$1 ? $$1['default'] : $$1;
5  Modernizr = 'default' in Modernizr ? Modernizr['default'] : Modernizr;
6  svg4everybody = 'default' in svg4everybody ? svg4everybody['default'] : svg4everybody;
7  Swiper = 'default' in Swiper ? Swiper['default'] : Swiper;
8
9  /**
10   * Module containing polyfills initialization.
11   */
12
13  /**
14   * Replaces SVG images with their PNG replacements.
15   * The idea is to basically provide PNG versions of the most essential images on
16   * the page e.g. main logo, navigation trigger etc. that sould be placed in the
17   * same directory as the SVG file and have the same name.
18   */
19  var svgToPng = function svgToPng() {
20    var $svgImage;
21    $$1('img[src$=".svg"]').each(function () {
22      $svgImage = $$1(this);
23      $svgImage.attr('src', $svgImage.attr('src').replace('svg', 'png'));
24    });
25  };
26
27  /**
28   * Initializes all polyfills used on the page, can be used to load polyfills again
29   * when loading content dynamically.
30   */
31  var init = function init() {
32    /**
33     * If SVG graphics are supported by the browser.
34     */
35    if (Modernizr.svg) {
36      /**
37       * Polyfill using external SVGs if needed(scripts checks that).
38       */
39      svg4everybody();
40    } else {
41      /**
42       * Replace all references to SVG files with their PNG replacements.
43       */
44      svgToPng();
45    }
46  };
47
48  var paper = $$1('.paper');
49  var paperCard = $$1('.paper__card');
50  var paperContent = $$1('.paper__content');
51
52  var isOpen = false;
53
54  var whereIsIt = 0;
55
56  var open = function open() {
57      var margin = 30;
58
59      //if(!isOpen) {
60      whereIsIt = $$1(window).scrollTop();
61      //}
62
63      paperCard.css('visibility', 'hidden');
64      paperCard.css('display', 'block');
65
66      var height = paperContent.outerHeight();
67
68      var windowHeight = $$1(window).innerHeight();
69      var bodyHeight = $$1('body').outerHeight();
70
71      var paperHeight = windowHeight > height ? windowHeight : height;
72      var pixelsLeft = bodyHeight - whereIsIt;
73      var top = whereIsIt;
74      //if( pixelsLeft < height ) {
75      //    top = bodyHeight - height;
76      //    if(top<5) {
77      //        top=5;
78      //    }
79      //}
80
81      paperCard.css('height', paperHeight);
82      paperCard.css('top', top + margin);
83      paper.css('margin-top', -top);
84      paper.css('height', paperHeight + top + 2 * margin);
85      //paper.css( 'overflow', 'hidden' );
86      paper.addClass('paper--active');
87      paperCard.css('visibility', 'visible');
88
89      isOpen = true;
90      $$1(window).scrollTop(0);
91      $$1('body').trigger('sectionsResize');
92  };
93
94  var close = function close() {
95      paperCard.hide();
96      //paper.css( 'overflow', 'visible' );
97      paper.css('height', 'auto');
98      paper.css('margin-top', 0);
99      paper.removeClass('paper--active');
100      isOpen = false;
101      $$1(window).scrollTop(whereIsIt);
102      $$1('body').trigger('sectionsResize');
103  };
104
105  var listen = function listen() {
106      $$1('.paper').on('showPaper', function (e, data, callbacks) {
107          if (isOpen) close();
108          paperContent.html(data);
109          enableButton(callbacks.next, '.paper__button--next');
110          enableButton(callbacks.prev, '.paper__button--prev');
111          setTimeout(open, 10); //Leo why... this sux!
112      });
113      $$1('.paper').on('hidePaper', function (e) {
114          close();
115      });
116
117      $$1('.paper__button--close').click(function () {
118          close();
119      });
120
121      $$1('body').keydown(function (e) {
122          if (isOpen && e.keyCode === 27) {
123              close();
124          }
125      });
126
127      $$1(document).bind("mouseup touchend", function (e) {
128          if (isOpen && !paperCard.is(e.target) // if the target of the click isn't the container...
129           && paperCard.has(e.target).length === 0) // ... nor a descendant of the container
130              {
131                  close();
132              }
133      });
134  };
135
136  var enableButton = function enableButton(callback, selector) {
137      var button = $$1(selector);
138      if (callback) {
139          button.click(callback);
140          button.css('visibility', 'visible');
141      } else {
142          button.css('visibility', 'hidden');
143      }
144  };
145
146  var init$1 = function init() {
147
148      $$1('.schedule-item').on('hidePopups', function () {
149          setInactive($$1(this));
150      });
151
152      $$1('.schedule-item').on('showPopup', function () {
153          setActive($$1(this));
154      });
155  };
156
157  var setInactive = function setInactive(element) {
158      element.children('.schedule-item__calendar').addClass('schedule-item__calendar--inactive');
159      element.children('.schedule-item__button').addClass('schedule-item__button--inactive');
160      element.children('.schedule-item__title').children('.subheadline').removeClass('subheadline--primary');
161  };
162
163  var setActive = function setActive(element) {
164      element.children('.schedule-item__calendar').removeClass('schedule-item__calendar--inactive');
165      element.children('.schedule-item__button').removeClass('schedule-item__button--inactive');
166      element.children('.schedule-item__title').children('.subheadline').addClass('subheadline--primary');
167  };
168
169  var hidePopups = function hidePopups(activeClass) {
170
171      $$1('.' + activeClass).each(function () {
172          hidePopup($$1(this), activeClass);
173      });
174  };
175
176  var expandable = function expandable(popUpSelector, activeClass, inactiveClass, wasInactiveClass, callbackOff, callbackOn) {
177      $$1(popUpSelector).click(function () {
178          var $this = $$1(this);
179          if ($this.hasClass(activeClass)) {
180              hidePopup($this, activeClass);
181              if ($$1.isFunction(callbackOff)) {
182                  callbackOff($this);
183              }
184          } else {
185              $this.addClass(activeClass);
186              $this.parent().removeClass(wasInactiveClass);
187
188              $this.parent().siblings().each(function () {
189                  hidePopup($$1(this).children(popUpSelector), activeClass);
190                  $$1(this).addClass(inactiveClass);
191              });
192              $this.children().trigger('showPopup');
193
194              if ($$1.isFunction(callbackOn)) {
195                  callbackOn($this);
196              }
197          }
198      });
199  };
200
201  var hidePopup = function hidePopup(element, activeClass) {
202      element.removeClass(activeClass);
203      element.children().trigger('hidePopups');
204  };
205
206  var inactiveHover = function inactiveHover(selector, inactiveClass, wasInactiveClass) {
207      $$1(selector).hover(function () {
208          if ($$1(this).hasClass(inactiveClass)) {
209              $$1(this).removeClass(inactiveClass);
210              $$1(this).addClass(wasInactiveClass);
211          }
212      }, function () {
213          if ($$1(this).hasClass(wasInactiveClass)) {
214              $$1(this).removeClass(wasInactiveClass);
215              $$1(this).addClass(inactiveClass);
216          }
217      });
218  };
219
220  var scheduleSwiper = undefined;
221
222  var activeClass = 'section-schedule__pop--active';
223  var inactiveClass = 'section-schedule__item--inactive';
224  var wasInactiveClass = 'section-schedule__item--wasInactive';
225  var popUpSelector = '.section-schedule__pop';
226
227  var init$2 = function init() {
228      initSwiper($('.section-schedule').data('first'));
229      inactiveHover('.section-schedule__item', inactiveClass, wasInactiveClass);
230      hidePopups(activeClass);
231      expandable(popUpSelector, activeClass, inactiveClass, wasInactiveClass, removeReducedOpacity);
232  };
233
234  var initSwiper = function initSwiper(slide) {
235      scheduleSwiper = new Swiper('.section-schedule__container', {
236          // Optional parameters
237          //direction: 'vertical',
238          //loop: true,
239          // Navigation arrows
240          nextButton: '.section-schedule__button--next',
241          prevButton: '.section-schedule__button--prev',
242          slidesPerView: 4,
243          initialSlide: slide ? slide : 0
244
245      });
246  };
247
248  var removeReducedOpacity = function removeReducedOpacity() {
249      $('.' + inactiveClass).removeClass(inactiveClass);
250  };
251
252  var newsInit = function init() {
253
254      $$1('.news').click(function () {
255          var source = $$1(this).data('news-source');
256          var paper = $$1(this).data('paper');
257          load(source, paper);
258      });
259
260      $$1('.news__more').click(function (e) {
261          //e.preventDefault();
262          //$( this).closest( '.news' ).trigger('click');
263      });
264  };
265
266  var load = function load(source, paper) {
267      $$1.get(source, function (data) {
268          var callbacks = {
269              //'next': function() {
270              //    load('/base.css', paper);
271              //},
272              //'prev': function() {
273              //    load('/base.css', paper);
274              //}
275          };
276          $$1(paper).trigger('showPaper', [data.content, callbacks]);
277      }, 'json');
278  };
279
280  var init$3 = function init() {
281      var button = $$1('.section-news__more');
282      var source = button.data('source');
283      $$1(button.click(function () {
284          var count = $$1('.section-news__item').length;
285          $$1.post(source, { from: count }, function (data) {
286              $$1('.section-news__container').append(data);
287              if (data.length) {
288                  if ($$1('.section-news__item').length % 4) {
289                      button.hide();
290                  }
291                  newsInit();
292                  $$1('body').trigger('sectionsResize');
293              } else {
294                  button.hide();
295              }
296          });
297      }));
298  };
299
300  var isMenuOpen = false;
301  var targets = [];
302  var hamburgerHeight = 0;
303  var wasScroll = false;
304
305  var init$4 = function init() {
306      hamburgerHeight = $$1('.hamburger-box').offset().top;
307      /// /findTargetsForBackgroundChange();
308      attachListnersForMenuButton();
309      triggerBackgroundChangeEvent();
310      $$1(window).scroll(triggerBackgroun
310dChangeEventLimiter);
311
312      $$1('body').on('sectionsResize', function () {
313          findTargetsForBackgroundChange();
314      });
315
316      setInterval(triggerBackgroundChangeEvent, 300);
317
318      $$1(window).load(findTargetsForBackgroundChange());
319  };
320
321  function findTargetsForBackgroundChange() {
322      targets = [];
323      $$1('.section-bio, .section-schedule, .recordings').each(function () {
324          targets.push({
325              point: $$1(this).offset().top - hamburgerHeight,
326              dark: true
327          });
328      });
329      $$1('.section-news, .splash, .splash-newcd').each(function () {
330          targets.push({
331              point: $$1(this).offset().top - hamburgerHeight,
332              dark: false
333          });
334      });
335
336      targets.sort(function (a, b) {
337          return a.point - b.point;
338      });
339  }
340
341  function triggerBackgroundChangeEventLimiter() {
342      wasScroll = true;
343  }
344
345  function triggerBackgroundChangeEvent() {
346      if (wasScroll) {
347          wasScroll = false;
348          var top = $$1(window).scrollTop();
349
350          for (var t = 0; t < targets.length; t = t + 1) {
351              if (top >= targets[t].point && (t + 1 === targets.length || top < targets[t + 1].point)) {
352                  $$1('.menu').trigger('backgroudChange', targets[t].dark);
353                  return;
354              }
355          }
356      }
357  }
358
359  function attachListnersForMenuButton() {
360      $$1('.menu__button, .menu__item').on('click', function () {
361          $$1('.menu__popup').toggleClass('menu__popup--active');
362          $$1('.menu__button').toggleClass('is-active');
363          $$1('.hamburger-label').toggle();
364          $$1('.hamburger-inner').toggleClass('hamburger-inner--white-click');
365
366          isMenuOpen = !isMenuOpen;
367      });
368
369      $$1('.menu').on('backgroudChange', function (event, isDark) {
370          if (isMenuOpen === false) {
371              if (isDark) {
372                  $$1('.hamburger-inner').addClass('hamburger-inner--white');
373                  $$1('.hamburger-label').addClass('hamburger-label--white');
374              } else {
375                  $$1('.hamburger-inner').removeClass('hamburger-inner--white');
376                  $$1('.hamburger-label').removeClass('hamburger-label--white');
377              }
378          }
379      });
380  }
381
382  var init$5 = function init() {
383
384      $$1('.section-bio__more-button').click(function () {
385          $$1('.section-bio__more').toggleClass('section-bio__more--hidden');
386          $$1(this).hide();
387      });
388  };
389
390  var flippedClass = 'picture-flip__side--flipped';
391
392  var init$6 = function init() {
393
394      $$1('.picture-flip__container').on('click', function (e) {
395          if (!$$1(e.target).hasClass('button')) {
396              var that = $$1(this);
397              if (that.hasClass(flippedClass)) {
398                  that.removeClass(flippedClass);
399              } else {
400                  $$1('.picture-flip__container').trigger('turnTop', [that]);
401                  that.addClass(flippedClass);
402              }
403          }
404      });
405
406      $$1('.picture-flip__container').on('turnTop', function (e, except) {
407          //if($( this ) != except)
408          $$1(this).removeClass(flippedClass);
409      });
410  };
411
412  var elementName = 'stage-photos';
413
414  var activeClass$1 = elementName + '__pop--active';
415  var inactiveClass$1 = elementName + '__item--inactive';
416  var wasInactiveClass$1 = elementName + '__item--wasInactive';
417  var popUpSelector$1 = '.' + elementName + '__pop';
418
419  var viewElementClass = 'stage-photos__view';
420  var view = undefined;
421  var photosSwiper = undefined;
422  var galleryUrl = undefined;
423
424  var opened = false;
425
426  var init$7 = function init() {
427      initSwiper$1();
428      view = $('.' + viewElementClass);
429      inactiveHover(popUpSelector$1, inactiveClass$1, wasInactiveClass$1);
430      //pop.hidePopups( activeClass );
431      expandable(popUpSelector$1, activeClass$1, wasInactiveClass$1, null, closeGallery, clickGallery);
432      //attachClickGallery();
433      galleryUrl = $('.' + elementName).data('album-source');
434  };
435
436  var initSwiper$1 = function initSwiper() {
437      var galeriesSwiper = new Swiper('.stage-photos__container', {
438
439          nextButton: '.stage-photos__button-list--prev',
440          prevButton: '.stage-photos__button-list--next',
441          slidesPerView: 4,
442          spaceBetween: 10
443
444      });
445
446      photosSwiper = new Swiper('.stage-photos__view', {
447          nextButton: '.stage-photos__button-view--prev',
448          prevButton: '.stage-photos__button-view--next',
449          slidesPerView: 'auto',
450          spaceBetween: 10,
451          lazyLoading: true,
452          lazyLoadingInPrevNextAmount: 2
453          //centeredSlides: true
454      });
455  };
456
457  var loadGallery = function loadGallery(dir) {
458      $.get(galleryUrl + dir, function (data) {
459          $('.stage-photos__button-view').css('visibility', 'visible');
460          opened = true;
461          if (photosSwiper) {
462              photosSwiper.removeAllSlides();
463              photosSwiper.appendSlide(data);
464              view.addClass(viewElementClass + '--open');
465
466              // Scroll when animation of height is over
467              setTimeout(scrollToSectionEnd, 1000);
468
469              $(view).imagesLoaded(function () {
470                  if (photosSwiper) {
471                      photosSwiper.update();
472                  }
473              });
474          }
475      });
476  };
477
478  var scrollToSectionEnd = function scrollToSectionEnd() {
479      var section = $('.' + elementName);
480      $(window).scrollTo(section.offset().top + section.outerHeight() - $(window).innerHeight(), 500);
481  };
482
483  var closeGallery = function closeGallery(that) {
484      $('.stage-photos__button-view').css('visibility', 'hidden');
485      opened = false;
486      photosSwiper.removeAllSlides();
487      view.removeClass(viewElementClass + '--open');
488  };
489
490  var clickGallery = function clickGallery(that) {
491      loadGallery(that.data('album'));
492  };
493
494  var init$8 = function init() {
495      initSwiper$2();
496  };
497  var gallerySelector = '.portraits__gallery';
498  var initSwiper$2 = function initSwiper() {
499      var portraitsSwiper = new Swiper(gallerySelector, {
500          nextButton: '.portraits__button--prev',
501          prevButton: '.portraits__button--next',
502          slidesPerView: 'auto',
503          lazyLoading: true,
504          lazyLoadingInPrevNextAmount: 2
505      });
506
507      $(gallerySelector).imagesLoaded(function () {
508          if (portraitsSwiper) {
509              portraitsSwiper.update();
510          }
511      });
512  };
513
514  var elementName$1 = 'video';
515
516  var activeClass$2 = elementName$1 + '__pop--active';
517  var inactiveClass$2 = elementName$1 + '__item--inactive';
518  var wasInactiveClass$2 = elementName$1 + '__item--wasInactive';
519  var popUpSelector$2 = '.' + elementName$1 + '__pop';
520
521  var opened$1 = false;
522
523  var init$9 = function init() {
524      initSwiper$3();
525      inactiveHover(popUpSelector$2, inactiveClass$2, wasInactiveClass$2);
526      //pop.hidePopups( activeClass );
527      expandable(popUpSelector$2, activeClass$2, wasInactiveClass$2, null, hideVideo, showVideo);
528  };
529
530  var initSwiper$3 = function initSwiper() {
531      var videosSwiper = new Swiper('.video__container', {
532          nextButton: '.video__button--prev',
533          prevButton: '.video__button--next',
534          slidesPerView: 4,
535          spaceBetween: 10
536
537      });
538  };
539
540  var showVideo = function showVideo(that) {
541      if (!opened$1) {
542          $$1('.video__view').addClass('video__view--open');
543      }
544      opened$1 = true;
545      var video = that.data('video');
546      video += '&autoplay=1';
547      var wrapper = $$1('.video__iframe-wrapper');
548      wrapper.html('<iframe class="video__iframe" src="' + video + '" frameborder="0" allowfullscreen></iframe>');
549      $$1(window).scrollTo(wrapper.offset().top + wrapper.outerHeight() - $$1(window).innerHeight() + 10, 800);
550  };
551
552  var hideVideo = function hideVideo() {
553      opened$1 = false;
554      $$1('.video__view').removeClass('video__view--open');
555      $$1('.video__iframe-wrapper').html('');
556  };
557
558  init();
559  listen();
560
561  init$1();
562
563  init$2();
564
565  newsInit();
566
567  init$3();
568
569  init$4();
570
571  init$5();
572
573  init$6();
574
575  init$7();
576
577  init$8();
578
579  init$9();
580
581  /******************************************************************************/
582
583  /*******************************************************************************
584   * Layouts
585   ******************************************************************************/
586
587  /******************************************************************************/
588
589}(jQuery,Modernizr,svg4everybody,Swiper));
590
591//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50cy5qcyIsInNvdXJjZXMiOlsiY29tbW9ucy9fcG9seWZpbGxzLmpzIiwiY29tcG9uZW50cy9wYXBlci9fcGFwZXIuanMiLCJjb21wb25lbnRzL3NjaGVkdWxlLWl0ZW0vX3NjaGVkdWxlLWl0ZW0uanMiLCJjb21wb25lbnRzL3BvcC1pdGVtL19wb3AtaXRlbS5qcyIsImNvbXBvbmVudHMvc2VjdGlvbi1zY2hlZHVsZS9fc2VjdGlvbi1zY2hlZHVsZS5qcyIsImNvbXBvbmVudHMvbmV3cy9fbmV3cy5qcyIsImNvbXBvbmVudHMvc2VjdGlvbi1uZXdzL19zZWN0aW9uLW5ld3MuanMiLCJjb21wb25lbnRzL21lbnUvX21lbnUuanMiLCJjb21wb25lbnRzL3NlY3Rpb24tYmlvL19zZWN0aW9uLWJpby5qcyIsImNvbXBvbmVudHMvaW1hZ2UtZmxpcHBlZC9faW1hZ2UtZmxpcHBlZC5qcyIsImNvbXBvbmVudHMvc3RhZ2UtcGhvdG9zL19zdGFnZS1waG90b3MuanMiLCJjb21wb25lbnRzL3BvcnRyYWl0cy9fcG9ydHJhaXRzLmpzIiwiY29tcG9uZW50cy92aWRlby9fdmlkZW8uanMiLCJjb21wb25lbnRzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pRdWVyeSc7XG5pbXBvcnQgTW9kZXJuaXpyIGZyb20gJ01vZGVybml6cic7XG5pbXBvcnQgc3ZnNGV2ZXJ5Ym9keSBmcm9tICdzdmc0ZXZlcnlib2R5Jztcbi8qKlxuICogTW9kdWxlIGNvbnRhaW5pbmcgcG9seWZpbGxzIGluaXRpYWxpemF0aW9uLlxuICovXG5cbi8qKlxuICogUmVwbGFjZXMgU1ZHIGltYWdlcyB3aXRoIHRoZWlyIFBORyByZXBsYWNlbWVudHMuXG4gKiBUaGUgaWRlYSBpcyB0byBiYXNpY2FsbHkgcHJvdmlkZSBQTkcgdmVyc2lvbnMgb2YgdGhlIG1vc3QgZXNzZW50aWFsIGltYWdlcyBvblxuICogdGhlIHBhZ2UgZS5nLiBtYWluIGxvZ28sIG5hdmlnYXRpb24gdHJpZ2dlciBldGMuIHRoYXQgc291bGQgYmUgcGxhY2VkIGluIHRoZVxuICogc2FtZSBkaXJlY3RvcnkgYXMgdGhlIFNWRyBmaWxlIGFuZCBoYXZlIHRoZSBzYW1lIG5hbWUuXG4gKi9cbnZhciBzdmdUb1BuZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciAkc3ZnSW1hZ2U7XG4gICAgJCggJ2ltZ1tzcmMkPVwiLnN2Z1wiXScgKS5lYWNoKCBmdW5jdGlvbigpIHtcbiAgICAgICAgJHN2Z0ltYWdlID0gJCggdGhpcyApO1xuICAgICAgICAkc3ZnSW1hZ2UuYXR0ciggJ3NyYycsICRzdmdJbWFnZS5hdHRyKCAnc3JjJyApLnJlcGxhY2UoICdzdmcnLCAncG5nJyApICk7XG4gICAgfSApO1xufTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbGwgcG9seWZpbGxzIHVzZWQgb24gdGhlIHBhZ2UsIGNhbiBiZSB1c2VkIHRvIGxvYWQgcG9seWZpbGxzIGFnYWluXG4gKiB3aGVuIGxvYWRpbmcgY29udGVudCBkeW5hbWljYWxseS5cbiAqL1xudmFyIGluaXQgPSBmdW5jdGlvbigpIHtcbiAgICAvKipcbiAgICAgKiBJZiBTVkcgZ3JhcGhpY3MgYXJlIHN1cHBvcnRlZCBieSB0aGUgYnJvd3Nlci5cbiAgICAgKi9cbiAgICBpZiAoIE1vZGVybml6ci5zdmcgKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQb2x5ZmlsbCB1c2luZyBleHRlcm5hbCBTVkdzIGlmIG5lZWRlZChzY3JpcHRzIGNoZWNrcyB0aGF0KS5cbiAgICAgICAgICovXG4gICAgICAgI
591HN2ZzRldmVyeWJvZHkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmVwbGFjZSBhbGwgcmVmZXJlbmNlcyB0byBTVkcgZmlsZXMgd2l0aCB0aGVpciBQTkcgcmVwbGFjZW1lbnRzLlxuICAgICAgICAgKi9cbiAgICAgICAgc3ZnVG9QbmcoKTtcbiAgICB9XG59O1xuXG5leHBvcnQgeyBpbml0IH07XG4iLCJpbXBvcnQgJCBmcm9tICdqUXVlcnknO1xuXG5sZXQgcGFwZXIgPSAkKCcucGFwZXInKTtcbmxldCBwYXBlckNhcmQgPSAkKCcucGFwZXJfX2NhcmQnKTtcbmxldCBwYXBlckNvbnRlbnQgPSAkKCcucGFwZXJfX2NvbnRlbnQnKTtcblxubGV0IGlzT3BlbiA9IGZhbHNlO1xuXG5sZXQgd2hlcmVJc0l0ID0gMDtcblxuXG5jb25zdCBvcGVuID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgbWFyZ2luID0gMzA7XG5cbiAgICAvL2lmKCFpc09wZW4pIHtcbiAgICAgICAgd2hlcmVJc0l0ID0gJCggd2luZG93ICkuc2Nyb2xsVG9wKCk7XG4gICAgLy99XG5cbiAgICBwYXBlckNhcmQuY3NzKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuICAgIHBhcGVyQ2FyZC5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTtcblxuICAgIGxldCBoZWlnaHQgPSBwYXBlckNvbnRlbnQub3V0ZXJIZWlnaHQoKTtcblxuICAgIGxldCB3aW5kb3dIZWlnaHQgPSAkKCB3aW5kb3cgKS5pbm5lckhlaWdodCgpO1xuICAgIGxldCBib2R5SGVpZ2h0ID0gJCggJ2JvZHknICkub3V0ZXJIZWlnaHQoKTtcblxuICAgIGxldCBwYXBlckhlaWdodCA9IHdpbmRvd0hlaWdodCA+IGhlaWdodCA/IHdpbmRvd0hlaWdodCA6IGhlaWdodDtcbiAgICBsZXQgcGl4ZWxzTGVmdCA9IGJvZHlIZWlnaHQgLSB3aGVyZUlzSXQ7XG4gICAgbGV0IHRvcCA9IHdoZXJlSXNJdDtcbiAgICAvL2lmKCBwaXhlbHNMZWZ0IDwgaGVpZ2h0ICkge1xuICAgIC8vICAgIHRvcCA9IGJvZHlIZWlnaHQgLSBoZWlnaHQ7XG4gICAgLy8gICAgaWYodG9wPDUpIHtcbiAgICAvLyAgICAgICAgdG9wPTU7XG4gICAgLy8gICAgfVxuICAgIC8vfVxuXG4gICAgcGFwZXJDYXJkLmNzcyggJ2hlaWdodCcsIHBhcGVySGVpZ2h0ICk7XG4gICAgcGFwZXJDYXJkLmNzcyggJ3RvcCcsIHRvcCArIG1hcmdpbiApO1xuICAgIHBhcGVyLmNzcyggJ21hcmdpbi10b3AnLCAtIHRvcCApO1xuICAgIHBhcGVyLmNzcyggJ2hlaWdodCcsIHBhcGVySGVpZ2h0ICsgdG9wICsgMiAqIG1hcmdpbiApO1xuICAgIC8vcGFwZXIuY3NzKCAnb3ZlcmZsb3cnLCAnaGlkZGVuJyApO1xuICAgIHBhcGVyLmFkZENsYXNzKCdwYXBlci0tYWN0aXZlJyk7XG4gICAgcGFwZXJDYXJkLmNzcyggJ3Zpc2liaWxpdHknLCAndmlzaWJsZScgKTtcblxuICAgIGlzT3BlbiA9IHRydWU7XG4gICAgJCggd2luZG93ICkuc2Nyb2xsVG9wKCAwICk7XG4gICAgJCggJ2JvZHknKS50cmlnZ2VyKCdzZWN0aW9uc1Jlc2l6ZScpO1xuXG59O1xuXG5jb25zdCBjbG9zZSA9IGZ1bmN0aW9uKCkge1xuICAgIHBhcGVyQ2FyZC5oaWRlKCk7XG4gICAgLy9wYXBlci5jc3MoICdvdmVyZmxvdycsICd2aXNpYmxlJyApO1xuICAgIHBhcGVyLmNzcyggJ2hlaWdodCcsICdhdXRvJyApO1xuICAgIHBhcGVyLmNzcyggJ21hcmdpbi10b3AnLCAwICk7XG4gICAgcGFwZXIucmVtb3ZlQ2xhc3MoJ3BhcGVyLS1hY3RpdmUnKTtcbiAgICBpc09wZW4gPSBmYWxzZTtcbiAgICAkKCB3aW5kb3cgKS5zY3JvbGxUb3AoIHdoZXJlSXNJdCApO1xuICAgICQoICdib2R5JykudHJpZ2dlcignc2VjdGlvbnNSZXNpemUnKTtcbn07XG5cbmNvbnN0IGxpc3RlbiA9IGZ1bmN0aW9uKCkge1xuICAgICQoJy5wYXBlcicpLm9uKCdzaG93UGFwZXInLCBmdW5jdGlvbihlLCBkYXRhLCBjYWxsYmFja3MpIHtcbiAgICAgICAgaWYoIGlzT3BlbiApIGNsb3NlKCk7XG4gICAgICAgIHBhcGVyQ29udGVudC5odG1sKGRhdGEpO1xuICAgICAgICBlbmFibGVCdXR0b24oY2FsbGJhY2tzLm5leHQsICcucGFwZXJfX2J1dHRvbi0tbmV4dCcpO1xuICAgICAgICBlbmFibGVCdXR0b24oY2FsbGJhY2tzLnByZXYsICcucGFwZXJfX2J1dHRvbi0tcHJldicpO1xuICAgICAgICBzZXRUaW1lb3V0KG9wZW4sIDEwKTsgLy9MZW8gd2h5Li4uIHRoaXMgc3V4IVxuICAgIH0pO1xuICAgICQoJy5wYXBlcicpLm9uKCdoaWRlUGFwZXInLCBmdW5jdGlvbihlKSB7XG4gICAgICAgIGNsb3NlKCk7XG4gICAgfSk7XG5cbiAgICAkKCcucGFwZXJfX2J1dHRvbi0tY2xvc2UnKS5jbGljayhmdW5jdGlvbigpe1xuICAgICAgICBjbG9zZSgpO1xuICAgIH0pO1xuXG4gICAgJCggJ2JvZHknICkua2V5ZG93bihmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmKCBpc09wZW4gJiYgZS5rZXlDb2RlID09PSAyNyApIHtcbiAgICAgICAgICAgIGNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgICQoZG9jdW1lbnQpLmJpbmQoIFwibW91c2V1cCB0b3VjaGVuZFwiLCBmdW5jdGlvbihlKXtcbiAgICAgICAgaWYgKGlzT3BlbiAmJiAhcGFwZXJDYXJkLmlzKGUudGFyZ2V0KSAvLyBpZiB0aGUgdGFyZ2V0IG9mIHRoZSBjbGljayBpc24ndCB0aGUgY29udGFpbmVyLi4uXG4gICAgICAgICAgICAmJiBwYXBlckNhcmQuaGFzKGUudGFyZ2V0KS5sZW5ndGggPT09IDApIC8vIC4uLiBub3IgYSBkZXNjZW5kYW50IG9mIHRoZSBjb250YWluZXJcbiAgICAgICAge1xuICAgICAgICAgICAgY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuY29uc3QgZW5hYmxlQnV0dG9uID0gZnVuY3Rpb24oIGNhbGxiYWNrLCBzZWxlY3RvciApIHtcbiAgICBsZXQgYnV0dG9uID0gJCggc2VsZWN0b3IgKTtcbiAgICBpZihjYWxsYmFjaykge1xuICAgICAgICBidXR0b24uY2xpY2soIGNhbGxiYWNrICk7XG4gICAgICAgIGJ1dHRvbi5jc3MoJ3Zpc2liaWxpdHknLCd2aXNpYmxlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYnV0dG9uLmNzcygndmlzaWJpbGl0eScsJ2hpZGRlbicpO1xuICAgIH1cbn07XG5cbmV4cG9ydCB7IGxpc3RlbiB9OyIsIi8qKlxuICogQ29tcG9uZW50cyBzY3JpcHRzLlxuICovXG5cbi8qKlxuICogTGV0J3MgaW1wb3J0IGpRdWVyeSBmcm9tIGdsb2JhbCBuYW1lc3BhY2UuXG4gKi9cbmltcG9ydCAkIGZyb20gJ2pRdWVyeSc7XG52YXIgaW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgJCggJy5zY2hlZHVsZS1pdGVtJyApLm9uKCAnaGlkZVBvcHVwcycsIGZ1bmN0aW9uKCkge1xuICAgICAgICBzZXRJbmFjdGl2ZSggJCggdGhpcyApICk7XG4gICAgfSApO1xuXG4gICAgJCggJy5zY2hlZHVsZS1pdGVtJyApLm9uKCAnc2hvd1BvcHVwJywgZnVuY3Rpb24oKSB7XG4gICAgICAgI
591HNldEFjdGl2ZSggJCggdGhpcyApICk7XG4gICAgfSApO1xuXG59O1xuXG5cbnZhciBzZXRJbmFjdGl2ZSA9IGZ1bmN0aW9uKCBlbGVtZW50ICkge1xuICAgIGVsZW1lbnQuY2hpbGRyZW4oICcuc2NoZWR1bGUtaXRlbV9fY2FsZW5kYXInICkuYWRkQ2xhc3MoICdzY2hlZHVsZS1pdGVtX19jYWxlbmRhci0taW5hY3RpdmUnICk7XG4gICAgZWxlbWVudC5jaGlsZHJlbiggJy5zY2hlZHVsZS1pdGVtX19idXR0b24nICkuYWRkQ2xhc3MoICdzY2hlZHVsZS1pdGVtX19idXR0b24tLWluYWN0aXZlJyApO1xuICAgIGVsZW1lbnQuY2hpbGRyZW4oICcuc2NoZWR1bGUtaXRlbV9fdGl0bGUnICkuY2hpbGRyZW4oICcuc3ViaGVhZGxpbmUnICkucmVtb3ZlQ2xhc3MoICdzdWJoZWFkbGluZS0tcHJpbWFyeScgKTtcbn07XG5cbnZhciBzZXRBY3RpdmUgPSBmdW5jdGlvbiggZWxlbWVudCApIHtcbiAgICBlbGVtZW50LmNoaWxkcmVuKCAnLnNjaGVkdWxlLWl0ZW1fX2NhbGVuZGFyJyApLnJlbW92ZUNsYXNzKCAnc2NoZWR1bGUtaXRlbV9fY2FsZW5kYXItLWluYWN0aXZlJyApO1xuICAgIGVsZW1lbnQuY2hpbGRyZW4oICcuc2NoZWR1bGUtaXRlbV9fYnV0dG9uJyApLnJlbW92ZUNsYXNzKCAnc2NoZWR1bGUtaXRlbV9fYnV0dG9uLS1pbmFjdGl2ZScgKTtcbiAgICBlbGVtZW50LmNoaWxkcmVuKCAnLnNjaGVkdWxlLWl0ZW1fX3RpdGxlJyApLmNoaWxkcmVuKCAnLnN1YmhlYWRsaW5lJyApLmFkZENsYXNzKCAnc3ViaGVhZGxpbmUtLXByaW1hcnknICk7XG59O1xuXG5leHBvcnQgeyBpbml0IH07XG4iLCJpbXBvcnQgJCBmcm9tICdqUXVlcnknO1xuXG5cbmxldCBoaWRlUG9wdXBzID0gZnVuY3Rpb24oIGFjdGl2ZUNsYXNzICkge1xuXG4gICAgJCggJy4nICsgYWN0aXZlQ2xhc3MgKS5lYWNoKCBmdW5jdGlvbigpIHtcbiAgICAgICAgaGlkZVBvcHVwKCAkKCB0aGlzICksIGFjdGl2ZUNsYXNzICk7XG4gICAgfSApO1xufTtcblxuXG5sZXQgZXhwYW5kYWJsZSA9IGZ1bmN0aW9uKCBwb3BVcFNlbGVjdG9yLCBhY3RpdmVDbGFzcywgaW5hY3RpdmVDbGFzcywgd2FzSW5hY3RpdmVDbGFzcywgY2FsbGJhY2tPZmYsIGNhbGxiYWNrT24gKSB7XG4gICAgJCggcG9wVXBTZWxlY3RvciApLmNsaWNrKCBmdW5jdGlvbiggKSB7XG4gICAgICAgIGxldCAkdGhpcyA9ICQoIHRoaXMgKTtcbiAgICAgICAgaWYgKCAkdGhpcy5oYXNDbGFzcyggYWN0aXZlQ2xhc3MgKSApIHtcbiAgICAgICAgICAgIGhpZGVQb3B1cCggJHRoaXMsIGFjdGl2ZUNsYXNzICk7XG4gICAgICAgICAgICBpZiggJC5pc0Z1bmN0aW9uKCBjYWxsYmFja09mZiApICkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrT2ZmKCAkdGhpcyApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJHRoaXMuYWRkQ2xhc3MoYWN0aXZlQ2xhc3MpO1xuICAgICAgICAgICAgJHRoaXMucGFyZW50KCkucmVtb3ZlQ2xhc3Mod2FzSW5hY3RpdmVDbGFzcyk7XG5cbiAgICAgICAgICAgICR0aGlzLnBhcmVudCgpLnNpYmxpbmdzKCkuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaGlkZVBvcHVwKCAkKCB0aGlzICkuY2hpbGRyZW4ocG9wVXBTZWxlY3RvciksIGFjdGl2ZUNsYXNzICk7XG4gICAgICAgICAgICAgICAgJCggdGhpcyApLmFkZENsYXNzKGluYWN0aXZlQ2xhc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAkdGhpcy5jaGlsZHJlbigpLnRyaWdnZXIoJ3Nob3dQb3B1cCcpO1xuXG4gICAgICAgICAgICBpZiggJC5pc0Z1bmN0aW9uKCBjYWxsYmFja09uICkgKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tPbiggJHRoaXMgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gKTtcbn07XG5cbmxldCBoaWRlUG9wdXAgPSBmdW5jdGlvbiggZWxlbWVudCwgYWN0aXZlQ2xhc3MgKSB7XG4gICAgZWxlbWVudC5yZW1vdmVDbGFzcyggYWN0aXZlQ2xhc3MgKTtcbiAgICBlbGVtZW50LmNoaWxkcmVuKCkudHJpZ2dlciggJ2hpZGVQb3B1cHMnICk7XG59O1xuXG5sZXQgaW5hY3RpdmVIb3ZlciA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgaW5hY3RpdmVDbGFzcywgd2FzSW5hY3RpdmVDbGFzcyApIHtcbiAgICAkKCBzZWxlY3RvciApLmhvdmVyKFxuICAgICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICggJCggdGhpcyApLmhhc0NsYXNzKCBpbmFjdGl2ZUNsYXNzICkgKSB7XG4gICAgICAgICAgICAgICAgJCggdGhpcyApLnJlbW92ZUNsYXNzKCBpbmFjdGl2ZUNsYXNzICk7XG4gICAgICAgICAgICAgICAgJCggdGhpcyApLmFkZENsYXNzKCB3YXNJbmFjdGl2ZUNsYXNzICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCAkKCB0aGlzICkuaGFzQ2xhc3MoIHdhc0luYWN0aXZlQ2xhc3MgKSApIHtcbiAgICAgICAgICAgICAgICAkKCB0aGlzICkucmVtb3ZlQ2xhc3MoIHdhc0luYWN0aXZlQ2xhc3MgKTtcbiAgICAgICAgICAgICAgICAkKCB0aGlzICkuYWRkQ2xhc3MoIGluYWN0aXZlQ2xhc3MgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSApO1xufTtcblxuZXhwb3J0IHsgZXhwYW5kYWJsZSwgaGlkZVBvcHVwLCBoaWRlUG9wdXBzLCBpbmFjdGl2ZUhvdmVyIH07XG4iLCJpbXBvcnQgU3dpcGVyIGZyb20gJ1N3aXBlcic7XG5pbXBvcnQgKiBhcyBwb3AgZnJvbSAnLi4vcG9wLWl0ZW0vX3BvcC1pdGVtJztcblxubGV0IHNjaGVkdWxlU3dpcGVyO1xuXG5jb25zdCBhY3RpdmVDbGFzcyA9ICdzZWN0aW9uLXNjaGVkdWxlX19wb3AtLWFjdGl2ZSc7XG5jb25zdCBpbmFjdGl2ZUNsYXNzID0gJ3NlY3Rpb24tc2NoZWR1bGVfX2l0ZW0tLWluYWN0aXZlJztcbmNvbnN0IHdhc0luYWN0aXZlQ2xhc3MgPSAnc2VjdGlvbi1zY2hlZHVsZV9faXRlbS0td2FzSW5hY3RpdmUnO1xuY29uc3QgcG9wVXBTZWxlY3RvciA9ICcuc2VjdGlvbi1zY2hlZHVsZV9fcG9wJztcblxubGV0IGluaXQgPSBmdW5jdGlvbigpIHtcbiAgICBpbml0U3dpcGVyKCQoJy5zZWN0aW9uLXNjaGVkdWxlJykuZGF0YSgnZmlyc3QnKSk7XG4gICAgcG9wLmluYWN0aXZlSG92ZXIoICcuc2VjdGlvbi1zY2hlZHVsZV9faXRlbScsIGluYWN0aXZlQ2xhc3MsIHdhc0luYWN0aXZlQ2xhc3MgKTtcbiAgICBwb3AuaGlkZVBvcHVwcyggYWN0aXZlQ2xhc3MgKTtcbiAgICBwb3AuZXhwYW5kYWJsZSggcG9wVXBTZWxlY3RvciwgYWN0aXZlQ2xhc3MsIGluYWN0aXZlQ2xhc3MsIHdhc0luYWN0aXZlQ2xhc3MsIHJlbW92ZVJlZHVjZWRPcGFjaXR5ICk7XG5cbn07XG5cbnZhciBpbml0U3dpcGVyID0gZnVuY3Rpb24oc2xpZGUpIHtcbiAgICBzY2hlZHVsZVN3aXBlciA9IG5ldyBTd2lwZXIoICcuc2VjdGlvbi1zY2hlZHVsZV9fY29udGFpbmVyJywge1xuICAgICAgICAvLyBPcHRpb25hbCBwYXJhbWV0ZXJzXG4gICAgICAgIC8vZGlyZWN0aW9uOiAndmVydGljYWwnLFxuICAgICAgICAvL2xvb3A6IHRydWUsXG4gICAgICAgIC8vIE5hdmlnYXRpb24gYXJyb3dzXG4gICAgICAgIG5leHRCdXR0b246ICcuc2VjdGlvbi1zY2hlZHVsZV9fYnV0dG9uLS1uZXh0JyxcbiAgICAgICAgcHJldkJ1dHRvbjogJy5zZWN0aW9uLXNjaGVkdWxlX19idXR0b24tLXByZXYnLFxuICAgICAgICBzbGlkZXNQZXJWaWV3OiA0LFxuICAgICAgICBpbml0aWFsU2xpZGU6IHNsaWRlID8gc2xpZGUgO
591iAwXG5cbiAgICB9ICk7XG59O1xuXG52YXIgcmVtb3ZlUmVkdWNlZE9wYWNpdHkgPSBmdW5jdGlvbigpIHtcbiAgICAkKCAnLicraW5hY3RpdmVDbGFzcyApLnJlbW92ZUNsYXNzKCBpbmFjdGl2ZUNsYXNzICk7XG59O1xuXG5leHBvcnQgeyBpbml0IH07XG4iLCJpbXBvcnQgJCBmcm9tICdqUXVlcnknO1xuXG5jb25zdCBpbml0ID0gZnVuY3Rpb24oKSB7XG5cblxuICAgICQoICcubmV3cycgKS5jbGljayggZnVuY3Rpb24oKXtcbiAgICAgICAgbGV0IHNvdXJjZSA9ICQoIHRoaXMgKS5kYXRhKCduZXdzLXNvdXJjZScpO1xuICAgICAgICBsZXQgcGFwZXIgPSAkKCB0aGlzICkuZGF0YSgncGFwZXInKTtcbiAgICAgICAgbG9hZChzb3VyY2UsIHBhcGVyKTtcbiAgICB9KTtcblxuICAgICQoJy5uZXdzX19tb3JlJykuY2xpY2soIGZ1bmN0aW9uKGUpe1xuICAgICAgICAvL2UucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgLy8kKCB0aGlzKS5jbG9zZXN0KCAnLm5ld3MnICkudHJpZ2dlcignY2xpY2snKTtcbiAgICB9ICk7XG5cbn07XG5cbmNvbnN0IGxvYWQgPSBmdW5jdGlvbihzb3VyY2UsIHBhcGVyKSB7XG4gICAgJC5nZXQoc291cmNlLCBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgIGxldCBjYWxsYmFja3MgPSB7XG4gICAgICAgICAgICAvLyduZXh0JzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAvLyAgICBsb2FkKCcvYmFzZS5jc3MnLCBwYXBlcik7XG4gICAgICAgICAgICAvL30sXG4gICAgICAgICAgICAvLydwcmV2JzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAvLyAgICBsb2FkKCcvYmFzZS5jc3MnLCBwYXBlcik7XG4gICAgICAgICAgICAvL31cbiAgICAgICAgfTtcbiAgICAgICAgJCggcGFwZXIgKS50cmlnZ2VyKCdzaG93UGFwZXInLCBbIGRhdGEuY29udGVudCwgY2FsbGJhY2tzIF0pO1xuICAgIH0sICdqc29uJyk7XG59O1xuXG5leHBvcnQgeyBpbml0IH07IiwiaW1wb3J0ICQgZnJvbSAnalF1ZXJ5JztcbmltcG9ydCB7aW5pdCBhcyBuZXdzSW5pdH0gZnJvbSAnLi4vbmV3cy9fbmV3cyc7XG5cbnZhciBpbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgbGV0IGJ1dHRvbiA9ICQoICcuc2VjdGlvbi1uZXdzX19tb3JlJyApO1xuICAgIGxldCBzb3VyY2UgPSBidXR0b24uZGF0YSgnc291cmNlJyk7XG4gICAgJCggYnV0dG9uLmNsaWNrKCBmdW5jdGlvbigpIHtcbiAgICAgICAgbGV0IGNvdW50ID0gJCgnLnNlY3Rpb24tbmV3c19faXRlbScpLmxlbmd0aDtcbiAgICAgICAgJC5wb3N0KHNvdXJjZSwgeyBmcm9tOiBjb3VudCB9LCBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAkKCcuc2VjdGlvbi1uZXdzX19jb250YWluZXInKS5hcHBlbmQoZGF0YSk7XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmKCQoJy5zZWN0aW9uLW5ld3NfX2l0ZW0nKS5sZW5ndGggJSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5ld3NJbml0KCk7XG4gICAgICAgICAgICAgICAgJCggJ2JvZHknKS50cmlnZ2VyKCdzZWN0aW9uc1Jlc2l6ZScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBidXR0b24uaGlkZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9ICkgKTtcbn07XG5cblxuXG5leHBvcnQgeyBpbml0IH07XG4iLCIvKipcbiAqIENvbXBvbmVudHMgc2NyaXB0cy5cbiAqL1xuXG4vKipcbiAqIExldCdzIGltcG9ydCBqUXVlcnkgZnJvbSBnbG9iYWwgbmFtZXNwYWNlLlxuICovXG5pbXBvcnQgJCBmcm9tICdqUXVlcnknO1xuXG5sZXQgaXNNZW51T3BlbiA9IGZhbHNlO1xubGV0IHRhcmdldHMgPSBbXTtcbmxldCBoYW1idXJnZXJIZWlnaHQgPSAwO1xubGV0IHdhc1Njcm9sbCA9IGZhbHNlO1xuXG52YXIgaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBoYW1idXJnZXJIZWlnaHQgPSAkKCAnLmhhbWJ1cmdlci1ib3gnICkub2Zmc2V0KCkudG9wO1xuICAgIC8vLyAvZmluZFRhcmdldHNGb3JCYWNrZ3JvdW5kQ2hhbmdlKCk7XG4gICAgYXR0YWNoTGlzdG5lcnNGb3JNZW51QnV0dG9uKCk7XG4gICAgdHJpZ2dlckJhY2tncm91bmRDaGFuZ2VFdmVudCgpO1xuICAgICQoIHdpbmRvdyApLnNjcm9sbCggdHJpZ2dlckJhY2tncm91bmRDaGFuZ2VFdmVudExpbWl0ZXIgKTtcblxuICAgICQoICdib2R5JyApLm9uKCdzZWN0aW9uc1Jlc2l6ZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICBmaW5kVGFyZ2V0c0ZvckJhY2tncm91bmRDaGFuZ2UoKTtcbiAgICB9KTtcblxuICAgIHNldEludGVydmFsKHRyaWdnZXJCYWNrZ3JvdW5kQ2hhbmdlRXZlbnQsIDMwMCk7XG5cbiAgICAkKCB3aW5kb3cgKS5sb2FkKGZpbmRUYXJnZXRzRm9yQmFja2dyb3VuZENoYW5nZSgpKTtcbn07XG5cblxuZnVuY3Rpb24gZmluZFRhcmdldHNGb3JCYWNrZ3JvdW5kQ2hhbmdlKCkge1xuICAgIHRhcmdldHMgPSBbXTtcbiAgICAkKCAnLnNlY3Rpb24tYmlvLCAuc2VjdGlvbi1zY2hlZHVsZSwgLnJlY29yZGluZ3MnICkuZWFjaCggZnVuY3Rpb24gKCkge1xuICAgICAgICB0YXJnZXRzLnB1c2goIHtcbiAgICAgICAgICAgIHBvaW50OiAkKCB0aGlzICkub2Zmc2V0KCkudG9wIC0gaGFtYnVyZ2VySGVpZ2h0LFxuICAgICAgICAgICAgZGFyazogdHJ1ZVxuICAgICAgICB9ICk7XG4gICAgfSApO1xuICAgICQoICcuc2VjdGlvbi1uZXdzLCAuc3BsYXNoLCAuc3BsYXNoLW5ld2NkJyApLmVhY2goIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGFyZ2V0cy5wdXNoKCB7XG4gICAgICAgICAgICBwb2ludDogJCggdGhpcyApLm9mZnNldCgpLnRvcCAtIGhhbWJ1cmdlckhlaWdodCxcbiAgICAgICAgICAgIGRhcms6IGZhbHNlXG4gICAgICAgIH0gKTtcbiAgICB9ICk7XG5cbiAgICB0YXJnZXRzLnNvcnQoIGZ1bmN0aW9uICggYSwgYiApIHtcbiAgICAgICAgcmV0dXJuIGEucG9pbnQgLSBiLnBvaW50O1xuICAgIH0gKTtcblxufVxuXG5mdW5jdGlvbiB0cmlnZ2VyQmFja2dyb3VuZENoYW5nZUV2ZW50TGltaXRlcigpIHtcbiAgICB3YXNTY3JvbGwgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiB0cmlnZ2VyQmFja2dyb3VuZENoYW5nZUV2ZW50KCkge1xuICAgIGlmKHdhc1Njcm9sbCkge1xuICAgICAgICB3YXNTY3JvbGwgP
591SBmYWxzZTtcbiAgICAgICAgbGV0IHRvcCA9ICQoIHdpbmRvdyApLnNjcm9sbFRvcCgpO1xuXG4gICAgICAgIGZvciAoIHZhciB0ID0gMDsgdCA8IHRhcmdldHMubGVuZ3RoOyB0ID0gdCArIDEgKSB7XG4gICAgICAgICAgICBpZiAoIHRvcCA+PSB0YXJnZXRzWyB0IF0ucG9pbnQgJiYgKCB0ICsgMSA9PT0gdGFyZ2V0cy5sZW5ndGggfHwgdG9wIDwgdGFyZ2V0c1sgdCArIDEgXS5wb2ludCApICkge1xuICAgICAgICAgICAgICAgICQoICcubWVudScgKS50cmlnZ2VyKCAnYmFja2dyb3VkQ2hhbmdlJywgdGFyZ2V0c1sgdCBdLmRhcmsgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGF0dGFjaExpc3RuZXJzRm9yTWVudUJ1dHRvbigpIHtcbiAgICAkKCAnLm1lbnVfX2J1dHRvbiwgLm1lbnVfX2l0ZW0nICkub24oICdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJCggJy5tZW51X19wb3B1cCcgKS50b2dnbGVDbGFzcyggJ21lbnVfX3BvcHVwLS1hY3RpdmUnICk7XG4gICAgICAgICQoICcubWVudV9fYnV0dG9uJyApLnRvZ2dsZUNsYXNzKCAnaXMtYWN0aXZlJyApO1xuICAgICAgICAkKCAnLmhhbWJ1cmdlci1sYWJlbCcgKS50b2dnbGUoKTtcbiAgICAgICAgJCggJy5oYW1idXJnZXItaW5uZXInICkudG9nZ2xlQ2xhc3MoICdoYW1idXJnZXItaW5uZXItLXdoaXRlLWNsaWNrJyApO1xuXG5cbiAgICAgICAgaXNNZW51T3BlbiA9ICFpc01lbnVPcGVuO1xuICAgIH0gKTtcblxuICAgICQoICcubWVudScgKS5vbiggJ2JhY2tncm91ZENoYW5nZScsIGZ1bmN0aW9uICggZXZlbnQsIGlzRGFyayApIHtcbiAgICAgICAgaWYgKCBpc01lbnVPcGVuID09PSBmYWxzZSApIHtcbiAgICAgICAgICAgIGlmICggaXNEYXJrICkge1xuICAgICAgICAgICAgICAgICQoICcuaGFtYnVyZ2VyLWlubmVyJyApLmFkZENsYXNzKCAnaGFtYnVyZ2VyLWlubmVyLS13aGl0ZScgKTtcbiAgICAgICAgICAgICAgICAkKCAnLmhhbWJ1cmdlci1sYWJlbCcgKS5hZGRDbGFzcyggJ2hhbWJ1cmdlci1sYWJlbC0td2hpdGUnICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICQoICcuaGFtYnVyZ2VyLWlubmVyJyApLnJlbW92ZUNsYXNzKCAnaGFtYnVyZ2VyLWlubmVyLS13aGl0ZScgKTtcbiAgICAgICAgICAgICAgICAkKCAnLmhhbWJ1cmdlci1sYWJlbCcgKS5yZW1vdmVDbGFzcyggJ2hhbWJ1cmdlci1sYWJlbC0td2hpdGUnICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9ICk7XG59XG5cblxuZXhwb3J0IHsgaW5pdCB9O1xuIiwiaW1wb3J0ICQgZnJvbSAnalF1ZXJ5JztcblxudmFyIGluaXQgPSBmdW5jdGlvbigpIHtcblxuXG4gICAgJCggJy5zZWN0aW9uLWJpb19fbW9yZS1idXR0b24nICkuY2xpY2soIGZ1bmN0aW9uKCkge1xuICAgICAgICAkKCAnLnNlY3Rpb24tYmlvX19tb3JlJyApLnRvZ2dsZUNsYXNzKCAnc2VjdGlvbi1iaW9fX21vcmUtLWhpZGRlbicgKTtcbiAgICAgICAgJCggdGhpcyApLmhpZGUoKTtcbiAgICB9ICk7XG5cblxufTtcblxuXG5cbmV4cG9ydCB7IGluaXQgfTtcbiIsImltcG9ydCAkIGZyb20gJ2pRdWVyeSc7XG5cbmNvbnN0IGZsaXBwZWRDbGFzcyA9ICdwaWN0dXJlLWZsaXBfX3NpZGUtLWZsaXBwZWQnO1xuXG52YXIgaW5pdCA9IGZ1bmN0aW9uICgpIHtcblxuICAgICQoICcucGljdHVyZS1mbGlwX19jb250YWluZXInICkub24oICdjbGljaycsIGZ1bmN0aW9uKCBlICkge1xuICAgICAgICBpZiAoICEkKCBlLnRhcmdldCApLmhhc0NsYXNzKCAnYnV0dG9uJyApICkge1xuICAgICAgICAgICAgbGV0IHRoYXQgPSAkKCB0aGlzICk7XG4gICAgICAgICAgICBpZih0aGF0Lmhhc0NsYXNzKCBmbGlwcGVkQ2xhc3MgKSkge1xuICAgICAgICAgICAgICAgIHRoYXQucmVtb3ZlQ2xhc3MoIGZsaXBwZWRDbGFzcyApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkKCAnLnBpY3R1cmUtZmxpcF9fY29udGFpbmVyJykudHJpZ2dlcigndHVyblRvcCcsIFsgdGhhdCBdKTtcbiAgICAgICAgICAgICAgICB0aGF0LmFkZENsYXNzKCBmbGlwcGVkQ2xhc3MgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gKTtcblxuICAgICQoICcucGljdHVyZS1mbGlwX19jb250YWluZXInKS5vbigndHVyblRvcCcsIGZ1bmN0aW9uKCBlLCBleGNlcHQgKSB7XG4gICAgICAgIC8vaWYoJCggdGhpcyApICE9IGV4Y2VwdClcbiAgICAgICAgICAgICQoIHRoaXMgKS5yZW1vdmVDbGFzcyggZmxpcHBlZENsYXNzICk7XG4gICAgfSlcblxufTtcblxuZXhwb3J0IHsgaW5pdCB9O1xuIiwiaW1wb3J0IFN3aXBlciBmcm9tICdTd2lwZXInO1xuaW1wb3J0ICogYXMgcG9wIGZyb20gJy4uL3BvcC1pdGVtL19wb3AtaXRlbSc7XG5cblxuY29uc3QgZWxlbWVudE5hbWUgPSAnc3RhZ2UtcGhvdG9zJztcblxuY29uc3QgYWN0aXZlQ2xhc3MgPSBlbGVtZW50TmFtZSArICdfX3BvcC0tYWN0aXZlJztcbmNvbnN0IGluYWN0aXZlQ2xhc3MgPSBlbGVtZW50TmFtZSArICdfX2l0ZW0tLWluYWN0aXZlJztcbmNvbnN0IHdhc0luYWN0aXZlQ2xhc3MgPSBlbGVtZW50TmFtZSArICdfX2l0ZW0tLXdhc0luYWN0aXZlJztcbmNvbnN0IHBvcFVwU2VsZWN0b3IgPSAnLicgKyBlbGVtZW50TmFtZSArICdfX3BvcCc7XG5cbmNvbnN0IHZpZXdFbGVtZW50Q2xhc3MgPSAnc3RhZ2UtcGhvdG9zX192aWV3JztcbmxldCB2aWV3O1xubGV0IHBob3Rvc1N3aXBlcjtcbmxldCBnYWxsZXJ5VXJsO1xuXG5sZXQgb3BlbmVkID0gZmFsc2U7XG5cbmxldCBpbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgaW5pdFN3aXBlcigpO1xuICAgIHZpZXcgPSAkKCAnLicgKyB2aWV3RWxlbWVudENsYXNzICk7XG4gICAgcG9wLmluYWN0aXZlSG92ZXIoIHBvcFVwU2VsZWN0b3IsIGluYWN0aXZlQ2xhc3MsIHdhc0luYWN0aXZlQ2xhc3MgKTtcbiAgICAvL3BvcC5oaWRlUG9wdXBzKCBhY3RpdmVDbGFzcyApO1xuICAgIHBvcC5leHBhbmRhYmxlKCBwb3BVcFNlbGVjdG9yLCBhY3RpdmVDbGFzcywgd2FzSW5hY3RpdmVDbGFzcywgbnVsbCwgY2xvc2VHYWxsZXJ5LCBjbGlja0dhbGxlcnkgKTtcbiAgICAvL2F0dGFjaENsaWNrR2FsbGVyeSgpO1xuICAgIGdhbGxlcnlVcmwgPSAkKCAnLicgKyBlbGVtZW50TmFtZSApLmRhdGEoICdhbGJ1bS1zb3VyY2UnICk7XG59O1xuXG52YXIgaW5pdFN3aXBlciA9IGZ1bmN0aW9uKCkge1xuICAgIGxldCBnYWxlcmllc1N3aXBlciA9IG5ldyBTd2lwZXIoICcuc3RhZ2UtcGhvdG9zX19jb250YWluZXInLCB7XG5cbiAgICAgICAgbmV4dEJ1dHRvbjogJy5zdGFnZS1waG90b3NfX2J1dHRvbi1saXN0LS1wcmV2JyxcbiAgICAgICAgcHJldkJ1dHRvbjogJy5zdGFnZS1waG90b3NfX2J1dHRvbi1saXN0LS1uZXh0JyxcbiAgICAgICAgc2xpZGVzUGVyVmlldzogNCxcbiAgICAgICAgc3B
591hY2VCZXR3ZWVuOiAxMFxuXG4gICAgfSApO1xuXG4gICAgcGhvdG9zU3dpcGVyID0gbmV3IFN3aXBlciggJy5zdGFnZS1waG90b3NfX3ZpZXcnLCB7XG4gICAgICAgIG5leHRCdXR0b246ICcuc3RhZ2UtcGhvdG9zX19idXR0b24tdmlldy0tcHJldicsXG4gICAgICAgIHByZXZCdXR0b246ICcuc3RhZ2UtcGhvdG9zX19idXR0b24tdmlldy0tbmV4dCcsXG4gICAgICAgIHNsaWRlc1BlclZpZXc6ICdhdXRvJyxcbiAgICAgICAgc3BhY2VCZXR3ZWVuOiAxMCxcbiAgICAgICAgbGF6eUxvYWRpbmc6IHRydWUsXG4gICAgICAgIGxhenlMb2FkaW5nSW5QcmV2TmV4dEFtb3VudDogMlxuICAgICAgICAvL2NlbnRlcmVkU2xpZGVzOiB0cnVlXG4gICAgfSApO1xufTtcblxuY29uc3QgbG9hZEdhbGxlcnkgPSBmdW5jdGlvbiggZGlyICkge1xuICAgICQuZ2V0KCBnYWxsZXJ5VXJsICsgZGlyLCBmdW5jdGlvbiggZGF0YSApIHtcbiAgICAgICAgJCggJy5zdGFnZS1waG90b3NfX2J1dHRvbi12aWV3JyApLmNzcygndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7XG4gICAgICAgIG9wZW5lZCA9IHRydWU7XG4gICAgICAgIGlmKHBob3Rvc1N3aXBlcikge1xuICAgICAgICAgICAgcGhvdG9zU3dpcGVyLnJlbW92ZUFsbFNsaWRlcygpO1xuICAgICAgICAgICAgcGhvdG9zU3dpcGVyLmFwcGVuZFNsaWRlKGRhdGEpO1xuICAgICAgICAgICAgdmlldy5hZGRDbGFzcyh2aWV3RWxlbWVudENsYXNzICsgJy0tb3BlbicpO1xuXG4gICAgICAgICAgICAvLyBTY3JvbGwgd2hlbiBhbmltYXRpb24gb2YgaGVpZ2h0IGlzIG92ZXJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoIHNjcm9sbFRvU2VjdGlvbkVuZCwgMTAwMCApO1xuXG4gICAgICAgICAgICAkKCB2aWV3ICkuaW1hZ2VzTG9hZGVkKCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAocGhvdG9zU3dpcGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHBob3Rvc1N3aXBlci51cGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ICk7XG4gICAgICAgIH1cbiAgICB9KVxufTtcblxuY29uc3Qgc2Nyb2xsVG9TZWN0aW9uRW5kID0gZnVuY3Rpb24oKSB7XG4gICAgbGV0IHNlY3Rpb24gPSAkKCAnLicgKyBlbGVtZW50TmFtZSApO1xuICAgICQoIHdpbmRvdyApLnNjcm9sbFRvKCBzZWN0aW9uLm9mZnNldCgpLnRvcCArIHNlY3Rpb24ub3V0ZXJIZWlnaHQoKSAtICQoIHdpbmRvdyApLmlubmVySGVpZ2h0KCksIDUwMCk7XG59XG5cbmNvbnN0IGNsb3NlR2FsbGVyeSA9IGZ1bmN0aW9uICggdGhhdCApIHtcbiAgICAkKCAnLnN0YWdlLXBob3Rvc19fYnV0dG9uLXZpZXcnICkuY3NzKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuICAgIG9wZW5lZCA9IGZhbHNlO1xuICAgIHBob3Rvc1N3aXBlci5yZW1vdmVBbGxTbGlkZXMoKTtcbiAgICB2aWV3LnJlbW92ZUNsYXNzKHZpZXdFbGVtZW50Q2xhc3MgKyAnLS1vcGVuJyk7XG59O1xuXG5jb25zdCBjbGlja0dhbGxlcnkgPSBmdW5jdGlvbiggdGhhdCApIHtcbiAgICBsb2FkR2FsbGVyeSggdGhhdC5kYXRhKCdhbGJ1bScpICk7XG59O1xuXG5cbmV4cG9ydCB7IGluaXQgfTtcbiIsIi8qanNoaW50IC1XMDMxICovXG5pbXBvcnQgU3dpcGVyIGZyb20gJ1N3aXBlcic7XG5cbmxldCBpbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgaW5pdFN3aXBlcigpO1xufTtcbmNvbnN0IGdhbGxlcnlTZWxlY3RvciA9ICcucG9ydHJhaXRzX19nYWxsZXJ5JztcbnZhciBpbml0U3dpcGVyID0gZnVuY3Rpb24oKSB7XG4gICAgbGV0IHBvcnRyYWl0c1N3aXBlciA9IG5ldyBTd2lwZXIoIGdhbGxlcnlTZWxlY3Rvciwge1xuICAgICAgICBuZXh0QnV0dG9uOiAnLnBvcnRyYWl0c19fYnV0dG9uLS1wcmV2JyxcbiAgICAgICAgcHJldkJ1dHRvbjogJy5wb3J0cmFpdHNfX2J1dHRvbi0tbmV4dCcsXG4gICAgICAgIHNsaWRlc1BlclZpZXc6ICdhdXRvJyxcbiAgICAgICAgbGF6eUxvYWRpbmc6IHRydWUsXG4gICAgICAgIGxhenlMb2FkaW5nSW5QcmV2TmV4dEFtb3VudDogMlxuICAgIH0gKTtcblxuICAgICQoIGdhbGxlcnlTZWxlY3RvcikuaW1hZ2VzTG9hZGVkKCBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYocG9ydHJhaXRzU3dpcGVyKSB7XG4gICAgICAgICAgICBwb3J0cmFpdHNTd2lwZXIudXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9ICk7XG59O1xuXG5cbmV4cG9ydCB7IGluaXQgfTtcbiIsImltcG9ydCAkIGZyb20gJ2pRdWVyeSc7XG5pbXBvcnQgU3dpcGVyIGZyb20gJ1N3aXBlcic7XG5pbXBvcnQgKiBhcyBwb3AgZnJvbSAnLi4vcG9wLWl0ZW0vX3BvcC1pdGVtJztcblxuY29uc3QgZWxlbWVudE5hbWUgPSAndmlkZW8nO1xuXG5jb25zdCBhY3RpdmVDbGFzcyA9IGVsZW1lbnROYW1lICsgJ19fcG9wLS1hY3RpdmUnO1xuY29uc3QgaW5hY3RpdmVDbGFzcyA9IGVsZW1lbnROYW1lICsgJ19faXRlbS0taW5hY3RpdmUnO1xuY29uc3Qgd2FzSW5hY3RpdmVDbGFzcyA9IGVsZW1lbnROYW1lICsgJ19faXRlbS0td2FzSW5hY3RpdmUnO1xuY29uc3QgcG9wVXBTZWxlY3RvciA9ICcuJyArIGVsZW1lbnROYW1lICsgJ19fcG9wJztcblxudmFyIG9wZW5lZCA9IGZhbHNlO1xuXG5jb25zdCBpbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgaW5pdFN3aXBlcigpO1xuICAgIHBvcC5pbmFjdGl2ZUhvdmVyKCBwb3BVcFNlbGVjdG9yLCBpbmFjdGl2ZUNsYXNzLCB3YXNJbmFjdGl2ZUNsYXNzICk7XG4gICAgLy9wb3AuaGlkZVBvcHVwcyggYWN0aXZlQ2xhc3MgKTtcbiAgICBwb3AuZXhwYW5kYWJsZSggcG9wVXBTZWxlY3RvciwgYWN0aXZlQ2xhc3MsIHdhc0luYWN0aXZlQ2xhc3MsIG51bGwsIGhpZGVWaWRlbywgc2hvd1ZpZGVvICk7XG5cbn07XG5cbnZhciBpbml0U3dpcGVyID0gZnVuY3Rpb24oKSB7XG4gICAgbGV0IHZpZGVvc1N3aXBlciA9IG5ldyBTd2lwZXIoICcudmlkZW9fX2NvbnRhaW5lcicsIHtcbiAgICAgICAgbmV4dEJ1dHRvbjogJy52aWRlb19fYnV0dG9uLS1wcmV2JyxcbiAgICAgICAgcHJldkJ1dHRvbjogJy52aWRlb19fYnV0dG9uLS1uZXh0JyxcbiAgICAgICAgc2xpZGVzUGVyVmlldzogNCxcbiAgICAgICAgc3BhY2VCZXR3ZWVuOiAxMFxuXG4gICAgfSApO1xufTtcblxuY29uc3Qgc2hvd1ZpZGVvID0gZnVuY3Rpb24oIHRoYXQgKSB7XG4gICAgaWYoICFvcGVuZWQgKSB7XG4gICAgICAgICQoICcudmlkZW9fX3ZpZXcnICkuYWRk
591Q2xhc3MoICd2aWRlb19fdmlldy0tb3BlbicgKTtcbiAgICB9XG4gICAgb3BlbmVkID0gdHJ1ZTtcbiAgICBsZXQgdmlkZW8gPSB0aGF0LmRhdGEoJ3ZpZGVvJyk7XG4gICAgdmlkZW8gKz0gJyZhdXRvcGxheT0xJztcbiAgICBsZXQgd3JhcHBlciA9ICQoJy52aWRlb19faWZyYW1lLXdyYXBwZXInKTtcbiAgICB3cmFwcGVyLmh0bWwoJzxpZnJhbWUgY2xhc3M9XCJ2aWRlb19faWZyYW1lXCIgc3JjPVwiJyArIHZpZGVvICsgJ1wiIGZyYW1lYm9yZGVyPVwiMFwiIGFsbG93ZnVsbHNjcmVlbj48L2lmcmFtZT4nKTtcbiAgICAkKCB3aW5kb3cgKS5zY3JvbGxUbyggd3JhcHBlci5vZmZzZXQoKS50b3AgKyB3cmFwcGVyLm91dGVySGVpZ2h0KCkgLSAkKCB3aW5kb3cpLmlubmVySGVpZ2h0KCkgKyAxMCwgODAwKTtcbn07XG5cbmNvbnN0IGhpZGVWaWRlbyA9IGZ1bmN0aW9uKCkge1xuICAgIG9wZW5lZCA9IGZhbHNlO1xuICAgICQoICcudmlkZW9fX3ZpZXcnICkucmVtb3ZlQ2xhc3MoICd2aWRlb19fdmlldy0tb3BlbicgKTtcbiAgICAkKCcudmlkZW9fX2lmcmFtZS13cmFwcGVyJykuaHRtbCgnJyk7XG59XG5cbmV4cG9ydCB7IGluaXQgfTtcbiIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb21tb24gaGVscGVyc1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IGluaXQgYXMgaW5pdFBvbHlmaWxscyB9IGZyb20gJy4vY29tbW9ucy9fcG9seWZpbGxzJztcbmluaXRQb2x5ZmlsbHMoKTtcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb21wb25lbnRzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgICogYXMgcGFwZXIgIGZyb20gJy4vY29tcG9uZW50cy9wYXBlci9fcGFwZXInO1xucGFwZXIubGlzdGVuKCk7XG5cbmltcG9ydCB7IGluaXQgYXMgaW5pdFNjaGVkdWxlSXRlbSB9IGZyb20gJy4vY29tcG9uZW50cy9zY2hlZHVsZS1pdGVtL19zY2hlZHVsZS1pdGVtJztcbmluaXRTY2hlZHVsZUl0ZW0oKTtcblxuaW1wb3J0IHsgaW5pdCBhcyBpbml0U2NoZWR1bGUgfSBmcm9tICcuL2NvbXBvbmVudHMvc2VjdGlvbi1zY2hlZHVsZS9fc2VjdGlvbi1zY2hlZHVsZSc7XG5pbml0U2NoZWR1bGUoKTtcblxuaW1wb3J0IHsgaW5pdCBhcyBpbml0TmV3cyB9IGZyb20gJy4vY29tcG9uZW50cy9uZXdzL19uZXdzJztcbmluaXROZXdzKCk7XG5cbmltcG9ydCB7IGluaXQgYXMgaW5pdE5ld3NNb3JlIH0gZnJvbSAnLi9jb21wb25lbnRzL3NlY3Rpb24tbmV3cy9fc2VjdGlvbi1uZXdzJztcbmluaXROZXdzTW9yZSgpO1xuXG5pbXBvcnQgeyBpbml0IGFzIGluaXRNZW51IH0gZnJvbSAnLi9jb21wb25lbnRzL21lbnUvX21lbnUnO1xuaW5pdE1lbnUoKTtcblxuaW1wb3J0IHsgaW5pdCBhcyBpbml0TW9yZSB9IGZyb20gJy4vY29tcG9uZW50cy9zZWN0aW9uLWJpby9fc2VjdGlvbi1iaW8nO1xuaW5pdE1vcmUoKTtcblxuaW1wb3J0IHsgaW5pdCBhcyBpbml0RmxpcENhcmQgfSBmcm9tICcuL2NvbXBvbmVudHMvaW1hZ2UtZmxpcHBlZC9faW1hZ2UtZmxpcHBlZCc7XG5pbml0RmxpcENhcmQoKTtcblxuaW1wb3J0IHsgaW5pdCBhcyBpbml0U3RhZ2VQaG90b3MgfSBmcm9tICcuL2NvbXBvbmVudHMvc3RhZ2UtcGhvdG9zL19zdGFnZS1waG90b3MnO1xuaW5pdFN0YWdlUGhvdG9zKCk7XG5cbmltcG9ydCB7IGluaXQgYXMgaW5pdFBvcnRyYWl0cyB9IGZyb20gJy4vY29tcG9uZW50cy9wb3J0cmFpdHMvX3BvcnRyYWl0cyc7XG5pbml0UG9ydHJhaXRzKCk7XG5cbmltcG9ydCB7IGluaXQgYXMgaW5pdFZpZGVvIH0gZnJvbSAnLi9jb21wb25lbnRzL3ZpZGVvL192aWRlbyc7XG5pbml0VmlkZW8oKTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIExheW91dHNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4iXSwibmFtZXMiOlsiJCIsImluaXQiLCJhY3RpdmVDbGFzcyIsImluYWN0aXZlQ2xhc3MiLCJ3YXNJbmFjdGl2ZUNsYXNzIiwicG9wVXBTZWxlY3RvciIsImluaXRTd2lwZXIiLCJlbGVtZW50TmFtZSIsIm9wZW5lZCIsImluaXRQb2x5ZmlsbHMiLCJwYXBlci5saXN0ZW4iLCJpbml0U2NoZWR1bGVJdGVtIiwiaW5pdFNjaGVkdWxlIiwiaW5pdE5ld3MiLCJpbml0TmV3c01vcmUiLCJpbml0TWVudSIsImluaXRNb3JlIiwiaW5pdEZsaXBDYXJkIiwiaW5pdFN0YWdlUGhvdG9zIiwiaW5pdFBvcnRyYWl0cyIsImluaXRWaWRlbyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBYUEsRUFBQSxJQUFJLFdBQVcsU0FBWCxRQUFXLEdBQVc7QUFDdEIsRUFBQSxNQUFJLFNBQUosQ0FEc0I7QUFFdEIsRUFBQSxNQUFHLGtCQUFILEVBQXdCLElBQXhCLENBQThCLFlBQVc7QUFDckMsRUFBQSxnQkFBWUEsSUFBRyxJQUFILENBQVosQ0FEcUM7QUFFckMsRUFBQSxjQUFVLElBQVYsQ0FBZ0IsS0FBaEIsRUFBdUIsVUFBVSxJQUFWLENBQWdCLEtBQWhCLEVBQXdCLE9BQXhCLENBQWlDLEtBQWpDLEVBQXdDLEtBQXhDLENBQXZCLEVBRnFDO0tBQVgsQ0FBOUIsQ0FGc0I7R0FBWDs7Ozs7O0FBWWYsRUFBQSxJQUFJLE9BQU8sU0FBUCxJQUFPLEdBQVc7Ozs7QUFJbEIsRUFBQSxNQUFLLFVBQVUsR0FBVixFQUFnQjs7OztBQUlqQixFQUFBLG9CQUppQjtLQUFyQixNQUtPOzs7O0FBSUgsRUFBQSxlQUpHO0tBTFA7R0FKTzs7RUN2QlgsSUFBSSxRQUFRQSxJQUFFLFFBQUYsQ0FBUjtBQUNKLEVBQUEsSUFBSSxZQUFZQSxJQUFFLGNBQUYsQ0FBWjtBQUNKLEVBQUEsSUFBSSxlQUFlQSxJQUFFLGlCQUFGLENBQWY7O0FBRUosRUFBQSxJQUFJLFNBQVMsS0FBVDs7QUFFSixFQUFBLElBQUksWUFBWSxDQUFaOztBQUdKLEVBQUEsSUFBTSxPQUFPLFNBQVAsSUFBTyxHQUFXO0FBQ3BCLEVBQUEsUUFBTSxTQUFTLEVBQVQ7OztBQURjLEVBQUEsYUFJaEIsR0FBWUEsSUFBRyxNQUFILEVBQVksU0FBWixFQUFaOzs7QUFKZ0IsRUFBQSxhQU9wQixDQUFVLEdBQVYsQ0FBYyxZQUFkLEVBQTRCLFFBQTVCLEVBUG9CO0FBUXBCLEVBQUEsY0FBVSxHQUFWLENBQWMsU0FBZCxFQUF5QixPQUF6QixFQVJvQ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

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.