1$(document).ready(function () { 2 if ($("body").scrollTop() > 0) { 3 $("nav.navbar").addClass("navbar--scrolled"); 4 } else { 5 $("nav.navbar").removeClass("navbar--scrolled"); 6 } 7}); 8 9(function () { 10 function r(e, n, t) { 11 function o(i, f) { 12 if (!n[i]) { 13 if (!e[i]) { 14 var c = "function" == typeof require && require; 15 if (!f && c) return c(i, !0); 16 if (u) return u(i, !0); 17 var a = new Error("Cannot find module '" + i + "'"); 18 throw ((a.code = "MODULE_NOT_FOUND"), a); 19 } 20 var p = (n[i] = { exports: {} }); 21 e[i][0].call( 22 p.exports, 23 function (r) { 24 var n = e[i][1][r]; 25 return o(n || r); 26 }, 27 p, 28 p.exports, 29 r, 30 e, 31 n, 32 t 33 ); 34 } 35 return n[i].exports; 36 } 37 for ( 38 var u = "function" == typeof require && require, i = 0; 39 i < t.length; 40 i++ 41 ) 42 o(t[i]); 43 return o; 44 } 45 return r; 46})()( 47 { 48 1: [ 49 function (require, module, exports) { 50 "use strict"; 51 52 var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); 53 54 Object.defineProperty(exports, "__esModule", { 55 value: true, 56 }); 57 exports.Accordion = void 0; 58 59 var _classCallCheck2 = _interopRequireDefault( 60 require("@babel/runtime/helpers/classCallCheck") 61 ); 62 63 var _defineProperty2 = _interopRequireDefault( 64 require("@babel/runtime/helpers/defineProperty") 65 ); 66 67 function ownKeys(object, enumerableOnly) { 68 var keys = Object.keys(object); 69 if (Object.getOwnPropertySymbols) { 70 var symbols = Object.getOwnPropertySymbols(object); 71 if (enumerableOnly) { 72 symbols = symbols.filter(function (sym) { 73 return Object.getOwnPropertyDescriptor(object, sym).enumerable; 74 }); 75 } 76 keys.push.apply(keys, symbols); 77 } 78 return keys; 79 } 80 81 function _objectSpread(target) { 82 for (var i = 1; i < arguments.length; i++) { 83 var source = arguments[i] != null ? arguments[i] : {}; 84 if (i % 2) { 85 ownKeys(Object(source), true).forEach(function (key) { 86 (0, _defineProperty2.default)(target, key, source[key]); 87 }); 88 } else if (Object.getOwnPropertyDescriptors) { 89 Object.defineProperties( 90 target, 91 Object.getOwnPropertyDescriptors(source) 92 ); 93 } else { 94 ownKeys(Object(source)).forEach(function (key) { 95 Object.defineProperty( 96 target, 97 key, 98 Object.getOwnPropertyDescriptor(source, key) 99 ); 100 }); 101 } 102 } 103 return target; 104 } 105 106 /** 107 * 108 ***** RELATED IMPORTS ***** 109 * 110 * assets/sass/components/_accordion.scss 111 * 112 ***** USAGE ***** 113 * 114 * HTML 115 * 116 * 117 * <div class="accordion"> 118 * <div class="accordion__toggle"> 119 * Title 120 * </div> 121 * <div class="accordion__content-wrapper"> 122 * <div class="accordion__content-wrapper__content"> 123 * <!-- content --> 124 * </div> 125 * </div> 126 * </div> 127 * 128 * 129 * JAVASCRIPT 130 * 131 * new Accordion(element, OPTIONS); 132 * 133 * -- element: the html element to convert to this component 134 * -- OPTIONS: component options, check DEFAULT_OPTIONS below 135 * 136 ***** ACCESSIBILITY TO THE CLASS **** 137 * 138 * const storedAccordion = new Accordion(); 139 * document.querySelector("#accordion-id").Accordion; 140 * 141 ***** PUBLIC METHODS ***** 142 * 143 * isActive() - returns true/false depending on the accordion state 144 * toggleActive(boolean) - changes the accordion state 145 * 146 * 147 */ 148 var DEFAULT_OPTIONS = { 149 enableIcon: true, 150 }; 151 152 var Accordion = function Accordion(element, options) { 153 var _this = this; 154 155 (0, _classCallCheck2.default)(this, Accordion); 156 (0, _defineProperty2.default)(this, "isActive", function () { 157 return _this.element.classList.contains("accordion--active"); 158 }); 159 (0, _defineProperty2.default)(this, "toggleActive", function () { 160 if (_this.isActive()) 161 _this.element.classList.remove("accordion--active"); 162 else _this.element.classList.add("accordion--active"); 163 164 _this.refreshHeight(); 165 }); 166 (0, _defineProperty2.default)(this, "refreshHeight", function () { 167 var isActive = _this.isActive(); 168 169 var contentHeight = _this.content.offsetHeight; 170 171 if (isActive) { 172 _this.wrapper.style.height = "".concat(contentHeight, "px"); 173 setTimeout(function () { 174 _this.wrapper.style.height = "auto"; 175 }, 300); 176 } else { 177 _this.wrapper.style.height = "".concat(contentHeight, "px"); 178 setTimeout(function () { 179 return (_this.wrapper.style.height = 0); 180 }, 0); 181 } 182 }); 183 this.options = _objectSpread( 184 _objectSpread({}, DEFAULT_OPTIONS), 185 options 186 ); 187 if (element.Accordion) return; 188 this.element = element; 189 this.toggleZone = element.querySelector(".accordion__toggle"); 190 this.wrapper = element.querySelector(".accordion__content-wrapper"); 191 this.content = element.querySelector( 192 ".accordion__content-wrapper__content" 193 ); 194 this.element.Accordion = this; 195 this.element.classList.add("accordion"); 196 this.refreshHeight(); 197 198 if (this.options.enableIcon) { 199 this.toggleZone.innerHTML += 200 '\n <svg class="accordion__toggle__icon" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n <path fill-rule="evenodd" clip-rule="evenodd" d="M9.25105 6.25105C9.58579 5.91632 10.1285 5.91632 10.4632 6.25105L15.6061 11.3939C15.9408 11.7286 15.9408 12.2714 15.6061 12.6061L10.4632 17.7489C10.1285 18.0837 9.58579 18.0837 9.25105 17.7489C8.91632 17.4142 8.91632 16.8715 9.25105 16.5368L13.7878 12L9.25105 7.46323C8.91632 7.1285 8.91632
2006.58579 9.25105 6.25105Z" fill="currentColor"/>\n <path fill-rule="evenodd" clip-rule="evenodd" d="M12 22.5C17.799 22.5 22.5 17.799 22.5 12C22.5 6.20101 17.799 1.5 12 1.5C6.20101 1.5 1.5 6.20101 1.5 12C1.5 17.799 6.20101 22.5 12 22.5ZM12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24Z" fill="currentColor"/>\n </svg>\n '; 201 } 202 203 this.toggleZone.parentNode.addEventListener("click", function () { 204 _this.toggleActive(); 205 }); 206 }; 207 208 exports.Accordion = Accordion; 209 }, 210 { 211 "@babel/runtime/helpers/classCallCheck": 4, 212 "@babel/runtime/helpers/defineProperty": 6, 213 "@babel/runtime/helpers/interopRequireDefault": 7, 214 }, 215 ], 216 2: [ 217 function (require, module, exports) { 218 "use strict"; 219 220 var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); 221 222 Object.defineProperty(exports, "__esModule", { 223 value: true, 224 }); 225 exports.NavbarView = void 0; 226 227 var _classCallCheck2 = _interopRequireDefault( 228 require("@babel/runtime/helpers/classCallCheck") 229 ); 230 231 var _createClass2 = _interopRequireDefault( 232 require("@babel/runtime/helpers/createClass") 233 ); 234 235 var _defineProperty2 = _interopRequireDefault( 236 require("@babel/runtime/helpers/defineProperty") 237 ); 238 239 var _accordion = require("./accordion"); 240 241 var _languagePreference = require("../language-preference"); 242 243 $(function () { 244 var navbarView = new NavbarView(); 245 navbarView.bindOnLanguageSelection(function (language) { 246 _languagePreference.LanguagePreference.storeLanguage( 247 language.toLowerCase() 248 ); 249 }); 250 }); 251 252 var NavbarView = /*#__PURE__*/ (function () { 253 function NavbarView() { 254 var _this = this; 255 256 (0, _classCallCheck2.default)(this, NavbarView); 257 (0, _defineProperty2.default)( 258 this, 259 "searchKeyPress", 260 function (ev) { 261 switch (ev.key) { 262 case "Escape": 263 _this.toggleSearch(false); 264 265 break; 266 267 case "Enter": 268 _this.doSearch(); 269 270 break; 271 272 default: 273 break; 274 } 275 } 276 ); 277 (0, _defineProperty2.default)(this, "doSearch", function () { 278 var text = _this.searchInput.value; 279 if (text) 280 window.location.href = general_search_link + "?q=" + text; 281 }); 282 (0, _defineProperty2.default)( 283 this, 284 "toggleSearch", 285 function (enabled) { 286 if (_this.isSearchActive == enabled) return; 287 _this.isSearchActive = enabled; 288 289 if (enabled) { 290 _this.searchWrapper.style.display = "flex"; 291 setTimeout(function () { 292 _this.searchWrapper.classList.add( 293 _this.searchWrapperActiveClass 294 ); 295 296 _this.searchInput.focus(); 297 }, 0); 298 299 _this.documentHtml.classList.add("search-enabled"); 300 301 document.addEventListener("keyup", _this.searchKeyPress); 302 } else { 303 _this.searchWrapper.classList.remove( 304 _this.searchWrapperActiveClass 305 ); 306 307 setTimeout(function () { 308 if (!_this.isSearchActive) 309 _this.searchWrapper.style.display = "none"; 310 }, 300); 311 312 _this.documentHtml.classList.remove("search-enabled"); 313 314 document.removeEventListener("keyup", _this.searchKeyPress); 315 } 316 } 317 ); 318 (0, _defineProperty2.default)( 319 this, 320 "bindOnLanguageSelection", 321 function (callback) { 322 _this.onLanguageSelection = callback; 323 } 324 ); 325 this.navbarClass = "navbar"; 326 this.navbarActiveClass = "".concat(this.navbarClass, "--active"); 327 this.scrolledClass = "".concat(this.navbarClass, "--scrolled"); 328 this.isScrolledDown = false;
329 this.menuClass = "menu"; 330 this.activeMenuClass = "".concat(this.menuClass, "--active"); 331 this.isMenuOpen = false; 332 this.navigationClass = "".concat(this.navbarClass, "__navigation"); 333 this.navigationItemDropdownActiveClass = "".concat( 334 this.navigationClass, 335 "__item--dropdown-active" 336 ); 337 this.dropdownWrapperClass = "".concat( 338 this.navigationClass, 339 "__dropdown-wrapper" 340 ); 341 this.dropdownWrapperHiddenClass = "".concat( 342 this.dropdownWrapperClass, 343 "--hidden" 344 ); 345 this.dropdownWrapperActiveClass = "".concat( 346 this.dropdownWrapperClass, 347 "--active" 348 ); 349 this.dropdownClass = "".concat( 350 this.dropdownWrapperClass, 351 "__dropdown" 352 ); 353 this.dropdownItemClass = "".concat(this.dropdownClass, "__item"); 354 this.dropdownItemActiveClass = "".concat( 355 this.dropdownItemClass, 356 "--active" 357 ); 358 this.searchWrapperClass = "search-wrapper"; 359 this.searchWrapperActiveClass = "".concat( 360 this.searchWrapperClass, 361 "--active" 362 ); 363 this.searchWrapperCloseClass = "".concat( 364 this.searchWrapperClass, 365 "__close" 366 ); 367 this.searchWrapperContentClass = "".concat( 368 this.searchWrapperClass, 369 "__content" 370 ); 371 this.searchInputClass = "".concat( 372 this.searchWrapperContentClass, 373 "__input-wrapper__input" 374 ); 375 this.searchInputIconClass = "".concat( 376 this.searchWrapperContentClass, 377 "__input-wrapper__icon" 378 ); 379 this.navigation = document.querySelector( 380 ".".concat(this.navigationClass) 381 ); 382 this.dropdownWrapper = this.navigation.querySelector( 383 ".".concat(this.dropdownWrapperClass) 384 ); 385 this.dropdown = this.dropdownWrapper.querySelector( 386 ".".concat(this.dropdownClass) 387 ); 388 this.navigationItems = this.navigation.querySelectorAll( 389 ".".concat(this.navigationClass, "__item") 390 ); 391 this.menu = document.querySelector(".".concat(this.menuClass)); 392 this.navbar = document.querySelector(".".concat(this.navbarClass)); 393 this.openMenuButton = document.getElementById("navbar-menu"); 394 this.closeMenuButton = document.getElementById("navbar-menu-close"); 395 this.searchWrapper = document.querySelector( 396 ".".concat(this.searchWrapperClass) 397 ); 398 this.searchWrapperContent = this.searchWrapper.querySelector( 399 ".".concat(this.searchWrapperContentClass) 400 ); 401 this.searchInput = this.searchWrapper.querySelector( 402 ".".concat(this.searchInputClass) 403 ); 404 this.searchInputIcon = this.searchWrapper.querySelector( 405 ".".concat(this.searchInputIconClass) 406 ); 407 this.searchClose = this.searchWrapper.querySelector( 408 ".".concat(this.searchWrapperCloseClass) 409 ); 410 this.searchButton = this.navbar.querySelector( 411 ".navbar__shortcut__icon" 412 ); 413 this.documentHtml = document.querySelector("html"); 414 this.isSearchActive = false; 415 this.languageSelectorLists = Array.from( 416 document.querySelectorAll(".language-selector__dropdown") 417 ); 418 this.init(); 419 } 420 421 (0, _createClass2.default)(NavbarView, [ 422 { 423 key: "init", 424 value: function init() { 425 var _this2 = this; 426 427 // search 428 this.searchButton.addEventListener("click", function () { 429 return _this2.toggleSearch(true); 430 }); 431 this.searchClose.addEventListener("click", function () { 432 return _this2.toggleSearch(false); 433 }); 434 this.searchInputIcon.addEventListener("click", this.doSearch);
435 this.searchWrapper.addEventListener("click", function () { 436 return _this2.toggleSearch(false); 437 }); 438 this.searchWrapperContent.addEventListener( 439 "click", 440 function (e) { 441 return e.stopPropagation(); 442 } 443 ); // end search 444 445 window.addEventListener("scroll", function () { 446 return _this2.onNavbarScroll(); 447 }); 448 document 449 .querySelectorAll(".accordion") 450 .forEach(function (element) { 451 return new _accordion.Accordion(element); 452 }); 453 454 var setHiddenClass = function setHiddenClass() { 455 setTimeout(function () { 456 if ( 457 !_this2.dropdownWrapper.classList.contains( 458 _this2.dropdownWrapperActiveClass 459 ) 460 ) { 461 _this2.dropdownWrapper.classList.add( 462 _this2.dropdownWrapperHiddenClass 463 ); 464 } 465 }, 250); 466 }; 467 468 this.navigation.addEventListener("mouseleave", function () { 469 _this2.dropdown.classList.remove(_this2.dropdownActiveClass); 470 471 _this2.dropdownHoveredElement = null; 472 //_this2.dropdownWrapper.style.height = "0px"; 473 _this2.dropdownWrapper.style.opacity = "0"; 474 _this2.dropdownWrapper.style.visibility = "hidden"; 475 document 476 .querySelector(".navbar") 477 .classList.remove("active--submenu"); 478 479 _this2.dropdownWrapper.classList.remove( 480 _this2.dropdownWrapperActiveClass 481 ); 482 483 var item = _this2.navigation.querySelector( 484 ".".concat(_this2.navigationItemDropdownActiveClass) 485 ); 486 487 if (item) 488 item.classList.remove( 489 _this2.navigationItemDropdownActiveClass 490 ); 491 setHiddenClass(); 492 }); 493 494 var updateDropdown = function updateDropdown( 495 el, 496 items, 497 title, 498 menuD 499 ) { 500 var parentLeft = _this2.navigation.offsetLeft; 501 var targetLeft = el.offsetLeft - parentLeft; 502 503 if (!items.length) { 504 _this2.dropdownHoveredElement = null; 505 _this2.dropdown.innerHTML = ""; 506 //_this2.dropdownWrapper.style.height = "0px"; 507 //_this2.dropdownWrapper.style.display = "none"; 508 _this2.dropdownWrapper.style.opacity = "0"; 509 _this2.dropdownWrapper.style.visibility = "hidden"; 510 document 511 .querySelector(".navbar") 512 .classList.remove("active--submenu"); 513 514 _this2.dropdownWrapper.classList.remove( 515 _this2.dropdownWrapperActiveClass 516 ); 517 518 setHiddenClass(); 519 return; 520 } 521 522 el.classList.add(_this2.navigationItemDropdownActiveClass); 523 var html = ""; 524 html += '<div class="menu--intro">'; 525 html += "<h3>" + title + "</h3>"; 526 html += "<p>" + menuD + "</p>"; 527 html += "</div>"; 528 html += '<div class="grid--menus-itens">'; 529 items.forEach(function (item) { 530 var url = item.url, 531 isActive = item.isActive, 532 name = item.name; 533 html += '<a href="' 534 .concat(url, '" class="') 535 .concat(_this2.dropdownItemClass) 536 .concat( 537 isActive 538 ? " ".concat(_this2.dropdownItemActiveClass) 539 : "", 540 '">' 541 ) 542 .concat(name, "</a>"); 543 }); 544 html += "</div>"; 545 _this2.dropdown.innerHTML = html; 546 _this2.dropdownWrapper.style.height = "auto"; 547 //_this2.dropdownWrapper.style.transform = "translateX(".concat(targetLeft, "px)"); 548 //_this2.dropdownWrapper.style.display = "block"; 549 _this2.dropdownWrapper.style.opacity = "1"; 550 _this2.dropdownWrapper.style.visibility = "visible"; 551 document 552 .querySelector(".navbar") 553 .classList.add("active--submenu"); 554 555 _this2.dropdownWrapper.classList.add( 556 _this2.dropdownWrapperActiveClass 557 ); 558 }; 559 560 var getElementData = function getElementData(el) { 561 if (!el.parsedData) { 562 el.parsedData = JSON.parse(el.getAttribute("data") || "[]"); 563 } 564 565 return el.parsedData; 566 }; 567
568 this.navigationItems.forEach(function (el) { 569 el.addEventListener("mouseover", function () { 570 if (_this2.dropdownHoveredElement == el) return; 571 _this2.dropdownHoveredElement = el; 572 573 var item = _this2.navigation.querySelector( 574 ".".concat(_this2.navigationItemDropdownActiveClass) 575 ); 576 577 if (item) 578 item.classList.remove( 579 _this2.navigationItemDropdownActiveClass 580 ); 581 var items = getElementData(el); 582 var title = el.getAttribute("menu"); 583 var menuD = el.getAttribute("menuD"); 584 585 if ( 586 _this2.dropdownWrapper.classList.contains( 587 _this2.dropdownWrapperHiddenClass 588 ) 589 ) { 590 if (!items.length) return; 591 var parentLeft = _this2.navigation.offsetLeft; 592 var targetLeft = el.offsetLeft - parentLeft; 593 //_this2.dropdownWrapper.style.transform = "translateX(0px)"; 594 setTimeout(function () { 595 _this2.dropdownWrapper.classList.remove( 596 _this2.dropdownWrapperHiddenClass 597 ); 598 599 updateDropdown(el, items, title, menuD); 600 }, 10); 601 } else updateDropdown(el, items, title, menuD); 602 }); 603 }); 604 605 this.openMenuButton.addEventListener("click", function () { 606 return _this2.updateMenu(true); 607 }); 608 this.closeMenuButton.addEventListener("click", function () { 609 return _this2.updateMenu(false); 610 }); 611 this.watchLanguageSelection(); 612 }, 613 }, 614 { 615 key: "onNavbarScroll", 616 value: function onNavbarScroll() { 617 var THRESHOLD = 4; 618 var scrolledY = Math.round(window.scrollY); 619 var remValue = parseInt( 620 window.getComputedStyle(document.body).fontSize 621 ); 622 var scrollInRem = Math.min( 623 THRESHOLD, 624 (scrolledY * 1) / remValue 625 ); 626 var userSrolledDown = scrollInRem === THRESHOLD; 627 628 if (userSrolledDown && !this.isScrolledDown) { 629 this.navbar.classList.add(this.scrolledClass); 630 this.isScrolledDown = true; 631 } else if (!userSrolledDown && this.isScrolledDown) { 632 this.navbar.classList.remove(this.scrolledClass); 633 this.isScrolledDown = false; 634 } 635 }, 636 }, 637 { 638 key: "updateMenu", 639 value: function updateMenu(isOpen) { 640 this.isMenuOpen = isOpen; 641 642 if (isOpen) { 643 document.documentElement.style.overflow = "hidden"; 644 this.navbar.classList.add(this.navbarActiveClass); 645 this.menu.classList.add(this.activeMenuClass); 646 } else { 647 document.documentElement.style.overflow = ""; 648 this.navbar.classList.remove(this.navbarActiveClass); 649 this.menu.classList.remove(this.activeMenuClass); 650 } 651 }, 652 }, 653 { 654 key: "watchLanguageSelection", 655 value: function watchLanguageSelection() { 656 var _this3 = this; 657 658 this.languageSelectorLists.forEach(function (languageList) { 659 languageList.addEventListener( 660 "click", 661 function (e) { 662 var languageItem = e.target.closest( 663 ".language-selector__dropdown__item" 664 ); 665 666 if (languageItem) { 667 var language = 668 languageItem.getAttribute("data-language"); 669 670 _this3.onLanguageSelection(language); 671 } 672 }, 673 { 674 passive: true, 675 } 676 ); 677 }); 678 }, 679 }, 680 ]); 681 return NavbarView; 682 })(); 683 684 exports.NavbarView = NavbarView; 685 }, 686 { 687 "../language-preference": 3, 688 "./accordion": 1, 689 "@babel/runtime/helpers/classCallCheck": 4, 690 "@babel/runtime/helpers/createClass": 5,
691 "@babel/runtime/helpers/defineProperty": 6, 692 "@babel/runtime/helpers/interopRequireDefault": 7, 693 }, 694 ], 695 3: [ 696 function (require, module, exports) { 697 "use strict"; 698 699 var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); 700 701 Object.defineProperty(exports, "__esModule", { 702 value: true, 703 }); 704 exports.LanguagePreference = void 0; 705 706 var _classCallCheck2 = _interopRequireDefault( 707 require("@babel/runtime/helpers/classCallCheck") 708 ); 709 710 var _createClass2 = _interopRequireDefault( 711 require("@babel/runtime/helpers/createClass") 712 ); 713 714 var _jsCookie = _interopRequireDefault(require("js-cookie")); 715 716 var LANGUAGE_PREFERENCE_STORAGE_KEY = "django_language"; 717 718 var LanguagePreference = /*#__PURE__*/ (function () { 719 function LanguagePreference() { 720 (0, _classCallCheck2.default)(this, LanguagePreference); 721 } 722 723 (0, _createClass2.default)(LanguagePreference, null, [ 724 { 725 key: "storeLanguage", 726 value: function storeLanguage(language) { 727 return _jsCookie.default.set( 728 LANGUAGE_PREFERENCE_STORAGE_KEY, 729 language, 730 { 731 sameSite: "strict", 732 secure: true, 733 expires: 30, 734 } 735 ); 736 }, 737 }, 738 { 739 key: "getStoredLanguage", 740 value: function getStoredLanguage() { 741 return _jsCookie.default.get(LANGUAGE_PREFERENCE_STORAGE_KEY); 742 }, 743 }, 744 ]); 745 return LanguagePreference; 746 })(); 747 748 exports.LanguagePreference = LanguagePreference; 749 }, 750 { 751 "@babel/runtime/helpers/classCallCheck": 4, 752 "@babel/runtime/helpers/createClass": 5, 753 "@babel/runtime/helpers/interopRequireDefault": 7, 754 "js-cookie": 8, 755 }, 756 ], 757 4: [ 758 function (require, module, exports) { 759 function _classCallCheck(instance, Constructor) { 760 if (!(instance instanceof Constructor)) { 761 throw new TypeError("Cannot call a class as a function"); 762 } 763 } 764 765 module.exports = _classCallCheck; 766 (module.exports["default"] = module.exports), 767 (module.exports.__esModule = true); 768 }, 769 {}, 770 ], 771 5: [ 772 function (require, module, exports) { 773 function _defineProperties(target, props) { 774 for (var i = 0; i < props.length; i++) { 775 var descriptor = props[i]; 776 descriptor.enumerable = descriptor.enumerable || false; 777 descriptor.configurable = true; 778 if ("value" in descriptor) descriptor.writable = true; 779 Object.defineProperty(target, descriptor.key, descriptor); 780 } 781 } 782 783 function _createClass(Constructor, protoProps, staticProps) { 784 if (protoProps) _defineProperties(Constructor.prototype, protoProps); 785 if (staticProps) _defineProperties(Constructor, staticProps); 786 return Constructor; 787 } 788 789 module.exports = _createClass; 790 (module.exports["default"] = module.exports), 791 (module.exports.__esModule = true); 792 }, 793 {}, 794 ], 795 6: [ 796 function (require, module, exports) { 797 function _defineProperty(obj, key, value) { 798 if (key in obj) { 799 Object.defineProperty(obj, key, { 800 value: value, 801 enumerable: true, 802 configurable: true, 803 writable: true, 804 }); 805 } else { 806 obj[key] = value; 807 } 808 809 return obj; 810 } 811 812 module.exports = _defineProperty; 813 (module.exports["default"] = module.exports), 814 (module.exports.__esModule = true); 815 }, 816 {}, 817 ], 818 7: [ 819 function (require, module, exports) { 820 function _interopRequireDefault(obj) { 821 return obj && obj.__esModule 822 ? obj 823 : { 824 default: obj, 825 }; 826 } 827 828 module.exports = _interopRequireDefault; 829 (module.exports["default"] = module.exports), 830 (module.exports.__esModule = true); 831 }, 832 {}, 833 ], 834 8: [
vendor: 6,907 bytes, lines 835-1023
835 function (require, module, exports) { 836 /*! 837 * JavaScript Cookie v2.2.1 838 * https://github.com/js-cookie/js-cookie 839 * 840 * Copyright 2006, 2015 Klaus Hartl & Fagner Brack 841 * Released under the MIT license 842 */ 843 (function (factory) { 844 var registeredInModuleLoader; 845 if (typeof define === "function" && define.amd) { 846 define(factory); 847 registeredInModuleLoader = true; 848 } 849 if (typeof exports === "object") { 850 module.exports = factory(); 851 registeredInModuleLoader = true; 852 } 853 if (!registeredInModuleLoader) { 854 var OldCookies = window.Cookies; 855 var api = (window.Cookies = factory()); 856 api.noConflict = function () { 857 window.Cookies = OldCookies; 858 return api; 859 }; 860 } 861 })(function () { 862 function extend() { 863 var i = 0; 864 var result = {}; 865 for (; i < arguments.length; i++) { 866 var attributes = arguments[i]; 867 for (var key in attributes) { 868 result[key] = attributes[key]; 869 } 870 } 871 return result; 872 } 873 874 function decode(s) { 875 return s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent); 876 } 877 878 function init(converter) { 879 function api() {} 880 881 function set(key, value, attributes) { 882 if (typeof document === "undefined") { 883 return; 884 } 885 886 attributes = extend( 887 { 888 path: "/", 889 }, 890 api.defaults, 891 attributes 892 ); 893 894 if (typeof attributes.expires === "number") { 895 attributes.expires = new Date( 896 new Date() * 1 + attributes.expires * 864e5 897 ); 898 } 899 900 // We're using "expires" because "max-age" is not supported by IE 901 attributes.expires = attributes.expires 902 ? attributes.expires.toUTCString() 903 : ""; 904 905 try { 906 var result = JSON.stringify(value); 907 if (/^[\{\[]/.test(result)) { 908 value = result; 909 } 910 } catch (e) {} 911 912 value = converter.write 913 ? converter.write(value, key) 914 : encodeURIComponent(String(value)).replace( 915 /%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, 916 decodeURIComponent 917 ); 918 919 key = encodeURIComponent(String(key)) 920 .replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent) 921 .replace(/[\(\)]/g, escape); 922 923 var stringifiedAttributes = ""; 924 for (var attributeName in attributes) { 925 if (!attributes[attributeName]) { 926 continue; 927 } 928 stringifiedAttributes += "; " + attributeName; 929 if (attributes[attributeName] === true) { 930 continue; 931 } 932 933 // Considers RFC 6265 section 5.2: 934 // ... 935 // 3. If the remaining unparsed-attributes contains a %x3B (";") 936 // character: 937 // Consume the characters of the unparsed-attributes up to, 938 // not including, the first %x3B (";") character. 939 // ... 940 stringifiedAttributes += 941 "=" + attributes[attributeName].split(";")[0]; 942 } 943 944 return (document.cookie = 945 key + "=" + value + stringifiedAttributes); 946 } 947 948 function get(key, json) { 949 if (typeof document === "undefined") { 950 return; 951 } 952 953 var jar = {}; 954 // To prevent the for loop in the first place assign an empty array 955 // in case there are no cookies at all. 956 var cookies = document.cookie ? document.cookie.split("; ") : []; 957 var i = 0; 958 959 for (; i < cookies.length; i++) { 960 var parts = cookies[i].split("="); 961 var cookie = parts.slice(1).join("="); 962 963 if (!json && cookie.charAt(0) === '"') { 964 cookie = cookie.slice(1, -1); 965 } 966 967 try { 968 var name = decode(parts[0]); 969 cookie = 970 (converter.read || converter)(cookie, name) || 971 decode(cookie); 972 973 if (json) { 974 try { 975 cookie = JSON.parse(cookie); 976 } catch (e) {} 977 } 978 979 jar[name] = cookie; 980 981 if (key === name) { 982 break; 983 } 984 } catch (e) {} 985 } 986 987 return key ? jar[key] : jar; 988 } 989 990 api.set = set; 991 api.get = function (key) { 992 return get(key, false /* read as raw */); 993 }; 994 api.getJSON = function (key) { 995 return get(key, true /* read as json */); 996 }; 997 api.remove = function (key, attributes) { 998 set( 999 key, 1000 "", 1001 extend(attributes, { 1002 expires: -1, 1003 }) 1004 ); 1005 }; 1006 1007 api.defaults = {}; 1008 1009 api.withConverter = init; 1010 1011 return api; 1012 } 1013 1014 return init(function () {}); 1015 }); 1016 }, 1017 {}, 1018 ], 1019 }, 1020 {}, 1021 [2] 1022); 1023//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJhc3NldHMvanMvY29tcG9uZW50cy9hY2NvcmRpb24uanMiLCJhc3NldHMvanMvY29tcG9uZW50cy9uYXZiYXIudmlldy5qcyIsImFzc2V0cy9qcy9sYW5ndWFnZS1wcmVmZXJlbmNlLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzIiwibm9kZV9tb2R1bGVzL2pzLWNvb2tpZS9zcmMvanMuY29va2llLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFNLGVBQWUsR0FBRztBQUNwQixFQUFBLFVBQVUsRUFBRTtBQURRLENBQXhCOztJQUlhLFMsR0FDVCxtQkFBWSxPQUFaLEVBQXFCLE9BQXJCLEVBQThCO0FBQUE7O0FBQUE7QUFBQSxrREFn
1023Q25CO0FBQUEsV0FBTSxLQUFJLENBQUMsT0FBTCxDQUFhLFNBQWIsQ0FBdUIsUUFBdkIsQ0FBZ0MsbUJBQWhDLENBQU47QUFBQSxHQWhDbUI7QUFBQSxzREFrQ2YsWUFBTTtBQUNqQixRQUFJLEtBQUksQ0FBQyxRQUFMLEVBQUosRUFBcUIsS0FBSSxDQUFDLE9BQUwsQ0FBYSxTQUFiLENBQXVCLE1BQXZCLENBQThCLG1CQUE5QixFQUFyQixLQUNLLEtBQUksQ0FBQyxPQUFMLENBQWEsU0FBYixDQUF1QixHQUF2QixDQUEyQixtQkFBM0I7O0FBQ0wsSUFBQSxLQUFJLENBQUMsYUFBTDtBQUNILEdBdEM2QjtBQUFBLHVEQXdDZCxZQUFNO0FBQ2xCLFFBQU0sUUFBUSxHQUFHLEtBQUksQ0FBQyxRQUFMLEVBQWpCOztBQUNBLFFBQU0sYUFBYSxHQUFHLEtBQUksQ0FBQyxPQUFMLENBQWEsWUFBbkM7O0FBRUEsUUFBSSxRQUFKLEVBQWM7QUFDVixNQUFBLEtBQUksQ0FBQyxPQUFMLENBQWEsS0FBYixDQUFtQixNQUFuQixhQUErQixhQUEvQjtBQUNBLE1BQUEsVUFBVSxDQUFDLFlBQU07QUFDYixRQUFBLEtBQUksQ0FBQyxPQUFMLENBQWEsS0FBYixDQUFtQixNQUFuQixHQUE0QixNQUE1QjtBQUNILE9BRlMsRUFFUCxHQUZPLENBQVY7QUFHSCxLQUxELE1BTUs7QUFDRCxNQUFBLEtBQUksQ0FBQyxPQUFMLENBQWEsS0FBYixDQUFtQixNQUFuQixhQUErQixhQUEvQjtBQUNBLE1BQUEsVUFBVSxDQUFDO0FBQUEsZUFBTSxLQUFJLENBQUMsT0FBTCxDQUFhLEtBQWIsQ0FBbUIsTUFBbkIsR0FBNEIsQ0FBbEM7QUFBQSxPQUFELEVBQXNDLENBQXRDLENBQVY7QUFDSDtBQUVKLEdBdkQ2QjtBQUUxQixPQUFLLE9BQUwsbUNBQW9CLGVBQXBCLEdBQXdDLE9BQXhDO0FBRUEsTUFBSSxPQUFPLENBQUMsU0FBWixFQUF1QjtBQUV2QixPQUFLLE9BQUwsR0FBZSxPQUFmO0FBQ0EsT0FBSyxVQUFMLEdBQWtCLE9B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sQ0FBUDtBQUNEOzs7Ozs7OztBQ2ZIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCJcblxuLyoqXG4gKiBcbiAqKioqKiBSRUxBVEVEIElNUE9SVFMgKioqKipcbiAqIFxuICogYXNzZXRzL3Nhc3MvY29tcG9uZW50cy9fYWNjb3JkaW9uLnNjc3NcbiAqIFxuICoqKioqIFVTQUdFICoqKioqXG4gKiBcbiAqIEhUTUxcbiAqIFxuICogXG4gKiA8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uXCI+XG4gKiAgICAgIDxkaXYgY2xhc3M9XCJhY2NvcmRpb25fX3RvZ2dsZVwiPlxuICogICAgICAgICAgVGl0bGVcbiAqICAgICAgPC9kaXY+XG4gKiAgICAgIDxkaXYgY2xhc3M9XCJhY2NvcmRpb25fX2NvbnRlbnQtd3JhcHBlclwiPlxuICogICAgICAgICAgPGRpdiBjbGFzcz1cImFjY29yZGlvbl9fY29udGVudC13cmFwcGVyX19jb250ZW50XCI+XG4gKiAgICAgICAgICAgICAgPCEtLSBjb250ZW50IC0tPlxuICogICAgICAgICAgPC9kaXY+XG4gKiAgICAgIDwvZGl2PlxuICogIDwvZGl2PlxuICogXG4gKiBcbiAqIEpBVkFTQ1JJUFRcbiAqIFxuICogbmV3IEFjY29yZGlvbihlbGVtZW50LCBPUFRJT05TKTtcbiAqIFxuICogLS0gZWxlbWVudDogdGhlIGh0bWwgZWxlbWVudCB0byBjb252ZXJ0IHRvIHRoaXMgY29tcG9uZW50XG4gKiAtLSBPUFRJT05TOiBjb21wb25lbnQgb3B0aW9ucywgY2hlY2sgREVGQVVMVF9PUFRJT05TIGJlbG93XG4gKiBcbiAqKioqKiBBQ0NFU1NJQklMSVRZIFRPIFRIRSBDTEFTUyAqKioqXG4gKiBcbiAqIGNvbnN0IHN0b3JlZEFjY29yZGlvbiA9IG5ldyBBY2NvcmRpb24oKTtcbiAqIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYWNjb3JkaW9uLWlkXCIpLkFjY29yZGlvbjtcbiAqIFxuICoqKioqIFBVQkxJQyBNRVRIT0RTICoqKioqXG4gKlxuICogaXNBY3RpdmUoKSAtIHJldHVybnMgdHJ1ZS9mYWxzZSBkZXBlbmRpbmcgb24gdGhlIGFjY29yZGlvbiBzdGF0ZVxuICogdG9nZ2xlQWN0aXZlKGJvb2xlYW4pIC0gY2hhbmdlcyB0aGUgYWNjb3JkaW9uIHN0YXRlXG4gKiBcbiAqIFxuICovXG5cbmNvbnN0IERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgICBlbmFibGVJY29uOiB0cnVlXG59XG5cbmV4cG9ydCBjbGFzcyBBY2NvcmRpb24ge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9wdGlvbnMpIHtcblxuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLkRFRkFVTFRfT1BUSU9OUywgLi4ub3B0aW9ucyB9O1xuXG4gICAgICAgIGlmIChlbGVtZW50LkFjY29yZGlvbikgcmV0dXJuO1xuXG4gICAgICAgI
1023HRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMudG9nZ2xlWm9uZSA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcignLmFjY29yZGlvbl9fdG9nZ2xlJyk7XG4gICAgICAgIHRoaXMud3JhcHBlciA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcignLmFjY29yZGlvbl9fY29udGVudC13cmFwcGVyJyk7XG4gICAgICAgIHRoaXMuY29udGVudCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcignLmFjY29yZGlvbl9fY29udGVudC13cmFwcGVyX19jb250ZW50Jyk7XG5cbiAgICAgICAgdGhpcy5lbGVtZW50LkFjY29yZGlvbiA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJhY2NvcmRpb25cIik7XG5cbiAgICAgICAgdGhpcy5yZWZyZXNoSGVpZ2h0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVJY29uKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVpvbmUuaW5uZXJIVE1MICs9IGBcbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiYWNjb3JkaW9uX190b2dnbGVfX2ljb25cIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk05LjI1MTA1IDYuMjUxMDVDOS41ODU3OSA1LjkxNjMyIDEwLjEyODUgNS45MTYzMiAxMC40NjMyIDYuMjUxMDVMMTUuNjA2MSAxMS4zOTM5QzE1Ljk0MDggMTEuNzI4NiAxNS45NDA4IDEyLjI3MTQgMTUuNjA2MSAxMi42MDYxTDEwLjQ2MzIgMTcuNzQ4OUMxMC4xMjg1IDE4LjA4MzcgOS41ODU3OSAxOC4wODM3IDkuMjUxMDUgMTcuNzQ4OUM4LjkxNjMyIDE3LjQxNDIgOC45MTYzMiAxNi44NzE1IDkuMjUxMDUgMTYuNTM2OEwxMy43ODc4IDEyTDkuMjUxMDUgNy40NjMyM0M4LjkxNjMyIDcuMTI4NSA4LjkxNjMyIDYuNTg1NzkgOS4yNTEwNSA2LjI1MTA1WlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIi8+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xMiAyMi41QzE3Ljc5OSAyMi41IDIyLjUgMTcuNzk5IDIyLjUgMTJDMjIuNSA2LjIwMTAxIDE3Ljc5OSAxLjUgMTIgMS41QzYuMjAxMDEgMS41IDEuNSA2LjIwMTAxIDEuNSAxMkMxLjUgMTcuNzk5IDYuMjAxM
1023DEgMjIuNSAxMiAyMi41Wk0xMiAyNEMxOC42Mjc0IDI0IDI0IDE4LjYyNzQgMjQgMTJDMjQgNS4zNzI1OCAxOC42Mjc0IDAgMTIgMEM1LjM3MjU4IDAgMCA1LjM3MjU4IDAgMTJDMCAxOC42Mjc0IDUuMzcyNTggMjQgMTIgMjRaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIGA7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvZ2dsZVpvbmUuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlQWN0aXZlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgaXNBY3RpdmUgPSAoKSA9PiB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWNjb3JkaW9uLS1hY3RpdmVcIik7XG5cbiAgICB0b2dnbGVBY3RpdmUgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlKCkpIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiYWNjb3JkaW9uLS1hY3RpdmVcIik7XG4gICAgICAgIGVsc2UgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJhY2NvcmRpb24tLWFjdGl2ZVwiKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoSGVpZ2h0KCk7XG4gICAgfVxuXG4gICAgcmVmcmVzaEhlaWdodCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgaXNBY3RpdmUgPSB0aGlzLmlzQWN0aXZlKCk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSB0aGlzLmNvbnRlbnQub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy53cmFwcGVyLnN0eWxlLmhlaWdodCA9IGAke2NvbnRlbnRIZWlnaHR9cHhgO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy53cmFwcGVyLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndyYXBwZXIuc3R5bGUuaGVpZ2h0ID0gYCR7Y29udGVudEhlaWdodH1weGA7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMud3JhcHBlci5zdHlsZS5oZWlnaHQgPSAwLCAwKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG5cbn0iLCJpbXBvcnQgeyBBY2NvcmRpb24gfSBmcm9tIFwiLi9hY2NvcmRpb25cIjtcbmltcG9ydCB7IExhbmd1YWdlUHJlZmVyZW5jZSB9IGZyb20gXCIuLi9sYW5ndWFnZS1wcmVmZXJlbmNlXCI7XG5cbiQoZnVuY3Rpb24gKCkge1xuICBjb25zdCBuYXZiYXJWaWV3ID0gbmV3IE5hdmJhclZpZXcoKTtcbiAgbmF2YmFyVmlldy5iaW5kT25MYW5ndWFnZVNlbGVjdGlvbigobGFuZ3VhZ2UpID0+IHtcbiAgICBMYW5ndWFnZVByZWZlcmVuY2Uuc3RvcmVMYW5ndWFnZShsYW5ndWFnZS50b0xvd2VyQ2FzZSgpKTtcbiAgfSk7XG59KTtcblxuZXhwb3J0IGNsYXNzIE5hdmJhclZpZXcge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm5hdmJhckNsYXNzID0gXCJuYXZiYXJcIjtcbiAgICB0aGlzLm5hdmJhckFjdGl2ZUNsYXNzID0gYCR7dGhpcy5uYXZiYXJDbGFzc30tLWFjdGl2ZWA7XG4gICAgdGhpcy5zY3JvbGxlZENsYXNzID0gYCR7dGhpcy5uYXZiYXJDbGFzc30tLXNjcm9sbGVkYDtcbiAgICB0aGlzLmlzU2Nyb2xsZWREb3duID0gZmFsc2U7XG5cbiAgICB0aGlzLm1lbnVDbGFzcyA9IFwibWVudVwiO1xuICAgIHRoaXMuYWN0aXZlTWVudUNsYXNzID0gYCR7dGhpcy5tZW51Q2xhc3N9LS1hY3RpdmVgO1xuICAgIHRoaXMuaXNNZW51T3BlbiA9IGZhbHNlO1xuXG4gICAgdGhpcy5uYXZpZ2F0aW9uQ2xhc3MgPSBgJHt0aGlzLm5hdmJhckNsYXNzfV9fbmF2aWdhdGlvbmA7XG4gICAgdGhpcy5uYXZpZ2F0aW9uSXRlbURyb3Bkb3duQWN0aXZlQ2xhc3MgPSBgJHt0aGlzLm5hdmlnYXRpb25DbGFzc31fX2l0ZW0tLWRyb3Bkb3duLWFjdGl2ZWA7XG4gICAgdGhpcy5kcm9wZG93bldyYXBwZXJDbGFzcyA9IGAke3RoaXMubmF2aWdhdGlvbkNsYXNzfV9fZHJvcGRvd24td3JhcHBlcmA7XG4gICAgdGhpcy5kcm9wZG93bldyYXBwZXJIaWRkZW5DbGFzcyA9IGAke3RoaXMuZHJvcGRvd25XcmFwcGVyQ2xhc3N9LS1oaWRkZW5gO1xuICAgIHRoaXMuZHJvcGRvd25XcmFwcGVyQWN0aXZlQ2xhc3MgPSBgJHt0aGlzLmRyb3Bkb3duV3JhcHBlckNsYXNzfS0tYWN0aXZlYDtcbiAgICB0aGlzLmRyb3Bkb3duQ2xhc3MgPSBgJHt0aGlzLmRyb3Bkb3duV3JhcHBlckNsYXNzfV9fZHJvcGRvd25gO1xuICAgIHRoaXMuZHJvcGRvd25JdGVtQ2xhc3MgPSBgJHt0aGlzLmRyb3Bkb3duQ2xhc3N9X19pdGVtYDtcbiAgICB0aGlzLmRyb3Bkb3duSXRlbUFjdGl2ZUNsYXNzID0gYCR7dGhpcy5kcm9wZG93bkl0ZW1DbGFzc30tLWFjdGl2ZWA7XG5cbiAgICB0aGlzLnNlYXJjaFdyYXBwZXJDbGFzcyA9IGBzZWFyY2gtd3JhcHBlcmA7XG4gICAgdGhpcy5zZWFyY2hXcmFwcGVyQWN0aXZlQ2xhc3MgPSBgJHt0aGlzLnNlYXJjaFdyYXBwZXJDbGFzc30tLWFjdGl2ZWA7XG4gICAgdGhpcy5zZWFyY2hXcmFwcGVyQ2xvc2VDbGFzcyA9IGAke3RoaXMuc2VhcmNoV3JhcHBlckNsYXNzfV9fY2xvc2VgO1xuICAgIHRoaXMuc2VhcmNoV3JhcHBlckNvbnRlbnRDbGFzcyA9IGAke3RoaXMuc2VhcmNoV3JhcHBlckNsYXNzfV9fY29udGVudGA7XG4gICAgdGhpcy5zZWFyY2hJbnB1dENsYXNzID0gYCR7dGhpcy5zZWFyY2hXcmFwcGVyQ29udGVudENsYXNzfV9faW5wdXQtd3JhcHBlcl9faW5wdXRgO1xuICAgIHRoaXMuc2VhcmNoSW5wdXRJY29uQ2xhc3MgPSBgJHt0aGlzLnNlYXJjaFdyYXBwZXJDb250ZW50Q2xhc3N9X19pbnB1dC13cmFwcGVyX19pY29uYDtcblxuICAgIHRoaXMubmF2aWdhdGlvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke3RoaXMubmF2aWdhdGlvbkNsYXNzfWApO1xuICAgIHRoaXMuZHJvcGRvd25XcmFwcGVyID0gdGhpcy5uYXZpZ2F0aW9uLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBgLiR7dGhpcy5kcm9wZG93bldyYXBwZXJDbGFzc31gXG4gICAgKTtcbiAgICB0aGlzLmRyb3Bkb3duID0gdGhpcy5kcm9wZG93bldyYXBwZXIucXVlcnlTZWxlY3RvcihcbiAgICAgIGAuJHt0aGlzLmRyb3Bkb3duQ2xhc3N9YFxuICAgICk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uSXRlbXMgPSB0aGlzLm5hdmlnYXRpb24ucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHt0aGlzLm5hdmlnYXRpb25DbGFzc31fX2l0ZW1gXG4gICAgKTtcblxuICAgI
1023HRoaXMubWVudSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke3RoaXMubWVudUNsYXNzfWApO1xuICAgIHRoaXMubmF2YmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7dGhpcy5uYXZiYXJDbGFzc31gKTtcbiAgICB0aGlzLm9wZW5NZW51QnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuYXZiYXItbWVudVwiKTtcbiAgICB0aGlzLmNsb3NlTWVudUJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibmF2YmFyLW1lbnUtY2xvc2VcIik7XG5cbiAgICB0aGlzLnNlYXJjaFdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHt0aGlzLnNlYXJjaFdyYXBwZXJDbGFzc31gKTtcbiAgICB0aGlzLnNlYXJjaFdyYXBwZXJDb250ZW50ID0gdGhpcy5zZWFyY2hXcmFwcGVyLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBgLiR7dGhpcy5zZWFyY2hXcmFwcGVyQ29udGVudENsYXNzfWBcbiAgICApO1xuICAgIHRoaXMuc2VhcmNoSW5wdXQgPSB0aGlzLnNlYXJjaFdyYXBwZXIucXVlcnlTZWxlY3RvcihcbiAgICAgIGAuJHt0aGlzLnNlYXJjaElucHV0Q2xhc3N9YFxuICAgICk7XG4gICAgdGhpcy5zZWFyY2hJbnB1dEljb24gPSB0aGlzLnNlYXJjaFdyYXBwZXIucXVlcnlTZWxlY3RvcihcbiAgICAgIGAuJHt0aGlzLnNlYXJjaElucHV0SWNvbkNsYXNzfWBcbiAgICApO1xuICAgIHRoaXMuc2VhcmNoQ2xvc2UgPSB0aGlzLnNlYXJjaFdyYXBwZXIucXVlcnlTZWxlY3RvcihcbiAgICAgIGAuJHt0aGlzLnNlYXJjaFdyYXBwZXJDbG9zZUNsYXNzfWBcbiAgICApO1xuICAgIHRoaXMuc2VhcmNoQnV0dG9uID0gdGhpcy5uYXZiYXIucXVlcnlTZWxlY3RvcihcIi5uYXZiYXJfX3Nob3J0Y3V0X19pY29uXCIpO1xuICAgIHRoaXMuZG9jdW1lbnRIdG1sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImh0bWxcIik7XG4gICAgdGhpcy5pc1NlYXJjaEFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5sYW5ndWFnZVNlbGVjdG9yTGlzdHMgPSBBcnJheS5mcm9tKFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5sYW5ndWFnZS1zZWxlY3Rvcl9fZHJvcGRvd25cIilcbiAgICApO1xuXG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBzZWFyY2hLZXlQcmVzcyA9IChldikgPT4ge1xuICAgIHN3aXRjaCAoZXYua2V5KSB7XG4gICAgICBjYXNlIFwiRXNjYXBlXCI6XG4gICAgICAgIHRoaXMudG9nZ2xlU2VhcmNoKGZhbHNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiRW50ZXJcIjpcbiAgICAgICAgdGhpcy5kb1NlYXJjaCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfTtcblxuICBkb1NlYXJjaCA9ICgpID0+IHtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5zZWFyY2hJbnB1dC52YWx1ZTtcbiAgICBpZiAodGV4dCkgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBnZW5lcmFsX3NlYXJjaF9saW5rICsgXCI/cT1cIiArIHRleHQ7XG4gIH07XG5cbiAgdG9nZ2xlU2VhcmNoID0gKGVuYWJsZWQpID0+IHtcbiAgICBpZiAodGhpcy5pc1NlYXJjaEFjdGl2ZSA9PSBlbmFibGVkKSByZXR1cm47XG5cbiAgICB0aGlzLmlzU2VhcmNoQWN0aXZlID0gZW5hYmxlZDtcblxuICAgIGlmIChlbmFibGVkKSB7XG4gICAgICB0aGlzLnNlYXJjaFdyYXBwZXIuc3R5bGUuZGlzcGxheSA9IFwiZmxleFwiO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoV3JhcHBlci5jbGFzc0xpc3QuYWRkKHRoaXMuc2VhcmNoV3JhcHBlckFjdGl2ZUNsYXNzKTtcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dC5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgICB0aGlzLmRvY3VtZW50SHRtbC5jbGFzc0xpc3QuYWRkKFwic2VhcmNoLWVuYWJsZWRcIik7XG4gICAgICBkb2
1023N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgdGhpcy5zZWFyY2hLZXlQcmVzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoV3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuc2VhcmNoV3JhcHBlckFjdGl2ZUNsYXNzKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNTZWFyY2hBY3RpdmUpIHRoaXMuc2VhcmNoV3JhcHBlci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICB9LCAzMDApO1xuICAgICAgdGhpcy5kb2N1bWVudEh0bWwuY2xhc3NMaXN0LnJlbW92ZShcInNlYXJjaC1lbmFibGVkXCIpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHRoaXMuc2VhcmNoS2V5UHJlc3MpO1xuICAgIH1cbiAgfTtcblxuICBpbml0KCkge1xuICAgIC8vIHNlYXJjaFxuXG4gICAgdGhpcy5zZWFyY2hCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHRoaXMudG9nZ2xlU2VhcmNoKHRydWUpKTtcbiAgICB0aGlzLnNlYXJjaENsb3NlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB0aGlzLnRvZ2dsZVNlYXJjaChmYWxzZSkpO1xuICAgIHRoaXMuc2VhcmNoSW5wdXRJY29uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmRvU2VhcmNoKTtcbiAgICB0aGlzLnNlYXJjaFdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+XG4gICAgICB0aGlzLnRvZ2dsZVNlYXJjaChmYWxzZSlcbiAgICApO1xuICAgIHRoaXMuc2VhcmNoV3JhcHBlckNvbnRlbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PlxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICk7XG5cbiAgICAvLyBlbmQgc2VhcmNoXG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCAoKSA9PiB0aGlzLm9uTmF2YmFyU2Nyb2xsKCkpO1xuXG4gICAgZG9jdW1lbnRcbiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKFwiLmFjY29yZGlvblwiKVxuICAgICAgLmZvckVhY2goKGVsZW1lbnQpID0+IG5ldyBBY2NvcmRpb24oZWxlbWVudCkpO1xuXG4gICAgY29uc3Qgc2V0SGlkZGVuQ2xhc3MgPSAoKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmRyb3Bkb3duV3JhcHBlci5jbGFzc0xpc3QuY29udGFpbnMoXG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duV3JhcHBlckFjdGl2ZUNsYXNzXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmRyb3Bkb3duV3JhcHBlci5jbGFzc0xpc3QuYWRkKHRoaXMuZHJvcGRvd25XcmFwcGVySGlkZGVuQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICB9LCAyNTApO1xuICAgIH07XG5cbiAgICB0aGlzLm5hdmlnYXRpb24uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5kcm9wZG93bi5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuZHJvcGRvd25BY3RpdmVDbGFzcyk7XG4gICAgICB0aGlzLmRyb3Bkb3duSG92ZXJlZEVsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5kcm9wZG93bldyYXBwZXIuc3R5bGUuaGVpZ2h0ID0gYDBweGA7XG4gICAgICB0aGlzLmRyb3Bkb3duV3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuZHJvcGRvd25XcmFwcGVyQWN0aXZlQ2xhc3MpO1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMubmF2aWdhdGlvbi5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgLiR7dGhpcy5uYXZpZ2F0aW9uSXRlbURyb3Bkb3duQWN0aXZlQ2xhc3N9YFxuICAgICAgKTtcbiAgICAgIGlmIChpdGVtKSBpdGVtLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5uYXZpZ2F0aW9uSXRlbURyb3Bkb3duQWN0aXZlQ2xhc3MpO1xuICAgICAgc2V0SGlkZGVuQ2xhc3MoKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHVwZGF0ZURyb3Bkb3duID0gKGVsLCBpdGVtcykgPT4ge1xuICAgICAgY29uc3QgcGFyZW50TGVmdCA9IHRoaXMubmF2aWdhdGlvbi5vZmZzZXRMZWZ0O1xuICAgICAgY29uc3QgdGFyZ2V0TGVmdCA9IGVsLm9mZnNldExlZnQgLSBwYXJlbnRMZWZ0O1xuXG4gICAgICBpZiAoIWl0ZW1zLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmRyb3Bkb3duSG92ZXJlZEVsZW1lbnQgPSBudWxsO1xuICAgICAgICB0aGlzLmRyb3Bkb3duLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIHRoaXMuZHJvcGRvd25XcmFwcGVyLnN0eWxlLmhlaWdodCA9IGAwcHhgO1xuICAgICAgICB0aGlzLmRyb3Bkb3duV3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuZHJvcGRvd25XcmFwcGVyQWN0aXZlQ2xhc3MpO1xuICAgICAgICBzZXRIaWRkZW5DbGFzcygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQodGhpcy5uYXZpZ2F0aW9uSXRlbURyb3Bkb3duQWN0aXZlQ2xhc3MpO1xuXG4gICAgICBsZXQgaHRtbCA9IFwiXCI7XG5cbiAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgeyB1cmwsIGlzQWN0aXZlLCBuYW1lIH0gPSBpdGVtO1xuXG4gICAgICAgIGh0bWwgKz0gYDxhIGhyZWY9XCIke3VybH1cIiBjbGFzcz1cIiR7dGhpcy5kcm9wZG93bkl0ZW1DbGFzc30ke1xuICAgICAgICAgIGlzQWN0aXZlID8gYCAke3RoaXMuZHJvcGRvd25JdGVtQWN0aXZlQ2xhc3N9YCA6IFwiXCJcbiAgICAgICAgfVwiPiR7bmFtZX08L2E+YDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmRyb3Bkb3duLmlubmVySFRNTCA9IGh0bWw7XG4gICAgICB0aGlzLmRyb3Bkb3duV3JhcHBlci5zdHlsZS5oZWlnaHQgPSBgJHt0aGlzLmRyb3Bkb3duLm9mZnNldEhlaWdodH1weGA7XG4gICAgICB0aGlzLmRyb3Bkb3duV3JhcHBlci5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgke3RhcmdldExlZnR9cHgpYDtcbiAgICAgIHRoaXMuZHJvcGRvd25XcmFwcGVyLmNsYXNzTGlzdC5hZGQodGhpcy5kcm9wZG93bldyYXBwZXJBY3RpdmVDbGFzcyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldEVsZW1lbnREYXRhID0gKGVsKSA9PiB7XG4gICAgICBpZiAoIWVsLnBhcnNlZERhdGEpIHtcbiAgICAgICAgZWwucGFyc2VkRGF0YSA9IEpTT04ucGFyc2UoZWwuZ2V0QXR0cmlidXRlKFwiZGF0YVwiKSB8fCBcIltdXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZWwucGFyc2VkRGF0YTtcbiAgICB9O1xuXG4gICAgdGhpcy5uYXZpZ2F0aW9uSXRlbXMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5kcm9wZG93bkhvdmVyZWRFbGVtZW50ID09IGVsKSByZXR1cm47XG4gICAgICAgI
1023HRoaXMuZHJvcGRvd25Ib3ZlcmVkRWxlbWVudCA9IGVsO1xuXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLm5hdmlnYXRpb24ucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICBgLiR7dGhpcy5uYXZpZ2F0aW9uSXRlbURyb3Bkb3duQWN0aXZlQ2xhc3N9YFxuICAgICAgICApO1xuICAgICAgICBpZiAoaXRlbSkgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKHRoaXMubmF2aWdhdGlvbkl0ZW1Ecm9wZG93bkFjdGl2ZUNsYXNzKTtcblxuICAgICAgICBjb25zdCBpdGVtcyA9IGdldEVsZW1lbnREYXRhKGVsKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5kcm9wZG93bldyYXBwZXIuY2xhc3NMaXN0LmNvbnRhaW5zKFxuICAgICAgICAgICAgdGhpcy5kcm9wZG93bldyYXBwZXJIaWRkZW5DbGFzc1xuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKCFpdGVtcy5sZW5ndGgpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IHBhcmVudExlZnQgPSB0aGlzLm5hdmlnYXRpb24ub2Zmc2V0TGVmdDtcbiAgICAgICAgICBjb25zdCB0YXJnZXRMZWZ0ID0gZWwub2Zmc2V0TGVmdCAtIHBhcmVudExlZnQ7XG4gICAgICAgICAgdGhpcy5kcm9wZG93bldyYXBwZXIuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHt0YXJnZXRMZWZ0fXB4KWA7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duV3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duV3JhcHBlckhpZGRlbkNsYXNzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdXBkYXRlRHJvcGRvd24oZWwsIGl0ZW1zKTtcbiAgICAgICAgICB9LCAxMCk7XG4gICAgICAgIH0gZWxzZSB1cGRhdGVEcm9wZG93bihlbCwgaXRlbXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9wZW5NZW51QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB0aGlzLnVwZGF0ZU1lbnUodHJ1ZSkpO1xuICAgIHRoaXMuY2xvc2VNZW51QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PlxuICAgICAgdGhpcy51cGRhdGVNZW51KGZhbHNlKVxuICAgICk7XG5cbiAgICB0aGlzLndhdGNoTGFuZ3VhZ2VTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIG9uTmF2YmFyU2Nyb2xsKCkge1xuICAgIGNvbnN0IFRIUkVTSE9MRCA9IDQ7XG4gICAgY29uc3Qgc2Nyb2xsZWRZID0gTWF0aC5yb3VuZCh3aW5kb3cuc2Nyb2xsWSk7XG4gICAgY29uc3QgcmVtVmFsdWUgPSBwYXJzZUludCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5mb250U2l6ZSk7XG4gICAgY29uc3Qgc2Nyb2xsSW5SZW0gPSBNYXRoLm1pbihUSFJFU0hPTEQsIChzY3JvbGxlZFkgKiAxKSAvIHJlbVZhbHVlKTtcblxuICAgIGNvbnN0IHVzZXJTcm9sbGVkRG93biA9IHNjcm9sbEluUmVtID09PSBUSFJFU0hPTEQ7XG5cbiAgICBpZiAodXNlclNyb2xsZWREb3duICYmICF0aGlzLmlzU2Nyb2xsZWREb3duKSB7XG4gICAgICB0aGlzLm5hdmJhci5jbGFzc0xpc3QuYWRkKHRoaXMuc2Nyb2xsZWRDbGFzcyk7XG4gICAgICB0aGlzLmlzU2Nyb2xsZWREb3duID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCF1c2VyU3JvbGxlZERvd24gJiYgdGhpcy5pc1Njcm9sbGVkRG93bikge1xuICAgICAgdGhpcy5uYXZiYXIuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLnNjcm9sbGVkQ2xhc3MpO1xuICAgICAgdGhpcy5pc1Njcm9sbGVkRG93biA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZU1lbnUoaXNPcGVuKSB7XG4gICAgdGhpcy5pc01lbnVPcGVuID0gaXNPcGVuO1xuXG4gICAgaWYgKGlzT3Blbikge1xuICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcbiAgICAgIHRoaXMubmF2YmFyLmNsYXNzTGlzdC5hZGQodGhpcy5uYXZiYXJBY3RpdmVDbGFzcyk7XG4gICAgICB0aGlzLm1lbnUuY2xhc3NMaXN0LmFkZCh0aGlzLmFjdGl2ZU1lbnVDbGFzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IFwiXCI7XG4gICAgICB0aGlzLm5hdmJhci5jbGFzc0xpc3QucmVtb3ZlKHRoaXMubmF2YmFyQWN0aXZlQ2xhc3MpO1xuICAgICAgdGhpcy5tZW51LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5hY3RpdmVNZW51Q2xhc3MpO1xuICAgIH1cbiAgfVxuXG4gIHdhdGNoTGFuZ3VhZ2VTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5sYW5ndWFnZVNlbGVjdG9yTGlzdHMuZm9yRWFjaCgobGFuZ3VhZ2VMaXN0KSA9PiB7XG4gICAgICBsYW5ndWFnZUxpc3QuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJjbGlja1wiLFxuICAgICAgICAoZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxhbmd1YWdlSXRlbSA9IGUudGFyZ2V0LmNsb3Nlc3QoXG4gICAgICAgICAgICBgLmxhbmd1YWdlLXNlbGVjdG9yX19kcm9wZG93bl9faXRlbWBcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGxhbmd1YWdlSXRlbSkge1xuICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBsYW5ndWFnZUl0ZW0uZ2V0QXR0cmlidXRlKFwiZGF0YS1sYW5ndWFnZVwiKTtcblxuICAgICAgICAgICAgdGhpcy5vbkxhbmd1YWdlU2VsZWN0aW9uKGxhbmd1YWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgcGFzc2l2ZTogdHJ1ZSB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgYmluZE9uTGFuZ3VhZ2VTZWxlY3Rpb24gPSAoY2FsbGJhY2spID0+IHtcbiAgICB0aGlzLm9uTGFuZ3VhZ2VTZWxlY3Rpb24gPSBjYWxsYmFjaztcbiAgfTtcbn1cbiIsImltcG9ydCBDb29raWVzIGZyb20gXCJqcy1jb29raWVcIjtcblxuY29uc3QgTEFOR1VBR0VfUFJFRkVSRU5DRV9TVE9SQUdFX0tFWSA9IFwiZGphbmdvX2xhbmd1YWdlXCI7XG5cbmV4cG9ydCBjbGFzcyBMYW5ndWFnZVByZWZlcmVuY2Uge1xuICBzdGF0aWMgc3RvcmVMYW5ndWFnZShsYW5ndWFnZSkge1xuICAgIHJldHVybiBDb29raWVzLnNldChMQU5HVUFHRV9QUkVGRVJFTkNFX1NUT1JBR0VfS0VZLCBsYW5ndWFnZSwge1xuICAgICAgc2FtZVNpdGU6IFwic3RyaWN0XCIsXG4gICAgICBzZWN1cmU6IHRydWUsXG4gICAgICBleHBpcmVzO
1023iAzMCxcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdG9yZWRMYW5ndWFnZSgpIHtcbiAgICByZXR1cm4gQ29va2llcy5nZXQoTEFOR1VBR0VfUFJFRkVSRU5DRV9TVE9SQUdFX0tFWSk7XG4gIH1cbn1cbiIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrO1xubW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3M7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyIsImZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgXCJkZWZhdWx0XCI6IG9ialxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQ7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwiLyohXG4gKiBKYXZhU2NyaXB0IENvb2tpZSB2Mi4yLjFcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qcy1jb29raWUvanMtY29va2llXG4gKlxuICogQ29weXJpZ2h0IDIwMDYsIDIwMTUgS2xhdXMgSGFydGwgJiBGYWduZXIgQnJhY2tcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG47KGZ1bmN0aW9uIChmYWN0b3J5KSB7XG5cdHZhciByZWdpc3RlcmVkSW5Nb2R1bGVMb2FkZXI7XG5cdGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcblx0XHRkZWZpbmUoZmFjdG9yeSk7XG5cdFx0cmVnaXN0ZXJlZEluTW9kdWxlTG9hZGVyID0gdHJ1ZTtcblx0fVxuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdFx0cmVnaXN0ZXJlZEluTW9kdWxlTG9hZGVyID0gdHJ1ZTtcblx0fVxuXHRpZiAoIXJlZ2lzdGVyZWRJbk1vZHVsZUxvYWRlcikge1xuXHRcdHZhciBPbGRDb29raWVzID0gd2luZG93LkNvb2tpZXM7XG5cdFx0dmFyIGFwaSA9IHdpbmRvdy5Db29raWVzID0gZmFjdG9yeSgpO1xuXHRcdGFwaS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0d2luZG93LkNvb2tpZXMgPSBPbGRDb29raWVzO1xuXHRcdFx0cmV0dXJuIGFwaTtcblx0XHR9O1xuXHR9XG59KGZ1bmN0aW9uICgpIHtcblx0ZnVuY3Rpb24gZXh0ZW5kICgpIHtcblx0XHR2YXIgaSA9IDA7XG5cdFx0dmFyIHJlc3VsdCA9IHt9O1xuXHRcdGZvciAoOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXR0cmlidXRlcyA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIGF0dHJpYnV0ZXMpIHtcblx0XHRcdFx0cmVzdWx0W2tleV0gPSBhdHRyaWJ1dGVzW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmdW5jdGlvbiBkZWNvZGUgKHMpIHtcblx0XHRyZXR1cm4gcy5yZXBsYWNlKC8oJVswLTlBLVpdezJ9KSsvZywgZGVjb2RlVVJJQ29tcG9uZW50KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGluaXQgKGNvbnZlcnRlcikge1xuXHRcdGZ1bmN0aW9uIGFwaSgpIHt9XG5cblx0XHRmdW5jdGlvbiBzZXQgKGtleSwgdmFsdWUsIGF0dHJpYnV0ZXMpIHtcblx0XHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0YXR0cmlidXRlcyA9IGV4dGVuZCh7XG5cdFx0XHRcdHBhdGg6ICcvJ1xuXHRcdFx0fSwgYXBpLmRlZmF1bHRzLCBhdHRyaWJ1dGVzKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBhdHRyaWJ1dGVzLmV4cGlyZXMgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdGF0dHJpYnV0ZXMuZXhwaXJlcyA9IG5ldyBEYXRlKG5ldyBEYXRlKCkgKiAxICsgYXR0cmlidXRlcy5leHBpcmVzICogODY0ZSs1KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2UncmUgdXNpbmcgXCJleHBpcmVzXCIgYmVjYXVzZSBcIm1heC1hZ2
1023VcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IElFXG5cdFx0XHRhdHRyaWJ1dGVzLmV4cGlyZXMgPSBhdHRyaWJ1dGVzLmV4cGlyZXMgPyBhdHRyaWJ1dGVzLmV4cGlyZXMudG9VVENTdHJpbmcoKSA6ICcnO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuXHRcdFx0XHRpZiAoL15bXFx7XFxbXS8udGVzdChyZXN1bHQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSByZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRcdHZhbHVlID0gY29udmVydGVyLndyaXRlID9cblx0XHRcdFx0Y29udmVydGVyLndyaXRlKHZhbHVlLCBrZXkpIDpcblx0XHRcdFx0ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh2YWx1ZSkpXG5cdFx0XHRcdFx0LnJlcGxhY2UoLyUoMjN8MjR8MjZ8MkJ8M0F8M0N8M0V8M0R8MkZ8M0Z8NDB8NUJ8NUR8NUV8NjB8N0J8N0R8N0MpL2csIGRlY29kZVVSSUNvbXBvbmVudCk7XG5cblx0XHRcdGtleSA9IGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoa2V5KSlcblx0XHRcdFx0LnJlcGxhY2UoLyUoMjN8MjR8MjZ8MkJ8NUV8NjB8N0MpL2csIGRlY29kZVVSSUNvbXBvbmVudClcblx0XHRcdFx0LnJlcGxhY2UoL1tcXChcXCldL2csIGVzY2FwZSk7XG5cblx0XHRcdHZhciBzdHJpbmdpZmllZEF0dHJpYnV0ZXMgPSAnJztcblx0XHRcdGZvciAodmFyIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlcykge1xuXHRcdFx0XHRpZiAoIWF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0pIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzdHJpbmdpZmllZEF0dHJpYnV0ZXMgKz0gJzsgJyArIGF0dHJpYnV0ZU5hbWU7XG5cdFx0XHRcdGlmIChhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDb25zaWRlcnMgUkZDIDYyNjUgc2VjdGlvbiA1LjI6XG5cdFx0XHRcdC8vIC4uLlxuXHRcdFx0XHQvLyAzLiAgSWYgdGhlIHJlbWFpbmluZyB1bnBhcnNlZC1hdHRyaWJ1dGVzIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpXG5cdFx0XHRcdC8vICAgICBjaGFyYWN0ZXI6XG5cdFx0XHRcdC8vIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sXG5cdFx0XHRcdC8vIG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIikgY2hhcmFjdGVyLlxuXHRcdFx0XHQvLyAuLi5cblx0XHRcdFx0c3RyaW5naWZpZWRBdHRyaWJ1dGVzICs9ICc9JyArIGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0uc3BsaXQoJzsnKVswXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIChkb2N1bWVudC5jb29raWUgPSBrZXkgKyAnPScgKyB2YWx1ZSArIHN0cmluZ2lmaWVkQXR0cmlidXRlcyk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2V0IChrZXksIGpzb24pIHtcblx0XHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGphciA9IHt9O1xuXHRcdFx0Ly8gVG8gcHJldmVudCB0aGUgZm9yIGxvb3AgaW4gdGhlIGZpcnN0IHBsYWNlIGFzc2lnbiBhbiBlbXB0eSBhcnJheVxuXHRcdFx0Ly8gaW4gY2FzZSB0aGVyZSBhcmUgbm8gY29va2llcyBhdCBhbGwuXG5cdFx0XHR2YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZSA/IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOyAnKSA6IFtdO1xuXHRcdFx0dmFyIGkgPSAwO1xuXG5cdFx0XHRmb3IgKDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIHBhcnRzID0gY29va2llc1tpXS5zcGxpdCgnPScpO1xuXHRcdFx0XHR2YXIgY29va2llID0gcGFydHMuc2xpY2UoMSkuam9pbignPScpO1xuXG5cdFx0XHRcdGlmICghanNvbiAmJiBjb29raWUuY2hhckF0KDApID09PSAnXCInKSB7XG5cdFx0XHRcdFx0Y29va2llID0gY29va2llLnNsaWNlKDEsIC0xKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0dmFyIG5hbWUgPSBkZWNvZGUocGFydHNbMF0pO1xuXHRcdFx0XHRcdGNvb2tpZSA9IChjb252ZXJ0ZXIucmVhZCB8fCBjb252ZXJ0ZXIpKGNvb2tpZSwgbmFtZSkgfHxcblx0XHRcdFx0XHRcdGRlY29kZShjb29raWUpO1xuXG5cdFx0XHRcdFx0aWYgKGpzb24pIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGNvb2tpZSA9IEpTT04ucGFyc2UoY29va2llKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHt9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0amFyW25hbWVdID0gY29va2llO1xuXG5cdFx0XHRcdFx0aWYgKGtleSA9PT0gbmFtZSkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4ga2V5ID8gamFyW2tleV0gOiBqYXI7XG5cdFx0fVxuXG5cdFx0YXBpLnNldCA9IHNldDtcblx0XHRhcGkuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGdldChrZXksIGZhbHNlIC8qIHJlYWQgYXMgcmF3ICovKTtcblx0XHR9O1xuXHRcdGFwaS5nZXRKU09OID0gZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGdldChrZXksIHRydWUgLyogcmVhZCBhcyBqc29uICovKTtcblx0XHR9O1xuXHRcdGFwaS5yZW1vdmUgPSBmdW5jdGlvbiAoa2V5LCBhdHRyaWJ1dGVzKSB7XG5cdFx0XHRzZXQoa2V5LCAnJywgZXh0ZW5kKGF0dHJpYnV0ZXMsIHtcblx0XHRcdFx0ZXhwaXJlczogLTFcblx0XHRcdH0pKTtcblx0XHR9O1xuXG5cdFx0YXBpLmRlZmF1bHRzID0ge307XG5cblx0XHRhcGkud2l0aENvbnZlcnRlciA9IGluaXQ7XG5cblx0XHRyZXR1cm4gYXBpO1xuXHR9XG5cblx0cmV0dXJuIGluaXQoZnVuY3Rpb24gKCkge30pO1xufSkpO1xuIl19
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.