1(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ 2(function (global){(function (){ 3"use strict"; 4 5var _stickybits = _interopRequireDefault(require("./polyfills/stickybits.js")); 6 7var _lazysizes = _interopRequireDefault(require("lazysizes")); 8 9require("lazysizes/plugins/native-loading/ls.native-loading"); 10 11var _pxEasyExpand = _interopRequireDefault(require("./modules/pxEasyExpand.js")); 12 13var _webcam = _interopRequireDefault(require("./modules/webcam.js")); 14 15var _swiper = _interopRequireDefault(require("./modules/swiper.js")); 16 17var _leaflet = _interopRequireDefault(require("./modules/leaflet/leaflet.js")); 18 19function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 20 21(function (l) { 22 var i, 23 s = { 24 touchend: function touchend() {} 25 }; 26 27 for (i in s) { 28 l.addEventListener(i, s); 29 } 30})(document); 31 32global.ready = function (fn) { 33 if (document.attachEvent ? document.readyState === "complete" : document.readyState !== "loading") { 34 fn(); 35 } else { 36 document.addEventListener('DOMContentLoaded', fn); 37 } 38}; 39 40require('./scripts/high-contrast-mode.js'); 41 42global.createElement = function (domString) { 43 return new DOMParser().parseFromString(domString, 'text/html').body.firstChild; 44}; 45 46global.hasParent = function (el, selector) { 47 if (el) { 48 do { 49 if (el == document.querySelector(selector)) { 50 return true; 51 } 52 53 if (el.nodeType === 9) { 54 break; 55 } 56 } while (el = el.parentNode); 57 } 58 59 return false; 60}; 61 62ready(function () { 63 (0, _stickybits.default)('.nav-trail', { 64 useStickyClasses: true 65 }); 66}); 67_lazysizes.default.cfg.nativeLoading = { 68 setLoadingAttribute: true, 69 disableListeners: { 70 scroll: true 71 } 72}; 73_lazysizes.default.cfg.lazyClass = 'js-load'; 74_lazysizes.default.cfg.loadingClass = 'js-loading'; 75_lazysizes.default.cfg.loadedClass = 'js-loaded'; 76_lazysizes.default.cfg.autosizesClass = 'js-autosizes'; 77 78require('./partials/scrollstart.js'); 79 80require('./partials/lightbox.js'); 81 82require('./modules/mmenu.js'); 83 84require('./partials/mmenu.js'); 85 86global.pxEasyExpand = _pxEasyExpand.default; 87 88require('./partials/hamburger.js'); 89 90require('./partials/searchform.js'); 91 92require('./partials/meta.js'); 93 94require('./partials/toggle.js'); 95 96require('./partials/form-infobutton.js'); 97 98ready(function () { 99 var webcam = new _webcam.default('.webcam'); 100}); 101global.Swiper = _swiper.default; 102 103require('./partials/swiper.js'); 104 105require('./modules/leaflet/leaflet.control.fullscreen.js'); 106 107require('./modules/leaflet/leaflet.sleep.js'); 108 109require('./scripts/leaflet.js'); 110 111ready(function () { 112 var mapCE = document.querySelectorAll('.a5-map:not([data-consent-ready])'); 113 114 for (var i = 0; i < mapCE.length; i++) { 115 window.initLeaflet(mapCE[i]); 116 } 117}); 118 119require('./scripts/leaflet-extended.js'); 120 121ready(function () { 122 var mapCE = document.querySelectorAll('.a5-map-with-marker:not([data-consent-ready])'); 123 124 for (var i = 0; i < mapCE.length; i++) { 125 window.initLeafletExtended(mapCE[i]); 126 } 127}); 128 129}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) 130 131},{"./modules/leaflet/leaflet.control.fullscreen.js":3,"./modules/leaflet/leaflet.js":4,"./modules/leaflet/leaflet.sleep.js":5,"./modules/mmenu.js":6,"./modules/pxEasyExpand.js":7,"./modules/swiper.js":8,"./modules/webcam.js":9,"./partials/form-infobutton.js":10,"./partials/hamburger.js":11,"./partials/lightbox.js":12,"./partials/meta.js":13,"./partials/mmenu.js":14,"./partials/scrollstart.js":15,"./partials/searchform.js":16,"./partials/swiper.js":17,"./partials/toggle.js":18,"./polyfills/stickybits.js":19,"./scripts/high-contrast-mode.js":20,"./scripts/leaflet-extended.js":21,"./scripts/leaflet.js":22,"lazysizes":23,"lazysizes/plugins/native-loading/ls.native-loading":24}],2:[function(require,module,exports){ 132"use strict"; 133 134function _typeof2(obj) { "@babel/helpers - typeof"; return _typeof2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof2(obj); } 135 136(function (global, factory) { 137 (typeof exports === "undefined" ? "undefined" : _typeof2(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.GLightbox = factory()); 138})(void 0, function () { 139 'use strict'; 140 141 function _typeof(obj) { 142 "@babel/helpers - typeof"; 143 144 if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { 145 _typeof = function _typeof(obj) { 146 return typeof obj; 147 }; 148 } else { 149 _typeof = function _typeof(obj) { 150 return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; 151 }; 152 } 153 154 return _typeof(obj); 155 } 156 157 function _classCallCheck(instance, Constructor) { 158 if (!(instance instanceof Constructor)) { 159 throw new TypeError("Cannot call a class as a function"); 160 } 161 } 162 163 function _defineProperties(target, props) { 164 for (var i = 0; i < props.length; i++) { 165 var descriptor = props[i]; 166 descriptor.enumerable = descriptor.enumerable || false; 167 descriptor.configurable = true; 168 if ("value" in descriptor) descriptor.writable = true; 169 Object.defineProperty(target, descriptor.key, descriptor); 170 } 171 } 172 173 function _createClass(Constructor, protoProps, staticProps) { 174 if (protoProps) _defineProperties(Constructor.prototype, protoProps); 175 if (staticProps) _defineProperties(Constructor, staticProps); 176 return Constructor; 177 } 178 179 var uid = Date.now(); 180 181 function extend() { 182 var extended = {}; 183 var deep = true; 184 var i = 0; 185 var length = arguments.length; 186 187 if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') { 188 deep = arguments[0]; 189 i++; 190 } 191 192 var merge = function merge(obj) { 193 for (var prop in obj) { 194 if (Object.prototype.hasOwnProperty.call(obj, prop)) { 195 if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') { 196 extended[prop] = extend(true, extended[prop], obj[prop]); 197 } else { 198 extended[prop] = obj[prop]; 199 } 200 } 201 } 202 }; 203 204 for (; i < length; i++) { 205 var obj = arguments[i]; 206 merge(obj); 207 } 208 209 return extended; 210 } 211 212 function each(collection, callback) { 213 if (isNode(collection) || collection === window || collection === document) { 214 collection = [collection]; 215 } 216 217 if (!isArrayLike(collection) && !isObject(collection)) { 218 collection = [collection]; 219 } 220 221 if (size(collection) == 0) { 222 return; 223 } 224 225 if (isArrayLike(collection) && !isObject(collection)) { 226 var l = collection.length, 227 i = 0; 228 229 for (; i < l; i++) { 230 if (callback.call(collection[i], collection[i], i, collection) === false) { 231 break; 232 } 233 } 234 } else if (isObject(collection)) { 235 for (var key in collection) { 236 if (has(collection, key)) { 237 if (callback.call(collection[key], collection[key], key, collection) === false) { 238 break; 239 } 240 } 241 } 242 } 243 } 244 245 function getNodeEvents(node) { 246 var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 247 var fn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; 248 var cache = node[uid] = node[uid] || []; 249 var data = { 250 all: cache, 251 evt: null, 252 found: null 253 }; 254 255 if (name && fn && size(cache) > 0) { 256 each(cache, function (cl, i) { 257 if (cl.eventName == name && cl.fn.toString() == fn.toString()) { 258 data.found = true; 259 data.evt = i; 260 return false;
vendor: 44,866 bytes, lines 261-1867
261 } 262 }); 263 } 264 265 return data; 266 } 267 268 function addEvent(eventName) { 269 var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, 270 onElement = _ref.onElement, 271 withCallback = _ref.withCallback, 272 _ref$avoidDuplicate = _ref.avoidDuplicate, 273 avoidDuplicate = _ref$avoidDuplicate === void 0 ? true : _ref$avoidDuplicate, 274 _ref$once = _ref.once, 275 once = _ref$once === void 0 ? false : _ref$once, 276 _ref$useCapture = _ref.useCapture, 277 useCapture = _ref$useCapture === void 0 ? false : _ref$useCapture; 278 279 var thisArg = arguments.length > 2 ? arguments[2] : undefined; 280 var element = onElement || []; 281 282 if (isString(element)) { 283 element = document.querySelectorAll(element); 284 } 285 286 function handler(event) { 287 if (isFunction(withCallback)) { 288 withCallback.call(thisArg, event, this); 289 } 290 291 if (once) { 292 handler.destroy(); 293 } 294 } 295 296 handler.destroy = function () { 297 each(element, function (el) { 298 var events = getNodeEvents(el, eventName, handler); 299 300 if (events.found) { 301 events.all.splice(events.evt, 1); 302 } 303 304 if (el.removeEventListener) { 305 el.removeEventListener(eventName, handler, useCapture); 306 } 307 }); 308 }; 309 310 each(element, function (el) { 311 var events = getNodeEvents(el, eventName, handler); 312 313 if (el.addEventListener && avoidDuplicate && !events.found || !avoidDuplicate) { 314 el.addEventListener(eventName, handler, useCapture); 315 events.all.push({ 316 eventName: eventName, 317 fn: handler 318 }); 319 } 320 }); 321 return handler; 322 } 323 324 function addClass(node, name) { 325 each(name.split(' '), function (cl) { 326 return node.classList.add(cl); 327 }); 328 } 329 330 function removeClass(node, name) { 331 each(name.split(' '), function (cl) { 332 return node.classList.remove(cl); 333 }); 334 } 335 336 function hasClass(node, name) { 337 return node.classList.contains(name); 338 } 339 340 function closest(elem, selector) { 341 while (elem !== document.body) { 342 elem = elem.parentElement; 343 344 if (!elem) { 345 return false; 346 } 347 348 var matches = typeof elem.matches == 'function' ? elem.matches(selector) : elem.msMatchesSelector(selector); 349 350 if (matches) { 351 return elem; 352 } 353 } 354 } 355 356 function animateElement(element) { 357 var animation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; 358 var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 359 360 if (!element || animation === '') { 361 return false; 362 } 363 364 if (animation == 'none') { 365 if (isFunction(callback)) { 366 callback(); 367 } 368 369 return false; 370 } 371 372 var animationEnd = whichAnimationEvent(); 373 var animationNames = animation.split(' '); 374 each(animationNames, function (name) { 375 addClass(element, 'g' + name); 376 }); 377 addEvent(animationEnd, { 378 onElement: element, 379 avoidDuplicate: false, 380 once: true, 381 withCallback: function withCallback(event, target) { 382 each(animationNames, function (name) { 383 removeClass(target, 'g' + name); 384 }); 385 386 if (isFunction(callback)) { 387 callback(); 388 } 389 } 390 }); 391 } 392 393 function cssTransform(node) { 394 var translate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; 395 396 if (translate == '') { 397 node.style.webkitTransform = ''; 398 node.style.MozTransform = ''; 399 node.style.msTransform = ''; 400 node.style.OTransform = ''; 401 node.style.transform = ''; 402 return false; 403 } 404 405 node.style.webkitTransform = translate; 406 node.style.MozTransform = translate; 407 node.style.msTransform = translate; 408 node.style.OTransform = translate; 409 node.style.transform = translate; 410 } 411 412 function show(element) { 413 element.style.display = 'block'; 414 } 415 416 function hide(element) { 417 element.style.display = 'none'; 418 } 419 420 function createHTML(htmlStr) { 421 var frag = document.createDocumentFragment(), 422 temp = document.createElement('div'); 423 temp.innerHTML = htmlStr; 424 425 while (temp.firstChild) { 426 frag.appendChild(temp.firstChild); 427 } 428 429 return frag; 430 } 431 432 function windowSize() { 433 return { 434 width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, 435 height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight 436 }; 437 } 438 439 function whichAnimationEvent() { 440 var t, 441 el = document.createElement('fakeelement'); 442 var animations = { 443 animation: 'animationend', 444 OAnimation: 'oAnimationEnd', 445 MozAnimation: 'animationend', 446 WebkitAnimation: 'webkitAnimationEnd' 447 }; 448 449 for (t in animations) { 450 if (el.style[t] !== undefined) { 451 return animations[t]; 452 } 453 } 454 } 455 456 function whichTransitionEvent() { 457 var t, 458 el = document.createElement('fakeelement'); 459 var transitions = { 460 transition: 'transitionend', 461 OTransition: 'oTransitionEnd', 462 MozTransition: 'transitionend', 463 WebkitTransition: 'webkitTransitionEnd' 464 }; 465 466 for (t in transitions) { 467 if (el.style[t] !== undefined) { 468 return transitions[t]; 469 } 470 } 471 } 472 473 function createIframe(config) { 474 var url = config.url, 475 allow = config.allow, 476 callback = config.callback, 477 appendTo = config.appendTo; 478 var iframe = document.createElement('iframe'); 479 iframe.className = 'vimeo-video gvideo'; 480 iframe.src = url; 481 iframe.style.width = '100%'; 482 iframe.style.height = '100%'; 483 484 if (allow) { 485 iframe.setAttribute('allow', allow); 486 } 487 488 iframe.onload = function () { 489 addClass(iframe, 'node-ready'); 490 491 if (isFunction(callback)) { 492 callback(); 493 } 494 }; 495 496 if (appendTo) { 497 appendTo.appendChild(iframe); 498 } 499 500 return iframe; 501 } 502 503 function waitUntil(check, onComplete, delay, timeout) { 504 if (check()) { 505 onComplete(); 506 return; 507 } 508 509 if (!delay) { 510 delay = 100; 511 } 512 513 var timeoutPointer; 514 var intervalPointer = setInterval(function () { 515 if (!check()) { 516 return; 517 } 518 519 clearInterval(intervalPointer); 520 521 if (timeoutPointer) { 522 clearTimeout(timeoutPointer); 523 } 524 525 onComplete(); 526 }, delay); 527 528 if (timeout) { 529 timeoutPointer = setTimeout(function () { 530 clearInterval(intervalPointer); 531 }, timeout); 532 } 533 } 534 535 function injectAssets(url, waitFor, callback) { 536 if (isNil(url)) { 537 console.error('Inject assets error'); 538 return; 539 } 540 541 if (isFunction(waitFor)) { 542 callback = waitFor; 543 waitFor = false; 544 } 545 546 if (isString(waitFor) && waitFor in window) { 547 if (isFunction(callback)) { 548 callback(); 549 } 550 551 return; 552 } 553 554 var found; 555 556 if (url.indexOf('.css') !== -1) { 557 found = document.querySelectorAll('link[href="' + url + '"]'); 558 559 if (found && found.length > 0) { 560 if (isFunction(callback)) { 561 callback(); 562 } 563 564 return; 565 } 566 567 var head = document.getElementsByTagName('head')[0]; 568 var headStyles = head.querySelectorAll('link[rel="stylesheet"]'); 569 var link = document.createElement('link'); 570 link.rel = 'stylesheet'; 571 link.type = 'text/css'; 572 link.href = url; 573 link.media = 'all'; 574 575 if (headStyles) { 576 head.insertBefore(link, headStyles[0]); 577 } else { 578 head.appendChild(link); 579 } 580 581 if (isFunction(callback)) { 582 callback(); 583 } 584 585 return; 586 } 587 588 found = document.querySelectorAll('script[src="' + url + '"]'); 589 590 if (found && found.length > 0) { 591 if (isFunction(callback)) { 592 if (isString(waitFor)) { 593 waitUntil(function () { 594 return typeof window[waitFor] !== 'undefined'; 595 }, function () { 596 callback(); 597 }); 598 return false; 599 } 600 601 callback(); 602 } 603 604 return; 605 } 606 607 var script = document.createElement('script'); 608 script.type = 'text/javascript'; 609 script.src = url; 610 611 script.onload = function () { 612 if (isFunction(callback)) { 613 if (isString(waitFor)) { 614 waitUntil(function () { 615 return typeof window[waitFor] !== 'undefined'; 616 }, function () { 617 callback(); 618 }); 619 return false; 620 } 621 622 callback(); 623 } 624 }; 625 626 document.body.appendChild(script); 627 return; 628 } 629 630 function isMobile() { 631 return 'navigator' in window && window.navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(Android)|(PlayBook)|(BB10)|(BlackBerry)|(Opera Mini)|(IEMobile)|(webOS)|(MeeGo)/i); 632 } 633 634 function isTouch() { 635 return isMobile() !== null || document.createTouch !== undefined || 'ontouchstart' in window || 'onmsgesturechange' in window || navigator.msMaxTouchPoints; 636 } 637 638 function isFunction(f) { 639 return typeof f === 'function'; 640 } 641 642 function isString(s) { 643 return typeof s === 'string'; 644 } 645 646 function isNode(el) { 647 return !!(el && el.nodeType && el.nodeType == 1); 648 } 649 650 function isArray(ar) { 651 return Array.isArray(ar); 652 } 653 654 function isArrayLike(ar) { 655 return ar && ar.length && isFinite(ar.length); 656 } 657 658 function isObject(o) { 659 var type = _typeof(o); 660 661 return type === 'object' && o != null && !isFunction(o) && !isArray(o); 662 } 663 664 function isNil(o) { 665 return o == null; 666 } 667 668 function has(obj, key) { 669 return obj !== null && hasOwnProperty.call(obj, key); 670 } 671 672 function size(o) { 673 if (isObject(o)) { 674 if (o.keys) { 675 return o.keys().length; 676 } 677 678 var l = 0; 679 680 for (var k in o) { 681 if (has(o, k)) { 682 l++; 683 } 684 } 685 686 return l; 687 } else { 688 return o.length; 689 } 690 } 691 692 function isNumber(n) { 693 return !isNaN(parseFloat(n)) && isFinite(n); 694 } 695 696 function getNextFocusElement() { 697 var current = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1; 698 var btns = document.querySelectorAll('.gbtn[data-taborder]:not(.disabled)'); 699 700 if (!btns.length) { 701 return false; 702 } 703 704 if (btns.length == 1) { 705 return btns[0]; 706 } 707 708 if (typeof current == 'string') { 709 current = parseInt(current); 710 } 711 712 var newIndex = current < 0 ? 1 : current + 1; 713 714 if (newIndex > btns.length) { 715 newIndex = '1'; 716 } 717 718 var orders = []; 719 each(btns, function (btn) { 720 orders.push(btn.getAttribute('data-taborder')); 721 }); 722 var nextOrders = orders.filter(function (el) { 723 return el >= parseInt(newIndex); 724 }); 725 var nextFocus = nextOrders.sort()[0]; 726 return document.querySelector(".gbtn[data-taborder=\"".concat(nextFocus, "\"]")); 727 } 728 729 function keyboardNavigation(instance) { 730 if (instance.events.hasOwnProperty('keyboard')) { 731 return false; 732 } 733 734 instance.events['keyboard'] = addEvent('keydown', { 735 onElement: window, 736 withCallback: function withCallback(event, target) { 737 event = event || window.event; 738 var key = event.keyCode; 739 740 if (key == 9) { 741 var focusedButton = document.querySelector('.gbtn.focused'); 742 743 if (!focusedButton) { 744 var activeElement = document.activeElement && document.activeElement.nodeName ? document.activeElement.nodeName.toLocaleLowerCase() : false; 745 746 if (activeElement == 'input' || activeElement == 'textarea' || activeElement == 'button') { 747 return; 748 } 749 } 750 751 event.preventDefault(); 752 var btns = document.querySelectorAll('.gbtn[data-taborder]'); 753 754 if (!btns || btns.length <= 0) { 755 return; 756 } 757 758 if (!focusedButton) { 759 var first = getNextFocusElement(); 760 761 if (first) { 762 first.focus(); 763 addClass(first, 'focused'); 764 } 765 766 return; 767 } 768 769 var currentFocusOrder = focusedButton.getAttribute('data-taborder'); 770 var nextFocus = getNextFocusElement(currentFocusOrder); 771 removeClass(focusedButton, 'focused'); 772 773 if (nextFocus) { 774 nextFocus.focus(); 775 addClass(nextFocus, 'focused'); 776 } 777 } 778 779 if (key == 39) { 780 instance.nextSlide(); 781 } 782 783 if (key == 37) { 784 instance.prevSlide(); 785 } 786 787 if (key == 27) { 788 instance.close(); 789 } 790 } 791 }); 792 } 793 794 function getLen(v) { 795 return Math.sqrt(v.x * v.x + v.y * v.y); 796 } 797 798 function dot(v1, v2) { 799 return v1.x * v2.x + v1.y * v2.y; 800 } 801 802 function getAngle(v1, v2) { 803 var mr = getLen(v1) * getLen(v2); 804 805 if (mr === 0) { 806 return 0; 807 } 808 809 var r = dot(v1, v2) / mr; 810 811 if (r > 1) { 812 r = 1; 813 } 814 815 return Math.acos(r); 816 } 817 818 function cross(v1, v2) { 819 return v1.x * v2.y - v2.x * v1.y; 820 } 821 822 function getRotateAngle(v1, v2) { 823 var angle = getAngle(v1, v2); 824 825 if (cross(v1, v2) > 0) { 826 angle *= -1; 827 } 828 829 return angle * 180 / Math.PI; 830 } 831 832 var EventsHandlerAdmin = function () { 833 function EventsHandlerAdmin(el) { 834 _classCallCheck(this, EventsHandlerAdmin); 835 836 this.handlers = []; 837 this.el = el; 838 } 839 840 _createClass(EventsHandlerAdmin, [{ 841 key: "add", 842 value: function add(handler) { 843 this.handlers.push(handler); 844 } 845 }, { 846 key: "del", 847 value: function del(handler) { 848 if (!handler) { 849 this.handlers = []; 850 } 851 852 for (var i = this.handlers.length; i >= 0; i--) { 853 if (this.handlers[i] === handler) { 854 this.handlers.splice(i, 1); 855 } 856 } 857 } 858 }, { 859 key: "dispatch", 860 value: function dispatch() { 861 for (var i = 0, len = this.handlers.length; i < len; i++) { 862 var handler = this.handlers[i]; 863 864 if (typeof handler === 'function') { 865 handler.apply(this.el, arguments); 866 } 867 } 868 } 869 }]); 870 871 return EventsHandlerAdmin; 872 }(); 873 874 function wrapFunc(el, handler) { 875 var EventshandlerAdmin = new EventsHandlerAdmin(el); 876 EventshandlerAdmin.add(handler); 877 return EventshandlerAdmin; 878 } 879 880 var TouchEvents = function () { 881 function TouchEvents(el, option) { 882 _classCallCheck(this, TouchEvents); 883 884 this.element = typeof el == 'string' ? document.querySelector(el) : el; 885 this.start = this.start.bind(this); 886 this.move = this.move.bind(this); 887 this.end = this.end.bind(this); 888 this.cancel = this.cancel.bind(this); 889 this.element.addEventListener('touchstart', this.start, false); 890 this.element.addEventListener('touchmove', this.move, false); 891 this.element.addEventListener('touchend', this.end, false); 892 this.element.addEventListener('touchcancel', this.cancel, false); 893 this.preV = { 894 x: null, 895 y: null 896 }; 897 this.pinchStartLen = null; 898 this.zoom = 1; 899 this.isDoubleTap = false; 900 901 var noop = function noop() {}; 902 903 this.rotate = wrapFunc(this.element, option.rotate || noop); 904 this.touchStart = wrapFunc(this.element, option.touchStart || noop); 905 this.multipointStart = wrapFunc(this.element, option.multipointStart || noop); 906 this.multipointEnd = wrapFunc(this.element, option.multipointEnd || noop); 907 this.pinch = wrapFunc(this.element, option.pinch || noop); 908 this.swipe = wrapFunc(this.element, option.swipe || noop); 909 this.tap = wrapFunc(this.element, option.tap || noop); 910 this.doubleTap = wrapFunc(this.element, option.doubleTap || noop); 911 this.longTap = wrapFunc(this.element, option.longTap || noop); 912 this.singleTap = wrapFunc(this.element, option.singleTap || noop); 913 this.pressMove = wrapFunc(this.element, option.pressMove || noop); 914 this.twoFingerPressMove = wrapFunc(this.element, option.twoFingerPressMove || noop); 915 this.touchMove = wrapFunc(this.element, option.touchMove || noop); 916 this.touchEnd = wrapFunc(this.element, option.touchEnd || noop); 917 this.touchCancel = wrapFunc(this.element, option.touchCancel || noop); 918 this.translateContainer = this.element; 919 this._cancelAllHandler = this.cancelAll.bind(this); 920 window.addEventListener('scroll', this._cancelAllHandler); 921 this.delta = null; 922 this.last = null; 923 this.now = null; 924 this.tapTimeout = null; 925 this.singleTapTimeout = null; 926 this.longTapTimeout = null; 927 this.swipeTimeout = null; 928 this.x1 = this.x2 = this.y1 = this.y2 = null; 929 this.preTapPosition = { 930 x: null, 931 y: null 932 }; 933 } 934 935 _createClass(TouchEvents, [{ 936 key: "start", 937 value: function start(evt) { 938 if (!evt.touches) { 939 return; 940 } 941 942 var ignoreDragFor = ['a', 'button', 'input']; 943 944 if (evt.target && evt.target.nodeName && ignoreDragFor.indexOf(evt.target.nodeName.toLowerCase()) >= 0) { 945 console.log('ignore drag for this touched element', evt.target.nodeName.toLowerCase()); 946 return; 947 } 948 949 this.now = Date.now(); 950 this.x1 = evt.touches[0].pageX; 951 this.y1 = evt.touches[0].pageY; 952 this.delta = this.now - (this.last || this.now); 953 this.touchStart.dispatch(evt, this.element); 954 955 if (this.preTapPosition.x !== null) { 956 this.isDoubleTap = this.delta > 0 && this.delta <= 250 && Math.abs(this.preTapPosition.x - this.x1) < 30 && Math.abs(this.preTapPosition.y - this.y1) < 30; 957 958 if (this.isDoubleTap) { 959 clearTimeout(this.singleTapTimeout); 960 } 961 } 962 963 this.preTapPosition.x = this.x1; 964 this.preTapPosition.y = this.y1; 965 this.last = this.now; 966 var preV = this.preV, 967 len = evt.touches.length; 968 969 if (len > 1) { 970 this._cancelLongTap(); 971 972 this._cancelSingleTap(); 973 974 var v = { 975 x: evt.touches[1].pageX - this.x1, 976 y: evt.touches[1].pageY - this.y1 977 }; 978 preV.x = v.x; 979 preV.y = v.y; 980 this.pinchStartLen = getLen(preV); 981 this.multipointStart.dispatch(evt, this.element); 982 } 983 984 this._preventTap = false; 985 this.longTapTimeout = setTimeout(function () { 986 this.longTap.dispatch(evt, this.element); 987 this._preventTap = true; 988 }.bind(this), 750); 989 } 990 }, { 991 key: "move", 992 value: function move(evt) { 993 if (!evt.touches) { 994 return; 995 } 996 997 var preV = this.preV, 998 len = evt.touches.length, 999 currentX = evt.touches[0].pageX, 1000 currentY = evt.touches[0].pageY; 1001 this.isDoubleTap = false; 1002 1003 if (len > 1) { 1004 var sCurrentX = evt.touches[1].pageX, 1005 sCurrentY = evt.touches[1].pageY; 1006 var v = { 1007 x: evt.touches[1].pageX - currentX, 1008 y: evt.touches[1].pageY - currentY 1009 }; 1010 1011 if (preV.x !== null) { 1012 if (this.pinchStartLen > 0) { 1013 evt.zoom = getLen(v) / this.pinchStartLen; 1014 this.pinch.dispatch(evt, this.element); 1015 } 1016 1017 evt.angle = getRotateAngle(v, preV); 1018 this.rotate.dispatch(evt, this.element); 1019 } 1020 1021 preV.x = v.x; 1022 preV.y = v.y; 1023 1024 if (this.x2 !== null && this.sx2 !== null) { 1025 evt.deltaX = (currentX - this.x2 + sCurrentX - this.sx2) / 2; 1026 evt.deltaY = (currentY - this.y2 + sCurrentY - this.sy2) / 2; 1027 } else { 1028 evt.deltaX = 0; 1029 evt.deltaY = 0; 1030 } 1031 1032 this.twoFingerPressMove.dispatch(evt, this.element); 1033 this.sx2 = sCurrentX; 1034 this.sy2 = sCurrentY; 1035 } else { 1036 if (this.x2 !== null) { 1037 evt.deltaX = currentX - this.x2; 1038 evt.deltaY = currentY - this.y2; 1039 var movedX = Math.abs(this.x1 - this.x2), 1040 movedY = Math.abs(this.y1 - this.y2); 1041 1042 if (movedX > 10 || movedY > 10) { 1043 this._preventTap = true; 1044 } 1045 } else { 1046 evt.deltaX = 0; 1047 evt.deltaY = 0; 1048 } 1049 1050 this.pressMove.dispatch(evt, this.element); 1051 } 1052 1053 this.touchMove.dispatch(evt, this.element); 1054 1055 this._cancelLongTap(); 1056 1057 this.x2 = currentX; 1058 this.y2 = currentY; 1059 1060 if (len > 1) { 1061 evt.preventDefault(); 1062 } 1063 } 1064 }, { 1065 key: "end", 1066 value: function end(evt) { 1067 if (!evt.changedTouches) { 1068 return; 1069 } 1070 1071 this._cancelLongTap(); 1072 1073 var self = this; 1074 1075 if (evt.touches.length < 2) { 1076 this.multipointEnd.dispatch(evt, this.element); 1077 this.sx2 = this.sy2 = null; 1078 } 1079 1080 if (this.x2 && Math.abs(this.x1 - this.x2) > 30 || this.y2 && Math.abs(this.y1 - this.y2) > 30) { 1081 evt.direction = this._swipeDirection(this.x1, this.x2, this.y1, this.y2); 1082 this.swipeTimeout = setTimeout(function () { 1083 self.swipe.dispatch(evt, self.element); 1084 }, 0); 1085 } else { 1086 this.tapTimeout = setTimeout(function () { 1087 if (!self._preventTap) { 1088 self.tap.dispatch(evt, self.element); 1089 } 1090 1091 if (self.isDoubleTap) { 1092 self.doubleTap.dispatch(evt, self.element); 1093 self.isDoubleTap = false; 1094 } 1095 }, 0); 1096 1097 if (!self.isDoubleTap) { 1098 self.singleTapTimeout = setTimeout(function () { 1099 self.singleTap.dispatch(evt, self.element); 1100 }, 250); 1101 } 1102 } 1103 1104 this.touchEnd.dispatch(evt, this.element); 1105 this.preV.x = 0; 1106 this.preV.y = 0; 1107 this.zoom = 1; 1108 this.pinchStartLen = null; 1109 this.x1 = this.x2 = this.y1 = this.y2 = null; 1110 } 1111 }, { 1112 key: "cancelAll", 1113 value: function cancelAll() { 1114 this._preventTap = true; 1115 clearTimeout(this.singleTapTimeout); 1116 clearTimeout(this.tapTimeout); 1117 clearTimeout(this.longTapTimeout); 1118 clearTimeout(this.swipeTimeout); 1119 } 1120 }, { 1121 key: "cancel", 1122 value: function cancel(evt) { 1123 this.cancelAll(); 1124 this.touchCancel.dispatch(evt, this.element); 1125 } 1126 }, { 1127 key: "_cancelLongTap", 1128 value: function _cancelLongTap() { 1129 clearTimeout(this.longTapTimeout); 1130 } 1131 }, { 1132 key: "_cancelSingleTap", 1133 value: function _cancelSingleTap() { 1134 clearTimeout(this.singleTapTimeout); 1135 } 1136 }, { 1137 key: "_swipeDirection", 1138 value: function _swipeDirection(x1, x2, y1, y2) { 1139 return Math.abs(x1 - x2) >= Math.abs(y1 - y2) ? x1 - x2 > 0 ? 'Left' : 'Right' : y1 - y2 > 0 ? 'Up' : 'Down'; 1140 } 1141 }, { 1142 key: "on", 1143 value: function on(evt, handler) { 1144 if (this[evt]) { 1145 this[evt].add(handler); 1146 } 1147 } 1148 }, { 1149 key: "off", 1150 value: function off(evt, handler) { 1151 if (this[evt]) { 1152 this[evt].del(handler); 1153 } 1154 } 1155 }, { 1156 key: "destroy", 1157 value: function destroy() { 1158 if (this.singleTapTimeout) { 1159 clearTimeout(this.singleTapTimeout); 1160 } 1161 1162 if (this.tapTimeout) { 1163 clearTimeout(this.tapTimeout); 1164 } 1165 1166 if (this.longTapTimeout) { 1167 clearTimeout(this.longTapTimeout); 1168 } 1169 1170 if (this.swipeTimeout) { 1171 clearTimeout(this.swipeTimeout); 1172 } 1173 1174 this.element.removeEventListener('touchstart', this.start); 1175 this.element.removeEventListener('touchmove', this.move); 1176 this.element.removeEventListener('touchend', this.end); 1177 this.element.removeEventListener('touchcancel', this.cancel); 1178 this.rotate.del(); 1179 this.touchStart.del(); 1180 this.multipointStart.del(); 1181 this.multipointEnd.del(); 1182 this.pinch.del(); 1183 this.swipe.del(); 1184 this.tap.del(); 1185 this.doubleTap.del(); 1186 this.longTap.del(); 1187 this.singleTap.del(); 1188 this.pressMove.del(); 1189 this.twoFingerPressMove.del(); 1190 this.touchMove.del(); 1191 this.touchEnd.del(); 1192 this.touchCancel.del(); 1193 this.preV = this.pinchStartLen = this.zoom = this.isDoubleTap = this.delta = this.last = this.now = this.tapTimeout = this.singleTapTimeout = this.longTapTimeout = this.swipeTimeout = this.x1 = this.x2 = this.y1 = this.y2 = this.preTapPosition = this.rotate = this.touchStart = this.multipointStart = this.multipointEnd = this.pinch = this.swipe = this.tap = this.doubleTap = this.longTap = this.singleTap = this.pressMove = this.touchMove = this.touchEnd = this.touchCancel = this.twoFingerPressMove = null; 1194 window.removeEventListener('scroll', this._cancelAllHandler); 1195 return null; 1196 } 1197 }]); 1198 1199 return TouchEvents; 1200 }(); 1201 1202 function resetSlideMove(slide) { 1203 var transitionEnd = whichTransitionEvent(); 1204 var windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; 1205 var media = hasClass(slide, 'gslide-media') ? slide : slide.querySelector('.gslide-media'); 1206 var container = closest(media, '.ginner-container'); 1207 var desc = slide.querySelector('.gslide-description'); 1208 1209 if (windowWidth > 769) { 1210 media = container; 1211 } 1212 1213 addClass(media, 'greset'); 1214 cssTransform(media, 'translate3d(0, 0, 0)'); 1215 addEvent(transitionEnd, { 1216 onElement: media, 1217 once: true, 1218 withCallback: function withCallback(event, target) { 1219 removeClass(media, 'greset'); 1220 } 1221 }); 1222 media.style.opacity = ''; 1223 1224 if (desc) { 1225 desc.style.opacity = ''; 1226 } 1227 } 1228 1229 function touchNavigation(instance) { 1230 if (instance.events.hasOwnProperty('touch')) { 1231 return false; 1232 } 1233 1234 var winSize = windowSize(); 1235 var winWidth = winSize.width; 1236 var winHeight = winSize.height; 1237 var process = false; 1238 var currentSlide = null; 1239 var media = null; 1240 var mediaImage = null; 1241 var doingMove = false; 1242 var initScale = 1; 1243 var maxScale = 4.5; 1244 var currentScale = 1; 1245 var doingZoom = false; 1246 var imageZoomed = false; 1247 var zoomedPosX = null; 1248 var zoomedPosY = null; 1249 var lastZoomedPosX = null; 1250 var lastZoomedPosY = null; 1251 var hDistance; 1252 var vDistance; 1253 var hDistancePercent = 0; 1254 var vDistancePercent = 0; 1255 var vSwipe = false; 1256 var hSwipe = false; 1257 var startCoords = {}; 1258 var endCoords = {}; 1259 var xDown = 0; 1260 var yDown = 0; 1261 var isInlined; 1262 var sliderWrapper = document.getElementById('glightbox-slider'); 1263 var overlay = document.querySelector('.goverlay'); 1264 var touchInstance = new TouchEvents(sliderWrapper, { 1265 touchStart: function touchStart(e) { 1266 process = true; 1267 1268 if (hasClass(e.targetTouches[0].target, 'ginner-container') || closest(e.targetTouches[0].target, '.gslide-desc') || e.targetTouches[0].target.nodeName.toLowerCase() == 'a') { 1269 process = false; 1270 } 1271 1272 if (closest(e.targetTouches[0].target, '.gslide-inline') && !hasClass(e.targetTouches[0].target.parentNode, 'gslide-inline')) { 1273 process = false; 1274 } 1275 1276 if (process) { 1277 endCoords = e.targetTouches[0]; 1278 startCoords.pageX = e.targetTouches[0].pageX; 1279 startCoords.pageY = e.targetTouches[0].pageY; 1280 xDown = e.targetTouches[0].clientX; 1281 yDown = e.targetTouches[0].clientY; 1282 currentSlide = instance.activeSlide; 1283 media = currentSlide.querySelector('.gslide-media'); 1284 isInlined = currentSlide.querySelector('.gslide-inline'); 1285 mediaImage = null; 1286 1287 if (hasClass(media, 'gslide-image')) { 1288 mediaImage = media.querySelector('img'); 1289 } 1290 1291 var windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; 1292 1293 if (windowWidth > 769) { 1294 media = currentSlide.querySelector('.ginner-container'); 1295 } 1296 1297 removeClass(overlay, 'greset'); 1298 1299 if (e.pageX > 20 && e.pageX < window.innerWidth - 20) { 1300 return; 1301 } 1302 1303 e.preventDefault(); 1304 } 1305 }, 1306 touchMove: function touchMove(e) { 1307 if (!process) { 1308 return; 1309 } 1310 1311 endCoords = e.targetTouches[0]; 1312 1313 if (doingZoom || imageZoomed) { 1314 return; 1315 } 1316 1317 if (isInlined && isInlined.offsetHeight > winHeight) { 1318 var moved = startCoords.pageX - endCoords.pageX; 1319 1320 if (Math.abs(moved) <= 13) { 1321 return false; 1322 } 1323 } 1324 1325 doingMove = true; 1326 var xUp = e.targetTouches[0].clientX; 1327 var yUp = e.targetTouches[0].clientY; 1328 var xDiff = xDown - xUp; 1329 var yDiff = yDown - yUp; 1330 1331 if (Math.abs(xDiff) > Math.abs(yDiff)) { 1332 vSwipe = false; 1333 hSwipe = true; 1334 } else { 1335 hSwipe = false; 1336 vSwipe = true; 1337 } 1338 1339 hDistance = endCoords.pageX - startCoords.pageX; 1340 hDistancePercent = hDistance * 100 / winWidth; 1341 vDistance = endCoords.pageY - startCoords.pageY; 1342 vDistancePercent = vDistance * 100 / winHeight; 1343 var opacity; 1344 1345 if (vSwipe && mediaImage) { 1346 opacity = 1 - Math.abs(vDistance) / winHeight; 1347 overlay.style.opacity = opacity; 1348 1349 if (instance.settings.touchFollowAxis) { 1350 hDistancePercent = 0; 1351 } 1352 } 1353 1354 if (hSwipe) { 1355 opacity = 1 - Math.abs(hDistance) / winWidth; 1356 media.style.opacity = opacity; 1357 1358 if (instance.settings.touchFollowAxis) { 1359 vDistancePercent = 0; 1360 } 1361 } 1362 1363 if (!mediaImage) { 1364 return cssTransform(media, "translate3d(".concat(hDistancePercent, "%, 0, 0)")); 1365 } 1366 1367 cssTransform(media, "translate3d(".concat(hDistancePercent, "%, ").concat(vDistancePercent, "%, 0)")); 1368 }, 1369 touchEnd: function touchEnd() { 1370 if (!process) { 1371 return; 1372 } 1373 1374 doingMove = false; 1375 1376 if (imageZoomed || doingZoom) { 1377 lastZoomedPosX = zoomedPosX; 1378 lastZoomedPosY = zoomedPosY; 1379 return; 1380 } 1381 1382 var v = Math.abs(parseInt(vDistancePercent)); 1383 var h = Math.abs(parseInt(hDistancePercent)); 1384 1385 if (v > 29 && mediaImage) { 1386 instance.close(); 1387 return; 1388 } 1389 1390 if (v < 29 && h < 25) { 1391 addClass(overlay, 'greset'); 1392 overlay.style.opacity = 1; 1393 return resetSlideMove(media); 1394 } 1395 }, 1396 multipointEnd: function multipointEnd() { 1397 setTimeout(function () { 1398 doingZoom = false; 1399 }, 50); 1400 }, 1401 multipointStart: function multipointStart() { 1402 doingZoom = true; 1403 initScale = currentScale ? currentScale : 1; 1404 }, 1405 pinch: function pinch(evt) { 1406 if (!mediaImage || doingMove) { 1407 return false; 1408 } 1409 1410 doingZoom = true; 1411 mediaImage.scaleX = mediaImage.scaleY = initScale * evt.zoom; 1412 var scale = initScale * evt.zoom; 1413 imageZoomed = true; 1414 1415 if (scale <= 1) { 1416 imageZoomed = false; 1417 scale = 1; 1418 lastZoomedPosY = null; 1419 lastZoomedPosX = null; 1420 zoomedPosX = null; 1421 zoomedPosY = null; 1422 mediaImage.setAttribute('style', ''); 1423 return; 1424 } 1425 1426 if (scale > maxScale) { 1427 scale = maxScale; 1428 } 1429 1430 mediaImage.style.transform = "scale3d(".concat(scale, ", ").concat(scale, ", 1)"); 1431 currentScale = scale; 1432 }, 1433 pressMove: function pressMove(e) { 1434 if (imageZoomed && !doingZoom) { 1435 var mhDistance = endCoords.pageX - startCoords.pageX; 1436 var mvDistance = endCoords.pageY - startCoords.pageY; 1437 1438 if (lastZoomedPosX) { 1439 mhDistance = mhDistance + lastZoomedPosX; 1440 } 1441 1442 if (lastZoomedPosY) { 1443 mvDistance = mvDistance + lastZoomedPosY; 1444 } 1445 1446 zoomedPosX = mhDistance; 1447 zoomedPosY = mvDistance; 1448 var style = "translate3d(".concat(mhDistance, "px, ").concat(mvDistance, "px, 0)"); 1449 1450 if (currentScale) { 1451 style += " scale3d(".concat(currentScale, ", ").concat(currentScale, ", 1)"); 1452 } 1453 1454 cssTransform(mediaImage, style); 1455 } 1456 }, 1457 swipe: function swipe(evt) { 1458 if (imageZoomed) { 1459 return; 1460 } 1461 1462 if (doingZoom) { 1463 doingZoom = false; 1464 return; 1465 } 1466 1467 if (evt.direction == 'Left') { 1468 if (instance.index == instance.elements.length - 1) { 1469 return resetSlideMove(media); 1470 } 1471 1472 instance.nextSlide(); 1473 } 1474 1475 if (evt.direction == 'Right') { 1476 if (instance.index == 0) { 1477 return resetSlideMove(media); 1478 } 1479 1480 instance.prevSlide(); 1481 } 1482 } 1483 }); 1484 instance.events['touch'] = touchInstance; 1485 } 1486 1487 var ZoomImages = function () { 1488 function ZoomImages(el, slide) { 1489 var _this = this; 1490 1491 var onclose = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; 1492 1493 _classCallCheck(this, ZoomImages); 1494 1495 this.img = el; 1496 this.slide = slide; 1497 this.onclose = onclose; 1498 1499 if (this.img.setZoomEvents) { 1500 return false; 1501 } 1502 1503 this.active = false; 1504 this.zoomedIn = false; 1505 this.dragging = false; 1506 this.currentX = null; 1507 this.currentY = null; 1508 this.initialX = null; 1509 this.initialY = null; 1510 this.xOffset = 0; 1511 this.yOffset = 0; 1512 this.img.addEventListener('mousedown', function (e) { 1513 return _this.dragStart(e); 1514 }, false); 1515 this.img.addEventListener('mouseup', function (e) { 1516 return _this.dragEnd(e); 1517 }, false); 1518 this.img.addEventListener('mousemove', function (e) { 1519 return _this.drag(e); 1520 }, false); 1521 this.img.addEventListener('click', function (e) { 1522 if (_this.slide.classList.contains('dragging-nav')) { 1523 _this.zoomOut(); 1524 1525 return false; 1526 } 1527 1528 if (!_this.zoomedIn) { 1529 return _this.zoomIn(); 1530 } 1531 1532 if (_this.zoomedIn && !_this.dragging) { 1533 _this.zoomOut(); 1534 } 1535 }, false); 1536 this.img.setZoomEvents = true; 1537 } 1538 1539 _createClass(ZoomImages, [{ 1540 key: "zoomIn", 1541 value: function zoomIn() { 1542 var winWidth = this.widowWidth(); 1543 1544 if (this.zoomedIn || winWidth <= 768) { 1545 return; 1546 } 1547 1548 var img = this.img; 1549 img.setAttribute('data-style', img.getAttribute('style')); 1550 img.style.maxWidth = img.naturalWidth + 'px'; 1551 img.style.maxHeight = img.naturalHeight + 'px'; 1552 1553 if (img.naturalWidth > winWidth) { 1554 var centerX = winWidth / 2 - img.naturalWidth / 2; 1555 this.setTranslate(this.img.parentNode, centerX, 0); 1556 } 1557 1558 this.slide.classList.add('zoomed'); 1559 this.zoomedIn = true; 1560 } 1561 }, { 1562 key: "zoomOut", 1563 value: function zoomOut() { 1564 this.img.parentNode.setAttribute('style', ''); 1565 this.img.setAttribute('style', this.img.getAttribute('data-style')); 1566 this.slide.classList.remove('zoomed'); 1567 this.zoomedIn = false; 1568 this.currentX = null; 1569 this.currentY = null; 1570 this.initialX = null; 1571 this.initialY = null; 1572 this.xOffset = 0; 1573 this.yOffset = 0; 1574 1575 if (this.onclose && typeof this.onclose == 'function') { 1576 this.onclose(); 1577 } 1578 } 1579 }, { 1580 key: "dragStart", 1581 value: function dragStart(e) { 1582 e.preventDefault(); 1583 1584 if (!this.zoomedIn) { 1585 this.active = false; 1586 return; 1587 } 1588 1589 if (e.type === 'touchstart') { 1590 this.initialX = e.touches[0].clientX - this.xOffset; 1591 this.initialY = e.touches[0].clientY - this.yOffset; 1592 } else { 1593 this.initialX = e.clientX - this.xOffset; 1594 this.initialY = e.clientY - this.yOffset; 1595 } 1596 1597 if (e.target === this.img) { 1598 this.active = true; 1599 this.img.classList.add('dragging'); 1600 } 1601 } 1602 }, { 1603 key: "dragEnd", 1604 value: function dragEnd(e) { 1605 var _this2 = this; 1606 1607 e.preventDefault(); 1608 this.initialX = this.currentX; 1609 this.initialY = this.currentY; 1610 this.active = false; 1611 setTimeout(function () { 1612 _this2.dragging = false; 1613 _this2.img.isDragging = false; 1614 1615 _this2.img.classList.remove('dragging'); 1616 }, 100); 1617 } 1618 }, { 1619 key: "drag", 1620 value: function drag(e) { 1621 if (this.active) { 1622 e.preventDefault(); 1623 1624 if (e.type === 'touchmove') { 1625 this.currentX = e.touches[0].clientX - this.initialX; 1626 this.currentY = e.touches[0].clientY - this.initialY; 1627 } else { 1628 this.currentX = e.clientX - this.initialX; 1629 this.currentY = e.clientY - this.initialY; 1630 } 1631 1632 this.xOffset = this.currentX; 1633 this.yOffset = this.currentY; 1634 this.img.isDragging = true; 1635 this.dragging = true; 1636 this.setTranslate(this.img, this.currentX, this.currentY); 1637 } 1638 } 1639 }, { 1640 key: "onMove", 1641 value: function onMove(e) { 1642 if (!this.zoomedIn) { 1643 return; 1644 } 1645 1646 var xOffset = e.clientX - this.img.naturalWidth / 2; 1647 var yOffset = e.clientY - this.img.naturalHeight / 2; 1648 this.setTranslate(this.img, xOffset, yOffset); 1649 } 1650 }, { 1651 key: "setTranslate", 1652 value: function setTranslate(node, xPos, yPos) { 1653 node.style.transform = 'translate3d(' + xPos + 'px, ' + yPos + 'px, 0)'; 1654 } 1655 }, { 1656 key: "widowWidth", 1657 value: function widowWidth() { 1658 return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; 1659 } 1660 }]); 1661 1662 return ZoomImages; 1663 }(); 1664 1665 var DragSlides = function () { 1666 function DragSlides() { 1667 var _this = this; 1668 1669 var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 1670 1671 _classCallCheck(this, DragSlides); 1672 1673 var dragEl = config.dragEl, 1674 _config$toleranceX = config.toleranceX, 1675 toleranceX = _config$toleranceX === void 0 ? 40 : _config$toleranceX, 1676 _config$toleranceY = config.toleranceY, 1677 toleranceY = _config$toleranceY === void 0 ? 65 : _config$toleranceY, 1678 _config$slide = config.slide, 1679 slide = _config$slide === void 0 ? null : _config$slide, 1680 _config$instance = config.instance, 1681 instance = _config$instance === void 0 ? null : _config$instance; 1682 this.el = dragEl; 1683 this.active = false; 1684 this.dragging = false; 1685 this.currentX = null; 1686 this.currentY = null; 1687 this.initialX = null; 1688 this.initialY = null; 1689 this.xOffset = 0; 1690 this.yOffset = 0; 1691 this.direction = null; 1692 this.lastDirection = null; 1693 this.toleranceX = toleranceX; 1694 this.toleranceY = toleranceY; 1695 this.toleranceReached = false; 1696 this.dragContainer = this.el; 1697 this.slide = slide; 1698 this.instance = instance; 1699 this.el.addEventListener('mousedown', function (e) { 1700 return _this.dragStart(e); 1701 }, false); 1702 this.el.addEventListener('mouseup', function (e) { 1703 return _this.dragEnd(e); 1704 }, false); 1705 this.el.addEventListener('mousemove', function (e) { 1706 return _this.drag(e); 1707 }, false); 1708 } 1709 1710 _createClass(DragSlides, [{ 1711 key: "dragStart", 1712 value: function dragStart(e) { 1713 if (this.slide.classList.contains('zoomed')) { 1714 this.active = false; 1715 return; 1716 } 1717 1718 if (e.type === 'touchstart') { 1719 this.initialX = e.touches[0].clientX - this.xOffset; 1720 this.initialY = e.touches[0].clientY - this.yOffset; 1721 } else { 1722 this.initialX = e.clientX - this.xOffset; 1723 this.initialY = e.clientY - this.yOffset; 1724 } 1725 1726 var clicked = e.target.nodeName.toLowerCase(); 1727 var exludeClicks = ['input', 'select', 'textarea', 'button', 'a']; 1728 1729 if (e.target.classList.contains('nodrag') || closest(e.target, '.nodrag') || exludeClicks.indexOf(clicked) !== -1) { 1730 this.active = false; 1731 return; 1732 } 1733 1734 e.preventDefault(); 1735 1736 if (e.target === this.el || clicked !== 'img' && closest(e.target, '.gslide-inline')) { 1737 this.active = true; 1738 this.el.classList.add('dragging'); 1739 this.dragContainer = closest(e.target, '.ginner-container'); 1740 } 1741 } 1742 }, { 1743 key: "dragEnd", 1744 value: function dragEnd(e) { 1745 var _this2 = this; 1746 1747 e && e.preventDefault(); 1748 this.initialX = 0; 1749 this.initialY = 0; 1750 this.currentX = null; 1751 this.currentY = null; 1752 this.initialX = null; 1753 this.initialY = null; 1754 this.xOffset = 0; 1755 this.yOffset = 0; 1756 this.active = false; 1757 1758 if (this.doSlideChange) { 1759 this.instance.preventOutsideClick = true; 1760 this.doSlideChange == 'right' && this.instance.prevSlide(); 1761 this.doSlideChange == 'left' && this.instance.nextSlide(); 1762 } 1763 1764 if (this.doSlideClose) { 1765 this.instance.close(); 1766 } 1767 1768 if (!this.toleranceReached) { 1769 this.setTranslate(this.dragContainer, 0, 0, true); 1770 } 1771 1772 setTimeout(function () { 1773 _this2.instance.preventOutsideClick = false; 1774 _this2.toleranceReached = false; 1775 _this2.lastDirection = null; 1776 _this2.dragging = false; 1777 _this2.el.isDragging = false; 1778 1779 _this2.el.classList.remove('dragging'); 1780 1781 _this2.slide.classList.remove('dragging-nav'); 1782 1783 _this2.dragContainer.style.transform = ''; 1784 _this2.dragContainer.style.transition = ''; 1785 }, 100); 1786 } 1787 }, { 1788 key: "drag", 1789 value: function drag(e) { 1790 if (this.active) { 1791 e.preventDefault(); 1792 this.slide.classList.add('dragging-nav'); 1793 1794 if (e.type === 'touchmove') { 1795 this.currentX = e.touches[0].clientX - this.initialX; 1796 this.currentY = e.touches[0].clientY - this.initialY; 1797 } else { 1798 this.currentX = e.clientX - this.initialX; 1799 this.currentY = e.clientY - this.initialY; 1800 } 1801 1802 this.xOffset = this.currentX; 1803 this.yOffset = this.currentY; 1804 this.el.isDragging = true; 1805 this.dragging = true; 1806 this.doSlideChange = false; 1807 this.doSlideClose = false; 1808 var currentXInt = Math.abs(this.currentX); 1809 var currentYInt = Math.abs(this.currentY); 1810 1811 if (currentXInt > 0 && currentXInt >= Math.abs(this.currentY) && (!this.lastDirection || this.lastDirection == 'x')) { 1812 this.yOffset = 0; 1813 this.lastDirection = 'x'; 1814 this.setTranslate(this.dragContainer, this.currentX, 0); 1815 var doChange = this.shouldChange(); 1816 1817 if (!this.instance.settings.dragAutoSnap && doChange) { 1818 this.doSlideChange = doChange; 1819 } 1820 1821 if (this.instance.settings.dragAutoSnap && doChange) { 1822 this.instance.preventOutsideClick = true; 1823 this.toleranceReached = true; 1824 this.active = false; 1825 this.instance.preventOutsideClick = true; 1826 this.dragEnd(null); 1827 doChange == 'right' && this.instance.prevSlide(); 1828 doChange == 'left' && this.instance.nextSlide(); 1829 return; 1830 } 1831 } 1832 1833 if (this.toleranceY > 0 && currentYInt > 0 && currentYInt >= currentXInt && (!this.lastDirection || this.lastDirection == 'y')) { 1834 this.xOffset = 0; 1835 this.lastDirection = 'y'; 1836 this.setTranslate(this.dragContainer, 0, this.currentY); 1837 var doClose = this.shouldClose(); 1838 1839 if (!this.instance.settings.dragAutoSnap && doClose) { 1840 this.doSlideClose = true; 1841 } 1842 1843 if (this.instance.settings.dragAutoSnap && doClose) { 1844 this.instance.close(); 1845 } 1846 1847 return; 1848 } 1849 } 1850 } 1851 }, { 1852 key: "shouldChange", 1853 value: function shouldChange() { 1854 var doChange = false; 1855 var currentXInt = Math.abs(this.currentX); 1856 1857 if (currentXInt >= this.toleranceX) { 1858 var dragDir = this.currentX > 0 ? 'right' : 'left'; 1859 1860 if (dragDir == 'left' && this.slide !== this.slide.parentNode.lastChild || dragDir == 'right' && this.slide !== this.slide.parentNode.firstChild) { 1861 doChange = dragDir; 1862 } 1863 } 1864 1865 return doChange; 1866 } 1867 }, {
1868 key: "shouldClose", 1869 value: function shouldClose() { 1870 var doClose = false; 1871 var currentYInt = Math.abs(this.currentY); 1872 1873 if (currentYInt >= this.toleranceY) { 1874 doClose = true; 1875 } 1876 1877 return doClose; 1878 } 1879 }, { 1880 key: "setTranslate", 1881 value: function setTranslate(node, xPos, yPos) { 1882 var animated = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; 1883 1884 if (animated) { 1885 node.style.transition = 'all .2s ease'; 1886 } else { 1887 node.style.transition = ''; 1888 } 1889 1890 node.style.transform = "translate3d(".concat(xPos, "px, ").concat(yPos, "px, 0)"); 1891 } 1892 }]); 1893 1894 return DragSlides; 1895 }(); 1896 1897 function slideImage(slide, data, index, callback) { 1898 var slideMedia = slide.querySelector('.gslide-media'); 1899 var img = new Image(); 1900 var titleID = 'gSlideTitle_' + index; 1901 var textID = 'gSlideDesc_' + index; 1902 img.addEventListener('load', function () { 1903 if (isFunction(callback)) { 1904 callback(); 1905 } 1906 }, false); 1907 img.src = data.href; 1908 1909 if (data.sizes != '' && data.srcset != '') { 1910 img.sizes = data.sizes; 1911 img.srcset = data.srcset; 1912 } 1913 1914 img.alt = ''; 1915 1916 if (!isNil(data.alt) && data.alt !== '') { 1917 img.alt = data.alt; 1918 } 1919 1920 if (data.title !== '') { 1921 img.setAttribute('aria-labelledby', titleID); 1922 } 1923 1924 if (data.description !== '') { 1925 img.setAttribute('aria-describedby', textID); 1926 } 1927 1928 if (data.hasOwnProperty('_hasCustomWidth') && data._hasCustomWidth) { 1929 img.style.width = data.width; 1930 } 1931 1932 if (data.hasOwnProperty('_hasCustomHeight') && data._hasCustomHeight) { 1933 img.style.height = data.height; 1934 } 1935 1936 slideMedia.insertBefore(img, slideMedia.firstChild); 1937 return; 1938 } 1939 1940 function slideVideo(slide, data, index, callback) { 1941 var _this = this; 1942 1943 var slideContainer = slide.querySelector('.ginner-container'); 1944 var videoID = 'gvideo' + index; 1945 var slideMedia = slide.querySelector('.gslide-media'); 1946 var videoPlayers = this.getAllPlayers(); 1947 addClass(slideContainer, 'gvideo-container'); 1948 slideMedia.insertBefore(createHTML('<div class="gvideo-wrapper"></div>'), slideMedia.firstChild); 1949 var videoWrapper = slide.querySelector('.gvideo-wrapper'); 1950 injectAssets(this.settings.plyr.css, 'Plyr'); 1951 var url = data.href; 1952 var protocol = location.protocol.replace(':', ''); 1953 var videoSource = ''; 1954 var embedID = ''; 1955 var customPlaceholder = false; 1956 1957 if (protocol == 'file') { 1958 protocol = 'http'; 1959 } 1960 1961 slideMedia.style.maxWidth = data.width; 1962 injectAssets(this.settings.plyr.js, 'Plyr', function () { 1963 if (url.match(/vimeo\.com\/([0-9]*)/)) { 1964 var vimeoID = /vimeo.*\/(\d+)/i.exec(url); 1965 videoSource = 'vimeo'; 1966 embedID = vimeoID[1]; 1967 } 1968 1969 if (url.match(/(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/) || url.match(/youtu\.be\/([a-zA-Z0-9\-_]+)/) || url.match(/(youtube\.com|youtube-nocookie\.com)\/embed\/([a-zA-Z0-9\-_]+)/)) { 1970 var youtubeID = getYoutubeID(url); 1971 videoSource = 'youtube'; 1972 embedID = youtubeID; 1973 } 1974 1975 if (url.match(/\.(mp4|ogg|webm|mov)$/) !== null) { 1976 videoSource = 'local'; 1977 var html = '<video id="' + videoID + '" '; 1978 html += "style=\"background:#000; max-width: ".concat(data.width, ";\" "); 1979 html += 'preload="metadata" '; 1980 html += 'x-webkit-airplay="allow" '; 1981 html += 'playsinline '; 1982 html += 'controls '; 1983 html += 'class="gvideo-local">'; 1984 var format = url.toLowerCase().split('.').pop(); 1985 var sources = { 1986 mp4: '', 1987 ogg: '', 1988 webm: '' 1989 }; 1990 format = format == 'mov' ? 'mp4' : format; 1991 sources[format] = url; 1992 1993 for (var key in sources) { 1994 if (sources.hasOwnProperty(key)) { 1995 var videoFile = sources[key]; 1996 1997 if (data.hasOwnProperty(key)) { 1998 videoFile = data[key]; 1999 } 2000 2001 if (videoFile !== '') { 2002 html += "<source src=\"".concat(videoFile, "\" type=\"video/").concat(key, "\">"); 2003 } 2004 } 2005 } 2006 2007 html += '</video>'; 2008 customPlaceholder = createHTML(html); 2009 } 2010 2011 var placeholder = customPlaceholder ? customPlaceholder : createHTML("<div id=\"".concat(videoI
2011D, "\" data-plyr-provider=\"").concat(videoSource, "\" data-plyr-embed-id=\"").concat(embedID, "\"></div>")); 2012 addClass(videoWrapper, "".concat(videoSource, "-video gvideo")); 2013 videoWrapper.appendChild(placeholder); 2014 videoWrapper.setAttribute('data-id', videoID); 2015 videoWrapper.setAttribute('data-index', index); 2016 var playerConfig = has(_this.settings.plyr, 'config') ? _this.settings.plyr.config : {}; 2017 var player = new Plyr('#' + videoID, playerConfig); 2018 player.on('ready', function (event) { 2019 var instance = event.detail.plyr; 2020 videoPlayers[videoID] = instance; 2021 2022 if (isFunction(callback)) { 2023 callback(); 2024 } 2025 }); 2026 waitUntil(function () { 2027 return slide.querySelector('iframe') && slide.querySelector('iframe').dataset.ready == 'true'; 2028 }, function () { 2029 _this.resize(slide); 2030 }); 2031 player.on('enterfullscreen', handleMediaFullScreen); 2032 player.on('exitfullscreen', handleMediaFullScreen); 2033 }); 2034 } 2035 2036 function getYoutubeID(url) { 2037 var videoID = ''; 2038 url = url.replace(/(>|<)/gi, '').split(/(vi\/|v=|\/v\/|youtu\.be\/|\/embed\/)/); 2039 2040 if (url[2] !== undefined) { 2041 videoID = url[2].split(/[^0-9a-z_\-]/i); 2042 videoID = videoID[0]; 2043 } else { 2044 videoID = url; 2045 } 2046 2047 return videoID; 2048 } 2049 2050 function handleMediaFullScreen(event) { 2051 var media = closest(event.target, '.gslide-media'); 2052 2053 if (event.type == 'enterfullscreen') { 2054 addClass(media, 'fullscreen'); 2055 } 2056 2057 if (event.type == 'exitfullscreen') { 2058 removeClass(media, 'fullscreen'); 2059 } 2060 } 2061 2062 function slideInline(slide, data, index, callback) { 2063 var _this = this; 2064 2065 var slideMedia = slide.querySelector('.gslide-media'); 2066 var hash = has(data, 'href') && data.href ? data.href.split('#').pop().trim() : false; 2067 var content = has(data, 'content') && data.content ? data.content : false; 2068 var innerContent; 2069 2070 if (content) { 2071 if (isString(content)) { 2072 innerContent = createHTML("<div class=\"ginlined-content\">".concat(content, "</div>")); 2073 } 2074 2075 if (isNode(content)) { 2076 if (content.style.display == 'none') { 2077 content.style.display = 'block'; 2078 } 2079 2080 var container = document.createElement('div'); 2081 container.className = 'ginlined-content'; 2082 container.appendChild(content); 2083 innerContent = container; 2084 } 2085 } 2086 2087 if (hash) { 2088 var div = document.getElementById(hash); 2089 2090 if (!div) { 2091 return false; 2092 } 2093 2094 var cloned = div.cloneNode(true); 2095 cloned.style.height = data.height; 2096 cloned.style.maxWidth = data.width; 2097 addClass(cloned, 'ginlined-content'); 2098 innerContent = cloned; 2099 } 2100 2101 if (!innerContent) { 2102 console.error('Unable to append inline slide content', data); 2103 return false; 2104 } 2105 2106 slideMedia.style.height = data.height; 2107 slideMedia.style.width = data.width; 2108 slideMedia.appendChild(innerContent); 2109 this.events['inlineclose' + hash] = addEvent('click', { 2110 onElement: slideMedia.querySelectorAll('.gtrigger-close'), 2111 withCallback: function withCallback(e) { 2112 e.preventDefault(); 2113 2114 _this.close(); 2115 } 2116 }); 2117 2118 if (isFunction(callback)) { 2119 callback(); 2120 } 2121 2122 return; 2123 } 2124 2125 function slideIframe(slide, data, index, callback) { 2126 var slideMedia = slide.querySelector('.gslide-media'); 2127 var iframe = createIframe({ 2128 url: data.href, 2129 callback: callback 2130 }); 2131 slideMedia.parentNode.style.maxWidth = data.width; 2132 slideMedia.parentNode.style.height = data.height; 2133 slideMedia.appendChild(iframe); 2134 return; 2135 } 2136 2137 var SlideConfigParser = function () { 2138 function SlideConfigParser() { 2139 var slideParamas = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 2140 2141 _classCallCheck(this, SlideConfigParser); 2142 2143 this.defaults = { 2144 href: '', 2145 sizes: '', 2146 srcset: '', 2147 title: '', 2148 type: '', 2149 description: '', 2150 alt: '', 2151 descPosition: 'bottom', 2152 effect: '', 2153 width: '', 2154 height: '', 2155 content: false, 2156 zoomable: true, 2157 draggable: true 2158 }; 2159 2160 if (isObject(slideParamas)) { 2161 this.defaults = extend(this.defaults, slideParamas); 2162 } 2163 } 2164 2165 _createClass(SlideConfigParser, [{ 2166 key: "sourceType", 2167 value: function sourceType(url) { 2168 var origin = url; 2169 url = url.toLowerCase(); 2170 2171 if (url.match(/\.(jpeg|jpg|jpe|gif|png|apn|webp|avif|svg)/) !== null) { 2172 return 'image'; 2173 } 2174 2175 if (url.match(/(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/) || url.match(/youtu\.be\/([a-zA-Z0-9\-_]+)/) || url.match(/(youtube\.com|youtube-nocookie\.com)\/embed\/([a-zA-Z0-9\-_]+)/)) { 2176 return 'video'; 2177 } 2178 2179 if (url.match(/vimeo\.com\/([0-9]*)/)) { 2180 return 'video'; 2181 } 2182 2183 if (url.match(/\.(mp4|ogg|webm|mov)/) !== null) { 2184 return 'video'; 2185 } 2186 2187 if (url.match(/\.(mp3|wav|wma|aac|ogg)/) !== null) { 2188 return 'audio'; 2189 } 2190 2191 if (url.indexOf('#') > -1) { 2192 var hash = origin.split('#').pop(); 2193 2194 if (hash.trim() !== '') { 2195 return 'inline'; 2196 } 2197 } 2198 2199 if (url.indexOf('goajax=true') > -1) { 2200 return 'ajax'; 2201 } 2202 2203 return 'external'; 2204 } 2205 }, {
vendor: 52,042 bytes, lines 2206-3822
2206 key: "parseConfig", 2207 value: function parseConfig(element, settings) { 2208 var _this = this; 2209 2210 var data = extend({ 2211 descPosition: settings.descPosition 2212 }, this.defaults); 2213 2214 if (isObject(element) && !isNode(element)) { 2215 if (!has(element, 'type')) { 2216 if (has(element, 'content') && element.content) { 2217 element.type = 'inline'; 2218 } else if (has(element, 'href')) { 2219 element.type = this.sourceType(element.href); 2220 } 2221 } 2222 2223 var objectData = extend(data, element); 2224 this.setSize(objectData, settings); 2225 return objectData; 2226 } 2227 2228 var url = ''; 2229 var config = element.getAttribute('data-glightbox'); 2230 var nodeType = element.nodeName.toLowerCase(); 2231 2232 if (nodeType === 'a') { 2233 url = element.href; 2234 } 2235 2236 if (nodeType === 'img') { 2237 url = element.src; 2238 data.alt = element.alt; 2239 } 2240 2241 data.href = url; 2242 each(data, function (val, key) { 2243 if (has(settings, key) && key !== 'width') { 2244 data[key] = settings[key]; 2245 } 2246 2247 var nodeData = element.dataset[key]; 2248 2249 if (!isNil(nodeData)) { 2250 data[key] = _this.sanitizeValue(nodeData); 2251 } 2252 }); 2253 2254 if (data.content) { 2255 data.type = 'inline'; 2256 } 2257 2258 if (!data.type && url) { 2259 data.type = this.sourceType(url); 2260 } 2261 2262 if (!isNil(config)) { 2263 var cleanKeys = []; 2264 each(data, function (v, k) { 2265 cleanKeys.push(';\\s?' + k); 2266 }); 2267 cleanKeys = cleanKeys.join('\\s?:|'); 2268 2269 if (config.trim() !== '') { 2270 each(data, function (val, key) { 2271 var str = config; 2272 var match = 's?' + key + 's?:s?(.*?)(' + cleanKeys + 's?:|$)'; 2273 var regex = new RegExp(match); 2274 var matches = str.match(regex); 2275 2276 if (matches && matches.length && matches[1]) { 2277 var value = matches[1].trim().replace(/;\s*$/, ''); 2278 data[key] = _this.sanitizeValue(value); 2279 } 2280 }); 2281 } 2282 } else { 2283 if (!data.title && nodeType == 'a') { 2284 var title = element.title; 2285 2286 if (!isNil(title) && title !== '') { 2287 data.title = title; 2288 } 2289 } 2290 2291 if (!data.title && nodeType == 'img') { 2292 var alt = element.alt; 2293 2294 if (!isNil(alt) && alt !== '') { 2295 data.title = alt; 2296 } 2297 } 2298 } 2299 2300 if (data.description && data.description.substring(0, 1) === '.') { 2301 var description; 2302 2303 try { 2304 description = document.querySelector(data.description).innerHTML; 2305 } catch (error) { 2306 if (!(error instanceof DOMException)) { 2307 throw error; 2308 } 2309 } 2310 2311 if (description) { 2312 data.description = description; 2313 } 2314 } 2315 2316 if (!data.description) { 2317 var nodeDesc = element.querySelector('.glightbox-desc'); 2318 2319 if (nodeDesc) { 2320 data.description = nodeDesc.innerHTML; 2321 } 2322 } 2323 2324 this.setSize(data, settings, element); 2325 this.slideConfig = data; 2326 return data; 2327 } 2328 }, { 2329 key: "setSize", 2330 value: function setSize(data, settings) { 2331 var element = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; 2332 var defaultWith = data.type == 'video' ? this.checkSize(settings.videosWidth) : this.checkSize(settings.width); 2333 var defaultHeight = this.checkSize(settings.height); 2334 data.width = has(data, 'width') && data.width !== '' ? this.checkSize(data.width) : defaultWith; 2335 data.height = has(data, 'height') && data.height !== '' ? this.checkSize(data.height) : defaultHeight; 2336 2337 if (element && data.type == 'image') { 2338 data._hasCustomWidth = element.dataset.width ? true : false; 2339 data._hasCustomHeight = element.dataset.height ? true : false; 2340 } 2341 2342 return data; 2343 } 2344 }, { 2345 key: "checkSize", 2346 value: function checkSize(size) { 2347 return isNumber(size) ? "".concat(size, "px") : size; 2348 } 2349 }, { 2350 key: "sanitizeValue", 2351 value: function sanitizeValue(val) { 2352 if (val !== 'true' && val !== 'false') { 2353 return val; 2354 } 2355 2356 return val === 'true'; 2357 } 2358 }]); 2359 2360 return SlideConfigParser; 2361 }(); 2362 2363 var Slide = function () { 2364 function Slide(el, instance, index) { 2365 _classCallCheck(this, Slide); 2366 2367 this.element = el; 2368 this.instance = instance; 2369 this.index = index; 2370 } 2371 2372 _createClass(Slide, [{ 2373 key: "setContent", 2374 value: function setContent() { 2375 var _this = this; 2376 2377 var slide = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; 2378 var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 2379 2380 if (hasClass(slide, 'loaded')) { 2381 return false; 2382 } 2383 2384 var settings = this.instance.settings; 2385 var slideConfig = this.slideConfig; 2386 var isMobileDevice = isMobile(); 2387 2388 if (isFunction(settings.beforeSlideLoad)) { 2389 settings.beforeSlideLoad({ 2390 index: this.index, 2391 slide: slide, 2392 player: false 2393 }); 2394 } 2395 2396 var type = slideConfig.type; 2397 var position = slideConfig.descPosition; 2398 var slideMedia = slide.querySelector('.gslide-media'); 2399 var slideTitle = slide.querySelector('.gslide-title'); 2400 var slideText = slide.querySelector('.gslide-desc'); 2401 var slideDesc = slide.querySelector('.gdesc-inner'); 2402 var finalCallback = callback; 2403 var titleID = 'gSlideTitle_' + this.index; 2404 var textID = 'gSlideDesc_' + this.index; 2405 2406 if (isFunction(settings.afterSlideLoad)) { 2407 finalCallback = function finalCallback() { 2408 if (isFunction(callback)) { 2409 callback(); 2410 } 2411 2412 settings.afterSlideLoad({ 2413 index: _this.index, 2414 slide: slide, 2415 player: _this.instance.getSlidePlayerInstance(_this.index) 2416 }); 2417 }; 2418 } 2419 2420 if (slideConfig.title == '' && slideConfig.description == '') { 2421 if (slideDesc) { 2422 slideDesc.parentNode.parentNode.removeChild(slideDesc.parentNode); 2423 } 2424 } else { 2425 if (slideTitle && slideConfig.title !== '') { 2426 slideTitle.id = titleID; 2427 slideTitle.innerHTML = slideConfig.title; 2428 } else { 2429 slideTitle.parentNode.removeChild(slideTitle); 2430 } 2431 2432 if (slideText && slideConfig.description !== '') { 2433 slideText.id = textID; 2434 2435 if (isMobileDevice && settings.moreLength > 0) { 2436 slideConfig.smallDescription = this.slideShortDesc(slideConfig.description, settings.moreLength, settings.moreText); 2437 slideText.innerHTML = slideConfig.smallDescription; 2438 this.descriptionEvents(slideText, slideConfig); 2439 } else { 2440 slideText.innerHTML = slideConfig.description; 2441 } 2442 } else { 2443 slideText.parentNode.removeChild(slideText); 2444 } 2445 2446 addClass(slideMedia.parentNode, "desc-".concat(position)); 2447 addClass(slideDesc.parentNode, "description-".concat(position)); 2448 } 2449 2450 addClass(slideMedia, "gslide-".concat(type)); 2451 addClass(slide, 'loaded'); 2452 2453 if (type === 'video') { 2454 slideVideo.apply(this.instance, [slide, slideConfig, this.index, finalCallback]); 2455 return; 2456 } 2457 2458 if (type === 'external') { 2459 slideIframe.apply(this, [slide, slideConfig, this.index, finalCallback]); 2460 return; 2461 } 2462 2463 if (type === 'inline') { 2464 slideInline.apply(this.instance, [slide, slideConfig, this.index, finalCallback]); 2465 2466 if (slideConfig.draggable) { 2467 new DragSlides({ 2468 dragEl: slide.querySelector('.gslide-inline'), 2469 toleranceX: settings.dragToleranceX, 2470 toleranceY: settings.dragToleranceY, 2471 slide: slide, 2472 instance: this.instance 2473 }); 2474 } 2475 2476 return; 2477 } 2478 2479 if (type === 'image') { 2480 slideImage(slide, slideConfig, this.index, function () { 2481 var img = slide.querySelector('img'); 2482 2483 if (slideConfig.draggable) { 2484 new DragSlides({ 2485 dragEl: img, 2486 toleranceX: settings.dragToleranceX, 2487 toleranceY: settings.dragToleranceY, 2488 slide: slide, 2489 instance: _this.instance 2490 }); 2491 } 2492 2493 if (slideConfig.zoomable && img.naturalWidth > img.offsetWidth) { 2494 addClass(img, 'zoomable'); 2495 new ZoomImages(img, slide, function () { 2496 _this.instance.resize(); 2497 }); 2498 } 2499 2500 if (isFunction(finalCallback)) { 2501 finalCallback(); 2502 } 2503 }); 2504 return; 2505 } 2506 2507 if (isFunction(finalCallback)) { 2508 finalCallback(); 2509 } 2510 } 2511 }, { 2512 key: "slideShortDesc", 2513 value: function slideShortDesc(string) { 2514 var n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 50; 2515 var wordBoundary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 2516 var div = document.createElement('div'); 2517 div.innerHTML = string; 2518 var cleanedString = div.innerText; 2519 var useWordBoundary = wordBoundary; 2520 string = cleanedString.trim(); 2521 2522 if (string.length <= n) { 2523 return string; 2524 } 2525 2526 var subString = string.substr(0, n - 1); 2527 2528 if (!useWordBoundary) { 2529 return subString; 2530 } 2531 2532 div = null; 2533 return subString + '... <a href="#" class="desc-more">' + wordBoundary + '</a>'; 2534 } 2535 }, { 2536 key: "descriptionEvents", 2537 value: function descriptionEvents(desc, data) { 2538 var _this2 = this; 2539 2540 var moreLink = desc.querySelector('.desc-more'); 2541 2542 if (!moreLink) { 2543 return false; 2544 } 2545 2546 addEvent('click', { 2547 onElement: moreLink, 2548 withCallback: function withCallback(event, target) { 2549 event.preventDefault(); 2550 var body = document.body; 2551 var desc = closest(target, '.gslide-desc'); 2552 2553 if (!desc) { 2554 return false; 2555 } 2556 2557 desc.innerHTML = data.description; 2558 addClass(body, 'gdesc-open'); 2559 var shortEvent = addEvent('click', { 2560 onElement: [body, closest(desc, '.gslide-description')], 2561 withCallback: function withCallback(event, target) { 2562 if (event.target.nodeName.toLowerCase() !== 'a') { 2563 removeClass(body, 'gdesc-open'); 2564 addClass(body, 'gdesc-closed'); 2565 desc.innerHTML = data.smallDescription; 2566 2567 _this2.descriptionEvents(desc, data); 2568 2569 setTimeout(function () { 2570 removeClass(body, 'gdesc-closed'); 2571 }, 400); 2572 shortEvent.destroy(); 2573 } 2574 } 2575 }); 2576 } 2577 }); 2578 } 2579 }, { 2580 key: "create", 2581 value: function create() { 2582 return createHTML(this.instance.settings.slideHTML); 2583 } 2584 }, { 2585 key: "getConfig", 2586 value: function getConfig() { 2587 if (!isNode(this.element) && !this.element.hasOwnProperty('draggable')) { 2588 this.element.draggable = this.instance.settings.draggable; 2589 } 2590 2591 var parser = new SlideConfigParser(this.instance.settings.slideExtraAttributes); 2592 this.slideConfig = parser.parseConfig(this.element, this.instance.settings); 2593 return this.slideConfig; 2594 } 2595 }]); 2596 2597 return Slide; 2598 }(); 2599 2600 var _version = '3.1.1'; 2601 var isMobile$1 = isMobile(); 2602 var isTouch$1 = isTouch(); 2603 var html = document.getElementsByTagName('html')[0]; 2604 var defaults = { 2605 selector: '.glightbox', 2606 elements: null, 2607 skin: 'clean', 2608 theme: 'clean', 2609 closeButton: true, 2610 startAt: null, 2611 autoplayVideos: true, 2612 autofocusVideos: true, 2613 descPosition: 'bottom', 2614 width: '900px', 2615 height: '506px', 2616 videosWidth: '960px', 2617 beforeSlideChange: null, 2618 afterSlideChange: null, 2619 beforeSlideLoad: null, 2620 afterSlideLoad: null, 2621 slideInserted: null, 2622 slideRemoved: null, 2623 slideExtraAttributes: null, 2624 onOpen: null, 2625 onClose: null, 2626 loop: false, 2627 zoomable: true, 2628 draggable: true, 2629 dragAutoSnap: false, 2630 dragToleranceX: 40, 2631 dragToleranceY: 65, 2632 preload: true, 2633 oneSlidePerOpen: false, 2634 touchNavigation: true, 2635 touchFollowAxis: true, 2636 keyboardNavigation: true, 2637 closeOnOutsideClick: true, 2638 plugins: false, 2639 plyr: { 2640 css: 'https://cdn.plyr.io/3.6.8/plyr.css', 2641 js: 'https://cdn.plyr.io/3.6.8/plyr.js', 2642 config: { 2643 ratio: '16:9', 2644 fullscreen: { 2645 enabled: true, 2646 iosNative: true 2647 }, 2648 youtube: { 2649 noCookie: true, 2650 rel: 0, 2651 showinfo: 0, 2652 iv_load_policy: 3 2653 }, 2654 vimeo: { 2655 byline: false, 2656 portrait: false, 2657 title: false, 2658 transparent: false 2659 } 2660 } 2661 }, 2662 openEffect: 'zoom', 2663 closeEffect: 'zoom', 2664 slideEffect: 'slide', 2665 moreText: 'See more', 2666 moreLength: 60, 2667 cssEfects: { 2668 fade: { 2669 "in": 'fadeIn', 2670 out: 'fadeOut' 2671 }, 2672 zoom: { 2673 "in": 'zoomIn', 2674 out: 'zoomOut' 2675 }, 2676 slide: { 2677 "in": 'slideInRight', 2678 out: 'slideOutLeft' 2679 }, 2680 slideBack: { 2681 "in": 'slideInLeft', 2682 out: 'slideOutRight' 2683 }, 2684 none: { 2685 "in": 'none', 2686 out: 'none' 2687 } 2688 }, 2689 svg: { 2690 close: '<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" xml:space="preserve"><g><g><path d="M505.943,6.058c-8.077-8.077-21.172-8.077-29.249,0L6.058,476.693c-8.077,8.077-8.077,21.172,0,29.249C10.096,509.982,15.39,512,20.683,512c5.293,0,10.586-2.019,14.625-6.059L505.943,35.306C514.019,27.23,514.019,14.135,505.943,6.058z"/></g></g><g><g><path d="M505.942,476.694L35.306,6.059c-8.076-8.077-21.172-8.077-29.248,0c-8.077,8.076-8.077,21.171,0,29.248l470.636,470.636c4.038,4.039,9.332,6.058,14.625,6.058c5.293,0,10.587-2.019,14.624-6.057C514.018,497.866,514.018,484.771,505.942,476.694z"/></g></g></svg>', 2691 next: '<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 477.175 477.175" xml:space="preserve"> <g><path d="M360.731,229.075l-225.1-225.1c-5.3-5.3-13.8-5.3-19.1,0s-5.3,13.8,0,19.1l215.5,215.5l-215.5,215.5c-5.3,5.3-5.3,13.8,0,19.1c2.6,2.6,6.1,4,9.5,4c3.4,0,6.9-1.3,9.5-4l225.1-225.1C365.931,242.875,365.931,234.275,360.731,229.075z"/></g></svg>', 2692 prev: '<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 477.175 477.175" xml:space="preserve"><g><path d="M145.188,238.575l215.5-215.5c5.3-5.3,5.3-13.8,0-19.1s-13.8-5.3-19.1,0l-225.1,225.1c-5.3,5.3-5.3,13.8,0,19.1l225.1,225c2.6,2.6,6.1,4,9.5,4s6.9-1.3,9.5-4c5.3-5.3,5.3-13.8,0-19.1L145.188,238.575z"/></g></svg>' 2693 } 2694 }; 2695 defaults.slideHTML = "<div class=\"gslide\">\n <div class=\"gslide-inner-content\">\n <div class=\"ginner-container\">\n <div class=\"gslide-media\">\n </div>\n <div class=\"gslide-description\">\n <div class=\"gdesc-inner\">\n <h4 class=\"gslide-title\"></h4>\n <div class=\"gslide-desc\"></div>\n </div>\n </div>\n </div>\n </div>\n</div>"; 2696 defaults.lightboxHTML = "<div id=\"glightbox-body\" class=\"glightbox-container\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"false\">\n <div class=\"gloader visible\"></div>\n <div class=\"goverlay\"></div>\n <div class=\"gcontainer\">\n <div id=\"glightbox-slider\" class=\"gslider\"></div>\n <button class=\"gclose gbtn\" aria-label=\"Close\" data-taborder=\"3\">{closeSVG}</button>\n <button class=\"gprev gbtn\" aria-label=\"Previous\" data-taborder=\"2\">{prevSVG}</button>\n <button class=\"gnext gbtn\" aria-label=\"Next\" data-taborder=\"1\">{nextSVG}</button>\n</div>\n</div>"; 2697 2698 var GlightboxInit = function () { 2699 function GlightboxInit() { 2700 var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 2701 2702 _classCallCheck(this, GlightboxInit); 2703 2704 this.customOptions = options; 2705 this.settings = extend(defaults, options); 2706 this.effectsClasses = this.getAnimationClasses(); 2707 this.videoPlayers = {}; 2708 this.apiEvents = []; 2709 this.fullElementsList = false; 2710 } 2711 2712 _createClass(GlightboxInit, [{ 2713 key: "init", 2714 value: function init() { 2715 var _this = this; 2716 2717 var selector = this.getSelector(); 2718 2719 if (selector) { 2720 this.baseEvents = addEvent('click', { 2721 onElement: selector, 2722 withCallback: function withCallback(e, target) { 2723 e.preventDefault(); 2724 2725 _this.open(target); 2726 } 2727 }); 2728 } 2729 2730 this.elements = this.getElements(); 2731 } 2732 }, { 2733 key: "open", 2734 value: function open() { 2735 var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; 2736 var startAt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 2737 2738 if (this.elements.length == 0) { 2739 return false; 2740 } 2741 2742 this.activeSlide = null; 2743 this.prevActiveSlideIndex = null; 2744 this.prevActiveSlide = null; 2745 var index = isNumber(startAt) ? startAt : this.settings.startAt; 2746 2747 if (isNode(element)) { 2748 var gallery = element.getAttribute('data-gallery'); 2749 2750 if (gallery) { 2751 this.fullElementsList = this.elements; 2752 this.elements = this.getGalleryElements(this.elements, gallery); 2753 } 2754 2755 if (isNil(index)) { 2756 index = this.getElementIndex(element); 2757 2758 if (index < 0) { 2759 index = 0; 2760 } 2761 } 2762 } 2763 2764 if (!isNumber(index)) { 2765 index = 0; 2766 } 2767 2768 this.build(); 2769 animateElement(this.overlay, this.settings.openEffect == 'none' ? 'none' : this.settings.cssEfects.fade["in"]); 2770 var body = document.body; 2771 var scrollBar = window.innerWidth - document.documentElement.clientWidth; 2772 2773 if (scrollBar > 0) { 2774 var styleSheet = document.createElement('style'); 2775 styleSheet.type = 'text/css'; 2776 styleSheet.className = 'gcss-styles'; 2777 styleSheet.innerText = ".gscrollbar-fixer {margin-right: ".concat(scrollBar, "px}"); 2778 document.head.appendChild(styleSheet); 2779 addClass(body, 'gscrollbar-fixer'); 2780 } 2781 2782 addClass(body, 'glightbox-open'); 2783 addClass(html, 'glightbox-open'); 2784 2785 if (isMobile$1) { 2786 addClass(document.body, 'glightbox-mobile'); 2787 this.settings.slideEffect = 'slide'; 2788 } 2789 2790 this.showSlide(index, true); 2791 2792 if (this.elements.length == 1) { 2793 addClass(this.prevButton, 'glightbox-button-hidden'); 2794 addClass(this.nextButton, 'glightbox-button-hidden'); 2795 } else { 2796 removeClass(this.prevButton, 'glightbox-button-hidden'); 2797 removeClass(this.nextButton, 'glightbox-button-hidden'); 2798 } 2799 2800 this.lightboxOpen = true; 2801 this.trigger('open'); 2802 2803 if (isFunction(this.settings.onOpen)) { 2804 this.settings.onOpen(); 2805 } 2806 2807 if (isTouch$1 && this.settings.touchNavigation) { 2808 touchNavigation(this); 2809 } 2810 2811 if (this.settings.keyboardNavigation) { 2812 keyboardNavigation(this); 2813 } 2814 } 2815 }, { 2816 key: "openAt", 2817 value: function openAt() { 2818 var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; 2819 this.open(null, index); 2820 } 2821 }, { 2822 key: "showSlide", 2823 value: function showSlide() { 2824 var _this2 = this; 2825 2826 var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; 2827 var first = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 2828 show(this.loader); 2829 this.index = parseInt(index); 2830 var current = this.slidesContainer.querySelector('.current'); 2831 2832 if (current) { 2833 removeClass(current, 'current'); 2834 } 2835 2836 this.slideAnimateOut(); 2837 var slideNode = this.slidesContainer.querySelectorAll('.gslide')[index]; 2838 2839 if (hasClass(slideNode, 'loaded')) { 2840 this.slideAnimateIn(slideNode, first); 2841 hide(this.loader); 2842 } else { 2843 show(this.loader); 2844 var slide = this.elements[index]; 2845 var slideData = { 2846 index: this.index, 2847 slide: slideNode, 2848 slideNode: slideNode, 2849 slideConfig: slide.slideConfig, 2850 slideIndex: this.index, 2851 trigger: slide.node, 2852 player: null 2853 }; 2854 this.trigger('slide_before_load', slideData); 2855 slide.instance.setContent(slideNode, function () { 2856 hide(_this2.loader); 2857 2858 _this2.resize(); 2859 2860 _this2.slideAnimateIn(slideNode, first); 2861 2862 _this2.trigger('slide_after_load', slideData); 2863 }); 2864 } 2865 2866 this.slideDescription = slideNode.querySelector('.gslide-description'); 2867 this.slideDescriptionContained = this.slideDescription && hasClass(this.slideDescription.parentNode, 'gslide-media'); 2868 2869 if (this.settings.preload) { 2870 this.preloadSlide(index + 1); 2871 this.preloadSlide(index - 1); 2872 } 2873 2874 this.updateNavigationClasses(); 2875 this.activeSlide = slideNode; 2876 } 2877 }, { 2878 key: "preloadSlide", 2879 value: function preloadSlide(index) { 2880 var _this3 = this; 2881 2882 if (index < 0 || index > this.elements.length - 1) { 2883 return false; 2884 } 2885 2886 if (isNil(this.elements[index])) { 2887 return false; 2888 } 2889 2890 var slideNode = this.slidesContainer.querySelectorAll('.gslide')[index]; 2891 2892 if (hasClass(slideNode, 'loaded')) { 2893 return false; 2894 } 2895 2896 var slide = this.elements[index]; 2897 var type = slide.type; 2898 var slideData = { 2899 index: index, 2900 slide: slideNode, 2901 slideNode: slideNode, 2902 slideConfig: slide.slideConfig, 2903 slideIndex: index, 2904 trigger: slide.node, 2905 player: null 2906 }; 2907 this.trigger('slide_before_load', slideData); 2908 2909 if (type == 'video' || type == 'external') { 2910 setTimeout(function () { 2911 slide.instance.setContent(slideNode, function () { 2912 _this3.trigger('slide_after_load', slideData); 2913 }); 2914 }, 200); 2915 } else { 2916 slide.instance.setContent(slideNode, function () { 2917 _this3.trigger('slide_after_load', slideData); 2918 }); 2919 } 2920 } 2921 }, { 2922 key: "prevSlide", 2923 value: function prevSlide() { 2924 this.goToSlide(this.index - 1); 2925 } 2926 }, { 2927 key: "nextSlide", 2928 value: function nextSlide() { 2929 this.goToSlide(this.index + 1); 2930 } 2931 }, { 2932 key: "goToSlide", 2933 value: function goToSlide() { 2934 var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; 2935 this.prevActiveSlide = this.activeSlide; 2936 this.prevActiveSlideIndex = this.index; 2937 2938 if (!this.loop() && (index < 0 || index > this.elements.length - 1)) { 2939 return false; 2940 } 2941 2942 if (index < 0) { 2943 index = this.elements.length - 1; 2944 } else if (index >= this.elements.length) { 2945 index = 0; 2946 } 2947 2948 this.showSlide(index); 2949 } 2950 }, { 2951 key: "insertSlide", 2952 value: function insertSlide() { 2953 var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 2954 var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1; 2955 2956 if (index < 0) { 2957 index = this.elements.length; 2958 } 2959 2960 var slide = new Slide(config, this, index); 2961 var data = slide.getConfig(); 2962 var slideInfo = extend({}, data); 2963 var newSlide = slide.create(); 2964 var totalSlides = this.elements.length - 1; 2965 slideInfo.index = index; 2966 slideInfo.node = false; 2967 slideInfo.instance = slide; 2968 slideInfo.slideConfig = data; 2969 this.elements.splice(index, 0, slideInfo); 2970 var addedSlideNode = null; 2971 var addedSlidePlayer = null; 2972 2973 if (this.slidesContainer) { 2974 if (index > totalSlides) { 2975 this.slidesContainer.appendChild(newSlide); 2976 } else { 2977 var existingSlide = this.slidesContainer.querySelectorAll('.gslide')[index]; 2978 this.slidesContainer.insertBefore(newSlide, existingSlide); 2979 } 2980 2981 if (this.settings.preload && this.index == 0 && index == 0 || this.index - 1 == index || this.index + 1 == index) { 2982 this.preloadSlide(index); 2983 } 2984 2985 if (this.index == 0 && index == 0) { 2986 this.index = 1; 2987 } 2988 2989 this.updateNavigationClasses(); 2990 addedSlideNode = this.slidesContainer.querySelectorAll('.gslide')[index]; 2991 addedSlidePlayer = this.getSlidePlayerInstance(index); 2992 slideInfo.slideNode = addedSlideNode; 2993 } 2994 2995 this.trigger('slide_inserted', { 2996 index: index, 2997 slide: addedSlideNode, 2998 slideNode: addedSlideNode, 2999 slideConfig: data, 3000 slideIndex: index, 3001 trigger: null, 3002 player: addedSlidePlayer 3003 }); 3004 3005 if (isFunction(this.settings.slideInserted)) { 3006 this.settings.slideInserted({ 3007 index: index, 3008 slide: addedSlideNode, 3009 player: addedSlidePlayer 3010 }); 3011 } 3012 } 3013 }, { 3014 key: "removeSlide", 3015 value: function removeSlide() { 3016 var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1; 3017 3018 if (index < 0 || index > this.elements.length - 1) { 3019 return false; 3020 } 3021 3022 var slide = this.slidesContainer && this.slidesContainer.querySelectorAll('.gslide')[index]; 3023 3024 if (slide) { 3025 if (this.getActiveSlideIndex() == index) { 3026 if (index == this.elements.length - 1) { 3027 this.prevSlide(); 3028 } else { 3029 this.nextSlide(); 3030 } 3031 } 3032 3033 slide.parentNode.removeChild(slide); 3034 } 3035 3036 this.elements.splice(index, 1); 3037 this.trigger('slide_removed', index); 3038 3039 if (isFunction(this.settings.slideRemoved)) { 3040 this.settings.slideRemoved(index); 3041 } 3042 } 3043 }, { 3044 key: "slideAnimateIn", 3045 value: function slideAnimateIn(slide, first) { 3046 var _this4 = this; 3047 3048 var slideMedia = slide.querySelector('.gslide-media'); 3049 var slideDesc = slide.querySelector('.gslide-description'); 3050 var prevData = { 3051 index: this.prevActiveSlideIndex, 3052 slide: this.prevActiveSlide, 3053 slideNode: this.prevActiveSlide, 3054 slideIndex: this.prevActiveSlide, 3055 slideConfig: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].slideConfig, 3056 trigger: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].node, 3057 player: this.getSlidePlayerInstance(this.prevActiveSlideIndex) 3058 }; 3059 var nextData = { 3060 index: this.index, 3061 slide: this.activeSlide, 3062 slideNode: this.activeSlide, 3063 slideConfig: this.elements[this.index].slideConfig, 3064 slideIndex: this.index, 3065 trigger: this.elements[this.index].node, 3066 player: this.getSlidePlayerInstance(this.index) 3067 }; 3068 3069 if (slideMedia.offsetWidth > 0 && slideDesc) { 3070 hide(slideDesc); 3071 slideDesc.style.display = ''; 3072 } 3073 3074 removeClass(slide, this.effectsClasses); 3075 3076 if (first) { 3077 animateElement(slide, this.settings.cssEfects[this.settings.openEffect]["in"], function () { 3078 if (_this4.settings.autoplayVideos) { 3079 _this4.slidePlayerPlay(slide); 3080 } 3081 3082 _this4.trigger('slide_changed', { 3083 prev: prevData, 3084 current: nextData 3085 }); 3086 3087 if (isFunction(_this4.settings.afterSlideChange)) { 3088 _this4.settings.afterSlideChange.apply(_this4, [prevData, nextData]); 3089 } 3090 }); 3091 } else { 3092 var effectName = this.settings.slideEffect; 3093 var animIn = effectName !== 'none' ? this.settings.cssEfects[effectName]["in"] : effectName; 3094 3095 if (this.prevActiveSlideIndex > this.index) { 3096 if (this.settings.slideEffect == 'slide') { 3097 animIn = this.settings.cssEfects.slideBack["in"]; 3098 } 3099 } 3100 3101 animateElement(slide, animIn, function () { 3102 if (_this4.settings.autoplayVideos) { 3103 _this4.slidePlayerPlay(slide); 3104 } 3105 3106 _this4.trigger('slide_changed', { 3107 prev: prevData, 3108 current: nextData 3109 }); 3110 3111 if (isFunction(_this4.settings.afterSlideChange)) { 3112 _this4.settings.afterSlideChange.apply(_this4, [prevData, nextData]); 3113 } 3114 }); 3115 } 3116 3117 setTimeout(function () { 3118 _this4.resize(slide); 3119 }, 100); 3120 addClass(slide, 'current'); 3121 } 3122 }, { 3123 key: "slideAnimateOut", 3124 value: function slideAnimateOut() { 3125 if (!this.prevActiveSlide) { 3126 return false; 3127 } 3128 3129 var prevSlide = this.prevActiveSlide; 3130 removeClass(prevSlide, this.effectsClasses); 3131 addClass(prevSlide, 'prev'); 3132 var animation = this.settings.slideEffect; 3133 var animOut = animation !== 'none' ? this.settings.cssEfects[animation].out : animation; 3134 this.slidePlayerPause(prevSlide); 3135 this.trigger('slide_before_change', { 3136 prev: { 3137 index: this.prevActiveSlideIndex, 3138 slide: this.prevActiveSlide, 3139 slideNode: this.prevActiveSlide, 3140 slideIndex: this.prevActiveSlideIndex, 3141 slideConfig: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].slideConfig, 3142 trigger: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].node, 3143 player: this.getSlidePlayerInstance(this.prevActiveSlideIndex) 3144 }, 3145 current: { 3146 index: this.index, 3147 slide: this.activeSlide, 3148 slideNode: this.activeSlide, 3149 slideIndex: this.index, 3150 slideConfig: this.elements[this.index].slideConfig, 3151 trigger: this.elements[this.index].node, 3152 player: this.getSlidePlayerInstance(this.index) 3153 } 3154 }); 3155 3156 if (isFunction(this.settings.beforeSlideChange)) { 3157 this.settings.beforeSlideChange.apply(this, [{ 3158 index: this.prevActiveSlideIndex, 3159 slide: this.prevActiveSlide, 3160 player: this.getSlidePlayerInstance(this.prevActiveSlideIndex) 3161 }, { 3162 index: this.index, 3163 slide: this.activeSlide, 3164 player: this.getSlidePlayerInstance(this.index) 3165 }]); 3166 } 3167 3168 if (this.prevActiveSlideIndex > this.index && this.settings.slideEffect == 'slide') { 3169 animOut = this.settings.cssEfects.slideBack.out; 3170 } 3171 3172 animateElement(prevSlide, animOut, function () { 3173 var container = prevSlide.querySelector('.ginner-container'); 3174 var media = prevSlide.querySelector('.gslide-media'); 3175 var desc = prevSlide.querySelector('.gslide-description'); 3176 container.style.transform = ''; 3177 media.style.transform = ''; 3178 removeClass(media, 'greset'); 3179 media.style.opacity = ''; 3180 3181 if (desc) { 3182 desc.style.opacity = ''; 3183 } 3184 3185 removeClass(prevSlide, 'prev'); 3186 }); 3187 } 3188 }, { 3189 key: "getAllPlayers", 3190 value: function getAllPlayers() { 3191 return this.videoPlayers; 3192 } 3193 }, { 3194 key: "getSlidePlayerInstance", 3195 value: function getSlidePlayerInstance(index) { 3196 var id = 'gvideo' + index; 3197 var videoPlayers = this.getAllPlayers(); 3198 3199 if (has(videoPlayers, id) && videoPlayers[id]) { 3200 return videoPlayers[id]; 3201 } 3202 3203 return false; 3204 } 3205 }, { 3206 key: "stopSlideVideo", 3207 value: function stopSlideVideo(slide) { 3208 if (isNode(slide)) { 3209 var node = slide.querySelector('.gvideo-wrapper'); 3210 3211 if (node) { 3212 slide = node.getAttribute('data-index'); 3213 } 3214 } 3215 3216 console.log('stopSlideVideo is deprecated, use slidePlayerPause'); 3217 var player = this.getSlidePlayerInstance(slide); 3218 3219 if (player && player.playing) { 3220 player.pause(); 3221 } 3222 } 3223 }, { 3224 key: "slidePlayerPause", 3225 value: function slidePlayerPause(slide) { 3226 if (isNode(slide)) { 3227 var node = slide.querySelector('.gvideo-wrapper'); 3228 3229 if (node) { 3230 slide = node.getAttribute('data-index'); 3231 } 3232 } 3233 3234 var player = this.getSlidePlayerInstance(slide); 3235 3236 if (player && player.playing) { 3237 player.pause(); 3238 } 3239 } 3240 }, { 3241 key: "playSlideVideo", 3242 value: function playSlideVideo(slide) { 3243 if (isNode(slide)) { 3244 var node = slide.querySelector('.gvideo-wrapper'); 3245 3246 if (node) { 3247 slide = node.getAttribute('data-index'); 3248 } 3249 } 3250 3251 console.log('playSlideVideo is deprecated, use slidePlayerPlay'); 3252 var player = this.getSlidePlayerInstance(slide); 3253 3254 if (player && !player.playing) { 3255 player.play(); 3256 } 3257 } 3258 }, { 3259 key: "slidePlayerPlay", 3260 value: function slidePlayerPlay(slide) { 3261 if (isNode(slide)) { 3262 var node = slide.querySelector('.gvideo-wrapper'); 3263 3264 if (node) { 3265 slide = node.getAttribute('data-index'); 3266 } 3267 } 3268 3269 var player = this.getSlidePlayerInstance(slide); 3270 3271 if (player && !player.playing) { 3272 player.play(); 3273 3274 if (this.settings.autofocusVideos) { 3275 player.elements.container.focus(); 3276 } 3277 } 3278 } 3279 }, { 3280 key: "setElements", 3281 value: function setElements(elements) { 3282 var _this5 = this; 3283 3284 this.settings.elements = false; 3285 var newElements = []; 3286 3287 if (elements && elements.length) { 3288 each(elements, function (el, i) { 3289 var slide = new Slide(el, _this5, i); 3290 var data = slide.getConfig(); 3291 var slideInfo = extend({}, data); 3292 slideInfo.slideConfig = data; 3293 slideInfo.instance = slide; 3294 slideInfo.index = i; 3295 newElements.push(slideInfo); 3296 }); 3297 } 3298 3299 this.elements = newElements; 3300 3301 if (this.lightboxOpen) { 3302 this.slidesContainer.innerHTML = ''; 3303 3304 if (this.elements.length) { 3305 each(this.elements, function () { 3306 var slide = createHTML(_this5.settings.slideHTML); 3307 3308 _this5.slidesContainer.appendChild(slide); 3309 }); 3310 this.showSlide(0, true); 3311 } 3312 } 3313 } 3314 }, { 3315 key: "getElementIndex", 3316 value: function getElementIndex(node) { 3317 var index = false; 3318 each(this.elements, function (el, i) { 3319 if (has(el, 'node') && el.node == node) { 3320 index = i; 3321 return true; 3322 } 3323 }); 3324 return index; 3325 } 3326 }, { 3327 key: "getElements", 3328 value: function getElements() { 3329 var _this6 = this; 3330 3331 var list = []; 3332 this.elements = this.elements ? this.elements : []; 3333 3334 if (!isNil(this.settings.elements) && isArray(this.settings.elements) && this.settings.elements.length) { 3335 each(this.settings.elements, function (el, i) { 3336 var slide = new Slide(el, _this6, i); 3337 var elData = slide.getConfig(); 3338 var slideInfo = extend({}, elData); 3339 slideInfo.node = false; 3340 slideInfo.index = i; 3341 slideInfo.instance = slide; 3342 slideInfo.slideConfig = elData; 3343 list.push(slideInfo); 3344 }); 3345 } 3346 3347 var nodes = false; 3348 var selector = this.getSelector(); 3349 3350 if (selector) { 3351 nodes = document.querySelectorAll(this.getSelector()); 3352 } 3353 3354 if (!nodes) { 3355 return list; 3356 } 3357 3358 each(nodes, function (el, i) { 3359 var slide = new Slide(el, _this6, i); 3360 var elData = slide.getConfig(); 3361 var slideInfo = extend({}, elData); 3362 slideInfo.node = el; 3363 slideInfo.index = i; 3364 slideInfo.instance = slide; 3365 slideInfo.slideConfig = elData; 3366 slideInfo.gallery = el.getAttribute('data-gallery'); 3367 list.push(slideInfo); 3368 }); 3369 return list; 3370 } 3371 }, { 3372 key: "getGalleryElements", 3373 value: function getGalleryElements(list, gallery) { 3374 return list.filter(function (el) { 3375 return el.gallery == gallery; 3376 }); 3377 } 3378 }, { 3379 key: "getSelector", 3380 value: function getSelector() { 3381 if (this.settings.elements) { 3382 return false; 3383 } 3384 3385 if (this.settings.selector && this.settings.selector.substring(0, 5) == 'data-') { 3386 return "*[".concat(this.settings.selector, "]"); 3387 } 3388 3389 return this.settings.selector; 3390 } 3391 }, { 3392 key: "getActiveSlide", 3393 value: function getActiveSlide() { 3394 return this.slidesContainer.querySelectorAll('.gslide')[this.index]; 3395 } 3396 }, { 3397 key: "getActiveSlideIndex", 3398 value: function getActiveSlideIndex() { 3399 return this.index; 3400 } 3401 }, { 3402 key: "getAnimationClasses", 3403 value: function getAnimationClasses() { 3404 var effects = []; 3405 3406 for (var key in this.settings.cssEfects) { 3407 if (this.settings.cssEfects.hasOwnProperty(key)) { 3408 var effect = this.settings.cssEfects[key]; 3409 effects.push("g".concat(effect["in"])); 3410 effects.push("g".concat(effect.out)); 3411 } 3412 } 3413 3414 return effects.join(' '); 3415 } 3416 }, { 3417 key: "build", 3418 value: function build() { 3419 var _this7 = this; 3420 3421 if (this.built) { 3422 return false; 3423 } 3424 3425 var children = document.body.childNodes; 3426 var bodyChildElms = []; 3427 each(children, function (el) { 3428 if (el.parentNode == document.body && el.nodeName.charAt(0) !== '#' && el.hasAttribute && !el.hasAttribute('aria-hidden')) { 3429 bodyChildElms.push(el); 3430 el.setAttribute('aria-hidden', 'true'); 3431 } 3432 }); 3433 var nextSVG = has(this.settings.svg, 'next') ? this.settings.svg.next : ''; 3434 var prevSVG = has(this.settings.svg, 'prev') ? this.settings.svg.prev : ''; 3435 var closeSVG = has(this.settings.svg, 'close') ? this.settings.svg.close : ''; 3436 var lightboxHTML = this.settings.lightboxHTML; 3437 lightboxHTML = lightboxHTML.replace(/{nextSVG}/g, nextSVG); 3438 lightboxHTML = lightboxHTML.replace(/{prevSVG}/g, prevSVG); 3439 lightboxHTML = lightboxHTML.replace(/{closeSVG}/g, closeSVG); 3440 lightboxHTML = createHTML(lightboxHTML); 3441 document.body.appendChild(lightboxHTML); 3442 var modal = document.getElementById('glightbox-body'); 3443 this.modal = modal; 3444 var closeButton = modal.querySelector('.gclose'); 3445 this.prevButton = modal.querySelector('.gprev'); 3446 this.nextButton = modal.querySelector('.gnext'); 3447 this.overlay = modal.querySelector('.goverlay'); 3448 this.loader = modal.querySelector('.gloader'); 3449 this.slidesContainer = document.getElementById('glightbox-slider'); 3450 this.bodyHiddenChildElms = bodyChildElms; 3451 this.events = {}; 3452 addClass(this.modal, 'glightbox-' + this.settings.skin); 3453 3454 if (this.settings.closeButton && closeButton) { 3455 this.events['close'] = addEvent('click', { 3456 onElement: closeButton, 3457 withCallback: function withCallback(e, target) { 3458 e.preventDefault(); 3459 3460 _this7.close(); 3461 } 3462 }); 3463 } 3464 3465 if (closeButton && !this.settings.closeButton) { 3466 closeButton.parentNode.removeChild(closeButton); 3467 } 3468 3469 if (this.nextButton) { 3470 this.events['next'] = addEvent('click', { 3471 onElement: this.nextButton, 3472 withCallback: function withCallback(e, target) { 3473 e.preventDefault(); 3474 3475 _this7.nextSlide(); 3476 } 3477 }); 3478 } 3479 3480 if (this.prevButton) { 3481 this.events['prev'] = addEvent('click', { 3482 onElement: this.prevButton, 3483 withCallback: function withCallback(e, target) { 3484 e.preventDefault(); 3485 3486 _this7.prevSlide(); 3487 } 3488 }); 3489 } 3490 3491 if (this.settings.closeOnOutsideClick) { 3492 this.events['outClose'] = addEvent('click', { 3493 onElement: modal, 3494 withCallback: function withCallback(e, target) { 3495 if (!_this7.preventOutsideClick && !hasClass(document.body, 'glightbox-mobile') && !closest(e.target, '.ginner-container')) { 3496 if (!closest(e.target, '.gbtn') && !hasClass(e.target, 'gnext') && !hasClass(e.target, 'gprev')) { 3497 _this7.close(); 3498 } 3499 } 3500 } 3501 }); 3502 } 3503 3504 each(this.elements, function (slide, i) { 3505 _this7.slidesContainer.appendChild(slide.instance.create()); 3506 3507 slide.slideNode = _this7.slidesContainer.querySelectorAll('.gslide')[i]; 3508 }); 3509 3510 if (isTouch$1) { 3511 addClass(document.body, 'glightbox-touch'); 3512 } 3513 3514 this.events['resize'] = addEvent('resize', { 3515 onElement: window, 3516 withCallback: function withCallback() { 3517 _this7.resize(); 3518 } 3519 }); 3520 this.built = true; 3521 } 3522 }, { 3523 key: "resize", 3524 value: function resize() { 3525 var slide = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; 3526 slide = !slide ? this.activeSlide : slide; 3527 3528 if (!slide || hasClass(slide, 'zoomed')) { 3529 return; 3530 } 3531 3532 var winSize = windowSize(); 3533 var video = slide.querySelector('.gvideo-wrapper'); 3534 var image = slide.querySelector('.gslide-image'); 3535 var description = this.slideDescription; 3536 var winWidth = winSize.width; 3537 var winHeight = winSize.height; 3538 3539 if (winWidth <= 768) { 3540 addClass(document.body, 'glightbox-mobile'); 3541 } else { 3542 removeClass(document.body, 'glightbox-mobile'); 3543 } 3544 3545 if (!video && !image) { 3546 return; 3547 } 3548 3549 var descriptionResize = false; 3550 3551 if (description && (hasClass(description, 'description-bottom') || hasClass(description, 'description-top')) && !hasClass(description, 'gabsolute')) { 3552 descriptionResize = true; 3553 } 3554 3555 if (image) { 3556 if (winWidth <= 768) { 3557 var imgNode = image.querySelector('img'); 3558 } else if (descriptionResize) { 3559 var descHeight = description.offsetHeight; 3560 3561 var _imgNode = image.querySelector('img'); 3562 3563 _imgNode.setAttribute('style', "max-height: calc(100vh - ".concat(descHeight, "px)")); 3564 3565 description.setAttribute('style', "max-width: ".concat(_imgNode.offsetWidth, "px;")); 3566 } 3567 } 3568 3569 if (video) { 3570 var ratio = has(this.settings.plyr.config, 'ratio') ? this.settings.plyr.config.ratio : ''; 3571 3572 if (!ratio) { 3573 var containerWidth = video.clientWidth; 3574 var containerHeight = video.clientHeight; 3575 var divisor = containerWidth / containerHeight; 3576 ratio = "".concat(containerWidth / divisor, ":").concat(containerHeight / divisor); 3577 } 3578 3579 var videoRatio = ratio.split(':'); 3580 var videoWidth = this.settings.videosWidth; 3581 var maxWidth = this.settings.videosWidth; 3582 3583 if (isNumber(videoWidth) || videoWidth.indexOf('px') !== -1) { 3584 maxWidth = parseInt(videoWidth); 3585 } else { 3586 if (videoWidth.indexOf('vw') !== -1) { 3587 maxWidth = winWidth * parseInt(videoWidth) / 100; 3588 } else if (videoWidth.indexOf('vh') !== -1) { 3589 maxWidth = winHeight * parseInt(videoWidth) / 100; 3590 } else if (videoWidth.indexOf('%') !== -1) { 3591 maxWidth = winWidth * parseInt(videoWidth) / 100; 3592 } else { 3593 maxWidth = parseInt(video.clientWidth); 3594 } 3595 } 3596 3597 var maxHeight = maxWidth / (parseInt(videoRatio[0]) / parseInt(videoRatio[1])); 3598 maxHeight = Math.floor(maxHeight); 3599 3600 if (descriptionResize) { 3601 winHeight = winHeight - description.offsetHeight; 3602 } 3603 3604 if (maxWidth > winWidth || maxHeight > winHeight || winHeight < maxHeight && winWidth > maxWidth) { 3605 var vwidth = video.offsetWidth; 3606 var vheight = video.offsetHeight; 3607 3608 var _ratio = winHeight / vheight; 3609 3610 var vsize = { 3611 width: vwidth * _ratio, 3612 height: vheight * _ratio 3613 }; 3614 video.parentNode.setAttribute('style', "max-width: ".concat(vsize.width, "px")); 3615 3616 if (descriptionResize) { 3617 description.setAttribute('style', "max-width: ".concat(vsize.width, "px;")); 3618 } 3619 } else { 3620 video.parentNode.style.maxWidth = "".concat(videoWidth); 3621 3622 if (descriptionResize) { 3623 description.setAttribute('style', "max-width: ".concat(videoWidth, ";")); 3624 } 3625 } 3626 } 3627 } 3628 }, { 3629 key: "reload", 3630 value: function reload() { 3631 this.init(); 3632 } 3633 }, { 3634 key: "updateNavigationClasses", 3635 value: function updateNavigationClasses() { 3636 var loop = this.loop(); 3637 removeClass(this.nextButton, 'disabled'); 3638 removeClass(this.prevButton, 'disabled'); 3639 3640 if (this.index == 0 && this.elements.length - 1 == 0) { 3641 addClass(this.prevButton, 'disabled'); 3642 addClass(this.nextButton, 'disabled'); 3643 } else if (this.index === 0 && !loop) { 3644 addClass(this.prevButton, 'disabled'); 3645 } else if (this.index === this.elements.length - 1 && !loop) { 3646 addClass(this.nextButton, 'disabled'); 3647 } 3648 } 3649 }, { 3650 key: "loop", 3651 value: function loop() { 3652 var loop = has(this.settings, 'loopAtEnd') ? this.settings.loopAtEnd : null; 3653 loop = has(this.settings, 'loop') ? this.settings.loop : loop; 3654 return loop; 3655 } 3656 }, { 3657 key: "close", 3658 value: function close() { 3659 var _this8 = this; 3660 3661 if (!this.lightboxOpen) { 3662 if (this.events) { 3663 for (var key in this.events) { 3664 if (this.events.hasOwnProperty(key)) { 3665 this.events[key].destroy(); 3666 } 3667 } 3668 3669 this.events = null; 3670 } 3671 3672 return false; 3673 } 3674 3675 if (this.closing) { 3676 return false; 3677 } 3678 3679 this.closing = true; 3680 this.slidePlayerPause(this.activeSlide); 3681 3682 if (this.fullElementsList) { 3683 this.elements = this.fullElementsList; 3684 } 3685 3686 if (this.bodyHiddenChildElms.length) { 3687 each(this.bodyHiddenChildElms, function (el) { 3688 el.removeAttribute('aria-hidden'); 3689 }); 3690 } 3691 3692 addClass(this.modal, 'glightbox-closing'); 3693 animateElement(this.overlay, this.settings.openEffect == 'none' ? 'none' : this.settings.cssEfects.fade.out); 3694 animateElement(this.activeSlide, this.settings.cssEfects[this.settings.closeEffect].out, function () { 3695 _this8.activeSlide = null; 3696 _this8.prevActiveSlideIndex = null; 3697 _this8.prevActiveSlide = null; 3698 _this8.built = false; 3699 3700 if (_this8.events) { 3701 for (var _key in _this8.events) { 3702 if (_this8.events.hasOwnProperty(_key)) { 3703 _this8.events[_key].destroy(); 3704 } 3705 } 3706 3707 _this8.events = null; 3708 } 3709 3710 var body = document.body; 3711 removeClass(html, 'glightbox-open'); 3712 removeClass(body, 'glightbox-open touching gdesc-open glightbox-touch glightbox-mobile gscrollbar-fixer'); 3713 3714 _this8.modal.parentNode.removeChild(_this8.modal); 3715 3716 _this8.trigger('close'); 3717 3718 if (isFunction(_this8.settings.onClose)) { 3719 _this8.settings.onClose(); 3720 } 3721 3722 var styles = document.querySelector('.gcss-styles'); 3723 3724 if (styles) { 3725 styles.parentNode.removeChild(styles); 3726 } 3727 3728 _this8.lightboxOpen = false; 3729 _this8.closing = null; 3730 }); 3731 } 3732 }, { 3733 key: "destroy", 3734 value: function destroy() { 3735 this.close(); 3736 this.clearAllEvents(); 3737 3738 if (this.baseEvents) { 3739 this.baseEvents.destroy(); 3740 } 3741 } 3742 }, { 3743 key: "on", 3744 value: function on(evt, callback) { 3745 var once = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 3746 3747 if (!evt || !isFunction(callback)) { 3748 throw new TypeError('Event name and callback must be defined'); 3749 } 3750 3751 this.apiEvents.push({ 3752 evt: evt, 3753 once: once, 3754 callback: callback 3755 }); 3756 } 3757 }, { 3758 key: "once", 3759 value: function once(evt, callback) { 3760 this.on(evt, callback, true); 3761 } 3762 }, { 3763 key: "trigger", 3764 value: function trigger(eventName) { 3765 var _this9 = this; 3766 3767 var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 3768 var onceTriggered = []; 3769 each(this.apiEvents, function (event, i) { 3770 var evt = event.evt, 3771 once = event.once, 3772 callback = event.callback; 3773 3774 if (evt == eventName) { 3775 callback(data); 3776 3777 if (once) { 3778 onceTriggered.push(i); 3779 } 3780 } 3781 }); 3782 3783 if (onceTriggered.length) { 3784 each(onceTriggered, function (i) { 3785 return _this9.apiEvents.splice(i, 1); 3786 }); 3787 } 3788 } 3789 }, { 3790 key: "clearAllEvents", 3791 value: function clearAllEvents() { 3792 this.apiEvents.splice(0, this.apiEvents.length); 3793 } 3794 }, { 3795 key: "version", 3796 value: function version() { 3797 return _version; 3798 } 3799 }]); 3800 3801 return GlightboxInit; 3802 }(); 3803 3804 function glightbox() { 3805 var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 3806 var instance = new GlightboxInit(options); 3807 instance.init(); 3808 return instance; 3809 } 3810 3811 return glightbox; 3812}); 3813 3814},{}],3:[function(require,module,exports){ 3815"use strict"; 3816 3817(function () { 3818 L.Control.FullScreen = L.Control.extend({ 3819 options: { 3820 position: 'topleft', 3821 title: 'Full Screen', 3822 titleCancel: 'Exit Full Screen',
3823 forceSeparateButton: false, 3824 forcePseudoFullscreen: false, 3825 fullscreenElement: false 3826 }, 3827 onAdd: function onAdd(map) { 3828 var className = 'leaflet-control-zoom-fullscreen', 3829 container, 3830 content = ''; 3831 3832 if (map.zoomControl && !this.options.forceSeparateButton) { 3833 container = map.zoomControl._container; 3834 } else { 3835 container = L.DomUtil.create('div', 'leaflet-bar'); 3836 } 3837 3838 if (this.options.content) { 3839 content = this.options.content; 3840 } else { 3841 className += ' fullscreen-icon'; 3842 } 3843 3844 this._createButton(this.options.title, className, content, container, this.toggleFullScreen, this); 3845 3846 this._map.fullscreenControl = this; 3847 3848 this._map.on('enterFullscreen exitFullscreen', this._toggleTitle, this); 3849 3850 return container; 3851 }, 3852 onRemove: function onRemove(map) { 3853 L.DomEvent.off(this.link, 'click', L.DomEvent.stopPropagation).off(this.link, 'click', L.DomEvent.preventDefault).off(this.link, 'click', this.toggleFullScreen, this); 3854 L.DomEvent.off(this._container, fullScreenApi.fullScreenEventName, L.DomEvent.stopPropagation).off(this._container, fullScreenApi.fullScreenEventName, L.DomEvent.preventDefault).off(this._container, fullScreenApi.fullScreenEventName, this._handleFullscreenChange, this); 3855 L.DomEvent.off(document, fullScreenApi.fullScreenEventName, L.DomEvent.stopPropagation).off(document, fullScreenApi.fullScreenEventName, L.DomEvent.preventDefault).off(document, fullScreenApi.fullScreenEventName, this._handleFullscreenChange, this); 3856 }, 3857 _createButton: function _createButton(title, className, content, container, fn, context) { 3858 this.link = L.DomUtil.create('a', className, container); 3859 this.link.href = '#'; 3860 this.link.title = title; 3861 this.link.innerHTML = content; 3862 this.link.setAttribute('role', 'button'); 3863 this.link.setAttribute('aria-label', title); 3864 L.DomEvent.on(this.link, 'click', L.DomEvent.stopPropagation).on(this.link, 'click', L.DomEvent.preventDefault).on(this.link, 'click', fn, context); 3865 L.DomEvent.on(container, fullScreenApi.fullScreenEventName, L.DomEvent.stopPropagation).on(container, fullScreenApi.fullScreenEventName, L.DomEvent.preventDefault).on(container, fullScreenApi.fullScreenEventName, this._handleFullscreenChange, context); 3866 L.DomEvent.on(document, fullScreenApi.fullScreenEventName, L.DomEvent.stopPropagation).on(document, fullScreenApi.fullScreenEventName, L.DomEvent.preventDefault).on(document, fullScreenApi.fullScreenEventName, this._handleFullscreenChange, context); 3867 return this.link; 3868 }, 3869 toggleFullScreen: function toggleFullScreen() { 3870 var map = this._map; 3871 map._exitFired = false; 3872 3873 if (map._isFullscreen) { 3874 if (fullScreenApi.supportsFullScreen && !this.options.forcePseudoFullscreen) { 3875 fullScreenApi.cancelFullScreen(); 3876 } else { 3877 L.DomUtil.removeClass(this.options.fullscreenElement ? this.options.fullscreenElement : map._container, 'leaflet-pseudo-fullscreen'); 3878 } 3879 3880 map.fire('exitFullscreen'); 3881 map._exitFired = true; 3882 map._isFullscreen = false; 3883 } else { 3884 if (fullScreenApi.supportsFullScreen && !this.options.forcePseudoFullscreen) { 3885 fullScreenApi.requestFullScreen(this.options.fullscreenElement ? this.options.fullscreenElement : map._container); 3886 } else { 3887 L.DomUtil.addClass(this.options.fullscreenElement ? this.options.fullscreenElement : map._container, 'leaflet-pseudo-fullscreen'); 3888 } 3889 3890 map.fire('enterFullscreen'); 3891 map._isFullscreen = true; 3892 } 3893 }, 3894 _toggleTitle: function _toggleTitle() { 3895 this.link.title = this._map._isFullscreen ? this.options.title : this.options.titleCancel; 3896 }, 3897 _handleFullscreenChange: function _handleFullscreenChange() { 3898 var map = this._map; 3899 map.invalidateSize(); 3900 3901 if (!fullScreenApi.isFullScreen() && !map._exitFired) { 3902 map.fire('exitFullscreen'); 3903 map._exitFired = true; 3904 map._isFullscreen = false;
3905 } 3906 } 3907 }); 3908 L.Map.include({ 3909 toggleFullscreen: function toggleFullscreen() { 3910 this.fullscreenControl.toggleFullScreen(); 3911 } 3912 }); 3913 L.Map.addInitHook(function () { 3914 if (this.options.fullscreenControl) { 3915 this.addControl(L.control.fullscreen(this.options.fullscreenControlOptions)); 3916 } 3917 }); 3918 3919 L.control.fullscreen = function (options) { 3920 return new L.Control.FullScreen(options); 3921 }; 3922 3923 var fullScreenApi = { 3924 supportsFullScreen: false, 3925 isFullScreen: function isFullScreen() { 3926 return false; 3927 }, 3928 requestFullScreen: function requestFullScreen() {}, 3929 cancelFullScreen: function cancelFullScreen() {}, 3930 fullScreenEventName: '', 3931 prefix: '' 3932 }, 3933 browserPrefixes = 'webkit moz o ms khtml'.split(' '); 3934 3935 if (typeof document.exitFullscreen !== 'undefined') { 3936 fullScreenApi.supportsFullScreen = true; 3937 } else { 3938 for (var i = 0, il = browserPrefixes.length; i < il; i++) { 3939 fullScreenApi.prefix = browserPrefixes[i]; 3940 3941 if (typeof document[fullScreenApi.prefix + 'CancelFullScreen'] !== 'undefined') { 3942 fullScreenApi.supportsFullScreen = true; 3943 break; 3944 } 3945 } 3946 3947 if (typeof document['msExitFullscreen'] !== 'undefined') { 3948 fullScreenApi.prefix = 'ms'; 3949 fullScreenApi.supportsFullScreen = true; 3950 } 3951 } 3952 3953 if (fullScreenApi.supportsFullScreen) { 3954 if (fullScreenApi.prefix === 'ms') { 3955 fullScreenApi.fullScreenEventName = 'MSFullscreenChange'; 3956 } else { 3957 fullScreenApi.fullScreenEventName = fullScreenApi.prefix + 'fullscreenchange'; 3958 } 3959 3960 fullScreenApi.isFullScreen = function () { 3961 switch (this.prefix) { 3962 case '': 3963 return document.fullscreen; 3964 3965 case 'webkit': 3966 return document.webkitIsFullScreen; 3967 3968 case 'ms': 3969 return document.msFullscreenElement; 3970 3971 default: 3972 return document[this.prefix + 'FullScreen']; 3973 } 3974 }; 3975 3976 fullScreenApi.requestFullScreen = function (el) { 3977 switch (this.prefix) { 3978 case '': 3979 return el.requestFullscreen(); 3980 3981 case 'ms': 3982 return el.msRequestFullscreen(); 3983 3984 default: 3985 return el[this.prefix + 'RequestFullScreen'](); 3986 } 3987 }; 3988 3989 fullScreenApi.cancelFullScreen = function () { 3990 switch (this.prefix) { 3991 case '': 3992 return document.exitFullscreen(); 3993 3994 case 'ms': 3995 return document.msExitFullscreen(); 3996 3997 default: 3998 return document[this.prefix + 'CancelFullScreen'](); 3999 } 4000 }; 4001 } 4002 4003 if (typeof jQuery !== 'undefined') { 4004 jQuery.fn.requestFullScreen = function () { 4005 return this.each(function () { 4006 var el = jQuery(this); 4007 4008 if (fullScreenApi.supportsFullScreen) { 4009 fullScreenApi.requestFullScreen(el); 4010 } 4011 }); 4012 }; 4013 } 4014 4015 window.fullScreenApi = fullScreenApi; 4016})(); 4017 4018},{}],4:[function(require,module,exports){ 4019"use strict"; 4020 4021function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } 4022 4023/* @preserve 4024 * Leaflet 1.7.1, a JS library for interactive maps. http://leafletjs.com 4025 * (c) 2010-2019 Vladimir Agafonkin, (c) 2010-2011 CloudMade 4026 */ 4027!function (t, i) { 4028 "object" == (typeof exports === "undefined" ? "undefined" : _typeof(exports)) && "undefined" != typeof module ? i(exports) : "function" == typeof define && define.amd ? define(["exports"], i) : i(t.L = {}); 4029}(void 0, function (t) { 4030 "use strict"; 4031 4032 function h(t) { 4033 for (var i, e, n = 1, o = arguments.length; n < o; n++) { 4034 for (i in e = arguments[n]) { 4035 t[i] = e[i]; 4036 } 4037 } 4038 4039 return t; 4040 } 4041 4042 var s = Object.create || function (t) { 4043 return i.prototype = t, new i(); 4044 }; 4045 4046 function i() {} 4047 4048 function p(t, i) { 4049 var e = Array.prototype.slice; 4050 if (t.bind) return t.bind.apply(t, e.call(arguments, 1)); 4051 var n = e.call(arguments, 2); 4052 return function () { 4053 return t.apply(i, n.length ? n.concat(e.call(arguments)) : arguments); 4054 }; 4055 } 4056 4057 var e = 0; 4058 4059 function m(t) { 4060 return t._leaflet_id = t._leaflet_id || ++e, t._leaflet_id; 4061 } 4062 4063 function n(t, i, e) { 4064 var n, 4065 o, 4066 s = function s() { 4067 n = !1, o && (r.apply(e, o), o = !1); 4068 }, 4069 r = function r() { 4070 n ? o = arguments : (t.apply(e, arguments), setTimeout(s, i), n = !0); 4071 }; 4072 4073 return r; 4074 } 4075 4076 function o(t, i, e) { 4077 var n = i[1], 4078 o = i[0], 4079 s = n - o; 4080 return t === n && e ? t : ((t - o) % s + s) % s + o; 4081 } 4082 4083 function a() { 4084 return !1; 4085 } 4086 4087 function r(t, i) { 4088 var e = Math.pow(10, void 0 === i ? 6 : i); 4089 return Math.round(t * e) / e; 4090 } 4091 4092 function u(t) { 4093 return t.trim ? t.trim() : t.replace(/^\s+|\s+$/g, ""); 4094 } 4095 4096 function l(t) { 4097 return u(t).split(/\s+/); 4098 } 4099 4100 function c(t, i) { 4101 for (var e in Object.prototype.hasOwnProperty.call(t, "options") || (t.options = t.options ? s(t.options) : {}), i) { 4102 t.options[e] = i[e]; 4103 } 4104 4105 return t.options; 4106 } 4107 4108 function _(t, i, e) { 4109 var n = []; 4110 4111 for (var o in t) { 4112 n.push(encodeURIComponent(e ? o.toUpperCase() : o) + "=" + encodeURIComponent(t[o])); 4113 } 4114 4115 return (i && -1 !== i.indexOf("?") ? "&" : "?") + n.join("&"); 4116 } 4117 4118 var d = /\{ *([\w_-]+) *\}/g; 4119 4120 function f(t, n) { 4121 return t.replace(d, function (t, i) { 4122 var e = n[i]; 4123 if (void 0 === e) throw new Error("No value provided for variable " + t); 4124 return "function" == typeof e && (e = e(n)), e; 4125 }); 4126 } 4127 4128 var g = Array.isArray || function (t) { 4129 return "[object Array]" === Object.prototype.toString.call(t); 4130 }; 4131 4132 function v(t, i) { 4133 for (var e = 0; e < t.length; e++) { 4134 if (t[e] === i) return e; 4135 } 4136 4137 return -1; 4138 } 4139 4140 var y = "data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="; 4141 4142 function x(t) { 4143 return window["webkit" + t] || window["moz" + t] || window["ms" + t]; 4144 } 4145 4146 var w = 0; 4147 4148 function P(t) { 4149 var i = +new Date(), 4150 e = Math.max(0, 16 - (i - w)); 4151 return w = i + e, window.setTimeout(t, e); 4152 } 4153 4154 var b = window.requestAnimationFrame || x("RequestAnimationFrame") || P, 4155 T = window.cancelAnimationFrame || x("CancelAnimationFrame") || x("CancelRequestAnimationFrame") || function (t) { 4156 window.clearTimeout(t); 4157 }; 4158 4159 function M(t, i, e) { 4160 if (!e || b !== P) return b.call(window, p(t, i)); 4161 t.call(i); 4162 } 4163 4164 function z(t) { 4165 t && T.call(window, t); 4166 } 4167 4168 var C = { 4169 extend: h, 4170 create: s, 4171 bind: p, 4172 lastId: e, 4173 stamp: m, 4174 throttle: n, 4175 wrapNum: o, 4176 falseFn: a, 4177 formatNum: r, 4178 trim: u, 4179 splitWords: l, 4180 setOptions: c, 4181 getParamString: _, 4182 template: f, 4183 isArray: g, 4184 indexOf: v, 4185 emptyImageUrl: y, 4186 requestFn: b, 4187 cancelFn: T, 4188 requestAnimFrame: M, 4189 cancelAnimFrame: z 4190 }; 4191 4192 function S() {} 4193 4194 S.extend = function (t) { 4195 function i() { 4196 this.initialize && this.initialize.apply(this, arguments), this.callInitHooks(); 4197 } 4198 4199 var e = i.__super__ = this.prototype, 4200 n = s(e); 4201 4202 for (var o in (n.constructor = i).prototype = n, this) { 4203 Object.prototype.hasOwnProperty.call(this, o) && "prototype" !== o && "__super__" !== o && (i[o] = this[o]); 4204 } 4205 4206 return t.statics && (h(i, t.statics), delete t.statics), t.includes && (function (t) { 4207 if ("undefined" == typeof L || !L || !L.Mixin) return; 4208 t = g(t) ? t : [t]; 4209 4210 for (var i = 0; i < t.length; i++) {
4211 t[i] === L.Mixin.Events && console.warn("Deprecated include of L.Mixin.Events: this property will be removed in future releases, please inherit from L.Evented instead.", new Error().stack); 4212 } 4213 }(t.includes), h.apply(null, [n].concat(t.includes)), delete t.includes), n.options && (t.options = h(s(n.options), t.options)), h(n, t), n._initHooks = [], n.callInitHooks = function () { 4214 if (!this._initHooksCalled) { 4215 e.callInitHooks && e.callInitHooks.call(this), this._initHooksCalled = !0; 4216 4217 for (var t = 0, i = n._initHooks.length; t < i; t++) { 4218 n._initHooks[t].call(this); 4219 } 4220 } 4221 }, i; 4222 }, S.include = function (t) { 4223 return h(this.prototype, t), this; 4224 }, S.mergeOptions = function (t) { 4225 return h(this.prototype.options, t), this; 4226 }, S.addInitHook = function (t) { 4227 var i = Array.prototype.slice.call(arguments, 1), 4228 e = "function" == typeof t ? t : function () { 4229 this[t].apply(this, i); 4230 }; 4231 return this.prototype._initHooks = this.prototype._initHooks || [], this.prototype._initHooks.push(e), this; 4232 }; 4233 var Z = { 4234 on: function on(t, i, e) { 4235 if ("object" == _typeof(t)) for (var n in t) { 4236 this._on(n, t[n], i); 4237 } else for (var o = 0, s = (t = l(t)).length; o < s; o++) { 4238 this._on(t[o], i, e); 4239 } 4240 return this; 4241 }, 4242 off: function off(t, i, e) { 4243 if (t) { 4244 if ("object" == _typeof(t)) for (var n in t) { 4245 this._off(n, t[n], i); 4246 } else for (var o = 0, s = (t = l(t)).length; o < s; o++) { 4247 this._off(t[o], i, e); 4248 } 4249 } else delete this._events; 4250 return this; 4251 }, 4252 _on: function _on(t, i, e) { 4253 this._events = this._events || {}; 4254 var n = this._events[t]; 4255 n || (n = [], this._events[t] = n), e === this && (e = void 0); 4256 4257 for (var o = { 4258 fn: i, 4259 ctx: e 4260 }, s = n, r = 0, a = s.length; r < a; r++) { 4261 if (s[r].fn === i && s[r].ctx === e) return; 4262 } 4263 4264 s.push(o); 4265 }, 4266 _off: function _off(t, i, e) { 4267 var n, o, s; 4268 if (this._events && (n = this._events[t])) if (i) { 4269 if (e === this && (e = void 0), n) for (o = 0, s = n.length; o < s; o++) { 4270 var r = n[o]; 4271 if (r.ctx === e && r.fn === i) return r.fn = a, this._firingCount && (this._events[t] = n = n.slice()), void n.splice(o, 1); 4272 } 4273 } else { 4274 for (o = 0, s = n.length; o < s; o++) { 4275 n[o].fn = a; 4276 } 4277 4278 delete this._events[t]; 4279 } 4280 }, 4281 fire: function fire(t, i, e) { 4282 if (!this.listens(t, e)) return this; 4283 var n = h({}, i, { 4284 type: t, 4285 target: this, 4286 sourceTarget: i && i.sourceTarget || this 4287 }); 4288 4289 if (this._events) { 4290 var o = this._events[t]; 4291 4292 if (o) { 4293 this._firingCount = this._firingCount + 1 || 1; 4294 4295 for (var s = 0, r = o.length; s < r; s++) { 4296 var a = o[s]; 4297 a.fn.call(a.ctx || this, n); 4298 } 4299 4300 this._firingCount--; 4301 } 4302 } 4303 4304 return e && this._propagateEvent(n), this; 4305 }, 4306 listens: function listens(t, i) { 4307 var e = this._events && this._events[t]; 4308 if (e && e.length) return !0; 4309 if (i) for (var n in this._eventParents) { 4310 if (this._eventParents[n].listens(t, i)) return !0; 4311 } 4312 return !1; 4313 }, 4314 once: function once(t, i, e) { 4315 if ("object" == _typeof(t)) { 4316 for (var n in t) { 4317 this.once(n, t[n], i); 4318 } 4319 4320 return this; 4321 } 4322 4323 var o = p(function () { 4324 this.off(t, i, e).off(t, o, e); 4325 }, this); 4326 return this.on(t, i, e).on(t, o, e); 4327 }, 4328 addEventParent: function addEventParent(t) { 4329 return this._eventParents = this._eventParents || {}, this._eventParents[m(t)] = t, this; 4330 }, 4331 removeEventParent: function removeEventParent(t) { 4332 return this._eventParents && delete this._eventParents[m(t)], this; 4333 }, 4334 _propagateEvent: function _propagateEvent(t) { 4335 for (var i in this._eventParents) { 4336 this._eventParents[i].fire(t.type, h({ 4337 layer: t.target, 4338 propagatedFrom: t.target 4339 }, t), !0); 4340 } 4341 } 4342 }; 4343 Z.addEventListener = Z.on, Z.removeEventListener = Z.clearAllEventListeners = Z.off, Z.addOneTimeEventListener = Z.once, Z.fireEvent = Z.fire, Z.hasEventListeners = Z.listens; 4344 var E = S.extend(Z); 4345 4346 function k(t, i, e) { 4347 this.x = e ? Math.round(t) : t, this.y = e ? Math.round(i) : i; 4348 } 4349 4350 var B = Math.trunc || function (t) { 4351 return 0 < t ? Math.floor(t) : Math.ceil(t); 4352 }; 4353 4354 function A(t, i, e) { 4355 return t instanceof k ? t : g(t) ? new k(t[0], t[1]) : null == t ? t : "object" == _typeof(t) && "x" in t && "y" in t ? new k(t.x, t.y) : new k(t, i, e); 4356 } 4357 4358 function I(t, i) { 4359 if (t) for (var e = i ? [t, i] : t, n = 0, o = e.length; n < o; n++) { 4360 this.extend(e[n]); 4361 } 4362 } 4363 4364 function O(t, i) { 4365 return !t || t instanceof I ? t : new I(t, i); 4366 } 4367 4368 function R(t, i) { 4369 if (t) for (var e = i ? [t, i] : t, n = 0, o = e.length; n < o; n++) { 4370 this.extend(e[n]); 4371 } 4372 } 4373 4374 function N(t, i) { 4375 return t instanceof R ? t : new R(t, i); 4376 } 4377 4378 function D(t, i, e) { 4379 if (isNaN(t) || isNaN(i)) throw new Error("Invalid LatLng object: (" + t + ", " + i + ")"); 4380 this.lat = +t, this.lng = +i, void 0 !== e && (this.alt = +e); 4381 } 4382 4383 function j(t, i, e) { 4384 return t instanceof D ? t : g(t) && "object" != _typeof(t[0]) ? 3 === t.length ? new D(t[0], t[1], t[2]) : 2 === t.length ? new D(t[0], t[1]) : null : null == t ? t : "object" == _typeof(t) && "lat" in t ? new D(t.lat, "lng" in t ? t.lng : t.lon, t.alt) : void 0 === i ? null : new D(t, i, e); 4385 } 4386 4387 k.prototype = { 4388 clone: function clone() { 4389 return new k(this.x, this.y); 4390 }, 4391 add: function add(t) { 4392 return this.clone()._add(A(t)); 4393 }, 4394 _add: function _add(t) { 4395 return this.x += t.x, this.y += t.y, this; 4396 }, 4397 subtract: function subtract(t) { 4398 return this.clone()._subtract(A(t)); 4399 }, 4400 _subtract: function _subtract(t) { 4401 return this.x -= t.x, this.y -= t.y, this; 4402 }, 4403 divideBy: function divideBy(t) { 4404 return this.clone()._divideBy(t); 4405 }, 4406 _divideBy: function _divideBy(t) { 4407 return this.x /= t, this.y /= t, this; 4408 }, 4409 multiplyBy: function multiplyBy(t) { 4410 return this.clone()._multiplyBy(t); 4411 }, 4412 _multiplyBy: function _multiplyBy(t) { 4413 return this.x *= t, this.y *= t, this; 4414 }, 4415 scaleBy: function scaleBy(t) { 4416 return new k(this.x * t.x, this.y * t.y); 4417 }, 4418 unscaleBy: function unscaleBy(t) { 4419 return new k(this.x / t.x, this.y / t.y); 4420 }, 4421 round: function round() { 4422 return this.clone()._round(); 4423 }, 4424 _round: function _round() { 4425 return this.x = Math.round(this.x), this.y = Math.round(this.y), this; 4426 }, 4427 floor: function floor() { 4428 return this.clone()._floor(); 4429 }, 4430 _floor: function _floor() { 4431 return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this; 4432 }, 4433 ceil: function ceil() { 4434 return this.clone()._ceil(); 4435 }, 4436 _ceil: function _ceil() { 4437 return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this; 4438 }, 4439 trunc: function trunc() { 4440 return this.clone()._trunc(); 4441 }, 4442 _trunc: function _trunc() { 4443 return this.x = B(this.x), this.y = B(this.y), this; 4444 }, 4445 distanceTo: function distanceTo(t) { 4446 var i = (t = A(t)).x - this.x, 4447 e = t.y - this.y; 4448 return Math.sqrt(i * i + e * e); 4449 }, 4450 equals: function equals(t) { 4451 return (t = A(t)).x === this.x && t.y === this.y; 4452 }, 4453 contains: function contains(t) { 4454 return t = A(t), Math.abs(t.x) <= Math.abs(this.x) && Math.abs(t.y) <= Math.abs(this.y); 4455 }, 4456 toString: function toString() { 4457 return "Point(" + r(this.x) + ", " + r(this.y) + ")"; 4458 } 4459 }, I.prototype = { 4460 extend: function extend(t) { 4461 return t = A(t), this.min || this.max ? (this.min.x = Math.min(t.x, this.min.x), this.max.x = Math.max(t.x, this.max.x), this.min.y = Math.min(t.y, this.min.y), this.max.y = Math.max(t.y, this.max.y)) : (this.min = t.clone(), this.max = t.clone()), this; 4462 }, 4463 getCenter: function getCenter(t) { 4464 return new k((this.min.x + this.max.x) / 2, (this.min.y + this.max.y) / 2, t); 4465 }, 4466 getBottomLeft: function getBottomLeft() { 4467 return new k(this.min.x, this.max.y); 4468 }, 4469 getTopRight: function getTopRight() { 4470 return new k(this.max.x, this.min.y); 4471 }, 4472 getTopLeft: function getTopLeft() { 4473 return this.min; 4474 }, 4475 getBottomRight: function getBottomRight() { 4476 return this.max; 4477 }, 4478 getSize: function getSize() { 4479 return this.max.subtract(this.min); 4480 }, 4481 contains: function contains(t) { 4482 var i, e; 4483 return (t = ("number" == typeof t[0] || t instanceof k ? A : O)(t)) instanceof I ? (i = t.min, e = t.max) : i = e = t, i.x >= this.min.x && e.x <= this.max.x && i.y >= this.min.y && e.y <= this.max.y; 4484 }, 4485 intersects: function intersects(t) { 4486 t = O(t); 4487 var i = this.min, 4488 e = this.max, 4489 n = t.min, 4490 o = t.max, 4491 s = o.x >= i.x && n.x <= e.x, 4492 r = o.y >= i.y && n.y <= e.y; 4493 return s && r; 4494 }, 4495 overlaps: function overlaps(t) { 4496 t = O(t); 4497 var i = this.min, 4498 e = this.max, 4499 n = t.min, 4500 o = t.max, 4501 s = o.x > i.x && n.x < e.x, 4502 r = o.y > i.y && n.y < e.y; 4503 return s && r; 4504 }, 4505 isValid: function isValid() { 4506 return !(!this.min || !this.max); 4507 } 4508 }, R.prototype = { 4509 extend: function extend(t) { 4510 var i, 4511 e, 4512 n = this._southWest, 4513 o = this._northEast; 4514 if (t instanceof D) e = i = t;else { 4515 if (!(t instanceof R)) return t ? this.extend(j(t) || N(t)) : this; 4516 if (i = t._southWest, e = t._northEast, !i || !e) return this; 4517 } 4518 return n || o ? (n.lat = Math.min(i.lat, n.lat), n.lng = Math.min(i.lng, n.lng), o.lat = Math.max(e.lat, o.lat), o.lng = Math.max(e.lng, o.lng)) : (this._southWest = new D(i.lat, i.lng), this._northEast = new D(e.lat, e.lng)), this; 4519 }, 4520 pad: function pad(t) { 4521 var i = this._southWest, 4522 e = this._northEast, 4523 n = Math.abs(i.lat - e.lat) * t, 4524 o = Math.abs(i.lng - e.lng) * t; 4525 return new R(new D(i.lat - n, i.lng - o), new D(e.lat + n, e.lng + o)); 4526 }, 4527 getCenter: function getCenter() { 4528 return new D((this._southWest.lat + this._northEast.lat) / 2, (this._southWest.lng + this._northEast.lng) / 2); 4529 },
4530 getSouthWest: function getSouthWest() { 4531 return this._southWest; 4532 }, 4533 getNorthEast: function getNorthEast() { 4534 return this._northEast; 4535 }, 4536 getNorthWest: function getNorthWest() { 4537 return new D(this.getNorth(), this.getWest()); 4538 }, 4539 getSouthEast: function getSouthEast() { 4540 return new D(this.getSouth(), this.getEast()); 4541 }, 4542 getWest: function getWest() { 4543 return this._southWest.lng; 4544 }, 4545 getSouth: function getSouth() { 4546 return this._southWest.lat; 4547 }, 4548 getEast: function getEast() { 4549 return this._northEast.lng; 4550 }, 4551 getNorth: function getNorth() { 4552 return this._northEast.lat; 4553 }, 4554 contains: function contains(t) { 4555 t = ("number" == typeof t[0] || t instanceof D || "lat" in t ? j : N)(t); 4556 var i, 4557 e, 4558 n = this._southWest, 4559 o = this._northEast; 4560 return t instanceof R ? (i = t.getSouthWest(), e = t.getNorthEast()) : i = e = t, i.lat >= n.lat && e.lat <= o.lat && i.lng >= n.lng && e.lng <= o.lng; 4561 }, 4562 intersects: function intersects(t) { 4563 t = N(t); 4564 var i = this._southWest, 4565 e = this._northEast,
4566 n = t.getSouthWest(), 4567 o = t.getNorthEast(), 4568 s = o.lat >= i.lat && n.lat <= e.lat, 4569 r = o.lng >= i.lng && n.lng <= e.lng; 4570 return s && r; 4571 }, 4572 overlaps: function overlaps(t) { 4573 t = N(t); 4574 var i = this._southWest, 4575 e = this._northEast, 4576 n = t.getSouthWest(), 4577 o = t.getNorthEast(), 4578 s = o.lat > i.lat && n.lat < e.lat, 4579 r = o.lng > i.lng && n.lng < e.lng; 4580 return s && r; 4581 }, 4582 toBBoxString: function toBBoxString() { 4583 return [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(","); 4584 }, 4585 equals: function equals(t, i) { 4586 return !!t && (t = N(t), this._southWest.equals(t.getSouthWest(), i) && this._northEast.equals(t.getNorthEast(), i)); 4587 }, 4588 isValid: function isValid() { 4589 return !(!this._southWest || !this._northEast); 4590 } 4591 }; 4592 var W, 4593 H = { 4594 latLngToPoint: function latLngToPoint(t, i) { 4595 var e = this.projection.project(t), 4596 n = this.scale(i); 4597 return this.transformation._transform(e, n); 4598 }, 4599 pointToLatLng: function pointToLatLng(t, i) { 4600 var e = this.scale(i), 4601 n = this.transformation.untransform(t, e); 4602 return this.projection.unproject(n); 4603 }, 4604 project: function project(t) { 4605 return this.projection.project(t); 4606 }, 4607 unproject: function unproject(t) { 4608 return this.projection.unproject(t); 4609 }, 4610 scale: function scale(t) { 4611 return 256 * Math.pow(2, t); 4612 }, 4613 zoom: function zoom(t) { 4614 return Math.log(t / 256) / Math.LN2; 4615 }, 4616 getProjectedBounds: function getProjectedBounds(t) { 4617 if (this.infinite) return null; 4618 var i = this.projection.bounds, 4619 e = this.scale(t); 4620 return new I(this.transformation.transform(i.min, e), this.transformation.transform(i.max, e)); 4621 }, 4622 infinite: !(D.prototype = { 4623 equals: function equals(t, i) { 4624 return !!t && (t = j(t), Math.max(Math.abs(this.lat - t.lat), Math.abs(this.lng - t.lng)) <= (void 0 === i ? 1e-9 : i)); 4625 }, 4626 toString: function toString(t) { 4627 return "LatLng(" + r(this.lat, t) + ", " + r(this.lng, t) + ")"; 4628 }, 4629 distanceTo: function distanceTo(t) { 4630 return F.distance(this, j(t)); 4631 }, 4632 wrap: function wrap() { 4633 return F.wrapLatLng(this); 4634 }, 4635 toBounds: function toBounds(t) { 4636 var i = 180 * t / 40075017, 4637 e = i / Math.cos(Math.PI / 180 * this.lat); 4638 return N([this.lat - i, this.lng - e], [this.lat + i, this.lng + e]); 4639 }, 4640 clone: function clone() { 4641 return new D(this.lat, this.lng, this.alt); 4642 } 4643 }), 4644 wrapLatLng: function wrapLatLng(t) { 4645 var i = this.wrapLng ? o(t.lng, this.wrapLng, !0) : t.lng; 4646 return new D(this.wrapLat ? o(t.lat, this.wrapLat, !0) : t.lat, i, t.alt); 4647 }, 4648 wrapLatLngBounds: function wrapLatLngBounds(t) { 4649 var i = t.getCenter(), 4650 e = this.wrapLatLng(i), 4651 n = i.lat - e.lat, 4652 o = i.lng - e.lng; 4653 if (0 == n && 0 == o) return t;
4654 var s = t.getSouthWest(), 4655 r = t.getNorthEast(); 4656 return new R(new D(s.lat - n, s.lng - o), new D(r.lat - n, r.lng - o)); 4657 } 4658 }, 4659 F = h({}, H, { 4660 wrapLng: [-180, 180], 4661 R: 6371e3, 4662 distance: function distance(t, i) { 4663 var e = Math.PI / 180, 4664 n = t.lat * e, 4665 o = i.lat * e, 4666 s = Math.sin((i.lat - t.lat) * e / 2), 4667 r = Math.sin((i.lng - t.lng) * e / 2), 4668 a = s * s + Math.cos(n) * Math.cos(o) * r * r, 4669 h = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 4670 return this.R * h; 4671 } 4672 }), 4673 U = 6378137, 4674 V = { 4675 R: U, 4676 MAX_LATITUDE: 85.0511287798, 4677 project: function project(t) { 4678 var i = Math.PI / 180, 4679 e = this.MAX_LATITUDE, 4680 n = Math.max(Math.min(e, t.lat), -e), 4681 o = Math.sin(n * i); 4682 return new k(this.R * t.lng * i, this.R * Math.log((1 + o) / (1 - o)) / 2); 4683 }, 4684 unproject: function unproject(t) { 4685 var i = 180 / Math.PI; 4686 return new D((2 * Math.atan(Math.exp(t.y / this.R)) - Math.PI / 2) * i, t.x * i / this.R); 4687 }, 4688 bounds: new I([-(W = U * Math.PI), -W], [W, W]) 4689 }; 4690 4691 function q(t, i, e, n) { 4692 if (g(t)) return this._a = t[0], this._b = t[1], this._c = t[2], void (this._d = t[3]); 4693 this._a = t, this._b = i, this._c = e, this._d = n; 4694 } 4695 4696 function G(t, i, e, n) { 4697 return new q(t, i, e, n); 4698 } 4699 4700 q.prototype = { 4701 transform: function transform(t, i) { 4702 return this._transform(t.clone(), i); 4703 }, 4704 _transform: function _transform(t, i) { 4705 return i = i || 1, t.x = i * (this._a * t.x + this._b), t.y = i * (this._c * t.y + this._d), t; 4706 }, 4707 untransform: function untransform(t, i) { 4708 return i = i || 1, new k((t.x / i - this._b) / this._a, (t.y / i - this._d) / this._c); 4709 } 4710 }; 4711 var K, 4712 Y = h({}, F, { 4713 code: "EPSG:3857", 4714 projection: V, 4715 transformation: G(K = .5 / (Math.PI * V.R), .5, -K, .5) 4716 }), 4717 X = h({}, Y, { 4718 code: "EPSG:900913" 4719 }); 4720 4721 function J(t) { 4722 return document.createElementNS("http://www.w3.org/2000/svg", t); 4723 } 4724 4725 function $(t, i) { 4726 for (var e, n, o, s, r = "", a = 0, h = t.length; a < h; a++) { 4727 for (e = 0, n = (o = t[a]).length; e < n; e++) { 4728 r += (e ? "L" : "M") + (s = o[e]).x + " " + s.y; 4729 } 4730 4731 r += i ? Zt ? "z" : "x" : ""; 4732 } 4733 4734 return r || "M0 0"; 4735 } 4736 4737 var Q = document.documentElement.style, 4738 tt = ("ActiveXObject" in window), 4739 it = tt && !document.addEventListener, 4740 et = "msLaunchUri" in navigator && !("documentMode" in document), 4741 nt = kt("webkit"), 4742 ot = kt("android"), 4743 st = kt("android 2") || kt("android 3"), 4744 rt = parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10), 4745 at = ot && kt("Google") && rt < 537 && !("AudioNode" in window), 4746 ht = !!window.opera, 4747 ut = !et && kt("chrome"), 4748 lt = kt("gecko") && !nt && !ht && !tt, 4749 ct = !ut && kt("safari"), 4750 _t = kt("phantom"), 4751 dt = ("OTransition" in Q), 4752 pt = 0 === navigator.platform.indexOf("Win"), 4753 mt = tt && "transition" in Q, 4754 ft = "WebKitCSSMatrix" in window && "m11" in new window.WebKitCSSMatrix() && !st, 4755 gt = ("MozPerspective" in Q), 4756 vt = !window.L_DISABLE_3D && (mt || ft || gt) && !dt && !_t, 4757 yt = "undefined" != typeof orientation || kt("mobile"), 4758 xt = yt && nt, 4759 wt = yt && ft, 4760 Pt = !window.PointerEvent && window.MSPointerEvent, 4761 Lt = !(!window.PointerEvent && !Pt), 4762 bt = !window.L_NO_TOUCH && (Lt || "ontouchstart" in window || window.DocumentTouch && document instanceof window.DocumentTouch), 4763 Tt = yt && ht, 4764 Mt = yt && lt, 4765 zt = 1 < (window.devicePixelRatio || window.screen.deviceXDPI / window.screen.logicalXDPI), 4766 Ct = function () { 4767 var t = !1; 4768 4769 try { 4770 var i = Object.defineProperty({}, "passive", { 4771 get: function get() { 4772 t = !0; 4773 } 4774 }); 4775 window.addEventListener("testPassiveEventSupport", a, i), window.removeEventListener("testPassiveEventSupport", a, i); 4776 } catch (t) {} 4777 4778 return t; 4779 }(), 4780 St = !!document.createElement("canvas").getContext, 4781 Zt = !(!document.createElementNS || !J("svg").createSVGRect), 4782 Et = !Zt && function () { 4783 try { 4784 var t = document.createElement("div");
4785 t.innerHTML = '<v:shape adj="1"/>'; 4786 var i = t.firstChild; 4787 return i.style.behavior = "url(#default#VML)", i && "object" == _typeof(i.adj); 4788 } catch (t) { 4789 return !1; 4790 } 4791 }(); 4792 4793 function kt(t) { 4794 return 0 <= navigator.userAgent.toLowerCase().indexOf(t); 4795 } 4796 4797 var Bt = { 4798 ie: tt, 4799 ielt9: it, 4800 edge: et, 4801 webkit: nt, 4802 android: ot, 4803 android23: st, 4804 androidStock: at, 4805 opera: ht, 4806 chrome: ut, 4807 gecko: lt, 4808 safari: ct, 4809 phantom: _t, 4810 opera12: dt, 4811 win: pt, 4812 ie3d: mt, 4813 webkit3d: ft, 4814 gecko3d: gt, 4815 any3d: vt, 4816 mobile: yt, 4817 mobileWebkit: xt, 4818 mobileWebkit3d: wt, 4819 msPointer: Pt, 4820 pointer: Lt, 4821 touch: bt, 4822 mobileOpera: Tt, 4823 mobileGecko: Mt, 4824 retina: zt, 4825 passiveEvents: Ct, 4826 canvas: St, 4827 svg: Zt, 4828 vml: Et 4829 }, 4830 At = Pt ? "MSPointerDown" : "pointerdown", 4831 It = Pt ? "MSPointerMove" : "pointermove", 4832 Ot = Pt ? "MSPointerUp" : "pointerup", 4833 Rt = Pt ? "MSPointerCancel" : "pointercancel", 4834 Nt = {}, 4835 Dt = !1; 4836 4837 function jt(t, i, e, n) { 4838 function o(t) { 4839 Ut(t, r); 4840 } 4841 4842 var s, r, a, h, u, l, c, _; 4843 4844 function d(t) { 4845 t.pointerType === (t.MSPOINTER_TYPE_MOUSE || "mouse") && 0 === t.buttons || Ut(t, h); 4846 } 4847 4848 return "touchstart" === i ? (u = t, l = e, c = n, _ = p(function (t) { 4849 t.MSPOINTER_TYPE_TOUCH && t.pointerType === t.MSPOINTER_TYPE_TOUCH && Ri(t), Ut(t, l); 4850 }), u["_leaflet_touchstart" + c] = _, u.addEventListener(At, _, !1), Dt || (document.addEventListener(At, Wt, !0), document.addEventListener(It, Ht, !0), document.addEventListener(Ot, Ft, !0), document.addEventListener(Rt, Ft, !0), Dt = !0)) : "touchmove" === i ? (h = e, (a = t)["_leaflet_touchmove" + n] = d, a.addEventListener(It, d, !1)) : "touchend" === i && (r = e, (s = t)["_leaflet_touchend" + n] = o, s.addEventListener(Ot, o, !1), s.addEventListener(Rt, o, !1)), this; 4851 } 4852 4853 function Wt(t) { 4854 Nt[t.pointerId] = t; 4855 } 4856 4857 function Ht(t) { 4858 Nt[t.pointerId] && (Nt[t.pointerId] = t); 4859 } 4860 4861 function Ft(t) { 4862 delete Nt[t.pointerId]; 4863 } 4864 4865 function Ut(t, i) { 4866 for (var e in t.touches = [], Nt) { 4867 t.touches.push(Nt[e]); 4868 } 4869 4870 t.changedTouches = [t], i(t); 4871 } 4872 4873 var Vt = Pt ? "MSPointerDown" : Lt ? "pointerdown" : "touchstart", 4874 qt = Pt ? "MSPointerUp" : Lt ? "pointerup" : "touchend", 4875 Gt = "_leaflet_"; 4876 var Kt, 4877 Yt, 4878 Xt, 4879 Jt, 4880 $t, 4881 Qt, 4882 ti = fi(["transform", "webkitTransform", "OTransform", "MozTransform", "msTransform"]), 4883 ii = fi(["webkitTransition", "transition", "OTransition", "MozTransition", "msTransition"]), 4884 ei = "webkitTransition" === ii || "OTransition" === ii ? ii + "End" : "transitionend"; 4885 4886 function ni(t) { 4887 return "string" == typeof t ? document.getElementById(t) : t; 4888 } 4889 4890 function oi(t, i) { 4891 var e, 4892 n = t.style[i] || t.currentStyle && t.currentStyle[i]; 4893 return n && "auto" !== n || !document.defaultView || (n = (e = document.defaultView.getComputedStyle(t, null)) ? e[i] : null), "auto" === n ? null : n; 4894 } 4895 4896 function si(t, i, e) { 4897 var n = document.createElement(t); 4898 return n.className = i || "", e && e.appendChild(n), n; 4899 } 4900 4901 function ri(t) { 4902 var i = t.parentNode; 4903 i && i.removeChild(t); 4904 } 4905 4906 function ai(t) { 4907 for (; t.firstChild;) { 4908 t.removeChild(t.firstChild); 4909 } 4910 } 4911 4912 function hi(t) { 4913 var i = t.parentNode; 4914 i && i.lastChild !== t && i.appendChild(t); 4915 } 4916 4917 function ui(t) { 4918 var i = t.parentNode; 4919 i && i.firstChild !== t && i.insertBefore(t, i.firstChild); 4920 } 4921 4922 function li(t, i) { 4923 if (void 0 !== t.classList) return t.classList.contains(i); 4924 var e = pi(t); 4925 return 0 < e.length && new RegExp("(^|\\s)" + i + "(\\s|$)").test(e); 4926 } 4927 4928 function ci(t, i) { 4929 var e; 4930 if (void 0 !== t.classList) for (var n = l(i), o = 0, s = n.length; o < s; o++) { 4931 t.classList.add(n[o]); 4932 } else li(t, i) || di(t, ((e = pi(t)) ? e + " " : "") + i); 4933 } 4934 4935 function _i(t, i) { 4936 void 0 !== t.classList ? t.classList.remove(i) : di(t, u((" " + pi(t) + " ").replace(" " + i + " ", " "))); 4937 } 4938 4939 function di(t, i) { 4940 void 0 === t.className.baseVal ? t.className = i : t.className.baseVal = i; 4941 } 4942 4943 function pi(t) { 4944 return t.correspondingElement && (t = t.correspondingElement), void 0 === t.className.baseVal ? t.className : t.className.baseVal; 4945 } 4946 4947 function mi(t, i) { 4948 "opacity" in t.style ? t.style.opacity = i : "filter" in t.style && function (t, i) { 4949 var e = !1, 4950 n = "DXImageTransform.Microsoft.Alpha"; 4951
4952 try { 4953 e = t.filters.item(n); 4954 } catch (t) { 4955 if (1 === i) return; 4956 } 4957 4958 i = Math.round(100 * i), e ? (e.Enabled = 100 !== i, e.Opacity = i) : t.style.filter += " progid:" + n + "(opacity=" + i + ")"; 4959 }(t, i); 4960 } 4961 4962 function fi(t) { 4963 for (var i = document.documentElement.style, e = 0; e < t.length; e++) { 4964 if (t[e] in i) return t[e]; 4965 } 4966 4967 return !1; 4968 } 4969 4970 function gi(t, i, e) { 4971 var n = i || new k(0, 0); 4972 t.style[ti] = (mt ? "translate(" + n.x + "px," + n.y + "px)" : "translate3d(" + n.x + "px," + n.y + "px,0)") + (e ? " scale(" + e + ")" : ""); 4973 } 4974 4975 function vi(t, i) { 4976 t._leaflet_pos = i, vt ? gi(t, i) : (t.style.left = i.x + "px", t.style.top = i.y + "px"); 4977 } 4978 4979 function yi(t) { 4980 return t._leaflet_pos || new k(0, 0); 4981 } 4982 4983 function xi() { 4984 zi(window, "dragstart", Ri); 4985 } 4986 4987 function wi() { 4988 Si(window, "dragstart", Ri); 4989 } 4990 4991 function Pi(t) { 4992 for (; -1 === t.tabIndex;) { 4993 t = t.parentNode; 4994 } 4995 4996 t.style && (Li(), Qt = ($t = t).style.outline, t.style.outline = "none", zi(window, "keydown", Li)); 4997 } 4998 4999 function Li() { 5000 $t && ($t.style.outline = Qt, Qt = $t = void 0, Si(window, "keydown", Li)); 5001 } 5002 5003 function bi(t) { 5004 for (; !((t = t.parentNode).offsetWidth && t.offsetHeight || t === document.body);) { 5005 ; 5006 } 5007 5008 return t; 5009 } 5010 5011 function Ti(t) { 5012 var i = t.getBoundingClientRect(); 5013 return { 5014 x: i.width / t.offsetWidth || 1, 5015 y: i.height / t.offsetHeight || 1, 5016 boundingClientRect: i 5017 }; 5018 } 5019 5020 Jt = "onselectstart" in document ? (Xt = function Xt() { 5021 zi(window, "selectstart", Ri); 5022 }, function () { 5023 Si(window, "selectstart", Ri); 5024 }) : (Yt = fi(["userSelect", "WebkitUserSelect", "OUserSelect", "MozUserSelect", "msUserSelect"]), Xt = function Xt() { 5025 var t; 5026 Yt && (t = document.documentElement.style, Kt = t[Yt], t[Yt] = "none"); 5027 }, function () { 5028 Yt && (document.documentElement.style[Yt] = Kt, Kt = void 0); 5029 }); 5030 var Mi = { 5031 TRANSFORM: ti, 5032 TRANSITION: ii, 5033 TRANSITION_END: ei, 5034 get: ni, 5035 getStyle: oi, 5036 create: si, 5037 remove: ri, 5038 empty: ai, 5039 toFront: hi, 5040 toBack: ui, 5041 hasClass: li, 5042 addClass: ci, 5043 removeClass: _i, 5044 setClass: di, 5045 getClass: pi, 5046 setOpacity: mi, 5047 testProp: fi, 5048 setTransform: gi, 5049 setPosition: vi, 5050 getPosition: yi, 5051 disableTextSelection: Xt, 5052 enableTextSelection: Jt, 5053 disableImageDrag: xi, 5054 enableImageDrag: wi, 5055 preventOutline: Pi, 5056 restoreOutline: Li, 5057 getSizedParentNode: bi, 5058 getScale: Ti 5059 }; 5060 5061 function zi(t, i, e, n) { 5062 if ("object" == _typeof(i)) for (var o in i) { 5063 ki(t, o, i[o], e); 5064 } else for (var s = 0, r = (i = l(i)).length; s < r; s++) { 5065 ki(t, i[s], e, n); 5066 } 5067 return this; 5068 } 5069 5070 var Ci = "_leaflet_events"; 5071 5072 function Si(t, i, e, n) { 5073 if ("object" == _typeof(i)) for (var o in i) { 5074 Bi(t, o, i[o], e); 5075 } else if (i) for (var s = 0, r = (i = l(i)).length; s < r; s++) { 5076 Bi(t, i[s], e, n); 5077 } else { 5078 for (var a in t[Ci]) { 5079 Bi(t, a, t[Ci][a]); 5080 } 5081 5082 delete t[Ci]; 5083 } 5084 return this; 5085 } 5086 5087 function Zi() { 5088 return Lt && !et && !ct; 5089 } 5090 5091 var Ei = { 5092 mouseenter: "mouseover", 5093 mouseleave: "mouseout", 5094 wheel: !("onwheel" in window) && "mousewheel" 5095 }; 5096 5097 function ki(i, t, e, n) { 5098 var o = t + m(e) + (n ? "_" + m(n) : ""); 5099 if (i[Ci] && i[Ci][o]) return this; 5100 5101 var s, 5102 r, 5103 a, 5104 h, 5105 u, 5106 l, 5107 c = function c(t) { 5108 return e.call(n || i, t || window.event); 5109 }, 5110 _ = c; 5111 5112 function d(t) { 5113 if (Lt) { 5114 if (!t.isPrimary) return; 5115 if ("mouse" === t.pointerType) return; 5116 } else if (1 < t.touches.length) return; 5117 5118 var i = Date.now(), 5119 e = i - (h || i); 5120 u = t.touches ? t.touches[0] : t, l = 0 < e && e <= 250, h = i; 5121 } 5122 5123 function p(t) { 5124 if (l && !u.cancelBubble) { 5125 if (Lt) { 5126 if ("mouse" === t.pointerType) return; 5127 var i, 5128 e, 5129 n = {}; 5130 5131 for (e in u) { 5132 i = u[e], n[e] = i && i.bind ? i.bind(u) : i; 5133 } 5134 5135 u = n; 5136 } 5137 5138 u.type = "dblclick", u.button = 0, r(u), h = null; 5139 } 5140 } 5141 5142 Lt && 0 === t.indexOf("touch") ? jt(i, t, c, o) : bt && "dblclick" === t && !Zi() ? (r = c, l = !1, (s = i)[Gt + Vt + (a = o)] = d, s[Gt + qt + a] = p, s[Gt + "dblclick" + a] = r, s.addEventListener(Vt, d, !!Ct && { 5143 passive: !1 5144 }), s.addEventListener(qt, p, !!Ct && { 5145 passive: !1 5146 }), s.addEventListener("dblclick", r, !1)) : "addEventListener" in i ? "touchstart" === t || "touchmove" === t || "wheel" === t || "mousewheel" === t ? i.addEventListener(Ei[t] || t, c, !!Ct && { 5147 passive: !1 5148 }) : "mouseenter" === t || "mouseleave" === t ? (c = function c(t) { 5149 t = t || window.event, Vi(i, t) && _(t); 5150 }, i.addEventListener(Ei[t], c, !1)) : i.addEventListener(t, _, !1) : "attachEvent" in i && i.attachEvent("on" + t, c), i[Ci] = i[Ci] || {}, i[Ci][o] = c; 5151 } 5152 5153 function Bi(t, i, e, n) { 5154 var o, 5155 s, 5156 r, 5157 a, 5158 h, 5159 u, 5160 l, 5161 c,
5162 _ = i + m(e) + (n ? "_" + m(n) : ""), 5163 d = t[Ci] && t[Ci][_]; 5164 5165 if (!d) return this; 5166 Lt && 0 === i.indexOf("touch") ? (c = (u = t)["_leaflet_" + (l = i) + _], "touchstart" === l ? u.removeEventListener(At, c, !1) : "touchmove" === l ? u.removeEventListener(It, c, !1) : "touchend" === l && (u.removeEventListener(Ot, c, !1), u.removeEventListener(Rt, c, !1))) : bt && "dblclick" === i && !Zi() ? (r = (o = t)[Gt + Vt + (s = _)], a = o[Gt + qt + s], h = o[Gt + "dblclick" + s], o.removeEventListener(Vt, r, !!Ct && { 5167 passive: !1 5168 }), o.removeEventListener(qt, a, !!Ct && { 5169 passive: !1 5170 }), o.removeEventListener("dblclick", h, !1)) : "removeEventListener" in t ? t.removeEventListener(Ei[i] || i, d, !1) : "detachEvent" in t && t.detachEvent("on" + i, d), t[Ci][_] = null; 5171 } 5172 5173 function Ai(t) { 5174 return t.stopPropagation ? t.stopPropagation() : t.originalEvent ? t.originalEvent._stopped = !0 : t.cancelBubble = !0, Ui(t), this; 5175 } 5176 5177 function Ii(t) { 5178 return ki(t, "wheel", Ai), this; 5179 } 5180 5181 function Oi(t) { 5182 return zi(t, "mousedown touchstart dblclick", Ai), ki(t, "click", Fi), this; 5183 } 5184 5185 function Ri(t) { 5186 return t.preventDefault ? t.preventDefault() : t.returnValue = !1, this; 5187 } 5188 5189 function Ni(t) { 5190 return Ri(t), Ai(t), this; 5191 } 5192 5193 function Di(t, i) { 5194 if (!i) return new k(t.clientX, t.clientY); 5195 var e = Ti(i), 5196 n = e.boundingClientRect; 5197 return new k((t.clientX - n.left) / e.x - i.clientLeft, (t.clientY - n.top) / e.y - i.clientTop); 5198 } 5199 5200 var ji = pt && ut ? 2 * window.devicePixelRatio : lt ? window.devicePixelRatio : 1; 5201 5202 function Wi(t) { 5203 return et ? t.wheelDeltaY / 2 : t.deltaY && 0 === t.deltaMode ? -t.deltaY / ji : t.deltaY && 1 === t.deltaMode ? 20 * -t.deltaY : t.deltaY && 2 === t.deltaMode ? 60 * -t.deltaY : t.deltaX || t.deltaZ ? 0 : t.wheelDelta ? (t.wheelDeltaY || t.wheelDelta) / 2 : t.detail && Math.abs(t.detail) < 32765 ? 20 * -t.detail : t.detail ? t.detail / -32765 * 60 : 0; 5204 } 5205 5206 var Hi = {}; 5207 5208 function Fi(t) { 5209 Hi[t.type] = !0; 5210 } 5211 5212 function Ui(t) { 5213 var i = Hi[t.type]; 5214 return Hi[t.type] = !1, i; 5215 } 5216 5217 function Vi(t, i) { 5218 var e = i.relatedTarget; 5219 if (!e) return !0; 5220 5221 try { 5222 for (; e && e !== t;) { 5223 e = e.parentNode; 5224 } 5225 } catch (t) { 5226 return !1; 5227 } 5228 5229 return e !== t; 5230 } 5231 5232 var qi = { 5233 on: zi, 5234 off: Si, 5235 stopPropagation: Ai, 5236 disableScrollPropagation: Ii, 5237 disableClickPropagation: Oi, 5238 preventDefault: Ri, 5239 stop: Ni, 5240 getMousePosition: Di, 5241 getWheelDelta: Wi, 5242 fakeStop: Fi, 5243 skipped: Ui, 5244 isExternalTarget: Vi, 5245 addListener: zi, 5246 removeListener: Si 5247 }, 5248 Gi = E.extend({ 5249 run: function run(t, i, e, n) { 5250 this.stop(), this._el = t, this._inProgress = !0, this._duration = e || .25, this._easeOutPower = 1 / Math.max(n || .5, .2), this._startPos = yi(t), this._offset = i.subtract(this._startPos), this._startTime = +new Date(), this.fire("start"), this._animate(); 5251 }, 5252 stop: function stop() { 5253 this._inProgress && (this._step(!0), this._complete()); 5254 }, 5255 _animate: function _animate() { 5256 this._animId = M(this._animate, this), this._step(); 5257 }, 5258 _step: function _step(t) { 5259 var i = new Date() - this._startTime, 5260 e = 1e3 * this._duration; 5261 i < e ? this._runFrame(this._easeOut(i / e), t) : (this._runFrame(1), this._complete()); 5262 }, 5263 _runFrame: function _runFrame(t, i) { 5264 var e = this._startPos.add(this._offset.multiplyBy(t)); 5265 5266 i && e._round(), vi(this._el, e), this.fire("step"); 5267 }, 5268 _complete: function _complete() { 5269 z(this._animId), this._inProgress = !1, this.fire("end"); 5270 }, 5271 _easeOut: function _easeOut(t) { 5272 return 1 - Math.pow(1 - t, this._easeOutPower); 5273 } 5274 }), 5275 Ki = E.extend({ 5276 options: { 5277 crs: Y, 5278 center: void 0, 5279 zoom: void 0, 5280 minZoom: void 0, 5281 maxZoom: void 0, 5282 layers: [], 5283 maxBounds: void 0, 5284 renderer: void 0, 5285 zoomAnimation: !0, 5286 zoomAnimationThreshold: 4, 5287 fadeAnimation: !0, 5288 markerZoomAnimation: !0, 5289 transform3DLimit: 8388608, 5290 zoomSnap: 1, 5291 zoomDelta: 1, 5292 trackResize: !0 5293 }, 5294 initialize: function initialize(t, i) { 5295 i = c(this, i), this._handlers = [], this._layers = {}, this._zoomBoundLayers = {}, this._sizeChanged = !0, this._initContainer(t), this._initLayout(), this._onResize = p(this._onResize, this), this._initEvents(), i.maxBounds && this.setMaxBounds(i.maxBounds), void 0 !== i.zoom && (this._zoom = this._limitZoom(i.zoom)), i.center && void 0 !== i.zoom && this.setView(j(i.center), i.zoom, { 5296 reset: !0 5297 }), this.callInitHooks(), this._zoomAnimated = ii && vt && !Tt && this.options.zoomAnimation, this._zoomAnimated && (this._createAnimProxy(), zi(this._proxy, ei, this._catchTransitionEnd, this)), this._addLayers(this.options.layers); 5298 },
5299 setView: function setView(t, i, e) { 5300 if ((i = void 0 === i ? this._zoom : this._limitZoom(i), t = this._limitCenter(j(t), i, this.options.maxBounds), e = e || {}, this._stop(), this._loaded && !e.reset && !0 !== e) && (void 0 !== e.animate && (e.zoom = h({ 5301 animate: e.animate 5302 }, e.zoom), e.pan = h({ 5303 animate: e.animate, 5304 duration: e.duration 5305 }, e.pan)), this._zoom !== i ? this._tryAnimatedZoom && this._tryAnimatedZoom(t, i, e.zoom) : this._tryAnimatedPan(t, e.pan))) return clearTimeout(this._sizeTimer), this; 5306 return this._resetView(t, i), this; 5307 }, 5308 setZoom: function setZoom(t, i) { 5309 return this._loaded ? this.setView(this.getCenter(), t, { 5310 zoom: i 5311 }) : (this._zoom = t, this); 5312 }, 5313 zoomIn: function zoomIn(t, i) { 5314 return t = t || (vt ? this.options.zoomDelta : 1), this.setZoom(this._zoom + t, i); 5315 }, 5316 zoomOut: function zoomOut(t, i) { 5317 return t = t || (vt ? this.options.zoomDelta : 1), this.setZoom(this._zoom - t, i); 5318 }, 5319 setZoomAround: function setZoomAround(t, i, e) { 5320 var n = this.getZoomScale(i), 5321 o = this.getSize().divideBy(2), 5322 s = (t instanceof k ? t : this.latLngToContainerPoint(t)).subtract(o).multiplyBy(1 - 1 / n), 5323 r = this.containerPointToLatLng(o.add(s)); 5324 return this.setView(r, i, { 5325 zoom: e 5326 }); 5327 }, 5328 _getBoundsCenterZoom: function _getBoundsCenterZoom(t, i) { 5329 i = i || {}, t = t.getBounds ? t.getBounds() : N(t); 5330 var e = A(i.paddingTopLeft || i.padding || [0, 0]), 5331 n = A(i.paddingBottomRight || i.padding || [0, 0]), 5332 o = this.getBoundsZoom(t, !1, e.add(n)); 5333 if ((o = "number" == typeof i.maxZoom ? Math.min(i.maxZoom, o) : o) === 1 / 0) return { 5334 center: t.getCenter(), 5335 zoom: o 5336 }; 5337 var s = n.subtract(e).divideBy(2),
5338 r = this.project(t.getSouthWest(), o), 5339 a = this.project(t.getNorthEast(), o); 5340 return { 5341 center: this.unproject(r.add(a).divideBy(2).add(s), o), 5342 zoom: o 5343 }; 5344 }, 5345 fitBounds: function fitBounds(t, i) { 5346 if (!(t = N(t)).isValid()) throw new Error("Bounds are not valid."); 5347 5348 var e = this._getBoundsCenterZoom(t, i); 5349 5350 return this.setView(e.center, e.zoom, i); 5351 }, 5352 fitWorld: function fitWorld(t) { 5353 return this.fitBounds([[-90, -180], [90, 180]], t); 5354 }, 5355 panTo: function panTo(t, i) { 5356 return this.setView(t, this._zoom, { 5357 pan: i 5358 }); 5359 }, 5360 panBy: function panBy(t, i) { 5361 return i = i || {}, (t = A(t).round()).x || t.y ? (!0 === i.animate || this.getSize().contains(t) ? (this._panAnim || (this._panAnim = new Gi(), this._panAnim.on({ 5362 step: this._onPanTransitionStep, 5363 end: this._onPanTransitionEnd 5364 }, this)), i.noMoveStart || this.fire("movestart"), !1 !== i.animate ? (ci(this._mapPane, "leaflet-pan-anim"), e = this._getMapPanePos().subtract(t).round(), this._panAnim.run(this._mapPane, e, i.duration || .25, i.easeLinearity)) : (this._rawPanBy(t), this.fire("move").fire("moveend"))) : this._resetView(this.unproject(this.project(this.getCenter()).add(t)), this.getZoom()), this) : this.fire("moveend"); 5365 var e; 5366 }, 5367 flyTo: function flyTo(s, r, t) { 5368 if (!1 === (t = t || {}).animate || !vt) return this.setView(s, r, t); 5369 5370 this._stop(); 5371 5372 var a = this.project(this.getCenter()), 5373 h = this.project(s), 5374 i = this.getSize(), 5375 u = this._zoom; 5376 s = j(s), r = void 0 === r ? u : r; 5377 var l = Math.max(i.x, i.y), 5378 n = l * this.getZoomScale(u, r), 5379 c = h.distanceTo(a) || 1, 5380 _ = 1.42, 5381 o = _ * _; 5382 5383 function e(t) { 5384 var i = (n * n - l * l + (t ? -1 : 1) * o * o * c * c) / (2 * (t ? n : l) * o * c), 5385 e = Math.sqrt(i * i + 1) - i; 5386 return e < 1e-9 ? -18 : Math.log(e); 5387 } 5388 5389 function d(t) { 5390 return (Math.exp(t) - Math.exp(-t)) / 2; 5391 } 5392 5393 function p(t) { 5394 return (Math.exp(t) + Math.exp(-t)) / 2; 5395 } 5396 5397 var m = e(0); 5398 5399 function f(t) { 5400 return l * (p(m) * (d(i = m + _ * t) / p(i)) - d(m)) / o; 5401 var i; 5402 } 5403 5404 var g = Date.now(), 5405 v = (e(1) - m) / _, 5406 y = t.duration ? 1e3 * t.duration : 1e3 * v * .8; 5407 5408 return this._moveStart(!0, t.noMoveStart), function t() { 5409 var i, 5410 e, 5411 n = (Date.now() - g) / y, 5412 o = (i = n, (1 - Math.pow(1 - i, 1.5)) * v); 5413 n <= 1 ? (this._flyToFrame = M(t, this), this._move(this.unproject(a.add(h.subtract(a).multiplyBy(f(o) / c)), u), this.getScaleZoom(l / (e = o, l * (p(m) / p(m + _ * e))), u), { 5414 flyTo: !0 5415 })) : this._move(s, r)._moveEnd(!0); 5416 }.call(this), this; 5417 }, 5418 flyToBounds: function flyToBounds(t, i) { 5419 var e = this._getBoundsCenterZoom(t, i); 5420 5421 return this.flyTo(e.center, e.zoom, i); 5422 }, 5423 setMaxBounds: function setMaxBounds(t) { 5424 return (t = N(t)).isValid() ? (this.options.maxBounds && this.off("moveend", this._panInsideMaxBounds), this.options.maxBounds = t, this._loaded && this._panInsideMaxBounds(), this.on("moveend", this._panInsideMaxBounds)) : (this.options.maxBounds = null, this.off("moveend", this._panInsideMaxBounds)); 5425 }, 5426 setMinZoom: function setMinZoom(t) { 5427 var i = this.options.minZoom; 5428 return this.options.minZoom = t, this._loaded && i !== t && (this.fire("zoomlevelschange"), this.getZoom() < this.options.minZoom) ? this.setZoom(t) : this; 5429 }, 5430 setMaxZoom: function setMaxZoom(t) { 5431 var i = this.options.maxZoom; 5432 return this.options.maxZoom = t, this._loaded && i !== t && (this.fire("zoomlevelschange"), this.getZoom() > this.options.maxZoom) ? this.setZoom(t) : this; 5433 }, 5434 panInsideBounds: function panInsideBounds(t, i) { 5435 this._enforcingBounds = !0; 5436 5437 var e = this.getCenter(), 5438 n = this._limitCenter(e, this._zoom, N(t)); 5439 5440 return e.equals(n) || this.panTo(n, i), this._enforcingBounds = !1, this; 5441 }, 5442 panInside: function panInside(t, i) { 5443 var e, 5444 n, 5445 o = A((i = i || {}).paddingTopLeft || i.padding || [0, 0]), 5446 s = A(i.paddingBottomRight || i.padding || [0, 0]), 5447 r = this.getCenter(), 5448 a = this.project(r), 5449 h = this.project(t), 5450 u = this.getPixelBounds(), 5451 l = u.getSize().divideBy(2), 5452 c = O([u.min.add(o), u.max.subtract(s)]); 5453 return c.contains(h) || (this._enforcingBounds = !0, e = a.subtract(h), n = A(h.x + e.x, h.y + e.y), (h.x < c.min.x || h.x > c.max.x) && (n.x = a.x - e.x, 0 < e.x ? n.x += l.x - o.x : n.x -= l.x - s.x), (h.y < c.min.y || h.y > c.max.y) && (n.y = a.y - e.y, 0 < e.y ? n.y += l.y - o.y : n.y -= l.y - s.y), this.panTo(this.unproject(n), i), this._enforcingBounds = !1), this; 5454 },
5455 invalidateSize: function invalidateSize(t) { 5456 if (!this._loaded) return this; 5457 t = h({ 5458 animate: !1, 5459 pan: !0 5460 }, !0 === t ? { 5461 animate: !0 5462 } : t); 5463 var i = this.getSize(); 5464 this._sizeChanged = !0, this._lastCenter = null; 5465 var e = this.getSize(), 5466 n = i.divideBy(2).round(), 5467 o = e.divideBy(2).round(), 5468 s = n.subtract(o); 5469 return s.x || s.y ? (t.animate && t.pan ? this.panBy(s) : (t.pan && this._rawPanBy(s), this.fire("move"), t.debounceMoveend ? (clearTimeout(this._sizeTimer), this._sizeTimer = setTimeout(p(this.fire, this, "moveend"), 200)) : this.fire("moveend")), this.fire("resize", { 5470 oldSize: i, 5471 newSize: e 5472 })) : this; 5473 }, 5474 stop: function stop() { 5475 return this.setZoom(this._limitZoom(this._zoom)), this.options.zoomSnap || this.fire("viewreset"), this._stop(); 5476 }, 5477 locate: function locate(t) { 5478 if (t = this._locateOptions = h({ 5479 timeout: 1e4, 5480 watch: !1 5481 }, t), !("geolocation" in navigator)) return this._handleGeolocationError({ 5482 code: 0, 5483 message: "Geolocation not supported." 5484 }), this; 5485 var i = p(this._handleGeolocationResponse, this), 5486 e = p(this._handleGeolocationError, this); 5487 return t.watch ? this._locationWatchId = navigator.geolocation.watchPosition(i, e, t) : navigator.geolocation.getCurrentPosition(i, e, t), this; 5488 }, 5489 stopLocate: function stopLocate() { 5490 return navigator.geolocation && navigator.geolocation.clearWatch && navigator.geolocation.clearWatch(this._locationWatchId), this._locateOptions && (this._locateOptions.setView = !1), this; 5491 }, 5492 _handleGeolocationError: function _handleGeolocationError(t) { 5493 var i = t.code, 5494 e = t.message || (1 === i ? "permission denied" : 2 === i ? "position unavailable" : "timeout"); 5495 this._locateOptions.setView && !this._loaded && this.fitWorld(), this.fire("locationerror", { 5496 code: i, 5497 message: "Geolocation error: " + e + "." 5498 }); 5499 }, 5500 _handleGeolocationResponse: function _handleGeolocationResponse(t) { 5501 var i, 5502 e = new D(t.coords.latitude, t.coords.longitude), 5503 n = e.toBounds(2 * t.coords.accuracy), 5504 o = this._locateOptions; 5505 o.setView && (i = this.getBoundsZoom(n), this.setView(e, o.maxZoom ? Math.min(i, o.maxZoom) : i)); 5506 var s = { 5507 latlng: e, 5508 bounds: n, 5509 timestamp: t.timestamp 5510 }; 5511 5512 for (var r in t.coords) { 5513 "number" == typeof t.coords[r] && (s[r] = t.coords[r]); 5514 } 5515 5516 this.fire("locationfound", s); 5517 }, 5518 addHandler: function addHandler(t, i) { 5519 if (!i) return this; 5520 var e = this[t] = new i(this); 5521 return this._handlers.push(e), this.options[t] && e.enable(), this; 5522 }, 5523 remove: function remove() { 5524 if (this._initEvents(!0), this.off("moveend", this._panInsideMaxBounds), this._containerId !== this._container._leaflet_id) throw new Error("Map container is being reused by another instance"); 5525 5526 try { 5527 delete this._container._leaflet_id, delete this._containerId; 5528 } catch (t) { 5529 this._container._leaflet_id = void 0, this._containerId = void 0; 5530 } 5531 5532 var t; 5533 5534 for (t in void 0 !== this._locationWatchId && this.stopLocate(), this._stop(), ri(this._mapPane), this._clearControlPos && this._clearControlPos(), this._resizeRequest && (z(this._resizeRequest), this._resizeRequest = null), this._clearHandlers(), this._loaded && this.fire("unload"), this._layers) { 5535 this._layers[t].remove(); 5536 } 5537 5538 for (t in this._panes) { 5539 ri(this._panes[t]); 5540 } 5541 5542 return this._layers = [], this._panes = [], delete this._mapPane, delete this._renderer, this; 5543 }, 5544 createPane: function createPane(t, i) { 5545 var e = si("div", "leaflet-pane" + (t ? " leaflet-" + t.replace("Pane", "") + "-pane" : ""), i || this._mapPane); 5546 return t && (this._panes[t] = e), e; 5547 }, 5548 getCenter: function getCenter() { 5549 return this._checkIfLoaded(), this._lastCenter && !this._moved() ? this._lastCenter : this.layerPointToLatLng(this._getCenterLayerPoint()); 5550 }, 5551 getZoom: function getZoom() { 5552 return this._zoom; 5553 }, 5554 getBounds: function getBounds() { 5555 var t = this.getPixelBounds(); 5556 return new R(this.unproject(t.getBottomLeft()), this.unproject(t.getTopRight())); 5557 }, 5558 getMinZoom: function getMinZoom() { 5559 return void 0 === this.options.minZoom ? this._layersMinZoom || 0 : this.options.minZoom; 5560 }, 5561 getMaxZoom: function getMaxZoom() { 5562 return void 0 === this.options.maxZoom ? void 0 === this._layersMaxZo
5562om ? 1 / 0 : this._layersMaxZoom : this.options.maxZoom; 5563 }, 5564 getBoundsZoom: function getBoundsZoom(t, i, e) { 5565 t = N(t), e = A(e || [0, 0]); 5566 5567 var n = this.getZoom() || 0, 5568 o = this.getMinZoom(), 5569 s = this.getMaxZoom(), 5570 r = t.getNorthWest(), 5571 a = t.getSouthEast(), 5572 h = this.getSize().subtract(e), 5573 u = O(this.project(a, n), this.project(r, n)).getSize(), 5574 l = vt ? this.options.zoomSnap : 1, 5575 c = h.x / u.x, 5576 _ = h.y / u.y, 5577 d = i ? Math.max(c, _) : Math.min(c, _), 5578 n = this.getScaleZoom(d, n); 5579 5580 return l && (n = Math.round(n / (l / 100)) * (l / 100), n = i ? Math.ceil(n / l) * l : Math.floor(n / l) * l), Math.max(o, Math.min(s, n)); 5581 }, 5582 getSize: function getSize() { 5583 return this._size && !this._sizeChanged || (this._size = new k(this._container.clientWidth || 0, this._container.clientHeight || 0), this._sizeChanged = !1), this._size.clone(); 5584 }, 5585 getPixelBounds: function getPixelBounds(t, i) { 5586 var e = this._getTopLeftPoint(t, i); 5587 5588 return new I(e, e.add(this.getSize())); 5589 }, 5590 getPixelOrigin: function getPixelOrigin() { 5591 return this._checkIfLoaded(), this._pixelOrigin; 5592 }, 5593 getPixelWorldBounds: function getPixelWorldBounds(t) { 5594 return this.options.crs.getProjectedBounds(void 0 === t ? this.getZoom() : t); 5595 }, 5596 getPane: function getPane(t) { 5597 return "string" == typeof t ? this._panes[t] : t; 5598 }, 5599 getPanes: function getPanes() { 5600 return this._panes; 5601 }, 5602 getContainer: function getContainer() { 5603 return this._container; 5604 }, 5605 getZoomScale: function getZoomScale(t, i) { 5606 var e = this.options.crs; 5607 return i = void 0 === i ? this._zoom : i, e.scale(t) / e.scale(i); 5608 }, 5609 getScaleZoom: function getScaleZoom(t, i) { 5610 var e = this.options.crs; 5611 i = void 0 === i ? this._zoom : i; 5612 var n = e.zoom(t * e.scale(i)); 5613 return isNaN(n) ? 1 / 0 : n; 5614 }, 5615 project: function project(t, i) { 5616 return i = void 0 === i ? this._zoom : i, this.options.crs.latLngToPoint(j(t), i); 5617 }, 5618 unproject: function unproject(t, i) { 5619 return i = void 0 === i ? this._zoom : i, this.options.crs.pointToLatLng(A(t), i); 5620 }, 5621 layerPointToLatLng: function layerPointToLatLng(t) { 5622 var i = A(t).add(this.getPixelOrigin()); 5623 return this.unproject(i); 5624 }, 5625 latLngToLayerPoint: function latLngToLayerPoint(t) { 5626 return this.project(j(t))._round()._subtract(this.getPixelOrigin()); 5627 }, 5628 wrapLatLng: function wrapLatLng(t) { 5629 return this.options.crs.wrapLatLng(j(t)); 5630 }, 5631 wrapLatLngBounds: function wrapLatLngBounds(t) { 5632 return this.options.crs.wrapLatLngBounds(N(t)); 5633 }, 5634 distance: function distance(t, i) { 5635 return this.options.crs.distance(j(t), j(i)); 5636 }, 5637 containerPointToLayerPoint: function containerPointToLayerPoint(t) { 5638 return A(t).subtract(this._getMapPanePos()); 5639 }, 5640 layerPointToContainerPoint: function layerPointToContainerPoint(t) { 5641 return A(t).add(this._getMapPanePos()); 5642 }, 5643 containerPointToLatLng: function containerPointToLatLng(t) { 5644 var i = this.containerPointToLayerPoint(A(t)); 5645 return this.layerPointToLatLng(i); 5646 }, 5647 latLngToContainerPoint: function latLngToContainerPoint(t) { 5648 return this.layerPointToContainerPoint(this.latLngToLayerPoint(j(t))); 5649 }, 5650 mouseEventToContainerPoint: function mouseEventToContainerPoint(t) { 5651 return Di(t, this._container); 5652 }, 5653 mouseEventToLayerPoint: function mouseEventToLayerPoint(t) { 5654 return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t)); 5655 }, 5656 mouseEventToLatLng: function mouseEventToLatLng(t) { 5657 return this.layerPointToLatLng(this.mouseEventToLayerPoint(t)); 5658 }, 5659 _initContainer: function _initContainer(t) { 5660 var i = this._container = ni(t); 5661 if (!i) throw new Error("Map container not found."); 5662 if (i._leaflet_id) throw new Error("Map container is already initialized."); 5663 zi(i, "scroll", this._onScroll, this), this._containerId = m(i); 5664 }, 5665 _initLayout: function _initLayout() { 5666 var t = this._container; 5667 this._fadeAnimated = this.options.fadeAnimation && vt, ci(t, "leaflet-container" + (bt ? " leaflet-touch" : "") + (zt ? " leaflet-retina" : "") + (it ? " leaflet-oldie" : "") + (ct ? " leaflet-safari" : "") + (this._fadeAnimated ? " leaflet-fade-anim" : "")); 5668 var i = oi(t, "position"); 5669 "absolute" !== i && "relative" !== i && "fixed" !== i && (t.style.position = "relative"), this._initPanes(), this._initControlPos && this._initControlPos(); 5670 }, 5671 _initPanes: function _initPanes() { 5672 var t = this._panes = {}; 5673 this._paneRenderers = {}, this._mapPane = this.createPane("mapPane", this._container), vi(this._mapPane, new k(0, 0)), this.createPane("tilePane"), this.createPane("shadowPane"), this.createPane("overlayPane"), this.createPane("markerPane"), this.createPane("tooltipPane"), this.createPane("popupPane"), this.options.markerZoomAnimation || (ci(t.markerPane, "leaflet-zoom-hide"), ci(t.shadowPane, "leaflet-zoom-hide")); 5674 }, 5675 _resetView: function _resetView(t, i) { 5676 vi(this._mapPane, new k(0, 0)); 5677 var e = !this._loaded; 5678 this._loaded = !0, i = this._limitZoom(i), this.fire("viewprereset"); 5679 var n = this._zoom !== i; 5680 this._moveStart(n, !1)._move(t, i)._moveEnd(n), this.fire("viewreset"), e && this.fire("load"); 5681 }, 5682 _moveStart: function _moveStart(t, i) { 5683 return t && this.fire("zoomstart"), i || this.fire("movestart"), this; 5684 }, 5685 _move: function _move(t, i, e) { 5686 void 0 === i && (i = this._zoom); 5687 var n = this._zoom !== i; 5688 return this._zoom = i, this._lastCenter = t, this._pixelOrigin = this._getNewPixelOrigin(t), (n || e && e.pinch) && this.fire("zoom", e), this.fire("move", e); 5689 }, 5690 _moveEnd: function _moveEnd(t) { 5691 return t && this.fire("zoomend"), this.fire("moveend"); 5692 }, 5693 _stop: function _stop() { 5694 return z(this._flyToFrame), this._panAnim && this._panAnim.stop(), this; 5695 }, 5696 _rawPanBy: function _rawPanBy(t) { 5697 vi(this._mapPane, this._getMapPanePos().subtract(t)); 5698 }, 5699 _getZoomSpan: function _getZoomSpan() { 5700 return this.getMaxZoom() - this.getMinZoom(); 5701 }, 5702 _panInsideMaxBounds: function _panInsideMaxBounds() { 5703 this._enforcingBounds || this.panInsideBounds(this.options.maxBounds); 5704 }, 5705 _checkIfLoaded: function _checkIfLoaded() { 5706 if (!this._loaded) throw new Error("Set map center and zoom first."); 5707 }, 5708 _initEvents: function _initEvents(t) { 5709 this._targets = {}; 5710 var i = t ? Si : zi; 5711 i((this._targets[m(this._container)] = this)._container, "click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup", this._handleDOMEvent, this), this.options.trackResize && i(window, "resize", this._onResize, this), vt && this.options.transform3DLimit && (t ? this.off : this.on).call(this, "moveend", this._onMoveEnd); 5712 }, 5713 _onResize: function _onResize() { 5714 z(this._resizeRequest), this._resizeRequest = M(function () { 5715 this.invalidateSize({ 5716 debounceMoveend: !0 5717 }); 5718 }, this); 5719 }, 5720 _onScroll: function _onScroll() { 5721 this._container.scrollTop = 0, this._container.scrollLeft = 0; 5722 }, 5723 _onMoveEnd: function _onMoveEnd() { 5724 var t = this._getMapPanePos(); 5725 5726 Math.max(Math.abs(t.x), Math.abs(t.y)) >= this.options.transform3DLimit && this._resetView(this.getCenter(), this.getZoom()); 5727 }, 5728 _findEventTargets: function _findEventTargets(t, i) { 5729 for (var e, n = [], o = "mouseout" === i || "mouseover" === i, s = t.target || t.srcElement, r = !1; s;) { 5730 if ((e = this._targets[m(s)]) && ("click" === i || "preclick" === i) && !t._simulated && this._draggableMoved(e)) { 5731 r = !0; 5732 break; 5733 } 5734 5735 if (e && e.listens(i, !0)) { 5736 if (o && !Vi(s, t)) break; 5737 if (n.push(e), o) break; 5738 } 5739 5740 if (s === this._container) break; 5741 s = s.parentNode; 5742 } 5743 5744 return n.length || r || o || !Vi(s, t) || (n = [this]), n; 5745 }, 5746 _handleDOMEvent: function _handleDOMEvent(t) { 5747 var i; 5748 this._loaded && !Ui(t) && ("mousedown" !== (i = t.type) && "keypress" !== i && "keyup" !== i && "keydown" !== i || Pi(t.target || t.srcElement), this._fireDOMEvent(t, i)); 5749 }, 5750 _mouseEvents: ["click", "dblclick", "mouseover", "mouseout", "contextmenu"], 5751 _fireDOMEvent: function _fireDOMEvent(t, i, e) { 5752 var n; 5753 5754 if ("click" === t.type && ((n = h({}, t)).type = "preclick", this._fireDOMEvent(n, n.type, e)), !t._stopped && (e = (e || []).concat(this._findEventTargets(t, i))).length) { 5755 var o = e[0]; 5756 "contextmenu" === i && o.listens(i, !0) && Ri(t); 5757 var s, 5758 r = { 5759 originalEvent: t 5760 }; 5761 "keypress" !== t.type && "keydown" !== t.type && "keyup" !== t.type && (s = o.getLatLng && (!o._radius || o._radius <= 10), r.containerPoint = s ? this.latLngToContainerPoint(o.getLatLng()) : this.mouseEventToContainerPoint(t), r.layerPoint = this.containerPointToLayerPoint(r.containerPoint), r.latlng = s ? o.getLatLng() : this.layerPointToLatLng(r.layerPoint)); 5762 5763 for (var a = 0; a < e.length; a++) { 5764 if (e[a].fire(i, r, !0), r.originalEvent._stopped || !1 === e[a].options.bubblingMouseEvents && -1 !== v(this._mouseEvents, i)) return; 5765 } 5766 } 5767 }, 5768 _draggableMoved: function _draggableMoved(t) { 5769 return (t = t.dragging && t.dragging.enabled() ? t : this).dragging && t.dragging.moved() || this.boxZoom && this.boxZoom.moved(); 5770 }, 5771 _clearHandlers: function _clearHandlers() { 5772 for (var t = 0, i = this._handlers.length; t < i; t++) { 5773 this._handlers[t].disable(); 5774 } 5775 }, 5776 whenReady: function whenReady(t, i) { 5777 return this._loaded ? t.call(i || this, { 5778 target: this 5779 }) : this.on("load", t, i), this; 5780 }, 5781 _getMapPanePos: function _getMapPanePos() { 5782 return yi(this._mapPane) || new k(0, 0); 5783 }, 5784 _moved: function _moved() { 5785 var t = this._getMapPanePos(); 5786 5787 return t && !t.equals([0, 0]); 5788 }, 5789 _getTopLeftPoint: function _getTopLeftPoint(t, i) { 5790 return (t && void 0 !== i ? this._getNewPixelOrigin(t, i) : this.getPixelOrigin()).subtract(this._getMapPanePos()); 5791 }, 5792 _getNewPixelOrigin: function _getNewPixelOrigin(t, i) {
5793 var e = this.getSize()._divideBy(2); 5794 5795 return this.project(t, i)._subtract(e)._add(this._getMapPanePos())._round(); 5796 }, 5797 _latLngToNewLayerPoint: function _latLngToNewLayerPoint(t, i, e) { 5798 var n = this._getNewPixelOrigin(e, i); 5799 5800 return this.project(t, i)._subtract(n); 5801 }, 5802 _latLngBoundsToNewLayerBounds: function _latLngBoundsToNewLayerBounds(t, i, e) { 5803 var n = this._getNewPixelOrigin(e, i); 5804 5805 return O([this.project(t.getSouthWest(), i)._subtract(n), this.project(t.getNorthWest(), i)._subtract(n), this.project(t.getSouthEast(), i)._subtract(n), this.project(t.getNorthEast(), i)._subtract(n)]); 5806 }, 5807 _getCenterLayerPoint: function _getCenterLayerPoint() { 5808 return this.containerPointToLayerPoint(this.getSize()._divideBy(2)); 5809 }, 5810 _getCenterOffset: function _getCenterOffset(t) { 5811 return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint()); 5812 }, 5813 _limitCenter: function _limitCenter(t, i, e) { 5814 if (!e) return t; 5815 5816 var n = this.project(t, i), 5817 o = this.getSize().divideBy(2), 5818 s = new I(n.subtract(o), n.add(o)), 5819 r = this._getBoundsOffset(s, e, i); 5820 5821 return r.round().equals([0, 0]) ? t : this.unproject(n.add(r), i); 5822 }, 5823 _limitOffset: function _limitOffset(t, i) { 5824 if (!i) return t; 5825 var e = this.getPixelBounds(), 5826 n = new I(e.min.add(t), e.max.add(t)); 5827 return t.add(this._getBoundsOffset(n, i)); 5828 }, 5829 _getBoundsOffset: function _getBoundsOffset(t, i, e) { 5830 var n = O(this.project(i.getNorthEast(), e), this.project(i.getSouthWest
5830(), e)), 5831 o = n.min.subtract(t.min), 5832 s = n.max.subtract(t.max); 5833 return new k(this._rebound(o.x, -s.x), this._rebound(o.y, -s.y)); 5834 }, 5835 _rebound: function _rebound(t, i) { 5836 return 0 < t + i ? Math.round(t - i) / 2 : Math.max(0, Math.ceil(t)) - Math.max(0, Math.floor(i)); 5837 }, 5838 _limitZoom: function _limitZoom(t) { 5839 var i = this.getMinZoom(), 5840 e = this.getMaxZoom(), 5841 n = vt ? this.options.zoomSnap : 1; 5842 return n && (t = Math.round(t / n) * n), Math.max(i, Math.min(e, t)); 5843 }, 5844 _onPanTransitionStep: function _onPanTransitionStep() { 5845 this.fire("move"); 5846 }, 5847 _onPanTransitionEnd: function _onPanTransitionEnd() { 5848 _i(this._mapPane, "leaflet-pan-anim"), this.fire("moveend"); 5849 }, 5850 _tryAnimatedPan: function _tryAnimatedPan(t, i) { 5851 var e = this._getCenterOffset(t)._trunc(); 5852 5853 return !(!0 !== (i && i.animate) && !this.getSize().contains(e)) && (this.panBy(e, i), !0); 5854 }, 5855 _createAnimProxy: function _createAnimProxy() { 5856 var t = this._proxy = si("div", "leaflet-proxy leaflet-zoom-animated"); 5857 this._panes.mapPane.appendChild(t), this.on("zoomanim", function (t) { 5858 var i = ti, 5859 e = this._proxy.style[i]; 5860 gi(this._proxy, this.project(t.center, t.zoom), this.getZoomScale(t.zoom, 1)), e === this._proxy.style[i] && this._animatingZoom && this._onZoomTransitionEnd(); 5861 }, this), this.on("load moveend", this._animMoveEnd, this), this._on("unload", this._destroyAnimProxy, this); 5862 }, 5863 _destroyAnimProxy: function _destroyAnimProxy() { 5864 ri(this._proxy), this.off("load moveend", this._animMoveEnd, this), delete this._proxy; 5865 }, 5866 _animMoveEnd: function _animMoveEnd() { 5867 var t = this.getCenter(), 5868 i = this.getZoom(); 5869 gi(this._proxy, this.project(t, i), this.getZoomScale(i, 1)); 5870 }, 5871 _catchTransitionEnd: function _catchTransitionEnd(t) { 5872 this._animatingZoom && 0 <= t.propertyName.indexOf("transform") && this._onZoomTransitionEnd(); 5873 }, 5874 _nothingToAnimate: function _nothingToAnimate() { 5875 return !this._container.getElementsByClassName("leaflet-zoom-animated").length; 5876 }, 5877 _tryAnimatedZoom: function _tryAnimatedZoom(t, i, e) { 5878 if (this._animatingZoom) return !0; 5879 if (e = e || {}, !this._zoomAnimated || !1 === e.animate || this._nothingToAnimate() || Math.abs(i - this._zoom) > this.options.zoomAnimationThreshold) return !1; 5880 5881 var n = this.getZoomScale(i), 5882 o = this._getCenterOffset(t)._divideBy(1 - 1 / n); 5883 5884 return !(!0 !== e.animate && !this.getSize().contains(o)) && (M(function () { 5885 this._moveStart(!0, !1)._animateZoom(t, i, !0); 5886 }, this), !0); 5887 }, 5888 _animateZoom: function _animateZoom(t, i, e, n) { 5889 this._mapPane && (e && (this._animatingZoom = !0, this._animateToCenter = t, this._animateToZoom = i, ci(this._mapPane, "leaflet-zoom-anim")), this.fire("zoomanim", { 5890 center: t, 5891 zoom: i, 5892 noUpdate: n 5893 }), setTimeout(p(this._onZoomTransitionEnd, this), 250)); 5894 }, 5895 _onZoomTransitionEnd: function _onZoomTransitionEnd() { 5896 this._animatingZoom && (this._mapPane && _i(this._mapPane, "leaflet-zoom-anim"), this._animatingZoom = !1, this._move(this._animateToCenter, this._animateToZoom), M(function () { 5897 this._moveEnd(!0); 5898 }, this)); 5899 } 5900 }); 5901 5902 function Yi(t) { 5903 return new Xi(t); 5904 } 5905 5906 var Xi = S.extend({ 5907 options: { 5908 position: "topright" 5909 }, 5910 initialize: function initialize(t) { 5911 c(this, t); 5912 }, 5913 getPosition: function getPosition() { 5914 return this.options.position; 5915 }, 5916 setPosition: function setPosition(t) { 5917 var i = this._map; 5918 return i && i.removeControl(this), this.options.position = t, i && i.addControl(this), this; 5919 }, 5920 getContainer: function getContainer() { 5921 return this._container; 5922 }, 5923 addTo: function addTo(t) { 5924 this.remove(), this._map = t; 5925 var i = this._container = this.onAdd(t), 5926 e = this.getPosition(), 5927 n = t._controlCorners[e]; 5928 return ci(i, "leaflet-control"), -1 !== e.indexOf("bottom") ? n.insertBefore(i, n.firstChild) : n.appendChild(i), this._map.on("unload", this.remove, this), this; 5929 }, 5930 remove: function remove() { 5931 return this._map && (ri(this._container), this.onRemove && this.onRemove(this._map), this._map.off("unload", this.remove, this), this._map = null), this; 5932 }, 5933 _refocusOnMap: function _refocusOnMap(t) { 5934 this._map && t && 0 < t.screenX && 0 < t.screenY && this._map.getContainer().focus(); 5935 } 5936 }); 5937 Ki.include({ 5938 addControl: function addControl(t) { 5939 return t.addTo(this), this; 5940 }, 5941 removeControl: function removeControl(t) { 5942 return t.remove(), this; 5943 }, 5944 _initControlPos: function _initControlPos() { 5945 var n = this._controlCorners = {}, 5946 o = "leaflet-", 5947 s = this._controlContainer = si("div", o + "control-container", this._container); 5948 5949 function t(t, i) { 5950 var e = o + t + " " + o + i; 5951 n[t + i] = si("div", e, s); 5952 } 5953 5954 t("top", "left"), t("top", "right"), t("bottom", "left"), t("bottom", "right"); 5955 }, 5956 _clearControlPos: function _clearControlPos() { 5957 for (var t in this._controlCorners) { 5958 ri(this._controlCorners[t]); 5959 } 5960 5961 ri(this._controlContainer), delete this._controlCorners, delete this._controlContainer; 5962 } 5963 }); 5964 var Ji = Xi.extend({ 5965 options: { 5966 collapsed: !0, 5967 position: "topright", 5968 autoZIndex: !0, 5969 hideSingleBase: !1,
5970 sortLayers: !1, 5971 sortFunction: function sortFunction(t, i, e, n) { 5972 return e < n ? -1 : n < e ? 1 : 0; 5973 } 5974 }, 5975 initialize: function initialize(t, i, e) { 5976 for (var n in c(this, e), this._layerControlInputs = [], this._layers = [], this._lastZIndex = 0, this._handlingClick = !1, t) { 5977 this._addLayer(t[n], n); 5978 } 5979 5980 for (n in i) { 5981 this._addLayer(i[n], n, !0); 5982 } 5983 }, 5984 onAdd: function onAdd(t) { 5985 this._initLayout(), this._update(), (this._map = t).on("zoomend", this._checkDisabledLayers, this); 5986 5987 for (var i = 0; i < this._layers.length; i++) { 5988 this._layers[i].layer.on("add remove", this._onLayerChange, this); 5989 } 5990 5991 return this._container; 5992 }, 5993 addTo: function addTo(t) { 5994 return Xi.prototype.addTo.call(this, t), this._expandIfNotCollapsed(); 5995 }, 5996 onRemove: function onRemove() { 5997 this._map.off("zoomend", this._checkDisabledLayers, this); 5998 5999 for (var t = 0; t < this._layers.length; t++) { 6000 this._layers[t].layer.off("add remove", this._onLayerChange, this); 6001 } 6002 }, 6003 addBaseLayer: function addBaseLayer(t, i) { 6004 return this._addLayer(t, i), this._map ? this._update() : this; 6005 }, 6006 addOverlay: function addOverlay(t, i) { 6007 return this._addLayer(t, i, !0), this._map ? this._update() : this; 6008 }, 6009 removeLayer: function removeLayer(t) { 6010 t.off("add remove", this._onLayerChange, this); 6011 6012 var i = this._getLayer(m(t)); 6013 6014 return i && this._layers.splice(this._layers.indexOf(i), 1), this._map ? this._update() : this; 6015 }, 6016 expand: function expand() { 6017 ci(this._container, "leaflet-control-layers-expanded"), this._section.style.height = null; 6018 var t = this._map.getSize().y - (this._container.offsetTop + 50); 6019 return t < this._section.clientHeight ? (ci(this._section, "leaflet-control-layers-scrollbar"), this._section.style.height = t + "px") : _i(this._section, "leaflet-control-layers-scrollbar"), this._checkDisabledLayers(), this; 6020 }, 6021 collapse: function collapse() { 6022 return _i(this._container, "leaflet-control-layers-expanded"), this; 6023 }, 6024 _initLayout: function _initLayout() { 6025 var t = "leaflet-control-layers", 6026 i = this._container = si("div", t), 6027 e = this.options.collapsed; 6028 i.setAttribute("aria-haspopup", !0), Oi(i), Ii(i); 6029 var n = this._section = si("section", t + "-list"); 6030 e && (this._map.on("click", this.collapse, this), ot || zi(i, { 6031 mouseenter: this.expand, 6032 mouseleave: this.collapse 6033 }, this)); 6034 var o = this._layersLink = si("a", t + "-toggle", i); 6035 o.href = "#", o.title = "Layers", bt ? (zi(o, "click", Ni), zi(o, "click", this.expand, this)) : zi(o, "focus", this.expand, this), e || this.expand(), this._baseLayersList = si("div", t + "-base", n), this._separator = si("div", t + "-separator", n), this._overlaysList = si("div", t + "-overlays", n), i.appendChild(n); 6036 }, 6037 _getLayer: function _getLayer(t) { 6038 for (var i = 0; i < this._layers.length; i++) { 6039 if (this._layers[i] && m(this._layers[i].layer) === t) return this._layers[i]; 6040 } 6041 }, 6042 _addLayer: function _addLayer(t, i, e) { 6043 this._map && t.on("add remove", this._onLayerChange, this), this._layers.push({ 6044 layer: t, 6045 name: i, 6046 overlay: e 6047 }), this.options.sortLayers && this._layers.sort(p(function (t, i) { 6048 return this.options.sortFunction(t.layer, i.layer, t.name, i.name); 6049 }, this)), this.options.autoZIndex && t.setZIndex && (this._lastZIndex++, t.setZIndex(this._lastZIndex)), this._expandIfNotCollapsed(); 6050 }, 6051 _update: function _update() { 6052 if (!this._container) return this; 6053 ai(this._baseLayersList), ai(this._overlaysList), this._layerControlInputs = []; 6054 6055 for (var t, i, e, n = 0, o = 0; o < this._layers.length; o++) { 6056 e = this._layers[o], this._addItem(e), i = i || e.overlay, t = t || !e.overlay, n += e.overlay ? 0 : 1; 6057 } 6058 6059 return this.options.hideSingleBase && (t = t && 1 < n, this._baseLayersList.style.display = t ? "" : "none"), this._separator.style.display = i && t ? "" : "none", this; 6060 }, 6061 _onLayerChange: function _onLayerChange(t) { 6062 this._handlingClick || this._update(); 6063 6064 var i = this._getLayer(m(t.target)), 6065 e = i.overlay ? "add" === t.type ? "overlayadd" : "overlayremove" : "add" === t.type ? "baselayerchange" : null; 6066 6067 e && this._map.fire(e, i); 6068 }, 6069 _createRadioElement: function _createRadioElement(t, i) { 6070 var e = '<input type="radio" class="leaflet-control-layers-selector" name="' + t + '"' + (i ? ' checked="checked"' : "") + "/>", 6071 n = document.createElement("div"); 6072 return n.innerHTML = e, n.firstChild; 6073 }, 6074 _addItem: function _addItem(t) { 6075 var i, 6076 e = document.createElement("label"), 6077 n = this._map.hasLayer(t.layer); 6078 6079 t.overlay ? ((i = document.createElement("input")).type = "checkbox", i.className = "leaflet-control-layers-selector", i.defaultChecked = n) : i = this._createRadioElement("leaflet-base-layers_" + m(this), n), this._layerControlInputs.push(i), i.layerId = m(t.layer), zi(i, "click", this._onInputClick, this); 6080 var o = document.createElement("span"); 6081 o.innerHTML = " " + t.name; 6082 var s = document.createElement("div"); 6083 return e.appendChild(s), s.appendChild(i), s.appendChild(o), (t.overlay ? this._overlaysList : this._baseLayersList).appendChild(e), this._checkDisabledLayers(), e; 6084 }, 6085 _onInputClick: function _onInputClick() { 6086 var t, 6087 i, 6088 e = this._layerControlInputs, 6089 n = [], 6090 o = []; 6091 this._handlingClick = !0; 6092 6093 for (var s = e.length - 1; 0 <= s; s--) { 6094 t = e[s], i = this._getLayer(t.layerId).layer, t.checked ? n.push(i) : t.checked || o.push(i); 6095 } 6096 6097 for (s = 0; s < o.length; s++) { 6098 this._map.hasLayer(o[s]) && this._map.removeLayer(o[s]); 6099 } 6100 6101 for (s = 0; s < n.length; s++) { 6102 this._map.hasLayer(n[s]) || this._map.addLayer(n[s]); 6103 } 6104 6105 this._handlingClick = !1, this._refocusOnMap(); 6106 }, 6107 _checkDisabledLayers: function _checkDisabledLayers() { 6108 for (var t, i, e = this._layerControlInputs, n = this._map.getZoom(), o = e.length - 1; 0 <= o; o--) { 6109 t = e[o], i = this._getLayer(t.layerId).layer, t.disabled = void 0 !== i.options.minZoom && n < i.options.minZoom || void 0 !== i.options.maxZoom && n > i.options.maxZoom; 6110 } 6111 }, 6112 _expandIfNotCollapsed: function _expandIfNotCollapsed() { 6113 return this._map && !this.options.collapsed && this.expand(), this; 6114 }, 6115 _expand: function _expand() { 6116 return this.expand(); 6117 }, 6118 _collapse: function _collapse() { 6119 return this.collapse(); 6120 } 6121 }), 6122 $i = Xi.extend({ 6123 options: { 6124 position: "topleft", 6125 zoomInText: "+", 6126 zoomInTitle: "Zoom in", 6127 zoomOutText: "−", 6128 zoomOutTitle: "Zoom out" 6129 }, 6130 onAdd: function onAdd(t) { 6131 var i = "leaflet-control-zoom", 6132 e = si("div", i + " leaflet-bar"), 6133 n = this.options; 6134 return this._zoomInButton = this._createButton(n.zoomInText, n.zoomInTitle, i + "-in", e, this._zoomIn), this._zoomOutButton = this._createButton(n.zoomOutText, n.zoomOutTitle, i + "-out", e, this._zoomOut), this._updateDisabled(), t.on("zoomend zoomlevelschange", this._updateDisabled, this), e; 6135 }, 6136 onRemove: function onRemove(t) { 6137 t.off("zoomend zoomlevelschange", this._updateDisabled, this); 6138 }, 6139 disable: function disable() { 6140 return this._disabled = !0, this._updateDisabled(), this; 6141 }, 6142 enable: function enable() { 6143 return this._disabled = !1, this._updateDisabled(), this; 6144 }, 6145 _zoomIn: function _zoomIn(t) { 6146 !this._disabled && this._map._zoom < this._map.getMaxZoom() && this._map.zoomIn(this._map.options.zoomDelta * (t.shiftKey ? 3 : 1)); 6147 }, 6148 _zoomOut: function _zoomOut(t) { 6149 !this._disabled && this._map._zoom > this._map.getMinZoom() && this._map.zoomOut(this._map.options.zoomDelta * (t.shiftKey ? 3 : 1)); 6150 }, 6151 _createButton: function _createButton(t, i, e, n, o) { 6152 var s = si("a", e, n); 6153 return s.innerHTML = t, s.href = "#", s.title = i, s.setAttribute("role", "button"), s.setAttribute("aria-label", i), Oi(s), zi(s, "click", Ni), zi(s, "click", o, this), zi(s, "click", this._refocusOnMap, this), s; 6154 }, 6155 _updateDisabled: function _updateDisabled() { 6156 var t = this._map, 6157 i = "leaflet-disabled"; 6158 _i(this._zoomInButton, i), _i(this._zoomOutButton, i), !this._disabled && t._zoom !== t.getMin
6158Zoom() || ci(this._zoomOutButton, i), !this._disabled && t._zoom !== t.getMaxZoom() || ci(this._zoomInButton, i); 6159 } 6160 }); 6161 Ki.mergeOptions({ 6162 zoomControl: !0 6163 }), Ki.addInitHook(function () { 6164 this.options.zoomControl && (this.zoomControl = new $i(), this.addControl(this.zoomControl)); 6165 }); 6166 var Qi = Xi.extend({ 6167 options: { 6168 position: "bottomleft", 6169 maxWidth: 100, 6170 metric: !0, 6171 imperial: !0 6172 }, 6173 onAdd: function onAdd(t) { 6174 var i = "leaflet-control-scale", 6175 e = si("div", i), 6176 n = this.options; 6177 return this._addScales(n, i + "-line", e), t.on(n.updateWhenIdle ? "moveend" : "move", this._update, this), t.whenReady(this._update, this), e; 6178 }, 6179 onRemove: function onRemove(t) { 6180 t.off(this.options.updateWhenIdle ? "moveend" : "move", this._update, this); 6181 }, 6182 _addScales: function _addScales(t, i, e) { 6183 t.metric && (this._mScale = si("div", i, e)), t.imperial && (this._iScale = si("div", i, e)); 6184 }, 6185 _update: function _update() { 6186 var t = this._map, 6187 i = t.getSize().y / 2, 6188 e = t.distance(t.containerPointToLatLng([0, i]), t.containerPointToLatLng([this.options.maxWidth, i])); 6189 6190 this._updateScales(e); 6191 }, 6192 _updateScales: function _updateScales(t) { 6193 this.options.metric && t && this._updateMetric(t), this.options.imperial && t && this._updateImperial(t); 6194 }, 6195 _updateMetric: function _updateMetric(t) { 6196 var i = this._getRoundNum(t), 6197 e = i < 1e3 ? i + " m" : i / 1e3 + " km"; 6198 6199 this._updateScale(this._mScale, e, i / t); 6200 }, 6201 _updateImperial: function _updateImperial(t) { 6202 var i, 6203 e, 6204 n, 6205 o = 3.2808399 * t; 6206 5280 < o ? (i = o / 5280, e = this._getRoundNum(i), this._updateScale(this._iScale, e + " mi", e / i)) : (n = this._getRoundNum(o), this._updateScale(this._iScale, n + " ft", n / o)); 6207 }, 6208 _updateScale: function _updateScale(t, i, e) { 6209 t.style.width = Math.round(this.options.maxWidth * e) + "px", t.innerHTML = i; 6210 }, 6211 _getRoundNum: function _getRoundNum(t) { 6212 var i = Math.pow(10, (Math.floor(t) + "").length - 1), 6213 e = t / i; 6214 return i * (e = 10 <= e ? 10 : 5 <= e ? 5 : 3 <= e ? 3 : 2 <= e ? 2 : 1); 6215 } 6216 }), 6217 te = Xi.extend({ 6218 options: { 6219 position: "bottomright", 6220 prefix: '<a href="https://leafletjs.com" title="A JS library for interactive maps">Leaflet</a>' 6221 }, 6222 initialize: function initialize(t) { 6223 c(this, t), this._attributions = {}; 6224 }, 6225 onAdd: function onAdd(t) { 6226 for (var i in (t.attributionControl = this)._container = si("div", "leaflet-control-attribution"), Oi(this._container), t._layers) { 6227 t._layers[i].getAttribution && this.addAttribution(t._layers[i].getAttribution()); 6228 } 6229 6230 return this._update(), this._container; 6231 }, 6232 setPrefix: function setPrefix(t) { 6233 return this.options.prefix = t, this._update(), this; 6234 }, 6235 addAttribution: function addAttribution(t) { 6236 return t && (this._attributions[t] || (this._attributions[t] = 0), this._attributions[t]++, this._update()), this; 6237 }, 6238 removeAttribution: function removeAttribution(t) { 6239 return t && this._attributions[t] && (this._attributions[t]--, this._update()), this; 6240 }, 6241 _update: function _update() { 6242 if (this._map) { 6243 var t = []; 6244 6245 for (var i in this._attributions) { 6246 this._attributions[i] && t.push(i); 6247 } 6248 6249 var e = []; 6250 this.options.prefix && e.push(this.options.prefix), t.length && e.push(t.join(", ")), this._container.innerHTML = e.join(" | "); 6251 } 6252 } 6253 }); 6254 Ki.mergeOptions({ 6255 attributionControl: !0 6256 }), Ki.addInitHook(function () { 6257 this.options.attributionControl && new te().addTo(this); 6258 }); 6259 Xi.Layers = Ji, Xi.Zoom = $i, Xi.Scale = Qi, Xi.Attribution = te, Yi.layers = function (t, i, e) { 6260 return new Ji(t, i, e); 6261 }, Yi.zoom = function (t) { 6262 return new $i(t); 6263 }, Yi.scale = function (t) { 6264 return new Qi(t); 6265 }, Yi.attribution = function (t) { 6266 return new te(t); 6267 }; 6268 var ie = S.extend({ 6269 initialize: function initialize(t) { 6270 this._map = t; 6271 }, 6272 enable: function enable() { 6273 return this._enabled || (this._enabled = !0, this.addHooks()), this; 6274 }, 6275 disable: function disable() { 6276 return this._enabled && (this._enabled = !1, this.removeHooks()), this; 6277 }, 6278 enabled: function enabled() { 6279 return !!this._enabled; 6280 } 6281 }); 6282 6283 ie.addTo = function (t, i) { 6284 return t.addHandler(i, this), this; 6285 }; 6286 6287 var ee, 6288 ne = { 6289 Events: Z 6290 }, 6291 oe = bt ? "touchstart mousedown" : "mousedown", 6292 se = { 6293 mousedown: "mouseup", 6294 touchstart: "touchend", 6295 pointerdown: "touchend", 6296 MSPointerDown: "touchend" 6297 }, 6298 re = { 6299 mousedown: "mousemove", 6300 touchstart: "touchmove", 6301 pointerdown: "touchmove", 6302 MSPointerDown: "touchmove" 6303 }, 6304 ae = E.extend({ 6305 options: { 6306 clickTolerance: 3 6307 }, 6308 initialize: function initialize(t, i, e, n) { 6309 c(this, n), this._element = t, this._dragStartTarget = i || t, this._preventOutline = e; 6310 }, 6311 enable: function enable() { 6312 this._enabled || (zi(this._dragStartTarget, oe, this._onDown, this), this._enabled = !0); 6313 }, 6314 disable: function disable() { 6315 this._enabled && (ae._dragging === this && this.finishDrag(), Si(this._dragStartTarget, oe, this._onDown, this), this._enabled = !1, this._moved = !1); 6316 }, 6317 _onDown: function _onDown(t) { 6318 var i, e; 6319 !t._simulated && this._enabled && (this._moved = !1, li(this._element, "leaflet-zoom-anim") || ae._dragging || t.shiftKey || 1 !== t.which && 1 !== t.button && !t.touches || ((ae._dragging = this)._preventOutline && Pi(this._element), xi(), Xt(), this._moving || (this.fire("down"), i = t.touches ? t.touches[0] : t, e = bi(this._element), this._startPoint = new k(i.clientX, i.clientY), this._parentScale = Ti(e), zi(document, re[t.type], this._onMove, this), zi(document, se[t.type], this._onUp, this)))); 6320 }, 6321 _onMove: function _onMove(t) { 6322 var i, e; 6323 !t._simulated && this._enabled && (t.touches && 1 < t.touches.length ? this._moved = !0 : ((e = new k((i = t.touches && 1 === t.touches.length ? t.touches[0] : t).clientX, i.clientY)._subtract(this._startPoint)).x || e.y) && (Math.abs(e.x) + Math.abs(e.y) < this.options.clickTolerance || (e.x /= this._parentScale.x, e.y /= this._parentScale.y, Ri(t), this._moved || (this.fire("dragstart"), this._moved = !0, this._startPos = yi(this._element).subtract(e), ci(document.body, "leaflet-dragging"), this._lastTarget = t.target || t.srcElement, window.SVGElementInstance && this._lastTarget instanceof window.SVGElementInstance && (this._lastTarget = this._lastTarget.correspondingUseElement), ci(this._lastTarget, "leaflet-drag-target")), this._newPos = this._startPos.add(e), this._moving = !0, z(this._animRequest), this._lastEvent = t, this._animRequest = M(this._updatePosition, this, !0)))); 6324 }, 6325 _updatePosition: function _updatePosition() { 6326 var t = { 6327 originalEvent: this._lastEvent 6328 }; 6329 this.fire("predrag", t), vi(this._element, this._newPos), this.fire("drag", t); 6330 }, 6331 _onUp: function _onUp(t) { 6332 !t._simulated && this._enabled && this.finishDrag(); 6333 }, 6334 finishDrag: function finishDrag() { 6335 for (var t in _i(document.body, "leaflet-dragging"), this._lastTarget && (_i(this._lastTarget, "leaflet-drag-target"), this._lastTarget = null), re) { 6336 Si(document, re[t], this._onMove, this), Si(document, se[t], this._onUp, this); 6337 } 6338 6339 wi(), Jt(), this._moved && this._moving && (z(this._animRequest), this.fire("dragend", { 6340 distance: this._newPos.distanceTo(this._startPos) 6341 })), this._moving = !1, ae._dragging = !1; 6342 } 6343 }); 6344 6345 function he(t, i) { 6346 if (!i || !t.length) return t.slice(); 6347 var e = i * i; 6348 return t = function (t, i) { 6349 var e = t.length, 6350 n = new ((typeof Uint8Array === "undefined" ? "undefined" : _typeof(Uint8Array)) != void 0 + "" ? Uint8Array : Array)(e); 6351 n[0] = n[e - 1] = 1, function t(i, e, n, o, s) { 6352 var r, 6353 a, 6354 h, 6355 u = 0; 6356 6357 for (a = o + 1; a <= s - 1; a++) { 6358 h = de(i[a], i[o], i[s], !0), u < h && (r = a, u = h); 6359 } 6360 6361 n < u && (e[r] = 1, t(i, e, n, o, r), t(i, e, n, r, s)); 6362 }(t, n, i, 0, e - 1); 6363 var o, 6364 s = []; 6365 6366 for (o = 0; o < e; o++) { 6367 n[o] && s.push(t[o]); 6368 } 6369 6370 return s; 6371 }(t = function (t, i) { 6372 for (var e = [t[0]], n = 1, o = 0, s = t.length; n < s; n++) { 6373 (function (t, i) { 6374 var e = i.x - t.x, 6375 n = i.y - t.y; 6376 return e * e + n * n; 6377 })(t[n], t[o]) > i && (e.push(t[n]), o = n); 6378 } 6379
6380 o < s - 1 && e.push(t[s - 1]); 6381 return e; 6382 }(t, e), e); 6383 } 6384 6385 function ue(t, i, e) { 6386 return Math.sqrt(de(t, i, e, !0)); 6387 } 6388 6389 function le(t, i, e, n, o) { 6390 var s, 6391 r, 6392 a, 6393 h = n ? ee : _e(t, e), 6394 u = _e(i, e); 6395 6396 for (ee = u;;) { 6397 if (!(h | u)) return [t, i]; 6398 if (h & u) return !1; 6399 a = _e(r = ce(t, i, s = h || u, e, o), e), s === h ? (t = r, h = a) : (i = r, u = a); 6400 } 6401 } 6402 6403 function ce(t, i, e, n, o) { 6404 var s, 6405 r, 6406 a = i.x - t.x, 6407 h = i.y - t.y, 6408 u = n.min, 6409 l = n.max; 6410 return 8 & e ? (s = t.x + a * (l.y - t.y) / h, r = l.y) : 4 & e ? (s = t.x + a * (u.y - t.y) / h, r = u.y) : 2 & e ? (s = l.x, r = t.y + h * (l.x - t.x) / a) : 1 & e && (s = u.x, r = t.y + h * (u.x - t.x) / a), new k(s, r, o); 6411 } 6412 6413 function _e(t, i) { 6414 var e = 0; 6415 return t.x < i.min.x ? e |= 1 : t.x > i.max.x && (e |= 2), t.y < i.min.y ? e |= 4 : t.y > i.max.y && (e |= 8), e; 6416 } 6417 6418 function de(t, i, e, n) { 6419 var o, 6420 s = i.x, 6421 r = i.y, 6422 a = e.x - s, 6423 h = e.y - r, 6424 u = a * a + h * h; 6425 return 0 < u && (1 < (o = ((t.x - s) * a + (t.y - r) * h) / u) ? (s = e.x, r = e.y) : 0 < o && (s += a * o, r += h * o)), a = t.x - s, h = t.y - r, n ? a * a + h * h : new k(s, r); 6426 } 6427 6428 function pe(t) { 6429 return !g(t[0]) || "object" != _typeof(t[0][0]) && void 0 !== t[0][0]; 6430 } 6431 6432 function me(t) { 6433 return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."), pe(t); 6434 } 6435 6436 var fe = { 6437 simplify: he, 6438 pointToSegmentDistance: ue, 6439 closestPointOnSegment: function closestPointOnSegment(t, i, e) { 6440 return de(t, i, e); 6441 }, 6442 clipSegment: le, 6443 _getEdgeIntersection: ce, 6444 _getBitCode: _e, 6445 _sqClosestPointOnSegment: de, 6446 isFlat: pe, 6447 _flat: me 6448 }; 6449 6450 function ge(t, i, e) { 6451 for (var n, o, s, r, a, h, u, l = [1, 4, 2, 8], c = 0, _ = t.length; c < _; c++) { 6452 t[c]._code = _e(t[c], i); 6453 } 6454 6455 for (s = 0; s < 4; s++) { 6456 for (h = l[s], n = [], c = 0, o = (_ = t.length) - 1; c < _; o = c++) { 6457 r = t[c], a = t[o], r._code & h ? a._code & h || ((u = ce(a, r, h, i, e))._code = _e(u, i), n.push(u)) : (a._code & h && ((u = ce(a, r, h, i, e))._code = _e(u, i), n.push(u)), n.push(r)); 6458 } 6459 6460 t = n; 6461 } 6462 6463 return t; 6464 } 6465 6466 var ve, 6467 ye = { 6468 clipPolygon: ge 6469 }, 6470 xe = { 6471 project: function project(t) { 6472 return new k(t.lng, t.lat); 6473 }, 6474 unproject: function unproject(t) { 6475 return new D(t.y, t.x); 6476 }, 6477 bounds: new I([-180, -90], [180, 90]) 6478 }, 6479 we = { 6480 R: 6378137, 6481 R_MINOR: 6356752.314245179, 6482 bounds: new I([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]), 6483 project: function project(t) { 6484 var i = Math.PI / 180, 6485 e = this.R, 6486 n = t.lat * i, 6487 o = this.R_MINOR / e, 6488 s = Math.sqrt(1 - o * o), 6489 r = s * Math.sin(n), 6490 a = Math.tan(Math.PI / 4 - n / 2) / Math.pow((1 - r) / (1 + r), s / 2), 6491 n = -e * Math.log(Math.max(a, 1e-10)); 6492 return new k(t.lng * i * e, n); 6493 }, 6494 unproject: function unproject(t) { 6495 for (var i, e = 180 / Math.PI, n = this.R, o = this.R_MINOR / n, s = Math.sqrt(1 - o * o), r = Math.exp(-t.y / n), a = Math.PI / 2 - 2 * Math.atan(r), h = 0, u = .1; h < 15 && 1e-7 < Math.abs(u); h++) { 6496 i = s * Math.sin(a), i = Math.pow((1 - i) / (1 + i), s / 2), a += u = Math.PI / 2 - 2 * Math.atan(r * i) - a; 6497 } 6498 6499 return new D(a * e, t.x * e / n); 6500 } 6501 }, 6502 Pe = { 6503 LonLat: xe, 6504 Mercator: we, 6505 SphericalMercator: V 6506 }, 6507 Le = h({}, F, { 6508 code: "EPSG:3395", 6509 projection: we, 6510 transformation: G(ve = .5 / (Math.PI * we.R), .5, -ve, .5) 6511 }), 6512 be = h({}, F, { 6513 code: "EPSG:4326", 6514 projection: xe, 6515 transformation: G(1 / 180, 1, -1 / 180, .5) 6516 }), 6517 Te = h({}, H, { 6518 projection: xe, 6519 transformation: G(1, 0, -1, 0), 6520 scale: function scale(t) { 6521 return Math.pow(2, t); 6522 }, 6523 zoom: function zoom(t) { 6524 return Math.log(t) / Math.LN2; 6525 }, 6526 distance: function distance(t, i) { 6527 var e = i.lng - t.lng, 6528 n = i.lat - t.lat; 6529 return Math.sqrt(e * e + n * n); 6530 }, 6531 infinite: !0 6532 }); 6533 H.Earth = F, H.EPSG3395 = Le, H.EPSG3857 = Y, H.EPSG900913 = X, H.EPSG4326 = be, H.Simple = Te; 6534 var Me = E.extend({ 6535 options: { 6536 pane: "overlayPane", 6537 attribution: null, 6538 bubblingMouseEvents: !0 6539 }, 6540 addTo: function addTo(t) { 6541 return t.addLayer(this), this; 6542 }, 6543 remove: function remove() { 6544 return this.removeFrom(this._map || this._mapToAdd); 6545 }, 6546 removeFrom: function removeFrom(t) { 6547 return t && t.removeLayer(this), this; 6548 }, 6549 getPane: function getPane(t) { 6550 return this._map.getPane(t ? this.options[t] || t : this.options.pane); 6551 }, 6552 addInteractiveTarget: function addInteractiveTarget(t) { 6553 return this._map._targets[m(t)] = this; 6554 }, 6555 removeInteractiveTarget: function removeInteractiveTarget(t) { 6556 return delete this._map._targets[m(t)], this; 6557 }, 6558 getAttribution: function getAttribution() { 6559 return this.options.attribution; 6560 }, 6561 _layerAdd: function _layerAdd(t) { 6562 var i, 6563 e = t.target; 6564 e.hasLayer(this) && (this._map = e, this._zoomAnimated = e._zoomAnimated, this.getEvents && (i = this.getEvents(), e.on(i, this), this.once("remove", function () { 6565 e.off(i, this); 6566 }, this)), this.onAdd(e), this.getAttribution && e.attributionControl && e.attributionControl.addAttribution(this.getAttribution()), this.fire("add"), e.fire("layeradd", { 6567 layer: this 6568 })); 6569 } 6570 }); 6571 Ki.include({ 6572 addLayer: function addLayer(t) { 6573 if (!t._layerAdd) throw new Error("The provided object is not a Layer."); 6574 var i = m(t); 6575 return this._layers[i] || ((this._layers[i] = t)._mapToAdd = this, t.beforeAdd && t.beforeAdd(this), this.whenReady(t._layerAdd, t)), this; 6576 }, 6577 removeLayer: function removeLayer(t) { 6578 var i = m(t); 6579 return this._layers[i] && (this._loaded && t.onRemove(this), t.getAttribution && this.attributionControl && this.attributionControl.removeAttribution(t.getAttribution()), delete this._layers[i], this._loaded && (this.fire("layerremove", { 6580 layer: t 6581 }), t.fire("remove")), t._map = t._mapToAdd = null), this; 6582 }, 6583 hasLayer: function hasLayer(t) { 6584 return !!t && m(t) in this._layers; 6585 }, 6586 eachLayer: function eachLayer(t, i) { 6587 for (var e in this._layers) { 6588 t.call(i, this._layers[e]); 6589 } 6590 6591 return this; 6592 }, 6593 _addLayers: function _addLayers(t) { 6594 for (var i = 0, e = (t = t ? g(t) ? t : [t] : []).length; i < e; i++) { 6595 this.addLayer(t[i]); 6596 } 6597 },
6598 _addZoomLimit: function _addZoomLimit(t) { 6599 !isNaN(t.options.maxZoom) && isNaN(t.options.minZoom) || (this._zoomBoundLayers[m(t)] = t, this._updateZoomLevels()); 6600 }, 6601 _removeZoomLimit: function _removeZoomLimit(t) { 6602 var i = m(t); 6603 this._zoomBoundLayers[i] && (delete this._zoomBoundLayers[i], this._updateZoomLevels()); 6604 }, 6605 _updateZoomLevels: function _updateZoomLevels() { 6606 var t = 1 / 0, 6607 i = -1 / 0, 6608 e = this._getZoomSpan(); 6609 6610 for (var n in this._zoomBoundLayers) { 6611 var o = this._zoomBoundLayers[n].options, 6612 t = void 0 === o.minZoom ? t : Math.min(t, o.minZoom), 6613 i = void 0 === o.maxZoom ? i : Math.max(i, o.maxZoom); 6614 } 6615 6616 this._layersMaxZoom = i === -1 / 0 ? void 0 : i, this._layersMinZoom = t === 1 / 0 ? void 0 : t, e !== this._getZoomSpan() && this.fire("zoomlevelschange"), void 0 === this.options.maxZoom && this._layersMaxZoom && this.getZoom() > this._layersMaxZoom && this.setZoom(this._layersMaxZoom), void 0 === this.options.minZoom && this._layersMinZoom && this.getZoom() < this._layersMinZoom && this.setZoom(this._layersMinZoom); 6617 } 6618 }); 6619 var ze = Me.extend({ 6620 initialize: function initialize(t, i) { 6621 var e, n; 6622 if (c(this, i), this._layers = {}, t) for (e = 0, n = t.length; e < n; e++) { 6623 this.addLayer(t[e]); 6624 } 6625 }, 6626 addLayer: function addLayer(t) { 6627 var i = this.getLayerId(t); 6628 return this._layers[i] = t, this._map && this._map.addLayer(t), this; 6629 }, 6630 removeLayer: function removeLayer(t) { 6631 var i = t in this._layers ? t : this.getLayerId(t); 6632 return this._map && this._layers[i] && this._map.removeLayer(this._layers[i]), delete this._layers[i], this; 6633 }, 6634 hasLayer: function hasLayer(t) { 6635 return !!t && ("number" == typeof t ? t : this.getLayerId(t)) in this._layers; 6636 }, 6637 clearLayers: function clearLayers() { 6638 return this.eachLayer(this.removeLayer, this); 6639 }, 6640 invoke: function invoke(t) { 6641 var i, 6642 e, 6643 n = Array.prototype.slice.call(arguments, 1); 6644 6645 for (i in this._layers) { 6646 (e = this._layers[i])[t] && e[t].apply(e, n); 6647 } 6648 6649 return this; 6650 }, 6651 onAdd: function onAdd(t) { 6652 this.eachLayer(t.addLayer, t); 6653 }, 6654 onRemove: function onRemove(t) { 6655 this.eachLayer(t.removeLayer, t); 6656 }, 6657 eachLayer: function eachLayer(t, i) { 6658 for (var e in this._layers) { 6659 t.call(i, this._layers[e]); 6660 } 6661 6662 return this; 6663 }, 6664 getLayer: function getLayer(t) { 6665 return this._layers[t]; 6666 }, 6667 getLayers: function getLayers() { 6668 var t = []; 6669 return this.eachLayer(t.push, t), t; 6670 }, 6671 setZIndex: function setZIndex(t) { 6672 return this.invoke("setZIndex", t); 6673 }, 6674 getLayerId: m 6675 }), 6676 Ce = ze.extend({ 6677 addLayer: function addLayer(t) { 6678 return this.hasLayer(t) ? this : (t.addEventParent(this), ze.prototype.addLayer.call(this, t), this.fire("layeradd", { 6679 layer: t 6680 })); 6681 }, 6682 removeLayer: function removeLayer(t) { 6683 return this.hasLayer(t) ? (t in this._layers && (t = this._layers[t]), t.removeEventParent(this), ze.prototype.removeLayer.call(this, t), this.fire("layerremove", { 6684 layer: t 6685 })) : this; 6686 }, 6687 setStyle: function setStyle(t) { 6688 return this.invoke("setStyle", t); 6689 }, 6690 bringToFront: function bringToFront() { 6691 return this.invoke("bringToFront"); 6692 }, 6693 bringToBack: function bringToBack() { 6694 return this.invoke("bringToBack"); 6695 }, 6696 getBounds: function getBounds() { 6697 var t = new R(); 6698 6699 for (var i in this._layers) { 6700 var e = this._layers[i]; 6701 t.extend(e.getBounds ? e.getBounds() : e.getLatLng()); 6702 } 6703 6704 return t; 6705 } 6706 }), 6707 Se = S.extend({ 6708 options: { 6709 popupAnchor: [0, 0], 6710 tooltipAnchor: [0, 0] 6711 }, 6712 initialize: function initialize(t) { 6713 c(this, t); 6714 }, 6715 createIcon: function createIcon(t) { 6716 return this._createIcon("icon", t); 6717 }, 6718 createShadow: function createShadow(t) { 6719 return this._createIcon("shadow", t); 6720 }, 6721 _createIcon: function _createIcon(t, i) { 6722 var e = this._getIconUrl(t); 6723 6724 if (!e) { 6725 if ("icon" === t) throw new Error("iconUrl not set in Icon options (see the docs)."); 6726 return null; 6727 } 6728 6729 var n = this._createImg(e, i && "IMG" === i.tagName ? i : null); 6730 6731 return this._setIconStyles(n, t), n; 6732 }, 6733 _setIconStyles: function _setIconStyles(t, i) { 6734 var e = this.options, 6735 n = e[i + "Size"]; 6736 "number" == typeof n && (n = [n, n]); 6737 var o = A(n),
6738 s = A("shadow" === i && e.shadowAnchor || e.iconAnchor || o && o.divideBy(2, !0)); 6739 t.className = "leaflet-marker-" + i + " " + (e.className || ""), s && (t.style.marginLeft = -s.x + "px", t.style.marginTop = -s.y + "px"), o && (t.style.width = o.x + "px", t.style.height = o.y + "px"); 6740 }, 6741 _createImg: function _createImg(t, i) { 6742 return (i = i || document.createElement("img")).src = t, i; 6743 }, 6744 _getIconUrl: function _getIconUrl(t) { 6745 return zt && this.options[t + "RetinaUrl"] || this.options[t + "Url"]; 6746 } 6747 }); 6748 var Ze = Se.extend({ 6749 options: { 6750 iconUrl: "marker-icon.png", 6751 iconRetinaUrl: "marker-icon-2x.png", 6752 shadowUrl: "marker-shadow.png", 6753 iconSize: [25, 41], 6754 iconAnchor: [12, 41], 6755 popupAnchor: [1, -34], 6756 tooltipAnchor: [16, -28], 6757 shadowSize: [41, 41] 6758 }, 6759 _getIconUrl: function _getIconUrl(t) { 6760 return Ze.imagePath || (Ze.imagePath = this._detectIconPath()), (this.options.imagePath || Ze.imagePath) + Se.prototype._getIconUrl.call(this, t); 6761 }, 6762 _detectIconPath: function _detectIconPath() { 6763 var t = si("div", "leaflet-default-icon-path", document.body), 6764 i = oi(t, "background-image") || oi(t, "backgroundImage"); 6765 return document.body.removeChild(t), i = null === i || 0 !== i.indexOf("url") ? "" : i.replace(/^url\(["']?/, "").replace(/marker-icon\.png["']?\)$/, ""); 6766 } 6767 }), 6768 Ee = ie.extend({ 6769 initialize: function initialize(t) { 6770 this._marker = t; 6771 }, 6772 addHooks: function addHooks() { 6773 var t = this._marker._icon; 6774 this._draggable || (this._draggable = new ae(t, t, !0)), this._draggable.on({ 6775 dragstart: this._onDragStart, 6776 predrag: this._onPreDrag, 6777 drag: this._onDrag, 6778 dragend: this._onDragEnd 6779 }, this).enable(), ci(t, "leaflet-marker-draggable"); 6780 }, 6781 removeHooks: function removeHooks() { 6782 this._draggable.off({ 6783 dragstart: this._onDragStart, 6784 predrag: this._onPreDrag, 6785 drag: this._onDrag, 6786 dragend: this._onDragEnd 6787 }, this).disable(), this._marker._icon && _i(this._marker._icon, "leaflet-marker-draggable"); 6788 }, 6789 moved: function moved() { 6790 return this._draggable && this._draggable._moved; 6791 }, 6792 _adjustPan: function _adjustPan(t) { 6793 var i, 6794 e = this._marker, 6795 n = e._map, 6796 o = this._marker.options.autoPanSpeed, 6797 s = this._marker.options.autoPanPadding, 6798 r = yi(e._icon), 6799 a = n.getPixelBounds(), 6800 h = n.getPixelOrigin(), 6801 u = O(a.min._subtract(h).add(s), a.max._subtract(h).subtract(s)); 6802 u.contains(r) || (i = A((Math.max(u.max.x, r.x) - u.max.x) / (a.max.x - u.max.x) - (Math.min(u.min.x, r.x) - u.min.x) / (a.min.x - u.min.x), (Math.max(u.max.y, r.y) - u.max.y) / (a.max.y - u.max.y) - (Math.min(u.min.y, r.y) - u.min.y) / (a.min.y - u.min.y)).multiplyBy(o), n.panBy(i, { 6803 animate: !1 6804 }), this._draggable._newPos._add(i), this._draggable._startPos._add(i), vi(e._icon, this._draggable._newPos), this._onDrag(t), this._panRequest = M(this._adjustPan.bind(this, t))); 6805 }, 6806 _onDragStart: function _onDragStart() { 6807 this._oldLatLng = this._marker.getLatLng(), this._marker.closePopup && this._marker.closePopup(), this._marker.fire("movestart").fire("dragstart"); 6808 }, 6809 _onPreDrag: function _onPreDrag(t) { 6810 this._marker.options.autoPan && (z(this._panRequest), this._panRequest = M(this._adjustPan.bind(this, t))); 6811 }, 6812 _onDrag: function _onDrag(t) { 6813 var i = this._marker, 6814 e = i._shadow, 6815 n = yi(i._icon), 6816 o = i._map.layerPointToLatLng(n); 6817 6818 e && vi(e, n), i._latlng = o, t.latlng = o, t.oldLatLng = this._oldLatLng, i.fire("move", t).fire("drag", t); 6819 }, 6820 _onDragEnd: function _onDragEnd(t) { 6821 z(this._panRequest), delete this._oldLatLng, this._marker.fire("moveend").fire("dragend", t); 6822 } 6823 }), 6824 ke = Me.extend({ 6825 options: { 6826 icon: new Ze(), 6827 interactive: !0, 6828 keyboard: !0, 6829 title: "", 6830 alt: "", 6831 zIndexOffset: 0, 6832 opacity: 1, 6833 riseOnHover: !1, 6834 riseOffset: 250, 6835 pane: "markerPane", 6836 shadowPane: "shadowPane", 6837 bubblingMouseEvents: !1, 6838 draggable: !1, 6839 autoPan: !1, 6840 autoPanPadding: [50, 50], 6841 autoPanSpeed: 10 6842 }, 6843 initialize: function initialize(t, i) { 6844 c(this, i), this._latlng = j(t); 6845 }, 6846 onAdd: function onAdd(t) { 6847 this._zoomAnimated = this._zoomAnimated && t.options.markerZoomAnimation, this._zoomAnimated && t.on("zoomanim", this._animateZoom, this), this._initIcon(), this.update(); 6848 }, 6849 onRemove: function onRemove(t) { 6850 this.dragging && this.dragging.enabled() && (this.options.draggable = !0, this.dragging.removeHooks()), delete this.dragging, this._zoomAnimated && t.off("zoomanim", this._animateZoom, this), this._removeIcon(), this._removeShadow(); 6851 }, 6852 getEvents: function getEvents() { 6853 return { 6854 zoom: this.update, 6855 viewreset: this.update 6856 }; 6857 }, 6858 getLatLng: function getLatLng() { 6859 return this._latlng; 6860 },
6861 setLatLng: function setLatLng(t) { 6862 var i = this._latlng; 6863 return this._latlng = j(t), this.update(), this.fire("move", { 6864 oldLatLng: i, 6865 latlng: this._latlng 6866 }); 6867 }, 6868 setZIndexOffset: function setZIndexOffset(t) { 6869 return this.options.zIndexOffset = t, this.update(); 6870 }, 6871 getIcon: function getIcon() { 6872 return this.options.icon; 6873 }, 6874 setIcon: function setIcon(t) { 6875 return this.options.icon = t, this._map && (this._initIcon(), this.update()), this._popup && this.bindPopup(this._popup, this._popup.options), this; 6876 }, 6877 getElement: function getElement() { 6878 return this._icon; 6879 }, 6880 update: function update() { 6881 var t; 6882 return this._icon && this._map && (t = this._map.latLngToLayerPoint(this._latlng).round(), this._setPos(t)), this; 6883 }, 6884 _initIcon: function _initIcon() { 6885 var t = this.options, 6886 i = "leaflet-zoom-" + (this._zoomAnimated ? "animated" : "hide"), 6887 e = t.icon.createIcon(this._icon), 6888 n = !1; 6889 e !== this._icon && (this._icon && this._removeIcon(), n = !0, t.title && (e.title = t.title), "IMG" === e.tagName && (e.alt = t.alt || "")), ci(e, i), t.keyboard && (e.tabIndex = "0"), this._icon = e, t.riseOnHover && this.on({ 6890 mouseover: this._bringToFront, 6891 mouseout: this._resetZIndex 6892 }); 6893 var o = t.icon.createShadow(this._shadow), 6894 s = !1; 6895 o !== this._shadow && (this._removeShadow(), s = !0), o && (ci(o, i), o.alt = ""), this._shadow = o, t.opacity < 1 && this._updateOpacity(), n && this.getPane().appendChild(this._icon), this._initInteraction(), o && s && this.getPane(t.shadowPane).appendChild(this._shadow); 6896 }, 6897 _removeIcon: function _removeIcon() { 6898 this.options.riseOnHover && this.off({ 6899 mouseover: this._bringToFront, 6900 mouseout: this._resetZIndex 6901 }), ri(this._icon), this.removeInteractiveTarget(this._icon), this._icon = null; 6902 }, 6903 _removeShadow: function _removeShadow() { 6904 this._shadow && ri(this._shadow), this._shadow = null; 6905 }, 6906 _setPos: function _setPos(t) { 6907 this._icon && vi(this._icon, t), this._shadow && vi(this._shadow, t), this._zIndex = t.y + this.options.zIndexOffset, this._resetZIndex(); 6908 }, 6909 _updateZIndex: function _updateZIndex(t) { 6910 this._icon && (this._icon.style.zIndex = this._zIndex + t); 6911 }, 6912 _animateZoom: function _animateZoom(t) { 6913 var i = this._map._latLngToNewLayerPoint(this._latlng, t.zoom, t.center).round(); 6914 6915 this._setPos(i); 6916 }, 6917 _initInteraction: function _initInteraction() { 6918 var t; 6919 this.options.interactive && (ci(this._icon, "leaflet-interactive"), this.addInteractiveTarget(this._icon), Ee && (t = this.options.draggable, this.dragging && (t = this.dragging.enabled(), this.dragging.disable()), this.dragging = new Ee(this), t && this.dragging.enable())); 6920 }, 6921 setOpacity: function setOpacity(t) { 6922 return this.options.opacity = t, this._map && this._updateOpacity(), this; 6923 }, 6924 _updateOpacity: function _updateOpacity() { 6925 var t = this.options.opacity; 6926 this._icon && mi(this._icon, t), this._shadow && mi(this._shadow, t); 6927 }, 6928 _bringToFront: function _bringToFront() { 6929 this._updateZIndex(this.options.riseOffset); 6930 }, 6931 _resetZIndex: function _resetZIndex() { 6932 this._updateZIndex(0); 6933 }, 6934 _getPopupAnchor: function _getPopupAnchor() { 6935 return this.options.icon.options.popupAnchor; 6936 }, 6937 _getTooltipAnchor: function _getTooltipAnchor() { 6938 return this.options.icon.options.tooltipAnchor; 6939 } 6940 }); 6941 var Be = Me.extend({ 6942 options: { 6943 stroke: !0, 6944 color: "#3388ff", 6945 weight: 3, 6946 opacity: 1, 6947 lineCap: "round", 6948 lineJoin: "round", 6949 dashArray: null, 6950 dashOffset: null, 6951 fill: !1, 6952 fillColor: null, 6953 fillOpacity: .2, 6954 fillRule: "evenodd", 6955 interactive: !0, 6956 bubblingMouseEvents: !0 6957 }, 6958 beforeAdd: function beforeAdd(t) { 6959 this._renderer = t.getRenderer(this); 6960 }, 6961 onAdd: function onAdd() { 6962 this._renderer._initPath(this), this._reset(), this._renderer._addPath(this); 6963 }, 6964 onRemove: function onRemove() { 6965 this._renderer._removePath(this); 6966 }, 6967 redraw: function redraw() { 6968 return this._map && this._renderer._updatePath(this), this; 6969 }, 6970 setStyle: function setStyle(t) { 6971 return c(this, t), this._renderer && (this._renderer._updateStyle(this), this.options.stroke && t && Object.prototype.hasOwnProperty.call(t, "weight") && this._updateBounds()), this; 6972 }, 6973 bringToFront: function bringToFront() { 6974 return this._renderer && this._renderer._bringToFront(this), this; 6975 }, 6976 bringToBack: function bringToBack() { 6977 return this._renderer && this._renderer._bringToBack(this), this; 6978 }, 6979 getElement: function getElement() { 6980 return this._path; 6981 }, 6982 _reset: function _reset() { 6983 this._project(), this._update(); 6984 }, 6985 _clickTolerance: function _clickTolerance() { 6986 return (this.options.stroke ? this.options.weight / 2 : 0) + this._renderer.options.tolerance; 6987 } 6988 }), 6989 Ae = Be.extend({ 6990 options: { 6991 fill: !0, 6992 radius: 10 6993 }, 6994 initialize: function initialize(t, i) { 6995 c(this, i), this._latlng = j(t), this._radius = this.options.radius; 6996 },
6997 setLatLng: function setLatLng(t) { 6998 var i = this._latlng; 6999 return this._latlng = j(t), this.redraw(), this.fire("move", { 7000 oldLatLng: i, 7001 latlng: this._latlng 7002 }); 7003 }, 7004 getLatLng: function getLatLng() { 7005 return this._latlng; 7006 }, 7007 setRadius: function setRadius(t) { 7008 return this.options.radius = this._radius = t, this.redraw(); 7009 }, 7010 getRadius: function getRadius() { 7011 return this._radius; 7012 }, 7013 setStyle: function setStyle(t) { 7014 var i = t && t.radius || this._radius; 7015 return Be.prototype.setStyle.call(this, t), this.setRadius(i), this; 7016 }, 7017 _project: function _project() { 7018 this._point = this._map.latLngToLayerPoint(this._latlng), this._updateBounds(); 7019 }, 7020 _updateBounds: function _updateBounds() { 7021 var t = this._radius, 7022 i = this._radiusY || t, 7023 e = this._clickTolerance(), 7024 n = [t + e, i + e]; 7025 7026 this._pxBounds = new I(this._point.subtract(n), this._point.add(n)); 7027 }, 7028 _update: function _update() { 7029 this._map && this._updatePath(); 7030 }, 7031 _updatePath: function _updatePath() { 7032 this._renderer._updateCircle(this); 7033 }, 7034 _empty: function _empty() { 7035 return this._radius && !this._renderer._bounds.intersects(this._pxBounds); 7036 }, 7037 _containsPoint: function _containsPoint(t) { 7038 return t.distanceTo(this._point) <= this._radius + this._clickTolerance(); 7039 } 7040 }); 7041 var Ie = Ae.extend({ 7042 initialize: function initialize(t, i, e) { 7043 if ("number" == typeof i && (i = h({}, e, { 7044 radius: i 7045 })), c(this, i), this._latlng = j(t), isNaN(this.options.radius)) throw new Error("Circle radius cannot be NaN"); 7046 this._mRadius = this.options.radius; 7047 }, 7048 setRadius: function setRadius(t) { 7049 return this._mRadius = t, this.redraw(); 7050 }, 7051 getRadius: function getRadius() { 7052 return this._mRadius; 7053 }, 7054 getBounds: function getBounds() { 7055 var t = [this._radius, this._radiusY || this._radius]; 7056 return new R(this._map.layerPointToLatLng(this._point.subtract(t)), this._map.layerPointToLatLng(this._point.add(t))); 7057 }, 7058 setStyle: Be.prototype.setStyle, 7059 _project: function _project() { 7060 var t, 7061 i, 7062 e, 7063 n, 7064 o, 7065 s, 7066 r, 7067 a, 7068 h = this._latlng.lng, 7069 u = this._latlng.lat, 7070 l = this._map, 7071 c = l.options.crs; 7072 c.distance === F.distance ? (t = Math.PI / 180, i = this._mRadius / F.R / t, e = l.project([u + i, h]), n = l.project([u - i, h]), o = e.add(n).divideBy(2), s = l.unproject(o).lat, r = Math.acos((Math.cos(i * t) - Math.sin(u * t) * Math.sin(s * t)) / (Math.cos(u * t) * Math.cos(s * t))) / t, !isNaN(r) && 0 !== r || (r = i / Math.cos(Math.PI / 180 * u)), this._point = o.subtract(l.getPixelOrigin()), this._radius = isNaN(r) ? 0 : o.x - l.project([s, h - r]).x, this._radiusY = o.y - e.y) : (a = c.unproject(c.project(this._latlng).subtract([this._mRadius, 0])), this._point = l.latLngToLayerPoint(this._latlng), this._radius = this._point.x - l.latLngToLayerPoint(a).x), this._updateBounds(); 7073 } 7074 }); 7075 var Oe = Be.extend({ 7076 options: { 7077 smoothFactor: 1, 7078 noClip: !1 7079 }, 7080 initialize: function initialize(t, i) { 7081 c(this, i), this._setLatLngs(t); 7082 }, 7083 getLatLngs: function getLatLngs() { 7084 return this._latlngs; 7085 }, 7086 setLatLngs: function setLatLngs(t) { 7087 return this._setLatLngs(t), this.redraw(); 7088 }, 7089 isEmpty: function isEmpty() { 7090 return !this._latlngs.length; 7091 }, 7092 closestLayerPoint: function closestLayerPoint(t) { 7093 for (var i, e, n = 1 / 0, o = null, s = de, r = 0, a = this._parts.length; r < a; r++) { 7094 for (var h = this._parts[r], u = 1, l = h.length; u < l; u++) { 7095 var c = s(t, i = h[u - 1], e = h[u], !0); 7096 c < n && (n = c, o = s(t, i, e)); 7097 } 7098 } 7099 7100 return o && (o.distance = Math.sqrt(n)), o; 7101 }, 7102 getCenter: function getCenter() {
7103 if (!this._map) throw new Error("Must add layer to map before using getCenter()"); 7104 var t, 7105 i, 7106 e, 7107 n, 7108 o, 7109 s, 7110 r, 7111 a = this._rings[0], 7112 h = a.length; 7113 if (!h) return null; 7114 7115 for (i = t = 0; t < h - 1; t++) { 7116 i += a[t].distanceTo(a[t + 1]) / 2; 7117 } 7118 7119 if (0 === i) return this._map.layerPointToLatLng(a[0]); 7120 7121 for (n = t = 0; t < h - 1; t++) { 7122 if (o = a[t], s = a[t + 1], i < (n += e = o.distanceTo(s))) return r = (n - i) / e, this._map.layerPointToLatLng([s.x - r * (s.x - o.x), s.y - r * (s.y - o.y)]); 7123 } 7124 }, 7125 getBounds: function getBounds() { 7126 return this._bounds; 7127 }, 7128 addLatLng: function addLatLng(t, i) { 7129 return i = i || this._defaultShape(), t = j(t), i.push(t), this._bounds.extend(t), this.redraw(); 7130 }, 7131 _setLatLngs: function _setLatLngs(t) { 7132 this._bounds = new R(), this._latlngs = this._convertLatLngs(t); 7133 }, 7134 _defaultShape: function _defaultShape() { 7135 return pe(this._latlngs) ? this._latlngs : this._latlngs[0]; 7136 }, 7137 _convertLatLngs: function _convertLatLngs(t) { 7138 for (var i = [], e = pe(t), n = 0, o = t.length; n < o; n++) { 7139 e ? (i[n] = j(t[n]), this._bounds.extend(i[n])) : i[n] = this._convertLatLngs(t[n]); 7140 } 7141 7142 return i; 7143 }, 7144 _project: function _project() { 7145 var t = new I(); 7146 this._rings = [], this._projectLatlngs(this._latlngs, this._rings, t), this._bounds.isValid() && t.isValid() && (this._rawPxBounds = t, this._updateBounds()); 7147 }, 7148 _updateBounds: function _updateBounds() { 7149 var t = this._clickTolerance(), 7150 i = new k(t, t); 7151 7152 this._pxBounds = new I([this._rawPxBounds.min.subtract(i), this._rawPxBounds.max.add(i)]); 7153 }, 7154 _projectLatlngs: function _projectLatlngs(t, i, e) { 7155 var n, 7156 o, 7157 s = t[0] instanceof D, 7158 r = t.length; 7159 7160 if (s) { 7161 for (o = [], n = 0; n < r; n++) { 7162 o[n] = this._map.latLngToLayerPoint(t[n]), e.extend(o[n]); 7163 } 7164 7165 i.push(o); 7166 } else for (n = 0; n < r; n++) { 7167 this._projectLatlngs(t[n], i, e); 7168 } 7169 }, 7170 _clipPoints: function _clipPoints() { 7171 var t = this._renderer._bounds; 7172 if (this._parts = [], this._pxBounds && this._pxBounds.intersects(t)) if (this.options.noClip) this._parts = this._rings;else for (var i, e, n, o, s = this._parts, r = 0, a = 0, h = this._rings.length; r < h; r++) { 7173 for (i = 0, e = (o = this._rings[r]).length; i < e - 1; i++) { 7174 (n = le(o[i], o[i + 1], t, i, !0)) && (s[a] = s[a] || [], s[a].push(n[0]), n[1] === o[i + 1] && i !== e - 2 || (s[a].push(n[1]), a++)); 7175 } 7176 } 7177 }, 7178 _simplifyPoints: function _simplifyPoints() { 7179 for (var t = this._parts, i = this.options.smoothFactor, e = 0, n = t.length; e < n; e++) { 7180 t[e] = he(t[e], i); 7181 } 7182 }, 7183 _update: function _update() { 7184 this._map && (this._clipPoints(), this._simplifyPoints(), this._updatePath()); 7185 }, 7186 _updatePath: function _updatePath() { 7187 this._renderer._updatePoly(this); 7188 }, 7189 _containsPoint: function _containsPoint(t, i) { 7190 var e, 7191 n, 7192 o, 7193 s, 7194 r, 7195 a, 7196 h = this._clickTolerance(); 7197 7198 if (!this._pxBounds || !this._pxBounds.contains(t)) return !1; 7199 7200 for (e = 0, s = this._parts.length; e < s; e++) { 7201 for (n = 0, o = (r = (a = this._parts[e]).length) - 1; n < r; o = n++) { 7202 if ((i || 0 !== n) && ue(t, a[o], a[n]) <= h) return !0; 7203 } 7204 } 7205 7206 return !1; 7207 } 7208 }); 7209 Oe._flat = me; 7210 var Re = Oe.extend({ 7211 options: { 7212 fill: !0 7213 }, 7214 isEmpty: function isEmpty() { 7215 return !this._latlngs.length || !this._latlngs[0].length; 7216 }, 7217 getCenter: function getCenter() {
7218 if (!this._map) throw new Error("Must add layer to map before using getCenter()"); 7219 var t, 7220 i, 7221 e, 7222 n, 7223 o, 7224 s, 7225 r, 7226 a, 7227 h, 7228 u = this._rings[0], 7229 l = u.length; 7230 if (!l) return null; 7231 7232 for (t = s = r = a = 0, i = l - 1; t < l; i = t++) { 7233 e = u[t], n = u[i], o = e.y * n.x - n.y * e.x, r += (e.x + n.x) * o, a += (e.y + n.y) * o, s += 3 * o; 7234 } 7235 7236 return h = 0 === s ? u[0] : [r / s, a / s], this._map.layerPointToLatLng(h); 7237 }, 7238 _convertLatLngs: function _convertLatLngs(t) { 7239 var i = Oe.prototype._convertLatLngs.call(this, t), 7240 e = i.length; 7241 7242 return 2 <= e && i[0] instanceof D && i[0].equals(i[e - 1]) && i.pop(), i; 7243 }, 7244 _setLatLngs: function _setLatLngs(t) { 7245 Oe.prototype._setLatLngs.call(this, t), pe(this._latlngs) && (this._latlngs = [this._latlngs]); 7246 }, 7247 _defaultShape: function _defaultShape() { 7248 return pe(this._latlngs[0]) ? this._latlngs[0] : this._latlngs[0][0]; 7249 }, 7250 _clipPoints: function _clipPoints() { 7251 var t = this._renderer._bounds, 7252 i = this.options.weight, 7253 e = new k(i, i), 7254 t = new I(t.min.subtract(e), t.max.add(e)); 7255 if (this._parts = [], this._pxBounds && this._pxBounds.intersects(t)) if (this.options.noClip) this._parts = this._rings;else for (var n, o = 0, s = this._rings.length; o < s; o++) { 7256 (n = ge(this._rings[o], t, !0)).length && this._parts.push(n); 7257 } 7258 }, 7259 _updatePath: function _updatePath() { 7260 this._renderer._updatePoly(this, !0); 7261 }, 7262 _containsPoint: function _containsPoint(t) { 7263 var i, 7264 e, 7265 n, 7266 o, 7267 s, 7268 r, 7269 a, 7270 h, 7271 u = !1; 7272 if (!this._pxBounds || !this._pxBounds.contains(t)) return !1; 7273 7274 for (o = 0, a = this._parts.length; o < a; o++) { 7275 for (s = 0, r = (h = (i = this._parts[o]).length) - 1; s < h; r = s++) { 7276 e = i[s], n = i[r], e.y > t.y != n.y > t.y && t.x < (n.x - e.x) * (t.y - e.y) / (n.y - e.y) + e.x && (u = !u); 7277 } 7278 } 7279 7280 return u || Oe.prototype._containsPoint.call(this, t, !0); 7281 } 7282 }); 7283 var Ne = Ce.extend({ 7284 initialize: function initialize(t, i) { 7285 c(this, i), this._layers = {}, t && this.addData(t); 7286 }, 7287 addData: function addData(t) { 7288 var i, 7289 e, 7290 n, 7291 o = g(t) ? t : t.features; 7292 7293 if (o) { 7294 for (i = 0, e = o.length; i < e; i++) { 7295 ((n = o[i]).geometries || n.geometry || n.features || n.coordinates) && this.addData(n); 7296 } 7297 7298 return this; 7299 } 7300 7301 var s = this.options; 7302 if (s.filter && !s.filter(t)) return this; 7303 var r = De(t, s); 7304 return r ? (r.feature = qe(t), r.defaultOptions = r.options, this.resetStyle(r), s.onEachFeature && s.onEachFeature(t, r), this.addLayer(r)) : this; 7305 }, 7306 resetStyle: function resetStyle(t) { 7307 return void 0 === t ? this.eachLayer(this.resetStyle, this) : (t.options = h({}, t.defaultOptions), this._setLayerStyle(t, this.options.style), this); 7308 }, 7309 setStyle: function setStyle(i) { 7310 return this.eachLayer(function (t) { 7311 this._setLayerStyle(t, i); 7312 }, this); 7313 }, 7314 _setLayerStyle: function _setLayerStyle(t, i) { 7315 t.setStyle && ("function" == typeof i && (i = i(t.feature)), t.setStyle(i)); 7316 } 7317 }); 7318 7319 function De(t, i) { 7320 var e, 7321 n, 7322 o, 7323 s, 7324 r = "Feature" === t.type ? t.geometry : t, 7325 a = r ? r.coordinates : null, 7326 h = [], 7327 u = i && i.pointToLayer, 7328 l = i && i.coordsToLatLng || We; 7329 if (!a && !r) return null; 7330 7331 switch (r.type) { 7332 case "Point": 7333 return je(u, t, e = l(a), i); 7334 7335 case "MultiPoint": 7336 for (o = 0, s = a.length; o < s; o++) { 7337 e = l(a[o]), h.push(je(u, t, e, i)); 7338 } 7339 7340 return new Ce(h); 7341 7342 case "LineString": 7343 case "MultiLineString": 7344 return n = He(a, "LineString" === r.type ? 0 : 1, l), new Oe(n, i); 7345 7346 case "Polygon": 7347 case "MultiPolygon": 7348 return n = He(a, "Polygon" === r.type ? 1 : 2, l), new Re(n, i); 7349 7350 case "GeometryCollection": 7351 for (o = 0, s = r.geometries.length; o < s; o++) { 7352 var c = De({ 7353 geometry: r.geometries[o], 7354 type: "Feature", 7355 properties: t.properties 7356 }, i); 7357 c && h.push(c); 7358 } 7359 7360 return new Ce(h); 7361 7362 default: 7363 throw new Error("Invalid GeoJSON object."); 7364 } 7365 } 7366 7367 function je(t, i, e, n) { 7368 return t ? t(i, e) : new ke(e, n && n.markersInheritOptions && n); 7369 } 7370 7371 function We(t) { 7372 return new D(t[1], t[0], t[2]); 7373 } 7374 7375 function He(t, i, e) { 7376 for (var n, o = [], s = 0, r = t.length; s < r; s++) { 7377 n = i ? He(t[s], i - 1, e) : (e || We)(t[s]), o.push(n); 7378 } 7379 7380 return o; 7381 } 7382 7383 function Fe(t, i) { 7384 return i = "number" == typeof i ? i : 6, void 0 !== t.alt ? [r(t.lng, i), r(t.lat, i), r(t.alt, i)] : [r(t.lng, i), r(t.lat, i)]; 7385 } 7386 7387 function Ue(t, i, e, n) { 7388 for (var o = [], s = 0, r = t.length; s < r; s++) { 7389 o.push(i ? Ue(t[s], i - 1, e, n) : Fe(t[s], n)); 7390 } 7391 7392 return !i && e && o.push(o[0]), o; 7393 } 7394 7395 function Ve(t, i) { 7396 return t.feature ? h({}, t.feature, { 7397 geometry: i 7398 }) : qe(i); 7399 } 7400 7401 function qe(t) { 7402 return "Feature" === t.type || "FeatureCollection" === t.type ? t : { 7403 type: "Feature", 7404 properties: {}, 7405 geometry: t 7406 }; 7407 } 7408 7409 var Ge = { 7410 toGeoJSON: function toGeoJSON(t) { 7411 return Ve(this, { 7412 type: "Point", 7413 coordinates: Fe(this.getLatLng(), t) 7414 }); 7415 } 7416 }; 7417 7418 function Ke(t, i) { 7419 return new Ne(t, i); 7420 } 7421 7422 ke.include(Ge), Ie.include(Ge), Ae.include(Ge), Oe.include({ 7423 toGeoJSON: function toGeoJSON(t) { 7424 var i = !pe(this._latlngs); 7425 return Ve(this, { 7426 type: (i ? "Multi" : "") + "LineString", 7427 coordinates: Ue(this._latlngs, i ? 1 : 0, !1, t) 7428 }); 7429 } 7430 }), Re.include({ 7431 toGeoJSON: function toGeoJSON(t) { 7432 var i = !pe(this._latlngs), 7433 e = i && !pe(this._latlngs[0]), 7434 n = Ue(this._latlngs, e ? 2 : i ? 1 : 0, !0, t); 7435 return i || (n = [n]), Ve(this, { 7436 type: (e ? "Multi" : "") + "Polygon", 7437 coordinates: n 7438 }); 7439 } 7440 }), ze.include({ 7441 toMultiPoint: function toMultiPoint(i) { 7442 var e = []; 7443 return this.eachLayer(function (t) { 7444 e.push(t.toGeoJSON(i).geometry.coordinates); 7445 }), Ve(this, { 7446 type: "MultiPoint", 7447 coordinates: e 7448 }); 7449 }, 7450 toGeoJSON: function toGeoJSON(n) { 7451 var t = this.feature && this.feature.geometry && this.feature.geometry.type; 7452 if ("MultiPoint" === t) return this.toMultiPoint(n); 7453 var o = "GeometryCollection" === t, 7454 s = []; 7455 return this.eachLayer(function (t) { 7456 var i, e; 7457 t.toGeoJSON && (i = t.toGeoJSON(n), o ? s.push(i.geometry) : "FeatureCollection" === (e = qe(i)).type ? s.push.apply(s, e.features) : s.push(e)); 7458 }), o ? Ve(this, { 7459 geometries: s, 7460 type: "GeometryCollection" 7461 }) : { 7462 type: "FeatureCollection", 7463 features: s 7464 }; 7465 } 7466 }); 7467 var Ye = Ke, 7468 Xe = Me.extend({ 7469 options: { 7470 opacity: 1, 7471 alt: "", 7472 interactive: !1, 7473 crossOrigin: !1, 7474 errorOverlayUrl: "", 7475 zIndex: 1, 7476 className: "" 7477 }, 7478 initialize: function initialize(t, i, e) { 7479 this._url = t, this._bounds = N(i), c(this, e); 7480 }, 7481 onAdd: function onAdd() { 7482 this._image || (this._initImage(), this.options.opacity < 1 && this._updateOpacity()), this.options.interactive && (ci(this._image, "leaflet-interactive"), this.addInteractiveTarget(this._image)), this.getPane().appendChild(this._image), this._reset(); 7483 }, 7484 onRemove: function onRemove() { 7485 ri(this._image), this.options.interactive && this.removeInteractiveTarget(this._image); 7486 }, 7487 setOpacity: function setOpacity(t) { 7488 return this.options.opacity = t, this._image && this._updateOpacity(), this; 7489 }, 7490 setStyle: function setStyle(t) { 7491 return t.opacity && this.setOpacity(t.opacity), this; 7492 }, 7493 bringToFront: function bringToFront() { 7494 return this._map && hi(this._image), this; 7495 }, 7496 bringToBack: function bringToBack() { 7497 return this._map && ui(this._image), this; 7498 }, 7499 setUrl: function setUrl(t) { 7500 return this._url = t, this._image && (this._image.src = t), this; 7501 }, 7502 setBounds: function setBounds(t) { 7503 return this._bounds = N(t), this._map && this._reset(), this; 7504 }, 7505 getEvents: function getEvents() { 7506 var t = { 7507 zoom: this._reset, 7508 viewreset: this._reset 7509 }; 7510 return this._zoomAnimated && (t.zoomanim = this._animateZoom), t; 7511 }, 7512 setZIndex: function setZIndex(t) { 7513 return this.options.zIndex = t, this._updateZIndex(), this; 7514 }, 7515 getBounds: function getBounds() { 7516 return this._bounds; 7517 }, 7518 getElement: function getElement() { 7519 return this._image; 7520 }, 7521 _initImage: function _initImage() { 7522 var t = "IMG" === this._url.tagName, 7523 i = this._image = t ? this._url : si("img"); 7524 ci(i, "leaflet-image-layer"), this._zoomAnimated && ci(i, "leaflet-zoom-animated"), this.options.className && ci(i, this.options.className), i.onselectstart = a, i.onmousemove = a, i.onload = p(this.fire, this, "load"), i.onerror = p(this._overlayOnError, this, "error"), !this.options.crossOrigin && "" !== this.options.crossOrigin || (i.crossOrigin = !0 === this.options.crossOrigin ? "" : this.options.crossOrigin), this.options.zIndex && this._updateZIndex(), t ? this._url = i.src : (i.src = this._url, i.alt = this.options.alt); 7525 }, 7526 _animateZoom: function _animateZoom(t) { 7527 var i = this._map.getZoomScale(t.zoom), 7528 e = this._map._latLngBoundsToNewLayerBounds(this._bounds, t.zoom, t.center).min; 7529 7530 gi(this._image, e, i); 7531 }, 7532 _reset: function _reset() { 7533 var t = this._image, 7534 i = new I(this._map.latLngToLayerPoint(this._bounds.getNorthWest()), this._map.latLngToLayerPoint(this._bounds.getSouthEast())), 7535 e = i.getSize(); 7536 vi(t, i.min), t.style.width = e.x + "px", t.style.height = e.y + "px"; 7537 }, 7538 _updateOpacity: function _updateOpacity() { 7539 mi(this._image, this.options.opacity); 7540 }, 7541 _updateZIndex: function _updateZIndex() { 7542 this._image && void 0 !== this.options.zIndex && null !== this.options.zIndex && (this._image.style.zIndex = this.options.zIndex); 7543 }, 7544 _overlayOnError: function _overlayOnError() { 7545 this.fire("error"); 7546 var t = this.options.errorOverlayUrl; 7547 t && this._url !== t && (this._url = t, this._image.src = t); 7548 } 7549 }), 7550 Je = Xe.extend({ 7551 options: { 7552 autoplay: !0, 7553 loop: !0, 7554 keepAspectRatio: !0, 7555 muted: !1 7556 }, 7557 _initImage: function _initImage() { 7558 var t = "VIDEO" === this._url.tagName, 7559 i = this._image = t ? this._url : si("video"); 7560 7561 if (ci(i, "leaflet-image-layer"), this._zoomAnimated && ci(i, "leaflet-zoom-animated"), this.options.className && ci(i, this.options.className), i.onselectstart = a, i.onmousemove = a, i.onloadeddata = p(this.fire, this, "load"), t) { 7562 for (var e = i.getElementsByTagName("source"), n = [], o = 0; o < e.length; o++) { 7563 n.push(e[o].src); 7564 } 7565 7566 this._url = 0 < e.length ? n : [i.src]; 7567 } else { 7568 g(this._url) || (this._url = [this._url]), !this.options.keepAspectRatio && Object.prototype.hasOwnProperty.call(i.style, "objectFit") && (i.style.objectFit = "fill"), i.autoplay = !!this.options.autoplay, i.loop = !!this.options.loop, i.muted = !!this.options.muted; 7569 7570 for (var s = 0; s < this._url.length; s++) { 7571 var r = si("source"); 7572 r.src = this._url[s], i.appendChild(r); 7573 } 7574 } 7575 } 7576 }); 7577 var $e = Xe.extend({ 7578 _initImage: function _initImage() { 7579 var t = this._image = this._url; 7580 ci(t, "leaflet-image-layer"), this._zoomAnimated && ci(t, "leaflet-zoom-animated"), this.options.className && ci(t, this.options.className), t.onselectstart = a, t.onmousemove = a; 7581 } 7582 }); 7583 var Qe = Me.extend({ 7584 options: { 7585 offset: [0, 7], 7586 className: "", 7587 pane: "popupPane" 7588 }, 7589 initialize: function initialize(t, i) { 7590 c(this, t), this._source = i; 7591 }, 7592 onAdd: function onAdd(t) { 7593 this._zoomAnimated = t._zoomAnimated, this._container || this._initLayout(), t._fadeAnimated && mi(this._container, 0), clearTimeout(this._removeTimeout), this.getPane().appendChild(this._container), this.update(), t._fadeAnimated && mi(this._container, 1), this.bringToFront(); 7594 }, 7595 onRemove: function onRemove(t) { 7596 t._fadeAnimated ? (mi(this._container, 0), this._removeTimeout = setTimeout(p(ri, void 0, this._container), 200)) : ri(this._container); 7597 }, 7598 getLatLng: function getLatLng() { 7599 return this._latlng; 7600 },
7601 setLatLng: function setLatLng(t) { 7602 return this._latlng = j(t), this._map && (this._updatePosition(), this._adjustPan()), this; 7603 }, 7604 getContent: function getContent() { 7605 return this._content; 7606 }, 7607 setContent: function setContent(t) { 7608 return this._content = t, this.update(), this; 7609 }, 7610 getElement: function getElement() { 7611 return this._container; 7612 }, 7613 update: function update() { 7614 this._map && (this._container.style.visibility = "hidden", this._updateContent(), this._updateLayout(), this._updatePosition(), this._container.style.visibility = "", this._adjustPan()); 7615 }, 7616 getEvents: function getEvents() { 7617 var t = { 7618 zoom: this._updatePosition, 7619 viewreset: this._updatePosition 7620 }; 7621 return this._zoomAnimated && (t.zoomanim = this._animateZoom), t; 7622 }, 7623 isOpen: function isOpen() { 7624 return !!this._map && this._map.hasLayer(this); 7625 }, 7626 bringToFront: function bringToFront() { 7627 return this._map && hi(this._container), this; 7628 }, 7629 bringToBack: function bringToBack() { 7630 return this._map && ui(this._container), this; 7631 }, 7632 _prepareOpen: function _prepareOpen(t, i, e) { 7633 if (i instanceof Me || (e = i, i = t), i instanceof Ce) for (var n in t._layers) { 7634 i = t._layers[n]; 7635 break; 7636 } 7637 if (!e) if (i.getCenter) e = i.getCenter();else { 7638 if (!i.getLatLng) throw new Error("Unable to get source layer LatLng."); 7639 e = i.getLatLng(); 7640 } 7641 return this._source = i, this.update(), e; 7642 }, 7643 _updateContent: function _updateContent() { 7644 if (this._content) { 7645 var t = this._contentNode, 7646 i = "function" == typeof this._content ? this._content(this._source || this) : this._content; 7647 if ("string" == typeof i) t.innerHTML = i;else { 7648 for (; t.hasChildNodes();) { 7649 t.removeChild(t.firstChild); 7650 } 7651 7652 t.appendChild(i); 7653 } 7654 this.fire("contentupdate"); 7655 } 7656 }, 7657 _updatePosition: function _updatePosition() { 7658 var t, i, e, n, o; 7659 this._map && (t = this._map.latLngToLayerPoint(this._latlng), i = A(this.options.offset), e = this._getAnchor(), this._zoomAnimated ? vi(this._container, t.add(e)) : i = i.add(t).add(e), n = this._containerBottom = -i.y, o = this._containerLeft = -Math.round(this._containerWidth / 2) + i.x, this._container.style.bottom = n + "px", this._container.style.left = o + "px"); 7660 }, 7661 _getAnchor: function _getAnchor() { 7662 return [0, 0]; 7663 } 7664 }), 7665 tn = Qe.extend({ 7666 options: { 7667 maxWidth: 300, 7668 minWidth: 50, 7669 maxHeight: null, 7670 autoPan: !0, 7671 autoPanPaddingTopLeft: null, 7672 autoPanPaddingBottomRight: null, 7673 autoPanPadding: [5, 5], 7674 keepInView: !1, 7675 closeButton: !0, 7676 autoClose: !0, 7677 closeOnEscapeKey: !0, 7678 className: "" 7679 }, 7680 openOn: function openOn(t) { 7681 return t.openPopup(this), this; 7682 }, 7683 onAdd: function onAdd(t) { 7684 Qe.prototype.onAdd.call(this, t), t.fire("popupopen", { 7685 popup: this 7686 }), this._source && (this._source.fire("popupopen", { 7687 popup: this 7688 }, !0), this._source instanceof Be || this._source.on("preclick", Ai)); 7689 }, 7690 onRemove: function onRemove(t) { 7691 Qe.prototype.onRemove.call(this, t), t.fire("popupclose", { 7692 popup: this 7693 }), this._source && (this._source.fire("popupclose", { 7694 popup: this 7695 }, !0), this._source instanceof Be || this._source.off("preclick", Ai)); 7696 }, 7697 getEvents: function getEvents() { 7698 var t = Qe.prototype.getEvents.call(this); 7699 return (void 0 !== this.options.closeOnClick ? this.options.closeOnClick : this._map.options.closePopupOnClick) && (t.preclick = this._close), this.options.keepInView && (t.moveend = this._adjustPan), t; 7700 }, 7701 _close: function _close() { 7702 this._map && this._map.closePopup(this); 7703 }, 7704 _initLayout: function _initLayout() { 7705 var t, 7706 i = "leaflet-popup", 7707 e = this._container = si("div", i + " " + (this.options.className || "") + " leaflet-zoom-animated"), 7708 n = this._wrapper = si("div", i + "-content-wrapper", e); 7709 this._contentNode = si("div", i + "-content", n), Oi(e), Ii(this._contentNode), zi(e, "contextmenu", Ai), this._tipContainer = si("div", i + "-tip-container", e), this._tip = si("div", i + "-tip", this._tipContainer), this.options.closeButton && ((t = this._closeButton = si("a", i + "-close-button", e)).href = "#close", t.innerHTML = "×", zi(t, "click", this._onCloseButtonClick, this)); 7710 }, 7711 _updateLayout: function _updateLayout() { 7712 var t = this._contentNode, 7713 i = t.style; 7714 i.width = "", i.whiteSpace = "nowrap"; 7715 var e = t.offsetWidth, 7716 e = Math.min(e, this.options.maxWidth); 7717 e = Math.max(e, this.options.minWidth), i.width = e + 1 + "px", i.whiteSpace = "", i.height = ""; 7718 var n = t.offsetHeight, 7719 o = this.options.maxHeight, 7720 s = "leaflet-popup-scrolled"; 7721 o && o < n ? (i.height = o + "px", ci(t, s)) : _i(t, s), this._containerWidth = this._container.offsetWidth; 7722 }, 7723 _animateZoom: function _animateZoom(t) { 7724 var i = this._map._latLngToNewLayerPoint(this._latlng, t.zoom, t.center), 7725 e = this._getAnchor(); 7726 7727 vi(this._container, i.add(e)); 7728 }, 7729 _adjustPan: function _adjustPan() { 7730 var t, i, e, n, o, s, r, a, h, u, l, c; 7731 this.options.autoPan && (this._map._panAnim && this._map._panAnim.stop(), t = this._map, i = parseInt(oi(this._container, "marginBottom"), 10) || 0, e = this._container.offsetHeight + i, n = this._containerWidth, (o = new k(this._containerLeft, -e - this._containerBottom))._add(yi(this._container)), s = t.layerPointToContainerPoint(o), r = A(this.options.autoPanPadding), a = A(this.options.autoPanPaddingTopLeft || r), h = A(this.options.autoPanPaddingBottomRight || r), u = t.getSize(), c = l = 0, s.x + n + h.x > u.x && (l = s.x + n - u.x + h.x), s.x - l - a.x < 0 && (l = s.x - a.x), s.y + e + h.y > u.y && (c = s.y + e - u.y + h.y), s.y - c - a.y < 0 && (c = s.y - a.y), (l || c) && t.fire("autopanstart").panBy([l, c])); 7732 }, 7733 _onCloseButtonClick: function _onCloseButtonClick(t) { 7734 this._close(), Ni(t); 7735 }, 7736 _getAnchor: function _getAnchor() { 7737 return A(this._source && this._source._getPopupAnchor ? this._source._getPopupAnchor() : [0, 0]); 7738 } 7739 }); 7740 Ki.mergeOptions({ 7741 closePopupOnClick: !0 7742 }), Ki.include({ 7743 openPopup: function openPopup(t, i, e) { 7744 return t instanceof tn || (t = new tn(e).setContent(t)), i && t.setLatLng(i), this.hasLayer(t) ? this
7744: (this._popup && this._popup.options.autoClose && this.closePopup(), this._popup = t, this.addLayer(t)); 7745 }, 7746 closePopup: function closePopup(t) { 7747 return t && t !== this._popup || (t = this._popup, this._popup = null), t && this.removeLayer(t), this; 7748 } 7749 }), Me.include({ 7750 bindPopup: function bindPopup(t, i) { 7751 return t instanceof tn ? (c(t, i), (this._popup = t)._source = this) : (this._popup && !i || (this._popup = new tn(i, this)), this._popup.setContent(t)), this._popupHandlersAdded || (this.on({ 7752 click: this._openPopup, 7753 keypress: this._onKeyPress, 7754 remove: this.closePopup, 7755 move: this._movePopup 7756 }), this._popupHandlersAdded = !0), this; 7757 }, 7758 unbindPopup: function unbindPopup() { 7759 return this._popup && (this.off({ 7760 click: this._openPopup, 7761 keypress: this._onKeyPress, 7762 remove: this.closePopup, 7763 move: this._movePopup 7764 }), this._popupHandlersAdded = !1, this._popup = null), this; 7765 }, 7766 openPopup: function openPopup(t, i) { 7767 return this._popup && this._map && (i = this._popup._prepareOpen(this, t, i), this._map.openPopup(this._popup, i)), this; 7768 }, 7769 closePopup: function closePopup() { 7770 return this._popup && this._popup._close(), this; 7771 }, 7772 togglePopup: function togglePopup(t) { 7773 return this._popup && (this._popup._map ? this.closePopup() : this.openPopup(t)), this; 7774 }, 7775 isPopupOpen: function isPopupOpen() { 7776 return !!this._popup && this._popup.isOpen(); 7777 }, 7778 setPopupContent: function setPopupContent(t) { 7779 return this._popup && this._popup.setContent(t), this; 7780 }, 7781 getPopup: function getPopup() { 7782 return this._popup; 7783 }, 7784 _openPopup: function _openPopup(t) { 7785 var i = t.layer || t.target; 7786 this._popup && this._map && (Ni(t), i instanceof Be ? this.openPopup(t.layer || t.target, t.latlng) : this._map.hasLayer(this._popup) && this._popup._source === i ? this.closePopup() : this.openPopup(i, t.latlng)); 7787 }, 7788 _movePopup: function _movePopup(t) { 7789 this._popup.setLatLng(t.latlng); 7790 }, 7791 _onKeyPress: function _onKeyPress(t) { 7792 13 === t.originalEvent.keyCode && this._openPopup(t); 7793 } 7794 }); 7795 var en = Qe.extend({ 7796 options: { 7797 pane: "tooltipPane", 7798 offset: [0, 0], 7799 direction: "auto", 7800 permanent: !1, 7801 sticky: !1, 7802 interactive: !1, 7803 opacity: .9 7804 }, 7805 onAdd: function onAdd(t) { 7806 Qe.prototype.onAdd.call(this, t), this.setOpacity(this.options.opacity), t.fire("tooltipopen", { 7807 tooltip: this 7808 }), this._source && this._source.fire("tooltipopen", { 7809 tooltip: this 7810 }, !0); 7811 }, 7812 onRemove: function onRemove(t) { 7813 Qe.prototype.onRemove.call(this, t), t.fire("tooltipclose", { 7814 tooltip: this 7815 }), this._source && this._source.fire("tooltipclose", { 7816 tooltip: this 7817 }, !0); 7818 }, 7819 getEvents: function getEvents() { 7820 var t = Qe.prototype.getEvents.call(this); 7821 return bt && !this.options.permanent && (t.preclick = this._close), t; 7822 }, 7823 _close: function _close() { 7824 this._map && this._map.closeTooltip(this); 7825 }, 7826 _initLayout: function _initLayout() { 7827 var t = "leaflet-tooltip " + (this.options.className || "") + " leaflet-zoom-" + (this._zoomAnimated ? "animated" : "hide"); 7828 this._contentNode = this._container = si("div", t); 7829 }, 7830 _updateLayout: function _updateLayout() {}, 7831 _adjustPan: function _adjustPan() {}, 7832 _setPosition: function _setPosition(t) { 7833 var i, 7834 e = this._map, 7835 n = this._container, 7836 o = e.latLngToContainerPoint(e.getCenter()), 7837 s = e.layerPointToContainerPoint(t), 7838 r = this.options.direction, 7839 a = n.offsetWidth, 7840 h = n.offsetHeight, 7841 u = A(this.options.offset), 7842 l = this._getAnchor(), 7843 c = "top" === r ? (i = a / 2, h) : "bottom" === r ? (i = a / 2, 0) : (i = "center" === r ? a / 2 : "right" === r ? 0 : "left" === r ? a : s.x < o.x ? (r = "right", 0) : (r = "left", a + 2 * (u.x + l.x)), h / 2); 7844 7845 t = t.subtract(A(i, c, !0)).add(u).add(l), _i(n, "leaflet-tooltip-right"), _i(n, "leaflet-tooltip-left"), _i(n, "leaflet-tooltip-top"), _i(n, "leaflet-tooltip-bottom"), ci(n, "leaflet-tooltip-" + r), vi(n, t); 7846 }, 7847 _updatePosition: function _updatePosition() { 7848 var t = this._map.latLngToLayerPoint(this._latlng); 7849 7850 this._setPosition(t); 7851 }, 7852 setOpacity: function setOpacity(t) { 7853 this.options.opacity = t, this._container && mi(this._container, t); 7854 }, 7855 _animateZoom: function _animateZoom(t) { 7856 var i = this._map._latLngToNewLayerPoint(this._latlng, t.zoom, t.center); 7857 7858 this._setPosition(i); 7859 }, 7860 _getAnchor: function _getAnchor() { 7861 return A(this._source && this._source._getTooltipAnchor && !this.options.sticky ? this._source._getTooltipAnchor() : [0, 0]); 7862 } 7863 }); 7864 Ki.include({ 7865 openTooltip: function openTooltip(t, i, e) { 7866 return t instanceof en || (t = new en(e).setContent(t)), i && t.setLatLng(i), this.hasLayer(t) ? this
7866: this.addLayer(t); 7867 }, 7868 closeTooltip: function closeTooltip(t) { 7869 return t && this.removeLayer(t), this; 7870 } 7871 }), Me.include({ 7872 bindTooltip: function bindTooltip(t, i) { 7873 return t instanceof en ? (c(t, i), (this._tooltip = t)._source = this) : (this._tooltip && !i || (this._tooltip = new en(i, this)), this._tooltip.setContent(t)), this._initTooltipInteractions(), this._tooltip.options.permanent && this._map && this._map.hasLayer(this) && this.openTooltip(), this; 7874 }, 7875 unbindTooltip: function unbindTooltip() { 7876 return this._tooltip && (this._initTooltipInteractions(!0), this.closeTooltip(), this._tooltip = null), this; 7877 }, 7878 _initTooltipInteractions: function _initTooltipInteractions(t) { 7879 var i, e; 7880 !t && this._tooltipHandlersAdded || (i = t ? "off" : "on", e = { 7881 remove: this.closeTooltip, 7882 move: this._moveTooltip 7883 }, this._tooltip.options.permanent ? e.add = this._openTooltip : (e.mouseover = this._openTooltip, e.mouseout = this.closeTooltip, this._tooltip.options.sticky && (e.mousemove = this._moveTooltip), bt && (e.click = this._openTooltip)), this[i](e), this._tooltipHandlersAdded = !t); 7884 }, 7885 openTooltip: function openTooltip(t, i) { 7886 return this._tooltip && this._map && (i = this._tooltip._prepareOpen(this, t, i), this._map.openTooltip(this._tooltip, i), this._tooltip.options.interactive && this._tooltip._container && (ci(this._tooltip._container, "leaflet-clickable"), this.addInteractiveTarget(this._tooltip._container))), this; 7887 }, 7888 closeTooltip: function closeTooltip() { 7889 return this._tooltip && (this._tooltip._close(), this._tooltip.options.interactive && this._tooltip._container && (_i(this._tooltip._container, "leaflet-clickable"), this.removeInteractiveTarget(this._tooltip._container))), this; 7890 }, 7891 toggleTooltip: function toggleTooltip(t) { 7892 return this._tooltip && (this._tooltip._map ? this.closeTooltip() : this.openTooltip(t)), this; 7893 }, 7894 isTooltipOpen: function isTooltipOpen() { 7895 return this._tooltip.isOpen(); 7896 }, 7897 setTooltipContent: function setTooltipContent(t) { 7898 return this._tooltip && this._tooltip.setContent(t), this; 7899 }, 7900 getTooltip: function getTooltip() { 7901 return this._tooltip; 7902 }, 7903 _openTooltip: function _openTooltip(t) { 7904 var i = t.layer || t.target; 7905 this._tooltip && this._map && this.openTooltip(i, this._tooltip.options.sticky ? t.latlng : void 0); 7906 }, 7907 _moveTooltip: function _moveTooltip(t) { 7908 var i, 7909 e, 7910 n = t.latlng; 7911 this._tooltip.options.sticky && t.originalEvent && (i = this._map.mouseEventToContainerPoint(t.originalEvent), e = this._map.containerPointToLayerPoint(i), n = this._map.layerPointToLatLng(e)), this._tooltip.setLatLng(n); 7912 } 7913 }); 7914 var nn = Se.extend({ 7915 options: { 7916 iconSize: [12, 12], 7917 html: !1, 7918 bgPos: null, 7919 className: "leaflet-div-icon" 7920 }, 7921 createIcon: function createIcon(t) { 7922 var i, 7923 e = t && "DIV" === t.tagName ? t : document.createElement("div"), 7924 n = this.options; 7925 return n.html instanceof Element ? (ai(e), e.appendChild(n.html)) : e.innerHTML = !1 !== n.html ? n.html : "", n.bgPos && (i = A(n.bgPos), e.style.backgroundPosition = -i.x + "px " + -i.y + "px"), this._setIconStyles(e, "icon"), e; 7926 }, 7927 createShadow: function createShadow() { 7928 return null; 7929 } 7930 }); 7931 Se.Default = Ze; 7932 var on = Me.extend({ 7933 options: { 7934 tileSize: 256, 7935 opacity: 1, 7936 updateWhenIdle: yt, 7937 updateWhenZooming: !0, 7938 updateInterval: 200, 7939 zIndex: 1, 7940 bounds: null, 7941 minZoom: 0, 7942 maxZoom: void 0, 7943 maxNativeZoom: void 0, 7944 minNativeZoom: void 0, 7945 noWrap: !1, 7946 pane: "tilePane", 7947 className: "", 7948 keepBuffer: 2 7949 }, 7950 initialize: function initialize(t) { 7951 c(this, t); 7952 }, 7953 onAdd: function onAdd() { 7954 this._initContainer(), this._levels = {}, this._tiles = {}, this._resetView(), this._update(); 7955 }, 7956 beforeAdd: function beforeAdd(t) { 7957 t._addZoomLimit(this); 7958 }, 7959 onRemove: function onRemove(t) { 7960 this._removeAllTiles(), ri(this._container), t._removeZoomLimit(this), this._container = null, this._tileZoom = void 0; 7961 }, 7962 bringToFront: function bringToFront() { 7963 return this._map && (hi(this._container), this._setAutoZIndex(Math.max)), this; 7964 }, 7965 bringToBack: function bringToBack() { 7966 return this._map && (ui(this._container), this._setAutoZIndex(Math.min)), this; 7967 }, 7968 getContainer: function getContainer() { 7969 return this._container; 7970 }, 7971 setOpacity: function setOpacity(t) { 7972 return this.options.opacity = t, this._updateOpacity(), this; 7973 }, 7974 setZIndex: function setZIndex(t) { 7975 return this.options.zIndex = t, this._updateZIndex(), this; 7976 }, 7977 isLoading: function isLoading() { 7978 return this._loading; 7979 }, 7980 redraw: function redraw() { 7981 return this._map && (this._removeAllTiles(), this._update()), this; 7982 }, 7983 getEvents: function getEvents() { 7984 var t = { 7985 viewprereset: this._invalidateAll, 7986 viewreset: this._resetView, 7987 zoom: this._resetView, 7988 moveend: this._onMoveEnd 7989 }; 7990 return this.options.updateWhenIdle || (this._onMove || (this._onMove = n(this._onMoveEnd, this.options.updateInterval, this)), t.move = this._onMove), this._zoomAnimated && (t.zoomanim = this._animateZoom), t; 7991 }, 7992 createTile: function createTile() { 7993 return document.createElement("div"); 7994 }, 7995 getTileSize: function getTileSize() { 7996 var t = this.options.tileSize; 7997 return t instanceof k ? t : new k(t, t); 7998 }, 7999 _updateZIndex: function _updateZIndex() { 8000 this._container && void 0 !== this.options.zIndex && null !== this.options.zIndex && (this._container.style.zIndex = this.options.zIndex); 8001 }, 8002 _setAutoZIndex: function _setAutoZIndex(t) { 8003 for (var i, e = this.getPane().children, n = -t(-1 / 0, 1 / 0), o = 0, s = e.length; o < s; o++) { 8004 i = e[o].style.zIndex, e[o] !== this._container && i && (n = t(n, +i)); 8005 } 8006 8007 isFinite(n) && (this.options.zIndex = n + t(-1, 1), this._updateZIndex()); 8008 }, 8009 _updateOpacity: function _updateOpacity() { 8010 if (this._map && !it) { 8011 mi(this._container, this.options.opacity); 8012 var t = +new Date(), 8013 i = !1, 8014 e = !1; 8015 8016 for (var n in this._tiles) { 8017 var o, 8018 s = this._tiles[n]; 8019 s.current && s.loaded && (o = Math.min(1, (t - s.loaded) / 200), mi(s.el, o), o < 1 ? i = !0 : (s.active ? e = !0 : this._onOpaqueTile(s), s.active = !0)); 8020 } 8021 8022 e && !this._noPrune && this._pruneTiles(), i && (z(this._fadeFrame), this._fadeFrame = M(this._updateOpacity, this)); 8023 } 8024 }, 8025 _onOpaqueTile: a, 8026 _initContainer: function _initContainer() { 8027 this._container || (this._container = si("div", "leaflet-layer " + (this.options.className || "")), this._updateZIndex(), this.options.opacity < 1 && this._updateOpacity(), this.getPane().appendChild(this._container)); 8028 }, 8029 _updateLevels: function _updateLevels() { 8030 var t = this._tileZoom, 8031 i = this.options.maxZoom; 8032 8033 if (void 0 !== t) { 8034 for (var e in this._levels) { 8035 e = Number(e), this._levels[e].el.children.length || e === t ? (this._levels[e].el.style.zIndex = i - Math.abs(t - e), this._onUpdateLevel(e)) : (ri(this._levels[e].el), this._removeTilesAtZoom(e), this._onRemoveLevel(e), delete this._levels[e]); 8036 } 8037 8038 var n = this._levels[t], 8039 o = this._map; 8040 return n || ((n = this._levels[t] = {}).el = si("div", "leaflet-tile-container leaflet-zoom-animated", this._container), n.el.style.zIndex = i, n.origin = o.project(o.unproject(o.getPixelOrigin()), t).round(), n.zoom = t, this._setZoomTransform(n, o.getCenter(), o.getZoom()), a(n.el.offsetWidth), this._onCreateLevel(n)), this._level = n; 8041 } 8042 }, 8043 _onUpdateLevel: a, 8044 _onRemoveLevel: a, 8045 _onCreateLevel: a, 8046 _pruneTiles: function _pruneTiles() { 8047 if (this._map) { 8048 var t, 8049 i, 8050 e, 8051 n = this._map.getZoom(); 8052 8053 if (n > this.options.maxZoom || n < this.options.minZoom) this._removeAllTiles();else { 8054 for (t in this._tiles) { 8055 (e = this._tiles[t]).retain = e.current; 8056 } 8057 8058 for (t in this._tiles) { 8059 (e = this._tiles[t]).current && !e.active && (i = e.coords, this._retainParent(i.x, i.y, i.z, i.z - 5) || this._retainChildren(i.x, i.y, i.z, i.z + 2)); 8060 } 8061 8062 for (t in this._tiles) { 8063 this._tiles[t].retain || this._removeTile(t); 8064 } 8065 } 8066 } 8067 }, 8068 _removeTilesAtZoom: function _removeTilesAtZoom(t) { 8069 for (var i in this._tiles) { 8070 this._tiles[i].coords.z === t && this._removeTile(i); 8071 } 8072 }, 8073 _removeAllTiles: function _removeAllTiles() { 8074 for (var t in this._tiles) { 8075 this._removeTile(t); 8076 } 8077 }, 8078 _invalidateAll: function _invalidateAll() { 8079 for (var t in this._levels) { 8080 ri(this._levels[t].el), this._onRemoveLevel(Number(t)), delete this._levels[t]; 8081 } 8082 8083 this._removeAllTiles(), this._tileZoom = void 0; 8084 }, 8085 _retainParent: function _retainParent(t, i, e, n) { 8086 var o = Math.floor(t / 2), 8087 s = Math.floor(i / 2), 8088 r = e - 1, 8089 a = new k(+o, +s); 8090 a.z = +r; 8091 8092 var h = this._tileCoordsToKey(a), 8093 u = this._tiles[h]; 8094 8095 return u && u.active ? u.retain = !0 : (u && u.loaded && (u.retain = !0), n < r && this._retainParent(o, s, r, n)); 8096 }, 8097 _retainChildren: function _retainChildren(t, i, e, n) { 8098 for (var o = 2 * t; o < 2 * t + 2; o++) { 8099 for (var s = 2 * i; s < 2 * i + 2; s++) { 8100 var r = new k(o, s); 8101 r.z = e + 1; 8102 8103 var a = this._tileCoordsToKey(r), 8104 h = this._tiles[a]; 8105 8106 h && h.active ? h.retain = !0 : (h && h.loaded && (h.retain = !0), e + 1 < n && this._retainChildren(o, s, e + 1, n)); 8107 } 8108 } 8109 }, 8110 _resetView: function _resetView(t) { 8111 var i = t && (t.pinch || t.flyTo); 8112
8113 this._setView(this._map.getCenter(), this._map.getZoom(), i, i); 8114 }, 8115 _animateZoom: function _animateZoom(t) { 8116 this._setView(t.center, t.zoom, !0, t.noUpdate); 8117 }, 8118 _clampZoom: function _clampZoom(t) { 8119 var i = this.options; 8120 return void 0 !== i.minNativeZoom && t < i.minNativeZoom ? i.minNativeZoom : void 0 !== i.maxNativeZoom && i.maxNativeZoom < t ? i.maxNativeZoom : t; 8121 }, 8122 _setView: function _setView(t, i, e, n) { 8123 var o = Math.round(i), 8124 o = void 0 !== this.options.maxZoom && o > this.options.maxZoom || void 0 !== this.options.minZoom && o < this.options.minZoom ? void 0 : this._clampZoom(o), 8125 s = this.options.updateWhenZooming && o !== this._tileZoom; 8126 n && !s || (this._tileZoom = o, this._abortLoading && this._abortLoading(), this._updateLevels(), this._resetGrid(), void 0 !== o && this._update(t), e || this._pruneTiles(), this._noPrune = !!e), this._setZoomTransforms(t, i); 8127 }, 8128 _setZoomTransforms: function _setZoomTransforms(t, i) { 8129 for (var e in this._levels) { 8130 this._setZoomTransform(this._levels[e], t, i); 8131 } 8132 }, 8133 _setZoomTransform: function _setZoomTransform(t, i, e) { 8134 var n = this._map.getZoomScale(e, t.zoom), 8135 o = t.origin.multiplyBy(n).subtract(this._map._getNewPixelOrigin(i, e)).round(); 8136 8137 vt ? gi(t.el, o, n) : vi(t.el, o); 8138 }, 8139 _resetGrid: function _resetGrid() { 8140 var t = this._map, 8141 i = t.options.crs, 8142 e = this._tileSize = this.getTileSize(), 8143 n = this._tileZoom, 8144 o = this._map.getPixelWorldBounds(this._tileZoom); 8145 8146 o && (this._globalTileRange = this._pxBoundsToTileRange(o)), this._wrapX = i.wrapLng && !this.options.noWrap && [Math.floor(t.project([0, i.wrapLng[0]], n).x / e.x), Math.ceil(t.project([0, i.wrapLng[1]], n).x / e.y)], this._wrapY = i.wrapLat && !this.options.noWrap && [Math.floor(t.project([i.wrapLat[0], 0], n).y / e.x), Math.ceil(t.project([i.wrapLat[1], 0], n).y / e.y)]; 8147 }, 8148 _onMoveEnd: function _onMoveEnd() { 8149 this._map && !this._map._animatingZoom && this._update(); 8150 }, 8151 _getTiledPixelBounds: function _getTiledPixelBounds(t) { 8152 var i = this._map, 8153 e = i._animatingZoom ? Math.max(i._animateToZoom, i.getZoom()) : i.getZoom(), 8154 n = i.getZoomScale(e, this._tileZoom), 8155 o = i.project(t, this._tileZoom).floor(), 8156 s = i.getSize().divideBy(2 * n); 8157 return new I(o.subtract(s), o.add(s)); 8158 }, 8159 _update: function _update(t) { 8160 var i = this._map; 8161 8162 if (i) { 8163 var e = this._clampZoom(i.getZoom()); 8164 8165 if (void 0 === t && (t = i.getCenter()), void 0 !== this._tileZoom) { 8166 var n = this._getTiledPixelBounds(t), 8167 o = this._pxBoundsToTileRange(n), 8168 s = o.getCenter(), 8169 r = [], 8170 a = this.options.keepBuffer, 8171 h = new I(o.getBottomLeft().subtract([a, -a]), o.getTopRight().add([a, -a])); 8172 8173 if (!(isFinite(o.min.x) && isFinite(o.min.y) && isFinite(o.max.x) && isFinite(o.max.y))) throw new Error("Attempted to load an infinite number of tiles"); 8174 8175 for (var u in this._tiles) { 8176 var l = this._tiles[u].coords; 8177 l.z === this._tileZoom && h.contains(new k(l.x, l.y)) || (this._tiles[u].current = !1); 8178 } 8179 8180 if (1 < Math.abs(e - this._tileZoom)) this._setView(t, e);else { 8181 for (var c = o.min.y; c <= o.max.y; c++) { 8182 for (var _ = o.min.x; _ <= o.max.x; _++) { 8183 var d, 8184 p = new k(_, c); 8185 p.z = this._tileZoom, this._isValidTile(p) && ((d = this._tiles[this._tileCoordsToKey(p)]) ? d.current = !0 : r.push(p)); 8186 } 8187 } 8188 8189 if (r.sort(function (t, i) { 8190 return t.distanceTo(s) - i.distanceTo(s); 8191 }), 0 !== r.length) { 8192 this._loading || (this._loading = !0, this.fire("loading")); 8193 8194 for (var m = document.createDocumentFragment(), _ = 0; _ < r.length; _++) { 8195 this._addTile(r[_], m); 8196 } 8197 8198 this._level.el.appendChild(m); 8199 } 8200 } 8201 } 8202 } 8203 }, 8204 _isValidTile: function _isValidTile(t) { 8205 var i = this._map.options.crs; 8206 8207 if (!i.infinite) { 8208 var e = this._globalTileRange; 8209 if (!i.wrapLng && (t.x < e.min.x || t.x > e.max.x) || !i.wrapLat && (t.y < e.min.y || t.y > e.max.y)) return !1; 8210 } 8211 8212 if (!this.options.bounds) return !0; 8213 8214 var n = this._tileCoordsToBounds(t); 8215 8216 return N(this.options.bounds).overlaps(n); 8217 }, 8218 _keyToBounds: function _keyToBounds(t) { 8219 return this._tileCoordsToBounds(this._keyToTileCoords(t)); 8220 }, 8221 _tileCoordsToNwSe: function _tileCoordsToNwSe(t) { 8222 var i = this._map, 8223 e = this.getTileSize(), 8224 n = t.scaleBy(e), 8225 o = n.add(e); 8226 return [i.unproject(n, t.z), i.unproject(o, t.z)]; 8227 }, 8228 _tileCoordsToBounds: function _tileCoordsToBounds(t) { 8229 var i = this._tileCoordsToNwSe(t), 8230 e = new R(i[0], i[1]); 8231 8232 return this.options.noWrap || (e = this._map.wrapLatLngBounds(e)), e; 8233 }, 8234 _tileCoordsToKey: function _tileCoordsToKey(t) { 8235 return t.x + ":" + t.y + ":" + t.z; 8236 }, 8237 _keyToTileCoords: function _keyToTileCoords(t) { 8238 var i = t.split(":"), 8239 e = new k(+i[0], +i[1]); 8240 return e.z = +i[2], e; 8241 }, 8242 _removeTile: function _removeTile(t) { 8243 var i = this._tiles[t]; 8244 i && (ri(i.el), delete this._tiles[t], this.fire("tileunload", { 8245 tile: i.el, 8246 coords: this._keyToTileCoords(t) 8247 })); 8248 }, 8249 _initTile: function _initTile(t) { 8250 ci(t, "leaflet-tile"); 8251 var i = this.getTileSize(); 8252 t.style.width = i.x + "px", t.style.height = i.y + "px", t.onselectstart = a, t.onmousemove = a, it && this.options.opacity < 1 && mi(t, this.options.opacity), ot && !st && (t.style.WebkitBackfaceVisibility = "hidden"); 8253 }, 8254 _addTile: function _addTile(t, i) { 8255 var e = this._getTilePos(t), 8256 n = this._tileCoordsToKey(t), 8257 o = this.createTile(this._wrapCoords(t), p(this._tileReady, this, t)); 8258 8259 this._initTile(o), this.createTile.length < 2 && M(p(this._tileReady, this, t, null, o)), vi(o, e), this._tiles[n] = { 8260 el: o, 8261 coords: t, 8262 current: !0 8263 }, i.appendChild(o), this.fire("tileloadstart", { 8264 tile: o, 8265 coords: t 8266 }); 8267 }, 8268 _tileReady: function _tileReady(t, i, e) { 8269 i && this.fire("tileerror", { 8270 error: i, 8271 tile: e, 8272 coords: t 8273 }); 8274 8275 var n = this._tileCoordsToKey(t); 8276 8277 (e = this._tiles[n]) && (e.loaded = +new Date(), this._map._fadeAnimated ? (mi(e.el, 0), z(this._fadeFrame), this._fadeFrame = M(this._updateOpacity, this)) : (e.active = !0, this._pruneTiles()), i || (ci(e.el, "leaflet-tile-loaded"), this.fire("tileload", { 8278 tile: e.el, 8279 coords: t 8280 })), this._noTilesToLoad() && (this._loading = !1, this.fire("load"), it || !this._map._fadeAnimated ? M(this._pruneTiles, this) : setTimeout(p(this._pruneTiles, this), 250))); 8281 }, 8282 _getTilePos: function _getTilePos(t) { 8283 return t.scaleBy(this.getTileSize()).subtract(this._level.origin); 8284 }, 8285 _wrapCoords: function _wrapCoords(t) { 8286 var i = new k(this._wrapX ? o(t.x, this._wrapX) : t.x, this._wrapY ? o(t.y, this._wrapY) : t.
8286y); 8287 return i.z = t.z, i; 8288 }, 8289 _pxBoundsToTileRange: function _pxBoundsToTileRange(t) { 8290 var i = this.getTileSize(); 8291 return new I(t.min.unscaleBy(i).floor(), t.max.unscaleBy(i).ceil().subtract([1, 1])); 8292 }, 8293 _noTilesToLoad: function _noTilesToLoad() { 8294 for (var t in this._tiles) { 8295 if (!this._tiles[t].loaded) return !1; 8296 } 8297 8298 return !0; 8299 } 8300 }); 8301 var sn = on.extend({ 8302 options: { 8303 minZoom: 0, 8304 maxZoom: 18, 8305 subdomains: "abc", 8306 errorTileUrl: "", 8307 zoomOffset: 0, 8308 tms: !1, 8309 zoomReverse: !1, 8310 detectRetina: !1, 8311 crossOrigin: !1 8312 }, 8313 initialize: function initialize(t, i) { 8314 this._url = t, (i = c(this, i)).detectRetina && zt && 0 < i.maxZoom && (i.tileSize = Math.floor(i.tileSize / 2), i.zoomReverse ? (i.zoomOffset--, i.minZoom++) : (i.zoomOffset++, i.maxZoom--), i.minZoom = Math.max(0, i.minZoom)), "string" == typeof i.subdomains && (i.subdomains = i.subdomains.split("")), ot || this.on("tileunload", this._onTileRemove); 8315 }, 8316 setUrl: function setUrl(t, i) { 8317 return this._url === t && void 0 === i && (i = !0), this._url = t, i || this.redraw(), this; 8318 }, 8319 createTile: function createTile(t, i) { 8320 var e = document.createElement("img"); 8321 return zi(e, "load", p(this._tileOnLoad, this, i, e)), zi(e, "error", p(this._tileOnError, this, i, e)), !this.options.crossOrigin && "" !== this.options.crossOrigin || (e.crossOrigin = !0 === this.options.crossOrigin ? "" : this.options.crossOrigin), e.alt = "", e.setAttribute("role", "presentation"), e.src = this.getTileUrl(t), e; 8322 }, 8323 getTileUrl: function getTileUrl(t) { 8324 var i, 8325 e = { 8326 r: zt ? "@2x" : "", 8327 s: this._getSubdomain(t), 8328 x: t.x, 8329 y: t.y, 8330 z: this._getZoomForUrl() 8331 }; 8332 return this._map && !this._map.options.crs.infinite && (i = this._globalTileRange.max.y - t.y, this.options.tms && (e.y = i), e["-y"] = i), f(this._url, h(e, this.options)); 8333 }, 8334 _tileOnLoad: function _tileOnLoad(t, i) { 8335 it ? setTimeout(p(t, this, null, i), 0) : t(null, i); 8336 }, 8337 _tileOnError: function _tileOnError(t, i, e) { 8338 var n = this.options.errorTileUrl; 8339 n && i.getAttribute("src") !== n && (i.src = n), t(e, i); 8340 }, 8341 _onTileRemove: function _onTileRemove(t) { 8342 t.tile.onload = null; 8343 }, 8344 _getZoomForUrl: function _getZoomForUrl() { 8345 var t = this._tileZoom, 8346 i = this.options.maxZoom; 8347 return this.options.zoomReverse && (t = i - t), t + this.options.zoomOffset; 8348 }, 8349 _getSubdomain: function _getSubdomain(t) { 8350 var i = Math.abs(t.x + t.y) % this.options.subdomains.length; 8351 return this.options.subdomains[i]; 8352 }, 8353 _abortLoading: function _abortLoading() { 8354 var t, i; 8355 8356 for (t in this._tiles) { 8357 this._tiles[t].coords.z !== this._tileZoom && ((i = this._tiles[t].el).onload = a, i.onerror = a, i.complete || (i.src = y, ri(i), delete this._tiles[t])); 8358 } 8359 }, 8360 _removeTile: function _removeTile(t) { 8361 var i = this._tiles[t]; 8362 if (i) return at || i.el.setAttribute("src", y), on.prototype._removeTile.call(this, t); 8363 }, 8364 _tileReady: function _tileReady(t, i, e) { 8365 if (this._map && (!e || e.getAttribute("src") !== y)) return on.prototype._tileReady.call(this, t, i, e); 8366 } 8367 }); 8368 8369 function rn(t, i) { 8370 return new sn(t, i); 8371 } 8372 8373 var an = sn.extend({ 8374 defaultWmsParams: { 8375 service: "WMS", 8376 request: "GetMap", 8377 layers: "", 8378 styles: "", 8379 format: "image/jpeg", 8380 transparent: !1, 8381 version: "1.1.1" 8382 }, 8383 options: { 8384 crs: null, 8385 uppercase: !1 8386 }, 8387 initialize: function initialize(t, i) { 8388 this._url = t; 8389 var e = h({}, this.defaultWmsParams); 8390 8391 for (var n in i) { 8392 n in this.options || (e[n] = i[n]); 8393 } 8394 8395 var o = (i = c(this, i)).detectRetina && zt ? 2 : 1, 8396 s = this.getTileSize(); 8397 e.width = s.x * o, e.height = s.y * o, this.wmsParams = e; 8398 }, 8399 onAdd: function onAdd(t) { 8400 this._crs = this.options.crs || t.options.crs, this._wmsVersion = parseFloat(this.wmsParams.version); 8401 var i = 1.3 <= this._wmsVersion ? "crs" : "srs"; 8402 this.wmsParams[i] = this._crs.code, sn.prototype.onAdd.call(this, t); 8403 }, 8404 getTileUrl: function getTileUrl(t) { 8405 var i = this._tileCoordsToNwSe(t), 8406 e = this._crs, 8407 n = O(e.project(i[0]), e.project(i[1])), 8408 o = n.min, 8409 s = n.max, 8410 r = (1.3 <= this._wmsVersion && this._crs === be ? [o.y, o.x, s.y, s.x] : [o.x, o.y, s.x, s.y]).join(","), 8411 a = sn.prototype.getTileUrl.call(this, t); 8412 8413 return a + _(this.wmsParams, a, this.options.uppercase) + (this.options.uppercase ? "&BBOX=" : "&bbox=") + r; 8414 }, 8415 setParams: function setParams(t, i) { 8416 return h(this.wmsParams, t), i || this.redraw(), this; 8417 } 8418 }); 8419 sn.WMS = an, rn.wms = function (t, i) { 8420 return new an(t, i); 8421 }; 8422 var hn = Me.extend({ 8423 options: { 8424 padding: .1, 8425 tolerance: 0 8426 }, 8427 initialize: function initialize(t) { 8428 c(this, t), m(this), this._layers = this._layers || {}; 8429 }, 8430 onAdd: function onAdd() { 8431 this._container || (this._initContainer(), this._zoomAnimated && ci(this._container, "leaflet-zoom-animated")), this.getPane().appendChild(this._container), this._update(), this.on("update", this._updatePaths, this); 8432 }, 8433 onRemove: function onRemove() { 8434 this.off("update", this._updatePaths, this), this._destroyContainer(); 8435 }, 8436 getEvents: function getEvents() { 8437 var t = { 8438 viewreset: this._reset, 8439 zoom: this._onZoom, 8440 moveend: this._update, 8441 zoomend: this._onZoomEnd 8442 }; 8443 return this._zoomAnimated && (t.zoomanim = this._onAnimZoom), t; 8444 }, 8445 _onAnimZoom: function _onAnimZoom(t) { 8446 this._updateTransform(t.center, t.zoom); 8447 }, 8448 _onZoom: function _onZoom() { 8449 this._updateTransform(this._map.getCenter(), this._map.getZoom()); 8450 }, 8451 _updateTransform: function _updateTransform(t, i) { 8452 var e = this._map.getZoomScale(i, this._zoom), 8453 n = yi(this._container), 8454 o = this._map.getSize().multiplyBy(.5 + this.options.padding), 8455 s = this._map.project(this._center, i), 8456 r = this._map.project(t, i).subtract(s), 8457 a = o.multiplyBy(-e).add(n).add(o).subtract(r); 8458 8459 vt ? gi(this._container, a, e) : vi(this._container, a); 8460 }, 8461 _reset: function _reset() { 8462 for (var t in this._update(), this._updateTransform(this._center, this._zoom), this._layers) { 8463 this._layers[t]._reset(); 8464 } 8465 }, 8466 _onZoomEnd: function _onZoomEnd() { 8467 for (var t in this._layers) { 8468 this._layers[t]._project(); 8469 } 8470 }, 8471 _updatePaths: function _updatePaths() { 8472 for (var t in this._layers) { 8473 this._layers[t]._update(); 8474 } 8475 }, 8476 _update: function _update() { 8477 var t = this.options.padding, 8478 i = this._map.getSize(), 8479 e = this._map.containerPointToLayerPoint(i.multiplyBy(-t)).roun
8479d(); 8480 8481 this._bounds = new I(e, e.add(i.multiplyBy(1 + 2 * t)).round()), this._center = this._map.getCenter(), this._zoom = this._map.getZoom(); 8482 } 8483 }), 8484 un = hn.extend({ 8485 getEvents: function getEvents() { 8486 var t = hn.prototype.getEvents.call(this); 8487 return t.viewprereset = this._onViewPreReset, t; 8488 }, 8489 _onViewPreReset: function _onViewPreReset() { 8490 this._postponeUpdatePaths = !0; 8491 }, 8492 onAdd: function onAdd() { 8493 hn.prototype.onAdd.call(this), this._draw(); 8494 }, 8495 _initContainer: function _initContainer() { 8496 var t = this._container = document.createElement("canvas"); 8497 zi(t, "mousemove", this._onMouseMove, this), zi(t, "click dblclick mousedown mouseup contextmenu", this._onClick, this), zi(t, "mouseout", this._handleMouseOut, this), this._ctx = t.getContext("2d"); 8498 }, 8499 _destroyContainer: function _destroyContainer() { 8500 z(this._redrawRequest), delete this._ctx, ri(this._container), Si(this._container), delete this._container; 8501 }, 8502 _updatePaths: function _updatePaths() { 8503 if (!this._postponeUpdatePaths) { 8504 for (var t in this._redrawBounds = null, this._layers) { 8505 this._layers[t]._update(); 8506 } 8507 8508 this._redraw(); 8509 } 8510 }, 8511 _update: function _update() { 8512 var t, i, e, n; 8513 this._map._animatingZoom && this._bounds || (hn.prototype._update.call(this), t = this._bounds, i = this._container, e = t.getSize(), n = zt ? 2 : 1, vi(i, t.min), i.width = n * e.x, i.height = n * e.y, i.style.width = e.x + "px", i.style.height = e.y + "px", zt && this._ctx.scale(2, 2), this._ctx.translate(-t.min.x, -t.min.y), this.fire("update")); 8514 }, 8515 _reset: function _reset() { 8516 hn.prototype._reset.call(this), this._postponeUpdatePaths && (this._postponeUpdatePaths = !1, this._updatePaths()); 8517 }, 8518 _initPath: function _initPath(t) { 8519 this._updateDashArray(t); 8520 8521 var i = (this._layers[m(t)] = t)._order = { 8522 layer: t, 8523 prev: this._drawLast, 8524 next: null 8525 }; 8526 this._drawLast && (this._drawLast.next = i), this._drawLast = i, this._drawFirst = this._drawFirst || this._drawLast; 8527 }, 8528 _addPath: function _addPath(t) { 8529 this._requestRedraw(t); 8530 }, 8531 _removePath: function _removePath(t) { 8532 var i = t._order, 8533 e = i.next, 8534 n = i.prev; 8535 e ? e.prev = n : this._drawLast = n, n ? n.next = e : this._drawFirst = e, delete t._order, delete this._layers[m(t)], this._requestRedraw(t); 8536 }, 8537 _updatePath: function _updatePath(t) { 8538 this._extendRedrawBounds(t), t._project(), t._update(), this._requestRedraw(t); 8539 }, 8540 _updateStyle: function _updateStyle(t) { 8541 this._updateDashArray(t), this._requestRedraw(t); 8542 }, 8543 _updateDashArray: function _updateDashArray(t) { 8544 if ("string" == typeof t.options.dashArray) { 8545 for (var i, e = t.options.dashArray.split(/[, ]+/), n = [], o = 0; o < e.length; o++) { 8546 if (i = Number(e[o]), isNaN(i)) return; 8547 n.push(i); 8548 } 8549 8550 t.options._dashArray = n; 8551 } else t.options._dashArray = t.options.dashArray; 8552 }, 8553 _requestRedraw: function _requestRedraw(t) { 8554 this._map && (this._extendRedrawBounds(t), this._redrawRequest = this._redrawRequest || M(this._redraw, this)); 8555 }, 8556 _extendRedrawBounds: function _extendRedrawBounds(t) { 8557 var i; 8558 t._pxBounds && (i = (t.options.weight || 0) + 1, this._redrawBounds = this._redrawBounds || new I(), this._redrawBounds.extend(t._pxBounds.min.subtract([i, i])), this._redrawBounds.extend(t._pxBounds.max.add([i, i]))); 8559 }, 8560 _redraw: function _redraw() { 8561 this._redrawRequest = null, this._redrawBounds && (this._redrawBounds.min._floor(), this._redrawBounds.max._ceil()), this._clear(), this._draw(), this._redrawBounds = null; 8562 }, 8563 _clear: function _clear() { 8564 var t, 8565 i = this._redrawBounds; 8566 i ? (t = i.getSize(), this._ctx.clearRect(i.min.x, i.min.y, t.x, t.y)) : (this._ctx.save(), this._ctx.setTransform(1, 0, 0, 1, 0, 0), this._ctx.clearRect(0, 0, this._container.width, this._container.height), this._ctx.restore(
8566)); 8567 }, 8568 _draw: function _draw() { 8569 var t, 8570 i, 8571 e = this._redrawBounds; 8572 this._ctx.save(), e && (i = e.getSize(), this._ctx.beginPath(), this._ctx.rect(e.min.x, e.min.y, i.x, i.y), this._ctx.clip()), this._drawing = !0; 8573 8574 for (var n = this._drawFirst; n; n = n.next) { 8575 t = n.layer, (!e || t._pxBounds && t._pxBounds.intersects(e)) && t._updatePath(); 8576 } 8577 8578 this._drawing = !1, this._ctx.restore(); 8579 }, 8580 _updatePoly: function _updatePoly(t, i) { 8581 if (this._drawing) { 8582 var e, 8583 n, 8584 o, 8585 s, 8586 r = t._parts, 8587 a = r.length, 8588 h = this._ctx; 8589 8590 if (a) { 8591 for (h.beginPath(), e = 0; e < a; e++) { 8592 for (n = 0, o = r[e].length; n < o; n++) { 8593 s = r[e][n], h[n ? "lineTo" : "moveTo"](s.x, s.y); 8594 } 8595 8596 i && h.closePath(); 8597 } 8598 8599 this._fillStroke(h, t); 8600 } 8601 } 8602 }, 8603 _updateCircle: function _updateCircle(t) { 8604 var i, e, n, o; 8605 this._drawing && !t._empty() && (i = t._point, e = this._ctx, n = Math.max(Math.round(t._radius), 1), 1 != (o = (Math.max(Math.round(t._radiusY), 1) || n) / n) && (e.save(), e.scale(1, o)), e.beginPath(), e.arc(i.x, i.y / o, n, 0, 2 * Math.PI, !1), 1 != o && e.restore(), this._fillStroke(e, t)); 8606 }, 8607 _fillStroke: function _fillStroke(t, i) { 8608 var e = i.options; 8609 e.fill && (t.globalAlpha = e.fillOpacity, t.fillStyle = e.fillColor || e.color, t.fill(e.fillRule || "evenodd")), e.stroke && 0 !== e.weight && (t.setLineDash && t.setLineDash(i.options && i.options._dashArray || []), t.globalAlpha = e.opacity, t.lineWidth = e.weight, t.strokeStyle = e.color, t.lineCap = e.lineCap, t.lineJoin = e.lineJoin, t.stroke()); 8610 }, 8611 _onClick: function _onClick(t) { 8612 for (var i, e, n = this._map.mouseEventToLayerPoint(t), o = this._drawFirst; o; o = o.next) { 8613 (i = o.layer).options.interactive && i._containsPoint(n) && (("click" === t.type || "preclick" !== t.type) && this._map._draggableMoved(i) || (e = i)); 8614 } 8615 8616 e && (Fi(t), this._fireEvent([e], t)); 8617 }, 8618 _onMouseMove: function _onMouseMove(t) { 8619 var i; 8620 !this._map || this._map.dragging.moving() || this._map._animatingZoom || (i = this._map.mouseEventToLayerPoint(t), this._handleMouseHover(t, i)); 8621 }, 8622 _handleMouseOut: function _handleMouseOut(t) { 8623 var i = this._hoveredLayer; 8624 i && (_i(this._container, "leaflet-interactive"), this._fireEvent([i], t, "mouseout"), this._hoveredLayer = null, this._mouseHoverThrottled = !1); 8625 }, 8626 _handleMouseHover: function _handleMouseHover(t, i) { 8627 if (!this._mouseHoverThrottled) { 8628 for (var e, n, o = this._drawFirst; o; o = o.next) { 8629 (e = o.layer).options.interactive && e._containsPoint(i) && (n = e); 8630 } 8631 8632 n !== this._hoveredLayer && (this._handleMouseOut(t), n && (ci(this._container, "leaflet-interactive"), this._fireEvent([n], t, "mouseover"), this._hoveredLayer = n)), this._hoveredLayer && this._fireEvent([this._hoveredLayer], t), this._mouseHoverThrottled = !0, setTimeout(p(function () { 8633 this._mouseHoverThrottled = !1; 8634 }, this), 32); 8635 } 8636 }, 8637 _fireEvent: function _fireEvent(t, i, e) { 8638 this._map._fireDOMEvent(i, e || i.type, t); 8639 }, 8640 _bringToFront: function _bringToFront(t) { 8641 var i, 8642 e, 8643 n = t._order; 8644 n && (i = n.next, e = n.prev, i && ((i.prev = e) ? e.next = i : i && (this._drawFirst = i), n.prev = this._drawLast, (this._drawLast.next = n).next = null, this._drawLast = n, this._requestRedraw(t))); 8645 }, 8646 _bringToBack: function _bringToBack(t) { 8647 var i, 8648 e, 8649 n = t._order; 8650 n && (i = n.next, (e = n.prev) && ((e.next = i) ? i.prev = e : e && (this._drawLast = e), n.prev = null, n.next = this._drawFirst, this._drawFirst.prev = n, this._drawFirst = n, this._requestRedraw(t))); 8651 } 8652 }); 8653 8654 function ln(t) { 8655 return St ? new un(t) : null; 8656 } 8657 8658 var cn = function () { 8659 try { 8660 return document.namespaces.add("lvml", "urn:schemas-microsoft-com:vml"), function (t) { 8661 return document.createElement("<lvml:" + t + ' class="lvml">'); 8662 }; 8663 } catch (t) { 8664 return function (t) { 8665 return document.createElement("<" + t + ' xmlns="urn:schemas-microsoft.com:vml" class="lvml">'); 8666 }; 8667 } 8668 }(), 8669 _n = { 8670 _initContainer: function _initContainer() { 8671 this._container = si("div", "leaflet-vml-container"); 8672 }, 8673 _update: function _update() { 8674 this._map._animatingZoom || (hn.prototype._update.call(this), this.fire("update")); 8675 }, 8676 _initPath: function _initPath(t) { 8677 var i = t._container = cn("shape"); 8678 ci(i, "leaflet-vml-shape " + (this.options.className || "")), i.coordsize = "1 1", t._path = cn("path"), i.appendChild(t._path), this._updateStyle(t), this._layers[m(t)] = t; 8679 }, 8680 _addPath: function _addPath(t) { 8681 var i = t._container; 8682 this._container.appendChild(i), t.options.interactive && t.addInteractiveTarget(i); 8683 }, 8684 _removePath: function _removePath(t) { 8685 var i = t._container; 8686 ri(i), t.removeInteractiveTarget(i), delete this._layers[m(t)]; 8687 }, 8688 _updateStyle: function _updateStyle(t) { 8689 var i = t._stroke, 8690 e = t._fill, 8691 n = t.options, 8692 o = t._container; 8693 o.stroked = !!n.stroke, o.filled = !!n.fill, n.stroke ? (i = i || (t._stroke = cn("stroke")), o.appendChild(i), i.weight = n.weight + "px", i.color = n.color, i.opacity = n.opacity, n.dashArray ? i.dashStyle = g(n.dashArray) ? n.dashArray.join(" ") : n.dashArray.replace(/( *, *)/g, " ") : i.dashStyle = "", i.endcap = n.lineCap.replace("butt", "flat"), i.joinstyle = n.lineJoin) : i && (o.removeChild(i), t._stroke = null), n.fill ? (e = e || (t._fill = cn("fill")), o.appendChild(e), e.color = n.fillColor || n.color, e.opacity = n.fillOpacity) : e && (o.removeChild(e), t._fill = null); 8694 }, 8695 _updateCircle: function _updateCircle(t) { 8696 var i = t._point.round(), 8697 e = Math.round(t._radius), 8698 n = Math.round(t._radiusY || e); 8699 8700 this._setPath(t, t._empty() ? "M0 0" : "AL " + i.x + "," + i.y + " " + e + "," + n + " 0,23592600"); 8701 }, 8702 _setPath: function _setPath(t, i) { 8703 t._path.v = i; 8704 }, 8705 _bringToFront: function _bringToFront(t) { 8706 hi(t._container); 8707 }, 8708 _bringToBack: function _bringToBack(t) { 8709 ui(t._container); 8710 } 8711 }, 8712 dn = Et ? cn : J, 8713 pn = hn.extend({ 8714 getEvents: function getEvents() { 8715 var t = hn.prototype.getEvents.call(this); 8716 return t.zoomstart = this._onZoomStart, t; 8717 }, 8718 _initContainer: function _initContainer() { 8719 this._container = dn("svg"), this._container.setAttribute("pointer-events", "none"), this._rootGroup = dn("g"), this._container.appendChild(this._rootGroup); 8720 }, 8721 _destroyContainer: function _destroyContainer() { 8722 ri(this._container), Si(this._container), delete this._container, delete this._rootGroup, delete this._svgSize; 8723 }, 8724 _onZoomStart: function _onZoomStart() { 8725 this._update(); 8726 }, 8727 _update: function _update() { 8728 var t, i, e; 8729 this._map._animatingZoom && this._bounds || (hn.prototype._update.call(this), i = (t = this._bounds).getSize(), e = this._container, this._svgSize && this._svgSize.equals(i) || (this._svgSize = i, e.setAttribute("width", i.x), e.setAttribute("height", i.y)), vi(e, t.min), e.setAttribute("viewBox", [t.min.x, t.min.y, i.x, i.y].join(" ")), this.fire("update")); 8730 }, 8731 _initPath: function _initPath(t) { 8732 var i = t._path = dn("path"); 8733 t.options.className && ci(i, t.options.className), t.options.interactive && ci(i, "leaflet-interactive"), this._updateStyle(t), this._layers[m(t)] = t; 8734 }, 8735 _addPath: function _addPath(t) { 8736 this._rootGroup || this._initContainer(), this._rootGroup.appendChild(t._path), t.addInteractiveTarget(t._path); 8737 }, 8738 _removePath: function _removePath(t) { 8739 ri(t._path), t.removeInteractiveTarget(t._path), delete this._layers[m(t)]; 8740 }, 8741 _updatePath: function _updatePath(t) { 8742 t._project(), t._update(); 8743 }, 8744 _updateStyle: function _updateStyle(t) { 8745 var i = t._path, 8746 e = t.options; 8747 i && (e.stroke ? (i.setAttribute("stroke", e.color), i.setAttribute("stroke-opacity", e.opacity), i.setAttribute("stroke-width", e.weight), i.setAttribute("stroke-linecap", e.lineCap), i.setAttribute("stroke-linejoin", e.lineJoin), e.dashArray ? i.setAttribute("stroke-dasharray", e.dashArray) : i.removeAttribute("stroke-dasharray"), e.dashOffset ? i.setAttribute("stroke-dashoffset", e.dashOffset)
8747: i.removeAttribute("stroke-dashoffset")) : i.setAttribute("stroke", "none"), e.fill ? (i.setAttribute("fill", e.fillColor || e.color), i.setAttribute("fill-opacity", e.fillOpacity), i.setAttribute("fill-rule", e.fillRule || "evenodd")) : i.setAttribute("fill", "none")); 8748 }, 8749 _updatePoly: function _updatePoly(t, i) { 8750 this._setPath(t, $(t._parts, i)); 8751 }, 8752 _updateCircle: function _updateCircle(t) { 8753 var i = t._point, 8754 e = Math.max(Math.round(t._radius), 1), 8755 n = "a" + e + "," + (Math.max(Math.round(t._radiusY), 1) || e) + " 0 1,0 ", 8756 o = t._empty() ? "M0 0" : "M" + (i.x - e) + "," + i.y + n + 2 * e + ",0 " + n + 2 * -e + ",0 "; 8757 8758 this._setPath(t, o); 8759 }, 8760 _setPath: function _setPath(t, i) { 8761 t._path.setAttribute("d", i); 8762 }, 8763 _bringToFront: function _bringToFront(t) { 8764 hi(t._path); 8765 }, 8766 _bringToBack: function _bringToBack(t) { 8767 ui(t._path); 8768 } 8769 }); 8770 8771 function mn(t) { 8772 return Zt || Et ? new pn(t) : null; 8773 } 8774 8775 Et && pn.include(_n), Ki.include({ 8776 getRenderer: function getRenderer(t) { 8777 var i = (i = t.options.renderer || this._getPaneRenderer(t.options.pane) || this.options.renderer || this._renderer) || (this._renderer = this._createRenderer()); 8778 8779 return this.hasLayer(i) || this.addLayer(i), i; 8780 }, 8781 _getPaneRenderer: function _getPaneRenderer(t) { 8782 if ("overlayPane" === t || void 0 === t) return !1; 8783 var i = this._paneRenderers[t]; 8784 return void 0 === i && (i = this._createRenderer({ 8785 pane: t 8786 }), this._paneRenderers[t] = i), i; 8787 }, 8788 _createRenderer: function _createRenderer(t) { 8789 return this.options.preferCanvas && ln(t) || mn(t); 8790 } 8791 }); 8792 var fn = Re.extend({ 8793 initialize: function initialize(t, i) { 8794 Re.prototype.initialize.call(this, this._boundsToLatLngs(t), i); 8795 }, 8796 setBounds: function setBounds(t) { 8797 return this.setLatLngs(this._boundsToLatLngs(t)); 8798 }, 8799 _boundsToLatLngs: function _boundsToLatLngs(t) {
8800 return [(t = N(t)).getSouthWest(), t.getNorthWest(), t.getNorthEast(), t.getSouthEast()]; 8801 } 8802 }); 8803 pn.create = dn, pn.pointsToPath = $, Ne.geometryToLayer = De, Ne.coordsToLatLng = We, Ne.coordsToLatLngs = He, Ne.latLngToCoords = Fe, Ne.latLngsToCoords = Ue, Ne.getFeature = Ve, Ne.asFeature = qe, Ki.mergeOptions({ 8804 boxZoom: !0 8805 }); 8806 var gn = ie.extend({ 8807 initialize: function initialize(t) { 8808 this._map = t, this._container = t._container, this._pane = t._panes.overlayPane, this._resetStateTimeout = 0, t.on("unload", this._destroy, this); 8809 }, 8810 addHooks: function addHooks() { 8811 zi(this._container, "mousedown", this._onMouseDown, this); 8812 }, 8813 removeHooks: function removeHooks() { 8814 Si(this._container, "mousedown", this._onMouseDown, this); 8815 }, 8816 moved: function moved() { 8817 return this._moved; 8818 }, 8819 _destroy: function _destroy() { 8820 ri(this._pane), delete this._pane; 8821 }, 8822 _resetState: function _resetState() { 8823 this._resetStateTimeout = 0, this._moved = !1; 8824 }, 8825 _clearDeferredResetState: function _clearDeferredResetState() { 8826 0 !== this._resetStateTimeout && (clearTimeout(this._resetStateTimeout), this._resetStateTimeout = 0); 8827 }, 8828 _onMouseDown: function _onMouseDown(t) { 8829 if (!t.shiftKey || 1 !== t.which && 1 !== t.button) return !1; 8830 this._clearDeferredResetState(), this._resetState(), Xt(), xi(), this._startPoint = this._map.mouseEventToContainerPoint(t), zi(document, { 8831 contextmenu: Ni, 8832 mousemove: this._onMouseMove, 8833 mouseup: this._onMouseUp, 8834 keydown: this._onKeyDown 8835 }, this); 8836 }, 8837 _onMouseMove: function _onMouseMove(t) { 8838 this._moved || (this._moved = !0, this._box = si("div", "leaflet-zoom-box", this._container), ci(this._container, "leaflet-crosshair"), this._map.fire("boxzoomstart")), this._point = this._map.mouseEventToContainerPoint(t); 8839 var i = new I(this._point, this._startPoint), 8840 e = i.getSize(); 8841 vi(this._box, i.min), this._box.style.width = e.x + "px", this._box.style.height = e.y + "px"; 8842 }, 8843 _finish: function _finish() { 8844 this._moved && (ri(this._box), _i(this._container, "leaflet-crosshair")), Jt(), wi(), Si(document, { 8845 contextmenu: Ni, 8846 mousemove: this._onMouseMove, 8847 mouseup: this._onMouseUp, 8848 keydown: this._onKeyDown 8849 }, this); 8850 }, 8851 _onMouseUp: function _onMouseUp(t) { 8852 var i; 8853 1 !== t.which && 1 !== t.button || (this._finish(), this._moved && (this._clearDeferredResetState(), this._resetStateTimeout = setTimeout(p(this._resetState, this), 0), i = new R(this._map.containerPointToLatLng(this._startPoint), this._map.containerPointToLatLng(this._point)), this._map.fitBounds(i).fire("boxzoomend", { 8854 boxZoomBounds: i 8855 }))); 8856 }, 8857 _onKeyDown: function _onKeyDown(t) { 8858 27 === t.keyCode && this._finish(); 8859 } 8860 }); 8861 Ki.addInitHook("addHandler", "boxZoom", gn), Ki.mergeOptions({ 8862 doubleClickZoom: !0 8863 }); 8864 var vn = ie.extend({ 8865 addHooks: function addHooks() { 8866 this._map.on("dblclick", this._onDoubleClick, this); 8867 }, 8868 removeHooks: function removeHooks() { 8869 this._map.off("dblclick", this._onDoubleClick, this); 8870 }, 8871 _onDoubleClick: function _onDoubleClick(t) { 8872 var i = this._map, 8873 e = i.getZoom(), 8874 n = i.options.zoomDelta, 8875 o = t.originalEvent.shiftKey ? e - n : e + n; 8876 "center" === i.options.doubleClickZoom ? i.setZoom(o) : i.setZoomAround(t.containerPoint, o); 8877 } 8878 }); 8879 Ki.addInitHook("addHandler", "doubleClickZoom", vn), Ki.mergeOptions({ 8880 dragging: !0, 8881 inertia: !st, 8882 inertiaDeceleration: 3400, 8883 inertiaMaxSpeed: 1 / 0, 8884 easeLinearity: .2, 8885 worldCopyJump: !1, 8886 maxBoundsViscosity: 0 8887 }); 8888 var yn = ie.extend({ 8889 addHooks: function addHooks() { 8890 var t; 8891 this._draggable || (t = this._map, this._draggable = new ae(t._mapPane, t._container), this._draggable.on({ 8892 dragstart: this._onDragStart, 8893 drag: this._onDrag, 8894 dragend: this._onDragEnd 8895 }, this), this._draggable.on("predrag", this._onPreDragLimit, this), t.options.worldCopyJump && (this._draggable.on("predrag", this._onPreDragWrap, this), t.on("zoomend", this._onZoomEnd, this), t.whenReady(this._onZoomEnd, this))), ci(this._map._container, "leaflet-grab leaflet-touch-drag"), this._draggable.enable(), this._positions = [], this._times = []; 8896 }, 8897 removeHooks: function removeHooks() { 8898 _i(this._map._container, "leaflet-grab"), _i(this._map._container, "leaflet-touch-drag"), this._draggable.disable(); 8899 }, 8900 moved: function moved() { 8901 return this._draggable && this._draggable._moved; 8902 }, 8903 moving: function moving() {
8904 return this._draggable && this._draggable._moving; 8905 }, 8906 _onDragStart: function _onDragStart() { 8907 var t, 8908 i = this._map; 8909 i._stop(), this._map.options.maxBounds && this._map.options.maxBoundsViscosity ? (t = N(this._map.options.maxBounds), this._offsetLimit = O(this._map.latLngToContainerPoint(t.getNorthWest()).multiplyBy(-1), this._map.latLngToContainerPoint(t.getSouthEast()).multiplyBy(-1).add(this._map.getSize())), this._viscosity = Math.min(1, Math.max(0, this._map.options.maxBoundsViscosity))) : this._offsetLimit = null, i.fire("movestart").fire("dragstart"), i.options.inertia && (this._positions = [], this._times = []); 8910 }, 8911 _onDrag: function _onDrag(t) { 8912 var i, e; 8913 this._map.options.inertia && (i = this._lastTime = +new Date(), e = this._lastPos = this._draggable._absPos || this._draggable._newPos, this._positions.push(e), this._times.push(i), this._prunePositions(i)), this._map.fire("move", t).fire("drag", t); 8914 }, 8915 _prunePositions: function _prunePositions(t) { 8916 for (; 1 < this._positions.length && 50 < t - this._times[0];) { 8917 this._positions.shift(), this._times.shift(); 8918 } 8919 }, 8920 _onZoomEnd: function _onZoomEnd() { 8921 var t = this._map.getSize().divideBy(2), 8922 i = this._map.latLngToLayerPoint([0, 0]); 8923 8924 this._initialWorldOffset = i.subtract(t).x, this._worldWidth = this._map.getPixelWorldBounds().getSize().x; 8925 }, 8926 _viscousLimit: function _viscousLimit(t, i) { 8927 return t - (t - i) * this._viscosity; 8928 }, 8929 _onPreDragLimit: function _onPreDragLimit() { 8930 var t, i; 8931 this._viscosity && this._offsetLimit && (t = this._draggable._newPos.subtract(this._draggable._startPos), i = this._offsetLimit, t.x < i.min.x && (t.x = this._viscousLimit(t.x, i.min.x)), t.y < i.min.y && (t.y = this._viscousLimit(t.y, i.min.y)), t.x > i.max.x && (t.x = this._viscousLimit(t.x, i.max.x)), t.y > i.max.y && (t.y = this._viscousLimit(t.y, i.max.y)), this._draggable._newPos = this._draggable._startPos.add(t)); 8932 }, 8933 _onPreDragWrap: function _onPreDragWrap() { 8934 var t = this._worldWidth, 8935 i = Math.round(t / 2), 8936 e = this._initialWorldOffset, 8937 n = this._draggable._newPos.x, 8938 o = (n - i + e) % t + i - e, 8939 s = (n + i + e) % t - i - e, 8940 r = Math.abs(o + e) < Math.abs(s + e) ? o : s; 8941 this._draggable._absPos = this._draggable._newPos.clone(), this._draggable._newPos.x = r; 8942 }, 8943 _onDragEnd: function _onDragEnd(t) { 8944 var i, 8945 e, 8946 n, 8947 o, 8948 s, 8949 r, 8950 a, 8951 h, 8952 u, 8953 l = this._map, 8954 c = l.options, 8955 _ = !c.inertia || this._times.length < 2; 8956 8957 l.fire("dragend", t), _ ? l.fire("moveend") : (this._prunePositions(+new Date()), i = this._lastPos.subtract(this._positions[0]), e = (this._lastTime - this._times[0]) / 1e3, n = c.easeLinearity, s = (o = i.multiplyBy(n / e)).distanceTo([0, 0]), r = Math.min(c.inertiaMaxSpeed, s), a = o.multiplyBy(r / s), h = r / (c.inertiaDeceleration * n), (u = a.multiplyBy(-h / 2).round()).x || u.y ? (u = l._limitOffset(u, l.options.maxBounds), M(function () { 8958 l.panBy(u, { 8959 duration: h, 8960 easeLinearity: n, 8961 noMoveStart: !0, 8962 animate: !0 8963 }); 8964 })) : l.fire("moveend")); 8965 } 8966 }); 8967 Ki.addInitHook("addHandler", "dragging", yn), Ki.mergeOptions({ 8968 keyboard: !0, 8969 keyboardPanDelta: 80 8970 }); 8971 var xn = ie.extend({ 8972 keyCodes: { 8973 left: [37], 8974 right: [39], 8975 down: [40], 8976 up: [38], 8977 zoomIn: [187, 107, 61, 171], 8978 zoomOut: [189, 109, 54, 173] 8979 }, 8980 initialize: function initialize(t) { 8981 this._map = t, this._setPanDelta(t.options.keyboardPanDelta), this._setZoomDelta(t.options.zoomDelta); 8982 }, 8983 addHooks: function addHooks() { 8984 var t = this._map._container; 8985 t.tabIndex <= 0 && (t.tabIndex = "0"), zi(t, { 8986 focus: this._onFocus, 8987 blur: this._onBlur, 8988 mousedown: this._onMouseDown 8989 }, this), this._map.on({ 8990 focus: this._addHooks, 8991 blur: this._removeHooks 8992 }, this); 8993 }, 8994 removeHooks: function removeHooks() { 8995 this._removeHooks(), Si(this._map._container, { 8996 focus: this._onFocus, 8997 blur: this._onBlur, 8998 mousedown: this._onMouseDown 8999 }, this), this._map.off({ 9000 focus: this._addHooks, 9001 blur: this._removeHooks 9002 }, this); 9003 }, 9004 _onMouseDown: function _onMouseDown() { 9005 var t, i, e, n; 9006 this._focused || (t = document.body, i = document.documentElement, e = t.scrollTop || i.scrollTop, n = t.scrollLeft || i.scrollLeft, this._map._container.focus(), window.scrollTo(n, e)); 9007 }, 9008 _onFocus: function _onFocus() { 9009 this._focused = !0, this._map.fire("focus"); 9010 }, 9011 _onBlur: function _onBlur() { 9012 this._focused = !1, this._map.fire("blur"); 9013 }, 9014 _setPanDelta: function _setPanDelta(t) { 9015 for (var i = this._panKeys = {}, e = this.keyCodes, n = 0, o = e.left.length; n < o; n++) { 9016 i[e.left[n]] = [-1 * t, 0]; 9017 } 9018 9019 for (n = 0, o = e.right.length; n < o; n++) { 9020 i[e.right[n]] = [t, 0]; 9021 } 9022 9023 for (n = 0, o = e.down.length; n < o; n++) { 9024 i[e.down[n]] = [0, t]; 9025 } 9026 9027 for (n = 0, o = e.up.length; n < o; n++) { 9028 i[e.up[n]] = [0, -1 * t]; 9029 } 9030 }, 9031 _setZoomDelta: function _setZoomDelta(t) { 9032 for (var i = this._zoomKeys = {}, e = this.keyCodes, n = 0, o = e.zoomIn.length; n < o; n++) { 9033 i[e.zoomIn[n]] = t; 9034 } 9035 9036 for (n = 0, o = e.zoomOut.length; n < o; n++) { 9037 i[e.zoomOut[n]] = -t; 9038 } 9039 }, 9040 _addHooks: function _addHooks() { 9041 zi(document, "keydown", this._onKeyDown, this); 9042 }, 9043 _removeHooks: function _removeHooks() { 9044 Si(document, "keydown", this._onKeyDown, this); 9045 }, 9046 _onKeyDown: function _onKeyDown(t) { 9047 if (!(t.altKey || t.ctrlKey || t.metaKey)) { 9048 var i,
9049 e = t.keyCode, 9050 n = this._map; 9051 if (e in this._panKeys) n._panAnim && n._panAnim._inProgress || (i = this._panKeys[e], t.shiftKey && (i = A(i).multiplyBy(3)), n.panBy(i), n.options.maxBounds && n.panInsideBounds(n.options.maxBounds));else if (e in this._zoomKeys) n.setZoom(n.getZoom() + (t.shiftKey ? 3 : 1) * this._zoomKeys[e]);else { 9052 if (27 !== e || !n._popup || !n._popup.options.closeOnEscapeKey) return; 9053 n.closePopup(); 9054 } 9055 Ni(t); 9056 } 9057 } 9058 }); 9059 Ki.addInitHook("addHandler", "keyboard", xn), Ki.mergeOptions({ 9060 scrollWheelZoom: !0, 9061 wheelDebounceTime: 40, 9062 wheelPxPerZoomLevel: 60 9063 }); 9064 var wn = ie.extend({ 9065 addHooks: function addHooks() { 9066 zi(this._map._container, "wheel", this._onWheelScroll, this), this._delta = 0; 9067 }, 9068 removeHooks: function removeHooks() { 9069 Si(this._map._container, "wheel", this._onWheelScroll, this); 9070 }, 9071 _onWheelScroll: function _onWheelScroll(t) { 9072 var i = Wi(t), 9073 e = this._map.options.wheelDebounceTime; 9074 this._delta += i, this._lastMousePos = this._map.mouseEventToContainerPoint(t), this._startTime || (this._startTime = +new Date()); 9075 var n = Math.max(e - (new Date() - this._startTime), 0); 9076 clearTimeout(this._timer), this._timer = setTimeout(p(this._performZoom, this), n), Ni(t); 9077 }, 9078 _performZoom: function _performZoom() { 9079 var t = this._map, 9080 i = t.getZoom(), 9081 e = this._map.options.zoomSnap || 0; 9082 9083 t._stop(); 9084 9085 var n = this._delta / (4 * this._map.options.wheelPxPerZoomLevel), 9086 o = 4 * Math.log(2 / (1 + Math.exp(-Math.abs(n)))) / Math.LN2, 9087 s = e ? Math.ceil(o / e) * e : o, 9088 r = t._limitZoom(i + (0 < this._delta ? s : -s)) - i; 9089 this._delta = 0, this._startTime = null, r && ("center" === t.options.scrollWheelZoom ? t.setZoom(i + r) : t.setZoomAround(this._lastMousePos, i + r)); 9090 } 9091 }); 9092 Ki.addInitHook("addHandler", "scrollWheelZoom", wn), Ki.mergeOptions({ 9093 tap: !0, 9094 tapTolerance: 15 9095 }); 9096 var Pn = ie.extend({ 9097 addHooks: function addHooks() { 9098 zi(this._map._container, "touchstart", this._onDown, this); 9099 }, 9100 removeHooks: function removeHooks() { 9101 Si(this._map._container, "touchstart", this._onDown, this); 9102 }, 9103 _onDown: function _onDown(t) { 9104 if (t.touches) { 9105 if (Ri(t), this._fireClick = !0, 1 < t.touches.length) return this._fireClick = !1, void clearTimeout(this._holdTimeout); 9106 var i = t.touches[0], 9107 e = i.target; 9108 this._startPos = this._newPos = new k(i.clientX, i.clientY), e.tagName && "a" === e.tagName.toLowerCase() && ci(e, "leaflet-active"), this._holdTimeout = setTimeout(p(function () { 9109 this._isTapValid() && (this._fireClick = !1, this._onUp(), this._simulateEvent("contextmenu", i)); 9110 }, this), 1e3), this._simulateEvent("mousedown", i), zi(document, { 9111 touchmove: this._onMove, 9112 touchend: this._onUp 9113 }, this); 9114 } 9115 }, 9116 _onUp: function _onUp(t) { 9117 var i, e; 9118 clearTimeout(this._holdTimeout), Si(document, { 9119 touchmove: this._onMove, 9120 touchend: this._onUp 9121 }, this), this._fireClick && t && t.changedTouches && ((e = (i = t.changedTouches[0]).target) && e.tagName && "a" === e.tagName.toLowerCase() && _i(e, "leaflet-active"), this._simulateEvent("mouseup", i), this._isTapValid() && this._simulateEvent("click", i)); 9122 }, 9123 _isTapValid: function _isTapValid() { 9124 return this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance; 9125 }, 9126 _onMove: function _onMove(t) { 9127 var i = t.touches[0]; 9128 this._newPos = new k(i.clientX, i.clientY), this._simulateEvent("mousemove", i); 9129 }, 9130 _simulateEvent: function _simulateEvent(t, i) { 9131 var e = document.createEvent("MouseEvents"); 9132 e._simulated = !0, i.target._simulatedClick = !0, e.initMouseEvent(t, !0, !0, window, 1, i.screenX, i.screenY, i.clientX, i.clientY, !1, !1, !1, !1, 0, null), i.target.dispatchEvent(e); 9133 } 9134 }); 9135 !bt || Lt && !ct || Ki.addInitHook("addHandler", "tap", Pn), Ki.mergeOptions({ 9136 touchZoom: bt && !st, 9137 bounceAtZoomLimits: !0 9138 }); 9139 var Ln = ie.extend({ 9140 addHooks: function addHooks() { 9141 ci(this._map._container, "leaflet-touch-zoom"), zi(this._map._container, "touchstart", this._onTouchStart, this); 9142 }, 9143 removeHooks: function removeHooks() { 9144 _i(this._map._container, "leaflet-touch-zoom"), Si(this._map._container, "touchstart", this._onTouchStart, this); 9145 }, 9146 _onTouchStart: function _onTouchStart(t) { 9147 var i, 9148 e, 9149 n = this._map; 9150 !t.touches || 2 !== t.touches.length || n._animatingZoom || this._zooming || (i = n.mouseEventToContainerPoint(t.touches[0]), e = n.mouseEventToContainerPoint(t.touches[1]), this._centerPoint = n.getSize()._divideBy(2), this._startLatLng = n.containerPointToLatLng(this._centerPoint), "center" !== n.options.touchZoom && (this._pinchStartLatLng = n.containerPointToLatLng(i.add(e)._divideBy(2))), this._startDist = i.distanceTo(e), this._startZoom = n.getZoom(), this._moved = !1, this._zooming = !0, n._stop(), zi(document, "touchmove", this._onTouchMove, this), zi(document, "touchend", this._onTouchEnd, this), Ri(t)); 9151 }, 9152 _onTouchMove: function _onTouchMove(t) { 9153 if (t.touches && 2 === t.touches.length && this._zooming) { 9154 var i = this._map, 9155 e = i.mouseEventToContainerPoint(t.touches[0]), 9156 n = i.mouseEventToContainerPoint(t.touches[1]), 9157 o = e.distanceTo(n) / this._startDist; 9158 9159 if (this._zoom = i.getScaleZoom(o, this._startZoom), !i.options.bounceAtZoomLimits && (this._zoom < i.getMinZoom() && o < 1 || this._zoom > i.getMaxZoom() && 1 < o) && (this._zoom = i._limitZoom(this._zoom)), "center" === i.options.touchZoom) { 9160 if (this._center = this._startLatLng, 1 == o) return; 9161 } else { 9162 var s = e._add(n)._divideBy(2)._subtract(this._centerPoint); 9163 9164 if (1 == o && 0 === s.x && 0 === s.y) return; 9165 this._center = i.unproject(i.project(this._pinchStartLatLng, this._zoom).subtract(s), this._zoom); 9166 } 9167 9168 this._moved || (i._moveStart(!0, !1), this._moved = !0), z(this._animRequest); 9169 var r = p(i._move, i, this._center, this._zoom, { 9170 pinch: !0, 9171 round: !1 9172 }); 9173 this._animRequest = M(r, this, !0), Ri(t); 9174 } 9175 }, 9176 _onTouchEnd: function _onTouchEnd() { 9177 this._moved && this._zooming ? (this._zooming = !1, z(this._animRequest), Si(document, "touchmove", this._onTouchMove, this), Si(document, "touchend", this._onTouchEnd, this), this._map.options.zoomAnimation ? this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), !0, this._map.options.zoomSnap) : this._map._resetView(this._center, this._map._limitZoom(this._zoom))) : this._zooming = !1; 9178 } 9179 }); 9180 Ki.addInitHook("addHandler", "touchZoom", Ln), Ki.BoxZoom = gn, Ki.DoubleClickZoom = vn, Ki.Drag = yn, Ki.Keyboard = xn, Ki.ScrollWheelZoom = wn, Ki.Tap = Pn, Ki.TouchZoom = Ln, t.version = "1.7.1", t.Control = Xi, t.control = Yi, t.Browser = Bt, t.Evented = E, t.Mixin = ne, t.Util = C, t.Class = S, t.Handler = ie, t.extend = h, t.bind = p, t.stamp = m, t.setOptions = c, t.DomEvent = qi, t.DomUtil = Mi, t.PosAnimation = Gi, t.Draggable = ae, t.LineUtil = fe, t.PolyUtil = ye, t.Point = k, t.point = A, t.Bounds = I, t.bounds = O, t.Transformation = q, t.transformation = G, t.Projection = Pe, t.LatLng = D, t.latLng = j, t.LatLngBounds = R, t.latLngBounds = N, t.CRS = H, t.GeoJSON = Ne, t.geoJSON = Ke, t.geoJson = Ye, t.Layer = Me, t.LayerGroup = ze, t.layerGroup = function (t, i) { 9181 return new ze(t, i); 9182 }, t.FeatureGroup = Ce, t.featureGroup = function (t, i) { 9183 return new Ce(t, i); 9184 }, t.ImageOverlay = Xe, t.imageOverlay = function (t, i, e) { 9185 return new Xe(t, i, e); 9186 }, t.VideoOverlay = Je, t.videoOverlay = function (t, i, e) { 9187 return new Je(t, i, e); 9188 }, t.SVGOverlay = $e, t.svgOverlay = function (t, i, e) { 9189 return new $e(t, i, e); 9190 }, t.DivOverlay = Qe, t.Popup = tn, t.popup = function (t, i) { 9191 return new tn(t, i); 9192 }, t.Tooltip = en, t.tooltip = function (t, i) { 9193 return new en(t, i); 9194 }, t.Icon = Se, t.icon = function (t) { 9195 return new Se(t); 9196 }, t.DivIcon = nn, t.divIcon = function (t) { 9197 return new nn(t); 9198 }, t.Marker = ke, t.marker = function (t, i) { 9199 return new ke(t, i); 9200 }, t.TileLayer = sn, t.tileLayer = rn, t.GridLayer = on, t.gridLayer = function (t) { 9201 return new on(t); 9202 }, t.SVG = pn, t.svg = mn, t.Renderer = hn, t.Canvas = un, t.canvas = ln, t.Path = Be, t.CircleMarker = Ae, t.circleMarker = function (t, i) { 9203 return new Ae(t, i); 9204 }, t.Circle = Ie, t.circle = function (t, i, e) { 9205 return new Ie(t, i, e); 9206 }, t.Polyline = Oe, t.polyline = function (t, i) { 9207 return new Oe(t, i); 9208 }, t.Polygon = Re, t.polygon = function (t, i) { 9209 return new Re(t, i); 9210 }, t.Rectangle = fn, t.rectangle = function (t, i) { 9211 return new fn(t, i); 9212 }, t.Map = Ki, t.map = function (t, i) { 9213 return new Ki(t, i); 9214 }; 9215 var bn = window.L; 9216 t.noConflict = function () { 9217 return window.L = bn, this; 9218 }, window.L = t; 9219}); 9220 9221},{}],5:[function(require,module,exports){ 9222"use strict"; 9223 9224L.Control.SleepMapControl = L.Control.extend({ 9225 initialize: function initialize(opts) { 9226 L.setOptions(this, opts); 9227 }, 9228 options: { 9229 position: 'topright', 9230 prompt: 'disable map', 9231 styles: { 9232 'backgroundColor': 'white', 9233 'padding': '5px', 9234 'border': '2px solid gray' 9235 } 9236 }, 9237 buildContainer: function buildContainer() { 9238 var self = this; 9239 var container = L.DomUtil.create('p', 'sleep-button'); 9240 9241 var boundEvent = this._nonBoundEvent.bind(this); 9242 9243 container.innerHTML = this.options.prompt; 9244 L.DomEvent.addListener(container, 'click', boundEvent); 9245 L.DomEvent.addListener(container, 'touchstart', boundEvent);
9246 Object.keys(this.options.styles).map(function (key) { 9247 container.style[key] = self.options.styles[key]; 9248 }); 9249 return this._container = container; 9250 }, 9251 onAdd: function onAdd() { 9252 return this._container || this.buildContainer(); 9253 }, 9254 _nonBoundEvent: function _nonBoundEvent(e) { 9255 L.DomEvent.stop(e); 9256 if (this._map) this._map.sleep._sleepMap(); 9257 return false; 9258 } 9259}); 9260 9261L.Control.sleepMapControl = function () { 9262 return new L.Control.SleepMapControl(); 9263}; 9264 9265L.Map.mergeOptions({ 9266 sleep: true, 9267 sleepTime: 750, 9268 wakeTime: 750, 9269 wakeMessageTouch: 'Touch to Wake', 9270 sleepNote: true, 9271 hoverToWake: true, 9272 sleepOpacity: .7, 9273 sleepButton: L.Control.sleepMapControl 9274}); 9275L.Map.Sleep = L.Handler.extend({ 9276 addHooks: function addHooks() { 9277 var self = this; 9278 this.sleepNote = L.DomUtil.create('p', 'sleep-note', this._map._container); 9279 this._enterTimeout = null; 9280 this._exitTimeout = null; 9281 this._sleepButton = this._map.options.sleepButton(); 9282 9283 if (this._map.tap) { 9284 this._map.addControl(this._sleepButton); 9285 } 9286 9287 var mapStyle = this._map._container.style; 9288 mapStyle.WebkitTransition += 'opacity .5s'; 9289 mapStyle.MozTransition += 'opacity .5s'; 9290 9291 this._setSleepNoteStyle(); 9292 9293 this._sleepMap(); 9294 }, 9295 removeHooks: function removeHooks() { 9296 if (!this._map.scrollWheelZoom.enabled()) { 9297 this._map.scrollWheelZoom.enable(); 9298 } 9299 9300 if (this._map.tap) { 9301 this._map.touchZoom.enable(); 9302 9303 this._map.dragging.enable(); 9304 9305 this._map.tap.enable(); 9306 } 9307 9308 L.DomUtil.setOpacity(this._map._container, 1); 9309 L.DomUtil.setOpacity(this.sleepNote, 0); 9310 9311 this._removeSleepingListeners(); 9312 9313 this._removeAwakeListeners(); 9314 }, 9315 _setSleepNoteStyle: function _setSleepNoteStyle() { 9316 var noteString = ''; 9317 var style = this.sleepNote.style; 9318 9319 if (this._map.tap) { 9320 noteString = this._map.options.wakeMessageTouch; 9321 } else if (this._map.options.wakeMessage) { 9322 noteString = this._map.options.wakeMessage; 9323 } else if (this._map.options.hoverToWake) { 9324 noteString = 'click or hover to wake'; 9325 } else { 9326 noteString = 'click to wake'; 9327 } 9328 9329 if (this._map.options.sleepNote) { 9330 this.sleepNote.innerHTML = noteString; 9331 style.pointerEvents = 'none'; 9332 style.maxWidth = '150px'; 9333 style.transitionDuration = '.2s'; 9334 style.zIndex = 5000; 9335 style.margin = 'auto'; 9336 style.textAlign = 'center'; 9337 style.borderRadius = '4px'; 9338 style.top = '50%'; 9339 style.position = 'relative'; 9340 style.padding = '5px'; 9341 style.border = 'solid 2px black'; 9342 style.background = 'white'; 9343 9344 if (this._map.options.sleepNoteStyle) { 9345 var noteStyleOverrides = this._map.options.sleepNoteStyle; 9346 Object.keys(noteStyleOverrides).map(function (key) { 9347 style[key] = noteStyleOverrides[key]; 9348 }); 9349 } 9350 } 9351 }, 9352 _wakeMap: function _wakeMap(e) { 9353 this._stopWaiting(); 9354 9355 this._map.scrollWheelZoom.enable(); 9356 9357 if (this._map.tap) { 9358 this._map.touchZoom.enable(); 9359 9360 this._map.dragging.enable(); 9361 9362 this._map.addControl(this._sleepButton); 9363 } 9364 9365 L.DomUtil.setOpacity(this._map._container, 1); 9366 this.sleepNote.style.opacity = 0; 9367 9368 this._addAwakeListeners(); 9369 }, 9370 _sleepMap: function _sleepMap() { 9371 this._stopWaiting(); 9372 9373 this._map.scrollWheelZoom.disable(); 9374 9375 if (this._map.tap) { 9376 this._map.touchZoom.disable(); 9377 9378 this._map.dragging.disable(); 9379 9380 this._map.tap.disable(); 9381 9382 this._map.removeControl(this._sleepButton); 9383 } 9384 9385 L.DomUtil.setOpacity(this._map._container, this._map.options.sleepOpacity); 9386 this.sleepNote.style.opacity = this._map.options.sleepNoteStyle && this._map.options.sleepNoteStyle.opacity ? this._map.options.sleepNoteStyle.opacity : .6; 9387 9388 this._addSleepingListeners(); 9389 }, 9390 _wakePending: function _wakePending() { 9391 this._map.once('mousedown', this._wakeMap, this); 9392 9393 if (this._map.options.hoverToWake) { 9394 var self = this; 9395 9396 this._map.once('mouseout', this._sleepMap, this); 9397 9398 self._enterTimeout = setTimeout(function () { 9399 self._map.off('mouseout', self._sleepMap, self); 9400 9401 self._wakeMap(); 9402 }, self._map.options.wakeTime); 9403 } 9404 }, 9405 _sleepPending: function _sleepPending() { 9406 var self = this; 9407 9408 self._map.once('mouseover', self._wakeMap, self); 9409 9410 self._exitTimeout = setTimeout(function () { 9411 self._map.off('mouseover', self._wakeMap, self); 9412 9413 self._sleepMap(); 9414 }, self._map.options.sleepTime); 9415 }, 9416 _addSleepingListeners: function _addSleepingListeners() { 9417 this._map.once('mouseover', this._wakePending, this); 9418 9419 this._map.tap && this._map.once('click', this._wakeMap, this); 9420 }, 9421 _addAwakeListeners: function _addAwakeListeners() { 9422 this._map.once('mouseout', this._sleepPending, this); 9423 }, 9424 _removeSleepingListeners: function _removeSleepingListeners() { 9425 this._map.options.hoverToWake && this._map.off('mouseover', this._wakePending, this); 9426 9427 this._map.off('mousedown', this._wakeMap, this); 9428 9429 this._map.tap && this._map.off('click', this._wakeMap, this); 9430 }, 9431 _removeAwakeListeners: function _removeAwakeListeners() { 9432 this._map.off('mouseout', this._sleepPending, this); 9433 },
9434 _stopWaiting: function _stopWaiting() { 9435 this._removeSleepingListeners(); 9436 9437 this._removeAwakeListeners(); 9438 9439 var self = this; 9440 if (this._enterTimeout) clearTimeout(self._enterTimeout); 9441 if (this._exitTimeout) clearTimeout(self._exitTimeout); 9442 this._enterTimeout = null; 9443 this._exitTimeout = null; 9444 } 9445}); 9446L.Map.addInitHook('addHandler', 'sleep', L.Map.Sleep); 9447 9448},{}],6:[function(require,module,exports){ 9449"use strict"; 9450 9451function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } 9452 9453!function (e) { 9454 var t = {}; 9455 9456 function n(i) { 9457 if (t[i]) return t[i].exports; 9458 var s = t[i] = { 9459 i: i, 9460 l: !1, 9461 exports: {} 9462 }; 9463 return e[i].call(s.exports, s, s.exports, n), s.l = !0, s.exports; 9464 } 9465 9466 n.m = e, n.c = t, n.d = function (e, t, i) { 9467 n.o(e, t) || Object.defineProperty(e, t, { 9468 enumerable: !0, 9469 get: i 9470 }); 9471 }, n.r = function (e) { 9472 "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { 9473 value: "Module" 9474 }), Object.defineProperty(e, "__esModule", { 9475 value: !0 9476 }); 9477 }, n.t = function (e, t) { 9478 if (1 & t && (e = n(e)), 8 & t) return e; 9479 if (4 & t && "object" == _typeof(e) && e && e.__esModule) return e; 9480 var i = Object.create(null); 9481 if (n.r(i), Object.defineProperty(i, "default", { 9482 enumerable: !0, 9483 value: e 9484 }), 2 & t && "string" != typeof e) for (var s in e) { 9485 n.d(i, s, function (t) { 9486 return e[t]; 9487 }.bind(null, s)); 9488 } 9489 return i; 9490 }, n.n = function (e) { 9491 var t = e && e.__esModule ? function () { 9492 return e.default; 9493 } : function () { 9494 return e; 9495 }; 9496 return n.d(t, "a", t), t; 9497 }, n.o = function (e, t) { 9498 return Object.prototype.hasOwnProperty.call(e, t); 9499 }, n.p = "", n(n.s = 1); 9500}([function (e) { 9501 e.exports = JSON.parse('{"a":"8.5.20"}'); 9502}, function (e, t, n) { 9503 "use strict"; 9504 9505 n.r(t); 9506 var i = n(0), 9507 s = { 9508 hooks: {}, 9509 extensions: [], 9510 wrappers: [], 9511 navbar: { 9512 add: !0, 9513 sticky: !0, 9514 title: "Menu", 9515 titleLink: "parent" 9516 }, 9517 onClick: { 9518 close: null, 9519 preventDefault: null, 9520 setSelected: !0 9521 }, 9522 slidingSubmenus: !0 9523 }, 9524 a = { 9525 classNames: { 9526 inset: "Inset", 9527 nolistview: "NoListview", 9528 nopanel: "NoPanel", 9529 panel: "Panel", 9530 selected: "Selected", 9531 vertical: "Vertical" 9532 }, 9533 language: null, 9534 openingInterval: 25, 9535 panelNodetype: ["ul", "ol", "div"], 9536 transitionDuration: 400 9537 }; 9538 9539 function o(e, t) { 9540 for (var n in "object" != r(e) && (e = {}), "object" != r(t) && (t = {}), t) { 9541 t.hasOwnProperty(n) && (void 0 === e[n] ? e[n] = t[n] : "object" == r(e[n]) && o(e[n], t[n])); 9542 } 9543 9544 return e; 9545 } 9546 9547 function r(e) { 9548 return {}.toString.call(e).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); 9549 } 9550 9551 function c(e, t, n) { 9552 if ("function" == typeof t) { 9553 var i = t.call(e); 9554 if (void 0 !== i) return i; 9555 } 9556 9557 return null !== t && "function" != typeof t && void 0 !== t || void 0 === n ? t : n; 9558 } 9559 9560 function m(e, t, n) { 9561 var i = !1, 9562 s = function s(n) { 9563 void 0 !== n && n.target !== e || (i || (e.removeEventListener("transitionend", s), e.removeEventListener("webkitTransitionEnd", s), t.call(e)), i = !0); 9564 }; 9565 9566 e.addEventListener("transitionend", s), e.addEventListener("webkitTransitionEnd", s), setTimeout(s, 1.1 * n); 9567 } 9568 9569 function l() { 9570 return "mm-" + d++; 9571 } 9572 9573 var d = 0; 9574 9575 function p(e) { 9576 return "mm-" == e.slice(0, 3) ? e.slice(3) : e; 9577 } 9578 9579 var u = {}; 9580 9581 function f(e, t) { 9582 void 0 === u[t] && (u[t] = {}), o(u[t], e); 9583 } 9584 9585 var h = { 9586 Menu: "Ù ÙÙ" 9587 }, 9588 v = { 9589 Menu: "Menü" 9590 }, 9591 b = { 9592 Menu: "ÐенÑ" 9593 }; 9594 9595 function g(e) { 9596 var t = e.split("."), 9597 n = document.createElement(t.shift()); 9598 return t.forEach(function (e) { 9599 n.classList.add(e); 9600 }), n; 9601 } 9602 9603 function _(e, t) { 9604 return Array.prototype.slice.call(e.querySelectorAll(t)); 9605 } 9606 9607 function y(e, t) { 9608 var n = Array.prototype.slice.call(e.children); 9609 return t ? n.filter(function (e) { 9610 return e.matches(t); 9611 }) : n; 9612 } 9613 9614 function L(e, t) { 9615 for (var n = [], i = e.parentElement; i;) { 9616 n.push(i), i = i.parentElement; 9617 } 9618 9619 return t ? n.filter(function (e) { 9620 return e.matches(t); 9621 }) : n; 9622 } 9623 9624 function w(e) { 9625 return e.filter(function (e) { 9626 return !e.matches(".mm-hidden"); 9627 }); 9628 } 9629 9630 function E(e) { 9631 var t = []; 9632 return w(e).forEach(function (e) { 9633 t.push.apply(t, y(e, "a.mm-listitem__text")); 9634 }), t.filter(function (e) { 9635 return !e.matches(".mm-btn_next"); 9636 }); 9637 } 9638 9639 function x(e, t, n) { 9640 e.matches("." + t) && (e.classList.remove(t), e.classList.add(n)); 9641 } 9642 9643 var P = {}; 9644 9645 function k(e, t, n) { 9646 "number" == typeof e && (e = "(min-width: " + e + "px)"), P[e] = P[e] || [], P[e].push({ 9647 yes: t, 9648 no: n 9649 }); 9650 } 9651 9652 function S(e, t) { 9653 for (var n = t.matches ? "yes" : "no", i = 0; i < P[e].length; i++) { 9654 P[e][i][n](); 9655 } 9656 } 9657 9658 f({ 9659 Menu: "Menu" 9660 }, "nl"), f(h, "fa"), f(v, "de"), f(b, "ru"); 9661 9662 var M = function () { 9663 function e(t, n, i) { 9664 return this.opts = o(n, e.options), this.conf = o(i, e.configs), this._api = ["bind", "initPanel", "initListview", "openPanel", "closePanel", "closeAllPanels", "setSelected"], this.node = {}, this.vars = {}, this.hook = {}, this.clck = [], this.node.menu = "string" == typeof t ? document.querySelector(t) : t, "function" == typeof this._deprecatedWarnings && this._deprecatedWarnings(), this._initWrappers(), this._initAddons(), this._initExtensions(), this._initHooks(), this._initAPI(), this._initMenu(), this._initPanels(), this._initOpened(), this._initAnchors(), function () { 9665 var e = function e(_e2) { 9666 var t = window.matchMedia(_e2); 9667 S(_e2, t), t.onchange = function (n) { 9668 S(_e2, t); 9669 }; 9670 }; 9671 9672 for (var t in P) { 9673 e(t); 9674 } 9675 }(), this; 9676 } 9677 9678 return e.prototype.openPanel = function (e, t) { 9679 var n = this; 9680 9681 if (this.trigger("openPanel:before", [e]), e && (e.matches(".mm-panel") || (e = e.closest(".mm-panel")), e)) { 9682 if ("boolean" != typeof t && (t = !0), e.parentElement.matches(".mm-listitem_vertical")) { 9683 L(e, ".mm-listitem_vertical").forEach(function (e) { 9684 e.classList.add("mm-listitem_opened"), y(e, ".mm-panel").forEach(function (e) { 9685 e.classList.remove("mm-hidden"); 9686 }); 9687 }); 9688 var i = L(e, ".mm-panel").filter(function (e) { 9689 return !e.parentElement.matches(".mm-listitem_vertical"); 9690 }); 9691 this.trigger("openPanel:start", [e]), i.length && this.openPanel
9691(i[0]), this.trigger("openPanel:finish", [e]); 9692 } else { 9693 if (e.matches(".mm-panel_opened")) return; 9694 var s = y(this.node.pnls, ".mm-panel"), 9695 a = y(this.node.pnls, ".mm-panel_opened")[0]; 9696 s.filter(function (t) { 9697 return t !== e; 9698 }).forEach(function (e) { 9699 e.classList.remove("mm-panel_opened-parent"); 9700 }); 9701 9702 for (var o = e.mmParent; o;) { 9703 (o = o.closest(".mm-panel")) && (o.parentElement.matches(".mm-listitem_vertical") || o.classList.add("mm-panel_opened-parent"), o = o.mmParent); 9704 } 9705 9706 s.forEach(function (e) { 9707 e.classList.remove("mm-panel_highest"); 9708 }), s.filter(function (e) { 9709 return e !== a; 9710 }).filter(function (t) { 9711 return t !== e; 9712 }).forEach(function (e) { 9713 e.classList.add("mm-hidden"); 9714 }), e.classList.remove("mm-hidden"); 9715 9716 var r = function r() { 9717 a && a.classList.remove("mm-panel_opened"), e.classList.add("mm-panel_opened"), e.matches(".mm-panel_opened-parent") ? (a && a.classList.add("mm-panel_highest"), e.classList.remove("mm-panel_opened-parent")) : (a && a.classList.add("mm-panel_opened-parent"), e.classList.add("mm-panel_highest")), n.trigger("openPanel:start", [e]); 9718 }, 9719 c = function c() { 9720 a && (a.classList.remove("mm-panel_highest"), a.classList.add("mm-hidden")), e.classList.remove("mm-panel_highest"), n.trigger("openPanel:finish", [e]); 9721 }; 9722 9723 t && !e.matches(".mm-panel_noanimation") ? setTimeout(function () { 9724 m(e, function () { 9725 c(); 9726 }, n.conf.transitionDuration), r(); 9727 }, this.conf.openingInterval) : (r(), c()); 9728 } 9729 9730 this.trigger("openPanel:after", [e]); 9731 } 9732 }, e.prototype.closePanel = function (e) { 9733 this.trigger("closePanel:before", [e]); 9734 var t = e.parentElement; 9735 t.matches(".mm-listitem_vertical") && (t.classList.remove("mm-listitem_opened"), e.classList.add("mm-hidden"), this.trigger("closePanel", [e])), this.trigger("closePanel:after", [e]); 9736 }, e.prototype.closeAllPanels = function (e) { 9737 this.trigger("closeAllPanels:before"), this.node.pnls.querySelectorAll(".mm-listitem").forEach(function (e) { 9738 e.classList.remove("mm-listitem_selected"), e.classList.remove("mm-listitem_opened"); 9739 }); 9740 var t = y(this.node.pnls, ".mm-panel"), 9741 n = e || t[0]; 9742 y(this.node.pnls, ".mm-panel").forEach(function (e) { 9743 e !== n && (e.classList.remove("mm-panel_opened"), e.classList.remove("mm-panel_opened-parent"), e.classList.remove("mm-panel_highest"), e.classList.add("mm-hidden")); 9744 }), this.openPanel(n, !1), this.trigger("closeAllPanels:after"); 9745 }, e.prototype.togglePanel = function (e) { 9746 var t = e.parentElement; 9747 t.matches(".mm-listitem_vertical") && this[t.matches(".mm-listitem_opened") ? "closePanel" : "openPanel"](e); 9748 }, e.prototype.setSelected = function (e) { 9749 this.trigger("setSelected:before", [e]), _(this.node.menu, ".mm-listitem_selected").forEach(function (e) { 9750 e.classList.remove("mm-listitem_selected"); 9751 }), e.classList.add("mm-listitem_selected"), this.trigger("setSelected:after", [e]); 9752 }, e.prototype.bind = function (e, t) { 9753 this.hook[e] = this.hook[e] || [], this.hook[e].push(t); 9754 }, e.prototype.trigger = function (e, t) { 9755 if (this.hook[e]) for (var n = 0, i = this.hook[e].length; n < i; n++) { 9756 this.hook[e][n].apply(this, t); 9757 } 9758 }, e.prototype._initAPI = function () { 9759 var e = this, 9760 t = this; 9761 this.API = {}, this._api.forEach(function (n) { 9762 e.API[n] = function () { 9763 var e = t[n].apply(t, arguments); 9764 return void 0 === e ? t.API : e; 9765 }; 9766 }), this.node.menu.mmApi = this.API; 9767 }, e.prototype._initHooks = function () { 9768 for (var e in this.opts.hooks) { 9769 this.bind(e, this.opts.hooks[e]); 9770 } 9771 }, e.prototype._initWrappers = function () { 9772 this.trigger("initWrappers:before"); 9773 9774 for (var t = 0; t < this.opts.wrappers.length; t++) { 9775 var n = e.wrappers[this.opts.wrappers[t]]; 9776 "function" == typeof n && n.call(this); 9777 } 9778 9779 this.trigger("initWrappers:after"); 9780 }, e.prototype._initAddons = function () { 9781 for (var t in this.trigger("initAddons:before"), e.addons) { 9782 e.addons[t].call(this); 9783 } 9784 9785 this.trigger("initAddons:after"); 9786 }, e.prototype._initExtensions = function () { 9787 var e = this; 9788 this.trigger("initExtensions:before"), "array" == r(this.opts.extensions) && (this.opts.extensions = { 9789 all: this.opts.extensions 9790 }
9790), Object.keys(this.opts.extensions).forEach(function (t) { 9791 var n = e.opts.extensions[t].map(function (e) { 9792 return "mm-menu_" + e; 9793 }); 9794 n.length && k(t, function () { 9795 n.forEach(function (t) { 9796 e.node.menu.classList.add(t); 9797 }); 9798 }, function () { 9799 n.forEach(function (t) { 9800 e.node.menu.classList.remove(t); 9801 }); 9802 }); 9803 }), this.trigger("initExtensions:after"); 9804 }, e.prototype._initMenu = function () { 9805 var e = this; 9806 this.trigger("initMenu:before"), this.node.wrpr = this.node.wrpr || this.node.menu.parentElement, this.node.wrpr.classList.add("mm-wrapper"), this.node.menu.id = this.node.menu.id || l(); 9807 var t = g("div.mm-panels"); 9808 y(this.node.menu).forEach(function (n) { 9809 e.conf.panelNodetype.indexOf(n.nodeName.toLowerCase()) > -1 && t.append(n); 9810 }), this.node.menu.append(t), this.node.pnls = t, this.node.menu.classList.add("mm-menu"), this.trigger("initMenu:after"); 9811 }, e.prototype._initPanels = function () { 9812 var e = this; 9813 this.trigger("initPanels:before"), this.clck.push(function (t, n) { 9814 if (n.inMenu) { 9815 var i = t.getAttribute("href"); 9816 if (i && i.length > 1 && "#" == i.slice(0, 1)) try { 9817 var s = _(e.node.menu, i)[0]; 9818 9819 if (s && s.matches(".mm-panel")) return t.parentElement.matches(".mm-listitem_vertical") ? e.togglePanel(s) : e.openPanel(s), !0; 9820 } catch (e) {} 9821 } 9822 }), y(this.node.pnls).forEach(function (t) { 9823 e.initPanel(t); 9824 }), this.trigger("initPanels:after"); 9825 }, e.prototype.initPanel = function (e) { 9826 var t = this, 9827 n = this.conf.panelNodetype.join(", "); 9828 9829 if (e.matches(n) && (e.matches(".mm-panel") || (e = this._initPanel(e)), e)) { 9830 var i = []; 9831 i.push.apply(i, y(e, "." + this.conf.classNames.panel)), y(e, ".mm-listview").forEach(function (e) { 9832 y(e, ".mm-listitem").forEach(function (e) { 9833 i.push.apply(i, y(e, n)); 9834 }); 9835 }), i.forEach(function (e) { 9836 t.initPanel(e); 9837 }); 9838 } 9839 }, e.prototype._initPanel = function (e) { 9840 var t = this; 9841 if (this.trigger("initPanel:before", [e]), x(e, this.conf.classNames.panel, "mm-panel"), x(e, this.conf.classNames.nopanel, "mm-nopanel"), x(e, this.conf.classNames.inset, "mm-listview_inset"), e.matches(".mm-listview_inset") && e.classList.add("mm-nopanel"), e.matches(".mm-nopanel")) return null; 9842 var n = e.id || l(), 9843 i = e.matches("." + this.conf.classNames.vertical) || !this.opts.slidingSubmenus; 9844 9845 if (e.classList.remove(this.conf.classNames.vertical), e.matches("ul, ol")) { 9846 e.removeAttribute("id"); 9847 var s = g("div"); 9848 e.before(s), s.append(e), e = s; 9849 } 9850 9851 e.id = n, e.classList.add("mm-panel"), e.classList.add("mm-hidden"); 9852 var a = [e.parentElement].filter(function (e) { 9853 return e.matches("li"); 9854 })[0]; 9855 9856 if (i ? a && a.classList.add("mm-listitem_vertical") : this.node.pnls.append(e), a && (a.mmChild = e, e.mmParent = a, a && a.matches(".mm-listitem") && !y(a, ".mm-btn").length)) { 9857 var o = y(a, ".mm-listitem__text")[0]; 9858 9859 if (o) { 9860 var r = g("a.mm-btn.mm-btn_next.mm-listitem__btn"); 9861 r.setAttribute("href", "#" + e.id), o.matches("span") ? (r.classList.add("mm-listitem__text"), r.innerHTML = o.innerHTML, a.insertBefore(r, o.nextElementSibling), o.remove()) : a.insertBefore(r, y(a, ".mm-panel")[0]); 9862 } 9863 } 9864 9865 return this._initNavbar(e), y(e, "ul, ol").forEach(function (e) { 9866 t.initListview(e); 9867 }), this.trigger("initPanel:after", [e]), e; 9868 }, e.prototype._initNavbar = function (e) { 9869 if (this.trigger("initNavbar:before", [e]), !y(e, ".mm-navbar").length) { 9870 var t = null, 9871 n = null; 9872 9873 if (e.getAttribute("data-mm-parent") ? n = _(this.node.pnls, e.getAttribute("data-mm-parent"))[0] : (t = e.mmParent) && (n = t.closest(".mm-panel")), !t || !t.matches(".mm-listitem_vertical")) { 9874 var i = g("div.mm-navbar"); 9875 9876 if (this.opts.navbar.add ? this.opts.navbar.sticky && i.classList.add("mm-navbar_sticky") : i.classList.add("mm-hidden"), n) { 9877 var s = g("a.mm-btn.mm-btn_prev.mm-navbar__btn"); 9878 s.setAttribute("href", "#" + n.id), i.append(s); 9879 } 9880 9881 var a = null; 9882 t ? a = y(t, ".mm-listitem__text")[0] : n && (a = _(n, 'a[href="#' + e.id + '"]')[0]); 9883 var o = g("a.mm-navbar__title"), 9884 r = g("span"); 9885 9886 switch (o.append(r), r.innerHTML = e.getAttribute("data-mm-title") || (a ? a.textContent : "") || this.i18n(this.opts.navbar.title) || this.i18n("Menu"), this.opts.navbar.titleLink) { 9887 case "anchor": 9888 a && o.setAttribute("href", a.getAttribute("href")); 9889 break; 9890 9891 case "parent": 9892 n && o.setAttribute("href", "#" + n.id); 9893 } 9894 9895 i.append(o), e.prepend(i), this.trigger("initNavbar:after", [e]); 9896 } 9897 } 9898 }, e.prototype.initListview = function (e) { 9899 var t = this; 9900 this.trigger("initListview:before", [e]), x(e, this.conf.classNames.nolistview, "mm-nolistview"), e.matches(".mm-nolistview") || (e.classList.add("mm-listview"), y(e).forEach(function (e) { 9901 e.classList.add("mm-listitem"), x(e, t.conf.classNames.selected, "mm-listitem_selected"), y(e, "a, span").forEach(function (e) { 9902 e.matches(".mm-btn") || e.classList.add("mm-listitem__text"); 9903 }); 9904 })), this.trigger("initListview:after", [e]); 9905 }, e.prototype._initOpened = function () { 9906 this.trigger("initOpened:before"); 9907 var e = this.node.pnls.querySelectorAll(".mm-listitem_selected"), 9908 t = null; 9909 e.forEach(function (e) { 9910 t = e, e.classList.remove("mm-listitem_selected"); 9911 }), t && t.classList.add("mm-listitem_selected"); 9912 var n = t ? t.closest(".mm-panel") : y(this.node.pnls, ".mm-panel")[0];
9913 this.openPanel(n, !1), this.trigger("initOpened:after"); 9914 }, e.prototype._initAnchors = function () { 9915 var e = this; 9916 this.trigger("initAnchors:before"), document.addEventListener("click", function (t) { 9917 var n = t.target.closest("a[href]"); 9918 9919 if (n) { 9920 for (var i = { 9921 inMenu: n.closest(".mm-menu") === e.node.menu, 9922 inListview: n.matches(".mm-listitem > a"), 9923 toExternal: n.matches('[rel="external"]') || n.matches('[target="_blank"]') 9924 }, s = { 9925 close: null, 9926 setSelected: null, 9927 preventDefault: "#" == n.getAttribute("href").slice(0, 1) 9928 }, a = 0; a < e.clck.length; a++) { 9929 var m = e.clck[a].call(e, n, i); 9930 9931 if (m) { 9932 if ("boolean" == typeof m) return void t.preventDefault(); 9933 "object" == r(m) && (s = o(m, s)); 9934 } 9935 } 9936 9937 i.inMenu && i.inListview && !i.toExternal && (c(n, e.opts.onClick.setSelected, s.setSelected) && e.setSelected(n.parentElement), c(n, e.opts.onClick.preventDefault, s.preventDefault) && t.preventDefault(), c(n, e.opts.onClick.close, s.close) && e.opts.offCanvas && "function" == typeof e.close && e.close()); 9938 } 9939 }, !0), this.trigger("initAnchors:after"); 9940 }, e.prototype.i18n = function (e) { 9941 return function (e, t) { 9942 return "string" == typeof t && void 0 !== u[t] && u[t][e] || e; 9943 }(e, this.conf.language); 9944 }, e.version = i.a, e.options = s, e.configs = a, e.addons = {}, e.wrappers = {}, e.node = {}, e.vars = {}, e; 9945 }(), 9946 A = { 9947 blockUI: !0, 9948 moveBackground: !0 9949 }; 9950 9951 var T = { 9952 clone: !1, 9953 menu: { 9954 insertMethod: "prepend", 9955 insertSelector: "body" 9956 }, 9957 page: { 9958 nodetype: "div", 9959 selector: null, 9960 noSelector: [] 9961 } 9962 }; 9963 9964 function C(e) { 9965 return e ? e.charAt(0).toUpperCase() + e.slice(1) : ""; 9966 } 9967 9968 function N(e, t, n) { 9969 var i = t.split("."); 9970 e[t = "mmEvent" + C(i[0]) + C(i[1])] = e[t] || [], e[t].push(n), e.addEventListener(i[0], n); 9971 } 9972 9973 function H(e, t) { 9974 var n = t.split("."); 9975 t = "mmEvent" + C(n[0]) + C(n[1]), (e[t] || []).forEach(function (t) { 9976 e.removeEventListener(n[0], t); 9977 }); 9978 } 9979 9980 M.options.offCanvas = A, M.configs.offCanvas = T; 9981 M.prototype.open = function () { 9982 var e = this; 9983 this.trigger("open:before"), this.vars.opened || (this._openSetup(), setTimeout(function () { 9984 e._openStart(); 9985 }, this.conf.openingInterval), this.trigger("open:after")); 9986 }, M.prototype._openSetup = function () { 9987 var e = this, 9988 t = this.opts.offCanvas; 9989 this.closeAllOthers(), function (e, t, n) { 9990 var i = t.split("."); 9991 (e[t = "mmEvent" + C(i[0]) + C(i[1])] || []).forEach(function (e) { 9992 e(n || {}); 9993 }); 9994 }(window, "resize.page", { 9995 force: !0 9996 }); 9997 var n = ["mm-wrapper_opened"]; 9998 t.blockUI && n.push("mm-wrapper_blocking"), "modal" == t.blockUI && n.push("mm-wrapper_modal"), t.moveBackground && n.push("mm-wrapper_background"), n.forEach(function (t) { 9999 e.node.wrpr.classList.add(t); 10000 }), setTimeout(function () { 10001 e.vars.opened = !0; 10002 }, this.conf.openingInterval), this.node.menu.classList.add("mm-menu_opened"); 10003 }, M.prototype._openStart = function () { 10004 var e = this; 10005 m(M.node.page, function () { 10006 e.trigger("open:finish"); 10007 }, this.conf.transitionDuration), this.trigger("open:start"), this.node.wrpr.classList.add("mm-wrapper_opening"); 10008 }, M.prototype.close = function () { 10009 var e = this; 10010 this.trigger("close:before"), this.vars.opened && (m(M.node.page, function () { 10011 e.node.menu.classList.remove("mm-menu_opened"); 10012 ["mm-wrapper_opened", "mm-wrapper_blocking", "mm-wrapper_modal", "mm-wrapper_background"].forEach(function (t) { 10013 e.node.wrpr.classList.remove(t); 10014 }), e.vars.opened = !1, e.trigger("close:finish"); 10015 }, this.conf.transitionDuration), this.trigger("close:start"), this.node.wrpr.classList.remove("mm-wrapper_opening"), this.trigger("close:after")); 10016 }, M.prototype.closeAllOthers = function () { 10017 var e = this; 10018 10019 _(document.body, ".mm-menu_offcanvas").forEach(function (t) { 10020 if (t !== e.node.menu) { 10021 var n = t.mmApi; 10022 n && n.close && n.close(); 10023 } 10024 }); 10025 }, M.prototype.setPage = function (e) { 10026 this.trigger("setPage:before", [e]); 10027 var t = this.conf.offCanvas; 10028 10029 if (!e) { 10030 var n = "string" == typeof t.page.selector ? _(document.body, t.page.selector) : y(document.body, t.page.nodetype); 10031 10032 if (n = n.filter(function (e) { 10033 return !e.matches(".mm-menu, .mm-wrapper__blocker"); 10034 }), t.page.noSelector.length && (n = n.filter(function (e) { 10035 return !e.matches(t.page.noSelector.join(", ")); 10036 })), n.length > 1) { 10037 var i = g("div");
10038 n[0].before(i), n.forEach(function (e) { 10039 i.append(e); 10040 }), n = [i]; 10041 } 10042 10043 e = n[0]; 10044 } 10045 10046 e.classList.add("mm-page"), e.classList.add("mm-slideout"), e.id = e.id || l(), M.node.page = e, this.trigger("setPage:after", [e]); 10047 }; 10048 10049 var j = function j() { 10050 var e = this; 10051 H(document.body, "keydown.tabguard"), N(document.body, "keydown.tabguard", function (t) { 10052 9 == t.keyCode && e.node.wrpr.matches(".mm-wrapper_opened") && t.preventDefault(); 10053 }); 10054 }, 10055 D = function D() { 10056 var e = this; 10057 this.trigger("initBlocker:before"); 10058 var t = this.opts.offCanvas, 10059 n = this.conf.offCanvas; 10060 10061 if (t.blockUI) { 10062 if (!M.node.blck) { 10063 var i = g("div.mm-wrapper__blocker.mm-slideout"); 10064 i.innerHTML = "<a></a>", document.querySelector(n.menu.insertSelector).append(i), M.node.blck = i; 10065 } 10066 10067 var s = function s(t) { 10068 t.preventDefault(), t.stopPropagation(), e.node.wrpr.matches(".mm-wrapper_modal") || e.close(); 10069 }; 10070 10071 M.node.blck.addEventListener("mousedown", s), M.node.blck.addEventListener("touchstart", s), M.node.blck.addEventListener("touchmove", s), this.trigger("initBlocker:after"); 10072 } 10073 }, 10074 O = { 10075 aria: !0, 10076 text: !0 10077 }; 10078 10079 var I = { 10080 text: { 10081 closeMenu: "Close menu", 10082 closeSubmenu: "Close submenu", 10083 openSubmenu: "Open submenu", 10084 toggleSubmenu: "Toggle submenu" 10085 } 10086 }, 10087 q = { 10088 "Close menu": "بست٠٠ÙÙ", 10089 "Close submenu": "Ø¨Ø³ØªÙ Ø²ÛØ±Ù ÙÙ", 10090 "Open submenu": "Ø¨Ø§Ø²Ú©Ø±Ø¯Ù Ø²ÛØ±Ù ÙÙ", 10091 "Toggle submenu": "سÙÛÛÚ Ø²ÛØ±Ù ÙÙ" 10092 }, 10093 B = { 10094 "Close menu": "Menü schlieÃen", 10095 "Close submenu": "Untermenü schlieÃen", 10096 "Open submenu": "Untermenü öffnen", 10097 "Toggle submenu": "Untermenü wechseln" 10098 }, 10099 z = { 10100 "Close menu": "ÐакÑÑÑÑ Ð¼ÐµÐ½Ñ", 10101 "Close submenu": "ÐакÑÑÑÑ Ð¿Ð¾Ð´Ð¼ÐµÐ½Ñ", 10102 "Open submenu": "ÐÑкÑÑÑÑ Ð¿Ð¾Ð´Ð¼ÐµÐ½Ñ", 10103 "Toggle submenu": "ÐеÑеклÑÑиÑÑ Ð¿Ð¾Ð´Ð¼ÐµÐ½Ñ" 10104 }; 10105 f({ 10106 "Close menu": "Menu sluiten", 10107 "Close submenu": "Submenu sluiten", 10108 "Open submenu": "Submenu openen", 10109 "Toggle submenu": "Submenu wisselen" 10110 }, "nl"), f(q, "fa"), f(B, "de"), f(z, "ru"), M.options.screenReader = O, M.configs.screenReader = I; 10111 var R; 10112 R = function R(e, t, n) { 10113 e[t] = n, n ? e.setAttribute(t, n.toString()) : e.removeAttribute(t); 10114 }, M.sr_aria = function (e, t, n) { 10115 R(e, "aria-" + t, n); 10116 }, M.sr_role = function (e, t) { 10117 R(e, "role", t); 10118 }, M.sr_text = function (e) { 10119 return '<span class="mm-sronly">' + e + "</span>"; 10120 }; 10121 var U = { 10122 fix: !0 10123 }; 10124 var W = "ontouchstart" in window || !!navigator.msMaxTouchPoints || !1; 10125 M.options.scrollBugFix = U; 10126 var Y = { 10127 height: "default" 10128 }; 10129 M.options.autoHeight = Y; 10130 var F = { 10131 close: !1, 10132 open: !1 10133 }; 10134 M.options.backButton = F; 10135 var X = { 10136 add: !1, 10137 visible: { 10138 min: 1, 10139 max: 3 10140 } 10141 }; 10142 M.options.columns = X; 10143 var V = { 10144 add: !1, 10145 addTo: "panels", 10146 count: !1 10147 }; 10148 M.options.counters = V, M.configs.classNames.counters = { 10149 counter: "Counter" 10150 }; 10151 var Z = { 10152 add: !1, 10153 addTo: "panels" 10154 }; 10155 M.options.dividers = Z, M.configs.classNames.divider = "Divider"; 10156 var G = { 10157 open: !1, 10158 node: null 10159 }; 10160 10161 var J = "ontouchstart" in window || !!navigator.msMaxTouchPoints || !1, 10162 K = { 10163 top: 0, 10164 right: 0, 10165 bottom: 0, 10166 left: 0 10167 }, 10168 Q = { 10169 start: 15, 10170 swipe: 15 10171 }, 10172 $ = { 10173 x: ["Right", "Left"], 10174 y: ["Down", "Up"] 10175 }, 10176 ee = 0, 10177 te = 1, 10178 ne = 2, 10179 ie = function ie(e, t) { 10180 return "string" == typeof e && "%" == e.slice(-1) && (e = t * ((e = parseInt(e.slice(0, -1), 10)) / 100)), e; 10181 }, 10182 se = function () { 10183 function e(e, t, n) { 10184 this.surface = e, this.area = o(t, K), this.treshold = o(n, Q), this.surface.mmHasDragEvents || (this.surface.addEventListener(J ? "touchstart" : "mousedown", this.start.bind(this)), this.surface.addEventListener(J ? "touchend" : "mouseup", this.stop.bind(this)), this.surface.addEventListener(J ? "touchleave" : "mouseleave", this.stop.bind(this)), this.surface.addEventListener(J ? "touchmove" : "mousemove", this.move.bind(this))), this.surface.mmHasDragEvents = !0; 10185 } 10186 10187 return e.prototype.start = function (e) { 10188 this.currentPosition = { 10189 x: e.touches ? e.touches[0].pageX : e.pageX || 0, 10190 y: e.touches ? e.touches[0].pageY : e.pageY || 0 10191 }; 10192 var t = this.surface.clientWidth, 10193 n = this.surface.clientHeight, 10194 i = ie(this.area.top, n); 10195 10196 if (!("number" == typeof i && this.currentPosition.y < i)) { 10197 var s = ie(this.area.right, t); 10198 10199 if (!("number" == typeof s && (s = t - s, this.currentPosition.x > s))) { 10200 var a = ie(this.area.bottom, n); 10201 10202 if (!("number" == typeof a && (a = n - a, this.currentPosition.y > a))) { 10203 var o = ie(this.area.left, t); 10204 "number" == typeof o && this.currentPosition.x < o || (this.startPosition = { 10205 x: this.currentPosition.x, 10206 y: this.currentPosition.y 10207 }, this.state = te); 10208 } 10209 } 10210 } 10211 }, e.prototype.stop = function (e) { 10212 if (this.state == ne) { 10213 var t = this._dragDirection(), 10214 n = this._eventDetail(t); 10215 10216 if (this._dispatchEvents("drag*End", n), Math.abs(this.movement[this.axis]) > this.treshold.swipe) { 10217 var i = this._swipeDirection(); 10218 10219 n.direction = i, this._dispatchEvents("swipe*", n); 10220 } 10221 } 10222 10223 this.state = ee; 10224 }, e.prototype.move = function (e) { 10225 switch (this.state) { 10226 case te: 10227 case ne: 10228 var t = { 10229 x: e.changedTouches ? e.touches[0].pageX : e.pageX || 0, 10230 y: e.changedTouches ? e.touches[0].pageY : e.pageY || 0 10231 }; 10232 this.movement = { 10233 x: t.x - this.currentPosition.x, 10234 y: t.y - this.currentPosition.y 10235 }, this.distance = { 10236 x: t.x - this.startPosition.x, 10237 y: t.y - this.startPosition.y 10238 }, this.currentPosition = { 10239 x: t.x, 10240 y: t.y 10241 }, this.axis = Math.abs(this.distance.x) > Math.abs(this.distance.y) ? "x" : "y"; 10242 10243 var n = this._dragDirection(), 10244 i = this._eventDetail(n); 10245 10246 this.state == te && Math.abs(this.distance[this.axis]) > this.treshold.start && (this._dispatchEvents("drag*Start", i), this.state = ne), this.state == ne && this._dispatchEvents("drag*Move", i); 10247 } 10248 }, e.prototype._eventDetail = function (e) { 10249 var t = this.distance.x, 10250 n = this.distance.y; 10251 return "x" == this.axis && (t -= t > 0 ? this.treshold.start : 0 - this.treshold.start), "y" == this.axis && (n -= n > 0 ? this.treshold.start : 0 - this.treshold.start), { 10252 axis: this.axis, 10253 direction: e, 10254 movementX: this.movement.x, 10255 movementY: this.movement.y, 10256 distanceX: t, 10257 distanceY: n 10258 }; 10259 }, e.prototype._dispatchEvents = function (e, t) { 10260 var n = new CustomEvent(e.replace("*", ""), { 10261 detail: t 10262 }); 10263 this.surface.dispatchEvent(n); 10264 var i = new CustomEvent(e.replace("*", this.axis.toUpperCase()), { 10265 detail: t 10266 }); 10267 this.surface.dispatchEvent(i); 10268 var s = new CustomEvent(e.replace("*", t.direction), { 10269 detail: t 10270 }); 10271 this.surface.dispatchEvent(s); 10272 }, e.prototype._dragDirection = function () { 10273 return $[this.axis][this.distance[this.axis] > 0 ? 0 : 1]; 10274 }, e.prototype._swipeDirection = function () { 10275 return $[this.axis][this.movement[this.axis] > 0 ? 0 : 1]; 10276 }, e; 10277 }(), 10278 ae = null, 10279 oe = null, 10280 re = 0, 10281 ce = function ce(e) { 10282 var t = this, 10283 n = {}, 10284 i = !1, 10285 s = function s() { 10286 var e = Object.keys(t.opts.extensions); 10287 e.length ? (k(e.join(", "), function () {}, function () { 10288 n = me(n, [], t.node.menu); 10289 }), e.forEach(function (e) { 10290 k(e, function () { 10291 n = me(n, t.opts.extensions[e], t.node.menu); 10292 }, function () {}); 10293 })) : n = me(n, [], t.node.menu); 10294 }; 10295 10296 oe && (H(oe, "dragStart"), H(oe, "dragMove"), H(oe, "dragEnd")), ae = new se(oe = e), s(), s = function s() {}, oe && (N(oe, "dragStart", function (e) { 10297 e.detail.direction == n.direction && (i = !0, t.node.wrpr.classList.add("mm-wrapper_dragging"), t._openSetup(), t.trigger("open:start"), re = t.node.menu["x" == n.axis ? "clientWidth" : "clientHeight"]); 10298 }), N(oe, "dragMove", function (e) { 10299 if (e.detail.axis == n.axis && i) { 10300 var t = e.detail["distance" + n.axis.toUpperCase()]; 10301 10302 switch (n.position) { 10303 case "right": 10304 case "bottom": 10305 t = Math.min(Math.max(t, -re), 0); 10306 break; 10307 10308 default: 10309 t = Math.max(Math.min(t, re), 0); 10310 } 10311 10312 if ("front" == n.zposition) switch (n.position) { 10313 case "right": 10314 case "bottom": 10315 t += re; 10316 break; 10317 10318 default: 10319 t -= re; 10320 }
10321 n.slideOutNodes.forEach(function (e) { 10322 e.style.transform = "translate" + n.axis.toUpperCase() + "(" + t + "px)"; 10323 }); 10324 } 10325 }), N(oe, "dragEnd", function (e) { 10326 if (e.detail.axis == n.axis && i) { 10327 i = !1, t.node.wrpr.classList.remove("mm-wrapper_dragging"), n.slideOutNodes.forEach(function (e) { 10328 e.style.transform = ""; 10329 }); 10330 var s = Math.abs(e.detail["distance" + n.axis.toUpperCase()]) >= .75 * re; 10331 10332 if (!s) { 10333 var a = e.detail["movement" + n.axis.toUpperCase()]; 10334 10335 switch (n.position) { 10336 case "right": 10337 case "bottom": 10338 s = a <= 0; 10339 break; 10340 10341 default: 10342 s = a >= 0; 10343 } 10344 } 10345 10346 s ? t._openStart() : t.close(); 10347 } 10348 })); 10349 }, 10350 me = function me(e, t, n) { 10351 switch (e.position = "left", e.zposition = "back", ["right", "top", "bottom"].forEach(function (n) { 10352 t.indexOf("position-" + n) > -1 && (e.position = n); 10353 }), ["front", "top", "bottom"].forEach(function (n) { 10354 t.indexOf("position-" + n) > -1 && (e.zposition = "front"); 10355 }), ae.area = { 10356 top: "bottom" == e.position ? "75%" : 0, 10357 right: "left" == e.position ? "75%" : 0, 10358 bottom: "top" == e.position ? "75%" : 0, 10359 left: "right" == e.position ? "75%" : 0 10360 }, e.position) { 10361 case "top": 10362 case "bottom": 10363 e.axis = "y"; 10364 break; 10365 10366 default: 10367 e.axis = "x"; 10368 } 10369 10370 switch (e.position) { 10371 case "top": 10372 e.direction = "Down"; 10373 break; 10374 10375 case "right": 10376 e.direction = "Left"; 10377 break; 10378 10379 case "bottom": 10380 e.direction = "Up"; 10381 break; 10382 10383 default: 10384 e.direction = "Right"; 10385 } 10386 10387 switch (e.zposition) { 10388 case "front": 10389 e.slideOutNodes = [n]; 10390 break; 10391 10392 default:
10393 e.slideOutNodes = _(document.body, ".mm-slideout"); 10394 } 10395 10396 return e; 10397 }; 10398 10399 M.options.drag = G; 10400 var le = { 10401 drop: !1, 10402 fitViewport: !0, 10403 event: "click", 10404 position: {}, 10405 tip: !0 10406 }; 10407 var de = { 10408 offset: { 10409 button: { 10410 x: -5, 10411 y: 5 10412 }, 10413 viewport: { 10414 x: 20, 10415 y: 20 10416 } 10417 }, 10418 height: { 10419 max: 880 10420 }, 10421 width: { 10422 max: 440 10423 } 10424 }; 10425 M.options.dropdown = le, M.configs.dropdown = de; 10426 var pe = { 10427 insertMethod: "append", 10428 insertSelector: "body" 10429 }; 10430 M.configs.fixedElements = pe, M.configs.classNames.fixedElements = { 10431 fixed: "Fixed" 10432 }; 10433 var ue = { 10434 use: !1, 10435 top: [], 10436 bottom: [], 10437 position: "left", 10438 type: "default" 10439 }; 10440 M.options.iconbar = ue; 10441 var fe = { 10442 add: !1, 10443 blockPanel: !0, 10444 hideDivider: !1, 10445 hideNavbar: !0, 10446 visible: 3 10447 }; 10448 M.options.iconPanels = fe; 10449 var he = { 10450 enable: !1, 10451 enhance: !1 10452 }; 10453 M.options.keyboardNavigation = he; 10454 10455 var ve = function ve(e) { 10456 var t = this; 10457 H(document.body, "keydown.tabguard"), H(document.body, "focusin.tabguard"), N(document.body, "focusin.tabguard", function (e) { 10458 if (t.node.wrpr.matches(".mm-wrapper_opened")) { 10459 var n = e.target; 10460 10461 if (n.matches(".mm-tabend")) { 10462 var i = void 0; 10463 n.parentElement.matches(".mm-menu") && M.node.blck && (i = M.node.blck), n.parentElement.matches(".mm-wrapper__blocker") && (i = _(document.body, ".mm-menu_offcanvas.mm-menu_opened")[0]), i || (i = n.parentElement), i && y(i, ".mm-tabstart")[0].focus(); 10464 } 10465 } 10466 }), H(document.body, "keydown.navigate"), N(document.body, "keydown.navigate", function (t) { 10467 var n = t.target, 10468 i = n.closest(".mm-menu"); 10469 10470 if (i) { 10471 i.mmApi; 10472 if (!n.matches("input, textarea")) switch (t.keyCode) { 10473 case 13: 10474 (n.matches(".mm-toggle") || n.matches(".mm-check")) && n.dispatchEvent(new Event("click")); 10475 break; 10476 10477 case 32: 10478 case 37: 10479 case 38: 10480 case 39: 10481 case 40: 10482 t.preventDefault(); 10483 } 10484 if (e) if (n.matches("input")) switch (t.keyCode) { 10485 case 27: 10486 n.value = ""; 10487 } else { 10488 var s = i.mmApi; 10489 10490 switch (t.keyCode) { 10491 case 8: 10492 var a = _(i, ".mm-panel_opened")[0].mmParent; 10493 10494 a && s.openPanel(a.closest(".mm-panel")); 10495 break; 10496 10497 case 27: 10498 i.matches(".mm-menu_offcanvas") && s.close(); 10499 } 10500 } 10501 } 10502 }); 10503 }, 10504 be = { 10505 load: !1 10506 }; 10507 10508 M.options.lazySubmenus = be; 10509 var ge = []; 10510 var _e = { 10511 breadcrumbs: { 10512 separator: "/", 10513 removeFirst: !1 10514 } 10515 }; 10516 10517 function ye() { 10518 var e = this, 10519 t = this.opts.navbars; 10520 10521 if (void 0 !== t) { 10522 t instanceof Array || (t = [t]); 10523 var n = {}; 10524 t.length && (t.forEach(function (t) { 10525 if (!(t = function (e) { 10526 return "boolean" == typeof e && e && (e = {}), "object" != _typeof(e) && (e = {}), void 0 === e.content && (e.content = ["prev", "title"]), e.content instanceof Array || (e.content = [e.content]), void 0 === e.use && (e.use = !0), "boolean" == typeof e.use && e.use && (e.use = !0), e; 10527 }(t)).use) return !1; 10528 var i = g("div.mm-navbar"), 10529 s = t.position; 10530 "bottom" !== s && (s = "top"), n[s] || (n[s] = g("div.mm-navbars_" + s)), n[s].append(i); 10531 10532 for (var a = 0, o = t.content.length; a < o; a++) { 10533 var r, 10534 c = t.content[a]; 10535 if ("string" == typeof c) { 10536 if ("function" == typeof (r = ye.navbarContents[c])) r.call(e, i);else { 10537 var m = g("span"); 10538 m.innerHTML = c; 10539 var l = y(m); 10540 1 == l.length && (m = l[0]), i.append(m); 10541 } 10542 } else i.append(c); 10543 } 10544 10545 "string" == typeof t.type && "function" == typeof (r = ye.navbarTypes[t.type]) && r.call(e, i); 10546 "boolean" != typeof t.use && k(t.use, function () { 10547 i.classList.remove("mm-hidden"), M.sr_aria(i, "hidden", !1); 10548 }, function () { 10549 i.classList.add("mm-hidden"), M.sr_aria(i, "hidden", !0); 10550 }); 10551 }), this.bind("initMenu:after", function () { 10552 for (var t in n) { 10553 e.node.menu["bottom" == t ? "append" : "prepend"](n[t]); 10554 } 10555 })); 10556 } 10557 } 10558 10559 M.options.navbars = ge, M.configs.navbars = _e, M.configs.classNames.navbars = { 10560 panelPrev: "Prev", 10561 panelTitle: "Title" 10562 }
10562, ye.navbarContents = { 10563 breadcrumbs: function breadcrumbs(e) { 10564 var t = this, 10565 n = g("div.mm-navbar__breadcrumbs"); 10566 e.append(n), this.bind("initNavbar:after", function (e) { 10567 if (!e.querySelector(".mm-navbar__breadcrumbs")) { 10568 y(e, ".mm-navbar")[0].classList.add("mm-hidden"); 10569 10570 for (var n = [], i = g("span.mm-navbar__breadcrumbs"), s = e, a = !0; s;) { 10571 if (!(s = s.closest(".mm-panel")).parentElement.matches(".mm-listitem_vertical")) { 10572 var o = _(s, ".mm-navbar__title span")[0]; 10573 10574 if (o) { 10575 var r = o.textContent; 10576 r.length && n.unshift(a ? "<span>" + r + "</span>" : '<a href="#' + s.id + '">' + r + "</a>"); 10577 } 10578 10579 a = !1; 10580 } 10581 10582 s = s.mmParent; 10583 } 10584 10585 t.conf.navbars.breadcrumbs.removeFirst && n.shift(), i.innerHTML = n.join('<span class="mm-separator">' + t.conf.navbars.breadcrumbs.separator + "</span>"), y(e, ".mm-navbar")[0].append(i); 10586 } 10587 }), this.bind("openPanel:start", function (e) { 10588 var t = e.querySelector(".mm-navbar__breadcrumbs"); 10589 n.innerHTML = t ? t.innerHTML : ""; 10590 }), this.bind("initNavbar:after:sr-aria", function (e) { 10591 _(e, ".mm-breadcrumbs a").forEach(function (e) { 10592 M.sr_aria(e, "owns", e.getAttribute("href").slice(1)); 10593 }); 10594 }); 10595 }, 10596 close: function close(e) { 10597 var t = this, 10598 n = g("a.mm-btn.mm-btn_close.mm-navbar__btn"); 10599 e.append(n), this.bind("setPage:after", function (e) { 10600 n.setAttribute("href", "#" + e.id); 10601 }), this.bind("setPage:after:sr-text", function () { 10602 n.innerHTML = M.sr_text(t.i18n(t.conf.screenReader.text.closeMenu)); 10603 }); 10604 }, 10605 prev: function prev(e) { 10606 var t, 10607 n, 10608 i, 10609 s = this, 10610 a = g("a.mm-btn.mm-btn_prev.mm-navbar__btn"); 10611 e.append(a), this.bind("initNavbar:after", function (e) { 10612 y(e, ".mm-navbar")[0].classList.add("mm-hidden"); 10613 }), this.bind("openPanel:start", function (e) { 10614 e.parentElement.matches(".mm-listitem_vertical") || ((t = e.querySelector("." + s.conf.classNames.navbars.panelPrev)) || (t = e.querySelector(".mm-navbar__btn.mm-btn_prev")), n = t ? t.getAttribute("href") : "", i = t ? t.innerHTML : "", n ? a.setAttribute("href", n) : a.removeAttribute("href"), a.classList[n || i ? "remove" : "add"]("mm-hidden"), a.innerHTML = i); 10615 }), this.bind("initNavbar:after:sr-aria", function (e) { 10616 M.sr_aria(e.querySelector(".mm-navbar"), "hidden", !0); 10617 }), this.bind("openPanel:start:sr-aria", function (e) { 10618 M.sr_aria(a, "hidden", a.matches(".mm-hidden")), M.sr_aria(a, "owns", (a.getAttribute("href") || "").slice(1)); 10619 }); 10620 }, 10621 searchfield: function searchfield(e) { 10622 "object" != r(this.opts.searchfield) && (this.opts.searchfield = {}); 10623 var t = g("div.mm-navbar__searchfield"); 10624 e.append(t), this.opts.searchfield.add = !0, this.opts.searchfield.addTo = [t]; 10625 }, 10626 title: function title(e) { 10627 var t, 10628 n, 10629 i, 10630 s, 10631 a = this, 10632 o = g("a.mm-navbar__title"), 10633 r = g("span"); 10634 o.append(r), e.append(o), this.bind("openPanel:start", function (e) { 10635 e.parentElement.matches(".mm-listitem_vertical") || ((i = e.querySelector("." + a.conf.classNames.navbars.panelTitle)) || (i = e.querySelector(".mm-navbar__title span")), (t = i && i.closest("a") ? i.closest("a").getAttribute("href") : "") ? o.setAttribute("href", t) : o.removeAttribute("href"), n = i ? i.innerHTML : "", r.innerHTML = n); 10636 }), this.bind("openPanel:start:sr-aria", function (e) { 10637 if (a.opts.screenReader.text) { 10638 if (!s) y(a.node.menu, ".mm-navbars_top, .mm-navbars_bottom").forEach(function (e) { 10639 var t = e.querySelector(".mm-btn_prev"); 10640 t && (s = t); 10641 }); 10642 10643 if (s) { 10644 var t = !0; 10645 "parent" == a.opts.navbar.titleLink && (t = !s.matches(".mm-hidden")), M.sr_aria(o, "hidden", t); 10646 } 10647 } 10648 }); 10649 } 10650 }
10650, ye.navbarTypes = { 10651 tabs: function tabs(e) { 10652 var t = this; 10653 e.classList.add("mm-navbar_tabs"), e.parentElement.classList.add("mm-navbars_has-tabs"); 10654 var n = y(e, "a"); 10655 e.addEventListener("click", function (e) { 10656 var n = e.target; 10657 if (n.matches("a")) if (n.matches(".mm-navbar__tab_selected")) e.stopImmediatePropagation();else try { 10658 t.openPanel(t.node.menu.querySelector(n.getAttribute("href")), !1), e.stopImmediatePropagation(); 10659 } catch (e) {} 10660 }), this.bind("openPanel:start", function e(t) { 10661 n.forEach(function (e) { 10662 e.classList.remove("mm-navbar__tab_selected"); 10663 }); 10664 var i = n.filter(function (e) { 10665 return e.matches('[href="#' + t.id + '"]'); 10666 })[0]; 10667 if (i) i.classList.add("mm-navbar__tab_selected");else { 10668 var s = t.mmParent; 10669 s && e.call(this, s.closest(".mm-panel")); 10670 } 10671 }); 10672 } 10673 }; 10674 var Le = { 10675 scroll: !1, 10676 update: !1 10677 }; 10678 var we = { 10679 scrollOffset: 0, 10680 updateOffset: 50 10681 }; 10682 M.options.pageScroll = Le, M.configs.pageScroll = we; 10683 var Ee = { 10684 add: !1, 10685 addTo: "panels", 10686 cancel: !1, 10687 noResults: "No results found.", 10688 placeholder: "Search", 10689 panel: { 10690 add: !1, 10691 dividers: !0, 10692 fx: "none", 10693 id: null, 10694 splash: null, 10695 title: "Search" 10696 }, 10697 search: !0, 10698 showTextItems: !1, 10699 showSubPanels: !0 10700 }; 10701 10702 var xe = { 10703 clear: !1, 10704 form: !1, 10705 input: !1, 10706 submit: !1 10707 }, 10708 Pe = { 10709 Search: "جستجÙ", 10710 "No results found.": "ÙØªÛجÙâØ§Û ÛØ§Ùت ÙØ´Ø¯.", 10711 cancel: "Ø§ÙØµØ±Ø§Ù" 10712 }, 10713 ke = { 10714 Search: "Suche", 10715 "No results found.": "Keine Ergebnisse gefunden.", 10716 cancel: "beenden" 10717 }, 10718 Se = { 10719 Search: "ÐайÑи", 10720 "No results found.": "ÐиÑего не найдено.", 10721 cancel: "оÑмениÑÑ" 10722 }, 10723 Me = function Me() { 10724 for (var e = 0, t = 0, n = arguments.length; t < n; t++) { 10725 e += arguments[t].length; 10726 } 10727 10728 var i = Array(e), 10729 s = 0; 10730 10731 for (t = 0; t < n; t++) { 10732 for (var a = arguments[t], o = 0, r = a.length; o < r; o++, s++) { 10733 i[s] = a[o]; 10734 } 10735 } 10736 10737 return i; 10738 }; 10739 10740 f({ 10741 Search: "Zoeken", 10742 "No results found.": "Geen resultaten gevonden.", 10743 cancel: "annuleren" 10744 }, "nl"), f(Pe, "fa"), f(ke, "de"), f(Se, "ru"), M.options.searchfield = Ee, M.configs.searchfield = xe; 10745 10746 var Ae = function Ae() { 10747 var e = this.opts.searchfield, 10748 t = (this.conf.searchfield, y(this.node.pnls, ".mm-panel_search")[0]); 10749 if (t) return t; 10750 t = g("div.mm-panel.mm-panel_search.mm-hidden"), e.panel.id && (t.id = e.panel.id), e.panel.title && t.setAttribute("data-mm-title", e.panel.title); 10751 var n = g("ul"); 10752 10753 switch (t.append(n), this.node.pnls.append(t), this.initListview(n), this._initNavbar(t), e.panel.fx) { 10754 case !1: 10755 break; 10756 10757 case "none": 10758 t.classList.add("mm-panel_noanimation"); 10759 break; 10760 10761 default: 10762 t.classList.add("mm-panel_fx-" + e.panel.fx); 10763 } 10764 10765 if (e.panel.splash) { 10766 var i = g("div.mm-panel__content"); 10767 i.innerHTML = e.panel.splash, t.append(i); 10768 } 10769 10770 return t.classList.add("mm-panel"), t.classList.add("mm-hidden"), this.node.pnls.append(t), t; 10771 }, 10772 Te = function Te(e) { 10773 var t = this.opts.searchfield, 10774 n = this.conf.searchfield; 10775 if (e.parentElement.matches(".mm-listitem_vertical")) return null; 10776 if (a = _(e, ".mm-searchfield")[0]) return a; 10777 10778 function i(e, t) { 10779 if (t) for (var n in t) { 10780 e.setAttribute(n, t[n]); 10781 } 10782 } 10783 10784 var s, 10785 a = g((n.form ? "form" : "div") + ".mm-searchfield"), 10786 o = g("div.mm-searchfield__input"), 10787 r = g("input"); 10788 (r.type = "text", r.autocomplete = "off", r.placeholder = this.i18n(t.placeholder), o.append(r), a.append(o), e.prepend(a), i(r, n.input), n.clear) && ((s = g("a.mm-btn.mm-btn_close.mm-searchfield__btn")).setAttribute("href", "#"), o.append(s)); 10789 (i(a, n.form), n.form && n.submit && !n.clear) && ((s = g("a.mm-btn.mm-btn_next.mm-searchfield__btn")).setAttribute("href", "#"), o.append(s)); 10790 t.cancel && ((s = g("a.mm-searchfield__cancel")).setAttribute("href", "#"), s.textContent = this.i18n("cancel"), a.append(s)); 10791 return a; 10792 }, 10793 Ce = function Ce(e) { 10794 var t = this, 10795 n = this.opts.searchfield, 10796 i = (this.conf.searchfield, {}); 10797 e.closest(".mm-panel_search") ? (i.panels = _(this.node.pnls, ".mm-panel"), i.noresults = [e.closest(".mm-panel")]) : e.closest(".mm-panel") ? (i.panels = [e.closest(".mm-panel")], i.noresults = i.panels) : (i.panels = _(this.node.pnls, ".mm-panel"), i.noresults = [this.node.menu]), i.panels = i.panels.filter(function (e) { 10798 return !e.matches(".mm-panel_search"); 10799 }), i.panels = i.panels.filter(function (e) { 10800 return !e.parentElement.matches(".mm-listitem_vertical"); 10801 }
10801), i.listitems = [], i.dividers = [], i.panels.forEach(function (e) { 10802 var t, n; 10803 (t = i.listitems).push.apply(t, _(e, ".mm-listitem")), (n = i.dividers).push.apply(n, _(e, ".mm-divider")); 10804 }); 10805 10806 var s = y(this.node.pnls, ".mm-panel_search")[0], 10807 a = _(e, "input")[0], 10808 o = _(e, ".mm-searchfield__cancel")[0]; 10809 10810 a.mmSearchfield = i, n.panel.add && n.panel.splash && (H(a, "focus.splash"), N(a, "focus.splash", function (e) { 10811 t.openPanel(s); 10812 })), n.cancel && (H(a, "focus.cancel"), N(a, "focus.cancel", function (e) { 10813 o.classList.add("mm-searchfield__cancel-active"); 10814 }), H(o, "click.splash"), N(o, "click.splash", function (e) { 10815 if (e.preventDefault(), o.classList.remove("mm-searchfield__cancel-active"), s.matches(".mm-panel_opened")) { 10816 var n = y(t.node.pnls, ".mm-panel_opened-parent"); 10817 n.length && t.openPanel(n[n.length - 1]); 10818 } 10819 })), n.panel.add && "panel" == n.addTo && this.bind("openPanel:finish", function (e) { 10820 e === s && a.focus(); 10821 }), H(a, "input.search"), N(a, "input.search", function (e) { 10822 switch (e.keyCode) { 10823 case 9: 10824 case 16: 10825 case 17: 10826 case 18: 10827 case 37: 10828 case 38: 10829 case 39: 10830 case 40: 10831 break; 10832 10833 default: 10834 t.search(a); 10835 } 10836 }), this.search(a); 10837 }, 10838 Ne = function Ne(e) { 10839 if (e) { 10840 var t = this.opts.searchfield; 10841 this.conf.searchfield; 10842 10843 if (e.closest(".mm-panel") || (e = y(this.node.pnls, ".mm-panel")[0]), !y(e, ".mm-panel__noresultsmsg").length) { 10844 var n = g("div.mm-panel__noresultsmsg.mm-hidden"); 10845 n.innerHTML = this.i18n(t.noResults), e.append(n); 10846 } 10847 } 10848 }; 10849 10850 M.prototype.search = function (e, t) { 10851 var n, 10852 i = this, 10853 s = this.opts.searchfield; 10854 this.conf.searchfield; 10855 t = (t = t || "" + e.value).toLowerCase().trim(); 10856 10857 var a = e.mmSearchfield, 10858 o = _(e.closest(".mm-searchfield"), ".mm-btn"), 10859 r = y(this.node.pnls, ".mm-panel_search")[0], 10860 c = a.panels, 10861 m = a.noresults, 10862 l = a.listitems, 10863 d = a.dividers; 10864 10865 if (l.forEach(function (e) { 10866 e.classList.remove("mm-listitem_nosubitems"), e.classList.remove("mm-listitem_onlysubitems"), e.classList.remove("mm-hidden"); 10867 }), r && (y(r, ".mm-listview")[0].innerHTML = ""), c.forEach(function (e) { 10868 e.scrollTop = 0; 10869 }), t.length) { 10870 d.forEach(function (e) { 10871 e.classList.add("mm-hidden"); 10872 }), l.forEach(function (e) { 10873 var n, 10874 i = y(e, ".mm-listitem__text")[0], 10875 a = !1; 10876 i && (n = i, Array.prototype.slice.call(n.childNodes).filter(function (e) { 10877 return 3 == e.nodeType; 10878 }).map(function (e) { 10879 return e.textContent; 10880 }).join(" ")).toLowerCase().indexOf(t) > -1 && (i.matches(".mm-listitem__btn") ? s.showSubPanels && (a = !0) : (i.matches("a") || s.showTextItems) && (a = !0)), a || e.classList.add("mm-hidden"); 10881 }); 10882 var p = l.filter(function (e) { 10883 return !e.matches(".mm-hidden"); 10884 }).length; 10885 10886 if (s.panel.add) { 10887 var u = []; 10888 c.forEach(function (e) { 10889 var t = w(_(e, ".mm-listitem")); 10890 10891 if ((t = t.filter(function (e) { 10892 return !e.matches(".mm-hidden"); 10893 })).length) { 10894 if (s.panel.dividers) { 10895 var n = g("li.mm-divider"), 10896 i = _(e, ".mm-navbar__title")[0]; 10897 10898 i && (n.innerHTML = i.innerHTML, u.push(n)); 10899 } 10900 10901 t.forEach(function (e) { 10902 u.push(e.cloneNode(!0)); 10903 }); 10904 } 10905 }), u.forEach(function (e) { 10906 e.querySelectorAll(".mm-toggle, .mm-check").forEach(function (e) { 10907 e.remove(); 10908 }); 10909 }), (n = y(r, ".mm-listview")[0]).append.apply(n, u), this.openPanel(r); 10910 } else s.showSubPanels && c.forEach(function (e) { 10911 w(_(e, ".mm-listitem")).forEach(function (e) { 10912 var t = e.mmChild; 10913 t && _(t, ".mm-listitem").forEach(function (e) { 10914 e.classList.remove("mm-hidden"); 10915 }); 10916 }); 10917 }
10917), Me(c).reverse().forEach(function (t, n) { 10918 var s = t.mmParent; 10919 s && (w(_(t, ".mm-listitem")).length ? (s.matches(".mm-hidden") && s.classList.remove("mm-hidden"), s.classList.add("mm-listitem_onlysubitems")) : e.closest(".mm-panel") || ((t.matches(".mm-panel_opened") || t.matches(".mm-panel_opened-parent")) && setTimeout(function () { 10920 i.openPanel(s.closest(".mm-panel")); 10921 }, (n + 1) * (1.5 * i.conf.openingInterval)), s.classList.add("mm-listitem_nosubitems"))); 10922 }), c.forEach(function (e) { 10923 w(_(e, ".mm-listitem")).forEach(function (e) { 10924 L(e, ".mm-listitem_vertical").forEach(function (e) { 10925 e.matches(".mm-hidden") && (e.classList.remove("mm-hidden"), e.classList.add("mm-listitem_onlysubitems")); 10926 }); 10927 }); 10928 }), c.forEach(function (e) { 10929 w(_(e, ".mm-listitem")).forEach(function (e) { 10930 var t = function (e, t) { 10931 for (var n = [], i = e.previousElementSibling; i;) { 10932 t && !i.matches(t) || n.push(i), i = i.previousElementSibling; 10933 } 10934 10935 return n; 10936 }(e, ".mm-divider")[0]; 10937 10938 t && t.classList.remove("mm-hidden"); 10939 }); 10940 }); 10941 10942 o.forEach(function (e) { 10943 return e.classList.remove("mm-hidden"); 10944 }), m.forEach(function (e) { 10945 _(e, ".mm-panel__noresultsmsg").forEach(function (e) { 10946 return e.classList[p ? "add" : "remove"]("mm-hidden"); 10947 }); 10948 }), s.panel.add && (s.panel.splash && _(r, ".mm-panel__content").forEach(function (e) { 10949 return e.classList.add("mm-hidden"); 10950 }), l.forEach(function (e) { 10951 return e.classList.remove("mm-hidden"); 10952 }), d.forEach(function (e) { 10953 return e.classList.remove("mm-hidden"); 10954 })); 10955 } else if (l.forEach(function (e) { 10956 return e.classList.remove("mm-hidden"); 10957 }), d.forEach(function (e) { 10958 return e.classList.remove("mm-hidden"); 10959 }), o.forEach(function (e) { 10960 return e.classList.add("mm-hidden"); 10961 }), m.forEach(function (e) { 10962 _(e, ".mm-panel__noresultsmsg").forEach(function (e) { 10963 return e.classList.add("mm-hidden"); 10964 }); 10965 }), s.panel.add) if (s.panel.splash) _(r, ".mm-panel__content").forEach(function (e) { 10966 return e.classList.remove("mm-hidden"); 10967 });else if (!e.closest(".mm-panel_search")) { 10968 var f = y(this.node.pnls, ".mm-panel_opened-parent"); 10969 this.openPanel(f.slice(-1)[0]); 10970 } 10971 10972 this.trigger("updateListview"); 10973 }; 10974 10975 var He = { 10976 add: !1, 10977 addTo: "panels" 10978 }; 10979 M.options.sectionIndexer = He; 10980 var je = { 10981 current: !0, 10982 hover: !1, 10983 parent: !1 10984 }; 10985 M.options.setSelected = je; 10986 var De = { 10987 collapsed: { 10988 use: !1, 10989 blockMenu: !0, 10990 hideDivider: !1, 10991 hideNavbar: !0 10992 }, 10993 expanded: { 10994 use: !1, 10995 initial: "open" 10996 } 10997 }; 10998 M.options.sidebar = De; 10999 M.configs.classNames.toggles = { 11000 toggle: "Toggle", 11001 check: "Check" 11002 }; 11003 M.addons = { 11004 offcanvas: function offcanvas() { 11005 var e = this; 11006 11007 if (this.opts.offCanvas) { 11008 var t = function (e) { 11009 return "object" != _typeof(e) && (e = {}), e; 11010 }(this.opts.offCanvas); 11011 11012 this.opts.offCanvas = o(t, M.options.offCanvas); 11013 var n = this.conf.offCanvas; 11014 this._api.push("open", "close", "setPage"), this.vars.opened = !1, this.bind("initMenu:before", function () { 11015 n.clone && (e.node.menu = e.node.menu.cloneNode(!0), e.node.menu.id && (e.node.menu.id = "mm-" + e.node.menu.id), _(e.node.menu, "[id]").forEach(function (e) { 11016 e.id = "mm-" + e.id; 11017 })), e.node.wrpr = document.body, document.querySelector(n.menu.insertSelector)[n.menu.insertMethod](e.node.menu); 11018 }), this.bind("initMenu:after", function () { 11019 D.call(e), e.setPage(M.node.page), j.call(e), e.node.menu.classList.add("mm-menu_offcanvas"); 11020 var t = window.location.hash; 11021 11022 if (t) { 11023 var n = p(e.node.menu.id); 11024 n && n == t.slice(1) && setTimeout(function () { 11025 e.open(); 11026 }, 1e3); 11027 } 11028 }), this.bind("setPage:after", function (e) { 11029 M.node.blck && y(M.node.blck, "a").forEach(function (t) { 11030 t.setAttribute("href", "#" + e.id); 11031 }); 11032 }), this.bind("open:start:sr-aria", function () { 11033 M.sr_aria(e.node.menu, "hidden", !1); 11034 }), this.bind("close:finish:sr-aria", function () { 11035 M.sr_aria(e.node.menu, "hidden", !0); 11036 }), this.bind("initMenu:after:sr-aria", function () { 11037 M.sr_aria(e.node.menu, "hidden", !0); 11038 }), this.bind("initBlocker:after:sr-text", function () { 11039 y(M.node.blck, "a").forEach(function (t) { 11040 t.innerHTML = M.sr_text(e.i18n(e.conf.screenReader.text.closeMenu)); 11041 }); 11042 }), this.clck.push(function (t, n) { 11043 var i = p(e.node.menu.id); 11044 11045 if (i && t.matches('[href="#' + i + '"]')) { 11046 if (n.inMenu) return e.open(), !0; 11047 var s = t.closest(".mm-menu"); 11048 11049 if (s) { 11050 var a = s.mmApi; 11051 if (a && a.close) return a.close(), m(s, function () { 11052 e.open(); 11053 }, e.conf.transitionDuration), !0; 11054 } 11055 11056 return e.open(), !0; 11057 } 11058
11059 if ((i = M.node.page.id) && t.matches('[href="#' + i + '"]')) return e.close(), !0; 11060 }); 11061 } 11062 }, 11063 screenReader: function screenReader() { 11064 var e = this, 11065 t = function (e) { 11066 return "boolean" == typeof e && (e = { 11067 aria: e, 11068 text: e 11069 }), "object" != _typeof(e) && (e = {}), e; 11070 }(this.opts.screenReader); 11071 11072 this.opts.screenReader = o(t, M.options.screenReader); 11073 var n = this.conf.screenReader; 11074 t.aria && (this.bind("initAddons:after", function () { 11075 e.bind("initMenu:after", function () { 11076 this.trigger("initMenu:after:sr-aria", [].slice.call(arguments)); 11077 }), e.bind("initNavbar:after", function () { 11078 this.trigger("initNavbar:after:sr-aria", [].slice.call(arguments)); 11079 }), e.bind("openPanel:start", function () { 11080 this.trigger("openPanel:start:sr-aria", [].slice.call(arguments)); 11081 }), e.bind("close:start", function () { 11082 this.trigger("close:start:sr-aria", [].slice.call(arguments)); 11083 }), e.bind("close:finish", function () { 11084 this.trigger("close:finish:sr-aria", [].slice.call(arguments)); 11085 }), e.bind("open:start", function () { 11086 this.trigger("open:start:sr-aria", [].slice.call(arguments)); 11087 }), e.bind("initOpened:after", function () { 11088 this.trigger("initOpened:after:sr-aria", [].slice.call(arguments)); 11089 }); 11090 }), this.bind("updateListview", function () { 11091 e.node.pnls.querySelectorAll(".mm-listitem").forEach(function (e) { 11092 M.sr_aria(e, "hidden", e.matches(".mm-hidden")); 11093 }); 11094 }), this.bind("openPanel:start", function (t) { 11095 var n = _(e.node.pnls, ".mm-panel").filter(function (e) { 11096 return e !== t; 11097 }).filter(function (e) { 11098 return !e.parentElement.matches(".mm-panel"); 11099 }), 11100 i = [t]; 11101 11102 _(t, ".mm-listitem_vertical .mm-listitem_opened").forEach(function (e) { 11103 i.push.apply(i, y(e, ".mm-panel")); 11104 }), n.forEach(function (e) { 11105 M.sr_aria(e, "hidden", !0); 11106 }), i.forEach(function (e) { 11107 M.sr_aria(e, "hidden", !1); 11108 }); 11109 }), this.bind("closePanel", function (e) { 11110 M.sr_aria(e, "hidden", !0); 11111 }), this.bind("initPanel:after", function (e) { 11112 _(e, ".mm-btn").forEach(function (e) { 11113 M.sr_aria(e, "haspopup", !0); 11114 var t = e.getAttribute("href"); 11115 t && M.sr_aria(e, "owns", t.replace("#", "")); 11116 }); 11117 }), this.bind("initNavbar:after", function (e) { 11118 var t = y(e, ".mm-navbar")[0], 11119 n = t.matches(".mm-hidden"); 11120 M.sr_aria(t, "hidden", n); 11121 }), t.text && "parent" == this.opts.navbar.titleLink && this.bind("initNavbar:after", function (e) { 11122 var t = y(e, ".mm-navbar")[0], 11123 n = !!t.querySelector(".mm-btn_prev"); 11124 M.sr_aria(_(t, ".mm-navbar__title")[0], "hidden", n); 11125 })), t.text && (this.bind("initAddons:after", function () { 11126 e.bind("setPage:after", function () { 11127 this.trigger("setPage:after:sr-text", [].slice.call(arguments)); 11128 }), e.bind("initBlocker:after", function () { 11129 this.trigger("initBlocker:after:sr-text", [].slice.call(arguments)); 11130 }); 11131 }), this.bind("initNavbar:after", function (t) { 11132 var i = y(t, ".mm-navbar")[0]; 11133 11134 if (i) { 11135 var s = y(i, ".mm-btn_prev")[0]; 11136 s && (s.innerHTML = M.sr_text(e.i18n(n.text.closeSubmenu))); 11137 } 11138 }), this.bind("initListview:after", function (t) { 11139 var i = t.closest(".mm-panel").mmParent; 11140 11141 if (i) { 11142 var s = y(i, ".mm-btn_next")[0]; 11143 11144 if (s) { 11145 var a = e.i18n(n.text[s.parentElement.matches(".mm-listitem_vertical") ? "toggleSubmenu" : "openSubmenu"]); 11146 s.innerHTML += M.sr_text(a); 11147 } 11148 } 11149 })); 11150 }, 11151 scrollBugFix: function scrollBugFix() { 11152 var e = this; 11153 11154 if (W && this.opts.offCanvas && this.opts.offCanvas.blockUI) { 11155 var t = function (e) { 11156 return "boolean" == typeof e && (e = { 11157 fix: e 11158 }), "object" != _typeof(e) && (e = {}), e; 11159 }(this.opts.scrollBugFix); 11160 11161 if (this.opts.scrollBugFix = o(t, M.options.scrollBugFix), t.fix) { 11162 var n, 11163 i, 11164 s = (n = this.node.menu, i = "", n.addEventListener("touchmove", function (e) { 11165 i = "", e.movementY > 0 ? i = "down" : e.movementY < 0 && (i = "up"); 11166 }), { 11167 get: function get() { 11168 return i; 11169 } 11170 }); 11171 this.node.menu.addEventListener("scroll", a, { 11172 passive: !1 11173 }), this.node.menu.addEventListener("touchmove", function (e) { 11174 var t = e.target.closest(".mm-panel, .mm-iconbar__top, .mm-iconbar__bottom"); 11175 t && t.closest(".mm-listitem_vertical") && (t = L(t, ".mm-panel").pop()), t ? (t.scrollHeight === t.offsetHeight || 0 == t.scrollTop && "down" == s.get() || t.scrollHeight == t.scrollTop + t.offsetHeight && "up" == s.get()) && a(e) : a(e); 11176 }, { 11177 passive: !1 11178 }), this.bind("open:start", function () { 11179 var t = y(e.node.pnls, ".mm-panel_opened")[0]; 11180 t && (t.scrollTop = 0); 11181 }), window.addEventListener("orientationchange", function (t) { 11182 var n = y(e.node.pnls, ".mm-panel_opened")[0]; 11183 n && (n.scrollTop = 0, n.style["-webkit-overflow-scrolling"] = "auto", n.style["-webkit-overflow-scrolling"] = "touch"); 11184 }); 11185 } 11186 } 11187 11188 function a(e) { 11189 e.preventDefault(), e.stopPropagation(); 11190 } 11191 }, 11192 autoHeight: function autoHeight() { 11193 var e = this, 11194 t = function (e) { 11195 return "boolean" == typeof e && e && (e = { 11196 height: "auto" 11197 }), "string" == typeof e && (e = { 11198 height: e 11199 }), "object" != _typeof(e) && (e = {}), e; 11200 }(this.opts.autoHeight); 11201 11202 if (this.opts.autoHeight = o(t, M.options.autoHeight), "auto" == t.height || "highest" == t.height) { 11203 var n, 11204 i = (n = function n(e) { 11205 return e.parentElement.matches(".mm-listitem_vertical") && (e = L(e, ".mm-panel").filter(function (e) { 11206 return !e.parentElement.matches(".mm-listitem_vertical"); 11207 })[0]), e; 11208 }, function () { 11209 if (!e.opts.offCanvas || e.vars.opened) { 11210 var i, 11211 s, 11212 a = 0,
11213 o = e.node.menu.offsetHeight - e.node.pnls.offsetHeight; 11214 e.node.menu.classList.add("mm-menu_autoheight-measuring"), "auto" == t.height ? ((s = y(e.node.pnls, ".mm-panel_opened")[0]) && (s = n(s)), s || (s = y(e.node.pnls, ".mm-panel")[0]), a = s.scrollHeight) : "highest" == t.height && (i = 0, y(e.node.pnls, ".mm-panel").forEach(function (e) { 11215 e = n(e), i = Math.max(i, e.scrollHeight); 11216 }), a = i), e.node.menu.style.height = a + o + "px", e.node.menu.classList.remove("mm-menu_autoheight-measuring"); 11217 } 11218 }); 11219 this.bind("initMenu:after", function () { 11220 e.node.menu.classList.add("mm-menu_autoheight"); 11221 }), this.opts.offCanvas && this.bind("open:start", i), "highest" == t.height && this.bind("initPanels:after", i), "auto" == t.height && (this.bind("updateListview", i), this.bind("openPanel:start", i)); 11222 } 11223 }, 11224 backButton: function backButton() { 11225 var e = this; 11226 11227 if (this.opts.offCanvas) { 11228 var t = function (e) { 11229 return "boolean" == typeof e && (e = { 11230 close: e 11231 }), "object" != _typeof(e) && (e = {}), e; 11232 }(this.opts.backButton); 11233 11234 this.opts.backButton = o(t, M.options.backButton); 11235 var n = "#" + this.node.menu.id; 11236 11237 if (t.close) { 11238 var i = [], 11239 s = function s() { 11240 i = [n], y(e.node.pnls, ".mm-panel_opened, .mm-panel_opened-parent").forEach(function (e) { 11241 i.push("#" + e.id); 11242 }); 11243 }; 11244 11245 this.bind("open:finish", function () { 11246 history.pushState(null, document.title, n); 11247 }), this.bind("open:finish", s), this.bind("openPanel:finish", s), this.bind("close:finish", function () { 11248 i = [], history.back(), history.pushState(null, document.title, location.pathname + location.search); 11249 }), window.addEventListener("popstate", function (t) { 11250 if (e.vars.opened && i.length) { 11251 var s = (i = i.slice(0, -1))[i.length - 1]; 11252 s == n ? e.close() : (e.openPanel(e.node.menu.querySelector(s)), history.pushState(null, document.title, n)); 11253 } 11254 }); 11255 } 11256 11257 t.open && window.addEventListener("popstate", function (t) { 11258 e.vars.opened || location.hash != n || e.open(); 11259 }); 11260 } 11261 }, 11262 columns: function columns() { 11263 var e = this, 11264 t = function (e) { 11265 return "boolean" == typeof e && (e = { 11266 add: e 11267 }), "number" == typeof e && (e = { 11268 add: !0, 11269 visible: e 11270 }), "object" != _typeof(e) && (e = {}), "number" == typeof e.visible && (e.visible = { 11271 min: e.visible, 11272 max: e.visible 11273 }), e; 11274 }(this.opts.columns); 11275 11276 if (this.opts.columns = o(t, M.options.columns), t.add) { 11277 t.visible.min = Math.max(1, Math.min(6, t.visible.min)), t.visible.max = Math.max(t.visible.min, Math.min(6, t.visible.max)); 11278 11279 for (var n = [], i = [], s = ["mm-panel_opened", "mm-panel_opened-parent", "mm-panel_highest"], a = 0; a <= t.visible.max; a++) { 11280 n.push("mm-menu_columns-" + a), i.push("mm-panel_columns-" + a); 11281 } 11282 11283 s.push.apply(s, i), this.bind("openPanel:before", function (t) { 11284 var n; 11285 11286 if (t && (n = t.mmParent), n && !n.classList.contains("mm-listitem_vertical") && (n = n.closest(".mm-panel"))) { 11287 var i = n.className; 11288 if (i.length && (i = i.split("mm-panel_columns-")[1])) for (var a = parseInt(i.split(" ")[0], 10) + 1; a > 0;) { 11289 if (!(t = y(e.node.pnls, ".mm-panel_columns-" + a)[0])) { 11290 a = -1; 11291 break; 11292 } 11293 11294 a++, t.classList.add("mm-hidden"), s.forEach(function (e) { 11295 t.classList.remove(e); 11296 }); 11297 } 11298 } 11299 }), this.bind("openPanel:start", function (s) { 11300 if (s) { 11301 var a = s.mmParent; 11302 if (a && a.classList.contains("mm-listitem_vertical")) return; 11303 } 11304 11305 var o = y(e.node.pnls, ".mm-panel_opened-parent").length; 11306 s.matches(".mm-panel_opened-parent") || o++, o = Math.min(t.visible.max, Math.max(t.visible.min, o)), n.forEac
11306h(function (t) { 11307 e.node.menu.classList.remove(t); 11308 }), e.node.menu.classList.add("mm-menu_columns-" + o); 11309 var r = []; 11310 y(e.node.pnls, ".mm-panel").forEach(function (e) { 11311 i.forEach(function (t) { 11312 e.classList.remove(t); 11313 }), e.matches(".mm-panel_opened-parent") && r.push(e); 11314 }), r.push(s), r.slice(-t.visible.max).forEach(function (e, t) { 11315 e.classList.add("mm-panel_columns-" + t); 11316 }); 11317 }); 11318 } 11319 }, 11320 counters: function counters() { 11321 var e = this, 11322 t = function (e) { 11323 return "boolean" == typeof e && (e = { 11324 add: e, 11325 addTo: "panels", 11326 count: e 11327 }), "object" != _typeof(e) && (e = {}), "panels" == e.addTo && (e.addTo = ".mm-listview"), e; 11328 }(this.opts.counters); 11329 11330 if (this.opts.counters = o(t, M.options.counters), this.bind("initListview:after", function (t) { 11331 var n = e.conf.classNames.counters.counter; 11332 11333 _(t, "." + n).forEach(function (e) { 11334 x(e, n, "mm-counter"); 11335 }); 11336 }), t.add && this.bind("initListview:after", function (e) { 11337 if (e.matches(t.addTo)) { 11338 var n = e.closest(".mm-panel").mmParent; 11339 11340 if (n && !_(n, ".mm-counter").length) { 11341 var i = y(n, ".mm-btn")[0]; 11342 i && i.prepend(g("span.mm-counter")); 11343 } 11344 } 11345 }), t.count) { 11346 var n = function n(t) { 11347 (t ? [t.closest(".mm-panel")] : y(e.node.pnls, ".mm-panel")).forEac
11347h(function (e) { 11348 var t = e.mmParent; 11349 11350 if (t) { 11351 var n = _(t, ".mm-counter")[0]; 11352 11353 if (n) { 11354 var i = []; 11355 y(e, ".mm-listview").forEach(function (e) { 11356 i.push.apply(i, y(e)); 11357 }), n.innerHTML = w(i).length.toString(); 11358 } 11359 } 11360 }); 11361 }; 11362 11363 this.bind("initListview:after", n), this.bind("updateListview", n); 11364 } 11365 }, 11366 dividers: function dividers() { 11367 var e = this, 11368 t = function (e) { 11369 return "boolean" == typeof e && (e = { 11370 add: e 11371 }), "object" != _typeof(e) && (e = {}), "panels" == e.addTo && (e.addTo = ".mm-listview"), e; 11372 }(this.opts.dividers); 11373 11374 this.opts.dividers = o(t, M.options.dividers), this.bind("initListview:after", function (t) { 11375 y(t).forEach(function (t) { 11376 x(t, e.conf.classNames.divider, "mm-divider"), t.matches(".mm-divider") && t.classList.remove("mm-listitem"); 11377 }); 11378 }), t.add && this.bind("initListview:after", function (e) { 11379 if (e.matches(t.addTo)) { 11380 _(e, ".mm-divider").forEach(function (e) { 11381 e.remove(); 11382 }); 11383 11384 var n = ""; 11385 w(y(e)).forEach(function (t) { 11386 var i = y(t, ".mm-listitem__text")[0].textContent.trim().toLowerCase()[0]; 11387 11388 if (i.length && i != n) { 11389 n = i; 11390 var s = g("li.mm-divider"); 11391 s.textContent = i, e.insertBefore(s, t); 11392 } 11393 }); 11394 } 11395 }); 11396 }, 11397 drag: function drag() { 11398 var e = this; 11399 11400 if (this.opts.offCanvas) { 11401 var t = function (e) { 11402 return "boolean" == typeof e && (e = { 11403 open: e 11404 }), "object" != _typeof(e) && (e = {}), e; 11405 }(this.opts.drag); 11406 11407 this.opts.drag = o(t, M.options.drag), t.open && this.bind("setPage:after", function (n) { 11408 ce.call(e, t.node || n); 11409 }); 11410 } 11411 }, 11412 dropdown: function dropdown() { 11413 var e = this; 11414 11415 if (this.opts.offCanvas) { 11416 var t = function (e) { 11417 return "boolean" == typeof e && e && (e = { 11418 drop: e 11419 }), "object" != _typeof(e) && (e = {}), "string" == typeof e.position && (e.position = { 11420 of: e.position 11421 }), e; 11422 }(this.opts.dropdown); 11423 11424 this.opts.dropdown = o(t, M.options.dropdown); 11425 var n = this.conf.dropdown; 11426 11427 if (t.drop) { 11428 var i; 11429 this.bind("initMenu:after", function () { 11430 if (e.node.menu.classList.add("mm-menu_dropdown"), "string" != typeof t.position.of) { 11431 var n = p(e.node.menu.id); 11432 n && (t.position.of = '[href="#' + n + '"]'); 11433 } 11434 11435 if ("string" == typeof t.position.of) { 11436 i = _(document.body, t.position.of)[0]; 11437 var s = t.event.split(" "); 11438 1 == s.length && (s[1] = s[0]), "hover" == s[0] && i.addEventListener("mouseenter", function () { 11439 e.open(); 11440 }, { 11441 passive: !0 11442 }), "hover" == s[1] && e.node.menu.addEventListener("mouseleave", function () { 11443 e.close(); 11444 }, { 11445 passive: !0 11446 }); 11447 } 11448 }), this.bind("open:start", function () { 11449 e.node.menu.mmStyle = e.node.menu.getAttribute("style"), e.node.wrpr.classList.add("mm-wrapper_dropdown"); 11450 }), this.bind("close:finish", function () { 11451 e.node.menu.setAttribute("style", e.node.menu.mmStyle), e.node.wrpr.classList.remove("mm-wrapper_dropdown"); 11452 }); 11453 11454 var s = function s(e, _s) { 11455 var a, 11456 o, 11457 r, 11458 c = _s[0], 11459 m = _s[1], 11460 l = "x" == e ? "offsetWidth" : "offsetHeight", 11461 d = "x" == e ? "left" : "top", 11462 p = "x" == e ? "right" : "bottom", 11463 u = "x" == e ? "width" : "height", 11464 f = "x" == e ? "innerWidth" : "innerHeight", 11465 h = "x" == e ? "maxWidth" : "maxHeight", 11466 v = null, 11467 b = (a = d, i.getBoundingClientRect()[a] + document.body["left" === a ? "scrollLeft" : "scrollTop"]), 11468 g = b + i[l], 11469 _ = window[f], 11470 y = n.offset.button[e] + n.offset.viewport[e]; 11471 if (t.position[e]) switch (t.position[e]) {
11472 case "left": 11473 case "bottom": 11474 v = "after"; 11475 break; 11476 11477 case "right": 11478 case "top": 11479 v = "before"; 11480 } 11481 return null === v && (v = b + (g - b) / 2 < _ / 2 ? "after" : "before"), "after" == v ? (r = _ - ((o = "x" == e ? b : g) + y), c[d] = o + n.offset.button[e] + "px", c[p] = "auto", t.tip && m.push("mm-menu_tip-" + ("x" == e ? "left" : "top"))) : (r = (o = "x" == e ? g : b) - y, c[p] = "calc( 100% - " + (o - n.offset.button[e]) + "px )", c[d] = "auto", t.tip && m.push("mm-menu_tip-" + ("x" == e ? "right" : "bottom"))), t.fitViewport && (c[h] = Math.min(n[u].max, r) + "px"), [c, m]; 11482 }; 11483 11484 this.bind("open:start", a), window.addEventListener("resize", function (t) { 11485 a.call(e); 11486 }, { 11487 passive: !0 11488 }), this.opts.offCanvas.blockUI || window.addEventListener("scroll", function (t) { 11489 a.call(e); 11490 }, { 11491 passive: !0 11492 }); 11493 } 11494 } 11495 11496 function a() { 11497 var e = this; 11498 11499 if (this.vars.opened) { 11500 this.node.menu.setAttribute("style", this.node.menu.mmStyle); 11501 var n = [{}, []]; 11502 11503 for (var i in n = s.call(this, "y", n), (n = s.call(this, "x", n))[0]) { 11504 this.node.menu.style[i] = n[0][i]; 11505 } 11506 11507 if (t.tip) { 11508 ["mm-menu_tip-left", "mm-menu_tip-right", "mm-menu_tip-top", "mm-menu_tip-bottom"].forEach(function (t) { 11509 e.node.menu.classList.remove(t); 11510 }), n[1].forEach(function (t) { 11511 e.node.menu.classList.add(t); 11512 }); 11513 } 11514 } 11515 } 11516 }, 11517 fixedElements: function fixedElements() { 11518 var e = this; 11519 11520 if (this.opts.offCanvas) { 11521 var t, 11522 n, 11523 i = this.conf.fixedElements; 11524 this.bind("setPage:after", function (s) { 11525 t = e.conf.classNames.fixedElements.fixed, n = _(document, i.insertSelector)[0], _(s, "." + t).forEach(function (e) { 11526 x(e, t, "mm-slideout"), n[i.insertMethod](e); 11527 }); 11528 }); 11529 } 11530 }, 11531 iconbar: function iconbar() { 11532 var e, 11533 t = this, 11534 n = function (e) { 11535 return "array" == r(e) && (e = { 11536 use: !0, 11537 top: e 11538 }), "object" != r(e) && (e = {}), void 0 === e.use && (e.use = !0), "boolean" == typeof e.use && e.use && (e.use = !0), e; 11539 }(this.opts.iconbar); 11540 11541 if ((this.opts.iconbar = o(n, M.options.iconbar), n.use) && (["top", "bottom"].forEach(function (t, i) { 11542 var s = n[t]; 11543 "array" != r(s) && (s = [s]); 11544 11545 for (var a = g("div.mm-iconbar__" + t), o = 0, c = s.length; o < c; o++) { 11546 "string" == typeof s[o] ? a.innerHTML += s[o] : a.append(s[o]); 11547 } 11548 11549 a.children.length && (e || (e = g("div.mm-iconbar")), e.append(a)); 11550 }), e)) { 11551 this.bind("initMenu:after", function () { 11552 t.node.menu.prepend(e); 11553 }); 11554 11555 var i = "mm-menu_iconbar-" + n.position, 11556 s = function s() { 11557 t.node.menu.classList.add(i), M.sr_aria(e, "hidden", !1); 11558 }; 11559 11560 if ("boolean" == typeof n.use ? this.bind("initMenu:after", s) : k(n.use, s, function () { 11561 t.node.menu.classList.remove(i), M.sr_aria(e, "hidden", !0); 11562 }), "tabs" == n.type) { 11563 e.classList.add("mm-iconbar_tabs"), e.addEventListener("click", function (e) { 11564 var n = e.target; 11565 if (n.matches("a")) if (n.matches(".mm-iconbar__tab_selected")) e.stopImmediatePropagation();else try { 11566 var i = t.node.menu.querySelector(n.getAttribute("href"))[0]; 11567 i && i.matches(".mm-panel") && (e.preventDefault(), e.stopImmediatePropagation(), t.openPanel(i, !1)); 11568 } catch (e) {} 11569 }); 11570 11571 var a = function a(t) { 11572 _(e, "a").forEach(function (e) { 11573 e.classList.remove("mm-iconbar__tab_selected"); 11574 }); 11575 11576 var n = _(e, '[href="#' + t.id + '"]')[0]; 11577 11578 if (n) n.classList.add("mm-iconbar__tab_selected");else { 11579 var i = t.mmParent; 11580 i && a(i.closest(".mm-panel")); 11581 } 11582 }; 11583 11584 this.bind("openPanel:start", a); 11585 } 11586 } 11587 }, 11588 iconPanels: function iconPanels() { 11589 var e = this, 11590 t = function (e) { 11591 return "boolean" == typeof e && (e = { 11592 add: e 11593 }), "number" != typeof e && "string" != typeof e || (e = { 11594 add: !0, 11595 visible: e 11596 }), "object" != _typeof(e) && (e = {}), e; 11597 }(this.opts.iconPanels); 11598 11599 this.opts.iconPanels = o(t, M.options.iconPanels); 11600 var n = !1; 11601 11602 if ("first" == t.visible && (n = !0, t.visible = 1), t.visible = Math.min(3, Math.max(1, t.visible)), t.visible++, t.add) { 11603 this.bind("initMenu:after", function () { 11604 var n = ["mm-menu_iconpanel"]; 11605 t.hideNavbar && n.push("mm-menu_hidenavbar"), t.hideDivider && n.push("mm-menu_hidedivi
11605der"), n.forEach(function (t) { 11606 e.node.menu.classList.add(t); 11607 }); 11608 }); 11609 var i = []; 11610 if (!n) for (var s = 0; s <= t.visible; s++) { 11611 i.push("mm-panel_iconpanel-" + s); 11612 } 11613 this.bind("openPanel:start", function (s) { 11614 var a = y(e.node.pnls, ".mm-panel"); 11615 if (!(s = s || a[0]).parentElement.matches(".mm-listitem_vertical")) if (n) a.forEach(function (e, t) { 11616 e.classList[0 == t ? "add" : "remove"]("mm-panel_iconpanel-first"); 11617 });else { 11618 a.forEach(function (e) { 11619 i.forEach(function (t) { 11620 e.classList.remove(t); 11621 }); 11622 }), a = a.filter(function (e) { 11623 return e.matches(".mm-panel_opened-parent"); 11624 }); 11625 var o = !1; 11626 a.forEach(function (e) { 11627 s === e && (o = !0); 11628 }), o || a.push(s), a.forEach(function (e) { 11629 e.classList.remove("mm-hidden"); 11630 }), (a = a.slice(-t.visible)).forEach(function (e, t) { 11631 e.classList.add("mm-panel_iconpanel-" + t); 11632 }); 11633 } 11634 }), this.bind("initPanel:after", function (e) { 11635 if (t.blockPanel && !e.parentElement.matches(".mm-listitem_vertical") && !y(e, ".mm-panel__blocker")[0]) { 11636 var n = g("a.mm-panel__blocker"); 11637 n.setAttribute("href", "#" + e.closest(".mm-panel").id), e.prepend(n); 11638 } 11639 }); 11640 } 11641 }, 11642 keyboardNavigation: function keyboardNavigation() { 11643 var e = this; 11644 11645 if (!W) { 11646 var t = function (e) { 11647 return "boolean" != typeof e && "string" != typeof e || (e = { 11648 enable: e 11649 }), "object" != _typeof(e) && (e = {}), e; 11650 }(this.opts.keyboardNavigation); 11651 11652 if (this.opts.keyboardNavigation = o(t, M.options.keyboardNavigation), t.enable) { 11653 var n = g("button.mm-tabstart.mm-sronly"), 11654 i = g("button.mm-tabend.mm-sronly"), 11655 s = g("button.mm-tabend.mm-sronly"); 11656 this.bind("initMenu:after", function () { 11657 t.enhance && e.node.menu.classList.add("mm-menu_keyboardfocus"), ve.call(e, t.enhance); 11658 }), this.bind("initOpened:before", function () { 11659 e.node.menu.prepend(n), e.node.menu.append(i), y(e.node.menu, ".mm-navbars-top, .mm-navbars-bottom").forEach(function (e) { 11660 e.querySelectorAll(".mm-navbar__title").forEach(function (e) { 11661 e.setAttribute("tabindex", "-1"); 11662 }); 11663 }); 11664 }), this.bind("initBlocker:after", function () { 11665 M.node.blck.append(s), y(M.node.blck, "a")[0].classList.add("mm-tabstart"); 11666 }); 11667 11668 var a = "input, select, textarea, button, label, a[href]", 11669 r = function r(n) { 11670 n = n || y(e.node.pnls, ".mm-panel_opened")[0]; 11671 var i = null, 11672 s = document.activeElement.closest(".mm-navbar"); 11673 11674 if (!s || s.closest(".mm-menu") != e.node.menu) { 11675 if ("default" == t.enable && ((i = _(n, ".mm-listview a[href]:not(.mm-hidden)")[0]) || (i = _(n, a + ":not(.mm-hidden)")[0]), !i)) { 11676 var o = []; 11677 y(e.node.menu, ".mm-navbars_top, .mm-navbars_bottom").forEach(function (e) { 11678 o.push.apply(o, _(e, a + ":not(.mm-hidden)")); 11679 }), i = o[0]; 11680 } 11681 11682 i || (i = y(e.node.menu, ".mm-tabstart")[0]), i && i.focus(); 11683 } 11684 }; 11685 11686 this.bind("open:finish", r), this.bind("openPanel:finish", r), this.bind("initOpened:after:sr-aria", function () { 11687 [e.node.menu, M.node.blck].forEach(function (e) { 11688 y(e, ".mm-tabstart, .mm-tabend").forEach(function (e) { 11689 M.sr_aria(e, "hidden", !0), M.sr_role(e, "presentation"); 11690 }); 11691 }); 11692 }); 11693 } 11694 } 11695 }, 11696 lazySubmenus: function lazySubmenus() { 11697 var e = this, 11698 t = function (e) { 11699 return "boolean" == typeof e && (e = { 11700 load: e 11701 }), "object" != _typeof(e) && (e = {}), e; 11702 }(this.opts.lazySubmenus); 11703 11704 this.opts.lazySubmenus = o(t, M.options.lazySubmenus), t.load && (this.bind("initPanels:before", function () { 11705 var t = []; 11706 _(e.node.pnls, "li").forEach(function (n) { 11707 t.push.apply(t, y(n, e.conf.panelNodetype.join(", "))); 11708 }), t.filter(function (e) { 11709 return !e.matches(".mm-listview_inset"); 11710 }).filter(function (e) { 11711 return !e.matches(".mm-nolistview"); 11712 }).filter(function (e) { 11713 return !e.matches(".mm-nopanel"); 11714 }
11714).forEach(function (e) { 11715 ["mm-panel_lazysubmenu", "mm-nolistview", "mm-nopanel"].forEach(function (t) { 11716 e.classList.add(t); 11717 }); 11718 }); 11719 }), this.bind("initPanels:before", function () { 11720 var t = []; 11721 _(e.node.pnls, "." + e.conf.classNames.selected).forEach(function (e) { 11722 t.push.apply(t, L(e, ".mm-panel_lazysubmenu")); 11723 }), t.length && t.forEach(function (e) { 11724 console.log(e); 11725 ["mm-panel_lazysubmenu", "mm-nolistview", "mm-nopanel"].forEach(function (t) { 11726 e.classList.remove(t); 11727 }); 11728 }); 11729 }), this.bind("openPanel:before", function (t) { 11730 var n = _(t, ".mm-panel_lazysubmenu").filter(function (e) { 11731 return !e.matches(".mm-panel_lazysubmenu .mm-panel_lazysubmenu"); 11732 }); 11733 11734 t.matches(".mm-panel_lazysubmenu") && n.unshift(t), n.forEach(function (t) { 11735 ["mm-panel_lazysubmenu", "mm-nolistview", "mm-nopanel"].forEach(function (e) { 11736 t.classList.remove(e); 11737 }), e.initPanel(t); 11738 }); 11739 })); 11740 }, 11741 navbars: ye, 11742 pageScroll: function pageScroll() { 11743 var e = this, 11744 t = function (e) { 11745 return "boolean" == typeof e && (e = { 11746 scroll: e 11747 }), "object" != _typeof(e) && (e = {}), e; 11748 }(this.opts.pageScroll); 11749 11750 this.opts.pageScroll = o(t, M.options.pageScroll); 11751 var n, 11752 i = this.conf.pageScroll; 11753 11754 function s() { 11755 n && window.scrollTo({ 11756 top: n.getBoundingClientRect().top + document.scrollingElement.scrollTop - i.scrollOffset, 11757 behavior: "smooth" 11758 }), n = null; 11759 } 11760 11761 function a(e) { 11762 try { 11763 return "#" != e && "#" == e.slice(0, 1) ? M.node.page.querySelector(e) : null; 11764 } catch (e) { 11765 return null; 11766 } 11767 } 11768 11769 if (t.scroll && this.bind("close:finish", function () { 11770 s(); 11771 }), this.opts.offCanvas && t.scroll && this.clck.push(function (t, i) { 11772 if (n = null, i.inMenu) { 11773 var o = t.getAttribute("href"); 11774 if (n = a(o)) return e.node.menu.matches(".mm-menu_sidebar-expanded") && e.node.wrpr.matches(".mm-wrapper_sidebar-expanded") ? void s() : { 11775 close: !0 11776 }; 11777 } 11778 }), t.update) { 11779 var r = []; 11780 this.bind("initListview:after", function (e) { 11781 E(y(e, ".mm-listitem")).forEach(function (e) { 11782 var t = a(e.getAttribute("href")); 11783 t && r.unshift(t); 11784 }); 11785 }); 11786 var c = -1; 11787 window.addEventListener("scroll", function (t) { 11788 for (var n = window.scrollY, s = 0; s < r.length; s++) { 11789 if (r[s].offsetTop < n + i.updateOffset) { 11790 if (c !== s) { 11791 c = s; 11792 var a = E(_(y(e.node.pnls, ".mm-panel_opened")[0], ".mm-listitem")); 11793 (a = a.filter(function (e) { 11794 return e.matches('[href="#' + r[s].id + '"]'); 11795 })).length && e.setSelected(a[0].parentElement); 11796 } 11797 11798 break; 11799 } 11800 } 11801 }); 11802 } 11803 }, 11804 searchfield: function searchfield() { 11805 var e = this, 11806 t = function (e) { 11807 return "boolean" == typeof e && (e = { 11808 add: e 11809 }), "object" != _typeof(e) && (e = {}), "boolean" == typeof e.panel && (e.panel = { 11810 add: e.panel 11811 }), "object" != _typeof(e.panel) && (e.panel = {}), "panel" == e.addTo && (e.panel.add = !0), e.panel.add && (e.showSubPanels = !1, e.panel.splash && (e.cancel = !0)), e; 11812 }(this.opts.searchfield); 11813 11814 this.opts.searchfield = o(t, M.options.searchfield); 11815 this.conf.searchfield; 11816 t.add && (this.bind("close:start", function () { 11817 _(e.node.menu, ".mm-searchfield").forEach(function (e) { 11818 e.blur(); 11819 }); 11820 }), this.bind("initPanel:after", function (n) { 11821 var i = null; 11822 t.panel.add && (i = Ae.call(e)); 11823 var s = null; 11824 11825 switch (t.addTo) { 11826 case "panels": 11827 s = [n]; 11828 break; 11829 11830 case "panel": 11831 s = [i]; 11832 break; 11833 11834 default: 11835 "string" == typeof t.addTo ? s = _(e.node.menu, t.addTo) : "array" == r(t.addTo) && (s = t.addTo); 11836 } 11837
11838 s.forEach(function (n) { 11839 n = Te.call(e, n), t.search && n && Ce.call(e, n); 11840 }), t.noResults && Ne.call(e, t.panel.add ? i : n); 11841 }), this.clck.push(function (t, n) { 11842 if (n.inMenu && t.matches(".mm-searchfield__btn")) { 11843 if (t.matches(".mm-btn_close")) { 11844 var i = _(s = t.closest(".mm-searchfield"), "input")[0]; 11845 11846 return i.value = "", e.search(i), !0; 11847 } 11848 11849 var s; 11850 if (t.matches(".mm-btn_next")) return (s = t.closest("form")) && s.submit(), !0; 11851 } 11852 })); 11853 }, 11854 sectionIndexer: function sectionIndexer() { 11855 var e = this, 11856 t = function (e) { 11857 return "boolean" == typeof e && (e = { 11858 add: e 11859 }), "object" != _typeof(e) && (e = {}), e; 11860 }(this.opts.sectionIndexer); 11861 11862 this.opts.sectionIndexer = o(t, M.options.sectionIndexer), t.add && this.bind("initPanels:after", function () { 11863 if (!e.node.indx) { 11864 var t = ""; 11865 "abcdefghijklmnopqrstuvwxyz".split("").forEach(function (e) { 11866 t += '<a href="#">' + e + "</a>"; 11867 }); 11868 var n = g("div.mm-sectionindexer"); 11869 n.innerHTML = t, e.node.pnls.prepend(n), e.node.indx = n, e.node.indx.addEventListener("click", function (e) { 11870 e.target.matches("a") && e.preventDefault(); 11871 }); 11872 11873 var i = function i(t) { 11874 if (t.target.matches("a")) { 11875 var n = t.target.textContent, 11876 i = y(e.node.pnls, ".mm-panel_opened")[0], 11877 s = -1, 11878 a = i.scrollTop; 11879 i.scrollTop = 0, _(i, ".mm-divider").filter(function (e) { 11880 return !e.matches(".mm-hidden"); 11881 }
11881).forEach(function (e) { 11882 s < 0 && n == e.textContent.trim().slice(0, 1).toLowerCase() && (s = e.offsetTop); 11883 }), i.scrollTop = s > -1 ? s : a; 11884 } 11885 }; 11886 11887 W ? (e.node.indx.addEventListener("touchstart", i), e.node.indx.addEventListener("touchmove", i)) : e.node.indx.addEventListener("mouseover", i); 11888 } 11889 11890 e.bind("openPanel:start", function (t) { 11891 var n = _(t, ".mm-divider").filter(function (e) { 11892 return !e.matches(".mm-hidden"); 11893 }).length; 11894 11895 e.node.indx.classList[n ? "add" : "remove"]("mm-sectionindexer_active"); 11896 }); 11897 }); 11898 }, 11899 setSelected: function setSelected() { 11900 var e = this, 11901 t = function (e) { 11902 return "boolean" == typeof e && (e = { 11903 hover: e, 11904 parent: e 11905 }), "object" != _typeof(e) && (e = {}), e; 11906 }(this.opts.setSelected); 11907 11908 if (this.opts.setSelected = o(t, M.options.setSelected), "detect" == t.current) { 11909 var n = function n(t) { 11910 t = t.split("?")[0].split("#")[0]; 11911 var i = e.node.menu.querySelector('a[href="' + t + '"], a[href="' + t + '/"]'); 11912 if (i) e.setSelected(i.parentElement);else { 11913 var s = t.split("/").slice(0, -1); 11914 s.length && n(s.join("/")); 11915 } 11916 }; 11917 11918 this.bind("initMenu:after", function () { 11919 n.call(e, window.location.href); 11920 }); 11921 } else t.current || this.bind("initListview:after", function (e) { 11922 y(e, ".mm-listitem_selected").forEach(function (e) { 11923 e.classList.remove("mm-listitem_selected"); 11924 }); 11925 }); 11926 11927 t.hover && this.bind("initMenu:after", function () { 11928 e.node.menu.classList.add("mm-menu_selected-hover"); 11929 }), t.parent && (this.bind("openPanel:finish", function (t) { 11930 _(e.node.pnls, ".mm-listitem_selected-parent").forEach(function (e) { 11931 e.classList.remove("mm-listitem_selected-parent"); 11932 }); 11933 11934 for (var n = t.mmParent; n;) { 11935 n.matches(".mm-listitem_vertical") || n.classList.add("mm-listitem_selected-parent"), n = (n = n.closest(".mm-panel")).mmParent; 11936 } 11937 }), this.bind("initMenu:after", function () { 11938 e.node.menu.classList.add("mm-menu_selected-parent"); 11939 })); 11940 }, 11941 sidebar: function sidebar() { 11942 var e = this; 11943 11944 if (this.opts.offCanvas) { 11945 var t = function (e) { 11946 return ("string" == typeof e || "boolean" == typeof e && e || "number" == typeof e) && (e = { 11947 expanded: e 11948 }), "object" != _typeof(e) && (e = {}), "boolean" == typeof e.collapsed && e.collapsed && (e.collapsed = { 11949 use: !0 11950 }), "string" != typeof e.collapsed && "number" != typeof e.collapsed || (e.collapsed = { 11951 use: e.collapsed 11952 }), "object" != _typeof(e.collapsed) && (e.collapsed = {}), "boolean" == typeof e.expanded && e.expanded && (e.expanded = { 11953 use: !0 11954 }), "string" != typeof e.expanded && "number" != typeof e.expanded || (e.expanded = { 11955 use: e.expanded 11956 }), "object" != _typeof(e.expanded) && (e.expanded = {}), e; 11957 }(this.opts.sidebar); 11958 11959 if (this.opts.sidebar = o(t, M.options.sidebar), t.collapsed.use) { 11960 this.bind("initMenu:after", function () { 11961 if (e.node.menu.classList.add("mm-menu_sidebar-collapsed"), t.collapsed.blockMenu && e.opts.offCanvas && !y(e.node.menu, ".mm-menu__blocker")[0]) { 11962 var n = g("a.mm-menu__blocker"); 11963 n.setAttribute("href", "#" + e.node.menu.id), e.node.menu.prepend(n); 11964 } 11965 11966 t.collapsed.hideNavbar && e.node.menu.classList.add("mm-menu_hidenavbar"), t.collapsed.hideDivider && e.node.menu.classList.add("mm-menu_hidedivider"); 11967 }); 11968 11969 var n = function n() { 11970 e.node.wrpr.classList.add("mm-wrapper_sidebar-collapsed"); 11971 }, 11972 i = function i() { 11973 e.node.wrpr.classList.remove("mm-wrapper_sidebar-collapsed"); 11974 }; 11975 11976 "boolean" == typeof t.collapsed.use ? this.bind("initMenu:after", n) : k(t.collapsed.use, n, i); 11977 } 11978 11979 if (t.expanded.use) { 11980 this.bind("initMenu:after", function () { 11981 e.node.menu.classList.add("mm-menu_sidebar-expanded"); 11982 }); 11983 n = function n() { 11984 e.node.wrpr.classList.add("mm-wrapper_sidebar-expanded"), e.node.wrpr.matches(".mm-wrapper_sidebar-closed") || e.open(); 11985 }, i = function i() { 11986 e.node.wrpr.classList.remove("mm-wrapper_sidebar-expanded"), e.close(); 11987 }; 11988 "boolean" == typeof t.expanded.use ? this.bind("initMenu:after", n) : k(t.expanded.use, n, i), this.bind("close:start", function () { 11989 e.node.wrpr.matches(".mm-wrapper_sidebar-expanded") && (e.node.wrpr.classList.add("mm-wrapper_sidebar-closed"), "remember" == t.expanded.initial && window.localStorage.setItem("mmenuExpandedState", "closed")); 11990 }), this.bind("open:start", function () { 11991 e.node.wrpr.matches(".mm-wrapper_sidebar-expanded") && (e.node.wrpr.classList.remove("mm-wrapper_sidebar-closed"), "remember" == t.expanded.initial && window.localStorage.setItem("mmenuExpandedState", "open")); 11992 }); 11993 var s = t.expanded.initial; 11994 11995 if ("remember" == t.expanded.initial) { 11996 var a = window.localStorage.getItem("mmenuExpandedState"); 11997 11998 switch (a) { 11999 case "open": 12000 case "closed": 12001 s = a; 12002 } 12003 } 12004 12005 "closed" == s && this.bind("initMenu:after", function () { 12006 e.node.wrpr.classList.add("mm-wrapper_sidebar-closed"); 12007 }), this.clck.push(function (n, i) { 12008 if (i.inMenu && i.inListview && e.node.wrpr.matches(".mm-wrapper_sidebar-expanded")) return { 12009 close: "closed" == t.expanded.initial 12010 }; 12011 }); 12012 } 12013 } 12014 }, 12015 toggles: function toggles() { 12016 var e = this; 12017 this.bind("initPanel:after", function (t) { 12018 _(t, "input").forEach(function (t) { 12019 x(t, e.conf.classNames.toggles.toggle, "mm-toggle"), x(t, e.conf.classNames.toggles.check, "mm-check"); 12020 }); 12021 }); 12022 } 12023 }, M.wrappers = { 12024 angular: function angular() { 12025 this.opts.onClick = { 12026 close: !0, 12027 preventDefault: !1, 12028 setSelected: !0 12029 }; 12030 }, 12031 bootstrap: function bootstrap() { 12032 var e = this; 12033 12034 if (this.node.menu.matches(".navbar-collapse")) { 12035 this.conf.offCanvas && (this.conf.offCanvas.clone = !1); 12036 var t = g("nav"), 12037 n = g("div"); 12038 t.append(n), y(this.node.menu).forEach(function (t) { 12039 switch (!0) { 12040 case t.matches(".navbar-nav"): 12041 n.append(function (e) { 12042 var t = g("ul"); 12043 return _(e, ".nav-item").forEach(function (e) { 12044 var n = g("li"); 12045 12046 if (e.matches(".active") && n.classList.add("Selected"), !e.matches(".nav-link")) { 12047 var i = y(e, ".dropdown-menu")[0]; 12048 i && n.append(o(i)), e = y(e, ".nav-link")[0]; 12049 } 12050 12051 n.prepend(a(e)), t.append(n); 12052 }), t; 12053 }(t)); 12054 break; 12055 12056 case t.matches(".dropdown-menu"): 12057 n.append(o(t)); 12058 break; 12059 12060 case t.matches(".form-inline"): 12061 e.conf.searchfield.form = { 12062 action: t.getAttribute("action") || null, 12063 method: t.getAttribute("method") || null 12064 }, e.conf.searchfield.input = { 12065 name: t.querySelector("input").getAttribute("name") || null 12066 }, e.conf.searchfield.clear = !1, e.conf.searchfield.submit = !0; 12067 break; 12068 12069 default: 12070 n.append(t.cloneNode(!0)); 12071 } 12072 }), this.bind("initMenu:before", function () { 12073 document.body.prepend(t), e.node.menu = t; 12074 }); 12075 var i = this.node.menu.parentElement; 12076 12077 if (i) { 12078 var s = i.querySelector(".navbar-toggler"); 12079 s && (s.removeAttribute("data-target"), s.removeAttribute("aria-controls"), s.outerHTML = s.outerHTML, (s = i.querySelector(".navbar-toggler")).addEventListener("click", function (t) { 12080 t.preventDefault(), t.stopImmediatePropagation(), e[e.vars.opened ? "close" : "open"](); 12081 })); 12082 } 12083 } 12084 12085 function a(e) { 12086 for (var t = g(e.matches("a") ? "a" : "span"), n = ["href", "title", "target"], i = 0; i < n.length; i++) { 12087 e.getAttribute(n[i]) && t.setAttribute(n[i], e.getAttribute(n[i])); 12088 } 12089 12090 return t.innerHTML = e.innerHTML, _(t, ".sr-only").forEach(function (e) { 12091 e.remove(); 12092 }), t; 12093 } 12094 12095 function o(e) { 12096 var t = g("ul"); 12097 return y(e).forEach(function (e) { 12098 var n = g("li"); 12099 e.matches(".dropdown-divider") ? n.classList.add("Divider") : e.matches(".dropdown-item") && n.append(a(e)), t.append(n); 12100 }), t; 12101 } 12102 }, 12103 olark: function olark() { 12104 this.conf.offCanvas.page.noSelector.push("#olark"); 12105 }, 12106 turbolinks: function turbolinks() { 12107 var e; 12108 document.addEventListener("turbolinks:before-visit", function (t) { 12109 e = document.querySelector(".mm-wrapper").className.split(" ").filter(function (e) { 12110 return /mm-/.test(e); 12111 }); 12112 }), document.addEventListener("turbolinks:load", function (t) { 12113 void 0 !== e && (document.querySelector(".mm-wrapper").className = e); 12114 }); 12115 }, 12116 wordpress: function wordpress() { 12117 this.conf.classNames.selected = "current-menu-item"; 12118 var e = document.getElementById("wpadminbar");
12119 e && (e.style.position = "fixed", e.classList.add("mm-slideout")); 12120 } 12121 }; 12122 var Oe; 12123 t.default = M; 12124 window && (window.Mmenu = M), (Oe = window.jQuery || window.Zepto || null) && (Oe.fn.mmenu = function (e, t) { 12125 var n = Oe(); 12126 return this.each(function (i, s) { 12127 if (!s.mmApi) { 12128 var a = new M(s, e, t), 12129 o = Oe(a.node.menu); 12130 o.data("mmenu", a.API), n = n.add(o); 12131 } 12132 }), n; 12133 }); 12134}]); 12135 12136},{}],7:[function(require,module,exports){ 12137"use strict"; 12138 12139Object.defineProperty(exports, "__esModule", { 12140 value: true 12141}); 12142exports.default = void 0; 12143 12144function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 12145 12146function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 12147 12148function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 12149 12150function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } 12151 12152var pxEasyExpand = function () { 12153 function pxEasyExpand(button) { 12154 var _this = this; 12155 12156 var settings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 12157 var buttonSettings = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; 12158 12159 _classCallCheck(this, pxEasyExpand); 12160 12161 this.defaults = { 12162 'setRootClass': false, 12163 'switchButtonHtml': false, 12164 'addCloseButton': false, 12165 'closeButtonPos': false, 12166 'closeWithEsc': false, 12167 'setFocusToElement': false, 12168 'setFocusToFirstElement': false, 12169 'keepFocusInTargetElement': false, 12170 'disableFocusHandling': false, 12171 'resetScrollPosition': false, 12172 'hiddenAttribute': 'aria-hidden', 12173 'hiddenWhenOpen': false 12174 }; 12175 this.functions = { 12176 beforeToggle: function beforeToggle() { 12177 return null; 12178 }, 12179 afterToggle: function afterToggle() { 12180 return null; 12181 } 12182 }; 12183 this.config = Object.assign(this.defaults, settings); 12184 this.config.on = Object.assign(this.functions, settings.on); 12185 this.initButtons = []; 12186 12187 if (typeof button === 'string' || button instanceof String) { 12188 this.buttonObj = document.getElementById(button.replace('#', '')); 12189 } else { 12190 this.buttonObj = button; 12191 } 12192 12193 if (typeof this.buttonObj != 'undefined' && this.buttonObj != null) { 12194 this.buttonObj.controls = []; 12195 this.buttonObj.expanded = false; 12196 } 12197 12198 this.targetObj = []; 12199 12200 if (this.buttonObj && this.buttonObj.hasAttribute('data-controls')) { 12201 this.controls = this.buttonObj.getAttribute('data-controls'); 12202 this.buttonObj.removeAttribute('data-controls'); 12203 } else { 12204 this.controls = buttonSettings['controls']; 12205 } 12206 12207 if (this.controls) { 12208 var targetIds = this.controls.split(' '); 12209 12210 for (var i = 0; i < targetIds.length; i++) { 12211 this.targetObj[i] = document.getElementById(targetIds[i]); 12212 this.buttonObj.controls[i] = this.targetObj[i]; 12213 } 12214 } else if (this.buttonObj && this.buttonObj.hasAttribute('href')) { 12215 this.targetObj[0] = document.getElementById(this.buttonObj.hash.replace('#', '')); 12216 } 12217 12218 if (this.targetObj.length < 1) { 12219 return; 12220 } 12221 12222 if (this.buttonObj.hasAttribute('data-label-open')) { 12223 this.labelOpen = this.buttonObj.getAttribute('data-label-open'); 12224 this.buttonObj.removeAttribute('data-label-open'); 12225 } else { 12226 this.labelOpen = buttonSettings['labelOpen'] ? buttonSettings['labelOpen'] : false; 12227 } 12228 12229 if (this.buttonObj.hasAttribute('data-label-close')) { 12230 this.labelClose = this.buttonObj.getAttribute('data-label-close'); 12231 this.buttonObj.removeAttribute('data-label-close'); 12232 } else { 12233 this.labelClose = buttonSettings['labelClose'] ? buttonSettings['labelClose'] : false;
12234 } 12235 12236 if (this.buttonObj.hasAttribute('data-text-open')) { 12237 this.textOpen = this.buttonObj.getAttribute('data-text-open'); 12238 this.buttonObj.removeAttribute('data-text-open'); 12239 } else { 12240 this.textOpen = buttonSettings['textOpen'] ? buttonSettings['textOpen'] : this.labelOpen; 12241 } 12242 12243 if (this.buttonObj.hasAttribute('data-text-close')) { 12244 this.textClose = this.buttonObj.getAttribute('data-text-close'); 12245 this.buttonObj.removeAttribute('data-text-close'); 12246 } else { 12247 this.textClose = buttonSettings['textClose'] ? buttonSettings['textClose'] : this.labelClose; 12248 } 12249 12250 if (this.buttonObj.hasAttribute('data-focus-helper-text')) { 12251 this.focusHelperText = this.buttonObj.getAttribute('data-focus-helper-text'); 12252 this.buttonObj.removeAttribute('data-focus-helper-text'); 12253 } else { 12254 this.focusHelperText = buttonSettings['focusHelperText'] ? buttonSettings['focusHelperText'] : this.labelClose; 12255 } 12256 12257 if (this.buttonObj) { 12258 this.initButton(); 12259 12260 if (this.config.addCloseButton !== false) { 12261 this.closeButtonObj = document.createElement('button'); 12262 this.closeButtonObj.innerHTML = '<span>' + this.textClose + '</span>'; 12263 this.setAttributes(this.closeButtonObj, { 12264 'aria-controls': this.targetObj[0].id, 12265 'aria-expanded': 'true', 12266 'aria-label': this.labelClose, 12267 'class': 'js-close' 12268 }); 12269 this.closeButtonObj.addEventListener('click', function (event) { 12270 event.preventDefault(); 12271 12272 _this.toggleStates(); 12273 }, false); 12274 12275 if (Number.isInteger(this.config.closeButtonPos)) { 12276 this.targetObj[0].insertBefore(this.closeButtonObj, this.targetObj[0].childNodes[this.config.closeButtonPos]); 12277 } else { 12278 this.targetObj[0].appendChild(this.closeButtonObj); 12279 } 12280 } 12281 12282 if (this.config.closeWithEsc === true) { 12283 this.targetObj[0].addEventListener('keyup', function (event) { 12284 if (event.defaultPrevented) { 12285 return; 12286 } 12287 12288 var key = event.key || event.keyCode; 12289 12290 if (key === 'Escape' || key === 'Esc' || key === 27) { 12291 event.preventDefault(); 12292 12293 _this.toggleStates(); 12294 } 12295 }); 12296 this.buttonObj.addEventListener('keyup', function (event) { 12297 if (event.defaultPrevented || _this.buttonObj.getAttribute('aria-expanded') === 'false') { 12298 return; 12299 } 12300 12301 var key = event.key || event.keyCode; 12302 12303 if (key === 'Escape' || key === 'Esc' || key === 27) { 12304 event.preventDefault(); 12305 12306 _this.toggleStates(); 12307 } 12308 }); 12309 } 12310 12311 if (this.config.keepFocusInTargetElement === true) { 12312 this.targetObj[0].addEventListener('keydown', function (event) { 12313 if (_this.config.disableFocusHandling === true || _this.isHidden(focusHelper) === true) { 12314 return; 12315 } 12316 12317 if (event.shiftKey === true && (event.which || event.keyCode) == 9) { 12318 var focusableElements = _this.targetObj[0].querySelectorAll('a[href]:not(.focus-helper),input,select,button'); 12319 12320 var visibleFocusableElements = []; 12321 12322 for (var _i = 0; _i < focusableElements.length; _i++) { 12323 if (!_this.isHidden(focusableElements[_i])) { 12324 visibleFocusableElements.push(focusableElements[_i]); 12325 } 12326 } 12327 12328 if (visibleFocusableElements[0] == event.target) { 12329 if (_this.config.addCloseButton === true) { 12330 if (!_this.isHidden(_this.closeButtonObj)) { 12331 event.preventDefault(); 12332 12333 _this.closeButtonObj.focus(); 12334 } 12335 } else if (!_this.isHidden(_this.buttonObj)) { 12336 event.preventDefault(); 12337 12338 _this.buttonObj.focus(); 12339 } 12340 } 12341 } 12342 }); 12343 var focusHelper = document.createElement('a'); 12344 this.setAttributes(focusHelper, { 12345 'aria-label': this.focusHelperText, 12346 'href': '#' + this.buttonObj.id, 12347 'class': 'focus-helper' 12348 }); 12349 focusHelper.innerHTML = '<span>' + this.focusHelperText + '</span>'; 12350 focusHelper.addEventListener('focus', function (event) { 12351 event.preventDefault(); 12352 12353 if (_this.config.addCloseButton === true) { 12354 var element = _this.targetObj[0].querySelector('a[href],input,select,button'); 12355 12356 if (element !== null) { 12357 element.focus(); 12358 } 12359 } else { 12360 _this.buttonObj.focus(); 12361 } 12362 }); 12363 this.targetObj[0].appendChild(focusHelper); 12364 } 12365 } 12366 } 12367 12368 _createClass(pxEasyExpand, [{ 12369 key: "isHidden", 12370 value: function isHidden(element) { 12371 return element.offsetParent === null; 12372 } 12373 }, { 12374 key: "setAttributes", 12375 value: function setAttributes(element, attributes) {
12376 Object.keys(attributes).forEach(function (key) { 12377 return element.setAttribute(key, attributes[key]); 12378 }); 12379 } 12380 }, { 12381 key: "setButton", 12382 value: function setButton(button) { 12383 var expanded = false; 12384 12385 if (this.buttonObj.getAttribute('aria-expanded') === 'true') { 12386 this.toggleStates(); 12387 expanded = true; 12388 } 12389 12390 this.buttonObj = button; 12391 12392 if (this.initButtons.indexOf(this.buttonObj) < 0) { 12393 this.initButton(); 12394 } else { 12395 this.addAria(); 12396 } 12397 12398 if (expanded) { 12399 this.toggleStates(); 12400 } 12401 } 12402 }, { 12403 key: "initButton", 12404 value: function initButton() { 12405 var _this2 = this; 12406 12407 this.addAria(); 12408 this.buttonObj.addEventListener('click', function (event) { 12409 event.preventDefault(); 12410 12411 _this2.toggleStates(); 12412 }, false); 12413 this.buttonObj.addEventListener('keydown', function (event) { 12414 if (_this2.buttonObj.getAttribute('aria-expanded') === 'true' && (event.which || event.keyCode) == 9 && _this2.config.keepFocusInTargetElement === true) { 12415 if (_this2.config.disableFocusHandling === true) { 12416 return; 12417 } 12418 12419 if (_this2.config.addCloseButton === true) { 12420 if (_this2.isHidden(_this2.closeButtonObj)) { 12421 return; 12422 } 12423 } else { 12424 if (_this2.isHidden(_this2.buttonObj)) { 12425 return; 12426 } 12427 } 12428 12429 event.preventDefault(); 12430 12431 var focusableElements = _this2.targetObj[0].querySelectorAll('a[href]:not(.focus-helper),input,select,button'); 12432 12433 var visibleFocusableElements = []; 12434 12435 for (var i = 0; i < focusableElements.length; i++) { 12436 if (!_this2.isHidden(focusableElements[i])) { 12437 visibleFocusableElements.push(focusableElements[i]); 12438 } 12439 } 12440 12441 if (event.shiftKey === false && visibleFocusableElements.length > 0) { 12442 visibleFocusableElements[0].focus(); 12443 } else if (event.shiftKey === true && visibleFocusableElements.length > 0) { 12444 visibleFocusableElements[visibleFocusableElements.length - 1].focus(); 12445 } 12446 } 12447 }); 12448 this.initButtons.push(this.buttonObj); 12449 } 12450 }, { 12451 key: "toggleStates", 12452 value: function toggleStates() { 12453 var _this3 = this; 12454 12455 var expanded = false; 12456 12457 if (this.buttonObj.getAttribute('aria-expanded') === 'true') { 12458 expanded = true; 12459 } 12460 12461 this.config.on.beforeToggle(this.buttonObj); 12462 12463 if (this.config.resetScrollPosition !== false) { 12464 if (expanded === false) { 12465 this.scrollPosition = Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop); 12466 } else { 12467 this.resetScrollPosition(); 12468 } 12469 } 12470 12471 window.requestAnimationFrame(function () { 12472 if (_this3.config.setRootClass !== false) { 12473 document.getElementsByTagName('html')[0].classList.toggle(_this3.config.setRootClass); 12474 } 12475 12476 _this3.buttonObj.setAttribute('aria-expanded', !expanded); 12477 12478 _this3.buttonObj.expanded = !expanded; 12479 12480 if (_this3.labelOpen && _this3.labelClose) { 12481 _this3.buttonObj.setAttribute('aria-label', expanded ? _this3.labelOpen : _this3.labelClose); 12482 } 12483 12484 if (_this3.config.switchButtonHtml !== false) { 12485 _this3.buttonObj.innerHTML = expanded ? '<span>' + _this3.textOpen + '</span>' : '<span>' + _this3.textClose + '</span>'; 12486 } 12487 12488 for (var _i2 = 0; _i2 < _this3.targetObj.length; _i2++) { 12489 _this3.targetObj[_i2].setAttribute(_this3.config.hiddenAttribute, expanded); 12490 } 12491 12492 _this3.config.on.afterToggle(_this3.buttonObj); 12493 }); 12494 var hiddenElements = document.querySelectorAll(this.config.hiddenWhenOpen); 12495 12496 if (expanded) { 12497 if (this.config.disableFocusHandling !== true) { 12498 for (var i = 0; i < hiddenElements.length; i++) { 12499 hiddenElements[i].removeAttribute('aria-hidden'); 12500 } 12501 } 12502 12503 setTimeout(function () { 12504 _this3.buttonObj.focus(); 12505 }, 600); 12506 } else { 12507 if (this.config.disableFocusHandling !== true) { 12508 for (var i = 0; i < hiddenElements.length; i++) { 12509 hiddenElements[i].setAttribute('aria-hidden', true); 12510 } 12511 } 12512 12513 if (this.config.setFocusToElement !== false) { 12514 var element = this.targetObj[0].querySelector(this.config.setFocusToElement); 12515 12516 if (element.length !== null) { 12517 setTimeout(function () { 12518 element.focus(); 12519 }, 100); 12520 return; 12521 } 12522 } 12523 12524 if (this.config.setFocusToFirstElement === true) { 12525 setTimeout(function () { 12526 (_this3.targetObj[0].querySelector('a[href],input,select,button') || _this3.targetObj[0]).focus(); 12527 }, 100); 12528 } 12529 } 12530 } 12531 }, { 12532 key: "isInViewport", 12533 value: function isInViewport(element) { 12534 var rect = element.getBoundingClientRect(); 12535 return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth); 12536 } 12537 }, { 12538 key: "resetScrollPosition", 12539 value: function resetScrollPosition() { 12540 if (!this.isInViewport(this.buttonObj)) { 12541 console.log('scroll'); 12542 window.scroll({ 12543 top: this.scrollPosition, 12544 behavior: 'smooth' 12545 }); 12546 } 12547 } 12548 }, { 12549 key: "disableFocusHandling", 12550 value: function disableFocusHandling(status) { 12551 this.config.disableFocusHandling = status; 12552 } 12553 }, { 12554 key: "addAria", 12555 value: function addAria() { 12556 var controls = []; 12557 var hiddenAttribute = this.config.hiddenAttribute; 12558 12559 for (var i = 0; i < this.targetObj.length; i++) { 12560 this.setAttributes(this.targetObj[i], _defineProperty({}, hiddenAttribute, true)); 12561 controls.push(this.targetObj[i].id); 12562 } 12563 12564 if (this.buttonObj.nodeName != 'BUTTON') { 12565 this.buttonObj.setAttribute('role', 'button'); 12566 } 12567 12568 this.setAttributes(this.buttonObj, { 12569 'aria-controls': controls.join(' '), 12570 'aria-expanded': 'false' 12571 }); 12572 12573 if (this.labelOpen) { 12574 this.buttonObj.setAttribute('aria-label', this.labelOpen); 12575 } 12576 } 12577 }]); 12578 12579 return pxEasyExpand; 12580}(); 12581 12582var _default = pxEasyExpand; 12583exports.default = _default; 12584 12585},{}],8:[function(require,module,exports){ 12586"use strict"; 12587 12588function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } 12589 12590(function (global, factory) { 12591 (typeof exports === "undefined" ? "undefined" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Swiper = factory()); 12592})(void 0, function () { 12593 'use strict'; 12594 12595 function _defineProperties(target, props) { 12596 for (var i = 0; i < props.length; i++) { 12597 var descriptor = props[i]; 12598 descriptor.enumerable = descriptor.enumerable || false; 12599 descriptor.configurable = true; 12600 if ("value" in descriptor) descriptor.writable = true; 12601 Object.defineProperty(target, descriptor.key, descriptor); 12602 } 12603 } 12604 12605 function _createClass(Constructor, protoProps, staticProps) { 12606 if (protoProps) _defineProperties(Constructor.prototype, protoProps); 12607 if (staticProps) _defineProperties(Constructor, staticProps); 12608 return Constructor; 12609 } 12610 12611 function _extends() { 12612 _extends = Object.assign || function (target) { 12613 for (var i = 1; i < arguments.length; i++) { 12614 var source = arguments[i]; 12615 12616 for (var key in source) { 12617 if (Object.prototype.hasOwnProperty.call(source, key)) { 12618 target[key] = source[key]; 12619 } 12620 } 12621 } 12622 12623 return target; 12624 }; 12625 12626 return _extends.apply(this, arguments); 12627 } 12628 12629 function isObject$1(obj) { 12630 return obj !== null && _typeof(obj) === 'object' && 'constructor' in obj && obj.constructor === Object; 12631 } 12632
12633 function extend$1(target, src) { 12634 if (target === void 0) { 12635 target = {}; 12636 } 12637 12638 if (src === void 0) { 12639 src = {}; 12640 } 12641 12642 Object.keys(src).forEach(function (key) { 12643 if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject$1(src[key]) && isObject$1(target[key]) && Object.keys(src[key]).length > 0) { 12644 extend$1(target[key], src[key]); 12645 } 12646 }); 12647 } 12648 12649 var ssrDocument = { 12650 body: {}, 12651 addEventListener: function addEventListener() {}, 12652 removeEventListener: function removeEventListener() {}, 12653 activeElement: { 12654 blur: function blur() {}, 12655 nodeName: '' 12656 }, 12657 querySelector: function querySelector() { 12658 return null; 12659 }, 12660 querySelectorAll: function querySelectorAll() { 12661 return []; 12662 }, 12663 getElementById: function getElementById() { 12664 return null; 12665 }, 12666 createEvent: function createEvent() { 12667 return { 12668 initEvent: function initEvent() {} 12669 }; 12670 }, 12671 createElement: function createElement() { 12672 return { 12673 children: [], 12674 childNodes: [], 12675 style: {}, 12676 setAttribute: function setAttribute() {}, 12677 getElementsByTagName: function getElementsByTagName() { 12678 return []; 12679 } 12680 }; 12681 }, 12682 createElementNS: function createElementNS() { 12683 return {}; 12684 }, 12685 importNode: function importNode() { 12686 return null; 12687 }, 12688 location: { 12689 hash: '', 12690 host: '', 12691 hostname: '', 12692 href: '', 12693 origin: '', 12694 pathname: '', 12695 protocol: '', 12696 search: '' 12697 } 12698 }; 12699 12700 function getDocument() { 12701 var doc = typeof document !== 'undefined' ? document : {}; 12702 extend$1(doc, ssrDocument); 12703 return doc; 12704 } 12705 12706 var ssrWindow = { 12707 document: ssrDocument, 12708 navigator: { 12709 userAgent: '' 12710 }, 12711 location: { 12712 hash: '', 12713 host: '', 12714 hostname: '', 12715 href: '', 12716 origin: '', 12717 pathname: '', 12718 protocol: '', 12719 search: '' 12720 }, 12721 history: { 12722 replaceState: function replaceState() {}, 12723 pushState: function pushState() {}, 12724 go: function go() {}, 12725 back: function back() {} 12726 }, 12727 CustomEvent: function CustomEvent() { 12728 return this; 12729 }, 12730 addEventListener: function addEventListener() {}, 12731 removeEventListener: function removeEventListener() {}, 12732 getComputedStyle: function getComputedStyle() { 12733 return { 12734 getPropertyValue: function getPropertyValue() { 12735 return ''; 12736 } 12737 }; 12738 }, 12739 Image: function Image() {}, 12740 Date: function Date() {}, 12741 screen: {}, 12742 setTimeout: function setTimeout() {}, 12743 clearTimeout: function clearTimeout() {}, 12744 matchMedia: function matchMedia() { 12745 return {}; 12746 }, 12747 requestAnimationFrame: function requestAnimationFrame(callback) { 12748 if (typeof setTimeout === 'undefined') { 12749 callback(); 12750 return null; 12751 } 12752 12753 return setTimeout(callback, 0); 12754 }, 12755 cancelAnimationFrame: function cancelAnimationFrame(id) { 12756 if (typeof setTimeout === 'undefined') { 12757 return; 12758 } 12759 12760 clearTimeout(id); 12761 } 12762 }; 12763 12764 function getWindow() { 12765 var win = typeof window !== 'undefined' ? window : {}; 12766 extend$1(win, ssrWindow); 12767 return win; 12768 } 12769 12770 function _inheritsLoose(subClass, superClass) { 12771 subClass.prototype = Object.create(superClass.prototype); 12772 subClass.prototype.constructor = subClass; 12773 subClass.__proto__ = superClass; 12774 } 12775 12776 function _getPrototypeOf(o) { 12777 _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { 12778 return o.__proto__ || Object.getPrototypeOf(o); 12779 }; 12780 return _getPrototypeOf(o); 12781 } 12782 12783 function _setPrototypeOf(o, p) { 12784 _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { 12785 o.__proto__ = p; 12786 return o; 12787 }; 12788 12789 return _setPrototypeOf(o, p); 12790 } 12791 12792 function _isNativeReflectConstruct() { 12793 if (typeof Reflect === "undefined" || !Reflect.construct) return false; 12794 if (Reflect.construct.sham) return false; 12795 if (typeof Proxy === "function") return true; 12796 12797 try { 12798 Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); 12799 return true; 12800 } catch (e) { 12801 return false;
12802 } 12803 } 12804 12805 function _construct(Parent, args, Class) { 12806 if (_isNativeReflectConstruct()) { 12807 _construct = Reflect.construct; 12808 } else { 12809 _construct = function _construct(Parent, args, Class) { 12810 var a = [null]; 12811 a.push.apply(a, args); 12812 var Constructor = Function.bind.apply(Parent, a); 12813 var instance = new Constructor(); 12814 if (Class) _setPrototypeOf(instance, Class.prototype); 12815 return instance; 12816 }; 12817 } 12818 12819 return _construct.apply(null, arguments); 12820 } 12821 12822 function _isNativeFunction(fn) { 12823 return Function.toString.call(fn).indexOf("[native code]") !== -1; 12824 } 12825 12826 function _wrapNativeSuper(Class) { 12827 var _cache = typeof Map === "function" ? new Map() : undefined; 12828 12829 _wrapNativeSuper = function _wrapNativeSuper(Class) { 12830 if (Class === null || !_isNativeFunction(Class)) return Class; 12831 12832 if (typeof Class !== "function") { 12833 throw new TypeError("Super expression must either be null or a function"); 12834 } 12835 12836 if (typeof _cache !== "undefined") { 12837 if (_cache.has(Class)) return _cache.get(Class); 12838 12839 _cache.set(Class, Wrapper); 12840 } 12841 12842 function Wrapper() { 12843 return _construct(Class, arguments, _getPrototypeOf(this).constructor); 12844 } 12845 12846 Wrapper.prototype = Object.create(Class.prototype, { 12847 constructor: { 12848 value: Wrapper, 12849 enumerable: false, 12850 writable: true, 12851 configurable: true 12852 } 12853 }); 12854 return _setPrototypeOf(Wrapper, Class); 12855 }; 12856 12857 return _wrapNativeSuper(Class); 12858 } 12859 12860 function _assertThisInitialized(self) { 12861 if (self === void 0) { 12862 throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); 12863 } 12864 12865 return self; 12866 } 12867 12868 function makeReactive(obj) { 12869 var proto = obj.__proto__; 12870 Object.defineProperty(obj, '__proto__', { 12871 get: function get() { 12872 return proto; 12873 }, 12874 set: function set(value) { 12875 proto.__proto__ = value; 12876 } 12877 }); 12878 } 12879 12880 var Dom7 = function (_Array) { 12881 _inheritsLoose(Dom7, _Array); 12882 12883 function Dom7(items) { 12884 var _this; 12885 12886 _this = _Array.call.apply(_Array, [this].concat(items)) || this; 12887 makeReactive(_assertThisInitialized(_this)); 12888 return _this; 12889 } 12890 12891 return Dom7; 12892 }(_wrapNativeSuper(Array)); 12893 12894 function arrayFlat(arr) { 12895 if (arr === void 0) { 12896 arr = []; 12897 } 12898 12899 var res = []; 12900 arr.forEach(function (el) { 12901 if (Array.isArray(el)) { 12902 res.push.apply(res, arrayFlat(el)); 12903 } else { 12904 res.push(el); 12905 } 12906 }); 12907 return res; 12908 } 12909 12910 function arrayFilter(arr, callback) { 12911 return Array.prototype.filter.call(arr, callback); 12912 } 12913 12914 function arrayUnique(arr) { 12915 var uniqueArray = []; 12916 12917 for (var i = 0; i < arr.length; i += 1) { 12918 if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]); 12919 } 12920 12921 return uniqueArray; 12922 } 12923 12924 function qsa(selector, context) { 12925 if (typeof selector !== 'string') { 12926 return [selector]; 12927 } 12928 12929 var a = []; 12930 var res = context.querySelectorAll(selector); 12931 12932 for (var i = 0; i < res.length; i += 1) { 12933 a.push(res[i]); 12934 } 12935 12936 return a; 12937 } 12938 12939 function $(selector, context) { 12940 var window = getWindow(); 12941 var document = getDocument(); 12942 var arr = []; 12943 12944 if (!context && selector instanceof Dom7) { 12945 return selector; 12946 } 12947 12948 if (!selector) { 12949 return new Dom7(arr); 12950 } 12951 12952 if (typeof selector === 'string') { 12953 var html = selector.trim(); 12954 12955 if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) { 12956 var toCreate = 'div'; 12957 if (html.indexOf('<li') === 0) toCreate = 'ul'; 12958 if (html.indexOf('<tr') === 0) toCreate = 'tbody'; 12959 if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr'; 12960 if (html.indexOf('<tbody') === 0) toCreate = 'table'; 12961 if (html.indexOf('<option') === 0) toCreate = 'select'; 12962 var tempParent = document.createElement(toCreate); 12963 tempParent.innerHTML = html; 12964 12965 for (var i = 0; i < tempParent.childNodes.length; i += 1) { 12966 arr.push(tempParent.childNodes[i]); 12967 } 12968 } else { 12969 arr = qsa(selector.trim(), context || document); 12970 } 12971 } else if (selector.nodeType || selector === window || selector === document) { 12972 arr.push(selector); 12973 } else if (Array.isArray(selector)) { 12974 if (selector instanceof Dom7) return selector; 12975 arr = selector; 12976 } 12977 12978 return new Dom7(arrayUnique(arr)); 12979 } 12980 12981 $.fn = Dom7.prototype; 12982 12983 function addClass() { 12984 for (var _len = arguments.length, classes = new Array(_len), _key = 0; _key < _len; _key++) { 12985 classes[_key] = arguments[_key]; 12986 } 12987 12988 var classNames = arrayFlat(classes.map(function (c) { 12989 return c.split(' '); 12990 })); 12991 this.forEach(function (el) { 12992 var _el$classList; 12993 12994 (_el$classList = el.classList).add.apply(_el$classList, classNames); 12995 }); 12996 return this; 12997 } 12998 12999 function removeClass() { 13000 for (var _len2 = arguments.length, classes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { 13001 classes[_key2] = arguments[_key2]; 13002 } 13003 13004 var classNames = arrayFlat(classes.map(function (c) { 13005 return c.split(' '); 13006 })); 13007 this.forEach(function (el) { 13008 var _el$classList2; 13009 13010 (_el$classList2 = el.classList).remove.apply(_el$classList2, classNames); 13011 }); 13012 return this; 13013 } 13014 13015 function toggleClass() { 13016 for (var _len3 = arguments.length, classes = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { 13017 classes[_key3] = arguments[_key3]; 13018 } 13019 13020 var classNames = arrayFlat(classes.map(function (c) { 13021 return c.split(' '); 13022 })); 13023 this.forEach(function (el) {
13024 classNames.forEach(function (className) { 13025 el.classList.toggle(className); 13026 }); 13027 }); 13028 } 13029 13030 function hasClass() { 13031 for (var _len4 = arguments.length, classes = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { 13032 classes[_key4] = arguments[_key4]; 13033 } 13034 13035 var classNames = arrayFlat(classes.map(function (c) { 13036 return c.split(' '); 13037 })); 13038 return arrayFilter(this, function (el) { 13039 return classNames.filter(function (className) { 13040 return el.classList.contains(className); 13041 }).length > 0; 13042 }).length > 0; 13043 } 13044 13045 function attr(attrs, value) { 13046 if (arguments.length === 1 && typeof attrs === 'string') { 13047 if (this[0]) return this[0].getAttribute(attrs); 13048 return undefined; 13049 } 13050 13051 for (var i = 0; i < this.length; i += 1) { 13052 if (arguments.length === 2) { 13053 this[i].setAttribute(attrs, value); 13054 } else { 13055 for (var attrName in attrs) { 13056 this[i][attrName] = attrs[attrName]; 13057 this[i].setAttribute(attrName, attrs[attrName]); 13058 } 13059 } 13060 } 13061 13062 return this; 13063 } 13064 13065 function removeAttr(attr) { 13066 for (var i = 0; i < this.length; i += 1) { 13067 this[i].removeAttribute(attr); 13068 } 13069 13070 return this; 13071 } 13072 13073 function transform(transform) { 13074 for (var i = 0; i < this.length; i += 1) { 13075 this[i].style.transform = transform; 13076 } 13077 13078 return this; 13079 } 13080 13081 function transition$1(duration) { 13082 for (var i = 0; i < this.length; i += 1) { 13083 this[i].style.transitionDuration = typeof duration !== 'string' ? duration + "ms" : duration; 13084 } 13085 13086 return this; 13087 } 13088 13089 function on() { 13090 for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { 13091 args[_key5] = arguments[_key5]; 13092 } 13093 13094 var eventType = args[0], 13095 targetSelector = args[1], 13096 listener = args[2], 13097 capture = args[3]; 13098 13099 if (typeof args[1] === 'function') { 13100 eventType = args[0]; 13101 listener = args[1]; 13102 capture = args[2]; 13103 targetSelector = undefined; 13104 } 13105 13106 if (!capture) capture = false; 13107 13108 function handleLiveEvent(e) { 13109 var target = e.target; 13110 if (!target) return; 13111 var eventData = e.target.dom7EventData || []; 13112 13113 if (eventData.indexOf(e) < 0) { 13114 eventData.unshift(e); 13115 } 13116 13117 if ($(target).is(targetSelector)) listener.apply(target, eventData);else { 13118 var _parents = $(target).parents(); 13119 13120 for (var k = 0; k < _parents.length; k += 1) { 13121 if ($(_parents[k]).is(targetSelector)) listener.apply(_parents[k], eventData); 13122 } 13123 } 13124 } 13125 13126 function handleEvent(e) { 13127 var eventData = e && e.target ? e.target.dom7EventData || [] : []; 13128 13129 if (eventData.indexOf(e) < 0) { 13130 eventData.unshift(e); 13131 } 13132 13133 listener.apply(this, eventData); 13134 } 13135 13136 var events = eventType.split(' '); 13137 var j; 13138 13139 for (var i = 0; i < this.length; i += 1) { 13140 var el = this[i]; 13141 13142 if (!targetSelector) { 13143 for (j = 0; j < events.length; j += 1) { 13144 var event = events[j]; 13145 if (!el.dom7Listeners) el.dom7Listeners = {}; 13146 if (!el.dom7Listeners[event]) el.dom7Listeners[event] = []; 13147 el.dom7Listeners[event].push({ 13148 listener: listener, 13149 proxyListener: handleEvent 13150 }); 13151 el.addEventListener(event, handleEvent, capture); 13152 } 13153 } else { 13154 for (j = 0; j < events.length; j += 1) { 13155 var _event = events[j]; 13156 if (!el.dom7LiveListeners) el.dom7LiveListeners = {}; 13157 if (!el.dom7LiveListeners[_event]) el.dom7LiveListeners[_event] = []; 13158 13159 el.dom7LiveListeners[_event].push({ 13160 listener: listener, 13161 proxyListener: handleLiveEvent 13162 }); 13163 13164 el.addEventListener(_event, handleLiveEvent, capture); 13165 } 13166 } 13167 } 13168 13169 return this; 13170 } 13171 13172 function off() { 13173 for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) { 13174 args[_key6] = arguments[_key6]; 13175 } 13176 13177 var eventType = args[0], 13178 targetSelector = args[1], 13179 listener = args[2], 13180 capture = args[3]; 13181 13182 if (typeof args[1] === 'function') { 13183 eventType = args[0]; 13184 listener = args[1]; 13185 capture = args[2]; 13186 targetSelector = undefined; 13187 } 13188 13189 if (!capture) capture = false;
13190 var events = eventType.split(' '); 13191 13192 for (var i = 0; i < events.length; i += 1) { 13193 var event = events[i]; 13194 13195 for (var j = 0; j < this.length; j += 1) { 13196 var el = this[j]; 13197 var handlers = void 0; 13198 13199 if (!targetSelector && el.dom7Listeners) { 13200 handlers = el.dom7Listeners[event]; 13201 } else if (targetSelector && el.dom7LiveListeners) { 13202 handlers = el.dom7LiveListeners[event]; 13203 } 13204 13205 if (handlers && handlers.length) { 13206 for (var k = handlers.length - 1; k >= 0; k -= 1) { 13207 var handler = handlers[k]; 13208 13209 if (listener && handler.listener === listener) { 13210 el.removeEventListener(event, handler.proxyListener, capture); 13211 handlers.splice(k, 1); 13212 } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) { 13213 el.removeEventListener(event, handler.proxyListener, capture); 13214 handlers.splice(k, 1); 13215 } else if (!listener) { 13216 el.removeEventListener(event, handler.proxyListener, capture); 13217 handlers.splice(k, 1); 13218 } 13219 } 13220 } 13221 } 13222 } 13223 13224 return this; 13225 } 13226 13227 function trigger() { 13228 var window = getWindow(); 13229 13230 for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) { 13231 args[_key9] = arguments[_key9]; 13232 } 13233 13234 var events = args[0].split(' '); 13235 var eventData = args[1]; 13236 13237 for (var i = 0; i < events.length; i += 1) { 13238 var event = events[i]; 13239 13240 for (var j = 0; j < this.length; j += 1) { 13241 var el = this[j]; 13242 13243 if (window.CustomEvent) { 13244 var evt = new window.CustomEvent(event, { 13245 detail: eventData, 13246 bubbles: true, 13247 cancelable: true 13248 }); 13249 el.dom7EventData = args.filter(function (data, dataIndex) { 13250 return dataIndex > 0; 13251 }); 13252 el.dispatchEvent(evt); 13253 el.dom7EventData = []; 13254 delete el.dom7EventData; 13255 } 13256 } 13257 } 13258 13259 return this; 13260 } 13261 13262 function transitionEnd$1(callback) { 13263 var dom = this; 13264 13265 function fireCallBack(e) { 13266 if (e.target !== this) return; 13267 callback.call(this, e); 13268 dom.off('transitionend', fireCallBack); 13269 } 13270 13271 if (callback) { 13272 dom.on('transitionend', fireCallBack); 13273 } 13274 13275 return this; 13276 } 13277 13278 function outerWidth(includeMargins) { 13279 if (this.length > 0) { 13280 if (includeMargins) { 13281 var _styles = this.styles(); 13282 13283 return this[0].offsetWidth + parseFloat(_styles.getPropertyValue('margin-right')) + parseFloat(_styles.getPropertyValue('margin-left')); 13284 } 13285 13286 return this[0].offsetWidth; 13287 } 13288 13289 return null; 13290 } 13291 13292 function outerHeight(includeMargins) { 13293 if (this.length > 0) { 13294 if (includeMargins) { 13295 var _styles2 = this.styles(); 13296 13297 return this[0].offsetHeight + parseFloat(_styles2.getPropertyValue('margin-top')) + parseFloat(_styles2.getPropertyValue('margin-bottom')); 13298 } 13299 13300 return this[0].offsetHeight; 13301 } 13302 13303 return null; 13304 } 13305 13306 function offset() { 13307 if (this.length > 0) { 13308 var window = getWindow(); 13309 var document = getDocument(); 13310 var el = this[0]; 13311 var box = el.getBoundingClientRect(); 13312 var body = document.body; 13313 var clientTop = el.clientTop || body.clientTop || 0; 13314 var clientLeft = el.clientLeft || body.clientLeft || 0; 13315 var scrollTop = el === window ? window.scrollY : el.scrollTop; 13316 var scrollLeft = el === window ? window.scrollX : el.scrollLeft; 13317 return { 13318 top: box.top + scrollTop - clientTop, 13319 left: box.left + scrollLeft - clientLeft 13320 }; 13321 } 13322 13323 return null; 13324 } 13325 13326 function styles() { 13327 var window = getWindow(); 13328 if (this[0]) return window.getComputedStyle(this[0], null); 13329 return {}; 13330 } 13331 13332 function css(props, value) { 13333 var window = getWindow(); 13334 var i; 13335 13336 if (arguments.length === 1) { 13337 if (typeof props === 'string') { 13338 if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props); 13339 } else { 13340 for (i = 0; i < this.length; i += 1) { 13341 for (var _prop in props) { 13342 this[i].style[_prop] = props[_prop]; 13343 } 13344 } 13345 13346 return this; 13347 } 13348 } 13349 13350 if (arguments.length === 2 && typeof props === 'string') { 13351 for (i = 0; i < this.length; i += 1) { 13352 this[i].style[props] = value; 13353 } 13354 13355 return this; 13356 } 13357 13358 return this; 13359 } 13360 13361 function each(callback) { 13362 if (!callback) return this; 13363 this.forEach(function (el, index) { 13364 callback.apply(el, [el, index]); 13365 }); 13366 return this; 13367 } 13368 13369 function filter(callback) { 13370 var result = arrayFilter(this, callback); 13371 return $(result); 13372 } 13373 13374 function html(html) { 13375 if (typeof html === 'undefined') { 13376 return this[0] ? this[0].innerHTML : null; 13377 } 13378 13379 for (var i = 0; i < this.length; i += 1) { 13380 this[i].innerHTML = html; 13381 } 13382 13383 return this; 13384 } 13385 13386 function text(text) { 13387 if (typeof text === 'undefined') { 13388 return this[0] ? this[0].textContent.trim() : null; 13389 } 13390 13391 for (var i = 0; i < this.length; i += 1) { 13392 this[i].textContent = text; 13393 } 13394 13395 return this; 13396 } 13397 13398 function is(selector) { 13399 var window = getWindow(); 13400 var document = getDocument(); 13401 var el = this[0]; 13402 var compareWith; 13403 var i; 13404 if (!el || typeof selector === 'undefined') return false;
13405 13406 if (typeof selector === 'string') { 13407 if (el.matches) return el.matches(selector); 13408 if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector); 13409 if (el.msMatchesSelector) return el.msMatchesSelector(selector); 13410 compareWith = $(selector); 13411 13412 for (i = 0; i < compareWith.length; i += 1) { 13413 if (compareWith[i] === el) return true; 13414 } 13415 13416 return false; 13417 } 13418 13419 if (selector === document) { 13420 return el === document; 13421 } 13422 13423 if (selector === window) { 13424 return el === window; 13425 } 13426 13427 if (selector.nodeType || selector instanceof Dom7) { 13428 compareWith = selector.nodeType ? [selector] : selector; 13429 13430 for (i = 0; i < compareWith.length; i += 1) { 13431 if (compareWith[i] === el) return true; 13432 } 13433 13434 return false; 13435 } 13436 13437 return false; 13438 } 13439 13440 function index() { 13441 var child = this[0]; 13442 var i; 13443 13444 if (child) { 13445 i = 0; 13446 13447 while ((child = child.previousSibling) !== null) { 13448 if (child.nodeType === 1) i += 1; 13449 } 13450 13451 return i; 13452 } 13453 13454 return undefined; 13455 } 13456 13457 function eq(index) { 13458 if (typeof index === 'undefined') return this; 13459 var length = this.length; 13460 13461 if (index > length - 1) { 13462 return $([]); 13463 } 13464 13465 if (index < 0) { 13466 var returnIndex = length + index; 13467 if (returnIndex < 0) return $([]); 13468 return $([this[returnIndex]]); 13469 } 13470 13471 return $([this[index]]); 13472 } 13473 13474 function append() { 13475 var newChild; 13476 var document = getDocument(); 13477 13478 for (var k = 0; k < arguments.length; k += 1) { 13479 newChild = k < 0 || arguments.length <= k ? undefined : arguments[k]; 13480 13481 for (var i = 0; i < this.length; i += 1) { 13482 if (typeof newChild === 'string') { 13483 var tempDiv = document.createElement('div'); 13484 tempDiv.innerHTML = newChild; 13485 13486 while (tempDiv.firstChild) { 13487 this[i].appendChild(tempDiv.firstChild); 13488 } 13489 } else if (newChild instanceof Dom7) { 13490 for (var j = 0; j < newChild.length; j += 1) { 13491 this[i].appendChild(newChild[j]); 13492 } 13493 } else { 13494 this[i].appendChild(newChild); 13495 } 13496 } 13497 } 13498 13499 return this; 13500 } 13501 13502 function prepend(newChild) { 13503 var document = getDocument(); 13504 var i; 13505 var j; 13506 13507 for (i = 0; i < this.length; i += 1) { 13508 if (typeof newChild === 'string') { 13509 var tempDiv = document.createElement('div'); 13510 tempDiv.innerHTML = newChild; 13511 13512 for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) { 13513 this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]); 13514 } 13515 } else if (newChild instanceof Dom7) { 13516 for (j = 0; j < newChild.length; j += 1) { 13517 this[i].insertBefore(newChild[j], this[i].childNodes[0]); 13518 } 13519 } else { 13520 this[i].insertBefore(newChild, this[i].childNodes[0]); 13521 } 13522 } 13523 13524 return this; 13525 } 13526 13527 function next(selector) { 13528 if (this.length > 0) { 13529 if (selector) { 13530 if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) { 13531 return $([this[0].nextElementSibling]); 13532 } 13533 13534 return $([]); 13535 } 13536 13537 if (this[0].nextElementSibling) return $([this[0].nextElementSibling]); 13538 return $([]); 13539 } 13540 13541 return $([]); 13542 } 13543 13544 function nextAll(selector) { 13545 var nextEls = []; 13546 var el = this[0]; 13547 if (!el) return $([]); 13548 13549 while (el.nextElementSibling) { 13550 var _next = el.nextElementSibling; 13551 13552 if (selector) { 13553 if ($(_next).is(selector)) nextEls.push(_next); 13554 } else nextEls.push(_next); 13555 13556 el = _next; 13557 } 13558 13559 return $(nextEls); 13560 } 13561 13562 function prev(selector) { 13563 if (this.length > 0) { 13564 var el = this[0]; 13565 13566 if (selector) { 13567 if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) { 13568 return $([el.previousElementSibling]); 13569 } 13570 13571 return $([]); 13572 } 13573 13574 if (el.previousElementSibling) return $([el.previousElementSibling]); 13575 return $([]); 13576 } 13577 13578 return $([]); 13579 } 13580 13581 function prevAll(selector) { 13582 var prevEls = []; 13583 var el = this[0]; 13584 if (!el) return $([]); 13585 13586 while (el.previousElementSibling) { 13587 var _prev = el.previousElementSibling; 13588 13589 if (selector) { 13590 if ($(_prev).is(selector)) prevEls.push(_prev); 13591 } else prevEls.push(_prev); 13592 13593 el = _prev; 13594 } 13595 13596 return $(prevEls); 13597 } 13598 13599 function parent(selector) { 13600 var parents = []; 13601 13602 for (var i = 0; i < this.length; i += 1) { 13603 if (this[i].parentNode !== null) { 13604 if (selector) { 13605 if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode); 13606 } else { 13607 parents.push(this[i].parentNode); 13608 } 13609 } 13610 } 13611 13612 return $(parents); 13613 } 13614 13615 function parents(selector) { 13616 var parents = []; 13617 13618 for (var i = 0; i < this.length; i += 1) { 13619 var _parent = this[i].parentNode; 13620 13621 while (_parent) { 13622 if (selector) { 13623 if ($(_parent).is(selector)) parents.push(_parent); 13624 } else { 13625 parents.push(_parent); 13626 } 13627 13628 _parent = _parent.parentNode; 13629 } 13630 } 13631 13632 return $(parents); 13633 } 13634 13635 function closest(selector) { 13636 var closest = this; 13637 13638 if (typeof selector === 'undefined') { 13639 return $([]); 13640 } 13641
13642 if (!closest.is(selector)) { 13643 closest = closest.parents(selector).eq(0); 13644 } 13645 13646 return closest; 13647 } 13648 13649 function find(selector) { 13650 var foundElements = []; 13651 13652 for (var i = 0; i < this.length; i += 1) { 13653 try { 13654 var found = this[i].querySelectorAll(selector); 13655 } catch (err) { 13656 console.log(selector); 13657 } 13658 13659 for (var j = 0; j < found.length; j += 1) { 13660 foundElements.push(found[j]); 13661 } 13662 } 13663 13664 return $(foundElements); 13665 } 13666 13667 function children(selector) { 13668 var children = []; 13669 13670 for (var i = 0; i < this.length; i += 1) { 13671 var childNodes = this[i].children; 13672 13673 for (var j = 0; j < childNodes.length; j += 1) { 13674 if (!selector || $(childNodes[j]).is(selector)) { 13675 children.push(childNodes[j]); 13676 } 13677 } 13678 } 13679 13680 return $(children); 13681 } 13682 13683 function remove() { 13684 for (var i = 0; i < this.length; i += 1) { 13685 if (this[i].parentNode) this[i].parentNode.removeChild(this[i]); 13686 } 13687 13688 return this; 13689 } 13690 13691 var Methods = { 13692 addClass: addClass, 13693 removeClass: removeClass, 13694 hasClass: hasClass, 13695 toggleClass: toggleClass, 13696 attr: attr, 13697 removeAttr: removeAttr, 13698 transform: transform, 13699 transition: transition$1, 13700 on: on, 13701 off: off, 13702 trigger: trigger, 13703 transitionEnd: transitionEnd$1, 13704 outerWidth: outerWidth, 13705 outerHeight: outerHeight, 13706 styles: styles, 13707 offset: offset, 13708 css: css, 13709 each: each, 13710 html: html, 13711 text: text, 13712 is: is, 13713 index: index, 13714 eq: eq, 13715 append: append, 13716 prepend: prepend, 13717 next: next, 13718 nextAll: nextAll, 13719 prev: prev, 13720 prevAll: prevAll, 13721 parent: parent, 13722 parents: parents, 13723 closest: closest, 13724 find: find, 13725 children: children, 13726 filter: filter, 13727 remove: remove 13728 }; 13729 Object.keys(Methods).forEach(function (methodName) { 13730 Object.defineProperty($.fn, methodName, { 13731 value: Methods[methodName], 13732 writable: true 13733 }); 13734 }); 13735 13736 function deleteProps(obj) { 13737 var object = obj; 13738 Object.keys(object).forEach(function (key) { 13739 try { 13740 object[key] = null; 13741 } catch (e) {} 13742 13743 try { 13744 delete object[key]; 13745 } catch (e) {} 13746 }); 13747 } 13748 13749 function nextTick(callback, delay) { 13750 if (delay === void 0) { 13751 delay = 0; 13752 } 13753 13754 return setTimeout(callback, delay); 13755 } 13756 13757 function now() { 13758 return Date.now(); 13759 } 13760 13761 function getComputedStyle$1(el) { 13762 var window = getWindow(); 13763 var style; 13764 13765 if (window.getComputedStyle) { 13766 style = window.getComputedStyle(el, null); 13767 } 13768 13769 if (!style && el.currentStyle) { 13770 style = el.currentStyle; 13771 } 13772 13773 if (!style) { 13774 style = el.style; 13775 } 13776 13777 return style; 13778 } 13779 13780 function getTranslate(el, axis) { 13781 if (axis === void 0) { 13782 axis = 'x'; 13783 } 13784 13785 var window = getWindow(); 13786 var matrix; 13787 var curTransform; 13788 var transformMatrix; 13789 var curStyle = getComputedStyle$1(el); 13790 13791 if (window.WebKitCSSMatrix) { 13792 curTransform = curStyle.transform || curStyle.webkitTransform; 13793 13794 if (curTransform.split(',').length > 6) { 13795 curTransform = curTransform.split(', ').map(function (a) { 13796 return a.replace(',', '.'); 13797 }).join(', '); 13798 } 13799 13800 transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform); 13801 } else { 13802 transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,'); 13803 matrix = transformMatrix.toString().split(','); 13804 } 13805 13806 if (axis === 'x') { 13807 if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);else curTransform = parseFloat(matrix[4]); 13808 } 13809 13810 if (axis === 'y') { 13811 if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);else curTransform = parseFloat(matrix[5]); 13812 } 13813 13814 return curTransform || 0; 13815 } 13816 13817 function isObject(o) { 13818 return _typeof(o) === 'object' && o !== null && o.constructor && Ob
13818ject.prototype.toString.call(o).slice(8, -1) === 'Object'; 13819 } 13820 13821 function extend() { 13822 var to = Object(arguments.length <= 0 ? undefined : arguments[0]); 13823 var noExtend = ['__proto__', 'constructor', 'prototype']; 13824 13825 for (var i = 1; i < arguments.length; i += 1) { 13826 var nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i]; 13827 13828 if (nextSource !== undefined && nextSource !== null) { 13829 var keysArray = Object.keys(Object(nextSource)).filter(function (key) { 13830 return noExtend.indexOf(key) < 0; 13831 }); 13832 13833 for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) { 13834 var nextKey = keysArray[nextIndex]; 13835 var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey); 13836 13837 if (desc !== undefined && desc.enumerable) { 13838 if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) { 13839 if (nextSource[nextKey].__swiper__) { 13840 to[nextKey] = nextSource[nextKey]; 13841 } else { 13842 extend(to[nextKey], nextSource[nextKey]); 13843 } 13844 } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) { 13845 to[nextKey] = {}; 13846 13847 if (nextSource[nextKey].__swiper__) { 13848 to[nextKey] = nextSource[nextKey]; 13849 } else { 13850 extend(to[nextKey], nextSource[nextKey]); 13851 } 13852 } else { 13853 to[nextKey] = nextSource[nextKey]; 13854 } 13855 } 13856 } 13857 } 13858 } 13859 13860 return to; 13861 } 13862 13863 function bindModuleMethods(instance, obj) { 13864 Object.keys(obj).forEach(function (key) { 13865 if (isObject(obj[key])) { 13866 Object.keys(obj[key]).forEach(function (subKey) { 13867 if (typeof obj[key][subKey] === 'function') { 13868 obj[key][subKey] = obj[key][subKey].bind(instance); 13869 } 13870 }); 13871 } 13872 13873 instance[key] = obj[key]; 13874 }); 13875 } 13876 13877 function classesToSelector(classes) { 13878 if (classes === void 0) { 13879 classes = ''; 13880 } 13881 13882 return "." + classes.trim().replace(/([\.:\/])/g, '\\$1').replace(/ /g, '.'); 13883 } 13884 13885 function createElementIfNotDefined($container, params, createElements, checkProps) { 13886 var document = getDocument(); 13887 13888 if (createElements) { 13889 Object.keys(checkProps).forEach(function (key) { 13890 if (!params[key] && params.auto === true) { 13891 var element = document.createElement('div'); 13892 element.className = checkProps[key]; 13893 $container.append(element); 13894 params[key] = element; 13895 } 13896 }); 13897 } 13898 13899 return params; 13900 } 13901 13902 var support; 13903 13904 function calcSupport() { 13905 var window = getWindow(); 13906 var document = getDocument(); 13907 return { 13908 touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch), 13909 pointerEvents: !!window.PointerEvent && 'maxTouchPoints' in window.navigator && window.navigator.maxTouchPoints >= 0, 13910 observer: function checkObserver() { 13911 return 'MutationObserver' in window || 'WebkitMutationObserver' in window; 13912 }(), 13913 passiveListener: function checkPassiveListener() { 13914 var supportsPassive = false; 13915 13916 try { 13917 var opts = Object.defineProperty({}, 'passive', { 13918 get: function get() { 13919 supportsPassive = true; 13920 } 13921 }); 13922 window.addEventListener('testPassiveListener', null, opts); 13923 } catch (e) {} 13924 13925 return supportsPassive; 13926 }(), 13927 gestures: function checkGestures() { 13928 return 'ongesturestart' in window; 13929 }() 13930 }; 13931 } 13932 13933 function getSupport() { 13934 if (!support) { 13935 support = calcSupport(); 13936 } 13937 13938 return support; 13939 } 13940 13941 var device; 13942 13943 function calcDevice(_temp) { 13944 var _ref = _temp === void 0 ? {} : _temp, 13945 userAgent = _ref.userAgent; 13946
13947 var support = getSupport(); 13948 var window = getWindow(); 13949 var platform = window.navigator.platform; 13950 var ua = userAgent || window.navigator.userAgent; 13951 var device = { 13952 ios: false, 13953 android: false 13954 }; 13955 var screenWidth = window.screen.width; 13956 var screenHeight = window.screen.height; 13957 var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); 13958 var ipad = ua.match(/(iPad).*OS\s([\d_]+)/); 13959 var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); 13960 var iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/); 13961 var windows = platform === 'Win32'; 13962 var macos = platform === 'MacIntel'; 13963 var iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810']; 13964 13965 if (!ipad && macos && support.touch && iPadScreens.indexOf(screenWidth + "x" + screenHeight) >= 0) { 13966 ipad = ua.match(/(Version)\/([\d.]+)/); 13967 if (!ipad) ipad = [0, 1, '13_0_0']; 13968 macos = false; 13969 } 13970 13971 if (android && !windows) { 13972 device.os = 'android'; 13973 device.android = true; 13974 } 13975 13976 if (ipad || iphone || ipod) { 13977 device.os = 'ios'; 13978 device.ios = true; 13979 } 13980 13981 return device; 13982 } 13983 13984 function getDevice(overrides) { 13985 if (overrides === void 0) { 13986 overrides = {}; 13987 } 13988 13989 if (!device) { 13990 device = calcDevice(overrides); 13991 } 13992 13993 return device; 13994 } 13995 13996 var browser; 13997 13998 function calcBrowser() { 13999 var window = getWindow(); 14000 14001 function isSafari() { 14002 var ua = window.navigator.userAgent.toLowerCase(); 14003 return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0; 14004 } 14005 14006 return { 14007 isEdge: !!window.navigator.userAgent.match(/Edge/g), 14008 isSafari: isSafari(), 14009 isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent) 14010 }; 14011 } 14012 14013 function getBrowser() { 14014 if (!browser) { 14015 browser = calcBrowser(); 14016 } 14017 14018 return browser; 14019 } 14020 14021 var supportsResizeObserver = function supportsResizeObserver() { 14022 var window = getWindow(); 14023 return typeof window.ResizeObserver !== 'undefined'; 14024 }; 14025 14026 var Resize = { 14027 name: 'resize', 14028 create: function create() { 14029 var swiper = this; 14030 extend(swiper, { 14031 resize: { 14032 observer: null, 14033 createObserver: function createObserver() { 14034 if (!swiper || swiper.destroyed || !swiper.initialized) return; 14035 swiper.resize.observer = new ResizeObserver(function (entries) { 14036 var width = swiper.width, 14037 height = swiper.height; 14038 var newWidth = width; 14039 var newHeight = height; 14040 entries.forEach(function (_ref) { 14041 var contentBoxSize = _ref.contentBoxSize, 14042 contentRect = _ref.contentRect, 14043 target = _ref.target; 14044 if (target && target !== swiper.el) return; 14045 newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize; 14046 newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize; 14047 }); 14048 14049 if (newWidth !== width || newHeight !== height) { 14050 swiper.resize.resizeHandler(); 14051 } 14052 }); 14053 swiper.resize.observer.observe(swiper.el); 14054 }, 14055 removeObserver: function removeObserver() { 14056 if (swiper.resize.observer && swiper.resize.observer.unobserve && swiper.el) { 14057 swiper.resize.observer.unobserve(swiper.el); 14058 swiper.resize.observer = null; 14059 } 14060 }, 14061 resizeHandler: function resizeHandler() { 14062 if (!swiper || swiper.destroyed || !swiper.initialized) return; 14063 swiper.emit('beforeResize'); 14064 swiper.emit('resize'); 14065 }, 14066 orientationChangeHandler: function orientationChangeHandler() { 14067 if (!swiper || swiper.destroyed || !swiper.initialized) return; 14068 swiper.emit('orientationchange'); 14069 } 14070 } 14071 }); 14072 }, 14073 on: { 14074 init: function init(swiper) { 14075 var window = getWindow(); 14076 14077 if (swiper.params.resizeObserver && supportsResizeObserver()) { 14078 swiper.resize.createObserver(); 14079 return; 14080 } 14081 14082 window.addEventListener('resize', swiper.resize.resizeHandler); 14083 window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler); 14084 }, 14085 destroy: function destroy(swiper) { 14086 var window = getWindow(); 14087 swiper.resize.removeObserver(); 14088 window.removeEventListener('resize', swiper.resize.resizeHandler); 14089 window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler); 14090 } 14091 } 14092 }; 14093 var Observer = { 14094 attach: function attach(target, options) { 14095 if (options === void 0) { 14096 options = {}; 14097 } 14098 14099 var window = getWindow(); 14100 var swiper = this; 14101 var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver; 14102 var observer = new ObserverFunc(function (mutations) { 14103 if (mutations.length === 1) { 14104 swiper.emit('observerUpdate', mutations[0]); 14105 return; 14106 } 14107 14108 var observerUpdate = function observerUpdate() { 14109 swiper.emit('observerUpdate', mutations[0]); 14110 }; 14111 14112 if (window.requestAnimationFrame) { 14113 window.requestAnimationFrame(observerUpdate); 14114 } else { 14115 window.setTimeout(observerUpdate, 0); 14116 } 14117 }); 14118 observer.observe(target, { 14119 attributes: typeof options.attributes === 'undefined' ? true : options.attributes, 14120 childList: typeof options.childList === 'undefined' ? true : options.childList, 14121 characterData: typeof options.characterData === 'undefined' ? true : options.characterData 14122 }); 14123 swiper.observer.observers.push(observer); 14124 },
14125 init: function init() { 14126 var swiper = this; 14127 if (!swiper.support.observer || !swiper.params.observer) return; 14128 14129 if (swiper.params.observeParents) { 14130 var containerParents = swiper.$el.parents(); 14131 14132 for (var i = 0; i < containerParents.length; i += 1) { 14133 swiper.observer.attach(containerParents[i]); 14134 } 14135 } 14136 14137 swiper.observer.attach(swiper.$el[0], { 14138 childList: swiper.params.observeSlideChildren 14139 }); 14140 swiper.observer.attach(swiper.$wrapperEl[0], { 14141 attributes: false 14142 }); 14143 }, 14144 destroy: function destroy() { 14145 var swiper = this; 14146 swiper.observer.observers.forEach(function (observer) { 14147 observer.disconnect(); 14148 }); 14149 swiper.observer.observers = []; 14150 } 14151 }; 14152 var Observer$1 = { 14153 name: 'observer', 14154 params: { 14155 observer: false, 14156 observeParents: false, 14157 observeSlideChildren: false 14158 }, 14159 create: function create() { 14160 var swiper = this; 14161 bindModuleMethods(swiper, { 14162 observer: _extends({}, Observer, { 14163 observers: [] 14164 }) 14165 }); 14166 }, 14167 on: { 14168 init: function init(swiper) { 14169 swiper.observer.init(); 14170 }, 14171 destroy: function destroy(swiper) { 14172 swiper.observer.destroy(); 14173 } 14174 } 14175 }; 14176 var modular = { 14177 useParams: function useParams(instanceParams) { 14178 var instance = this; 14179 if (!instance.modules) return; 14180 Object.keys(instance.modules).forEach(function (moduleName) { 14181 var module = instance.modules[moduleName]; 14182 14183 if (module.params) { 14184 extend(instanceParams, module.params); 14185 } 14186 }); 14187 }, 14188 useModules: function useModules(modulesParams) { 14189 if (modulesParams === void 0) { 14190 modulesParams = {}; 14191 } 14192 14193 var instance = this; 14194 if (!instance.modules) return; 14195 Object.keys(instance.modules).forEach(function (moduleName) { 14196 var module = instance.modules[moduleName]; 14197 var moduleParams = modulesParams[moduleName] || {}; 14198 14199 if (module.on && instance.on) { 14200 Object.keys(module.on).forEach(function (moduleEventName) { 14201 instance.on(moduleEventName, module.on[moduleEventName]); 14202 }); 14203 } 14204 14205 if (module.create) { 14206 module.create.bind(instance)(moduleParams); 14207 } 14208 }); 14209 } 14210 }; 14211 var eventsEmitter = { 14212 on: function on(events, handler, priority) { 14213 var self = this; 14214 if (typeof handler !== 'function') return self; 14215 var method = priority ? 'unshift' : 'push'; 14216 events.split(' ').forEach(function (event) { 14217 if (!self.eventsListeners[event]) self.eventsListeners[event] = []; 14218 self.eventsListeners[event][method](handler); 14219 }); 14220 return self; 14221 }, 14222 once: function once(events, handler, priority) { 14223 var self = this; 14224 if (typeof handler !== 'function') return self; 14225 14226 function onceHandler() { 14227 self.off(events, onceHandler); 14228 14229 if (onceHandler.__emitterProxy) { 14230 delete onceHandler.__emitterProxy; 14231 } 14232 14233 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 14234 args[_key] = arguments[_key]; 14235 } 14236 14237 handler.apply(self, args); 14238 } 14239 14240 onceHandler.__emitterProxy = handler; 14241 return self.on(events, onceHandler, priority); 14242 }, 14243 onAny: function onAny(handler, priority) { 14244 var self = this; 14245 if (typeof handler !== 'function') return self; 14246 var method = priority ? 'unshift' : 'push'; 14247 14248 if (self.eventsAnyListeners.indexOf(handler) < 0) { 14249 self.eventsAnyListeners[method](handler); 14250 } 14251 14252 return self; 14253 }, 14254 offAny: function offAny(handler) { 14255 var self = this; 14256 if (!self.eventsAnyListeners) return self; 14257 var index = self.eventsAnyListeners.indexOf(handler); 14258 14259 if (index >= 0) { 14260 self.eventsAnyListeners.splice(index, 1); 14261 } 14262 14263 return self; 14264 }, 14265 off: function off(events, handler) { 14266 var self = this; 14267 if (!self.eventsListeners) return self; 14268 events.split(' ').forEach(function (event) { 14269 if (typeof handler === 'undefined') { 14270 self.eventsListeners[event] = []; 14271 } else if (self.eventsListeners[event]) { 14272 self.eventsListeners[event].forEach(function (eventHandler, index) { 14273 if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) { 14274 self.eventsListeners[event].splice(index, 1); 14275 } 14276 }); 14277 } 14278 }); 14279 return self; 14280 }, 14281 emit: function emit() { 14282 var self = this; 14283 if (!self.eventsListeners) return self; 14284 var events; 14285 var data; 14286 var context; 14287 14288 for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { 14289 args[_key2] = arguments[_key2]; 14290 } 14291 14292 if (typeof args[0] === 'string' || Array.isArray(args[0])) { 14293 events = args[0]; 14294 data = args.slice(1, args.length); 14295 context = self; 14296 } else { 14297 events = args[0].events; 14298 data = args[0].data;
14299 context = args[0].context || self; 14300 } 14301 14302 data.unshift(context); 14303 var eventsArray = Array.isArray(events) ? events : events.split(' '); 14304 eventsArray.forEach(function (event) { 14305 if (self.eventsAnyListeners && self.eventsAnyListeners.length) { 14306 self.eventsAnyListeners.forEach(function (eventHandler) { 14307 eventHandler.apply(context, [event].concat(data)); 14308 }); 14309 } 14310 14311 if (self.eventsListeners && self.eventsListeners[event]) { 14312 self.eventsListeners[event].forEach(function (eventHandler) { 14313 eventHandler.apply(context, data); 14314 }); 14315 } 14316 }); 14317 return self; 14318 } 14319 }; 14320 14321 function updateSize() { 14322 var swiper = this; 14323 var width; 14324 var height; 14325 var $el = swiper.$el; 14326 14327 if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) { 14328 width = swiper.params.width; 14329 } else { 14330 width = $el[0].clientWidth; 14331 } 14332 14333 if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) { 14334 height = swiper.params.height; 14335 } else { 14336 height = $el[0].clientHeight; 14337 } 14338 14339 if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) { 14340 return; 14341 } 14342 14343 width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10); 14344 height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10); 14345 if (Number.isNaN(width)) width = 0; 14346 if (Number.isNaN(height)) height = 0; 14347 extend(swiper, { 14348 width: width, 14349 height: height, 14350 size: swiper.isHorizontal() ? width : height 14351 }); 14352 } 14353 14354 function updateSlides() { 14355 var swiper = this; 14356 14357 function getDirectionLabel(property) { 14358 if (swiper.isHorizontal()) { 14359 return property; 14360 } 14361 14362 return { 14363 'width': 'height', 14364 'margin-top': 'margin-left', 14365 'margin-bottom ': 'margin-right', 14366 'margin-left': 'margin-top', 14367 'margin-right': 'margin-bottom', 14368 'padding-left': 'padding-top', 14369 'padding-right': 'padding-bottom', 14370 'marginRight': 'marginBottom' 14371 }[property]; 14372 } 14373 14374 function getDirectionPropertyValue(node, label) { 14375 return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0); 14376 } 14377 14378 var params = swiper.params; 14379 var $wrapperEl = swiper.$wrapperEl, 14380 swiperSize = swiper.size, 14381 rtl = swiper.rtlTranslate, 14382 wrongRTL = swiper.wrongRTL; 14383 var isVirtual = swiper.virtual && params.virtual.enabled; 14384 var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length; 14385 var slides = $wrapperEl.children("." + swiper.params.slideClass); 14386 var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length; 14387 var snapGrid = []; 14388 var slidesGrid = []; 14389 var slidesSizesGrid = []; 14390 var offsetBefore = params.slidesOffsetBefore; 14391 14392 if (typeof offsetBefore === 'function') { 14393 offsetBefore = params.slidesOffsetBefore.call(swiper); 14394 } 14395 14396 var offsetAfter = params.slidesOffsetAfter; 14397 14398 if (typeof offsetAfter === 'function') { 14399 offsetAfter = params.slidesOffsetAfter.call(swiper); 14400 } 14401 14402 var previousSnapGridLength = swiper.snapGrid.length; 14403 var previousSlidesGridLength = swiper.slidesGrid.length; 14404 var spaceBetween = params.spaceBetween; 14405 var slidePosition = -offsetBefore; 14406 var prevSlideSize = 0; 14407 var index = 0; 14408 14409 if (typeof swiperSize === 'undefined') { 14410 return; 14411 } 14412 14413 if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { 14414 spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize; 14415 } 14416 14417 swiper.virtualSize = -spaceBetween; 14418 if (rtl) slides.css({ 14419 marginLeft: '', 14420 marginTop: '' 14421 });else slides.css({ 14422 marginRight: '', 14423 marginBottom: '' 14424 }); 14425 var slidesNumberEvenToRows; 14426 14427 if (params.slidesPerColumn > 1) { 14428 if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) { 14429 slidesNumberEvenToRows = slidesLength; 14430 } else {
14431 slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn; 14432 } 14433 14434 if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') { 14435 slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn); 14436 } 14437 } 14438 14439 var slideSize; 14440 var slidesPerColumn = params.slidesPerColumn; 14441 var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn; 14442 var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn); 14443 14444 for (var i = 0; i < slidesLength; i += 1) { 14445 slideSize = 0; 14446 var slide = slides.eq(i); 14447 14448 if (params.slidesPerColumn > 1) { 14449 var newSlideOrderIndex = void 0; 14450 var column = void 0; 14451 var row = void 0; 14452 14453 if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) { 14454 var groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn)); 14455 var slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex; 14456 var columnsInGroup = groupIndex === 0 ? params.slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup); 14457 row = Math.floor(slideIndexInGroup / columnsInGroup); 14458 column = slideIndexInGroup - row * columnsInGroup + groupIndex * params.slidesPerGroup; 14459 newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn; 14460 slide.css({ 14461 '-webkit-box-ordinal-group': newSlideOrderIndex, 14462 '-moz-box-ordinal-group': newSlideOrderIndex, 14463 '-ms-flex-order': newSlideOrderIndex, 14464 '-webkit-order': newSlideOrderIndex, 14465 order: newSlideOrderIndex 14466 }); 14467 } else if (params.slidesPerColumnFill === 'column') { 14468 column = Math.floor(i / slidesPerColumn); 14469 row = i - column * slidesPerColumn; 14470 14471 if (column > numFullColumns || column === numFullColumns && row === slidesPerColumn - 1) { 14472 row += 1; 14473 14474 if (row >= slidesPerColumn) { 14475 row = 0; 14476 column += 1; 14477 } 14478 } 14479 } else { 14480 row = Math.floor(i / slidesPerRow); 14481 column = i - row * slidesPerRow; 14482 } 14483 14484 slide.css(getDirectionLabel('margin-top'), row !== 0 && params.spaceBetween && params.spaceBetween + "px"); 14485 } 14486 14487 if (slide.css('display') === 'none') continue; 14488 14489 if (params.slidesPerView === 'auto') { 14490 var slideStyles = getComputedStyle(slide[0]); 14491 var currentTransform = slide[0].style.transform; 14492 var currentWebKitTransform = slide[0].style.webkitTransform; 14493 14494 if (currentTransform) { 14495 slide[0].style.transform = 'none'; 14496 } 14497 14498 if (currentWebKitTransform) { 14499 slide[0].style.webkitTransform = 'none'; 14500 } 14501 14502 if (params.roundLengths) { 14503 slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true); 14504 } else { 14505 var width = getDirectionPropertyValue(slideStyles, 'width'); 14506 var paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left'); 14507 var paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right'); 14508 var marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left'); 14509 var marginRight = getDirectionPropertyValue(slideStyles, 'margin-right'); 14510 var boxSizing = slideStyles.getPropertyValue('box-sizing'); 14511 14512 if (boxSizing && boxSizing === 'border-box') { 14513 slideSize = width + marginLeft + marginRight; 14514 } else { 14515 var _slide$ = slide[0], 14516 clientWidth = _slide$.clientWidth, 14517 offsetWidth = _slide$.offsetWidth; 14518 slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth); 14519 } 14520 } 14521 14522 if (currentTransform) { 14523 slide[0].style.transform = currentTransform; 14524 } 14525 14526 if (currentWebKitTransform) { 14527 slide[0].style.webkitTransform = currentWebKitTransform; 14528 } 14529 14530 if (params.roundLengths) slideSize = Math.floor(slideSize); 14531 } else { 14532 slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView; 14533 if (params.roundLengths) slideSize = Math.floor(slideSize); 14534 14535 if (slides[i]) { 14536 slides[i].style[getDirectionLabel('width')] = slideSize + "px"; 14537 } 14538 } 14539 14540 if (slides[i]) { 14541 slides[i].swiperSlideSize = slideSize; 14542 } 14543 14544 slidesSizesGrid.push(slideSize); 14545 14546 if (params.centeredSlides) { 14547 slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween; 14548 if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; 14549 if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; 14550 if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0; 14551 if (params.roundLengths) slidePosition = Math.floor(slidePosition); 14552 if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition); 14553 slidesGrid.push(slidePosition); 14554 } else { 14555 if (params.roundLengths) slidePosition = Math.floor(slidePosition); 14556 if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition); 14557 slidesGrid.push(slidePosition); 14558 slidePosition = slidePosition + slideSize + spaceBetween; 14559 } 14560 14561 swiper.virtualSize += slideSize + spaceBetween; 14562 prevSlideSize = slideSize; 14563 index += 1; 14564 } 14565 14566 swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter; 14567 var newSlidesGrid; 14568 14569 if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) { 14570 $wrapperEl.css({ 14571 width: swiper.virtualSize + params.spaceBetween + "px" 14572 }); 14573 } 14574 14575 if (params.setWrapperSize) { 14576 var _$wrapperEl$css; 14577 14578 $wrapperEl.css((_$wrapperEl$css = {}, _$wrapperEl$css[getDirectionLabel('width')] = swiper.virtualSize + params.spaceBetween + "px", _$wrapperEl$css)); 14579 } 14580 14581 if (params.slidesPerColumn > 1) { 14582 var _$wrapperEl$css2; 14583 14584 swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumber
14584EvenToRows; 14585 swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween; 14586 $wrapperEl.css((_$wrapperEl$css2 = {}, _$wrapperEl$css2[getDirectionLabel('width')] = swiper.virtualSize + params.spaceBetween + "px", _$wrapperEl$css2)); 14587 14588 if (params.centeredSlides) { 14589 newSlidesGrid = []; 14590 14591 for (var _i = 0; _i < snapGrid.length; _i += 1) { 14592 var slidesGridItem = snapGrid[_i]; 14593 if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem); 14594 if (snapGrid[_i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem); 14595 } 14596 14597 snapGrid = newSlidesGrid; 14598 } 14599 } 14600 14601 if (!params.centeredSlides) { 14602 newSlidesGrid = []; 14603 14604 for (var _i2 = 0; _i2 < snapGrid.length; _i2 += 1) { 14605 var _slidesGridItem = snapGrid[_i2]; 14606 if (params.roundLengths) _slidesGridItem = Math.floor(_slidesGridItem); 14607 14608 if (snapGrid[_i2] <= swiper.virtualSize - swiperSize) { 14609 newSlidesGrid.push(_slidesGridItem); 14610 } 14611 } 14612 14613 snapGrid = newSlidesGrid; 14614 14615 if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) { 14616 snapGrid.push(swiper.virtualSize - swiperSize); 14617 } 14618 } 14619 14620 if (snapGrid.length === 0) snapGrid = [0]; 14621 14622 if (params.spaceBetween !== 0) { 14623 var _slides$filter$css; 14624 14625 var key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight'); 14626 slides.filter(function (_, slideIndex) { 14627 if (!params.cssMode) return true; 14628 14629 if (slideIndex === slides.length - 1) { 14630 return false; 14631 } 14632 14633 return true; 14634 }).css((_slides$filter$css = {}, _slides$filter$css[key] = spaceBetween + "px", _slides$filter$css)); 14635 } 14636 14637 if (params.centeredSlides && params.centeredSlidesBounds) { 14638 var allSlidesSize = 0; 14639 slidesSizesGrid.forEach(function (slideSizeValue) { 14640 allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0); 14641 }); 14642 allSlidesSize -= params.spaceBetween; 14643 var maxSnap = allSlidesSize - swiperSize; 14644 snapGrid = snapGrid.map(function (snap) { 14645 if (snap < 0) return -offsetBefore; 14646 if (snap > maxSnap) return maxSnap + offsetAfter; 14647 return snap; 14648 }); 14649 } 14650 14651 if (params.centerInsufficientSlides) { 14652 var _allSlidesSize = 0; 14653 slidesSizesGrid.forEach(function (slideSizeValue) { 14654 _allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0); 14655 }); 14656 _allSlidesSize -= params.spaceBetween; 14657 14658 if (_allSlidesSize < swiperSize) { 14659 var allSlidesOffset = (swiperSize - _allSlidesSize) / 2; 14660 snapGrid.forEach(function (snap, snapIndex) { 14661 snapGrid[snapIndex] = snap - allSlidesOffset; 14662 }); 14663 slidesGrid.forEach(function (snap, snapIndex) { 14664 slidesGrid[snapIndex] = snap + allSlidesOffset; 14665 }); 14666 } 14667 } 14668 14669 extend(swiper, { 14670 slides: slides, 14671 snapGrid: snapGrid, 14672 slidesGrid: slidesGrid, 14673 slidesSizesGrid: slidesSizesGrid 14674 }); 14675 14676 if (slidesLength !== previousSlidesLength) { 14677 swiper.emit('slidesLengthChange'); 14678 } 14679 14680 if (snapGrid.length !== previousSnapGridLength) { 14681 if (swiper.params.watchOverflow) swiper.checkOverflow(); 14682 swiper.emit('snapGridLengthChange'); 14683 } 14684 14685 if (slidesGrid.length !== previousSlidesGridLength) { 14686 swiper.emit('slidesGridLengthChange'); 14687 } 14688 14689 if (params.watchSlidesProgress || params.watchSlidesVisibility) { 14690 swiper.updateSlidesOffset(); 14691 } 14692 } 14693 14694 function updateAutoHeight(speed) { 14695 var swiper = this; 14696 var activeSlides = []; 14697 var isVirtual = swiper.virtual && swiper.params.virtual.enabled; 14698 var newHeight = 0; 14699 var i; 14700 14701 if (typeof speed === 'number') { 14702 swiper.setTransition(speed); 14703 } else if (speed === true) { 14704 swiper.setTransition(swiper.params.speed); 14705 } 14706 14707 var getSlideByIndex = function getSlideByIndex(index) { 14708 if (isVirtual) { 14709 return swiper.slides.filter(function (el) { 14710 return parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index; 14711 })[0]; 14712 } 14713 14714 return swiper.slides.eq(index)[0]; 14715 }; 14716 14717 if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) { 14718 if (swiper.params.centeredSlides) { 14719 swiper.visibleSlides.each(function (slide) { 14720 activeSlides.push(slide); 14721 }); 14722 } else { 14723 for (i = 0;
14723 i < Math.ceil(swiper.params.slidesPerView); i += 1) { 14724 var index = swiper.activeIndex + i; 14725 if (index > swiper.slides.length && !isVirtual) break; 14726 activeSlides.push(getSlideByIndex(index)); 14727 } 14728 } 14729 } else { 14730 activeSlides.push(getSlideByIndex(swiper.activeIndex)); 14731 } 14732 14733 for (i = 0; i < activeSlides.length; i += 1) { 14734 if (typeof activeSlides[i] !== 'undefined') { 14735 var height = activeSlides[i].offsetHeight; 14736 newHeight = height > newHeight ? height : newHeight; 14737 } 14738 } 14739 14740 if (newHeight) swiper.$wrapperEl.css('height', newHeight + "px"); 14741 } 14742 14743 function updateSlidesOffset() { 14744 var swiper = this; 14745 var slides = swiper.slides; 14746 14747 for (var i = 0; i < slides.length; i += 1) { 14748 slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop; 14749 } 14750 } 14751 14752 function updateSlidesProgress(translate) { 14753 if (translate === void 0) { 14754 translate = this && this.translate || 0; 14755 } 14756 14757 var swiper = this; 14758 var params = swiper.params; 14759 var slides = swiper.slides, 14760 rtl = swiper.rtlTranslate; 14761 if (slides.length === 0) return; 14762 if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset(); 14763 var offsetCenter = -translate; 14764 if (rtl) offsetCenter = translate; 14765 slides.removeClass(params.slideVisibleClass); 14766 swiper.visibleSlidesIndexes = []; 14767 swiper.visibleSlides = []; 14768 14769 for (var i = 0; i < slides.length; i += 1) { 14770 var slide = slides[i]; 14771 var slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + params.spaceBetween); 14772 14773 if (params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) { 14774 var slideBefore = -(offsetCenter - slide.swiperSlideOffset); 14775 var slideAfter = slideBefore + swiper.slidesSizesGrid[i]; 14776 var isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size; 14777 14778 if (isVisible) { 14779 swiper.visibleSlides.push(slide); 14780 swiper.visibleSlidesIndexes.push(i); 14781 slides.eq(i).addClass(params.slideVisibleClass); 14782 } 14783 } 14784 14785 slide.progress = rtl ? -slideProgress : slideProgress; 14786 } 14787 14788 swiper.visibleSlides = $(swiper.visibleSlides); 14789 } 14790 14791 function updateProgress(translate) { 14792 var swiper = this; 14793 14794 if (typeof translate === 'undefined') { 14795 var multiplier = swiper.rtlTranslate ? -1 : 1; 14796 translate = swiper && swiper.translate && swiper.translate * multiplier || 0; 14797 } 14798 14799 var params = swiper.params; 14800 var translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 14801 var progress = swiper.progress, 14802 isBeginning = swiper.isBeginning, 14803 isEnd = swiper.isEnd; 14804 var wasBeginning = isBeginning; 14805 var wasEnd = isEnd; 14806 14807 if (translatesDiff === 0) { 14808 progress = 0; 14809 isBeginning = true; 14810 isEnd = true; 14811 } else { 14812 progress = (translate - swiper.minTranslate()) / translatesDiff; 14813 isBeginning = progress <= 0; 14814 isEnd = progress >= 1; 14815 } 14816 14817 extend(swiper, { 14818 progress: progress, 14819 isBeginning: isBeginning, 14820 isEnd: isEnd 14821 }); 14822 if (params.watchSlidesProgress || params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate); 14823 14824 if (isBeginning && !wasBeginning) { 14825 swiper.emit('reachBeginning toEdge'); 14826 } 14827 14828 if (isEnd && !wasEnd) { 14829 swiper.emit('reachEnd toEdge'); 14830 } 14831 14832 if (wasBeginning && !isBeginning || wasEnd && !isEnd) { 14833 swiper.emit('fromEdge'); 14834 } 14835 14836 swiper.emit('progress', progress); 14837 } 14838 14839 function updateSlidesClasses() { 14840 var swiper = this; 14841 var slides = swiper.slides, 14842 params = swiper.params, 14843 $wrapperEl = swiper.$wrapperEl, 14844 activeIndex = swiper.activeIndex, 14845 realIndex = swiper.realIndex; 14846 var isVirtual = swiper.virtual && params.virtual.enabled; 14847 slides.removeClass(params.slideActiveClass + " " + params.slideNextClass + " " + params.slidePrevClass + " " + params.slideDuplicateActiveClass + " " + params.slideDuplicateNextClass + " " + params.slideDuplicatePrevClass); 14848 var activeSlide; 14849 14850 if (isVirtual) { 14851 activeSlide = swiper.$wrapperEl.find("." + params.slideClass + "[data-swiper-slide-index=\"" + activeIndex + "\"]"); 14852 } else { 14853 activeSlide = slides.eq(activeIndex); 14854 } 14855 14856 activeSlide.addClass(params.slideActiveClass); 14857 14858 if (params.loop) { 14859 if (activeSlide.hasClass(params.slideDuplicateClass)) { 14860 $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ")[data-swiper-slide-index=\"" + realIndex + "\"]").addClass(params.slideDuplicateActiveClass); 14861 } else { 14862 $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + "[data-swiper-slide-index=\"" + realIndex + "\"]").addClass(params.slideDuplicateActiveClass); 14863 } 14864 } 14865 14866 var nextSlide = activeSlide.nextAll("." + params.slideClass).eq(0).addClass(params.slideNextClass); 14867 14868 if (params.loop && nextSlide.length === 0) { 14869 nextSlide = slides.eq(0); 14870 nextSlide.addClass(params.slideNextClass); 14871 } 14872 14873 var prevSlide = activeSlide.prevAll("." + params.slideClass).eq(0).addClass(params.slidePrevClass); 14874 14875 if (params.loop && prevSlide.length === 0) { 14876 prevSlide = slides.eq(-1); 14877 prevSlide.addClass(params.slidePrevClass); 14878 } 14879 14880 if (params.loop) { 14881 if (nextSlide.hasClass(params.slideDuplicateClass)) { 14882 $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ")[data-swiper-slide-index=\"" + nextSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicateNextClass); 14883 } else { 14884 $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + "[data-swiper-slide-index=\"" + nextSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicateNextClass); 14885 } 14886 14887 if (prevSlide.hasClass(params.slideDuplicateClass)) { 14888 $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ")[data-swiper-slide-index=\"" + prevSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicatePrevClass); 14889 } else { 14890 $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + "[data-swiper-slide-index=\"" + prevSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicatePrevClass); 14891 } 14892 } 14893 14894 swiper.emitSlidesClasses(); 14895 } 14896 14897 function updateActiveIndex(newActiveIndex) { 14898 var swiper = this; 14899 var translate = swiper.rtlTranslate ? swiper.translate : -swi
14899per.translate; 14900 var slidesGrid = swiper.slidesGrid, 14901 snapGrid = swiper.snapGrid, 14902 params = swiper.params, 14903 previousIndex = swiper.activeIndex, 14904 previousRealIndex = swiper.realIndex, 14905 previousSnapIndex = swiper.snapIndex; 14906 var activeIndex = newActiveIndex; 14907 var snapIndex; 14908 14909 if (typeof activeIndex === 'undefined') { 14910 for (var i = 0; i < slidesGrid.length; i += 1) { 14911 if (typeof slidesGrid[i + 1] !== 'undefined') { 14912 if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) { 14913 activeIndex = i; 14914 } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) { 14915 activeIndex = i + 1; 14916 } 14917 } else if (translate >= slidesGrid[i]) { 14918 activeIndex = i; 14919 } 14920 } 14921 14922 if (params.normalizeSlideIndex) { 14923 if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0; 14924 } 14925 } 14926 14927 if (snapGrid.indexOf(translate) >= 0) { 14928 snapIndex = snapGrid.indexOf(translate); 14929 } else { 14930 var skip = Math.min(params.slidesPerGroupSkip, activeIndex); 14931 snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup); 14932 } 14933 14934 if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; 14935 14936 if (activeIndex === previousIndex) { 14937 if (snapIndex !== previousSnapIndex) { 14938 swiper.snapIndex = snapIndex; 14939 swiper.emit('snapIndexChange'); 14940 } 14941 14942 return; 14943 } 14944 14945 var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10); 14946 extend(swiper, { 14947 snapIndex: snapIndex, 14948 realIndex: realIndex, 14949 previousIndex: previousIndex, 14950 activeIndex: activeIndex 14951 }); 14952 swiper.emit('activeIndexChange'); 14953 swiper.emit('snapIndexChange'); 14954 14955 if (previousRealIndex !== realIndex) { 14956 swiper.emit('realIndexChange'); 14957 } 14958 14959 if (swiper.initialized || swiper.params.runCallbacksOnInit) { 14960 swiper.emit('slideChange'); 14961 } 14962 } 14963 14964 function updateClickedSlide(e) { 14965 var swiper = this; 14966 var params = swiper.params; 14967 var slide = $(e.target).closest("." + params.slideClass)[0]; 14968 var slideFound = false; 14969 var slideIndex; 14970 14971 if (slide) { 14972 for (var i = 0; i < swiper.slides.length; i += 1) { 14973 if (swiper.slides[i] === slide) { 14974 slideFound = true; 14975 slideIndex = i; 14976 break; 14977 } 14978 } 14979 } 14980 14981 if (slide && slideFound) { 14982 swiper.clickedSlide = slide; 14983 14984 if (swiper.virtual && swiper.params.virtual.enabled) { 14985 swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10); 14986 } else { 14987 swiper.clickedIndex = slideIndex; 14988 } 14989 } else { 14990 swiper.clickedSlide = undefined; 14991 swiper.clickedIndex = undefined; 14992 return; 14993 } 14994 14995 if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) { 14996 swiper.slideToClickedSlide(); 14997 } 14998 } 14999 15000 var update = { 15001 updateSize: updateSize, 15002 updateSlides: updateSlides, 15003 updateAutoHeight: updateAutoHeight, 15004 updateSlidesOffset: updateSlidesOffset, 15005 updateSlidesProgress: updateSlidesProgress, 15006 updateProgress: updateProgress, 15007 updateSlidesClasses: updateSlidesClasses, 15008 updateActiveIndex: updateActiveIndex, 15009 updateClickedSlide: updateClickedSlide 15010 }; 15011 15012 function getSwiperTranslate(axis) { 15013 if (axis === void 0) { 15014 axis = this.isHorizontal() ? 'x' : 'y'; 15015 } 15016 15017 var swiper = this; 15018 var params = swiper.params, 15019 rtl = swiper.rtlTranslate, 15020 translate = swiper.translate, 15021 $wrapperEl = swiper.$wrapperEl; 15022 15023 if (params.virtualTranslate) { 15024 return rtl ? -translate : translate; 15025 } 15026 15027 if (params.cssMode) { 15028 return translate; 15029 } 15030 15031 var currentTranslate = getTranslate($wrapperEl[0], axis); 15032 if (rtl) currentTranslate = -currentTranslate; 15033 return currentTranslate || 0; 15034 } 15035 15036 function setTranslate(translate, byController) { 15037 var swiper = this; 15038 var rtl = swiper.rtlTranslate, 15039 params = swiper.params, 15040 $wrapperEl = swiper.$wrapperEl, 15041 wrapperEl = swiper.wrapperEl, 15042 progress = swiper.progress; 15043 var x = 0; 15044 var y = 0; 15045 var z = 0; 15046 15047 if (swiper.isHorizontal()) { 15048 x = rtl ? -translate : translate; 15049 } else { 15050 y = translate; 15051 } 15052 15053 if (params.roundLengths) { 15054 x = Math.floor(x); 15055 y = Math.floor(y); 15056 } 15057 15058 if (params.cssMode) { 15059 wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y; 15060 } else if (!params.virtualTranslate) { 15061 $wrapperEl.transform("translate3d(" + x + "px, " + y + "px, " + z + "px)"); 15062 } 15063 15064 swiper.previousTranslate = swiper.translate; 15065 swiper.translate = swiper.isHorizontal() ? x : y; 15066 var newProgress; 15067 var translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 15068 15069 if (translatesDiff === 0) { 15070 newProgress = 0; 15071 } else { 15072 newProgress = (translate - swiper.minTranslate()) / translatesDiff; 15073 } 15074 15075 if (newProgress !== progress) { 15076 swiper.updateProgress(translate); 15077 } 15078 15079 swiper.emit('setTranslate', swiper.translate, byController); 15080 } 15081 15082 function minTranslate() { 15083 return -this.snapGrid[0]; 15084 } 15085 15086 function maxTranslate() { 15087 return -this.snapGrid[this.snapGrid.length - 1]; 15088 } 15089 15090 function translateTo(translate, speed, runCallbacks, translateBounds, internal) { 15091 if (translate === void 0) { 15092 translate = 0; 15093 } 15094 15095 if (speed === void 0) { 15096 speed = this.params.speed; 15097 } 15098 15099 if (runCallbacks === void 0) { 15100 runCallbacks = true; 15101 } 15102 15103 if (translateBounds === void 0) { 15104 translateBounds = true; 15105 } 15106 15107 var swiper = this; 15108 var params = swiper.params, 15109 wrapperEl = swiper.wrapperEl; 15110 15111 if (swiper.animating && params.preventInteractionOnTransition) { 15112 return false;
15113 } 15114 15115 var minTranslate = swiper.minTranslate(); 15116 var maxTranslate = swiper.maxTranslate(); 15117 var newTranslate; 15118 if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; 15119 swiper.updateProgress(newTranslate); 15120 15121 if (params.cssMode) { 15122 var isH = swiper.isHorizontal(); 15123 15124 if (speed === 0) { 15125 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate; 15126 } else { 15127 if (wrapperEl.scrollTo) { 15128 var _wrapperEl$scrollTo; 15129 15130 wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? 'left' : 'top'] = -newTranslate, _wrapperEl$scrollTo.behavior = 'smooth', _wrapperEl$scrollTo)); 15131 } else { 15132 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate; 15133 } 15134 } 15135 15136 return true; 15137 } 15138 15139 if (speed === 0) { 15140 swiper.setTransition(0); 15141 swiper.setTranslate(newTranslate); 15142 15143 if (runCallbacks) { 15144 swiper.emit('beforeTransitionStart', speed, internal); 15145 swiper.emit('transitionEnd'); 15146 } 15147 } else { 15148 swiper.setTransition(speed); 15149 swiper.setTranslate(newTranslate); 15150 15151 if (runCallbacks) { 15152 swiper.emit('beforeTransitionStart', speed, internal); 15153 swiper.emit('transitionStart'); 15154 } 15155 15156 if (!swiper.animating) { 15157 swiper.animating = true; 15158 15159 if (!swiper.onTranslateToWrapperTransitionEnd) { 15160 swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) { 15161 if (!swiper || swiper.destroyed) return; 15162 if (e.target !== this) return; 15163 swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); 15164 swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd); 15165 swiper.onTranslateToWrapperTransitionEnd = null; 15166 delete swiper.onTranslateToWrapperTransitionEnd; 15167 15168 if (runCallbacks) { 15169 swiper.emit('transitionEnd'); 15170 } 15171 }; 15172 } 15173 15174 swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); 15175 swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd); 15176 } 15177 } 15178 15179 return true; 15180 } 15181 15182 var translate = { 15183 getTranslate: getSwiperTranslate, 15184 setTranslate: setTranslate, 15185 minTranslate: minTranslate, 15186 maxTranslate: maxTranslate, 15187 translateTo: translateTo 15188 }; 15189 15190 function setTransition(duration, byController) { 15191 var swiper = this; 15192 15193 if (!swiper.params.cssMode) { 15194 swiper.$wrapperEl.transition(duration); 15195 } 15196 15197 swiper.emit('setTransition', duration, byController); 15198 } 15199 15200 function transitionStart(runCallbacks, direction) { 15201 if (runCallbacks === void 0) { 15202 runCallbacks = true; 15203 } 15204 15205 var swiper = this; 15206 var activeIndex = swiper.activeIndex, 15207 params = swiper.params, 15208 previousIndex = swiper.previousIndex; 15209 if (params.cssMode) return; 15210 15211 if (params.autoHeight) { 15212 swiper.updateAutoHeight(); 15213 } 15214 15215 var dir = direction; 15216 15217 if (!dir) { 15218 if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset'; 15219 } 15220 15221 swiper.emit('transitionStart'); 15222 15223 if (runCallbacks && activeIndex !== previousIndex) { 15224 if (dir === 'reset') { 15225 swiper.emit('slideResetTransitionStart'); 15226 return; 15227 } 15228 15229 swiper.emit('slideChangeTransitionStart'); 15230 15231 if (dir === 'next') { 15232 swiper.emit('slideNextTransitionStart'); 15233 } else { 15234 swiper.emit('slidePrevTransitionStart'); 15235 } 15236 } 15237 } 15238 15239 function transitionEnd(runCallbacks, direction) { 15240 if (runCallbacks === void 0) { 15241 runCallbacks = true; 15242 } 15243 15244 var swiper = this; 15245 var activeIndex = swiper.activeIndex, 15246 previousIndex = swiper.previousIndex, 15247 params = swiper.params; 15248 swiper.animating = false; 15249 if (params.cssMode) return; 15250 swiper.setTransition(0); 15251 var dir = direction; 15252 15253 if (!dir) { 15254 if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset'; 15255 } 15256 15257 swiper.emit('transitionEnd'); 15258 15259 if (runCallbacks && activeIndex !== previousIndex) { 15260 if (dir === 'reset') { 15261 swiper.emit('slideResetTransitionEnd'); 15262 return; 15263 } 15264 15265 swiper.emit('slideChangeTransitionEnd'); 15266 15267 if (dir === 'next') { 15268 swiper.emit('slideNextTransitionEnd'); 15269 } else { 15270 swiper.emit('slidePrevTransitionEnd'); 15271 } 15272 } 15273 } 15274 15275 var transition = { 15276 setTransition: setTransition, 15277 transitionStart: transitionStart, 15278 transitionEnd: transitionEnd 15279 }; 15280 15281 function slideTo(index, speed, runCallbacks, internal, initial) { 15282 if (index === void 0) { 15283 index = 0; 15284 } 15285 15286 if (speed === void 0) { 15287 speed = this.params.speed; 15288 } 15289 15290 if (runCallbacks === void 0) { 15291 runCallbacks = true; 15292 } 15293 15294 if (typeof index !== 'number' && typeof index !== 'string') { 15295 throw new Error("The 'index' argument cannot have type other than 'number' or 'string'. [" + _typeof(index) + "] given."); 15296 } 15297 15298 if (typeof index === 'string') { 15299 var indexAsNumber = parseInt(index, 10); 15300 var isValidNumber = isFinite(indexAsNumber); 15301 15302 if (!isValidNumber) { 15303 throw new Error("The passed-in 'index' (string) couldn't be converted to 'number'. [" + index + "] given."); 15304 } 15305 15306 index = indexAsNumber; 15307 } 15308 15309 var swiper = this; 15310 var slideIndex = index; 15311 if (slideIndex < 0) slideIndex = 0; 15312 var params = swiper.params, 15313 snapGrid = swiper.snapGrid, 15314 slidesGrid = swiper.slidesGrid, 15315 previousIndex = swiper.previousIndex, 15316 activeIndex = swiper.activeIndex, 15317 rtl = swiper.rtlTranslate, 15318 wrapperEl = swiper.wrapperEl, 15319 enabled = swiper.enabled; 15320 15321 if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) { 15322 return false;
15323 } 15324 15325 var skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex); 15326 var snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup); 15327 if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; 15328 15329 if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) { 15330 swiper.emit('beforeSlideChangeStart'); 15331 } 15332 15333 var translate = -snapGrid[snapIndex]; 15334 swiper.updateProgress(translate); 15335 15336 if (params.normalizeSlideIndex) { 15337 for (var i = 0; i < slidesGrid.length; i += 1) { 15338 var normalizedTranslate = -Math.floor(translate * 100); 15339 var normalizedGird = Math.floor(slidesGrid[i] * 100); 15340 var normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100); 15341 15342 if (typeof slidesGrid[i + 1] !== 'undefined') { 15343 if (normalizedTranslate >= normalizedGird && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGird) / 2) { 15344 slideIndex = i; 15345 } else if (normalizedTranslate >= normalizedGird && normalizedTranslate < normalizedGridNext) { 15346 slideIndex = i + 1; 15347 } 15348 } else if (normalizedTranslate >= normalizedGird) { 15349 slideIndex = i; 15350 } 15351 } 15352 } 15353 15354 if (swiper.initialized && slideIndex !== activeIndex) { 15355 if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) { 15356 return false; 15357 } 15358 15359 if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) { 15360 if ((activeIndex || 0) !== slideIndex) return false; 15361 } 15362 } 15363 15364 var direction; 15365 if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; 15366 15367 if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) { 15368 swiper.updateActiveIndex(slideIndex); 15369 15370 if (params.autoHeight) { 15371 swiper.updateAutoHeight(); 15372 } 15373 15374 swiper.updateSlidesClasses(); 15375 15376 if (params.effect !== 'slide') { 15377 swiper.setTranslate(translate); 15378 } 15379 15380 if (direction !== 'reset') { 15381 swiper.transitionStart(runCallbacks, direction); 15382 swiper.transitionEnd(runCallbacks, direction); 15383 } 15384 15385 return false; 15386 } 15387 15388 if (params.cssMode) { 15389 var isH = swiper.isHorizontal(); 15390 var t = -translate; 15391 15392 if (rtl) { 15393 t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t; 15394 } 15395 15396 if (speed === 0) { 15397 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t; 15398 } else { 15399 if (wrapperEl.scrollTo) { 15400 var _wrapperEl$scrollTo; 15401 15402 wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? 'left' : 'top'] = t, _wrapperEl$scrollTo.behavior = 'smooth', _wrapperEl$scrollTo)); 15403 } else { 15404 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t; 15405 } 15406 } 15407 15408 return true; 15409 } 15410 15411 if (speed === 0) { 15412 swiper.setTransition(0); 15413 swiper.setTranslate(translate); 15414 swiper.updateActiveIndex(slideIndex); 15415 swiper.updateSlidesClasses(); 15416 swiper.emit('beforeTransitionStart', speed, internal); 15417 swiper.transitionStart(runCallbacks, direction); 15418 swiper.transitionEnd(runCallbacks, direction); 15419 } else { 15420 swiper.setTransition(speed); 15421 swiper.setTranslate(translate); 15422 swiper.updateActiveIndex(slideIndex); 15423 swiper.updateSlidesClasses(); 15424 swiper.emit('beforeTransitionStart', speed, internal); 15425 swiper.transitionStart(runCallbacks, direction); 15426 15427 if (!swiper.animating) { 15428 swiper.animating = true; 15429 15430 if (!swiper.onSlideToWrapperTransitionEnd) { 15431 swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) { 15432 if (!swiper || swiper.destroyed) return; 15433 if (e.target !== this) return; 15434 swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); 15435 swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd); 15436 swiper.onSlideToWrapperTransitionEnd = null; 15437 delete swiper.onSlideToWrapperTransitionEnd; 15438 swiper.transitionEnd(runCallbacks, direction); 15439 }; 15440 } 15441 15442 swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); 15443 swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd); 15444 } 15445 } 15446 15447 return true; 15448 } 15449 15450 function slideToLoop(index, speed, runCallbacks, internal) { 15451 if (index === void 0) { 15452 index = 0; 15453 } 15454 15455 if (speed === void 0) { 15456 speed = this.params.speed; 15457 } 15458 15459 if (runCallbacks === void 0) { 15460 runCallbacks = true; 15461 } 15462 15463 var swiper = this; 15464 var newIndex = index; 15465 15466 if (swiper.params.loop) { 15467 newIndex += swiper.loopedSlides; 15468 } 15469 15470 return swiper.slideTo(newIndex, speed, runCallbacks, internal); 15471 } 15472 15473 function slideNext(speed, runCallbacks, internal) { 15474 if (speed === void 0) { 15475 speed = this.params.speed; 15476 } 15477 15478 if (runCallbacks === void 0) { 15479 runCallbacks = true; 15480 } 15481 15482 var swiper = this; 15483 var params = swiper.params, 15484 animating = swiper.animating, 15485 enabled = swiper.enabled; 15486 if (!enabled) return swiper; 15487 var increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup; 15488 15489 if (params.loop) { 15490 if (animating && params.loopPreventsSlide) return false;
15491 swiper.loopFix(); 15492 swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; 15493 } 15494 15495 return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal); 15496 } 15497 15498 function slidePrev(speed, runCallbacks, internal) { 15499 if (speed === void 0) { 15500 speed = this.params.speed; 15501 } 15502 15503 if (runCallbacks === void 0) { 15504 runCallbacks = true; 15505 } 15506 15507 var swiper = this; 15508 var params = swiper.params, 15509 animating = swiper.animating, 15510 snapGrid = swiper.snapGrid, 15511 slidesGrid = swiper.slidesGrid, 15512 rtlTranslate = swiper.rtlTranslate, 15513 enabled = swiper.enabled; 15514 if (!enabled) return swiper; 15515 15516 if (params.loop) { 15517 if (animating && params.loopPreventsSlide) return false; 15518 swiper.loopFix(); 15519 swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; 15520 } 15521 15522 var translate = rtlTranslate ? swiper.translate : -swiper.translate; 15523 15524 function normalize(val) { 15525 if (val < 0) return -Math.floor(Math.abs(val)); 15526 return Math.floor(val); 15527 } 15528 15529 var normalizedTranslate = normalize(translate); 15530 var normalizedSnapGrid = snapGrid.map(function (val) { 15531 return normalize(val); 15532 }); 15533 snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)]; 15534 var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1]; 15535 15536 if (typeof prevSnap === 'undefined' && params.cssMode) { 15537 snapGrid.forEach(function (snap) { 15538 if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap; 15539 }); 15540 } 15541 15542 var prevIndex; 15543 15544 if (typeof prevSnap !== 'undefined') { 15545 prevIndex = slidesGrid.indexOf(prevSnap); 15546 if (prevIndex < 0) prevIndex = swiper.activeIndex - 1; 15547 } 15548 15549 return swiper.slideTo(prevIndex, speed, runCallbacks, internal); 15550 } 15551 15552 function slideReset(speed, runCallbacks, internal) { 15553 if (speed === void 0) { 15554 speed = this.params.speed; 15555 } 15556 15557 if (runCallbacks === void 0) { 15558 runCallbacks = true; 15559 } 15560 15561 var swiper = this; 15562 return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal); 15563 } 15564 15565 function slideToClosest(speed, runCallbacks, internal, threshold) { 15566 if (speed === void 0) { 15567 speed = this.params.speed; 15568 } 15569 15570 if (runCallbacks === void 0) { 15571 runCallbacks = true; 15572 } 15573 15574 if (threshold === void 0) { 15575 threshold = 0.5; 15576 } 15577 15578 var swiper = this; 15579 var index = swiper.activeIndex; 15580 var skip = Math.min(swiper.params.slidesPerGroupSkip, index); 15581 var snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup); 15582 var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; 15583 15584 if (translate >= swiper.snapGrid[snapIndex]) { 15585 var currentSnap = swiper.snapGrid[snapIndex]; 15586 var nextSnap = swiper.snapGrid[snapIndex + 1]; 15587 15588 if (translate - currentSnap > (nextSnap - currentSnap) * threshold) { 15589 index += swiper.params.slidesPerGroup; 15590 } 15591 } else { 15592 var prevSnap = swiper.snapGrid[snapIndex - 1]; 15593 var _currentSnap = swiper.snapGrid[snapIndex]; 15594 15595 if (translate - prevSnap <= (_currentSnap - prevSnap) * threshold) { 15596 index -= swiper.params.slidesPerGroup; 15597 } 15598 } 15599 15600 index = Math.max(index, 0); 15601 index = Math.min(index, swiper.slidesGrid.length - 1); 15602 return swiper.slideTo(index, speed, runCallbacks, internal); 15603 } 15604 15605 function slideToClickedSlide() { 15606 var swiper = this; 15607 var params = swiper.params, 15608 $wrapperEl = swiper.$wrapperEl; 15609 var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView; 15610 var slideToIndex = swiper.clickedIndex; 15611 var realIndex; 15612 15613 if (params.loop) { 15614 if (swiper.animating) return; 15615 realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10); 15616 15617 if (params.centeredSlides) { 15618 if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) { 15619 swiper.loopFix(); 15620 slideToIndex = $wrapperEl.children("." + params.slideClass + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + params.slideDuplicateClass + ")").eq(0).index(); 15621 nextTick(function () { 15622 swiper.slideTo(slideToIndex); 15623 }); 15624 } else { 15625 swiper.slideTo(slideToIndex); 15626 } 15627 } else if (slideToIndex > swiper.slides.length - slidesPerView) { 15628 swiper.loopFix(); 15629 slideToIndex = $wrapperEl.children("." + params.slideClass + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + params.slideDuplicateClass + ")").eq(0).index(); 15630 nextTick(function () { 15631 swiper.slideTo(slideToIndex); 15632 }); 15633 } else { 15634 swiper.slideTo(slideToIndex); 15635 } 15636 } else { 15637 swiper.slideTo(slideToIndex); 15638 } 15639 } 15640 15641 var slide = { 15642 slideTo: slideTo, 15643 slideToLoop: slideToLoop, 15644 slideNext: slideNext, 15645 slidePrev: slidePrev, 15646 slideReset: slideReset, 15647 slideToClosest: slideToClosest, 15648 slideToClickedSlide: slideToClickedSlide 15649 }; 15650 15651 function loopCreate() { 15652 var swiper = this; 15653 var document = getDocument(); 15654 var params = swiper.params, 15655 $wrapperEl = swiper.$wrapperEl; 15656 $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass).remove(); 15657 var slides = $wrapperEl.children("." + params.slideClass); 15658 15659 if (params.loopFillGroupWithBlank) { 15660 var blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup; 15661 15662 if (blankSlidesNum !== params.slidesPerGroup) { 15663 for (var i = 0; i < blankSlidesNum; i += 1) { 15664 var blankNode = $(document.createElement('div')).addClass(params.slideClass + " " + params.slideBlankClass); 15665 $wrapperEl.append(blankNode); 15666 } 15667 15668 slides = $wrapperEl.children("." + params.slideClass); 15669 } 15670 } 15671 15672 if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length; 15673 swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10)); 15674 swiper.loopedSlides += params.loopAdditionalSlides; 15675 15676 if (swiper.loopedSlides > slides.length) { 15677 swiper.loopedSlides = slides.length; 15678 } 15679 15680 var prependSlides = []; 15681 var appendSlides = []; 15682 slides.each(function (el, index) { 15683 var slide = $(el); 15684 15685 if (index < swiper.loopedSlides) { 15686 appendSlides.push(el); 15687 } 15688 15689 if (index < slides.length && index >= slides.length - swiper.loopedSlides) { 15690 prependSlides.push(el); 15691 } 15692 15693 slide.attr('data-swiper-slide-index', index); 15694 }); 15695 15696 for (var _i = 0; _i < appendSlides.length; _i += 1) { 15697 $wrapperEl.append($(appendSlides[_i].cloneNode(true)).addClass(params.slideDuplicateClass)); 15698 } 15699 15700 for (var _i2 = prependSlides.length - 1; _i2 >= 0; _i2 -= 1) { 15701 $wrapperEl.prepend($(prependSlides[_i2].cloneNode(true)).addClass(params.slideDuplicateClass)); 15702 } 15703 } 15704 15705 function loopFix() { 15706 var swiper = this; 15707 swiper.emit('beforeLoopFix'); 15708 var activeIndex = swiper.activeIndex, 15709 slides = swiper.slides, 15710 loopedSlides = swiper.loopedSlides, 15711 allowSlidePrev = swiper.allowSlidePrev, 15712 allowSlideNext = swiper.allowSlideNext, 15713 snapGrid = swiper.snapGrid, 15714 rtl = swiper.rtlTranslate; 15715 var newIndex; 15716 swiper.allowSlidePrev = true; 15717 swiper.allowSlideNext = true;
15718 var snapTranslate = -snapGrid[activeIndex]; 15719 var diff = snapTranslate - swiper.getTranslate(); 15720 15721 if (activeIndex < loopedSlides) { 15722 newIndex = slides.length - loopedSlides * 3 + activeIndex; 15723 newIndex += loopedSlides; 15724 var slideChanged = swiper.slideTo(newIndex, 0, false, true); 15725 15726 if (slideChanged && diff !== 0) { 15727 swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff); 15728 } 15729 } else if (activeIndex >= slides.length - loopedSlides) { 15730 newIndex = -slides.length + activeIndex + loopedSlides; 15731 newIndex += loopedSlides; 15732 15733 var _slideChanged = swiper.slideTo(newIndex, 0, false, true); 15734 15735 if (_slideChanged && diff !== 0) { 15736 swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff); 15737 } 15738 } 15739 15740 swiper.allowSlidePrev = allowSlidePrev; 15741 swiper.allowSlideNext = allowSlideNext; 15742 swiper.emit('loopFix'); 15743 } 15744 15745 function loopDestroy() { 15746 var swiper = this; 15747 var $wrapperEl = swiper.$wrapperEl, 15748 params = swiper.params, 15749 slides = swiper.slides; 15750 $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + ",." + params.slideClass + "." + params.slideBlankClass).remove(); 15751 slides.removeAttr('data-swiper-slide-index'); 15752 } 15753 15754 var loop = { 15755 loopCreate: loopCreate, 15756 loopFix: loopFix, 15757 loopDestroy: loopDestroy 15758 }; 15759 15760 function setGrabCursor(moving) { 15761 var swiper = this; 15762 if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return; 15763 var el = swiper.el; 15764 el.style.cursor = 'move'; 15765 el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab'; 15766 el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab'; 15767 el.style.cursor = moving ? 'grabbing' : 'grab'; 15768 } 15769 15770 function unsetGrabCursor() { 15771 var swiper = this; 15772 15773 if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) { 15774 return; 15775 } 15776 15777 swiper.el.style.cursor = ''; 15778 } 15779 15780 var grabCursor = { 15781 setGrabCursor: setGrabCursor, 15782 unsetGrabCursor: unsetGrabCursor 15783 }; 15784 15785 function appendSlide(slides) { 15786 var swiper = this; 15787 var $wrapperEl = swiper.$wrapperEl, 15788 params = swiper.params; 15789 15790 if (params.loop) { 15791 swiper.loopDestroy(); 15792 } 15793 15794 if (_typeof(slides) === 'object' && 'length' in slides) { 15795 for (var i = 0; i < slides.length; i += 1) { 15796 if (slides[i]) $wrapperEl.append(slides[i]); 15797 } 15798 } else { 15799 $wrapperEl.append(slides); 15800 } 15801 15802 if (params.loop) { 15803 swiper.loopCreate(); 15804 } 15805 15806 if (!(params.observer && swiper.support.observer)) { 15807 swiper.update(); 15808 } 15809 } 15810 15811 function prependSlide(slides) { 15812 var swiper = this; 15813 var params = swiper.params, 15814 $wrapperEl = swiper.$wrapperEl, 15815 activeIndex = swiper.activeIndex; 15816 15817 if (params.loop) { 15818 swiper.loopDestroy(); 15819 } 15820 15821 var newActiveIndex = activeIndex + 1; 15822 15823 if (_typeof(slides) === 'object' && 'length' in slides) { 15824 for (var i = 0; i < slides.length; i += 1) { 15825 if (slides[i]) $wrapperEl.prepend(slides[i]); 15826 } 15827 15828 newActiveIndex = activeIndex + slides.length; 15829 } else { 15830 $wrapperEl.prepend(slides); 15831 } 15832 15833 if (params.loop) { 15834 swiper.loopCreate(); 15835 } 15836 15837 if (!(params.observer && swiper.support.observer)) { 15838 swiper.update(); 15839 } 15840 15841 swiper.slideTo(newActiveIndex, 0, false); 15842 } 15843 15844 function addSlide(index, slides) { 15845 var swiper = this; 15846 var $wrapperEl = swiper.$wrapperEl, 15847 params = swiper.params, 15848 activeIndex = swiper.activeIndex; 15849 var activeIndexBuffer = activeIndex; 15850 15851 if (params.loop) { 15852 activeIndexBuffer -= swiper.loopedSlides; 15853 swiper.loopDestroy(); 15854 swiper.slides = $wrapperEl.children("." + params.slideClass); 15855 } 15856 15857 var baseLength = swiper.slides.length; 15858 15859 if (index <= 0) { 15860 swiper.prependSlide(slides); 15861 return; 15862 } 15863 15864 if (index >= baseLength) { 15865 swiper.appendSlide(slides); 15866 return; 15867 } 15868 15869 var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer; 15870 var slidesBuffer = []; 15871 15872 for (var i = baseLength - 1; i >= index; i -= 1) { 15873 var currentSlide = swiper.slides.eq(i); 15874 currentSlide.remove(); 15875 slidesBuffer.unshift(currentSlide); 15876 } 15877 15878 if (_typeof(slides) === 'object' && 'length' in slides) { 15879 for (var _i = 0; _i < slides.length; _i += 1) { 15880 if (slides[_i]) $wrapperEl.append(slides[_i]); 15881 } 15882 15883 newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer; 15884 } else { 15885 $wrapperEl.append(slides); 15886 } 15887 15888 for (var _i2 = 0; _i2 < slidesBuffer.length; _i2 += 1) { 15889 $wrapperEl.append(slidesBuffer[_i2]); 15890 } 15891 15892 if (params.loop) { 15893 swiper.loopCreate(); 15894 } 15895 15896 if (!(params.observer && swiper.support.observer)) {
15897 swiper.update(); 15898 } 15899 15900 if (params.loop) { 15901 swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); 15902 } else { 15903 swiper.slideTo(newActiveIndex, 0, false); 15904 } 15905 } 15906 15907 function removeSlide(slidesIndexes) { 15908 var swiper = this; 15909 var params = swiper.params, 15910 $wrapperEl = swiper.$wrapperEl, 15911 activeIndex = swiper.activeIndex; 15912 var activeIndexBuffer = activeIndex; 15913 15914 if (params.loop) { 15915 activeIndexBuffer -= swiper.loopedSlides; 15916 swiper.loopDestroy(); 15917 swiper.slides = $wrapperEl.children("." + params.slideClass); 15918 } 15919 15920 var newActiveIndex = activeIndexBuffer; 15921 var indexToRemove; 15922 15923 if (_typeof(slidesIndexes) === 'object' && 'length' in slidesIndexes) { 15924 for (var i = 0; i < slidesIndexes.length; i += 1) { 15925 indexToRemove = slidesIndexes[i]; 15926 if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove(); 15927 if (indexToRemove < newActiveIndex) newActiveIndex -= 1; 15928 } 15929 15930 newActiveIndex = Math.max(newActiveIndex, 0); 15931 } else { 15932 indexToRemove = slidesIndexes; 15933 if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove(); 15934 if (indexToRemove < newActiveIndex) newActiveIndex -= 1; 15935 newActiveIndex = Math.max(newActiveIndex, 0); 15936 } 15937 15938 if (params.loop) { 15939 swiper.loopCreate(); 15940 } 15941 15942 if (!(params.observer && swiper.support.observer)) { 15943 swiper.update(); 15944 } 15945 15946 if (params.loop) { 15947 swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); 15948 } else { 15949 swiper.slideTo(newActiveIndex, 0, false); 15950 } 15951 } 15952 15953 function removeAllSlides() { 15954 var swiper = this; 15955 var slidesIndexes = []; 15956 15957 for (var i = 0; i < swiper.slides.length; i += 1) { 15958 slidesIndexes.push(i); 15959 } 15960 15961 swiper.removeSlide(slidesIndexes); 15962 } 15963 15964 var manipulation = { 15965 appendSlide: appendSlide, 15966 prependSlide: prependSlide, 15967 addSlide: addSlide, 15968 removeSlide: removeSlide, 15969 removeAllSlides: removeAllSlides 15970 }; 15971 15972 function onTouchStart(event) { 15973 var swiper = this; 15974 var document = getDocument(); 15975 var window = getWindow(); 15976 var data = swiper.touchEventsData; 15977 var params = swiper.params, 15978 touches = swiper.touches, 15979 enabled = swiper.enabled; 15980 if (!enabled) return; 15981 15982 if (swiper.animating && params.preventInteractionOnTransition) { 15983 return; 15984 } 15985 15986 var e = event; 15987 if (e.originalEvent) e = e.originalEvent; 15988 var $targetEl = $(e.target); 15989 15990 if (params.touchEventsTarget === 'wrapper') { 15991 if (!$targetEl.closest(swiper.wrapperEl).length) return; 15992 } 15993 15994 data.isTouchEvent = e.type === 'touchstart'; 15995 if (!data.isTouchEvent && 'which' in e && e.which === 3) return; 15996 if (!data.isTouchEvent && 'button' in e && e.button > 0) return; 15997 if (data.isTouched && data.isMoved) return; 15998 var swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== ''; 15999 16000 if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) { 16001 $targetEl = $(event.path[0]); 16002 } 16003 16004 if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : "." + params.noSwipingClass)[0]) { 16005 swiper.allowClick = true; 16006 return; 16007 } 16008 16009 if (params.swipeHandler) { 16010 if (!$targetEl.closest(params.swipeHandler)[0]) return; 16011 } 16012 16013 touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; 16014 touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; 16015 var startX = touches.currentX; 16016 var startY = touches.currentY; 16017 var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection; 16018 var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold; 16019 16020 if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) { 16021 if (edgeSwipeDetection === 'prevent') { 16022 event.preventDefault(); 16023 } else { 16024 return; 16025 } 16026 } 16027 16028 extend(data, { 16029 isTouched: true, 16030 isMoved: false, 16031 allowTouchCallbacks: true, 16032 isScrolling: undefined, 16033 startMoving: undefined 16034 }); 16035 touches.startX = startX; 16036 touches.startY = startY;
16037 data.touchStartTime = now(); 16038 swiper.allowClick = true; 16039 swiper.updateSize(); 16040 swiper.swipeDirection = undefined; 16041 if (params.threshold > 0) data.allowThresholdMove = false; 16042 16043 if (e.type !== 'touchstart') { 16044 var preventDefault = true; 16045 if ($targetEl.is(data.formElements)) preventDefault = false; 16046 16047 if (document.activeElement && $(document.activeElement).is(data.formElements) && document.activeElement !== $targetEl[0]) { 16048 document.activeElement.blur(); 16049 } 16050 16051 var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault; 16052 16053 if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) { 16054 e.preventDefault(); 16055 } 16056 } 16057 16058 swiper.emit('touchStart', e); 16059 } 16060 16061 function onTouchMove(event) { 16062 var document = getDocument(); 16063 var swiper = this; 16064 var data = swiper.touchEventsData; 16065 var params = swiper.params, 16066 touches = swiper.touches, 16067 rtl = swiper.rtlTranslate, 16068 enabled = swiper.enabled; 16069 if (!enabled) return; 16070 var e = event; 16071 if (e.originalEvent) e = e.originalEvent; 16072 16073 if (!data.isTouched) { 16074 if (data.startMoving && data.isScrolling) { 16075 swiper.emit('touchMoveOpposite', e); 16076 } 16077 16078 return; 16079 } 16080 16081 if (data.isTouchEvent && e.type !== 'touchmove') return; 16082 var targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]); 16083 var pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX; 16084 var pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY; 16085 16086 if (e.preventedByNestedSwiper) { 16087 touches.startX = pageX; 16088 touches.startY = pageY; 16089 return; 16090 } 16091 16092 if (!swiper.allowTouchMove) { 16093 swiper.allowClick = false; 16094 16095 if (data.isTouched) { 16096 extend(touches, { 16097 startX: pageX, 16098 startY: pageY, 16099 currentX: pageX, 16100 currentY: pageY 16101 }); 16102 data.touchStartTime = now(); 16103 } 16104 16105 return; 16106 } 16107 16108 if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) { 16109 if (swiper.isVertical()) { 16110 if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) { 16111 data.isTouched = false; 16112 data.isMoved = false; 16113 return; 16114 } 16115 } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) { 16116 return; 16117 } 16118 } 16119 16120 if (data.isTouchEvent && document.activeElement) { 16121 if (e.target === document.activeElement && $(e.target).is(data.formElements)) { 16122 data.isMoved = true; 16123 swiper.allowClick = false; 16124 return; 16125 } 16126 } 16127 16128 if (data.allowTouchCallbacks) { 16129 swiper.emit('touchMove', e); 16130 } 16131 16132 if (e.targetTouches && e.targetTouches.length > 1) return; 16133 touches.currentX = pageX; 16134 touches.currentY = pageY; 16135 var diffX = touches.currentX - touches.startX; 16136 var diffY = touches.currentY - touches.startY; 16137 if (swiper.params.threshold && Math.sqrt(Math.pow(diffX, 2) + Math.pow(diffY, 2)) < swiper.params.threshold) return; 16138 16139 if (typeof data.isScrolling === 'undefined') { 16140 var touchAngle; 16141 16142 if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) { 16143 data.isScrolling = false; 16144 } else { 16145 if (diffX * diffX + diffY * diffY >= 25) { 16146 touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI; 16147 data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle; 16148 } 16149 } 16150 } 16151 16152 if (data.isScrolling) { 16153 swiper.emit('touchMoveOpposite', e); 16154 } 16155 16156 if (typeof data.startMoving === 'undefined') { 16157 if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) { 16158 data.startMoving = true; 16159 } 16160 } 16161 16162 if (data.isScrolling) { 16163 data.isTouched = false;
16164 return; 16165 } 16166 16167 if (!data.startMoving) { 16168 return; 16169 } 16170 16171 swiper.allowClick = false; 16172 16173 if (!params.cssMode && e.cancelable) { 16174 e.preventDefault(); 16175 } 16176 16177 if (params.touchMoveStopPropagation && !params.nested) { 16178 e.stopPropagation(); 16179 } 16180 16181 if (!data.isMoved) { 16182 if (params.loop) { 16183 swiper.loopFix(); 16184 } 16185 16186 data.startTranslate = swiper.getTranslate(); 16187 swiper.setTransition(0); 16188 16189 if (swiper.animating) { 16190 swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend'); 16191 } 16192 16193 data.allowMomentumBounce = false; 16194 16195 if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { 16196 swiper.setGrabCursor(true); 16197 } 16198 16199 swiper.emit('sliderFirstMove', e); 16200 } 16201 16202 swiper.emit('sliderMove', e); 16203 data.isMoved = true; 16204 var diff = swiper.isHorizontal() ? diffX : diffY; 16205 touches.diff = diff; 16206 diff *= params.touchRatio; 16207 if (rtl) diff = -diff; 16208 swiper.swipeDirection = diff > 0 ? 'prev' : 'next'; 16209 data.currentTranslate = diff + data.startTranslate; 16210 var disableParentSwiper = true; 16211 var resistanceRatio = params.resistanceRatio; 16212 16213 if (params.touchReleaseOnEdges) { 16214 resistanceRatio = 0; 16215 } 16216 16217 if (diff > 0 && data.currentTranslate > swiper.minTranslate()) { 16218 disableParentSwiper = false;
16219 if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + Math.pow(-swiper.minTranslate() + data.startTranslate + diff, resistanceRatio); 16220 } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) { 16221 disableParentSwiper = false; 16222 if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - Math.pow(swiper.maxTranslate() - data.startTranslate - diff, resistanceRatio); 16223 } 16224 16225 if (disableParentSwiper) { 16226 e.preventedByNestedSwiper = true; 16227 } 16228 16229 if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) { 16230 data.currentTranslate = data.startTranslate; 16231 } 16232 16233 if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) { 16234 data.currentTranslate = data.startTranslate; 16235 } 16236 16237 if (!swiper.allowSlidePrev && !swiper.allowSlideNext) { 16238 data.currentTranslate = data.startTranslate; 16239 } 16240 16241 if (params.threshold > 0) { 16242 if (Math.abs(diff) > params.threshold || data.allowThresholdMove) { 16243 if (!data.allowThresholdMove) { 16244 data.allowThresholdMove = true; 16245 touches.startX = touches.currentX; 16246 touches.startY = touches.currentY; 16247 data.currentTranslate = data.startTranslate; 16248 touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY; 16249 return; 16250 } 16251 } else { 16252 data.currentTranslate = data.startTranslate; 16253 return; 16254 } 16255 } 16256 16257 if (!params.followFinger || params.cssMode) return; 16258 16259 if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) { 16260 swiper.updateActiveIndex(); 16261 swiper.updateSlidesClasses(); 16262 } 16263 16264 if (params.freeMode) { 16265 if (data.velocities.length === 0) { 16266 data.velocities.push({ 16267 position: touches[swiper.isHorizontal() ? 'startX' : 'startY'], 16268 time: data.touchStartTime 16269 }); 16270 } 16271 16272 data.velocities.push({ 16273 position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'], 16274 time: now() 16275 }); 16276 } 16277 16278 swiper.updateProgress(data.currentTranslate); 16279 swiper.setTranslate(data.currentTranslate); 16280 } 16281 16282 function onTouchEnd(event) { 16283 var swiper = this; 16284 var data = swiper.touchEventsData; 16285 var params = swiper.params, 16286 touches = swiper.touches, 16287 rtl = swiper.rtlTranslate, 16288 $wrapperEl = swiper.$wrapperEl, 16289 slidesGrid = swiper.slidesGrid, 16290 snapGrid = swiper.snapGrid, 16291 enabled = swiper.enabled; 16292 if (!enabled) return; 16293 var e = event; 16294 if (e.originalEvent) e = e.originalEvent; 16295 16296 if (data.allowTouchCallbacks) { 16297 swiper.emit('touchEnd', e); 16298 } 16299 16300 data.allowTouchCallbacks = false; 16301 16302 if (!data.isTouched) { 16303 if (data.isMoved && params.grabCursor) { 16304 swiper.setGrabCursor(false); 16305 } 16306 16307 data.isMoved = false; 16308 data.startMoving = false; 16309 return; 16310 } 16311 16312 if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { 16313 swiper.setGrabCursor(false); 16314 } 16315 16316 var touchEndTime = now(); 16317 var timeDiff = touchEndTime - data.touchStartTime; 16318 16319 if (swiper.allowClick) { 16320 swiper.updateClickedSlide(e); 16321 swiper.emit('tap click', e); 16322 16323 if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) { 16324 swiper.emit('doubleTap doubleClick', e); 16325 } 16326 } 16327 16328 data.lastClickTime = now(); 16329 nextTick(function () { 16330 if (!swiper.destroyed) swiper.allowClick = true; 16331 }); 16332 16333 if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) { 16334 data.isTouched = false; 16335 data.isMoved = false; 16336 data.startMoving = false; 16337 return; 16338 } 16339 16340 data.isTouched = false; 16341 data.isMoved = false; 16342 data.startMoving = false; 16343 var currentPos; 16344 16345 if (params.followFinger) { 16346 currentPos = rtl ? swiper.translate : -swiper.translate; 16347 } else { 16348 currentPos = -data.currentTranslate; 16349 } 16350 16351 if (params.cssMode) { 16352 return; 16353 } 16354 16355 if (params.freeMode) {
16356 if (currentPos < -swiper.minTranslate()) { 16357 swiper.slideTo(swiper.activeIndex); 16358 return; 16359 } 16360 16361 if (currentPos > -swiper.maxTranslate()) { 16362 if (swiper.slides.length < snapGrid.length) { 16363 swiper.slideTo(snapGrid.length - 1); 16364 } else { 16365 swiper.slideTo(swiper.slides.length - 1); 16366 } 16367 16368 return; 16369 } 16370 16371 if (params.freeModeMomentum) { 16372 if (data.velocities.length > 1) { 16373 var lastMoveEvent = data.velocities.pop(); 16374 var velocityEvent = data.velocities.pop(); 16375 var distance = lastMoveEvent.position - velocityEvent.position; 16376 var time = lastMoveEvent.time - velocityEvent.time; 16377 swiper.velocity = distance / time; 16378 swiper.velocity /= 2; 16379 16380 if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) { 16381 swiper.velocity = 0; 16382 } 16383 16384 if (time > 150 || now() - lastMoveEvent.time > 300) { 16385 swiper.velocity = 0; 16386 } 16387 } else { 16388 swiper.velocity = 0; 16389 } 16390 16391 swiper.velocity *= params.freeModeMomentumVelocityRatio; 16392 data.velocities.length = 0; 16393 var momentumDuration = 1000 * params.freeModeMomentumRatio; 16394 var momentumDistance = swiper.velocity * momentumDuration; 16395 var newPosition = swiper.translate + momentumDistance; 16396 if (rtl) newPosition = -newPosition; 16397 var doBounce = false; 16398 var afterBouncePosition; 16399 var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio; 16400 var needsLoopFix; 16401 16402 if (newPosition < swiper.maxTranslate()) { 16403 if (params.freeModeMomentumBounce) { 16404 if (newPosition + swiper.maxTranslate() < -bounceAmount) { 16405 newPosition = swiper.maxTranslate() - bounceAmount; 16406 } 16407 16408 afterBouncePosition = swiper.maxTranslate(); 16409 doBounce = true; 16410 data.allowMomentumBounce = true; 16411 } else { 16412 newPosition = swiper.maxTranslate(); 16413 } 16414 16415 if (params.loop && params.centeredSlides) needsLoopFix = true; 16416 } else if (newPosition > swiper.minTranslate()) { 16417 if (params.freeModeMomentumBounce) { 16418 if (newPosition - swiper.minTranslate() > bounceAmount) { 16419 newPosition = swiper.minTranslate() + bounceAmount; 16420 } 16421 16422 afterBouncePosition = swiper.minTranslate(); 16423 doBounce = true; 16424 data.allowMomentumBounce = true; 16425 } else { 16426 newPosition = swiper.minTranslate(); 16427 } 16428 16429 if (params.loop && params.centeredSlides) needsLoopFix = true; 16430 } else if (params.freeModeSticky) { 16431 var nextSlide; 16432 16433 for (var j = 0; j < snapGrid.length; j += 1) { 16434 if (snapGrid[j] > -newPosition) { 16435 nextSlide = j; 16436 break; 16437 } 16438 } 16439 16440 if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') { 16441 newPosition = snapGrid[nextSlide]; 16442 } else { 16443 newPosition = snapGrid[nextSlide - 1]; 16444 } 16445 16446 newPosition = -newPosition; 16447 } 16448 16449 if (needsLoopFix) { 16450 swiper.once('transitionEnd', function () { 16451 swiper.loopFix(); 16452 }); 16453 } 16454 16455 if (swiper.velocity !== 0) { 16456 if (rtl) { 16457 momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity); 16458 } else { 16459 momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity); 16460 } 16461 16462 if (params.freeModeSticky) { 16463 var moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate); 16464 var currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex]; 16465 16466 if (moveDistance < currentSlideSize) { 16467 momentumDuration = params.speed; 16468 } else if (moveDistance < 2 * currentSlideSize) { 16469 momentumDuration = params.speed * 1.5; 16470 } else { 16471 momentumDuration = params.speed * 2.5; 16472 } 16473 } 16474 } else if (params.freeModeSticky) { 16475 swiper.slideToClosest(); 16476 return; 16477 } 16478 16479 if (params.freeModeMomentumBounce && doBounce) { 16480 swiper.updateProgress(afterBouncePosition); 16481 swiper.setTransition(momentumDuration); 16482 swiper.setTranslate(newPosition); 16483 swiper.transitionStart(true, swiper.swipeDirection); 16484 swiper.animating = true; 16485 $wrapperEl.transitionEnd(function () { 16486 if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return; 16487 swiper.emit('momentumBounce'); 16488 swiper.setTransition(params.speed); 16489 setTimeout(function () { 16490 swiper.setTranslate(afterBouncePosition); 16491 $wrapperEl.transitionEnd(function () { 16492 if (!swiper || swiper.destroyed) return; 16493 swiper.transitionEnd(); 16494 }); 16495 }, 0); 16496 }); 16497 } else if (swiper.velocity) { 16498 swiper.updateProgress(newPosition); 16499 swiper.setTransition(momentumDuration); 16500 swiper.setTranslate(newPosition); 16501 swiper.transitionStart(true, swiper.swipeDirection); 16502 16503 if (!swiper.animating) { 16504 swiper.animating = true; 16505 $wrapperEl.transitionEnd(function () { 16506 if (!swiper || swiper.destroyed) return; 16507 swiper.transitionEnd(); 16508 }); 16509 } 16510 } else { 16511 swiper.emit('_freeModeNoMomentumRelease'); 16512 swiper.updateProgress(newPosition); 16513 } 16514 16515 swiper.updateActiveIndex(); 16516 swiper.updateSlidesClasses(); 16517 } else if (params.freeModeSticky) { 16518 swiper.slideToClosest(); 16519 return; 16520 } else if (params.freeMode) { 16521 swiper.emit('_freeModeNoMomentumRelease'); 16522 } 16523 16524 if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) { 16525 swiper.updateProgress(); 16526 swiper.updateActiveIndex(); 16527 swiper.updateSlidesClasses(); 16528 } 16529 16530 return; 16531 } 16532 16533 var stopIndex = 0; 16534 var groupSize = swiper.slidesSizesGrid[0]; 16535 16536 for (var i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) { 16537 var _increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; 16538 16539 if (typeof slidesGrid[i + _increment] !== 'undefined') { 16540 if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + _increment]) { 16541 stopIndex = i; 16542 groupSize = slidesGrid[i + _increment] - slidesGrid[i]; 16543 } 16544 } else if (currentPos >= slidesGrid[i]) { 16545 stopIndex = i; 16546 groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2]; 16547 } 16548 } 16549 16550 var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize; 16551 var increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; 16552 16553 if (timeDiff > params.longSwipesMs) { 16554 if (!params.longSwipes) { 16555 swiper.slideTo(swiper.activeIndex); 16556 return; 16557 } 16558 16559 if (swiper.swipeDirection === 'next') { 16560 if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex); 16561 } 16562 16563 if (swiper.swipeDirection === 'prev') { 16564 if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex); 16565 } 16566 } else { 16567 if (!params.shortSwipes) { 16568 swiper.slideTo(swiper.activeIndex); 16569 return; 16570 } 16571 16572 var isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl); 16573 16574 if (!isNavButtonTarget) { 16575 if (swiper.swipeDirection === 'next') { 16576 swiper.slideTo(stopIndex + increment); 16577 } 16578 16579 if (swiper.swipeDirection === 'prev') { 16580 swiper.slideTo(stopIndex); 16581 } 16582 } else if (e.target === swiper.navigation.nextEl) { 16583 swiper.slideTo(stopIndex + increment); 16584 } else { 16585 swiper.slideTo(stopIndex); 16586 } 16587 } 16588 } 16589 16590 function onResize() { 16591 var swiper = this; 16592 var params = swiper.params, 16593 el = swiper.el; 16594 if (el && el.offsetWidth === 0) return; 16595 16596 if (params.breakpoints) { 16597 swiper.setBreakpoint(); 16598 } 16599 16600 var allowSlideNext = swiper.allowSlideNext, 16601 allowSlidePrev = swiper.allowSlidePrev, 16602 snapGrid = swiper.snapGrid; 16603 swiper.allowSlideNext = true; 16604 swiper.allowSlidePrev = true; 16605 swiper.updateSize(); 16606 swiper.updateSlides(); 16607 swiper.updateSlidesClasses(); 16608 16609 if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) { 16610 swiper.slideTo(swiper.slides.length - 1, 0, false, true); 16611 } else { 16612 swiper.slideTo(swiper.activeIndex, 0, false, true); 16613 } 16614 16615 if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) { 16616 swiper.autoplay.run(); 16617 } 16618 16619 swiper.allowSlidePrev = allowSlidePrev; 16620 swiper.allowSlideNext = allowSlideNext; 16621 16622 if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) { 16623 swiper.checkOverflow(); 16624 } 16625 } 16626 16627 function onClick(e) { 16628 var swiper = this; 16629 if (!swiper.enabled) return; 16630 16631 if (!swiper.allowClick) { 16632 if (swiper.params.preventClicks) e.preventDefault(); 16633 16634 if (swiper.params.preventClicksPropagation && swiper.animating) { 16635 e.stopPropagation(); 16636 e.stopImmediatePropagation(); 16637 } 16638 } 16639 } 16640 16641 function onScroll() { 16642 var swiper = this; 16643 var wrapperEl = swiper.wrapperEl, 16644 rtlTranslate = swiper.rtlTranslate, 16645 enabled = swiper.enabled; 16646 if (!enabled) return; 16647 swiper.previousTranslate = swiper.translate; 16648 16649 if (swiper.isHorizontal()) { 16650 if (rtlTranslate) { 16651 swiper.translate = wrapperEl.scrollWidth - wrapperEl.offsetWidth - wrapperEl.scrollLeft; 16652 } else { 16653 swiper.translate = -wrapperEl.scrollLeft; 16654 } 16655 } else { 16656 swiper.translate = -wrapperEl.scrollTop; 16657 } 16658 16659 if (swiper.translate === -0) swiper.translate = 0; 16660 swiper.updateActiveIndex(); 16661 swiper.updateSlidesClasses(); 16662 var newProgress; 16663 var translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 16664 16665 if (translatesDiff === 0) { 16666 newProgress = 0; 16667 } else { 16668 newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff; 16669 } 16670 16671 if (newProgress !== swiper.progress) { 16672 swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate); 16673 } 16674 16675 swiper.emit('setTranslate', swiper.translate, false); 16676 } 16677 16678 var dummyEventAttached = false;
16679 16680 function dummyEventListener() {} 16681 16682 function attachEvents() { 16683 var swiper = this; 16684 var document = getDocument(); 16685 var params = swiper.params, 16686 touchEvents = swiper.touchEvents, 16687 el = swiper.el, 16688 wrapperEl = swiper.wrapperEl, 16689 device = swiper.device, 16690 support = swiper.support; 16691 swiper.onTouchStart = onTouchStart.bind(swiper); 16692 swiper.onTouchMove = onTouchMove.bind(swiper); 16693 swiper.onTouchEnd = onTouchEnd.bind(swiper); 16694 16695 if (params.cssMode) { 16696 swiper.onScroll = onScroll.bind(swiper); 16697 } 16698 16699 swiper.onClick = onClick.bind(swiper); 16700 var capture = !!params.nested; 16701 16702 if (!support.touch && support.pointerEvents) { 16703 el.addEventListener(touchEvents.start, swiper.onTouchStart, false); 16704 document.addEventListener(touchEvents.move, swiper.onTouchMove, capture); 16705 document.addEventListener(touchEvents.end, swiper.onTouchEnd, false); 16706 } else { 16707 if (support.touch) { 16708 var passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? { 16709 passive: true, 16710 capture: false 16711 } : false; 16712 el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener); 16713 el.addEventListener(touchEvents.move, swiper.onTouchMove, support.passiveListener ? { 16714 passive: false, 16715 capture: capture 16716 } : capture); 16717 el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener); 16718 16719 if (touchEvents.cancel) { 16720 el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener); 16721 } 16722 16723 if (!dummyEventAttached) { 16724 document.addEventListener('touchstart', dummyEventListener); 16725 dummyEventAttached = true; 16726 } 16727 } 16728 16729 if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) { 16730 el.addEventListener('mousedown', swiper.onTouchStart, false); 16731 document.addEventListener('mousemove', swiper.onTouchMove, capture); 16732 document.addEventListener('mouseup', swiper.onTouchEnd, false); 16733 } 16734 } 16735 16736 if (params.preventClicks || params.preventClicksPropagation) { 16737 el.addEventListener('click', swiper.onClick, true); 16738 } 16739 16740 if (params.cssMode) { 16741 wrapperEl.addEventListener('scroll', swiper.onScroll); 16742 } 16743 16744 if (params.updateOnWindowResize) { 16745 swiper.on(device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true); 16746 } else { 16747 swiper.on('observerUpdate', onResize, true); 16748 } 16749 } 16750 16751 function detachEvents() { 16752 var swiper = this; 16753 var document = getDocument(); 16754 var params = swiper.params, 16755 touchEvents = swiper.touchEvents, 16756 el = swiper.el, 16757 wrapperEl = swiper.wrapperEl, 16758 device = swiper.device, 16759 support = swiper.support; 16760 var capture = !!params.nested; 16761 16762 if (!support.touch && support.pointerEvents) { 16763 el.removeEventListener(touchEvents.start, swiper.onTouchStart, false); 16764 document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture); 16765 document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false); 16766 } else { 16767 if (support.touch) { 16768 var passiveListener = touchEvents.start === 'onTouchStart' && support.passiveListener && params.passiveListeners ? { 16769 passive: true, 16770 capture: false 16771 } : false; 16772 el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener); 16773 el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture); 16774 el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener); 16775 16776 if (touchEvents.cancel) { 16777 el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener); 16778 } 16779 } 16780 16781 if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) { 16782 el.removeEventListener('mousedown', swiper.onTouchStart, false); 16783 document.removeEventListener('mousemove', swiper.onTouchMove, capture); 16784 document.removeEventListener('mouseup', swiper.onTouchEnd, false); 16785 } 16786 } 16787 16788 if (params.preventClicks || params.preventClicksPropagation) { 16789 el.removeEventListener('click', swiper.onClick, true); 16790 } 16791 16792 if (params.cssMode) { 16793 wrapperEl.removeEventListener('scroll', swiper.onScroll); 16794 } 16795 16796 swiper.off(device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize); 16797 } 16798 16799 var events = { 16800 attachEvents: attachEvents, 16801 detachEvents: detachEvents 16802 }; 16803 16804 function setBreakpoint() { 16805 var swiper = this; 16806 var activeIndex = swiper.activeIndex, 16807 initialized = swiper.initialized, 16808 _swiper$loopedSlides = swiper.loopedSlides, 16809 loopedSlides = _swiper$loopedSlides === void 0 ? 0 : _swiper$loopedSlides, 16810 params = swiper.params, 16811 $el = swiper.$el; 16812 var breakpoints = params.breakpoints; 16813 if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;
16814 var breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el); 16815 if (!breakpoint || swiper.currentBreakpoint === breakpoint) return; 16816 var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined; 16817 16818 if (breakpointOnlyParams) { 16819 ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach(function (param) { 16820 var paramValue = breakpointOnlyParams[param]; 16821 if (typeof paramValue === 'undefined') return; 16822 16823 if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) { 16824 breakpointOnlyParams[param] = 'auto'; 16825 } else if (param === 'slidesPerView') { 16826 breakpointOnlyParams[param] = parseFloat(paramValue); 16827 } else { 16828 breakpointOnlyParams[param] = parseInt(paramValue, 10); 16829 } 16830 }); 16831 } 16832 16833 var breakpointParams = breakpointOnlyParams || swiper.originalParams; 16834 var wasMultiRow = params.slidesPerColumn > 1; 16835 var isMultiRow = breakpointParams.slidesPerColumn > 1; 16836 var wasEnabled = params.enabled; 16837 16838 if (wasMultiRow && !isMultiRow) { 16839 $el.removeClass(params.containerModifierClass + "multirow " + params.containerModifierClass + "multirow-column"); 16840 swiper.emitContainerClasses(); 16841 } else if (!wasMultiRow && isMultiRow) { 16842 $el.addClass(params.containerModifierClass + "multirow"); 16843 16844 if (breakpointParams.slidesPerColumnFill === 'column') { 16845 $el.addClass(params.containerModifierClass + "multirow-column"); 16846 } 16847 16848 swiper.emitContainerClasses(); 16849 } 16850 16851 var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction; 16852 var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged); 16853 16854 if (directionChanged && initialized) { 16855 swiper.changeDirection(); 16856 } 16857 16858 extend(swiper.params, breakpointParams); 16859 var isEnabled = swiper.params.enabled; 16860 extend(swiper, { 16861 allowTouchMove: swiper.params.allowTouchMove, 16862 allowSlideNext: swiper.params.allowSlideNext, 16863 allowSlidePrev: swiper.params.allowSlidePrev 16864 }); 16865 16866 if (wasEnabled && !isEnabled) { 16867 swiper.disable(); 16868 } else if (!wasEnabled && isEnabled) { 16869 swiper.enable(); 16870 } 16871 16872 swiper.currentBreakpoint = breakpoint; 16873 swiper.emit('_beforeBreakpoint', breakpointParams); 16874 16875 if (needsReLoop && initialized) { 16876 swiper.loopDestroy(); 16877 swiper.loopCreate(); 16878 swiper.updateSlides(); 16879 swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false); 16880 } 16881 16882 swiper.emit('breakpoint', breakpointParams); 16883 } 16884 16885 function getBreakpoint(breakpoints, base, containerEl) { 16886 if (base === void 0) { 16887 base = 'window'; 16888 } 16889 16890 if (!breakpoints || base === 'container' && !containerEl) return undefined; 16891 var breakpoint = false; 16892 var window = getWindow(); 16893 var currentWidth = base === 'window' ? window.innerWidth : containerEl.clientWidth; 16894 var currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight; 16895 var points = Object.keys(breakpoints).map(function (point) { 16896 if (typeof point === 'string' && point.indexOf('@') === 0) { 16897 var minRatio = parseFloat(point.substr(1)); 16898 var value = currentHeight * minRatio; 16899 return { 16900 value: value, 16901 point: point 16902 }; 16903 } 16904 16905 return { 16906 value: point, 16907 point: point 16908 }; 16909 }); 16910 points.sort(function (a, b) { 16911 return parseInt(a.value, 10) - parseInt(b.value, 10); 16912 }); 16913 16914 for (var i = 0; i < points.length; i += 1) { 16915 var _points$i = points[i], 16916 point = _points$i.point, 16917 value = _points$i.value; 16918 16919 if (value <= currentWidth) { 16920 breakpoint = point; 16921 } 16922 } 16923 16924 return breakpoint || 'max'; 16925 } 16926 16927 var breakpoints = { 16928 setBreakpoint: setBreakpoint, 16929 getBreakpoint: getBreakpoint 16930 }; 16931 16932 function prepareClasses(entries, prefix) { 16933 var resultClasses = []; 16934 entries.forEach(function (item) { 16935 if (_typeof(item) === 'object') { 16936 Object.keys(item).forEach(function (classNames) { 16937 if (item[classNames]) { 16938 resultClasses.push(prefix + classNames); 16939 } 16940 }); 16941 } else if (typeof item === 'string') { 16942 resultClasses.push(prefix + item); 16943 } 16944 }); 16945 return resultClasses; 16946 } 16947 16948 function addClasses() { 16949 var swiper = this; 16950 var classNames = swiper.classNames, 16951 params = swiper.params, 16952 rtl = swiper.rtl, 16953 $el = swiper.$el, 16954 device = swiper.device, 16955 support = swiper.support; 16956 var suffixes = prepareClasses(['initialized', params.direction, { 16957 'pointer-events': support.pointerEvents && !support.touch 16958 }, {
16959 'free-mode': params.freeMode 16960 }, { 16961 'autoheight': params.autoHeight 16962 }, { 16963 'rtl': rtl 16964 }, { 16965 'multirow': params.slidesPerColumn > 1 16966 }, { 16967 'multirow-column': params.slidesPerColumn > 1 && params.slidesPerColumnFill === 'column' 16968 }, { 16969 'android': device.android 16970 }, { 16971 'ios': device.ios 16972 }, { 16973 'css-mode': params.cssMode 16974 }], params.containerModifierClass); 16975 classNames.push.apply(classNames, suffixes); 16976 $el.addClass([].concat(classNames).join(' ')); 16977 swiper.emitContainerClasses(); 16978 } 16979 16980 function removeClasses() { 16981 var swiper = this; 16982 var $el = swiper.$el, 16983 classNames = swiper.classNames; 16984 $el.removeClass(classNames.join(' ')); 16985 swiper.emitContainerClasses(); 16986 } 16987 16988 var classes = { 16989 addClasses: addClasses, 16990 removeClasses: removeClasses 16991 }; 16992 16993 function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) { 16994 var window = getWindow(); 16995 var image; 16996 16997 function onReady() { 16998 if (callback) callback(); 16999 } 17000 17001 var isPicture = $(imageEl).parent('picture')[0]; 17002 17003 if (!isPicture && (!imageEl.complete || !checkForComplete)) { 17004 if (src) { 17005 image = new window.Image(); 17006 image.onload = onReady; 17007 image.onerror = onReady; 17008 17009 if (sizes) { 17010 image.sizes = sizes; 17011 } 17012 17013 if (srcset) { 17014 image.srcset = srcset; 17015 } 17016 17017 if (src) { 17018 image.src = src; 17019 } 17020 } else { 17021 onReady(); 17022 } 17023 } else { 17024 onReady(); 17025 } 17026 } 17027 17028 function preloadImages() { 17029 var swiper = this; 17030 swiper.imagesToLoad = swiper.$el.find('img'); 17031 17032 function onReady() { 17033 if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return; 17034 if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1; 17035 17036 if (swiper.imagesLoaded === swiper.imagesToLoad.length) { 17037 if (swiper.params.updateOnImagesReady) swiper.update(); 17038 swiper.emit('imagesReady'); 17039 } 17040 } 17041 17042 for (var i = 0; i < swiper.imagesToLoad.length; i += 1) { 17043 var imageEl = swiper.imagesToLoad[i]; 17044 swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady); 17045 } 17046 } 17047 17048 var images = { 17049 loadImage: loadImage, 17050 preloadImages: preloadImages 17051 }; 17052 17053 function checkOverflow() { 17054 var swiper = this; 17055 var params = swiper.params; 17056 var wasLocked = swiper.isLocked; 17057 var lastSlidePosition = swiper.slides.length > 0 && params.slidesOffsetBefore + params.spaceBetween * (swiper.slides.length - 1) + swiper.slides[0].offsetWidth * swiper.slides.length; 17058 17059 if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) { 17060 swiper.isLocked = lastSlidePosition <= swiper.size; 17061 } else { 17062 swiper.isLocked = swiper.snapGrid.length === 1; 17063 } 17064 17065 swiper.allowSlideNext = !swiper.isLocked; 17066 swiper.allowSlidePrev = !swiper.isLocked; 17067 if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); 17068 17069 if (wasLocked && wasLocked !== swiper.isLocked) { 17070 swiper.isEnd = false; 17071 if (swiper.navigation) swiper.navigation.update(); 17072 } 17073 } 17074 17075 var checkOverflow$1 = { 17076 checkOverflow: checkOverflow 17077 }; 17078 var defaults = { 17079 init: true, 17080 direction: 'horizontal', 17081 touchEventsTarget: 'container', 17082 initialSlide: 0, 17083 speed: 300, 17084 cssMode: false, 17085 updateOnWindowResize: true, 17086 resizeObserver: false, 17087 nested: false, 17088 createElements: false, 17089 enabled: true, 17090 width: null, 17091 height: null, 17092 preventInteractionOnTransition: false, 17093 userAgent: null, 17094 url: null, 17095 edgeSwipeDetection: false, 17096 edgeSwipeThreshold: 20, 17097 freeMode: false, 17098 freeModeMomentum: true, 17099 freeModeMomentumRatio: 1, 17100 freeModeMomentumBounce: true, 17101 freeModeMomentumBounceRatio: 1, 17102 freeModeMomentumVelocityRatio: 1, 17103 freeModeSticky: false, 17104 freeModeMinimumVelocity: 0.02, 17105 autoHeight: false, 17106 setWrapperSize: false, 17107 virtualTranslate: false, 17108 effect: 'slide', 17109 breakpoints: undefined, 17110 breakpointsBase: 'window', 17111 spaceBetween: 0, 17112 slidesPerView: 1, 17113 slidesPerColumn: 1, 17114 slidesPerColumnFill: 'column', 17115 slidesPerGroup: 1, 17116 slidesPerGroupSkip: 0, 17117 centeredSlides: false,
17118 centeredSlidesBounds: false, 17119 slidesOffsetBefore: 0, 17120 slidesOffsetAfter: 0, 17121 normalizeSlideIndex: true, 17122 centerInsufficientSlides: false, 17123 watchOverflow: false, 17124 roundLengths: false, 17125 touchRatio: 1, 17126 touchAngle: 45, 17127 simulateTouch: true, 17128 shortSwipes: true, 17129 longSwipes: true, 17130 longSwipesRatio: 0.5, 17131 longSwipesMs: 300, 17132 followFinger: true, 17133 allowTouchMove: true, 17134 threshold: 0, 17135 touchMoveStopPropagation: false, 17136 touchStartPreventDefault: true, 17137 touchStartForcePreventDefault: false, 17138 touchReleaseOnEdges: false, 17139 uniqueNavElements: true, 17140 resistance: true, 17141 resistanceRatio: 0.85, 17142 watchSlidesProgress: false, 17143 watchSlidesVisibility: false, 17144 grabCursor: false, 17145 preventClicks: true, 17146 preventClicksPropagation: true, 17147 slideToClickedSlide: false, 17148 preloadImages: true, 17149 updateOnImagesReady: true, 17150 loop: false, 17151 loopAdditionalSlides: 0, 17152 loopedSlides: null, 17153 loopFillGroupWithBlank: false, 17154 loopPreventsSlide: true, 17155 allowSlidePrev: true, 17156 allowSlideNext: true, 17157 swipeHandler: null, 17158 noSwiping: true, 17159 noSwipingClass: 'swiper-no-swiping', 17160 noSwipingSelector: null, 17161 passiveListeners: true, 17162 containerModifierClass: 'swiper-container-', 17163 slideClass: 'swiper-slide', 17164 slideBlankClass: 'swiper-slide-invisible-blank', 17165 slideActiveClass: 'swiper-slide-active', 17166 slideDuplicateActiveClass: 'swiper-slide-duplicate-active', 17167 slideVisibleClass: 'swiper-slide-visible', 17168 slideDuplicateClass: 'swiper-slide-duplicate', 17169 slideNextClass: 'swiper-slide-next', 17170 slideDuplicateNextClass: 'swiper-slide-duplicate-next', 17171 slidePrevClass: 'swiper-slide-prev', 17172 slideDuplicatePrevClass: 'swiper-slide-duplicate-prev', 17173 wrapperClass: 'swiper-wrapper', 17174 runCallbacksOnInit: true, 17175 _emitClasses: false 17176 }; 17177 var prototypes = { 17178 modular: modular, 17179 eventsEmitter: eventsEmitter, 17180 update: update, 17181 translate: translate, 17182 transition: transition, 17183 slide: slide, 17184 loop: loop, 17185 grabCursor: grabCursor, 17186 manipulation: manipulation, 17187 events: events, 17188 breakpoints: breakpoints, 17189 checkOverflow: checkOverflow$1, 17190 classes: classes, 17191 images: images 17192 }; 17193 var extendedDefaults = {}; 17194 17195 var Swiper = function () { 17196 function Swiper() { 17197 var el; 17198 var params; 17199 17200 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 17201 args[_key] = arguments[_key]; 17202 } 17203 17204 if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') { 17205 params = args[0]; 17206 } else { 17207 el = args[0]; 17208 params = args[1]; 17209 } 17210 17211 if (!params) params = {}; 17212 params = extend({}, params); 17213 if (el && !params.el) params.el = el; 17214 17215 if (params.el && $(params.el).length > 1) { 17216 var swipers = []; 17217 $(params.el).each(function (containerEl) { 17218 var newParams = extend({}, params, { 17219 el: containerEl 17220 }); 17221 swipers.push(new Swiper(newParams)); 17222 }); 17223 return swipers; 17224 } 17225 17226 var swiper = this; 17227 swiper.__swiper__ = true;
17228 swiper.support = getSupport(); 17229 swiper.device = getDevice({ 17230 userAgent: params.userAgent 17231 }); 17232 swiper.browser = getBrowser(); 17233 swiper.eventsListeners = {}; 17234 swiper.eventsAnyListeners = []; 17235 17236 if (typeof swiper.modules === 'undefined') { 17237 swiper.modules = {}; 17238 } 17239 17240 Object.keys(swiper.modules).forEach(function (moduleName) { 17241 var module = swiper.modules[moduleName]; 17242 17243 if (module.params) { 17244 var moduleParamName = Object.keys(module.params)[0]; 17245 var moduleParams = module.params[moduleParamName]; 17246 if (_typeof(moduleParams) !== 'object' || moduleParams === null) return; 17247 17248 if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) { 17249 params[moduleParamName] = { 17250 auto: true 17251 }; 17252 } 17253 17254 if (!(moduleParamName in params && 'enabled' in moduleParams)) return; 17255 17256 if (params[moduleParamName] === true) { 17257 params[moduleParamName] = { 17258 enabled: true 17259 }; 17260 } 17261 17262 if (_typeof(params[moduleParamName]) === 'object' && !('enabled' in params[moduleParamName])) { 17263 params[moduleParamName].enabled = true; 17264 } 17265 17266 if (!params[moduleParamName]) params[moduleParamName] = { 17267 enabled: false 17268 }; 17269 } 17270 }); 17271 var swiperParams = extend({}, defaults); 17272 swiper.useParams(swiperParams); 17273 swiper.params = extend({}, swiperParams, extendedDefaults, params); 17274 swiper.originalParams = extend({}, swiper.params); 17275 swiper.passedParams = extend({}, params); 17276 17277 if (swiper.params && swiper.params.on) {
17278 Object.keys(swiper.params.on).forEach(function (eventName) { 17279 swiper.on(eventName, swiper.params.on[eventName]); 17280 }); 17281 } 17282 17283 if (swiper.params && swiper.params.onAny) { 17284 swiper.onAny(swiper.params.onAny); 17285 } 17286 17287 swiper.$ = $; 17288 extend(swiper, { 17289 enabled: swiper.params.enabled, 17290 el: el, 17291 classNames: [], 17292 slides: $(), 17293 slidesGrid: [], 17294 snapGrid: [], 17295 slidesSizesGrid: [], 17296 isHorizontal: function isHorizontal() { 17297 return swiper.params.direction === 'horizontal'; 17298 }, 17299 isVertical: function isVertical() { 17300 return swiper.params.direction === 'vertical'; 17301 }, 17302 activeIndex: 0, 17303 realIndex: 0, 17304 isBeginning: true, 17305 isEnd: false, 17306 translate: 0, 17307 previousTranslate: 0, 17308 progress: 0, 17309 velocity: 0, 17310 animating: false, 17311 allowSlideNext: swiper.params.allowSlideNext, 17312 allowSlidePrev: swiper.params.allowSlidePrev, 17313 touchEvents: function touchEvents() { 17314 var touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel']; 17315 var desktop = ['mousedown', 'mousemove', 'mouseup']; 17316 17317 if (swiper.support.pointerEvents) { 17318 desktop = ['pointerdown', 'pointermove', 'pointerup']; 17319 } 17320 17321 swiper.touchEventsTouch = { 17322 start: touch[0], 17323 move: touch[1], 17324 end: touch[2], 17325 cancel: touch[3] 17326 }; 17327 swiper.touchEventsDesktop = { 17328 start: desktop[0], 17329 move: desktop[1], 17330 end: desktop[2] 17331 }; 17332 return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop; 17333 }(), 17334 touchEventsData: { 17335 isTouched: undefined, 17336 isMoved: undefined, 17337 allowTouchCallbacks: undefined, 17338 touchStartTime: undefined, 17339 isScrolling: undefined, 17340 currentTranslate: undefined, 17341 startTranslate: undefined, 17342 allowThresholdMove: undefined, 17343 formElements: 'input, select, option, textarea, button, video, label', 17344 lastClickTime: now(), 17345 clickTimeout: undefined, 17346 velocities: [], 17347 allowMomentumBounce: undefined, 17348 isTouchEvent: undefined, 17349 startMoving: undefined 17350 }, 17351 allowClick: true, 17352 allowTouchMove: swiper.params.allowTouchMove, 17353 touches: { 17354 startX: 0, 17355 startY: 0, 17356 currentX: 0, 17357 currentY: 0, 17358 diff: 0 17359 }, 17360 imagesToLoad: [], 17361 imagesLoaded: 0 17362 }); 17363 swiper.useModules(); 17364 swiper.emit('_swiper'); 17365 17366 if (swiper.params.init) { 17367 swiper.init(); 17368 } 17369 17370 return swiper; 17371 } 17372 17373 var _proto = Swiper.prototype; 17374 17375 _proto.enable = function enable() { 17376 var swiper = this; 17377 if (swiper.enabled) return; 17378 swiper.enabled = true; 17379 17380 if (swiper.params.grabCursor) { 17381 swiper.setGrabCursor(); 17382 } 17383 17384 swiper.emit('enable'); 17385 }; 17386 17387 _proto.disable = function disable() { 17388 var swiper = this; 17389 if (!swiper.enabled) return; 17390 swiper.enabled = false; 17391 17392 if (swiper.params.grabCursor) { 17393 swiper.unsetGrabCursor(); 17394 } 17395 17396 swiper.emit('disable'); 17397 }; 17398 17399 _proto.setProgress = function setProgress(progress, speed) { 17400 var swiper = this; 17401 progress = Math.min(Math.max(progress, 0), 1); 17402 var min = swiper.minTranslate(); 17403 var max = swiper.maxTranslate(); 17404 var current = (max - min) * progress + min; 17405 swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed); 17406 swiper.updateActiveIndex(); 17407 swiper.updateSlidesClasses(); 17408 }; 17409 17410 _proto.emitContainerClasses = function emitContainerClasses() { 17411 var swiper = this; 17412 if (!swiper.params._emitClasses || !swiper.el) return; 17413 var classes = swiper.el.className.split(' ').filter(function (className) { 17414 return className.indexOf('swiper-container') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0; 17415 }); 17416 swiper.emit('_containerClasses', classes.join(' ')); 17417 }; 17418
17419 _proto.getSlideClasses = function getSlideClasses(slideEl) { 17420 var swiper = this; 17421 return slideEl.className.split(' ').filter(function (className) { 17422 return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0; 17423 }).join(' '); 17424 }; 17425 17426 _proto.emitSlidesClasses = function emitSlidesClasses() { 17427 var swiper = this; 17428 if (!swiper.params._emitClasses || !swiper.el) return; 17429 var updates = []; 17430 swiper.slides.each(function (slideEl) { 17431 var classNames = swiper.getSlideClasses(slideEl); 17432 updates.push({ 17433 slideEl: slideEl, 17434 classNames: classNames 17435 }); 17436 swiper.emit('_slideClass', slideEl, classNames); 17437 }); 17438 swiper.emit('_slideClasses', updates); 17439 }; 17440 17441 _proto.slidesPerViewDynamic = function slidesPerViewDynamic() { 17442 var swiper = this; 17443 var params = swiper.params, 17444 slides = swiper.slides, 17445 slidesGrid = swiper.slidesGrid, 17446 swiperSize = swiper.size, 17447 activeIndex = swiper.activeIndex; 17448 var spv = 1; 17449 17450 if (params.centeredSlides) { 17451 var slideSize = slides[activeIndex].swiperSlideSize; 17452 var breakLoop; 17453 17454 for (var i = activeIndex + 1; i < slides.length; i += 1) { 17455 if (slides[i] && !breakLoop) { 17456 slideSize += slides[i].swiperSlideSize; 17457 spv += 1; 17458 if (slideSize > swiperSize) breakLoop = true; 17459 } 17460 } 17461 17462 for (var _i = activeIndex - 1; _i >= 0; _i -= 1) { 17463 if (slides[_i] && !breakLoop) { 17464 slideSize += slides[_i].swiperSlideSize; 17465 spv += 1; 17466 if (slideSize > swiperSize) breakLoop = true; 17467 } 17468 } 17469 } else { 17470 for (var _i2 = activeIndex + 1; _i2 < slides.length; _i2 += 1) { 17471 if (slidesGrid[_i2] - slidesGrid[activeIndex] < swiperSize) { 17472 spv += 1; 17473 } 17474 } 17475 } 17476 17477 return spv; 17478 }; 17479 17480 _proto.update = function update() { 17481 var swiper = this; 17482 if (!swiper || swiper.destroyed) return; 17483 var snapGrid = swiper.snapGrid, 17484 params = swiper.params; 17485 17486 if (params.breakpoints) { 17487 swiper.setBreakpoint(); 17488 } 17489 17490 swiper.updateSize(); 17491 swiper.updateSlides(); 17492 swiper.updateProgress(); 17493 swiper.updateSlidesClasses(); 17494 17495 function setTranslate() { 17496 var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate; 17497 var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate()); 17498 swiper.setTranslate(newTranslate); 17499 swiper.updateActiveIndex(); 17500 swiper.updateSlidesClasses(); 17501 } 17502 17503 var translated; 17504 17505 if (swiper.params.freeMode) { 17506 setTranslate(); 17507 17508 if (swiper.params.autoHeight) { 17509 swiper.updateAutoHeight(); 17510 } 17511 } else { 17512 if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) { 17513 translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true); 17514 } else { 17515 translated = swiper.slideTo(swiper.activeIndex, 0, false, true); 17516 } 17517 17518 if (!translated) { 17519 setTranslate(); 17520 } 17521 } 17522 17523 if (params.watchOverflow && snapGrid !== swiper.snapGrid) { 17524 swiper.checkOverflow(); 17525 } 17526 17527 swiper.emit('update'); 17528 }; 17529 17530 _proto.changeDirection = function changeDirection(newDirection, needUpdate) { 17531 if (needUpdate === void 0) { 17532 needUpdate = true; 17533 } 17534 17535 var swiper = this; 17536 var currentDirection = swiper.params.direction; 17537 17538 if (!newDirection) { 17539 newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal'; 17540 } 17541 17542 if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') { 17543 return swiper; 17544 } 17545 17546 swiper.$el.removeClass("" + swiper.params.containerModifierClass + currentDirection).addClass("" + swiper.params.containerModifierClass + newDirection); 17547 swiper.emitContainerClasses(); 17548 swiper.params.direction = newDirection; 17549 swiper.slides.each(function (slideEl) { 17550 if (newDirection === 'vertical') { 17551 slideEl.style.width = ''; 17552 } else { 17553 slideEl.style.height = ''; 17554 } 17555 }); 17556 swiper.emit('changeDirection');
17557 if (needUpdate) swiper.update(); 17558 return swiper; 17559 }; 17560 17561 _proto.mount = function mount(el) { 17562 var swiper = this; 17563 if (swiper.mounted) return true; 17564 var $el = $(el || swiper.params.el); 17565 el = $el[0]; 17566 17567 if (!el) { 17568 return false; 17569 } 17570 17571 el.swiper = swiper; 17572 17573 var getWrapper = function getWrapper() { 17574 if (el && el.shadowRoot && el.shadowRoot.querySelector) { 17575 var res = $(el.shadowRoot.querySelector("." + swiper.params.wrapperClass)); 17576 17577 res.children = function (options) { 17578 return $el.children(options); 17579 }; 17580 17581 return res; 17582 } 17583 17584 return $el.children("." + swiper.params.wrapperClass); 17585 }; 17586 17587 var $wrapperEl = getWrapper(); 17588 17589 if ($wrapperEl.length === 0 && swiper.params.createElements) { 17590 var document = getDocument(); 17591 var wrapper = document.createElement('div'); 17592 $wrapperEl = $(wrapper); 17593 wrapper.className = swiper.params.wrapperClass; 17594 $el.append(wrapper); 17595 $el.children("." + swiper.params.slideClass).each(function (slideEl) { 17596 $wrapperEl.append(slideEl); 17597 }); 17598 } 17599 17600 extend(swiper, { 17601 $el: $el, 17602 el: el, 17603 $wrapperEl: $wrapperEl, 17604 wrapperEl: $wrapperEl[0], 17605 mounted: true, 17606 rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl', 17607 rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'), 17608 wrongRTL: $wrapperEl.css('display') === '-webkit-box' 17609 }); 17610 return true; 17611 }; 17612 17613 _proto.init = function init(el) { 17614 var swiper = this; 17615 if (swiper.initialized) return swiper; 17616 var mounted = swiper.mount(el); 17617 if (mounted === false) return swiper; 17618 swiper.emit('beforeInit'); 17619 17620 if (swiper.params.breakpoints) { 17621 swiper.setBreakpoint(); 17622 } 17623 17624 swiper.addClasses(); 17625 17626 if (swiper.params.loop) { 17627 swiper.loopCreate(); 17628 } 17629 17630 swiper.updateSize(); 17631 swiper.updateSlides(); 17632 17633 if (swiper.params.watchOverflow) { 17634 swiper.checkOverflow(); 17635 } 17636 17637 if (swiper.params.grabCursor && swiper.enabled) { 17638 swiper.setGrabCursor(); 17639 } 17640 17641 if (swiper.params.preloadImages) { 17642 swiper.preloadImages(); 17643 } 17644 17645 if (swiper.params.loop) { 17646 swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true); 17647 } else { 17648 swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true); 17649 } 17650 17651 swiper.attachEvents(); 17652 swiper.initialized = true; 17653 swiper.emit('init'); 17654 swiper.emit('afterInit'); 17655 return swiper; 17656 }; 17657 17658 _proto.destroy = function destroy(deleteInstance, cleanStyles) { 17659 if (deleteInstance === void 0) { 17660 deleteInstance = true; 17661 } 17662 17663 if (cleanStyles === void 0) { 17664 cleanStyles = true; 17665 } 17666 17667 var swiper = this; 17668 var params = swiper.params, 17669 $el = swiper.$el, 17670 $wrapperEl = swiper.$wrapperEl, 17671 slides = swiper.slides; 17672 17673 if (typeof swiper.params === 'undefined' || swiper.destroyed) { 17674 return null; 17675 } 17676 17677 swiper.emit('beforeDestroy'); 17678 swiper.initialized = false; 17679 swiper.detachEvents(); 17680 17681 if (params.loop) { 17682 swiper.loopDestroy(); 17683 } 17684 17685 if (cleanStyles) { 17686 swiper.removeClasses(); 17687 $el.removeAttr('style'); 17688 $wrapperEl.removeAttr('style'); 17689 17690 if (slides && slides.length) { 17691 slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index'); 17692 } 17693 } 17694 17695 swiper.emit('destroy'); 17696 Object.keys(swiper.eventsListeners).forEach(function (eventName) { 17697 swiper.off(eventName); 17698 }); 17699 17700 if (deleteInstance !== false) { 17701 swiper.$el[0].swiper = null; 17702 deleteProps(swiper); 17703 } 17704 17705 swiper.destroyed = true; 17706 return null; 17707 }; 17708 17709 Swiper.extendDefaults = function extendDefaults(newDefaults) { 17710 extend(extendedDefaults, newDefaults); 17711 }; 17712 17713 Swiper.installModule = function installModule(module) { 17714 if (!Swiper.prototype.modules) Swiper.prototype.modules = {}; 17715 var name = module.name || Object.keys(Swiper.prototype.modules).length + "_" + now(); 17716 Swiper.prototype.modules[name] = module; 17717 }; 17718 17719 Swiper.use = function use(module) { 17720 if (Array.isArray(module)) { 17721 module.forEach(function (m) { 17722 return Swiper.installModule(m); 17723 }); 17724 return Swiper; 17725 } 17726 17727 Swiper.installModule(module); 17728 return Swiper; 17729 }; 17730 17731 _createClass(Swiper, null, [{ 17732 key: "extendedDefaults", 17733 get: function get() { 17734 return extendedDefaults; 17735 } 17736 }, {
17737 key: "defaults", 17738 get: function get() { 17739 return defaults; 17740 } 17741 }]); 17742 17743 return Swiper; 17744 }(); 17745 17746 Object.keys(prototypes).forEach(function (prototypeGroup) { 17747 Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) { 17748 Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod]; 17749 }); 17750 }); 17751 Swiper.use([Resize, Observer$1]); 17752 var Virtual = { 17753 update: function update(force) { 17754 var swiper = this; 17755 var _swiper$params = swiper.params, 17756 slidesPerView = _swiper$params.slidesPerView, 17757 slidesPerGroup = _swiper$params.slidesPerGroup, 17758 centeredSlides = _swiper$params.centeredSlides; 17759 var _swiper$params$virtua = swiper.params.virtual, 17760 addSlidesBefore = _swiper$params$virtua.addSlidesBefore, 17761 addSlidesAfter = _swiper$params$virtua.addSlidesAfter; 17762 var _swiper$virtual = swiper.virtual, 17763 previousFrom = _swiper$virtual.from, 17764 previousTo = _swiper$virtual.to, 17765 slides = _swiper$virtual.slides, 17766 previousSlidesGrid = _swiper$virtual.slidesGrid, 17767 renderSlide = _swiper$virtual.renderSlide, 17768 previousOffset = _swiper$virtual.offset; 17769 swiper.updateActiveIndex(); 17770 var activeIndex = swiper.activeIndex || 0; 17771 var offsetProp; 17772 if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top'; 17773 var slidesAfter; 17774 var slidesBefore; 17775 17776 if (centeredSlides) { 17777 slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter; 17778 slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore; 17779 } else { 17780 slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter; 17781 slidesBefore = slidesPerGroup + addSlidesBefore; 17782 } 17783 17784 var from = Math.max((activeIndex || 0) - slidesBefore, 0); 17785 var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1); 17786 var offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0); 17787 extend(swiper.virtual, { 17788 from: from, 17789 to: to, 17790 offset: offset, 17791 slidesGrid: swiper.slidesGrid 17792 }); 17793 17794 function onRendered() { 17795 swiper.updateSlides(); 17796 swiper.updateProgress(); 17797 swiper.updateSlidesClasses(); 17798 17799 if (swiper.lazy && swiper.params.lazy.enabled) { 17800 swiper.lazy.load(); 17801 } 17802 } 17803 17804 if (previousFrom === from && previousTo === to && !force) { 17805 if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) { 17806 swiper.slides.css(offsetProp, offset + "px"); 17807 } 17808 17809 swiper.updateProgress(); 17810 return; 17811 } 17812 17813 if (swiper.params.virtual.renderExternal) { 17814 swiper.params.virtual.renderExternal.call(swiper, { 17815 offset: offset, 17816 from: from, 17817 to: to, 17818 slides: function getSlides() { 17819 var slidesToRender = []; 17820 17821 for (var i = from; i <= to; i += 1) { 17822 slidesToRender.push(slides[i]); 17823 } 17824 17825 return slidesToRender; 17826 }() 17827 }); 17828 17829 if (swiper.params.virtual.renderExternalUpdate) { 17830 onRendered(); 17831 } 17832 17833 return; 17834 } 17835 17836 var prependIndexes = []; 17837 var appendIndexes = []; 17838 17839 if (force) { 17840 swiper.$wrapperEl.find("." + swiper.params.slideClass).remove(); 17841 } else { 17842 for (var i = previousFrom; i <= previousTo; i += 1) { 17843 if (i < from || i > to) { 17844 swiper.$wrapperEl.find("." + swiper.params.slideClass + "[data-swiper-slide-index=\"" + i + "\"]").remove(); 17845 } 17846 } 17847 } 17848 17849 for (var _i = 0; _i < slides.length; _i += 1) { 17850 if (_i >= from && _i <= to) { 17851 if (typeof previousTo === 'undefined' || force) { 17852 appendIndexes.push(_i); 17853 } else { 17854 if (_i > previousTo) appendIndexes.push(_i); 17855 if (_i < previousFrom) prependIndexes.push(_i); 17856 } 17857 } 17858 } 17859 17860 appendIndexes.forEach(function (index) { 17861 swiper.$wrapperEl.append(renderSlide(slides[index], index)); 17862 }); 17863 prependIndexes.sort(function (a, b) { 17864 return b - a; 17865 }
17865).forEach(function (index) { 17866 swiper.$wrapperEl.prepend(renderSlide(slides[index], index)); 17867 }); 17868 swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, offset + "px"); 17869 onRendered(); 17870 }, 17871 renderSlide: function renderSlide(slide, index) { 17872 var swiper = this; 17873 var params = swiper.params.virtual; 17874 17875 if (params.cache && swiper.virtual.cache[index]) { 17876 return swiper.virtual.cache[index]; 17877 } 17878 17879 var $slideEl = params.renderSlide ? $(params.renderSlide.call(swiper, slide, index)) : $("<div class=\"" + swiper.params.slideClass + "\" data-swiper-slide-index=\"" + index + "\">" + slide + "</div>"); 17880 if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index); 17881 if (params.cache) swiper.virtual.cache[index] = $slideEl; 17882 return $slideEl; 17883 }, 17884 appendSlide: function appendSlide(slides) { 17885 var swiper = this; 17886 17887 if (_typeof(slides) === 'object' && 'length' in slides) { 17888 for (var i = 0; i < slides.length; i += 1) { 17889 if (slides[i]) swiper.virtual.slides.push(slides[i]); 17890 } 17891 } else { 17892 swiper.virtual.slides.push(slides); 17893 } 17894 17895 swiper.virtual.update(true); 17896 }, 17897 prependSlide: function prependSlide(slides) { 17898 var swiper = this; 17899 var activeIndex = swiper.activeIndex; 17900 var newActiveIndex = activeIndex + 1; 17901 var numberOfNewSlides = 1; 17902 17903 if (Array.isArray(slides)) { 17904 for (var i = 0; i < slides.length; i += 1) { 17905 if (slides[i]) swiper.virtual.slides.unshift(slides[i]); 17906 } 17907 17908 newActiveIndex = activeIndex + slides.length; 17909 numberOfNewSlides = slides.length; 17910 } else { 17911 swiper.virtual.slides.unshift(slides); 17912 } 17913 17914 if (swiper.params.virtual.cache) { 17915 var cache = swiper.virtual.cache; 17916 var newCache = {}; 17917 Object.keys(cache).forEach(function (cachedIndex) { 17918 var $cachedEl = cache[cachedIndex]; 17919 var cachedElIndex = $cachedEl.attr('data-swiper-slide-index'); 17920 17921 if (cachedElIndex) { 17922 $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1); 17923 } 17924 17925 newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl; 17926 }); 17927 swiper.virtual.cache = newCache; 17928 } 17929 17930 swiper.virtual.update(true); 17931 swiper.slideTo(newActiveIndex, 0); 17932 }, 17933 removeSlide: function removeSlide(slidesIndexes) { 17934 var swiper = this; 17935 if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return; 17936 var activeIndex = swiper.activeIndex; 17937 17938 if (Array.isArray(slidesIndexes)) { 17939 for (var i = slidesIndexes.length - 1; i >= 0; i -= 1) { 17940 swiper.virtual.slides.splice(slidesIndexes[i], 1); 17941 17942 if (swiper.params.virtual.cache) { 17943 delete swiper.virtual.cache[slidesIndexes[i]]; 17944 } 17945 17946 if (slidesIndexes[i] < activeIndex) activeIndex -= 1; 17947 activeIndex = Math.max(activeIndex, 0); 17948 } 17949 } else { 17950 swiper.virtual.slides.splice(slidesIndexes, 1); 17951 17952 if (swiper.params.virtual.cache) { 17953 delete swiper.virtual.cache[slidesIndexes]; 17954 } 17955 17956 if (slidesIndexes < activeIndex) activeIndex -= 1; 17957 activeIndex = Math.max(activeIndex, 0); 17958 } 17959 17960 swiper.virtual.update(true); 17961 swiper.slideTo(activeIndex, 0); 17962 }, 17963 removeAllSlides: function removeAllSlides() { 17964 var swiper = this; 17965 swiper.virtual.slides = []; 17966 17967 if (swiper.params.virtual.cache) { 17968 swiper.virtual.cache = {}; 17969 } 17970 17971 swiper.virtual.update(true); 17972 swiper.slideTo(0, 0); 17973 } 17974 }; 17975 var Virtual$1 = { 17976 name: 'virtual', 17977 params: { 17978 virtual: { 17979 enabled: false, 17980 slides: [], 17981 cache: true, 17982 renderSlide: null, 17983 renderExternal: null, 17984 renderExternalUpdate: true, 17985 addSlidesBefore: 0, 17986 addSlidesAfter: 0 17987 } 17988 }, 17989 create: function create() { 17990 var swiper = this; 17991 bindModuleMethods(swiper, { 17992 virtual: _extends({}, Virtual, { 17993 slides: swiper.params.virtual.slides, 17994 cache: {} 17995 }) 17996 }); 17997 }, 17998 on: { 17999 beforeInit: function beforeInit(swiper) { 18000 if (!swiper.params.virtual.enabled) return; 18001 swiper.classNames.push(swiper.params.containerModifierClass + "virtual"); 18002 var overwriteParams = { 18003 watchSlidesProgress: true 18004 }; 18005 extend(swiper.params, overwriteParams); 18006 extend(swiper.originalParams, overwriteParams); 18007 18008 if (!swiper.params.initialSlide) {
18009 swiper.virtual.update(); 18010 } 18011 }, 18012 setTranslate: function setTranslate(swiper) { 18013 if (!swiper.params.virtual.enabled) return; 18014 swiper.virtual.update(); 18015 } 18016 } 18017 }; 18018 var Keyboard = { 18019 handle: function handle(event) { 18020 var swiper = this; 18021 if (!swiper.enabled) return; 18022 var window = getWindow(); 18023 var document = getDocument(); 18024 var rtl = swiper.rtlTranslate; 18025 var e = event; 18026 if (e.originalEvent) e = e.originalEvent; 18027 var kc = e.keyCode || e.charCode; 18028 var pageUpDown = swiper.params.keyboard.pageUpDown; 18029 var isPageUp = pageUpDown && kc === 33; 18030 var isPageDown = pageUpDown && kc === 34; 18031 var isArrowLeft = kc === 37; 18032 var isArrowRight = kc === 39; 18033 var isArrowUp = kc === 38; 18034 var isArrowDown = kc === 40; 18035 18036 if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) { 18037 return false; 18038 } 18039 18040 if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) { 18041 return false; 18042 } 18043 18044 if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { 18045 return undefined; 18046 } 18047 18048 if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) { 18049 return undefined; 18050 } 18051 18052 if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) { 18053 var inView = false; 18054 18055 if (swiper.$el.parents("." + swiper.params.slideClass).length > 0 && swiper.$el.parents("." + swiper.params.slideActiveClass).length === 0) { 18056 return undefined; 18057 } 18058 18059 var $el = swiper.$el; 18060 var swiperWidth = $el[0].clientWidth; 18061 var swiperHeight = $el[0].clientHeight; 18062 var windowWidth = window.innerWidth; 18063 var windowHeight = window.innerHeight; 18064 var swiperOffset = swiper.$el.offset(); 18065 if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft; 18066 var swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]]; 18067 18068 for (var i = 0; i < swiperCoord.length; i += 1) { 18069 var point = swiperCoord[i]; 18070 18071 if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) { 18072 if (point[0] === 0 && point[1] === 0) continue; 18073 inView = true; 18074 } 18075 } 18076 18077 if (!inView) return undefined; 18078 } 18079 18080 if (swiper.isHorizontal()) { 18081 if (isPageUp || isPageDown || isArrowLeft || isArrowRight) { 18082 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 18083 } 18084 18085 if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext(); 18086 if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev(); 18087 } else { 18088 if (isPageUp || isPageDown || isArrowUp || isArrowDown) { 18089 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 18090 } 18091 18092 if (isPageDown || isArrowDown) swiper.slideNext(); 18093 if (isPageUp || isArrowUp) swiper.slidePrev(); 18094 } 18095 18096 swiper.emit('keyPress', kc); 18097 return undefined; 18098 }, 18099 enable: function enable() { 18100 var swiper = this; 18101 var document = getDocument(); 18102 if (swiper.keyboard.enabled) return; 18103 $(document).on('keydown', swiper.keyboard.handle); 18104 swiper.keyboard.enabled = true; 18105 }, 18106 disable: function disable() { 18107 var swiper = this; 18108 var document = getDocument(); 18109 if (!swiper.keyboard.enabled) return; 18110 $(document).off('keydown', swiper.keyboard.handle); 18111 swiper.keyboard.enabled = false; 18112 } 18113 }; 18114 var Keyboard$1 = { 18115 name: 'keyboard', 18116 params: { 18117 keyboard: { 18118 enabled: false, 18119 onlyInViewport: true, 18120 pageUpDown: true 18121 } 18122 }, 18123 create: function create() { 18124 var swiper = this; 18125 bindModuleMethods(swiper, { 18126 keyboard: _extends({ 18127 enabled: false 18128 }, Keyboard) 18129 }); 18130 }, 18131 on: { 18132 init: function init(swiper) { 18133 if (swiper.params.keyboard.enabled) { 18134 swiper.keyboard.enable(); 18135 } 18136 }, 18137 destroy: function destroy(swiper) { 18138 if (swiper.keyboard.enabled) { 18139 swiper.keyboard.disable(); 18140 } 18141 } 18142 } 18143 }; 18144 18145 function isEventSupported() { 18146 var document = getDocument(); 18147 var eventName = 'onwheel'; 18148 var isSupported = (eventName in document); 18149 18150 if (!isSupported) { 18151 var element = document.createElement('div'); 18152 element.setAttribute(eventName, 'return;'); 18153 isSupported = typeof element[eventName] === 'function'; 18154 } 18155 18156 if (!isSupported && document.implementation && document.implementation.hasFeature && document.implementation.hasFeature('', '') !== true) { 18157 isSupported = document.implementation.hasFeature('Events.wheel', '3.0'); 18158 } 18159 18160 return isSupported; 18161 } 18162 18163 var Mousewheel = { 18164 lastScrollTime: now(), 18165 lastEventBeforeSnap: undefined, 18166 recentWheelEvents: [], 18167 event: function event() { 18168 var window = getWindow(); 18169 if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll'; 18170 return isEventSupported() ? 'wheel' : 'mousewheel'; 18171 }, 18172 normalize: function normalize(e) { 18173 var PIXEL_STEP = 10; 18174 var LINE_HEIGHT = 40; 18175 var PAGE_HEIGHT = 800; 18176 var sX = 0; 18177 var sY = 0; 18178 var pX = 0; 18179 var pY = 0; 18180 18181 if ('detail' in e) { 18182 sY = e.detail; 18183 } 18184 18185 if ('wheelDelta' in e) { 18186 sY = -e.wheelDelta / 120; 18187 } 18188 18189 if ('wheelDeltaY' in e) { 18190 sY = -e.wheelDeltaY / 120; 18191 } 18192 18193 if ('wheelDeltaX' in e) { 18194 sX = -e.wheelDeltaX / 120; 18195 } 18196 18197 if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) { 18198 sX = sY; 18199 sY = 0; 18200 } 18201 18202 pX = sX * PIXEL_STEP; 18203 pY = sY * PIXEL_STEP; 18204 18205 if ('deltaY' in e) { 18206 pY = e.deltaY; 18207 } 18208 18209 if ('deltaX' in e) { 18210 pX = e.deltaX; 18211 } 18212 18213 if (e.shiftKey && !pX) { 18214 pX = pY; 18215 pY = 0; 18216 } 18217 18218 if ((pX || pY) && e.deltaMode) { 18219 if (e.deltaMode === 1) { 18220 pX *= LINE_HEIGHT; 18221 pY *= LINE_HEIGHT; 18222 } else { 18223 pX *= PAGE_HEIGHT; 18224 pY *= PAGE_HEIGHT; 18225 } 18226 } 18227 18228 if (pX && !sX) { 18229 sX = pX < 1 ? -1 : 1; 18230 } 18231 18232 if (pY && !sY) { 18233 sY = pY < 1 ? -1 : 1; 18234 } 18235 18236 return { 18237 spinX: sX, 18238 spinY: sY, 18239 pixelX: pX, 18240 pixelY: pY 18241 }; 18242 }, 18243 handleMouseEnter: function handleMouseEnter() { 18244 var swiper = this; 18245 if (!swiper.enabled) return; 18246 swiper.mouseEntered = true; 18247 }, 18248 handleMouseLeave: function handleMouseLeave() { 18249 var swiper = this; 18250 if (!swiper.enabled) return; 18251 swiper.mouseEntered = false;
18252 }, 18253 handle: function handle(event) { 18254 var e = event; 18255 var disableParentSwiper = true; 18256 var swiper = this; 18257 if (!swiper.enabled) return; 18258 var params = swiper.params.mousewheel; 18259 18260 if (swiper.params.cssMode) { 18261 e.preventDefault(); 18262 } 18263 18264 var target = swiper.$el; 18265 18266 if (swiper.params.mousewheel.eventsTarget !== 'container') { 18267 target = $(swiper.params.mousewheel.eventsTarget); 18268 } 18269 18270 if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true; 18271 if (e.originalEvent) e = e.originalEvent; 18272 var delta = 0; 18273 var rtlFactor = swiper.rtlTranslate ? -1 : 1; 18274 var data = Mousewheel.normalize(e); 18275 18276 if (params.forceToAxis) { 18277 if (swiper.isHorizontal()) { 18278 if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true; 18279 } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true; 18280 } else { 18281 delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY; 18282 } 18283 18284 if (delta === 0) return true; 18285 if (params.invert) delta = -delta; 18286 var positions = swiper.getTranslate() + delta * params.sensitivity; 18287 if (positions >= swiper.minTranslate()) positions = swiper.minTranslate(); 18288 if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate(); 18289 disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate()); 18290 if (disableParentSwiper && swiper.params.nested) e.stopPropagation(); 18291 18292 if (!swiper.params.freeMode) { 18293 var newEvent = { 18294 time: now(), 18295 delta: Math.abs(delta), 18296 direction: Math.sign(delta), 18297 raw: event 18298 }; 18299 var recentWheelEvents = swiper.mousewheel.recentWheelEvents; 18300 18301 if (recentWheelEvents.length >= 2) { 18302 recentWheelEvents.shift(); 18303 } 18304 18305 var prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined; 18306 recentWheelEvents.push(newEvent); 18307 18308 if (prevEvent) { 18309 if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) { 18310 swiper.mousewheel.animateSlider(newEvent); 18311 } 18312 } else { 18313 swiper.mousewheel.animateSlider(newEvent); 18314 } 18315 18316 if (swiper.mousewheel.releaseScroll(newEvent)) { 18317 return true; 18318 } 18319 } else { 18320 var _newEvent = { 18321 time: now(), 18322 delta: Math.abs(delta), 18323 direction: Math.sign(delta) 18324 }; 18325 var lastEventBeforeSnap = swiper.mousewheel.lastEventBeforeSnap; 18326 var ignoreWheelEvents = lastEventBeforeSnap && _newEvent.time < lastEventBeforeSnap.time + 500 && _newEvent.delta <= lastEventBeforeSnap.delta && _newEvent.direction === lastEventBeforeSnap.direction; 18327 18328 if (!ignoreWheelEvents) { 18329 swiper.mousewheel.lastEventBeforeSnap = undefined; 18330 18331 if (swiper.params.loop) { 18332 swiper.loopFix(); 18333 } 18334 18335 var position = swiper.getTranslate() + delta * params.sensitivity; 18336 var wasBeginning = swiper.isBeginning; 18337 var wasEnd = swiper.isEnd; 18338 if (position >= swiper.minTranslate()) position = swiper.minTranslate(); 18339 if (position <= swiper.maxTranslate()) position = swiper.maxTranslate(); 18340 swiper.setTransition(0); 18341 swiper.setTranslate(position); 18342 swiper.updateProgress(); 18343 swiper.updateActiveIndex(); 18344 swiper.updateSlidesClasses(); 18345 18346 if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) { 18347 swiper.updateSlidesClasses(); 18348 } 18349 18350 if (swiper.params.freeModeSticky) { 18351 clearTimeout(swiper.mousewheel.timeout); 18352 swiper.mousewheel.timeout = undefined; 18353 var _recentWheelEvents = swiper.mousewheel.recentWheelEvents; 18354 18355 if (_recentWheelEvents.length >= 15) { 18356 _recentWheelEvents.shift(); 18357 } 18358 18359 var _prevEvent = _recentWheelEvents.length ? _recentWheelEvents[_recentWheelEvents.length - 1] : undefined; 18360 18361 var firstEvent = _recentWheelEvents[0]; 18362 18363 _recentWheelEvents.push(_newEvent); 18364 18365 if (_prevEvent && (_newEvent.delta > _prevEvent.delta || _newEvent.direction !== _prevEvent.direction)) { 18366 _recentWheelEvents.splice(0); 18367 } else if (_recentWheelEvents.length >= 15 && _newEvent.time - firstEvent.time < 500 && firstEvent.delta - _newEvent.delta >= 1 && _newEvent.delta <= 6) { 18368 var snapToThreshold = delta > 0 ? 0.8 : 0.2; 18369 swiper.mousewheel.lastEventBeforeSnap = _newEvent; 18370 18371 _recentWheelEvents.splice(0); 18372 18373 swiper.mousewheel.timeout = nextTick(function () {
18374 swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); 18375 }, 0); 18376 } 18377 18378 if (!swiper.mousewheel.timeout) { 18379 swiper.mousewheel.timeout = nextTick(function () { 18380 var snapToThreshold = 0.5; 18381 swiper.mousewheel.lastEventBeforeSnap = _newEvent; 18382 18383 _recentWheelEvents.splice(0); 18384 18385 swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); 18386 }, 500); 18387 } 18388 } 18389 18390 if (!ignoreWheelEvents) swiper.emit('scroll', e); 18391 if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); 18392 if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true; 18393 } 18394 } 18395 18396 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 18397 return false; 18398 }, 18399 animateSlider: function animateSlider(newEvent) { 18400 var swiper = this; 18401 var window = getWindow(); 18402 18403 if (this.params.mousewheel.thresholdDelta && newEvent.delta < this.params.mousewheel.thresholdDelta) { 18404 return false; 18405 } 18406 18407 if (this.params.mousewheel.thresholdTime && now() - swiper.mousewheel.lastScrollTime < this.params.mousewheel.thresholdTime) { 18408 return false; 18409 } 18410 18411 if (newEvent.delta >= 6 && now() - swiper.mousewheel.lastScrollTime < 60) { 18412 return true; 18413 } 18414 18415 if (newEvent.direction < 0) { 18416 if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) { 18417 swiper.slideNext(); 18418 swiper.emit('scroll', newEvent.raw); 18419 } 18420 } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) { 18421 swiper.slidePrev(); 18422 swiper.emit('scroll', newEvent.raw); 18423 } 18424 18425 swiper.mousewheel.lastScrollTime = new window.Date().getTime(); 18426 return false; 18427 }, 18428 releaseScroll: function releaseScroll(newEvent) { 18429 var swiper = this; 18430 var params = swiper.params.mousewheel; 18431 18432 if (newEvent.direction < 0) { 18433 if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) { 18434 return true; 18435 } 18436 } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) { 18437 return true; 18438 } 18439 18440 return false; 18441 }, 18442 enable: function enable() { 18443 var swiper = this; 18444 var event = Mousewheel.event(); 18445 18446 if (swiper.params.cssMode) { 18447 swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle); 18448 return true; 18449 } 18450 18451 if (!event) return false; 18452 if (swiper.mousewheel.enabled) return false; 18453 var target = swiper.$el; 18454 18455 if (swiper.params.mousewheel.eventsTarget !== 'container') { 18456 target = $(swiper.params.mousewheel.eventsTarget); 18457 } 18458 18459 target.on('mouseenter', swiper.mousewheel.handleMouseEnter); 18460 target.on('mouseleave', swiper.mousewheel.handleMouseLeave); 18461 target.on(event, swiper.mousewheel.handle); 18462 swiper.mousewheel.enabled = true; 18463 return true; 18464 }, 18465 disable: function disable() { 18466 var swiper = this; 18467 var event = Mousewheel.event(); 18468 18469 if (swiper.params.cssMode) { 18470 swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle); 18471 return true; 18472 } 18473 18474 if (!event) return false; 18475 if (!swiper.mousewheel.enabled) return false; 18476 var target = swiper.$el; 18477 18478 if (swiper.params.mousewheel.eventsTarget !== 'container') { 18479 target = $(swiper.params.mousewheel.eventsTarget); 18480 } 18481 18482 target.off(event, swiper.mousewheel.handle); 18483 swiper.mousewheel.enabled = false; 18484 return true; 18485 } 18486 }; 18487 var Mousewheel$1 = { 18488 name: 'mousewheel', 18489 params: { 18490 mousewheel: { 18491 enabled: false, 18492 releaseOnEdges: false, 18493 invert: false,
18494 forceToAxis: false, 18495 sensitivity: 1, 18496 eventsTarget: 'container', 18497 thresholdDelta: null, 18498 thresholdTime: null 18499 } 18500 }, 18501 create: function create() { 18502 var swiper = this; 18503 bindModuleMethods(swiper, { 18504 mousewheel: { 18505 enabled: false, 18506 lastScrollTime: now(), 18507 lastEventBeforeSnap: undefined, 18508 recentWheelEvents: [], 18509 enable: Mousewheel.enable, 18510 disable: Mousewheel.disable, 18511 handle: Mousewheel.handle, 18512 handleMouseEnter: Mousewheel.handleMouseEnter, 18513 handleMouseLeave: Mousewheel.handleMouseLeave, 18514 animateSlider: Mousewheel.animateSlider, 18515 releaseScroll: Mousewheel.releaseScroll 18516 } 18517 }); 18518 }, 18519 on: { 18520 init: function init(swiper) { 18521 if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) { 18522 swiper.mousewheel.disable(); 18523 } 18524 18525 if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable(); 18526 }, 18527 destroy: function destroy(swiper) { 18528 if (swiper.params.cssMode) { 18529 swiper.mousewheel.enable(); 18530 } 18531 18532 if (swiper.mousewheel.enabled) swiper.mousewheel.disable(); 18533 } 18534 } 18535 }; 18536 var Navigation = { 18537 toggleEl: function toggleEl($el, disabled) { 18538 $el[disabled ? 'addClass' : 'removeClass'](this.params.navigation.disabledClass); 18539 if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled; 18540 }, 18541 update: function update() { 18542 var swiper = this; 18543 var params = swiper.params.navigation; 18544 var toggleEl = swiper.navigation.toggleEl; 18545 if (swiper.params.loop) return; 18546 var _swiper$navigation = swiper.navigation, 18547 $nextEl = _swiper$navigation.$nextEl, 18548 $prevEl = _swiper$navigation.$prevEl; 18549 18550 if ($prevEl && $prevEl.length > 0) { 18551 if (swiper.isBeginning) { 18552 toggleEl($prevEl, true); 18553 } else { 18554 toggleEl($prevEl, false); 18555 } 18556 18557 if (swiper.params.watchOverflow && swiper.enabled) { 18558 $prevEl[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass); 18559 } 18560 } 18561 18562 if ($nextEl && $nextEl.length > 0) { 18563 if (swiper.isEnd) { 18564 toggleEl($nextEl, true); 18565 } else { 18566 toggleEl($nextEl, false); 18567 } 18568 18569 if (swiper.params.watchOverflow && swiper.enabled) { 18570 $nextEl[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass); 18571 } 18572 } 18573 }, 18574 onPrevClick: function onPrevClick(e) { 18575 var swiper = this; 18576 e.preventDefault(); 18577 if (swiper.isBeginning && !swiper.params.loop) return; 18578 swiper.slidePrev(); 18579 }, 18580 onNextClick: function onNextClick(e) { 18581 var swiper = this; 18582 e.preventDefault(); 18583 if (swiper.isEnd && !swiper.params.loop) return; 18584 swiper.slideNext(); 18585 }, 18586 init: function init() { 18587 var swiper = this; 18588 var params = swiper.params.navigation; 18589 swiper.params.navigation = createElementIfNotDefined(swiper.$el, swiper.params.navigation, swiper.params.createElements, { 18590 nextEl: 'swiper-button-next', 18591 prevEl: 'swiper-button-prev' 18592 }); 18593 if (!(params.nextEl || params.prevEl)) return; 18594 var $nextEl; 18595 var $prevEl; 18596 18597 if (params.nextEl) { 18598 $nextEl = $(params.nextEl); 18599 18600 if (swiper.params.uniqueNavElements && typeof params.nextEl === 'string' && $nextEl.length > 1 && swiper.$el.find(params.nextEl).length === 1) { 18601 $nextEl = swiper.$el.find(params.nextEl); 18602 } 18603 } 18604 18605 if (params.prevEl) { 18606 $prevEl = $(params.prevEl); 18607 18608 if (swiper.params.uniqueNavElements && typeof params.prevEl === 'string' && $prevEl.length > 1 && swiper.$el.find(params.prevEl).length === 1) { 18609 $prevEl = swiper.$el.find(params.prevEl); 18610 } 18611 } 18612 18613 if ($nextEl && $nextEl.length > 0) { 18614 $nextEl.on('click', swiper.navigation.onNextClick); 18615 } 18616 18617 if ($prevEl && $prevEl.length > 0) { 18618 $prevEl.on('click', swiper.navigation.onPrevClick); 18619 } 18620 18621 extend(swiper.navigation, { 18622 $nextEl: $nextEl, 18623 nextEl: $nextEl && $nextEl[0], 18624 $prevEl: $prevEl, 18625 prevEl: $prevEl && $prevEl[0] 18626 }); 18627 18628 if (!swiper.enabled) { 18629 if ($nextEl) $nextEl.addClass(params.lockClass); 18630 if ($prevEl) $prevEl.addClass(params.lockClass); 18631 } 18632 }, 18633 destroy: function destroy() { 18634 var swiper = this; 18635 var _swiper$navigation2 = swiper.navigation, 18636 $nextEl = _swiper$navigation2.$nextEl, 18637 $prevEl = _swiper$navigation2.$prevEl; 18638 18639 if ($nextEl && $nextEl.length) { 18640 $nextEl.off('click', swiper.navigation.onNextClick); 18641 $nextEl.removeClass(swiper.params.navigation.disabledClass); 18642 } 18643 18644 if ($prevEl && $prevEl.length) { 18645 $prevEl.off('click', swiper.navigation.onPrevClick); 18646 $prevEl.removeClass(swiper.params.navigation.disabledClass); 18647 } 18648 } 18649 }; 18650 var Navigation$1 = { 18651 name: 'navigation', 18652 params: { 18653 navigation: { 18654 nextEl: null, 18655 prevEl: null, 18656 hideOnClick: false, 18657 disabledClass: 'swiper-button-disabled', 18658 hiddenClass: 'swiper-button-hidden', 18659 lockClass: 'swiper-button-lock' 18660 } 18661 }, 18662 create: function create() { 18663 var swiper = this; 18664 bindModuleMethods(swiper, { 18665 navigation: _extends({}, Navigation) 18666 }); 18667 }, 18668 on: { 18669 init: function init(swiper) { 18670 swiper.navigation.init(); 18671 swiper.navigation.update(); 18672 }, 18673 toEdge: function toEdge(swiper) { 18674 swiper.navigation.update(); 18675 },
18676 fromEdge: function fromEdge(swiper) { 18677 swiper.navigation.update(); 18678 }, 18679 destroy: function destroy(swiper) { 18680 swiper.navigation.destroy(); 18681 }, 18682 'enable disable': function enableDisable(swiper) { 18683 var _swiper$navigation3 = swiper.navigation, 18684 $nextEl = _swiper$navigation3.$nextEl, 18685 $prevEl = _swiper$navigation3.$prevEl; 18686 18687 if ($nextEl) { 18688 $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass); 18689 } 18690 18691 if ($prevEl) { 18692 $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass); 18693 } 18694 }, 18695 click: function click(swiper, e) { 18696 var _swiper$navigation4 = swiper.navigation, 18697 $nextEl = _swiper$navigation4.$nextEl, 18698 $prevEl = _swiper$navigation4.$prevEl; 18699 var targetEl = e.target; 18700 18701 if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) { 18702 if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return; 18703 var isHidden; 18704 18705 if ($nextEl) { 18706 isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass); 18707 } else if ($prevEl) { 18708 isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass); 18709 } 18710 18711 if (isHidden === true) { 18712 swiper.emit('navigationShow'); 18713 } else { 18714 swiper.emit('navigationHide'); 18715 } 18716 18717 if ($nextEl) { 18718 $nextEl.toggleClass(swiper.params.navigation.hiddenClass); 18719 } 18720 18721 if ($prevEl) { 18722 $prevEl.toggleClass(swiper.params.navigation.hiddenClass); 18723 } 18724 } 18725 } 18726 } 18727 }; 18728 var Pagination = { 18729 update: function update() { 18730 var swiper = this; 18731 var rtl = swiper.rtl; 18732 var params = swiper.params.pagination; 18733 if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return; 18734 var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length; 18735 var $el = swiper.pagination.$el; 18736 var current; 18737 var total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length; 18738 18739 if (swiper.params.loop) { 18740 current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup); 18741 18742 if (current > slidesLength - 1 - swiper.loopedSlides * 2) { 18743 current -= slidesLength - swiper.loopedSlides * 2; 18744 } 18745 18746 if (current > total - 1) current -= total; 18747 if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current; 18748 } else if (typeof swiper.snapIndex !== 'undefined') { 18749 current = swiper.snapIndex; 18750 } else { 18751 current = swiper.activeIndex || 0; 18752 } 18753 18754 if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) { 18755 var bullets = swiper.pagination.bullets; 18756 var firstIndex; 18757 var lastIndex; 18758 var midIndex; 18759 18760 if (params.dynamicBullets) { 18761 swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true); 18762 $el.css(swiper.isHorizontal() ? 'width' : 'height', swiper.pagination.bulletSize * (params.dynamicMainBullets + 4) + "px"); 18763 18764 if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) { 18765 swiper.pagination.dynamicBulletIndex += current - swiper.previousIndex; 18766 18767 if (swiper.pagination.dynamicBulletIndex > params.dynamicMainBullets - 1) { 18768 swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1; 18769 } else if (swiper.pagination.dynamicBulletIndex < 0) { 18770 swiper.pagination.dynamicBulletIndex = 0; 18771 } 18772 } 18773 18774 firstIndex = current - swiper.pagination.dynamicBulletIndex; 18775 lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1); 18776 midIndex = (lastIndex + firstIndex) / 2; 18777 } 18778 18779 bullets.removeClass(params.bulletActiveClass + " " + params.bulletActiveClass + "-next " + params.bulletActiveClass + "-next-next " + params.bulletActiveClass + "-prev " + params.bulletActiveClass + "-prev-prev " + params.bulletActiveClass + "-main"); 18780 18781 if ($el.length > 1) { 18782 bullets.each(function (bullet) { 18783 var $bullet = $(bullet); 18784 var bulletIndex = $bullet.index(); 18785 18786 if (bulletIndex === current) { 18787 $bullet.addClass(params.bulletActiveClass); 18788 } 18789 18790 if (params.dynamicBullets) { 18791 if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) { 18792 $bullet.addClass(params.bulletActiveClass + "-main"); 18793 } 18794 18795 if (bulletIndex === firstIndex) { 18796 $bullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev"); 18797 } 18798 18799 if (bulletIndex === lastIndex) { 18800 $bullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next"); 18801 } 18802 } 18803 }); 18804 } else { 18805 var $bullet = bullets.eq(current); 18806 var bulletIndex = $bullet.index(); 18807 $bullet.addClass(params.bulletActiveClass); 18808 18809 if (params.dynamicBullets) { 18810 var $firstDisplayedBullet = bullets.eq(firstIndex); 18811 var $lastDisplayedBullet = bullets.eq(lastIndex); 18812 18813 for (var i = firstIndex; i <= lastIndex; i += 1) { 18814 bullets.eq(i).addClass(params.bulletActiveClass + "-main"); 18815 } 18816 18817 if (swiper.params.loop) { 18818 if (bulletIndex >= bullets.length - params.dynamicMainBullets) { 18819 for (var _i = params.dynamicMainBullets; _i >= 0; _i -= 1) { 18820 bullets.eq(bullets.length - _i).addClass(params.bulletActiveClass + "-main"); 18821 } 18822 18823 bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(params.bulletActiveClass + "-prev"); 18824 } else { 18825 $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev"); 18826 $lastDisplayedBullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next"); 18827 } 18828 } else { 18829 $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev"); 18830 $lastDisplayedBullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next"); 18831 } 18832 } 18833 } 18834 18835 if (params.dynamicBullets) { 18836 var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4); 18837 var bulletsOffset = (swiper.pagination.bulletSize * dynamicBulletsLength - swiper.pagination.bulletSize) / 2 - midIndex * swiper.pagination.bulletSize; 18838 var offsetProp = rtl ? 'right' : 'left'; 18839 bullets.css(swiper.isHorizontal() ? offsetProp : 'top', bulletsOffset + "px"); 18840 } 18841 } 18842 18843 if (params.type === 'fraction') { 18844 $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1)); 18845 $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total)); 18846 } 18847 18848 if (params.type === 'progressbar') { 18849 var progressbarDirection; 18850 18851 if (params.progressbarOpposite) { 18852 progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal'; 18853 } else { 18854 progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical'; 18855 } 18856 18857 var scale = (current + 1) / total; 18858 var scaleX = 1; 18859 var scaleY = 1; 18860 18861 if (progressbarDirection === 'horizontal') { 18862 scaleX = scale; 18863 } else { 18864 scaleY = scale; 18865 } 18866 18867 $el.find(classesToSelector(params.progressbarFillClass)).transform("translate3d(0,
188670,0) scaleX(" + scaleX + ") scaleY(" + scaleY + ")").transition(swiper.params.speed); 18868 } 18869 18870 if (params.type === 'custom' && params.renderCustom) { 18871 $el.html(params.renderCustom(swiper, current + 1, total)); 18872 swiper.emit('paginationRender', $el[0]); 18873 } else { 18874 swiper.emit('paginationUpdate', $el[0]); 18875 } 18876 18877 if (swiper.params.watchOverflow && swiper.enabled) { 18878 $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass); 18879 } 18880 }, 18881 render: function render() { 18882 var swiper = this; 18883 var params = swiper.params.pagination; 18884 if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return; 18885 var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length; 18886 var $el = swiper.pagination.$el; 18887 var paginationHTML = ''; 18888 18889 if (params.type === 'bullets') { 18890 var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length; 18891 18892 if (swiper.params.freeMode && !swiper.params.loop && numberOfBullets > slidesLength) { 18893 numberOfBullets = slidesLength; 18894 } 18895 18896 for (var i = 0; i < numberOfBullets; i += 1) { 18897 if (params.renderBullet) { 18898 paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass); 18899 } else { 18900 paginationHTML += "<" + params.bulletElement + " class=\"" + params.bulletClass + "\"></" + params.bulletElement + ">"; 18901 } 18902 } 18903 18904 $el.html(paginationHTML); 18905 swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass)); 18906 } 18907 18908 if (params.type === 'fraction') { 18909 if (params.renderFraction) { 18910 paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass); 18911 } else { 18912 paginationHTML = "<span class=\"" + params.currentClass + "\"></span>" + ' / ' + ("<span class=\"" + params.totalClass + "\"></span>"); 18913 } 18914 18915 $el.html(paginationHTML); 18916 } 18917 18918 if (params.type === 'progressbar') { 18919 if (params.renderProgressbar) { 18920 paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass); 18921 } else { 18922 paginationHTML = "<span class=\"" + params.progressbarFillClass + "\"></span>"; 18923 } 18924 18925 $el.html(paginationHTML); 18926 } 18927 18928 if (params.type !== 'custom') { 18929 swiper.emit('paginationRender', swiper.pagination.$el[0]); 18930 } 18931 }, 18932 init: function init() { 18933 var swiper = this; 18934 swiper.params.pagination = createElementIfNotDefined(swiper.$el, swiper.params.pagination, swiper.params.createElements, { 18935 el: 'swiper-pagination' 18936 }); 18937 var params = swiper.params.pagination; 18938 if (!params.el) return; 18939 var $el = $(params.el); 18940 if ($el.length === 0) return; 18941 18942 if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) { 18943 $el = swiper.$el.find(params.el); 18944 } 18945 18946 if (params.type === 'bullets' && params.clickable) { 18947 $el.addClass(params.clickableClass); 18948 } 18949 18950 $el.addClass(params.modifierClass + params.type); 18951 18952 if (params.type === 'bullets' && params.dynamicBullets) { 18953 $el.addClass("" + params.modifierClass + params.type + "-dynamic"); 18954 swiper.pagination.dynamicBulletIndex = 0; 18955 18956 if (params.dynamicMainBullets < 1) { 18957 params.dynamicMainBullets = 1; 18958 } 18959 } 18960 18961 if (params.type === 'progressbar' && params.progressbarOpposite) { 18962 $el.addClass(params.progressbarOppositeClass); 18963 } 18964 18965 if (params.clickable) { 18966 $el.on('click', classesToSelector(params.bulletClass), function onClick(e) { 18967 e.preventDefault(); 18968 var index = $(this).index() * swiper.params.slidesPerGroup; 18969 if (swiper.params.loop) index += swiper.loopedSlides; 18970 swiper.slideTo(index); 18971 }); 18972 } 18973 18974 extend(swiper.pagination, { 18975 $el: $el, 18976 el: $el[0] 18977 }); 18978 18979 if (!swiper.enabled) { 18980 $el.addClass(params.lockClass); 18981 } 18982 }, 18983 destroy: function destroy() { 18984 var swiper = this; 18985 var params = swiper.params.pagination; 18986 if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return; 18987 var $el = swiper.pagination.$el; 18988 $el.removeClass(params.hiddenClass); 18989 $el.removeClass(params.modifierClass + params.type); 18990 if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass); 18991 18992 if (params.clickable) { 18993 $el.off('click', classesToSelector(params.bulletClass)); 18994 } 18995 } 18996 }; 18997 var Pagination$1 = { 18998 name: 'pagination', 18999 params: { 19000 pagination: { 19001 el: null, 19002 bulletElement: 'span', 19003 clickable: false, 19004 hideOnClick: false, 19005 renderBullet: null, 19006 renderProgressbar: null, 19007 renderFraction: null, 19008 renderCustom: null, 19009 progressbarOpposite: false, 19010 type: 'bullets', 19011 dynamicBullets: false, 19012 dynamicMainBullets: 1, 19013 formatFractionCurrent: function formatFractionCurrent(number) { 19014 return number; 19015 }, 19016 formatFractionTotal: function formatFractionTotal(number) { 19017 return number; 19018 }, 19019 bulletClass: 'swiper-pagination-bullet', 19020 bulletActiveClass: 'swiper-pagination-bullet-active', 19021 modifierClass: 'swiper-pagination-', 19022 currentClass: 'swiper-pagination-current', 19023 totalClass: 'swiper-pagination-total', 19024 hiddenClass: 'swiper-pagination-hidden', 19025 progressbarFillClass: 'swiper-pagination-progressbar-fill', 19026 progressbarOppositeClass: 'swiper-pagination-progressbar-opposite', 19027 clickableClass: 'swiper-pagination-clickable', 19028 lockClass: 'swiper-pagination-lock' 19029 } 19030 }, 19031 create: function create() { 19032 var swiper = this; 19033 bindModuleMethods(swiper, { 19034 pagination: _extends({ 19035 dynamicBulletIndex: 0 19036 }, Pagination) 19037 }); 19038 }, 19039 on: { 19040 init: function init(swiper) { 19041 swiper.pagination.init(); 19042 swiper.pagination.render(); 19043 swiper.pagination.update(); 19044 }, 19045 activeIndexChange: function activeIndexChange(swiper) { 19046 if (swiper.params.loop) { 19047 swiper.pagination.update(); 19048 } else if (typeof swiper.snapIndex === 'undefined') { 19049 swiper.pagination.update(); 19050 } 19051 }, 19052 snapIndexChange: function snapIndexChange(swiper) { 19053 if (!swiper.params.loop) { 19054 swiper.pagination.update(); 19055 } 19056 }, 19057 slidesLengthChange: function slidesLengthChange(swiper) { 19058 if (swiper.params.loop) { 19059 swiper.pagination.render(); 19060 swiper.pagination.update(); 19061 } 19062 }, 19063 snapGridLengthChange: function snapGridLengthChange(swiper) { 19064 if (!swiper.params.loop) { 19065 swiper.pagination.render(); 19066 swiper.pagination.update(); 19067 } 19068 }, 19069 destroy: function destroy(swiper) { 19070 swiper.pagination.destroy(); 19071 }, 19072 'enable disable': function enableDisable(swiper) { 19073 var $el = swiper.pagination.$el; 19074 19075 if ($el) { 19076 $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass); 19077 } 19078 }, 19079 click: function click(swiper, e) { 19080 var targetEl = e.target; 19081 19082 if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && swiper.pagination.$el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) { 19083 if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return; 19084 var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass); 19085 19086 if (isHidden === true) { 19087 swiper.emit('paginationShow'); 19088 } else { 19089 swiper.emit('paginationHide'); 19090 } 19091 19092 swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass); 19093 } 19094 } 19095 } 19096 }; 19097 var Scrollbar = { 19098 setTranslate: function setTranslate() { 19099 var swiper = this; 19100 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 19101 var scrollbar = swiper.scrollbar, 19102 rtl = swiper.rtlTranslate, 19103 progress = swiper.progress; 19104 var dragSize = scrollbar.dragSize, 19105 trackSize = scrollbar.trackSize, 19106 $dragEl = scrollbar.$dragEl, 19107 $el = scrollbar.$el; 19108 var params = swiper.params.scrollbar; 19109 var newSize = dragSize; 19110 var newPos = (trackSize - dragSize) * progress; 19111 19112 if (rtl) { 19113 newPos = -newPos; 19114 19115 if (newPos > 0) { 19116 newSize = dragSize - newPos; 19117 newPos = 0; 19118 } else if (-newPos + dragSize > trackSize) { 19119 newSize = trackSize + newPos; 19120 } 19121 } else if (newPos < 0) { 19122 newSize = dragSize + newPos; 19123 newPos = 0; 19124 } else if (newPos + dragSize > trackSize) { 19125 newSize = trackSize - newPos; 19126 } 19127 19128 if (swiper.isHorizontal()) { 19129 $dragEl.transform("translate3d(" + newPos + "px, 0, 0)"); 19130 $dragEl[0].style.width = newSize + "px"; 19131 } else { 19132 $dragEl.transform("translate3d(0px, " + newPos + "px, 0)"); 19133 $dragEl[0].style.height = newSize + "px"; 19134 } 19135 19136 if (params.hide) { 19137 clearTimeout(swiper.scrollbar.timeout); 19138 $el[0].style.opacity = 1; 19139 swiper.scrollbar.timeout = setTimeout(function () { 19140 $el[0].style.opacity = 0; 19141 $el.transition(400); 19142 }, 1000); 19143 } 19144 }, 19145 setTransition: function setTransition(duration) { 19146 var swiper = this; 19147 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 19148 swiper.scrollbar.$dragEl.transition(duration); 19149 }, 19150 updateSize: function updateSize() { 19151 var swiper = this; 19152 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 19153 var scrollbar = swiper.scrollbar; 19154 var $dragEl = scrollbar.$dragEl, 19155 $el = scrollbar.$el; 19156 $dragEl[0].style.width = ''; 19157 $dragEl[0].style.height = ''; 19158 var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight; 19159 var divider = swiper.size / swiper.virtualSize; 19160 var moveDivider = divider * (trackSize / swiper.size); 19161 var dragSize; 19162 19163 if (swiper.params.scrollbar.dragSize === 'auto') { 19164 dragSize = trackSize * divider; 19165 } else { 19166 dragSize = parseInt(swiper.params.scrollbar.dragSize, 10); 19167 } 19168 19169 if (swiper.isHorizontal()) { 19170 $dragEl[0].style.width = dragSize + "px"; 19171 } else { 19172 $dragEl[0].style.height = dragSize + "px"; 19173 } 19174 19175 if (divider >= 1) { 19176 $el[0].style.display = 'none'; 19177 } else { 19178 $el[0].style.display = ''; 19179 } 19180 19181 if (swiper.params.scrollbar.hide) { 19182 $el[0].style.opacity = 0; 19183 } 19184 19185 extend(scrollbar, { 19186 trackSize: trackSize, 19187 divider: divider, 19188 moveDivider: moveDivider, 19189 dragSize: dragSize 19190 }); 19191 19192 if (swiper.params.watchOverflow && swiper.enabled) { 19193 scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass); 19194 } 19195 }, 19196 getPointerPosition: function getPointerPosition(e) { 19197 var swiper = this; 19198 19199 if (swiper.isHorizontal()) { 19200 return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX; 19201 } 19202 19203 return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY; 19204 }, 19205 setDragPosition: function setDragPosition(e) { 19206 var swiper = this; 19207 var scrollbar = swiper.scrollbar, 19208 rtl = swiper.rtlTranslate; 19209 var $el = scrollbar.$el, 19210 dragSize = scrollbar.dragSize, 19211 trackSize = scrollbar.trackSize, 19212 dragStartPos = scrollbar.dragStartPos; 19213 var positionRatio; 19214 positionRatio = (scrollbar.getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize); 19215 positionRatio = Math.max(Math.min(positionRatio, 1), 0); 19216 19217 if (rtl) { 19218 positionRatio = 1 - positionRatio; 19219 } 19220 19221 var position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio; 19222 swiper.updateProgress(position); 19223 swiper.setTranslate(position); 19224 swiper.updateActiveIndex(); 19225 swiper.updateSlidesClasses(); 19226 }, 19227 onDragStart: function onDragStart(e) { 19228 var swiper = this; 19229 var params = swiper.params.scrollbar; 19230 var scrollbar = swiper.scrollbar, 19231 $wrapperEl = swiper.$wrapperEl; 19232 var $el = scrollbar.$el, 19233 $dragEl = scrollbar.$dragEl; 19234 swiper.scrollbar.isTouched = true; 19235 swiper.scrollbar.dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null; 19236 e.preventDefault(); 19237 e.stopPropagation(); 19238 $wrapperEl.transition(100); 19239 $dragEl.transition(100); 19240 scrollbar.setDragPosition(e); 19241 clearTimeout(swiper.scrollbar.dragTimeout); 19242 $el.transition(0); 19243 19244 if (params.hide) { 19245 $el.css('opacity', 1); 19246 } 19247 19248 if (swiper.params.cssMode) { 19249 swiper.$wrapperEl.css('scroll-snap-type', 'none'); 19250 } 19251 19252 swiper.emit('scrollbarDragStart', e); 19253 }, 19254 onDragMove: function onDragMove(e) { 19255 var swiper = this; 19256 var scrollbar = swiper.scrollbar, 19257 $wrapperEl = swiper.$wrapperEl; 19258 var $el = scrollbar.$el, 19259 $dragEl = scrollbar.$dragEl; 19260 if (!swiper.scrollbar.isTouched) return; 19261 if (e.preventDefault) e.preventDefault();else e.returnValue = false;
19262 scrollbar.setDragPosition(e); 19263 $wrapperEl.transition(0); 19264 $el.transition(0); 19265 $dragEl.transition(0); 19266 swiper.emit('scrollbarDragMove', e); 19267 }, 19268 onDragEnd: function onDragEnd(e) { 19269 var swiper = this; 19270 var params = swiper.params.scrollbar; 19271 var scrollbar = swiper.scrollbar, 19272 $wrapperEl = swiper.$wrapperEl; 19273 var $el = scrollbar.$el; 19274 if (!swiper.scrollbar.isTouched) return; 19275 swiper.scrollbar.isTouched = false; 19276 19277 if (swiper.params.cssMode) { 19278 swiper.$wrapperEl.css('scroll-snap-type', ''); 19279 $wrapperEl.transition(''); 19280 } 19281 19282 if (params.hide) { 19283 clearTimeout(swiper.scrollbar.dragTimeout); 19284 swiper.scrollbar.dragTimeout = nextTick(function () { 19285 $el.css('opacity', 0); 19286 $el.transition(400); 19287 }, 1000); 19288 } 19289 19290 swiper.emit('scrollbarDragEnd', e); 19291 19292 if (params.snapOnRelease) { 19293 swiper.slideToClosest(); 19294 } 19295 }, 19296 enableDraggable: function enableDraggable() { 19297 var swiper = this; 19298 if (!swiper.params.scrollbar.el) return; 19299 var document = getDocument(); 19300 var scrollbar = swiper.scrollbar, 19301 touchEventsTouch = swiper.touchEventsTouch, 19302 touchEventsDesktop = swiper.touchEventsDesktop, 19303 params = swiper.params, 19304 support = swiper.support; 19305 var $el = scrollbar.$el; 19306 var target = $el[0]; 19307 var activeListener = support.passiveListener && params.passiveListeners ? { 19308 passive: false, 19309 capture: false 19310 } : false; 19311 var passiveListener = support.passiveListener && params.passiveListeners ? { 19312 passive: true, 19313 capture: false 19314 } : false; 19315 if (!target) return; 19316 19317 if (!support.touch) { 19318 target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener); 19319 document.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener); 19320 document.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener); 19321 } else { 19322 target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener); 19323 target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener); 19324 target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener); 19325 } 19326 }, 19327 disableDraggable: function disableDraggable() { 19328 var swiper = this; 19329 if (!swiper.params.scrollbar.el) return; 19330 var document = getDocument(); 19331 var scrollbar = swiper.scrollbar, 19332 touchEventsTouch = swiper.touchEventsTouch, 19333 touchEventsDesktop = swiper.touchEventsDesktop, 19334 params = swiper.params, 19335 support = swiper.support; 19336 var $el = scrollbar.$el; 19337 var target = $el[0]; 19338 var activeListener = support.passiveListener && params.passiveListeners ? { 19339 passive: false, 19340 capture: false 19341 } : false; 19342 var passiveListener = support.passiveListener && params.passiveListeners ? { 19343 passive: true, 19344 capture: false 19345 } : false; 19346 if (!target) return; 19347 19348 if (!support.touch) { 19349 target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener); 19350 document.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener); 19351 document.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener); 19352 } else { 19353 target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener); 19354 target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener); 19355 target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener); 19356 } 19357 }, 19358 init: function init() { 19359 var swiper = this; 19360 var scrollbar = swiper.scrollbar, 19361 $swiperEl = swiper.$el; 19362 swiper.params.scrollbar = createElementIfNotDefined($swiperEl, swiper.params.scrollbar, swiper.params.createElements, { 19363 el: 'swiper-scrollbar' 19364 }); 19365 var params = swiper.params.scrollbar; 19366 if (!params.el) return; 19367 var $el = $(params.el); 19368 19369 if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) { 19370 $el = $swiperEl.find(params.el); 19371 } 19372 19373 var $dragEl = $el.find("." + swiper.params.scrollbar.dragClass); 19374 19375 if ($dragEl.length === 0) { 19376 $dragEl = $("<div class=\"" + swiper.params.scrollbar.dragClass + "\"></div>"); 19377 $el.append($dragEl); 19378 } 19379 19380 extend(scrollbar, { 19381 $el: $el, 19382 el: $el[0], 19383 $dragEl: $dragEl, 19384 dragEl: $dragEl[0] 19385 }); 19386 19387 if (params.draggable) { 19388 scrollbar.enableDraggable(); 19389 } 19390 19391 if ($el) { 19392 $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass); 19393 } 19394 }, 19395 destroy: function destroy() { 19396 var swiper = this; 19397 swiper.scrollbar.disableDraggable(); 19398 } 19399 }; 19400 var Scrollbar$1 = { 19401 name: 'scrollbar', 19402 params: { 19403 scrollbar: { 19404 el: null, 19405 dragSize: 'auto', 19406 hide: false, 19407 draggable: false, 19408 snapOnRelease: true, 19409 lockClass: 'swiper-scrollbar-lock', 19410 dragClass: 'swiper-scrollbar-drag' 19411 } 19412 }, 19413 create: function create() { 19414 var swiper = this; 19415 bindModuleMethods(swiper, { 19416 scrollbar: _extends({ 19417 isTouched: false, 19418 timeout: null, 19419 dragTimeout: null 19420 }, Scrollbar) 19421 }); 19422 }, 19423 on: { 19424 init: function init(swiper) { 19425 swiper.scrollbar.init(); 19426 swiper.scrollbar.updateSize(); 19427 swiper.scrollbar.setTranslate(); 19428 }, 19429 update: function update(swiper) { 19430 swiper.scrollbar.updateSize(); 19431 }, 19432 resize: function resize(swiper) { 19433 swiper.scrollbar.updateSize(); 19434 }, 19435 observerUpdate: function observerUpdate(swiper) { 19436 swiper.scrollbar.updateSize(); 19437 }, 19438 setTranslate: function setTranslate(swiper) { 19439 swiper.scrollbar.setTranslate(); 19440 }, 19441 setTransition: function setTransition(swiper, duration) { 19442 swiper.scrollbar.setTransition(duration); 19443 }, 19444 'enable disable': function enableDisable(swiper) { 19445 var $el = swiper.scrollbar.$el; 19446 19447 if ($el) { 19448 $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass); 19449 } 19450 }, 19451 destroy: function destroy(swiper) { 19452 swiper.scrollbar.destroy(); 19453 } 19454 } 19455 }; 19456 var Parallax = { 19457 setTransform: function setTransform(el, progress) { 19458 var swiper = this; 19459 var rtl = swiper.rtl; 19460 var $el = $(el); 19461 var rtlFactor = rtl ? -1 : 1; 19462 var p = $el.attr('data-swiper-parallax') || '0'; 19463 var x = $el.attr('data-swiper-parallax-x'); 19464 var y = $el.attr('data-swiper-parallax-y'); 19465 var scale = $el.attr('data-swiper-parallax-scale'); 19466 var opacity = $el.attr('data-swiper-parallax-opacity'); 19467 19468 if (x || y) { 19469 x = x || '0'; 19470 y = y || '0'; 19471 } else if (swiper.isHorizontal()) { 19472 x = p; 19473 y = '0'; 19474 } else { 19475 y = p; 19476 x = '0'; 19477 } 19478 19479 if (x.indexOf('%') >= 0) { 19480 x = parseInt(x, 10) * progress * rtlFactor + "%"; 19481 } else { 19482 x = x * progress * rtlFactor + "px"; 19483 } 19484 19485 if (y.indexOf('%') >= 0) { 19486 y = parseInt(y, 10) * progress + "%"; 19487 } else { 19488 y = y * progress + "px"; 19489 } 19490 19491 if (typeof opacity !== 'undefined' && opacity !== null) { 19492 var currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress)); 19493 $el[0].style.opacity = currentOpacity; 19494 } 19495 19496 if (typeof scale === 'undefined' || scale === null) { 19497 $el.transform("translate3d(" + x + ", " + y + ", 0px)"); 19498 } else { 19499 var currentScale = scale - (scale - 1) * (1 - Math.abs(progress)); 19500 $el.transform("translate3d(" + x + ", " + y + ", 0px) scale(" + currentScale + ")"); 19501 } 19502 }, 19503 setTranslate: function setTranslate() { 19504 var swiper = this; 19505 var $el = swiper.$el, 19506 slides = swiper.slides, 19507 progress = swiper.progress, 19508 snapGrid = swiper.snapGrid; 19509 $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (el) { 19510 swiper.parallax.setTransform(el, progress); 19511 }); 19512 slides.each(function (slideEl, slideIndex) { 19513 var slideProgress = slideEl.progress; 19514 19515 if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') { 19516 slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1); 19517 } 19518 19519 slideProgress = Math.min(Math.max(slideProgress, -1), 1); 19520 $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (el) { 19521 swiper.parallax.setTransform(el, slideProgress); 19522 }); 19523 }); 19524 }, 19525 setTransition: function setTransition(duration) { 19526 if (duration === void 0) { 19527 duration = this.params.speed; 19528 } 19529 19530 var swiper = this; 19531 var $el = swiper.$el; 19532 $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (parallaxEl) { 19533 var $parallaxEl = $(parallaxEl); 19534 var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration; 19535 if (duration === 0) parallaxDuration = 0; 19536 $parallaxEl.transition(parallaxDuration); 19537 }); 19538 } 19539 }; 19540 var Parallax$1 = { 19541 name: 'parallax', 19542 params: { 19543 parallax: { 19544 enabled: false 19545 } 19546 }, 19547 create: function create() { 19548 var swiper = this; 19549 bindModuleMethods(swiper, { 19550 parallax: _extends({}, Parallax) 19551 }); 19552 }, 19553 on: { 19554 beforeInit: function beforeInit(swiper) { 19555 if (!swiper.params.parallax.enabled) return; 19556 swiper.params.watchSlidesProgress = true; 19557 swiper.originalParams.watchSlidesProgress = true; 19558 }, 19559 init: function init(swiper) { 19560 if (!swiper.params.parallax.enabled) return; 19561 swiper.parallax.setTranslate(); 19562 }, 19563 setTranslate: function setTranslate(swiper) { 19564 if (!swiper.params.parallax.enabled) return; 19565 swiper.parallax.setTranslate(); 19566 }, 19567 setTransition: function setTransition(swiper, duration) { 19568 if (!swiper.params.parallax.enabled) return; 19569 swiper.parallax.setTransition(duration); 19570 } 19571 } 19572 }; 19573 var Zoom = { 19574 getDistanceBetweenTouches: function getDistanceBetweenTouches(e) { 19575 if (e.targetTouches.length < 2) return 1; 19576 var x1 = e.targetTouches[0].pageX; 19577 var y1 = e.targetTouches[0].pageY; 19578 var x2 = e.targetTouches[1].pageX; 19579 var y2 = e.targetTouches[1].pageY; 19580 var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)); 19581 return distance; 19582 }, 19583 onGestureStart: function onGestureStart(e) { 19584 var swiper = this; 19585 var support = swiper.support; 19586 var params = swiper.params.zoom; 19587 var zoom = swiper.zoom; 19588 var gesture = zoom.gesture; 19589 zoom.fakeGestureTouched = false;
19590 zoom.fakeGestureMoved = false; 19591 19592 if (!support.gestures) { 19593 if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) { 19594 return; 19595 } 19596 19597 zoom.fakeGestureTouched = true; 19598 gesture.scaleStart = Zoom.getDistanceBetweenTouches(e); 19599 } 19600 19601 if (!gesture.$slideEl || !gesture.$slideEl.length) { 19602 gesture.$slideEl = $(e.target).closest("." + swiper.params.slideClass); 19603 if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); 19604 gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target'); 19605 gesture.$imageWrapEl = gesture.$imageEl.parent("." + params.containerClass); 19606 gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; 19607 19608 if (gesture.$imageWrapEl.length === 0) { 19609 gesture.$imageEl = undefined; 19610 return; 19611 } 19612 } 19613 19614 if (gesture.$imageEl) { 19615 gesture.$imageEl.transition(0); 19616 } 19617 19618 swiper.zoom.isScaling = true; 19619 }, 19620 onGestureChange: function onGestureChange(e) { 19621 var swiper = this; 19622 var support = swiper.support; 19623 var params = swiper.params.zoom; 19624 var zoom = swiper.zoom; 19625 var gesture = zoom.gesture; 19626 19627 if (!support.gestures) { 19628 if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) { 19629 return; 19630 } 19631 19632 zoom.fakeGestureMoved = true; 19633 gesture.scaleMove = Zoom.getDistanceBetweenTouches(e); 19634 } 19635 19636 if (!gesture.$imageEl || gesture.$imageEl.length === 0) { 19637 if (e.type === 'gesturechange') zoom.onGestureStart(e); 19638 return; 19639 } 19640 19641 if (support.gestures) { 19642 zoom.scale = e.scale * zoom.currentScale; 19643 } else { 19644 zoom.scale = gesture.scaleMove / gesture.scaleStart * zoom.currentScale; 19645 } 19646 19647 if (zoom.scale > gesture.maxRatio) { 19648 zoom.scale = gesture.maxRatio - 1 + Math.pow(zoom.scale - gesture.maxRatio + 1, 0.5); 19649 } 19650 19651 if (zoom.scale < params.minRatio) { 19652 zoom.scale = params.minRatio + 1 - Math.pow(params.minRatio - zoom.scale + 1, 0.5); 19653 } 19654 19655 gesture.$imageEl.transform("translate3d(0,0,0) scale(" + zoom.scale + ")"); 19656 }, 19657 onGestureEnd: function onGestureEnd(e) { 19658 var swiper = this; 19659 var device = swiper.device; 19660 var support = swiper.support; 19661 var params = swiper.params.zoom; 19662 var zoom = swiper.zoom; 19663 var gesture = zoom.gesture; 19664 19665 if (!support.gestures) { 19666 if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) { 19667 return; 19668 } 19669 19670 if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) { 19671 return; 19672 } 19673 19674 zoom.fakeGestureTouched = false; 19675 zoom.fakeGestureMoved = false; 19676 } 19677 19678 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 19679 zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio); 19680 gesture.$imageEl.transition(swiper.params.speed).transform("translate3d(0,0,0) scale(" + zoom.scale + ")"); 19681 zoom.currentScale = zoom.scale; 19682 zoom.isScaling = false; 19683 if (zoom.scale === 1) gesture.$slideEl = undefined; 19684 }, 19685 onTouchStart: function onTouchStart(e) { 19686 var swiper = this; 19687 var device = swiper.device; 19688 var zoom = swiper.zoom; 19689 var gesture = zoom.gesture, 19690 image = zoom.image; 19691 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 19692 if (image.isTouched) return; 19693 if (device.android && e.cancelable) e.preventDefault(); 19694 image.isTouched = true; 19695 image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; 19696 image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; 19697 }, 19698 onTouchMove: function onTouchMove(e) { 19699 var swiper = this; 19700 var zoom = swiper.zoom; 19701 var gesture = zoom.gesture, 19702 image = zoom.image, 19703 velocity = zoom.velocity; 19704 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 19705 swiper.allowClick = false;
19706 if (!image.isTouched || !gesture.$slideEl) return; 19707 19708 if (!image.isMoved) { 19709 image.width = gesture.$imageEl[0].offsetWidth; 19710 image.height = gesture.$imageEl[0].offsetHeight; 19711 image.startX = getTranslate(gesture.$imageWrapEl[0], 'x') || 0; 19712 image.startY = getTranslate(gesture.$imageWrapEl[0], 'y') || 0; 19713 gesture.slideWidth = gesture.$slideEl[0].offsetWidth; 19714 gesture.slideHeight = gesture.$slideEl[0].offsetHeight; 19715 gesture.$imageWrapEl.transition(0); 19716 19717 if (swiper.rtl) { 19718 image.startX = -image.startX; 19719 image.startY = -image.startY; 19720 } 19721 } 19722 19723 var scaledWidth = image.width * zoom.scale; 19724 var scaledHeight = image.height * zoom.scale; 19725 if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return; 19726 image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0); 19727 image.maxX = -image.minX; 19728 image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0); 19729 image.maxY = -image.minY; 19730 image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; 19731 image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; 19732 19733 if (!image.isMoved && !zoom.isScaling) { 19734 if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) { 19735 image.isTouched = false; 19736 return; 19737 } 19738 19739 if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) { 19740 image.isTouched = false; 19741 return; 19742 } 19743 } 19744 19745 if (e.cancelable) { 19746 e.preventDefault(); 19747 } 19748 19749 e.stopPropagation(); 19750 image.isMoved = true; 19751 image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX; 19752 image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY; 19753 19754 if (image.currentX < image.minX) { 19755 image.currentX = image.minX + 1 - Math.pow(image.minX - image.currentX + 1, 0.8); 19756 } 19757 19758 if (image.currentX > image.maxX) { 19759 image.currentX = image.maxX - 1 + Math.pow(image.currentX - image.maxX + 1, 0.8); 19760 } 19761 19762 if (image.currentY < image.minY) { 19763 image.currentY = image.minY + 1 - Math.pow(image.minY - image.currentY + 1, 0.8); 19764 } 19765 19766 if (image.currentY > image.maxY) { 19767 image.currentY = image.maxY - 1 + Math.pow(image.currentY - image.maxY + 1, 0.8); 19768 } 19769 19770 if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x; 19771 if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y; 19772 if (!velocity.prevTime) velocity.prevTime = Date.now(); 19773 velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2; 19774 velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2; 19775 if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0; 19776 if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0; 19777 velocity.prevPositionX = image.touchesCurrent.x; 19778 velocity.prevPositionY = image.touchesCurrent.y; 19779 velocity.prevTime = Date.now(); 19780 gesture.$imageWrapEl.transform("translate3d(" + image.currentX + "px, " + image.currentY + "px,0)"); 19781 }, 19782 onTouchEnd: function onTouchEnd() { 19783 var swiper = this; 19784 var zoom = swiper.zoom; 19785 var gesture = zoom.gesture, 19786 image = zoom.image, 19787 velocity = zoom.velocity; 19788 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 19789 19790 if (!image.isTouched || !image.isMoved) { 19791 image.isTouched = false; 19792 image.isMoved = false; 19793 return; 19794 } 19795 19796 image.isTouched = false; 19797 image.isMoved = false;
19798 var momentumDurationX = 300; 19799 var momentumDurationY = 300; 19800 var momentumDistanceX = velocity.x * momentumDurationX; 19801 var newPositionX = image.currentX + momentumDistanceX; 19802 var momentumDistanceY = velocity.y * momentumDurationY; 19803 var newPositionY = image.currentY + momentumDistanceY; 19804 if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x); 19805 if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y); 19806 var momentumDuration = Math.max(momentumDurationX, momentumDurationY); 19807 image.currentX = newPositionX; 19808 image.currentY = newPositionY; 19809 var scaledWidth = image.width * zoom.scale; 19810 var scaledHeight = image.height * zoom.scale; 19811 image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0); 19812 image.maxX = -image.minX; 19813 image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0); 19814 image.maxY = -image.minY; 19815 image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX); 19816 image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY); 19817 gesture.$imageWrapEl.transition(momentumDuration).transform("translate3d(" + image.currentX + "px, " + image.currentY + "px,0)"); 19818 }, 19819 onTransitionEnd: function onTransitionEnd() { 19820 var swiper = this; 19821 var zoom = swiper.zoom; 19822 var gesture = zoom.gesture; 19823 19824 if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) { 19825 if (gesture.$imageEl) { 19826 gesture.$imageEl.transform('translate3d(0,0,0) scale(1)'); 19827 } 19828 19829 if (gesture.$imageWrapEl) { 19830 gesture.$imageWrapEl.transform('translate3d(0,0,0)'); 19831 } 19832 19833 zoom.scale = 1; 19834 zoom.currentScale = 1; 19835 gesture.$slideEl = undefined; 19836 gesture.$imageEl = undefined; 19837 gesture.$imageWrapEl = undefined; 19838 } 19839 }, 19840 toggle: function toggle(e) { 19841 var swiper = this; 19842 var zoom = swiper.zoom; 19843 19844 if (zoom.scale && zoom.scale !== 1) { 19845 zoom.out(); 19846 } else { 19847 zoom.in(e); 19848 } 19849 }, 19850 in: function _in(e) { 19851 var swiper = this; 19852 var window = getWindow(); 19853 var zoom = swiper.zoom; 19854 var params = swiper.params.zoom; 19855 var gesture = zoom.gesture, 19856 image = zoom.image; 19857 19858 if (!gesture.$slideEl) { 19859 if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) { 19860 gesture.$slideEl = swiper.$wrapperEl.children("." + swiper.params.slideActiveClass); 19861 } else { 19862 gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); 19863 } 19864 19865 gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target'); 19866 gesture.$imageWrapEl = gesture.$imageEl.parent("." + params.containerClass); 19867 } 19868 19869 if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return; 19870 gesture.$slideEl.addClass("" + params.zoomedSlideClass); 19871 var touchX; 19872 var touchY; 19873 var offsetX; 19874 var offsetY; 19875 var diffX; 19876 var diffY; 19877 var translateX; 19878 var translateY; 19879 var imageWidth; 19880 var imageHeight; 19881 var scaledWidth; 19882 var scaledHeight; 19883 var translateMinX; 19884 var translateMinY; 19885 var translateMaxX; 19886 var translateMaxY; 19887 var slideWidth; 19888 var slideHeight; 19889 19890 if (typeof image.touchesStart.x === 'undefined' && e) { 19891 touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX; 19892 touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY; 19893 } else { 19894 touchX = image.touchesStart.x; 19895 touchY = image.touchesStart.y; 19896 } 19897 19898 zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; 19899 zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; 19900 19901 if (e) { 19902 slideWidth = gesture.$slideEl[0].offsetWidth; 19903 slideHeight = gesture.$slideEl[0].offsetHeight; 19904 offsetX = gesture.$slideEl.offset().left + window.scrollX; 19905 offsetY = gesture.$slideEl.offset().top + window.scrollY; 19906 diffX = offsetX + slideWidth / 2 - touchX; 19907 diffY = offsetY + slideHeight / 2 - touchY; 19908 imageWidth = gesture.$imageEl[0].offsetWidth; 19909 imageHeight = gesture.$imageEl[0].offsetHeight; 19910 scaledWidth = imageWidth * zoom.scale; 19911 scaledHeight = imageHeight * zoom.scale; 19912 translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0); 19913 translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0); 19914 translateMaxX = -translateMinX; 19915 translateMaxY = -translateMinY; 19916 translateX = diffX * zoom.scale; 19917 translateY = diffY * zoom.scale; 19918 19919 if (translateX < translateMinX) { 19920 translateX = translateMinX; 19921 } 19922 19923 if (translateX > translateMaxX) { 19924 translateX = translateMaxX; 19925 } 19926 19927 if (translateY < translateMinY) { 19928 translateY = translateMinY; 19929 } 19930 19931 if (translateY > translateMaxY) { 19932 translateY = translateMaxY; 19933 } 19934 } else { 19935 translateX = 0; 19936 translateY = 0; 19937 } 19938 19939 gesture.$imageWrapEl.transition(300).transform("translate3d(" + translateX + "px, " + translateY + "px,0
19939)"); 19940 gesture.$imageEl.transition(300).transform("translate3d(0,0,0) scale(" + zoom.scale + ")"); 19941 }, 19942 out: function out() { 19943 var swiper = this; 19944 var zoom = swiper.zoom; 19945 var params = swiper.params.zoom; 19946 var gesture = zoom.gesture; 19947 19948 if (!gesture.$slideEl) { 19949 if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) { 19950 gesture.$slideEl = swiper.$wrapperEl.children("." + swiper.params.slideActiveClass); 19951 } else { 19952 gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); 19953 } 19954 19955 gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target'); 19956 gesture.$imageWrapEl = gesture.$imageEl.parent("." + params.containerClass); 19957 } 19958 19959 if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return; 19960 zoom.scale = 1; 19961 zoom.currentScale = 1; 19962 gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)'); 19963 gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)'); 19964 gesture.$slideEl.removeClass("" + params.zoomedSlideClass); 19965 gesture.$slideEl = undefined; 19966 }, 19967 toggleGestures: function toggleGestures(method) { 19968 var swiper = this; 19969 var zoom = swiper.zoom; 19970 var selector = zoom.slideSelector, 19971 passive = zoom.passiveListener; 19972 swiper.$wrapperEl[method]('gesturestart', selector, zoom.onGestureStart, passive); 19973 swiper.$wrapperEl[method]('gesturechange', selector, zoom.onGestureChange, passive); 19974 swiper.$wrapperEl[method]('gestureend', selector, zoom.onGestureEnd, passive); 19975 }, 19976 enableGestures: function enableGestures() { 19977 if (this.zoom.gesturesEnabled) return; 19978 this.zoom.gesturesEnabled = true; 19979 this.zoom.toggleGestures('on'); 19980 }, 19981 disableGestures: function disableGestures() { 19982 if (!this.zoom.gesturesEnabled) return; 19983 this.zoom.gesturesEnabled = false; 19984 this.zoom.toggleGestures('off'); 19985 }, 19986 enable: function enable() { 19987 var swiper = this; 19988 var support = swiper.support; 19989 var zoom = swiper.zoom; 19990 if (zoom.enabled) return; 19991 zoom.enabled = true; 19992 var passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? { 19993 passive: true, 19994 capture: false 19995 } : false; 19996 var activeListenerWithCapture = support.passiveListener ? { 19997 passive: false, 19998 capture: true 19999 } : true; 20000 var slideSelector = "." + swiper.params.slideClass; 20001 swiper.zoom.passiveListener = passiveListener; 20002 swiper.zoom.slideSelector = slideSelector; 20003 20004 if (support.gestures) { 20005 swiper.$wrapperEl.on(swiper.touchEvents.start, swiper.zoom.enableGestures, passiveListener); 20006 swiper.$wrapperEl.on(swiper.touchEvents.end, swiper.zoom.disableGestures, passiveListener); 20007 } else if (swiper.touchEvents.start === 'touchstart') { 20008 swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener); 20009 swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture); 20010 swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener); 20011 20012 if (swiper.touchEvents.cancel) { 20013 swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener); 20014 } 20015 } 20016 20017 swiper.$wrapperEl.on(swiper.touchEvents.move, "." + swiper.params.zoom.containerClass, zoom.onTouchMove, activeListenerWithCapture); 20018 }, 20019 disable: function disable() { 20020 var swiper = this; 20021 var zoom = swiper.zoom; 20022 if (!zoom.enabled) return; 20023 var support = swiper.support; 20024 swiper.zoom.enabled = false; 20025 var passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? { 20026 passive: true, 20027 capture: false 20028 } : false; 20029 var activeListenerWithCapture = support.passiveListener ? { 20030 passive: false, 20031 capture: true 20032 } : true; 20033 var slideSelector = "." + swiper.params.slideClass; 20034 20035 if (support.gestures) { 20036 swiper.$wrapperEl.off(swiper.touchEvents.start, swiper.zoom.enableGestures, passiveListener); 20037 swiper.$wrapperEl.off(swiper.touchEvents.end, swiper.zoom.disableGestures, passiveListener); 20038 } else if (swiper.touchEvents.start === 'touchstart') { 20039 swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener); 20040 swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture); 20041 swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener); 20042 20043 if (swiper.touchEvents.cancel) { 20044 swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener); 20045 } 20046 } 20047 20048 swiper.$wrapperEl.off(swiper.touchEvents.move, "." + swiper.params.zoom.containerClass, zoom.onTouchMove, activeListenerWithCapture); 20049 } 20050 }; 20051 var Zoom$1 = { 20052 name: 'zoom', 20053 params: { 20054 zoom: { 20055 enabled: false, 20056 maxRatio: 3, 20057 minRatio: 1, 20058 toggle: true, 20059 containerClass: 'swiper-zoom-container', 20060 zoomedSlideClass: 'swiper-slide-zoomed' 20061 } 20062 }, 20063 create: function create() { 20064 var swiper = this; 20065 bindModuleMethods(swiper, { 20066 zoom: _extends({ 20067 enabled: false, 20068 scale: 1, 20069 currentScale: 1, 20070 isScaling: false, 20071 gesture: { 20072 $slideEl: undefined, 20073 slideWidth: undefined, 20074 slideHeight: undefined, 20075 $imageEl: undefined, 20076 $imageWrapEl: undefined, 20077 maxRatio: 3 20078 }, 20079 image: { 20080 isTouched: undefined, 20081 isMoved: undefined, 20082 currentX: undefined, 20083 currentY: undefined, 20084 minX: undefined, 20085 minY: undefined, 20086 maxX: undefined, 20087 maxY: undefined, 20088 width: undefined, 20089 height: undefined, 20090 startX: undefined, 20091 startY: undefined, 20092 touchesStart: {}, 20093 touchesCurrent: {} 20094 }, 20095 velocity: { 20096 x: undefined, 20097 y: undefined, 20098 prevPositionX: undefined, 20099 prevPositionY: undefined, 20100 prevTime: undefined 20101 } 20102 }, Zoom) 20103 }); 20104 var scale = 1; 20105 Object.defineProperty(swiper.zoom, 'scale', { 20106 get: function get() { 20107 return scale; 20108 }, 20109 set: function set(value) { 20110 if (scale !== value) { 20111 var imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined; 20112 var slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined; 20113 swiper.emit('zoomChange', value, imageEl, slideEl); 20114 } 20115 20116 scale = value; 20117 } 20118 }); 20119 }, 20120 on: { 20121 init: function init(swiper) { 20122 if (swiper.params.zoom.enabled) { 20123 swiper.zoom.enable(); 20124 } 20125 }, 20126 destroy: function destroy(swiper) { 20127 swiper.zoom.disable(); 20128 }, 20129 touchStart: function touchStart(swiper, e) { 20130 if (!swiper.zoom.enabled) return; 20131 swiper.zoom.onTouchStart(e); 20132 }, 20133 touchEnd: function touchEnd(swiper, e) { 20134 if (!swiper.zoom.enabled) return; 20135 swiper.zoom.onTouchEnd(e); 20136 }, 20137 doubleTap: function doubleTap(swiper, e) { 20138 if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) { 20139 swiper.zoom.toggle(e); 20140 } 20141 }, 20142 transitionEnd: function transitionEnd(swiper) { 20143 if (swiper.zoom.enabled && swiper.params.zoom.enabled) { 20144 swiper.zoom.onTransitionEnd(); 20145 } 20146 }, 20147 slideChange: function slideChange(swiper) { 20148 if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) { 20149 swiper.zoom.onTransitionEnd(); 20150 } 20151 } 20152 } 20153 }; 20154 var Lazy = {
20155 loadInSlide: function loadInSlide(index, loadInDuplicate) { 20156 if (loadInDuplicate === void 0) { 20157 loadInDuplicate = true; 20158 } 20159 20160 var swiper = this; 20161 var params = swiper.params.lazy; 20162 if (typeof index === 'undefined') return; 20163 if (swiper.slides.length === 0) return; 20164 var isVirtual = swiper.virtual && swiper.params.virtual.enabled; 20165 var $slideEl = isVirtual ? swiper.$wrapperEl.children("." + swiper.params.slideClass + "[data-swiper-slide-index=\"" + index + "\"]") : swiper.slides.eq(index); 20166 var $images = $slideEl.find("." + params.elementClass + ":not(." + params.loadedClass + "):not(." + params.loadingClass + ")"); 20167 20168 if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) { 20169 $images.push($slideEl[0]); 20170 } 20171 20172 if ($images.length === 0) return; 20173 $images.each(function (imageEl) { 20174 var $imageEl = $(imageEl); 20175 $imageEl.addClass(params.loadingClass); 20176 var background = $imageEl.attr('data-background'); 20177 var src = $imageEl.attr('data-src'); 20178 var srcset = $imageEl.attr('data-srcset'); 20179 var sizes = $imageEl.attr('data-sizes'); 20180 var $pictureEl = $imageEl.parent('picture'); 20181 swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, function () { 20182 if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return; 20183 20184 if (background) { 20185 $imageEl.css('background-image', "url(\"" + background + "\")"); 20186 $imageEl.removeAttr('data-background'); 20187 } else { 20188 if (srcset) { 20189 $imageEl.attr('srcset', srcset); 20190 $imageEl.removeAttr('data-srcset'); 20191 } 20192 20193 if (sizes) { 20194 $imageEl.attr('sizes', sizes); 20195 $imageEl.removeAttr('data-sizes'); 20196 } 20197 20198 if ($pictureEl.length) { 20199 $pictureEl.children('source').each(function (sourceEl) { 20200 var $source = $(sourceEl); 20201 20202 if ($source.attr('data-srcset')) { 20203 $source.attr('srcset', $source.attr('data-srcset')); 20204 $source.removeAttr('data-srcset'); 20205 } 20206 }); 20207 } 20208 20209 if (src) { 20210 $imageEl.attr('src', src); 20211 $imageEl.removeAttr('data-src'); 20212 } 20213 } 20214 20215 $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass); 20216 $slideEl.find("." + params.preloaderClass).remove(); 20217 20218 if (swiper.params.loop && loadInDuplicate) { 20219 var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index'); 20220 20221 if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) { 20222 var originalSlide = swiper.$wrapperEl.children("[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]:not(." + swiper.params.slideDuplicateClass + ")"); 20223 swiper.lazy.loadInSlide(originalSlide.index(), false); 20224 } else { 20225 var duplicatedSlide = swiper.$wrapperEl.children("." + swiper.params.slideDuplicateClass + "[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]"); 20226 swiper.lazy.loadInSlide(duplicatedSlide.index(), false); 20227 } 20228 } 20229 20230 swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]); 20231 20232 if (swiper.params.autoHeight) { 20233 swiper.updateAutoHeight(); 20234 } 20235 }); 20236 swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]); 20237 }); 20238 }, 20239 load: function load() { 20240 var swiper = this; 20241 var $wrapperEl = swiper.$wrapperEl, 20242 swiperParams = swiper.params, 20243 slides = swiper.slides, 20244 activeIndex = swiper.activeIndex; 20245 var isVirtual = swiper.virtual && swiperParams.virtual.enabled; 20246 var params = swiperParams.lazy; 20247 var slidesPerView = swiperParams.slidesPerView; 20248 20249 if (slidesPerView === 'auto') { 20250 slidesPerView = 0; 20251 } 20252 20253 function slideExist(index) { 20254 if (isVirtual) { 20255 if ($wrapperEl.children("." + swiperParams.slideClass + "[data-swiper-slide-index=\"" + index + "\"]").length) { 20256 return true; 20257 } 20258 } else if (slides[index]) return true; 20259 20260 return false;
20261 } 20262 20263 function slideIndex(slideEl) { 20264 if (isVirtual) { 20265 return $(slideEl).attr('data-swiper-slide-index'); 20266 } 20267 20268 return $(slideEl).index(); 20269 } 20270 20271 if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true; 20272 20273 if (swiper.params.watchSlidesVisibility) { 20274 $wrapperEl.children("." + swiperParams.slideVisibleClass).each(function (slideEl) { 20275 var index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index(); 20276 swiper.lazy.loadInSlide(index); 20277 }); 20278 } else if (slidesPerView > 1) { 20279 for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) { 20280 if (slideExist(i)) swiper.lazy.loadInSlide(i); 20281 } 20282 } else { 20283 swiper.lazy.loadInSlide(activeIndex); 20284 } 20285 20286 if (params.loadPrevNext) { 20287 if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) { 20288 var amount = params.loadPrevNextAmount; 20289 var spv = slidesPerView; 20290 var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length); 20291 var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); 20292 20293 for (var _i = activeIndex + slidesPerView; _i < maxIndex; _i += 1) { 20294 if (slideExist(_i)) swiper.lazy.loadInSlide(_i); 20295 } 20296 20297 for (var _i2 = minIndex; _i2 < activeIndex; _i2 += 1) { 20298 if (slideExist(_i2)) swiper.lazy.loadInSlide(_i2); 20299 } 20300 } else { 20301 var nextSlide = $wrapperEl.children("." + swiperParams.slideNextClass); 20302 if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide)); 20303 var prevSlide = $wrapperEl.children("." + swiperParams.slidePrevClass); 20304 if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide)); 20305 } 20306 } 20307 }, 20308 checkInViewOnLoad: function checkInViewOnLoad() { 20309 var window = getWindow(); 20310 var swiper = this; 20311 if (!swiper || swiper.destroyed) return; 20312 var $scrollElement = swiper.params.lazy.scrollingElement ? $(swiper.params.lazy.scrollingElement) : $(window); 20313 var isWindow = $scrollElement[0] === window; 20314 var scrollElementWidth = isWindow ? window.innerWidth : $scrollElement[0].offsetWidth; 20315 var scrollElementHeight = isWindow ? window.innerHeight : $scrollElement[0].offsetHeight; 20316 var swiperOffset = swiper.$el.offset(); 20317 var rtl = swiper.rtlTranslate; 20318 var inView = false; 20319 if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft; 20320 var swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]]; 20321 20322 for (var i = 0; i < swiperCoord.length; i += 1) { 20323 var point = swiperCoord[i]; 20324 20325 if (point[0] >= 0 && point[0] <= scrollElementWidth && point[1] >= 0 && point[1] <= scrollElementHeight) { 20326 if (point[0] === 0 && point[1] === 0) continue; 20327 inView = true; 20328 } 20329 } 20330 20331 var passiveListener = swiper.touchEvents.start === 'touchstart' && swiper.support.passiveListener && swiper.params.passiveListeners ? { 20332 passive: true, 20333 capture: false 20334 } : false; 20335 20336 if (inView) { 20337 swiper.lazy.load(); 20338 $scrollElement.off('scroll', swiper.lazy.checkInViewOnLoad, passiveListener); 20339 } else if (!swiper.lazy.scrollHandlerAttached) { 20340 swiper.lazy.scrollHandlerAttached = true; 20341 $scrollElement.on('scroll', swiper.lazy.checkInViewOnLoad, passiveListener); 20342 } 20343 } 20344 }; 20345 var Lazy$1 = { 20346 name: 'lazy', 20347 params: { 20348 lazy: { 20349 checkInView: false, 20350 enabled: false, 20351 loadPrevNext: false, 20352 loadPrevNextAmount: 1, 20353 loadOnTransitionStart: false, 20354 scrollingElement: '', 20355 elementClass: 'swiper-lazy', 20356 loadingClass: 'swiper-lazy-loading', 20357 loadedClass: 'swiper-lazy-loaded', 20358 preloaderClass: 'swiper-lazy-preloader' 20359 } 20360 }, 20361 create: function create() { 20362 var swiper = this; 20363 bindModuleMethods(swiper, { 20364 lazy: _extends({ 20365 initialImageLoaded: false 20366 }, Lazy) 20367 }); 20368 }, 20369 on: { 20370 beforeInit: function beforeInit(swiper) { 20371 if (swiper.params.lazy.enabled && swiper.params.preloadImages) { 20372 swiper.params.preloadImages = false;
20373 } 20374 }, 20375 init: function init(swiper) { 20376 if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) { 20377 if (swiper.params.lazy.checkInView) { 20378 swiper.lazy.checkInViewOnLoad(); 20379 } else { 20380 swiper.lazy.load(); 20381 } 20382 } 20383 }, 20384 scroll: function scroll(swiper) { 20385 if (swiper.params.freeMode && !swiper.params.freeModeSticky) { 20386 swiper.lazy.load(); 20387 } 20388 }, 20389 'scrollbarDragMove resize _freeModeNoMomentumRelease': function lazyLoad(swiper) { 20390 if (swiper.params.lazy.enabled) { 20391 swiper.lazy.load(); 20392 } 20393 }, 20394 transitionStart: function transitionStart(swiper) { 20395 if (swiper.params.lazy.enabled) { 20396 if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded) { 20397 swiper.lazy.load(); 20398 } 20399 } 20400 }, 20401 transitionEnd: function transitionEnd(swiper) { 20402 if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) { 20403 swiper.lazy.load(); 20404 } 20405 }, 20406 slideChange: function slideChange(swiper) { 20407 if (swiper.params.lazy.enabled && swiper.params.cssMode) { 20408 swiper.lazy.load(); 20409 } 20410 } 20411 } 20412 }; 20413 var Controller = { 20414 LinearSpline: function LinearSpline(x, y) { 20415 var binarySearch = function search() { 20416 var maxIndex; 20417 var minIndex; 20418 var guess; 20419 return function (array, val) { 20420 minIndex = -1; 20421 maxIndex = array.length; 20422 20423 while (maxIndex - minIndex > 1) { 20424 guess = maxIndex + minIndex >> 1; 20425 20426 if (array[guess] <= val) { 20427 minIndex = guess; 20428 } else { 20429 maxIndex = guess; 20430 } 20431 } 20432 20433 return maxIndex; 20434 }; 20435 }(); 20436 20437 this.x = x; 20438 this.y = y; 20439 this.lastIndex = x.length - 1; 20440 var i1; 20441 var i3; 20442 20443 this.interpolate = function interpolate(x2) { 20444 if (!x2) return 0; 20445 i3 = binarySearch(this.x, x2); 20446 i1 = i3 - 1; 20447 return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1]; 20448 }; 20449 20450 return this; 20451 }, 20452 getInterpolateFunction: function getInterpolateFunction(c) { 20453 var swiper = this; 20454 20455 if (!swiper.controller.spline) { 20456 swiper.controller.spline = swiper.params.loop ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid) : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid); 20457 } 20458 }, 20459 setTranslate: function setTranslate(_setTranslate, byController) { 20460 var swiper = this; 20461 var controlled = swiper.controller.control; 20462 var multiplier; 20463 var controlledTranslate; 20464 var Swiper = swiper.constructor; 20465 20466 function setControlledTranslate(c) { 20467 var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate; 20468 20469 if (swiper.params.controller.by === 'slide') { 20470 swiper.controller.getInterpolateFunction(c); 20471 controlledTranslate = -swiper.controller.spline.interpolate(-translate); 20472 } 20473 20474 if (!controlledTranslate || swiper.params.controller.by === 'container') { 20475 multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate()); 20476 controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate(); 20477 } 20478 20479 if (swiper.params.controller.inverse) { 20480 controlledTranslate = c.maxTranslate() - controlledTranslate; 20481 } 20482 20483 c.updateProgress(controlledTranslate); 20484 c.setTranslate(controlledTranslate, swiper); 20485 c.updateActiveIndex(); 20486 c.updateSlidesClasses(); 20487 } 20488 20489 if (Array.isArray(controlled)) { 20490 for (var i = 0; i < controlled.length; i += 1) { 20491 if (controlled[i] !== byController && controlled[i] instanceof Swiper) { 20492 setControlledTranslate(controlled[i]); 20493 } 20494 } 20495 } else if (controlled instanceof Swiper && byController !== controlled) { 20496 setControlledTranslate(controlled); 20497 } 20498 }, 20499 setTransition: function setTransition(duration, byController) { 20500 var swiper = this; 20501 var Swiper = swiper.constructor; 20502 var controlled = swiper.controller.control; 20503 var i; 20504 20505 function setControlledTransition(c) { 20506 c.setTransition(duration, swiper); 20507 20508 if (duration !== 0) { 20509 c.transitionStart(); 20510 20511 if (c.params.autoHeight) { 20512 nextTick(function () { 20513 c.updateAutoHeight(); 20514 }); 20515 } 20516 20517 c.$wrapperEl.transitionEnd(function () { 20518 if (!controlled) return; 20519 20520 if (c.params.loop && swiper.params.controller.by === 'slide') { 20521 c.loopFix(); 20522 } 20523 20524 c.transitionEnd(); 20525 }); 20526 } 20527 } 20528 20529 if (Array.isArray(controlled)) { 20530 for (i = 0; i < controlled.length; i += 1) { 20531 if (controlled[i] !== byController && controlled[i] instanceof Swiper) { 20532 setControlledTransition(controlled[i]); 20533 } 20534 } 20535 } else if (controlled instanceof Swiper && byController !== controlled) { 20536 setControlledTransition(controlled); 20537 } 20538 } 20539 }; 20540 var Controller$1 = { 20541 name: 'controller', 20542 params: { 20543 controller: { 20544 control: undefined, 20545 inverse: false, 20546 by: 'slide' 20547 } 20548 }, 20549 create: function create() { 20550 var swiper = this; 20551 bindModuleMethods(swiper, { 20552 controller: _extends({ 20553 control: swiper.params.controller.control 20554 }, Controller) 20555 }); 20556 }, 20557 on: { 20558 update: function update(swiper) { 20559 if (!swiper.controller.control) return; 20560 20561 if (swiper.controller.spline) { 20562 swiper.controller.spline = undefined; 20563 delete swiper.controller.spline; 20564 } 20565 }, 20566 resize: function resize(swiper) { 20567 if (!swiper.controller.control) return; 20568 20569 if (swiper.controller.spline) { 20570 swiper.controller.spline = undefined; 20571 delete swiper.controller.spline; 20572 } 20573 }, 20574 observerUpdate: function observerUpdate(swiper) { 20575 if (!swiper.controller.control) return; 20576 20577 if (swiper.controller.spline) { 20578 swiper.controller.spline = undefined; 20579 delete swiper.controller.spline; 20580 } 20581 }, 20582 setTranslate: function setTranslate(swiper, translate, byController) { 20583 if (!swiper.controller.control) return; 20584 swiper.controller.setTranslate(translate, byController); 20585 }, 20586 setTransition: function setTransition(swiper, duration, byController) { 20587 if (!swiper.controller.control) return; 20588 swiper.controller.setTransition(duration, byController); 20589 } 20590 } 20591 }; 20592 var A11y = { 20593 getRandomNumber: function getRandomNumber(size) { 20594 if (size === void 0) { 20595 size = 16; 20596 } 20597 20598 var randomChar = function randomChar() { 20599 return Math.round(16 * Math.random()).toString(16); 20600 }; 20601 20602 return 'x'.repeat(size).replace(/x/g, randomChar); 20603 }, 20604 makeElFocusable: function makeElFocusable($el) { 20605 $el.attr('tabIndex', '0'); 20606 return $el; 20607 }, 20608 makeElNotFocusable: function makeElNotFocusable($el) { 20609 $el.attr('tabIndex', '-1'); 20610 return $el; 20611 }, 20612 addElRole: function addElRole($el, role) { 20613 $el.attr('role', role); 20614 return $el; 20615 }, 20616 addElRoleDescription: function addElRoleDescription($el, description) { 20617 $el.attr('aria-roledescription', description); 20618 return $el; 20619 }, 20620 addElControls: function addElControls($el, controls) { 20621 $el.attr('aria-controls', controls); 20622 return $el; 20623 }, 20624 addElLabel: function addElLabel($el, label) { 20625 $el.attr('aria-label', label); 20626 return $el; 20627 }, 20628 addElId: function addElId($el, id) { 20629 $el.attr('id', id); 20630 return $el; 20631 }, 20632 addElLive: function addElLive($el, live) { 20633 $el.attr('aria-live', live); 20634 return $el; 20635 }, 20636 disableEl: function disableEl($el) { 20637 $el.attr('aria-disabled', true); 20638 return $el; 20639 }, 20640 enableEl: function enableEl($el) { 20641 $el.attr('aria-disabled', false); 20642 return $el; 20643 }, 20644 onEnterOrSpaceKey: function onEnterOrSpaceKey(e) { 20645 if (e.keyCode !== 13 && e.keyCode !== 32) return; 20646 var swiper = this; 20647 var params = swiper.params.a11y; 20648 var $targetEl = $(e.target); 20649 20650 if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) { 20651 if (!(swiper.isEnd && !swiper.params.loop)) { 20652 swiper.slideNext(); 20653 } 20654 20655 if (swiper.isEnd) { 20656 swiper.a11y.notify(params.lastSlideMessage); 20657 } else { 20658 swiper.a11y.notify(params.nextSlideMessage); 20659 } 20660 } 20661 20662 if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) { 20663 if (!(swiper.isBeginning && !swiper.params.loop)) { 20664 swiper.slidePrev(); 20665 } 20666 20667 if (swiper.isBeginning) { 20668 swiper.a11y.notify(params.firstSlideMessage); 20669 } else { 20670 swiper.a11y.notify(params.prevSlideMessage); 20671 } 20672 } 20673
20674 if (swiper.pagination && $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))) { 20675 $targetEl[0].click(); 20676 } 20677 }, 20678 notify: function notify(message) { 20679 var swiper = this; 20680 var notification = swiper.a11y.liveRegion; 20681 if (notification.length === 0) return; 20682 notification.html(''); 20683 notification.html(message); 20684 }, 20685 updateNavigation: function updateNavigation() { 20686 var swiper = this; 20687 if (swiper.params.loop || !swiper.navigation) return; 20688 var _swiper$navigation = swiper.navigation, 20689 $nextEl = _swiper$navigation.$nextEl, 20690 $prevEl = _swiper$navigation.$prevEl; 20691 20692 if ($prevEl && $prevEl.length > 0) { 20693 if (swiper.isBeginning) { 20694 swiper.a11y.disableEl($prevEl); 20695 swiper.a11y.makeElNotFocusable($prevEl); 20696 } else { 20697 swiper.a11y.enableEl($prevEl); 20698 swiper.a11y.makeElFocusable($prevEl); 20699 } 20700 } 20701 20702 if ($nextEl && $nextEl.length > 0) { 20703 if (swiper.isEnd) { 20704 swiper.a11y.disableEl($nextEl); 20705 swiper.a11y.makeElNotFocusable($nextEl); 20706 } else { 20707 swiper.a11y.enableEl($nextEl); 20708 swiper.a11y.makeElFocusable($nextEl); 20709 } 20710 } 20711 }, 20712 updatePagination: function updatePagination() { 20713 var swiper = this; 20714 var params = swiper.params.a11y; 20715 20716 if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) { 20717 swiper.pagination.bullets.each(function (bulletEl) { 20718 var $bulletEl = $(bulletEl); 20719 swiper.a11y.makeElFocusable($bulletEl); 20720 20721 if (!swiper.params.pagination.renderBullet) { 20722 swiper.a11y.addElRole($bulletEl, 'button'); 20723 swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, $bulletEl.index() + 1)); 20724 } 20725 }); 20726 } 20727 }, 20728 init: function init() { 20729 var swiper = this; 20730 var params = swiper.params.a11y; 20731 swiper.$el.append(swiper.a11y.liveRegion); 20732 var $containerEl = swiper.$el; 20733 20734 if (params.containerRoleDescriptionMessage) { 20735 swiper.a11y.addElRoleDescription($containerEl, params.containerRoleDescriptionMessage); 20736 } 20737 20738 if (params.containerMessage) { 20739 swiper.a11y.addElLabel($containerEl, params.containerMessage); 20740 } 20741 20742 var $wrapperEl = swiper.$wrapperEl; 20743 var wrapperId = $wrapperEl.attr('id') || "swiper-wrapper-" + swiper.a11y.getRandomNumber(16); 20744 var live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite'; 20745 swiper.a11y.addElId($wrapperEl, wrapperId); 20746 swiper.a11y.addElLive($wrapperEl, live); 20747 20748 if (params.itemRoleDescriptionMessage) { 20749 swiper.a11y.addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage); 20750 } 20751 20752 swiper.a11y.addElRole($(swiper.slides), params.slideRole); 20753 swiper.slides.each(function (slideEl) { 20754 var $slideEl = $(slideEl); 20755 var ariaLabelMessage = params.slideLabelMessage.replace(/\{\{index\}\}/, $slideEl.index() + 1).replace(/\{\{slidesLength\}\}/, swiper.slides.length); 20756 swiper.a11y.addElLabel($slideEl, ariaLabelMessage); 20757 }); 20758 var $nextEl; 20759 var $prevEl; 20760 20761 if (swiper.navigation && swiper.navigation.$nextEl) { 20762 $nextEl = swiper.navigation.$nextEl; 20763 } 20764 20765 if (swiper.navigation && swiper.navigation.$prevEl) { 20766 $prevEl = swiper.navigation.$prevEl; 20767 } 20768 20769 if ($nextEl && $nextEl.length) { 20770 swiper.a11y.makeElFocusable($nextEl); 20771 20772 if ($nextEl[0].tagName !== 'BUTTON') { 20773 swiper.a11y.addElRole($nextEl, 'button'); 20774 $nextEl.on('keydown', swiper.a11y.onEnterOrSpaceKey); 20775 } 20776 20777 swiper.a11y.addElLabel($nextEl, params.nextSlideMessage); 20778 swiper.a11y.addElControls($nextEl, wrapperId); 20779 } 20780 20781 if ($prevEl && $prevEl.length) { 20782 swiper.a11y.makeElFocusable($prevEl); 20783 20784 if ($prevEl[0].tagName !== 'BUTTON') { 20785 swiper.a11y.addElRole($prevEl, 'button'); 20786 $prevEl.on('keydown', swiper.a11y.onEnterOrSpaceKey); 20787 } 20788 20789 swiper.a11y.addElLabel($prevEl, params.prevSlideMessage); 20790 swiper.a11y.addElControls($prevEl, wrapperId); 20791 } 20792 20793 if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) { 20794 swiper.pagination.$el.on('keydown', classesToSelector(swiper.params.pagination.bulletClass), swiper.a11y.onEnterOrSpaceKey); 20795 } 20796 }, 20797 destroy: function destroy() { 20798 var swiper = this; 20799 if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove(); 20800 var $nextEl; 20801 var $prevEl; 20802 20803 if (swiper.navigation && swiper.navigation.$nextEl) { 20804 $nextEl = swiper.navigation.$nextEl; 20805 } 20806 20807 if (swiper.navigation && swiper.navigation.$prevEl) { 20808 $prevEl = swiper.navigation.$prevEl; 20809 } 20810 20811 if ($nextEl) { 20812 $nextEl.off('keydown', swiper.a11y.onEnterOrSpaceKey); 20813 } 20814 20815 if ($prevEl) { 20816 $prevEl.off('keydown', swiper.a11y.onEnterOrSpaceKey); 20817 } 20818 20819 if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) { 20820 swiper.pagination.$el.off('keydown', classesToSelector(swiper.params.pagination.bulletClass), swiper.a11y.onEnterOrSpaceKey); 20821 } 20822 } 20823 }; 20824 var A11y$1 = { 20825 name: 'a11y', 20826 params: { 20827 a11y: { 20828 enabled: true, 20829 notificationClass: 'swiper-notification', 20830 prevSlideMessage: 'Previous slide', 20831 nextSlideMessage: 'Next slide', 20832 firstSlideMessage: 'This is the first slide', 20833 lastSlideMessage: 'This is the last slide', 20834 paginationBulletMessage: 'Go to slide {{index}}', 20835 slideLabelMessage: '{{index}} / {{slidesLength}}', 20836 containerMessage: null, 20837 containerRoleDescriptionMessage: null, 20838 itemRoleDescriptionMessage: null, 20839 slideRole: 'group' 20840 } 20841 }, 20842 create: function create() { 20843 var swiper = this; 20844 bindModuleMethods(swiper, { 20845 a11y: _extends({}, A11y, { 20846 liveRegion: $("<span class=\"" + swiper.params.a11y.notificationClass + "\" aria-live=\"assertive\" aria-atomic=\"true\"></span>") 20847 }) 20848 }); 20849 }, 20850 on: { 20851 afterInit: function afterInit(swiper) { 20852 if (!swiper.params.a11y.enabled) return; 20853 swiper.a11y.init(); 20854 swiper.a11y.updateNavigation(); 20855 }, 20856 toEdge: function toEdge(swiper) { 20857 if (!swiper.params.a11y.enabled) return; 20858 swiper.a11y.updateNavigation(); 20859 },
20860 fromEdge: function fromEdge(swiper) { 20861 if (!swiper.params.a11y.enabled) return; 20862 swiper.a11y.updateNavigation(); 20863 }, 20864 paginationUpdate: function paginationUpdate(swiper) { 20865 if (!swiper.params.a11y.enabled) return; 20866 swiper.a11y.updatePagination(); 20867 }, 20868 destroy: function destroy(swiper) { 20869 if (!swiper.params.a11y.enabled) return; 20870 swiper.a11y.destroy(); 20871 } 20872 } 20873 }; 20874 var History = { 20875 init: function init() { 20876 var swiper = this; 20877 var window = getWindow(); 20878 if (!swiper.params.history) return; 20879 20880 if (!window.history || !window.history.pushState) { 20881 swiper.params.history.enabled = false; 20882 swiper.params.hashNavigation.enabled = true; 20883 return; 20884 } 20885 20886 var history = swiper.history; 20887 history.initialized = true; 20888 history.paths = History.getPathValues(swiper.params.url); 20889 if (!history.paths.key && !history.paths.value) return; 20890 history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit); 20891 20892 if (!swiper.params.history.replaceState) { 20893 window.addEventListener('popstate', swiper.history.setHistoryPopState); 20894 } 20895 }, 20896 destroy: function destroy() { 20897 var swiper = this; 20898 var window = getWindow(); 20899 20900 if (!swiper.params.history.replaceState) { 20901 window.removeEventListener('popstate', swiper.history.setHistoryPopState); 20902 } 20903 }, 20904 setHistoryPopState: function setHistoryPopState() { 20905 var swiper = this; 20906 swiper.history.paths = History.getPathValues(swiper.params.url); 20907 swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false); 20908 }, 20909 getPathValues: function getPathValues(urlOverride) { 20910 var window = getWindow(); 20911 var location; 20912 20913 if (urlOverride) { 20914 location = new URL(urlOverride); 20915 } else { 20916 location = window.location; 20917 } 20918 20919 var pathArray = location.pathname.slice(1).split('/').filter(function (part) { 20920 return part !== ''; 20921 }); 20922 var total = pathArray.length; 20923 var key = pathArray[total - 2]; 20924 var value = pathArray[total - 1]; 20925 return { 20926 key: key, 20927 value: value 20928 }; 20929 }, 20930 setHistory: function setHistory(key, index) { 20931 var swiper = this; 20932 var window = getWindow(); 20933 if (!swiper.history.initialized || !swiper.params.history.enabled) return; 20934 var location; 20935 20936 if (swiper.params.url) { 20937 location = new URL(swiper.params.url); 20938 } else { 20939 location = window.location; 20940 } 20941 20942 var slide = swiper.slides.eq(index); 20943 var value = History.slugify(slide.attr('data-history')); 20944 20945 if (swiper.params.history.root.length > 0) { 20946 var root = swiper.params.history.root; 20947 if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1); 20948 value = root + "/" + key + "/" + value; 20949 } else if (!location.pathname.includes(key)) { 20950 value = key + "/" + value; 20951 } 20952 20953 var currentState = window.history.state; 20954 20955 if (currentState && currentState.value === value) { 20956 return; 20957 } 20958 20959 if (swiper.params.history.replaceState) { 20960 window.history.replaceState({ 20961 value: value 20962 }, null, value); 20963 } else { 20964 window.history.pushState({ 20965 value: value 20966 }, null, value); 20967 } 20968 }, 20969 slugify: function slugify(text) { 20970 return text.toString().replace(/\s+/g, '-').replace(/[^\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, ''); 20971 }, 20972 scrollToSlide: function scrollToSlide(speed, value, runCallbacks) { 20973 var swiper = this; 20974 20975 if (value) { 20976 for (var i = 0, length = swiper.slides.length; i < length; i += 1) { 20977 var slide = swiper.slides.eq(i); 20978 var slideHistory = History.slugify(slide.attr('data-history')); 20979 20980 if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) { 20981 var index = slide.index(); 20982 swiper.slideTo(index, speed, runCallbacks); 20983 } 20984 } 20985 } else { 20986 swiper.slideTo(0, speed, runCallbacks); 20987 } 20988 } 20989 }; 20990 var History$1 = { 20991 name: 'history', 20992 params: { 20993 history: { 20994 enabled: false, 20995 root: '', 20996 replaceState: false, 20997 key: 'slides' 20998 } 20999 }, 21000 create: function create() { 21001 var swiper = this; 21002 bindModuleMethods(swiper, { 21003 history: _extends({}, History) 21004 }); 21005 }, 21006 on: { 21007 init: function init(swiper) { 21008 if (swiper.params.history.enabled) { 21009 swiper.history.init(); 21010 } 21011 }, 21012 destroy: function destroy(swiper) { 21013 if (swiper.params.history.enabled) { 21014 swiper.history.destroy(); 21015 } 21016 }, 21017 'transitionEnd _freeModeNoMomentumRelease': function transitionEnd_freeModeNoMomentumRelease(swiper) { 21018 if (swiper.history.initialized) { 21019 swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex); 21020 } 21021 }, 21022 slideChange: function slideChange(swiper) { 21023 if (swiper.history.initialized && swiper.params.cssMode) { 21024 swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex); 21025 } 21026 } 21027 } 21028 }; 21029 var HashNavigation = { 21030 onHashCange: function onHashCange() { 21031 var swiper = this; 21032 var document = getDocument(); 21033 swiper.emit('hashChange'); 21034 var newHash = document.location.hash.replace('#', ''); 21035 var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash'); 21036 21037 if (newHash !== activeSlideHash) { 21038 var newIndex = swiper.$wrapperEl.children("." + swiper.params.slideClass + "[data-hash=\"" + newHash + "\"]").index(); 21039 if (typeof newIndex === 'undefined') return; 21040 swiper.slideTo(newIndex); 21041 } 21042 }, 21043 setHash: function setHash() { 21044 var swiper = this; 21045 var window = getWindow(); 21046 var document = getDocument(); 21047 if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return; 21048 21049 if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) { 21050 window.history.replaceState(null, null, "#" + swiper.slides.eq(swiper.activeIndex).attr('data-hash') || ''); 21051 swiper.emit('hashSet'); 21052 } else { 21053 var slide = swiper.slides.eq(swiper.activeIndex); 21054 var hash = slide.attr('data-hash') || slide.attr('data-history'); 21055 document.location.hash = hash || ''; 21056 swiper.emit('hashSet'); 21057 } 21058 },
21059 init: function init() { 21060 var swiper = this; 21061 var document = getDocument(); 21062 var window = getWindow(); 21063 if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return; 21064 swiper.hashNavigation.initialized = true; 21065 var hash = document.location.hash.replace('#', ''); 21066 21067 if (hash) { 21068 var speed = 0; 21069 21070 for (var i = 0, length = swiper.slides.length; i < length; i += 1) { 21071 var slide = swiper.slides.eq(i); 21072 var slideHash = slide.attr('data-hash') || slide.attr('data-history'); 21073 21074 if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) { 21075 var index = slide.index(); 21076 swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true); 21077 } 21078 } 21079 } 21080 21081 if (swiper.params.hashNavigation.watchState) { 21082 $(window).on('hashchange', swiper.hashNavigation.onHashCange); 21083 } 21084 }, 21085 destroy: function destroy() { 21086 var swiper = this; 21087 var window = getWindow(); 21088 21089 if (swiper.params.hashNavigation.watchState) { 21090 $(window).off('hashchange', swiper.hashNavigation.onHashCange); 21091 } 21092 } 21093 }; 21094 var HashNavigation$1 = { 21095 name: 'hash-navigation', 21096 params: { 21097 hashNavigation: { 21098 enabled: false, 21099 replaceState: false, 21100 watchState: false 21101 } 21102 }, 21103 create: function create() { 21104 var swiper = this; 21105 bindModuleMethods(swiper, { 21106 hashNavigation: _extends({ 21107 initialized: false 21108 }, HashNavigation) 21109 }); 21110 }, 21111 on: { 21112 init: function init(swiper) { 21113 if (swiper.params.hashNavigation.enabled) { 21114 swiper.hashNavigation.init(); 21115 } 21116 }, 21117 destroy: function destroy(swiper) { 21118 if (swiper.params.hashNavigation.enabled) { 21119 swiper.hashNavigation.destroy(); 21120 } 21121 }, 21122 'transitionEnd _freeModeNoMomentumRelease': function transitionEnd_freeModeNoMomentumRelease(swiper) { 21123 if (swiper.hashNavigation.initialized) { 21124 swiper.hashNavigation.setHash(); 21125 } 21126 }, 21127 slideChange: function slideChange(swiper) { 21128 if (swiper.hashNavigation.initialized && swiper.params.cssMode) { 21129 swiper.hashNavigation.setHash(); 21130 } 21131 } 21132 } 21133 }; 21134 var Autoplay = { 21135 run: function run() { 21136 var swiper = this; 21137 var $activeSlideEl = swiper.slides.eq(swiper.activeIndex); 21138 var delay = swiper.params.autoplay.delay; 21139 21140 if ($activeSlideEl.attr('data-swiper-autoplay')) { 21141 delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay; 21142 } 21143 21144 clearTimeout(swiper.autoplay.timeout); 21145 swiper.autoplay.timeout = nextTick(function () { 21146 var autoplayResult; 21147 21148 if (swiper.params.autoplay.reverseDirection) { 21149 if (swiper.params.loop) { 21150 swiper.loopFix(); 21151 autoplayResult = swiper.slidePrev(swiper.params.speed, true, true); 21152 swiper.emit('autoplay'); 21153 } else if (!swiper.isBeginning) { 21154 autoplayResult = swiper.slidePrev(swiper.params.speed, true, true); 21155 swiper.emit('autoplay'); 21156 } else if (!swiper.params.autoplay.stopOnLastSlide) { 21157 autoplayResult = swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true); 21158 swiper.emit('autoplay'); 21159 } else { 21160 swiper.autoplay.stop(); 21161 } 21162 } else if (swiper.params.loop) { 21163 swiper.loopFix(); 21164 autoplayResult = swiper.slideNext(swiper.params.speed, true, true); 21165 swiper.emit('autoplay'); 21166 } else if (!swiper.isEnd) { 21167 autoplayResult = swiper.slideNext(swiper.params.speed, true, true); 21168 swiper.emit('autoplay'); 21169 } else if (!swiper.params.autoplay.stopOnLastSlide) { 21170 autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true); 21171 swiper.emit('autoplay'); 21172 } else { 21173 swiper.autoplay.stop(); 21174 } 21175 21176 if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run();else if (autoplayResult === false) { 21177 swiper.autoplay.run(); 21178 } 21179 }, delay); 21180 }, 21181 start: function start() { 21182 var swiper = this; 21183 if (typeof swiper.autoplay.timeout !== 'undefined') return false;
21184 if (swiper.autoplay.running) return false; 21185 swiper.autoplay.running = true; 21186 swiper.emit('autoplayStart'); 21187 swiper.autoplay.run(); 21188 return true; 21189 }, 21190 stop: function stop() { 21191 var swiper = this; 21192 if (!swiper.autoplay.running) return false; 21193 if (typeof swiper.autoplay.timeout === 'undefined') return false; 21194 21195 if (swiper.autoplay.timeout) { 21196 clearTimeout(swiper.autoplay.timeout); 21197 swiper.autoplay.timeout = undefined; 21198 } 21199 21200 swiper.autoplay.running = false; 21201 swiper.emit('autoplayStop'); 21202 return true; 21203 }, 21204 pause: function pause(speed) { 21205 var swiper = this; 21206 if (!swiper.autoplay.running) return; 21207 if (swiper.autoplay.paused) return; 21208 if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout); 21209 swiper.autoplay.paused = true; 21210 21211 if (speed === 0 || !swiper.params.autoplay.waitForTransition) { 21212 swiper.autoplay.paused = false; 21213 swiper.autoplay.run(); 21214 } else { 21215 ['transitionend', 'webkitTransitionEnd'].forEach(function (event) { 21216 swiper.$wrapperEl[0].addEventListener(event, swiper.autoplay.onTransitionEnd); 21217 }); 21218 } 21219 }, 21220 onVisibilityChange: function onVisibilityChange() { 21221 var swiper = this; 21222 var document = getDocument(); 21223 21224 if (document.visibilityState === 'hidden' && swiper.autoplay.running) { 21225 swiper.autoplay.pause(); 21226 } 21227 21228 if (document.visibilityState === 'visible' && swiper.autoplay.paused) { 21229 swiper.autoplay.run(); 21230 swiper.autoplay.paused = false; 21231 } 21232 }, 21233 onTransitionEnd: function onTransitionEnd(e) { 21234 var swiper = this; 21235 if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return; 21236 if (e.target !== swiper.$wrapperEl[0]) return; 21237 ['transitionend', 'webkitTransitionEnd'].forEach(function (event) { 21238 swiper.$wrapperEl[0].removeEventListener(event, swiper.autoplay.onTransitionEnd); 21239 }); 21240 swiper.autoplay.paused = false; 21241 21242 if (!swiper.autoplay.running) { 21243 swiper.autoplay.stop(); 21244 } else { 21245 swiper.autoplay.run(); 21246 } 21247 }, 21248 onMouseEnter: function onMouseEnter() { 21249 var swiper = this; 21250 21251 if (swiper.params.autoplay.disableOnInteraction) { 21252 swiper.autoplay.stop(); 21253 } else { 21254 swiper.autoplay.pause(); 21255 } 21256 21257 ['transitionend', 'webkitTransitionEnd'].forEach(function (event) { 21258 swiper.$wrapperEl[0].removeEventListener(event, swiper.autoplay.onTransitionEnd); 21259 }); 21260 }, 21261 onMouseLeave: function onMouseLeave() { 21262 var swiper = this; 21263 21264 if (swiper.params.autoplay.disableOnInteraction) { 21265 return; 21266 } 21267 21268 swiper.autoplay.paused = false; 21269 swiper.autoplay.run(); 21270 }, 21271 attachMouseEvents: function attachMouseEvents() { 21272 var swiper = this; 21273 21274 if (swiper.params.autoplay.pauseOnMouseEnter) { 21275 swiper.$el.on('mouseenter', swiper.autoplay.onMouseEnter); 21276 swiper.$el.on('mouseleave', swiper.autoplay.onMouseLeave); 21277 } 21278 }, 21279 detachMouseEvents: function detachMouseEvents() { 21280 var swiper = this; 21281 swiper.$el.off('mouseenter', swiper.autoplay.onMouseEnter); 21282 swiper.$el.off('mouseleave', swiper.autoplay.onMouseLeave); 21283 } 21284 }; 21285 var Autoplay$1 = { 21286 name: 'autoplay', 21287 params: { 21288 autoplay: { 21289 enabled: false, 21290 delay: 3000, 21291 waitForTransition: true, 21292 disableOnInteraction: true, 21293 stopOnLastSlide: false, 21294 reverseDirection: false, 21295 pauseOnMouseEnter: false 21296 } 21297 }, 21298 create: function create() { 21299 var swiper = this; 21300 bindModuleMethods(swiper, { 21301 autoplay: _extends({}, Autoplay, { 21302 running: false, 21303 paused: false 21304 }) 21305 }); 21306 }, 21307 on: { 21308 init: function init(swiper) { 21309 if (swiper.params.autoplay.enabled) { 21310 swiper.autoplay.start(); 21311 var document = getDocument(); 21312 document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange); 21313 swiper.autoplay.attachMouseEvents(); 21314 } 21315 }, 21316 beforeTransitionStart: function beforeTransitionStart(swiper, speed, internal) { 21317 if (swiper.autoplay.running) { 21318 if (internal || !swiper.params.autoplay.disableOnInteraction) { 21319 swiper.autoplay.pause(speed); 21320 } else { 21321 swiper.autoplay.stop(); 21322 } 21323 } 21324 }, 21325 sliderFirstMove: function sliderFirstMove(swiper) { 21326 if (swiper.autoplay.running) { 21327 if (swiper.params.autoplay.disableOnInteraction) { 21328 swiper.autoplay.stop(); 21329 } else { 21330 swiper.autoplay.pause(); 21331 } 21332 } 21333 }, 21334 touchEnd: function touchEnd(swiper) { 21335 if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) { 21336 swiper.autoplay.run(); 21337 } 21338 }, 21339 destroy: function destroy(swiper) { 21340 swiper.autoplay.detachMouseEvents(); 21341 21342 if (swiper.autoplay.running) { 21343 swiper.autoplay.stop(); 21344 } 21345 21346 var document = getDocument(); 21347 document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange); 21348 } 21349 } 21350 }; 21351 var Fade = { 21352 setTranslate: function setTranslate() { 21353 var swiper = this; 21354 var slides = swiper.slides; 21355 21356 for (var i = 0; i < slides.length; i += 1) { 21357 var $slideEl = swiper.slides.eq(i); 21358 var offset = $slideEl[0].swiperSlideOffset; 21359 var tx = -offset; 21360 if (!swiper.params.virtualTranslate) tx -= swiper.translate; 21361 var ty = 0; 21362 21363 if (!swiper.isHorizontal()) { 21364 ty = tx; 21365 tx = 0; 21366 } 21367 21368 var slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0); 21369 $slideEl.css({ 21370 opacity: slideOpacity 21371 }).transform("translate3d(" + tx + "px, " + ty + "px, 0px)"); 21372 } 21373 }, 21374 setTransition: function setTransition(duration) { 21375 var swiper = this; 21376 var slides = swiper.slides, 21377 $wrapperEl = swiper.$wrapperEl; 21378 slides.transition(duration); 21379 21380 if (swiper.params.virtualTranslate && duration !== 0) { 21381 var eventTriggered = false;
21382 slides.transitionEnd(function () { 21383 if (eventTriggered) return; 21384 if (!swiper || swiper.destroyed) return; 21385 eventTriggered = true; 21386 swiper.animating = false; 21387 var triggerEvents = ['webkitTransitionEnd', 'transitionend']; 21388 21389 for (var i = 0; i < triggerEvents.length; i += 1) { 21390 $wrapperEl.trigger(triggerEvents[i]); 21391 } 21392 }); 21393 } 21394 } 21395 }; 21396 var EffectFade = { 21397 name: 'effect-fade', 21398 params: { 21399 fadeEffect: { 21400 crossFade: false 21401 } 21402 }, 21403 create: function create() { 21404 var swiper = this; 21405 bindModuleMethods(swiper, { 21406 fadeEffect: _extends({}, Fade) 21407 }); 21408 }, 21409 on: { 21410 beforeInit: function beforeInit(swiper) { 21411 if (swiper.params.effect !== 'fade') return; 21412 swiper.classNames.push(swiper.params.containerModifierClass + "fade"); 21413 var overwriteParams = { 21414 slidesPerView: 1, 21415 slidesPerColumn: 1, 21416 slidesPerGroup: 1, 21417 watchSlidesProgress: true, 21418 spaceBetween: 0, 21419 virtualTranslate: true 21420 }; 21421 extend(swiper.params, overwriteParams); 21422 extend(swiper.originalParams, overwriteParams); 21423 }, 21424 setTranslate: function setTranslate(swiper) { 21425 if (swiper.params.effect !== 'fade') return; 21426 swiper.fadeEffect.setTranslate(); 21427 }, 21428 setTransition: function setTransition(swiper, duration) { 21429 if (swiper.params.effect !== 'fade') return; 21430 swiper.fadeEffect.setTransition(duration); 21431 } 21432 } 21433 }; 21434 var Cube = { 21435 setTranslate: function setTranslate() { 21436 var swiper = this; 21437 var $el = swiper.$el, 21438 $wrapperEl = swiper.$wrapperEl, 21439 slides = swiper.slides, 21440 swiperWidth = swiper.width, 21441 swiperHeight = swiper.height, 21442 rtl = swiper.rtlTranslate, 21443 swiperSize = swiper.size, 21444 browser = swiper.browser; 21445 var params = swiper.params.cubeEffect; 21446 var isHorizontal = swiper.isHorizontal(); 21447 var isVirtual = swiper.virtual && swiper.params.virtual.enabled; 21448 var wrapperRotate = 0; 21449 var $cubeShadowEl; 21450 21451 if (params.shadow) { 21452 if (isHorizontal) { 21453 $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow'); 21454 21455 if ($cubeShadowEl.length === 0) { 21456 $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>'); 21457 $wrapperEl.append($cubeShadowEl); 21458 } 21459 21460 $cubeShadowEl.css({ 21461 height: swiperWidth + "px" 21462 }); 21463 } else { 21464 $cubeShadowEl = $el.find('.swiper-cube-shadow'); 21465 21466 if ($cubeShadowEl.length === 0) { 21467 $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>'); 21468 $el.append($cubeShadowEl); 21469 } 21470 } 21471 } 21472 21473 for (var i = 0; i < slides.length; i += 1) { 21474 var $slideEl = slides.eq(i); 21475 var slideIndex = i; 21476 21477 if (isVirtual) { 21478 slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10); 21479 } 21480 21481 var slideAngle = slideIndex * 90; 21482 var round = Math.floor(slideAngle / 360); 21483 21484 if (rtl) { 21485 slideAngle = -slideAngle; 21486 round = Math.floor(-slideAngle / 360); 21487 } 21488 21489 var progress = Math.max(Math.min($slideEl[0].progress, 1), -1); 21490 var tx = 0; 21491 var ty = 0; 21492 var tz = 0; 21493 21494 if (slideIndex % 4 === 0) { 21495 tx = -round * 4 * swiperSize; 21496 tz = 0; 21497 } else if ((slideIndex - 1) % 4 === 0) { 21498 tx = 0; 21499 tz = -round * 4 * swiperSize; 21500 } else if ((slideIndex - 2) % 4 === 0) { 21501 tx = swiperSize + round * 4 * swiperSize; 21502 tz = swiperSize; 21503 } else if ((slideIndex - 3) % 4 === 0) { 21504 tx = -swiperSize; 21505 tz = 3 * swiperSize + swiperSize * 4 * round; 21506 } 21507 21508 if (rtl) { 21509 tx = -tx; 21510 } 21511 21512 if (!isHorizontal) { 21513 ty = tx; 21514 tx = 0; 21515 } 21516 21517 var transform = "rotateX(" + (isHorizontal ? 0 : -slideAngle) + "deg) rotateY(" + (isHorizontal ? slideAngle : 0) + "deg) translate3d(" + tx + "px, " + ty + "px, " + tz + "px)"; 21518 21519 if (progress <= 1 && progress > -1) { 21520 wrapperRotate = slideIndex * 90 + progress * 90; 21521 if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90; 21522 } 21523 21524 $slideEl.transform(transform); 21525 21526 if (params.slideShadows) { 21527 var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); 21528 var shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); 21529 21530 if (shadowBefore.length === 0) { 21531 shadowBefore = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'left' : 'top') + "\"></div>"); 21532 $slideEl.append(shadowBefore); 21533 } 21534 21535 if (shadowAfter.length === 0) { 21536 shadowAfter = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'right' : 'bottom') + "\"></div>"); 21537 $slideEl.append(shadowAfter); 21538 } 21539 21540 if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); 21541 if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); 21542 } 21543 } 21544 21545 $wrapperEl.css({
21546 '-webkit-transform-origin': "50% 50% -" + swiperSize / 2 + "px", 21547 '-moz-transform-origin': "50% 50% -" + swiperSize / 2 + "px", 21548 '-ms-transform-origin': "50% 50% -" + swiperSize / 2 + "px", 21549 'transform-origin': "50% 50% -" + swiperSize / 2 + "px" 21550 }); 21551 21552 if (params.shadow) { 21553 if (isHorizontal) { 21554 $cubeShadowEl.transform("translate3d(0px, " + (swiperWidth / 2 + params.shadowOffset) + "px, " + -swiperWidth / 2 + "px) rotateX(90deg) rotateZ(0deg) scale(" + params.shadowScale + ")"); 21555 } else { 21556 var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90; 21557 var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2); 21558 var scale1 = params.shadowScale; 21559 var scale2 = params.shadowScale / multiplier; 21560 var offset = params.shadowOffset; 21561 $cubeShadowEl.transform("scale3d(" + scale1 + ", 1, " + scale2 + ") translate3d(0px, " + (swiperHeight / 2 + offset) + "px, " + -swiperHeight / 2 / scale2 + "px) rotateX(-90deg)"); 21562 } 21563 } 21564 21565 var zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0; 21566 $wrapperEl.transform("translate3d(0px,0," + zFactor + "px) rotateX(" + (swiper.isHorizontal() ? 0 : wrapperRotate) + "deg) rotateY(" + (swiper.isHorizontal() ? -wrapperRotate : 0) + "deg)"); 21567 }, 21568 setTransition: function setTransition(duration) { 21569 var swiper = this; 21570 var $el = swiper.$el, 21571 slides = swiper.slides; 21572 slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); 21573 21574 if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) { 21575 $el.find('.swiper-cube-shadow').transition(duration); 21576 } 21577 } 21578 }; 21579 var EffectCube = { 21580 name: 'effect-cube', 21581 params: { 21582 cubeEffect: { 21583 slideShadows: true, 21584 shadow: true, 21585 shadowOffset: 20, 21586 shadowScale: 0.94 21587 } 21588 }, 21589 create: function create() { 21590 var swiper = this; 21591 bindModuleMethods(swiper, { 21592 cubeEffect: _extends({}, Cube) 21593 }); 21594 }, 21595 on: { 21596 beforeInit: function beforeInit(swiper) { 21597 if (swiper.params.effect !== 'cube') return; 21598 swiper.classNames.push(swiper.params.containerModifierClass + "cube"); 21599 swiper.classNames.push(swiper.params.containerModifierClass + "3d"); 21600 var overwriteParams = { 21601 slidesPerView: 1, 21602 slidesPerColumn: 1, 21603 slidesPerGroup: 1, 21604 watchSlidesProgress: true, 21605 resistanceRatio: 0, 21606 spaceBetween: 0, 21607 centeredSlides: false, 21608 virtualTranslate: true 21609 }; 21610 extend(swiper.params, overwriteParams); 21611 extend(swiper.originalParams, overwriteParams); 21612 }, 21613 setTranslate: function setTranslate(swiper) { 21614 if (swiper.params.effect !== 'cube') return; 21615 swiper.cubeEffect.setTranslate(); 21616 }, 21617 setTransition: function setTransition(swiper, duration) { 21618 if (swiper.params.effect !== 'cube') return; 21619 swiper.cubeEffect.setTransition(duration); 21620 } 21621 } 21622 }; 21623 var Flip = { 21624 setTranslate: function setTranslate() { 21625 var swiper = this; 21626 var slides = swiper.slides, 21627 rtl = swiper.rtlTranslate; 21628 21629 for (var i = 0; i < slides.length; i += 1) { 21630 var $slideEl = slides.eq(i); 21631 var progress = $slideEl[0].progress; 21632 21633 if (swiper.params.flipEffect.limitRotation) { 21634 progress = Math.max(Math.min($slideEl[0].progress, 1), -1); 21635 } 21636 21637 var offset = $slideEl[0].swiperSlideOffset; 21638 var rotate = -180 * progress; 21639 var rotateY = rotate; 21640 var rotateX = 0; 21641 var tx = -offset; 21642 var ty = 0; 21643 21644 if (!swiper.isHorizontal()) { 21645 ty = tx; 21646 tx = 0; 21647 rotateX = -rotateY; 21648 rotateY = 0; 21649 } else if (rtl) { 21650 rotateY = -rotateY; 21651 } 21652 21653 $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length; 21654 21655 if (swiper.params.flipEffect.slideShadows) { 21656 var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); 21657 var shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); 21658 21659 if (shadowBefore.length === 0) { 21660 shadowBefore = $("<div class=\"swiper-slide-shadow-" + (swiper.isHorizontal() ? 'left' : 'top') + "\"></div>"); 21661 $slideEl.append(shadowBefore); 21662 } 21663 21664 if (shadowAfter.length === 0) { 21665 shadowAfter = $("<div class=\"swiper-slide-shadow-" + (swiper.isHorizontal() ? 'right' : 'bottom') + "\"></div>"); 21666 $slideEl.append(shadowAfter); 21667 } 21668 21669 if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); 21670 if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); 21671 } 21672 21673 $slideEl.transform("translate3d(" + tx + "px, " + ty + "px, 0px) rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg)"); 21674 } 21675 }, 21676 setTransition: function setTransition(duration) { 21677 var swiper = this; 21678 var slides = swiper.slides, 21679 activeIndex = swiper.activeIndex, 21680 $wrapperEl = swiper.$wrapperEl; 21681 slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); 21682 21683 if (swiper.params.virtualTranslate && duration !== 0) { 21684 var eventTriggered = false;
21685 slides.eq(activeIndex).transitionEnd(function onTransitionEnd() { 21686 if (eventTriggered) return; 21687 if (!swiper || swiper.destroyed) return; 21688 eventTriggered = true; 21689 swiper.animating = false; 21690 var triggerEvents = ['webkitTransitionEnd', 'transitionend']; 21691 21692 for (var i = 0; i < triggerEvents.length; i += 1) { 21693 $wrapperEl.trigger(triggerEvents[i]); 21694 } 21695 }); 21696 } 21697 } 21698 }; 21699 var EffectFlip = { 21700 name: 'effect-flip', 21701 params: { 21702 flipEffect: { 21703 slideShadows: true, 21704 limitRotation: true 21705 } 21706 }, 21707 create: function create() { 21708 var swiper = this; 21709 bindModuleMethods(swiper, { 21710 flipEffect: _extends({}, Flip) 21711 }); 21712 }, 21713 on: { 21714 beforeInit: function beforeInit(swiper) { 21715 if (swiper.params.effect !== 'flip') return; 21716 swiper.classNames.push(swiper.params.containerModifierClass + "flip"); 21717 swiper.classNames.push(swiper.params.containerModifierClass + "3d"); 21718 var overwriteParams = { 21719 slidesPerView: 1, 21720 slidesPerColumn: 1, 21721 slidesPerGroup: 1, 21722 watchSlidesProgress: true, 21723 spaceBetween: 0, 21724 virtualTranslate: true 21725 }; 21726 extend(swiper.params, overwriteParams); 21727 extend(swiper.originalParams, overwriteParams); 21728 }, 21729 setTranslate: function setTranslate(swiper) { 21730 if (swiper.params.effect !== 'flip') return; 21731 swiper.flipEffect.setTranslate(); 21732 }, 21733 setTransition: function setTransition(swiper, duration) { 21734 if (swiper.params.effect !== 'flip') return; 21735 swiper.flipEffect.setTransition(duration); 21736 } 21737 } 21738 }; 21739 var Coverflow = { 21740 setTranslate: function setTranslate() { 21741 var swiper = this; 21742 var swiperWidth = swiper.width, 21743 swiperHeight = swiper.height, 21744 slides = swiper.slides, 21745 slidesSizesGrid = swiper.slidesSizesGrid; 21746 var params = swiper.params.coverflowEffect; 21747 var isHorizontal = swiper.isHorizontal(); 21748 var transform = swiper.translate; 21749 var center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2; 21750 var rotate = isHorizontal ? params.rotate : -params.rotate; 21751 var translate = params.depth; 21752 21753 for (var i = 0, length = slides.length; i < length; i += 1) { 21754 var $slideEl = slides.eq(i); 21755 var slideSize = slidesSizesGrid[i]; 21756 var slideOffset = $slideEl[0].swiperSlideOffset; 21757 var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * params.modifier; 21758 var rotateY = isHorizontal ? rotate * offsetMultiplier : 0; 21759 var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; 21760 var translateZ = -translate * Math.abs(offsetMultiplier); 21761 var stretch = params.stretch; 21762 21763 if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) { 21764 stretch = parseFloat(params.stretch) / 100 * slideSize; 21765 } 21766 21767 var translateY = isHorizontal ? 0 : stretch * offsetMultiplier; 21768 var translateX = isHorizontal ? stretch * offsetMultiplier : 0; 21769 var scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); 21770 if (Math.abs(translateX) < 0.001) translateX = 0; 21771 if (Math.abs(translateY) < 0.001) translateY = 0; 21772 if (Math.abs(translateZ) < 0.001) translateZ = 0; 21773 if (Math.abs(rotateY) < 0.001) rotateY = 0; 21774 if (Math.abs(rotateX) < 0.001) rotateX = 0; 21775 if (Math.abs(scale) < 0.001) scale = 0; 21776 var slideTransform = "translate3d(" + translateX + "px," + translateY + "px," + translateZ + "px) rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg) scale(" + scale + ")"; 21777 $slideEl.transform(slideTransform); 21778 $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1; 21779 21780 if (params.slideShadows) { 21781 var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); 21782 var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); 21783 21784 if ($shadowBeforeEl.length === 0) { 21785 $shadowBeforeEl = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'left' : 'top') + "\"></div>"); 21786 $slideEl.append($shadowBeforeEl); 21787 } 21788 21789 if ($shadowAfterEl.length === 0) { 21790 $shadowAfterEl = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'right' : 'bottom') + "\"></div>"); 21791 $slideEl.append($shadowAfterEl); 21792 } 21793 21794 if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; 21795 if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0; 21796 } 21797 } 21798 }, 21799 setTransition: function setTransition(duration) { 21800 var swiper = this; 21801 swiper.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); 21802 } 21803 }; 21804 var EffectCoverflow = { 21805 name: 'effect-coverflow', 21806 params: { 21807 coverflowEffect: { 21808 rotate: 50, 21809 stretch: 0, 21810 depth: 100, 21811 scale: 1, 21812 modifier: 1, 21813 slideShadows: true 21814 } 21815 }, 21816 create: function create() { 21817 var swiper = this; 21818 bindModuleMethods(swiper, { 21819 coverflowEffect: _extends({}
21819, Coverflow) 21820 }); 21821 }, 21822 on: { 21823 beforeInit: function beforeInit(swiper) { 21824 if (swiper.params.effect !== 'coverflow') return; 21825 swiper.classNames.push(swiper.params.containerModifierClass + "coverflow"); 21826 swiper.classNames.push(swiper.params.containerModifierClass + "3d"); 21827 swiper.params.watchSlidesProgress = true; 21828 swiper.originalParams.watchSlidesProgress = true; 21829 }, 21830 setTranslate: function setTranslate(swiper) { 21831 if (swiper.params.effect !== 'coverflow') return; 21832 swiper.coverflowEffect.setTranslate(); 21833 }, 21834 setTransition: function setTransition(swiper, duration) { 21835 if (swiper.params.effect !== 'coverflow') return; 21836 swiper.coverflowEffect.setTransition(duration); 21837 } 21838 } 21839 }; 21840 var Thumbs = { 21841 init: function init() { 21842 var swiper = this; 21843 var thumbsParams = swiper.params.thumbs; 21844 if (swiper.thumbs.initialized) return false; 21845 swiper.thumbs.initialized = true; 21846 var SwiperClass = swiper.constructor; 21847 21848 if (thumbsParams.swiper instanceof SwiperClass) { 21849 swiper.thumbs.swiper = thumbsParams.swiper; 21850 extend(swiper.thumbs.swiper.originalParams, { 21851 watchSlidesProgress: true, 21852 slideToClickedSlide: false 21853 }); 21854 extend(swiper.thumbs.swiper.params, { 21855 watchSlidesProgress: true, 21856 slideToClickedSlide: false 21857 }); 21858 } else if (isObject(thumbsParams.swiper)) { 21859 swiper.thumbs.swiper = new SwiperClass(extend({}, thumbsParams.swiper, { 21860 watchSlidesVisibility: true, 21861 watchSlidesProgress: true, 21862 slideToClickedSlide: false 21863 })); 21864 swiper.thumbs.swiperCreated = true; 21865 } 21866 21867 swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass); 21868 swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick); 21869 return true; 21870 }, 21871 onThumbClick: function onThumbClick() { 21872 var swiper = this; 21873 var thumbsSwiper = swiper.thumbs.swiper; 21874 if (!thumbsSwiper) return; 21875 var clickedIndex = thumbsSwiper.clickedIndex; 21876 var clickedSlide = thumbsSwiper.clickedSlide; 21877 if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return; 21878 if (typeof clickedIndex === 'undefined' || clickedIndex === null) return; 21879 var slideToIndex; 21880 21881 if (thumbsSwiper.params.loop) { 21882 slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10); 21883 } else { 21884 slideToIndex = clickedIndex; 21885 } 21886 21887 if (swiper.params.loop) { 21888 var currentIndex = swiper.activeIndex; 21889 21890 if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) { 21891 swiper.loopFix(); 21892 swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; 21893 currentIndex = swiper.activeIndex; 21894 } 21895 21896 var prevIndex = swiper.slides.eq(currentIndex).prevAll("[data-swiper-slide-index=\"" + slideToIndex + "\"]").eq(0).index(); 21897 var nextIndex = swiper.slides.eq(currentIndex).nextAll("[data-swiper-slide-index=\"" + slideToIndex + "\"]").eq(0).index(); 21898 if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex; 21899 } 21900 21901 swiper.slideTo(slideToIndex); 21902 }, 21903 update: function update(initial) { 21904 var swiper = this; 21905 var thumbsSwiper = swiper.thumbs.swiper; 21906 if (!thumbsSwiper) return; 21907 var slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView; 21908 var autoScrollOffset = swiper.params.thumbs.autoScrollOffset; 21909 var useOffset = autoScrollOffset && !thumbsSwiper.params.loop; 21910 21911 if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) { 21912 var currentThumbsIndex = thumbsSwiper.activeIndex; 21913 var newThumbsIndex; 21914 var direction; 21915 21916 if (thumbsSwiper.params.loop) { 21917 if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) { 21918 thumbsSwiper.loopFix(); 21919 thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft; 21920 currentThumbsIndex = thumbsSwiper.activeIndex; 21921 } 21922 21923 var prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll("[data-swiper-slide-index=\"" + swiper.realIndex + "\"]").eq(0).index(); 21924 var nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll("[data-swiper-slide-index=\"" + swiper.realIndex + "\"]").eq(0).index(); 21925 21926 if (typeof prevThumbsIndex === 'undefined') { 21927 newThumbsIndex = nextThumbsIndex; 21928 } else if (typeof nextThumbsIndex === 'undefined') { 21929 newThumbsIndex = prevThumbsIndex; 21930 } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) { 21931 newThumbsIndex = thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex; 21932 } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) { 21933 newThumbsIndex = nextThumbsIndex; 21934 } else { 21935 newThumbsIndex = prevThumbsIndex; 21936 } 21937 21938 direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev'; 21939 } else { 21940 newThumbsIndex = swiper.realIndex; 21941 direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev'; 21942 } 21943 21944 if (useOffset) { 21945 newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset; 21946 } 21947 21948 if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) { 21949 if (thumbsSwiper.params.centeredSlides) { 21950 if (newThumbsIndex > currentThumbsIndex) { 21951 newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1; 21952 } else { 21953 newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1; 21954 } 21955 } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) ; 21956 21957 thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined); 21958 } 21959 } 21960 21961 var thumbsToActivate = 1; 21962 var thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass; 21963 21964 if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) { 21965 thumbsToActivate = swiper.params.slidesPerView; 21966 } 21967
21968 if (!swiper.params.thumbs.multipleActiveThumbs) { 21969 thumbsToActivate = 1; 21970 } 21971 21972 thumbsToActivate = Math.floor(thumbsToActivate); 21973 thumbsSwiper.slides.removeClass(thumbActiveClass); 21974 21975 if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) { 21976 for (var i = 0; i < thumbsToActivate; i += 1) { 21977 thumbsSwiper.$wrapperEl.children("[data-swiper-slide-index=\"" + (swiper.realIndex + i) + "\"]").addClass(thumbActiveClass); 21978 } 21979 } else { 21980 for (var _i = 0; _i < thumbsToActivate; _i += 1) { 21981 thumbsSwiper.slides.eq(swiper.realIndex + _i).addClass(thumbActiveClass); 21982 } 21983 } 21984 } 21985 }; 21986 var Thumbs$1 = { 21987 name: 'thumbs', 21988 params: { 21989 thumbs: { 21990 swiper: null, 21991 multipleActiveThumbs: true, 21992 autoScrollOffset: 0, 21993 slideThumbActiveClass: 'swiper-slide-thumb-active', 21994 thumbsContainerClass: 'swiper-container-thumbs' 21995 } 21996 }, 21997 create: function create() { 21998 var swiper = this; 21999 bindModuleMethods(swiper, { 22000 thumbs: _extends({ 22001 swiper: null, 22002 initialized: false 22003 }, Thumbs) 22004 }); 22005 }, 22006 on: { 22007 beforeInit: function beforeInit(swiper) { 22008 var thumbs = swiper.params.thumbs; 22009 if (!thumbs || !thumbs.swiper) return; 22010 swiper.thumbs.init(); 22011 swiper.thumbs.update(true); 22012 }, 22013 slideChange: function slideChange(swiper) { 22014 if (!swiper.thumbs.swiper) return; 22015 swiper.thumbs.update(); 22016 }, 22017 update: function update(swiper) { 22018 if (!swiper.thumbs.swiper) return; 22019 swiper.thumbs.update(); 22020 }, 22021 resize: function resize(swiper) { 22022 if (!swiper.thumbs.swiper) return; 22023 swiper.thumbs.update(); 22024 }, 22025 observerUpdate: function observerUpdate(swiper) { 22026 if (!swiper.thumbs.swiper) return; 22027 swiper.thumbs.update(); 22028 }, 22029 setTransition: function setTransition(swiper, duration) { 22030 var thumbsSwiper = swiper.thumbs.swiper; 22031 if (!thumbsSwiper) return; 22032 thumbsSwiper.setTransition(duration); 22033 }, 22034 beforeDestroy: function beforeDestroy(swiper) { 22035 var thumbsSwiper = swiper.thumbs.swiper; 22036 if (!thumbsSwiper) return; 22037 22038 if (swiper.thumbs.swiperCreated && thumbsSwiper) { 22039 thumbsSwiper.destroy(); 22040 } 22041 } 22042 } 22043 }; 22044 var components = [Virtual$1, Keyboard$1, Mousewheel$1, Navigation$1, Pagination$1, Scrollbar$1, Parallax$1, Zoom$1, Lazy$1, Controller$1, A11y$1, History$1, HashNavigation$1, Autoplay$1, EffectFade, EffectCube, EffectFlip, EffectCoverflow, Thumbs$1]; 22045 Swiper.use(components); 22046 return Swiper; 22047}); 22048 22049},{}],9:[function(require,module,exports){ 22050"use strict"; 22051 22052Object.defineProperty(exports, "__esModule", { 22053 value: true 22054}); 22055exports.default = void 0; 22056 22057function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 22058 22059function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 22060 22061function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } 22062 22063var webcam = function () { 22064 function webcam(selector) { 22065 var settings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 22066 22067 _classCallCheck(this, webcam); 22068 22069 this.defaults = { 22070 'timeout': 20, 22071 'progressbarVisibleTime': 10, 22072 'prefix': 'webcam' 22073 }; 22074 this.config = Object.assign(this.defaults, settings); 22075 var webcamItems = document.querySelectorAll(selector); 22076 var index = 0; 22077 22078 for (index = 0; index < webcamItems.length; index++) { 22079 this.run(webcamItems[index], index); 22080 } 22081 } 22082 22083 _createClass(webcam, [{ 22084 key: "run", 22085 value: function run(container, num) { 22086 var _webcam = {}; 22087 _webcam.label = container.querySelector('.webcam-label'); 22088 _webcam.label.innerText = _webcam.label.getAttribute('data-title'); 22089 _webcam.unit = _webcam.label.getAttribute('data-unit'); 22090 _webcam.image = container.querySelector('.webcam-image'); 22091 _webcam.imagesrc = _webcam.image.getAttribute('src'); 22092 _webcam.progressbarContainer = document.createElement('div'); 22093 22094 _webcam.progressbarContainer.setAttribute('class', this.config.prefix + '-progressbar-container'); 22095 22096 container.appendChild(_webcam.progressbarContainer); 22097 _webcam.progressbarWrapper = document.createElement('div'); 22098 22099 _webcam.progressbarWrapper.setAttribute('class', this.config.prefix + '-progressbar'); 22100 22101 _webcam.progressbarContainer.appendChild(_webcam.progressbarWrapper); 22102 22103 _webcam.progressbar = document.createElement('progress'); 22104 22105 _webcam.progressbar.setAttribute('value', 0); 22106 22107 _webcam.progressbar.setAttribute('max', 100); 22108 22109 _webcam.progressbarWrapper.appendChild(_webcam.progressbar); 22110 22111 _webcam.progressbarTimer = document.createElement('div'); 22112 22113 _webcam.progressbarTimer.setAttribute('class', this.config.prefix + '-progressbar-timer'); 22114 22115 _webcam.progressbarContainer.appendChild(_webcam.progressbarTimer); 22116 22117 _webcam.label.id = this.config.prefix + '-label' + num; 22118 _webcam.image.id = this.config.prefix + '-image' + num; 22119 _webcam.progressbar.id = this.config.prefix + '-progressbar' + num; 22120 _webcam.progressbarTimer.id = this.config.prefix + '-progressbar-timer' + num; 22121 22122 _webcam.label.setAttribute('aria-live', 'polite'); 22123 22124 _webcam.image.setAttribute('aria-labelledby', _webcam.progressbar.id + ' ' + _webcam.progressbarTimer.id); 22125 22126 _webcam.progressbar.setAttribute('aria-valuemin', 0); 22127 22128 _webcam.progressbar.setAttribute('data-hidden', 'true'); 22129 22130 this.counter(_webcam); 22131 } 22132 }, { 22133 key: "reloadImage", 22134 value: function reloadImage(_webcam2) { 22135 var date = new Date(); 22136 var timestamp = date.getTime(); 22137 22138 _webcam2.image.setAttribute('src', _webcam2.imagesrc + '?' + timestamp); 22139 } 22140 }, { 22141 key: "updateProgressbar", 22142 value: function updateProgressbar(counter, _webcam3) { 22143 var percent = counter * 100 / this.config.progressbarVisibleTime; 22144 22145 _webcam3.progressbar.setAttribute('value', 100 - percent); 22146 } 22147 }, { 22148 key: "counter", 22149 value: function counter(_webcam4) { 22150 var t = this; 22151 var precision = 25; 22152 var counter = t.config.timeout; 22153 var progressIsVisible = false;
22154 var counterInterval = setInterval(function () { 22155 if (counter <= t.config.progressbarVisibleTime && !progressIsVisible) { 22156 _webcam4.progressbar.setAttribute('data-hidden', 'false'); 22157 22158 progressIsVisible = true; 22159 } 22160 22161 if (counter <= t.config.progressbarVisibleTime) { 22162 t.updateProgressbar(counter, _webcam4); 22163 } 22164 22165 _webcam4.progressbarTimer.innerText = Math.ceil(counter) + ' ' + _webcam4.unit; 22166 22167 if (counter <= 0) { 22168 counter = t.config.timeout; 22169 t.reloadImage(_webcam4); 22170 22171 _webcam4.progressbar.setAttribute('data-hidden', 'true'); 22172 22173 progressIsVisible = false; 22174 } 22175 22176 counter = counter - 1 / precision; 22177 }, 1000 / precision); 22178 } 22179 }]); 22180 22181 return webcam; 22182}(); 22183 22184var _default = webcam; 22185exports.default = _default; 22186 22187},{}],10:[function(require,module,exports){ 22188"use strict"; 22189 22190ready(function () { 22191 var infoButton = document.querySelectorAll('.a5-info-button'); 22192 22193 for (var i = 0; i < infoButton.length; i++) { 22194 infoButton[i].parentNode.classList.add('has-info-button'); 22195 var infoBtn = new pxEasyExpand(infoButton[i], { 22196 closeWithEsc: false, 22197 addCloseButton: false, 22198 keepFocusInTargetElement: false 22199 }); 22200 } 22201}); 22202 22203},{}],11:[function(require,module,exports){ 22204"use strict"; 22205 22206ready(function () { 22207 var hamburger = new pxEasyExpand('#hamburger', { 22208 closeWithEsc: true, 22209 setRootClass: 'offcanvas-visible', 22210 addCloseButton: true, 22211 setFocusToElement: '.js-close', 22212 keepFocusInTargetElement: true, 22213 hiddenWhenOpen: '.page' 22214 }); 22215}); 22216 22217},{}],12:[function(require,module,exports){ 22218"use strict"; 22219 22220var _glightbox = _interopRequireDefault(require("../modules/glightbox.js")); 22221 22222function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 22223 22224function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } 22225 22226function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } 22227 22228function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } 22229 22230function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } 22231 22232function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } 22233 22234function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } 22235 22236ready(function () { 22237 var lightboxInstances = document.querySelectorAll('.a5-text-image figure, .a5-image figure, .a5-image-gallery'); 22238 22239 for (var i = 0; i < lightboxInstances.length; i++) { 22240 var lightboxLinks = lightboxInstances[i].querySelectorAll('a[data-lightbox]'); 22241 22242 if (lightboxLinks.length > 1) { 22243 for (var j = 0; j < lightboxLinks.length; j++) { 22244 var counter = window.lightbox.countText; 22245 counter = counter.replace(/{CUR}/g, j + 1); 22246 counter = counter.replace(/{SUM}/g, lightboxLinks.length); 22247 lightboxLinks[j].setAttribute('data-title', counter); 22248 } 22249 } 22250 22251 lightboxInstances[i].setAttribute('data-lightbox-group', i); 22252 initLightbox('[data-lightbox-group="' + i + '"] a[data-lightbox]'); 22253 } 22254 22255 function initLightbox(selector) { 22256 var lightboxHTML = '<div id="glightbox-body" class="glightbox-container" aria-label="' + window.lightbox.ariaLabel + '"><div class="gloader visible"></div><div class="goverlay"></div><div class="gcontainer"><div id="glightbox-slider" class="gslider"></div><button class="gprev gbtn" aria-label="' + window.lightbox.prevText + '">{prevSVG}</button><button class="gnext gbtn" aria-label="' + window.lightbox.nextText + '">{nextSVG}</button>' + '<details id="gShare" class="gshare" data-hidden="true"><summary title="' + window.lightbox.shareTitle + '">' + window.lightbox.shareSvg + '<span>' + window.lightbox.shareHiddenText + '</span></summary><ul></ul></details>' + '<button class="gclose gbtn" aria-label="' + window.lightbox.closeText + '">{closeSVG}</button></div></div>'; 22257 var lightboxSlideHTML = '<div class="gslide"><div class="gslide-inner-content"><div class="ginner-container"><div class="gslide-media"></div><div class="gslide-description"><div class="gdesc-inner"><strong class="gslide-title"></strong><p class="gslide-desc"></p></div></div></div></div></div>'; 22258 var lightbox = (0, _glightbox.default)({ 22259 selector: selector, 22260 closeOnOutsideClick: false, 22261 lightboxHTML: lightboxHTML, 22262 slideHTML: lightboxSlideHTML, 22263 touchNavigation: true, 22264 moreLength: 0, 22265 loop: true, 22266 zoomable: false, 22267 svg: { 22268 close: window.lightbox.closeSvg, 22269 next: window.lightbox.nextSvg, 22270 prev: window.lightbox.prevSvg 22271 } 22272 }); 22273 var focusableElements = []; 22274 22275 function updateFocusableElements() { 22276 var elements = lightbox.modal.querySelectorAll('button:not(.disabled), summary, details[open] a'); 22277 focusableElements = Array.prototype.slice.call(elements).filter(function (child) { 22278 return !!(child.offsetWidth || child.offsetHeight || child.getClientRects().length); 22279 }); 22280 } 22281 22282 function handleFocus(event) { 22283 if (event.which === 9) { 22284 event.preventDefault(); 22285 var index = focusableElements.indexOf(event.target); 22286 22287 if (!event.shiftKey) { 22288 if (index + 1 == focusableElements.length) { 22289 focusableElements[0].focus(); 22290 } else { 22291 focusableElements[index + 1].focus(); 22292 } 22293 } else { 22294 if (index == 0) { 22295 focusableElements[focusableElements.length - 1].focus(); 22296 } else { 22297 focusableElements[index - 1].focus(); 22298 } 22299 } 22300 } 22301 } 22302 22303 ; 22304 lightbox.on('open', function () { 22305 if (!lightbox.nextButton.classList.contains('disabled')) { 22306 lightbox.nextButton.focus(); 22307 } else { 22308 lightbox.modal.querySelector('.gclose').focus(); 22309 } 22310 22311 lightbox.pxStatus = document.createElement('p'); 22312 lightbox.pxStatus.setAttribute('aria-live', 'polite'); 22313 lightbox.modal.appendChild(lightbox.pxStatus); 22314 lightbox.pxShare = document.getElementById('gShare'); 22315 lightbox.pxShareUL = lightbox.pxShare.querySelector('ul'); 22316 22317 for (var _i = 0, _Object$entries = Object.entries(window.lightbox.shareNetworks); _i < _Object$entries.length; _i++) { 22318 var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2), 22319 key = _Object$entries$_i[0], 22320 value = _Object$entries$_i[1]; 22321 22322 var pxShareItem = document.createElement('li'); 22323 pxShareItem.innerHTML = value; 22324 lightbox.pxShareUL.appendChild(pxShareItem); 22325 } 22326 22327 updateFocusableElements(); 22328 document.addEventListener('keydown', handleFocus, false); 22329 }); 22330 lightbox.on('slide_changed', function (_ref) { 22331 var prev = _ref.prev, 22332 current = _ref.current; 22333 var hasAriaLabelledby = lightbox.modal.querySelector('[aria-labelledby]'); 22334 22335 if (typeof hasAriaLabelledby != 'undefined' && hasAriaLabelledby != null) { 22336 hasAriaLabelledby.removeAttribute('aria-labelledby'); 22337 } 22338 22339 lightbox.pxStatus.innerHTML = ''; 22340 22341 if (current.trigger.hasAttribute('data-title')) { 22342 lightbox.pxStatus.innerHTML = lightbox.pxStatus.innerHTML + ' ' + current.trigger.getAttribute('data-title'); 22343 } 22344 22345 if (current.trigger.hasAttribute('data-description')) { 22346 lightbox.pxStatus.innerHTML = lightbox.pxStatus.innerHTML + ' ' + current.trigger.getAttribute('data-description'); 22347 } 22348 22349 if (current.trigger.hasAttribute('data-alt')) { 22350 lightbox.pxStatus.innerHTML = lightbox.pxStatus.innerHTML + ' ' + current.trigger.getAttribute('data-alt'); 22351 } 22352 22353 lightbox.lastTigger = current.trigger; 22354 22355 if (typeof lightbox.pxShare != 'undefined' && lightbox.pxShare != null) { 22356 if (current.trigger.hasAttribute('data-share-url')) { 22357 var shareElements = lightbox.pxShare.querySelectorAll('a'); 22358 22359 for (var _i2 = 0; _i2 < shareElements.length; _i2++) { 22360 var href = shareElements[_i2].getAttribute('data-href'); 22361 22362 var imageURL = current.trigger.getAttribute('href'); 22363 22364 shareElements[_i2].setAttribute('href', href.replace(/{IMAGE}/g, imageURL)); 22365 } 22366 22367 lightbox.pxShare.setAttribute('data-hidden', 'false'); 22368 lightbox.pxShare.addEventListener('keydown', function (event) { 22369 updateFocusableElements(); 22370 }); 22371 } else { 22372 lightbox.pxShare.setAttribute('data-hidden', 'true'); 22373 } 22374 } 22375 22376 updateFocusableElements(); 22377 }); 22378 lightbox.on('close', function () { 22379 lightbox.lastTigger.focus(); 22380 document.removeEventListener('keydown', handleFocus); 22381 }); 22382 } 22383}); 22384 22385},{"../modules/glightbox.js":2}],13:[function(require,module,exports){ 22386"use strict"; 22387 22388ready(function () { 22389 if (window.innerWidth < 760) { 22390 var footerToggleContainer = document.querySelectorAll('.nav-meta'); 22391 22392 var _loop = function _loop(i) { 22393 var toggleWrapper = footerToggleContainer[i]; 22394 var toggleTarget = toggleWrapper.children[0]; 22395 toggleTarget.setAttribute('id', 'footer-toggle-' + i); 22396 toggleWrapper.insertAdjacentHTML('afterbegin', '<button type="button" id="footer-toggle-button-' + i + '">' + toggleWrapper.getAttribute('data-text-open') + '</button>'); 22397 var easyexpand = new pxEasyExpand('footer-toggle-button-' + i, { 22398 closeWithEsc: false, 22399 switchButtonHtml: true, 22400 hiddenAttribute: 'data-hidden'
22401 }, { 22402 labelOpen: toggleWrapper.getAttribute('data-label-open'), 22403 labelClose: toggleWrapper.getAttribute('data-label-close'), 22404 textOpen: toggleWrapper.getAttribute('data-text-open'), 22405 textClose: toggleWrapper.getAttribute('data-text-close'), 22406 controls: 'footer-toggle-' + i 22407 }); 22408 22409 easyexpand.functions.afterToggle = function () { 22410 console.log(toggleTarget); 22411 setTimeout(function () { 22412 toggleTarget.scrollIntoView(true); 22413 }, 200); 22414 }; 22415 }; 22416 22417 for (var i = 0; i < footerToggleContainer.length; i++) { 22418 _loop(i); 22419 } 22420 } 22421}); 22422 22423},{}],14:[function(require,module,exports){ 22424"use strict"; 22425 22426ready(function () { 22427 var mmenuEl = document.getElementById('mmenu'); 22428 22429 if (typeof mmenuEl != 'undefined' && mmenuEl != null) { 22430 var mmenuStrong = document.querySelector('#mmenu strong[aria-current]'); 22431 22432 if (mmenuStrong) { 22433 var mmenuSpan = document.createElement('span'); 22434 mmenuSpan.setAttribute('aria-current', 'page'); 22435 mmenuSpan.innerHTML = mmenuStrong.innerHTML; 22436 mmenuStrong.parentNode.replaceChild(mmenuSpan, mmenuStrong); 22437 } 22438 22439 var mmenu = new Mmenu('#mmenu', { 22440 'offCanvas': false, 22441 'navbars': [{ 22442 'position': 'top', 22443 'content': ['title', 'prev'] 22444 }], 22445 'navbar': { 22446 'title': mmenuEl.getAttribute('data-label') 22447 }, 22448 'keyboardNavigation': { 22449 'enable': false, 22450 'enhance': false 22451 }, 22452 'screenReader': false, 22453 'hooks': { 22454 'openPanel:finish': function openPanelFinish(panel) { 22455 var mmTitle = document.querySelector('#mmenu .mm-navbars_top a.mm-navbar__title[href]'); 22456 22457 if (mmTitle) { 22458 var isBacklink = mmTitle.querySelectorAll('span.backlink'); 22459 22460 if (isBacklink.length < 1) { 22461 var backTitle = document.createElement('span'); 22462 backTitle.classList.add('backlink'); 22463 backTitle.innerHTML = mmenuEl.getAttribute('data-back'); 22464 mmTitle.prepend(backTitle); 22465 } 22466 22467 mmTitle.removeAttribute('aria-hidden'); 22468 mmTitle.setAttribute('title', window.mmenu.titleLayerPrev); 22469 mmTitle.setAttribute('aria-label', mmTitle.text + '. ' + window.mmenu.labelLayerPrev); 22470 mmTitle.setAttribute('role', 'button'); 22471 setTimeout(function () { 22472 mmTitle.focus(); 22473 }, 100); 22474 } else if (document.getElementsByTagName('html')[0].classList.contains('js-nav')) { 22475 panel.querySelector('.mm-listview a').focus(); 22476 } 22477 } 22478 } 22479 }, { 22480 'language': 'de', 22481 'classNames': { 22482 'selected': 'open' 22483 } 22484 }); 22485 var mmenuApi = mmenu.API; 22486 var mmenuPanel = document.querySelector('.mm-menu .mm-listitem_selected > a'); 22487 22488 if (mmenuPanel) { 22489 mmenuApi.openPanel(document.getElementById(mmenuPanel.hash.substr(1))); 22490 } 22491 22492 var mmButton = document.querySelectorAll('.mm-panel .mm-btn_next'); 22493 22494 for (var i = 0; i < mmButton.length; i++) { 22495 if (mmButton[i].previousElementSibling && mmButton[i].previousElementSibling.tagName == 'A') { 22496 mmButton[i].setAttribute('aria-label', window.mmenu.labelLayerNext); 22497 } else { 22498 mmButton[i].setAttribute('aria-label', mmButton[i].innerText + '. ' + window.mmenu.labelLayerNext); 22499 } 22500 22501 mmButton[i].setAttribute('title', window.mmenu.titleLayerNext); 22502 mmButton[i].setAttribute('role', 'button'); 22503 mmButton[i].setAttribute('aria-expanded', 'false'); 22504 } 22505 } 22506}); 22507 22508},{}],15:[function(require,module,exports){ 22509"use strict"; 22510 22511window.addEventListener('scroll', function () { 22512 if (Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop) > 100) { 22513 document.documentElement.classList.remove('is-top'); 22514 } else { 22515 document.documentElement.classList.add('is-top'); 22516 } 22517}); 22518 22519if (Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop) < 101) { 22520 document.documentElement.classList.add('is-top'); 22521} 22522 22523},{}],16:[function(require,module,exports){ 22524"use strict"; 22525 22526ready(function () { 22527 var suche = new pxEasyExpand('#searchbutton', { 22528 closeWithEsc: true, 22529 setRootClass: 'offcanvas-visible', 22530 addCloseButton: true, 22531 setFocusToElement: '.js-close',
22532 keepFocusInTargetElement: true, 22533 hiddenWhenOpen: '.page', 22534 on: { 22535 beforeToggle: function beforeToggle(button) {} 22536 } 22537 }); 22538}); 22539 22540},{}],17:[function(require,module,exports){ 22541"use strict"; 22542 22543ready(function () { 22544 var sliderContainer = document.querySelectorAll('.a5-events-slider, .a5-image-slider-inner, .page-aside-slider'); 22545 22546 var _loop = function _loop(i) { 22547 var sliderUL = sliderContainer[i].querySelector('ul'); 22548 var sliderItems = sliderUL.querySelectorAll('li'); 22549 22550 if (sliderItems.length < 2) { 22551 return "continue"; 22552 } 22553 22554 if (sliderContainer[i].getAttribute('data-slider-minitems')) { 22555 if (sliderItems.length < sliderContainer[i].getAttribute('data-slider-minitems')) { 22556 return "continue"; 22557 } 22558 } 22559 22560 sliderContainer[i].classList.add('swiper-container'); 22561 sliderUL.classList.add('swiper-wrapper'); 22562 22563 for (var j = 0; j < sliderItems.length; j++) { 22564 sliderItems[j].classList.add('swiper-slide'); 22565 } 22566 22567 var prevTitle = swiper.prevTitle; 22568 22569 if (sliderContainer[i].getAttribute('data-button-label-prev')) { 22570 prevTitle = sliderContainer[i].getAttribute('data-button-label-prev'); 22571 } 22572 22573 var nextTitle = swiper.nextTitle; 22574 22575 if (sliderContainer[i].getAttribute('data-button-label-next')) { 22576 nextTitle = sliderContainer[i].getAttribute('data-button-label-next'); 22577 } 22578 22579 if (sliderContainer[i].classList.contains('page-aside-slider')) { 22580 var buttonWrapper = createElement('<div class="swiper-controls"></div>'); 22581 sliderContainer[i].append(buttonWrapper); 22582 var buttonControl = document.createElement('button'); 22583 buttonControl.setAttribute('type', 'button'); 22584 buttonControl.setAttribute('data-autoplay', 'stop'); 22585 buttonControl.innerHTML = swiper.stopTitle; 22586 buttonControl.setAttribute('aria-label', swiper.ariaLabelStop); 22587 buttonControl.addEventListener('click', function (event) { 22588 event.preventDefault(); 22589 var slider = this.closest('.swiper-container').swiper; 22590 22591 if (slider.autoplay.running) { 22592 this.setAttribute('data-autoplay', 'start'); 22593 this.setAttribute('aria-label', swiper.ariaLabelStart); 22594 buttonControl.innerHTML = swiper.startTitle; 22595 sliderUL.setAttribute('aria-live', 'polite'); 22596 slider.autoplay.stop(); 22597 } else { 22598 this.setAttribute('data-autoplay', 'stop'); 22599 this.setAttribute('aria-label', swiper.ariaLabelStop); 22600 buttonControl.innerHTML = swiper.stopTitle; 22601 sliderUL.setAttribute('aria-live', 'off'); 22602 slider.autoplay.start(); 22603 } 22604 }); 22605 buttonWrapper.append(buttonControl); 22606 sliderUL.addEventListener('focusin', function (event) { 22607 if (buttonControl.getAttribute('data-autoplay') == 'stop') { 22608 buttonControl.click(); 22609 } 22610 }); 22611 new Swiper(sliderContainer[i], { 22612 effect: 'fade', 22613 fadeEffect: { 22614 crossFade: true 22615 }, 22616 a11y: { 22617 slideRole: 'listitem' 22618 }, 22619 autoplay: true, 22620 speed: 1000, 22621 autoHeight: true, 22622 allowTouchMove: false, 22623 keyboard: { 22624 enabled: true 22625 } 22626 }); 22627 } 22628 22629 if (sliderContainer[i].classList.contains('a5-events-slider')) { 22630 var _buttonWrapper = createElement('<div class="swiper-controls"></div>'); 22631 22632 sliderContainer[i].append(_buttonWrapper); 22633 var pagination = document.createElement('ul'); 22634 pagination.setAttribute('class', 'slider-pagination'); 22635 22636 _buttonWrapper.append(pagination); 22637 22638 var _buttonControl = document.createElement('button'); 22639 22640 _buttonControl.setAttribute('type', 'button'); 22641 22642 _buttonControl.setAttribute('data-autoplay', 'stop'); 22643 22644 _buttonControl.innerHTML = swiper.stopTitle; 22645 22646 _buttonControl.setAttribute('aria-label', swiper.ariaLabelStop); 22647 22648 _buttonControl.addEventListener('click', function (event) { 22649 event.preventDefault(); 22650 var slider = this.closest('.swiper-container').swiper; 22651 22652 if (slider.autoplay.running) { 22653 this.setAttribute('data-autoplay', 'start'); 22654 this.setAttribute('aria-label', swiper.ariaLabelStart); 22655 _buttonControl.innerHTML = swiper.startTitle; 22656 sliderUL.setAttribute('aria-live', 'polite'); 22657 slider.autoplay.stop(); 22658 } else { 22659 this.setAttribute('data-autoplay', 'stop'); 22660 this.setAttribute('aria-label', swiper.ariaLabelStop); 22661 _buttonControl.innerHTML = swiper.stopTitle; 22662 sliderUL.setAttribute('aria-live', 'off'); 22663 slider.autoplay.start(); 22664 } 22665 }); 22666 22667 _buttonWrapper.append(_buttonControl); 22668 22669 sliderUL.addEventListener('focusin', function (event) { 22670 if (_buttonControl.getAttribute('data-autoplay') == 'stop') { 22671 _buttonControl.click(); 22672 } 22673 }); 22674 new Swiper(sliderContainer[i], { 22675 effect: 'fade', 22676 fadeEffect: { 22677 crossFade: true 22678 }, 22679 a11y: { 22680 slideRole: 'listitem' 22681 }, 22682 autoplay: true, 22683 speed: 1000, 22684 autoHeight: true, 22685 allowTouchMove: false, 22686 keyboard: { 22687 enabled: true 22688 }, 22689 pagination: { 22690 el: pagination, 22691 clickable: true, 22692 renderBullet: function renderBullet(index, className) { 22693 var title = this.slides[index].getAttribute('data-title'); 22694 var label = swiper.bulletTitle + ' ' + (index + 1); 22695 return '<li role="button" class="' + className + '" title="' + title + '" aria-label="' + label + '"></li>'; 22696 } 22697 }, 22698 on: { 22699 paginationRender: function paginationRender(swiperEl) { 22700 var bullets = swiperEl.pagination.bullets; 22701 22702 var _loop2 = function _loop2(_i) { 22703 bullets[_i].addEventListener('keydown', function (event) { 22704 if (event.keyCode !== 13 && event.keyCode !== 32) return; 22705 event.preventDefault(); 22706 }); 22707 22708 bullets[_i].addEventListener('click', function (event) { 22709 if (!this.classList.contains('swiper-pagination-bullet-active')) { 22710 _buttonControl.setAttribute('data-autoplay', 'start'); 22711 22712 _buttonControl.setAttribute('aria-label', swiper.ariaLabelStart); 22713 22714 _buttonControl.innerHTML = swiper.startTitle; 22715 sliderUL.setAttribute('aria-live', 'polite'); 22716 } 22717 22718 var link = swiperEl.slides[_i].querySelector('a'); 22719 22720 if (typeof link != 'undefined' && link != null) { 22721 link.focus(); 22722 } 22723 }); 22724 }; 22725 22726 for (var _i = 0; _i < bullets.length; _i++) { 22727 _loop2(_i); 22728 } 22729 }, 22730 paginationUpdate: function paginationUpdate(swiperEl) { 22731 var bullets = swiperEl.pagination.bullets; 22732 22733 for (var _i2 = 0; _i2 < bullets.length; _i2++) { 22734 bullets[_i2].removeAttribute('aria-current'); 22735 22736 swiperEl.slides[_i2].querySelector('a').setAttribute('tabindex', '-1'); 22737 } 22738 22739 bullets[swiperEl.realIndex].setAttribute('aria-current', 'true'); 22740 swiperEl.slides[swiperEl.realIndex].querySelector('a').removeAttribute('tabindex'); 22741 } 22742 } 22743 }); 22744 } 22745 22746 if (sliderContainer[i].classList.contains('a5-image-slider-inner')) { 22747 var _buttonWrapper2 = createElement('<div class="swiper-control
22747s"></div>'); 22748 22749 sliderContainer[i].parentNode.append(_buttonWrapper2); 22750 var buttonNext = createElement('<button type="button" class="swiper-next">' + swiper.next + '</button>'); 22751 22752 _buttonWrapper2.insertBefore(buttonNext, _buttonWrapper2.firstChild); 22753 22754 var buttonPrev = createElement('<button type="button" class="swiper-prev">' + swiper.prev + '</button>'); 22755 22756 _buttonWrapper2.insertBefore(buttonPrev, _buttonWrapper2.firstChild); 22757 22758 new Swiper(sliderContainer[i], { 22759 effect: 'slide', 22760 loop: true, 22761 autoHeight: true, 22762 a11y: { 22763 prevSlideMessage: prevTitle, 22764 nextSlideMessage: nextTitle, 22765 slideRole: 'listitem' 22766 }, 22767 navigation: { 22768 nextEl: buttonNext, 22769 prevEl: buttonPrev 22770 }, 22771 keyboard: { 22772 enabled: true, 22773 onlyInViewport: false 22774 }, 22775 slidesPerView: 1, 22776 spaceBetween: 0 22777 }); 22778 } 22779 22780 var images = sliderContainer[i].querySelectorAll('img.js-load'); 22781 22782 for (var _j = 0; _j < images.length; _j++) { 22783 images[_j].addEventListener('load', function (slider) { 22784 return function () { 22785 slider.updateAutoHeight(200); 22786 }; 22787 }(sliderContainer[i].swiper)); 22788 } 22789 }; 22790 22791 for (var i = 0; i < sliderContainer.length; i++) { 22792 var _ret = _loop(i); 22793 22794 if (_ret === "continue") continue; 22795 } 22796}); 22797 22798},{}],18:[function(require,module,exports){ 22799"use strict"; 22800 22801ready(function () { 22802 var toggleBoxWrapper = document.querySelectorAll('.a5-toggle-box-wrapper'); 22803 22804 var _loop = function _loop(i) { 22805 var toggleMulti = true; 22806 var idList = ''; 22807 22808 if (toggleBoxWrapper[i].getAttribute('data-multi') == 'false') { 22809 toggleMulti = false; 22810 } 22811 22812 var toggleBox = toggleBoxWrapper[i].querySelectorAll('.a5-toggle-box'); 22813 22814 var _loop2 = function _loop2(j) { 22815 var toggleBoxButtonWrapper = toggleBox[j].querySelector('.a5-toggle-box-button'); 22816 var toggleBoxButton = document.createElement('button'); 22817 var childsLength = toggleBoxButtonWrapper.childNodes.length; 22818 22819 for (var k = 0; k < childsLength; k++) { 22820 toggleBoxButton.append(toggleBoxButtonWrapper.childNodes[0]); 22821 } 22822 22823 toggleBoxButtonWrapper.appendChild(toggleBoxButton); 22824 var toggleBoxContent = toggleBox[j].querySelector('.a5-toggle-box-content'); 22825 toggleBoxContent.id = 'a5-toggle-content-' + i + '-' + j; 22826 idList = idList + ' a5-toggle-content-' + i + '-' + j; 22827 var tb = new pxEasyExpand(toggleBoxButton, { 22828 closeWithEsc: false, 22829 switchButtonHtml: false, 22830 setFocusToFirstElement: false, 22831 keepFocusInTargetElement: false 22832 }, { 22833 controls: 'a5-toggle-content-' + i + '-' + j 22834 }); 22835 22836 tb.functions.afterToggle = function () { 22837 if (toggleBoxButton.expanded === true) { 22838 toggleBoxContent.style.height = 0; 22839 setTimeout(function () { 22840 toggleBoxContent.style.height = toggleBoxContent.children[0].clientHeight + 'px'; 22841 Promise.all(toggleBoxContent.getAnimations({ 22842 subtree: false 22843 }).map(function (animations) { 22844 return animations.finished; 22845 })).then(function () { 22846 toggleBoxContent.style.height = ''; 22847 }); 22848 }, 10); 22849 } else { 22850 toggleBoxContent.style.display = 'block'; 22851 toggleBoxContent.style.height = toggleBoxContent.children[0].clientHeight + 'px'; 22852 setTimeout(function () { 22853 toggleBoxContent.style.height = 0; 22854 Promise.all(toggleBoxContent.getAnimations({ 22855 subtree: false 22856 }).map(function (animations) { 22857 return animations.finished; 22858 })).then(function () { 22859 toggleBoxContent.style.display = ''; 22860 toggleBoxContent.style.height = ''; 22861 }); 22862 }, 10); 22863 } 22864 }; 22865 22866 var closeOthers = function closeOthers(container, current) { 22867 var toggleBoxOpen = container.querySelectorAll('.a5-toggle-box-button button[aria-expanded="true"]'); 22868 22869 for (var _i5 = 0; _i5 < toggleBoxOpen.length; _i5++) { 22870 if (toggleBoxOpen[_i5] != current) { 22871 toggleBoxOpen[_i5].click(); 22872 22873 current.focus(); 22874 } 22875 } 22876 }; 22877 22878 if (toggleMulti === false) { 22879 toggleBoxButton.addEventListener('click', function () { 22880 if (this.getAttribute('aria-expanded') == 'false') { 22881 closeOthers(toggleBoxWrapper[i], this); 22882 } 22883 }); 22884 } 22885 }; 22886 22887 for (var j = 0; j < toggleBox.length; j++) { 22888 _loop2(j); 22889 } 22890 22891 if (toggleBox.length > 1) { 22892 if (!toggleBoxWrapper[i].hasAttribute('data-close-all') && !toggleBoxWrapper[i].hasAttribute('data-open-all')) { 22893 return "continue";
22894 } 22895 22896 var buttonWrapper = document.createElement('div'); 22897 buttonWrapper.setAttribute('class', 'a5-toggle-functions'); 22898 toggleBoxWrapper[i].insertBefore(buttonWrapper, toggleBoxWrapper[i].firstChild); 22899 22900 if (toggleBoxWrapper[i].hasAttribute('data-open-all')) { 22901 var toggleOpenAll = createElement('<button type="button" aria-controls="' + idList + '" aria-label="' + toggleBoxWrapper[i].getAttribute('data-label') + ' ' + toggleBoxWrapper[i].getAttribute('data-open-all') + '">' + toggleBoxWrapper[i].getAttribute('data-open-all') + '</button>'); 22902 toggleOpenAll.addEventListener('click', function () { 22903 var toggleBoxList = toggleBoxWrapper[i].querySelectorAll('.a5-toggle-box-button button[aria-expanded="false"]'); 22904 22905 for (var _i = 0; _i < toggleBoxList.length; _i++) { 22906 toggleBoxList[_i].click(); 22907 22908 this.focus(); 22909 } 22910 22911 var toggleButtons = buttonWrapper.querySelectorAll('button'); 22912 22913 for (var _i2 = 0; _i2 < toggleButtons.length; _i2++) { 22914 if (this != toggleButtons[_i2]) { 22915 toggleButtons[_i2].removeAttribute('aria-pressed'); 22916 } else { 22917 toggleButtons[_i2].setAttribute('aria-pressed', 'true'); 22918 } 22919 } 22920 }); 22921 buttonWrapper.appendChild(toggleOpenAll); 22922 } 22923 22924 if (toggleBoxWrapper[i].hasAttribute('data-close-all')) { 22925 var toggleCloseAll = createElement('<button type="button" aria-controls="' + idList + '" aria-label="' + toggleBoxWrapper[i].getAttribute('data-label') + ' ' + toggleBoxWrapper[i].getAttribute('data-close-all') + '" aria-pressed="true">' + toggleBoxWrapper[i].getAttribute('data-close-all') + '</button>'); 22926 toggleCloseAll.addEventListener('click', function () { 22927 var toggleBoxList = toggleBoxWrapper[i].querySelectorAll('.a5-toggle-box-button button[aria-expanded="true"]'); 22928 22929 for (var _i3 = 0; _i3 < toggleBoxList.length; _i3++) { 22930 toggleBoxList[_i3].click(); 22931 22932 this.focus(); 22933 } 22934 22935 var toggleButtons = buttonWrapper.querySelectorAll('button'); 22936 22937 for (var _i4 = 0; _i4 < toggleButtons.length; _i4++) { 22938 if (this != toggleButtons[_i4]) { 22939 toggleButtons[_i4].removeAttribute('aria-pressed'); 22940 } else { 22941 toggleButtons[_i4].setAttribute('aria-pressed', 'true'); 22942 } 22943 } 22944 }); 22945 buttonWrapper.appendChild(toggleCloseAll); 22946 } 22947 } 22948 }; 22949 22950 for (var i = 0; i < toggleBoxWrapper.length; i++) { 22951 var _ret = _loop(i); 22952 22953 if (_ret === "continue") continue; 22954 } 22955}); 22956 22957},{}],19:[function(require,module,exports){ 22958"use strict"; 22959 22960Object.defineProperty(exports, "__esModule", { 22961 value: true 22962}); 22963exports.default = stickybits; 22964 22965function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } 22966 22967function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } 22968 22969function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 22970 22971function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 22972 22973function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 22974 22975function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } 22976 22977var Stickybits = function () { 22978 function Stickybits(target, obj) { 22979 var _this = this; 22980 22981 _classCallCheck(this, Stickybits); 22982 22983 var o = typeof obj !== 'undefined' ? obj : {}; 22984 this.version = 'VERSION'; 22985 this.userAgent = window.navigator.userAgent || 'no `userAgent` provided by the browser'; 22986 this.props = { 22987 customStickyChangeNumber: o.customStickyChangeNumber || null, 22988 noStyles: o.noStyles || false, 22989 stickyBitStickyOffset: o.stickyBitStickyOffset || 0, 22990 parentClass: o.parentClass || 'js-stickybit-parent', 22991 scrollEl: typeof o.scrollEl === 'string' ? document.querySelector(o.scrollEl) : o.scrollEl || window, 22992 stickyClass: o.stickyClass || 'js-is-sticky', 22993 stuckClass: o.stuckClass || 'js-is-stuck', 22994 stickyChangeClass: o.stickyChangeClass || 'js-is-sticky--change',
22995 useStickyClasses: o.useStickyClasses || false, 22996 useFixed: o.useFixed || false, 22997 useGetBoundingClientRect: o.useGetBoundingClientRect || false, 22998 verticalPosition: o.verticalPosition || 'top', 22999 applyStyle: o.applyStyle || function (item, style) { 23000 return _this.applyStyle(item, style); 23001 } 23002 }; 23003 this.props.positionVal = this.definePosition() || 'fixed'; 23004 this.instances = []; 23005 var _this$props = this.props, 23006 positionVal = _this$props.positionVal, 23007 verticalPosition = _this$props.verticalPosition, 23008 noStyles = _this$props.noStyles, 23009 stickyBitStickyOffset = _this$props.stickyBitStickyOffset; 23010 var verticalPositionStyle = verticalPosition === 'top' && !noStyles ? "".concat(stickyBitStickyOffset, "px") : ''; 23011 var positionStyle = positionVal !== 'fixed' ? positionVal : ''; 23012 this.els = typeof target === 'string' ? document.querySelectorAll(target) : target; 23013 if (!('length' in this.els)) this.els = [this.els]; 23014 23015 for (var i = 0; i < this.els.length; i++) { 23016 var _styles; 23017 23018 var el = this.els[i]; 23019 var instance = this.addInstance(el, this.props); 23020 this.props.applyStyle({ 23021 styles: (_styles = {}, _defineProperty(_styles, verticalPosition, verticalPositionStyle), _defineProperty(_styles, "position", positionStyle), _styles), 23022 classes: {} 23023 }, instance); 23024 this.manageState(instance); 23025 this.instances.push(instance); 23026 } 23027 } 23028 23029 _createClass(Stickybits, [{ 23030 key: "definePosition", 23031 value: function definePosition() { 23032 var stickyProp; 23033 23034 if (this.props.useFixed) { 23035 stickyProp = 'fixed'; 23036 } else { 23037 var prefix = ['', '-o-', '-webkit-', '-moz-', '-ms-']; 23038 var test = document.head.style; 23039 23040 for (var i = 0; i < prefix.length; i += 1) { 23041 test.position = "".concat(prefix[i], "sticky"); 23042 } 23043 23044 stickyProp = test.position ? test.position : 'fixed'; 23045 test.position = ''; 23046 } 23047 23048 return stickyProp; 23049 } 23050 }, { 23051 key: "addInstance", 23052 value: function addInstance(el, props) { 23053 var _this2 = this; 23054 23055 var item = { 23056 el: el, 23057 parent: el.parentNode, 23058 props: props 23059 }; 23060 23061 if (props.positionVal === 'fixed' || props.useStickyClasses) { 23062 this.isWin = this.props.scrollEl === window; 23063 var se = this.isWin ? window : this.getClosestParent(item.el, item.props.scrollEl); 23064 this.computeScrollOffsets(item); 23065 this.toggleClasses(item.parent, '', props.parentClass); 23066 item.state = 'default'; 23067 item.stateChange = 'default'; 23068 23069 item.stateContainer = function () { 23070 return _this2.manageState(item); 23071 }; 23072 23073 se.addEventListener('scroll', item.stateContainer); 23074 } 23075 23076 return item; 23077 } 23078 }, { 23079 key: "getClosestParent", 23080 value: function getClosestParent(el, match) { 23081 var p = match; 23082 var e = el; 23083 if (e.parentElement === p) return p; 23084 23085 while (e.parentElement !== p) { 23086 e = e.parentElement; 23087 } 23088 23089 return p; 23090 } 23091 }, { 23092 key: "getTopPosition", 23093 value: function getTopPosition(el) { 23094 if (this.props.useGetBoundingClientRect) { 23095 return el.getBoundingClientRect().top + (this.props.scrollEl.pageYOffset || document.documentElement.scrollTop); 23096 } 23097 23098 var topPosition = 0; 23099 23100 do { 23101 topPosition = el.offsetTop + topPosition; 23102 } while (el = el.offsetParent); 23103 23104 return topPosition; 23105 } 23106 }, { 23107 key: "computeScrollOffsets", 23108 value: function computeScrollOffsets(item) { 23109 var it = item; 23110 var p = it.props; 23111 var el = it.el; 23112 var parent = it.parent; 23113 var isCustom = !this.isWin && p.positionVal === 'fixed'; 23114 var isTop = p.verticalPosition !== 'bottom'; 23115 var scrollElOffset = isCustom ? this.getTopPosition(p.scrollEl) : 0; 23116 var stickyStart = isCustom ? this.getTopPosition(parent) - scrollElOffset : this.getTopPosition(parent); 23117 var stickyChangeOffset = p.customStickyChangeNumber !== null ? p.customStickyChangeNumber : el.offsetHeight; 23118 var parentBottom = stickyStart + parent.offsetHeight; 23119 it.offset = !isCustom ? scrollElOffset + p.stickyBitStickyOffset : 0; 23120 it.stickyStart = isTop ? stickyStart - it.offset : 0; 23121 it.stickyChange = it.stickyStart + stickyChangeOffset; 23122 it.stickyStop = isTop ? parentBottom - (el.offsetHeight + it.offset) : parentBottom - window.innerHeight; 23123 } 23124 }, { 23125 key: "toggleClasses", 23126 value: function toggleClasses(el, r, a) { 23127 var e = el; 23128 var cArray = e.className.split(' '); 23129 if (a && cArray.indexOf(a) === -1) cArray.push(a); 23130 var rItem = cArray.indexOf(r); 23131 if (rItem !== -1) cArray.splice(rItem, 1); 23132 e.className = cArray.join(' '); 23133 } 23134 }, { 23135 key: "manageState", 23136 value: function manageState(item) { 23137 var _this3 = this; 23138 23139 var it = item; 23140 var p = it.props; 23141 var state = it.state; 23142 var stateChange = it.stateChange; 23143 var start = it.stickyStart; 23144 var change = it.stickyChange; 23145 var stop = it.stickyStop; 23146 var pv = p.positionVal; 23147 var se = p.scrollEl; 23148 var sticky = p.stickyClass; 23149 var stickyChange = p.stickyChangeClass; 23150 var stuck = p.stuckClass; 23151 var vp = p.verticalPosition; 23152 var isTop = vp !== 'bottom'; 23153 var aS = p.applyStyle; 23154 var ns = p.noStyles; 23155 23156 var rAFStub = function rAFDummy(f) { 23157 f(); 23158 }; 23159 23160 var rAF = !this.isWin ? rAFStub : window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || rAFStub; 23161 var scroll = this.isWin ? window.scrollY || window.pageYOffset : se.scrollTop; 23162 var notSticky = scroll > start && scroll < stop && (state === 'default' || state === 'stuck'); 23163 var isSticky = isTop && scroll <= start && (state === 'sticky' || state === 'stuck'); 23164 var isStuck = scroll >= stop && state === 'sticky'; 23165 23166 if (notSticky) { 23167 it.state = 'sticky'; 23168 } else if (isSticky) { 23169 it.state = 'default'; 23170 } else if (isStuck) { 23171 it.state = 'stuck'; 23172 } 23173 23174 var isStickyChange = scroll >= change && scroll <= stop; 23175 var isNotStickyChange = scroll < change / 2 || scroll > stop; 23176 23177 if (isNotStickyChange) { 23178 it.stateChange = 'default'; 23179 } else if (isStickyChange) { 23180 it.stateChange = 'sticky'; 23181 } 23182 23183 if (state === it.state && stateChange === it.stateChange) return; 23184 rAF(function () { 23185 var _style$classes; 23186 23187 var stateStyles = { 23188 sticky: { 23189 styles: _defineProperty({ 23190 position: pv, 23191 top: '', 23192 bottom: '' 23193 }, vp, "".concat(p.stickyBitStickyOffset, "px")), 23194 classes: _defineProperty({}, sticky, true) 23195 }, 23196 default: { 23197 styles: _defineProperty({}, vp, ''), 23198 classes: {} 23199 }, 23200 stuck: { 23201 styles: _objectSpread(_defineProperty({}, vp, ''), pv === 'fixed' && !ns || !_this3.isWin ? { 23202 position: 'absolute', 23203 top: '', 23204 bottom: '0' 23205 } : {}), 23206 classes: _defineProperty({}, stuck, true) 23207 } 23208 }; 23209 23210 if (pv === 'fixed') { 23211 stateStyles.default.styles.position = ''; 23212 } 23213
23214 var style = stateStyles[it.state]; 23215 style.classes = (_style$classes = {}, _defineProperty(_style$classes, stuck, !!style.classes[stuck]), _defineProperty(_style$classes, sticky, !!style.classes[sticky]), _defineProperty(_style$classes, stickyChange, isStickyChange), _style$classes); 23216 aS(style, item); 23217 }); 23218 } 23219 }, { 23220 key: "applyStyle", 23221 value: function applyStyle(_ref, item) { 23222 var styles = _ref.styles, 23223 classes = _ref.classes; 23224 var it = item; 23225 var e = it.el; 23226 var p = it.props; 23227 var stl = e.style; 23228 var ns = p.noStyles; 23229 var cArray = e.className.split(' '); 23230 23231 for (var cls in classes) { 23232 var addClass = classes[cls]; 23233 23234 if (addClass) { 23235 if (cArray.indexOf(cls) === -1) cArray.push(cls); 23236 } else { 23237 var idx = cArray.indexOf(cls); 23238 if (idx !== -1) cArray.splice(idx, 1); 23239 } 23240 } 23241 23242 e.className = cArray.join(' '); 23243 23244 if (styles['position']) { 23245 stl['position'] = styles['position']; 23246 } 23247 23248 if (ns) return; 23249 23250 for (var key in styles) { 23251 stl[key] = styles[key]; 23252 } 23253 } 23254 }, { 23255 key: "update", 23256 value: function update() { 23257 var _this4 = this; 23258 23259 var updatedProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; 23260 this.instances.forEach(function (instance) { 23261 _this4.computeScrollOffsets(instance); 23262 23263 if (updatedProps) { 23264 for (var updatedProp in updatedProps) { 23265 instance.props[updatedProp] = updatedProps[updatedProp]; 23266 } 23267 } 23268 }); 23269 return this; 23270 } 23271 }, { 23272 key: "removeInstance", 23273 value: function removeInstance(instance) { 23274 var _classes3; 23275 23276 var e = instance.el; 23277 var p = instance.props; 23278 this.applyStyle({ 23279 styles: _defineProperty({ 23280 position: '' 23281 }, p.verticalPosition, ''), 23282 classes: (_classes3 = {}, _defineProperty(_classes3, p.stickyClass, ''), _defineProperty(_classes3, p.stuckClass, ''), _classes3) 23283 }, instance); 23284 this.toggleClasses(e.parentNode, p.parentClass); 23285 } 23286 }, { 23287 key: "cleanup", 23288 value: function cleanup() { 23289 for (var i = 0; i < this.instances.length; i += 1) { 23290 var instance = this.instances[i]; 23291 23292 if (instance.stateContainer) { 23293 instance.props.scrollEl.removeEventListener('scroll', instance.stateContainer); 23294 } 23295 23296 this.removeInstance(instance); 23297 } 23298 23299 this.manageState = false; 23300 this.instances = []; 23301 } 23302 }]); 23303 23304 return Stickybits; 23305}(); 23306 23307function stickybits(target, o) { 23308 return new Stickybits(target, o); 23309} 23310 23311},{}],20:[function(require,module,exports){ 23312"use strict"; 23313 23314function HCTest() { 23315 var objDiv = document.createElement('div'); 23316 objDiv.style.color = 'rgba(245,240,255,0)'; 23317 document.body.appendChild(objDiv); 23318 var strColor = document.defaultView ? document.defaultView.getComputedStyle(objDiv, null).color : objDiv.currentStyle.color; 23319 strColor = strColor.replace(/ /g, ''); 23320 document.body.removeChild(objDiv); 23321 23322 if (strColor !== 'rgba(245,240,255,0)') { 23323 document.body.classList.add('hcm-true'); 23324 } 23325} 23326 23327ready(function () { 23328 HCTest(); 23329}); 23330 23331},{}],21:[function(require,module,exports){ 23332"use strict"; 23333 23334window.initLeafletExtended = function (rootContainer) { 23335 var active = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 23336 23337 if (typeof rootContainer == 'undefined' || rootContainer == null) { 23338 return; 23339 } 23340 23341 var mapID = 'map' + Math.floor(Math.random() * 100000); 23342 var categoryListContainer = rootContainer.querySelectorAll('.map-with-marker-categorie'); 23343 23344 if (!categoryListContainer.length) { 23345 var labelMap = rootContainer.getAttribute('data-label-map'); 23346 var markerTitleSuffix = rootContainer.getAttribute('data-marker-title-suffix'); 23347 var mapContainer = document.createElement('div'); 23348 mapContainer.id = 'map-extended' + mapID; 23349 mapContainer.setAttribute('role', 'application'); 23350 mapContainer.setAttribute('aria-label', labelMap); 23351 rootContainer.insertBefore(mapContainer, rootContainer.firstChild); 23352 var l; 23353 var markers = L.featureGroup(); 23354 var markerItems = rootContainer.querySelectorAll('li[data-lat]'); 23355 23356 if (markerItems.length > 0) { 23357 var markerIcon = rootContainer.getAttribute('data-icon'); 23358 var markerIconWidth = rootContainer.getAttribute('data-icon-width'); 23359 var markerIconHeight = rootContainer.getAttribute('data-icon-height'); 23360 var icon = L.icon({ 23361 iconUrl: markerIcon, 23362 iconSize: [markerIconWidth, markerIconHeight] 23363 }); 23364 var m; 23365 23366 for (m = 0; m < markerItems.length; m++) { 23367 var markerLon = markerItems[m].getAttribute('data-lon'); 23368 var markerLat = markerItems[m].getAttribute('data-lat'); 23369 var markerTitle = markerItems[m].getAttribute('data-title'); 23370 var markerObj = L.marker([markerLat, markerLon], { 23371 icon: icon, 23372 alt: markerTitle + ' ' + markerTitleSuffix 23373 }).bindPopup(markerItems[m].innerHTML).addTo(markers); 23374 markerObj.addEventListener('click', function (event) { 23375 this.openPopup(); 23376 }); 23377 } 23378 } 23379 23380 var mapOnLoad = function mapOnLoad(event) { 23381 var skipToStart = document.createElement('a'); 23382 skipToStart.innerHTML = leaflet.skipToStart; 23383 skipToStart.href = '#' + mapContainer.id; 23384 skipToStart.classList.add('leaflet-skip-to-start'); 23385 rootContainer.insertBefore(skipToStart, mapContainer.nextSibling); 23386 var skipToEnd = document.createElement('a'); 23387 skipToEnd.innerHTML = leaflet.skipToEnd; 23388 skipToEnd.href = '#' + mapContainer.id; 23389 skipToEnd.classList.add('leaflet-skip-to-end'); 23390 rootContainer.insertBefore(skipToEnd, mapContainer); 23391 23392 skipToStart.onclick = function (event) { 23393 event.preventDefault(); 23394 skipToEnd.focus(); 23395 }; 23396 23397 skipToEnd.onclick = function (event) { 23398 event.preventDefault();
23399 skipToStart.focus(); 23400 }; 23401 }; 23402 23403 var baseLayer = L.tileLayer('https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png', { 23404 attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors' 23405 }); 23406 var map = L.map('map-extended' + mapID, { 23407 layers: [baseLayer, markers], 23408 center: markers.getBounds().getCenter(), 23409 zoomControl: false, 23410 scrollWheelZoom: false, 23411 sleep: true, 23412 sleepOpacity: .6, 23413 sleepNoteStyle: { 23414 maxWidth: '10rem', 23415 opacity: 1 23416 }, 23417 wakeMessage: leaflet.wakeMessage, 23418 wakeMessageTouch: leaflet.wakeMessageTouch 23419 }); 23420 map.on('load', mapOnLoad); 23421 L.control.zoom({ 23422 zoomInTitle: leaflet.zoomInTitle, 23423 zoomOutTitle: leaflet.zoomOutTitle 23424 }).addTo(map); 23425 map.fitBounds(markers.getBounds().pad(.1)); 23426 baseLayer.on('tileload', function (event) { 23427 event.tile.removeAttribute('role'); 23428 }); 23429 document.querySelector('.leaflet-shadow-pane').remove(); 23430 map.on('popupopen', function (event) { 23431 event.popup._closeButton.setAttribute('aria-label', leaflet.closePopupLabel); 23432 23433 var clickedMarker = event.popup._source._icon; 23434 23435 event.popup._closeButton.addEventListener('click', function (event) { 23436 clickedMarker.focus(); 23437 }, { 23438 once: true 23439 }); 23440 23441 event.popup._wrapper.setAttribute('tabindex', '0'); 23442 23443 event.popup._wrapper.focus(); 23444 }); 23445 var marker = mapContainer.querySelectorAll('.leaflet-marker-icon.leaflet-interactive'); 23446 23447 for (var i = 0; i < marker.length; i++) { 23448 marker[i].setAttribute('role', 'button'); 23449 } 23450 } 23451}; 23452 23453},{}],22:[function(require,module,exports){ 23454"use strict"; 23455 23456window.initLeaflet = function (rootContainer) { 23457 var active = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 23458 23459 if (typeof rootContainer == 'undefined' || rootContainer == null) { 23460 return; 23461 } 23462 23463 var mapID = 'map' + Math.floor(Math.random() * 100000); 23464 var labelMap = rootContainer.getAttribute('data-label-map'); 23465 var markerTitleSuffix = rootContainer.getAttribute('data-marker-title-suffix'); 23466 var mapContainer = document.createElement('div'); 23467 mapContainer.id = 'map' + mapID; 23468 mapContainer.setAttribute('role', 'application'); 23469 mapContainer.setAttribute('aria-label', labelMap); 23470 rootContainer.insertBefore(mapContainer, rootContainer.firstChild); 23471 var markerItems = rootContainer.querySelectorAll('.a5-map-marker'); 23472 var layer; 23473 23474 if (markerItems.length > 0) { 23475 layer = L.layerGroup(); 23476 var m; 23477 23478 for (m = 0; m < markerItems.length; m++) { 23479 var markerLon = markerItems[m].getAttribute('data-lon'); 23480 var markerLat = markerItems[m].getAttribute('data-lat'); 23481 var markerTitle = markerItems[m].getAttribute('data-title'); 23482 var markerIcon = markerItems[m].getAttribute('data-icon'); 23483 var markerIconWidth = markerItems[m].getAttribute('data-icon-width'); 23484 var markerIconHeight = markerItems[m].getAttribute('data-icon-height'); 23485 markerItems[m].setAttribute('aria-hidden', 'true'); 23486 var icon = L.icon({ 23487 iconUrl: markerIcon, 23488 iconSize: [markerIconWidth, markerIconHeight], 23489 className: 'marker-' + m 23490 }); 23491 var markerObj = L.marker([markerLat, markerLon], { 23492 icon: icon, 23493 alt: markerTitle + ' ' + markerTitleSuffix 23494 }).bindPopup(markerItems[m].innerHTML).addTo(layer); 23495 markerObj.addEventListener('click', function (event) { 23496 this.openPopup(); 23497 }); 23498 } 23499 } 23500 23501 var initLat = rootContainer.getAttribute('data-init-lat'); 23502 var initLon = rootContainer.getAttribute('data-init-lon'); 23503 var initZoom = rootContainer.getAttribute('data-init-zoom'); 23504 var baseLayer = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { 23505 attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors' 23506 }); 23507 var map = L.map('map' + mapID, { 23508 layers: [baseLayer, layer], 23509 zoomControl: false, 23510 scrollWheelZoom: false, 23511 sleep: true, 23512 sleepOpacity: .9, 23513 sleepNoteStyle: { 23514 maxWidth: '10rem', 23515 opacity: 1 23516 }, 23517 wakeMessage: leaflet.wakeMessage, 23518 wakeMessageTouch: leaflet.wakeMessageTouch 23519 }); 23520 L.control.fullscreen({ 23521 position: 'topleft', 23522 title: leaflet.fullScreenTitle, 23523 titleCancel: leaflet.fullScreenTitleCancel 23524 }).addTo(map); 23525 map.on('enterFullscreen', function (event) { 23526 mapContainer.classList.add('leaflet-fullscreen'); 23527 }); 23528 map.on('exitFullscreen', function (event) { 23529 mapContainer.classList.remove('leaflet-fullscreen'); 23530 }); 23531 L.control.zoom({ 23532 zoomInTitle: leaflet.zoomInTitle, 23533 zoomOutTitle: leaflet.zoomOutTitle 23534 }).addTo(map); 23535 baseLayer.on('tileload', function (event) { 23536 event.tile.removeAttribute('role'); 23537 });
23538 document.querySelector('.leaflet-shadow-pane').remove(); 23539 map.on('popupopen', function (event) { 23540 event.popup._closeButton.setAttribute('aria-label', leaflet.closePopupLabel); 23541 23542 var clickedMarker = event.popup._source._icon; 23543 23544 event.popup._closeButton.addEventListener('click', function (event) { 23545 clickedMarker.focus(); 23546 }, { 23547 once: true 23548 }); 23549 23550 event.popup._wrapper.setAttribute('tabindex', '0'); 23551 23552 event.popup._wrapper.focus(); 23553 }); 23554 map.setView([initLat, initLon], initZoom); 23555 23556 if (rootContainer.closest('details')) { 23557 var detailsContainer = rootContainer.closest('details'); 23558 detailsContainer.addEventListener('toggle', function (event) { 23559 if (detailsContainer.hasAttribute('open')) { 23560 map.invalidateSize(); 23561 } 23562 }); 23563 } 23564 23565 var marker = mapContainer.querySelectorAll('.leaflet-marker-icon.leaflet-interactive'); 23566 23567 for (var i = 0; i < marker.length; i++) { 23568 marker[i].setAttribute('role', 'button'); 23569 } 23570 23571 if (active == true) { 23572 mapContainer.focus(); 23573 } 23574}; 23575 23576},{}],23:[function(require,module,exports){
vendor: 19,987 bytes, lines 23577-24390
23577(function(window, factory) { 23578 var lazySizes = factory(window, window.document, Date); 23579 window.lazySizes = lazySizes; 23580 if(typeof module == 'object' && module.exports){ 23581 module.exports = lazySizes; 23582 } 23583}(typeof window != 'undefined' ? 23584 window : {}, 23585/** 23586 * import("./types/global") 23587 * @typedef { import("./types/lazysizes-config").LazySizesConfigPartial } LazySizesConfigPartial 23588 */ 23589function l(window, document, Date) { // Pass in the window Date function also for SSR because the Date class can be lost 23590 'use strict'; 23591 /*jshint eqnull:true */ 23592 23593 var lazysizes, 23594 /** 23595 * @type { LazySizesConfigPartial } 23596 */ 23597 lazySizesCfg; 23598 23599 (function(){ 23600 var prop; 23601 23602 var lazySizesDefaults = { 23603 lazyClass: 'lazyload', 23604 loadedClass: 'lazyloaded', 23605 loadingClass: 'lazyloading', 23606 preloadClass: 'lazypreload', 23607 errorClass: 'lazyerror', 23608 //strictClass: 'lazystrict', 23609 autosizesClass: 'lazyautosizes', 23610 fastLoadedClass: 'ls-is-cached', 23611 iframeLoadMode: 0, 23612 srcAttr: 'data-src', 23613 srcsetAttr: 'data-srcset', 23614 sizesAttr: 'data-sizes', 23615 //preloadAfterLoad: false, 23616 minSize: 40, 23617 customMedia: {}, 23618 init: true, 23619 expFactor: 1.5, 23620 hFac: 0.8, 23621 loadMode: 2, 23622 loadHidden: true, 23623 ricTimeout: 0, 23624 throttleDelay: 125, 23625 }; 23626 23627 lazySizesCfg = window.lazySizesConfig || window.lazysizesConfig || {}; 23628 23629 for(prop in lazySizesDefaults){ 23630 if(!(prop in lazySizesCfg)){ 23631 lazySizesCfg[prop] = lazySizesDefaults[prop]; 23632 } 23633 } 23634 })(); 23635 23636 if (!document || !document.getElementsByClassName) { 23637 return { 23638 init: function () {}, 23639 /** 23640 * @type { LazySizesConfigPartial } 23641 */ 23642 cfg: lazySizesCfg, 23643 /** 23644 * @type { true } 23645 */ 23646 noSupport: true, 23647 }; 23648 } 23649 23650 var docElem = document.documentElement; 23651 23652 var supportPicture = window.HTMLPictureElement; 23653 23654 var _addEventListener = 'addEventListener'; 23655 23656 var _getAttribute = 'getAttribute'; 23657 23658 /** 23659 * Update to bind to window because 'this' becomes null during SSR 23660 * builds. 23661 */ 23662 var addEventListener = window[_addEventListener].bind(window); 23663 23664 var setTimeout = window.setTimeout; 23665 23666 var requestAnimationFrame = window.requestAnimationFrame || setTimeout; 23667 23668 var requestIdleCallback = window.requestIdleCallback; 23669 23670 var regPicture = /^picture$/i; 23671 23672 var loadEvents = ['load', 'error', 'lazyincluded', '_lazyloaded']; 23673 23674 var regClassCache = {}; 23675 23676 var forEach = Array.prototype.forEach; 23677 23678 /** 23679 * @param ele {Element} 23680 * @param cls {string} 23681 */ 23682 var hasClass = function(ele, cls) { 23683 if(!regClassCache[cls]){ 23684 regClassCache[cls] = new RegExp('(\\s|^)'+cls+'(\\s|$)'); 23685 } 23686 return regClassCache[cls].test(ele[_getAttribute]('class') || '') && regClassCache[cls]; 23687 }; 23688 23689 /** 23690 * @param ele {Element} 23691 * @param cls {string} 23692 */ 23693 var addClass = function(ele, cls) { 23694 if (!hasClass(ele, cls)){ 23695 ele.setAttribute('class', (ele[_getAttribute]('class') || '').trim() + ' ' + cls); 23696 } 23697 }; 23698 23699 /** 23700 * @param ele {Element} 23701 * @param cls {string} 23702 */ 23703 var removeClass = function(ele, cls) { 23704 var reg; 23705 if ((reg = hasClass(ele,cls))) { 23706 ele.setAttribute('class', (ele[_getAttribute]('class') || '').replace(reg, ' ')); 23707 } 23708 }; 23709 23710 var addRemoveLoadEvents = function(dom, fn, add){ 23711 var action = add ? _addEventListener : 'removeEventListener'; 23712 if(add){ 23713 addRemoveLoadEvents(dom, fn); 23714 } 23715 loadEvents.forEach(function(evt){ 23716 dom[action](evt, fn); 23717 }); 23718 }; 23719 23720 /** 23721 * @param elem { Element } 23722 * @param name { string } 23723 * @param detail { any } 23724 * @param noBubbles { boolean } 23725 * @param noCancelable { boolean } 23726 * @returns { CustomEvent } 23727 */ 23728 var triggerEvent = function(elem, name, detail, noBubbles, noCancelable){ 23729 var event = document.createEvent('Event'); 23730 23731 if(!detail){ 23732 detail = {}; 23733 } 23734 23735 detail.instance = lazysizes; 23736 23737 event.initEvent(name, !noBubbles, !noCancelable); 23738 23739 event.detail = detail; 23740 23741 elem.dispatchEvent(event); 23742 return event; 23743 }; 23744 23745 var updatePolyfill = function (el, full){ 23746 var polyfill; 23747 if( !supportPicture && ( polyfill = (window.picturefill || lazySizesCfg.pf) ) ){ 23748 if(full && full.src && !el[_getAttribute]('srcset')){ 23749 el.setAttribute('srcset', full.src); 23750 } 23751 polyfill({reevaluate: true, elements: [el]}); 23752 } else if(full && full.src){ 23753 el.src = full.src; 23754 } 23755 }; 23756 23757 var getCSS = function (elem, style){ 23758 return (getComputedStyle(elem, null) || {})[style]; 23759 }; 23760 23761 /** 23762 * 23763 * @param elem { Element } 23764 * @param parent { Element } 23765 * @param [width] {number} 23766 * @returns {number} 23767 */ 23768 var getWidth = function(elem, parent, width){ 23769 width = width || elem.offsetWidth; 23770 23771 while(width < lazySizesCfg.minSize && parent && !elem._lazysizesWidth){ 23772 width = parent.offsetWidth; 23773 parent = parent.parentNode; 23774 } 23775 23776 return width; 23777 }; 23778 23779 var rAF = (function(){ 23780 var running, waiting; 23781 var firstFns = []; 23782 var secondFns = []; 23783 var fns = firstFns; 23784 23785 var run = function(){ 23786 var runFns = fns; 23787 23788 fns = firstFns.length ? secondFns : firstFns; 23789 23790 running = true; 23791 waiting = false; 23792 23793 while(runFns.length){ 23794 runFns.shift()(); 23795 } 23796 23797 running = false; 23798 }; 23799 23800 var rafBatch = function(fn, queue){ 23801 if(running && !queue){ 23802 fn.apply(this, arguments); 23803 } else { 23804 fns.push(fn); 23805 23806 if(!waiting){ 23807 waiting = true; 23808 (document.hidden ? setTimeout : requestAnimationFrame)(run); 23809 } 23810 } 23811 }; 23812 23813 rafBatch._lsFlush = run; 23814 23815 return rafBatch; 23816 })(); 23817 23818 var rAFIt = function(fn, simple){ 23819 return simple ? 23820 function() { 23821 rAF(fn); 23822 } : 23823 function(){ 23824 var that = this; 23825 var args = arguments; 23826 rAF(function(){ 23827 fn.apply(that, args); 23828 }); 23829 } 23830 ; 23831 }; 23832 23833 var throttle = function(fn){ 23834 var running; 23835 var lastTime = 0; 23836 var gDelay = lazySizesCfg.throttleDelay; 23837 var rICTimeout = lazySizesCfg.ricTimeout; 23838 var run = function(){ 23839 running = false; 23840 lastTime = Date.now(); 23841 fn(); 23842 }; 23843 var idleCallback = requestIdleCallback && rICTimeout > 49 ? 23844 function(){ 23845 requestIdleCallback(run, {timeout: rICTimeout}); 23846 23847 if(rICTimeout !== lazySizesCfg.ricTimeout){ 23848 rICTimeout = lazySizesCfg.ricTimeout; 23849 } 23850 } : 23851 rAFIt(function(){ 23852 setTimeout(run); 23853 }, true) 23854 ; 23855 23856 return function(isPriority){ 23857 var delay; 23858 23859 if((isPriority = isPriority === true)){ 23860 rICTimeout = 33; 23861 } 23862 23863 if(running){ 23864 return; 23865 } 23866 23867 running = true; 23868 23869 delay = gDelay - (Date.now() - lastTime); 23870 23871 if(delay < 0){ 23872 delay = 0; 23873 } 23874 23875 if(isPriority || delay < 9){ 23876 idleCallback(); 23877 } else { 23878 setTimeout(idleCallback, delay); 23879 } 23880 }; 23881 }; 23882 23883 //based on http://modernjavascript.blogspot.de/2013/08/building-better-debounce.html 23884 var debounce = function(func) { 23885 var timeout, timestamp; 23886 var wait = 99; 23887 var run = function(){ 23888 timeout = null; 23889 func(); 23890 }; 23891 var later = function() { 23892 var last = Date.now() - timestamp; 23893 23894 if (last < wait) { 23895 setTimeout(later, wait - last); 23896 } else { 23897 (requestIdleCallback || run)(run); 23898 } 23899 }; 23900 23901 return function() { 23902 timestamp = Date.now(); 23903 23904 if (!timeout) { 23905 timeout = setTimeout(later, wait); 23906 } 23907 }; 23908 }; 23909 23910 var loader = (function(){ 23911 var preloadElems, isCompleted, resetPreloadingTimer, loadMode, started; 23912 23913 var eLvW, elvH, eLtop, eLleft, eLright, eLbottom, isBodyHidden; 23914 23915 var regImg = /^img$/i; 23916 var regIframe = /^iframe$/i; 23917 23918 var supportScroll = ('onscroll' in window) && !(/(gle|ing)bot/.test(navigator.userAgent)); 23919 23920 var shrinkExpand = 0; 23921 var currentExpand = 0; 23922 23923 var isLoading = 0; 23924 var lowRuns = -1; 23925 23926 var resetPreloading = function(e){ 23927 isLoading--; 23928 if(!e || isLoading < 0 || !e.target){ 23929 isLoading = 0; 23930 } 23931 }; 23932 23933 var isVisible = function (elem) { 23934 if (isBodyHidden == null) { 23935 isBodyHidden = getCSS(document.body, 'visibility') == 'hidden'; 23936 } 23937 23938 return isBodyHidden || !(getCSS(elem.parentNode, 'visibility') == 'hidden' && getCSS(elem, 'visibility') == 'hidden'); 23939 }; 23940 23941 var isNestedVisible = function(elem, elemExpand){ 23942 var outerRect; 23943 var parent = elem; 23944 var visible = isVisible(elem); 23945 23946 eLtop -= elemExpand; 23947 eLbottom += elemExpand; 23948 eLleft -= elemExpand; 23949 eLright += elemExpand; 23950 23951 while(visible && (parent = parent.offsetParent) && parent != document.body && parent != docElem){ 23952 visible = ((getCSS(parent, 'opacity') || 1) > 0); 23953 23954 if(visible && getCSS(parent, 'overflow') != 'visible'){ 23955 outerRect = parent.getBoundingClientRect(); 23956 visible = eLright > outerRect.left && 23957 eLleft < outerRect.right && 23958 eLbottom > outerRect.top - 1 && 23959 eLtop < outerRect.bottom + 1 23960 ; 23961 } 23962 } 23963 23964 return visible; 23965 }; 23966 23967 var checkElements = function() { 23968 var eLlen, i, rect, autoLoadElem, loadedSomething, elemExpand, elemNegativeExpand, elemExpandVal, 23969 beforeExpandVal, defaultExpand, preloadExpand, hFac; 23970 var lazyloadElems = lazysizes.elements; 23971 23972 if((loadMode = lazySizesCfg.loadMode) && isLoading < 8 && (eLlen = lazyloadElems.length)){ 23973 23974 i = 0; 23975 23976 lowRuns++; 23977 23978 for(; i < eLlen; i++){ 23979 23980 if(!lazyloadElems[i] || lazyloadElems[i]._lazyRace){continue;} 23981 23982 if(!supportScroll || (lazysizes.prematureUnveil && lazysizes.prematureUnveil(lazyloadElems[i]))){unveilElement(lazyloadElems[i]);continue;} 23983 23984 if(!(elemExpandVal = lazyloadElems[i][_getAttribute]('data-expand')) || !(elemExpand = elemExpandVal * 1)){ 23985 elemExpand = currentExpand; 23986 } 23987 23988 if (!defaultExpand) { 23989 defaultExpand = (!lazySizesCfg.expand || lazySizesCfg.expand < 1) ? 23990 docElem.clientHeight > 500 && docElem.clientWidth > 500 ? 500 : 370 : 23991 lazySizesCfg.expand; 23992 23993 lazysizes._defEx = defaultExpand; 23994 23995 preloadExpand = defaultExpand * lazySizesCfg.expFactor; 23996 hFac = lazySizesCfg.hFac; 23997 isBodyHidden = null; 23998 23999 if(currentExpand < preloadExpand && isLoading < 1 && lowRuns > 2 && loadMode > 2 && !document.hidden){ 24000 currentExpand = preloadExpand; 24001 lowRuns = 0; 24002 } else if(loadMode > 1 && lowRuns > 1 && isLoading < 6){ 24003 currentExpand = defaultExpand; 24004 } else { 24005 currentExpand = shrinkExpand; 24006 } 24007 } 24008 24009 if(beforeExpandVal !== elemExpand){ 24010 eLvW = innerWidth + (elemExpand * hFac); 24011 elvH = innerHeight + elemExpand; 24012 elemNegativeExpand = elemExpand * -1; 24013 beforeExpandVal = elemExpand; 24014 } 24015 24016 rect = lazyloadElems[i].getBoundingClientRect(); 24017 24018 if ((eLbottom = rect.bottom) >= elemNegativeExpand && 24019 (eLtop = rect.top) <= elvH && 24020 (eLright = rect.right) >= elemNegativeExpand * hFac && 24021 (eLleft = rect.left) <= eLvW && 24022 (eLbottom || eLright || eLleft || eLtop) && 24023 (lazySizesCfg.loadHidden || isVisible(lazyloadElems[i])) && 24024 ((isCompleted && isLoading < 3 && !elemExpandVal && (loadMode < 3 || lowRuns < 4)) || isNestedVisible(lazyloadElems[i], elemExpand))){ 24025 unveilElement(lazyloadElems[i]); 24026 loadedSomething = true; 24027 if(isLoading > 9){break;} 24028 } else if(!loadedSomething && isCompleted && !autoLoadElem && 24029 isLoading < 4 && lowRuns < 4 && loadMode > 2 && 24030 (preloadElems[0] || lazySizesCfg.preloadAfterLoad) && 24031 (preloadElems[0] || (!elemExpandVal && ((eLbottom || eLright || eLleft || eLtop) || lazyloadElems[i][_getAttribute](lazySizesCfg.sizesAttr) != 'auto')))){ 24032 autoLoadElem = preloadElems[0] || lazyloadElems[i]; 24033 } 24034 } 24035 24036 if(autoLoadElem && !loadedSomething){ 24037 unveilElement(autoLoadElem); 24038 } 24039 } 24040 }; 24041 24042 var throttledCheckElements = throttle(checkElements); 24043 24044 var switchLoadingClass = function(e){ 24045 var elem = e.target; 24046 24047 if (elem._lazyCache) { 24048 delete elem._lazyCache; 24049 return; 24050 } 24051 24052 resetPreloading(e); 24053 addClass(elem, lazySizesCfg.loadedClass); 24054 removeClass(elem, lazySizesCfg.loadingClass); 24055 addRemoveLoadEvents(elem, rafSwitchLoadingClass); 24056 triggerEvent(elem, 'lazyloaded'); 24057 }; 24058 var rafedSwitchLoadingClass = rAFIt(switchLoadingClass); 24059 var rafSwitchLoadingClass = function(e){ 24060 rafedSwitchLoadingClass({target: e.target}); 24061 }; 24062 24063 var changeIframeSrc = function(elem, src){ 24064 var loadMode = elem.getAttribute('data-load-mode') || lazySizesCfg.iframeLoadMode; 24065 24066 // loadMode can be also a string! 24067 if (loadMode == 0) { 24068 elem.contentWindow.location.replace(src); 24069 } else if (loadMode == 1) { 24070 elem.src = src; 24071 } 24072 }; 24073 24074 var handleSources = function(source){ 24075 var customMedia; 24076 24077 var sourceSrcset = source[_getAttribute](lazySizesCfg.srcsetAttr); 24078 24079 if( (customMedia = lazySizesCfg.customMedia[source[_getAttribute]('data-media') || source[_getAttribute]('media')]) ){ 24080 source.setAttribute('media', customMedia); 24081 } 24082 24083 if(sourceSrcset){ 24084 source.setAttribute('srcset', sourceSrcset); 24085 } 24086 }; 24087 24088 var lazyUnveil = rAFIt(function (elem, detail, isAuto, sizes, isImg){ 24089 var src, srcset, parent, isPicture, event, firesLoad; 24090 24091 if(!(event = triggerEvent(elem, 'lazybeforeunveil', detail)).defaultPrevented){ 24092 24093 if(sizes){ 24094 if(isAuto){ 24095 addClass(elem, lazySizesCfg.autosizesClass); 24096 } else { 24097 elem.setAttribute('sizes', sizes); 24098 } 24099 } 24100 24101 srcset = elem[_getAttribute](lazySizesCfg.srcsetAttr); 24102 src = elem[_getAttribute](lazySizesCfg.srcAttr); 24103 24104 if(isImg) { 24105 parent = elem.parentNode; 24106 isPicture = parent && regPicture.test(parent.nodeName || ''); 24107 } 24108 24109 firesLoad = detail.firesLoad || (('src' in elem) && (srcset || src || isPicture)); 24110 24111 event = {target: elem}; 24112 24113 addClass(elem, lazySizesCfg.loadingClass); 24114 24115 if(firesLoad){ 24116 clearTimeout(resetPreloadingTimer); 24117 resetPreloadingTimer = setTimeout(resetPreloading, 2500); 24118 addRemoveLoadEvents(elem, rafSwitchLoadingClass, true); 24119 } 24120 24121 if(isPicture){ 24122 forEach.call(parent.getElementsByTagName('source'), handleSources); 24123 } 24124 24125 if(srcset){ 24126 elem.setAttribute('srcset', srcset); 24127 } else if(src && !isPicture){ 24128 if(regIframe.test(elem.nodeName)){ 24129 changeIframeSrc(elem, src); 24130 } else { 24131 elem.src = src; 24132 } 24133 } 24134 24135 if(isImg && (srcset || isPicture)){ 24136 updatePolyfill(elem, {src: src}); 24137 } 24138 } 24139 24140 if(elem._lazyRace){ 24141 delete elem._lazyRace; 24142 } 24143 removeClass(elem, lazySizesCfg.lazyClass); 24144 24145 rAF(function(){ 24146 // Part of this can be removed as soon as this fix is older: https://bugs.chromium.org/p/chromium/issues/detail?id=7731 (2015) 24147 var isLoaded = elem.complete && elem.naturalWidth > 1; 24148 24149 if( !firesLoad || isLoaded){ 24150 if (isLoaded) { 24151 addClass(elem, lazySizesCfg.fastLoadedClass); 24152 } 24153 switchLoadingClass(event); 24154 elem._lazyCache = true; 24155 setTimeout(function(){ 24156 if ('_lazyCache' in elem) { 24157 delete elem._lazyCache; 24158 } 24159 }, 9); 24160 } 24161 if (elem.loading == 'lazy') { 24162 isLoading--; 24163 } 24164 }, true); 24165 }); 24166 24167 /** 24168 * 24169 * @param elem { Element } 24170 */ 24171 var unveilElement = function (elem){ 24172 if (elem._lazyRace) {return;} 24173 var detail; 24174 24175 var isImg = regImg.test(elem.nodeName); 24176 24177 //allow using sizes="auto", but don't use. it's invalid. Use data-sizes="auto" or a valid value for sizes instead (i.e.: sizes="80vw") 24178 var sizes = isImg && (elem[_getAttribute](lazySizesCfg.sizesAttr) || elem[_getAttribute]('sizes')); 24179 var isAuto = sizes == 'auto'; 24180 24181 if( (isAuto || !isCompleted) && isImg && (elem[_getAttribute]('src') || elem.srcset) && !elem.complete && !hasClass(elem, lazySizesCfg.errorClass) && hasClass(elem, lazySizesCfg.lazyClass)){return;} 24182 24183 detail = triggerEvent(elem, 'lazyunveilread').detail; 24184 24185 if(isAuto){ 24186 autoSizer.updateElem(elem, true, elem.offsetWidth); 24187 } 24188 24189 elem._lazyRace = true; 24190 isLoading++; 24191 24192 lazyUnveil(elem, detail, isAuto, sizes, isImg); 24193 }; 24194 24195 var afterScroll = debounce(function(){ 24196 lazySizesCfg.loadMode = 3; 24197 throttledCheckElements(); 24198 }); 24199 24200 var altLoadmodeScrollListner = function(){ 24201 if(lazySizesCfg.loadMode == 3){ 24202 lazySizesCfg.loadMode = 2; 24203 } 24204 afterScroll(); 24205 }; 24206 24207 var onload = function(){ 24208 if(isCompleted){return;} 24209 if(Date.now() - started < 999){ 24210 setTimeout(onload, 999); 24211 return; 24212 } 24213 24214 24215 isCompleted = true; 24216 24217 lazySizesCfg.loadMode = 3; 24218 24219 throttledCheckElements(); 24220 24221 addEventListener('scroll', altLoadmodeScrollListner, true); 24222 }; 24223 24224 return { 24225 _: function(){ 24226 started = Date.now(); 24227 24228 lazysizes.elements = document.getElementsByClassName(lazySizesCfg.lazyClass); 24229 preloadElems = document.getElementsByClassName(lazySizesCfg.lazyClass + ' ' + lazySizesCfg.preloadClass); 24230 24231 addEventListener('scroll', throttledCheckElements, true); 24232 24233 addEventListener('resize', throttledCheckElements, true); 24234 24235 addEventListener('pageshow', function (e) { 24236 if (e.persisted) { 24237 var loadingElements = document.querySelectorAll('.' + lazySizesCfg.loadingClass); 24238 24239 if (loadingElements.length && loadingElements.forEach) { 24240 requestAnimationFrame(function () { 24241 loadingElements.forEach( function (img) { 24242 if (img.complete) { 24243 unveilElement(img); 24244 } 24245 }); 24246 }); 24247 } 24248 } 24249 }); 24250 24251 if(window.MutationObserver){ 24252 new MutationObserver( throttledCheckElements ).observe( docElem, {childList: true, subtree: true, attributes: true} ); 24253 } else { 24254 docElem[_addEventListener]('DOMNodeInserted', throttledCheckElements, true); 24255 docElem[_addEventListener]('DOMAttrModified', throttledCheckElements, true); 24256 setInterval(throttledCheckElements, 999); 24257 } 24258 24259 addEventListener('hashchange', throttledCheckElements, true); 24260 24261 //, 'fullscreenchange' 24262 ['focus', 'mouseover', 'click', 'load', 'transitionend', 'animationend'].forEach(function(name){ 24263 document[_addEventListener](name, throttledCheckElements, true); 24264 }); 24265 24266 if((/d$|^c/.test(document.readyState))){ 24267 onload(); 24268 } else { 24269 addEventListener('load', onload); 24270 document[_addEventListener]('DOMContentLoaded', throttledCheckElements); 24271 setTimeout(onload, 20000); 24272 } 24273 24274 if(lazysizes.elements.length){ 24275 checkElements(); 24276 rAF._lsFlush(); 24277 } else { 24278 throttledCheckElements(); 24279 } 24280 }, 24281 checkElems: throttledCheckElements, 24282 unveil: unveilElement, 24283 _aLSL: altLoadmodeScrollListner, 24284 }; 24285 })(); 24286 24287 24288 var autoSizer = (function(){ 24289 var autosizesElems; 24290 24291 var sizeElement = rAFIt(function(elem, parent, event, width){ 24292 var sources, i, len; 24293 elem._lazysizesWidth = width; 24294 width += 'px'; 24295 24296 elem.setAttribute('sizes', width); 24297 24298 if(regPicture.test(parent.nodeName || '')){ 24299 sources = parent.getElementsByTagName('source'); 24300 for(i = 0, len = sources.length; i < len; i++){ 24301 sources[i].setAttribute('sizes', width); 24302 } 24303 } 24304 24305 if(!event.detail.dataAttr){ 24306 updatePolyfill(elem, event.detail); 24307 } 24308 }); 24309 /** 24310 * 24311 * @param elem {Element} 24312 * @param dataAttr 24313 * @param [width] { number } 24314 */ 24315 var getSizeElement = function (elem, dataAttr, width){ 24316 var event; 24317 var parent = elem.parentNode; 24318 24319 if(parent){ 24320 width = getWidth(elem, parent, width); 24321 event = triggerEvent(elem, 'lazybeforesizes', {width: width, dataAttr: !!dataAttr}); 24322 24323 if(!event.defaultPrevented){ 24324 width = event.detail.width; 24325 24326 if(width && width !== elem._lazysizesWidth){ 24327 sizeElement(elem, parent, event, width); 24328 } 24329 } 24330 } 24331 }; 24332 24333 var updateElementsSizes = function(){ 24334 var i; 24335 var len = autosizesElems.length; 24336 if(len){ 24337 i = 0; 24338 24339 for(; i < len; i++){ 24340 getSizeElement(autosizesElems[i]); 24341 } 24342 } 24343 }; 24344 24345 var debouncedUpdateElementsSizes = debounce(updateElementsSizes); 24346 24347 return { 24348 _: function(){ 24349 autosizesElems = document.getElementsByClassName(lazySizesCfg.autosizesClass); 24350 addEventListener('resize', debouncedUpdateElementsSizes); 24351 }, 24352 checkElems: debouncedUpdateElementsSizes, 24353 updateElem: getSizeElement 24354 }; 24355 })(); 24356 24357 var init = function(){ 24358 if(!init.i && document.getElementsByClassName){ 24359 init.i = true; 24360 autoSizer._(); 24361 loader._(); 24362 } 24363 }; 24364 24365 setTimeout(function(){ 24366 if(lazySizesCfg.init){ 24367 init(); 24368 } 24369 }); 24370 24371 lazysizes = { 24372 /** 24373 * @type { LazySizesConfigPartial } 24374 */ 24375 cfg: lazySizesCfg, 24376 autoSizer: autoSizer, 24377 loader: loader, 24378 init: init, 24379 uP: updatePolyfill, 24380 aC: addClass, 24381 rC: removeClass, 24382 hC: hasClass, 24383 fire: triggerEvent, 24384 gW: getWidth, 24385 rAF: rAF, 24386 }; 24387 24388 return lazysizes; 24389} 24390));
24391 24392},{}],24:[function(require,module,exports){ 24393(function(window, factory) { 24394 var globalInstall = function(){ 24395 factory(window.lazySizes); 24396 window.removeEventListener('lazyunveilread', globalInstall, true); 24397 }; 24398 24399 factory = factory.bind(null, window, window.document); 24400 24401 if(typeof module == 'object' && module.exports){ 24402 factory(require('lazysizes')); 24403 } else if (typeof define == 'function' && define.amd) { 24404 define(['lazysizes'], factory); 24405 } else if(window.lazySizes) { 24406 globalInstall(); 24407 } else { 24408 window.addEventListener('lazyunveilread', globalInstall, true); 24409 } 24410}(window, function(window, document, lazySizes) { 24411 'use strict'; 24412 24413 var imgSupport = 'loading' in HTMLImageElement.prototype; 24414 var iframeSupport = 'loading' in HTMLIFrameElement.prototype; 24415 var isConfigSet = false; 24416 var oldPrematureUnveil = lazySizes.prematureUnveil; 24417 var cfg = lazySizes.cfg; 24418 var listenerMap = { 24419 focus: 1, 24420 mouseover: 1, 24421 click: 1, 24422 load: 1, 24423 transitionend: 1, 24424 animationend: 1, 24425 scroll: 1, 24426 resize: 1, 24427 }; 24428 24429 if (!cfg.nativeLoading) { 24430 cfg.nativeLoading = {}; 24431 } 24432 24433 if (!window.addEventListener || !window.MutationObserver || (!imgSupport && !iframeSupport)) { 24434 return; 24435 } 24436 24437 function disableEvents() { 24438 var loader = lazySizes.loader; 24439 var throttledCheckElements = loader.checkElems; 24440 var removeALSL = function(){ 24441 setTimeout(function(){ 24442 window.removeEventListener('scroll', loader._aLSL, true); 24443 }, 1000); 24444 }; 24445 var currentListenerMap = typeof cfg.nativeLoading.disableListeners == 'object' ? 24446 cfg.nativeLoading.disableListeners : 24447 listenerMap; 24448 24449 if (currentListenerMap.scroll) { 24450 window.addEventListener('load', removeALSL); 24451 removeALSL(); 24452 24453 window.removeEventListener('scroll', throttledCheckElements, true); 24454 } 24455 24456 if (currentListenerMap.resize) { 24457 window.removeEventListener('resize', throttledCheckElements, true); 24458 } 24459 24460 Object.keys(currentListenerMap).forEach(function(name) { 24461 if (currentListenerMap[name]) { 24462 document.removeEventListener(name, throttledCheckElements, true); 24463 } 24464 }); 24465 } 24466 24467 function runConfig() { 24468 if (isConfigSet) {return;} 24469 isConfigSet = true; 24470 24471 if (imgSupport && iframeSupport && cfg.nativeLoading.disableListeners) { 24472 if (cfg.nativeLoading.disableListeners === true) { 24473 cfg.nativeLoading.setLoadingAttribute = true; 24474 } 24475 24476 disableEvents(); 24477 } 24478 24479 if (cfg.nativeLoading.setLoadingAttribute) { 24480 window.addEventListener('lazybeforeunveil', function(e){ 24481 var element = e.target; 24482 24483 if ('loading' in element && !element.getAttribute('loading')) { 24484 element.setAttribute('loading', 'lazy'); 24485 } 24486 }, true); 24487 } 24488 } 24489 24490 lazySizes.prematureUnveil = function prematureUnveil(element) { 24491 24492 if (!isConfigSet) { 24493 runConfig(); 24494 } 24495 24496 if ('loading' in element && 24497 (cfg.nativeLoading.setLoadingAttribute || element.getAttribute('loading')) && 24498 (element.getAttribute('data-sizes') != 'auto' || element.offsetWidth)) { 24499 return true; 24500 } 24501 24502 if (oldPrematureUnveil) { 24503 return oldPrematureUnveil(element); 24504 } 24505 }; 24506 24507})); 24508 24509},{"lazysizes":23}]},{},[1]) 24510//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJkZXYvanMvYmFzZS5qcyIsImRldi9qcy9tb2R1bGVzL2dsaWdodGJveC5qcyIsImRldi9qcy9tb2R1bGVzL2xlYWZsZXQvbGVhZmxldC5jb250cm9sLmZ1bGxzY3JlZW4uanMiLCJkZXYvanMvbW9kdWxlcy9sZWFmbGV0L2xlYWZsZXQuanMiLCJkZXYvanMvbW9kdWxlcy9sZWFmbGV0L2xlYWZsZXQuc2xlZXAuanMiLCJkZXYvanMvbW9kdWxlcy9tbWVudS5qcyIsImRldi9qcy9tb2R1bGVzL3B4RWFzeUV4cGFuZC5qcyIsImRldi9qcy9tb2R1bGVzL3N3aXBlci5qcyIsImRldi9qcy9tb2R1bGVzL3dlYmNhbS5qcyIsImRldi9qcy9wYXJ0aWFscy9mb3JtLWluZm9idXR0b24uanMiLCJkZXYvanMvcGFydGlhbHMvaGFtYnVyZ2VyLmpzIiwiZGV2L2pzL3BhcnRpYWxzL2xpZ2h0Ym94LmpzIiwiZGV2L2pzL3BhcnRpYWxzL21ldGEuanMiLCJkZXYvanMvcGFydGlhbHMvbW1lbnUuanMiLCJkZXYvanMvcGFydGlhbHMvc2Nyb2xsc3RhcnQuanMiLCJkZXYvanMvcGFydGlhbHMvc2VhcmNoZm9ybS5qcyIsImRldi9qcy9wYXJ0aWFscy9zd2lwZXIuanMiLCJkZXYvanMvcGFydGlhbHMvdG9nZ2xlLmpzIiwiZGV2L2pzL3BvbHlmaWxscy9zdGlja3liaXRzLmpzIiwiZGV2L2pzL3NjcmlwdHMvaGlnaC1jb250cmFzdC1tb2RlLmpzIiwiZGV2L2pzL3NjcmlwdHMvbGVhZmxldC1leHRlbmRlZC5qcyIsImRldi9qcy9zY3JpcHRzL2xlYWZsZXQuanMiLCJub2RlX21vZHVsZXMvbGF6eXNpemVzL2xhenlzaXplcy5qcyIsIm5vZGVfbW9kdWxlcy9sYXp5c2l6ZXMvcGx1Z2lucy9uYXRpdmUtbG9hZGluZy9scy5uYXRpdmUtbG9hZGluZy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFB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7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOXlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybi
24510BjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiLypcbiAqXG4gKiBQcm90b3R5cGUgU3RhZHQgWGFudGVuXG4gKlxuICogQGRhdGUgICAyMDIzLTExXG4gKlxuICovXG4gXG5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBuby1qcyAtIGZhbGxzIG1vZGVybml6ciBkZWFrdGl2aWVydCB3aXJkXG4vLyBpbnMgSFRNTCB2ZXJzY2hvYmVuXG4vLyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NOYW1lID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKCduby1qcycsJ2pzJyk7XG4gXG5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBzdGlja3kgaG92ZXIgZml4IGbDvHIgaU9TIFxuKGZ1bmN0aW9uKGwpe3ZhciBpLHM9e3RvdWNoZW5kOmZ1bmN0aW9uKCl7fX07Zm9yKGkgaW4gcylsLmFkZEV2ZW50TGlzdGVuZXIoaSxzKX0pKGRvY3VtZW50KTtcblxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRG9tIHJlYWR5XG4vLyB1c2U6IHJlYWR5KGZ1bmN0aW9uKCkgeyBhbGVydCgnaGVsbG8nKTsgfSk7XG5nbG9iYWwucmVhZHkgPSBmdW5jdGlvbihmbikge1xuICBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQgPyBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgOiBkb2N1bWVudC5yZWFkeVN0YXRlICE9PSBcImxvYWRpbmdcIil7XG4gICAgZm4oKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZm4pO1xuICB9XG59XG5cblxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhpZ2gtQ29udHJhc3QgTW9kZVxucmVxdWlyZSgnLi9zY3JpcHRzL2hpZ2gtY29udHJhc3QtbW9kZS5qcycpO1xuXG5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIZWxwZXJcblxuZ2xvYmFsLmNyZWF0ZUVsZW1lbnQgPSBkb21TdHJpbmcgPT4gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhkb21TdHJpbmcsICd0ZXh0L2h0bWwnKS5ib2R5LmZpcnN0Q2hpbGQ7XG5cbmdsb2JhbC5oYXNQYXJlbnQgPSBmdW5jdGlvbihlbCwgc2VsZWN0b3IpIHtcbiAgaWYgKGVsKSB7IGRvIHtcbiAgICBpZiAoZWwgPT0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikpIHsgcmV0dXJuIHRydWU7IH1cbiAgICBpZiAoZWwubm9kZVR5cGUgPT09IDkpIHsgYnJlYWs7IH0gfSB3aGlsZSgoZWwgPSBlbC5wYXJlbnROb2RlKSk7XG4gIH0gcmV0dXJuIGZhbHNlO1xufTtcblxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUG9seWZpbGxzXG5cbi8vIGFzc2lnblxuLy8gcmVxdWlyZSgnLi9wb2x5ZmlsbHMvc3RpY2t5Yml0cy5qcycpO1xuXG5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdGlja3kgSGVhZGVyXG5pbXBvcnQgc3RpY2t5Yml0cyBmcm9tICcuL3BvbHlmaWxscy9zdGlja3liaXRzLmpzJztcblxucmVhZHkoZnVuY3Rpb24oKSB7XG5cbiAgc3RpY2t5Yml0cygnLm5hdi10cmFpbCcsIHtcbiAgICB1c2VTdGlja3lDbGFzc2VzOiB0cnVlXG4gIH0pO1xuXG59KTtcblxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTGF6eWxvYWRpbmcgKCBucG0gaW5zdGFsbCBsYXp5c2l6ZXMgLS1zYXZlIClcbmltcG9ydCBsYXp5U2l6ZXMgZnJvbSAnbGF6eXNpemVzJztcbmltcG9ydCAnbGF6eXNpemVzL3BsdWdpbnMvbmF0aXZlLWxvYWRpbmcvbHMubmF0aXZlLWxvYWRpbmcnO1xuXG5sYXp5U2l6ZXMuY2ZnLm5hdGl2ZUxvYWRpbmcgPSB7XG4gIHNldExvYWRpbmdBdHRyaWJ1dGU6IHRydWUsXG4gIGRpc2FibGVMaXN0ZW5lcnM6IHtcbiAgICBzY3JvbGw6IHRydWVcbiAgfSxcbn07XG5cbmxhenlTaXplcy5jZmcubGF6eUNsYXNzID0gJ2pzLWxvYWQnO1xubGF6eVNpemVzLmNmZy5sb2FkaW5nQ2xhc3MgPSAnanMtbG9hZGluZyc7XG5sYXp5U2l6ZXMuY2ZnLmxvYWRlZENsYXNzID0gJ2pzLWxvYWRlZCc7XG5sYXp5U2l6ZXMuY2ZnLmF1dG9zaXplc0NsYXNzID0gJ2pzLWF1dG9zaXplcyc7XG5cblxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBhcnRpYWxzXG5cbi8vIFNjcm9sbHN0YXJ0IGbDvHIgVG9wbGluayB1c3cuXG5yZXF1aXJlKCcuL3BhcnRpYWxzL3Njcm9sbHN0YXJ0LmpzJyk7XG5cbi8vIEZvcm11bGFyLUVyd2VpdGVydW5nZW5cbi8vIHJlcXVpcmUoJy4vc2NyaXB0cy9mb3JtLWZseWluZy1sYWJlbC5qcycpO1xuXG4vLyBMaWdodGJveFxucmVxdWlyZSgnLi9wYXJ0aWFscy9saWdodGJveC5qcycpO1xuXG4vLyBBbnplaWdlIHp1bSBTY3JvbGxlbiBmw7xyIFJlc3BvbnNpdmUgVGFiZWxsZW5cbi8vIHJlcXVpcmUoJy4vcGFydGlhbHMvdGFibGUtaGFzLXNjcm9sbGJhci5qcycpO1xuXG5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNTWVudVxucmVxdWlyZSgnLi9tb2R1bGVzL21tZW51LmpzJyk7XG5yZXF1aXJlKCcuL3BhcnRpYWxzL21tZW51LmpzJyk7XG5cblxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1vYmlsbmF2aWdhdGlvbiBtaXQgU2xpZGVvdXRzXG5cbi8vIGltcG9ydCBweE5hdmlnYXRpb25Ub2dnbGUgZnJvbSAnLi9tb2R1bGVzL3B4TmF2aWdhdGlvblRvZ2dsZS5qcyc7XG5cbi8vIHJlYWR5KGZ1bmN0aW9uKCkge1xuXG4gIC8vIGNvbnN0IHN1Ym5hdmlnYXRpb24gPSBuZXcgcHhOYXZpZ2F0aW9uVG9nZ2xlKCcubmF2LXN1YjEnLHt
24510cbiAgLy8gICAncHJlZml4JyA6ICdhNTEnLFxuICAvLyAgICdzZWxlY3RvcicgOiAnLm5hdi1zdWIxIHVsIHVsJyxcbiAgLy8gICAnYnV0dG9uUG9zaXRpb24nIDogJ2JlZm9yZUxpbmsnXG4gIC8vIH0pO1xuXG4gIC8vIGNvbnN0IG1vYmlsbmF2aWdhdGlvbiA9IG5ldyBweE5hdmlnYXRpb25Ub2dnbGUoJy5uYXYtbW9iaWwnLHtcbiAgLy8gICAncHJlZml4JyA6ICdhNTInLFxuICAvLyAgICdzZWxlY3RvcicgOiAnLm5hdi1tb2JpbCB1bCB1bCcsXG4gIC8vICAgJ2J1dHRvblBvc2l0aW9uJyA6ICdiZWZvcmVMaW5rJ1xuICAvLyB9KTtcblxuLy8gfSk7XG5cblxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE5hdmZvcm1cbi8vIGltcG9ydCBweE5hdkZvcm0gZnJvbSAnLi9tb2R1bGVzL3B4TmF2Rm9ybS5qcyc7XG5cbi8vIHJlYWR5KGZ1bmN0aW9uKCkge1xuXG4gIC8vIFNwcmFjaG5hdmlnYXRpb25cbiAgLy8gY29uc3QgbGFuZ3VhZ2Vmb3JtID0gbmV3IHB4TmF2Rm9ybSgnLmxhbmd1YWdlZm9ybScpO1xuXG4vLyB9KTtcblxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gcHhFYXN5RXhwYW5kXG5pbXBvcnQgcHhFYXN5RXhwYW5kIGZyb20gJy4vbW9kdWxlcy9weEVhc3lFeHBhbmQuanMnO1xuXG5nbG9iYWwucHhFYXN5RXhwYW5kID0gcHhFYXN5RXhwYW5kO1xuXG5yZXF1aXJlKCcuL3BhcnRpYWxzL2hhbWJ1cmdlci5qcycpO1xucmVxdWlyZSgnLi9wYXJ0aWFscy9zZWFyY2hmb3JtLmpzJyk7XG5yZXF1aXJlKCcuL3BhcnRpYWxzL21ldGEuanMnKTtcbnJlcXVpcmUoJy4vcGFydGlhbHMvdG9nZ2xlLmpzJyk7XG5yZXF1aXJlKCcuL3BhcnRpYWxzL2Zvcm0taW5mb2J1dHRvbi5qcycpO1xuXG5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBXZWJjYW1cblxuaW1wb3J0IHB4V2ViY2FtIGZyb20gJy4vbW9kdWxlcy93ZWJjYW0uanMnO1xuXG5yZWFkeShmdW5jdGlvbigpIHtcbiAgY29uc3Qgd2ViY2FtID0gbmV3IHB4V2ViY2FtKCcud2ViY2FtJyk7XG59KTtcblxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGFic1xuXG4vLyBpbXBvcnQgVGFiYnkgZnJvbSAnLi9tb2R1bGVzL3RhYmJ5LnBvbHlmaWxscy5qcyc7XG4vLyBcbi8vIGdsb2JhbC5UYWJieSA9IFRhYmJ5O1xuLy8gXG4vLyByZXF1aXJlKCcuL3BhcnRpYWxzL3RhYmJ5LXRhYnMuanMnKTtcblxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2xpZGVyXG5cbmltcG9ydCBTd2lwZXIgZnJvbSAnLi9tb2R1bGVzL3N3aXBlci5qcyc7XG5cbmdsb2JhbC5Td2lwZXIgPSBTd2lwZXI7XG5cbnJlcXVpcmUoJy4vcGFydGlhbHMvc3dpcGVyLmpzJyk7XG5cblxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1hcHMgYXVmIEJhc2lzIHZvbiBMZWFmbGV0IHVuZCBPcGVuU3RyZWV0TWFwXG5pbXBvcnQgTCBmcm9tICcuL21vZHVsZXMvbGVhZmxldC9sZWFmbGV0LmpzJztcbnJlcXVpcmUoJy4vbW9kdWxlcy9sZWFmbGV0L2xlYWZsZXQuY29udHJvbC5mdWxsc2NyZWVuLmpzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvbGVhZmxldC9sZWFmbGV0LnNsZWVwLmpzJyk7XG5yZXF1aXJlKCcuL3NjcmlwdHMvbGVhZmxldC5qcycpO1xuXG5yZWFkeShmdW5jdGlvbigpIHtcblxuICBsZXQgbWFwQ0UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYTUtbWFwOm5vdChbZGF0YS1jb25zZW50LXJlYWR5XSknKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcENFLmxlbmd0aDsgaSsrKSB7XG4gICAgd2luZG93LmluaXRMZWFmbGV0KG1hcENFW2ldKTtcbiAgfVxuXG59KTtcblxucmVxdWlyZSgnLi9zY3JpcHRzL2xlYWZsZXQtZXh0ZW5kZWQuanMnKTtcblxucmVhZHkoZnVuY3Rpb24oKSB7XG5cbiAgbGV0IG1hcENFID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmE1LW1hcC13aXRoLW1hcmtlcjpub3QoW2RhdGEtY29uc2VudC1yZWFkeV0pJyk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXBDRS5sZW5ndGg7IGkrKykge1xuICAgIHdpbmRvdy5pbml0TGVhZmxldEV4dGVuZGVkKG1hcENFW2ldKTtcbiAgfVxuXG59KTtcblxuXG4iLCIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLkdMaWdodGJveCA9IGZhY3RvcnkoKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikge1xuICAgICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBfdHlwZW9mID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG4gI
24510H1cblxuICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgdWlkID0gRGF0ZS5ub3coKTtcbiAgZnVuY3Rpb24gZXh0ZW5kKCkge1xuICAgIHZhciBleHRlbmRlZCA9IHt9O1xuICAgIHZhciBkZWVwID0gdHJ1ZTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50c1swXSkgPT09ICdbb2JqZWN0IEJvb2xlYW5dJykge1xuICAgICAgZGVlcCA9IGFyZ3VtZW50c1swXTtcbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICB2YXIgbWVyZ2UgPSBmdW5jdGlvbiBtZXJnZShvYmopIHtcbiAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkge1xuICAgICAgICAgIGlmIChkZWVwICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmpbcHJvcF0pID09PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgICAgICAgZXh0ZW5kZWRbcHJvcF0gPSBleHRlbmQodHJ1ZSwgZXh0ZW5kZWRbcHJvcF0sIG9ialtwcm9wXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4dGVuZGVkW3Byb3BdID0gb2JqW3Byb3BdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2Y
24510XIgb2JqID0gYXJndW1lbnRzW2ldO1xuICAgICAgbWVyZ2Uob2JqKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXh0ZW5kZWQ7XG4gIH1cbiAgZnVuY3Rpb24gZWFjaChjb2xsZWN0aW9uLCBjYWxsYmFjaykge1xuICAgIGlmIChpc05vZGUoY29sbGVjdGlvbikgfHwgY29sbGVjdGlvbiA9PT0gd2luZG93IHx8IGNvbGxlY3Rpb24gPT09IGRvY3VtZW50KSB7XG4gICAgICBjb2xsZWN0aW9uID0gW2NvbGxlY3Rpb25dO1xuICAgIH1cblxuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikgJiYgIWlzT2JqZWN0KGNvbGxlY3Rpb24pKSB7XG4gICAgICBjb2xsZWN0aW9uID0gW2NvbGxlY3Rpb25dO1xuICAgIH1cblxuICAgIGlmIChzaXplKGNvbGxlY3Rpb24pID09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJheUxpa2UoY29sbGVjdGlvbikgJiYgIWlzT2JqZWN0KGNvbGxlY3Rpb24pKSB7XG4gICAgICB2YXIgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuICAgICAgICAgIGkgPSAwO1xuXG4gICAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoY2FsbGJhY2suY2FsbChjb2xsZWN0aW9uW2ldLCBjb2xsZWN0aW9uW2ldLCBpLCBjb2xsZWN0aW9uKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoY29sbGVjdGlvbikpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiBjb2xsZWN0aW9uKSB7XG4gICAgICAgIGlmIChoYXMoY29sbGVjdGlvbiwga2V5KSkge1xuICAgICAgICAgIGlmIChjYWxsYmFjay5jYWxsKGNvbGxlY3Rpb25ba2V5XSwgY29sbGVjdGlvbltrZXldLCBrZXksIGNvbGxlY3Rpb24pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGdldE5vZGVFdmVudHMobm9kZSkge1xuICAgIHZhciBuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBudWxsO1xuICAgIHZhciBmbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbnVsbDtcbiAgICB2YXIgY2FjaGUgPSBub2RlW3VpZF0gPSBub2RlW3VpZF0gfHwgW107XG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICBhbGw6IGNhY2hlLFxuICAgICAgZXZ0OiBudWxsLFxuICAgICAgZm91bmQ6IG51bGxcbiAgICB9O1xuXG4gICAgaWYgKG5hbWUgJiYgZm4gJiYgc2l6ZShjYWNoZSkgPiAwKSB7XG4gICAgICBlYWNoKGNhY2hlLCBmdW5jdGlvbiAoY2wsIGkpIHtcbiAgICAgICAgaWYgKGNsLmV2ZW50TmFtZSA9PSBuYW1lICYmIGNsLmZuLnRvU3RyaW5nKCkgPT0gZm4udG9TdHJpbmcoKSkge1xuICAgICAgICAgIGRhdGEuZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGRhdGEuZXZ0ID0gaTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGZ1bmN0aW9uIGFkZEV2ZW50KGV2ZW50TmFtZSkge1xuICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgICAgb25FbGVtZW50ID0gX3JlZi5vbkVsZW1lbnQsXG4gICAgICAgIHdpdGhDYWxsYmFjayA9IF9yZWYud2l0aENhbGxiYWNrLFxuICAgICAgICBfcmVmJGF2b2lkRHVwbGljYXRlID0gX3JlZi5hdm9pZER1cGxpY2F0ZSxcbiAgICAgICAgYXZvaWREdXBsaWNhdGUgPSBfcmVmJGF2b2lkRHVwbGljYXRlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRhdm9pZER1cGxpY2F0ZSxcbiAgICAgICAgX3JlZiRvbmNlID0gX3JlZi5vbmNlLFxuICAgICAgICBvbmNlID0gX3JlZiRvbmNlID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkb25jZSxcbiAgICAgICAgX3JlZiR1c2VDYXB0dXJlID0gX3JlZi51c2VDYXB0dXJlLFxuICAgICAgICB1c2VDYXB0dXJlID0gX3JlZiR1c2VDYXB0dXJlID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkdXNlQ2FwdHVyZTtcblxuICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGVsZW1lbnQgPSBvbkVsZW1lbnQgfHwgW107XG5cbiAgICBpZiAoaXNTdHJpbmcoZWxlbWVudCkpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICAgIGlmIChpc0Z1bmN0aW9uKHdpdGhDYWxsYmFjaykpIHtcbiAgICAgICAgd2l0aENhbGxiYWNrLmNhbGwodGhpc0FyZywgZXZlbnQsIHRoaXMpO1xuICAgICAgfVxuXG4gICAgICBpZiAob25jZSkge1xuICAgICAgICBoYW5kbGVyLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVyLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBlYWNoKGVsZW1lbnQsIGZ1bmN0aW9uIChlbCkge1xuICAgICAgICB2Y
24510XIgZXZlbnRzID0gZ2V0Tm9kZUV2ZW50cyhlbCwgZXZlbnROYW1lLCBoYW5kbGVyKTtcblxuICAgICAgICBpZiAoZXZlbnRzLmZvdW5kKSB7XG4gICAgICAgICAgZXZlbnRzLmFsbC5zcGxpY2UoZXZlbnRzLmV2dCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGVhY2goZWxlbWVudCwgZnVuY3Rpb24gKGVsKSB7XG4gICAgICB2YXIgZXZlbnRzID0gZ2V0Tm9kZUV2ZW50cyhlbCwgZXZlbnROYW1lLCBoYW5kbGVyKTtcblxuICAgICAgaWYgKGVsLmFkZEV2ZW50TGlzdGVuZXIgJiYgYXZvaWREdXBsaWNhdGUgJiYgIWV2ZW50cy5mb3VuZCB8fCAhYXZvaWREdXBsaWNhdGUpIHtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpO1xuICAgICAgICBldmVudHMuYWxsLnB1c2goe1xuICAgICAgICAgIGV2ZW50TmFtZTogZXZlbnROYW1lLFxuICAgICAgICAgIGZuOiBoYW5kbGVyXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoYW5kbGVyO1xuICB9XG4gIGZ1bmN0aW9uIGFkZENsYXNzKG5vZGUsIG5hbWUpIHtcbiAgICBlYWNoKG5hbWUuc3BsaXQoJyAnKSwgZnVuY3Rpb24gKGNsKSB7XG4gICAgICByZXR1cm4gbm9kZS5jbGFzc0xpc3QuYWRkKGNsKTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVDbGFzcyhub2RlLCBuYW1lKSB7XG4gICAgZWFjaChuYW1lLnNwbGl0KCcgJyksIGZ1bmN0aW9uIChjbCkge1xuICAgICAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0LnJlbW92ZShjbCk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gaGFzQ2xhc3Mobm9kZSwgbmFtZSkge1xuICAgIHJldHVybiBub2RlLmNsYXNzTGlzdC5jb250YWlucyhuYW1lKTtcbiAgfVxuICBmdW5jdGlvbiBjbG9zZXN0KGVsZW0sIHNlbGVjdG9yKSB7XG4gICAgd2hpbGUgKGVsZW0gIT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgIGVsZW0gPSBlbGVtLnBhcmVudEVsZW1lbnQ7XG5cbiAgICAgIGlmICghZWxlbSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBtYXRjaGVzID0gdHlwZW9mIGVsZW0ubWF0Y2hlcyA9PSAnZnVuY3Rpb24nID8gZWxlbS5tYXRjaGVzKHNlbGVjdG9yKSA6IGVsZW0ubXNNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpO1xuXG4gICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gZWxlbTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gYW5pbWF0ZUVsZW1lbnQoZWxlbWVudCkge1xuICAgIHZhciBhbmltYXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICcnO1xuICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG5cbiAgICBpZiAoIWVsZW1lbnQgfHwgYW5pbWF0aW9uID09PSAnJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChhbmltYXRpb24gPT0gJ25vbmUnKSB7XG4gICAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBhbmltYXRpb25FbmQgPSB3aGljaEFuaW1hdGlvbkV2ZW50KCk7XG4gICAgdmFyIGFuaW1hdGlvbk5hbWVzID0gYW5pbWF0aW9uLnNwbGl0KCcgJyk7XG4gICAgZWFjaChhbmltYXRpb25OYW1lcywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIGFkZENsYXNzKGVsZW1lbnQsICdnJyArIG5hbWUpO1xuICAgIH0pO1xuICAgIGFkZEV2ZW50KGFuaW1hdGlvbkVuZCwge1xuICAgICAgb25FbGVtZW50OiBlbGVtZW50LFxuICAgICAgYXZvaWREdXBsaWNhdGU6IGZhbHNlLFxuICAgICAgb25jZTogdHJ1ZSxcbiAgICAgIHdpdGhDYWxsYmFjazogZnVuY3Rpb24gd2l0aENhbGxiYWNrKGV2ZW50LCB0YXJnZXQpIHtcbiAgICAgICAgZWFjaChhbmltYXRpb25OYW1lcywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICByZW1vdmVDbGFzcyh0YXJnZXQsICdnJyArIG5hbWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gY3NzVHJhbnNmb3JtKG5vZGUpIHtcbiAgICB2YXIgdHJhbnNsYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnJztcblxuICAgIGlmICh0cmFuc2xhdGUgPT0gJycpIHtcbiAgICAgIG5vZGUuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gJyc7XG4gICAgICBub2RlLnN0eWxlLk1velRyYW5zZm9ybSA9ICcnO1xuICAgICAgbm9kZS5zdHlsZS5tc1RyYW5zZm9ybSA9ICcnO1xuICAgICAgbm9kZS5zdHlsZS5PVHJhbnNmb3JtID0gJyc7XG4gICAgICBub2RlLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIG5vZGUuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gdHJhbnNsYXRlO1xuICAgIG5vZGUuc3R5bGUuTW96VHJhbnNmb3JtID0gdHJhbnNsYXRlO1xuICAgIG5vZGUuc3R5bGUubXNUcmFuc2Zvcm0gPSB0cmFuc2xhdGU7XG4gICAgbm9kZS5zdHlsZS5PVHJhbnNmb3JtID0gdHJhbnNsYXRlO1xuICAgIG5vZGUuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNsYXRlO1xuICB9XG4gIGZ1bmN0aW9uIHNob3coZWxlbWVudCkge1xuICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gIH1cbiAgZnVuY3Rpb24gaGlkZShlbGVtZW50KSB7XG4gICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG4gIGZ1bmN0aW9uIGNyZWF0ZUhUTUwoaHRtbFN0cikge1xuICAgIHZhciBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuICAgICAgICB0ZW1wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGVtcC5pbm5lckhUTUwgPSBodG1sU3RyO1xuXG4gICAgd2hpbGUgKHRlbXAuZmlyc3RDaGlsZCkge1xuICAgICAgZnJhZy5hcHBlbmRDaGlsZCh0ZW1wLmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgI
24510HJldHVybiBmcmFnO1xuICB9XG4gIGZ1bmN0aW9uIHdpbmRvd1NpemUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxcbiAgICAgIGhlaWdodDogd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHwgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHRcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHdoaWNoQW5pbWF0aW9uRXZlbnQoKSB7XG4gICAgdmFyIHQsXG4gICAgICAgIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmFrZWVsZW1lbnQnKTtcbiAgICB2YXIgYW5pbWF0aW9ucyA9IHtcbiAgICAgIGFuaW1hdGlvbjogJ2FuaW1hdGlvbmVuZCcsXG4gICAgICBPQW5pbWF0aW9uOiAnb0FuaW1hdGlvbkVuZCcsXG4gICAgICBNb3pBbmltYXRpb246ICdhbmltYXRpb25lbmQnLFxuICAgICAgV2Via2l0QW5pbWF0aW9uOiAnd2Via2l0QW5pbWF0aW9uRW5kJ1xuICAgIH07XG5cbiAgICBmb3IgKHQgaW4gYW5pbWF0aW9ucykge1xuICAgICAgaWYgKGVsLnN0eWxlW3RdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGFuaW1hdGlvbnNbdF07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHdoaWNoVHJhbnNpdGlvbkV2ZW50KCkge1xuICAgIHZhciB0LFxuICAgICAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zha2VlbGVtZW50Jyk7XG4gICAgdmFyIHRyYW5zaXRpb25zID0ge1xuICAgICAgdHJhbnNpdGlvbjogJ3RyYW5zaXRpb25lbmQnLFxuICAgICAgT1RyYW5zaXRpb246ICdvVHJhbnNpdGlvbkVuZCcsXG4gICAgICBNb3pUcmFuc2l0aW9uOiAndHJhbnNpdGlvbmVuZCcsXG4gICAgICBXZWJraXRUcmFuc2l0aW9uOiAnd2Via2l0VHJhbnNpdGlvbkVuZCdcbiAgICB9O1xuXG4gICAgZm9yICh0IGluIHRyYW5zaXRpb25zKSB7XG4gICAgICBpZiAoZWwuc3R5bGVbdF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdHJhbnNpdGlvbnNbdF07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGNyZWF0ZUlmcmFtZShjb25maWcpIHtcbiAgICB2YXIgdXJsID0gY29uZmlnLnVybCxcbiAgICAgICAgYWxsb3cgPSBjb25maWcuYWxsb3csXG4gICAgICAgIGNhbGxiYWNrID0gY29uZmlnLmNhbGxiYWNrLFxuICAgICAgICBhcHBlbmRUbyA9IGNvbmZpZy5hcHBlbmRUbztcbiAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gICAgaWZyYW1lLmNsYXNzTmFtZSA9ICd2aW1lby12aWRlbyBndmlkZW8nO1xuICAgIGlmcmFtZS5zcmMgPSB1cmw7XG4gICAgaWZyYW1lLnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgIGlmcmFtZS5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG5cbiAgICBpZiAoYWxsb3cpIHtcbiAgICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoJ2FsbG93JywgYWxsb3cpO1xuICAgIH1cblxuICAgIGlmcmFtZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBhZGRDbGFzcyhpZnJhbWUsICdub2RlLXJlYWR5Jyk7XG5cbiAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoYXBwZW5kVG8pIHtcbiAgICAgIGFwcGVuZFRvLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlmcmFtZTtcbiAgfVxuICBmdW5jdGlvbiB3YWl0VW50aWwoY2hlY2ssIG9uQ29tcGxldGUsIGRlbGF5LCB0aW1lb3V0KSB7XG4gICAgaWYgKGNoZWNrKCkpIHtcbiAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRlbGF5KSB7XG4gICAgICBkZWxheSA9IDEwMDtcbiAgICB9XG5cbiAgICB2YXIgdGltZW91dFBvaW50ZXI7XG4gICAgdmFyIGludGVydmFsUG9pbnRlciA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghY2hlY2soKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxQb2ludGVyKTtcblxuICAgICAgaWYgKHRpbWVvdXRQb2ludGVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0UG9pbnRlcik7XG4gICAgICB9XG5cbiAgICAgIG9uQ29tcGxldGUoKTtcbiAgICB9LCBkZWxheSk7XG5cbiAgICBpZiAodGltZW91dCkge1xuICAgICAgdGltZW91dFBvaW50ZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbFBvaW50ZXIpO1xuICAgICAgfSwgdGltZW91dCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGluamVjdEFzc2V0cyh1cmwsIHdhaXRGb3IsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGlzTmlsKHVybCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0luamVjdCBhc3NldHMgZXJyb3InKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNGdW5jdGlvbih3YWl0Rm9yKSkge1xuICAgICAgY2FsbGJhY2sgPSB3YWl0Rm9yO1xuICAgICAgd2FpdEZvciA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyh3YWl0Rm9yKSAmJiB3YWl0Rm9yIGluIHdpbmRvdykge1xuICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZm91bmQ7XG5cbiAgICBpZiAodXJsLmluZGV4T2YoJy5jc3MnKSAhPT0gLTEpIHtcbiAgICAgIGZvdW5kID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbGlua1tocmVmPVwiJyArIHVybCArICdcIl0nKTtcblxuICAgICAgaWYgKGZvdW5kICYmIGZvdW5kLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICAgICAgdmFyIGhlYWRTdHlsZXMgPSBoZWFkLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpbmtbcmVsPVwic3R5bGVzaGVldFwiXScpO1xuICAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgIGxpbmsudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgICBsaW5rLm1lZGlhID0gJ2FsbCc7XG5cbiAgICAgIGlmIChoZWFkU3R5bGVzKSB7XG4gICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKGxpbmssIGhlYWRTdHlsZXNbMF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3VuZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3NjcmlwdFtzcmM9XCInICsgdXJsICsgJ1wiXScpO1xuXG4gICAgaWYgKGZvdW5kICYmIGZvdW5kLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICBpZiAoaXNTdHJpbmcod2FpdEZvcikpIHtcbiAgICAgICAgICB3YWl0VW50aWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB3aW5kb3dbd2FpdEZvcl0gIT09ICd1bmRlZmluZWQnO1xuICAgICAgICAgI
24510H0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgIHNjcmlwdC5zcmMgPSB1cmw7XG5cbiAgICBzY3JpcHQub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgIGlmIChpc1N0cmluZyh3YWl0Rm9yKSkge1xuICAgICAgICAgIHdhaXRVbnRpbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHdpbmRvd1t3YWl0Rm9yXSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZ1bmN0aW9uIGlzTW9iaWxlKCkge1xuICAgIHJldHVybiAnbmF2aWdhdG9yJyBpbiB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goLyhpUGFkKXwoaVBob25lKXwoaVBvZCl8KEFuZHJvaWQpfChQbGF5Qm9vayl8KEJCMTApfChCbGFja0JlcnJ5KXwoT3BlcmEgTWluaSl8KElFTW9iaWxlKXwod2ViT1MpfChNZWVHbykvaSk7XG4gIH1cbiAgZnVuY3Rpb24gaXNUb3VjaCgpIHtcbiAgICByZXR1cm4gaXNNb2JpbGUoKSAhPT0gbnVsbCB8fCBkb2N1bWVudC5jcmVhdGVUb3VjaCAhPT0gdW5kZWZpbmVkIHx8ICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdyB8fCAnb25tc2dlc3R1cmVjaGFuZ2UnIGluIHdpbmRvdyB8fCBuYXZpZ2F0b3IubXNNYXhUb3VjaFBvaW50cztcbiAgfVxuICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGYpIHtcbiAgICByZXR1cm4gdHlwZW9mIGYgPT09ICdmdW5jdGlvbic7XG4gIH1cbiAgZnVuY3Rpb24gaXNTdHJpbmcocykge1xuICAgIHJldHVybiB0eXBlb2YgcyA9PT0gJ3N0cmluZyc7XG4gIH1cbiAgZnVuY3Rpb24gaXNOb2RlKGVsKSB7XG4gICAgcmV0dXJuICEhKGVsICYmIGVsLm5vZGVUeXBlICYmIGVsLm5vZGVUeXBlID09IDEpO1xuICB9XG4gIGZ1bmN0aW9uIGlzQXJyYXkoYXIpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhcik7XG4gIH1cbiAgZnVuY3Rpb24gaXNBcnJheUxpa2UoYXIpIHtcbiAgICByZXR1cm4gYXIgJiYgYXIubGVuZ3RoICYmIGlzRmluaXRlKGFyLmxlbmd0aCk7XG4gIH1cbiAgZnVuY3Rpb24gaXNPYmplY3Qobykge1xuICAgIHZhciB0eXBlID0gX3R5cGVvZihvKTtcblxuICAgIHJldHVybiB0eXBlID09PSAnb2JqZWN0JyAmJiBvICE9IG51bGwgJiYgIWlzRnVuY3Rpb24obykgJiYgIWlzQXJyYXkobyk7XG4gIH1cbiAgZnVuY3Rpb24gaXNOaWwobykge1xuICAgIHJldHVybiBvID09IG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbiAgfVxuICBmdW5jdGlvbiBzaXplKG8pIHtcbiAgICBpZiAoaXNPYmplY3QobykpIHtcbiAgICAgIGlmIChvLmtleXMpIHtcbiAgICAgICAgcmV0dXJuIG8ua2V5cygpLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgdmFyIGwgPSAwO1xuXG4gICAgICBmb3IgKHZhciBrIGluIG8pIHtcbiAgICAgICAgaWYgKGhhcyhvLCBrKSkge1xuICAgICAgICAgIGwrKztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG8ubGVuZ3RoO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBpc051bWJlcihuKSB7XG4gICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE5leHRGb2N1c0VsZW1lbnQoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IC0xO1xuICAgIHZhciBidG5zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmdidG5bZGF0YS10YWJvcmRlcl06bm90KC5kaXNhYmxlZCknKTtcblxuICAgIGlmICghYnRucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoYnRucy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIGJ0bnNbMF07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjdXJyZW50ID09ICdzdHJpbmcnKSB7XG4gICAgICBjdXJyZW50ID0gcGFyc2VJbnQoY3VycmVudCk7XG4gICAgfVxuXG4gICAgdmFyIG5ld0luZGV4ID0gY3VycmVudCA8IDAgPyAxIDogY3VycmVudCArIDE7XG5cbiAgICBpZiAobmV3SW5kZXggPiBidG5zLmxlbmd0aCkge1xuICAgICAgbmV3SW5kZXggPSAnMSc7XG4gICAgfVxuXG4gICAgdmFyIG9yZGVycyA9IFtdO1xuICAgIGVhY2goYnRucywgZnVuY3Rpb24gKGJ0bikge1xuICAgICAgb3JkZXJzLnB1c2goYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS10YWJvcmRlcicpKTtcbiAgICB9KTtcbiAgICB2YXIgbmV4dE9yZGVycyA9IG9yZGVycy5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7XG4gICAgICByZXR1cm4gZWwgPj0gcGFyc2VJbnQobmV3SW5kZXgpO1xuICAgIH0pO1xuICAgIHZhciBuZXh0Rm9jdXMgPSBuZXh0T3JkZXJzLnNvcnQoKVswXTtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5nYnRuW2RhdGEtdGFib3JkZXI9XFxcIlwiLmNvbmNhdChuZXh0Rm9jdXMsIFwiXFxcIl1cIikpO1xuICB9XG5cbiAgZnVuY3Rpb24ga2V5Ym9hcmROYXZpZ2F0aW9uKGluc3RhbmNlKSB7XG4gICAgaWYgKGluc3RhbmNlLmV2ZW50cy5oYXNPd25Qcm9wZXJ0eSgna2V5Ym9hcmQnKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGluc3RhbmNlLmV2ZW50c1sna2V5Ym9hcmQnXSA9IGFkZEV2ZW50KCdrZXlkb3duJywge1xuICAgICAgb25FbGVtZW50OiB3aW5kb3csXG4gICAgICB3aXRoQ2FsbGJhY2s6IGZ1bmN0aW9uIHdpdGhDYWxsYmFjayhldmVudCwgdGFyZ2V0KSB7XG4gICAgICAgIGV2ZW50ID0gZXZlbnQgfHwgd2luZG93LmV2ZW50O1xuICAgICAgICB2Y
24510XIga2V5ID0gZXZlbnQua2V5Q29kZTtcblxuICAgICAgICBpZiAoa2V5ID09IDkpIHtcbiAgICAgICAgICB2YXIgZm9jdXNlZEJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5nYnRuLmZvY3VzZWQnKTtcblxuICAgICAgICAgIGlmICghZm9jdXNlZEJ1dHRvbikge1xuICAgICAgICAgICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQubm9kZU5hbWUgPyBkb2N1bWVudC5hY3RpdmVFbGVtZW50Lm5vZGVOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkgOiBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQgPT0gJ2lucHV0JyB8fCBhY3RpdmVFbGVtZW50ID09ICd0ZXh0YXJlYScgfHwgYWN0aXZlRWxlbWVudCA9PSAnYnV0dG9uJykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB2YXIgYnRucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5nYnRuW2RhdGEtdGFib3JkZXJdJyk7XG5cbiAgICAgICAgICBpZiAoIWJ0bnMgfHwgYnRucy5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZm9jdXNlZEJ1dHRvbikge1xuICAgICAgICAgICAgdmFyIGZpcnN0ID0gZ2V0TmV4dEZvY3VzRWxlbWVudCgpO1xuXG4gICAgICAgICAgICBpZiAoZmlyc3QpIHtcbiAgICAgICAgICAgICAgZmlyc3QuZm9jdXMoKTtcbiAgICAgICAgICAgICAgYWRkQ2xhc3MoZmlyc3QsICdmb2N1c2VkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2Y
24510XIgY3VycmVudEZvY3VzT3JkZXIgPSBmb2N1c2VkQnV0dG9uLmdldEF0dHJpYnV0ZSgnZGF0YS10YWJvcmRlcicpO1xuICAgICAgICAgIHZhciBuZXh0Rm9jdXMgPSBnZXROZXh0Rm9jdXNFbGVtZW50KGN1cnJlbnRGb2N1c09yZGVyKTtcbiAgICAgICAgICByZW1vdmVDbGFzcyhmb2N1c2VkQnV0dG9uLCAnZm9jdXNlZCcpO1xuXG4gICAgICAgICAgaWYgKG5leHRGb2N1cykge1xuICAgICAgICAgICAgbmV4dEZvY3VzLmZvY3VzKCk7XG4gICAgICAgICAgICBhZGRDbGFzcyhuZXh0Rm9jdXMsICdmb2N1c2VkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSA9PSAzOSkge1xuICAgICAgICAgIGluc3RhbmNlLm5leHRTbGlkZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSA9PSAzNykge1xuICAgICAgICAgIGluc3RhbmNlLnByZXZTbGlkZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSA9PSAyNykge1xuICAgICAgICAgIGluc3RhbmNlLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldExlbih2KSB7XG4gICAgcmV0dXJuIE1hdGguc3FydCh2LnggKiB2LnggKyB2LnkgKiB2LnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZG90KHYxLCB2Mikge1xuICAgIHJldHVybiB2MS54ICogdjIueCArIHYxLnkgKiB2Mi55O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QW5nbGUodjEsIHYyKSB7XG4gICAgdmFyIG1yID0gZ2V0TGVuKHYxKSAqIGdldExlbih2Mik7XG5cbiAgICBpZiAobXIgPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHZhciByID0gZG90KHYxLCB2MikgLyBtcjtcblxuICAgIGlmIChyID4gMSkge1xuICAgICAgciA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGguYWNvcyhyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyb3NzKHYxLCB2Mikge1xuICAgIHJldHVybiB2MS54ICogdjIueSAtIHYyLnggKiB2MS55O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Um90YXRlQW5nbGUodjEsIHYyKSB7XG4gICAgdmFyIGFuZ2xlID0gZ2V0QW5nbGUodjEsIHYyKTtcblxuICAgIGlmIChjcm9zcyh2MSwgdjIpID4gMCkge1xuICAgICAgYW5nbGUgKj0gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuZ2xlICogMTgwIC8gTWF0aC5QSTtcbiAgfVxuXG4gIHZhciBFdmVudHNIYW5kbGVyQWRtaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRXZlbnRzSGFuZGxlckFkbWluKGVsKSB7XG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXZlbnRzSGFuZGxlckFkbWluKTtcblxuICAgICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICAgICAgdGhpcy5lbCA9IGVsO1xuICAgIH1cblxuICAgIF9jcmVhdGVDbGFzcyhFdmVudHNIYW5kbGVyQWRtaW4sIFt7XG4gICAgICBrZXk6IFwiYWRkXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gYWRkKGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJkZWxcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZWwoaGFuZGxlcikge1xuICAgICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5oYW5kbGVycy5sZW5ndGg7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGFuZGxlcnNbaV0gPT09IGhhbmRsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJkaXNwYXRjaFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5oYW5kbGVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIHZhciBoYW5kbGVyID0gdGhpcy5oYW5kbGVyc1tpXTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgaGFuZGxlci5hcHBseSh0aGlzLmVsLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBFdmVudHNIYW5kbGVyQWRtaW47XG4gIH0oKTtcblxuICBmdW5jdGlvbiB3cmFwRnVuYyhlbCwgaGFuZGxlcikge1xuICAgIHZhciBFdmVudHNoYW5kbGVyQWRtaW4gPSBuZXcgRXZlbnRzSGFuZGxlckFkbWluKGVsKTtcbiAgICBFdmVudHNoYW5kbGVyQWRtaW4uYWRkKGhhbmRsZXIpO1xuICAgIHJldHVybiBFdmVudHNoYW5kbGVyQWRtaW47XG4gIH1cblxuICB2YXIgVG91Y2hFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVG91Y2hFdmVudHMoZWwsIG9wdGlvbikge1xuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRvdWNoRXZlbnRzKTtcblxuICAgICAgdGhpcy5lbGVtZW50ID0gdHlwZW9mIGVsID09ICdzdHJpbmcnID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbCkgOiBlbDtcbiAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLnN0YXJ0LmJpbmQodGhpcyk7XG4gICAgICB0aGlzLm1vdmUgPSB0aGlzLm1vdmUuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZW5kID0gdGhpcy5lbmQuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuY2FuY2VsID0gdGhpcy5jYW5jZWwuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5zdGFydCwgZmFsc2UpO1xuICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMubW92ZSwgZmFsc2UpO1xuICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5lbmQsIGZhbHNlKTtcbiAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIHRoaXMuY2FuY2VsLCBmYWxzZSk7XG4gICAgICB0aGlzLnByZVYgPSB7XG4gICAgICAgIHg6IG51bGwsXG4gICAgICAgIHk6IG51bGxcbiAgICAgIH07XG4gICAgICB0aGlzLnBpbmNoU3RhcnRMZW4gPSBudWxsO1xuICAgICAgdGhpcy56b29tID0gMTtcbiAgICAgIHRoaXMuaXNEb3VibGVUYXAgPSBmYWxzZTtcblxuICAgICAgdmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG5cbiAgICAgIHRoaXMucm90YXRlID0gd3JhcEZ1bmModGhpcy5lbGVtZW50LCBvcHRpb24ucm90YXRlIHx8IG5vb3ApO1xuICAgICAgdGhpcy50b3VjaFN0YXJ0ID0gd3JhcEZ1bmModGhpcy5lbGVtZW50LCBvcHRpb24udG91Y2hTdGFydCB8fCBub29wKTtcbiAgICAgIHRoaXMubXVsdGlwb2ludFN0YXJ0ID0gd3JhcEZ1bmModGhpcy5lbGVtZW50LCBvcHRpb24ubXVsdGlwb2ludFN0YXJ0IHx8IG5vb3ApO1xuICAgICAgdGhpcy5tdWx0aXBvaW50RW5kID0gd3JhcEZ1bmModGhpcy5lbGVtZW50LCBvcHRpb24ubXVsdGlwb2ludEVuZCB8fCBub29wKTtcbiAgICAgIHRoaXMucGluY2ggPSB3cmFwRnVuYyh0aGlzLmVsZW1lbnQsIG9wdGlvbi5waW5jaCB8fCBub29wKTtcbiAgICAgIHRoaXMuc3dpcGUgPSB3cmFwRnVuYyh0aGlzLmVsZW1lbnQsIG9wdGlvbi5zd2lwZSB8fCBub29wKTtcbiAgICAgIHRoaXMudGFwID0gd3JhcEZ1bmModGhpcy5lbGVtZW50LCBvcHRpb24udGFwIHx8IG5vb3ApO1xuICAgICAgdGhpcy5kb3VibGVUYXAgPSB3cmFwRnVuYyh0aGlzLmVsZW1lbnQsIG9wdGlvbi5kb3VibGVUYXAgfHwgbm9vcCk7XG4gICAgICB0aGlzLmxvbmdUYXAgPSB3cmFwRnVuYyh0aGlzLmVsZW1lbnQsIG9wdGlvbi5sb25nVGFwIH
24510x8IG5vb3ApO1xuICAgICAgdGhpcy5zaW5nbGVUYXAgPSB3cmFwRnVuYyh0aGlzLmVsZW1lbnQsIG9wdGlvbi5zaW5nbGVUYXAgfHwgbm9vcCk7XG4gICAgICB0aGlzLnByZXNzTW92ZSA9IHdyYXBGdW5jKHRoaXMuZWxlbWVudCwgb3B0aW9uLnByZXNzTW92ZSB8fCBub29wKTtcbiAgICAgIHRoaXMudHdvRmluZ2VyUHJlc3NNb3ZlID0gd3JhcEZ1bmModGhpcy5lbGVtZW50LCBvcHRpb24udHdvRmluZ2VyUHJlc3NNb3ZlIHx8IG5vb3ApO1xuICAgICAgdGhpcy50b3VjaE1vdmUgPSB3cmFwRnVuYyh0aGlzLmVsZW1lbnQsIG9wdGlvbi50b3VjaE1vdmUgfHwgbm9vcCk7XG4gICAgICB0aGlzLnRvdWNoRW5kID0gd3JhcEZ1bmModGhpcy5lbGVtZW50LCBvcHRpb24udG91Y2hFbmQgfHwgbm9vcCk7XG4gICAgICB0aGlzLnRvdWNoQ2FuY2VsID0gd3JhcEZ1bmModGhpcy5lbGVtZW50LCBvcHRpb24udG91Y2hDYW5jZWwgfHwgbm9vcCk7XG4gICAgICB0aGlzLnRyYW5zbGF0ZUNvbnRhaW5lciA9IHRoaXMuZWxlbWVudDtcbiAgICAgIHRoaXMuX2NhbmNlbEFsbEhhbmRsZXIgPSB0aGlzLmNhbmNlbEFsbC5iaW5kKHRoaXMpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuX2NhbmNlbEFsbEhhbmRsZXIpO1xuICAgICAgdGhpcy5kZWx0YSA9IG51bGw7XG4gICAgICB0aGlzLmxhc3QgPSBudWxsO1xuICAgICAgdGhpcy5ub3cgPSBudWxsO1xuICAgICAgdGhpcy50YXBUaW1lb3V0ID0gbnVsbDtcbiAgICAgIHRoaXMuc2luZ2xlVGFwVGltZW91dCA9IG51bGw7XG4gICAgICB0aGlzLmxvbmdUYXBUaW1lb3V0ID0gbnVsbDtcbiAgICAgIHRoaXMuc3dpcGVUaW1lb3V0ID0gbnVsbDtcbiAgICAgIHRoaXMueDEgPSB0aGlzLngyID0gdGhpcy55MSA9IHRoaXMueTIgPSBudWxsO1xuICAgICAgdGhpcy5wcmVUYXBQb3NpdGlvbiA9IHtcbiAgICAgICAgeDogbnVsbCxcbiAgICAgICAgeTogbnVsbFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBfY3JlYXRlQ2xhc3MoVG91Y2hFdmVudHMsIFt7XG4gICAgICBrZXk6IFwic3RhcnRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzdGFydChldnQpIHtcbiAgICAgICAgaWYgKCFldnQudG91Y2hlcykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpZ25vcmVEcmFnRm9yID0gWydhJywgJ2J1dHRvbicsICdpbnB1dCddO1xuXG4gICAgICAgIGlmIChldnQudGFyZ2V0ICYmIGV2dC50YXJnZXQubm9kZU5hbWUgJiYgaWdub3JlRHJhZ0Zvci5pbmRleE9mKGV2dC50YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgPj0gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdpZ25vcmUgZHJhZyBmb3IgdGhpcyB0b3VjaGVkIGVsZW1lbnQnLCBldnQudGFyZ2V0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdGhpcy54MSA9IGV2dC50b3VjaGVzWzBdLnBhZ2VYO1xuICAgICAgICB0aGlzLnkxID0gZXZ0LnRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICAgIHRoaXMuZGVsdGEgPSB0aGlzLm5vdyAtICh0aGlzLmxhc3QgfHwgdGhpcy5ub3cpO1xuICAgICAgICB0aGlzLnRvdWNoU3RhcnQuZGlzcGF0Y2goZXZ0LCB0aGlzLmVsZW1lbnQpO1xuXG4gICAgICAgIGlmICh0aGlzLnByZVRhcFBvc2l0aW9uLnggIT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmlzRG91YmxlVGFwID0gdGhpcy5kZWx0YSA+IDAgJiYgdGhpcy5kZWx0YSA8PSAyNTAgJiYgTWF0aC5hYnModGhpcy5wcmVUYXBQb3NpdGlvbi54IC0gdGhpcy54MSkgPCAzMCAmJiBNYXRoLmFicyh0aGlzLnByZVRhcFBvc2l0aW9uLnkgLSB0aGlzLnkxKSA8IDMwO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEb3VibGVUYXApIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNpbmdsZVRhcFRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJlVGFwUG9zaXRpb24ueCA9IHRoaXMueDE7XG4gICAgICAgIHRoaXMucHJlVGFwUG9zaXRpb24ueSA9IHRoaXMueTE7XG4gICAgICAgIHRoaXMubGFzdCA9IHRoaXMubm93O1xuICAgICAgICB2Y
24510XIgcHJlViA9IHRoaXMucHJlVixcbiAgICAgICAgICAgIGxlbiA9IGV2dC50b3VjaGVzLmxlbmd0aDtcblxuICAgICAgICBpZiAobGVuID4gMSkge1xuICAgICAgICAgIHRoaXMuX2NhbmNlbExvbmdUYXAoKTtcblxuICAgICAgICAgIHRoaXMuX2NhbmNlbFNpbmdsZVRhcCgpO1xuXG4gICAgICAgICAgdmFyIHYgPSB7XG4gICAgICAgICAgICB4OiBldnQudG91Y2hlc1sxXS5wYWdlWCAtIHRoaXMueDEsXG4gICAgICAgICAgICB5OiBldnQudG91Y2hlc1sxXS5wYWdlWSAtIHRoaXMueTFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHByZVYueCA9IHYueDtcbiAgICAgICAgICBwcmVWLnkgPSB2Lnk7XG4gICAgICAgICAgdGhpcy5waW5jaFN0YXJ0TGVuID0gZ2V0TGVuKHByZVYpO1xuICAgICAgICAgIHRoaXMubXVsdGlwb2ludFN0YXJ0LmRpc3BhdGNoKGV2dCwgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ByZXZlbnRUYXAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb25nVGFwVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMubG9uZ1RhcC5kaXNwYXRjaChldnQsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgdGhpcy5fcHJldmVudFRhcCA9IHRydWU7XG4gICAgICAgIH0uYmluZCh0aGlzKSwgNzUwKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwibW92ZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1vdmUoZXZ0KSB7XG4gICAgICAgIGlmICghZXZ0LnRvdWNoZXMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2Y
24510XIgcHJlViA9IHRoaXMucHJlVixcbiAgICAgICAgICAgIGxlbiA9IGV2dC50b3VjaGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGN1cnJlbnRYID0gZXZ0LnRvdWNoZXNbMF0ucGFnZVgsXG4gICAgICAgICAgICBjdXJyZW50WSA9IGV2dC50b3VjaGVzWzBdLnBhZ2VZO1xuICAgICAgICB0aGlzLmlzRG91YmxlVGFwID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGxlbiA+IDEpIHtcbiAgICAgICAgICB2YXIgc0N1cnJlbnRYID0gZXZ0LnRvdWNoZXNbMV0ucGFnZVgsXG4gICAgICAgICAgICAgIHNDdXJyZW50WSA9IGV2dC50b3VjaGVzWzFdLnBhZ2VZO1xuICAgICAgICAgIHZhciB2ID0ge1xuICAgICAgICAgICAgeDogZXZ0LnRvdWNoZXNbMV0ucGFnZVggLSBjdXJyZW50WCxcbiAgICAgICAgICAgIHk6IGV2dC50b3VjaGVzWzFdLnBhZ2VZIC0gY3VycmVudFlcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHByZVYueCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucGluY2hTdGFydExlbiA+IDApIHtcbiAgICAgICAgICAgICAgZXZ0Lnpvb20gPSBnZXRMZW4odikgLyB0aGlzLnBpbmNoU3RhcnRMZW47XG4gICAgICAgICAgICAgIHRoaXMucGluY2guZGlzcGF0Y2goZXZ0LCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBldnQuYW5nbGUgPSBnZXRSb3RhdGVBbmdsZSh2LCBwcmVWKTtcbiAgICAgICAgICAgIHRoaXMucm90YXRlLmRpc3BhdGNoKGV2dCwgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmVWLnggPSB2Lng7XG4gICAgICAgICAgcHJlVi55ID0gdi55O1xuXG4gICAgICAgICAgaWYgKHRoaXMueDIgIT09IG51bGwgJiYgdGhpcy5zeDIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGV2dC5kZWx0YVggPSAoY3VycmVudFggLSB0aGlzLngyICsgc0N1cnJlbnRYIC0gdGhpcy5zeDIpIC8gMjtcbiAgICAgICAgICAgIGV2dC5kZWx0YVkgPSAoY3VycmVudFkgLSB0aGlzLnkyICsgc0N1cnJlbnRZIC0gdGhpcy5zeTIpIC8gMjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXZ0LmRlbHRhWCA9IDA7XG4gICAgICAgICAgICBldnQuZGVsdGFZID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnR3b0ZpbmdlclByZXNzTW92ZS5kaXNwYXRjaChldnQsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgdGhpcy5zeDIgPSBzQ3VycmVudFg7XG4gICAgICAgICAgdGhpcy5zeTIgPSBzQ3VycmVudFk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMueDIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGV2dC5kZWx0YVggPSBjdXJyZW50WCAtIHRoaXMueDI7XG4gICAgICAgICAgICBldnQuZGVsdGFZID0gY3VycmVudFkgLSB0aGlzLnkyO1xuICAgICAgICAgICAgdmFyIG1vdmVkWCA9IE1hdGguYWJzKHRoaXMueDEgLSB0aGlzLngyKSxcbiAgICAgICAgICAgICAgICBtb3ZlZFkgPSBNYXRoLmFicyh0aGlzLnkxIC0gdGhpcy55Mik7XG5cbiAgICAgICAgICAgIGlmIChtb3ZlZFggPiAxMCB8fCBtb3ZlZFkgPiAxMCkge1xuICAgICAgICAgICAgICB0aGlzLl9wcmV2ZW50VGFwID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXZ0LmRlbHRhWCA9IDA7XG4gICAgICAgICAgICBldnQuZGVsdGFZID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnByZXNzTW92ZS5kaXNwYXRjaChldnQsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvdWNoTW92ZS5kaXNwYXRjaChldnQsIHRoaXMuZWxlbWVudCk7XG5cbiAgICAgICAgdGhpcy5fY2FuY2VsTG9uZ1RhcCgpO1xuXG4gICAgICAgIHRoaXMueDIgPSBjdXJyZW50WDtcbiAgICAgICAgdGhpcy55MiA9IGN1cnJlbnRZO1xuXG4gICAgICAgIGlmIChsZW4gPiAxKSB7XG4gICAgICAgICAgZXZ0LnByZXZlbn
24510REZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZW5kXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZW5kKGV2dCkge1xuICAgICAgICBpZiAoIWV2dC5jaGFuZ2VkVG91Y2hlcykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhbmNlbExvbmdUYXAoKTtcblxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgaWYgKGV2dC50b3VjaGVzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICB0aGlzLm11bHRpcG9pbnRFbmQuZGlzcGF0Y2goZXZ0LCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuc3gyID0gdGhpcy5zeTIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMueDIgJiYgTWF0aC5hYnModGhpcy54MSAtIHRoaXMueDIpID4gMzAgfHwgdGhpcy55MiAmJiBNYXRoLmFicyh0aGlzLnkxIC0gdGhpcy55MikgPiAzMCkge1xuICAgICAgICAgIGV2dC5kaXJlY3Rpb24gPSB0aGlzLl9zd2lwZURpcmVjdGlvbih0aGlzLngxLCB0aGlzLngyLCB0aGlzLnkxLCB0aGlzLnkyKTtcbiAgICAgICAgICB0aGlzLnN3aXBlVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi5zd2lwZS5kaXNwYXRjaChldnQsIHNlbGYuZWxlbWVudCk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50YXBUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXNlbGYuX3ByZXZlbnRUYXApIHtcbiAgICAgICAgICAgICAgc2VsZi50YXAuZGlzcGF0Y2goZXZ0LCBzZWxmLmVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VsZi5pc0RvdWJsZVRhcCkge1xuICAgICAgICAgICAgICBzZWxmLmRvdWJsZVRhcC5kaXNwYXRjaChldnQsIHNlbGYuZWxlbWVudCk7XG4gICAgICAgICAgICAgIHNlbGYuaXNEb3VibGVUYXAgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCAwKTtcblxuICAgICAgICAgIGlmICghc2VsZi5pc0RvdWJsZVRhcCkge1xuICAgICAgICAgICAgc2VsZi5zaW5nbGVUYXBUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHNlbGYuc2luZ2xlVGFwLmRpc3BhdGNoKGV2dCwgc2VsZi5lbGVtZW50KTtcbiAgICAgICAgICAgIH0sIDI1MCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b3VjaEVuZC5kaXNwYXRjaChldnQsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgIHRoaXMucHJlVi54ID0gMDtcbiAgICAgICAgdGhpcy5wcmVWLnkgPSAwO1xuICAgICAgICB0aGlzLnpvb20gPSAxO1xuICAgICAgICB0aGlzLnBpbmNoU3RhcnRMZW4gPSBudWxsO1xuICAgICAgICB0aGlzLngxID0gdGhpcy54MiA9IHRoaXMueTEgPSB0aGlzLnkyID0gbnVsbDtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiY2FuY2VsQWxsXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY2FuY2VsQWxsKCkge1xuICAgICAgICB0aGlzLl9wcmV2ZW50VGFwID0gdHJ1ZTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2luZ2xlVGFwVGltZW91dCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRhcFRpbWVvdXQpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5sb25nVGFwVGltZW91dCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN3aXBlVGltZW91dCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImNhbmNlbFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNhbmNlbChldnQpIHtcbiAgICAgICAgdGhpcy5jYW5jZWxBbGwoKTtcbiAgICAgICAgdGhpcy50b3VjaENhbmNlbC5kaXNwYXRjaChldnQsIHRoaXMuZWxlbWVudCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIl9jYW5jZWxMb25nVGFwXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gX2NhbmNlbExvbmdUYXAoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvbmdUYXBUaW1lb3V0KTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiX2NhbmNlbFNpbmdsZVRhcFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9jYW5jZWxTaW5nbGVUYXAoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNpbmdsZVRhcFRpbWVvdXQpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJfc3dpcGVEaXJlY3Rpb25cIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBfc3dpcGVEaXJlY3Rpb24oeDEsIHgyLCB5MSwgeTIpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYWJzKHgxIC0geDIpID49IE1hdGguYWJzKHkxIC0geTIpID8geDEgLSB4MiA+IDAgPyAnTGVmdCcgOiAnUmlnaHQnIDogeTEgLSB5MiA+IDAgPyAnVXAnIDogJ0Rvd24nO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJvblwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uKGV2dCwgaGFuZGxlcikge1xuICAgICAgICBpZiAodGhpc1tldnRdKSB7XG4gICAgICAgICAgdGhpc1tldnRdLmFkZChoYW5kbGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJvZmZcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBvZmYoZXZ0LCBoYW5kbGVyKSB7XG4gICAgICAgIGlmICh0aGlzW2V2dF0pIHtcbiAgICAgICAgICB0aGlzW2V2dF0uZGVsKGhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImRlc3Ryb3lcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5zaW5nbGVUYXBUaW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2luZ2xlVGFwVGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50YXBUaW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGFwVGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sb25nVGFwVGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvbmdUYXBUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN3aXBlVGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN3aXBlVGltZW91dCk7XG4gICAgICAgI
24510H1cblxuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuc3RhcnQpO1xuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5tb3ZlKTtcbiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5lbmQpO1xuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCB0aGlzLmNhbmNlbCk7XG4gICAgICAgIHRoaXMucm90YXRlLmRlbCgpO1xuICAgICAgICB0aGlzLnRvdWNoU3RhcnQuZGVsKCk7XG4gICAgICAgIHRoaXMubXVsdGlwb2ludFN0YXJ0LmRlbCgpO1xuICAgICAgICB0aGlzLm11bHRpcG9pbnRFbmQuZGVsKCk7XG4gICAgICAgIHRoaXMucGluY2guZGVsKCk7XG4gICAgICAgIHRoaXMuc3dpcGUuZGVsKCk7XG4gICAgICAgIHRoaXMudGFwLmRlbCgpO1xuICAgICAgICB0aGlzLmRvdWJsZVRhcC5kZWwoKTtcbiAgICAgICAgdGhpcy5sb25nVGFwLmRlbCgpO1xuICAgICAgICB0aGlzLnNpbmdsZVRhcC5kZWwoKTtcbiAgICAgICAgdGhpcy5wcmVzc01vdmUuZGVsKCk7XG4gICAgICAgIHRoaXMudHdvRmluZ2VyUHJlc3NNb3ZlLmRlbCgpO1xuICAgICAgICB0aGlzLnRvdWNoTW92ZS5kZWwoKTtcbiAgICAgICAgdGhpcy50b3VjaEVuZC5kZWwoKTtcbiAgICAgICAgdGhpcy50b3VjaENhbmNlbC5kZWwoKTtcbiAgICAgICAgdGhpcy5wcmVWID0gdGhpcy5waW5jaFN0YXJ0TGVuID0gdGhpcy56b29tID0gdGhpcy5pc0RvdWJsZVRhcCA9IHRoaXMuZGVsdGEgPSB0aGlzLmxhc3QgPSB0aGlzLm5vdyA9IHRoaXMudGFwVGltZW91dCA9IHRoaXMuc2luZ2xlVGFwVGltZW91dCA9IHRoaXMubG9uZ1RhcFRpbWVvdXQgPSB0aGlzLnN3aXBlVGltZW91dCA9IHRoaXMueDEgPSB0aGlzLngyID0gdGhpcy55MSA9IHRoaXMueTIgPSB0aGlzLnByZVRhcFBvc2l0aW9uID0gdGhpcy5yb3RhdGUgPSB0aGlzLnRvdWNoU3RhcnQgPSB0aGlzLm11bHRpcG9pbnRTdGFydCA9IHRoaXMubXVsdGlwb2ludEVuZCA9IHRoaXMucGluY2ggPSB0aGlzLnN3aXBlID0gdGhpcy50YXAgPSB0aGlzLmRvdWJsZVRhcCA9IHRoaXMubG9uZ1RhcCA9IHRoaXMuc2luZ2xlVGFwID0gdGhpcy5wcmVzc01vdmUgPSB0aGlzLnRvdWNoTW92ZSA9IHRoaXMudG91Y2hFbmQgPSB0aGlzLnRvdWNoQ2FuY2VsID0gdGhpcy50d29GaW5nZXJQcmVzc01vdmUgPSBudWxsO1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5fY2FuY2VsQWxsSGFuZGxlcik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBUb3VjaEV2ZW50cztcbiAgfSgpO1xuXG4gIGZ1bmN0aW9uIHJlc2V0U2xpZGVNb3ZlKHNsaWRlKSB7XG4gICAgdmFyIHRyYW5zaXRpb25FbmQgPSB3aGljaFRyYW5zaXRpb25FdmVudCgpO1xuICAgIHZhciB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoO1xuICAgIHZhciBtZWRpYSA9IGhhc0NsYXNzKHNsaWRlLCAnZ3NsaWRlLW1lZGlhJykgPyBzbGlkZSA6IHNsaWRlLnF1ZXJ5U2VsZWN0b3IoJy5nc2xpZGUtbWVkaWEnKTtcbiAgICB2YXIgY29udGFpbmVyID0gY2xvc2VzdChtZWRpYSwgJy5naW5uZXItY29udGFpbmVyJyk7XG4gICAgdmFyIGRlc2MgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3NsaWRlLWRlc2NyaXB0aW9uJyk7XG5cbiAgICBpZiAod2luZG93V2lkdGggPiA3NjkpIHtcbiAgICAgIG1lZGlhID0gY29udGFpbmVyO1xuICAgIH1cblxuICAgIGFkZENsYXNzKG1lZGlhLCAnZ3Jlc2V0Jyk7XG4gICAgY3NzVHJhbnNmb3JtKG1lZGlhLCAndHJhbnNsYXRlM2QoMCwgMCwgMCknKTtcbiAgICBhZGRFdmVudCh0cmFuc2l0aW9uRW5kLCB7XG4gICAgICBvbkVsZW1lbnQ6IG1lZGlhLFxuICAgICAgb25jZTogdHJ1ZSxcbiAgICAgIHdpdGhDYWxsYmFjazogZnVuY3Rpb24gd2l0aENhbGxiYWNrKGV2ZW50LCB0YXJnZXQpIHtcbiAgICAgICAgcmVtb3ZlQ2xhc3MobWVkaWEsICdncmVzZXQnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBtZWRpYS5zdHlsZS5vcGFjaXR5ID0gJyc7XG5cbiAgICBpZiAoZGVzYykge1xuICAgICAgZGVzYy5zdHlsZS5vcGFjaXR5ID0gJyc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2hOYXZpZ2F0aW9uKGluc3RhbmNlKSB7XG4gICAgaWYgKGluc3RhbmNlLmV2ZW50cy5oYXNPd25Qcm9wZXJ0eSgndG91Y2gnKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB3aW5TaXplID0gd2luZG93U2l6ZSgpO1xuICAgIHZhciB3aW5XaWR0aCA9IHdpblNpemUud2lkdGg7XG4gICAgdmFyIHdpbkhlaWdodCA9IHdpblNpemUuaGVpZ2h0O1xuICAgIHZhciBwcm9jZXNzID0gZmFsc2U7XG4gICAgdmFyIGN1cnJlbnRTbGlkZSA9IG51bGw7XG4gICAgdmFyIG1lZGlhID0gbnVsbDtcbiAgICB2YXIgbWVkaWFJbWFnZSA9IG51bGw7XG4gICAgdmFyIGRvaW5nTW92ZSA9IGZhbHNlO1xuICAgIHZhciBpbml0U2NhbGUgPSAxO1xuICAgIHZhciBtYXhTY2FsZSA9IDQuNTtcbiAgICB2YXIgY3VycmVudFNjYWxlID0gMTtcbiAgICB2YXIgZG9pbmdab29tID0gZmFsc2U7XG4gICAgdmFyIGltYWdlWm9vbWVkID0gZmFsc2U7XG4gICAgdmFyIHpvb21lZFBvc1ggPSBudWxsO1xuICAgIHZhciB6b29tZWRQb3NZID0gbnVsbDtcbiAgICB2YXIgbGFzdFpvb21lZFBvc1ggPSBudWxsO1xuICAgIHZhciBsYXN0Wm9vbWVkUG9zWSA9IG51bGw7XG4gICAgdmFyIGhEaXN0YW5jZTtcbiAgICB2YXIgdkRpc3RhbmNlO1xuICAgIHZhciBoRGlzdGFuY2VQZXJjZW50ID0gMDtcbiAgICB2YXIgdkRpc3RhbmNlUGVyY2VudCA9IDA7XG4gICAgdmFyIHZTd2lwZSA9IGZhbHNlO1xuICAgIHZhciBoU3dpcGUgPSBmYWxzZTtcbiAgICB2YXIgc3RhcnRDb29yZHMgPSB7fTtcbiAgICB2YXIgZW5kQ29vcmRzID0ge307XG4gICAgdmFyIHhEb3duID0gMDtcbiAgICB2YXIgeURvd24gPSAwO1xuICAgIHZhciBpc0lubGluZWQ7XG4gICAgdmFyIHNsaWRlcldyYXBwZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2xpZ2h0Ym94LXNsaWRlcicpO1xuICAgIHZhciBvdmVybGF5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmdvdmVybGF5Jyk7XG4gICAgdmFyIHRvdWNoSW5zdGFuY2UgPSBuZXcgVG91Y2hFdmVudHMoc2xpZGVyV3JhcHBlciwge1xuICAgICAgdG91Y2hTdGFydDogZnVuY3Rpb24gdG91Y2hTdGFydChlKSB7XG4gICAgICAgI
24510HByb2Nlc3MgPSB0cnVlO1xuXG4gICAgICAgIGlmIChoYXNDbGFzcyhlLnRhcmdldFRvdWNoZXNbMF0udGFyZ2V0LCAnZ2lubmVyLWNvbnRhaW5lcicpIHx8IGNsb3Nlc3QoZS50YXJnZXRUb3VjaGVzWzBdLnRhcmdldCwgJy5nc2xpZGUtZGVzYycpIHx8IGUudGFyZ2V0VG91Y2hlc1swXS50YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PSAnYScpIHtcbiAgICAgICAgICBwcm9jZXNzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xvc2VzdChlLnRhcmdldFRvdWNoZXNbMF0udGFyZ2V0LCAnLmdzbGlkZS1pbmxpbmUnKSAmJiAhaGFzQ2xhc3MoZS50YXJnZXRUb3VjaGVzWzBdLnRhcmdldC5wYXJlbnROb2RlLCAnZ3NsaWRlLWlubGluZScpKSB7XG4gICAgICAgICAgcHJvY2VzcyA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgICAgICBlbmRDb29yZHMgPSBlLnRhcmdldFRvdWNoZXNbMF07XG4gICAgICAgICAgc3RhcnRDb29yZHMucGFnZVggPSBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVg7XG4gICAgICAgICAgc3RhcnRDb29yZHMucGFnZVkgPSBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICAgICAgeERvd24gPSBlLnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgICAgICB5RG93biA9IGUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRZO1xuICAgICAgICAgIGN1cnJlbnRTbGlkZSA9IGluc3RhbmNlLmFjdGl2ZVNsaWRlO1xuICAgICAgICAgIG1lZGlhID0gY3VycmVudFNsaWRlLnF1ZXJ5U2VsZWN0b3IoJy5nc2xpZGUtbWVkaWEnKTtcbiAgICAgICAgICBpc0lubGluZWQgPSBjdXJyZW50U2xpZGUucXVlcnlTZWxlY3RvcignLmdzbGlkZS1pbmxpbmUnKTtcbiAgICAgICAgICBtZWRpYUltYWdlID0gbnVsbDtcblxuICAgICAgICAgIGlmIChoYXNDbGFzcyhtZWRpYSwgJ2dzbGlkZS1pbWFnZScpKSB7XG4gICAgICAgICAgICBtZWRpYUltYWdlID0gbWVkaWEucXVlcnlTZWxlY3RvcignaW1nJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIHx8IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7XG5cbiAgICAgICAgICBpZiAod2luZG93V2lkdGggPiA3NjkpIHtcbiAgICAgICAgICAgIG1lZGlhID0gY3VycmVudFNsaWRlLnF1ZXJ5U2VsZWN0b3IoJy5naW5uZXItY29udGFpbmVyJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVtb3ZlQ2xhc3Mob3ZlcmxheSwgJ2dyZXNldCcpO1xuXG4gICAgICAgICAgaWYgKGUucGFnZVggPiAyMCAmJiBlLnBhZ2VYIDwgd2luZG93LmlubmVyV2lkdGggLSAyMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRvdWNoTW92ZTogZnVuY3Rpb24gdG91Y2hNb3ZlKGUpIHtcbiAgICAgICAgaWYgKCFwcm9jZXNzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZW5kQ29vcmRzID0gZS50YXJnZXRUb3VjaGVzWzBdO1xuXG4gICAgICAgIGlmIChkb2luZ1pvb20gfHwgaW1hZ2Vab29tZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNJbmxpbmVkICYmIGlzSW5saW5lZC5vZmZzZXRIZWlnaHQgPiB3aW5IZWlnaHQpIHtcbiAgICAgICAgICB2Y
24510XIgbW92ZWQgPSBzdGFydENvb3Jkcy5wYWdlWCAtIGVuZENvb3Jkcy5wYWdlWDtcblxuICAgICAgICAgIGlmIChNYXRoLmFicyhtb3ZlZCkgPD0gMTMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkb2luZ01vdmUgPSB0cnVlO1xuICAgICAgICB2YXIgeFVwID0gZS50YXJnZXRUb3VjaGVzWzBdLmNsaWVudFg7XG4gICAgICAgIHZhciB5VXAgPSBlLnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WTtcbiAgICAgICAgdmFyIHhEaWZmID0geERvd24gLSB4VXA7XG4gICAgICAgIHZhciB5RGlmZiA9IHlEb3duIC0geVVwO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyh4RGlmZikgPiBNYXRoLmFicyh5RGlmZikpIHtcbiAgICAgICAgICB2U3dpcGUgPSBmYWxzZTtcbiAgICAgICAgICBoU3dpcGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhTd2lwZSA9IGZhbHNlO1xuICAgICAgICAgIHZTd2lwZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBoRGlzdGFuY2UgPSBlbmRDb29yZHMucGFnZVggLSBzdGFydENvb3Jkcy5wYWdlWDtcbiAgICAgICAgaERpc3RhbmNlUGVyY2VudCA9IGhEaXN0YW5jZSAqIDEwMCAvIHdpbldpZHRoO1xuICAgICAgICB2RGlzdGFuY2UgPSBlbmRDb29yZHMucGFnZVkgLSBzdGFydENvb3Jkcy5wYWdlWTtcbiAgICAgICAgdkRpc3RhbmNlUGVyY2VudCA9IHZEaXN0YW5jZSAqIDEwMCAvIHdpbkhlaWdodDtcbiAgICAgICAgdmFyIG9wYWNpdHk7XG5cbiAgICAgICAgaWYgKHZTd2lwZSAmJiBtZWRpYUltYWdlKSB7XG4gICAgICAgICAgb3BhY2l0eSA9IDEgLSBNYXRoLmFicyh2RGlzdGFuY2UpIC8gd2luSGVpZ2h0O1xuICAgICAgICAgIG92ZXJsYXkuc3R5bGUub3BhY2l0eSA9IG9wYWNpdHk7XG5cbiAgICAgICAgICBpZiAoaW5zdGFuY2Uuc2V0dGluZ3MudG91Y2hGb2xsb3dBeGlzKSB7XG4gICAgICAgICAgICBoRGlzdGFuY2VQZXJjZW50ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaFN3aXBlKSB7XG4gICAgICAgICAgb3BhY2l0eSA9IDEgLSBNYXRoLmFicyhoRGlzdGFuY2UpIC8gd2luV2lkdGg7XG4gICAgICAgICAgbWVkaWEuc3R5bGUub3BhY2l0eSA9IG9wYWNpdHk7XG5cbiAgICAgICAgICBpZiAoaW5zdGFuY2Uuc2V0dGluZ3MudG91Y2hGb2xsb3dBeGlzKSB7XG4gICAgICAgICAgICB2RGlzdGFuY2VQZXJjZW50ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW1lZGlhSW1hZ2UpIHtcbiAgICAgICAgICByZXR1cm4gY3NzVHJhbnNmb3JtKG1lZGlhLCBcInRyYW5zbGF0ZTNkKFwiLmNvbmNhdChoRGlzdGFuY2VQZXJjZW50LCBcIiUsIDAsIDApXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNzc1RyYW5zZm9ybShtZWRpYSwgXCJ0cmFuc2xhdGUzZChcIi5jb25jYXQoaERpc3RhbmNlUGVyY2VudCwgXCIlLCBcIikuY29uY2F0KHZEaXN0YW5jZVBlcmNlbnQsIFwiJSwgMClcIikpO1xuICAgICAgfSxcbiAgICAgIHRvdWNoRW5kOiBmdW5jdGlvbiB0b3VjaEVuZCgpIHtcbiAgICAgICAgaWYgKCFwcm9jZXNzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9pbmdNb3ZlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGltYWdlWm9vbWVkIHx8IGRvaW5nWm9vbSkge1xuICAgICAgICAgIGxhc3Rab29tZWRQb3NYID0gem9vbWVkUG9zWDtcbiAgICAgICAgICBsYXN0Wm9vbWVkUG9zWSA9IHpvb21lZFBvc1k7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHYgPSBNYXRoLmFicyhwYXJzZUludCh2RGlzdGFuY2VQZXJjZW50KSk7XG4gICAgICAgIHZhciBoID0gTWF0aC5hYnMocGFyc2VJbnQoaERpc3RhbmNlUGVyY2VudCkpO1xuXG4gICAgICAgIGlmICh2ID4gMjkgJiYgbWVkaWFJbWFnZSkge1xuICAgICAgICAgIGluc3RhbmNlLmNsb3NlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHYgPCAyOSAmJiBoIDwgMjUpIHtcbiAgICAgICAgICBhZGRDbGFzcyhvdmVybGF5LCAnZ3Jlc2V0Jyk7XG4gICAgICAgICAgb3ZlcmxheS5zdHlsZS5vcGFjaXR5ID0gMTtcbiAgICAgICAgICByZXR1cm4gcmVzZXRTbGlkZU1vdmUobWVkaWEpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgbXVsdGlwb2ludEVuZDogZnVuY3Rpb24gbXVsdGlwb2ludEVuZCgpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZG9pbmdab29tID0gZmFsc2U7XG4gICAgICAgIH0sIDUwKTtcbiAgICAgIH0sXG4gICAgICBtdWx0aXBvaW50U3RhcnQ6IGZ1bmN0aW9uIG11bHRpcG9pbnRTdGFydCgpIHtcbiAgICAgICAgZG9pbmdab29tID0gdHJ1ZTtcbiAgICAgICAgaW5pdFNjYWxlID0gY3VycmVudFNjYWxlID8gY3VycmVudFNjYWxlIDogMTtcbiAgICAgIH0sXG4gICAgICBwaW5jaDogZnVuY3Rpb24gcGluY2goZXZ0KSB7XG4gICAgICAgIGlmICghbWVkaWFJbWFnZSB8fCBkb2luZ01vdmUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBkb2luZ1pvb20gPSB0cnVlO1xuICAgICAgICBtZWRpYUltYWdlLnNjYWxlWCA9IG1lZGlhSW1hZ2Uuc2NhbGVZID0gaW5pdFNjYWxlICogZXZ0Lnpvb207XG4gICAgICAgIHZhciBzY2FsZSA9IGluaXRTY2FsZSAqIGV2dC56b29tO1xuICAgICAgICBpbWFnZVpvb21lZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHNjYWxlIDw9IDEpIHtcbiAgICAgICAgICBpbWFnZVpvb21lZCA9IGZhbHNlO1xuICAgICAgICAgIHNjYWxlID0gMTtcbiAgICAgICAgICBsYXN0Wm9vbWVkUG9zWSA9IG51bGw7XG4gICAgICAgICAgbGFzdFpvb21lZFBvc1ggPSBudWxsO1xuICAgICAgICAgIHpvb21lZFBvc1ggPSBudWxsO1xuICAgICAgICAgIHpvb21lZFBvc1kgPSBudWxsO1xuICAgICAgICAgIG1lZGlhSW1hZ2Uuc2V0QXR0cmlidXRlKCdzdHlsZScsICcnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2NhbGUgPiBtYXhTY2FsZSkge1xuICAgICAgICAgI
24510HNjYWxlID0gbWF4U2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBtZWRpYUltYWdlLnN0eWxlLnRyYW5zZm9ybSA9IFwic2NhbGUzZChcIi5jb25jYXQoc2NhbGUsIFwiLCBcIikuY29uY2F0KHNjYWxlLCBcIiwgMSlcIik7XG4gICAgICAgIGN1cnJlbnRTY2FsZSA9IHNjYWxlO1xuICAgICAgfSxcbiAgICAgIHByZXNzTW92ZTogZnVuY3Rpb24gcHJlc3NNb3ZlKGUpIHtcbiAgICAgICAgaWYgKGltYWdlWm9vbWVkICYmICFkb2luZ1pvb20pIHtcbiAgICAgICAgICB2YXIgbWhEaXN0YW5jZSA9IGVuZENvb3Jkcy5wYWdlWCAtIHN0YXJ0Q29vcmRzLnBhZ2VYO1xuICAgICAgICAgIHZhciBtdkRpc3RhbmNlID0gZW5kQ29vcmRzLnBhZ2VZIC0gc3RhcnRDb29yZHMucGFnZVk7XG5cbiAgICAgICAgICBpZiAobGFzdFpvb21lZFBvc1gpIHtcbiAgICAgICAgICAgIG1oRGlzdGFuY2UgPSBtaERpc3RhbmNlICsgbGFzdFpvb21lZFBvc1g7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGxhc3Rab29tZWRQb3NZKSB7XG4gICAgICAgICAgICBtdkRpc3RhbmNlID0gbXZEaXN0YW5jZSArIGxhc3Rab29tZWRQb3NZO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHpvb21lZFBvc1ggPSBtaERpc3RhbmNlO1xuICAgICAgICAgIHpvb21lZFBvc1kgPSBtdkRpc3RhbmNlO1xuICAgICAgICAgIHZhciBzdHlsZSA9IFwidHJhbnNsYXRlM2QoXCIuY29uY2F0KG1oRGlzdGFuY2UsIFwicHgsIFwiKS5jb25jYXQobXZEaXN0YW5jZSwgXCJweCwgMClcIik7XG5cbiAgICAgICAgICBpZiAoY3VycmVudFNjYWxlKSB7XG4gICAgICAgICAgICBzdHlsZSArPSBcIiBzY2FsZTNkKFwiLmNvbmNhdChjdXJyZW50U2NhbGUsIFwiLCBcIikuY29uY2F0KGN1cnJlbnRTY2FsZSwgXCIsIDEpXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNzc1RyYW5zZm9ybShtZWRpYUltYWdlLCBzdHlsZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzd2lwZTogZnVuY3Rpb24gc3dpcGUoZXZ0KSB7XG4gICAgICAgIGlmIChpbWFnZVpvb21lZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkb2luZ1pvb20pIHtcbiAgICAgICAgICBkb2luZ1pvb20gPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZ0LmRpcmVjdGlvbiA9PSAnTGVmdCcpIHtcbiAgICAgICAgICBpZiAoaW5zdGFuY2UuaW5kZXggPT0gaW5zdGFuY2UuZWxlbWVudHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc2V0U2xpZGVNb3ZlKG1lZGlhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbnN0YW5jZS5uZXh0U2xpZGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldnQuZGlyZWN0aW9uID09ICdSaWdodCcpIHtcbiAgICAgICAgICBpZiAoaW5zdGFuY2UuaW5kZXggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc2V0U2xpZGVNb3ZlKG1lZGlhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbnN0YW5jZS5wcmV2U2xpZGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGluc3RhbmNlLmV2ZW50c1sndG91Y2gnXSA9IHRvdWNoSW5zdGFuY2U7XG4gIH1cblxuICB2YXIgWm9vbUltYWdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBab29tSW1hZ2VzKGVsLCBzbGlkZSkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIG9uY2xvc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG5cbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBab29tSW1hZ2VzKTtcblxuICAgICAgdGhpcy5pbWcgPSBlbDtcbiAgICAgIHRoaXMuc2xpZGUgPSBzbGlkZTtcbiAgICAgIHRoaXMub25jbG9zZSA9IG9uY2xvc2U7XG5cbiAgICAgIGlmICh0aGlzLmltZy5zZXRab29tRXZlbnRzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuem9vbWVkSW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuY3VycmVudFggPSBudWxsO1xuICAgICAgdGhpcy5jdXJyZW50WSA9IG51bGw7XG4gICAgICB0aGlzLmluaXRpYWxYID0gbnVsbDtcbiAgICAgIHRoaXMuaW5pdGlhbFkgPSBudWxsO1xuICAgICAgdGhpcy54T2Zmc2V0ID0gMDtcbiAgICAgIHRoaXMueU9mZnNldCA9IDA7XG4gICAgICB0aGlzLmltZy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gX3RoaXMuZHJhZ1N0YXJ0KGUpO1xuICAgICAgfSwgZmFsc2UpO1xuICAgICAgdGhpcy5pbWcuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5kcmFnRW5kKGUpO1xuICAgICAgfSwgZmFsc2UpO1xuICAgICAgdGhpcy5pbWcuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmRyYWcoZSk7XG4gICAgICB9LCBmYWxzZSk7XG4gICAgICB0aGlzLmltZy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmIChfdGhpcy5zbGlkZS5jbGFzc0xpc3QuY29udGFpbnMoJ2RyYWdnaW5nLW5hdicpKSB7XG4gICAgICAgICAgX3RoaXMuem9vbU91dCgpO1xuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfdGhpcy56b29tZWRJbikge1xuICAgICAgICAgIHJldHVybiBfdGhpcy56b29tSW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfdGhpcy56b29tZWRJbiAmJiAhX3RoaXMuZHJhZ2dpbmcpIHtcbiAgICAgICAgICBfdGhpcy56b29tT3V0KCk7XG4gICAgICAgIH1cbiAgICAgIH0sIGZhbHNlKTtcbiAgICAgIHRoaXMuaW1nLnNldFpvb21FdmVudHMgPSB0cnVlO1xuICAgIH1cblxuICAgIF9jcmVhdGVDbGFzcyhab29tSW1hZ2VzLCBbe1xuICAgICAga2V5OiBcInpvb21JblwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHpvb21JbigpIHtcbiAgICAgICAgdmFyIHdpbldpZHRoID0gdGh
24510pcy53aWRvd1dpZHRoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuem9vbWVkSW4gfHwgd2luV2lkdGggPD0gNzY4KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGltZyA9IHRoaXMuaW1nO1xuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdkYXRhLXN0eWxlJywgaW1nLmdldEF0dHJpYnV0ZSgnc3R5bGUnKSk7XG4gICAgICAgIGltZy5zdHlsZS5tYXhXaWR0aCA9IGltZy5uYXR1cmFsV2lkdGggKyAncHgnO1xuICAgICAgICBpbWcuc3R5bGUubWF4SGVpZ2h0ID0gaW1nLm5hdHVyYWxIZWlnaHQgKyAncHgnO1xuXG4gICAgICAgIGlmIChpbWcubmF0dXJhbFdpZHRoID4gd2luV2lkdGgpIHtcbiAgICAgICAgICB2YXIgY2VudGVyWCA9IHdpbldpZHRoIC8gMiAtIGltZy5uYXR1cmFsV2lkdGggLyAyO1xuICAgICAgICAgIHRoaXMuc2V0VHJhbnNsYXRlKHRoaXMuaW1nLnBhcmVudE5vZGUsIGNlbnRlclgsIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zbGlkZS5jbGFzc0xpc3QuYWRkKCd6b29tZWQnKTtcbiAgICAgICAgdGhpcy56b29tZWRJbiA9IHRydWU7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInpvb21PdXRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB6b29tT3V0KCkge1xuICAgICAgICB0aGlzLmltZy5wYXJlbnROb2RlLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnJyk7XG4gICAgICAgIHRoaXMuaW1nLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCB0aGlzLmltZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3R5bGUnKSk7XG4gICAgICAgIHRoaXMuc2xpZGUuY2xhc3NMaXN0LnJlbW92ZSgnem9vbWVkJyk7XG4gICAgICAgIHRoaXMuem9vbWVkSW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jdXJyZW50WCA9IG51bGw7XG4gICAgICAgIHRoaXMuY3VycmVudFkgPSBudWxsO1xuICAgICAgICB0aGlzLmluaXRpYWxYID0gbnVsbDtcbiAgICAgICAgdGhpcy5pbml0aWFsWSA9IG51bGw7XG4gICAgICAgIHRoaXMueE9mZnNldCA9IDA7XG4gICAgICAgIHRoaXMueU9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMub25jbG9zZSAmJiB0eXBlb2YgdGhpcy5vbmNsb3NlID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aGlzLm9uY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJkcmFnU3RhcnRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkcmFnU3RhcnQoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnpvb21lZEluKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZS50eXBlID09PSAndG91Y2hzdGFydCcpIHtcbiAgICAgICAgICB0aGlzLmluaXRpYWxYID0gZS50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLnhPZmZzZXQ7XG4gICAgICAgICAgdGhpcy5pbml0aWFsWSA9IGUudG91Y2hlc1swXS5jbGllbnRZIC0gdGhpcy55T2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaW5pdGlhbFggPSBlLmNsaWVudFggLSB0aGlzLnhPZmZzZXQ7XG4gICAgICAgICAgdGhpcy5pbml0aWFsWSA9IGUuY2xpZW50WSAtIHRoaXMueU9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlLnRhcmdldCA9PT0gdGhpcy5pbWcpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pbWcuY2xhc3NMaXN0LmFkZCgnZHJhZ2dpbmcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJkcmFnRW5kXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZHJhZ0VuZChlKSB7XG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsWCA9IHRoaXMuY3VycmVudFg7XG4gICAgICAgIHRoaXMuaW5pdGlhbFkgPSB0aGlzLmN1cnJlbnRZO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgICBfdGhpczIuaW1nLmlzRHJhZ2dpbmcgPSBmYWxzZTtcblxuICAgICAgICAgIF90aGlzMi5pbWcuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZ2dpbmcnKTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZHJhZ1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRyYWcoZSkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICBpZiAoZS50eXBlID09PSAndG91Y2htb3ZlJykge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50WCA9IGUudG91Y2hlc1swXS5jbGllbnRYIC0gdGhpcy5pbml0aWFsWDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFkgPSBlLnRvdWNoZXNbMF0uY2xpZW50WSAtIHRoaXMuaW5pdGlhbFk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFggPSBlLmNsaWVudFggLSB0aGlzLmluaXRpYWxYO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50WSA9IGUuY2xpZW50WSAtIHRoaXMuaW5pdGlhbFk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy54T2Zmc2V0ID0gdGhpcy5jdXJyZW50WDtcbiAgICAgICAgICB0aGlzLnlPZmZzZXQgPSB0aGlzLmN1cnJlbnRZO1xuICAgICAgICAgIHRoaXMuaW1nLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2V0VHJhbnNsYXRlKHRoaXMuaW1nLCB0aGlzLmN1cnJlbnRYLCB0aGlzLmN1cnJlbnRZKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJvbk1vdmVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBvbk1vdmUoZSkge1xuICAgICAgICBpZiAoIXRoaXMuem9vbWVkSW4pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2Y
24510XIgeE9mZnNldCA9IGUuY2xpZW50WCAtIHRoaXMuaW1nLm5hdHVyYWxXaWR0aCAvIDI7XG4gICAgICAgIHZhciB5T2Zmc2V0ID0gZS5jbGllbnRZIC0gdGhpcy5pbWcubmF0dXJhbEhlaWdodCAvIDI7XG4gICAgICAgIHRoaXMuc2V0VHJhbnNsYXRlKHRoaXMuaW1nLCB4T2Zmc2V0LCB5T2Zmc2V0KTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwic2V0VHJhbnNsYXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKG5vZGUsIHhQb3MsIHlQb3MpIHtcbiAgICAgICAgbm9kZS5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlM2QoJyArIHhQb3MgKyAncHgsICcgKyB5UG9zICsgJ3B4LCAwKSc7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIndpZG93V2lkdGhcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB3aWRvd1dpZHRoKCkge1xuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIHx8IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIFpvb21JbWFnZXM7XG4gIH0oKTtcblxuICB2YXIgRHJhZ1NsaWRlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEcmFnU2xpZGVzKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIGNvbmZpZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEcmFnU2xpZGVzKTtcblxuICAgICAgdmFyIGRyYWdFbCA9IGNvbmZpZy5kcmFnRWwsXG4gICAgICAgICAgX2NvbmZpZyR0b2xlcmFuY2VYID0gY29uZmlnLnRvbGVyYW5jZVgsXG4gICAgICAgICAgdG9sZXJhbmNlWCA9IF9jb25maWckdG9sZXJhbmNlWCA9PT0gdm9pZCAwID8gNDAgOiBfY29uZmlnJHRvbGVyYW5jZVgsXG4gICAgICAgICAgX2NvbmZpZyR0b2xlcmFuY2VZID0gY29uZmlnLnRvbGVyYW5jZVksXG4gICAgICAgICAgdG9sZXJhbmNlWSA9IF9jb25maWckdG9sZXJhbmNlWSA9PT0gdm9pZCAwID8gNjUgOiBfY29uZmlnJHRvbGVyYW5jZVksXG4gICAgICAgICAgX2NvbmZpZyRzbGlkZSA9IGNvbmZpZy5zbGlkZSxcbiAgICAgICAgICBzbGlkZSA9IF9jb25maWckc2xpZGUgPT09IHZvaWQgMCA/IG51bGwgOiBfY29uZmlnJHNsaWRlLFxuICAgICAgICAgIF9jb25maWckaW5zdGFuY2UgPSBjb25maWcuaW5zdGFuY2UsXG4gICAgICAgICAgaW5zdGFuY2UgPSBfY29uZmlnJGluc3RhbmNlID09PSB2b2lkIDAgPyBudWxsIDogX2NvbmZpZyRpbnN0YW5jZTtcbiAgICAgIHRoaXMuZWwgPSBkcmFnRWw7XG4gICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgdGhpcy5jdXJyZW50WCA9IG51bGw7XG4gICAgICB0aGlzLmN1cnJlbnRZID0gbnVsbDtcbiAgICAgIHRoaXMuaW5pdGlhbFggPSBudWxsO1xuICAgICAgdGhpcy5pbml0aWFsWSA9IG51bGw7XG4gICAgICB0aGlzLnhPZmZzZXQgPSAwO1xuICAgICAgdGhpcy55T2Zmc2V0ID0gMDtcbiAgICAgIHRoaXMuZGlyZWN0aW9uID0gbnVsbDtcbiAgICAgIHRoaXMubGFzdERpcmVjdGlvbiA9IG51bGw7XG4gICAgICB0aGlzLnRvbGVyYW5jZVggPSB0b2xlcmFuY2VYO1xuICAgICAgdGhpcy50b2xlcmFuY2VZID0gdG9sZXJhbmNlWTtcbiAgICAgIHRoaXMudG9sZXJhbmNlUmVhY2hlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5kcmFnQ29udGFpbmVyID0gdGhpcy5lbDtcbiAgICAgIHRoaXMuc2xpZGUgPSBzbGlkZTtcbiAgICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgIHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmRyYWdTdGFydChlKTtcbiAgICAgIH0sIGZhbHNlKTtcbiAgICAgIHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5kcmFnRW5kKGUpO1xuICAgICAgfSwgZmFsc2UpO1xuICAgICAgdGhpcy5lbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gX3RoaXMuZHJhZyhlKTtcbiAgICAgIH0sIGZhbHNlKTtcbiAgICB9XG5cbiAgICBfY3JlYXRlQ2xhc3MoRHJhZ1NsaWRlcywgW3tcbiAgICAgIGtleTogXCJkcmFnU3RhcnRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkcmFnU3RhcnQoZSkge1xuICAgICAgICBpZiAodGhpcy5zbGlkZS5jbGFzc0xpc3QuY29udGFpbnMoJ3pvb21lZCcpKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZS50eXBlID09PSAndG91Y2hzdGFydCcpIHtcbiAgICAgICAgICB0aGlzLmluaXRpYWxYID0gZS50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLnhPZmZzZXQ7XG4gICAgICAgICAgdGhpcy5pbml0aWFsWSA9IGUudG91Y2hlc1swXS5jbGllbnRZIC0gdGhpcy55T2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaW5pdGlhbFggPSBlLmNsaWVudFggLSB0aGlzLnhPZmZzZXQ7XG4gICAgICAgICAgdGhpcy5pbml0aWFsWSA9IGUuY2xpZW50WSAtIHRoaXMueU9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjbGlja2VkID0gZS50YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIGV4bHVkZUNsaWNrcyA9IFsnaW5wdXQnLCAnc2VsZWN0JywgJ3RleHRhcmVhJywgJ2J1dHRvbicsICdhJ107XG5cbiAgICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnbm9kcmFnJykgfHwgY2xvc2VzdChlLnRhcmdldCwgJy5ub2RyYWcnKSB8fCBleGx1ZGVDbGlja3MuaW5kZXhPZihjbGlja2VkKSAhPT0gLTEpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAoZS50YXJnZXQgPT09IHRoaXMuZWwgfHwgY2xpY2tlZCAhPT0gJ2ltZycgJiYgY2xvc2VzdChlLnRhcmdldCwgJy5nc2xpZGUtaW5saW5lJykpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5lbC5jbGFzc0xpc3QuYWRkKCdkcmFnZ2luZycpO1xuICAgICAgICAgI
24510HRoaXMuZHJhZ0NvbnRhaW5lciA9IGNsb3Nlc3QoZS50YXJnZXQsICcuZ2lubmVyLWNvbnRhaW5lcicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImRyYWdFbmRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkcmFnRW5kKGUpIHtcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgZSAmJiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbFggPSAwO1xuICAgICAgICB0aGlzLmluaXRpYWxZID0gMDtcbiAgICAgICAgdGhpcy5jdXJyZW50WCA9IG51bGw7XG4gICAgICAgIHRoaXMuY3VycmVudFkgPSBudWxsO1xuICAgICAgICB0aGlzLmluaXRpYWxYID0gbnVsbDtcbiAgICAgICAgdGhpcy5pbml0aWFsWSA9IG51bGw7XG4gICAgICAgIHRoaXMueE9mZnNldCA9IDA7XG4gICAgICAgIHRoaXMueU9mZnNldCA9IDA7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuZG9TbGlkZUNoYW5nZSkge1xuICAgICAgICAgIHRoaXMuaW5zdGFuY2UucHJldmVudE91dHNpZGVDbGljayA9IHRydWU7XG4gICAgICAgICAgdGhpcy5kb1NsaWRlQ2hhbmdlID09ICdyaWdodCcgJiYgdGhpcy5pbnN0YW5jZS5wcmV2U2xpZGUoKTtcbiAgICAgICAgICB0aGlzLmRvU2xpZGVDaGFuZ2UgPT0gJ2xlZnQnICYmIHRoaXMuaW5zdGFuY2UubmV4dFNsaWRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kb1NsaWRlQ2xvc2UpIHtcbiAgICAgICAgICB0aGlzLmluc3RhbmNlLmNsb3NlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMudG9sZXJhbmNlUmVhY2hlZCkge1xuICAgICAgICAgIHRoaXMuc2V0VHJhbnNsYXRlKHRoaXMuZHJhZ0NvbnRhaW5lciwgMCwgMCwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIuaW5zdGFuY2UucHJldmVudE91dHNpZGVDbGljayA9IGZhbHNlO1xuICAgICAgICAgIF90aGlzMi50b2xlcmFuY2VSZWFjaGVkID0gZmFsc2U7XG4gICAgICAgICAgX3RoaXMyLmxhc3REaXJlY3Rpb24gPSBudWxsO1xuICAgICAgICAgIF90aGlzMi5kcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICAgIF90aGlzMi5lbC5pc0RyYWdnaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICBfdGhpczIuZWwuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZ2dpbmcnKTtcblxuICAgICAgICAgIF90aGlzMi5zbGlkZS5jbGFzc0xpc3QucmVtb3ZlKCdkcmFnZ2luZy1uYXYnKTtcblxuICAgICAgICAgIF90aGlzMi5kcmFnQ29udGFpbmVyLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgICAgIF90aGlzMi5kcmFnQ29udGFpbmVyLnN0eWxlLnRyYW5zaXRpb24gPSAnJztcbiAgICAgICAgfSwgMTAwKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZHJhZ1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRyYWcoZSkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5zbGlkZS5jbGFzc0xpc3QuYWRkKCdkcmFnZ2luZy1uYXYnKTtcblxuICAgICAgICAgIGlmIChlLnR5cGUgPT09ICd0b3VjaG1vdmUnKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRYID0gZS50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLmluaXRpYWxYO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50WSA9IGUudG91Y2hlc1swXS5jbGllbnRZIC0gdGhpcy5pbml0aWFsWTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50WCA9IGUuY2xpZW50WCAtIHRoaXMuaW5pdGlhbFg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRZID0gZS5jbGllbnRZIC0gdGhpcy5pbml0aWFsWTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnhPZmZzZXQgPSB0aGlzLmN1cnJlbnRYO1xuICAgICAgICAgIHRoaXMueU9mZnNldCA9IHRoaXMuY3VycmVudFk7XG4gICAgICAgICAgdGhpcy5lbC5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmRvU2xpZGVDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmRvU2xpZGVDbG9zZSA9IGZhbHNlO1xuICAgICAgICAgIHZhciBjdXJyZW50WEludCA9IE1hdGguYWJzKHRoaXMuY3VycmVudFgpO1xuICAgICAgICAgIHZhciBjdXJyZW50WUludCA9IE1hdGguYWJzKHRoaXMuY3VycmVudFkpO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnRYSW50ID4gMCAmJiBjdXJyZW50WEludCA+PSBNYXRoLmFicyh0aGlzLmN1cnJlbnRZKSAmJiAoIXRoaXMubGFzdERpcmVjdGlvbiB8fCB0aGlzLmxhc3REaXJlY3Rpb24gPT0gJ3gnKSkge1xuICAgICAgICAgICAgdGhpcy55T2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHRoaXMubGFzdERpcmVjdGlvbiA9ICd4JztcbiAgICAgICAgICAgIHRoaXMuc2V0VHJhbnNsYXRlKHRoaXMuZHJhZ0NvbnRhaW5lciwgdGhpcy5jdXJyZW50WCwgMCk7XG4gICAgICAgICAgICB2Y
24510XIgZG9DaGFuZ2UgPSB0aGlzLnNob3VsZENoYW5nZSgpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2Uuc2V0dGluZ3MuZHJhZ0F1dG9TbmFwICYmIGRvQ2hhbmdlKSB7XG4gICAgICAgICAgICAgIHRoaXMuZG9TbGlkZUNoYW5nZSA9IGRvQ2hhbmdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5zZXR0aW5ncy5kcmFnQXV0b1NuYXAgJiYgZG9DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5wcmV2ZW50T3V0c2lkZUNsaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy50b2xlcmFuY2VSZWFjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5wcmV2ZW50T3V0c2lkZUNsaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5kcmFnRW5kKG51bGwpO1xuICAgICAgICAgICAgICBkb0NoYW5nZSA9PSAncmlnaHQnICYmIHRoaXMuaW5zdGFuY2UucHJldlNsaWRlKCk7XG4gICAgICAgICAgICAgIGRvQ2hhbmdlID09ICdsZWZ0JyAmJiB0aGlzLmluc3RhbmNlLm5leHRTbGlkZSgpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMudG9sZXJhbmNlWSA+IDAgJiYgY3VycmVudFlJbnQgPiAwICYmIGN1cnJlbnRZSW50ID49IGN1cnJlbnRYSW50ICYmICghdGhpcy5sYXN0RGlyZWN0aW9uIHx8IHRoaXMubGFzdERpcmVjdGlvbiA9PSAneScpKSB7XG4gICAgICAgICAgICB0aGlzLnhPZmZzZXQgPSAwO1xuICAgICAgICAgICAgdGhpcy5sYXN0RGlyZWN0aW9uID0gJ3knO1xuICAgICAgICAgICAgdGhpcy5zZXRUcmFuc2xhdGUodGhpcy5kcmFnQ29udGFpbmVyLCAwLCB0aGlzLmN1cnJlbnRZKTtcbiAgICAgICAgICAgIHZhciBkb0Nsb3NlID0gdGhpcy5zaG91bGRDbG9zZSgpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2Uuc2V0dGluZ3MuZHJhZ0F1dG9TbmFwICYmIGRvQ2xvc2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5kb1NsaWRlQ2xvc2UgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5zZXR0aW5ncy5kcmFnQXV0b1NuYXAgJiYgZG9DbG9zZSkge1xuICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwic2hvdWxkQ2hhbmdlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ2hhbmdlKCkge1xuICAgICAgICB2Y
24510XIgZG9DaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgdmFyIGN1cnJlbnRYSW50ID0gTWF0aC5hYnModGhpcy5jdXJyZW50WCk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRYSW50ID49IHRoaXMudG9sZXJhbmNlWCkge1xuICAgICAgICAgIHZhciBkcmFnRGlyID0gdGhpcy5jdXJyZW50WCA+IDAgPyAncmlnaHQnIDogJ2xlZnQnO1xuXG4gICAgICAgICAgaWYgKGRyYWdEaXIgPT0gJ2xlZnQnICYmIHRoaXMuc2xpZGUgIT09IHRoaXMuc2xpZGUucGFyZW50Tm9kZS5sYXN0Q2hpbGQgfHwgZHJhZ0RpciA9PSAncmlnaHQnICYmIHRoaXMuc2xpZGUgIT09IHRoaXMuc2xpZGUucGFyZW50Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICBkb0NoYW5nZSA9IGRyYWdEaXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRvQ2hhbmdlO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJzaG91bGRDbG9zZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENsb3NlKCkge1xuICAgICAgICB2YXIgZG9DbG9zZSA9IGZhbHNlO1xuICAgICAgICB2YXIgY3VycmVudFlJbnQgPSBNYXRoLmFicyh0aGlzLmN1cnJlbnRZKTtcblxuICAgICAgICBpZiAoY3VycmVudFlJbnQgPj0gdGhpcy50b2xlcmFuY2VZKSB7XG4gICAgICAgICAgZG9DbG9zZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZG9DbG9zZTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwic2V0VHJhbnNsYXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKG5vZGUsIHhQb3MsIHlQb3MpIHtcbiAgICAgICAgdmFyIGFuaW1hdGVkID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBmYWxzZTtcblxuICAgICAgICBpZiAoYW5pbWF0ZWQpIHtcbiAgICAgICAgICBub2RlLnN0eWxlLnRyYW5zaXRpb24gPSAnYWxsIC4ycyBlYXNlJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlLnN0eWxlLnRyYW5zaXRpb24gPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUuc3R5bGUudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUzZChcIi5jb25jYXQoeFBvcywgXCJweCwgXCIpLmNvbmNhdCh5UG9zLCBcInB4LCAwKVwiKTtcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gRHJhZ1NsaWRlcztcbiAgfSgpO1xuXG4gIGZ1bmN0aW9uIHNsaWRlSW1hZ2Uoc2xpZGUsIGRhdGEsIGluZGV4LCBjYWxsYmFjaykge1xuICAgIHZhciBzbGlkZU1lZGlhID0gc2xpZGUucXVlcnlTZWxlY3RvcignLmdzbGlkZS1tZWRpYScpO1xuICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICB2YXIgdGl0bGVJRCA9ICdnU2xpZGVUaXRsZV8nICsgaW5kZXg7XG4gICAgdmFyIHRleHRJRCA9ICdnU2xpZGVEZXNjXycgKyBpbmRleDtcbiAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH0sIGZhbHNlKTtcbiAgICBpbWcuc3JjID0gZGF0YS5ocmVmO1xuXG4gICAgaWYgKGRhdGEuc2l6ZXMgIT0gJycgJiYgZGF0YS5zcmNzZXQgIT0gJycpIHtcbiAgICAgIGltZy5zaXplcyA9IGRhdGEuc2l6ZXM7XG4gICAgICBpbWcuc3Jjc2V0ID0gZGF0YS5zcmNzZXQ7XG4gICAgfVxuXG4gICAgaW1nLmFsdCA9ICcnO1xuXG4gICAgaWYgKCFpc05pbChkYXRhLmFsdCkgJiYgZGF0YS5hbHQgIT09ICcnKSB7XG4gICAgICBpbWcuYWx0ID0gZGF0YS5hbHQ7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEudGl0bGUgIT09ICcnKSB7XG4gICAgICBpbWcuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknLCB0aXRsZUlEKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5kZXNjcmlwdGlvbiAhPT0gJycpIHtcbiAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCB0ZXh0SUQpO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KCdfaGFzQ3VzdG9tV2lkdGgnKSAmJiBkYXRhLl9oYXNDdXN0b21XaWR0aCkge1xuICAgICAgaW1nLnN0eWxlLndpZHRoID0gZGF0YS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eSgnX2hhc0N1c3RvbUhlaWdodCcpICYmIGRhdGEuX2hhc0N1c3RvbUhlaWdodCkge1xuICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGRhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHNsaWRlTWVkaWEuaW5zZXJ0QmVmb3JlKGltZywgc2xpZGVNZWRpYS5maXJzdENoaWxkKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiBzbGlkZVZpZGVvKHNsaWRlLCBkYXRhLCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIHNsaWRlQ29udGFpbmVyID0gc2xpZGUucXVlcnlTZWxlY3RvcignLmdpbm5lci1jb250YWluZXInKTtcbiAgICB2YXIgdmlkZW9JRCA9ICdndmlkZW8nICsgaW5kZXg7XG4gICAgdmFyIHNsaWRlTWVkaWEgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3NsaWRlLW1lZGlhJyk7XG4gICAgdmFyIHZpZGVvUGxheWVycyA9IHRoaXMuZ2V0QWxsUGxheWVycygpO1xuICAgIGFkZENsYXNzKHNsaWRlQ29udGFpbmVyLCAnZ3ZpZGVvLWNvbnRhaW5lcicpO1xuICAgIHNsaWRlTWVkaWEuaW5zZXJ0QmVmb3JlKGNyZWF0ZUhUTUwoJzxkaXYgY2xhc3M9XCJndmlkZW8td3JhcHBlclwiPjwvZGl2PicpLCBzbGlkZU1lZGlhLmZpcnN0Q2hpbGQpO1xuICAgIHZhciB2aWRlb1dyYXBwZXIgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3ZpZGVvLXdyYXBwZXInKTtcbiAgICBpbmplY3RBc3NldHModGhpcy5zZXR0aW5ncy5wbHlyLmNzcywgJ1BseXInKTtcbiAgICB2YXIgdXJsID0gZGF0YS5ocmVmO1xuICAgIHZhciBwcm90b2NvbCA9IGxvY2F0aW9uLnByb3RvY29sLnJlcGxhY2UoJzonLCAnJyk7XG4gICAgdmFyIHZpZGVvU291cmNlID0gJyc7XG4gICAgdmFyIGVtYmVkSUQgPSAnJztcbiAgICB2YXIgY3VzdG9tUGxhY2Vob2xkZXIgPSBmYWxzZTtcblxuICAgIGlmIChwcm90b2NvbCA9PSAnZmlsZScpIHtcbiAgICAgIHByb3RvY29sID0gJ2h0dHAnO1xuICAgIH1cblxuICAgI
24510HNsaWRlTWVkaWEuc3R5bGUubWF4V2lkdGggPSBkYXRhLndpZHRoO1xuICAgIGluamVjdEFzc2V0cyh0aGlzLnNldHRpbmdzLnBseXIuanMsICdQbHlyJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHVybC5tYXRjaCgvdmltZW9cXC5jb21cXC8oWzAtOV0qKS8pKSB7XG4gICAgICAgIHZhciB2aW1lb0lEID0gL3ZpbWVvLipcXC8oXFxkKykvaS5leGVjKHVybCk7XG4gICAgICAgIHZpZGVvU291cmNlID0gJ3ZpbWVvJztcbiAgICAgICAgZW1iZWRJRCA9IHZpbWVvSURbMV07XG4gICAgICB9XG5cbiAgICAgIGlmICh1cmwubWF0Y2goLyh5b3V0dWJlXFwuY29tfHlvdXR1YmUtbm9jb29raWVcXC5jb20pXFwvd2F0Y2hcXD92PShbYS16QS1aMC05XFwtX10rKS8pIHx8IHVybC5tYXRjaCgveW91dHVcXC5iZVxcLyhbYS16QS1aMC05XFwtX10rKS8pIHx8IHVybC5tYXRjaCgvKHlvdXR1YmVcXC5jb218eW91dHViZS1ub2Nvb2tpZVxcLmNvbSlcXC9lbWJlZFxcLyhbYS16QS1aMC05XFwtX10rKS8pKSB7XG4gICAgICAgIHZhciB5b3V0dWJlSUQgPSBnZXRZb3V0dWJlSUQodXJsKTtcbiAgICAgICAgdmlkZW9Tb3VyY2UgPSAneW91dHViZSc7XG4gICAgICAgIGVtYmVkSUQgPSB5b3V0dWJlSUQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh1cmwubWF0Y2goL1xcLihtcDR8b2dnfHdlYm18bW92KSQvKSAhPT0gbnVsbCkge1xuICAgICAgICB2aWRlb1NvdXJjZSA9ICdsb2NhbCc7XG4gICAgICAgIHZhciBodG1sID0gJzx2aWRlbyBpZD1cIicgKyB2aWRlb0lEICsgJ1wiICc7XG4gICAgICAgIGh0bWwgKz0gXCJzdHlsZT1cXFwiYmFja2dyb3VuZDojMDAwOyBtYXgtd2lkdGg6IFwiLmNvbmNhdChkYXRhLndpZHRoLCBcIjtcXFwiIFwiKTtcbiAgICAgICAgaHRtbCArPSAncHJlbG9hZD1cIm1ldGFkYXRhXCIgJztcbiAgICAgICAgaHRtbCArPSAneC13ZWJraXQtYWlycGxheT1cImFsbG93XCIgJztcbiAgICAgICAgaHRtbCArPSAncGxheXNpbmxpbmUgJztcbiAgICAgICAgaHRtbCArPSAnY29udHJvbHMgJztcbiAgICAgICAgaHRtbCArPSAnY2xhc3M9XCJndmlkZW8tbG9jYWxcIj4nO1xuICAgICAgICB2Y
24510XIgZm9ybWF0ID0gdXJsLnRvTG93ZXJDYXNlKCkuc3BsaXQoJy4nKS5wb3AoKTtcbiAgICAgICAgdmFyIHNvdXJjZXMgPSB7XG4gICAgICAgICAgbXA0OiAnJyxcbiAgICAgICAgICBvZ2c6ICcnLFxuICAgICAgICAgIHdlYm06ICcnXG4gICAgICAgIH07XG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdCA9PSAnbW92JyA/ICdtcDQnIDogZm9ybWF0O1xuICAgICAgICBzb3VyY2VzW2Zvcm1hdF0gPSB1cmw7XG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZXMpIHtcbiAgICAgICAgICBpZiAoc291cmNlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICB2YXIgdmlkZW9GaWxlID0gc291cmNlc1trZXldO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgIHZpZGVvRmlsZSA9IGRhdGFba2V5XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZpZGVvRmlsZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgaHRtbCArPSBcIjxzb3VyY2Ugc3JjPVxcXCJcIi5jb25jYXQodmlkZW9GaWxlLCBcIlxcXCIgdHlwZT1cXFwidmlkZW8vXCIpLmNvbmNhdChrZXksIFwiXFxcIj5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaHRtbCArPSAnPC92aWRlbz4nO1xuICAgICAgICBjdXN0b21QbGFjZWhvbGRlciA9IGNyZWF0ZUhUTUwoaHRtbCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBwbGFjZWhvbGRlciA9IGN1c3RvbVBsYWNlaG9sZGVyID8gY3VzdG9tUGxhY2Vob2xkZXIgOiBjcmVhdGVIVE1MKFwiPGRpdiBpZD1cXFwiXCIuY29uY2F0KHZpZGVvSUQsIFwiXFxcIiBkYXRhLXBseXItcHJvdmlkZXI9XFxcIlwiKS5jb25jYXQodmlkZW9Tb3VyY2UsIFwiXFxcIiBkYXRhLXBseXItZW1iZWQtaWQ9XFxcIlwiKS5jb25jYXQoZW1iZWRJRCwgXCJcXFwiPjwvZGl2PlwiKSk7XG4gICAgICBhZGRDbGFzcyh2aWRlb1dyYXBwZXIsIFwiXCIuY29uY2F0KHZpZGVvU291cmNlLCBcIi12aWRlbyBndmlkZW9cIikpO1xuICAgICAgdmlkZW9XcmFwcGVyLmFwcGVuZENoaWxkKHBsYWNlaG9sZGVyKTtcbiAgICAgIHZpZGVvV3JhcHBlci5zZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnLCB2aWRlb0lEKTtcbiAgICAgIHZpZGVvV3JhcHBlci5zZXRBdHRyaWJ1dGUoJ2RhdGEtaW5kZXgnLCBpbmRleCk7XG4gICAgICB2Y
24510XIgcGxheWVyQ29uZmlnID0gaGFzKF90aGlzLnNldHRpbmdzLnBseXIsICdjb25maWcnKSA/IF90aGlzLnNldHRpbmdzLnBseXIuY29uZmlnIDoge307XG4gICAgICB2YXIgcGxheWVyID0gbmV3IFBseXIoJyMnICsgdmlkZW9JRCwgcGxheWVyQ29uZmlnKTtcbiAgICAgIHBsYXllci5vbigncmVhZHknLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZXZlbnQuZGV0YWlsLnBseXI7XG4gICAgICAgIHZpZGVvUGxheWVyc1t2aWRlb0lEXSA9IGluc3RhbmNlO1xuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgd2FpdFVudGlsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHNsaWRlLnF1ZXJ5U2VsZWN0b3IoJ2lmcmFtZScpICYmIHNsaWRlLnF1ZXJ5U2VsZWN0b3IoJ2lmcmFtZScpLmRhdGFzZXQucmVhZHkgPT0gJ3RydWUnO1xuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5yZXNpemUoc2xpZGUpO1xuICAgICAgfSk7XG4gICAgICBwbGF5ZXIub24oJ2VudGVyZnVsbHNjcmVlbicsIGhhbmRsZU1lZGlhRnVsbFNjcmVlbik7XG4gICAgICBwbGF5ZXIub24oJ2V4aXRmdWxsc2NyZWVuJywgaGFuZGxlTWVkaWFGdWxsU2NyZWVuKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFlvdXR1YmVJRCh1cmwpIHtcbiAgICB2YXIgdmlkZW9JRCA9ICcnO1xuICAgIHVybCA9IHVybC5yZXBsYWNlKC8oPnw8KS9naSwgJycpLnNwbGl0KC8odmlcXC98dj18XFwvdlxcL3x5b3V0dVxcLmJlXFwvfFxcL2VtYmVkXFwvKS8pO
245101xuXG4gICAgaWYgKHVybFsyXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2aWRlb0lEID0gdXJsWzJdLnNwbGl0KC9bXjAtOWEtel9cXC1dL2kpO1xuICAgICAgdmlkZW9JRCA9IHZpZGVvSURbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZpZGVvSUQgPSB1cmw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZpZGVvSUQ7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVNZWRpYUZ1bGxTY3JlZW4oZXZlbnQpIHtcbiAgICB2YXIgbWVkaWEgPSBjbG9zZXN0KGV2ZW50LnRhcmdldCwgJy5nc2xpZGUtbWVkaWEnKTtcblxuICAgIGlmIChldmVudC50eXBlID09ICdlbnRlcmZ1bGxzY3JlZW4nKSB7XG4gICAgICBhZGRDbGFzcyhtZWRpYSwgJ2Z1bGxzY3JlZW4nKTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PSAnZXhpdGZ1bGxzY3JlZW4nKSB7XG4gICAgICByZW1vdmVDbGFzcyhtZWRpYSwgJ2Z1bGxzY3JlZW4nKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzbGlkZUlubGluZShzbGlkZSwgZGF0YSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBzbGlkZU1lZGlhID0gc2xpZGUucXVlcnlTZWxlY3RvcignLmdzbGlkZS1tZWRpYScpO1xuICAgIHZhciBoYXNoID0gaGFzKGRhdGEsICdocmVmJykgJiYgZGF0YS5ocmVmID8gZGF0YS5ocmVmLnNwbGl0KCcjJykucG9wKCkudHJpbSgpIDogZmFsc2U7XG4gICAgdmFyIGNvbnRlbnQgPSBoYXMoZGF0YSwgJ2NvbnRlbnQnKSAmJiBkYXRhLmNvbnRlbnQgPyBkYXRhLmNvbnRlbnQgOiBmYWxzZTtcbiAgICB2YXIgaW5uZXJDb250ZW50O1xuXG4gICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgIGlmIChpc1N0cmluZyhjb250ZW50KSkge1xuICAgICAgICBpbm5lckNvbnRlbnQgPSBjcmVhdGVIVE1MKFwiPGRpdiBjbGFzcz1cXFwiZ2lubGluZWQtY29udGVudFxcXCI+XCIuY29uY2F0KGNvbnRlbnQsIFwiPC9kaXY+XCIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTm9kZShjb250ZW50KSkge1xuICAgICAgICBpZiAoY29udGVudC5zdHlsZS5kaXNwbGF5ID09ICdub25lJykge1xuICAgICAgICAgIGNvbnRlbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIH1cblxuICAgICAgICB2Y
24510XIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSAnZ2lubGluZWQtY29udGVudCc7XG4gICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgICAgICAgaW5uZXJDb250ZW50ID0gY29udGFpbmVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNoKSB7XG4gICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGFzaCk7XG5cbiAgICAgIGlmICghZGl2KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNsb25lZCA9IGRpdi5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICBjbG9uZWQuc3R5bGUuaGVpZ2h0ID0gZGF0YS5oZWlnaHQ7XG4gICAgICBjbG9uZWQuc3R5bGUubWF4V2lkdGggPSBkYXRhLndpZHRoO1xuICAgICAgYWRkQ2xhc3MoY2xvbmVkLCAnZ2lubGluZWQtY29udGVudCcpO1xuICAgICAgaW5uZXJDb250ZW50ID0gY2xvbmVkO1xuICAgIH1cblxuICAgIGlmICghaW5uZXJDb250ZW50KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdVbmFibGUgdG8gYXBwZW5kIGlubGluZSBzbGlkZSBjb250ZW50JywgZGF0YSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2xpZGVNZWRpYS5zdHlsZS5oZWlnaHQgPSBkYXRhLmhlaWdodDtcbiAgICBzbGlkZU1lZGlhLnN0eWxlLndpZHRoID0gZGF0YS53aWR0aDtcbiAgICBzbGlkZU1lZGlhLmFwcGVuZENoaWxkKGlubmVyQ29udGVudCk7XG4gICAgdGhpcy5ldmVudHNbJ2lubGluZWNsb3NlJyArIGhhc2hdID0gYWRkRXZlbnQoJ2NsaWNrJywge1xuICAgICAgb25FbGVtZW50OiBzbGlkZU1lZGlhLnF1ZXJ5U2VsZWN0b3JBbGwoJy5ndHJpZ2dlci1jbG9zZScpLFxuICAgICAgd2l0aENhbGxiYWNrOiBmdW5jdGlvbiB3aXRoQ2FsbGJhY2soZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgX3RoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiBzbGlkZUlmcmFtZShzbGlkZSwgZGF0YSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNsaWRlTWVkaWEgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3NsaWRlLW1lZGlhJyk7XG4gICAgdmFyIGlmcmFtZSA9IGNyZWF0ZUlmcmFtZSh7XG4gICAgICB1cmw6IGRhdGEuaHJlZixcbiAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xuICAgIH0pO1xuICAgIHNsaWRlTWVkaWEucGFyZW50Tm9kZS5zdHlsZS5tYXhXaWR0aCA9IGRhdGEud2lkdGg7XG4gICAgc2xpZGVNZWRpYS5wYXJlbnROb2RlLnN0eWxlLmhlaWdodCA9IGRhdGEuaGVpZ2h0O1xuICAgIHNsaWRlTWVkaWEuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgU2xpZGVDb25maWdQYXJzZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2xpZGVDb25maWdQYXJzZXIoKSB7XG4gICAgICB2Y
24510XIgc2xpZGVQYXJhbWFzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNsaWRlQ29uZmlnUGFyc2VyKTtcblxuICAgICAgdGhpcy5kZWZhdWx0cyA9IHtcbiAgICAgICAgaHJlZjogJycsXG4gICAgICAgIHNpemVzOiAnJyxcbiAgICAgICAgc3Jjc2V0OiAnJyxcbiAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICB0eXBlOiAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICBhbHQ6ICcnLFxuICAgICAgICBkZXNjUG9zaXRpb246ICdib3R0b20nLFxuICAgICAgICBlZmZlY3Q6ICcnLFxuICAgICAgICB3aWR0aDogJycsXG4gICAgICAgIGhlaWdodDogJycsXG4gICAgICAgIGNvbnRlbnQ6IGZhbHNlLFxuICAgICAgICB6b29tYWJsZTogdHJ1ZSxcbiAgICAgICAgZHJhZ2dhYmxlOiB0cnVlXG4gICAgICB9O1xuXG4gICAgICBpZiAoaXNPYmplY3Qoc2xpZGVQYXJhbWFzKSkge1xuICAgICAgICB0aGlzLmRlZmF1bHRzID0gZXh0ZW5kKHRoaXMuZGVmYXVsdHMsIHNsaWRlUGFyYW1hcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2NyZWF0ZUNsYXNzKFNsaWRlQ29uZmlnUGFyc2VyLCBbe1xuICAgICAga2V5OiBcInNvdXJjZVR5cGVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzb3VyY2VUeXBlKHVybCkge1xuICAgICAgICB2YXIgb3JpZ2luID0gdXJsO1xuICAgICAgICB1cmwgPSB1cmwudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAodXJsLm1hdGNoKC9cXC4oanBlZ3xqcGd8anBlfGdpZnxwbmd8YXBufHdlYnB8YXZpZnxzdmcpLykgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gJ2ltYWdlJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cmwubWF0Y2goLyh5b3V0dWJlXFwuY29tfHlvdXR1YmUtbm9jb29raWVcXC5jb20pXFwvd2F0Y2hcXD92PShbYS16QS1aMC05XFwtX10rKS8pIHx8IHVybC5tYXRjaCgveW91dHVcXC5iZVxcLyhbYS16QS1aMC05XFwtX10rKS8pIHx8IHVybC5tYXRjaCgvKHlvdXR1YmVcXC5jb218eW91dHViZS1ub2Nvb2tpZVxcLmNvbSlcXC9lbWJlZFxcLyhbYS16QS1aMC05XFwtX10rKS8pKSB7XG4gICAgICAgICAgcmV0dXJuICd2aWRlbyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXJsLm1hdGNoKC92aW1lb1xcLmNvbVxcLyhbMC05XSopLykpIHtcbiAgICAgICAgICByZXR1cm4gJ3ZpZGVvJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cmwubWF0Y2goL1xcLihtcDR8b2dnfHdlYm18bW92KS8pICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuICd2aWRlbyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXJsLm1hdGNoKC9cXC4obXAzfHdhdnx3bWF8YWFjfG9nZykvKSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiAnYXVkaW8nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCcjJykgPiAtMSkge1xuICAgICAgICAgIHZhciBoYXNoID0gb3JpZ2luLnNwbGl0KCcjJykucG9wKCk7XG5cbiAgICAgICAgICBpZiAoaGFzaC50cmltKCkgIT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2lubGluZSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCdnb2FqYXg9dHJ1ZScpID4gLTEpIHtcbiAgICAgICAgICByZXR1cm4gJ2FqYXgnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICdleHRlcm5hbCc7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInBhcnNlQ29uZmlnXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VDb25maWcoZWxlbWVudCwgc2V0dGluZ3MpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICB2Y
24510XIgZGF0YSA9IGV4dGVuZCh7XG4gICAgICAgICAgZGVzY1Bvc2l0aW9uOiBzZXR0aW5ncy5kZXNjUG9zaXRpb25cbiAgICAgICAgfSwgdGhpcy5kZWZhdWx0cyk7XG5cbiAgICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpICYmICFpc05vZGUoZWxlbWVudCkpIHtcbiAgICAgICAgICBpZiAoIWhhcyhlbGVtZW50LCAndHlwZScpKSB7XG4gICAgICAgICAgICBpZiAoaGFzKGVsZW1lbnQsICdjb250ZW50JykgJiYgZWxlbWVudC5jb250ZW50KSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQudHlwZSA9ICdpbmxpbmUnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChoYXMoZWxlbWVudCwgJ2hyZWYnKSkge1xuICAgICAgICAgICAgICBlbGVtZW50LnR5cGUgPSB0aGlzLnNvdXJjZVR5cGUoZWxlbWVudC5ocmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgb2JqZWN0RGF0YSA9IGV4dGVuZChkYXRhLCBlbGVtZW50KTtcbiAgICAgICAgICB0aGlzLnNldFNpemUob2JqZWN0RGF0YSwgc2V0dGluZ3MpO1xuICAgICAgICAgIHJldHVybiBvYmplY3REYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHVybCA9ICcnO1xuICAgICAgICB2YXIgY29uZmlnID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZ2xpZ2h0Ym94Jyk7XG4gICAgICAgIHZhciBub2RlVHlwZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAobm9kZVR5cGUgPT09ICdhJykge1xuICAgICAgICAgIHVybCA9IGVsZW1lbnQuaHJlZjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlVHlwZSA9PT0gJ2ltZycpIHtcbiAgICAgICAgICB1cmwgPSBlbGVtZW50LnNyYztcbiAgICAgICAgICBkYXRhLmFsdCA9IGVsZW1lbnQuYWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS5ocmVmID0gdXJsO1xuICAgICAgICBlYWNoKGRhdGEsIGZ1bmN0aW9uICh2YWwsIGtleSkge1xuICAgICAgICAgIGlmIChoYXMoc2V0dGluZ3MsIGtleSkgJiYga2V5ICE9PSAnd2lkdGgnKSB7XG4gICAgICAgICAgICBkYXRhW2tleV0gPSBzZXR0aW5nc1trZXldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBub2RlRGF0YSA9IGVsZW1lbnQuZGF0YXNldFtrZXldO1xuXG4gICAgICAgICAgaWYgKCFpc05pbChub2RlRGF0YSkpIHtcbiAgICAgICAgICAgIGRhdGFba2V5XSA9IF90aGlzLnNhbml0aXplVmFsdWUobm9kZURhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGRhdGEuY29udGVudCkge1xuICAgICAgICAgIGRhdGEudHlwZSA9ICdpbmxpbmUnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkYXRhLnR5cGUgJiYgdXJsKSB7XG4gICAgICAgICAgZGF0YS50eXBlID0gdGhpcy5zb3VyY2VUeXBlKHVybCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmlsKGNvbmZpZykpIHtcbiAgICAgICAgICB2Y
24510XIgY2xlYW5LZXlzID0gW107XG4gICAgICAgICAgZWFjaChkYXRhLCBmdW5jdGlvbiAodiwgaykge1xuICAgICAgICAgICAgY2xlYW5LZXlzLnB1c2goJztcXFxccz8nICsgayk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2xlYW5LZXlzID0gY2xlYW5LZXlzLmpvaW4oJ1xcXFxzPzp8Jyk7XG5cbiAgICAgICAgICBpZiAoY29uZmlnLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgICAgICAgIGVhY2goZGF0YSwgZnVuY3Rpb24gKHZhbCwga2V5KSB7XG4gICAgICAgICAgICAgIHZhciBzdHIgPSBjb25maWc7XG4gICAgICAgICAgICAgIHZhciBtYXRjaCA9ICdzPycgKyBrZXkgKyAncz86cz8oLio/KSgnICsgY2xlYW5LZXlzICsgJ3M/OnwkKSc7XG4gICAgICAgICAgICAgIHZhciByZWdleCA9IG5ldyBSZWdFeHAobWF0Y2gpO1xuICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IHN0ci5tYXRjaChyZWdleCk7XG5cbiAgICAgICAgICAgICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggJiYgbWF0Y2hlc1sxXSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IG1hdGNoZXNbMV0udHJpbSgpLnJlcGxhY2UoLztcXHMqJC8sICcnKTtcbiAgICAgICAgICAgICAgICBkYXRhW2tleV0gPSBfdGhpcy5zYW5pdGl6ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghZGF0YS50aXRsZSAmJiBub2RlVHlwZSA9PSAnYScpIHtcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IGVsZW1lbnQudGl0bGU7XG5cbiAgICAgICAgICAgIGlmICghaXNOaWwodGl0bGUpICYmIHRpdGxlICE9PSAnJykge1xuICAgICAgICAgICAgICBkYXRhLnRpdGxlID0gdGl0bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFkYXRhLnRpdGxlICYmIG5vZGVUeXBlID09ICdpbWcnKSB7XG4gICAgICAgICAgICB2Y
24510XIgYWx0ID0gZWxlbWVudC5hbHQ7XG5cbiAgICAgICAgICAgIGlmICghaXNOaWwoYWx0KSAmJiBhbHQgIT09ICcnKSB7XG4gICAgICAgICAgICAgIGRhdGEudGl0bGUgPSBhbHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEuZGVzY3JpcHRpb24gJiYgZGF0YS5kZXNjcmlwdGlvbi5zdWJzdHJpbmcoMCwgMSkgPT09ICcuJykge1xuICAgICAgICAgIHZhciBkZXNjcmlwdGlvbjtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZGF0YS5kZXNjcmlwdGlvbikuaW5uZXJIVE1MO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbikpIHtcbiAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBkYXRhLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkYXRhLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgdmFyIG5vZGVEZXNjID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZ2xpZ2h0Ym94LWRlc2MnKTtcblxuICAgICAgICAgIGlmIChub2RlRGVzYykge1xuICAgICAgICAgICAgZGF0YS5kZXNjcmlwdGlvbiA9IG5vZGVEZXNjLmlubmVySFRNTDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFNpemUoZGF0YSwgc2V0dGluZ3MsIGVsZW1lbnQpO1xuICAgICAgICB0aGlzLnNsaWRlQ29uZmlnID0gZGF0YTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInNldFNpemVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRTaXplKGRhdGEsIHNldHRpbmdzKSB7XG4gICAgICAgIHZhciBlbGVtZW50ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuICAgICAgICB2Y
24510XIgZGVmYXVsdFdpdGggPSBkYXRhLnR5cGUgPT0gJ3ZpZGVvJyA/IHRoaXMuY2hlY2tTaXplKHNldHRpbmdzLnZpZGVvc1dpZHRoKSA6IHRoaXMuY2hlY2tTaXplKHNldHRpbmdzLndpZHRoKTtcbiAgICAgICAgdmFyIGRlZmF1bHRIZWlnaHQgPSB0aGlzLmNoZWNrU2l6ZShzZXR0aW5ncy5oZWlnaHQpO1xuICAgICAgICBkYXRhLndpZHRoID0gaGFzKGRhdGEsICd3aWR0aCcpICYmIGRhdGEud2lkdGggIT09ICcnID8gdGhpcy5jaGVja1NpemUoZGF0YS53aWR0aCkgOiBkZWZhdWx0V2l0aDtcbiAgICAgICAgZGF0YS5oZWlnaHQgPSBoYXMoZGF0YSwgJ2hlaWdodCcpICYmIGRhdGEuaGVpZ2h0ICE9PSAnJyA/IHRoaXMuY2hlY2tTaXplKGRhdGEuaGVpZ2h0KSA6IGRlZmF1bHRIZWlnaHQ7XG5cbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZGF0YS50eXBlID09ICdpbWFnZScpIHtcbiAgICAgICAgICBkYXRhLl9oYXNDdXN0b21XaWR0aCA9IGVsZW1lbnQuZGF0YXNldC53aWR0aCA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICBkYXRhLl9oYXNDdXN0b21IZWlnaHQgPSBlbGVtZW50LmRhdGFzZXQuaGVpZ2h0ID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImNoZWNrU2l6ZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNoZWNrU2l6ZShzaXplKSB7XG4gICAgICAgIHJldHVybiBpc051bWJlcihzaXplKSA/IFwiXCIuY29uY2F0KHNpemUsIFwicHhcIikgOiBzaXplO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJzYW5pdGl6ZVZhbHVlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2FuaXRpemVWYWx1ZSh2YWwpIHtcbiAgICAgICAgaWYgKHZhbCAhPT0gJ3RydWUnICYmIHZhbCAhPT0gJ2ZhbHNlJykge1xuICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsID09PSAndHJ1ZSc7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIFNsaWRlQ29uZmlnUGFyc2VyO1xuICB9KCk7XG5cbiAgdmFyIFNsaWRlID0gZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNsaWRlKGVsLCBpbnN0YW5jZSwgaW5kZXgpIHtcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTbGlkZSk7XG5cbiAgICAgIHRoaXMuZWxlbWVudCA9IGVsO1xuICAgICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgIH1cblxuICAgIF9jcmVhdGVDbGFzcyhTbGlkZSwgW3tcbiAgICAgIGtleTogXCJzZXRDb250ZW50XCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0Q29udGVudCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICB2Y
24510XIgc2xpZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG5cbiAgICAgICAgaWYgKGhhc0NsYXNzKHNsaWRlLCAnbG9hZGVkJykpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2V0dGluZ3MgPSB0aGlzLmluc3RhbmNlLnNldHRpbmdzO1xuICAgICAgICB2YXIgc2xpZGVDb25maWcgPSB0aGlzLnNsaWRlQ29uZmlnO1xuICAgICAgICB2YXIgaXNNb2JpbGVEZXZpY2UgPSBpc01vYmlsZSgpO1xuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHNldHRpbmdzLmJlZm9yZVNsaWRlTG9hZCkpIHtcbiAgICAgICAgICBzZXR0aW5ncy5iZWZvcmVTbGlkZUxvYWQoe1xuICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICAgICAgICBzbGlkZTogc2xpZGUsXG4gICAgICAgICAgICBwbGF5ZXI6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdHlwZSA9IHNsaWRlQ29uZmlnLnR5cGU7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHNsaWRlQ29uZmlnLmRlc2NQb3NpdGlvbjtcbiAgICAgICAgdmFyIHNsaWRlTWVkaWEgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3NsaWRlLW1lZGlhJyk7XG4gICAgICAgIHZhciBzbGlkZVRpdGxlID0gc2xpZGUucXVlcnlTZWxlY3RvcignLmdzbGlkZS10aXRsZScpO1xuICAgICAgICB2Y
24510XIgc2xpZGVUZXh0ID0gc2xpZGUucXVlcnlTZWxlY3RvcignLmdzbGlkZS1kZXNjJyk7XG4gICAgICAgIHZhciBzbGlkZURlc2MgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ2Rlc2MtaW5uZXInKTtcbiAgICAgICAgdmFyIGZpbmFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgdmFyIHRpdGxlSUQgPSAnZ1NsaWRlVGl0bGVfJyArIHRoaXMuaW5kZXg7XG4gICAgICAgIHZhciB0ZXh0SUQgPSAnZ1NsaWRlRGVzY18nICsgdGhpcy5pbmRleDtcblxuICAgICAgICBpZiAoaXNGdW5jdGlvbihzZXR0aW5ncy5hZnRlclNsaWRlTG9hZCkpIHtcbiAgICAgICAgICBmaW5hbENhbGxiYWNrID0gZnVuY3Rpb24gZmluYWxDYWxsYmFjaygpIHtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZXR0aW5ncy5hZnRlclNsaWRlTG9hZCh7XG4gICAgICAgICAgICAgIGluZGV4OiBfdGhpcy5pbmRleCxcbiAgICAgICAgICAgICAgc2xpZGU6IHNsaWRlLFxuICAgICAgICAgICAgICBwbGF5ZXI6IF90aGlzLmluc3RhbmNlLmdldFNsaWRlUGxheWVySW5zdGFuY2UoX3RoaXMuaW5kZXgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNsaWRlQ29uZmlnLnRpdGxlID09ICcnICYmIHNsaWRlQ29uZmlnLmRlc2NyaXB0aW9uID09ICcnKSB7XG4gICAgICAgICAgaWYgKHNsaWRlRGVzYykge1xuICAgICAgICAgICAgc2xpZGVEZXNjLnBhcmVudE5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzbGlkZURlc2MucGFyZW50Tm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzbGlkZVRpdGxlICYmIHNsaWRlQ29uZmlnLnRpdGxlICE9PSAnJykge1xuICAgICAgICAgICAgc2xpZGVUaXRsZS5pZCA9IHRpdGxlSUQ7XG4gICAgICAgICAgICBzbGlkZVRpdGxlLmlubmVySFRNTCA9IHNsaWRlQ29uZmlnLnRpdGxlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzbGlkZVRpdGxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2xpZGVUaXRsZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNsaWRlVGV4dCAmJiBzbGlkZUNvbmZpZy5kZXNjcmlwdGlvbiAhPT0gJycpIHtcbiAgICAgICAgICAgIHNsaWRlVGV4dC5pZCA9IHRleHRJRDtcblxuICAgICAgICAgICAgaWYgKGlzTW9iaWxlRGV2aWNlICYmIHNldHRpbmdzLm1vcmVMZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHNsaWRlQ29uZmlnLnNtYWxsRGVzY3JpcHRpb24gPSB0aGlzLnNsaWRlU2hvcnREZXNjKHNsaWRlQ29uZmlnLmRlc2NyaXB0aW9uLCBzZXR0aW5ncy5tb3JlTGVuZ3RoLCBzZXR0aW5ncy5tb3JlVGV4dCk7XG4gICAgICAgICAgICAgIHNsaWRlVGV4dC5pbm5lckhUTUwgPSBzbGlkZUNvbmZpZy5zbWFsbERlc2NyaXB0aW9uO1xuICAgICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uRXZlbnRzKHNsaWRlVGV4dCwgc2xpZGVDb25maWcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2xpZGVUZXh0LmlubmVySFRNTCA9IHNsaWRlQ29uZmlnLmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzbGlkZVRleHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzbGlkZVRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFkZENsYXNzKHNsaWRlTWVkaWEucGFyZW50Tm9kZSwgXCJkZXNjLVwiLmNvbmNhdChwb3NpdGlvbikpO1xuICAgICAgICAgIGFkZENsYXNzKHNsaWRlRGVzYy5wYXJlbnROb2RlLCBcImRlc2NyaXB0aW9uLVwiLmNvbmNhdChwb3NpdGlvbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkQ2xhc3Moc2xpZGVNZWRpYSwgXCJnc2xpZGUtXCIuY29uY2F0KHR5cGUpKTtcbiAgICAgICAgYWRkQ2xhc3Moc2xpZGUsICdsb2FkZWQnKTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgIHNsaWRlVmlkZW8uYXBwbHkodGhpcy5pbnN0YW5jZSwgW3NsaWRlLCBzbGlkZUNvbmZpZywgdGhpcy5pbmRleCwgZmluYWxDYWxsYmFja10pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAnZXh0ZXJuYWwnKSB7XG4gICAgICAgICAgc2xpZGVJZnJhbWUuYXBwbHkodGhpcywgW3NsaWRlLCBzbGlkZUNvbmZpZywgdGhpcy5pbmRleCwgZmluYWxDYWxsYmFja10pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAnaW5saW5lJykge1xuICAgICAgICAgIHNsaWRlSW5saW5lLmFwcGx5KHRoaXMuaW5zdGFuY2UsIFtzbGlkZSwgc2xpZGVDb25maWcsIHRoaXMuaW5kZXgsIGZpbmFsQ2FsbGJhY2tdKTtcblxuICAgICAgICAgIGlmIChzbGlkZUNvbmZpZy5kcmFnZ2FibGUpIHtcbiAgICAgICAgICAgIG5ldyBEcmFnU2xpZGVzKHtcbiAgICAgICAgICAgICAgZHJhZ0VsOiBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3NsaWRlLWlubGluZScpLFxuICAgICAgICAgICAgICB0b2xlcmFuY2VYOiBzZXR0aW5ncy5kcmFnVG9sZXJhbmNlWCxcbiAgICAgICAgICAgICAgdG9sZXJhbmNlWTogc2V0dGluZ3MuZHJhZ1RvbGVyYW5jZVksXG4gICAgICAgICAgICAgIHNsaWRlOiBzbGlkZSxcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IHRoaXMuaW5zdGFuY2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgICAgICAgc2xpZGVJbWFnZShzbGlkZSwgc2xpZGVDb25maWcsIHRoaXMuaW5kZXgsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBpbWcgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCdpbWcnKTtcblxuICAgICAgICAgICAgaWYgKHNsaWRlQ29uZmlnLmRyYWdnYWJsZSkge1xuICAgICAgICAgICAgICBuZXcgRHJhZ1NsaWRlcyh7XG4gICAgICAgICAgICAgICAgZHJhZ0VsOiBpbWcsXG4gICAgICAgICAgICAgICAgdG9sZXJhbmNlWDogc2V0dGluZ3MuZHJhZ1RvbGVyYW5jZVgsXG4gICAgICAgICAgICAgICAgdG9sZXJhbmNlWTogc2V0dGluZ3MuZHJhZ1RvbGVyYW5jZVksXG4gICAgICAgICAgICAgICAgc2xpZGU6IHNsaWRlLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlOiBfdGhpcy5pbnN0YW5jZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgI
24510H1cblxuICAgICAgICAgICAgaWYgKHNsaWRlQ29uZmlnLnpvb21hYmxlICYmIGltZy5uYXR1cmFsV2lkdGggPiBpbWcub2Zmc2V0V2lkdGgpIHtcbiAgICAgICAgICAgICAgYWRkQ2xhc3MoaW1nLCAnem9vbWFibGUnKTtcbiAgICAgICAgICAgICAgbmV3IFpvb21JbWFnZXMoaW1nLCBzbGlkZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmluc3RhbmNlLnJlc2l6ZSgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZmluYWxDYWxsYmFjaykpIHtcbiAgICAgICAgICAgICAgZmluYWxDYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGZpbmFsQ2FsbGJhY2spKSB7XG4gICAgICAgICAgZmluYWxDYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInNsaWRlU2hvcnREZXNjXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2xpZGVTaG9ydERlc2Moc3RyaW5nKSB7XG4gICAgICAgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiA1MDtcbiAgICAgICAgdmFyIHdvcmRCb3VuZGFyeSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZGl2LmlubmVySFRNTCA9IHN0cmluZztcbiAgICAgICAgdmFyIGNsZWFuZWRTdHJpbmcgPSBkaXYuaW5uZXJUZXh0O1xuICAgICAgICB2Y
24510XIgdXNlV29yZEJvdW5kYXJ5ID0gd29yZEJvdW5kYXJ5O1xuICAgICAgICBzdHJpbmcgPSBjbGVhbmVkU3RyaW5nLnRyaW0oKTtcblxuICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA8PSBuKSB7XG4gICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdWJTdHJpbmcgPSBzdHJpbmcuc3Vic3RyKDAsIG4gLSAxKTtcblxuICAgICAgICBpZiAoIXVzZVdvcmRCb3VuZGFyeSkge1xuICAgICAgICAgIHJldHVybiBzdWJTdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBkaXYgPSBudWxsO1xuICAgICAgICByZXR1cm4gc3ViU3RyaW5nICsgJy4uLiA8YSBocmVmPVwiI1wiIGNsYXNzPVwiZGVzYy1tb3JlXCI+JyArIHdvcmRCb3VuZGFyeSArICc8L2E+JztcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZGVzY3JpcHRpb25FdmVudHNcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZXNjcmlwdGlvbkV2ZW50cyhkZXNjLCBkYXRhKSB7XG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgIHZhciBtb3JlTGluayA9IGRlc2MucXVlcnlTZWxlY3RvcignLmRlc2MtbW9yZScpO1xuXG4gICAgICAgIGlmICghbW9yZUxpbmspIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBhZGRFdmVudCgnY2xpY2snLCB7XG4gICAgICAgICAgb25FbGVtZW50OiBtb3JlTGluayxcbiAgICAgICAgICB3aXRoQ2FsbGJhY2s6IGZ1bmN0aW9uIHdpdGhDYWxsYmFjayhldmVudCwgdGFyZ2V0KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBjbG9zZXN0KHRhcmdldCwgJy5nc2xpZGUtZGVzYycpO1xuXG4gICAgICAgICAgICBpZiAoIWRlc2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZXNjLmlubmVySFRNTCA9IGRhdGEuZGVzY3JpcHRpb247XG4gICAgICAgICAgICBhZGRDbGFzcyhib2R5LCAnZ2Rlc2Mtb3BlbicpO1xuICAgICAgICAgICAgdmFyIHNob3J0RXZlbnQgPSBhZGRFdmVudCgnY2xpY2snLCB7XG4gICAgICAgICAgICAgIG9uRWxlbWVudDogW2JvZHksIGNsb3Nlc3QoZGVzYywgJy5nc2xpZGUtZGVzY3JpcHRpb24nKV0sXG4gICAgICAgICAgICAgIHdpdGhDYWxsYmFjazogZnVuY3Rpb24gd2l0aENhbGxiYWNrKGV2ZW50LCB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdhJykge1xuICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3MoYm9keSwgJ2dkZXNjLW9wZW4nKTtcbiAgICAgICAgICAgICAgICAgIGFkZENsYXNzKGJvZHksICdnZGVzYy1jbG9zZWQnKTtcbiAgICAgICAgICAgICAgICAgIGRlc2MuaW5uZXJIVE1MID0gZGF0YS5zbWFsbERlc2NyaXB0aW9uO1xuXG4gICAgICAgICAgICAgICAgICBfdGhpczIuZGVzY3JpcHRpb25FdmVudHMoZGVzYywgZGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyhib2R5LCAnZ2Rlc2MtY2xvc2VkJyk7XG4gICAgICAgICAgICAgICAgICB9LCA0MDApO1xuICAgICAgICAgICAgICAgICAgc2hvcnRFdmVudC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJjcmVhdGVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMuaW5zdGFuY2Uuc2V0dGluZ3Muc2xpZGVIVE1MKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZ2V0Q29uZmlnXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q29uZmlnKCkge1xuICAgICAgICBpZiAoIWlzTm9kZSh0aGlzLmVsZW1lbnQpICYmICF0aGlzLmVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ2RyYWdnYWJsZScpKSB7XG4gICAgICAgICAgdGhpcy5lbGVtZW50LmRyYWdnYWJsZSA9IHRoaXMuaW5zdGFuY2Uuc2V0dGluZ3MuZHJhZ2dhYmxlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBTbGlkZUNvbmZpZ1BhcnNlcih0aGlzLmluc3RhbmNlLnNldHRpbmdzLnNsaWRlRXh0cmFBdHRyaWJ1dGVzKTtcbiAgICAgICAgdGhpcy5zbGlkZUNvbmZpZyA9IHBhcnNlci5wYXJzZUNvbmZpZyh0aGlzLmVsZW1lbnQsIHRoaXMuaW5zdGFuY2Uuc2V0dGluZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5zbGlkZUNvbmZpZztcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gU2xpZGU7XG4gIH0oKTtcblxuICB2YXIgX3ZlcnNpb24gPSAnMy4xLjEnO1xuXG4gIHZhciBpc01vYmlsZSQxID0gaXNNb2JpbGUoKTtcblxuICB2YXIgaXNUb3VjaCQxID0gaXNUb3VjaCgpO1xuXG4gIHZhciBodG1sID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2h0bWwnKVswXTtcbiAgdmFyIGRlZmF1bHRzID0ge1xuICAgIHNlbGVjdG9yOiAnLmdsaWdodGJveCcsXG4gICAgZWxlbWVudHM6IG51bGwsXG4gICAgc2tpbjogJ2NsZWFuJyxcbiAgICB0aGVtZTogJ2NsZWFuJyxcbiAgICBjbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICBzdGFydEF0OiBudWxsLFxuICAgIGF1dG9wbGF5VmlkZW9zOiB0cnVlLFxuICAgIGF1dG9mb2N1c1ZpZGVvczogdHJ1ZSxcbiAgICBkZXNjUG9zaXRpb246ICdib3R0b20nLFxuICAgIHdpZHRoOiAnOTAwcHgnLFxuICAgIGhlaWdodDogJzUwNnB4JyxcbiAgICB2aWRlb3NXaWR0aDogJzk2MHB4JyxcbiAgICBiZWZvcmVTbGlkZUNoYW5nZTogbnVsbCxcbiAgICBhZnRlclNsaWRlQ2hhbmdlOiBudWxsLFxuICAgIGJlZm9yZVNsaWRlTG9hZDogbnVsbCxcbiAgICBhZnRlclNsaWRlTG9hZDogbnVsbCxcbiAgICBzbGlkZUluc2VydGVkOiBudWxsLFxuICAgIHNsaWRlUmVtb3ZlZDogbnVsbCxcbiAgICBzbGlkZUV4dHJhQXR0cmlidXRlczogbnVsbCxcbiAgICBvbk9wZW46IG51bGwsXG4gICAgb25DbG9zZTogbnVsbCxcbiAgICBsb29wOiBmYWxzZSxcbiAgICB6b29tYWJsZTogdHJ1ZSxcbiAgICBkcmFnZ2FibGU6IHRydWUsXG4gICAgZHJhZ0F1dG9TbmFwOiBmYWxzZSxcbiAgICBkcmFnVG9sZXJhbmNlWDogNDAsXG4gICAgZHJhZ1RvbGVyYW5jZVk6IDY1LFxuICAgIHByZWxvYWQ6IHRydWUsXG4gICAgb25lU2xpZGVQZXJPcGVuOiBmYWxzZSxcbiAgICB0b3VjaE5hdmlnYXRpb246IHRydWUsXG4gICAgdG91Y2hGb2xsb3dBeGlzOiB0cnVlLFxuICAgIGtleWJvYXJkTmF2aWdhdGlvbjogdHJ1ZSxcbiAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgIHBsdWdpbnM6IGZhbHNlLFxuICAgIHBseXI6IHtcbiAgICAgIGNzczogJ2h0dHBzOi8vY2RuLnBseXIuaW8vMy42LjgvcGx5ci5jc3MnLFxuICAgICAganM6ICdodHRwczovL2Nkbi5wbHlyLmlvLzMuNi44L3BseXIuanMnLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgI
24510HJhdGlvOiAnMTY6OScsXG4gICAgICAgIGZ1bGxzY3JlZW46IHtcbiAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIGlvc05hdGl2ZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB5b3V0dWJlOiB7XG4gICAgICAgICAgbm9Db29raWU6IHRydWUsXG4gICAgICAgICAgcmVsOiAwLFxuICAgICAgICAgIHNob3dpbmZvOiAwLFxuICAgICAgICAgIGl2X2xvYWRfcG9saWN5OiAzXG4gICAgICAgIH0sXG4gICAgICAgIHZpbWVvOiB7XG4gICAgICAgICAgYnlsaW5lOiBmYWxzZSxcbiAgICAgICAgICBwb3J0cmFpdDogZmFsc2UsXG4gICAgICAgICAgdGl0bGU6IGZhbHNlLFxuICAgICAgICAgIHRyYW5zcGFyZW50OiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBvcGVuRWZmZWN0OiAnem9vbScsXG4gICAgY2xvc2VFZmZlY3Q6ICd6b29tJyxcbiAgICBzbGlkZUVmZmVjdDogJ3NsaWRlJyxcbiAgICBtb3JlVGV4dDogJ1NlZSBtb3JlJyxcbiAgICBtb3JlTGVuZ3RoOiA2MCxcbiAgICBjc3NFZmVjdHM6IHtcbiAgICAgIGZhZGU6IHtcbiAgICAgICAgXCJpblwiOiAnZmFkZUluJyxcbiAgICAgICAgb3V0OiAnZmFkZU91dCdcbiAgICAgIH0sXG4gICAgICB6b29tOiB7XG4gICAgICAgIFwiaW5cIjogJ3pvb21JbicsXG4gICAgICAgIG91dDogJ3pvb21PdXQnXG4gICAgICB9LFxuICAgICAgc2xpZGU6IHtcbiAgICAgICAgXCJpblwiOiAnc2xpZGVJblJpZ2h0JyxcbiAgICAgICAgb3V0OiAnc2xpZGVPdXRMZWZ0J1xuICAgICAgfSxcbiAgICAgIHNsaWRlQmFjazoge1xuICAgICAgICBcImluXCI6ICdzbGlkZUluTGVmdCcsXG4gICAgICAgIG91dDogJ3NsaWRlT3V0UmlnaHQnXG4gICAgICB9LFxuICAgICAgbm9uZToge1xuICAgICAgICBcImluXCI6ICdub25lJyxcbiAgICAgICAgb3V0OiAnbm9uZSdcbiAgICAgIH1cbiAgICB9LFxuICAgIHN2Zzoge1xuICAgICAgY2xvc2U6ICc8c3ZnIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIgeD1cIjBweFwiIHk9XCIwcHhcIiB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPjxnPjxnPjxwYXRoIGQ9XCJNNTA1Ljk0Myw2LjA1OGMtOC4wNzctOC4wNzctMjEuMTcyLTguMDc3LTI5LjI0OSwwTDYuMDU4LDQ3Ni42OTNjLTguMDc3LDguMDc3LTguMDc3LDIxLjE3MiwwLDI5LjI0OUMxMC4wOTYsNTA5Ljk4MiwxNS4zOSw1MTIsMjAuNjgzLDUxMmM1LjI5MywwLDEwLjU4Ni0yLjAxOSwxNC42MjUtNi4wNTlMNTA1Ljk0MywzNS4zMDZDNTE0LjAxOSwyNy4yMyw1MTQuMDE5LDE0LjEzNSw1MDUuOTQzLDYuMDU4elwiLz48L2c+PC9nPjxnPjxnPjxwYXRoIGQ9XCJNNTA1Ljk0Miw0NzYuNjk0TDM1LjMwNiw2LjA1OWMtOC4wNzYtOC4wNzctMjEuMTcyLTguMDc3LTI5LjI0OCwwYy04LjA3Nyw4LjA3Ni04LjA3NywyMS4xNzEsMCwyOS4yNDhsNDcwLjYzNiw0NzAuNjM2YzQuMDM4LDQuMDM5LDkuMzMyLDYuMDU4LDE0LjYyNSw2LjA1OGM1LjI5MywwLDEwLjU4Ny0yLjAxOSwxNC42MjQtNi4wNTdDNTE0LjAxOCw0OTcuODY2LDUxNC4wMTgsNDg0Ljc3MSw1MDUuOTQyLDQ3Ni42OTR6XCIvPjwvZz48L2c+PC9zdmc+JyxcbiAgICAgIG5leHQ6ICc8c3ZnIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIgeD1cIjBweFwiIHk9XCIwcHhcIiB2aWV3Qm94PVwiMCAwIDQ3Ny4xNzUgNDc3LjE3NVwiIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+IDxnPjxwYXRoIGQ9XCJNMzYwLjczMSwyMjkuMDc1bC0yMjUuMS0yMjUuMWMtNS4zLTUuMy0xMy44LTUuMy0xOS4xLDBzLTUuMywxMy44LDAsMTkuMWwyMTUuNSwyMTUuNWwtMjE1LjUsMjE1LjVjLTUuMyw1LjMtNS4zLDEzLjgsMCwxOS4xYzIuNiwyLjYsNi4xLDQsOS41LDRjMy40LDAsNi45LTEuMyw5LjUtNGwyMjUuMS0yMjUuMUMzNjUuOTMxLDI0Mi44NzUsMzY1LjkzMSwyMzQuMjc1LDM2MC43MzEsMjI5LjA3NXpcIi8+PC9nPjwvc3ZnPicsXG4gICAgICBwcmV2OiAnPHN2ZyB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHg9XCIwcHhcIiB5PVwiMHB4XCIgdmlld0JveD1cIjAgMCA0NzcuMTc1IDQ3Ny4xNzVcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPjxnPjxwYXRoIGQ9XCJNMTQ1LjE4OCwyMzguNTc1bDIxNS41LTIxNS41YzUuMy01LjMsNS4zLTEzLjgsMC0xOS4xcy0xMy44LTUuMy0xOS4xLDBsLTIyNS4xLDIyNS4xYy01LjMsNS4zLTUuMywxMy44LDAsMTkuMWwyMjUuMSwyMjVjMi42LDIuNiw2LjEsNCw5LjUsNHM2LjktMS4zLDkuNS00YzUuMy01LjMsNS4zLTEzLjgsMC0xOS4xTDE0NS4xODgsMjM4LjU3NXpcIi8+PC9nPjwvc3ZnPidcbiAgICB9XG4gIH07XG4gIGRlZmF1bHRzLnNsaWRlSFRNTCA9IFwiPGRpdiBjbGFzcz1cXFwiZ3NsaWRlXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiZ3NsaWRlLWlubmVyLWNvbnRlbnRcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiZ2lubmVyLWNvbnRhaW5lclxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZ3NsaWRlLW1lZGlhXFxcIj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJnc2xpZGUtZGVzY3JpcHRpb25cXFwiPlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJnZGVzYy1pbm5lclxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XFxcImdzbGlkZS10aXRsZVxcXCI+PC9oND5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImdzbGlkZS1kZXNjXFxcIj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuPC9kaXY+XCI7XG4gIGRlZmF1bHRzLmxpZ2h0Ym94SFRNTCA9IFwiPGRpdiBpZD1cXFwiZ2xpZ2h0Ym94LWJvZHlcXFwiIGNsYXNzPVxcXCJnbGlnaHRib3gtY29udGFpbmVyXFxcIiB0YWJpbmRleD1cXFwiLTFcXFwiIHJvbGU9XFxcImRpYWxvZ1xcXCIgYXJpYS1oaWRkZW49XFxcImZhbHNlXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiZ2xvYWRlciB2aXN
24510pYmxlXFxcIj48L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiZ292ZXJsYXlcXFwiPjwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJnY29udGFpbmVyXFxcIj5cXG4gICAgPGRpdiBpZD1cXFwiZ2xpZ2h0Ym94LXNsaWRlclxcXCIgY2xhc3M9XFxcImdzbGlkZXJcXFwiPjwvZGl2PlxcbiAgICA8YnV0dG9uIGNsYXNzPVxcXCJnY2xvc2UgZ2J0blxcXCIgYXJpYS1sYWJlbD1cXFwiQ2xvc2VcXFwiIGRhdGEtdGFib3JkZXI9XFxcIjNcXFwiPntjbG9zZVNWR308L2J1dHRvbj5cXG4gICAgPGJ1dHRvbiBjbGFzcz1cXFwiZ3ByZXYgZ2J0blxcXCIgYXJpYS1sYWJlbD1cXFwiUHJldmlvdXNcXFwiIGRhdGEtdGFib3JkZXI9XFxcIjJcXFwiPntwcmV2U1ZHfTwvYnV0dG9uPlxcbiAgICA8YnV0dG9uIGNsYXNzPVxcXCJnbmV4dCBnYnRuXFxcIiBhcmlhLWxhYmVsPVxcXCJOZXh0XFxcIiBkYXRhLXRhYm9yZGVyPVxcXCIxXFxcIj57bmV4dFNWR308L2J1dHRvbj5cXG48L2Rpdj5cXG48L2Rpdj5cIjtcblxuICB2YXIgR2xpZ2h0Ym94SW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBHbGlnaHRib3hJbml0KCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgR2xpZ2h0Ym94SW5pdCk7XG5cbiAgICAgIHRoaXMuY3VzdG9tT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICB0aGlzLnNldHRpbmdzID0gZXh0ZW5kKGRlZmF1bHRzLCBvcHRpb25zKTtcbiAgICAgIHRoaXMuZWZmZWN0c0NsYXNzZXMgPSB0aGlzLmdldEFuaW1hdGlvbkNsYXNzZXMoKTtcbiAgICAgIHRoaXMudmlkZW9QbGF5ZXJzID0ge307XG4gICAgICB0aGlzLmFwaUV2ZW50cyA9IFtdO1xuICAgICAgdGhpcy5mdWxsRWxlbWVudHNMaXN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgX2NyZWF0ZUNsYXNzKEdsaWdodGJveEluaXQsIFt7XG4gICAgICBrZXk6IFwiaW5pdFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgdmFyIHNlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3RvcigpO1xuXG4gICAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICAgIHRoaXMuYmFzZUV2ZW50cyA9IGFkZEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgICAgIG9uRWxlbWVudDogc2VsZWN0b3IsXG4gICAgICAgICAgICB3aXRoQ2FsbGJhY2s6IGZ1bmN0aW9uIHdpdGhDYWxsYmFjayhlLCB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgIF90aGlzLm9wZW4odGFyZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSB0aGlzLmdldEVsZW1lbnRzKCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIm9wZW5cIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBvcGVuKCkge1xuICAgICAgICB2Y
24510XIgZWxlbWVudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogbnVsbDtcbiAgICAgICAgdmFyIHN0YXJ0QXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudHMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZVNsaWRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcmV2QWN0aXZlU2xpZGVJbmRleCA9IG51bGw7XG4gICAgICAgIHRoaXMucHJldkFjdGl2ZVNsaWRlID0gbnVsbDtcbiAgICAgICAgdmFyIGluZGV4ID0gaXNOdW1iZXIoc3RhcnRBdCkgPyBzdGFydEF0IDogdGhpcy5zZXR0aW5ncy5zdGFydEF0O1xuXG4gICAgICAgIGlmIChpc05vZGUoZWxlbWVudCkpIHtcbiAgICAgICAgICB2YXIgZ2FsbGVyeSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWdhbGxlcnknKTtcblxuICAgICAgICAgIGlmIChnYWxsZXJ5KSB7XG4gICAgICAgICAgICB0aGlzLmZ1bGxFbGVtZW50c0xpc3QgPSB0aGlzLmVsZW1lbnRzO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50cyA9IHRoaXMuZ2V0R2FsbGVyeUVsZW1lbnRzKHRoaXMuZWxlbWVudHMsIGdhbGxlcnkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc05pbChpbmRleCkpIHtcbiAgICAgICAgICAgIGluZGV4ID0gdGhpcy5nZXRFbGVtZW50SW5kZXgoZWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOdW1iZXIoaW5kZXgpKSB7XG4gICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idWlsZCgpO1xuXG4gICAgICAgIGFuaW1hdGVFbGVtZW50KHRoaXMub3ZlcmxheSwgdGhpcy5zZXR0aW5ncy5vcGVuRWZmZWN0ID09ICdub25lJyA/ICdub25lJyA6IHRoaXMuc2V0dGluZ3MuY3NzRWZlY3RzLmZhZGVbXCJpblwiXSk7XG5cbiAgICAgICAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICB2Y
24510XIgc2Nyb2xsQmFyID0gd2luZG93LmlubmVyV2lkdGggLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG5cbiAgICAgICAgaWYgKHNjcm9sbEJhciA+IDApIHtcbiAgICAgICAgICB2YXIgc3R5bGVTaGVldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgICAgc3R5bGVTaGVldC50eXBlID0gJ3RleHQvY3NzJztcbiAgICAgICAgICBzdHlsZVNoZWV0LmNsYXNzTmFtZSA9ICdnY3NzLXN0eWxlcyc7XG4gICAgICAgICAgc3R5bGVTaGVldC5pbm5lclRleHQgPSBcIi5nc2Nyb2xsYmFyLWZpeGVyIHttYXJnaW4tcmlnaHQ6IFwiLmNvbmNhdChzY3JvbGxCYXIsIFwicHh9XCIpO1xuICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVTaGVldCk7XG5cbiAgICAgICAgICBhZGRDbGFzcyhib2R5LCAnZ3Njcm9sbGJhci1maXhlcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkQ2xhc3MoYm9keSwgJ2dsaWdodGJveC1vcGVuJyk7XG5cbiAgICAgICAgYWRkQ2xhc3MoaHRtbCwgJ2dsaWdodGJveC1vcGVuJyk7XG5cbiAgICAgICAgaWYgKGlzTW9iaWxlJDEpIHtcbiAgICAgICAgICBhZGRDbGFzcyhkb2N1bWVudC5ib2R5LCAnZ2xpZ2h0Ym94LW1vYmlsZScpO1xuXG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5zbGlkZUVmZmVjdCA9ICdzbGlkZSc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dTbGlkZShpbmRleCwgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudHMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICBhZGRDbGFzcyh0aGlzLnByZXZCdXR0b24sICdnbGlnaHRib3gtYnV0dG9uLWhpZGRlbicpO1xuXG4gICAgICAgICAgYWRkQ2xhc3ModGhpcy5uZXh0QnV0dG9uLCAnZ2xpZ2h0Ym94LWJ1dHRvbi1oaWRkZW4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLnByZXZCdXR0b24sICdnbGlnaHRib3gtYnV0dG9uLWhpZGRlbicpO1xuXG4gICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5uZXh0QnV0dG9uLCAnZ2xpZ2h0Ym94LWJ1dHRvbi1oaWRkZW4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGlnaHRib3hPcGVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdvcGVuJyk7XG5cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpcy5zZXR0aW5ncy5vbk9wZW4pKSB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5vbk9wZW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1RvdWNoJDEgJiYgdGhpcy5zZXR0aW5ncy50b3VjaE5hdmlnYXRpb24pIHtcbiAgICAgICAgICB0b3VjaE5hdmlnYXRpb24odGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5rZXlib2FyZE5hdmlnYXRpb24pIHtcbiAgICAgICAgICBrZXlib2FyZE5hdmlnYXRpb24odGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwib3BlbkF0XCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gb3BlbkF0KCkge1xuICAgICAgICB2Y
24510XIgaW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IDA7XG4gICAgICAgIHRoaXMub3BlbihudWxsLCBpbmRleCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInNob3dTbGlkZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNob3dTbGlkZSgpIHtcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgdmFyIGluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAwO1xuICAgICAgICB2YXIgZmlyc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gICAgICAgIHNob3codGhpcy5sb2FkZXIpO1xuXG4gICAgICAgIHRoaXMuaW5kZXggPSBwYXJzZUludChpbmRleCk7XG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5zbGlkZXNDb250YWluZXIucXVlcnlTZWxlY3RvcignLmN1cnJlbnQnKTtcblxuICAgICAgICBpZiAoY3VycmVudCkge1xuICAgICAgICAgIHJlbW92ZUNsYXNzKGN1cnJlbnQsICdjdXJyZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNsaWRlQW5pbWF0ZU91dCgpO1xuICAgICAgICB2YXIgc2xpZGVOb2RlID0gdGhpcy5zbGlkZXNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmdzbGlkZScpW2luZGV4XTtcblxuICAgICAgICBpZiAoaGFzQ2xhc3Moc2xpZGVOb2RlLCAnbG9hZGVkJykpIHtcbiAgICAgICAgICB0aGlzLnNsaWRlQW5pbWF0ZUluKHNsaWRlTm9kZSwgZmlyc3QpO1xuXG4gICAgICAgICAgaGlkZSh0aGlzLmxvYWRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2hvdyh0aGlzLmxvYWRlcik7XG5cbiAgICAgICAgICB2Y
24510XIgc2xpZGUgPSB0aGlzLmVsZW1lbnRzW2luZGV4XTtcbiAgICAgICAgICB2YXIgc2xpZGVEYXRhID0ge1xuICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICAgICAgICBzbGlkZTogc2xpZGVOb2RlLFxuICAgICAgICAgICAgc2xpZGVOb2RlOiBzbGlkZU5vZGUsXG4gICAgICAgICAgICBzbGlkZUNvbmZpZzogc2xpZGUuc2xpZGVDb25maWcsXG4gICAgICAgICAgICBzbGlkZUluZGV4OiB0aGlzLmluZGV4LFxuICAgICAgICAgICAgdHJpZ2dlcjogc2xpZGUubm9kZSxcbiAgICAgICAgICAgIHBsYXllcjogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy50cmlnZ2VyKCdzbGlkZV9iZWZvcmVfbG9hZCcsIHNsaWRlRGF0YSk7XG4gICAgICAgICAgc2xpZGUuaW5zdGFuY2Uuc2V0Q29udGVudChzbGlkZU5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGhpZGUoX3RoaXMyLmxvYWRlcik7XG5cbiAgICAgICAgICAgIF90aGlzMi5yZXNpemUoKTtcblxuICAgICAgICAgICAgX3RoaXMyLnNsaWRlQW5pbWF0ZUluKHNsaWRlTm9kZSwgZmlyc3QpO1xuXG4gICAgICAgICAgICBfdGhpczIudHJpZ2dlcignc2xpZGVfYWZ0ZXJfbG9hZCcsIHNsaWRlRGF0YSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNsaWRlRGVzY3JpcHRpb24gPSBzbGlkZU5vZGUucXVlcnlTZWxlY3RvcignLmdzbGlkZS1kZXNjcmlwdGlvbicpO1xuICAgICAgICB0aGlzLnNsaWRlRGVzY3JpcHRpb25Db250YWluZWQgPSB0aGlzLnNsaWRlRGVzY3JpcHRpb24gJiYgaGFzQ2xhc3ModGhpcy5zbGlkZURlc2NyaXB0aW9uLnBhcmVudE5vZGUsICdnc2xpZGUtbWVkaWEnKTtcblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5wcmVsb2FkKSB7XG4gICAgICAgICAgdGhpcy5wcmVsb2FkU2xpZGUoaW5kZXggKyAxKTtcbiAgICAgICAgICB0aGlzLnByZWxvYWRTbGlkZShpbmRleCAtIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uQ2xhc3NlcygpO1xuICAgICAgICB0aGlzLmFjdGl2ZVNsaWRlID0gc2xpZGVOb2RlO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJwcmVsb2FkU2xpZGVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBwcmVsb2FkU2xpZGUoaW5kZXgpIHtcbiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRoaXMuZWxlbWVudHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc05pbCh0aGlzLmVsZW1lbnRzW2luZGV4XSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2Y
24510XIgc2xpZGVOb2RlID0gdGhpcy5zbGlkZXNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmdzbGlkZScpW2luZGV4XTtcblxuICAgICAgICBpZiAoaGFzQ2xhc3Moc2xpZGVOb2RlLCAnbG9hZGVkJykpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2xpZGUgPSB0aGlzLmVsZW1lbnRzW2luZGV4XTtcbiAgICAgICAgdmFyIHR5cGUgPSBzbGlkZS50eXBlO1xuICAgICAgICB2YXIgc2xpZGVEYXRhID0ge1xuICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICBzbGlkZTogc2xpZGVOb2RlLFxuICAgICAgICAgIHNsaWRlTm9kZTogc2xpZGVOb2RlLFxuICAgICAgICAgIHNsaWRlQ29uZmlnOiBzbGlkZS5zbGlkZUNvbmZpZyxcbiAgICAgICAgICBzbGlkZUluZGV4OiBpbmRleCxcbiAgICAgICAgICB0cmlnZ2VyOiBzbGlkZS5ub2RlLFxuICAgICAgICAgIHBsYXllcjogbnVsbFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ3NsaWRlX2JlZm9yZV9sb2FkJywgc2xpZGVEYXRhKTtcblxuICAgICAgICBpZiAodHlwZSA9PSAndmlkZW8nIHx8IHR5cGUgPT0gJ2V4dGVybmFsJykge1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2xpZGUuaW5zdGFuY2Uuc2V0Q29udGVudChzbGlkZU5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgX3RoaXMzLnRyaWdnZXIoJ3NsaWRlX2FmdGVyX2xvYWQnLCBzbGlkZURhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzbGlkZS5pbnN0YW5jZS5zZXRDb250ZW50KHNsaWRlTm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMzLnRyaWdnZXIoJ3NsaWRlX2FmdGVyX2xvYWQnLCBzbGlkZURhdGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInByZXZTbGlkZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHByZXZTbGlkZSgpIHtcbiAgICAgICAgdGhpcy5nb1RvU2xpZGUodGhpcy5pbmRleCAtIDEpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJuZXh0U2xpZGVcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBuZXh0U2xpZGUoKSB7XG4gICAgICAgIHRoaXMuZ29Ub1NsaWRlKHRoaXMuaW5kZXggKyAxKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZ29Ub1NsaWRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ29Ub1NsaWRlKCkge1xuICAgICAgICB2Y
24510XIgaW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgICAgICB0aGlzLnByZXZBY3RpdmVTbGlkZSA9IHRoaXMuYWN0aXZlU2xpZGU7XG4gICAgICAgIHRoaXMucHJldkFjdGl2ZVNsaWRlSW5kZXggPSB0aGlzLmluZGV4O1xuXG4gICAgICAgIGlmICghdGhpcy5sb29wKCkgJiYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRoaXMuZWxlbWVudHMubGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgaW5kZXggPSB0aGlzLmVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPj0gdGhpcy5lbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dTbGlkZShpbmRleCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImluc2VydFNsaWRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaW5zZXJ0U2xpZGUoKSB7XG4gICAgICAgIHZhciBjb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgICAgICB2YXIgaW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IC0xO1xuXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICBpbmRleCA9IHRoaXMuZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNsaWRlID0gbmV3IFNsaWRlKGNvbmZpZywgdGhpcywgaW5kZXgpO1xuICAgICAgICB2Y
24510XIgZGF0YSA9IHNsaWRlLmdldENvbmZpZygpO1xuXG4gICAgICAgIHZhciBzbGlkZUluZm8gPSBleHRlbmQoe30sIGRhdGEpO1xuXG4gICAgICAgIHZhciBuZXdTbGlkZSA9IHNsaWRlLmNyZWF0ZSgpO1xuICAgICAgICB2YXIgdG90YWxTbGlkZXMgPSB0aGlzLmVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgIHNsaWRlSW5mby5pbmRleCA9IGluZGV4O1xuICAgICAgICBzbGlkZUluZm8ubm9kZSA9IGZhbHNlO1xuICAgICAgICBzbGlkZUluZm8uaW5zdGFuY2UgPSBzbGlkZTtcbiAgICAgICAgc2xpZGVJbmZvLnNsaWRlQ29uZmlnID0gZGF0YTtcbiAgICAgICAgdGhpcy5lbGVtZW50cy5zcGxpY2UoaW5kZXgsIDAsIHNsaWRlSW5mbyk7XG4gICAgICAgIHZhciBhZGRlZFNsaWRlTm9kZSA9IG51bGw7XG4gICAgICAgIHZhciBhZGRlZFNsaWRlUGxheWVyID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5zbGlkZXNDb250YWluZXIpIHtcbiAgICAgICAgICBpZiAoaW5kZXggPiB0b3RhbFNsaWRlcykge1xuICAgICAgICAgICAgdGhpcy5zbGlkZXNDb250YWluZXIuYXBwZW5kQ2hpbGQobmV3U2xpZGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZXhpc3RpbmdTbGlkZSA9IHRoaXMuc2xpZGVzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5nc2xpZGUnKVtpbmRleF07XG4gICAgICAgICAgICB0aGlzLnNsaWRlc0NvbnRhaW5lci5pbnNlcnRCZWZvcmUobmV3U2xpZGUsIGV4aXN0aW5nU2xpZGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLnByZWxvYWQgJiYgdGhpcy5pbmRleCA9PSAwICYmIGluZGV4ID09IDAgfHwgdGhpcy5pbmRleCAtIDEgPT0gaW5kZXggfHwgdGhpcy5pbmRleCArIDEgPT0gaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZFNsaWRlKGluZGV4KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5pbmRleCA9PSAwICYmIGluZGV4ID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXggPSAxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvbkNsYXNzZXMoKTtcbiAgICAgICAgICBhZGRlZFNsaWRlTm9kZSA9IHRoaXMuc2xpZGVzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5nc2xpZGUnKVtpbmRleF07XG4gICAgICAgICAgYWRkZWRTbGlkZVBsYXllciA9IHRoaXMuZ2V0U2xpZGVQbGF5ZXJJbnN0YW5jZShpbmRleCk7XG4gICAgICAgICAgc2xpZGVJbmZvLnNsaWRlTm9kZSA9IGFkZGVkU2xpZGVOb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyKCdzbGlkZV9pbnNlcnRlZCcsIHtcbiAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgc2xpZGU6IGFkZGVkU2xpZGVOb2RlLFxuICAgICAgICAgIHNsaWRlTm9kZTogYWRkZWRTbGlkZU5vZGUsXG4gICAgICAgICAgc2xpZGVDb25maWc6IGRhdGEsXG4gICAgICAgICAgc2xpZGVJbmRleDogaW5kZXgsXG4gICAgICAgICAgdHJpZ2dlcjogbnVsbCxcbiAgICAgICAgICBwbGF5ZXI6IGFkZGVkU2xpZGVQbGF5ZXJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpcy5zZXR0aW5ncy5zbGlkZUluc2VydGVkKSkge1xuICAgICAgICAgIHRoaXMuc2V0dGluZ3Muc2xpZGVJbnNlcnRlZCh7XG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICBzbGlkZTogYWRkZWRTbGlkZU5vZGUsXG4gICAgICAgICAgICBwbGF5ZXI6IGFkZGVkU2xpZGVQbGF5ZXJcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJyZW1vdmVTbGlkZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZVNsaWRlKCkge1xuICAgICAgICB2Y
24510XIgaW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IC0xO1xuXG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiB0aGlzLmVsZW1lbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2xpZGUgPSB0aGlzLnNsaWRlc0NvbnRhaW5lciAmJiB0aGlzLnNsaWRlc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuZ3NsaWRlJylbaW5kZXhdO1xuXG4gICAgICAgIGlmIChzbGlkZSkge1xuICAgICAgICAgIGlmICh0aGlzLmdldEFjdGl2ZVNsaWRlSW5kZXgoKSA9PSBpbmRleCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09IHRoaXMuZWxlbWVudHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICB0aGlzLnByZXZTbGlkZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0U2xpZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzbGlkZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNsaWRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWxlbWVudHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdzbGlkZV9yZW1vdmVkJywgaW5kZXgpO1xuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXMuc2V0dGluZ3Muc2xpZGVSZW1vdmVkKSkge1xuICAgICAgICAgIHRoaXMuc2V0dGluZ3Muc2xpZGVSZW1vdmVkKGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJzbGlkZUFuaW1hdGVJblwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNsaWRlQW5pbWF0ZUluKHNsaWRlLCBmaXJzdCkge1xuICAgICAgICB2Y
24510XIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgICB2YXIgc2xpZGVNZWRpYSA9IHNsaWRlLnF1ZXJ5U2VsZWN0b3IoJy5nc2xpZGUtbWVkaWEnKTtcbiAgICAgICAgdmFyIHNsaWRlRGVzYyA9IHNsaWRlLnF1ZXJ5U2VsZWN0b3IoJy5nc2xpZGUtZGVzY3JpcHRpb24nKTtcbiAgICAgICAgdmFyIHByZXZEYXRhID0ge1xuICAgICAgICAgIGluZGV4OiB0aGlzLnByZXZBY3RpdmVTbGlkZUluZGV4LFxuICAgICAgICAgIHNsaWRlOiB0aGlzLnByZXZBY3RpdmVTbGlkZSxcbiAgICAgICAgICBzbGlkZU5vZGU6IHRoaXMucHJldkFjdGl2ZVNsaWRlLFxuICAgICAgICAgIHNsaWRlSW5kZXg6IHRoaXMucHJldkFjdGl2ZVNsaWRlLFxuICAgICAgICAgIHNsaWRlQ29uZmlnOiBpc05pbCh0aGlzLnByZXZBY3RpdmVTbGlkZUluZGV4KSA/IG51bGwgOiB0aGlzLmVsZW1lbnRzW3RoaXMucHJldkFjdGl2ZVNsaWRlSW5kZXhdLnNsaWRlQ29uZmlnLFxuICAgICAgICAgIHRyaWdnZXI6IGlzTmlsKHRoaXMucHJldkFjdGl2ZVNsaWRlSW5kZXgpID8gbnVsbCA6IHRoaXMuZWxlbWVudHNbdGhpcy5wcmV2QWN0aXZlU2xpZGVJbmRleF0ubm9kZSxcbiAgICAgICAgICBwbGF5ZXI6IHRoaXMuZ2V0U2xpZGVQbGF5ZXJJbnN0YW5jZSh0aGlzLnByZXZBY3RpdmVTbGlkZUluZGV4KVxuICAgICAgICB9O1xuICAgICAgICB2YXIgbmV4dERhdGEgPSB7XG4gICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICAgICAgc2xpZGU6IHRoaXMuYWN0aXZlU2xpZGUsXG4gICAgICAgICAgc2xpZGVOb2RlOiB0aGlzLmFjdGl2ZVNsaWRlLFxuICAgICAgICAgIHNsaWRlQ29uZmlnOiB0aGlzLmVsZW1lbnRzW3RoaXMuaW5kZXhdLnNsaWRlQ29uZmlnLFxuICAgICAgICAgIHNsaWRlSW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICAgICAgdHJpZ2dlcjogdGhpcy5lbGVtZW50c1t0aGlzLmluZGV4XS5ub2RlLFxuICAgICAgICAgIHBsYXllcjogdGhpcy5nZXRTbGlkZVBsYXllckluc3RhbmNlKHRoaXMuaW5kZXgpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHNsaWRlTWVkaWEub2Zmc2V0V2lkdGggPiAwICYmIHNsaWRlRGVzYykge1xuICAgICAgICAgIGhpZGUoc2xpZGVEZXNjKTtcblxuICAgICAgICAgIHNsaWRlRGVzYy5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmVDbGFzcyhzbGlkZSwgdGhpcy5lZmZlY3RzQ2xhc3Nlcyk7XG5cbiAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgYW5pbWF0ZUVsZW1lbnQoc2xpZGUsIHRoaXMuc2V0dGluZ3MuY3NzRWZlY3RzW3RoaXMuc2V0dGluZ3Mub3BlbkVmZmVjdF1bXCJpblwiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKF90aGlzNC5zZXR0aW5ncy5hdXRvcGxheVZpZGVvcykge1xuICAgICAgICAgICAgICBfdGhpczQuc2xpZGVQbGF5ZXJQbGF5KHNsaWRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX3RoaXM0LnRyaWdnZXIoJ3NsaWRlX2NoYW5nZWQnLCB7XG4gICAgICAgICAgICAgIHByZXY6IHByZXZEYXRhLFxuICAgICAgICAgICAgICBjdXJyZW50OiBuZXh0RGF0YVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKF90aGlzNC5zZXR0aW5ncy5hZnRlclNsaWRlQ2hhbmdlKSkge1xuICAgICAgICAgICAgICBfdGhpczQuc2V0dGluZ3MuYWZ0ZXJTbGlkZUNoYW5nZS5hcHBseShfdGhpczQsIFtwcmV2RGF0YSwgbmV4dERhdGFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2Y
24510XIgZWZmZWN0TmFtZSA9IHRoaXMuc2V0dGluZ3Muc2xpZGVFZmZlY3Q7XG4gICAgICAgICAgdmFyIGFuaW1JbiA9IGVmZmVjdE5hbWUgIT09ICdub25lJyA/IHRoaXMuc2V0dGluZ3MuY3NzRWZlY3RzW2VmZmVjdE5hbWVdW1wiaW5cIl0gOiBlZmZlY3ROYW1lO1xuXG4gICAgICAgICAgaWYgKHRoaXMucHJldkFjdGl2ZVNsaWRlSW5kZXggPiB0aGlzLmluZGV4KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5zbGlkZUVmZmVjdCA9PSAnc2xpZGUnKSB7XG4gICAgICAgICAgICAgIGFuaW1JbiA9IHRoaXMuc2V0dGluZ3MuY3NzRWZlY3RzLnNsaWRlQmFja1tcImluXCJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGFuaW1hdGVFbGVtZW50KHNsaWRlLCBhbmltSW4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChfdGhpczQuc2V0dGluZ3MuYXV0b3BsYXlWaWRlb3MpIHtcbiAgICAgICAgICAgICAgX3RoaXM0LnNsaWRlUGxheWVyUGxheShzbGlkZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF90aGlzNC50cmlnZ2VyKCdzbGlkZV9jaGFuZ2VkJywge1xuICAgICAgICAgICAgICBwcmV2OiBwcmV2RGF0YSxcbiAgICAgICAgICAgICAgY3VycmVudDogbmV4dERhdGFcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihfdGhpczQuc2V0dGluZ3MuYWZ0ZXJTbGlkZUNoYW5nZSkpIHtcbiAgICAgICAgICAgICAgX3RoaXM0LnNldHRpbmdzLmFmdGVyU2xpZGVDaGFuZ2UuYXBwbHkoX3RoaXM0LCBbcHJldkRhdGEsIG5leHREYXRhXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczQucmVzaXplKHNsaWRlKTtcbiAgICAgICAgfSwgMTAwKTtcblxuICAgICAgICBhZGRDbGFzcyhzbGlkZSwgJ2N1cnJlbnQnKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwic2xpZGVBbmltYXRlT3V0XCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2xpZGVBbmltYXRlT3V0KCkge1xuICAgICAgICBpZiAoIXRoaXMucHJldkFjdGl2ZVNsaWRlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByZXZTbGlkZSA9IHRoaXMucHJldkFjdGl2ZVNsaWRlO1xuXG4gICAgICAgIHJlbW92ZUNsYXNzKHByZXZTbGlkZSwgdGhpcy5lZmZlY3RzQ2xhc3Nlcyk7XG5cbiAgICAgICAgYWRkQ2xhc3MocHJldlNsaWRlLCAncHJldicpO1xuXG4gICAgICAgIHZhciBhbmltYXRpb24gPSB0aGlzLnNldHRpbmdzLnNsaWRlRWZmZWN0O1xuICAgICAgICB2Y
24510XIgYW5pbU91dCA9IGFuaW1hdGlvbiAhPT0gJ25vbmUnID8gdGhpcy5zZXR0aW5ncy5jc3NFZmVjdHNbYW5pbWF0aW9uXS5vdXQgOiBhbmltYXRpb247XG4gICAgICAgIHRoaXMuc2xpZGVQbGF5ZXJQYXVzZShwcmV2U2xpZGUpO1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ3NsaWRlX2JlZm9yZV9jaGFuZ2UnLCB7XG4gICAgICAgICAgcHJldjoge1xuICAgICAgICAgICAgaW5kZXg6IHRoaXMucHJldkFjdGl2ZVNsaWRlSW5kZXgsXG4gICAgICAgICAgICBzbGlkZTogdGhpcy5wcmV2QWN0aXZlU2xpZGUsXG4gICAgICAgICAgICBzbGlkZU5vZGU6IHRoaXMucHJldkFjdGl2ZVNsaWRlLFxuICAgICAgICAgICAgc2xpZGVJbmRleDogdGhpcy5wcmV2QWN0aXZlU2xpZGVJbmRleCxcbiAgICAgICAgICAgIHNsaWRlQ29uZmlnOiBpc05pbCh0aGlzLnByZXZBY3RpdmVTbGlkZUluZGV4KSA/IG51bGwgOiB0aGlzLmVsZW1lbnRzW3RoaXMucHJldkFjdGl2ZVNsaWRlSW5kZXhdLnNsaWRlQ29uZmlnLFxuICAgICAgICAgICAgdHJpZ2dlcjogaXNOaWwodGhpcy5wcmV2QWN0aXZlU2xpZGVJbmRleCkgPyBudWxsIDogdGhpcy5lbGVtZW50c1t0aGlzLnByZXZBY3RpdmVTbGlkZUluZGV4XS5ub2RlLFxuICAgICAgICAgICAgcGxheWVyOiB0aGlzLmdldFNsaWRlUGxheWVySW5zdGFuY2UodGhpcy5wcmV2QWN0aXZlU2xpZGVJbmRleClcbiAgICAgICAgICB9LFxuICAgICAgICAgIGN1cnJlbnQ6IHtcbiAgICAgICAgICAgIGluZGV4OiB0aGlzLmluZGV4LFxuICAgICAgICAgICAgc2xpZGU6IHRoaXMuYWN0aXZlU2xpZGUsXG4gICAgICAgICAgICBzbGlkZU5vZGU6IHRoaXMuYWN0aXZlU2xpZGUsXG4gICAgICAgICAgICBzbGlkZUluZGV4OiB0aGlzLmluZGV4LFxuICAgICAgICAgICAgc2xpZGVDb25maWc6IHRoaXMuZWxlbWVudHNbdGhpcy5pbmRleF0uc2xpZGVDb25maWcsXG4gICAgICAgICAgICB0cmlnZ2VyOiB0aGlzLmVsZW1lbnRzW3RoaXMuaW5kZXhdLm5vZGUsXG4gICAgICAgICAgICBwbGF5ZXI6IHRoaXMuZ2V0U2xpZGVQbGF5ZXJJbnN0YW5jZSh0aGlzLmluZGV4KVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpcy5zZXR0aW5ncy5iZWZvcmVTbGlkZUNoYW5nZSkpIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLmJlZm9yZVNsaWRlQ2hhbmdlLmFwcGx5KHRoaXMsIFt7XG4gICAgICAgICAgICBpbmRleDogdGhpcy5wcmV2QWN0aXZlU2xpZGVJbmRleCxcbiAgICAgICAgICAgIHNsaWRlOiB0aGlzLnByZXZBY3RpdmVTbGlkZSxcbiAgICAgICAgICAgIHBsYXllcjogdGhpcy5nZXRTbGlkZVBsYXllckluc3RhbmNlKHRoaXMucHJldkFjdGl2ZVNsaWRlSW5kZXgpXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICAgICAgICBzbGlkZTogdGhpcy5hY3RpdmVTbGlkZSxcbiAgICAgICAgICAgIHBsYXllcjogdGhpcy5nZXRTbGlkZVBsYXllckluc3RhbmNlKHRoaXMuaW5kZXgpXG4gICAgICAgICAgfV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucHJldkFjdGl2ZVNsaWRlSW5kZXggPiB0aGlzLmluZGV4ICYmIHRoaXMuc2V0dGluZ3Muc2xpZGVFZmZlY3QgPT0gJ3NsaWRlJykge1xuICAgICAgICAgIGFuaW1PdXQgPSB0aGlzLnNldHRpbmdzLmNzc0VmZWN0cy5zbGlkZUJhY2sub3V0O1xuICAgICAgICB9XG5cbiAgICAgICAgYW5pbWF0ZUVsZW1lbnQocHJldlNsaWRlLCBhbmltT3V0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHByZXZTbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ2lubmVyLWNvbnRhaW5lcicpO1xuICAgICAgICAgIHZhciBtZWRpYSA9IHByZXZTbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3NsaWRlLW1lZGlhJyk7XG4gICAgICAgICAgdmFyIGRlc2MgPSBwcmV2U2xpZGUucXVlcnlTZWxlY3RvcignLmdzbGlkZS1kZXNjcmlwdGlvbicpO1xuICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSAnJztcbiAgICAgICAgICBtZWRpYS5zdHlsZS50cmFuc2Zvcm0gPSAnJztcblxuICAgICAgICAgIHJlbW92ZUNsYXNzKG1lZGlhLCAnZ3Jlc2V0Jyk7XG5cbiAgICAgICAgICBtZWRpYS5zdHlsZS5vcGFjaXR5ID0gJyc7XG5cbiAgICAgICAgICBpZiAoZGVzYykge1xuICAgICAgICAgICAgZGVzYy5zdHlsZS5vcGFjaXR5ID0gJyc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVtb3ZlQ2xhc3MocHJldlNsaWRlLCAncHJldicpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZ2V0QWxsUGxheWVyc1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEFsbFBsYXllcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZGVvUGxheWVycztcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZ2V0U2xpZGVQbGF5ZXJJbnN0YW5jZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFNsaWRlUGxheWVySW5zdGFuY2UoaW5kZXgpIHtcbiAgICAgICAgdmFyIGlkID0gJ2d2aWRlbycgKyBpbmRleDtcbiAgICAgICAgdmFyIHZpZGVvUGxheWVycyA9IHRoaXMuZ2V0QWxsUGxheWVycygpO1xuXG4gICAgICAgIGlmIChoYXModmlkZW9QbGF5ZXJzLCBpZCkgJiYgdmlkZW9QbGF5ZXJzW2lkXSkge1xuICAgICAgICAgIHJldHVybiB2aWRlb1BsYXllcnNbaWRdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJzdG9wU2xpZGVWaWRlb1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN0b3BTbGlkZVZpZGVvKHNsaWRlKSB7XG4gICAgICAgIGlmIChpc05vZGUoc2xpZGUpKSB7XG4gICAgICAgICAgdmFyIG5vZGUgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3ZpZGVvLXdyYXBwZXInKTtcblxuICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBzbGlkZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWluZGV4Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJ3N0b3BTbGlkZVZpZGVvIGlzIGRlcHJlY2F0ZWQsIHVzZSBzbGlkZVBsYXllclBhdXNlJyk7XG4gICAgICAgI
24510HZhciBwbGF5ZXIgPSB0aGlzLmdldFNsaWRlUGxheWVySW5zdGFuY2Uoc2xpZGUpO1xuXG4gICAgICAgIGlmIChwbGF5ZXIgJiYgcGxheWVyLnBsYXlpbmcpIHtcbiAgICAgICAgICBwbGF5ZXIucGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJzbGlkZVBsYXllclBhdXNlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2xpZGVQbGF5ZXJQYXVzZShzbGlkZSkge1xuICAgICAgICBpZiAoaXNOb2RlKHNsaWRlKSkge1xuICAgICAgICAgIHZhciBub2RlID0gc2xpZGUucXVlcnlTZWxlY3RvcignLmd2aWRlby13cmFwcGVyJyk7XG5cbiAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgc2xpZGUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1pbmRleCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwbGF5ZXIgPSB0aGlzLmdldFNsaWRlUGxheWVySW5zdGFuY2Uoc2xpZGUpO1xuXG4gICAgICAgIGlmIChwbGF5ZXIgJiYgcGxheWVyLnBsYXlpbmcpIHtcbiAgICAgICAgICBwbGF5ZXIucGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJwbGF5U2xpZGVWaWRlb1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBsYXlTbGlkZVZpZGVvKHNsaWRlKSB7XG4gICAgICAgIGlmIChpc05vZGUoc2xpZGUpKSB7XG4gICAgICAgICAgdmFyIG5vZGUgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3ZpZGVvLXdyYXBwZXInKTtcblxuICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBzbGlkZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWluZGV4Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJ3BsYXlTbGlkZVZpZGVvIGlzIGRlcHJlY2F0ZWQsIHVzZSBzbGlkZVBsYXllclBsYXknKTtcbiAgICAgICAgdmFyIHBsYXllciA9IHRoaXMuZ2V0U2xpZGVQbGF5ZXJJbnN0YW5jZShzbGlkZSk7XG5cbiAgICAgICAgaWYgKHBsYXllciAmJiAhcGxheWVyLnBsYXlpbmcpIHtcbiAgICAgICAgICBwbGF5ZXIucGxheSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInNsaWRlUGxheWVyUGxheVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNsaWRlUGxheWVyUGxheShzbGlkZSkge1xuICAgICAgICBpZiAoaXNOb2RlKHNsaWRlKSkge1xuICAgICAgICAgIHZhciBub2RlID0gc2xpZGUucXVlcnlTZWxlY3RvcignLmd2aWRlby13cmFwcGVyJyk7XG5cbiAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgc2xpZGUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1pbmRleCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwbGF5ZXIgPSB0aGlzLmdldFNsaWRlUGxheWVySW5zdGFuY2Uoc2xpZGUpO1xuXG4gICAgICAgIGlmIChwbGF5ZXIgJiYgIXBsYXllci5wbGF5aW5nKSB7XG4gICAgICAgICAgcGxheWVyLnBsYXkoKTtcblxuICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmF1dG9mb2N1c1ZpZGVvcykge1xuICAgICAgICAgICAgcGxheWVyLmVsZW1lbnRzLmNvbnRhaW5lci5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJzZXRFbGVtZW50c1wiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldEVsZW1lbnRzKGVsZW1lbnRzKSB7XG4gICAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZWxlbWVudHMgPSBmYWxzZTtcbiAgICAgICAgdmFyIG5ld0VsZW1lbnRzID0gW107XG5cbiAgICAgICAgaWYgKGVsZW1lbnRzICYmIGVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgIGVhY2goZWxlbWVudHMsIGZ1bmN0aW9uIChlbCwgaSkge1xuICAgICAgICAgICAgdmFyIHNsaWRlID0gbmV3IFNsaWRlKGVsLCBfdGhpczUsIGkpO1xuICAgICAgICAgICAgdmFyIGRhdGEgPSBzbGlkZS5nZXRDb25maWcoKTtcblxuICAgICAgICAgICAgdmFyIHNsaWRlSW5mbyA9IGV4dGVuZCh7fSwgZGF0YSk7XG5cbiAgICAgICAgICAgIHNsaWRlSW5mby5zbGlkZUNvbmZpZyA9IGRhdGE7XG4gICAgICAgICAgICBzbGlkZUluZm8uaW5zdGFuY2UgPSBzbGlkZTtcbiAgICAgICAgICAgIHNsaWRlSW5mby5pbmRleCA9IGk7XG4gICAgICAgICAgICBuZXdFbGVtZW50cy5wdXNoKHNsaWRlSW5mbyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVsZW1lbnRzID0gbmV3RWxlbWVudHM7XG5cbiAgICAgICAgaWYgKHRoaXMubGlnaHRib3hPcGVuKSB7XG4gICAgICAgICAgdGhpcy5zbGlkZXNDb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG5cbiAgICAgICAgICBpZiAodGhpcy5lbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGVhY2godGhpcy5lbGVtZW50cywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2Y
24510XIgc2xpZGUgPSBjcmVhdGVIVE1MKF90aGlzNS5zZXR0aW5ncy5zbGlkZUhUTUwpO1xuXG4gICAgICAgICAgICAgIF90aGlzNS5zbGlkZXNDb250YWluZXIuYXBwZW5kQ2hpbGQoc2xpZGUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuc2hvd1NsaWRlKDAsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJnZXRFbGVtZW50SW5kZXhcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRFbGVtZW50SW5kZXgobm9kZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBmYWxzZTtcblxuICAgICAgICBlYWNoKHRoaXMuZWxlbWVudHMsIGZ1bmN0aW9uIChlbCwgaSkge1xuICAgICAgICAgIGlmIChoYXMoZWwsICdub2RlJykgJiYgZWwubm9kZSA9PSBub2RlKSB7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiZ2V0RWxlbWVudHNcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRFbGVtZW50cygpIHtcbiAgICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICAgICAgdmFyIGxpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IHRoaXMuZWxlbWVudHMgPyB0aGlzLmVsZW1lbnRzIDogW107XG5cbiAgICAgICAgaWYgKCFpc05pbCh0aGlzLnNldHRpbmdzLmVsZW1lbnRzKSAmJiBpc0FycmF5KHRoaXMuc2V0dGluZ3MuZWxlbWVudHMpICYmIHRoaXMuc2V0dGluZ3MuZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgZWFjaCh0aGlzLnNldHRpbmdzLmVsZW1lbnRzLCBmdW5jdGlvbiAoZWwsIGkpIHtcbiAgICAgICAgICAgIHZhciBzbGlkZSA9IG5ldyBTbGlkZShlbCwgX3RoaXM2LCBpKTtcbiAgICAgICAgICAgIHZhciBlbERhdGEgPSBzbGlkZS5nZXRDb25maWcoKTtcblxuICAgICAgICAgICAgdmFyIHNsaWRlSW5mbyA9IGV4dGVuZCh7fSwgZWxEYXRhKTtcblxuICAgICAgICAgICAgc2xpZGVJbmZvLm5vZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHNsaWRlSW5mby5pbmRleCA9IGk7XG4gICAgICAgICAgICBzbGlkZUluZm8uaW5zdGFuY2UgPSBzbGlkZTtcbiAgICAgICAgICAgIHNsaWRlSW5mby5zbGlkZUNvbmZpZyA9IGVsRGF0YTtcbiAgICAgICAgICAgIGxpc3QucHVzaChzbGlkZUluZm8pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5vZGVzID0gZmFsc2U7XG4gICAgICAgIHZhciBzZWxlY3RvciA9IHRoaXMuZ2V0U2VsZWN0b3IoKTtcblxuICAgICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgICBub2RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5nZXRTZWxlY3RvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbm9kZXMpIHtcbiAgICAgICAgICByZXR1cm4gbGlzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhY2gobm9kZXMsIGZ1bmN0aW9uIChlbCwgaSkge1xuICAgICAgICAgIHZhciBzbGlkZSA9IG5ldyBTbGlkZShlbCwgX3RoaXM2LCBpKTtcbiAgICAgICAgICB2Y
24510XIgZWxEYXRhID0gc2xpZGUuZ2V0Q29uZmlnKCk7XG5cbiAgICAgICAgICB2YXIgc2xpZGVJbmZvID0gZXh0ZW5kKHt9LCBlbERhdGEpO1xuXG4gICAgICAgICAgc2xpZGVJbmZvLm5vZGUgPSBlbDtcbiAgICAgICAgICBzbGlkZUluZm8uaW5kZXggPSBpO1xuICAgICAgICAgIHNsaWRlSW5mby5pbnN0YW5jZSA9IHNsaWRlO1xuICAgICAgICAgIHNsaWRlSW5mby5zbGlkZUNvbmZpZyA9IGVsRGF0YTtcbiAgICAgICAgICBzbGlkZUluZm8uZ2FsbGVyeSA9IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1nYWxsZXJ5Jyk7XG4gICAgICAgICAgbGlzdC5wdXNoKHNsaWRlSW5mbyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBsaXN0O1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJnZXRHYWxsZXJ5RWxlbWVudHNcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRHYWxsZXJ5RWxlbWVudHMobGlzdCwgZ2FsbGVyeSkge1xuICAgICAgICByZXR1cm4gbGlzdC5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgcmV0dXJuIGVsLmdhbGxlcnkgPT0gZ2FsbGVyeTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImdldFNlbGVjdG9yXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U2VsZWN0b3IoKSB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmVsZW1lbnRzKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3Muc2VsZWN0b3IgJiYgdGhpcy5zZXR0aW5ncy5zZWxlY3Rvci5zdWJzdHJpbmcoMCwgNSkgPT0gJ2RhdGEtJykge1xuICAgICAgICAgIHJldHVybiBcIipbXCIuY29uY2F0KHRoaXMuc2V0dGluZ3Muc2VsZWN0b3IsIFwiXVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnNlbGVjdG9yO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJnZXRBY3RpdmVTbGlkZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEFjdGl2ZVNsaWRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zbGlkZXNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmdzbGlkZScpW3RoaXMuaW5kZXhdO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJnZXRBY3RpdmVTbGlkZUluZGV4XCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QWN0aXZlU2xpZGVJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXg7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImdldEFuaW1hdGlvbkNsYXNzZXNcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBbmltYXRpb25DbGFzc2VzKCkge1xuICAgICAgICB2Y
24510XIgZWZmZWN0cyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnNldHRpbmdzLmNzc0VmZWN0cykge1xuICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmNzc0VmZWN0cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICB2YXIgZWZmZWN0ID0gdGhpcy5zZXR0aW5ncy5jc3NFZmVjdHNba2V5XTtcbiAgICAgICAgICAgIGVmZmVjdHMucHVzaChcImdcIi5jb25jYXQoZWZmZWN0W1wiaW5cIl0pKTtcbiAgICAgICAgICAgIGVmZmVjdHMucHVzaChcImdcIi5jb25jYXQoZWZmZWN0Lm91dCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlZmZlY3RzLmpvaW4oJyAnKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiYnVpbGRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZCgpIHtcbiAgICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHRoaXMuYnVpbHQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkb2N1bWVudC5ib2R5LmNoaWxkTm9kZXM7XG4gICAgICAgIHZhciBib2R5Q2hpbGRFbG1zID0gW107XG5cbiAgICAgICAgZWFjaChjaGlsZHJlbiwgZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgaWYgKGVsLnBhcmVudE5vZGUgPT0gZG9jdW1lbnQuYm9keSAmJiBlbC5ub2RlTmFtZS5jaGFyQXQoMCkgIT09ICcjJyAmJiBlbC5oYXNBdHRyaWJ1dGUgJiYgIWVsLmhhc0F0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKSkge1xuICAgICAgICAgICAgYm9keUNoaWxkRWxtcy5wdXNoKGVsKTtcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIG5leHRTVkcgPSBoYXModGhpcy5zZXR0aW5ncy5zdmcsICduZXh0JykgPyB0aGlzLnNldHRpbmdzLnN2Zy5uZXh0IDogJyc7XG4gICAgICAgIHZhciBwcmV2U1ZHID0gaGFzKHRoaXMuc2V0dGluZ3Muc3ZnLCAncHJldicpID8gdGhpcy5zZXR0aW5ncy5zdmcucHJldiA6ICcnO1xuICAgICAgICB2Y
24510XIgY2xvc2VTVkcgPSBoYXModGhpcy5zZXR0aW5ncy5zdmcsICdjbG9zZScpID8gdGhpcy5zZXR0aW5ncy5zdmcuY2xvc2UgOiAnJztcbiAgICAgICAgdmFyIGxpZ2h0Ym94SFRNTCA9IHRoaXMuc2V0dGluZ3MubGlnaHRib3hIVE1MO1xuICAgICAgICBsaWdodGJveEhUTUwgPSBsaWdodGJveEhUTUwucmVwbGFjZSgve25leHRTVkd9L2csIG5leHRTVkcpO1xuICAgICAgICBsaWdodGJveEhUTUwgPSBsaWdodGJveEhUTUwucmVwbGFjZSgve3ByZXZTVkd9L2csIHByZXZTVkcpO1xuICAgICAgICBsaWdodGJveEhUTUwgPSBsaWdodGJveEhUTUwucmVwbGFjZSgve2Nsb3NlU1ZHfS9nLCBjbG9zZVNWRyk7XG4gICAgICAgIGxpZ2h0Ym94SFRNTCA9IGNyZWF0ZUhUTUwobGlnaHRib3hIVE1MKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaWdodGJveEhUTUwpO1xuICAgICAgICB2YXIgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2xpZ2h0Ym94LWJvZHknKTtcbiAgICAgICAgdGhpcy5tb2RhbCA9IG1vZGFsO1xuICAgICAgICB2YXIgY2xvc2VCdXR0b24gPSBtb2RhbC5xdWVyeVNlbGVjdG9yKCcuZ2Nsb3NlJyk7XG4gICAgICAgIHRoaXMucHJldkJ1dHRvbiA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJy5ncHJldicpO1xuICAgICAgICB0aGlzLm5leHRCdXR0b24gPSBtb2RhbC5xdWVyeVNlbGVjdG9yKCcuZ25leHQnKTtcbiAgICAgICAgdGhpcy5vdmVybGF5ID0gbW9kYWwucXVlcnlTZWxlY3RvcignLmdvdmVybGF5Jyk7XG4gICAgICAgIHRoaXMubG9hZGVyID0gbW9kYWwucXVlcnlTZWxlY3RvcignLmdsb2FkZXInKTtcbiAgICAgICAgdGhpcy5zbGlkZXNDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2xpZ2h0Ym94LXNsaWRlcicpO1xuICAgICAgICB0aGlzLmJvZHlIaWRkZW5DaGlsZEVsbXMgPSBib2R5Q2hpbGRFbG1zO1xuICAgICAgICB0aGlzLmV2ZW50cyA9IHt9O1xuXG4gICAgICAgIGFkZENsYXNzKHRoaXMubW9kYWwsICdnbGlnaHRib3gtJyArIHRoaXMuc2V0dGluZ3Muc2tpbik7XG5cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuY2xvc2VCdXR0b24gJiYgY2xvc2VCdXR0b24pIHtcbiAgICAgICAgICB0aGlzLmV2ZW50c1snY2xvc2UnXSA9IGFkZEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgICAgIG9uRWxlbWVudDogY2xvc2VCdXR0b24sXG4gICAgICAgICAgICB3aXRoQ2FsbGJhY2s6IGZ1bmN0aW9uIHdpdGhDYWxsYmFjayhlLCB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgIF90aGlzNy5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsb3NlQnV0dG9uICYmICF0aGlzLnNldHRpbmdzLmNsb3NlQnV0dG9uKSB7XG4gICAgICAgICAgY2xvc2VCdXR0b24ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjbG9zZUJ1dHRvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5uZXh0QnV0dG9uKSB7XG4gICAgICAgICAgdGhpcy5ldmVudHNbJ25leHQnXSA9IGFkZEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgICAgIG9uRWxlbWVudDogdGhpcy5uZXh0QnV0dG9uLFxuICAgICAgICAgICAgd2l0aENhbGxiYWNrOiBmdW5jdGlvbiB3aXRoQ2FsbGJhY2soZSwgdGFyZ2V0KSB7XG4gICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICBfdGhpczcubmV4dFNsaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wcmV2QnV0dG9uKSB7XG4gICAgICAgICAgdGhpcy5ldmVudHNbJ3ByZXYnXSA9IGFkZEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgICAgIG9uRWxlbWVudDogdGhpcy5wcmV2QnV0dG9uLFxuICAgICAgICAgICAgd2l0aENhbGxiYWNrOiBmdW5jdGlvbiB3aXRoQ2FsbGJhY2soZSwgdGFyZ2V0KSB7XG4gICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICBfdGhpczcucHJldlNsaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5jbG9zZU9uT3V0c2lkZUNsaWNrKSB7XG4gICAgICAgICAgdGhpcy5ldmVudHNbJ291dENsb3NlJ10gPSBhZGRFdmVudCgnY2xpY2snLCB7XG4gICAgICAgICAgICBvbkVsZW1lbnQ6IG1vZGFsLFxuICAgICAgICAgICAgd2l0aENhbGxiYWNrOiBmdW5jdGlvbiB3aXRoQ2FsbGJhY2soZSwgdGFyZ2V0KSB7XG4gICAgICAgICAgICAgIGlmICghX3RoaXM3LnByZXZlbnRPdXRzaWRlQ2xpY2sgJiYgIWhhc0NsYXNzKGRvY3VtZW50LmJvZHksICdnbGlnaHRib3gtbW9iaWxlJykgJiYgIWNsb3Nlc3QoZS50YXJnZXQsICcuZ2lubmVyLWNvbnRhaW5lcicpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjbG9zZXN0KGUudGFyZ2V0LCAnLmdidG4nKSAmJiAhaGFzQ2xhc3MoZS50YXJnZXQsICdnbmV4dCcpICYmICFoYXNDbGFzcyhlLnRhcmdldCwgJ2dwcmV2JykpIHtcbiAgICAgICAgICAgICAgICAgIF90aGlzNy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZWFjaCh0aGlzLmVsZW1lbnRzLCBmdW5jdGlvbiAoc2xpZGUsIGkpIHtcbiAgICAgICAgICBfdGhpczcuc2xpZGVzQ29udGFpbmVyLmFwcGVuZENoaWxkKHNsaWRlLmluc3RhbmNlLmNyZWF0ZSgpKTtcblxuICAgICAgICAgIHNsaWRlLnNsaWRlTm9kZSA9IF90aGlzNy5zbGlkZXNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmdzbGlkZScpW2ldO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaXNUb3VjaCQxKSB7XG4gICAgICAgICAgYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgJ2dsaWdodGJveC10b3VjaCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ldmVudHNbJ3Jlc2l6ZSddID0gYWRkRXZlbnQoJ3Jlc2l6ZScsIHtcbiAgICAgICAgICBvbkVsZW1lbnQ6IHdpbmRvdyxcbiAgICAgICAgICB3aXRoQ2FsbGJhY2s6IGZ1bmN0aW9uIHdpdGhDYWxsYmFjaygpIHtcbiAgICAgICAgICAgIF90aGlzNy5yZXNpemUoKTtcbiAgICAgICAgICB9XG4gICAgICAgI
24510H0pO1xuICAgICAgICB0aGlzLmJ1aWx0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwicmVzaXplXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVzaXplKCkge1xuICAgICAgICB2YXIgc2xpZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG4gICAgICAgIHNsaWRlID0gIXNsaWRlID8gdGhpcy5hY3RpdmVTbGlkZSA6IHNsaWRlO1xuXG4gICAgICAgIGlmICghc2xpZGUgfHwgaGFzQ2xhc3Moc2xpZGUsICd6b29tZWQnKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3aW5TaXplID0gd2luZG93U2l6ZSgpO1xuXG4gICAgICAgIHZhciB2aWRlbyA9IHNsaWRlLnF1ZXJ5U2VsZWN0b3IoJy5ndmlkZW8td3JhcHBlcicpO1xuICAgICAgICB2YXIgaW1hZ2UgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuZ3NsaWRlLWltYWdlJyk7XG4gICAgICAgIHZhciBkZXNjcmlwdGlvbiA9IHRoaXMuc2xpZGVEZXNjcmlwdGlvbjtcbiAgICAgICAgdmFyIHdpbldpZHRoID0gd2luU2l6ZS53aWR0aDtcbiAgICAgICAgdmFyIHdpbkhlaWdodCA9IHdpblNpemUuaGVpZ2h0O1xuXG4gICAgICAgIGlmICh3aW5XaWR0aCA8PSA3NjgpIHtcbiAgICAgICAgICBhZGRDbGFzcyhkb2N1bWVudC5ib2R5LCAnZ2xpZ2h0Ym94LW1vYmlsZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksICdnbGlnaHRib3gtbW9iaWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZpZGVvICYmICFpbWFnZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkZXNjcmlwdGlvblJlc2l6ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChkZXNjcmlwdGlvbiAmJiAoaGFzQ2xhc3MoZGVzY3JpcHRpb24sICdkZXNjcmlwdGlvbi1ib3R0b20nKSB8fCBoYXNDbGFzcyhkZXNjcmlwdGlvbiwgJ2Rlc2NyaXB0aW9uLXRvcCcpKSAmJiAhaGFzQ2xhc3MoZGVzY3JpcHRpb24sICdnYWJzb2x1dGUnKSkge1xuICAgICAgICAgIGRlc2NyaXB0aW9uUmVzaXplID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbWFnZSkge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCA8PSA3NjgpIHtcbiAgICAgICAgICAgIHZhciBpbWdOb2RlID0gaW1hZ2UucXVlcnlTZWxlY3RvcignaW1nJyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdGlvblJlc2l6ZSkge1xuICAgICAgICAgICAgdmFyIGRlc2NIZWlnaHQgPSBkZXNjcmlwdGlvbi5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgICAgICAgIHZhciBfaW1nTm9kZSA9IGltYWdlLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xuXG4gICAgICAgICAgICBfaW1nTm9kZS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgXCJtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gXCIuY29uY2F0KGRlc2NIZWlnaHQsIFwicHgpXCIpKTtcblxuICAgICAgICAgICAgZGVzY3JpcHRpb24uc2V0QXR0cmlidXRlKCdzdHlsZScsIFwibWF4LXdpZHRoOiBcIi5jb25jYXQoX2ltZ05vZGUub2Zmc2V0V2lkdGgsIFwicHg7XCIpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmlkZW8pIHtcbiAgICAgICAgICB2Y
24510XIgcmF0aW8gPSBoYXModGhpcy5zZXR0aW5ncy5wbHlyLmNvbmZpZywgJ3JhdGlvJykgPyB0aGlzLnNldHRpbmdzLnBseXIuY29uZmlnLnJhdGlvIDogJyc7XG5cbiAgICAgICAgICBpZiAoIXJhdGlvKSB7XG4gICAgICAgICAgICB2YXIgY29udGFpbmVyV2lkdGggPSB2aWRlby5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgIHZhciBjb250YWluZXJIZWlnaHQgPSB2aWRlby5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICB2YXIgZGl2aXNvciA9IGNvbnRhaW5lcldpZHRoIC8gY29udGFpbmVySGVpZ2h0O1xuICAgICAgICAgICAgcmF0aW8gPSBcIlwiLmNvbmNhdChjb250YWluZXJXaWR0aCAvIGRpdmlzb3IsIFwiOlwiKS5jb25jYXQoY29udGFpbmVySGVpZ2h0IC8gZGl2aXNvcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHZpZGVvUmF0aW8gPSByYXRpby5zcGxpdCgnOicpO1xuICAgICAgICAgIHZhciB2aWRlb1dpZHRoID0gdGhpcy5zZXR0aW5ncy52aWRlb3NXaWR0aDtcbiAgICAgICAgICB2YXIgbWF4V2lkdGggPSB0aGlzLnNldHRpbmdzLnZpZGVvc1dpZHRoO1xuXG4gICAgICAgICAgaWYgKGlzTnVtYmVyKHZpZGVvV2lkdGgpIHx8IHZpZGVvV2lkdGguaW5kZXhPZigncHgnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIG1heFdpZHRoID0gcGFyc2VJbnQodmlkZW9XaWR0aCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh2aWRlb1dpZHRoLmluZGV4T2YoJ3Z3JykgIT09IC0xKSB7XG4gICAgICAgICAgICAgIG1heFdpZHRoID0gd2luV2lkdGggKiBwYXJzZUludCh2aWRlb1dpZHRoKSAvIDEwMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmlkZW9XaWR0aC5pbmRleE9mKCd2aCcpICE9PSAtMSkge1xuICAgICAgICAgICAgICBtYXhXaWR0aCA9IHdpbkhlaWdodCAqIHBhcnNlSW50KHZpZGVvV2lkdGgpIC8gMTAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2aWRlb1dpZHRoLmluZGV4T2YoJyUnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgbWF4V2lkdGggPSB3aW5XaWR0aCAqIHBhcnNlSW50KHZpZGVvV2lkdGgpIC8gMTAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWF4V2lkdGggPSBwYXJzZUludCh2aWRlby5jbGllbnRXaWR0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIG1heEhlaWdodCA9IG1heFdpZHRoIC8gKHBhcnNlSW50KHZpZGVvUmF0aW9bMF0pIC8gcGFyc2VJbnQodmlkZW9SYXRpb1sxXSkpO1xuICAgICAgICAgIG1heEhlaWdodCA9IE1hdGguZmxvb3IobWF4SGVpZ2h0KTtcblxuICAgICAgICAgIGlmIChkZXNjcmlwdGlvblJlc2l6ZSkge1xuICAgICAgICAgICAgd2luSGVpZ2h0ID0gd2luSGVpZ2h0IC0gZGVzY3JpcHRpb24ub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChtYXhXaWR0aCA+IHdpbldpZHRoIHx8IG1heEhlaWdodCA+IHdpbkhlaWdodCB8fCB3aW5IZWlnaHQgPCBtYXhIZWlnaHQgJiYgd2luV2lkdGggPiBtYXhXaWR0aCkge1xuICAgICAgICAgICAgdmFyIHZ3aWR0aCA9IHZpZGVvLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgdmFyIHZoZWlnaHQgPSB2aWRlby5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgICAgICAgIHZhciBfcmF0aW8gPSB3aW5IZWlnaHQgLyB2aGVpZ2h0O1xuXG4gICAgICAgICAgICB2Y
24510XIgdnNpemUgPSB7XG4gICAgICAgICAgICAgIHdpZHRoOiB2d2lkdGggKiBfcmF0aW8sXG4gICAgICAgICAgICAgIGhlaWdodDogdmhlaWdodCAqIF9yYXRpb1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZpZGVvLnBhcmVudE5vZGUuc2V0QXR0cmlidXRlKCdzdHlsZScsIFwibWF4LXdpZHRoOiBcIi5jb25jYXQodnNpemUud2lkdGgsIFwicHhcIikpO1xuXG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb25SZXNpemUpIHtcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb24uc2V0QXR0cmlidXRlKCdzdHlsZScsIFwibWF4LXdpZHRoOiBcIi5jb25jYXQodnNpemUud2lkdGgsIFwicHg7XCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmlkZW8ucGFyZW50Tm9kZS5zdHlsZS5tYXhXaWR0aCA9IFwiXCIuY29uY2F0KHZpZGVvV2lkdGgpO1xuXG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb25SZXNpemUpIHtcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb24uc2V0QXR0cmlidXRlKCdzdHlsZScsIFwibWF4LXdpZHRoOiBcIi5jb25jYXQodmlkZW9XaWR0aCwgXCI7XCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwicmVsb2FkXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVsb2FkKCkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwidXBkYXRlTmF2aWdhdGlvbkNsYXNzZXNcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVOYXZpZ2F0aW9uQ2xhc3NlcygpIHtcbiAgICAgICAgdmFyIGxvb3AgPSB0aGlzLmxvb3AoKTtcblxuICAgICAgICByZW1vdmVDbGFzcyh0aGlzLm5leHRCdXR0b24sICdkaXNhYmxlZCcpO1xuXG4gICAgICAgIHJlbW92ZUNsYXNzKHRoaXMucHJldkJ1dHRvbiwgJ2Rpc2FibGVkJyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5kZXggPT0gMCAmJiB0aGlzLmVsZW1lbnRzLmxlbmd0aCAtIDEgPT0gMCkge1xuICAgICAgICAgIGFkZENsYXNzKHRoaXMucHJldkJ1dHRvbiwgJ2Rpc2FibGVkJyk7XG5cbiAgICAgICAgICBhZGRDbGFzcyh0aGlzLm5leHRCdXR0b24sICdkaXNhYmxlZCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5kZXggPT09IDAgJiYgIWxvb3ApIHtcbiAgICAgICAgICBhZGRDbGFzcyh0aGlzLnByZXZCdXR0b24sICdkaXNhYmxlZCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5kZXggPT09IHRoaXMuZWxlbWVudHMubGVuZ3RoIC0gMSAmJiAhbG9vcCkge1xuICAgICAgICAgIGFkZENsYXNzKHRoaXMubmV4dEJ1dHRvbiwgJ2Rpc2FibGVkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwibG9vcFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGxvb3AoKSB7XG4gICAgICAgIHZhciBsb29wID0gaGFzKHRoaXMuc2V0dGluZ3MsICdsb29wQXRFbmQnKSA/IHRoaXMuc2V0dGluZ3MubG9vcEF0RW5kIDogbnVsbDtcbiAgICAgICAgbG9vcCA9IGhhcyh0aGlzLnNldHRpbmdzLCAnbG9vcCcpID8gdGhpcy5zZXR0aW5ncy5sb29wIDogbG9vcDtcbiAgICAgICAgcmV0dXJuIGxvb3A7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImNsb3NlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAgIHZhciBfdGhpczggPSB0aGlzO1xuXG4gICAgICAgIGlmICghdGhpcy5saWdodGJveE9wZW4pIHtcbiAgICAgICAgICBpZiAodGhpcy5ldmVudHMpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmV2ZW50cykge1xuICAgICAgICAgICAgICBpZiAodGhpcy5ldmVudHMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRzW2tleV0uZGVzdHJveSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZXZlbnRzID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jbG9zaW5nKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbG9zaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zbGlkZVBsYXllclBhdXNlKHRoaXMuYWN0aXZlU2xpZGUpO1xuXG4gICAgICAgIGlmICh0aGlzLmZ1bGxFbGVtZW50c0xpc3QpIHtcbiAgICAgICAgICB0aGlzLmVsZW1lbnRzID0gdGhpcy5mdWxsRWxlbWVudHNMaXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm9keUhpZGRlbkNoaWxkRWxtcy5sZW5ndGgpIHtcbiAgICAgICAgICBlYWNoKHRoaXMuYm9keUhpZGRlbkNoaWxkRWxtcywgZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBhZGRDbGFzcyh0aGlzLm1vZGFsLCAnZ2xpZ2h0Ym94LWNsb3NpbmcnKTtcblxuICAgICAgICBhbmltYXRlRWxlbWVudCh0aGlzLm92ZXJsYXksIHRoaXMuc2V0dGluZ3Mub3BlbkVmZmVjdCA9PSAnbm9uZScgPyAnbm9uZScgOiB0aGlzLnNldHRpbmdzLmNzc0VmZWN0cy5mYWRlLm91dCk7XG5cbiAgICAgICAgYW5pbWF0ZUVsZW1lbnQodGhpcy5hY3RpdmVTbGlkZSwgdGhpcy5zZXR0aW5ncy5jc3NFZmVjdHNbdGhpcy5zZXR0aW5ncy5jbG9zZUVmZmVjdF0ub3V0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXM4LmFjdGl2ZVNsaWRlID0gbnVsbDtcbiAgICAgICAgICBfdGhpczgucHJldkFjdGl2ZVNsaWRlSW5kZXggPSBudWxsO1xuICAgICAgICAgIF90aGlzOC5wcmV2QWN0aXZlU2xpZGUgPSBudWxsO1xuICAgICAgICAgIF90aGlzOC5idWlsdCA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKF90aGlzOC5ldmVudHMpIHtcbiAgICAgICAgICAgIGZvciAodmFyIF9rZXkgaW4gX3RoaXM4LmV2ZW50cykge1xuICAgICAgICAgICAgICBpZiAoX3RoaXM4LmV2ZW50cy5oYXNPd25Qcm9wZXJ0eShfa2V5KSkge1xuICAgICAgICAgICAgICAgIF90aGlzOC5ldmVudHNbX2tleV0uZGVzdHJveSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF90aGlzOC5ldmVudHMgPSBudWxsO1xuICAgICAgICAgI
24510H1cblxuICAgICAgICAgIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcblxuICAgICAgICAgIHJlbW92ZUNsYXNzKGh0bWwsICdnbGlnaHRib3gtb3BlbicpO1xuXG4gICAgICAgICAgcmVtb3ZlQ2xhc3MoYm9keSwgJ2dsaWdodGJveC1vcGVuIHRvdWNoaW5nIGdkZXNjLW9wZW4gZ2xpZ2h0Ym94LXRvdWNoIGdsaWdodGJveC1tb2JpbGUgZ3Njcm9sbGJhci1maXhlcicpO1xuXG4gICAgICAgICAgX3RoaXM4Lm1vZGFsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoX3RoaXM4Lm1vZGFsKTtcblxuICAgICAgICAgIF90aGlzOC50cmlnZ2VyKCdjbG9zZScpO1xuXG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24oX3RoaXM4LnNldHRpbmdzLm9uQ2xvc2UpKSB7XG4gICAgICAgICAgICBfdGhpczguc2V0dGluZ3Mub25DbG9zZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZ2Nzcy1zdHlsZXMnKTtcblxuICAgICAgICAgIGlmIChzdHlsZXMpIHtcbiAgICAgICAgICAgIHN0eWxlcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXM4LmxpZ2h0Ym94T3BlbiA9IGZhbHNlO1xuICAgICAgICAgIF90aGlzOC5jbG9zaW5nID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcImRlc3Ryb3lcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuY2xlYXJBbGxFdmVudHMoKTtcblxuICAgICAgICBpZiAodGhpcy5iYXNlRXZlbnRzKSB7XG4gICAgICAgICAgdGhpcy5iYXNlRXZlbnRzLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJvblwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uKGV2dCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIG9uY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuXG4gICAgICAgIGlmICghZXZ0IHx8ICFpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V2ZW50IG5hbWUgYW5kIGNhbGxiYWNrIG11c3QgYmUgZGVmaW5lZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hcGlFdmVudHMucHVzaCh7XG4gICAgICAgICAgZXZ0OiBldnQsXG4gICAgICAgICAgb25jZTogb25jZSxcbiAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2tcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIm9uY2VcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBvbmNlKGV2dCwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5vbihldnQsIGNhbGxiYWNrLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwidHJpZ2dlclwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRyaWdnZXIoZXZlbnROYW1lKSB7XG4gICAgICAgIHZhciBfdGhpczkgPSB0aGlzO1xuXG4gICAgICAgIHZhciBkYXRhID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBudWxsO1xuICAgICAgICB2Y
24510XIgb25jZVRyaWdnZXJlZCA9IFtdO1xuXG4gICAgICAgIGVhY2godGhpcy5hcGlFdmVudHMsIGZ1bmN0aW9uIChldmVudCwgaSkge1xuICAgICAgICAgIHZhciBldnQgPSBldmVudC5ldnQsXG4gICAgICAgICAgICAgIG9uY2UgPSBldmVudC5vbmNlLFxuICAgICAgICAgICAgICBjYWxsYmFjayA9IGV2ZW50LmNhbGxiYWNrO1xuXG4gICAgICAgICAgaWYgKGV2dCA9PSBldmVudE5hbWUpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpO1xuXG4gICAgICAgICAgICBpZiAob25jZSkge1xuICAgICAgICAgICAgICBvbmNlVHJpZ2dlcmVkLnB1c2goaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAob25jZVRyaWdnZXJlZC5sZW5ndGgpIHtcbiAgICAgICAgICBlYWNoKG9uY2VUcmlnZ2VyZWQsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM5LmFwaUV2ZW50cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiY2xlYXJBbGxFdmVudHNcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhckFsbEV2ZW50cygpIHtcbiAgICAgICAgdGhpcy5hcGlFdmVudHMuc3BsaWNlKDAsIHRoaXMuYXBpRXZlbnRzLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcInZlcnNpb25cIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2ZXJzaW9uKCkge1xuICAgICAgICByZXR1cm4gX3ZlcnNpb247XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIEdsaWdodGJveEluaXQ7XG4gIH0oKTtcblxuICBmdW5jdGlvbiBnbGlnaHRib3ggKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgR2xpZ2h0Ym94SW5pdChvcHRpb25zKTtcbiAgICBpbnN0YW5jZS5pbml0KCk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgcmV0dXJuIGdsaWdodGJveDtcblxufSkpKTtcbiIsIihmdW5jdGlvbiAoKSB7XG5cbkwuQ29udHJvbC5GdWxsU2NyZWVuID0gTC5Db250cm9sLmV4dGVuZCh7XG4gIG9wdGlvbnM6IHtcbiAgICBwb3NpdGlvbjogJ3RvcGxlZnQnLFxuICAgIHRpdGxlOiAnRnVsbCBTY3JlZW4nLFxuICAgIHRpdGxlQ2FuY2VsOiAnRXhpdCBGdWxsIFNjcmVlbicsXG4gICAgZm9yY2VTZXBhcmF0ZUJ1dHRvbjogZmFsc2UsXG4gICAgZm9yY2VQc2V1ZG9GdWxsc2NyZWVuOiBmYWxzZSxcbiAgICBmdWxsc2NyZWVuRWxlbWVudDogZmFsc2VcbiAgfSxcbiAgXG4gIG9uQWRkOiBmdW5jdGlvbiAobWFwKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9ICdsZWFmbGV0LWNvbnRyb2wtem9vbS1mdWxsc2NyZWVuJywgY29udGFpbmVyLCBjb250ZW50ID0gJyc7XG4gICAgXG4gICAgaWYgKG1hcC56b29tQ29udHJvbCAmJiAhdGhpcy5vcHRpb25zLmZvcmNlU2VwYXJhdGVCdXR0b24pIHtcbiAgICAgIGNvbnRhaW5lciA9IG1hcC56b29tQ29udHJvbC5fY29udGFpbmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250YWluZXIgPSBMLkRvbVV0aWwuY3JlYXRlKCdkaXYnLCAnbGVhZmxldC1iYXInKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb250ZW50KSB7XG4gICAgICBjb250ZW50ID0gdGhpcy5vcHRpb25zLmNvbnRlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsYXNzTmFtZSArPSAnIGZ1bGxzY3JlZW4taWNvbic7XG4gICAgfVxuXG4gICAgdGhpcy5fY3JlYXRlQnV0dG9uKHRoaXMub3B0aW9ucy50aXRsZSwgY2xhc3NOYW1lLCBjb250ZW50LCBjb250YWluZXIsIHRoaXMudG9nZ2xlRnVsbFNjcmVlbiwgdGhpcyk7XG4gICAgdGhpcy5fbWFwLmZ1bGxzY3JlZW5Db250cm9sID0gdGhpcztcblxuICAgIHRoaXMuX21hcC5vbignZW50ZXJGdWxsc2NyZWVuIGV4aXRGdWxsc2NyZWVuJywgdGhpcy5fdG9nZ2xlVGl0bGUsIHRoaXMpO1xuXG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfSxcbiAgXG4gIG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XG4gICAgTC5Eb21FdmVudFxuICAgICAgLm9mZih0aGlzLmxpbmssICdjbGljaycsIEwuRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKVxuICAgICAgLm9mZih0aGlzLmxpbmssICdjbGljaycsIEwuRG9tRXZlbnQucHJldmVudERlZmF1bHQpXG4gICAgICAub2ZmKHRoaXMubGluaywgJ2NsaWNrJywgdGhpcy50b2dnbGVGdWxsU2NyZWVuLCB0aGlzKTtcbiAgICBcbiAgICBMLkRvbUV2ZW50XG4gICAgICAub2ZmKHRoaXMuX2NvbnRhaW5lciwgZnVsbFNjcmVlbkFwaS5mdWxsU2NyZWVuRXZlbnROYW1lLCBMLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbilcbiAgICAgIC5vZmYodGhpcy5fY29udGFpbmVyLCBmdWxsU2NyZWVuQXBpLmZ1bGxTY3JlZW5FdmVudE5hbWUsIEwuRG9tRXZlbnQucHJldmVudERlZmF1bHQpXG4gICAgICAub2ZmKHRoaXMuX2NvbnRhaW5lciwgZnVsbFNjcmVlbkFwaS5mdWxsU2NyZWVuRXZlbnROYW1lLCB0aGlzLl9oYW5kbGVGdWxsc2NyZWVuQ2hhbmdlLCB0aGlzKTtcbiAgICBcbiAgICBMLkRvbUV2ZW50XG4gICAgICAub2ZmKGRvY3VtZW50LCBmdWxsU2NyZWVuQXBpLmZ1bGxTY3JlZW5FdmVudE5hbWUsIEwuRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKVxuICAgICAgLm9mZihkb2N1bWVudCwgZnVsbFNjcmVlbkFwaS5mdWxsU2NyZWVuRXZlbnROYW1lLCBMLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KVxuICAgICAgLm9mZihkb2N1bWVudCwgZnVsbFNjcmVlbkFwaS5mdWxsU2NyZWVuRXZlbnROYW1lLCB0aGlzLl9oYW5kbGVGdWxsc2NyZWVuQ2hhbmdlLCB0aGlzKTtcbiAgfSxcbiAgXG4gIF9jcmVhdGVCdXR0b246IGZ1bmN0aW9uICh0aXRsZSwgY2xhc3NOYW1lLCBjb250ZW50LCBjb250YWluZXIsIGZuLCBjb250ZXh0KSB7XG4gICAgdGhpcy5saW5rID0gTC5Eb21VdGlsLmNyZWF0ZSgnYScsIGNsYXNzTmFtZSwgY29udGFpbmVyKTtcbiAgICB0aGlzLmxpbmsuaHJlZiA9ICcjJztcbiAgICB0aGlzLmxpbmsudGl0bGUgPSB0aXRsZTtcbiAgICB0aGlzLmxpbmsuaW5uZXJIVE1MID0gY29udGVudDtcblxuICAgI
24510HRoaXMubGluay5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnYnV0dG9uJyk7XG4gICAgdGhpcy5saW5rLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRpdGxlKTtcblxuICAgIEwuRG9tRXZlbnRcbiAgICAgIC5vbih0aGlzLmxpbmssICdjbGljaycsIEwuRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKVxuICAgICAgLm9uKHRoaXMubGluaywgJ2NsaWNrJywgTC5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdClcbiAgICAgIC5vbih0aGlzLmxpbmssICdjbGljaycsIGZuLCBjb250ZXh0KTtcbiAgICBcbiAgICBMLkRvbUV2ZW50XG4gICAgICAub24oY29udGFpbmVyLCBmdWxsU2NyZWVuQXBpLmZ1bGxTY3JlZW5FdmVudE5hbWUsIEwuRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKVxuICAgICAgLm9uKGNvbnRhaW5lciwgZnVsbFNjcmVlbkFwaS5mdWxsU2NyZWVuRXZlbnROYW1lLCBMLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KVxuICAgICAgLm9uKGNvbnRhaW5lciwgZnVsbFNjcmVlbkFwaS5mdWxsU2NyZWVuRXZlbnROYW1lLCB0aGlzLl9oYW5kbGVGdWxsc2NyZWVuQ2hhbmdlLCBjb250ZXh0KTtcbiAgICBcbiAgICBMLkRvbUV2ZW50XG4gICAgICAub24oZG9jdW1lbnQsIGZ1bGxTY3JlZW5BcGkuZnVsbFNjcmVlbkV2ZW50TmFtZSwgTC5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24pXG4gICAgICAub24oZG9jdW1lbnQsIGZ1bGxTY3JlZW5BcGkuZnVsbFNjcmVlbkV2ZW50TmFtZSwgTC5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdClcbiAgICAgIC5vbihkb2N1bWVudCwgZnVsbFNjcmVlbkFwaS5mdWxsU2NyZWVuRXZlbnROYW1lLCB0aGlzLl9oYW5kbGVGdWxsc2NyZWVuQ2hhbmdlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0aGlzLmxpbms7XG4gIH0sXG4gIFxuICB0b2dnbGVGdWxsU2NyZWVuOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1hcCA9IHRoaXMuX21hcDtcbiAgICBtYXAuX2V4aXRGaXJlZCA9IGZhbHNlO1xuICAgIGlmIChtYXAuX2lzRnVsbHNjcmVlbikge1xuICAgICAgaWYgKGZ1bGxTY3JlZW5BcGkuc3VwcG9ydHNGdWxsU2NyZWVuICYmICF0aGlzLm9wdGlvbnMuZm9yY2VQc2V1ZG9GdWxsc2NyZWVuKSB7XG4gICAgICAgIGZ1bGxTY3JlZW5BcGkuY2FuY2VsRnVsbFNjcmVlbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTC5Eb21VdGlsLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5mdWxsc2NyZWVuRWxlbWVudCA/IHRoaXMub3B0aW9ucy5mdWxsc2NyZWVuRWxlbWVudCA6IG1hcC5fY29udGFpbmVyLCAnbGVhZmxldC1wc2V1ZG8tZnVsbHNjcmVlbicpO1xuICAgICAgfVxuICAgICAgbWFwLmZpcmUoJ2V4aXRGdWxsc2NyZWVuJyk7XG4gICAgICBtYXAuX2V4aXRGaXJlZCA9IHRydWU7XG4gICAgICBtYXAuX2lzRnVsbHNjcmVlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChmdWxsU2NyZWVuQXBpLnN1cHBvcnRzRnVsbFNjcmVlbiAmJiAhdGhpcy5vcHRpb25zLmZvcmNlUHNldWRvRnVsbHNjcmVlbikge1xuICAgICAgICBmdWxsU2NyZWVuQXBpLnJlcXVlc3RGdWxsU2NyZWVuKHRoaXMub3B0aW9ucy5mdWxsc2NyZWVuRWxlbWVudCA/IHRoaXMub3B0aW9ucy5mdWxsc2NyZWVuRWxlbWVudCA6IG1hcC5fY29udGFpbmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEwuRG9tVXRpbC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuZnVsbHNjcmVlbkVsZW1lbnQgPyB0aGlzLm9wdGlvbnMuZnVsbHNjcmVlbkVsZW1lbnQgOiBtYXAuX2NvbnRhaW5lciwgJ2xlYWZsZXQtcHNldWRvLWZ1bGxzY3JlZW4nKTtcbiAgICAgIH1cbiAgICAgIG1hcC5maXJlKCdlbnRlckZ1bGxzY3JlZW4nKTtcbiAgICAgIG1hcC5faXNGdWxsc2NyZWVuID0gdHJ1ZTtcbiAgICB9XG4gIH0sXG4gIFxuICBfdG9nZ2xlVGl0bGU6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmxpbmsudGl0bGUgPSB0aGlzLl9tYXAuX2lzRnVsbHNjcmVlbiA/IHRoaXMub3B0aW9ucy50aXRsZSA6IHRoaXMub3B0aW9ucy50aXRsZUNhbmNlbDtcbiAgfSxcbiAgXG4gIF9oYW5kbGVGdWxsc2NyZWVuQ2hhbmdlOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1hcCA9IHRoaXMuX21hcDtcbiAgICBtYXAuaW52YWxpZGF0ZVNpemUoKTtcbiAgICBpZiAoIWZ1bGxTY3JlZW5BcGkuaXNGdWxsU2NyZWVuKCkgJiYgIW1hcC5fZXhpdEZpcmVkKSB7XG4gICAgICBtYXAuZmlyZSgnZXhpdEZ1bGxzY3JlZW4nKTtcbiAgICAgIG1hcC5fZXhpdEZpcmVkID0gdHJ1ZTtcbiAgICAgIG1hcC5faXNGdWxsc2NyZWVuID0gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcblxuTC5NYXAuaW5jbHVkZSh7XG4gIHRvZ2dsZUZ1bGxzY3JlZW46IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bGxzY3JlZW5Db250cm9sLnRvZ2dsZUZ1bGxTY3JlZW4oKTtcbiAgfVxufSk7XG5cbkwuTWFwLmFkZEluaXRIb29rKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5mdWxsc2NyZWVuQ29udHJvbCkge1xuICAgIHRoaXMuYWRkQ29udHJvbChMLmNvbnRyb2wuZnVsbHNjcmVlbih0aGlzLm9wdGlvbnMuZnVsbHNjcmVlbkNvbnRyb2xPcHRpb25zKSk7XG4gIH1cbn0pO1xuXG5MLmNvbnRyb2wuZnVsbHNjcmVlbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgTC5Db250cm9sLkZ1bGxTY3JlZW4ob3B0aW9ucyk7XG59O1xuXG4vKiBcbk5hdGl2ZSBGdWxsU2NyZWVuIEphdmFTY3JpcHQgQVBJXG4tLS0tLS0tLS0tLS0tXG5Bc3N1bWVzIE1vemlsbGEgbmFtaW5nIGNvbnZlbnRpb25zIGluc3RlYWQgb2YgVzNDIGZvciBub3dcblxuc291cmNlIDogaHR0cDovL2pvaG5keWVyLm5hbWUvbmF0aXZlLWZ1bGxzY3JlZW4tamF2YXNjcmlwdC1hcGktcGx1cy1qcXVlcnktcGx1Z2luL1xuXG4qL1xuXG4gIHZhciBcbiAgICBmdWxsU2NyZWVuQXBpID0geyBcbiAgICAgIHN1cHBvcnRzRnVsbFNjcmVlbjogZmFsc2UsXG4gICAgICBpc0Z1bGxTY3JlZW46IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9LCBcbiAgICAgIHJlcXVlc3RGdWxsU2NyZWVuOiBmdW5jdGlvbiAoKSB7fSwgXG4gICAgICBjYW5jZWxGdWxsU2NyZWVuOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIGZ1bGxTY3JlZW5FdmVudE5hbWU6ICcnLFxuICAgICAgcHJlZml4OiAnJ1xuICAgIH0sXG4gICAgYnJvd3NlclByZWZpeGVzID0gJ3dlYmtpdCBtb3ogbyBtcyBraHRtbCcuc3BsaXQoJyAnKTtcbiAgXG4gIC8vIGNoZWNrIGZvciBuYXRpdmUgc3VwcG9ydFxuICBpZiAodHlwZW9mIGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuICE9PSAndW5kZWZpbmVkJykge1xuICAgIGZ1bGxTY3JlZW5BcGkuc3VwcG9ydHNGdWxsU2NyZWVuID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjaGVjayBmb3IgZnVsbHNjcmVlbiBzdXBwb3J0IGJ5IHZlbmRvciBwcmVmaXhcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBicm93c2VyUHJlZml4ZXMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuICAgICAgZnVsbFNjcmVlbkFwaS5wcmVmaXggPSBicm93c2VyUHJlZml4ZXNbaV07XG4gICAgICBpZiAodHlwZW9mIGRvY3VtZW50W2Z1bGxTY3JlZW5BcGkucHJlZml4ICsgJ0NhbmNlbEZ1bGxTY3JlZW4nXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZnVsbFNjcmVlbkFwaS5zdXBwb3J0c0Z1bGxTY3JlZW4gPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudFsnbXNFeGl0RnVsbHNjcmVlbiddICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZnVsbFNjcmVlbkFwaS5wcmVmaXggPSAnbXMnO1xuICAgICAgZnVsbFNjcmVlbkFwaS5zdXBwb3J0c0Z1bGxTY3JlZW4gPSB0cnVlO1xuICAgIH1cbiAgfVxuICBcbiAgLy8gdXBkYXRlIG1ldGhvZHMgdG8gZG8gc29tZXRoaW5nIHVzZWZ1bFxuICBpZiAoZnVsbFNjcmVlbkFwaS5zdXBwb3J0c0Z1bGxTY3JlZW4pIHtcbiAgICBpZiAoZnVsbFNjcmVlbkFwaS5wcmVmaXggPT09ICdtcycpIHtcbiAgICAgIGZ1bGxTY3JlZW5BcGkuZnVsbFNjcmVlbkV2ZW50TmFtZSA9ICdNU0Z1bGxzY3JlZW5DaGFuZ2UnO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdWxsU2NyZWVuQXBpLmZ1bGxTY3JlZW5FdmVudE5hbWUgPSBmdWxsU2NyZWVuQXBpLnByZWZpeCArICdmdWxsc2NyZWVuY2hhbmdlJztcbiAgICB9XG4gICAgZnVsbFNjcmVlbkFwaS5pc0Z1bGxTY3JlZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMucHJlZml4KSB7XG4gICAgICAgIGNhc2UgJyc6XG4gICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmZ1bGxzY3JlZW47XG4gICAgICAgIGNhc2UgJ3dlYmtpdCc6XG4gICAgICAgICAgcmV0dXJuIGRvY3VtZW50LndlYmtpdElzRnVsbFNjcmVlbjtcbiAgICAgICAgY2FzZSAnbXMnOlxuICAgICAgICAgI
24510HJldHVybiBkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBkb2N1bWVudFt0aGlzLnByZWZpeCArICdGdWxsU2NyZWVuJ107XG4gICAgICB9XG4gICAgfTtcbiAgICBmdWxsU2NyZWVuQXBpLnJlcXVlc3RGdWxsU2NyZWVuID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMucHJlZml4KSB7XG4gICAgICAgIGNhc2UgJyc6XG4gICAgICAgICAgcmV0dXJuIGVsLnJlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICAgIGNhc2UgJ21zJzpcbiAgICAgICAgICByZXR1cm4gZWwubXNSZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBlbFt0aGlzLnByZWZpeCArICdSZXF1ZXN0RnVsbFNjcmVlbiddKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBmdWxsU2NyZWVuQXBpLmNhbmNlbEZ1bGxTY3JlZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMucHJlZml4KSB7XG4gICAgICAgIGNhc2UgJyc6XG4gICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgICAgIGNhc2UgJ21zJzpcbiAgICAgICAgICByZXR1cm4gZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbigpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBkb2N1bWVudFt0aGlzLnByZWZpeCArICdDYW5jZWxGdWxsU2NyZWVuJ10oKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8galF1ZXJ5IHBsdWdpblxuICBpZiAodHlwZW9mIGpRdWVyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBqUXVlcnkuZm4ucmVxdWVzdEZ1bGxTY3JlZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVsID0galF1ZXJ5KHRoaXMpO1xuICAgICAgICBpZiAoZnVsbFNjcmVlbkFwaS5zdXBwb3J0c0Z1bGxTY3JlZW4pIHtcbiAgICAgICAgICBmdWxsU2NyZWVuQXBpLnJlcXVlc3RGdWxsU2NyZWVuKGVsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIGV4cG9ydCBhcGlcbiAgd2luZG93LmZ1bGxTY3JlZW5BcGkgPSBmdWxsU2NyZWVuQXBpO1xufSkoKTsiLCIvKiBAcHJlc2VydmVcbiAqIExlYWZsZXQgMS43LjEsIGEgSlMgbGlicmFyeSBmb3IgaW50ZXJhY3RpdmUgbWFwcy4gaHR0cDovL2xlYWZsZXRqcy5jb21cbiAqIChjKSAyMDEwLTIwMTkgVmxhZGltaXIgQWdhZm9ua2luLCAoYykgMjAxMC0yMDExIENsb3VkTWFkZVxuICovXG4hZnVuY3Rpb24odCxpKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9pKGV4cG9ydHMpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wiZXhwb3J0c1wiXSxpKTppKHQuTD17fSl9KHRoaXMsZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gaCh0KXtmb3IodmFyIGksZSxuPTEsbz1hcmd1bWVudHMubGVuZ3RoO248bztuKyspZm9yKGkgaW4gZT1hcmd1bWVudHNbbl0pdFtpXT1lW2ldO3JldHVybiB0fXZhciBzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHQpe3JldHVybiBpLnByb3RvdHlwZT10LG5ldyBpfTtmdW5jdGlvbiBpKCl7fWZ1bmN0aW9uIHAodCxpKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2U7aWYodC5iaW5kKXJldHVybiB0LmJpbmQuYXBwbHkodCxlLmNhbGwoYXJndW1lbnRzLDEpKTt2YXIgbj1lLmNhbGwoYXJndW1lbnRzLDIpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGksbi5sZW5ndGg/bi5jb25jYXQoZS5jYWxsKGFyZ3VtZW50cykpOmFyZ3VtZW50cyl9fXZhciBlPTA7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC5fbGVhZmxldF9pZD10Ll9sZWFmbGV0X2lkfHwrK2UsdC5fbGVhZmxldF9pZH1mdW5jdGlvbiBuKHQsaSxlKXt2YXIgbixvLHM9ZnVuY3Rpb24oKXtuPSExLG8mJihyLmFwcGx5KGUsbyksbz0hMSl9LHI9ZnVuY3Rpb24oKXtuP289YXJndW1lbnRzOih0LmFwcGx5KGUsYXJndW1lbnRzKSxzZXRUaW1lb3V0KHMsaSksbj0hMCl9O3JldHVybiByfWZ1bmN0aW9uIG8odCxpLGUpe3ZhciBuPWlbMV0sbz1pWzBdLHM9bi1vO3JldHVybiB0PT09biYmZT90OigodC1vKSVzK3MpJXMrb31mdW5jdGlvbiBhKCl7cmV0dXJuITF9ZnVuY3Rpb24gcih0LGkpe3ZhciBlPU1hdGgucG93KDEwLHZvaWQgMD09PWk/NjppKTtyZXR1cm4gTWF0aC5yb3VuZCh0KmUpL2V9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC50cmltP3QudHJpbSgpOnQucmVwbGFjZSgvXlxccyt8XFxzKyQvZyxcIlwiKX1mdW5jdGlvbiBsKHQpe3JldHVybiB1KHQpLnNwbGl0KC9cXHMrLyl9ZnVuY3Rpb24gYyh0LGkpe2Zvcih2YXIgZSBpbiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxcIm9wdGlvbnNcIil8fCh0Lm9wdGlvbnM9dC5vcHRpb25zP3ModC5vcHRpb25zKTp7fSksaSl0Lm9wdGlvbnNbZV09aVtlXTtyZXR1cm4gdC5vcHRpb25zfWZ1bmN0aW9uIF8odCxpLGUpe3ZhciBuPVtdO2Zvcih2YXIgbyBpbiB0KW4ucHVzaChlbmNvZGVVUklDb21wb25lbnQoZT9vLnRvVXBwZXJDYXNlKCk6bykrXCI9XCIrZW5jb2RlVVJJQ29tcG9uZW50KHRbb10pKTtyZXR1cm4oaSYmLTEhPT1pLmluZGV4T2YoXCI/XCIpP1wiJlwiOlwiP1wiKStuLmpvaW4oXCImXCIpfXZhciBkPS9cXHsgKihbXFx3Xy1dKykgKlxcfS9nO2Z1bmN0aW9uIGYodCxuKXtyZXR1cm4gdC5yZXBsYWNlKGQsZnVuY3Rpb24odCxpKXt2YXIgZT1uW2ldO2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKFwiTm8gdmFsdWUgcHJvdmlkZWQgZm9yIHZhcmlhYmxlIFwiK3QpO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihlPWUobikpLGV9KX12YXIgZz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9O2Z1bmN0aW9uIHYodCxpKXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdPT09aSlyZXR1cm4gZTtyZXR1cm4tMX12YXIgeT1cImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUQvQUN3QUFBQUFBUUFCQUFBQ0FEcz1cIjtmdW5jdGlvbiB4KHQpe3JldHVybiB3aW5kb3dbXCJ3ZWJraXRcIit0XXx8d2luZG93W1wibW96XCIrdF18fHdpbmRvd1tcIm1zXCIrdF19dmFyIHc9MDtmdW5jdGlvbiBQKHQpe3ZhciBpPStuZXcgRGF0ZSxlPU1hdGgubWF4KDAsMTYtKGktdykpO3JldHVybiB3PWkrZSx3aW5kb3cuc2V0VGltZW91dCh0LGUpfXZhciBiPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHgoXCJSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcIil8fFAsVD13aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWV8fHgoXCJDYW5jZWxBbmltYXRpb25GcmFtZVwiKXx8eChcIkNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZVwiKXx8ZnVuY3Rpb24odCl7d2luZG93LmNsZWFyVGltZW91dCh0KX07ZnVuY3Rpb24gTSh0LGksZSl7aWYoIWV8fGIhPT1QKXJldHVybi
24510BiLmNhbGwod2luZG93LHAodCxpKSk7dC5jYWxsKGkpfWZ1bmN0aW9uIHoodCl7dCYmVC5jYWxsKHdpbmRvdyx0KX12YXIgQz17ZXh0ZW5kOmgsY3JlYXRlOnMsYmluZDpwLGxhc3RJZDplLHN0YW1wOm0sdGhyb3R0bGU6bix3cmFwTnVtOm8sZmFsc2VGbjphLGZvcm1hdE51bTpyLHRyaW06dSxzcGxpdFdvcmRzOmwsc2V0T3B0aW9uczpjLGdldFBhcmFtU3RyaW5nOl8sdGVtcGxhdGU6Zixpc0FycmF5OmcsaW5kZXhPZjp2LGVtcHR5SW1hZ2VVcmw6eSxyZXF1ZXN0Rm46YixjYW5jZWxGbjpULHJlcXVlc3RBbmltRnJhbWU6TSxjYW5jZWxBbmltRnJhbWU6en07ZnVuY3Rpb24gUygpe31TLmV4dGVuZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBpKCl7dGhpcy5pbml0aWFsaXplJiZ0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuY2FsbEluaXRIb29rcygpfXZhciBlPWkuX19zdXBlcl9fPXRoaXMucHJvdG90eXBlLG49cyhlKTtmb3IodmFyIG8gaW4obi5jb25zdHJ1Y3Rvcj1pKS5wcm90b3R5cGU9bix0aGlzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLG8pJiZcInByb3RvdHlwZVwiIT09byYmXCJfX3N1cGVyX19cIiE9PW8mJihpW29dPXRoaXNbb10pO3JldHVybiB0LnN0YXRpY3MmJihoKGksdC5zdGF0aWNzKSxkZWxldGUgdC5zdGF0aWNzKSx0LmluY2x1ZGVzJiYoZnVuY3Rpb24odCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIEx8fCFMfHwhTC5NaXhpbilyZXR1cm47dD1nKHQpP3Q6W3RdO2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXRbaV09PT1MLk1peGluLkV2ZW50cyYmY29uc29sZS53YXJuKFwiRGVwcmVjYXRlZCBpbmNsdWRlIG9mIEwuTWl4aW4uRXZlbnRzOiB0aGlzIHByb3BlcnR5IHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgcmVsZWFzZXMsIHBsZWFzZSBpbmhlcml0IGZyb20gTC5FdmVudGVkIGluc3RlYWQuXCIsKG5ldyBFcnJvcikuc3RhY2spfSh0LmluY2x1ZGVzKSxoLmFwcGx5KG51bGwsW25dLmNvbmNhdCh0LmluY2x1ZGVzKSksZGVsZXRlIHQuaW5jbHVkZXMpLG4ub3B0aW9ucyYmKHQub3B0aW9ucz1oKHMobi5vcHRpb25zKSx0Lm9wdGlvbnMpKSxoKG4sdCksbi5faW5pdEhvb2tzPVtdLG4uY2FsbEluaXRIb29rcz1mdW5jdGlvbigpe2lmKCF0aGlzLl9pbml0SG9va3NDYWxsZWQpe2UuY2FsbEluaXRIb29rcyYmZS5jYWxsSW5pdEhvb2tzLmNhbGwodGhpcyksdGhpcy5faW5pdEhvb2tzQ2FsbGVkPSEwO2Zvcih2YXIgdD0wLGk9bi5faW5pdEhvb2tzLmxlbmd0aDt0PGk7dCsrKW4uX2luaXRIb29rc1t0XS5jYWxsKHRoaXMpfX0saX0sUy5pbmNsdWRlPWZ1bmN0aW9uKHQpe3JldHVybiBoKHRoaXMucHJvdG90eXBlLHQpLHRoaXN9LFMubWVyZ2VPcHRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBoKHRoaXMucHJvdG90eXBlLm9wdGlvbnMsdCksdGhpc30sUy5hZGRJbml0SG9vaz1mdW5jdGlvbih0KXt2YXIgaT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXt0aGlzW3RdLmFwcGx5KHRoaXMsaSl9O3JldHVybiB0aGlzLnByb3RvdHlwZS5faW5pdEhvb2tzPXRoaXMucHJvdG90eXBlLl9pbml0SG9va3N8fFtdLHRoaXMucHJvdG90eXBlLl9pbml0SG9va3MucHVzaChlKSx0aGlzfTt2YXIgWj17b246ZnVuY3Rpb24odCxpLGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KWZvcih2YXIgbiBpbiB0KXRoaXMuX29uKG4sdFtuXSxpKTtlbHNlIGZvcih2YXIgbz0wLHM9KHQ9bCh0KSkubGVuZ3RoO288cztvKyspdGhpcy5fb24odFtvXSxpLGUpO3JldHVybiB0aGlzfSxvZmY6ZnVuY3Rpb24odCxpLGUpe2lmKHQpaWYoXCJvYmplY3RcIj09dHlwZW9mIHQpZm9yKHZhciBuIGluIHQpdGhpcy5fb2ZmKG4sdFtuXSxpKTtlbHNlIGZvcih2YXIgbz0wLHM9KHQ9bCh0KSkubGVuZ3RoO288cztvKyspdGhpcy5fb2ZmKHRbb10saSxlKTtlbHNlIGRlbGV0ZSB0aGlzLl9ldmVudHM7cmV0dXJuIHRoaXN9LF9vbjpmdW5jdGlvbih0LGksZSl7dGhpcy5fZXZlbnRzPXRoaXMuX2V2ZW50c3x8e307dmFyIG49dGhpcy5fZXZlbnRzW3RdO258fChuPVtdLHRoaXMuX2V2ZW50c1t0XT1uKSxlPT09dGhpcyYmKGU9dm9pZCAwKTtmb3IodmFyIG89e2ZuOmksY3R4OmV9LHM9bixyPTAsYT1zLmxlbmd0aDtyPGE7cisrKWlmKHNbcl0uZm49PT1pJiZzW3JdLmN0eD09PWUpcmV0dXJuO3MucHVzaChvKX0sX29mZjpmdW5jdGlvbih0LGksZSl7dmFyIG4sbyxzO2lmKHRoaXMuX2V2ZW50cyYmKG49dGhpcy5fZXZlbnRzW3RdKSlpZihpKXtpZihlPT09dGhpcyYmKGU9dm9pZCAwKSxuKWZvcihvPTAscz1uLmxlbmd0aDtvPHM7bysrKXt2YXIgcj1uW29dO2lmKHIuY3R4PT09ZSYmci5mbj09PWkpcmV0dXJuIHIuZm49YSx0aGlzLl9maXJpbmdDb3VudCYmKHRoaXMuX2V2ZW50c1t0XT1uPW4uc2xpY2UoKSksdm9pZCBuLnNwbGljZShvLDEpfX1lbHNle2ZvcihvPTAscz1uLmxlbmd0aDtvPHM7bysrKW5bb10uZm49YTtkZWxldGUgdGhpcy5fZXZlbnRzW3RdfX0sZmlyZTpmdW5jdGlvbih0LGksZSl7aWYoIXRoaXMubGlzdGVucyh0LGUpKXJldHVybiB0aGlzO3ZhciBuPWgoe30saSx7dHlwZTp0LHRhcmdldDp0aGlzLHNvdXJjZVRhcmdldDppJiZpLnNvdXJjZVRhcmdldHx8dGhpc30pO2lmKHRoaXMuX2V2ZW50cyl7dmFyIG89dGhpcy5fZXZlbnRzW3RdO2lmKG8pe3RoaXMuX2ZpcmluZ0NvdW50PXRoaXMuX2ZpcmluZ0NvdW50KzF8fDE7Zm9yKHZhciBzPTAscj1vLmxlbmd0aDtzPHI7cysrKXt2YXIgYT1vW3NdO2EuZm4uY2FsbChhLmN0eHx8dGhpcyxuKX10aGlzLl9maXJpbmdDb3VudC0tfX1yZXR1cm4gZSYmdGhpcy5fcHJvcGFnYXRlRXZlbnQobiksdGhpc30sbGlzdGVuczpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMuX2V2ZW50cyYmdGhpcy5fZXZlbnRzW3RdO2lmKGUmJmUubGVuZ3RoKXJldHVybiEwO2lmKGkpZm9yKHZhciBuIGluIHRoaXMuX2V2ZW50UGFyZW50cylpZih0aGlzLl9ldmVudFBhcmVudHNbbl0ubGlzdGVucyh0LGkpKXJldHVybiEwO3JldHVybiExfSxvbmNlOmZ1bmN0aW9uKHQsaSxlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgdCl7Zm9yKHZhciBuIGluIHQpdGhpcy5vbmNlKG4
24510sdFtuXSxpKTtyZXR1cm4gdGhpc312YXIgbz1wKGZ1bmN0aW9uKCl7dGhpcy5vZmYodCxpLGUpLm9mZih0LG8sZSl9LHRoaXMpO3JldHVybiB0aGlzLm9uKHQsaSxlKS5vbih0LG8sZSl9LGFkZEV2ZW50UGFyZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ldmVudFBhcmVudHM9dGhpcy5fZXZlbnRQYXJlbnRzfHx7fSx0aGlzLl9ldmVudFBhcmVudHNbbSh0KV09dCx0aGlzfSxyZW1vdmVFdmVudFBhcmVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXZlbnRQYXJlbnRzJiZkZWxldGUgdGhpcy5fZXZlbnRQYXJlbnRzW20odCldLHRoaXN9LF9wcm9wYWdhdGVFdmVudDpmdW5jdGlvbih0KXtmb3IodmFyIGkgaW4gdGhpcy5fZXZlbnRQYXJlbnRzKXRoaXMuX2V2ZW50UGFyZW50c1tpXS5maXJlKHQudHlwZSxoKHtsYXllcjp0LnRhcmdldCxwcm9wYWdhdGVkRnJvbTp0LnRhcmdldH0sdCksITApfX07Wi5hZGRFdmVudExpc3RlbmVyPVoub24sWi5yZW1vdmVFdmVudExpc3RlbmVyPVouY2xlYXJBbGxFdmVudExpc3RlbmVycz1aLm9mZixaLmFkZE9uZVRpbWVFdmVudExpc3RlbmVyPVoub25jZSxaLmZpcmVFdmVudD1aLmZpcmUsWi5oYXNFdmVudExpc3RlbmVycz1aLmxpc3RlbnM7dmFyIEU9Uy5leHRlbmQoWik7ZnVuY3Rpb24gayh0LGksZSl7dGhpcy54PWU/TWF0aC5yb3VuZCh0KTp0LHRoaXMueT1lP01hdGgucm91bmQoaSk6aX12YXIgQj1NYXRoLnRydW5jfHxmdW5jdGlvbih0KXtyZXR1cm4gMDx0P01hdGguZmxvb3IodCk6TWF0aC5jZWlsKHQpfTtmdW5jdGlvbiBBKHQsaSxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGs/dDpnKHQpP25ldyBrKHRbMF0sdFsxXSk6bnVsbD09dD90Olwib2JqZWN0XCI9PXR5cGVvZiB0JiZcInhcImluIHQmJlwieVwiaW4gdD9uZXcgayh0LngsdC55KTpuZXcgayh0LGksZSl9ZnVuY3Rpb24gSSh0LGkpe2lmKHQpZm9yKHZhciBlPWk/W3QsaV06dCxuPTAsbz1lLmxlbmd0aDtuPG87bisrKXRoaXMuZXh0ZW5kKGVbbl0pfWZ1bmN0aW9uIE8odCxpKXtyZXR1cm4hdHx8dCBpbnN0YW5jZW9mIEk/dDpuZXcgSSh0LGkpfWZ1bmN0aW9uIFIodCxpKXtpZih0KWZvcih2YXIgZT1pP1t0LGldOnQsbj0wLG89ZS5sZW5ndGg7bjxvO24rKyl0aGlzLmV4dGVuZChlW25dKX1mdW5jdGlvbiBOKHQsaSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBSP3Q6bmV3IFIodCxpKX1mdW5jdGlvbiBEKHQsaSxlKXtpZihpc05hTih0KXx8aXNOYU4oaSkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBMYXRMbmcgb2JqZWN0OiAoXCIrdCtcIiwgXCIraStcIilcIik7dGhpcy5sYXQ9K3QsdGhpcy5sbmc9K2ksdm9pZCAwIT09ZSYmKHRoaXMuYWx0PStlKX1mdW5jdGlvbiBqKHQsaSxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIEQ/dDpnKHQpJiZcIm9iamVjdFwiIT10eXBlb2YgdFswXT8zPT09dC5sZW5ndGg/bmV3IEQodFswXSx0WzFdLHRbMl0pOjI9PT10Lmxlbmd0aD9uZXcgRCh0WzBdLHRbMV0pOm51bGw6bnVsbD09dD90Olwib2JqZWN0XCI9PXR5cGVvZiB0JiZcImxhdFwiaW4gdD9uZXcgRCh0LmxhdCxcImxuZ1wiaW4gdD90LmxuZzp0Lmxvbix0LmFsdCk6dm9pZCAwPT09aT9udWxsOm5ldyBEKHQsaSxlKX1rLnByb3RvdHlwZT17Y2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGsodGhpcy54LHRoaXMueSl9LGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9hZGQoQSh0KSl9LF9hZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXN9LHN1YnRyYWN0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3N1YnRyYWN0KEEodCkpfSxfc3VidHJhY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXN9LGRpdmlkZUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2RpdmlkZUJ5KHQpfSxfZGl2aWRlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC89dCx0aGlzLnkvPXQsdGhpc30sbXVsdGlwbHlCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0aXBseUJ5KHQpfSxfbXVsdGlwbHlCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzfSxzY2FsZUJ5OmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgayh0aGlzLngqdC54LHRoaXMueSp0LnkpfSx1bnNjYWxlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrKHRoaXMueC90LngsdGhpcy55L3QueSl9LHJvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm91bmQoKX0sX3JvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzfSxmbG9vcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX2Zsb29yKCl9LF9mbG9vcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc30sY2VpbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX2NlaWwoKX0sX2NlaWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzfSx0cnVuYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3RydW5jKCl9LF90cnVuYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLng9Qih0aGlzLngpLHRoaXMueT1CKHRoaXMueSksdGhpc30sZGlzdGFuY2VUbzpmdW5jdGlvbih0KXt2YXIgaT0odD1BKHQpKS54LXRoaXMueCxlPXQueS10aGlzLnk7cmV0dXJuIE1hdGguc3FydChpKmkrZSplKX0sZXF1YWxzOmZ1bmN0aW9uKHQpe3JldHVybih0PUEodCkpLng9PT10aGlzLngmJnQueT09PXRoaXMueX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9QSh0KSxNYXRoLmFicyh0LngpPD1NYXRoLmFicyh0aGlzLngpJiZNYXRoLmFicyh0LnkpPD1NYXRoLmFicyh0aGlzLnkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVyblwiUG9pbnQoXCIrcih0aGlzLngpK1wiLCBcIityKHRoaXMueSkrXCIpXCJ9fSxJLnByb3RvdHlwZT17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3JldHVybiB0PUEodCksdGhpcy5taW58fHRoaXMubWF4Pyh0aGlzLm1pbi54PU1hdGgubWluKHQueCx0aGlzLm1pbi54KSx0aGlzLm1heC54PU1hdGgubWF4KHQueCx0aGlzLm1heC54KSx0aGlzLm1pbi55PU1hdGgubWluKHQueSx0aGlzLm1pbi55KSx0aGlzLm1heC55PU1hdGgubWF4KHQueSx0aGlzLm1heC55KSk6KHRoaXMubWluPXQuY2xvbmUoKSx0aGlzLm1heD10LmNsb25lKCkpLHRoaXN9LGdldENlbnRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGsoKHRoaXMubWluLngrdGhpcy5tYXgueCkvMiwodGhpcy5taW4ueSt0aGlzLm1heC55KS8yLHQpfS
24510xnZXRCb3R0b21MZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrKHRoaXMubWluLngsdGhpcy5tYXgueSl9LGdldFRvcFJpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrKHRoaXMubWF4LngsdGhpcy5taW4ueSl9LGdldFRvcExlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5taW59LGdldEJvdHRvbVJpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4fSxnZXRTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4LnN1YnRyYWN0KHRoaXMubWluKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7dmFyIGksZTtyZXR1cm4odD0oXCJudW1iZXJcIj09dHlwZW9mIHRbMF18fHQgaW5zdGFuY2VvZiBrP0E6TykodCkpaW5zdGFuY2VvZiBJPyhpPXQubWluLGU9dC5tYXgpOmk9ZT10LGkueD49dGhpcy5taW4ueCYmZS54PD10aGlzLm1heC54JiZpLnk+PXRoaXMubWluLnkmJmUueTw9dGhpcy5tYXgueX0saW50ZXJzZWN0czpmdW5jdGlvbih0KXt0PU8odCk7dmFyIGk9dGhpcy5taW4sZT10aGlzLm1heCxuPXQubWluLG89dC5tYXgscz1vLng+PWkueCYmbi54PD1lLngscj1vLnk+PWkueSYmbi55PD1lLnk7cmV0dXJuIHMmJnJ9LG92ZXJsYXBzOmZ1bmN0aW9uKHQpe3Q9Tyh0KTt2YXIgaT10aGlzLm1pbixlPXRoaXMubWF4LG49dC5taW4sbz10Lm1heCxzPW8ueD5pLngmJm4ueDxlLngscj1vLnk+aS55JiZuLnk8ZS55O3JldHVybiBzJiZyfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5taW58fCF0aGlzLm1heCl9fSxSLnByb3RvdHlwZT17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3ZhciBpLGUsbj10aGlzLl9zb3V0aFdlc3Qsbz10aGlzLl9ub3J0aEVhc3Q7aWYodCBpbnN0YW5jZW9mIEQpZT1pPXQ7ZWxzZXtpZighKHQgaW5zdGFuY2VvZiBSKSlyZXR1cm4gdD90aGlzLmV4dGVuZChqKHQpfHxOKHQpKTp0aGlzO2lmKGk9dC5fc291dGhXZXN0LGU9dC5fbm9ydGhFYXN0LCFpfHwhZSlyZXR1cm4gdGhpc31yZXR1cm4gbnx8bz8obi5sYXQ9TWF0aC5taW4oaS5sYXQsbi5sYXQpLG4ubG5nPU1hdGgubWluKGkubG5nLG4ubG5nKSxvLmxhdD1NYXRoLm1heChlLmxhdCxvLmxhdCksby5sbmc9TWF0aC5tYXgoZS5sbmcsby5sbmcpKToodGhpcy5fc291dGhXZXN0PW5ldyBEKGkubGF0LGkubG5nKSx0aGlzLl9ub3J0aEVhc3Q9bmV3IEQoZS5sYXQsZS5sbmcpKSx0aGlzfSxwYWQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fc291dGhXZXN0LGU9dGhpcy5fbm9ydGhFYXN0LG49TWF0aC5hYnMoaS5sYXQtZS5sYXQpKnQsbz1NYXRoLmFicyhpLmxuZy1lLmxuZykqdDtyZXR1cm4gbmV3IFIobmV3IEQoaS5sYXQtbixpLmxuZy1vKSxuZXcgRChlLmxhdCtuLGUubG5nK28pKX0sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEKCh0aGlzLl9zb3V0aFdlc3QubGF0K3RoaXMuX25vcnRoRWFzdC5sYXQpLzIsKHRoaXMuX3NvdXRoV2VzdC5sbmcrdGhpcy5fbm9ydGhFYXN0LmxuZykvMil9LGdldFNvdXRoV2VzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3R9LGdldE5vcnRoRWFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub3J0aEVhc3R9LGdldE5vcnRoV2VzdDpmdW5jdGlvbigpe3JldHVybiBuZXcgRCh0aGlzLmdldE5vcnRoKCksdGhpcy5nZXRXZXN0KCkpfSxnZXRTb3V0aEVhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEQodGhpcy5nZXRTb3V0aCgpLHRoaXMuZ2V0RWFzdCgpKX0sZ2V0V2VzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3QubG5nfSxnZXRTb3V0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3QubGF0fSxnZXRFYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sbmd9LGdldE5vcnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sYXR9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3Q9KFwibnVtYmVyXCI9PXR5cGVvZiB0WzBdfHx0IGluc3RhbmNlb2YgRHx8XCJsYXRcImluIHQ/ajpOKSh0KTt2YXIgaSxlLG49dGhpcy5fc291dGhXZXN0LG89dGhpcy5fbm9ydGhFYXN0O3JldHVybiB0IGluc3RhbmNlb2YgUj8oaT10LmdldFNvdXRoV2VzdCgpLGU9dC5nZXROb3J0aEVhc3QoKSk6aT1lPXQsaS5sYXQ+PW4ubGF0JiZlLmxhdDw9by5sYXQmJmkubG5nPj1uLmxuZyYmZS5sbmc8PW8ubG5nfSxpbnRlcnNlY3RzOmZ1bmN0aW9uKHQpe3Q9Tih0KTt2YXIgaT10aGlzLl9zb3V0aFdlc3QsZT10aGlzLl9ub3J0aEVhc3Qsbj10LmdldFNvdXRoV2VzdCgpLG89dC5nZXROb3J0aEVhc3QoKSxzPW8ubGF0Pj1pLmxhdCYmbi5sYXQ8PWUubGF0LHI9by5sbmc+PWkubG5nJiZuLmxuZzw9ZS5sbmc7cmV0dXJuIHMmJnJ9LG92ZXJsYXBzOmZ1bmN0aW9uKHQpe3Q9Tih0KTt2YXIgaT10aGlzLl9zb3V0aFdlc3QsZT10aGlzLl9ub3J0aEVhc3Qsbj10LmdldFNvdXRoV2VzdCgpLG89dC5nZXROb3J0aEVhc3QoKSxzPW8ubGF0PmkubGF0JiZuLmxhdDxlLmxhdCxyPW8ubG5nPmkubG5nJiZuLmxuZzxlLmxuZztyZXR1cm4gcyYmcn0sdG9CQm94U3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMuZ2V0V2VzdCgpLHRoaXMuZ2V0U291dGgoKSx0aGlzLmdldEVhc3QoKSx0aGlzLmdldE5vcnRoKCldLmpvaW4oXCIsXCIpfSxlcXVhbHM6ZnVuY3Rpb24odCxpKXtyZXR1cm4hIXQmJih0PU4odCksdGhpcy5fc291dGhXZXN0LmVxdWFscyh0LmdldFNvdXRoV2VzdCgpLGkpJiZ0aGlzLl9ub3J0aEVhc3QuZXF1YWxzKHQuZ2V0Tm9ydGhFYXN0KCksaSkpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5fc291dGhXZXN0fHwhdGhpcy5fbm9ydGhFYXN0KX19O3ZhciBXLEg9e2xhdExuZ1RvUG9pbnQ6ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLnByb2plY3Rpb24ucHJvamVjdCh0KSxuPXRoaXMuc2NhbGUoaSk7cmV0dXJuIHRoaXMudHJhbnNmb3JtYXRpb24uX3RyYW5zZm9ybShlLG4pfSxwb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5zY2FsZShpKSxuPXRoaXMudHJhbnNmb3JtYXRpb24udW50cmFuc2Zvcm0odCxlKTtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdChuKX0scHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnByb2plY3QodCl9LHVucHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdCh0KX0sc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDI1NipNYXRoLnBvdygyLHQpfSx6b29tOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0LzI1NikvTWF0aC5MTjJ9LGdldFByb2plY3RlZEJvdW5kczpmdW5jdGlvbih0KXtpZih0aGlzLmluZmluaXRlKXJldHVybi
24510BudWxsO3ZhciBpPXRoaXMucHJvamVjdGlvbi5ib3VuZHMsZT10aGlzLnNjYWxlKHQpO3JldHVybiBuZXcgSSh0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShpLm1pbixlKSx0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShpLm1heCxlKSl9LGluZmluaXRlOiEoRC5wcm90b3R5cGU9e2VxdWFsczpmdW5jdGlvbih0LGkpe3JldHVybiEhdCYmKHQ9aih0KSxNYXRoLm1heChNYXRoLmFicyh0aGlzLmxhdC10LmxhdCksTWF0aC5hYnModGhpcy5sbmctdC5sbmcpKTw9KHZvaWQgMD09PWk/MWUtOTppKSl9LHRvU3RyaW5nOmZ1bmN0aW9uKHQpe3JldHVyblwiTGF0TG5nKFwiK3IodGhpcy5sYXQsdCkrXCIsIFwiK3IodGhpcy5sbmcsdCkrXCIpXCJ9LGRpc3RhbmNlVG86ZnVuY3Rpb24odCl7cmV0dXJuIEYuZGlzdGFuY2UodGhpcyxqKHQpKX0sd3JhcDpmdW5jdGlvbigpe3JldHVybiBGLndyYXBMYXRMbmcodGhpcyl9LHRvQm91bmRzOmZ1bmN0aW9uKHQpe3ZhciBpPTE4MCp0LzQwMDc1MDE3LGU9aS9NYXRoLmNvcyhNYXRoLlBJLzE4MCp0aGlzLmxhdCk7cmV0dXJuIE4oW3RoaXMubGF0LWksdGhpcy5sbmctZV0sW3RoaXMubGF0K2ksdGhpcy5sbmcrZV0pfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgRCh0aGlzLmxhdCx0aGlzLmxuZyx0aGlzLmFsdCl9fSksd3JhcExhdExuZzpmdW5jdGlvbih0KXt2YXIgaT10aGlzLndyYXBMbmc/byh0LmxuZyx0aGlzLndyYXBMbmcsITApOnQubG5nO3JldHVybiBuZXcgRCh0aGlzLndyYXBMYXQ/byh0LmxhdCx0aGlzLndyYXBMYXQsITApOnQubGF0LGksdC5hbHQpfSx3cmFwTGF0TG5nQm91bmRzOmZ1bmN0aW9uKHQpe3ZhciBpPXQuZ2V0Q2VudGVyKCksZT10aGlzLndyYXBMYXRMbmcoaSksbj1pLmxhdC1lLmxhdCxvPWkubG5nLWUubG5nO2lmKDA9PW4mJjA9PW8pcmV0dXJuIHQ7dmFyIHM9dC5nZXRTb3V0aFdlc3QoKSxyPXQuZ2V0Tm9ydGhFYXN0KCk7cmV0dXJuIG5ldyBSKG5ldyBEKHMubGF0LW4scy5sbmctbyksbmV3IEQoci5sYXQtbixyLmxuZy1vKSl9fSxGPWgoe30sSCx7d3JhcExuZzpbLTE4MCwxODBdLFI6NjM3MWUzLGRpc3RhbmNlOmZ1bmN0aW9uKHQsaSl7dmFyIGU9TWF0aC5QSS8xODAsbj10LmxhdCplLG89aS5sYXQqZSxzPU1hdGguc2luKChpLmxhdC10LmxhdCkqZS8yKSxyPU1hdGguc2luKChpLmxuZy10LmxuZykqZS8yKSxhPXMqcytNYXRoLmNvcyhuKSpNYXRoLmNvcyhv
24510KSpyKnIsaD0yKk1hdGguYXRhbjIoTWF0aC5zcXJ0KGEpLE1hdGguc3FydCgxLWEpKTtyZXR1cm4gdGhpcy5SKmh9fSksVT02Mzc4MTM3LFY9e1I6VSxNQVhfTEFUSVRVREU6ODUuMDUxMTI4Nzc5OCxwcm9qZWN0OmZ1bmN0aW9uKHQpe3ZhciBpPU1hdGguUEkvMTgwLGU9dGhpcy5NQVhfTEFUSVRVREUsbj1NYXRoLm1heChNYXRoLm1pbihlLHQubGF0KSwtZSksbz1NYXRoLnNpbihuKmkpO3JldHVybiBuZXcgayh0aGlzLlIqdC5sbmcqaSx0aGlzLlIqTWF0aC5sb2coKDErbykvKDEtbykpLzIpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGk9MTgwL01hdGguUEk7cmV0dXJuIG5ldyBEKCgyKk1hdGguYXRhbihNYXRoLmV4cCh0LnkvdGhpcy5SKSktTWF0aC5QSS8yKSppLHQueCppL3RoaXMuUil9LGJvdW5kczpuZXcgSShbLShXPVUqTWF0aC5QSSksLVddLFtXLFddKX07ZnVuY3Rpb24gcSh0LGksZSxuKXtpZihnKHQpKXJldHVybiB0aGlzLl9hPXRbMF0sdGhpcy5fYj10WzFdLHRoaXMuX2M9dFsyXSx2b2lkKHRoaXMuX2Q9dFszXSk7dGhpcy5fYT10LHRoaXMuX2I9aSx0aGlzLl9jPWUsdGhpcy5fZD1ufWZ1bmN0aW9uIEcodCxpLGUsbil7cmV0dXJuIG5ldyBxKHQsaSxlLG4pfXEucHJvdG90eXBlPXt0cmFuc2Zvcm06ZnVuY3Rpb24odCxpKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtKHQuY2xvbmUoKSxpKX0sX3RyYW5zZm9ybTpmdW5jdGlvbih0LGkpe3JldHVybiBpPWl8fDEsdC54PWkqKHRoaXMuX2EqdC54K3RoaXMuX2IpLHQueT1pKih0aGlzLl9jKnQueSt0aGlzLl9kKSx0fSx1bnRyYW5zZm9ybTpmdW5jdGlvbih0LGkpe3JldHVybiBpPWl8fDEsbmV3IGsoKHQueC9pLXRoaXMuX2IpL3RoaXMuX2EsKHQueS9pLXRoaXMuX2QpL3RoaXMuX2MpfX07dmFyIEssWT1oKHt9LEYse2NvZGU6XCJFUFNHOjM4NTdcIixwcm9qZWN0aW9uOlYsdHJhbnNmb3JtYXRpb246RyhLPS41LyhNYXRoLlBJKlYuUiksLjUsLUssLjUpfSksWD1oKHt9LFkse2NvZGU6XCJFUFNHOjkwMDkxM1wifSk7ZnVuY3Rpb24gSih0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix0KX1mdW5jdGlvbiAkKHQsaSl7Zm9yKHZhciBlLG4sbyxzLHI9XCJcIixhPTAsaD10Lmxlbmd0aDthPGg7YSsrKXtmb3IoZT0wLG49KG89dFthXSkubGVuZ3RoO2U8bjtlKyspcis9KGU/XCJMXCI6XCJNXCIpKyhzPW9bZV0pLngrXCIgXCIrcy55O3IrPWk/WnQ/XCJ6XCI6XCJ4XCI6XCJcIn1yZXR1cm4gcnx8XCJNMCAwXCJ9dmFyIFE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLHR0PVwiQWN0aXZlWE9iamVjdFwiaW4gd2luZG93LGl0PXR0JiYhZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcixldD1cIm1zTGF1bmNoVXJpXCJpbiBuYXZpZ2F0b3ImJiEoXCJkb2N1bWVudE1vZGVcImluIGRvY3VtZW50KSxudD1rdChcIndlYmtpdFwiKSxvdD1rdChcImFuZHJvaWRcIiksc3Q9a3QoXCJhbmRyb2lkIDJcIil8fGt0KFwiYW5kcm9pZCAzXCIpLHJ0PXBhcnNlSW50KC9XZWJLaXRcXC8oWzAtOV0rKXwkLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpWzFdLDEwKSxhdD1vdCYma3QoXCJHb29nbGVcIikmJnJ0PDUzNyYmIShcIkF1ZGlvTm9kZVwiaW4gd2luZG93KSxodD0hIXdpbmRvdy5vcGVyYSx1dD0hZXQmJmt0KFwiY2hyb21lXCIpLGx0PWt0KFwiZ2Vja29cIikmJiFudCYmIWh0JiYhdHQsY3Q9IXV0JiZrdChcInNhZmFyaVwiKSxfdD1rdChcInBoYW50b21cIiksZHQ9XCJPVHJhbnNpdGlvblwiaW4gUSxwdD0wPT09bmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoXCJXaW5cIiksbXQ9dHQmJlwidHJhbnNpdGlvblwiaW4gUSxmdD1cIldlYktpdENTU01hdHJpeFwiaW4gd2luZG93JiZcIm0xMVwiaW4gbmV3IHdpbmRvdy5XZWJLaXRDU1NNYXRyaXgmJiFzdCxndD1cIk1velBlcnNwZWN0aXZlXCJpbiBRLHZ0PSF3aW5kb3cuTF9ESVNBQkxFXzNEJiYobXR8fGZ0fHxndCkmJiFkdCYmIV90LHl0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBvcmllbnRhdGlvbnx8a3QoXCJtb2JpbGVcIikseHQ9eXQmJm50LHd0PXl0JiZmdCxQdD0hd2luZG93LlBvaW50ZXJFdmVudCYmd2luZG93Lk1TUG9pbnRlckV2ZW50LEx0PSEoIXdpbmRvdy5Qb2ludGVyRXZlbnQmJiFQdCksYnQ9IXdpbmRvdy5MX05PX1RPVUNIJiYoTHR8fFwib250b3VjaHN0YXJ0XCJpbiB3aW5kb3d8fHdpbmRvdy5Eb2N1bWVudFRvdWNoJiZkb2N1bWVudCBpbnN0YW5jZW9mIHdpbmRvdy5Eb2N1bWVudFRvdWNoKSxUdD15dCYmaHQsTXQ9eXQmJmx0LHp0PTE8KHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHx3aW5kb3cuc2NyZWVuLmRldmljZVhEUEkvd2luZG93LnNjcmVlbi5sb2dpY2FsWERQSSksQ3Q9ZnVuY3Rpb24oKXt2YXIgdD0hMTt0cnl7dmFyIGk9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwicGFzc2l2ZVwiLHtnZXQ6ZnVuY3Rpb24oKXt0PSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidGVzdFBhc3NpdmVFdmVudFN1cHBvcnRcIixhLGkpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFBhc3NpdmVFdmVudFN1cHBvcnRcIixhLGkpfWNhdGNoKHQpe31yZXR1cm4gdH0oKSxTdD0hIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIikuZ2V0Q29udGV4dCxadD0hKCFkb2N1bWVudC5jcmVhdGVFbGVtZW50TlN8fCFKKFwic3ZnXCIpLmNyZWF0ZVNWR1JlY3QpLEV0PSFadCYmZnVuY3Rpb24oKXt0cnl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTt0LmlubmVySFRNTD0nPHY6c2hhcGUgYWRqPVwiMVwiLz4nO3ZhciBpPXQuZmlyc3RDaGlsZDtyZXR1cm4gaS5zdHlsZS5iZWhhdmlvcj1cInVybCgjZGVmYXVsdCNWTUwpXCIsaSYmXCJvYmplY3RcIj09dHlwZW9mIGkuYWRqfWNhdGNoKHQpe3JldHVybiExfX0oKTtmdW5jdGlvbiBrdCh0KXtyZXR1cm4gMDw9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YodCl9dmFyIEJ0PXtpZTp0dCxpZWx0OTppdCxlZGdlOmV0LHdlYmtpdDpudCxhbmRyb2lkOm90LGFuZHJvaWQyMzpzdCxhbmRyb2lkU3RvY2s6YXQsb3BlcmE6aHQsY2hyb21lOnV0LGdlY2tvOmx0LHNhZmFyaTpjdCxwaGFudG9tOl90LG9wZXJhMTI6ZHQsd2luOnB0LGllM2Q6bXQsd2Via2l0M2Q6ZnQsZ2Vja28zZDpndCxhbnkzZDp2dCxtb2JpbGU6eXQsbW9iaWxlV2Via2l0Onh0LG1vYmlsZVdlYmtpdDNkOnd0LG1zUG9pbnRlcjpQdCxwb2ludGVyOkx0LHRvdWNoOmJ0LG1vYmlsZU9wZXJhOlR0LG1vYmlsZUdlY2tvOk10LHJldGluYTp6dCxwYXNzaXZlRXZlbnRzOkN0LGNhbnZhczpTdCxzdmc6WnQsdm1sOkV0fSxBdD1QdD9cIk1TUG9pbnRlckRvd25cIjpcInBvaW50ZXJkb3duXCIsSXQ9UHQ/XCJNU1BvaW50ZXJNb3ZlXCI6XCJwb2ludGVybW92ZVwiLE90PVB0P1wiTVNQb2ludGVyVXBcIjpcInBvaW50ZXJ1cFwiLFJ0PVB0P1wiTVNQb2ludGVyQ2FuY2VsXCI6XCJwb2ludGVyY2FuY2VsXCIsTnQ9e30sRHQ9ITE7ZnVuY3Rpb24ganQodCxpLGUsbil7ZnVuY3Rpb24gbyh0KXtVdCh0LHIpfXZhciBzLHIsYSxoLHUsbCxjLF87ZnVuY3Rpb24gZCh0KXt0LnBvaW50ZXJUeXBlPT09KHQuTVNQT0lOVEVSX1RZUEVfTU9VU0V8fFwibW91c2VcIikmJjA9PT10LmJ1dHRvbnN8fFV0KHQsaCl9cmV0dXJuXCJ0b3VjaHN0YXJ0XCI9PT1pPyh1PXQsbD1lLGM9bixfPXAoZnVuY3Rpb24odCl7dC5NU1BPSU5URVJfVFlQRV9UT1VDSCYmdC5wb2ludGVyVHlwZT09PXQuTVNQT0lOVEVSX1RZUEVfVE9VQ0gmJlJpKHQpLFV0KHQsbCl9KSx1W1wiX2xlYWZsZXRfdG91Y2hzdGFydFwiK2NdPV8sdS5hZGRFdmVudExpc3RlbmVyKEF0LF8sITEpLER0fHwoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihBdCxXdCwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihJdCxIdCwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihPdCxGdCwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihSdCxGdCwhMCksRHQ9ITApKTpcInRvdWNobW92ZVwiPT09aT8oaD1lLChhPXQpW1wiX2xlYWZsZXRfdG91Y2htb3ZlXCIrbl09ZCxhLmFkZEV2ZW50TGlzdGVuZXIoSXQsZCwhMSkpOlwidG91Y2hlbmRcIj09PWkmJihyPWUsKHM9dClbXCJfbGVhZmxldF90b3VjaGVuZFwiK25dPW8scy5hZGR
24510FdmVudExpc3RlbmVyKE90LG8sITEpLHMuYWRkRXZlbnRMaXN0ZW5lcihSdCxvLCExKSksdGhpc31mdW5jdGlvbiBXdCh0KXtOdFt0LnBvaW50ZXJJZF09dH1mdW5jdGlvbiBIdCh0KXtOdFt0LnBvaW50ZXJJZF0mJihOdFt0LnBvaW50ZXJJZF09dCl9ZnVuY3Rpb24gRnQodCl7ZGVsZXRlIE50W3QucG9pbnRlcklkXX1mdW5jdGlvbiBVdCh0LGkpe2Zvcih2YXIgZSBpbiB0LnRvdWNoZXM9W10sTnQpdC50b3VjaGVzLnB1c2goTnRbZV0pO3QuY2hhbmdlZFRvdWNoZXM9W3RdLGkodCl9dmFyIFZ0PVB0P1wiTVNQb2ludGVyRG93blwiOkx0P1wicG9pbnRlcmRvd25cIjpcInRvdWNoc3RhcnRcIixxdD1QdD9cIk1TUG9pbnRlclVwXCI6THQ/XCJwb2ludGVydXBcIjpcInRvdWNoZW5kXCIsR3Q9XCJfbGVhZmxldF9cIjt2YXIgS3QsWXQsWHQsSnQsJHQsUXQsdGk9ZmkoW1widHJhbnNmb3JtXCIsXCJ3ZWJraXRUcmFuc2Zvcm1cIixcIk9UcmFuc2Zvcm1cIixcIk1velRyYW5zZm9ybVwiLFwibXNUcmFuc2Zvcm1cIl0pLGlpPWZpKFtcIndlYmtpdFRyYW5zaXRpb25cIixcInRyYW5zaXRpb25cIixcIk9UcmFuc2l0aW9uXCIsXCJNb3pUcmFuc2l0aW9uXCIsXCJtc1RyYW5zaXRpb25cIl0pLGVpPVwid2Via2l0VHJhbnNpdGlvblwiPT09aWl8fFwiT1RyYW5zaXRpb25cIj09PWlpP2lpK1wiRW5kXCI6XCJ0cmFuc2l0aW9uZW5kXCI7ZnVuY3Rpb24gbmkodCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk6dH1mdW5jdGlvbiBvaSh0LGkpe3ZhciBlLG49dC5zdHlsZVtpXXx8dC5jdXJyZW50U3R5bGUmJnQuY3VycmVudFN0eWxlW2ldO3JldHVybiBuJiZcImF1dG9cIiE9PW58fCFkb2N1bWVudC5kZWZhdWx0Vmlld3x8KG49KGU9ZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpKT9lW2ldOm51bGwpLFwiYXV0b1wiPT09bj9udWxsOm59ZnVuY3Rpb24gc2kodCxpLGUpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7cmV0dXJuIG4uY2xhc3NOYW1lPWl8fFwiXCIsZSYmZS5hcHBlbmRDaGlsZChuKSxufWZ1bmN0aW9uIHJpKHQpe3ZhciBpPXQucGFyZW50Tm9kZTtpJiZpLnJlbW92ZUNoaWxkKHQpfWZ1bmN0aW9uIGFpKHQpe2Zvcig7dC5maXJzdENoaWxkOyl0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gaGkodCl7dmFyIGk9dC5wYXJlbnROb2RlO2kmJmkubGFzdENoaWxkIT09dCYmaS5hcHBlbmRDaGlsZCh0KX1mdW5jdGlvbiB1aSh0KXt2YXIgaT10LnBhcmVudE5vZGU7aSYmaS5maXJzdENoaWxkIT09dCYmaS5pbnNlcnRCZWZvcmUodCxpLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGxpKHQsaSl7aWYodm9pZCAwIT09dC5jbGFzc0xpc3QpcmV0dXJuIHQuY2xhc3NMaXN0LmNvbnRhaW5zKGkpO3ZhciBlPXBpKHQpO3JldHVybiAwPGUubGVuZ3RoJiZuZXcgUmVnRXhwKFwiKF58XFxcXHMpXCIraStcIihcXFxcc3wkKVwiKS50ZXN0KGUpfWZ1bmN0aW9uIGNpKHQsaSl7dmFyIGU7aWYodm9pZCAwIT09dC5jbGFzc0xpc3QpZm9yKHZhciBuPWwoaSksbz0wLHM9bi5sZW5ndGg7bzxzO28rKyl0LmNsYXNzTGlzdC5hZGQobltvXSk7ZWxzZSBsaSh0LGkpfHxkaSh0LCgoZT1waSh0KSk/ZStcIiBcIjpcIlwiKStpKX1mdW5jdGlvbiBfaSh0LGkpe3ZvaWQgMCE9PXQuY2xhc3NMaXN0P3QuY2xhc3NMaXN0LnJlbW92ZShpKTpkaSh0LHUoKFwiIFwiK3BpKHQpK1wiIFwiKS5yZXBsYWNlKFwiIFwiK2krXCIgXCIsXCIgXCIpKSl9ZnVuY3Rpb24gZGkodCxpKXt2b2lkIDA9PT10LmNsYXNzTmFtZS5iYXNlVmFsP3QuY2xhc3NOYW1lPWk6dC5jbGFzc05hbWUuYmFzZVZhbD1pfWZ1bmN0aW9uIHBpKHQpe3JldHVybiB0LmNvcnJlc3BvbmRpbmdFbGVtZW50JiYodD10LmNvcnJlc3BvbmRpbmdFbGVtZW50KSx2b2lkIDA9PT10LmNsYXNzTmFtZS5iYXNlVmFsP3QuY2xhc3NOYW1lOnQuY2xhc3NOYW1lLmJhc2VWYWx9ZnVuY3Rpb24gbWkodCxpKXtcIm9wYWNpdHlcImluIHQuc3R5bGU/dC5zdHlsZS5vcGFjaXR5PWk6XCJmaWx0ZXJcImluIHQuc3R5bGUmJmZ1bmN0aW9uKHQsaSl7dmFyIGU9ITEsbj1cIkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhXCI7dHJ5e2U9dC5maWx0ZXJzLml0ZW0obil9Y2F0Y2godCl7aWYoMT09PWkpcmV0dXJufWk9TWF0aC5yb3VuZCgxMDAqaSksZT8oZS5FbmFibGVkPTEwMCE9PWksZS5PcGFjaXR5PWkpOnQuc3R5bGUuZmlsdGVyKz1cIiBwcm9naWQ6XCIrbitcIihvcGFjaXR5PVwiK2krXCIpXCJ9KHQsaSl9ZnVuY3Rpb24gZmkodCl7Zm9yKHZhciBpPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSxlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXWluIGkpcmV0dXJuIHRbZV07cmV0dXJuITF9ZnVuY3Rpb24gZ2kodCxpLGUpe3ZhciBuPWl8fG5ldyBrKDAsMCk7dC5zdHlsZVt0aV09KG10P1widHJhbnNsYXRlKFwiK24ueCtcInB4LFwiK24ueStcInB4KVwiOlwidHJhbnNsYXRlM2QoXCIrbi54K1wicHgsXCIrbi55K1wicHgsMClcIikrKGU/XCIgc2NhbGUoXCIrZStcIilcIjpcIlwiKX1mdW5jdGlvbiB2aSh0LGkpe3QuX2xlYWZsZXRfcG9zPWksdnQ/Z2kodCxpKToodC5zdHlsZS5sZWZ0PWkueCtcInB4XCIsdC5zdHlsZS50b3A9aS55K1wicHhcIil9ZnVuY3Rpb24geWkodCl7cmV0dXJuIHQuX2xlYWZsZXRfcG9zfHxuZXcgaygwLDApfWZ1bmN0aW9uIHhpKCl7emk
24510od2luZG93LFwiZHJhZ3N0YXJ0XCIsUmkpfWZ1bmN0aW9uIHdpKCl7U2kod2luZG93LFwiZHJhZ3N0YXJ0XCIsUmkpfWZ1bmN0aW9uIFBpKHQpe2Zvcig7LTE9PT10LnRhYkluZGV4Oyl0PXQucGFyZW50Tm9kZTt0LnN0eWxlJiYoTGkoKSxRdD0oJHQ9dCkuc3R5bGUub3V0bGluZSx0LnN0eWxlLm91dGxpbmU9XCJub25lXCIsemkod2luZG93LFwia2V5ZG93blwiLExpKSl9ZnVuY3Rpb24gTGkoKXskdCYmKCR0LnN0eWxlLm91dGxpbmU9UXQsUXQ9JHQ9dm9pZCAwLFNpKHdpbmRvdyxcImtleWRvd25cIixMaSkpfWZ1bmN0aW9uIGJpKHQpe2Zvcig7ISgodD10LnBhcmVudE5vZGUpLm9mZnNldFdpZHRoJiZ0Lm9mZnNldEhlaWdodHx8dD09PWRvY3VtZW50LmJvZHkpOyk7cmV0dXJuIHR9ZnVuY3Rpb24gVGkodCl7dmFyIGk9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57eDppLndpZHRoL3Qub2Zmc2V0V2lkdGh8fDEseTppLmhlaWdodC90Lm9mZnNldEhlaWdodHx8MSxib3VuZGluZ0NsaWVudFJlY3Q6aX19SnQ9XCJvbnNlbGVjdHN0YXJ0XCJpbiBkb2N1bWVudD8oWHQ9ZnVuY3Rpb24oKXt6aSh3aW5kb3csXCJzZWxlY3RzdGFydFwiLFJpKX0sZnVuY3Rpb24oKXtTaSh3aW5kb3csXCJzZWxlY3RzdGFydFwiLFJpKX0pOihZdD1maShbXCJ1c2VyU2VsZWN0XCIsXCJXZWJraXRVc2VyU2VsZWN0XCIsXCJPVXNlclNlbGVjdFwiLFwiTW96VXNlclNlbGVjdFwiLFwibXNVc2VyU2VsZWN0XCJdKSxYdD1mdW5jdGlvbigpe3ZhciB0O1l0JiYodD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUsS3Q9dFtZdF0sdFtZdF09XCJub25lXCIpfSxmdW5jdGlvbigpe1l0JiYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlW1l0XT1LdCxLdD12b2lkIDApfSk7dmFyIE1pPXtUUkFOU0ZPUk06dGksVFJBTlNJVElPTjppaSxUUkFOU0lUSU9OX0VORDplaSxnZXQ6bmksZ2V0U3R5bGU6b2ksY3JlYXRlOnNpLHJlbW92ZTpyaSxlbXB0eTphaSx0b0Zyb250OmhpLHRvQmFjazp1aSxoYXNDbGFzczpsaSxhZGRDbGFzczpjaSxyZW1vdmVDbGFzczpfaSxzZXRDbGFzczpkaSxnZXRDbGFzczpwaSxzZXRPcGFjaXR5Om1pLHRlc3RQcm9wOmZpLHNldFRyYW5zZm9ybTpnaSxzZXRQb3NpdGlvbjp2aSxnZXRQb3NpdGlvbjp5aSxkaXNhYmxlVGV4dFNlbGVjdGlvbjpYdCxlbmFibGVUZXh0U2VsZWN0aW9uOkp0LGRpc2FibGVJbWFnZURyYWc6eGksZW5hYmxlSW1hZ2VEcmFnOndpLHByZXZlbnRPdXRsaW5lOlBpLHJlc3RvcmVPdXRsaW5lOkxpLGdldFNpemVkUGFyZW50Tm9kZTpiaSxnZXRTY2FsZTpUaX07ZnVuY3Rpb24gemkodCxpLGUsbil7aWYoXCJvYmplY3RcIj09dHlwZW9mIGkpZm9yKHZhciBvIGluIGkpa2kodCxvLGlbb10sZSk7ZWxzZSBmb3IodmFyIHM9MCxyPShpPWwoaSkpLmxlbmd0aDtzPHI7cysrKWtpKHQsaVtzXSxlLG4pO3JldHVybiB0aGlzfXZhciBDaT1cIl9sZWFmbGV0X2V2ZW50c1wiO2Z1bmN0aW9uIFNpKHQsaSxlLG4pe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBpKWZvcih2YXIgbyBpbiBpKUJpKHQsbyxpW29dLGUpO2Vsc2UgaWYoaSlmb3IodmFyIHM9MCxyPShpPWwoaSkpLmxlbmd0aDtzPHI7cysrKUJpKHQsaVtzXSxlLG4pO2Vsc2V7Zm9yKHZhciBhIGluIHRbQ2ldKUJpKHQsYSx0W0NpXVthXSk7ZGVsZXRlIHRbQ2ldfXJldHVybiB0aGlzfWZ1bmN0aW9uIFppKCl7cmV0dXJuIEx0JiYoIWV0JiYhY3QpfXZhciBFaT17bW91c2VlbnRlcjpcIm1vdXNlb3ZlclwiLG1vdXNlbGVhdmU6XCJtb3VzZW91dFwiLHdoZWVsOiEoXCJvbndoZWVsXCJpbiB3aW5kb3cpJiZcIm1vdXNld2hlZWxcIn07ZnVuY3Rpb24ga2koaSx0LGUsbil7dmFyIG89dCttKGUpKyhuP1wiX1wiK20obik6XCJcIik7aWYoaVtDaV0mJmlbQ2ldW29dKXJldHVybiB0aGlzO3ZhciBzLHIsYSxoLHUsbCxjPWZ1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwobnx8aSx0fHx3aW5kb3cuZXZlbnQpfSxfPWM7ZnVuY3Rpb24gZCh0KXtpZihMdCl7aWYoIXQuaXNQcmltYXJ5KXJldHVybjtpZihcIm1vdXNlXCI9PT10LnBvaW50ZXJUeXBlKXJldHVybn1lbHNlIGlmKDE8dC50b3VjaGVzLmxlbmd0aClyZXR1cm47dmFyIGk9RGF0ZS5ub3coKSxlPWktKGh8fGkpO3U9dC50b3VjaGVzP3QudG91Y2hlc1swXTp0LGw9MDxlJiZlPD0yNTAsaD1pfWZ1bmN0aW9uIHAodCl7aWYobCYmIXUuY2FuY2VsQnViYmxlKXtpZihMdCl7aWYoXCJtb3VzZVwiPT09dC5wb2ludGVyVHlwZSlyZXR1cm47dmFyIGksZSxuPXt9O2ZvcihlIGluIHUpaT11W2VdLG5bZV09aSYmaS5iaW5kP2kuYmluZCh1KTppO3U9bn11LnR5cGU9XCJkYmxjbGlja1wiLHUuYnV0dG9uPTAscih1KSxoPW51bGx9fUx0JiYwPT09dC5pbmRleE9mKFwidG91Y2hcIik/anQoaSx0LGMsbyk6YnQmJlwiZGJsY2xpY2tcIj09PXQmJiFaaSgpPyhyPWMsbD0hMSwocz1pKVtHdCtWdCsoYT1vKV09ZCxzW0d0K3F0K2FdPXAsc1tHdCtcImRibGNsaWNrXCIrYV09cixzLmFkZEV2ZW50TGlzdGVuZXIoVnQsZCwhIUN0JiZ7cGFzc2l2ZTohMX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihxdCxwLCEhQ3QmJntwYXNzaXZlOiExfSkscy5hZGRFdmVudExpc3RlbmVyKFwiZGJsY2xpY2tcIixyLCExKSk6XCJhZGRFdmVudExpc3RlbmVyXCJpbiBpP1widG91Y2hzdGFydFwiPT09dHx8XCJ0b3VjaG1vdmVcIj09PXR8fFwid2hlZWxcIj09PXR8fFwibW91c2V3aGVlbFwiPT09dD9pLmFkZEV2ZW50TGlzdGVuZXIoRWlbdF18fHQsYywhIUN0JiZ7cGFzc2l2ZTohMX0pOlwibW91c2VlbnRlclwiPT09dHx8XCJtb3VzZWxlYXZlXCI9PT10PyhjPWZ1bmN0aW9uKHQpe3Q9dHx8d2luZG93LmV2ZW50LFZpKGksdCkmJl8odCl9LGkuYWRkRXZlbnRMaXN0ZW5lcihFaVt0XSxjLCExKSk6aS5hZGRFdmVudExpc3RlbmVyKHQsXywhMSk6XCJhdHRhY2hFdmVudFwiaW4gaSYmaS5hdHRhY2hFdmVudChcIm9uXCIrdCxjKSxpW0NpXT1pW0NpXXx8e30saVtDaV1bb109Y31mdW5jdGlvbiBCaSh0LGksZSxuKXt2YXIgbyxzLHIsYSxoLHUsbCxjLF89aSttKGUpKyhuP1wiX1wiK20obik6XCJcIiksZD10W0NpXSYmdFtDaV1bX107aWYoIWQpcmV0dXJuIHRoaXM7THQmJjA9PT1pLmluZGV4T2YoXCJ0b3VjaFwiKT8oYz0odT10KVtcIl9sZWFmbGV0X1wiKyhsPWkpK19dLFwidG91Y2hzdGFydFwiPT09bD91LnJlbW92ZUV2ZW50TGlzdGVuZXIoQXQsYywhMSk6XCJ0b3VjaG1vdmVcIj09PWw/dS5yZW1vdmVFdmVudExpc3RlbmVyKEl0LGMsITEpOlwidG91Y2hlbmRcIj09PWwmJih1LnJlbW92ZUV2ZW50TGlzdGVuZXIoT3QsYywhMSksdS5yZW1vdmVFdmVudExpc3RlbmVyKFJ0LGMsITEpKSk6YnQmJlwiZGJsY2xpY2tcIj09PWkmJiFaaSgpPyhyPShvPXQpW0d0K1Z0KyhzPV8pXSxhPW9bR3QrcXQrc10saD1vW0d0K1wiZGJsY2xpY2tcIitzXSxvLnJlbW92ZUV2ZW50TGlzdGVuZXIoVnQsciwhIUN0JiZ7cGFzc2l2ZTohMX0pLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihxdCxhLCEhQ3QmJntwYXNzaXZlOiExfSksby5yZW1vdmVFdmVudExpc3RlbmVyKFwiZGJsY2xpY2tcIixoLCExKSk6XCJyZW1vdmVFdmVudExpc3RlbmVyXCJpbiB0P3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihFaVtpXXx8aSxkLCExKTpcImRldGFjaEV2ZW50XCJpbiB0JiZ0LmRldGFjaEV2ZW50KFwib25cIitpLGQpLHRbQ2ldW19dPW51bGx9ZnVuY3Rpb24gQWkodCl7cmV0dXJuIHQuc3RvcFByb3BhZ2F0aW9uP3Quc3RvcFByb3BhZ2F0aW9uKCk6dC5vcmlnaW5hbEV2ZW50P3Qub3JpZ2luYWxFdmVudC5fc3RvcHBlZD0hMDp0LmNhbmNlbEJ1YmJsZT0hMCxVaSh0KSx0aGlzfWZ1bmN0aW9uIElpKHQpe3JldHVybiBraSh0LFwid2hlZWxcIixBaSksdGhpc31mdW5jdGlvbiBPaSh0KXtyZXR1cm4gemkodCxcIm1vdXNlZG93biB0b3VjaHN0YXJ0IGRibGNsaWNrXCIsQWkpLGtpKHQsXCJjbGlja1wiLEZpKSx0aGlzfWZ1bmN0aW9uIFJpKHQpe3JldHVybiB0LnByZXZlbn
24510REZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExLHRoaXN9ZnVuY3Rpb24gTmkodCl7cmV0dXJuIFJpKHQpLEFpKHQpLHRoaXN9ZnVuY3Rpb24gRGkodCxpKXtpZighaSlyZXR1cm4gbmV3IGsodC5jbGllbnRYLHQuY2xpZW50WSk7dmFyIGU9VGkoaSksbj1lLmJvdW5kaW5nQ2xpZW50UmVjdDtyZXR1cm4gbmV3IGsoKHQuY2xpZW50WC1uLmxlZnQpL2UueC1pLmNsaWVudExlZnQsKHQuY2xpZW50WS1uLnRvcCkvZS55LWkuY2xpZW50VG9wKX12YXIgamk9cHQmJnV0PzIqd2luZG93LmRldmljZVBpeGVsUmF0aW86bHQ/d2luZG93LmRldmljZVBpeGVsUmF0aW86MTtmdW5jdGlvbiBXaSh0KXtyZXR1cm4gZXQ/dC53aGVlbERlbHRhWS8yOnQuZGVsdGFZJiYwPT09dC5kZWx0YU1vZGU/LXQuZGVsdGFZL2ppOnQuZGVsdGFZJiYxPT09dC5kZWx0YU1vZGU/MjAqLXQuZGVsdGFZOnQuZGVsdGFZJiYyPT09dC5kZWx0YU1vZGU/NjAqLXQuZGVsdGFZOnQuZGVsdGFYfHx0LmRlbHRhWj8wOnQud2hlZWxEZWx0YT8odC53aGVlbERlbHRhWXx8dC53aGVlbERlbHRhKS8yOnQuZGV0YWlsJiZNYXRoLmFicyh0LmRldGFpbCk8MzI3NjU/MjAqLXQuZGV0YWlsOnQuZGV0YWlsP3QuZGV0YWlsLy0zMjc2NSo2MDowfXZhciBIaT17fTtmdW5jdGlvbiBGaSh0KXtIaVt0LnR5cGVdPSEwfWZ1bmN0aW9uIFVpKHQpe3ZhciBpPUhpW3QudHlwZV07cmV0dXJuIEhpW3QudHlwZV09ITEsaX1mdW5jdGlvbiBWaSh0LGkpe3ZhciBlPWkucmVsYXRlZFRhcmdldDtpZighZSlyZXR1cm4hMDt0cnl7Zm9yKDtlJiZlIT09dDspZT1lLnBhcmVudE5vZGV9Y2F0Y2godCl7cmV0dXJuITF9cmV0dXJuIGUhPT10fXZhciBxaT17b246emksb2ZmOlNpLHN0b3BQcm9wYWdhdGlvbjpBaSxkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb246SWksZGlzYWJsZUNsaWNrUHJvcGFnYXRpb246T2kscHJldmVudERlZmF1bHQ6Umksc3RvcDpOaSxnZXRNb3VzZVBvc2l0aW9uOkRpLGdldFdoZWVsRGVsdGE6V2ksZmFrZVN0b3A6Rmksc2tpcHBlZDpVaSxpc0V4dGVybmFsVGFyZ2V0OlZpLGFkZExpc3RlbmVyOnppLHJlbW92ZUxpc3RlbmVyOlNpfSxHaT1FLmV4dGVuZCh7cnVuOmZ1bmN0aW9uKHQsaSxlLG4pe3RoaXMuc3RvcCgpLHRoaXMuX2VsPXQsdGhpcy5faW5Qcm9ncmVzcz0hMCx0aGlzLl9kdXJhdGlvbj1lfHwuMjUsdGhpcy5fZWFzZU91dFBvd2VyPTEvTWF0aC5tYXgobnx8LjUsLjIpLHRoaXMuX3N0YXJ0UG9zPXlpKHQpLHRoaXMuX29mZnNldD1pLnN1YnRyYWN0KHRoaXMuX3N0YXJ0UG9zKSx0aGlzLl9zdGFydFRpbWU9K25ldyBEYXRlLHRoaXMuZmlyZShcInN0YXJ0XCIpLHRoaXMuX2FuaW1hdGUoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2luUHJvZ3Jlc3MmJih0aGlzLl9zdGVwKCEwKSx0aGlzLl9jb21wbGV0ZSgpKX0sX2FuaW1hdGU6ZnVuY3Rpb24oKXt0aGlzLl9hbmltSWQ9TSh0aGlzLl9hbmltYXRlLHRoaXMpLHRoaXMuX3N0ZXAoKX0sX3N0ZXA6ZnVuY3Rpb24odCl7dmFyIGk9bmV3IERhdGUtdGhpcy5fc3RhcnRUaW1lLGU9MWUzKnRoaXMuX2R1cmF0aW9uO2k8ZT90aGlzLl9ydW5GcmFtZSh0aGlzLl9lYXNlT3V0KGkvZSksdCk6KHRoaXMuX3J1bkZyYW1lKDEpLHRoaXMuX2NvbXBsZXRlKCkpfSxfcnVuRnJhbWU6ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLl9zdGFydFBvcy5hZGQodGhpcy5fb2Zmc2V0Lm11bHRpcGx5QnkodCkpO2kmJmUuX3JvdW5kKCksdmkodGhpcy5fZWwsZSksdGhpcy5maXJlKFwic3RlcFwiKX0sX2NvbXBsZXRlOmZ1bmN0aW9uKCl7eih0aGlzLl9hbmltSWQpLHRoaXMuX2luUHJvZ3Jlc3M9ITEsdGhpcy5maXJlKFwiZW5kXCIpfSxfZWFzZU91dDpmdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsdGhpcy5fZWFzZU91dFBvd2VyKX19KSxLaT1FLmV4dGVuZCh7b3B0aW9uczp7Y3JzOlksY2VudGVyOnZvaWQgMCx6b29tOnZvaWQgMCxtaW5ab29tOnZvaWQgMCxtYXhab29tOnZvaWQgMCxsYXllcnM6W10sbWF4Qm91bmRzOnZvaWQgMCxyZW5kZXJlcjp2b2lkIDAsem9vbUFuaW1hdGlvbjohMCx6b29tQW5pbWF0aW9uVGhyZXNob2xkOjQsZmFkZUFuaW1hdGlvbjohMCxtYXJrZXJab29tQW5pbWF0aW9uOiEwLHRyYW5zZm9ybTNETGltaXQ6ODM4ODYwOCx6b29tU25hcDoxLHpvb21EZWx0YToxLHRyYWNrUmVzaXplOiEwfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSl7aT1jKHRoaXMsaSksdGhpcy5faGFuZGxlcnM9W10sdGhpcy5fbGF5ZXJzPXt9LHRoaXMuX3pvb21Cb3VuZExheWVycz17fSx0aGlzLl9zaXplQ2hhbmdlZD0hMCx0aGlzLl9pbml0Q29udGFpbmVyKHQpLHRoaXMuX2luaXRMYXlvdXQoKSx0aGlzLl9vblJlc2l6ZT1wKHRoaXMuX29uUmVzaXplLHRoaXMpLHRoaXMuX2luaXRFdmVudHMoKSxpLm1heEJvdW5kcyYmdGhpcy5zZXRNYXhCb3VuZHMoaS5tYXhCb3VuZHMpLHZvaWQgMCE9PWkuem9vbSYmKHRoaXMuX3pvb209dGhpcy5fbGltaXRab29tKGkuem9vbSkpLGkuY2VudGVyJiZ2b2lkIDAhPT1pLnpvb20mJnRoaXMuc2V0VmlldyhqKGkuY2VudGVyKSxpLnpvb20se3Jlc2V0OiEwfSksdGhpcy5jYWxsSW5pdEhvb2tzKCksdGhpcy5fem9vbUFuaW1hdGVkPWlpJiZ2dCYmIVR0JiZ0aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvbix0aGlzLl96b29tQW5pbWF0ZWQmJih0aGlzLl9jcmVhdGVBbmltUHJveHkoKSx6aSh0aGlzLl9wcm94eSxlaSx0aGlzLl9jYXRjaFRyYW5zaXRpb25FbmQsdGhpcykpLHRoaXMuX2FkZExheWVycyh0aGlzLm9wdGlvbnMubGF5ZXJzKX0sc2V0VmlldzpmdW5jdGlvbih0LGksZSl7aWYoKGk9dm9pZCAwPT09aT90aGlzLl96b29tOnRoaXMuX2xpbWl0Wm9vbShpKSx0PXRoaXMuX2xpbWl0Q2VudGVyKGoodCksaSx0aGlzLm9wdGlvbnMubWF4Qm91bmRzKSxlPWV8fHt9LHRoaXMuX3N0b3AoKSx0aGlzLl9sb2FkZWQmJiFlLnJlc2V0JiYhMCE9PWUpJiYodm9p
24510ZCAwIT09ZS5hbmltYXRlJiYoZS56b29tPWgoe2FuaW1hdGU6ZS5hbmltYXRlfSxlLnpvb20pLGUucGFuPWgoe2FuaW1hdGU6ZS5hbmltYXRlLGR1cmF0aW9uOmUuZHVyYXRpb259LGUucGFuKSksdGhpcy5fem9vbSE9PWk/dGhpcy5fdHJ5QW5pbWF0ZWRab29tJiZ0aGlzLl90cnlBbmltYXRlZFpvb20odCxpLGUuem9vbSk6dGhpcy5fdHJ5QW5pbWF0ZWRQYW4odCxlLnBhbikpKXJldHVybiBjbGVhclRpbWVvdXQodGhpcy5fc2l6ZVRpbWVyKSx0aGlzO3JldHVybiB0aGlzLl9yZXNldFZpZXcodCxpKSx0aGlzfSxzZXRab29tOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMuX2xvYWRlZD90aGlzLnNldFZpZXcodGhpcy5nZXRDZW50ZXIoKSx0LHt6b29tOml9KToodGhpcy5fem9vbT10LHRoaXMpfSx6b29tSW46ZnVuY3Rpb24odCxpKXtyZXR1cm4gdD10fHwodnQ/dGhpcy5vcHRpb25zLnpvb21EZWx0YToxKSx0aGlzLnNldFpvb20odGhpcy5fem9vbSt0LGkpfSx6b29tT3V0OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQ9dHx8KHZ0P3RoaXMub3B0aW9ucy56b29tRGVsdGE6MSksdGhpcy5zZXRab29tKHRoaXMuX3pvb20tdCxpKX0sc2V0Wm9vbUFyb3VuZDpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5nZXRab29tU2NhbGUoaSksbz10aGlzLmdldFNpemUoKS5kaXZpZGVCeSgyKSxzPSh0IGluc3RhbmNlb2Ygaz90OnRoaXMubGF0TG5nVG9Db250YWluZXJQb2ludCh0KSkuc3VidHJhY3QobykubXVsdGlwbHlCeSgxLTEvbikscj10aGlzLmNvbnRhaW5lclBvaW50VG9MYXRMbmcoby5hZGQocykpO3JldHVybiB0aGlzLnNldFZpZXcocixpLHt6b29tOmV9KX0sX2dldEJvdW5kc0NlbnRlclpvb206ZnVuY3Rpb24odCxpKXtpPWl8fHt9LHQ9dC5nZXRCb3VuZHM/dC5nZXRCb3VuZHMoKTpOKHQpO3ZhciBlPUEoaS5wYWRkaW5nVG9wTGVmdHx8aS5wYWRkaW5nfHxbMCwwXSksbj1BKGkucGFkZGluZ0JvdHRvbVJpZ2h0fHxpLnBhZGRpbmd8fFswLDBdKSxvPXRoaXMuZ2V0Qm91bmRzWm9vbSh0LCExLGUuYWRkKG4pKTtpZigobz1cIm51bWJlclwiPT10eXBlb2YgaS5tYXhab29tP01hdGgubWluKGkubWF4Wm9vbSxvKTpvKT09PTEvMClyZXR1cm57Y2VudGVyOnQuZ2V0Q2VudGVyKCksem9vbTpvfTt2YXIgcz1uLnN1YnRyYWN0KGUpLmRpdmlkZUJ5KDIpLHI9dGhpcy5wcm9qZWN0KHQuZ2V0U291dGhXZXN0KCksbyksYT10aGlzLnByb2plY3QodC5nZXROb3J0aEVhc3QoKSxvKTtyZXR1cm57Y2VudGVyOnRoaXMudW5wcm9qZWN0KHIuYWRkKGEpLmRpdmlkZUJ5KDIpLmFkZChzKSxvKSx6b29tOm99fSxmaXRCb3VuZHM6ZnVuY3Rpb24odCxpKXtpZighKHQ9Tih0KSkuaXNWYWxpZCgpKXRocm93IG5ldyBFcnJvcihcIkJvdW5kcyBhcmUgbm90IHZhbGlkLlwiKTt2YXIgZT10aGlzLl9nZXRCb3VuZHNDZW50ZXJab29tKHQsaSk7cmV0dXJuIHRoaXMuc2V0VmlldyhlLmNlbnRlcixlLnpvb20saSl9LGZpdFdvcmxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZpdEJvdW5kcyhbWy05MCwtMTgwXSxbOTAsMTgwXV0sdCl9LHBhblRvOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMuc2V0Vmlldyh0LHRoaXMuX3pvb20se3BhbjppfSl9LHBhbkJ5OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8e30sKHQ9QSh0KS5yb3VuZCgpKS54fHx0Lnk/KCEwPT09aS5hbmltYXRlfHx0aGlzLmdldFNpemUoKS5jb250YWlucyh0KT8odGhpcy5fcGFuQW5pbXx8KHRoaXMuX3BhbkFuaW09bmV3IEdpLHRoaXMuX3BhbkFuaW0ub24oe3N0ZXA6dGhpcy5fb25QYW5UcmFuc2l0aW9uU3RlcCxlbmQ6dGhpcy5fb25QYW5UcmFuc2l0aW9uRW5kfSx0aGlzKSksaS5ub01vdmVTdGFydHx8dGhpcy5maXJlKFwibW92ZXN0YXJ0XCIpLCExIT09aS5hbmltYXRlPyhjaSh0aGlzLl9tYXBQYW5lLFwibGVhZmxldC1wYW4tYW5pbVwiKSxlPXRoaXMuX2dldE1hcFBhbmVQb3MoKS5zdWJ0cmFjdCh0KS5yb3VuZCgpLHRoaXMuX3BhbkFuaW0ucnVuKHRoaXMuX21hcFBhbmUsZSxpLmR1cmF0aW9ufHwuMjUsaS5lYXNlTGluZWFyaXR5KSk6KHRoaXMuX3Jhd1BhbkJ5KHQpLHRoaXMuZmlyZShcIm1vdmVcIikuZmlyZShcIm1vdmVlbmRcIikpKTp0aGlzLl9yZXNldFZpZXcodGhpcy51bnByb2plY3QodGhpcy5wcm9qZWN0KHRoaXMuZ2V0Q2VudGVyKCkpLmFkZCh0KSksdGhpcy5nZXRab29tKCkpLHRoaXMpOnRoaXMuZmlyZShcIm1vdmVlbmRcIik7dmFyIGV9LGZseVRvOmZ1bmN0aW9uKHMscix0KXtpZighMT09PSh0PXR8fHt9KS5hbmltYXRlfHwhdnQpcmV0dXJuIHRoaXMuc2V0VmlldyhzLHIsdCk7dGhpcy5fc3RvcCgpO3ZhciBhPXRoaXMucHJvamVjdCh0aGlzLmdldENlbnRlcigpKSxoPXRoaXMucHJvamVjdChzKSxpPXRoaXMuZ2V0U2l6ZSgpLHU9dGhpcy5fem9vbTtzPWoocykscj12b2lkIDA9PT1yP3U6cjt2YXIgbD1NYXRoLm1heChpLngsaS55KSxuPWwqdGhpcy5nZXRab29tU2NhbGUodSxyKSxjPWguZGlzdGFuY2VUbyhhKXx8MSxfPTEuNDIsbz1fKl87ZnVuY3Rpb24gZSh0KXt2YXIgaT0obipuLWwqbCsodD8tMToxKSpvKm8qYypjKS8oMioodD9uOmwpKm8qYyksZT1NYXRoLnNxcnQoaSppKzEpLWk7cmV0dXJuIGU8MWUtOT8tMTg6TWF0aC5sb2coZSl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4oTWF0aC5leHAodCktTWF0aC5leHAoLXQpKS8yfWZ1bmN0aW9uIHAodCl7cmV0dXJuKE1hdGguZXhwKHQpK01hdGguZXhwKC10KSkvMn12YXIgbT1lKDApO2Z1bmN0aW9uIGYodCl7cmV0dXJuIGwqKHAobSkqKGQoaT1tK18qdCkvcChpKSktZChtKSkvbzt2YXIgaX12YXIgZz1EYXRlLm5vdygpLHY9KGUoMSktbSkvXyx5PXQuZHVyYXRpb24/MWUzKnQuZHVyYXRpb246MWUzKnYqLjg7cmV0dXJuIHRoaXMuX21vdmVTdGFydCghMCx0Lm5vTW92ZVN0YXJ0KSxmdW5jdGlvbiB0KCl7dmFyIGksZSxuPShEYXRlLm5vdygpLWcpL3ksbz0oaT1uLCgxLU1hdGgucG93KDEtaSwxLjUpKSp2KTtuPD0xPyh0aGlzLl9mbHlUb0ZyYW1lPU0odCx0aGlzKSx0aGlzLl9tb3ZlKHRoaXMudW5wcm9qZWN0KGEuYWRkKGguc3VidHJhY3QoYSkubXVsdGlwbHlCeShmKG8pL2MpKSx1KSx0aGlzLmdldFNjYWxlWm9vbShsLyhlPW8sbCoocChtKS9wKG0rXyplKSkpLHUpLHtmbHlUbzohMH0pKTp0aGlzLl9tb3ZlKHMscikuX21vdmVFbmQoITApfS5jYWxsKHRoaXMpLHRoaXN9LGZseVRvQm91bmRzOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5fZ2V0Qm91bmRzQ2VudGVyWm9vbSh0LGkpO3JldHVybiB0aGlzLmZseVRvKGUuY2VudGVyLGUuem9vbSxpKX0sc2V0TWF4Qm91bmRzOmZ1bmN0aW9uKHQpe3JldHVybih0PU4odCkpLmlzVmFsaWQoKT8odGhpcy5vcHRpb25zLm1heEJvdW5kcyYmdGhpcy5vZmYoXCJtb3ZlZW5kXCIsdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKSx0aGlzLm9wdGlvbnMubWF4Qm91bmRzPXQsdGhpcy5fbG9hZGVkJiZ0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMoKSx0aGlzLm9uKFwibW92ZWVuZFwiLH
24510RoaXMuX3Bhbkluc2lkZU1heEJvdW5kcykpOih0aGlzLm9wdGlvbnMubWF4Qm91bmRzPW51bGwsdGhpcy5vZmYoXCJtb3ZlZW5kXCIsdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKSl9LHNldE1pblpvb206ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLm1pblpvb207cmV0dXJuIHRoaXMub3B0aW9ucy5taW5ab29tPXQsdGhpcy5fbG9hZGVkJiZpIT09dCYmKHRoaXMuZmlyZShcInpvb21sZXZlbHNjaGFuZ2VcIiksdGhpcy5nZXRab29tKCk8dGhpcy5vcHRpb25zLm1pblpvb20pP3RoaXMuc2V0Wm9vbSh0KTp0aGlzfSxzZXRNYXhab29tOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucy5tYXhab29tO3JldHVybiB0aGlzLm9wdGlvbnMubWF4Wm9vbT10LHRoaXMuX2xvYWRlZCYmaSE9PXQmJih0aGlzLmZpcmUoXCJ6b29tbGV2ZWxzY2hhbmdlXCIpLHRoaXMuZ2V0Wm9vbSgpPnRoaXMub3B0aW9ucy5tYXhab29tKT90aGlzLnNldFpvb20odCk6dGhpc30scGFuSW5zaWRlQm91bmRzOmZ1bmN0aW9uKHQsaSl7dGhpcy5fZW5mb3JjaW5nQm91bmRzPSEwO3ZhciBlPXRoaXMuZ2V0Q2VudGVyKCksbj10aGlzLl9saW1pdENlbnRlcihlLHRoaXMuX3pvb20sTih0KSk7cmV0dXJuIGUuZXF1YWxzKG4pfHx0aGlzLnBhblRvKG4saSksdGhpcy5fZW5mb3JjaW5nQm91bmRzPSExLHRoaXN9LHBhbkluc2lkZTpmdW5jdGlvbih0LGkpe3ZhciBlLG4sbz1BKChpPWl8fHt9KS5wYWRkaW5nVG9wTGVmdHx8aS5wYWRkaW5nfHxbMCwwXSkscz1BKGkucGFkZGluZ0JvdHRvbVJpZ2h0fHxpLnBhZGRpbmd8fFswLDBdKSxyPXRoaXMuZ2V0Q2VudGVyKCksYT10aGlzLnByb2plY3QociksaD10aGlzLnByb2plY3QodCksdT10aGlzLmdldFBpeGVsQm91bmRzKCksbD11LmdldFNpemUoKS5kaXZpZGVCeSgyKSxjPU8oW3UubWluLmFkZChvKSx1Lm1heC5zdWJ0cmFjdChzKV0pO3JldHVybiBjLmNvbnRhaW5zKGgpfHwodGhpcy5fZW5mb3JjaW5nQm91bmRzPSEwLGU9YS5zdWJ0cmFjdChoKSxuPUEoaC54K2UueCxoLnkrZS55KSwoaC54PGMubWluLnh8fGgueD5jLm1heC54KSYmKG4ueD1hLngtZS54LDA8ZS54P24ueCs9bC54LW8ueDpuLngtPWwueC1zLngpLChoLnk8Yy5taW4ueXx8aC55PmMubWF4LnkpJiYobi55PWEueS1lLnksMDxlLnk/bi55Kz1sLnktby55Om4ueS09bC55LXMueSksdGhpcy5wYW5Ubyh0aGlzLnVucHJvamVjdChuKSxpKSx0aGlzLl9lbmZvcmNpbmdCb3VuZHM9ITEpLHRoaXN9LGludmFsaWRhdGVTaXplOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9sb2FkZWQpcmV0dXJuIHRoaXM7dD1oKHthbmltYXRlOiExLHBhbjohMH0sITA9PT10P3thbmltYXRlOiEwfTp0KTt2YXIgaT10aGlzLmdldFNpemUoKTt0aGlzLl9zaXplQ2hhbmdlZD0hMCx0aGlzLl9sYXN0Q2VudGVyPW51bGw7dmFyIGU9dGhpcy5nZXRTaXplKCksbj1pLmRpdmlkZUJ5KDIpLnJvdW5kKCksbz1lLmRpdmlkZUJ5KDIpLnJvdW5kKCkscz1uLnN1YnRyYWN0KG8pO3JldHVybiBzLnh8fHMueT8odC5hbmltYXRlJiZ0LnBhbj90aGlzLnBhbkJ5KHMpOih0LnBhbiYmdGhpcy5fcmF3UGFuQnkocyksdGhpcy5maXJlKFwibW92ZVwiKSx0LmRlYm91bmNlTW92ZWVuZD8oY2xlYXJUaW1lb3V0KHRoaXMuX3NpemVUaW1lciksdGhpcy5fc2l6ZVRpbWVyPXNldFRpbWVvdXQocCh0aGlzLmZpcmUsdGhpcyxcIm1vdmVlbmRcIiksMjAwKSk6dGhpcy5maXJlKFwibW92ZWVuZFwiKSksdGhpcy5maXJlKFwicmVzaXplXCIse29sZFNpemU6aSxuZXdTaXplOmV9KSk6dGhpc30sc3RvcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFpvb20odGhpcy5fbGltaXRab29tKHRoaXMuX3pvb20pKSx0aGlzLm9wdGlvbnMuem9vbVNuYXB8fHRoaXMuZmlyZShcInZpZXdyZXNldFwiKSx0aGlzLl9zdG9wKCl9LGxvY2F0ZTpmdW5jdGlvbih0KXtpZih0PXRoaXMuX2xvY2F0ZU9wdGlvbnM9aCh7dGltZW91dDoxZTQsd2F0Y2g6ITF9LHQpLCEoXCJnZW9sb2NhdGlvblwiaW4gbmF2aWdhdG9yKSlyZXR1cm4gdGhpcy5faGFuZGxlR2VvbG9jYXRpb25FcnJvcih7Y29kZTowLG1lc3NhZ2U6XCJHZW9sb2NhdGlvbiBub3Qgc3VwcG9ydGVkLlwifSksdGhpczt2YXIgaT1wKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uUmVzcG9uc2UsdGhpcyksZT1wKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uRXJyb3IsdGhpcyk7cmV0dXJuIHQud2F0Y2g/dGhpcy5fbG9jYXRpb25XYXRjaElkPW5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKGksZSx0KTpuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGksZSx0KSx0aGlzfSxzdG9wTG9jYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG5hdmlnYXRvci5nZW9sb2NhdGlvbiYmbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2gmJm5hdmlnYXRvci5nZW9sb2NhdGlvbi5jbGVhcldhdGNoKHRoaXMuX2xvY2F0aW9uV2F0Y2hJZCksdGhpcy5fbG9jYXRlT3B0aW9ucyYmKHRoaXMuX2xvY2F0ZU9wdGlvbnMuc2V0Vmlldz0hMSksdGhpc30sX2hhbmRsZUdlb2xvY2F0aW9uRXJyb3I6ZnVuY3Rpb24odCl7dmFyIGk9dC5jb2RlLGU9dC5tZXNzYWdlfHwoMT09PWk/XCJwZXJtaXNzaW9uIGRlbmllZFwiOjI9PT1pP1wicG9zaXRpb24gdW5hdmFpbGFibGVcIjpcInRpbWVvdXRcIik7dGhpcy5fbG9jYXRlT3B0aW9ucy5zZXRWaWV3JiYhdGhpcy5fbG9hZGVkJiZ0aGlzLmZpdFdvcmxkKCksdGhpcy5maXJlKFwibG9jYXRpb25lcnJvclwiLHtjb2RlOmksbWVzc2FnZTpcIkdlb2xvY2F0aW9uIGVycm9yOiBcIitlK1wiLlwifSl9LF9oYW5kbGVHZW9sb2NhdGlvblJlc3BvbnNlOmZ1bmN0aW9uKHQpe3ZhciBpLGU9bmV3IEQodC5jb29yZHMubGF0aXR1ZGUsdC5jb29yZHMubG9uZ2l0dWRlKSxuPWUudG9Cb3VuZHMoMip0LmNvb3Jkcy5hY2N1cmFjeSksbz10aGlzLl9sb2NhdGVPcHRpb25zO28uc2V0VmlldyYmKGk9dGhpcy5nZXRCb3VuZHNab29tKG4pLHRoaXMuc2V0VmlldyhlLG8ubWF4Wm9vbT9NYXRoLm1pbihpLG8ubWF4Wm9vbSk6aSkpO3ZhciBzPXtsYXRsbmc6ZSxib3VuZHM6bix0aW1lc3RhbXA6dC50aW1lc3RhbXB9O2Zvcih2YXIgciBpbiB0LmNvb3JkcylcIm51bWJlclwiPT10eXBlb2YgdC5jb29yZHNbcl0mJihzW3JdPXQuY29vcmRzW3JdKTt0aGlzLmZpcmUoXCJ
24510sb2NhdGlvbmZvdW5kXCIscyl9LGFkZEhhbmRsZXI6ZnVuY3Rpb24odCxpKXtpZighaSlyZXR1cm4gdGhpczt2YXIgZT10aGlzW3RdPW5ldyBpKHRoaXMpO3JldHVybiB0aGlzLl9oYW5kbGVycy5wdXNoKGUpLHRoaXMub3B0aW9uc1t0XSYmZS5lbmFibGUoKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtpZih0aGlzLl9pbml0RXZlbnRzKCEwKSx0aGlzLm9mZihcIm1vdmVlbmRcIix0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMpLHRoaXMuX2NvbnRhaW5lcklkIT09dGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkKXRocm93IG5ldyBFcnJvcihcIk1hcCBjb250YWluZXIgaXMgYmVpbmcgcmV1c2VkIGJ5IGFub3RoZXIgaW5zdGFuY2VcIik7dHJ5e2RlbGV0ZSB0aGlzLl9jb250YWluZXIuX2xlYWZsZXRfaWQsZGVsZXRlIHRoaXMuX2NvbnRhaW5lcklkfWNhdGNoKHQpe3RoaXMuX2NvbnRhaW5lci5fbGVhZmxldF9pZD12b2lkIDAsdGhpcy5fY29udGFpbmVySWQ9dm9pZCAwfXZhciB0O2Zvcih0IGluIHZvaWQgMCE9PXRoaXMuX2xvY2F0aW9uV2F0Y2hJZCYmdGhpcy5zdG9wTG9jYXRlKCksdGhpcy5fc3RvcCgpLHJpKHRoaXMuX21hcFBhbmUpLHRoaXMuX2NsZWFyQ29udHJvbFBvcyYmdGhpcy5fY2xlYXJDb250cm9sUG9zKCksdGhpcy5fcmVzaXplUmVxdWVzdCYmKHoodGhpcy5fcmVzaXplUmVxdWVzdCksdGhpcy5fcmVzaXplUmVxdWVzdD1udWxsKSx0aGlzLl9jbGVhckhhbmRsZXJzKCksdGhpcy5fbG9hZGVkJiZ0aGlzLmZpcmUoXCJ1bmxvYWRcIiksdGhpcy5fbGF5ZXJzKXRoaXMuX2xheWVyc1t0XS5yZW1vdmUoKTtmb3IodCBpbiB0aGlzLl9wYW5lcylyaSh0aGlzLl9wYW5lc1t0XSk7cmV0dXJuIHRoaXMuX2xheWVycz1bXSx0aGlzLl9wYW5lcz1bXSxkZWxldGUgdGhpcy5fbWFwUGFuZSxkZWxldGUgdGhpcy5fcmVuZGVyZXIsdGhpc30sY3JlYXRlUGFuZTpmdW5jdGlvbih0LGkpe3ZhciBlPXNpKFwiZGl2XCIsXCJsZWFmbGV0LXBhbmVcIisodD9cIiBsZWFmbGV0LVwiK3QucmVwbGFjZShcIlBhbmVcIixcIlwiKStcIi1wYW5lXCI6XCJcIiksaXx8dGhpcy5fbWFwUGFuZSk7cmV0dXJuIHQmJih0aGlzLl9wYW5lc1t0XT1lKSxlfSxnZXRDZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tJZkxvYWRlZCgpLHRoaXMuX2xhc3RDZW50ZXImJiF0aGlzLl9tb3ZlZCgpP3RoaXMuX2xhc3RDZW50ZXI6dGhpcy5sYXllclBvaW50VG9MYXRMbmcodGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpKX0sZ2V0Wm9vbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl96b29tfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldFBpeGVsQm91bmRzKCk7cmV0dXJuIG5ldyBSKHRoaXMudW5wcm9qZWN0KHQuZ2V0Qm90dG9tTGVmdCgpKSx0aGlzLnVucHJvamVjdCh0LmdldFRvcFJpZ2h0KCkpKX0sZ2V0TWluWm9vbTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLm9wdGlvbnMubWluWm9vbT90aGlzLl9sYXllcnNNaW5ab29tfHwwOnRoaXMub3B0aW9ucy5taW5ab29tfSxnZXRNYXhab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMub3B0aW9ucy5tYXhab29tP3ZvaWQgMD09PXRoaXMuX2xheWVyc01heFpvb20/MS8wOnRoaXMuX2xheWVyc01heFpvb206dGhpcy5vcHRpb25zLm1heFpvb219LGdldEJvdW5kc1pvb206ZnVuY3Rpb24odCxpLGUpe3Q9Tih0KSxlPUEoZXx8WzAsMF0pO3ZhciBuPXRoaXMuZ2V0Wm9vbSgpfHwwLG89dGhpcy5nZXRNaW5ab29tKCkscz10aGlzLmdldE1heFpvb20oKSxyPXQuZ2V0Tm9ydGhXZXN0KCksYT10LmdldFNvdXRoRWFzdCgpLGg9dGhpcy5nZXRTaXplKCkuc3VidHJhY3QoZSksdT1PKHRoaXMucHJvamVjdChhLG4pLHRoaXMucHJvamVjdChyLG4pKS5nZXRTaXplKCksbD12dD90aGlzLm9wdGlvbnMuem9vbVNuYXA6MSxjPWgueC91LngsXz1oLnkvdS55LGQ9aT9NYXRoLm1heChjLF8pOk1hdGgubWluKGMsXyksbj10aGlzLmdldFNjYWxlWm9vbShkLG4pO3JldHVybiBsJiYobj1NYXRoLnJvdW5kKG4vKGwvMTAwKSkqKGwvMTAwKSxuPWk/TWF0aC5jZWlsKG4vbCkqbDpNYXRoLmZsb29yKG4vbCkqbCksTWF0aC5tYXgobyxNYXRoLm1pbihzLG4pKX0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplJiYhdGhpcy5fc2l6ZUNoYW5nZWR8fCh0aGlzLl9zaXplPW5ldyBrKHRoaXMuX2NvbnRhaW5lci5jbGllbnRXaWR0aHx8MCx0aGlzLl9jb250YWluZXIuY2xpZW50SGVpZ2h0fHwwKSx0aGlzLl9zaXplQ2hhbmdlZD0hMSksdGhpcy5fc2l6ZS5jbG9uZSgpfSxnZXRQaXhlbEJvdW5kczpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMuX2dldFRvcExlZnRQb2ludCh0LGkpO3JldHVybiBuZXcgSShlLGUuYWRkKHRoaXMuZ2V0U2l6ZSgpKSl9LGdldFBpeGVsT3JpZ2luOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrSWZMb2FkZWQoKSx0aGlzLl9waXhlbE9yaWdpbn0sZ2V0UGl4ZWxXb3JsZEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5nZXRQcm9qZWN0ZWRCb3VuZHModm9pZCAwPT09dD90aGlzLmdldFpvb20oKTp0KX0sZ2V0UGFuZTpmdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD90aGlzLl9wYW5lc1t0XTp0fSxnZXRQYW5lczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYW5lc30sZ2V0Q29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sZ2V0Wm9vbVNjYWxlOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5vcHRpb25zLmNycztyZXR1cm4gaT12b2lkIDA9PT1pP3RoaXMuX3pvb206aSxlLnNjYWxlKHQpL2Uuc2NhbGUoaSl9LGdldFNjYWxlWm9vbTpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMub3B0aW9ucy5jcnM7aT12b2lkIDA9PT1pP3RoaXMuX3pvb206aTt2YXIgbj1lLnpvb20odCplLnNjYWxlKGkpKTtyZXR1cm4gaXNOYU4obik/MS8wOm59LHByb2plY3Q6ZnVuY3Rpb24odCxpKXtyZXR1cm4gaT12b2lkIDA9PT1pP3RoaXMuX3pvb206aSx0aGlzLm9wdGlvbnMuY3JzLmxhdExuZ1RvUG9pbnQoaih0KSxpKX0sdW5wcm9qZWN0OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9dm9pZCAwPT09aT90aGlzLl96b29tOmksdGhpcy5vcHRpb25zLmNycy5wb2ludFRvTGF0TG5nKEEodCksaSl9LGxheWVyUG9pbnRUb0xhdExuZzpmdW5jdGlvbih0KXt2YXIgaT1BKHQpLmFkZCh0aGlzLmdldFBpeGVsT3JpZ2luKCkpO3JldHVybiB0aGlzLnVucHJvamVjdChpKX0sbGF0TG5nVG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByb2plY3Qoaih0KSkuX3JvdW5kKCkuX3N1YnRyYWN0KHRoaXMuZ2V0UGl4ZWxPcmlnaW4oKSl9LHdyYXBMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMud3JhcExhdExuZyhqKHQpKX0sd3JhcExhdExuZ0JvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmNycy53cmFwTGF0TG5nQm91bmRzKE4odCkpfSxkaXN0YW5jZTpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLm9wdGlvbnMuY3JzLmRpc3RhbmNlKGoodCksaihpKSl9LGNvbnRhaW5lclBvaW50VG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBBKHQpLnN1YnRyYWN0KHRoaXMuX2dldE1hcFBhbmVQb3MoKSl9LGxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBBKHQpLmFkZCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpfSxjb250YWluZXJQb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQoQSh0KSk7cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKGkpfSxsYXRMbmdUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KHRoaXMubGF0TG5nVG9MYXllclBvaW50KGoodCkpKX0sbW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIERpKHQsdGhpcy5fY29udGFpbmVyKX0sbW91c2VFdmVudFRvTGF5ZXJQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludCh0aGlzLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpKX0sbW91c2VFdmVudFRvTGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodCkpfSxfaW5pdENvbnRhaW5lcjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9jb250YWluZXI9bmkodCk7aWYoIWkpdGhyb3cgbmV3IEVycm9yKFwiTWFwIGNvbnRhaW5lciBub3QgZm91bmQuXCIpO2lmKGkuX2xlYWZsZXRfaWQp
24510dGhyb3cgbmV3IEVycm9yKFwiTWFwIGNvbnRhaW5lciBpcyBhbHJlYWR5IGluaXRpYWxpemVkLlwiKTt6aShpLFwic2Nyb2xsXCIsdGhpcy5fb25TY3JvbGwsdGhpcyksdGhpcy5fY29udGFpbmVySWQ9bShpKX0sX2luaXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXI7dGhpcy5fZmFkZUFuaW1hdGVkPXRoaXMub3B0aW9ucy5mYWRlQW5pbWF0aW9uJiZ2dCxjaSh0LFwibGVhZmxldC1jb250YWluZXJcIisoYnQ/XCIgbGVhZmxldC10b3VjaFwiOlwiXCIpKyh6dD9cIiBsZWFmbGV0LXJldGluYVwiOlwiXCIpKyhpdD9cIiBsZWFmbGV0LW9sZGllXCI6XCJcIikrKGN0P1wiIGxlYWZsZXQtc2FmYXJpXCI6XCJcIikrKHRoaXMuX2ZhZGVBbmltYXRlZD9cIiBsZWFmbGV0LWZhZGUtYW5pbVwiOlwiXCIpKTt2YXIgaT1vaSh0LFwicG9zaXRpb25cIik7XCJhYnNvbHV0ZVwiIT09aSYmXCJyZWxhdGl2ZVwiIT09aSYmXCJmaXhlZFwiIT09aSYmKHQuc3R5bGUucG9zaXRpb249XCJyZWxhdGl2ZVwiKSx0aGlzLl9pbml0UGFuZXMoKSx0aGlzLl9pbml0Q29udHJvbFBvcyYmdGhpcy5faW5pdENvbnRyb2xQb3MoKX0sX2luaXRQYW5lczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BhbmVzPXt9O3RoaXMuX3BhbmVSZW5kZXJlcnM9e30sdGhpcy5fbWFwUGFuZT10aGlzLmNyZWF0ZVBhbmUoXCJtYXBQYW5lXCIsdGhpcy5fY29udGFpbmVyKSx2aSh0aGlzLl9tYXBQYW5lLG5ldyBrKDAsMCkpLHRoaXMuY3JlYXRlUGFuZShcInRpbGVQYW5lXCIpLHRoaXMuY3JlYXRlUGFuZShcInNoYWRvd1BhbmVcIiksdGhpcy5jcmVhdGVQYW5lKFwib3ZlcmxheVBhbmVcIiksdGhpcy5jcmVhdGVQYW5lKFwibWFya2VyUGFuZVwiKSx0aGlzLmNyZWF0ZVBhbmUoXCJ0b29sdGlwUGFuZVwiKSx0aGlzLmNyZWF0ZVBhbmUoXCJwb3B1cFBhbmVcIiksdGhpcy5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb258fChjaSh0Lm1hcmtlclBhbmUsXCJsZWFmbGV0LXpvb20taGlkZVwiKSxjaSh0LnNoYWRvd1BhbmUsXCJsZWFmbGV0LXpvb20taGlkZVwiKSl9LF9yZXNldFZpZXc6ZnVuY3Rpb24odCxpKXt2aSh0aGlzLl9tYXBQYW5lLG5ldyBrKDAsMCkpO3ZhciBlPSF0aGlzLl9sb2FkZWQ7dGhpcy5fbG9hZGVkPSEwLGk9dGhpcy5fbGltaXRab29tKGkpLHRoaXMuZmlyZShcInZpZXdwcmVyZXNldFwiKTt2YXIgbj10aGlzLl96b29tIT09aTt0aGlzLl9tb3ZlU3RhcnQobiwhMSkuX21vdmUodCxpKS5fbW92ZUVuZChuKSx0aGlzLmZpcmUoXCJ2aWV3cmVzZXRcIiksZSYmdGhpcy5maXJlKFwibG9hZFwiKX0sX21vdmVTdGFydDpmdW5jdGlvbih0LGkpe3JldHVybiB0JiZ0aGlzLmZpcmUoXCJ6b29tc3RhcnRcIiksaXx8dGhpcy5maXJlKFwibW92ZXN0YXJ0XCIpLHRoaXN9LF9tb3ZlOmZ1bmN0aW9uKHQsaSxlKXt2b2lkIDA9PT1pJiYoaT10aGlzLl96b29tKTt2YXIgbj10aGlzLl96b29tIT09aTtyZXR1cm4gdGhpcy5fem9vbT1pLHRoaXMuX2xhc3RDZW50ZXI9dCx0aGlzLl9waXhlbE9yaWdpbj10aGlzLl9nZXROZXdQaXhlbE9yaWdpbih0KSwobnx8ZSYmZS5waW5jaCkmJnRoaXMuZmlyZShcInpvb21cIixlKSx0aGlzLmZpcmUoXCJtb3ZlXCIsZSl9LF9tb3ZlRW5kOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0aGlzLmZpcmUoXCJ6b29tZW5kXCIpLHRoaXMuZmlyZShcIm1vdmVlbmRcIil9LF9zdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHoodGhpcy5fZmx5VG9GcmFtZSksdGhpcy5fcGFuQW5pbSYmdGhpcy5fcGFuQW5pbS5zdG9wKCksdGhpc30sX3Jhd1BhbkJ5OmZ1bmN0aW9uKHQpe3ZpKHRoaXMuX21hcFBhbmUsdGhpcy5fZ2V0TWFwUGFuZVBvcygpLnN1YnRyYWN0KHQpKX0sX2dldFpvb21TcGFuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TWF4Wm9vbSgpLXRoaXMuZ2V0TWluWm9vbSgpfSxfcGFuSW5zaWRlTWF4Qm91bmRzOmZ1bmN0aW9uKCl7dGhpcy5fZW5mb3JjaW5nQm91bmRzfHx0aGlzLnBhbkluc2lkZUJvdW5kcyh0aGlzLm9wdGlvbnMubWF4Qm91bmRzKX0sX2NoZWNrSWZMb2FkZWQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXRocm93IG5ldyBFcnJvcihcIlNldCBtYXAgY2VudGVyIGFuZCB6b29tIGZpcnN0LlwiKX0sX2luaXRFdmVudHM6ZnVuY3Rpb24odCl7dGhpcy5fdGFyZ2V0cz17fTt2YXIgaT10P1NpOnppO2koKHRoaXMuX3RhcmdldHNbbSh0aGlzLl9jb250YWluZXIpXT10aGlzKS5fY29udGFpbmVyLFwiY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlbW92ZSBjb250ZXh0bWVudSBrZXlwcmVzcyBrZXlkb3duIGtleXVwXCIsdGhpcy5faGFuZGxlRE9NRXZlbnQsdGhpcyksdGhpcy5vcHRpb25zLnRyYWNrUmVzaXplJiZpKHdpbmRvdyxcInJlc2l6ZVwiLHRoaXMuX29uUmVzaXplLHRoaXMpLHZ0JiZ0aGlzLm9wdGlvbnMudHJhbnNmb3JtM0RMaW1pdCYmKHQ/dGhpcy5vZmY6dGhpcy5vbikuY2FsbCh0aGlzLFwibW92ZWVuZFwiLHRoaXMuX29uTW92ZUVuZCl9LF9vblJlc2l6ZTpmdW5jdGlvbigpe3oodGhpcy5fcmVzaXplUmVxdWVzdCksdGhpcy5fcmVzaXplUmVxdWVzdD1NKGZ1bmN0aW9uKCl7dGhpcy5pbnZhbGlkYXRlU2l6ZSh7ZGVib3VuY2VNb3ZlZW5kOiEwfSl9LHR
24510oaXMpfSxfb25TY3JvbGw6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXIuc2Nyb2xsVG9wPTAsdGhpcy5fY29udGFpbmVyLnNjcm9sbExlZnQ9MH0sX29uTW92ZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldE1hcFBhbmVQb3MoKTtNYXRoLm1heChNYXRoLmFicyh0LngpLE1hdGguYWJzKHQueSkpPj10aGlzLm9wdGlvbnMudHJhbnNmb3JtM0RMaW1pdCYmdGhpcy5fcmVzZXRWaWV3KHRoaXMuZ2V0Q2VudGVyKCksdGhpcy5nZXRab29tKCkpfSxfZmluZEV2ZW50VGFyZ2V0czpmdW5jdGlvbih0LGkpe2Zvcih2YXIgZSxuPVtdLG89XCJtb3VzZW91dFwiPT09aXx8XCJtb3VzZW92ZXJcIj09PWkscz10LnRhcmdldHx8dC5zcmNFbGVtZW50LHI9ITE7czspe2lmKChlPXRoaXMuX3RhcmdldHNbbShzKV0pJiYoXCJjbGlja1wiPT09aXx8XCJwcmVjbGlja1wiPT09aSkmJiF0Ll9zaW11bGF0ZWQmJnRoaXMuX2RyYWdnYWJsZU1vdmVkKGUpKXtyPSEwO2JyZWFrfWlmKGUmJmUubGlzdGVucyhpLCEwKSl7aWYobyYmIVZpKHMsdCkpYnJlYWs7aWYobi5wdXNoKGUpLG8pYnJlYWt9aWYocz09PXRoaXMuX2NvbnRhaW5lcilicmVhaztzPXMucGFyZW50Tm9kZX1yZXR1cm4gbi5sZW5ndGh8fHJ8fG98fCFWaShzLHQpfHwobj1bdGhpc10pLG59LF9oYW5kbGVET01FdmVudDpmdW5jdGlvbih0KXt2YXIgaTt0aGlzLl9sb2FkZWQmJiFVaSh0KSYmKFwibW91c2Vkb3duXCIhPT0oaT10LnR5cGUpJiZcImtleXByZXNzXCIhPT1pJiZcImtleXVwXCIhPT1pJiZcImtleWRvd25cIiE9PWl8fFBpKHQudGFyZ2V0fHx0LnNyY0VsZW1lbnQpLHRoaXMuX2ZpcmVET01FdmVudCh0LGkpKX0sX21vdXNlRXZlbnRzOltcImNsaWNrXCIsXCJkYmxjbGlja1wiLFwibW91c2VvdmVyXCIsXCJtb3VzZW91dFwiLFwiY29udGV4dG1lbnVcIl0sX2ZpcmVET01FdmVudDpmdW5jdGlvbih0LGksZSl7dmFyIG47aWYoXCJjbGlja1wiPT09dC50eXBlJiYoKG49aCh7fSx0KSkudHlwZT1cInByZWNsaWNrXCIsdGhpcy5fZmlyZURPTUV2ZW50KG4sbi50eXBlLGUpKSwhdC5fc3RvcHBlZCYmKGU9KGV8fFtdKS5jb25jYXQodGhpcy5fZmluZEV2ZW50VGFyZ2V0cyh0LGkpKSkubGVuZ3RoKXt2YXIgbz1lWzBdO1wiY29udGV4dG1lbnVcIj09PWkmJm8ubGlzdGVucyhpLCEwKSYmUmkodCk7dmFyIHMscj17b3JpZ2luYWxFdmVudDp0fTtcImtleXByZXNzXCIhPT10LnR5cGUmJlwia2V5ZG93blwiIT09dC50eXBlJiZcImtleXVwXCIhPT10LnR5cGUmJihzPW8uZ2V0TGF0TG5nJiYoIW8uX3JhZGl1c3x8by5fcmFkaXVzPD0xMCksci5jb250YWluZXJQb2ludD1zP3RoaXMubGF0TG5nVG9Db250YWluZXJQb2ludChvLmdldExhdExuZygpKTp0aGlzLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLHIubGF5ZXJQb2ludD10aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHIuY29udGFpbmVyUG9pbnQpLHIubGF0bG5nPXM/by5nZXRMYXRMbmcoKTp0aGlzLmxheWVyUG9pbnRUb0xhdExuZyhyLmxheWVyUG9pbnQpKTtmb3IodmFyIGE9MDthPGUubGVuZ3RoO2ErKylpZihlW2FdLmZpcmUoaSxyLCEwKSxyLm9yaWdpbmFsRXZlbnQuX3N0b3BwZWR8fCExPT09ZVthXS5vcHRpb25zLmJ1YmJsaW5nTW91c2VFdmVudHMmJi0xIT09dih0aGlzLl9tb3VzZUV2ZW50cyxpKSlyZXR1cm59fSxfZHJhZ2dhYmxlTW92ZWQ6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dC5kcmFnZ2luZyYmdC5kcmFnZ2luZy5lbmFibGVkKCk/dDp0aGlzKS5kcmFnZ2luZyYmdC5kcmFnZ2luZy5tb3ZlZCgpfHx0aGlzLmJveFpvb20mJnRoaXMuYm94Wm9vbS5tb3ZlZCgpfSxfY2xlYXJIYW5kbGVyczpmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGk9dGhpcy5faGFuZGxlcnMubGVuZ3RoO3Q8aTt0KyspdGhpcy5faGFuZGxlcnNbdF0uZGlzYWJsZSgpfSx3aGVuUmVhZHk6ZnVuY3Rpb24odCxpKXtyZXR1cm4gdGhpcy5fbG9hZGVkP3QuY2FsbChpfHx0aGlzLHt0YXJnZXQ6dGhpc30pOnRoaXMub24oXCJsb2FkXCIsdCxpKSx0aGlzfSxfZ2V0TWFwUGFuZVBvczpmdW5jdGlvbigpe3JldHVybiB5aSh0aGlzLl9tYXBQYW5lKXx8bmV3IGsoMCwwKX0sX21vdmVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0TWFwUGFuZVBvcygpO3JldHVybiB0JiYhdC5lcXVhbHMoWzAsMF0pfSxfZ2V0VG9wTGVmdFBvaW50OmZ1bmN0aW9uKHQsaSl7cmV0dXJuKHQmJnZvaWQgMCE9PWk/dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4odCxpKTp0aGlzLmdldFBpeGVsT3JpZ2luKCkpLnN1YnRyYWN0KHRoaXMuX2dldE1hcFBhbmVQb3MoKSl9LF9nZXROZXdQaXhlbE9yaWdpbjpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMuZ2V0U2l6ZSgpLl9kaXZpZGVCeSgyKTtyZXR1cm4gdGhpcy5wcm9qZWN0KHQsaSkuX3N1YnRyYWN0KGUpLl9hZGQodGhpcy5fZ2V0TWFwUGFuZVBvcygpKS5fcm91bmQoKX0sX2xhdExuZ1RvTmV3TGF5ZXJQb2ludDpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oZSxpKTtyZXR1cm4gdGhpcy5wcm9qZWN0KHQsaSkuX3N1YnRyYWN0KG4pfSxfbGF0TG5nQm91bmRzVG9OZXdMYXllckJvdW5kczpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oZSxpKTtyZXR1cm4gTyhbdGhpcy5wcm9qZWN0KHQuZ2V0U291dGhXZXN0KCksaSkuX3N1YnRyYWN0KG4pLHRoaXMucHJvamVjdCh0LmdldE5vcnRoV2VzdCgpLGkpLl9zdWJ0cmFjdChuKSx0aGlzLnByb2plY3QodC5nZXRTb3V0aEVhc3QoKSxpKS5fc3VidHJhY3QobiksdGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhFYXN0KCksaSkuX3N1YnRyYWN0KG4pXSl9LF9nZXRDZW50ZXJMYXllclBvaW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpKX0sX2dldENlbnRlck9mZnNldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXRMbmdUb0xheWVyUG9pbnQodCkuc3VidHJhY3QodGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpKX0sX2xpbWl0Q2VudGVyOmZ1bmN0aW9uKHQsaSxlKXtpZighZSlyZXR1cm4gdDt2YXIgbj10aGlzLnByb2plY3QodCxpKSxvPXR
24510oaXMuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIpLHM9bmV3IEkobi5zdWJ0cmFjdChvKSxuLmFkZChvKSkscj10aGlzLl9nZXRCb3VuZHNPZmZzZXQocyxlLGkpO3JldHVybiByLnJvdW5kKCkuZXF1YWxzKFswLDBdKT90OnRoaXMudW5wcm9qZWN0KG4uYWRkKHIpLGkpfSxfbGltaXRPZmZzZXQ6ZnVuY3Rpb24odCxpKXtpZighaSlyZXR1cm4gdDt2YXIgZT10aGlzLmdldFBpeGVsQm91bmRzKCksbj1uZXcgSShlLm1pbi5hZGQodCksZS5tYXguYWRkKHQpKTtyZXR1cm4gdC5hZGQodGhpcy5fZ2V0Qm91bmRzT2Zmc2V0KG4saSkpfSxfZ2V0Qm91bmRzT2Zmc2V0OmZ1bmN0aW9uKHQsaSxlKXt2YXIgbj1PKHRoaXMucHJvamVjdChpLmdldE5vcnRoRWFzdCgpLGUpLHRoaXMucHJvamVjdChpLmdldFNvdXRoV2VzdCgpLGUpKSxvPW4ubWluLnN1YnRyYWN0KHQubWluKSxzPW4ubWF4LnN1YnRyYWN0KHQubWF4KTtyZXR1cm4gbmV3IGsodGhpcy5fcmVib3VuZChvLngsLXMueCksdGhpcy5fcmVib3VuZChvLnksLXMueSkpfSxfcmVib3VuZDpmdW5jdGlvbih0LGkpe3JldHVybiAwPHQraT9NYXRoLnJvdW5kKHQtaSkvMjpNYXRoLm1heCgwLE1hdGguY2VpbCh0KSktTWF0aC5tYXgoMCxNYXRoLmZsb29yKGkpKX0sX2xpbWl0Wm9vbTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmdldE1pblpvb20oKSxlPXRoaXMuZ2V0TWF4Wm9vbSgpLG49dnQ/dGhpcy5vcHRpb25zLnpvb21TbmFwOjE7cmV0dXJuIG4mJih0PU1hdGgucm91bmQodC9uKSpuKSxNYXRoLm1heChpLE1hdGgubWluKGUsdCkpfSxfb25QYW5UcmFuc2l0aW9uU3RlcDpmdW5jdGlvbigpe3RoaXMuZmlyZShcIm1vdmVcIil9LF9vblBhblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oKXtfaSh0aGlzLl9tYXBQYW5lLFwibGVhZmxldC1wYW4tYW5pbVwiKSx0aGlzLmZpcmUoXCJtb3ZlZW5kXCIpfSxfdHJ5QW5pbWF0ZWRQYW46ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLl9nZXRDZW50ZXJPZmZzZXQodCkuX3RydW5jKCk7cmV0dXJuISghMCE9PShpJiZpLmFuaW1hdGUpJiYhdGhpcy5nZXRTaXplKCkuY29udGFpbnMoZSkpJiYodGhpcy5wYW5CeShlLGkpLCEwKX0sX2NyZWF0ZUFuaW1Qcm94eTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3Byb3h5PXNpKFwiZGl2XCIsXCJsZWFmbGV0LXByb3h5IGxlYWZsZXQtem9vbS1hbmltYXRlZFwiKTt0aGlzLl9wYW5lcy5tYXBQYW5lLmFwcGVuZENoaWxkKHQpLHRoaXMub24oXCJ6b29tYW5pbVwiLGZ1bmN0aW9uKHQpe3ZhciBpPXRpLGU9dGhpcy5fcHJveHkuc3R5bGVbaV07Z2kodGhpcy5fcHJveHksdGhpcy5wcm9qZWN0KHQuY2VudGVyLHQuem9vbSksdGhpcy5nZXRab29tU2NhbGUodC56b29tLDEpKSxlPT09dGhpcy5fcHJveHkuc3R5bGVbaV0mJnRoaXMuX2FuaW1hdGluZ1pvb20mJnRoaXMuX29uWm9vbVRyYW5zaXRpb25FbmQoKX0sdGhpcyksdGhpcy5vbihcImxvYWQgbW92ZWVuZFwiLHRoaXMuX2FuaW1Nb3ZlRW5kLHRoaXMpLHRoaXMuX29uKFwidW5sb2FkXCIsdGhpcy5fZGVzdHJveUFuaW1Qcm94eSx0aGlzKX0sX2Rlc3Ryb3lBbmltUHJveHk6ZnVuY3Rpb24oKXtyaSh0aGlzLl9wcm94eSksdGhpcy5vZmYoXCJsb2FkIG1vdmVlbmRcIix0aGlzLl9hbmltTW92ZUVuZCx0aGlzKSxkZWxldGUgdGhpcy5fcHJveHl9LF9hbmltTW92ZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0Q2VudGVyKCksaT10aGlzLmdldFpvb20oKTtnaSh0aGlzLl9wcm94eSx0aGlzLnByb2plY3QodCxpKSx0aGlzLmdldFpvb21TY2FsZShpLDEpKX0sX2NhdGNoVHJhbnNpdGlvbkVuZDpmdW5jdGlvbih0KXt0aGlzLl9hbmltYXRpbmdab29tJiYwPD10LnByb3BlcnR5TmFtZS5pbmRleE9mKFwidHJhbnNmb3JtXCIpJiZ0aGlzLl9vblpvb21UcmFuc2l0aW9uRW5kKCl9LF9ub3RoaW5nVG9BbmltYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX2NvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGVhZmxldC16b29tLWFuaW1hdGVkXCIpLmxlbmd0aH0sX3RyeUFuaW1hdGVkWm9vbTpmdW5jdGlvbih0LGksZSl7aWYodGhpcy5fYW5pbWF0aW5nWm9vbSlyZXR1cm4hMDtpZihlPWV8fHt9LCF0aGlzLl96b29tQW5pbWF0ZWR8fCExPT09ZS5hbmltYXRlfHx0aGlzLl9ub3RoaW5nVG9BbmltYXRlKCl8fE1hdGguYWJzKGktdGhpcy5fem9vbSk+dGhpcy5vcHRpb25zLnpvb21BbmltYXRpb25UaHJlc2hvbGQpcmV0dXJuITE7dmFyIG49dGhpcy5nZXRab29tU2NhbGUoaSksbz10aGlzLl9nZXRDZW50ZXJPZmZzZXQodCkuX2RpdmlkZUJ5KDEtMS9uKTtyZXR1cm4hKCEwIT09ZS5hbmltYXRlJiYhdGhpcy5nZXRTaXplKCkuY29udGFpbnMobykpJiYoTShmdW5jdGlvbigpe3RoaXMuX21vdmVTdGFydCghMCwhMSkuX2FuaW1hdGVab29tKHQsaSwhMCl9LHRoaXMpLCEwKX0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQsaSxlLG4pe3RoaXMuX21hcFBhbmUmJihlJiYodGhpcy5fYW5pbWF0aW5nWm9vbT0hMCx0aGlzLl9hbmltYXRlVG9DZW50ZXI9dCx0aGlzLl9hbmltYXRlVG9ab29tPWksY2kodGhpcy5fbWFwUGFuZSxcImxlYWZsZXQtem9vbS1hbmltXCIpKSx0aGlzLmZpcmUoXCJ6b29tYW5pbVwiLHtjZW50ZXI6dCx6b29tOmksbm9VcGRhdGU6bn0pLHNldFRpbWVvdXQocCh0aGlzLl9vblpvb21UcmFuc2l0aW9uRW5kLHRoaXMpLDI1MCkpfSxfb25ab29tVHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZ1pvb20mJih0aGlzLl9tYXBQYW5lJiZfaSh0aGlzLl9tYXBQYW5lLFwibGVhZmxldC16b29tLWFuaW1cIiksdGhpcy5fYW5pbWF0aW5nWm9vbT0hMSx0aGlzLl9tb3ZlKHRoaXMuX2FuaW1hdGVUb0NlbnRlcix0aGlzLl9hbmltYXRlVG9ab29tKSxNKGZ1bmN0aW9uKCl7dGhpcy5fbW92ZUVuZCghMCl9LHRoaXMpKX19KTtmdW5jdGlvbiBZaSh0KXtyZXR1cm4gbmV3IFhpKHQpfXZhciBYaT1TLmV4dGVuZCh7b3B0aW9uczp7cG9zaXRpb246XCJ0b3ByaWdodFwifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2ModGhpcyx0KX0sZ2V0UG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBvc2l0aW9ufSxzZXRQb3NpdGlvbjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXA7cmV0dXJuIGkmJmkucmVtb3ZlQ29udHJvbCh0aGlzKSx0aGlzLm9wdGlvbnMucG9zaXRpb249dCxpJiZpLmFkZENvbnRyb2wodGhpcyksdGhpc30sZ2V0Q29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sYWRkVG86ZnVuY3Rpb24odCl7dGhpcy5yZW1vdmUoKSx0aGlzLl9tYXA9dDt2YXIgaT10aGlzLl9jb250YWluZXI9dGhpcy5vbkFkZCh0KSxlPXRoaXMuZ2V0UG9zaXRpb24oKSxuPXQuX2NvbnRyb2xDb3JuZXJzW2VdO3JldHVybiBjaShpLFwibGVhZmxldC1jb250cm9sXCIpLC0xIT09ZS5pbmRleE9mKFwiYm90dG9tXCIpP24uaW5zZXJ0QmVmb3JlKGksbi5maXJzdENoaWxkKTpuLmFwcGVuZENoaWxkKGkpLHRoaXMuX21hcC5vbihcInVubG9hZFwiLHRoaXMucmVtb3ZlLHRoaXMpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJihyaSh0aGlzLl9jb250YWluZXIpLHRoaXMub25SZW1vdmUmJnRoaXMub25SZW1vdmUodGhpcy5fbWFwKSx0aGlzLl9tYXAub2ZmKFwidW5sb2FkXCIsdGhpcy5yZW1vdmUsdGhpcyksdGhpcy5fbWFwPW51bGwpLHRoaXN9LF9yZWZvY3VzT25NYXA6ZnVuY3Rpb24odCl7dGhpcy5fbWFwJiZ0JiYwPHQuc2NyZWVuWCYmMDx0LnNjcmVlblkmJnRoaXMuX21hcC5nZXRDb250YWluZXIoKS5mb2N1cygpfX0pO0tpLmluY2x1ZGUoe2FkZENvbnRyb2w6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWRkVG8odGhpcyksdGhpc30scmVtb3ZlQ29udHJvbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5yZW1vdmUoKSx0aGlzfSxfaW5pdENvbnRyb2xQb3M6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLl9jb250cm9sQ29ybmVycz17fSxvPVwibGVhZmxldC1cIixzPXRoaXMuX2NvbnRyb2xDb250YWluZXI9c2koXCJkaXZcIixvK1wiY29udHJvbC1jb250YWluZXJcIix0aGlzLl9jb250YWluZXIpO2Z1bmN0aW9uIHQodCxpKXt2YXIgZT1vK3QrXCIgXCIrbytpO25bdCtpXT1zaShcImRp
24510dlwiLGUscyl9dChcInRvcFwiLFwibGVmdFwiKSx0KFwidG9wXCIsXCJyaWdodFwiKSx0KFwiYm90dG9tXCIsXCJsZWZ0XCIpLHQoXCJib3R0b21cIixcInJpZ2h0XCIpfSxfY2xlYXJDb250cm9sUG9zOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2NvbnRyb2xDb3JuZXJzKXJpKHRoaXMuX2NvbnRyb2xDb3JuZXJzW3RdKTtyaSh0aGlzLl9jb250cm9sQ29udGFpbmVyKSxkZWxldGUgdGhpcy5fY29udHJvbENvcm5lcnMsZGVsZXRlIHRoaXMuX2NvbnRyb2xDb250YWluZXJ9fSk7dmFyIEppPVhpLmV4dGVuZCh7b3B0aW9uczp7Y29sbGFwc2VkOiEwLHBvc2l0aW9uOlwidG9wcmlnaHRcIixhdXRvWkluZGV4OiEwLGhpZGVTaW5nbGVCYXNlOiExLHNvcnRMYXllcnM6ITEsc29ydEZ1bmN0aW9uOmZ1bmN0aW9uKHQsaSxlLG4pe3JldHVybiBlPG4/LTE6bjxlPzE6MH19LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpLGUpe2Zvcih2YXIgbiBpbiBjKHRoaXMsZSksdGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzPVtdLHRoaXMuX2xheWVycz1bXSx0aGlzLl9sYXN0WkluZGV4PTAsdGhpcy5faGFuZGxpbmdDbGljaz0hMSx0KXRoaXMuX2FkZExheWVyKHRbbl0sbik7Zm9yKG4gaW4gaSl0aGlzLl9hZGRMYXllcihpW25dLG4sITApfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9pbml0TGF5b3V0KCksdGhpcy5fdXBkYXRlKCksKHRoaXMuX21hcD10KS5vbihcInpvb21lbmRcIix0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzLHRoaXMpO2Zvcih2YXIgaT0wO2k8dGhpcy5fbGF5ZXJzLmxlbmd0aDtpKyspdGhpcy5fbGF5ZXJzW2ldLmxheWVyLm9uKFwiYWRkIHJlbW92ZVwiLHRoaXMuX29uTGF5ZXJDaGFuZ2UsdGhpcyk7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sYWRkVG86ZnVuY3Rpb24odCl7cmV0dXJuIFhpLnByb3RvdHlwZS5hZGRUby5jYWxsKHRoaXMsdCksdGhpcy5fZXhwYW5kSWZOb3RDb2xsYXBzZWQoKX0sb25SZW1vdmU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAub2ZmKFwiem9vbWVuZFwiLHRoaXMuX2NoZWNrRGlzYWJsZWRMYXllcnMsdGhpcyk7Zm9yKHZhciB0PTA7dDx0aGlzLl9sYXllcnMubGVuZ3RoO3QrKyl0aGlzLl9sYXllcnNbdF0ubGF5ZXIub2ZmKFwiYWRkIHJlbW92ZVwiLHRoaXMuX29uTGF5ZXJDaGFuZ2UsdGhpcyl9LGFkZEJhc2VMYXllcjpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl9hZGRMYXllcih0LGkpLHRoaXMuX21hcD90aGlzLl91cGRhdGUoKTp0aGlzfSxhZGRPdmVybGF5OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMuX2FkZExheWVyKHQsaSwhMCksdGhpcy5fbWFwP3RoaXMuX3VwZGF0ZSgpOnRoaXN9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3Qub2ZmKFwiYWRkIHJlbW92ZVwiLHRoaXMuX29uTGF5ZXJDaGFuZ2UsdGhpcyk7dmFyIGk9dGhpcy5fZ2V0TGF5ZXIobSh0KSk7cmV0dXJuIGkmJnRoaXMuX2xheWVycy5zcGxpY2UodGhpcy5fbGF5ZXJzLmluZGV4T2YoaSksMSksdGhpcy5fbWFwP3RoaXMuX3VwZGF0ZSgpOnRoaXN9LGV4cGFuZDpmdW5jdGlvbigpe2NpKHRoaXMuX2NvbnRhaW5lcixcImxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWRcIiksdGhpcy5fc2VjdGlvbi5zdHlsZS5oZWlnaHQ9bnVsbDt2YXIgdD10aGlzLl9tYXAuZ2V0U2l6ZSgpLnktKHRoaXMuX2NvbnRhaW5lci5vZmZzZXRUb3ArNTApO3JldHVybiB0PHRoaXMuX3NlY3Rpb24uY2xpZW50SGVpZ2h0PyhjaSh0aGlzLl9zZWN0aW9uLFwibGVhZmxldC1jb250cm9sLWxheWVycy1zY3JvbGxiYXJcIiksdGhpcy5fc2VjdGlvbi5zdHlsZS5oZWlnaHQ9dCtcInB4XCIpOl9pKHRoaXMuX3NlY3Rpb24sXCJsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXNjcm9sbGJhclwiKSx0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzKCksdGhpc30sY29sbGFwc2U6ZnVuY3Rpb24oKXtyZXR1cm4gX2kodGhpcy5fY29udGFpbmVyLFwibGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZFwiKSx0aGlzfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3ZhciB0PVwibGVhZmxldC1jb250cm9sLWxheWVyc1wiLGk9dGhpcy5fY29udGFpbmVyPXNpKFwiZGl2XCIsdCksZT10aGlzLm9wdGlvbnMuY29sbGFwc2VkO2kuc2V0QXR0cmlidXRlKFwiYXJpYS1oYXNwb3B1cFwiLCEwKSxPaShpKSxJaShpKTt2YXIgbj10aGlzLl9zZWN0aW9uPXNpKFwic2VjdGlvblwiLHQrXCItbGlzdFwiKTtlJiYodGhpcy5fbWFwLm9uKFwiY2xpY2tcIix0aGlzLmNvbGxhcHNlLHRoaXMpLG90fHx6aShpLHttb3VzZWVudGVyOnRoaXMuZXhwYW5kLG1vdXNlbGVhdmU6dGhpcy5jb2xsYXBzZX0sdGhpcykpO3ZhciBvPXRoaXMuX2xheWVyc0xpbms9c2koXCJhXCIsdCtcIi10b2dnbGVcIixpKTtvLmhyZWY9XCIjXCIsby50aXRsZT1cIkxheWVyc1wiLGJ0Pyh6aShvLFwiY2xpY2tcIixOaSksemkobyxcImNsaWNrXCIsdGhpcy5leHBhbmQsdGhpcykpOnppKG8sXCJmb2N1c1wiLHRoaXMuZXhwYW5kLHRoaXMpLGV8fHRoaXMuZXhwYW5kKCksdGhpcy5fYmFzZUxheWVyc0xpc3Q9c2koXCJkaXZcIix0K1wiLWJhc2VcIixuKSx0aGlzLl9zZXBhcmF0b3I9c2koXCJkaXZcIix0K1wiLXNlcGFyYXRvclwiLG4pLHRoaXMuX292ZXJsYXlzTGlzdD1zaShcImRpdlwiLHQrXCItb3ZlcmxheXNcIixuKSxpLmFwcGVuZENoaWxkKG4pfSxfZ2V0TGF5ZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBpPTA7aTx0aGlzLl9sYXllcnMubGVuZ3RoO2krKylpZih0aGlzLl9sYXllcnNbaV0mJm0odGhpcy5fbGF5ZXJzW2ldLmxheWVyKT09PXQpcmV0dXJuIHRoaXMuX2xheWVyc1tpXX0sX2FkZExheWVyOmZ1bmN0aW9uKHQsaSxlKXt0aGlzLl9tYXAmJnQub24oXCJhZGQgcmVtb3ZlXCIsdGhpcy5fb25MYXllckNoYW5nZSx0aGlzKSx0aGlzLl9sYXllcnMucHVzaCh7bGF5ZXI6dCxuYW1lOmksb3ZlcmxheTplfSksdGhpcy5vcHRpb25zLnNvcnRMYXllcnMmJnRoaXMuX2xheWVycy5zb3J0KHAoZnVuY3Rpb24odCxpKXtyZXR1cm4gdGhpcy5vcHRpb25zLnNvcnRGdW5jdGlvbih0LmxheWVyLGkubGF5ZXIsdC5uYW1lLGkubmFtZSl9LHRoaXMpKSx0aGlzLm9wdGlvbnMuYXV0b1pJbmRleCYmdC5zZXRaSW5kZXgmJih0aGlzLl9sYXN0WkluZGV4KyssdC5zZXRaSW5kZXgodGhpcy5fbGFzdFpJbmRleCkpLHRoaXMuX2V4cGFuZElmTm90Q29sbGFwc2VkKCl9LF91cGRhdGU6ZnVuY3Rpb24oKXtpZighdGhpcy5fY29udGFpbmVyKXJldHVybi
24510B0aGlzO2FpKHRoaXMuX2Jhc2VMYXllcnNMaXN0KSxhaSh0aGlzLl9vdmVybGF5c0xpc3QpLHRoaXMuX2xheWVyQ29udHJvbElucHV0cz1bXTtmb3IodmFyIHQsaSxlLG49MCxvPTA7bzx0aGlzLl9sYXllcnMubGVuZ3RoO28rKyllPXRoaXMuX2xheWVyc1tvXSx0aGlzLl9hZGRJdGVtKGUpLGk9aXx8ZS5vdmVybGF5LHQ9dHx8IWUub3ZlcmxheSxuKz1lLm92ZXJsYXk/MDoxO3JldHVybiB0aGlzLm9wdGlvbnMuaGlkZVNpbmdsZUJhc2UmJih0PXQmJjE8bix0aGlzLl9iYXNlTGF5ZXJzTGlzdC5zdHlsZS5kaXNwbGF5PXQ/XCJcIjpcIm5vbmVcIiksdGhpcy5fc2VwYXJhdG9yLnN0eWxlLmRpc3BsYXk9aSYmdD9cIlwiOlwibm9uZVwiLHRoaXN9LF9vbkxheWVyQ2hhbmdlOmZ1bmN0aW9uKHQpe3RoaXMuX2hhbmRsaW5nQ2xpY2t8fHRoaXMuX3VwZGF0ZSgpO3ZhciBpPXRoaXMuX2dldExheWVyKG0odC50YXJnZXQpKSxlPWkub3ZlcmxheT9cImFkZFwiPT09dC50eXBlP1wib3ZlcmxheWFkZFwiOlwib3ZlcmxheXJlbW92ZVwiOlwiYWRkXCI9PT10LnR5cGU/XCJiYXNlbGF5ZXJjaGFuZ2VcIjpudWxsO2UmJnRoaXMuX21hcC5maXJlKGUsaSl9LF9jcmVhdGVSYWRpb0VsZW1lbnQ6ZnVuY3Rpb24odCxpKXt2YXIgZT0nPGlucHV0IHR5cGU9XCJyYWRpb1wiIGNsYXNzPVwibGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3RvclwiIG5hbWU9XCInK3QrJ1wiJysoaT8nIGNoZWNrZWQ9XCJjaGVja2VkXCInOlwiXCIpK1wiLz5cIixuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cmV0dXJuIG4uaW5uZXJIVE1MPWUsbi5maXJzdENoaWxkfSxfYWRkSXRlbTpmdW5jdGlvbih0KXt2YXIgaSxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiKSxuPXRoaXMuX21hcC5oYXNMYXllcih0LmxheWVyKTt0Lm92ZXJsYXk/KChpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKSkudHlwZT1cImNoZWNrYm94XCIsaS5jbGFzc05hbWU9XCJsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXNlbGVjdG9yXCIsaS5kZWZhdWx0Q2hlY2tlZD1uKTppPXRoaXMuX2NyZWF0ZVJhZGlvRWxlbWVudChcImxlYWZsZXQtYmFzZS1sYXllcnNfXCIrbSh0aGlzKSxuKSx0aGlzLl9sYXllckNvbnRyb2xJbnB1dHMucHVzaChpKSxpLmxheWVySWQ9bSh0LmxheWVyKSx6aShpLFwiY2xpY2tcIix0aGlzLl9vbklucHV0Q2xpY2ssdGhpcyk7dmFyIG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7by5pbm5lckhUTUw9XCIgXCIrdC5uYW1lO3ZhciBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cmV0dXJuIGUuYXBwZW5kQ2hpbGQocykscy5hcHBlbmRDaGlsZChpKSxzLmFwcGVuZENoaWxkKG8pLCh0Lm92ZXJsYXk/dGhpcy5fb3ZlcmxheXNMaXN0OnRoaXMuX2Jhc2VMYXllcnNMaXN0KS5hcHBlbmRDaGlsZChlKSx0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzKCksZX0sX29uSW5wdXRDbGljazpmdW5jdGlvbigpe3ZhciB0LGksZT10aGlzLl9sYXllckNvbnRyb2xJbnB1dHMsbj1bXSxvPVtdO3RoaXMuX2hhbmRsaW5nQ2xpY2s9ITA7Zm9yKHZhciBzPWUubGVuZ3RoLTE7MDw9cztzLS0pdD1lW3NdLGk9dGhpcy5fZ2V0TGF5ZXIodC5sYXllcklkKS5sYXllcix0LmNoZWNrZWQ/bi5wdXNoKGkpOnQuY2hlY2tlZHx8by5wdXNoKGkpO2ZvcihzPTA7czxvLmxlbmd0aDtzKyspdGhpcy5fbWFwLmhhc0xheWVyKG9bc10pJiZ0aGlzLl9tYXAucmVtb3ZlTGF5ZXIob1tzXSk7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrKyl0aGlzLl9tYXAuaGFzTGF5ZXIobltzXSl8fHRoaXMuX21hcC5hZGRMYXllcihuW3NdKTt0aGlzLl9oYW5kbGluZ0NsaWNrPSExLHRoaXMuX3JlZm9jdXNPbk1hcCgpfSxfY2hlY2tEaXNhYmxlZExheWVyczpmdW5jdGlvbigpe2Zvcih2YXIgdCxpLGU9dGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzLG49dGhpcy5fbWFwLmdldFpvb20oKSxvPWUubGVuZ3RoLTE7MDw9bztvLS0pdD1lW29dLGk9dGhpcy5fZ2V0TGF5ZXIodC5sYXllcklkKS5sYXllcix0LmRpc2FibGVkPXZvaWQgMCE9PWkub3B0aW9ucy5taW5ab29tJiZuPGkub3B0aW9ucy5taW5ab29tfHx2b2lkIDAhPT1pLm9wdGlvbnMubWF4Wm9vbSYmbj5pLm9wdGlvbnMubWF4Wm9vbX0sX2V4cGFuZElmTm90Q29sbGFwc2VkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmIXRoaXMub3B0aW9ucy5jb2xsYXBzZWQmJnRoaXMuZXhwYW5kKCksdGhpc30sX2V4cGFuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmV4cGFuZCgpfSxfY29sbGFwc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2xsYXBzZSgpfX0pLCRpPVhpLmV4dGVuZCh7b3B0aW9uczp7cG9zaXRpb246XCJ0b3BsZWZ0XCIsem9vbUluVGV4dDpcIitcIix6b29tSW5UaXRsZTpcIlpvb20gaW5cIix6b29tT3V0VGV4dDpcIiYjeDIyMTI7XCIsem9vbU91dFRpdGxlOlwiWm9vbSBvdXRcIn0sb25BZGQ6ZnVuY3Rpb24odCl7dmFyIGk9XCJsZWFmbGV0LWNvbnRyb2wtem9vbVwiLGU9c2koXCJkaXZcIixpK1wiIGxlYWZsZXQtYmFyXCIpLG49dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLl96b29tSW5CdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKG4uem9vbUluVGV4dCxuLnpvb21JblRpdGxlLGkrXCItaW5cIixlLHRoaXMuX3pvb21JbiksdGhpcy5fem9vbU91dEJ1dHRvbj10aGlzLl9jcmVhdGVCdXR0b24obi56b29tT3V0VGV4dCxuLnpvb21PdXRUaXRsZSxpK1wiLW91dFwiLGUsdGhpcy5fem9vbU91dCksdGhpcy5fdXBkYXRlRGlzYWJsZWQoKSx0Lm9uKFwiem9vbWVuZCB6b29tbGV2ZWxzY2hhbmdlXCIsdGhpcy5fdXBkYXRlRGlzYWJsZWQsdGhpcyksZX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5vZmYoXCJ6b29tZW5kIHpvb21sZXZlbHNjaGFuZ2VcIix0aGlzLl91cGRhdGVEaXNhYmxlZCx0aGlzKX0sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZD0hMCx0aGlzLl91cGRhdGVEaXNhYmxlZCgpLHRoaXN9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl91cGRhdGVEaXNhYmxlZCgpLHRoaXN9LF96b29tSW46ZnVuY3Rpb24odCl7IXRoaXMuX2Rpc2FibGVkJiZ0aGlzLl9tYXAuX3pvb208dGhpcy5fbWFwLmdldE1heFpvb20oKSYmdGhpcy5fbWFwLnpvb21Jbih0aGlzLl9tYXAub3B0aW9ucy56b29tRGVsdGEqKHQuc2hpZnRLZXk/MzoxKSl9LF96b29tT3V0OmZ1bmN0aW9uKHQpeyF0aGlzLl9kaXNhYmxlZCYmdGhpcy5fbWFwLl96b29tPnRoaXMuX21hcC5nZXRNaW5ab29tKCkmJnRoaXMuX21hcC56b29tT3V0KHRoaXMuX21hcC5vcHRpb25zLnpvb21EZWx0YSoodC5zaGlmdEtleT8zOjEpKX0sX2NyZWF0ZUJ1dHRvbjpmdW5jdGlvbih0LGksZSxuLG8pe3ZhciBzPXNpKFwiYVwiLGUsbik7cmV0dXJuIHMuaW5uZXJIVE1MPXQscy5ocmVmPVwiI1wiLHMudGl0bGU9aSxzLnNldEF0dHJpYnV0ZShcInJvbGVcIixcImJ1dHRvblwiKSxzLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIixpKSxPaShzKSx6aShzLFwiY2xpY2tcIixOaSksemkocyxcImNsaWNrXCIsbyx0aGlzKSx6aShzLFwiY2xpY2tcIix0aGlzLl9yZWZvY3VzT25NYXAsdGhpcyksc30sX3VwZGF0ZURpc2FibGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGk9XCJsZWFmbGV0LWRpc2FibGVkXCI7X2kodGhpcy5fem9vbUluQnV0dG9uLGkpLF9pKHRoaXMuX3pvb21PdXRCdXR0b24s
24510aSksIXRoaXMuX2Rpc2FibGVkJiZ0Ll96b29tIT09dC5nZXRNaW5ab29tKCl8fGNpKHRoaXMuX3pvb21PdXRCdXR0b24saSksIXRoaXMuX2Rpc2FibGVkJiZ0Ll96b29tIT09dC5nZXRNYXhab29tKCl8fGNpKHRoaXMuX3pvb21JbkJ1dHRvbixpKX19KTtLaS5tZXJnZU9wdGlvbnMoe3pvb21Db250cm9sOiEwfSksS2kuYWRkSW5pdEhvb2soZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuem9vbUNvbnRyb2wmJih0aGlzLnpvb21Db250cm9sPW5ldyAkaSx0aGlzLmFkZENvbnRyb2wodGhpcy56b29tQ29udHJvbCkpfSk7dmFyIFFpPVhpLmV4dGVuZCh7b3B0aW9uczp7cG9zaXRpb246XCJib3R0b21sZWZ0XCIsbWF4V2lkdGg6MTAwLG1ldHJpYzohMCxpbXBlcmlhbDohMH0sb25BZGQ6ZnVuY3Rpb24odCl7dmFyIGk9XCJsZWFmbGV0LWNvbnRyb2wtc2NhbGVcIixlPXNpKFwiZGl2XCIsaSksbj10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuX2FkZFNjYWxlcyhuLGkrXCItbGluZVwiLGUpLHQub24obi51cGRhdGVXaGVuSWRsZT9cIm1vdmVlbmRcIjpcIm1vdmVcIix0aGlzLl91cGRhdGUsdGhpcyksdC53aGVuUmVhZHkodGhpcy5fdXBkYXRlLHRoaXMpLGV9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3Qub2ZmKHRoaXMub3B0aW9ucy51cGRhdGVXaGVuSWRsZT9cIm1vdmVlbmRcIjpcIm1vdmVcIix0aGlzLl91cGRhdGUsdGhpcyl9LF9hZGRTY2FsZXM6ZnVuY3Rpb24odCxpLGUpe3QubWV0cmljJiYodGhpcy5fbVNjYWxlPXNpKFwiZGl2XCIsaSxlKSksdC5pbXBlcmlhbCYmKHRoaXMuX2lTY2FsZT1zaShcImRpdlwiLGksZSkpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGk9dC5nZXRTaXplKCkueS8yLGU9dC5kaXN0YW5jZSh0LmNvbnRhaW5lclBvaW50VG9MYXRMbmcoWzAsaV0pLHQuY29udGFpbmVyUG9pbnRUb0xhdExuZyhbdGhpcy5vcHRpb25zLm1heFdpZHRoLGldKSk7dGhpcy5fdXBkYXRlU2NhbGVzKGUpfSxfdXBkYXRlU2NhbGVzOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucy5tZXRyaWMmJnQmJnRoaXMuX3VwZGF0ZU1ldHJpYyh0KSx0aGlzLm9wdGlvbnMuaW1wZXJpYWwmJnQmJnRoaXMuX3VwZGF0ZUltcGVyaWFsKHQpfSxfdXBkYXRlTWV0cmljOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX2dldFJvdW5kTnVtKHQpLGU9aTwxZTM/aStcIiBtXCI6aS8xZTMrXCIga21cIjt0aGlzLl91cGRhdGVTY2FsZSh0aGlzLl9tU2NhbGUsZSxpL3QpfSxfdXBkYXRlSW1wZXJpYWw6ZnVuY3Rpb24odCl7dmFyIGksZSxuLG89My4yODA4Mzk5KnQ7NTI4MDxvPyhpPW8vNTI4MCxlPXRoaXMuX2dldFJvdW5kTnVtKGkpLHRoaXMuX3VwZGF0ZVNjYWxlKHRoaXMuX2lTY2FsZSxlK1wiIG1pXCIsZS9pKSk6KG49dGhpcy5fZ2V0Um91bmROdW0obyksdGhpcy5fdXBkYXRlU2NhbGUodGhpcy5faVNjYWxlLG4rXCIgZnRcIixuL28pKX0sX3VwZGF0ZVNjYWxlOmZ1bmN0aW9uKHQsaSxlKXt0LnN0eWxlLndpZHRoPU1hdGgucm91bmQodGhpcy5vcHRpb25zLm1heFdpZHRoKmUpK1wicHhcIix0LmlubmVySFRNTD1pfSxfZ2V0Um91bmROdW06ZnVuY3Rpb24odCl7dmFyIGk9TWF0aC5wb3coMTAsKE1hdGguZmxvb3IodCkrXCJcIikubGVuZ3RoLTEpLGU9dC9pO3JldHVybiBpKihlPTEwPD1lPzEwOjU8PWU/NTozPD1lPzM6Mjw9ZT8yOjEpfX0pLHRlPVhpLmV4dGVuZCh7b3B0aW9uczp7cG9zaXRpb246XCJib3R0b21yaWdodFwiLHByZWZpeDonPGEgaHJlZj1cImh0dHBzOi8vbGVhZmxldGpzLmNvbVwiIHRpdGxlPVwiQSBKUyBsaWJyYXJ5IGZvciBpbnRlcmFjdGl2ZSBtYXBzXCI+TGVhZmxldDwvYT4nfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2ModGhpcyx0KSx0aGlzLl9hdHRyaWJ1dGlvbnM9e319LG9uQWRkOmZ1bmN0aW9uKHQpe2Zvcih2YXIgaSBpbih0LmF0dHJpYnV0aW9uQ29udHJvbD10aGlzKS5fY29udGFpbmVyPXNpKFwiZGl2XCIsXCJsZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb25cIiksT2kodGhpcy5fY29udGFpbmVyKSx0Ll9sYXllcnMpdC5fbGF5ZXJzW2ldLmdldEF0dHJpYnV0aW9uJiZ0aGlzLmFkZEF0dHJpYnV0aW9uKHQuX2xheWVyc1tpXS5nZXRBdHRyaWJ1dGlvbigpKTtyZXR1cm4gdGhpcy5fdXBkYXRlKCksdGhpcy5fY29udGFpbmVyfSxzZXRQcmVmaXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wcmVmaXg9dCx0aGlzLl91cGRhdGUoKSx0aGlzfSxhZGRBdHRyaWJ1dGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdCYmKHRoaXMuX2F0dHJpYnV0aW9uc1t0XXx8KHRoaXMuX2F0dHJpYnV0aW9uc1t0XT0wKSx0aGlzLl9hdHRyaWJ1dGlvbnNbdF0rKyx0aGlzLl91cGRhdGUoKSksdGhpc30scmVtb3ZlQXR0cmlidXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnRoaXMuX2F0dHJpYnV0aW9uc1t0XSYmKHRoaXMuX2F0dHJpYnV0aW9uc1t0XS0tLHRoaXMuX3VwZGF0ZSgpKSx0aGlzfSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwKXt2YXIgdD1bXTtmb3IodmFyIGkgaW4gdGhpcy5fYXR0cmlidXRpb25zKXRoaXMuX2F0dHJpYnV0aW9uc1tpXSYmdC5wdXNoKGkpO3ZhciBlPVtdO3RoaXMub3B0aW9ucy5wcmVmaXgmJmUucHVzaCh0aGlzLm9wdGlvbnMucHJlZml4KSx0Lmxlbmd0aCYmZS5wdXNoKHQuam9pbihcIiwgXCIpKSx0aGlzLl9jb250YWluZXIuaW5uZXJIVE1MPWUuam9pbihcIiB8IFwiKX19fSk7S2kubWVyZ2VPcHRpb25zKHthdHRyaWJ1dGlvbkNvbnRyb2w6ITB9KSxLaS5hZGRJbml0SG9vayhmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5hdHRyaWJ1dGlvbkNvbnRyb2wmJihuZXcgdGUpLmFkZFRvKHRoaXMpfSk7WGkuTGF5ZXJzPUppLFhpLlpvb209JGksWGkuU2NhbGU9UWksWGkuQXR0cmlidXRpb249dGUsWWkubGF5ZXJzPWZ1bmN0aW9uKHQsaSxlKXtyZXR1cm4gbmV3IEppKHQsaSxlKX0sWWkuem9vbT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3ICRpKHQpfSxZaS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFFpKHQpfSxZaS5hdHRyaWJ1dGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHRlKHQpfTt2YXIgaWU9Uy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXR9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfHwodGhpcy5fZW5hYmxlZD0hMCx0aGlzLmFkZEhvb2tzKCkpLHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZCYmKHRoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZW1vdmVIb29rcygpKSx0aGlzfSxlbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lbmFibGVkfX0pO2llLmFkZFRvPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQuYWRkSGFuZGxlcihpLHRoaXMpLHRoaXN9O3ZhciBlZSxuZT17RXZlbn
24510RzOlp9LG9lPWJ0P1widG91Y2hzdGFydCBtb3VzZWRvd25cIjpcIm1vdXNlZG93blwiLHNlPXttb3VzZWRvd246XCJtb3VzZXVwXCIsdG91Y2hzdGFydDpcInRvdWNoZW5kXCIscG9pbnRlcmRvd246XCJ0b3VjaGVuZFwiLE1TUG9pbnRlckRvd246XCJ0b3VjaGVuZFwifSxyZT17bW91c2Vkb3duOlwibW91c2Vtb3ZlXCIsdG91Y2hzdGFydDpcInRvdWNobW92ZVwiLHBvaW50ZXJkb3duOlwidG91Y2htb3ZlXCIsTVNQb2ludGVyRG93bjpcInRvdWNobW92ZVwifSxhZT1FLmV4dGVuZCh7b3B0aW9uczp7Y2xpY2tUb2xlcmFuY2U6M30saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGksZSxuKXtjKHRoaXMsbiksdGhpcy5fZWxlbWVudD10LHRoaXMuX2RyYWdTdGFydFRhcmdldD1pfHx0LHRoaXMuX3ByZXZlbnRPdXRsaW5lPWV9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuX2VuYWJsZWR8fCh6aSh0aGlzLl9kcmFnU3RhcnRUYXJnZXQsb2UsdGhpcy5fb25Eb3duLHRoaXMpLHRoaXMuX2VuYWJsZWQ9ITApfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZCYmKGFlLl9kcmFnZ2luZz09PXRoaXMmJnRoaXMuZmluaXNoRHJhZygpLFNpKHRoaXMuX2RyYWdTdGFydFRhcmdldCxvZSx0aGlzLl9vbkRvd24sdGhpcyksdGhpcy5fZW5hYmxlZD0hMSx0aGlzLl9tb3ZlZD0hMSl9LF9vbkRvd246ZnVuY3Rpb24odCl7dmFyIGksZTshdC5fc2ltdWxhdGVkJiZ0aGlzLl9lbmFibGVkJiYodGhpcy5fbW92ZWQ9ITEsbGkodGhpcy5fZWxlbWVudCxcImxlYWZsZXQtem9vbS1hbmltXCIpfHxhZS5fZHJhZ2dpbmd8fHQuc2hpZnRLZXl8fDEhPT10LndoaWNoJiYxIT09dC5idXR0b24mJiF0LnRvdWNoZXN8fCgoYWUuX2RyYWdnaW5nPXRoaXMpLl9wcmV2ZW50T3V0bGluZSYmUGkodGhpcy5fZWxlbWVudCkseGkoKSxYdCgpLHRoaXMuX21vdmluZ3x8KHRoaXMuZmlyZShcImRvd25cIiksaT10LnRvdWNoZXM/dC50b3VjaGVzWzBdOnQsZT1iaSh0aGlzLl9lbGVtZW50KSx0aGlzLl9zdGFydFBvaW50PW5ldyBrKGkuY2xpZW50WCxpLmNsaWVudFkpLHRoaXMuX3BhcmVudFNjYWxlPVRpKGUpLHppKGRvY3VtZW50LHJlW3QudHlwZV0sdGhpcy5fb25Nb3ZlLHRoaXMpLHppKGRvY3VtZW50LHNlW3QudHlwZV0sdGhpcy5fb25VcCx0aGlzKSkpKX0sX29uTW92ZTpmdW5jdGlvbih0KXt2YXIgaSxlOyF0Ll9zaW11bGF0ZWQmJnRoaXMuX2VuYWJsZWQmJih0LnRvdWNoZXMmJjE8dC50b3VjaGVzLmxlbmd0aD90aGlzLl9tb3ZlZD0hMDooKGU9bmV3IGsoKGk9dC50b3VjaGVzJiYxPT09dC50b3VjaGVzLmxlbmd0aD90LnRvdWNoZXNbMF06dCkuY2xpZW50WCxpLmNsaWVudFkpLl9zdWJ0cmFjdCh0aGlzLl9zdGFydFBvaW50KSkueHx8ZS55KSYmKE1hdGguYWJzKGUueCkrTWF0aC5hYnMoZS55KTx0aGlzLm9wdGlvbnMuY2xpY2tUb2xlcmFuY2V8fChlLngvPXRoaXMuX3BhcmVudFNjYWxlLngsZS55Lz10aGlzLl9wYXJlbnRTY2FsZS55LFJpKHQpLHRoaXMuX21vdmVkfHwodGhpcy5maXJlKFwiZHJhZ3N0YXJ0XCIpLHRoaXMuX21vdmVkPSEwLHRoaXMuX3N0YXJ0UG9zPXlpKHRoaXMuX2VsZW1lbnQpLnN1YnRyYWN0KGUpLGNpKGRvY3VtZW50LmJvZHksXCJsZWFmbGV0LWRyYWdnaW5nXCIpLHRoaXMuX2xhc3RUYXJnZXQ9dC50YXJnZXR8fHQuc3JjRWxlbWVudCx3aW5kb3cuU1ZHRWxlbWVudEluc3RhbmNlJiZ0aGlzLl9sYXN0VGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LlNWR0VsZW1lbnRJbnN0YW5jZSYmKHRoaXMuX2xhc3RUYXJnZXQ9dGhpcy5fbGFzdFRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCksY2kodGhpcy5fbGFzdFRhcmdldCxcImxlYWZsZXQtZHJhZy10YXJnZXRcIikpLHRoaXMuX25ld1Bvcz10aGlzLl9zdGFydFBvcy5hZGQoZSksdGhpcy5fbW92aW5nPSEwLHoodGhpcy5fYW5pbVJlcXVlc3QpLHRoaXMuX2xhc3RFdmVudD10LHRoaXMuX2FuaW1SZXF1ZXN0PU0odGhpcy5fdXBkYXRlUG9zaXRpb24sdGhpcywhMCkpKSl9LF91cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXtvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RFdmVudH07dGhpcy5maXJlKFwicHJlZHJhZ1wiLHQpLHZpKHRoaXMuX2VsZW1lbnQsdGhpcy5fbmV3UG9zKSx0aGlzLmZpcmUoXCJkcmFnXCIsdCl9LF9vblVwOmZ1bmN0aW9uKHQpeyF0Ll9zaW11bGF0ZWQmJnRoaXMuX2VuYWJsZWQmJnRoaXMuZmluaXNoRHJhZygpfSxmaW5pc2hEcmFnOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIF9pKGRvY3VtZW50LmJvZHksXCJsZWFmbGV0LWRyYWdnaW5nXCIpLHRoaXMuX2xhc3RUYXJnZXQmJihfaSh0aGlzLl9sYXN0VGFyZ2V0LFwibGVhZmxldC1kcmFnLXRhcmdldFwiKSx0aGlzLl9sYXN0VGFyZ2V0PW51bGwpLHJlKVNpKGRvY3VtZW50LHJlW3RdLHRoaXMuX29uTW92ZSx0aGlzKSxTaShkb2N1bWVudCxzZVt0XSx0aGlzLl9vblVwLHRoaXMpO3dpKCksSnQoKSx0aGlzLl9tb3ZlZCYmdGhpcy5fbW92aW5nJiYoeih0aGlzLl9hbmltUmVxdWVzdCksdGhpcy5maXJlKFwiZHJhZ2VuZFwiLHtkaXN0YW5jZTp0aGlzLl9uZXdQb3MuZGlzdGFuY2VUbyh0aGlzLl9zdGFydFBvcyl9KSksdGhpcy5fbW92aW5nPSExLGFlLl9kcmFnZ2luZz0hMX19KTtmdW5jdGlvbiBoZSh0LGkpe2lmKCFpfHwhdC5sZW5ndGgpcmV0dXJuIHQuc2xpY2UoKTt2YXIgZT1pKmk7cmV0dXJuIHQ9ZnVuY3Rpb24odCxpKXt2YXIgZT10Lmxlbmd0aCxuPW5ldyh0eXBlb2YgVWludDhBcnJheSE9dm9pZCAwK1wiXCI/VWludDhBcnJheTpBcnJheSkoZSk7blswXT1uW2UtMV09MSxmdW5jdGlvbiB0KGksZSxuLG8scyl7dmFyIHIsYSxoLHU9MDtmb3IoYT1vKzE7YTw9cy0xO2ErKyloPWRlKGlbYV0saVtvXSxpW3NdLCEwKSx1PGgmJihyPWEsdT1oKTtuPHUmJihlW3JdPTEsdChpLGUsbixvLHIpLHQoaSxlLG4scixzKSl9KHQsbixpLDAsZS0xKTt2YXIgbyxzPVtdO2ZvcihvPTA7bzxlO28rKyluW29dJiZzLnB1c2godFtvXSk7cmV0dXJuIHN9KHQ9ZnVuY3Rpb24odCxpKXtmb3IodmFyIGU9W3RbMF1dLG49MSxvPTAscz10Lmxlbmd0aDtuPHM7bisrKShmdW5jdGlvbih0LGkpe3ZhciBlPWkueC10Lngsbj1pLnktdC55O3JldHVybiBlKmUrbipufSkodFtuXSx0W29dKT5pJiYoZS5wdXNoKHRbbl0pLG89bik7bzxzLTEmJmUucHVzaCh0W3MtMV0pO3JldHVybiBlfSh0LGUpLGUpfWZ1bmN0aW9uIHVlKHQsaSxlKXtyZXR1cm4gTWF0aC5zcXJ0KGRlKHQsaSxlLCEwKSl9ZnVuY3Rpb24gbGUodCxpLGUsbi
24510xvKXt2YXIgcyxyLGEsaD1uP2VlOl9lKHQsZSksdT1fZShpLGUpO2ZvcihlZT11Ozspe2lmKCEoaHx1KSlyZXR1cm5bdCxpXTtpZihoJnUpcmV0dXJuITE7YT1fZShyPWNlKHQsaSxzPWh8fHUsZSxvKSxlKSxzPT09aD8odD1yLGg9YSk6KGk9cix1PWEpfX1mdW5jdGlvbiBjZSh0LGksZSxuLG8pe3ZhciBzLHIsYT1pLngtdC54LGg9aS55LXQueSx1PW4ubWluLGw9bi5tYXg7cmV0dXJuIDgmZT8ocz10LngrYSoobC55LXQueSkvaCxyPWwueSk6NCZlPyhzPXQueCthKih1LnktdC55KS9oLHI9dS55KToyJmU/KHM9bC54LHI9dC55K2gqKGwueC10LngpL2EpOjEmZSYmKHM9dS54LHI9dC55K2gqKHUueC10LngpL2EpLG5ldyBrKHMscixvKX1mdW5jdGlvbiBfZSh0LGkpe3ZhciBlPTA7cmV0dXJuIHQueDxpLm1pbi54P2V8PTE6dC54PmkubWF4LngmJihlfD0yKSx0Lnk8aS5taW4ueT9lfD00OnQueT5pLm1heC55JiYoZXw9OCksZX1mdW5jdGlvbiBkZSh0LGksZSxuKXt2YXIgbyxzPWkueCxyPWkueSxhPWUueC1zLGg9ZS55LXIsdT1hKmEraCpoO3JldHVybiAwPHUmJigxPChvPSgodC54LXMpKmErKHQueS1yKSpoKS91KT8ocz1lLngscj1lLnkpOjA8byYmKHMrPWEqbyxyKz1oKm8pKSxhPXQueC1zLGg9dC55LXIsbj9hKmEraCpoOm5ldyBrKHMscil9ZnVuY3Rpb24gcGUodCl7cmV0dXJuIWcodFswXSl8fFwib2JqZWN0XCIhPXR5cGVvZiB0WzBdWzBdJiZ2b2lkIDAhPT10WzBdWzBdfWZ1bmN0aW9uIG1lKHQpe3JldHVybiBjb25zb2xlLndhcm4oXCJEZXByZWNhdGVkIHVzZSBvZiBfZmxhdCwgcGxlYXNlIHVzZSBMLkxpbmVVdGlsLmlzRmxhdCBpbnN0ZWFkLlwiKSxwZSh0KX12YXIgZmU9e3NpbXBsaWZ5OmhlLHBvaW50VG9TZWdtZW50RGlzdGFuY2U6dWUsY2xvc2VzdFBvaW50T25TZWdtZW50OmZ1bmN0aW9uKHQsaSxlKXtyZXR1cm4gZGUodCxpLGUpfSxjbGlwU2VnbWVudDpsZSxfZ2V0RWRnZUludGVyc2VjdGlvbjpjZSxfZ2V0Qml0Q29kZTpfZSxfc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQ6ZGUsaXNGbGF0OnBlLF9mbGF0Om1lfTtmdW5jdGlvbiBnZSh0LGksZSl7Zm9yKHZhciBuLG8scyxyLGEsaCx1LGw9WzEsNCwyLDhdLGM9MCxfPXQubGVuZ3RoO2M8XztjKyspdFtjXS5fY29kZT1fZSh0W2NdLGkpO2ZvcihzPTA7czw0O3MrKyl7Zm9yKGg9bFtzXSxuPVtdLGM9MCxvPShfPXQubGVuZ3RoKS0xO2M8XztvPWMrKylyPXRbY10sYT10W29dLHIuX2NvZGUmaD9hLl9jb2RlJmh8fCgodT1jZShhLHIsaCxpLGUpKS5fY29kZT1fZSh1LGkpLG4ucHVzaCh1KSk6KGEuX2NvZGUmaCYmKCh1PWNlKGEscixoLGksZSkpLl9jb2RlPV9lKHUsaSksbi5wdXNoKHUpKSxuLnB1c2gocikpO3Q9bn1yZXR1cm4gdH12YXIgdmUseWU9e2NsaXBQb2x5Z29uOmdlfSx4ZT17cHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGsodC5sbmcsdC5sYXQpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEKHQueSx0LngpfSxib3VuZHM6bmV3IEkoWy0xODAsLTkwXSxbMTgwLDkwXSl9LHdlPXtSOjYzNzgxMzcsUl9NSU5PUjo2MzU2NzUyLjMxNDI0NTE3OSxib3VuZHM6bmV3IEkoWy0yMDAzNzUwOC4zNDI3OSwtMTU0OTY1NzAuNzM5NzJdLFsyMDAzNzUwOC4zNDI3OSwxODc2NDY1Ni4yMzEzOF0pLHByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGk9TWF0aC5QSS8xODAsZT10aGlzLlIsbj10LmxhdCppLG89dGhpcy5SX01JTk9SL2Uscz1NYXRoLnNxcnQoMS1vKm8pLHI9cypNYXRoLnNpbihuKSxhPU1hdGgudGFuKE1hdGguUEkvNC1uLzIpL01hdGgucG93KCgxLXIpLygxK3IpLHMvMiksbj0tZSpNYXRoLmxvZyhNYXRoLm1heChhLDFlLTEwKSk7cmV0dXJuIG5ldyBrKHQubG5nKmkqZSxuKX0sdW5wcm9qZWN0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxlPTE4MC9NYXRoLlBJLG49dGhpcy5SLG89dGhpcy5SX01JTk9SL24scz1NYXRoLnNxcnQoMS1vKm8pLHI9TWF0aC5leHAoLXQueS9uKSxhPU1hdGguUEkvMi0yKk1hdGguYXRhbihyKSxoPTAsdT0uMTtoPDE1JiYxZS03PE1hdGguYWJzKHUpO2grKylpPXMqTWF0aC5zaW4oYSksaT1NYXRoLnBvdygoMS1pKS8oMStpKSxzLzIpLGErPXU9TWF0aC5QSS8yLTIqTWF0aC5hdGFuKHIqaSktYTtyZXR1cm4gbmV3IEQoYSplLHQueCplL24pfX0sUGU9e0xvbkxhdDp4ZSxNZXJjYXRvcjp3ZSxTcGhlcmljYWxNZXJjYXRvcjpWfSxMZT1oKHt9LEYse2NvZGU6XCJFUFNHOjMzOTVcIixwcm9qZWN0aW9uOndlLHRyYW5zZm9ybWF0aW9uOkcodmU9LjUvKE1hdGguUEkqd2UuUiksLjUsLXZlLC41KX0pLGJlPWgoe30sRix7Y29kZTpcIkVQU0c6NDMyNlwiLHByb2plY3Rpb246eGUsdHJhbnNmb3JtYXRpb246RygxLzE4MCwxLC0xLzE4MCwuNSl9KSxUZT1oKHt9LEgse3Byb2plY3Rpb246eGUsdHJhbnNmb3JtYXRpb246RygxLDAsLTEsMCksc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KDIsdCl9LHpvb206ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4yfSxkaXN0YW5jZTpmdW5jdGlvbih0LGkpe3ZhciBlPWkubG5nLXQubG5nLG49aS5sYXQtdC5sYXQ7cmV0dXJuIE1hdGguc3FydChlKmUrbipuKX0saW5maW5pdGU6ITB9KTtILkVhcnRoPUYsSC5FUFNHMzM5NT1MZSxILkVQU0czODU3PVksSC5FUFNHOTAwOTEzPVgsSC5FUFNHNDMyNj1iZSxILlNpbXBsZT1UZTt2YXIgTWU9RS5leHRlbmQoe29wdGlvbnM6e3BhbmU6XCJvdmVybGF5UGFuZVwiLGF0dHJpYnV0aW9uOm51bGwsYnViYmxpbmdNb3VzZUV2ZW50czohMH0sYWRkVG86ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWRkTGF5ZXIodGhpcyksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVtb3ZlRnJvbSh0aGlzLl9tYXB8fHRoaXMuX21hcFRvQWRkKX0scmVtb3ZlRnJvbTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5yZW1vdmVMYXllcih0aGlzKSx0aGlzfSxnZXRQYW5lOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXAuZ2V0UGFuZSh0P3RoaXMub3B0aW9uc1t0XXx8dDp0aGlzLm9wdGlvbnMucGFuZSl9LGFkZEludGVyYWN0aXZlVGFyZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXAuX3RhcmdldHNbbSh0KV09dGhpc30scmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGRlbGV0ZSB0aGlzLl9tYXAuX3RhcmdldHNbbSh0KV0sdGhpc30sZ2V0QXR0cmlidXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0aW9ufSxfbGF5ZXJBZGQ6ZnVuY3Rpb24odCl7dmFyIGksZT10LnRhcmdldDtlLmhhc0xheWVyKHRoaXMpJiYodGhpcy5fbWFwPWUsdGhpcy5fem9vbUFuaW1hdGVkPWUuX3pvb21BbmltYXRlZCx0aGlzLmdldEV2ZW50cyYmKGk9dGhpcy5nZXRFdmVudHMoKSxlLm9uKGksdGhpcyksdGhpcy5vbmNlKFwicmVtb3ZlXCIsZnVuY3Rpb24oKXtlLm9mZihpLHRoaXMpfSx0aGlzKSksdGhpcy5vbkFkZChlKSx0aGlzLmdldEF0dHJpYnV0aW9uJiZlLmF0dHJpYnV0aW9uQ29udHJvbCYmZS5hdHRyaWJ1dGlvbkNvbnRyb2wuYWRkQXR0cmlidXRpb24odGhpcy5nZXRBdHRyaWJ1dGlvbigpKSx0aGlzLmZpcmUoXCJhZGRcIiksZS5maXJlKFwibGF5ZXJhZGRcIix7bGF5ZXI6dGhpc30pKX19KTtLaS5pbmNsdWRlKHthZGRMYXllcjpmdW5jdGlvbih0KXtpZighdC5fbGF5ZXJBZGQpdGhyb3cgbmV3IEVycm9yKFwiVGhlIHByb3ZpZGVkIG9iamVjdCBpcyBub3QgYSBMYXllci5cIik7dmFyIGk9bSh0KTtyZXR1cm4gdGhpcy5fbGF5ZXJzW2ldfHwoKHRoaXMuX2xheWVyc1tpXT10KS5fbWFwVG9BZGQ9dGhpcyx0LmJlZm9yZUFkZCYmdC5iZWZvcmVBZGQodGhpcyksdGhpcy53aGVuUmVhZHkodC5fbGF5ZXJBZGQsdCkpLHRoaXN9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3ZhciBpPW0odCk7cmV0dXJuIHRoaXMuX2xheWVyc1tpXSYmKHRoaXMuX2xvYWRlZCYmdC5vblJlbW92ZS
24510h0aGlzKSx0LmdldEF0dHJpYnV0aW9uJiZ0aGlzLmF0dHJpYnV0aW9uQ29udHJvbCYmdGhpcy5hdHRyaWJ1dGlvbkNvbnRyb2wucmVtb3ZlQXR0cmlidXRpb24odC5nZXRBdHRyaWJ1dGlvbigpKSxkZWxldGUgdGhpcy5fbGF5ZXJzW2ldLHRoaXMuX2xvYWRlZCYmKHRoaXMuZmlyZShcImxheWVycmVtb3ZlXCIse2xheWVyOnR9KSx0LmZpcmUoXCJyZW1vdmVcIikpLHQuX21hcD10Ll9tYXBUb0FkZD1udWxsKSx0aGlzfSxoYXNMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4hIXQmJm0odClpbiB0aGlzLl9sYXllcnN9LGVhY2hMYXllcjpmdW5jdGlvbih0LGkpe2Zvcih2YXIgZSBpbiB0aGlzLl9sYXllcnMpdC5jYWxsKGksdGhpcy5fbGF5ZXJzW2VdKTtyZXR1cm4gdGhpc30sX2FkZExheWVyczpmdW5jdGlvbih0KXtmb3IodmFyIGk9MCxlPSh0PXQ/Zyh0KT90Olt0XTpbXSkubGVuZ3RoO2k8ZTtpKyspdGhpcy5hZGRMYXllcih0W2ldKX0sX2FkZFpvb21MaW1pdDpmdW5jdGlvbih0KXshaXNOYU4odC5vcHRpb25zLm1heFpvb20pJiZpc05hTih0Lm9wdGlvbnMubWluWm9vbSl8fCh0aGlzLl96b29tQm91bmRMYXllcnNbbSh0KV09dCx0aGlzLl91cGRhdGVab29tTGV2ZWxzKCkpfSxfcmVtb3ZlWm9vbUxpbWl0OmZ1bmN0aW9uKHQpe3ZhciBpPW0odCk7dGhpcy5fem9vbUJvdW5kTGF5ZXJzW2ldJiYoZGVsZXRlIHRoaXMuX3pvb21Cb3VuZExheWVyc1tpXSx0aGlzLl91cGRhdGVab29tTGV2ZWxzKCkpfSxfdXBkYXRlWm9vbUxldmVsczpmdW5jdGlvbigpe3ZhciB0PTEvMCxpPS0xLzAsZT10aGlzLl9nZXRab29tU3BhbigpO2Zvcih2YXIgbiBpbiB0aGlzLl96b29tQm91bmRMYXllcnMpdmFyIG89dGhpcy5fem9vbUJvdW5kTGF5ZXJzW25dLm9wdGlvbnMsdD12b2lkIDA9PT1vLm1pblpvb20/dDpNYXRoLm1pbih0LG8ubWluWm9vbSksaT12b2lkIDA9PT1vLm1heFpvb20/aTpNYXRoLm1heChpLG8ubWF4Wm9vbSk7dGhpcy5fbGF5ZXJzTWF4Wm9vbT1pPT09LTEvMD92b2lkIDA6aSx0aGlzLl9sYXllcnNNaW5ab29tPXQ9PT0xLzA/dm9pZCAwOnQsZSE9PXRoaXMuX2dldFpvb21TcGFuKCkmJnRoaXMuZmlyZShcInpvb21sZXZlbHNjaGFuZ2VcIiksdm9pZCAwPT09dGhpcy5vcHRpb25zLm1heFpvb20mJnRoaXMuX2xheWVyc01heFpvb20mJnRoaXMuZ2V0Wm9vbSgpPnRoaXMuX2xheWVyc01heFpvb20mJnRoaXMuc2V0Wm9vbSh0aGlzLl9sYXllcnNNYXhab29tKSx2b2lkIDA9PT10aGlzLm9wdGlvbnMubWluWm9vbSYmdGhpcy5fbGF5ZXJzTWluWm9vbSYmdGhpcy5nZXRab29tKCk8dGhpcy5fbGF5ZXJzTWluWm9vbSYmdGhpcy5zZXRab29tKHRoaXMuX2xheWVyc01pblpvb20pfX0pO3ZhciB6ZT1NZS5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxpKXt2YXIgZSxuO2lmKGModGhpcyxpKSx0aGlzLl9sYXllcnM9e30sdClmb3IoZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl0aGlzLmFkZExheWVyKHRbZV0pfSxhZGRMYXllcjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmdldExheWVySWQodCk7cmV0dXJuIHRoaXMuX2xheWVyc1tpXT10LHRoaXMuX21hcCYmdGhpcy5fbWFwLmFkZExheWVyKHQpLHRoaXN9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3ZhciBpPXQgaW4gdGhpcy5fbGF5ZXJzP3Q6dGhpcy5nZXRMYXllcklkKHQpO3JldHVybiB0aGlzLl9tYXAmJnRoaXMuX2xheWVyc1tpXSYmdGhpcy5fbWFwLnJlbW92ZUxheWVyKHRoaXMuX2xheWVyc1tpXSksZGVsZXRlIHRoaXMuX2xheWVyc1tpXSx0aGlzfSxoYXNMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4hIXQmJihcIm51bWJlclwiPT10eXBlb2YgdD90OnRoaXMuZ2V0TGF5ZXJJZCh0KSlpbiB0aGlzLl9sYXllcnN9LGNsZWFyTGF5ZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaExheWVyKHRoaXMucmVtb3ZlTGF5ZXIsdGhpcyl9LGludm9rZTpmdW5jdGlvbih0KXt2YXIgaSxlLG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2ZvcihpIGluIHRoaXMuX2xheWVycykoZT10aGlzLl9sYXllcnNbaV0pW3RdJiZlW3RdLmFwcGx5KGUsbik7cmV0dXJuIHRoaXN9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuZWFjaExheWVyKHQuYWRkTGF5ZXIsdCl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuZWFjaExheWVyKHQucmVtb3ZlTGF5ZXIsdCl9LGVhY2hMYXllcjpmdW5jdGlvbih0LGkpe2Zvcih2YXIgZSBpbiB0aGlzLl9sYXllcnMpdC5jYWxsKGksdGhpcy5fbGF5ZXJzW2VdKTtyZXR1cm4gdGhpc30sZ2V0TGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xheWVyc1t0XX0sZ2V0TGF5ZXJzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaExheWVyKHQucHVzaCx0KSx0fSxzZXRaSW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW52b2tlKFwic2V0WkluZGV4XCIsdCl9LGdldExheWVySWQ6bX0
24510pLENlPXplLmV4dGVuZCh7YWRkTGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzTGF5ZXIodCk/dGhpczoodC5hZGRFdmVudFBhcmVudCh0aGlzKSx6ZS5wcm90b3R5cGUuYWRkTGF5ZXIuY2FsbCh0aGlzLHQpLHRoaXMuZmlyZShcImxheWVyYWRkXCIse2xheWVyOnR9KSl9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc0xheWVyKHQpPyh0IGluIHRoaXMuX2xheWVycyYmKHQ9dGhpcy5fbGF5ZXJzW3RdKSx0LnJlbW92ZUV2ZW50UGFyZW50KHRoaXMpLHplLnByb3RvdHlwZS5yZW1vdmVMYXllci5jYWxsKHRoaXMsdCksdGhpcy5maXJlKFwibGF5ZXJyZW1vdmVcIix7bGF5ZXI6dH0pKTp0aGlzfSxzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnZva2UoXCJzZXRTdHlsZVwiLHQpfSxicmluZ1RvRnJvbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnZva2UoXCJicmluZ1RvRnJvbnRcIil9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW52b2tlKFwiYnJpbmdUb0JhY2tcIil9LGdldEJvdW5kczpmdW5jdGlvbigpe3ZhciB0PW5ldyBSO2Zvcih2YXIgaSBpbiB0aGlzLl9sYXllcnMpe3ZhciBlPXRoaXMuX2xheWVyc1tpXTt0LmV4dGVuZChlLmdldEJvdW5kcz9lLmdldEJvdW5kcygpOmUuZ2V0TGF0TG5nKCkpfXJldHVybiB0fX0pLFNlPVMuZXh0ZW5kKHtvcHRpb25zOntwb3B1cEFuY2hvcjpbMCwwXSx0b29sdGlwQW5jaG9yOlswLDBdfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2ModGhpcyx0KX0sY3JlYXRlSWNvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY3JlYXRlSWNvbihcImljb25cIix0KX0sY3JlYXRlU2hhZG93OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jcmVhdGVJY29uKFwic2hhZG93XCIsdCl9LF9jcmVhdGVJY29uOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5fZ2V0SWNvblVybCh0KTtpZighZSl7aWYoXCJpY29uXCI9PT10KXRocm93IG5ldyBFcnJvcihcImljb25Vcmwgbm90IHNldCBpbiBJY29uIG9wdGlvbnMgKHNlZSB0aGUgZG9jcykuXCIpO3JldHVybiBudWxsfXZhciBuPXRoaXMuX2NyZWF0ZUltZyhlLGkmJlwiSU1HXCI9PT1pLnRhZ05hbWU/aTpudWxsKTtyZXR1cm4gdGhpcy5fc2V0SWNvblN0eWxlcyhuLHQpLG59LF9zZXRJY29uU3R5bGVzOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5vcHRpb25zLG49ZVtpK1wiU2l6ZVwiXTtcIm51bWJlclwiPT10eXBlb2YgbiYmKG49W24sbl0pO3ZhciBvPUEobikscz1BKFwic2hhZG93XCI9PT1pJiZlLnNoYWRvd0FuY2hvcnx8ZS5pY29uQW5jaG9yfHxvJiZvLmRpdmlkZUJ5KDIsITApKTt0LmNsYXNzTmFtZT1cImxlYWZsZXQtbWFya2VyLVwiK2krXCIgXCIrKGUuY2xhc3NOYW1lfHxcIlwiKSxzJiYodC5zdHlsZS5tYXJnaW5MZWZ0PS1zLngrXCJweFwiLHQuc3R5bGUubWFyZ2luVG9wPS1zLnkrXCJweFwiKSxvJiYodC5zdHlsZS53aWR0aD1vLngrXCJweFwiLHQuc3R5bGUuaGVpZ2h0PW8ueStcInB4XCIpfSxfY3JlYXRlSW1nOmZ1bmN0aW9uKHQsaSl7cmV0dXJuKGk9aXx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKSkuc3JjPXQsaX0sX2dldEljb25Vcmw6ZnVuY3Rpb24odCl7cmV0dXJuIHp0JiZ0aGlzLm9wdGlvbnNbdCtcIlJldGluYVVybFwiXXx8dGhpcy5vcHRpb25zW3QrXCJVcmxcIl19fSk7dmFyIFplPVNlLmV4dGVuZCh7b3B0aW9uczp7aWNvblVybDpcIm1hcmtlci1pY29uLnBuZ1wiLGljb25SZXRpbmFVcmw6XCJtYXJrZXItaWNvbi0yeC5wbmdcIixzaGFkb3dVcmw6XCJtYXJrZXItc2hhZG93LnBuZ1wiLGljb25TaXplOlsyNSw0MV0saWNvbkFuY2hvcjpbMTIsNDFdLHBvcHVwQW5jaG9yOlsxLC0zNF0sdG9vbHRpcEFuY2hvcjpbMTYsLTI4XSxzaGFkb3dTaXplOls0MSw0MV19LF9nZXRJY29uVXJsOmZ1bmN0aW9uKHQpe3JldHVybiBaZS5pbWFnZVBhdGh8fChaZS5pbWFnZVBhdGg9dGhpcy5fZGV0ZWN0SWNvblBhdGgoKSksKHRoaXMub3B0aW9ucy5pbWFnZVBhdGh8fFplLmltYWdlUGF0aCkrU2UucHJvdG90eXBlLl9nZXRJY29uVXJsLmNhbGwodGhpcyx0KX0sX2RldGVjdEljb25QYXRoOmZ1bmN0aW9uKCl7dmFyIHQ9c2koXCJkaXZcIixcImxlYWZsZXQtZGVmYXVsdC1pY29uLXBhdGhcIixkb2N1bWVudC5ib2R5KSxpPW9pKHQsXCJiYWNrZ3JvdW5kLWltYWdlXCIpfHxvaSh0LFwiYmFja2dyb3VuZEltYWdlXCIpO3JldHVybiBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpLGk9bnVsbD09PWl8fDAhPT1pLmluZGV4T2YoXCJ1cmxcIik/XCJcIjppLnJlcGxhY2UoL151cmxcXChbXCInXT8vLFwiXCIpLnJlcGxhY2UoL21hcmtlci1pY29uXFwucG5nW1wiJ10/XFwpJC8sXCJcIil9fSksRWU9aWUuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcmtlcj10fSxhZGRIb29rczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcmtlci5faWNvbjt0aGlzLl9kcmFnZ2FibGV8fCh0aGlzLl9kcmFnZ2FibGU9bmV3IGFlKHQsdCwhMCkpLHRoaXMuX2RyYWdnYWJsZS5vbih7ZHJhZ3N0YXJ0OnRoaXMuX29uRHJhZ1N0YXJ0LHByZWRyYWc6dGhpcy5fb25QcmVEcmFnLGRyYWc6dGhpcy5fb25EcmFnLGRyYWdlbmQ6dGhpcy5fb25EcmFnRW5kfSx0aGlzKS5lbmFibGUoKSxjaSh0LFwibGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlXCIpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX2RyYWdnYWJsZS5vZmYoe2RyYWdzdGFydDp0aGlzLl9vbkRyYWdTdGFydCxwcmVkcmFnOnRoaXMuX29uUHJlRHJhZyxkcmFnOnRoaXMuX29uRHJhZyxkcmFnZW5kOnRoaXMuX29uRHJhZ0VuZH0sdGhpcykuZGlzYWJsZSgpLHRoaXMuX21hcmtlci5faWNvbiYmX2kodGhpcy5fbWFya2VyLl9pY29uLFwibGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlXCIpfSxtb3ZlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnZ2FibGUmJnRoaXMuX2RyYWdnYWJsZS5fbW92ZWR9LF9hZGp1c3RQYW46ZnVuY3Rpb24odCl7dmFyIGksZT10aGlzLl9tYXJrZXIsbj1lLl9tYXAsbz10aGlzLl9tYXJrZXIub3B0aW9ucy5hdXRvUGFuU3BlZWQscz10aGlzLl9tYXJrZXIub3B0aW9ucy5hdXRvUGFuUGFkZGluZyxyPXlpKGUuX2ljb24pLGE9bi5nZXRQaXhlbEJvdW5kcygpLGg9bi5nZXRQaXhlbE9yaWdpbigpLHU9TyhhLm1pbi5fc3VidHJhY3QoaCkuYWRkKHMpLGEubWF4Ll9zdWJ0cmFjdChoKS5zdWJ0cmFjdChzKSk7dS5jb250YWlucyhyKXx8KGk9QSgoTWF0aC5tYXgodS5tYXgueCxyLngpLXUubWF4LngpLyhhLm1heC54LXUubWF4LngpLShNYXRoLm1pbih1Lm1pbi54LHIueCktdS5taW4ueCkvKGEubWluLngtdS5taW4ueCksKE1hdGgubWF4KHUubWF4Lnksci55KS11Lm1heC55KS8oYS5tYXgueS11Lm1heC55KS0oTWF0aC5taW4odS5taW4ueSxyLnkpLXUubWluLnkpLyhhLm1pbi55LXUubWluLnkpKS5tdWx0aXBseUJ5KG8pLG4ucGFuQnkoaSx7YW5pbWF0ZTohMX0pLHRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLl9hZGQoaSksdGhpcy5fZHJhZ2dhYmxlLl9zdGFydFBvcy5fYWRkKGkpLHZpKGUuX2ljb24sdGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MpLHRoaXMuX29uRHJhZyh0KSx0aGlzLl9wYW5SZXF1ZXN0PU0odGhpcy5fYWRqdXN0UGFuLmJpbmQodGhpcyx0KSkpfSxfb25EcmFnU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9vbGRMYXRMbmc9dGhpcy5fbWFya2VyLmdldExhdExuZygpLHRoaXMuX21hcmtlci5jbG9zZVBvcHVwJiZ0aGlzLl9tYXJrZXIuY2xvc2VQb3B1cCgpLHRoaXMuX21hcmtlci5maXJlKFwibW92ZXN0YXJ0XCIpLmZpcmUoXCJkcmFnc3RhcnRcIil9LF9vblByZURyYWc6ZnVuY3Rpb24odCl7dGhpcy5fbWFya2VyLm9wdGlvbnMuYXV0b1BhbiYmKHoodGhpcy5fcGFuUmVxdWVzdCksdGhpcy5fcGFuUmVxdWVzdD1NKHRoaXMuX2FkanVzdFBhbi5iaW5kKHRoaXMsdCkpKX0sX29uRHJhZzpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXJrZXIsZT1pLl9zaGFkb3csbj15aShpLl9pY29uKSxvPWkuX21hcC5sYXllclBvaW50VG9MYXRMbmcobik7ZSYmdmkoZSxuKSxpLl9sYXRsbmc9byx0LmxhdGxuZz1vLHQub2xkTGF0TG5nPXRoaXMuX29sZExhdExuZyxpLmZpcmUoXCJtb3ZlXCIsdCkuZmlyZShcImRyYWdcIix0KX0sX29uRHJhZ0VuZDpmdW5jdGlvbih0KXt6KHRoaXMuX3BhblJlcXVlc3QpLGRlbGV0ZSB0aGlzLl9vbGRMYXRMbmcsdGhpcy5fbWFya2VyLmZpcmUoXCJtb3ZlZW5kXCIpLmZpcmUoXCJkcmFnZW5kXCIsdCl9fSksa2U9TWUuZXh0ZW5kKHtvcHRpb25zOntpY29uOm5ldyBaZSxpbnRlcmFjdGl2ZTohMCxrZXl
24510ib2FyZDohMCx0aXRsZTpcIlwiLGFsdDpcIlwiLHpJbmRleE9mZnNldDowLG9wYWNpdHk6MSxyaXNlT25Ib3ZlcjohMSxyaXNlT2Zmc2V0OjI1MCxwYW5lOlwibWFya2VyUGFuZVwiLHNoYWRvd1BhbmU6XCJzaGFkb3dQYW5lXCIsYnViYmxpbmdNb3VzZUV2ZW50czohMSxkcmFnZ2FibGU6ITEsYXV0b1BhbjohMSxhdXRvUGFuUGFkZGluZzpbNTAsNTBdLGF1dG9QYW5TcGVlZDoxMH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGkpe2ModGhpcyxpKSx0aGlzLl9sYXRsbmc9aih0KX0sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5fem9vbUFuaW1hdGVkPXRoaXMuX3pvb21BbmltYXRlZCYmdC5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb24sdGhpcy5fem9vbUFuaW1hdGVkJiZ0Lm9uKFwiem9vbWFuaW1cIix0aGlzLl9hbmltYXRlWm9vbSx0aGlzKSx0aGlzLl9pbml0SWNvbigpLHRoaXMudXBkYXRlKCl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuZHJhZ2dpbmcmJnRoaXMuZHJhZ2dpbmcuZW5hYmxlZCgpJiYodGhpcy5vcHRpb25zLmRyYWdnYWJsZT0hMCx0aGlzLmRyYWdnaW5nLnJlbW92ZUhvb2tzKCkpLGRlbGV0ZSB0aGlzLmRyYWdnaW5nLHRoaXMuX3pvb21BbmltYXRlZCYmdC5vZmYoXCJ6b29tYW5pbVwiLHRoaXMuX2FuaW1hdGVab29tLHRoaXMpLHRoaXMuX3JlbW92ZUljb24oKSx0aGlzLl9yZW1vdmVTaGFkb3coKX0sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7cmV0dXJue3pvb206dGhpcy51cGRhdGUsdmlld3Jlc2V0OnRoaXMudXBkYXRlfX0sZ2V0TGF0TG5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhdGxuZ30sc2V0TGF0TG5nOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX2xhdGxuZztyZXR1cm4gdGhpcy5fbGF0bG5nPWoodCksdGhpcy51cGRhdGUoKSx0aGlzLmZpcmUoXCJtb3ZlXCIse29sZExhdExuZzppLGxhdGxuZzp0aGlzLl9sYXRsbmd9KX0sc2V0WkluZGV4T2Zmc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4T2Zmc2V0PXQsdGhpcy51cGRhdGUoKX0sZ2V0SWNvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuaWNvbn0sc2V0SWNvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb249dCx0aGlzLl9tYXAmJih0aGlzLl9pbml0SWNvbigpLHRoaXMudXBkYXRlKCkpLHRoaXMuX3BvcHVwJiZ0aGlzLmJpbmRQb3B1cCh0aGlzLl9wb3B1cCx0aGlzLl9wb3B1cC5vcHRpb25zKSx0aGlzfSxnZXRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ljb259LHVwZGF0ZTpmdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLl9pY29uJiZ0aGlzLl9tYXAmJih0PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKS5yb3VuZCgpLHRoaXMuX3NldFBvcyh0KSksdGhpc30sX2luaXRJY29uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLGk9XCJsZWFmbGV0LXpvb20tXCIrKHRoaXMuX3pvb21BbmltYXRlZD9cImFuaW1hdGVkXCI6XCJoaWRlXCIpLGU9dC5pY29uLmNyZWF0ZUljb24odGhpcy5faWNvbiksbj0hMTtlIT09dGhpcy5faWNvbiYmKHRoaXMuX2ljb24mJnRoaXMuX3JlbW92ZUljb24oKSxuPSEwLHQudGl0bGUmJihlLnRpdGxlPXQudGl0bGUpLFwiSU1HXCI9PT1lLnRhZ05hbWUmJihlLmFsdD10LmFsdHx8XCJcIikpLGNpKGUsaSksdC5rZXlib2FyZCYmKGUudGFiSW5kZXg9XCIwXCIpLHRoaXMuX2ljb249ZSx0LnJpc2VPbkhvdmVyJiZ0aGlzLm9uKHttb3VzZW92ZXI6dGhpcy5fYnJpbmdUb0Zyb250LG1vdXNlb3V0OnRoaXMuX3Jlc2V0WkluZGV4fSk7dmFyIG89dC5pY29uLmNyZWF0ZVNoYWRvdyh0aGlzLl9zaGFkb3cpLHM9ITE7byE9PXRoaXMuX3NoYWRvdyYmKHRoaXMuX3JlbW92ZVNoYWRvdygpLHM9ITApLG8mJihjaShvLGkpLG8uYWx0PVwiXCIpLHRoaXMuX3NoYWRvdz1vLHQub3BhY2l0eTwxJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCksbiYmdGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5faWNvbiksdGhpcy5faW5pdEludGVyYWN0aW9uKCksbyYmcyYmdGhpcy5nZXRQYW5lKHQuc2hhZG93UGFuZSkuYXBwZW5kQ2hpbGQodGhpcy5fc2hhZG93KX0sX3JlbW92ZUljb246ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMucmlzZU9uSG92ZXImJnRoaXMub2ZmKHttb3VzZW92ZXI6dGhpcy5fYnJpbmdUb0Zyb250LG1vdXNlb3V0OnRoaXMuX3Jlc2V0WkluZGV4fSkscmkodGhpcy5faWNvbiksdGhpcy5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9pY29uKSx0aGlzLl9pY29uPW51bGx9LF9yZW1vdmVTaGFkb3c6ZnVuY3Rpb24oKXt0aGlzLl9zaGFkb3cmJnJpKHRoaXMuX3NoYWRvdyksdGhpcy5fc2hhZG93PW51bGx9LF9zZXRQb3M6ZnVuY3Rpb24odCl7dGhpcy5faWNvbiYmdmkodGhpcy5faWNvbix0KSx0aGlzLl9zaGFkb3cmJnZpKHRoaXMuX3NoYWRvdyx0KSx0aGlzLl96SW5kZXg9dC55K3RoaXMub3B0aW9ucy56SW5kZXhPZmZzZXQsdGhpcy5fcmVzZXRaSW5kZXgoKX0sX3VwZGF0ZVpJbmRleDpmdW5jdGlvbih0KXt0aGlzLl9pY29uJiYodGhpcy5faWNvbi5zdHlsZS56SW5kZXg9dGhpcy5fekluZGV4K3QpfSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLHQuem9vbSx0LmNlbnRlcikucm91bmQoKTt0aGlzLl9zZXRQb3MoaSl9LF9pbml0SW50ZXJhY3Rpb246ZnVuY3Rpb24oKXt2YXIgdDt0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUmJihjaSh0aGlzLl9pY29uLFwibGVhZmxldC1pbnRlcmFjdGl2ZVwiKSx0aGlzLmFkZEludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ljb24pLEVlJiYodD10aGlzLm9wdGlvbnMuZHJhZ2dhYmxlLHRoaXMuZHJhZ2dpbmcmJih0PXRoaXMuZHJhZ2dpbmcuZW5hYmxlZCgpLHRoaXMuZHJhZ2dpbmcuZGlzYWJsZSgpKSx0aGlzLmRyYWdnaW5nPW5ldyBFZSh0aGlzKSx0JiZ0aGlzLmRyYWdnaW5nLmVuYWJsZSgpKSl9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fbWFwJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCksdGhpc30sX3VwZGF0ZU9wYWNpdHk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMub3BhY2l0eTt0aGlzLl9pY29uJiZtaSh0aGlzLl9pY29uLHQpLHRoaXMuX3NoYWRvdyYmbWkodGhpcy5fc2hhZG93LHQpfSxfYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlWkluZGV4KHRoaXMub3B0aW9ucy5yaXNlT2Zmc2V0KX0sX3Jlc2V0WkluZGV4OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlWkluZGV4KDApfSxfZ2V0UG9wdXBBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy5wb3B1cEFuY2hvcn0sX2dldFRvb2x0aXBBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy50b29sdGlwQW5jaG9yfX0pO3ZhciBCZT1NZS5leHRlbmQoe29wdGlvbnM6e3N0cm9rZTohMCxjb2xvcjpcIiMzMzg4ZmZcIix3ZWlnaHQ6MyxvcGFjaXR5OjEsbGluZUNhcDpcInJvdW5kXCIsbGluZUpvaW46XCJyb3VuZFwiLGRhc2hBcnJheTpudWxsLGRhc2hPZmZzZXQ6bnVsbCxmaWxsOiExLGZpbGxDb2xvcjpudWxsLGZpbGxPcGFjaXR5Oi4yLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGludGVyYWN0aXZlOiEwLGJ1YmJsaW5nTW91c2VFdmVudHM6ITB9LGJlZm9yZUFkZDpmdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlcj10LmdldFJlbmRlcmVyKHRoaXMpfSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLl9pbml0UGF0aCh0aGlzKSx0aGlzLl9yZXNldCgpLHRoaXMuX3JlbmRlcmVyLl9hZGRQYXRoKHRoaXMpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLl9yZW1vdmVQYXRoKHRoaXMpfSxyZWRyYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZ0aGlzLl9yZW5kZXJlci5fdXBkYXRlUGF0aC
24510h0aGlzKSx0aGlzfSxzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0aGlzLHQpLHRoaXMuX3JlbmRlcmVyJiYodGhpcy5fcmVuZGVyZXIuX3VwZGF0ZVN0eWxlKHRoaXMpLHRoaXMub3B0aW9ucy5zdHJva2UmJnQmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LFwid2VpZ2h0XCIpJiZ0aGlzLl91cGRhdGVCb3VuZHMoKSksdGhpc30sYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyJiZ0aGlzLl9yZW5kZXJlci5fYnJpbmdUb0Zyb250KHRoaXMpLHRoaXN9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyJiZ0aGlzLl9yZW5kZXJlci5fYnJpbmdUb0JhY2sodGhpcyksdGhpc30sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXRofSxfcmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9wcm9qZWN0KCksdGhpcy5fdXBkYXRlKCl9LF9jbGlja1RvbGVyYW5jZTpmdW5jdGlvbigpe3JldHVybih0aGlzLm9wdGlvbnMuc3Ryb2tlP3RoaXMub3B0aW9ucy53ZWlnaHQvMjowKSt0aGlzLl9yZW5kZXJlci5vcHRpb25zLnRvbGVyYW5jZX19KSxBZT1CZS5leHRlbmQoe29wdGlvbnM6e2ZpbGw6ITAscmFkaXVzOjEwfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSl7Yyh0aGlzLGkpLHRoaXMuX2xhdGxuZz1qKHQpLHRoaXMuX3JhZGl1cz10aGlzLm9wdGlvbnMucmFkaXVzfSxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbGF0bG5nO3JldHVybiB0aGlzLl9sYXRsbmc9aih0KSx0aGlzLnJlZHJhdygpLHRoaXMuZmlyZShcIm1vdmVcIix7b2xkTGF0TG5nOmksbGF0bG5nOnRoaXMuX2xhdGxuZ30pfSxnZXRMYXRMbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGF0bG5nfSxzZXRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5yYWRpdXM9dGhpcy5fcmFkaXVzPXQsdGhpcy5yZWRyYXcoKX0sZ2V0UmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGl1c30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7dmFyIGk9dCYmdC5yYWRpdXN8fHRoaXMuX3JhZGl1cztyZXR1cm4gQmUucHJvdG90eXBlLnNldFN0eWxlLmNhbGwodGhpcyx0KSx0aGlzLnNldFJhZGl1cyhpKSx0aGlzfSxfcHJvamVjdDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKSx0aGlzLl91cGRhdGVCb3VuZHMoKX0sX3VwZGF0ZUJvdW5kczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JhZGl1cyxpPXRoaXMuX3JhZGl1c1l8fHQsZT10aGlzLl9jbGlja1RvbGVyYW5jZSgpLG49W3QrZSxpK2VdO3RoaXMuX3B4Qm91bmRzPW5ldyBJKHRoaXMuX3BvaW50LnN1YnRyYWN0KG4pLHRoaXMuX3BvaW50LmFkZChuKSl9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJnRoaXMuX3VwZGF0ZVBhdGgoKX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5fdXBkYXRlQ2lyY2xlKHRoaXMpfSxfZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaXVzJiYhdGhpcy5fcmVuZGVyZXIuX2JvdW5kcy5pbnRlcnNlY3RzKHRoaXMuX3B4Qm91bmRzKX0sX2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLl9wb2ludCk8PXRoaXMuX3JhZGl1cyt0aGlzLl9jbGlja1RvbGVyYW5jZSgpfX0pO3ZhciBJZT1BZS5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxpLGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBpJiYoaT1oKHt9LGUse3JhZGl1czppfSkpLGModGhpcyxpKSx0aGlzLl9sYXRsbmc9aih0KSxpc05hTih0aGlzLm9wdGlvbnMucmFkaXVzKSl0aHJvdyBuZXcgRXJyb3IoXCJDaXJjbGUgcmFkaXVzIGNhbm5vdCBiZSBOYU5cIik7dGhpcy5fbVJhZGl1cz10aGlzLm9wdGlvbnMucmFkaXVzfSxzZXRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21SYWRpdXM9dCx0aGlzLnJlZHJhdygpfSxnZXRSYWRpdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbVJhZGl1c30sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7dmFyIHQ9W3RoaXMuX3JhZGl1cyx0aGlzLl9yYWRpdXNZfHx0aGlzLl9yYWRpdXNdO3JldHVybiBuZXcgUih0aGlzLl9tYXAubGF5ZXJQb2ludFRvTGF0TG5nKHRoaXMuX3BvaW50LnN1YnRyYWN0KHQpKSx0aGlzLl9tYXAubGF5ZXJQb2ludFRvTGF0TG5nKHRoaXMuX3BvaW50LmFkZCh0KSkpfSxzZXRTdHlsZTpCZS5wcm90b3R5cGUuc2V0U3R5bGUsX3Byb2plY3Q6ZnVuY3Rpb24oKXt2YXIgdCxpLGUsbixvLHMscixhLGg9dGhpcy5fbGF0bG5nLmxuZyx1PXRoaXMuX2xhdGxuZy5sYXQsbD10aGlzLl9tYXAsYz1sLm9wdGlvbnMuY3JzO2MuZGlzdGFuY2U9PT1GLmRpc3RhbmNlPyh0PU1hdGguUEkvMTgwLGk9dGhpcy5fbVJhZGl1cy9GLlIvdCxlPWwucHJvamVjdChbdStpLGhdKSxuPWwucHJvamVjdChbdS1pLGhdKSxvPWUuYWRkKG4pLmRpdmlkZUJ5KDIpLHM9bC51bnByb2plY3QobykubGF0LHI9TWF0aC5hY29zKChNYXRoLmNvcyhpKnQpLU1hdGguc2luKHUqdCkqTWF0aC5zaW4ocyp0KSkvKE1hdGguY29zKHUqdCkqTWF0aC5jb3Mocyp0KSkpL3QsIWlzTmFOKHIpJiYwIT09cnx8KHI9aS9NYXRoLmNvcyhNYXRoLlBJLzE4MCp1KSksdGhpcy5fcG9pbnQ9by5zdWJ0cmFjdChsLmdldFBpeGVsT3JpZ2luKCkpLHRoaXMuX3JhZGl1cz1pc05hTihyKT8wOm8ueC1sLnByb2plY3QoW3MsaC1yXSkueCx0aGlzLl9yYWRpdXNZPW8ueS1lLnkpOihhPWMudW5wcm9qZWN0KGMucHJvamVjdCh0aGlzLl9sYXRsbmcpLnN1YnRyYWN0KFt0aGlzLl9tUmFkaXVzLDBdKSksdGhpcy5fcG9pbnQ9bC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKSx0aGlzLl9yYWRpdXM9dGhpcy5fcG9pbnQueC1sLmxhdExuZ1RvTGF5ZXJQb2ludChhKS54KSx0aGlzLl91cGRhdGVCb3VuZHMoKX19KTt2YXIgT2U9QmUuZXh0ZW5kKHtvcHRpb25zOntzbW9vdGhGYWN0b3I6MSxub0NsaXA6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpKXtjKHRoaXMsaSksdGhpcy5fc2V0TGF0TG5ncyh0KX0sZ2V0TGF0TG5nczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmdzfSxzZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zZXRMYXRMbmdzKHQpLHRoaXMucmVkcmF3KCl9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fbGF0bG5ncy5sZW5ndGh9LGNsb3Nlc3RMYXllclBvaW50OmZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxlLG49MS8wLG89bnVsbCxzPWRlLHI9MCxhPXRoaXMuX3BhcnRzLmxlbmd0aDtyPGE7cisrKWZvcih2YXIgaD10aGlzLl9wYXJ0c1tyXSx1PTEsbD1oLmxlbmd0aDt1PGw7dSsrKXt2YXIgYz1zKHQsaT1oW3UtMV0sZT1oW3VdLCEwKTtjPG4mJihuPWMsbz1zKHQsaSxlKSl9cmV0dXJuIG8mJihvLmRpc3RhbmNlPU1hdGguc3FydChuKSksb30sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX21hcCl0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IGFkZCBsYXllciB0byBtYXAgYmVmb3JlIHVzaW5nIGdldENlbnRlcigpXCIpO3ZhciB0LGksZSxuLG8scyxyLGE9dGhpcy5fcmluZ3NbMF0saD1hLmxlbmd0aDtpZighaClyZXR1cm4gbnVsbDtmb3IoaT10PTA7dDxoLTE7dCsrKWkrPWFbdF0uZGlzdGFuY2VUbyhhW3QrMV0pLzI7aWYoMD09PWkpcmV0dXJuIHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcoYVswXSk7Zm9yKG49dD0wO3Q8aC0xO3QrKylpZihvPWFbdF0scz1hW3QrMV0saTwobis9ZT1vLmRpc3RhbmNlVG8ocykpKXJldHVybi
24510ByPShuLWkpL2UsdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhbcy54LXIqKHMueC1vLngpLHMueS1yKihzLnktby55KV0pfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYm91bmRzfSxhZGRMYXRMbmc6ZnVuY3Rpb24odCxpKXtyZXR1cm4gaT1pfHx0aGlzLl9kZWZhdWx0U2hhcGUoKSx0PWoodCksaS5wdXNoKHQpLHRoaXMuX2JvdW5kcy5leHRlbmQodCksdGhpcy5yZWRyYXcoKX0sX3NldExhdExuZ3M6ZnVuY3Rpb24odCl7dGhpcy5fYm91bmRzPW5ldyBSLHRoaXMuX2xhdGxuZ3M9dGhpcy5fY29udmVydExhdExuZ3ModCl9LF9kZWZhdWx0U2hhcGU6ZnVuY3Rpb24oKXtyZXR1cm4gcGUodGhpcy5fbGF0bG5ncyk/dGhpcy5fbGF0bG5nczp0aGlzLl9sYXRsbmdzWzBdfSxfY29udmVydExhdExuZ3M6ZnVuY3Rpb24odCl7Zm9yKHZhciBpPVtdLGU9cGUodCksbj0wLG89dC5sZW5ndGg7bjxvO24rKyllPyhpW25dPWoodFtuXSksdGhpcy5fYm91bmRzLmV4dGVuZChpW25dKSk6aVtuXT10aGlzLl9jb252ZXJ0TGF0TG5ncyh0W25dKTtyZXR1cm4gaX0sX3Byb2plY3Q6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgSTt0aGlzLl9yaW5ncz1bXSx0aGlzLl9wcm9qZWN0TGF0bG5ncyh0aGlzLl9sYXRsbmdzLHRoaXMuX3JpbmdzLHQpLHRoaXMuX2JvdW5kcy5pc1ZhbGlkKCkmJnQuaXNWYWxpZCgpJiYodGhpcy5fcmF3UHhCb3VuZHM9dCx0aGlzLl91cGRhdGVCb3VuZHMoKSl9LF91cGRhdGVCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jbGlja1RvbGVyYW5jZSgpLGk9bmV3IGsodCx0KTt0aGlzLl9weEJvdW5kcz1uZXcgSShbdGhpcy5fcmF3UHhCb3VuZHMubWluLnN1YnRyYWN0KGkpLHRoaXMuX3Jhd1B4Qm91bmRzLm1heC5hZGQoaSldKX0sX3Byb2plY3RMYXRsbmdzOmZ1bmN0aW9uKHQsaSxlKXt2YXIgbixvLHM9dFswXWluc3RhbmNlb2YgRCxyPXQubGVuZ3RoO2lmKHMpe2ZvcihvPVtdLG49MDtuPHI7bisrKW9bbl09dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0W25dKSxlLmV4dGVuZChvW25dKTtpLnB1c2gobyl9ZWxzZSBmb3Iobj0wO248cjtuKyspdGhpcy5fcHJvamVjdExhdGxuZ3ModFtuXSxpLGUpfSxfY2xpcFBvaW50czpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlbmRlcmVyLl9ib3VuZHM7aWYodGhpcy5fcGFydHM9W10sdGhpcy5fcHhCb3VuZHMmJnRoaXMuX3B4Qm91bmRzLmludGVyc2VjdHModCkpaWYodGhpcy5vcHRpb25zLm5vQ2xpcCl0aGlzLl9wYXJ0cz10aGlzLl9yaW5ncztlbHNlIGZvcih2YXIgaSxlLG4sbyxzPXRoaXMuX3BhcnRzLHI9MCxhPTAsaD10aGlzLl9yaW5ncy5sZW5ndGg7cjxoO3IrKylmb3IoaT0wLGU9KG89dGhpcy5fcmluZ3Nbcl0pLmxlbmd0aDtpPGUtMTtpKyspKG49bGUob1tpXSxvW2krMV0sdCxpLCEwKSkmJihzW2FdPXNbYV18fFtdLHNbYV0ucHVzaChuWzBdKSxuWzFdPT09b1tpKzFdJiZpIT09ZS0yfHwoc1thXS5wdXNoKG5bMV0pLGErKykpfSxfc2ltcGxpZnlQb2ludHM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fcGFydHMsaT10aGlzLm9wdGlvbnMuc21vb3RoRmFjdG9yLGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspdFtlXT1oZSh0W2VdLGkpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYodGhpcy5fY2xpcFBvaW50cygpLHRoaXMuX3NpbXBsaWZ5UG9pbnRzKCksdGhpcy5fdXBkYXRlUGF0aCgpKX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5fdXBkYXRlUG9seSh0aGlzKX0sX2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCxpKXt2YXIgZSxuLG8scyxyLGEsaD10aGlzLl9jbGlja1RvbGVyYW5jZSgpO2lmKCF0aGlzLl9weEJvdW5kc3x8IXRoaXMuX3B4Qm91bmRzLmNvbnRhaW5zKHQpKXJldHVybiExO2ZvcihlPTAscz10aGlzLl9wYXJ0cy5sZW5ndGg7ZTxzO2UrKylmb3Iobj0wLG89KHI9KGE9dGhpcy5fcGFydHNbZV0pLmxlbmd0aCktMTtuPHI7bz1uKyspaWYoKGl8fDAhPT1uKSYmdWUodCxhW29dLGFbbl0pPD1oKXJldHVybiEwO3JldHVybiExfX0pO09lLl9mbGF0PW1lO3ZhciBSZT1PZS5leHRlbmQoe29wdGlvbnM6e2ZpbGw6ITB9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fbGF0bG5ncy5sZW5ndGh8fCF0aGlzLl9sYXRsbmdzWzBdLmxlbmd0aH0sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX21hcCl0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IGFkZCBsYXllciB0byBtYXAgYmVmb3JlIHVzaW5nIGdldENlbnRlcigpXCIpO3ZhciB0LGksZSxuLG8scyxyLGEsaCx1PXRoaXMuX3JpbmdzWzBdLGw9dS5sZW5ndGg7aWYoIWwpcmV0dXJuIG51bGw7Zm9yKHQ9cz1yPWE9MCxpPWwtMTt0PGw7aT10KyspZT11W3RdLG49dVtpXSxvPWUueSpuLngtbi55KmUueCxyKz0oZS54K24ueCkqbyxhKz0oZS55K24ueSkqbyxzKz0zKm87cmV0dXJuIGg9MD09PXM/dVswXTpbci9zLGEvc10sdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhoKX0sX2NvbnZlcnRMYXRMbmdzOmZ1bmN0aW9uKHQpe3ZhciBpPU9lLnByb3RvdHlwZS5fY29udmVydExhdExuZ3MuY2FsbCh0aGlzLHQpLGU9aS5sZW5ndGg7cmV0dXJuIDI8PWUmJmlbMF1pbnN0YW5jZW9mIEQmJmlbMF0uZXF1YWxzKGlbZS0xXSkmJmkucG9wKCksaX0sX3NldExhdExuZ3M6ZnVuY3Rpb24odCl7T2UucHJvdG90eXBlLl9zZXRMYXRMbmdzLmNhbGwodGhpcyx0KSxwZSh0aGlzLl9sYXRsbmdzKSYmKHRoaXMuX2xhdGxuZ3M9W3RoaXMuX2xhdGxuZ3NdKX0sX2RlZmF1bHRTaGFwZTpmdW5jdGlvbigpe3JldHVybiBwZSh0aGlzLl9sYXRsbmdzWzBdKT90aGlzLl9sYXRsbmdzWzBdOnRoaXMuX2xhdGxuZ3NbMF1bMF19LF9jbGlwUG9pbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVuZGVyZXIuX2JvdW5kcyxpPXRoaXMub3B0aW9ucy53ZWlnaHQsZT1uZXcgayhpLGkpLHQ9bmV3IEkodC5taW4uc3VidHJhY3QoZSksdC5tYXguYWRkKGUpKTtpZih0aGlzLl9wYXJ0cz1bXSx0aGlzLl9weEJvdW5kcyYmdGhpcy5fcHhCb3VuZHMuaW50ZXJzZWN0cyh0KSlpZih0aGlzLm9wdGlvbnMubm9DbGlwKXRoaXMuX3BhcnRzPXRoaXMuX3JpbmdzO2Vsc2UgZm9yKHZhciBuLG89MCxzPXRoaXMuX3JpbmdzLmxlbmd0aDtvPHM7bysrKShuPWdlKHRoaXMuX3JpbmdzW29dLHQsITApKS5sZW5ndGgmJnRoaXMuX3BhcnRzLnB1c2gobil9LF91cGRhdGVQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuX3VwZGF0ZVBvbHkodGhpcywhMCl9LF9jb250YWluc1BvaW50OmZ1bmN0aW9uKHQpe3ZhciBpLGUsbi
24510xvLHMscixhLGgsdT0hMTtpZighdGhpcy5fcHhCb3VuZHN8fCF0aGlzLl9weEJvdW5kcy5jb250YWlucyh0KSlyZXR1cm4hMTtmb3Iobz0wLGE9dGhpcy5fcGFydHMubGVuZ3RoO288YTtvKyspZm9yKHM9MCxyPShoPShpPXRoaXMuX3BhcnRzW29dKS5sZW5ndGgpLTE7czxoO3I9cysrKWU9aVtzXSxuPWlbcl0sZS55PnQueSE9bi55PnQueSYmdC54PChuLngtZS54KSoodC55LWUueSkvKG4ueS1lLnkpK2UueCYmKHU9IXUpO3JldHVybiB1fHxPZS5wcm90b3R5cGUuX2NvbnRhaW5zUG9pbnQuY2FsbCh0aGlzLHQsITApfX0pO3ZhciBOZT1DZS5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxpKXtjKHRoaXMsaSksdGhpcy5fbGF5ZXJzPXt9LHQmJnRoaXMuYWRkRGF0YSh0KX0sYWRkRGF0YTpmdW5jdGlvbih0KXt2YXIgaSxlLG4sbz1nKHQpP3Q6dC5mZWF0dXJlcztpZihvKXtmb3IoaT0wLGU9by5sZW5ndGg7aTxlO2krKykoKG49b1tpXSkuZ2VvbWV0cmllc3x8bi5nZW9tZXRyeXx8bi5mZWF0dXJlc3x8bi5jb29yZGluYXRlcykmJnRoaXMuYWRkRGF0YShuKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm9wdGlvbnM7aWYocy5maWx0ZXImJiFzLmZpbHRlcih0KSlyZXR1cm4gdGhpczt2YXIgcj1EZSh0LHMpO3JldHVybiByPyhyLmZlYXR1cmU9cWUodCksci5kZWZhdWx0T3B0aW9ucz1yLm9wdGlvbnMsdGhpcy5yZXNldFN0eWxlKHIpLHMub25FYWNoRmVhdHVyZSYmcy5vbkVhY2hGZWF0dXJlKHQsciksdGhpcy5hZGRMYXllcihyKSk6dGhpc30scmVzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLmVhY2hMYXllcih0aGlzLnJlc2V0U3R5bGUsdGhpcyk6KHQub3B0aW9ucz1oKHt9LHQuZGVmYXVsdE9wdGlvbnMpLHRoaXMuX3NldExheWVyU3R5bGUodCx0aGlzLm9wdGlvbnMuc3R5bGUpLHRoaXMpfSxzZXRTdHlsZTpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIoZnVuY3Rpb24odCl7dGhpcy5fc2V0TGF5ZXJTdHlsZSh0LGkpfSx0aGlzKX0sX3NldExheWVyU3R5bGU6ZnVuY3Rpb24odCxpKXt0LnNldFN0eWxlJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgaSYmKGk9aSh0LmZlYXR1cmUpKSx0LnNldFN0eWxlKGkpKX19KTtmdW5jdGlvbiBEZSh0LGkpe3ZhciBlLG4sbyxzLHI9XCJGZWF0dXJlXCI9PT10LnR5cGU/dC5nZW9tZXRyeTp0LGE9cj9yLmNvb3JkaW5hdGVzOm51bGwsaD1bXSx1PWkmJmkucG9pbnRUb0xheWVyLGw9aSYmaS5jb29yZHNUb0xhdExuZ3x8V2U7aWYoIWEmJiFyKXJldHVybiBudWxsO3N3aXRjaChyLnR5cGUpe2Nhc2VcIlBvaW50XCI6cmV0dXJuIGplKHUsdCxlPWwoYSksaSk7Y2FzZVwiTXVsdGlQb2ludFwiOmZvcihvPTAscz1hLmxlbmd0aDtvPHM7bysrKWU9bChhW29dKSxoLnB1c2goamUodSx0LGUsaSkpO3JldHVybiBuZXcgQ2UoaCk7Y2FzZVwiTGluZVN0cmluZ1wiOmNhc2VcIk11bHRpTGluZVN0cmluZ1wiOnJldHVybiBuPUhlKGEsXCJMaW5lU3RyaW5nXCI9PT1yLnR5cGU/MDoxLGwpLG5ldyBPZShuLGkpO2Nhc2VcIlBvbHlnb25cIjpjYXNlXCJNdWx0aVBvbHlnb25cIjpyZXR1cm4gbj1IZShhLFwiUG9seWdvblwiPT09ci50eXBlPzE6MixsKSxuZXcgUmUobixpKTtjYXNlXCJHZW9tZXRyeUNvbGxlY3Rpb25cIjpmb3Iobz0wLHM9ci5nZW9tZXRyaWVzLmxlbmd0aDtvPHM7bysrKXt2YXIgYz1EZSh7Z2VvbWV0cnk6ci5nZW9tZXRyaWVzW29dLHR5cGU6XCJGZWF0dXJlXCIscHJvcGVydGllczp0LnByb3BlcnRpZXN9LGkpO2MmJmgucHVzaChjKX1yZXR1cm4gbmV3IENlKGgpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBHZW9KU09OIG9iamVjdC5cIil9fWZ1bmN0aW9uIGplKHQsaSxlLG4pe3JldHVybiB0P3QoaSxlKTpuZXcga2UoZSxuJiZuLm1hcmtlcnNJbmhlcml0T3B0aW9ucyYmbil9ZnVuY3Rpb24gV2UodCl7cmV0dXJuIG5ldyBEKHRbMV0sdFswXSx0WzJdKX1mdW5jdGlvbiBIZSh0LGksZSl7Zm9yKHZhciBuLG89W10scz0wLHI9dC5sZW5ndGg7czxyO3MrKyluPWk/SGUodFtzXSxpLTEsZSk6KGV8fFdlKSh0W3NdKSxvLnB1c2gobik7cmV0dXJuIG99ZnVuY3Rpb24gRmUodCxpKXtyZXR1cm4gaT1cIm51bWJlclwiPT10eXBlb2YgaT9pOjYsdm9pZCAwIT09dC5hbHQ/W3IodC5sbmcsaSkscih0LmxhdCxpKSxyKHQuYWx0LGkpXTpbcih0LmxuZyxpKSxyKHQubGF0LGkpXX1mdW5jdGlvbiBVZSh0LGksZSxuKXtmb3IodmFyIG89W10scz0wLHI9dC5sZW5ndGg7czxyO3MrKylvLnB1c2goaT9VZSh0W3NdLGktMSxlLG4pOkZlKHRbc10sbikpO3JldHVybiFpJiZlJiZvLnB1c2gob1swXSksb31mdW5jdGlvbiBWZSh0LGkpe3JldHVybiB0LmZlYXR1cmU/aCh7fSx0LmZlYXR1cmUse2dlb21ldHJ5Oml9KTpxZShpKX1mdW5jdGlvbiBxZSh0KXtyZXR1cm5cIkZlYXR1cmVcIj09PXQudHlwZXx8XCJGZWF0dXJlQ29sbGVjdGlvblwiPT09dC50eXBlP3Q6e3R5cGU6XCJGZWF0dXJlXCIscHJvcGVydGllczp7fSxnZW9tZXRyeTp0fX12YXIgR2U9e3RvR2VvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gVmUodGhpcyx7dHlwZTpcIlBvaW50XCIsY29vcmRpbmF0ZXM6RmUodGhpcy5nZXRMYXRMbmcoKSx0KX0pfX07ZnVuY3Rpb24gS2UodCxpKXtyZXR1cm4gbmV3IE5lKHQsaSl9a2UuaW5jbHVkZShHZSksSWUuaW5jbHVkZShHZSksQWUuaW5jbHVkZShHZSksT2UuaW5jbHVkZSh7dG9HZW9KU09OOmZ1bmN0aW9uKHQpe3ZhciBpPSFwZSh0aGlzLl9sYXRsbmdzKTtyZXR1cm4gVmUodGhpcyx7dHlwZTooaT9cIk11bHRpXCI6XCJcIikrXCJMaW5lU3RyaW5nXCIsY29vcmRpbmF0ZXM6VWUodGhpcy5fbGF0bG5ncyxpPzE6MCwhMSx0KX0pfX0pLFJlLmluY2x1ZGUoe3RvR2VvSlNPTjpmdW5jdGlvbih0KXt2YXIgaT0hcGUodGhpcy5fbGF0bG5ncyksZT1pJiYhcGUodGhpcy5fbGF0bG5nc1swXSksbj1VZSh0aGlzLl9sYXRsbmdzLGU/MjppPzE6MCwhMCx0KTtyZXR1cm4gaXx8KG49W25dKSxWZSh0aGlzLHt0eXBlOihlP1wiTXVsdGlcIjpcIlwiKStcIlBvbHlnb25cIixjb29yZGluYXRlczpufSl9fSksemUuaW5jbHVkZSh7dG9NdWx0aVBvaW50OmZ1bmN0aW9uKGkpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2hMYXllcihmdW5jdGlvbih0KXtlLnB1c2godC50b0dlb0pTT04oaSkuZ2VvbWV0cnkuY29vcmRpbmF0ZXMpfSksVmUodGhpcyx7dHlwZTpcIk11bHRpUG9pbnRcIixjb29yZGluYX
24510RlczplfSl9LHRvR2VvSlNPTjpmdW5jdGlvbihuKXt2YXIgdD10aGlzLmZlYXR1cmUmJnRoaXMuZmVhdHVyZS5nZW9tZXRyeSYmdGhpcy5mZWF0dXJlLmdlb21ldHJ5LnR5cGU7aWYoXCJNdWx0aVBvaW50XCI9PT10KXJldHVybiB0aGlzLnRvTXVsdGlQb2ludChuKTt2YXIgbz1cIkdlb21ldHJ5Q29sbGVjdGlvblwiPT09dCxzPVtdO3JldHVybiB0aGlzLmVhY2hMYXllcihmdW5jdGlvbih0KXt2YXIgaSxlO3QudG9HZW9KU09OJiYoaT10LnRvR2VvSlNPTihuKSxvP3MucHVzaChpLmdlb21ldHJ5KTpcIkZlYXR1cmVDb2xsZWN0aW9uXCI9PT0oZT1xZShpKSkudHlwZT9zLnB1c2guYXBwbHkocyxlLmZlYXR1cmVzKTpzLnB1c2goZSkpfSksbz9WZSh0aGlzLHtnZW9tZXRyaWVzOnMsdHlwZTpcIkdlb21ldHJ5Q29sbGVjdGlvblwifSk6e3R5cGU6XCJGZWF0dXJlQ29sbGVjdGlvblwiLGZlYXR1cmVzOnN9fX0pO3ZhciBZZT1LZSxYZT1NZS5leHRlbmQoe29wdGlvbnM6e29wYWNpdHk6MSxhbHQ6XCJcIixpbnRlcmFjdGl2ZTohMSxjcm9zc09yaWdpbjohMSxlcnJvck92ZXJsYXlVcmw6XCJcIix6SW5kZXg6MSxjbGFzc05hbWU6XCJcIn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGksZSl7dGhpcy5fdXJsPXQsdGhpcy5fYm91bmRzPU4oaSksYyh0aGlzLGUpfSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX2ltYWdlfHwodGhpcy5faW5pdEltYWdlKCksdGhpcy5vcHRpb25zLm9wYWNpdHk8MSYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpKSx0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUmJihjaSh0aGlzLl9pbWFnZSxcImxlYWZsZXQtaW50ZXJhY3RpdmVcIiksdGhpcy5hZGRJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9pbWFnZSkpLHRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2ltYWdlKSx0aGlzLl9yZXNldCgpfSxvblJlbW92ZTpmdW5jdGlvbigpe3JpKHRoaXMuX2ltYWdlKSx0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUmJnRoaXMucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5faW1hZ2UpfSxzZXRPcGFjaXR5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMub3BhY2l0eT10LHRoaXMuX2ltYWdlJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCksdGhpc30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3BhY2l0eSYmdGhpcy5zZXRPcGFjaXR5KHQub3BhY2l0eSksdGhpc30sYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmaGkodGhpcy5faW1hZ2UpLHRoaXN9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmdWkodGhpcy5faW1hZ2UpLHRoaXN9LHNldFVybDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdXJsPXQsdGhpcy5faW1hZ2UmJih0aGlzLl9pbWFnZS5zcmM9dCksdGhpc30sc2V0Qm91bmRzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ib3VuZHM9Tih0KSx0aGlzLl9tYXAmJnRoaXMuX3Jlc2V0KCksdGhpc30sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9e3pvb206dGhpcy5fcmVzZXQsdmlld3Jlc2V0OnRoaXMuX3Jlc2V0fTtyZXR1cm4gdGhpcy5fem9vbUFuaW1hdGVkJiYodC56b29tYW5pbT10aGlzLl9hbmltYXRlWm9vbSksdH0sc2V0WkluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4PXQsdGhpcy5fdXBkYXRlWkluZGV4KCksdGhpc30sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvdW5kc30sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbWFnZX0sX2luaXRJbWFnZTpmdW5jdGlvbigpe3ZhciB0PVwiSU1HXCI9PT10aGlzLl91cmwudGFnTmFtZSxpPXRoaXMuX2ltYWdlPXQ/dGhpcy5fdXJsOnNpKFwiaW1nXCIpO2NpKGksXCJsZWFmbGV0LWltYWdlLWxheWVyXCIpLHRoaXMuX3pvb21BbmltYXRlZCYmY2koaSxcImxlYWZsZXQtem9vbS1hbmltYXRlZFwiKSx0aGlzLm9wdGlvbnMuY2xhc3NOYW1lJiZjaShpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLGkub25zZWxlY3RzdGFydD1hLGkub25tb3VzZW1vdmU9YSxpLm9ubG9hZD1wKHRoaXMuZmlyZSx0aGlzLFwibG9h
24510ZFwiKSxpLm9uZXJyb3I9cCh0aGlzLl9vdmVybGF5T25FcnJvcix0aGlzLFwiZXJyb3JcIiksIXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiYmXCJcIiE9PXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbnx8KGkuY3Jvc3NPcmlnaW49ITA9PT10aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4/XCJcIjp0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4pLHRoaXMub3B0aW9ucy56SW5kZXgmJnRoaXMuX3VwZGF0ZVpJbmRleCgpLHQ/dGhpcy5fdXJsPWkuc3JjOihpLnNyYz10aGlzLl91cmwsaS5hbHQ9dGhpcy5vcHRpb25zLmFsdCl9LF9hbmltYXRlWm9vbTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKHQuem9vbSksZT10aGlzLl9tYXAuX2xhdExuZ0JvdW5kc1RvTmV3TGF5ZXJCb3VuZHModGhpcy5fYm91bmRzLHQuem9vbSx0LmNlbnRlcikubWluO2dpKHRoaXMuX2ltYWdlLGUsaSl9LF9yZXNldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2ltYWdlLGk9bmV3IEkodGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9ib3VuZHMuZ2V0Tm9ydGhXZXN0KCkpLHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fYm91bmRzLmdldFNvdXRoRWFzdCgpKSksZT1pLmdldFNpemUoKTt2aSh0LGkubWluKSx0LnN0eWxlLndpZHRoPWUueCtcInB4XCIsdC5zdHlsZS5oZWlnaHQ9ZS55K1wicHhcIn0sX3VwZGF0ZU9wYWNpdHk6ZnVuY3Rpb24oKXttaSh0aGlzLl9pbWFnZSx0aGlzLm9wdGlvbnMub3BhY2l0eSl9LF91cGRhdGVaSW5kZXg6ZnVuY3Rpb24oKXt0aGlzLl9pbWFnZSYmdm9pZCAwIT09dGhpcy5vcHRpb25zLnpJbmRleCYmbnVsbCE9PXRoaXMub3B0aW9ucy56SW5kZXgmJih0aGlzLl9pbWFnZS5zdHlsZS56SW5kZXg9dGhpcy5vcHRpb25zLnpJbmRleCl9LF9vdmVybGF5T25FcnJvcjpmdW5jdGlvbigpe3RoaXMuZmlyZShcImVycm9yXCIpO3ZhciB0PXRoaXMub3B0aW9ucy5lcnJvck92ZXJsYXlVcmw7dCYmdGhpcy5fdXJsIT09dCYmKHRoaXMuX3VybD10LHRoaXMuX2ltYWdlLnNyYz10KX19KSxKZT1YZS5leHRlbmQoe29wdGlvbnM6e2F1dG9wbGF5OiEwLGxvb3A6ITAsa2VlcEFzcGVjdFJhdGlvOiEwLG11dGVkOiExfSxfaW5pdEltYWdlOmZ1bmN0aW9uKCl7dmFyIHQ9XCJWSURFT1wiPT09dGhpcy5fdXJsLnRhZ05hbWUsaT10aGlzLl9pbWFnZT10P3RoaXMuX3VybDpzaShcInZpZGVvXCIpO2lmKGNpKGksXCJsZWFmbGV0LWltYWdlLWxheWVyXCIpLHRoaXMuX3pvb21BbmltYXRlZCYmY2koaSxcImxlYWZsZXQtem9vbS1hbmltYXRlZFwiKSx0aGlzLm9wdGlvbnMuY2xhc3NOYW1lJiZjaShpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLGkub25zZWxlY3RzdGFydD1hLGkub25tb3VzZW1vdmU9YSxpLm9ubG9hZGVkZGF0YT1wKHRoaXMuZmlyZSx0aGlzLFwibG9h
24510ZFwiKSx0KXtmb3IodmFyIGU9aS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNvdXJjZVwiKSxuPVtdLG89MDtvPGUubGVuZ3RoO28rKyluLnB1c2goZVtvXS5zcmMpO3RoaXMuX3VybD0wPGUubGVuZ3RoP246W2kuc3JjXX1lbHNle2codGhpcy5fdXJsKXx8KHRoaXMuX3VybD1bdGhpcy5fdXJsXSksIXRoaXMub3B0aW9ucy5rZWVwQXNwZWN0UmF0aW8mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLnN0eWxlLFwib2JqZWN0Rml0XCIpJiYoaS5zdHlsZS5vYmplY3RGaXQ9XCJmaWxsXCIpLGkuYXV0b3BsYXk9ISF0aGlzLm9wdGlvbnMuYXV0b3BsYXksaS5sb29wPSEhdGhpcy5vcHRpb25zLmxvb3AsaS5tdXRlZD0hIXRoaXMub3B0aW9ucy5tdXRlZDtmb3IodmFyIHM9MDtzPHRoaXMuX3VybC5sZW5ndGg7cysrKXt2YXIgcj1zaShcInNvdXJjZVwiKTtyLnNyYz10aGlzLl91cmxbc10saS5hcHBlbmRDaGlsZChyKX19fX0pO3ZhciAkZT1YZS5leHRlbmQoe19pbml0SW1hZ2U6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbWFnZT10aGlzLl91cmw7Y2kodCxcImxlYWZsZXQtaW1hZ2UtbGF5ZXJcIiksdGhpcy5fem9vbUFuaW1hdGVkJiZjaSh0LFwibGVhZmxldC16b29tLWFuaW1hdGVkXCIpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUmJmNpKHQsdGhpcy5vcHRpb25zLmNsYXNzTmFtZSksdC5vbnNlbGVjdHN0YXJ0PWEsdC5vbm1vdXNlbW92ZT1hfX0pO3ZhciBRZT1NZS5leHRlbmQoe29wdGlvbnM6e29mZnNldDpbMCw3XSxjbGFzc05hbWU6XCJcIixwYW5lOlwicG9wdXBQYW5lXCJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpKXtjKHRoaXMsdCksdGhpcy5fc291cmNlPWl9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX3pvb21BbmltYXRlZD10Ll96b29tQW5pbWF0ZWQsdGhpcy5fY29udGFpbmVyfHx0aGlzLl9pbml0TGF5b3V0KCksdC5fZmFkZUFuaW1hdGVkJiZtaSh0aGlzLl9jb250YWluZXIsMCksY2xlYXJUaW1lb3V0KHRoaXMuX3JlbW92ZVRpbWVvdXQpLHRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lciksdGhpcy51cGRhdGUoKSx0Ll9mYWRlQW5pbWF0ZWQmJm1pKHRoaXMuX2NvbnRhaW5lciwxKSx0aGlzLmJyaW5nVG9Gcm9udCgpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0Ll9mYWRlQW5pbWF0ZWQ/KG1pKHRoaXMuX2NvbnRhaW5lciwwKSx0aGlzLl9yZW1vdmVUaW1lb3V0PXNldFRpbWVvdXQocChyaSx2b2lkIDAsdGhpcy5fY29udGFpbmVyKSwyMDApKTpyaSh0aGlzLl9jb250YWluZXIpfSxnZXRMYXRMbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGF0bG5nfSxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhdGxuZz1qKHQpLHRoaXMuX21hcCYmKHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCksdGhpcy5fYWRqdXN0UGFuKCkpLHRoaXN9LGdldENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudH0sc2V0Q29udGVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY29udGVudD10LHRoaXMudXBkYXRlKCksdGhpc30sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LHVwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX21hcCYmKHRoaXMuX2NvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5PVwiaGlkZGVuXCIsdGhpcy5fdXBkYXRlQ29udGVudCgpLHRoaXMuX3VwZGF0ZUxheW91dCgpLHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCksdGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9XCJcIix0aGlzLl9hZGp1c3RQYW4oKSl9LGdldEV2ZW50czpmdW5jdGlvbigpe3ZhciB0PXt6b29tOnRoaXMuX3VwZGF0ZVBvc2l0aW9uLHZpZXdyZXNldDp0aGlzLl91cGRhdGVQb3NpdGlvbn07cmV0dXJuIHRoaXMuX3pvb21BbmltYXRlZCYmKHQuem9vbWFuaW09dGhpcy5fYW5pbWF0ZVpvb20pLHR9LGlzT3BlbjpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fbWFwJiZ0aGlzLl9tYXAuaGFzTGF5ZXIodGhpcyl9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJmhpKHRoaXMuX2NvbnRhaW5lciksdGhpc30sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZ1aSh0aGlzLl9jb250YWluZXIpLHRoaXN9LF9wcmVwYXJlT3BlbjpmdW5jdGlvbih0LGksZSl7aWYoaSBpbnN0YW5jZW9mIE1lfHwoZT1pLGk9dCksaSBpbnN0YW5jZW9mIENlKWZvcih2YXIgbiBpbiB0Ll9sYXllcnMpe2k9dC5fbGF5ZXJzW25dO2JyZWFrfWlmKCFlKWlmKGkuZ2V0Q2VudGVyKWU9aS5nZXRDZW50ZXIoKTtlbHNle2lmKCFpLmdldExhdExuZyl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZ2V0IHNvdXJjZSBsYXllciBMYXRMbmcuXCIpO2U9aS5nZXRMYXRMbmcoKX1yZXR1cm4gdGhpcy5fc291cmNlPWksdGhpcy51cGRhdGUoKSxlfSxfdXBkYXRlQ29udGVudDpmdW5jdGlvbigpe2lmKHRoaXMuX2NvbnRlbnQpe3ZhciB0PXRoaXMuX2NvbnRlbnROb2RlLGk9XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5fY29udGVudD90aGlzLl9jb250ZW50KHRoaXMuX3NvdXJjZXx8dGhpcyk6dGhpcy5fY29udGVudDtpZihcInN0cmluZ1wiPT10eXBlb2YgaSl0LmlubmVySFRNTD1pO2Vsc2V7Zm9yKDt0Lmhhc0NoaWxkTm9kZXMoKTspdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpO3QuYXBwZW5kQ2hpbGQoaSl9dGhpcy5maXJlKFwiY29udGVudHVwZGF0ZVwiKX19LF91cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0LGksZSxuLG87dGhpcy5fbWFwJiYodD10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZyksaT1BKHRoaXMub3B0aW9ucy5vZmZzZXQpLGU9dGhpcy5fZ2V0QW5jaG9yKCksdGhpcy5fem9vbUFuaW1hdGVkP3ZpKHRoaXMuX2NvbnRhaW5lcix0LmFkZChlKSk6aT1pLmFkZCh0KS5hZGQoZSksbj10aGlzLl9jb250YWluZXJCb3R0b209LWkueSxvPXRoaXMuX2NvbnRhaW5lckxlZnQ9LU1hdGgucm91bmQodGhpcy5fY29udGFpbmVyV2lkdGgvMikraS54LHRoaXMuX2NvbnRhaW5lci5zdHlsZS5ib3R0b209bitcInB4XCIsdGhpcy5fY29udGFpbmVyLnN0eWxlLmxlZnQ9bytcInB4XCIpfSxfZ2V0QW5jaG9yOmZ1bmN0aW9uKCl7cmV0dXJuWzAsMF19fSksdG49UWUuZXh0
24510ZW5kKHtvcHRpb25zOnttYXhXaWR0aDozMDAsbWluV2lkdGg6NTAsbWF4SGVpZ2h0Om51bGwsYXV0b1BhbjohMCxhdXRvUGFuUGFkZGluZ1RvcExlZnQ6bnVsbCxhdXRvUGFuUGFkZGluZ0JvdHRvbVJpZ2h0Om51bGwsYXV0b1BhblBhZGRpbmc6WzUsNV0sa2VlcEluVmlldzohMSxjbG9zZUJ1dHRvbjohMCxhdXRvQ2xvc2U6ITAsY2xvc2VPbkVzY2FwZUtleTohMCxjbGFzc05hbWU6XCJcIn0sb3Blbk9uOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm9wZW5Qb3B1cCh0aGlzKSx0aGlzfSxvbkFkZDpmdW5jdGlvbih0KXtRZS5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLHQpLHQuZmlyZShcInBvcHVwb3BlblwiLHtwb3B1cDp0aGlzfSksdGhpcy5fc291cmNlJiYodGhpcy5fc291cmNlLmZpcmUoXCJwb3B1cG9wZW5cIix7cG9wdXA6dGhpc30sITApLHRoaXMuX3NvdXJjZSBpbnN0YW5jZW9mIEJlfHx0aGlzLl9zb3VyY2Uub24oXCJwcmVjbGlja1wiLEFpKSl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe1FlLnByb3RvdHlwZS5vblJlbW92ZS5jYWxsKHRoaXMsdCksdC5maXJlKFwicG9wdXBjbG9zZVwiLHtwb3B1cDp0aGlzfSksdGhpcy5fc291cmNlJiYodGhpcy5fc291cmNlLmZpcmUoXCJwb3B1cGNsb3NlXCIse3BvcHVwOnRoaXN9LCEwKSx0aGlzLl9zb3VyY2UgaW5zdGFuY2VvZiBCZXx8dGhpcy5fc291cmNlLm9mZihcInByZWNsaWNrXCIsQWkpKX0sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9UWUucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO3JldHVybih2b2lkIDAhPT10aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrP3RoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2s6dGhpcy5fbWFwLm9wdGlvbnMuY2xvc2VQb3B1cE9uQ2xpY2spJiYodC5wcmVjbGljaz10aGlzLl9jbG9zZSksdGhpcy5vcHRpb25zLmtlZXBJblZpZXcmJih0Lm1vdmVlbmQ9dGhpcy5fYWRqdXN0UGFuKSx0fSxfY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJnRoaXMuX21hcC5jbG9zZVBvcHVwKHRoaXMpfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3ZhciB0LGk9XCJsZWFmbGV0LXBvcHVwXCIsZT10aGlzLl9jb250YWluZXI9c2koXCJkaXZcIixpK1wiIFwiKyh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfHxcIlwiKStcIiBsZWFmbGV0LXpvb20tYW5pbWF0ZWRcIiksbj10aGlzLl93cmFwcGVyPXNpKFwiZGl2XCIsaStcIi1jb250ZW50LXdyYXBwZXJcIixlKTt0aGlzLl9jb250ZW50Tm9kZT1zaShcImRpdlwiLGkrXCItY29udGVudFwiLG4pLE9pKGUpLElpKHRoaXMuX2NvbnRlbnROb2RlKSx6aShlLFwiY29udGV4dG1lbnVcIixBaSksdGhpcy5fdGlwQ29udGFpbmVyPXNpKFwiZGl2XCIsaStcIi10aXAtY29udGFpbmVyXCIsZSksdGhpcy5fdGlwPXNpKFwiZGl2XCIsaStcIi10aXBcIix0aGlzLl90aXBDb250YWluZXIpLHRoaXMub3B0aW9ucy5jbG9zZUJ1dHRvbiYmKCh0PXRoaXMuX2Nsb3NlQnV0dG9uPXNpKFwiYVwiLGkrXCItY2xvc2UtYnV0dG9uXCIsZSkpLmhyZWY9XCIjY2xvc2VcIix0LmlubmVySFRNTD1cIiYjMjE1O1wiLHppKHQsXCJjbGlja1wiLHRoaXMuX29uQ2xvc2VCdXR0b25DbGljayx0aGlzKSl9LF91cGRhdGVMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250ZW50Tm9kZSxpPXQuc3R5bGU7aS53aWR0aD1cIlwiLGkud2hpdGVTcGFjZT1cIm5vd3JhcFwiO3ZhciBlPXQub2Zmc2V0V2lkdGgsZT1NYXRoLm1pbihlLHRoaXMub3B0aW9ucy5tYXhXaWR0aCk7ZT1NYXRoLm1heChlLHRoaXMub3B0aW9ucy5taW5XaWR0aCksaS53aWR0aD1lKzErXCJweFwiLGkud2hpdGVTcGFjZT1cIlwiLGkuaGVpZ2h0PVwiXCI7dmFyIG49dC5vZmZzZXRIZWlnaHQsbz10aGlzLm9wdGlvbnMubWF4SGVpZ2h0LHM9XCJsZWFmbGV0LXBvcHVwLXNjcm9sbGVkXCI7byYmbzxuPyhpLmhlaWdodD1vK1wicHhcIixjaSh0LHMpKTpfaSh0LHMpLHRoaXMuX2NvbnRhaW5lcldpZHRoPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aH0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcC5fbGF0TG5nVG9OZXdMYXllclBvaW50KHRoaXMuX2xhdGxuZyx0Lnpvb20sdC5jZW50ZXIpLGU9dGhpcy5fZ2V0QW5jaG9yKCk7dmkodGhpcy5fY29udGFpbmVyLGkuYWRkKGUpKX0sX2FkanVzdFBhbjpmdW5jdGlvbigpe3ZhciB0LGksZSxuLG8scyxyLGEsaCx1LGwsYzt0aGlzLm9wdGlvbnMuYXV0b1BhbiYmKHRoaXMuX21hcC5fcGFuQW5pbSYmdGhpcy5fbWFwLl9wYW5BbmltLnN0b3AoKSx0PXRoaXMuX21hcCxpPXBhcnNlSW50KG9pKHRoaXMuX2NvbnRhaW5lcixcIm1hcmdpbkJvdHRvbVwiKSwxMCl8fDAsZT10aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0K2ksbj10aGlzLl9jb250YWluZXJXaWR0aCwobz1uZXcgayh0aGlzLl9jb250YWluZXJMZWZ0LC1lLXRoaXMuX2NvbnRhaW5lckJvdHRvbSkpLl9hZGQoeWkodGhpcy5fY29udGFpbmVyKSkscz10LmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KG8pLHI9QSh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmcpLGE9QSh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmdUb3BMZWZ0fHxyKSxoPUEodGhpcy5vcHRpb25zLmF1dG9QYW5QYWRkaW5nQm90dG9tUmlnaHR8fHIpLHU9dC5nZXRTaXplKCksYz1sPTAscy54K24raC54PnUueCYmKGw9cy54K24tdS54K2gueCkscy54LWwtYS54PDAmJihsPXMueC1hLngpLHMueStlK2gueT51LnkmJihjPXMueStlLXUueStoLnkpLHMueS1jLWEueTwwJiYoYz1zLnktYS55KSwobHx8YykmJnQuZmlyZShcImF1dG9wYW5zdGFydFwiKS5wYW5CeShbbCxjXSkpfSxfb25DbG9zZUJ1dHRvbkNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuX2Nsb3NlKCksTmkodCl9LF9nZXRBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gQSh0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5fZ2V0UG9wdXBBbmNob3I/dGhpcy5fc291cmNlLl9nZXRQb3B1cEFuY2hvcigpOlswLDBdKX19KTtLaS5tZXJnZU9wdGlvbnMoe2Nsb3NlUG9wdXBPbkNsaWNrOiEwfSksS2kuaW5jbHVkZSh7b3BlblBvcHVwOmZ1bmN0aW9uKHQsaSxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRufHwodD1uZXcgdG4o
24510ZSkuc2V0Q29udGVudCh0KSksaSYmdC5zZXRMYXRMbmcoaSksdGhpcy5oYXNMYXllcih0KT90aGlzOih0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAub3B0aW9ucy5hdXRvQ2xvc2UmJnRoaXMuY2xvc2VQb3B1cCgpLHRoaXMuX3BvcHVwPXQsdGhpcy5hZGRMYXllcih0KSl9LGNsb3NlUG9wdXA6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQhPT10aGlzLl9wb3B1cHx8KHQ9dGhpcy5fcG9wdXAsdGhpcy5fcG9wdXA9bnVsbCksdCYmdGhpcy5yZW1vdmVMYXllcih0KSx0aGlzfX0pLE1lLmluY2x1ZGUoe2JpbmRQb3B1cDpmdW5jdGlvbih0LGkpe3JldHVybiB0IGluc3RhbmNlb2YgdG4/KGModCxpKSwodGhpcy5fcG9wdXA9dCkuX3NvdXJjZT10aGlzKToodGhpcy5fcG9wdXAmJiFpfHwodGhpcy5fcG9wdXA9bmV3IHRuKGksdGhpcykpLHRoaXMuX3BvcHVwLnNldENvbnRlbnQodCkpLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZHx8KHRoaXMub24oe2NsaWNrOnRoaXMuX29wZW5Qb3B1cCxrZXlwcmVzczp0aGlzLl9vbktleVByZXNzLHJlbW92ZTp0aGlzLmNsb3NlUG9wdXAsbW92ZTp0aGlzLl9tb3ZlUG9wdXB9KSx0aGlzLl9wb3B1cEhhbmRsZXJzQWRkZWQ9ITApLHRoaXN9LHVuYmluZFBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwJiYodGhpcy5vZmYoe2NsaWNrOnRoaXMuX29wZW5Qb3B1cCxrZXlwcmVzczp0aGlzLl9vbktleVByZXNzLHJlbW92ZTp0aGlzLmNsb3NlUG9wdXAsbW92ZTp0aGlzLl9tb3ZlUG9wdXB9KSx0aGlzLl9wb3B1cEhhbmRsZXJzQWRkZWQ9ITEsdGhpcy5fcG9wdXA9bnVsbCksdGhpc30sb3BlblBvcHVwOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMuX3BvcHVwJiZ0aGlzLl9tYXAmJihpPXRoaXMuX3BvcHVwLl9wcmVwYXJlT3Blbih0aGlzLHQsaSksdGhpcy5fbWFwLm9wZW5Qb3B1cCh0aGlzLl9wb3B1cCxpKSksdGhpc30sY2xvc2VQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuX2Nsb3NlKCksdGhpc30sdG9nZ2xlUG9wdXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BvcHVwJiYodGhpcy5fcG9wdXAuX21hcD90aGlzLmNsb3NlUG9wdXAoKTp0aGlzLm9wZW5Qb3B1cCh0KSksdGhpc30saXNQb3B1cE9wZW46ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5pc09wZW4oKX0sc2V0UG9wdXBDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuc2V0Q29udGVudCh0KSx0aGlzfSxnZXRQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cH0sX29wZW5Qb3B1cDpmdW5jdGlvbih0KXt2YXIgaT10LmxheWVyfHx0LnRhcmdldDt0aGlzLl9wb3B1cCYmdGhpcy5fbWFwJiYoTmkodCksaSBpbnN0YW5jZW9mIEJlP3RoaXMub3BlblBvcHVwKHQubGF5ZXJ8fHQudGFyZ2V0LHQubGF0bG5nKTp0aGlzLl9tYXAuaGFzTGF5ZXIodGhpcy5fcG9wdXApJiZ0aGlzLl9wb3B1cC5fc291cmNlPT09aT90aGlzLmNsb3NlUG9wdXAoKTp0aGlzLm9wZW5Qb3B1cChpLHQubGF0bG5nKSl9LF9tb3ZlUG9wdXA6ZnVuY3Rpb24odCl7dGhpcy5fcG9wdXAuc2V0TGF0TG5nKHQubGF0bG5nKX0sX29uS2V5UHJlc3M6ZnVuY3Rpb24odCl7MTM9PT10Lm9yaWdpbmFsRXZlbnQua2V5Q29kZSYmdGhpcy5fb3BlblBvcHVwKHQpfX0pO3ZhciBlbj1RZS5leHRlbmQoe29wdGlvbnM6e3BhbmU6XCJ0b29sdGlwUGFuZVwiLG9mZnNldDpbMCwwXSxkaXJlY3Rpb246XCJhdXRvXCIscGVybWFuZW50OiExLHN0aWNreTohMSxpbnRlcmFjdGl2ZTohMSxvcGFjaXR5Oi45fSxvbkFkZDpmdW5jdGlvbih0KXtRZS5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLHQpLHRoaXMuc2V0T3BhY2l0eSh0aGlzLm9wdGlvbnMub3BhY2l0eSksdC5maXJlKFwidG9vbHRpcG9wZW5cIix7dG9vbHRpcDp0aGlzfSksdGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2UuZmlyZShcInRvb2x0aXBvcGVuXCIse3Rvb2x0aXA6dGhpc30sITApfSxvblJlbW92ZTpmdW5jdGlvbih0KXtRZS5wcm90b3R5cGUub25SZW1vdmUuY2FsbCh0aGlzLHQpLHQuZmlyZShcInRvb2x0aXBjbG9zZVwiLHt0b29sdGlwOnRoaXN9KSx0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5maXJlKFwidG9vbHRpcGNsb3NlXCIse3Rvb2x0aXA6dGhpc30sITApfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD1RZS5wcm90b3R5cGUuZ2V0RXZlbnRzLmNhbGwodGhpcyk7cmV0dXJuIGJ0JiYhdGhpcy5vcHRpb25zLnBlcm1hbmVudCYmKHQucHJlY2xpY2s9dGhpcy5fY2xvc2UpLHR9LF9jbG9zZTpmdW5jdGlvbigpe3RoaXMuX21hcCYmdGhpcy5fbWFwLmNsb3NlVG9vbHRpcCh0aGlzKX0sX2luaXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD1cImxlYWZsZXQtdG9vbHRpcCBcIisodGhpcy5vcHRpb25zLmNsYXNzTmFtZXx8XCJcIikrXCIgbGVhZmxldC16b29tLVwiKyh0aGlzLl96b29tQW5pbWF0ZWQ/XCJhbmltYXRlZFwiOlwiaGlkZVwiKTt0aGlzLl9jb250ZW50Tm9kZT10aGlzLl9jb250YWluZXI9c2koXCJkaXZcIix0KX0sX3VwZGF0ZUxheW91dDpmdW5jdGlvbigpe30sX2FkanVzdFBhbjpmdW5jdGlvbigpe30sX3NldFBvc2l0aW9uOmZ1bmN0aW9uKHQpe3ZhciBpLGU9dGhpcy5fbWFwLG49dGhpcy5fY29udGFpbmVyLG89ZS5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGUuZ2V0Q2VudGVyKCkpLHM9ZS5sYXllclBvaW50VG9Db250YWluZXJQb2ludCh0KSxyPXRoaXMub3B0aW9ucy5kaXJlY3Rpb24sYT1uLm9mZnNldFdpZHRoLGg9bi5vZmZzZXRIZWlnaHQsdT1BKHRoaXMub3B0aW9ucy5vZmZzZXQpLGw9dGhpcy5fZ2V0QW5jaG9yKCksYz1cInRvcFwiPT09cj8oaT1hLzIsaCk6XCJib3R0b21cIj09PXI/KGk9YS8yLDApOihpPVwiY2VudGVyXCI9PT1yP2EvMjpcInJpZ2h0XCI9PT1yPzA6XCJsZWZ0XCI9PT1yP2E6cy54PG8ueD8ocj1cInJpZ2h0XCIsMCk6KHI9XCJsZWZ0XCIsYSsyKih1LngrbC54KSksaC8yKTt0PXQuc3VidHJhY3QoQShpLGMsITApKS5hZGQodSkuYWRkKGwpLF9pKG4sXCJsZWFmbGV0LXRvb2x0aXAtcmlnaHRcIiksX2kobixcImxlYWZsZXQtdG9vbHRpcC1sZWZ0XCIpLF9pKG4sXCJsZWFmbGV0LXRvb2x0aXAtdG9wXCIpLF9pKG4sXCJsZWFmbGV0LXRvb2x0aXAtYm90dG9tXCIpLGNpKG4sXCJsZWFmbGV0LXRvb2x0aXAtXCIrciksdmkobix0KX0sX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpO3RoaXMuX3NldFBvc2l0aW9uKHQpfSxzZXRPcGFjaXR5OmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fY29udGFpbmVyJiZtaSh0aGlzLl9jb250YWluZXIsdCl9LF9hbmltYXRlWm9vbTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXAuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcsdC56b29tLHQuY2VudGVyKTt0aGlzLl9zZXRQb3NpdGlvbihpKX0sX2dldEFuY2hvcjpmdW5jdGlvbigpe3JldHVybiBBKHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLl9nZXRUb29sdGlwQW5jaG9yJiYhdGhpcy5vcHRpb25zLnN0aWNreT90aGlzLl9zb3VyY2UuX2dldFRvb2x0aXBBbmNob3IoKTpbMCwwXSl9fSk7S2kuaW5jbHVkZSh7b3BlblRvb2x0aXA6ZnVuY3Rpb24odCxpLGUpe3JldHVybiB0IGluc3RhbmNlb2YgZW58fCh0PW5ldyBlbihlKS5zZXRDb250ZW50KHQpKSxpJiZ0LnNldExhdExuZyhpKSx0aGlzLmhhc0xheWVyKHQpP3RoaXM6dGhpcy5hZGRMYXllcih0KX0sY2xvc2VUb29sdGlwOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0aGlzLnJlbW92ZUxheWVyKHQpLHRoaXN9fSksTWUuaW5jbHVkZSh7YmluZFRvb2x0aXA6ZnVuY3Rpb24odCxpKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGVuPyhjKHQsaSksKHRoaXMuX3Rvb2x0aXA9dCkuX3NvdXJjZT10aGlzKToodGhpcy5fdG9vbHRpcCYmIWl8fCh0aGlzLl90b29sdGlwPW5ldyBlbihpLHRoaXMpKSx0aGlzLl90b29sdGlwLnNldENvbnRlbnQodCkpLHRoaXMuX2luaXRUb29sdGlwSW50ZXJhY3Rpb25zKCksdGhpcy5fdG9vbHRpcC5vcHRpb25zLnBlcm1hbmVudCYmdGhpcy5fbWFwJiZ0aGlzLl9tYXAuaGFzTGF5ZXIodGhpcykmJnRoaXMub3BlblRvb2x0aXAoKSx0aGlzfSx1bmJpbmRUb29sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXAmJih0aGlzLl9pbml0VG9vbHRpcEludGVyYWN0aW9ucyghMCksdGhpcy5jbG9zZVRvb2x0aXAoKSx0aGlzLl90b29sdGlwPW51bGwpLHRoaXN9LF9pbml0VG9vbHRpcEludGVyYWN0aW9uczpmdW5jdGlvbih0KXt2YXIgaSxlOyF0JiZ0aGlzLl90b29sdGlwSGFuZGxlcnNBZGRlZHx8KGk9dD9cIm9mZlwiOlwib25cIixlPXtyZW1vdmU6dGhpcy5jbG9zZVRvb2x0aXAsbW92ZTp0aGlzLl9tb3ZlVG9vbHRpcH0sdGhpcy5fdG9vbHRpcC5vcHRpb25zLnBlcm1hbmVudD9lLmFkZD10aGlzLl9vcGVuVG9vbHRpcDooZS5tb3VzZW92ZXI9dGhpcy5fb3BlblRvb2x0aXAsZS5tb3VzZW91dD10aGlzLmNsb3NlVG9vbHRpcCx0aGlzLl90b29sdGlwLm9wdGlvbnMuc3RpY2t5JiYoZS5tb3VzZW1vdmU9dGhpcy5fbW92ZVRvb2x0aXApLGJ0JiYoZS5jbGljaz10aGlzLl9vcGVuVG9vbHRpcCkpLHRoaXNbaV0oZSksdGhpcy5fdG9vbHRpcEhhbmRsZXJzQWRkZWQ9IXQpfSxvcGVuVG9vbHRpcDpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl90b29sdGlwJiZ0aGlzLl9tYXAmJihpPXRoaXMuX3Rvb2x0aXAuX3ByZXBhcmVPcGVuKHRoaXMsdCxpKSx0aGlzLl9tYXAub3BlblRvb2x0aXAodGhpcy5fdG9vbHRpcCxpKSx0aGlzLl90b29sdGlwLm9wdGlvbnMuaW50ZXJhY3RpdmUmJnRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lciYmKGNpKHRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lcixcImxlYWZsZXQtY2xpY2thYmxlXCIpLHRoaXMuYWRkSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5fdG9vbHRpcC5fY29udGFpbmVyKSkpLHRoaXN9LGNsb3NlVG9vbHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b29sdGlwJiYodGhpcy5fdG9vbHRpcC5fY2xvc2UoKSx0aGlzLl90b29sdGlwLm9wdGlvbnMuaW50ZXJhY3RpdmUmJnRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lciYmKF9pKHRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lcixcImxlYWZsZXQtY2xpY2thYmxlXCIpLHRoaXMucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5fdG9vbHRpcC5fY29udGFpbmVyKSkpLHRoaXN9LHRvZ2dsZVRvb2x0aXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXAmJih0aGlzLl90b29sdGlwLl9tYXA/dGhpcy5jbG9zZVRvb2x0aXAoKTp0aGlzLm9wZW5Ub29sdGlwKHQpKSx0aGlzfSxpc1Rvb2x0aXBPcGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXAuaXNPcGVuKCl9LHNldFRvb2x0aXBDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90b29sdGlwJiZ0aGlzLl90b29sdGlwLnNldENvbnRlbnQodCksdGhpc30sZ2V0VG9vbHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b29sdGlwfSxfb3BlblRvb2x0aXA6ZnVuY3Rpb24odCl7dmFyIGk9dC5sYXllcnx8dC50YXJnZXQ7dGhpcy5fdG9vbHRpcCYmdGhpcy5fbWFwJiZ0aGlzLm9wZW5Ub29sdGlwKGksdGhpcy5fdG9vbHRpcC5vcHRpb25zLnN0aWNreT90LmxhdGxuZzp2b2lkIDApfSxfbW92ZVRvb2x0aXA6ZnVuY3Rpb24odCl7dmFyIGksZSxuPXQubGF0bG5nO3RoaXMuX3Rvb2x0aXAub3B0aW9ucy5zdGlja3kmJnQub3JpZ2luYWxFdmVudCYmKGk9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQub3JpZ2luYWxFdmVudCksZT10aGlzLl9tYXAuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQoaSksbj10aGlzLl9tYXAubGF5ZXJQb2ludFRvTGF0TG5nKGUpKSx0aGlzLl90b29sdGlwLnNldExhdExuZyhuKX19KTt2YXIgbm49U2UuZXh0
24510ZW5kKHtvcHRpb25zOntpY29uU2l6ZTpbMTIsMTJdLGh0bWw6ITEsYmdQb3M6bnVsbCxjbGFzc05hbWU6XCJsZWFmbGV0LWRpdi1pY29uXCJ9LGNyZWF0ZUljb246ZnVuY3Rpb24odCl7dmFyIGksZT10JiZcIkRJVlwiPT09dC50YWdOYW1lP3Q6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxuPXRoaXMub3B0aW9ucztyZXR1cm4gbi5odG1sIGluc3RhbmNlb2YgRWxlbWVudD8oYWkoZSksZS5hcHBlbmRDaGlsZChuLmh0bWwpKTplLmlubmVySFRNTD0hMSE9PW4uaHRtbD9uLmh0bWw6XCJcIixuLmJnUG9zJiYoaT1BKG4uYmdQb3MpLGUuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uPS1pLngrXCJweCBcIistaS55K1wicHhcIiksdGhpcy5fc2V0SWNvblN0eWxlcyhlLFwiaWNvblwiKSxlfSxjcmVhdGVTaGFkb3c6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19KTtTZS5EZWZhdWx0PVplO3ZhciBvbj1NZS5leHRlbmQoe29wdGlvbnM6e3RpbGVTaXplOjI1NixvcGFjaXR5OjEsdXBkYXRlV2hlbklkbGU6eXQsdXBkYXRlV2hlblpvb21pbmc6ITAsdXBkYXRlSW50ZXJ2YWw6MjAwLHpJbmRleDoxLGJvdW5kczpudWxsLG1pblpvb206MCxtYXhab29tOnZvaWQgMCxtYXhOYXRpdmVab29tOnZvaWQgMCxtaW5OYXRpdmVab29tOnZvaWQgMCxub1dyYXA6ITEscGFuZTpcInRpbGVQYW5lXCIsY2xhc3NOYW1lOlwiXCIsa2VlcEJ1ZmZlcjoyfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2ModGhpcyx0KX0sb25BZGQ6ZnVuY3Rpb24oKXt0aGlzLl9pbml0Q29udGFpbmVyKCksdGhpcy5fbGV2ZWxzPXt9LHRoaXMuX3RpbGVzPXt9LHRoaXMuX3Jlc2V0VmlldygpLHRoaXMuX3VwZGF0ZSgpfSxiZWZvcmVBZGQ6ZnVuY3Rpb24odCl7dC5fYWRkWm9vbUxpbWl0KHRoaXMpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLl9yZW1vdmVBbGxUaWxlcygpLHJpKHRoaXMuX2NvbnRhaW5lciksdC5fcmVtb3ZlWm9vbUxpbWl0KHRoaXMpLHRoaXMuX2NvbnRhaW5lcj1udWxsLHRoaXMuX3RpbGVab29tPXZvaWQgMH0sYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKGhpKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fc2V0QXV0b1pJbmRleChNYXRoLm1heCkpLHRoaXN9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKHVpKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fc2V0QXV0b1pJbmRleChNYXRoLm1pbikpLHRoaXN9LGdldENvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fdXBkYXRlT3BhY2l0eSgpLHRoaXN9LHNldFpJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnpJbmRleD10LHRoaXMuX3VwZGF0ZVpJbmRleCgpLHRoaXN9LGlzTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2FkaW5nfSxyZWRyYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiYodGhpcy5fcmVtb3ZlQWxsVGlsZXMoKSx0aGlzLl91cGRhdGUoKSksdGhpc30sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9e3ZpZXdwcmVyZXNldDp0aGlzLl9pbnZhbGlkYXRlQWxsLHZpZXdyZXNldDp0aGlzLl9yZXNldFZpZXcsem9vbTp0aGlzLl9yZXNldFZpZXcsbW92ZWVuZDp0aGlzLl9vbk1vdmVFbmR9O3JldHVybiB0aGlzLm9wdGlvbnMudXBkYXRlV2hlbklkbGV8fCh0aGlzLl9vbk1vdmV8fCh0aGlzLl9vbk1vdmU9bih0aGlzLl9vbk1vdmVFbmQsdGhpcy5vcHRpb25zLnVwZGF0ZUludGVydmFsLHRoaXMpKSx0Lm1vdmU9dGhpcy5fb25Nb3ZlKSx0aGlzLl96b29tQW5pbWF0ZWQmJih0Lnpvb21hbmltPXRoaXMuX2FuaW1hdGVab29tKSx0fSxjcmVhdGVUaWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIil9LGdldFRpbGVTaXplOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnRpbGVTaXplO3JldHVybiB0IGluc3RhbmNlb2Ygaz90Om5ldyBrKHQsdCl9LF91cGRhdGVaSW5kZXg6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXImJnZvaWQgMCE9PXRoaXMub3B0aW9ucy56SW5kZXgmJm51bGwhPT10aGlzLm9wdGlvbnMuekluZGV4JiYodGhpcy5fY29udGFpbmVyLnN0eWxlLnpJbmRleD10aGlzLm9wdGlvbnMuekluZGV4KX0sX3NldEF1dG9aSW5kZXg6ZnVuY3Rpb24odCl7Zm9yKHZhciBpLGU9dGhpcy5nZXRQYW5lKCkuY2hpbGRyZW4sbj0tdCgtMS8wLDEvMCksbz0wLHM9ZS5sZW5ndGg7bzxzO28rKylpPWVbb10uc3R5bGUuekluZGV4LGVbb10hPT10aGlzLl9jb250YWluZXImJmkmJihuPXQobiwraSkpO2lzRmluaXRlKG4pJiYodGhpcy5vcHRpb25zLnpJbmRleD1uK3QoLTEsMSksdGhpcy5fdXBkYXRlWkluZGV4KCkpfSxfdXBkYXRlT3BhY2l0eTpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCYmIWl0KXttaSh0aGlzLl9jb250YWluZXIsdGhpcy5vcHRpb25zLm9wYWNpdHkpO3ZhciB0PStuZXcgRGF0ZSxpPSExLGU9ITE7Zm9yKHZhciBuIGluIHRoaXMuX3RpbGVzKXt2YXIgbyxzPXRoaXMuX3RpbGVzW25dO3MuY3VycmVudCYmcy5sb2FkZWQmJihvPU1hdGgubWluKDEsKHQtcy5sb2FkZWQpLzIwMCksbWkocy5lbCxvKSxvPDE/aT0hMDoocy5hY3RpdmU/ZT0hMDp0aGlzLl9vbk9wYXF1ZVRpbGUocykscy5hY3RpdmU9ITApKX1lJiYhdGhpcy5fbm9QcnVuZSYmdGhpcy5fcHJ1bmVUaWxlcygpLGkmJih6KHRoaXMuX2ZhZGVGcmFtZSksdGhpcy5fZmFkZUZyYW1lPU0odGhpcy5fdXBkYXRlT3BhY2l0eSx0aGlzKSl9fSxfb25PcGFxdWVUaWxlOmEsX2luaXRDb250YWluZXI6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXJ8fCh0aGlzLl9jb250YWluZXI9c2koXCJkaXZcIixcImxlYWZsZXQtbGF5ZXIgXCIrKHRoaXMub3B0aW9ucy5jbGFzc05hbWV8fFwiXCIpKSx0aGlzLl91cGRhdGVaSW5kZXgoKSx0aGlzLm9wdGlvbnMub3BhY2l0eTwxJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCksdGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSl9LF91cGRhdGVMZXZlbHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90
24510aWxlWm9vbSxpPXRoaXMub3B0aW9ucy5tYXhab29tO2lmKHZvaWQgMCE9PXQpe2Zvcih2YXIgZSBpbiB0aGlzLl9sZXZlbHMpZT1OdW1iZXIoZSksdGhpcy5fbGV2ZWxzW2VdLmVsLmNoaWxkcmVuLmxlbmd0aHx8ZT09PXQ/KHRoaXMuX2xldmVsc1tlXS5lbC5zdHlsZS56SW5kZXg9aS1NYXRoLmFicyh0LWUpLHRoaXMuX29uVXBkYXRlTGV2ZWwoZSkpOihyaSh0aGlzLl9sZXZlbHNbZV0uZWwpLHRoaXMuX3JlbW92ZVRpbGVzQXRab29tKGUpLHRoaXMuX29uUmVtb3ZlTGV2ZWwoZSksZGVsZXRlIHRoaXMuX2xldmVsc1tlXSk7dmFyIG49dGhpcy5fbGV2ZWxzW3RdLG89dGhpcy5fbWFwO3JldHVybiBufHwoKG49dGhpcy5fbGV2ZWxzW3RdPXt9KS5lbD1zaShcImRpdlwiLFwibGVhZmxldC10aWxlLWNvbnRhaW5lciBsZWFmbGV0LXpvb20tYW5pbWF0ZWRcIix0aGlzLl9jb250YWluZXIpLG4uZWwuc3R5bGUuekluZGV4PWksbi5vcmlnaW49by5wcm9qZWN0KG8udW5wcm9qZWN0KG8uZ2V0UGl4ZWxPcmlnaW4oKSksdCkucm91bmQoKSxuLnpvb209dCx0aGlzLl9zZXRab29tVHJhbnNmb3JtKG4sby5nZXRDZW50ZXIoKSxvLmdldFpvb20oKSksYShuLmVsLm9mZnNldFdpZHRoKSx0aGlzLl9vbkNyZWF0ZUxldmVsKG4pKSx0aGlzLl9sZXZlbD1ufX0sX29uVXBkYXRlTGV2ZWw6YSxfb25SZW1vdmVMZXZlbDphLF9vbkNyZWF0ZUxldmVsOmEsX3BydW5lVGlsZXM6ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXApe3ZhciB0LGksZSxuPXRoaXMuX21hcC5nZXRab29tKCk7aWYobj50aGlzLm9wdGlvbnMubWF4Wm9vbXx8bjx0aGlzLm9wdGlvbnMubWluWm9vbSl0aGlzLl9yZW1vdmVBbGxUaWxlcygpO2Vsc2V7Zm9yKHQgaW4gdGhpcy5fdGlsZXMpKGU9dGhpcy5fdGlsZXNbdF0pLnJldGFpbj1lLmN1cnJlbnQ7Zm9yKHQgaW4gdGhpcy5fdGlsZXMpeyhlPXRoaXMuX3RpbGVzW3RdKS5jdXJyZW50JiYhZS5hY3RpdmUmJihpPWUuY29vcmRzLHRoaXMuX3JldGFpblBhcmVudChpLngsaS55LGkueixpLnotNSl8fHRoaXMuX3JldGFpbkNoaWxkcmVuKGkueCxpLnksaS56LGkueisyKSl9Zm9yKHQgaW4gdGhpcy5fdGlsZXMpdGhpcy5fdGlsZXNbdF0ucmV0YWlufHx0aGlzLl9yZW1vdmVUaWxlKHQpfX19LF9yZW1vdmVUaWxlc0F0Wm9vbTpmdW5jdGlvbih0KXtmb3IodmFyIGkgaW4gdGhpcy5fdGlsZXMpdGhpcy5fdGlsZXNbaV0uY29vcmRzLno9PT10JiZ0aGlzLl9yZW1vdmVUaWxlKGkpfSxfcmVtb3ZlQWxsVGlsZXM6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpdGhpcy5fcmVtb3ZlVGlsZSh0KX0sX2ludmFsaWRhdGVBbGw6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fbGV2ZWxzKXJpKHRoaXMuX2xldmVsc1t0XS5lbCksdGhpcy5fb25SZW1vdmVMZXZlbChOdW1iZXIodCkpLGRlbGV0ZSB0aGlzLl9sZXZlbHNbdF07dGhpcy5fcmVtb3ZlQWxsVGlsZXMoKSx0aGlzLl90
24510aWxlWm9vbT12b2lkIDB9LF9yZXRhaW5QYXJlbnQ6ZnVuY3Rpb24odCxpLGUsbil7dmFyIG89TWF0aC5mbG9vcih0LzIpLHM9TWF0aC5mbG9vcihpLzIpLHI9ZS0xLGE9bmV3IGsoK28sK3MpO2Euej0rcjt2YXIgaD10aGlzLl90aWxlQ29vcmRzVG9LZXkoYSksdT10aGlzLl90aWxlc1toXTtyZXR1cm4gdSYmdS5hY3RpdmU/dS5yZXRhaW49ITA6KHUmJnUubG9hZGVkJiYodS5yZXRhaW49ITApLG48ciYmdGhpcy5fcmV0YWluUGFyZW50KG8scyxyLG4pKX0sX3JldGFpbkNoaWxkcmVuOmZ1bmN0aW9uKHQsaSxlLG4pe2Zvcih2YXIgbz0yKnQ7bzwyKnQrMjtvKyspZm9yKHZhciBzPTIqaTtzPDIqaSsyO3MrKyl7dmFyIHI9bmV3IGsobyxzKTtyLno9ZSsxO3ZhciBhPXRoaXMuX3RpbGVDb29yZHNUb0tleShyKSxoPXRoaXMuX3RpbGVzW2FdO2gmJmguYWN0aXZlP2gucmV0YWluPSEwOihoJiZoLmxvYWRlZCYmKGgucmV0YWluPSEwKSxlKzE8biYmdGhpcy5fcmV0YWluQ2hpbGRyZW4obyxzLGUrMSxuKSl9fSxfcmVzZXRWaWV3OmZ1bmN0aW9uKHQpe3ZhciBpPXQmJih0LnBpbmNofHx0LmZseVRvKTt0aGlzLl9zZXRWaWV3KHRoaXMuX21hcC5nZXRDZW50ZXIoKSx0aGlzLl9tYXAuZ2V0Wm9vbSgpLGksaSl9LF9hbmltYXRlWm9vbTpmdW5jdGlvbih0KXt0aGlzLl9zZXRWaWV3KHQuY2VudGVyLHQuem9vbSwhMCx0Lm5vVXBkYXRlKX0sX2NsYW1wWm9vbTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnM7cmV0dXJuIHZvaWQgMCE9PWkubWluTmF0aXZlWm9vbSYmdDxpLm1pbk5hdGl2ZVpvb20/aS5taW5OYXRpdmVab29tOnZvaWQgMCE9PWkubWF4TmF0aXZlWm9vbSYmaS5tYXhOYXRpdmVab29tPHQ/aS5tYXhOYXRpdmVab29tOnR9LF9zZXRWaWV3OmZ1bmN0aW9uKHQsaSxlLG4pe3ZhciBvPU1hdGgucm91bmQoaSksbz12b2lkIDAhPT10aGlzLm9wdGlvbnMubWF4Wm9vbSYmbz50aGlzLm9wdGlvbnMubWF4Wm9vbXx8dm9pZCAwIT09dGhpcy5vcHRpb25zLm1pblpvb20mJm88dGhpcy5vcHRpb25zLm1pblpvb20/dm9pZCAwOnRoaXMuX2NsYW1wWm9vbShvKSxzPXRoaXMub3B0aW9ucy51cGRhdGVXaGVuWm9vbWluZyYmbyE9PXRoaXMuX3RpbGVab29tO24mJiFzfHwodGhpcy5fdGlsZVpvb209byx0aGlzLl9hYm9ydExvYWRpbmcmJnRoaXMuX2Fib3J0TG9hZGluZygpLHRoaXMuX3VwZGF0ZUxldmVscygpLHRoaXMuX3Jlc2V0R3JpZCgpLHZvaWQgMCE9PW8mJnRoaXMuX3VwZGF0ZSh0KSxlfHx0aGlzLl9wcnVuZVRpbGVzKCksdGhpcy5fbm9QcnVuZT0hIWUpLHRoaXMuX3NldFpvb21UcmFuc2Zvcm1zKHQsaSl9LF9zZXRab29tVHJhbnNmb3JtczpmdW5jdGlvbih0LGkpe2Zvcih2YXIgZSBpbiB0aGlzLl9sZXZlbHMpdGhpcy5fc2V0Wm9vbVRyYW5zZm9ybSh0aGlzLl9sZXZlbHNbZV0sdCxpKX0sX3NldFpvb21UcmFuc2Zvcm06ZnVuY3Rpb24odCxpLGUpe3ZhciBuPXRoaXMuX21hcC5nZXRab29tU2NhbGUoZSx0Lnpvb20pLG89dC5vcmlnaW4ubXVsdGlwbHlCeShuKS5zdWJ0cmFjdCh0aGlzLl9tYXAuX2dldE5ld1BpeGVsT3JpZ2luKGksZSkpLnJvdW5kKCk7dnQ/Z2kodC5lbCxvLG4pOnZpKHQuZWwsbyl9LF9yZXNldEdyaWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsaT10Lm9wdGlvbnMuY3JzLGU9dGhpcy5fdGlsZVNpemU9dGhpcy5nZXRUaWxlU2l6ZSgpLG49dGhpcy5fdGlsZVpvb20sbz10aGlzLl9tYXAuZ2V0UGl4ZWxXb3JsZEJvdW5kcyh0aGlzLl90aWxlWm9vbSk7byYmKHRoaXMuX2dsb2JhbFRpbGVSYW5nZT10aGlzLl9weEJvdW5kc1RvVGlsZVJhbmdlKG8pKSx0aGlzLl93cmFwWD1pLndyYXBMbmcmJiF0aGlzLm9wdGlvbnMubm9XcmFwJiZbTWF0aC5mbG9vcih0LnByb2plY3QoWzAsaS53cmFwTG5nWzBdXSxuKS54L2UueCksTWF0aC5jZWlsKHQucHJvamVjdChbMCxpLndyYXBMbmdbMV1dLG4pLngvZS55KV0sdGhpcy5fd3JhcFk9aS53cmFwTGF0JiYhdGhpcy5vcHRpb25zLm5vV3JhcCYmW01hdGguZmxvb3IodC5wcm9qZWN0KFtpLndyYXBMYXRbMF0sMF0sbikueS9lLngpLE1hdGguY2VpbCh0LnByb2plY3QoW2kud3JhcExhdFsxXSwwXSxuKS55L2UueSldfSxfb25Nb3ZlRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYhdGhpcy5fbWFwLl9hbmltYXRpbmdab29tJiZ0aGlzLl91cGRhdGUoKX0sX2dldFRpbGVkUGl4ZWxCb3VuZHM6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLGU9aS5fYW5pbWF0aW5nWm9vbT9NYXRoLm1heChpLl9hbmltYXRlVG9ab29tLGkuZ2V0Wm9vbSgpKTppLmdldFpvb20oKSxuPWkuZ2V0Wm9vbVNjYWxlKGUsdGhpcy5fdGlsZVpvb20pLG89aS5wcm9qZWN0KHQsdGhpcy5fdGlsZVpvb20pLmZsb29yKCkscz1pLmdldFNpemUoKS5kaXZpZGVCeSgyKm4pO3JldHVybiBuZXcgSShvLnN1YnRyYWN0KHMpLG8uYWRkKHMpKX0sX3VwZGF0ZTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXA7aWYoaSl7dmFyIGU9dGhpcy5fY2xhbXBab29tKGkuZ2V0Wm9vbSgpKTtpZih2b2lkIDA9PT10JiYodD1pLmdldENlbnRlcigpKSx2b2lkIDAhPT10aGlzLl90aWxlWm9vbSl7dmFyIG49dGhpcy5fZ2V0VGlsZWRQaXhlbEJvdW5kcyh0KSxvPXRoaXMuX3B4Qm91bmRzVG9UaWxlUmFuZ2Uobikscz1vLmdldENlbnRlcigpLHI9W10sYT10aGlzLm9wdGlvbnMua2VlcEJ1ZmZlcixoPW5ldyBJKG8uZ2V0Qm90dG9tTGVmdCgpLnN1YnRyYWN0KFthLC1hXSksby5nZXRUb3BSaWdodCgpLmFkZChbYSwtYV0pKTtpZighKGlzRmluaXRlKG8ubWluLngpJiZpc0Zpbml0ZShvLm1pbi55KSYmaXNGaW5pdGUoby5tYXgueCkmJmlzRmluaXRlKG8ubWF4LnkpKSl0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0ZWQgdG8gbG9hZCBhbiBpbmZpbml0ZSBudW1iZXIgb2YgdGlsZXNcIik7Zm9yKHZhciB1IGluIHRoaXMuX3RpbGVzKXt2YXIgbD10aGlzLl90aWxlc1t1XS5jb29yZHM7bC56PT09dGhpcy5fdGlsZVpvb20mJmguY29udGFpbnMobmV3IGsobC54LGwueSkpfHwodGhpcy5fdGlsZXNbdV0uY3VycmVudD0hMSl9aWYoMTxNYXRoLmFicyhlLXRoaXMuX3RpbGVab29tKSl0aGlzLl9zZXRWaWV3KHQsZSk7ZWxzZXtmb3IodmFyIGM9by5taW4ueTtjPD1vLm1heC55O2MrKylmb3IodmFyIF89by5taW4ueDtfPD1vLm1heC54O18rKyl7dmFyIGQscD1uZXcgayhfLGMpO3Auej10aGlzLl90
24510aWxlWm9vbSx0aGlzLl9pc1ZhbGlkVGlsZShwKSYmKChkPXRoaXMuX3RpbGVzW3RoaXMuX3RpbGVDb29yZHNUb0tleShwKV0pP2QuY3VycmVudD0hMDpyLnB1c2gocCkpfWlmKHIuc29ydChmdW5jdGlvbih0LGkpe3JldHVybiB0LmRpc3RhbmNlVG8ocyktaS5kaXN0YW5jZVRvKHMpfSksMCE9PXIubGVuZ3RoKXt0aGlzLl9sb2FkaW5nfHwodGhpcy5fbG9hZGluZz0hMCx0aGlzLmZpcmUoXCJsb2FkaW5nXCIpKTtmb3IodmFyIG09ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLF89MDtfPHIubGVuZ3RoO18rKyl0aGlzLl9hZGRUaWxlKHJbX10sbSk7dGhpcy5fbGV2ZWwuZWwuYXBwZW5kQ2hpbGQobSl9fX19fSxfaXNWYWxpZFRpbGU6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLm9wdGlvbnMuY3JzO2lmKCFpLmluZmluaXRlKXt2YXIgZT10aGlzLl9nbG9iYWxUaWxlUmFuZ2U7aWYoIWkud3JhcExuZyYmKHQueDxlLm1pbi54fHx0Lng+ZS5tYXgueCl8fCFpLndyYXBMYXQmJih0Lnk8ZS5taW4ueXx8dC55PmUubWF4LnkpKXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuYm91bmRzKXJldHVybiEwO3ZhciBuPXRoaXMuX3RpbGVDb29yZHNUb0JvdW5kcyh0KTtyZXR1cm4gTih0aGlzLm9wdGlvbnMuYm91bmRzKS5vdmVybGFwcyhuKX0sX2tleVRvQm91bmRzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90aWxlQ29vcmRzVG9Cb3VuZHModGhpcy5fa2V5VG9UaWxlQ29vcmRzKHQpKX0sX3RpbGVDb29yZHNUb053U2U6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLGU9dGhpcy5nZXRUaWxlU2l6ZSgpLG49dC5zY2FsZUJ5KGUpLG89bi5hZGQoZSk7cmV0dXJuW2kudW5wcm9qZWN0KG4sdC56KSxpLnVucHJvamVjdChvLHQueildfSxfdGlsZUNvb3Jkc1RvQm91bmRzOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX3RpbGVDb29yZHNUb053U2UodCksZT1uZXcgUihpWzBdLGlbMV0pO3JldHVybiB0aGlzLm9wdGlvbnMubm9XcmFwfHwoZT10aGlzLl9tYXAud3JhcExhdExuZ0JvdW5kcyhlKSksZX0sX3RpbGVDb29yZHNUb0tleTpmdW5jdGlvbih0KXtyZXR1cm4gdC54K1wiOlwiK3QueStcIjpcIit0Lnp9LF9rZXlUb1RpbGVDb29yZHM6ZnVuY3Rpb24odCl7dmFyIGk9dC5zcGxpdChcIjpcIiksZT1uZXcgaygraVswXSwraVsxXSk7cmV0dXJuIGUuej0raVsyXSxlfSxfcmVtb3ZlVGlsZTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl90aWxlc1t0XTtpJiYocmkoaS5lbCksZGVsZXRlIHRoaXMuX3RpbGVzW3RdLHRoaXMuZmlyZShcInRpbGV1bmxvYWRcIix7dGlsZTppLmVsLGNvb3Jkczp0aGlzLl9rZXlUb1RpbGVDb29yZHModCl9KSl9LF9pbml0VGlsZTpmdW5jdGlvbih0KXtjaSh0LFwibGVhZmxldC10aWxlXCIpO3ZhciBpPXRoaXMuZ2V0VGlsZVNpemUoKTt0LnN0eWxlLndpZHRoPWkueCtcInB4XCIsdC5zdHlsZS5oZWlnaHQ9aS55K1wicHhcIix0Lm9uc2VsZWN0c3RhcnQ9YSx0Lm9ubW91c2Vtb3ZlPWEsaXQmJnRoaXMub3B0aW9ucy5vcGFjaXR5PDEmJm1pKHQsdGhpcy5vcHRpb25zLm9wYWNpdHkpLG90JiYhc3QmJih0LnN0eWxlLldlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eT1cImhpZGRlblwiKX0sX2FkZFRpbGU6ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLl9nZXRUaWxlUG9zKHQpLG49dGhpcy5fdGlsZUNvb3Jkc1RvS2V5KHQpLG89dGhpcy5jcmVhdGVUaWxlKHRoaXMuX3dyYXBDb29yZHModCkscCh0aGlzLl90aWxlUmVhZHksdGhpcyx0KSk7dGhpcy5faW5pdFRpbGUobyksdGhpcy5jcmVhdGVUaWxlLmxlbmd0aDwyJiZNKHAodGhpcy5fdGlsZVJlYWR5LHRoaXMsdCxudWxsLG8pKSx2aShvLGUpLHRoaXMuX3RpbGVzW25dPXtlbDpvLGNvb3Jkczp0LGN1cnJlbnQ6ITB9LGkuYXBwZW5kQ2hpbGQobyksdGhpcy5maXJlKFwidGlsZWxvYWRzdGFydFwiLHt0aWxlOm8sY29vcmRzOnR9KX0sX3RpbGVSZWFkeTpmdW5jdGlvbih0LGksZSl7aSYmdGhpcy5maXJlKFwidGlsZWVycm9yXCIse2Vycm9yOmksdGlsZTplLGNvb3Jkczp0fSk7dmFyIG49dGhpcy5fdGlsZUNvb3Jkc1RvS2V5KHQpOyhlPXRoaXMuX3RpbGVzW25dKSYmKGUubG9hZGVkPStuZXcgRGF0ZSx0aGlzLl9tYXAuX2ZhZGVBbmltYXRlZD8obWkoZS5lbCwwKSx6KHRoaXMuX2ZhZGVGcmFtZSksdGhpcy5fZmFkZUZyYW1lPU0odGhpcy5fdXBkYXRlT3BhY2l0eSx0aGlzKSk6KGUuYWN0aXZlPSEwLHRoaXMuX3BydW5lVGlsZXMoKSksaXx8KGNpKGUuZWwsXCJsZWFmbGV0LXRpbGUtbG9hZGVkXCIpLHRoaXMuZmlyZShcInRpbGVsb2FkXCIse3RpbGU6ZS5lbCxjb29yZHM6dH0pKSx0aGlzLl9ub1RpbGVzVG9Mb2FkKCkmJih0aGlzLl9sb2FkaW5nPSExLHRoaXMuZmlyZShcImxvYWRcIiksaXR8fCF0aGlzLl9tYXAuX2ZhZGVBbmltYXRlZD9NKHRoaXMuX3BydW5lVGlsZXMsdGhpcyk6c2V0VGltZW91dChwKHRoaXMuX3BydW5lVGlsZXMsdGhpcyksMjUwKSkpfSxfZ2V0VGlsZVBvczpmdW5jdGlvbih0KXtyZXR1cm4gdC5zY2FsZUJ5KHRoaXMuZ2V0VGlsZVNpemUoKSkuc3VidHJhY3QodGhpcy5fbGV2ZWwub3JpZ2luKX0sX3dyYXBDb29yZHM6ZnVuY3Rpb24odCl7dmFyIGk9bmV3IGsodGhpcy5fd3JhcFg/byh0LngsdGhpcy5fd3JhcFgpOnQueCx0aGlzLl93cmFwWT9vKHQueSx0aGlzLl93cmFwWSk6dC55KTtyZXR1cm4gaS56PXQueixpfSxfcHhCb3VuZHNUb1RpbGVSYW5nZTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmdldFRpbGVTaXplKCk7cmV0dXJuIG5ldyBJKHQubWluLnVuc2NhbGVCeShpKS5mbG9vcigpLHQubWF4LnVuc2NhbGVCeShpKS5jZWlsKCkuc3VidHJhY3QoWzEsMV0pKX0sX25vVGlsZXNUb0xvYWQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpaWYoIXRoaXMuX3RpbGVzW3RdLmxvYWRlZClyZXR1cm4hMTtyZXR1cm4hMH19KTt2YXIgc249b24uZXh0ZW5kKHtvcHRpb25zOnttaW5ab29tOjAsbWF4Wm9vbToxOCxzdWJkb21haW5zOlwiYWJjXCIsZXJyb3JUaWxlVXJsOlwiXCIsem9vbU9mZnNldDowLHRtczohMSx6b29tUmV2ZXJzZTohMSxkZXRlY3RSZXRpbmE6ITEsY3Jvc3NPcmlnaW46ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpKXt0aGlzLl91cmw9dCwoaT1jKHRoaXMsaSkpLmRldGVjdFJldGluYSYmenQmJjA8aS5tYXhab29tJiYoaS50aWxlU2l6ZT1NYXRoLmZsb29yKGkudGlsZVNpemUvMiksaS56b29tUmV2ZXJzZT8oaS56b29tT2Zmc2V0LS0saS5taW5ab29tKyspOihpLnpvb21PZmZzZXQrKyxpLm1heFpvb20tLSksaS5taW5ab29tPU1
24510hdGgubWF4KDAsaS5taW5ab29tKSksXCJzdHJpbmdcIj09dHlwZW9mIGkuc3ViZG9tYWlucyYmKGkuc3ViZG9tYWlucz1pLnN1YmRvbWFpbnMuc3BsaXQoXCJcIikpLG90fHx0aGlzLm9uKFwidGlsZXVubG9hZFwiLHRoaXMuX29uVGlsZVJlbW92ZSl9LHNldFVybDpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl91cmw9PT10JiZ2b2lkIDA9PT1pJiYoaT0hMCksdGhpcy5fdXJsPXQsaXx8dGhpcy5yZWRyYXcoKSx0aGlzfSxjcmVhdGVUaWxlOmZ1bmN0aW9uKHQsaSl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtyZXR1cm4gemkoZSxcImxvYWRcIixwKHRoaXMuX3RpbGVPbkxvYWQsdGhpcyxpLGUpKSx6aShlLFwiZXJyb3JcIixwKHRoaXMuX3RpbGVPbkVycm9yLHRoaXMsaSxlKSksIXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiYmXCJcIiE9PXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbnx8KGUuY3Jvc3NPcmlnaW49ITA9PT10aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4/XCJcIjp0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4pLGUuYWx0PVwiXCIsZS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJwcmVzZW50YXRpb25cIiksZS5zcmM9dGhpcy5nZXRUaWxlVXJsKHQpLGV9LGdldFRpbGVVcmw6ZnVuY3Rpb24odCl7dmFyIGksZT17cjp6dD9cIkAyeFwiOlwiXCIsczp0aGlzLl9nZXRTdWJkb21haW4odCkseDp0LngseTp0Lnksejp0aGlzLl9nZXRab29tRm9yVXJsKCl9O3JldHVybiB0aGlzLl9tYXAmJiF0aGlzLl9tYXAub3B0aW9ucy5jcnMuaW5maW5pdGUmJihpPXRoaXMuX2dsb2JhbFRpbGVSYW5nZS5tYXgueS10LnksdGhpcy5vcHRpb25zLnRtcyYmKGUueT1pKSxlW1wiLXlcIl09aSksZih0aGlzLl91cmwsaChlLHRoaXMub3B0aW9ucykpfSxfdGlsZU9uTG9hZDpmdW5jdGlvbih0LGkpe2l0P3NldFRpbWVvdXQocCh0LHRoaXMsbnVsbCxpKSwwKTp0KG51bGwsaSl9LF90aWxlT25FcnJvcjpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5vcHRpb25zLmVycm9yVGlsZVVybDtuJiZpLmdldEF0dHJpYnV0ZShcInNyY1wiKSE9PW4mJihpLnNyYz1uKSx0KGUsaSl9LF9vblRpbGVSZW1vdmU6ZnVuY3Rpb24odCl7dC50aWxlLm9ubG9hZD1udWxsfSxfZ2V0Wm9vbUZvclVybDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RpbGVab29tLGk9dGhpcy5vcHRpb25zLm1heFpvb207cmV0dXJuIHRoaXMub3B0aW9ucy56b29tUmV2ZXJzZSYmKHQ9aS10KSx0K3RoaXMub3B0aW9ucy56b29tT2Zmc2V0fSxfZ2V0U3ViZG9tYWluOmZ1bmN0aW9uKHQpe3ZhciBpPU1hdGguYWJzKHQueCt0LnkpJXRoaXMub3B0aW9ucy5zdWJkb21haW5zLmxlbmd0aDtyZXR1cm4gdGhpcy5vcHRpb25zLnN1YmRvbWFpbnNbaV19LF9hYm9ydExvYWRpbmc6ZnVuY3Rpb24oKXt2YXIgdCxpO2Zvcih0IGluIHRoaXMuX3RpbGVzKXRoaXMuX3RpbGVzW3RdLmNvb3Jkcy56IT09dGhpcy5fdGlsZVpvb20mJigoaT10aGlzLl90
24510aWxlc1t0XS5lbCkub25sb2FkPWEsaS5vbmVycm9yPWEsaS5jb21wbGV0ZXx8KGkuc3JjPXkscmkoaSksZGVsZXRlIHRoaXMuX3RpbGVzW3RdKSl9LF9yZW1vdmVUaWxlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX3RpbGVzW3RdO2lmKGkpcmV0dXJuIGF0fHxpLmVsLnNldEF0dHJpYnV0ZShcInNyY1wiLHkpLG9uLnByb3RvdHlwZS5fcmVtb3ZlVGlsZS5jYWxsKHRoaXMsdCl9LF90aWxlUmVhZHk6ZnVuY3Rpb24odCxpLGUpe2lmKHRoaXMuX21hcCYmKCFlfHxlLmdldEF0dHJpYnV0ZShcInNyY1wiKSE9PXkpKXJldHVybiBvbi5wcm90b3R5cGUuX3RpbGVSZWFkeS5jYWxsKHRoaXMsdCxpLGUpfX0pO2Z1bmN0aW9uIHJuKHQsaSl7cmV0dXJuIG5ldyBzbih0LGkpfXZhciBhbj1zbi5leHRlbmQoe2RlZmF1bHRXbXNQYXJhbXM6e3NlcnZpY2U6XCJXTVNcIixyZXF1ZXN0OlwiR2V0TWFwXCIsbGF5ZXJzOlwiXCIsc3R5bGVzOlwiXCIsZm9ybWF0OlwiaW1hZ2UvanBlZ1wiLHRyYW5zcGFyZW50OiExLHZlcnNpb246XCIxLjEuMVwifSxvcHRpb25zOntjcnM6bnVsbCx1cHBlcmNhc2U6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpKXt0aGlzLl91cmw9dDt2YXIgZT1oKHt9LHRoaXMuZGVmYXVsdFdtc1BhcmFtcyk7Zm9yKHZhciBuIGluIGkpbiBpbiB0aGlzLm9wdGlvbnN8fChlW25dPWlbbl0pO3ZhciBvPShpPWModGhpcyxpKSkuZGV0ZWN0UmV0aW5hJiZ6dD8yOjEscz10aGlzLmdldFRpbGVTaXplKCk7ZS53aWR0aD1zLngqbyxlLmhlaWdodD1zLnkqbyx0aGlzLndtc1BhcmFtcz1lfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9jcnM9dGhpcy5vcHRpb25zLmNyc3x8dC5vcHRpb25zLmNycyx0aGlzLl93bXNWZXJzaW9uPXBhcnNlRmxvYXQodGhpcy53bXNQYXJhbXMudmVyc2lvbik7dmFyIGk9MS4zPD10aGlzLl93bXNWZXJzaW9uP1wiY3JzXCI6XCJzcnNcIjt0aGlzLndtc1BhcmFtc1tpXT10aGlzLl9jcnMuY29kZSxzbi5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLHQpfSxnZXRUaWxlVXJsOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX3RpbGVDb29yZHNUb053U2UodCksZT10aGlzLl9jcnMsbj1PKGUucHJvamVjdChpWzBdKSxlLnByb2plY3QoaVsxXSkpLG89bi5taW4scz1uLm1heCxyPSgxLjM8PXRoaXMuX3dtc1ZlcnNpb24mJnRoaXMuX2Nycz09PWJlP1tvLnksby54LHMueSxzLnhdOltvLngsby55LHMueCxzLnldKS5qb2luKFwiLFwiKSxhPXNuLnByb3RvdHlwZS5nZXRUaWxlVXJsLmNhbGwodGhpcyx0KTtyZXR1cm4gYStfKHRoaXMud21zUGFyYW1zLGEsdGhpcy5vcHRpb25zLnVwcGVyY2FzZSkrKHRoaXMub3B0aW9ucy51cHBlcmNhc2U/XCImQkJPWD1cIjpcIiZiYm94PVwiKStyfSxzZXRQYXJhbXM6ZnVuY3Rpb24odCxpKXtyZXR1cm4gaCh0aGlzLndtc1BhcmFtcyx0KSxpfHx0aGlzLnJlZHJhdygpLHRoaXN9fSk7c24uV01TPWFuLHJuLndtcz1mdW5jdGlvbih0LGkpe3JldHVybiBuZXcgYW4odCxpKX07dmFyIGhuPU1lLmV4dGVuZCh7b3B0aW9uczp7cGFkZGluZzouMSx0b2xlcmFuY2U6MH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXtjKHRoaXMsdCksbSh0aGlzKSx0aGlzLl9sYXllcnM9dGhpcy5fbGF5ZXJzfHx7fX0sb25BZGQ6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXJ8fCh0aGlzLl9pbml0Q29udGFpbmVyKCksdGhpcy5fem9vbUFuaW1hdGVkJiZjaSh0aGlzLl9jb250YWluZXIsXCJsZWFmbGV0LXpvb20tYW5pbWF0ZWRcIikpLHRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fdXBkYXRlKCksdGhpcy5vbihcInVwZGF0ZVwiLHRoaXMuX3VwZGF0ZVBhdGhzLHRoaXMpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMub2ZmKFwidXBkYXRlXCIsdGhpcy5fdXBkYXRlUGF0aHMsdGhpcyksdGhpcy5fZGVzdHJveUNvbnRhaW5lcigpfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD17dmlld3Jlc2V0OnRoaXMuX3Jlc2V0LHpvb206dGhpcy5fb25ab29tLG1vdmVlbmQ6dGhpcy5fdXBkYXRlLHpvb21lbmQ6dGhpcy5fb25ab29tRW5kfTtyZXR1cm4gdGhpcy5fem9vbUFuaW1hdGVkJiYodC56b29tYW5pbT10aGlzLl9vbkFuaW1ab29tKSx0fSxfb25BbmltWm9vbTpmdW5jdGlvbih0KXt0aGlzLl91cGRhdGVUcmFuc2Zvcm0odC5jZW50ZXIsdC56b29tKX0sX29uWm9vbTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVRyYW5zZm9ybSh0aGlzLl9tYXAuZ2V0Q2VudGVyKCksdGhpcy5fbWFwLmdldFpvb20oKSl9LF91cGRhdGVUcmFuc2Zvcm06ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKGksdGhpcy5fem9vbSksbj15aSh0aGlzLl9jb250YWluZXIpLG89dGhpcy5fbWFwLmdldFNpemUoKS5tdWx0aXBseUJ5KC41K3RoaXMub3B0aW9ucy5wYWRkaW5nKSxzPXRoaXMuX21hcC5wcm9qZWN0KHRoaXMuX2NlbnRlcixpKSxyPXRoaXMuX21hcC5wcm9qZWN0KHQsaSkuc3VidHJhY3QocyksYT1vLm11bHRpcGx5QnkoLWUpLmFkZChuKS5hZGQobykuc3VidHJhY3Qocik7dnQ/Z2kodGhpcy5fY29udGFpbmVyLGEsZSk6dmkodGhpcy5fY29udGFpbmVyLGEpfSxfcmVzZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fdXBkYXRlKCksdGhpcy5fdXBkYXRlVHJhbnNmb3JtKHRoaXMuX2NlbnRlcix0aGlzLl96b29tKSx0aGlzLl9sYXllcnMpdGhpcy5fbGF5ZXJzW3RdLl9yZXNldCgpfSxfb25ab29tRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbdF0uX3Byb2plY3QoKX0sX3VwZGF0ZVBhdGhzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbdF0uX3VwZGF0ZSgpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnBhZGRpbmcsaT10aGlzLl9tYXAuZ2V0U2l6ZSgpLGU9dGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KGkubXVsdGlwbHlCeSgtdCkpLnJvdW5kKCk7dGhpcy5fYm91bmRzPW5ldyBJKGUsZS5hZGQoaS5tdWx0aXBseUJ5KDErMip0KSkucm91bmQoKSksdGhpcy5fY2VudGVyPXRoaXMuX21hcC5nZXRDZW50ZXIoKSx0aGlzLl96b29tPXRoaXMuX21hcC5nZXRab29tKCl9fSksdW49aG4uZXh0ZW5kKHtnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD1obi5wcm90b3R5cGUuZ2V0RXZlbnRzLmNhbGwodGhpcyk7cmV0dXJuIHQudmlld3ByZXJlc2V0PXRoaXMuX29uVmlld1ByZVJlc2V0LHR9LF9vblZpZXdQcmVSZXNldDpmdW5jdGlvbigpe3RoaXMuX3Bvc3Rwb25lVXBkYXRlUGF0aHM9ITB9LG9uQWRkOmZ1bmN0aW9uKCl7aG4ucHJvdG90eXBlLm9uQWRkLmNhbGwodGhpcyksdGhpcy5fZHJhdygpfSxfaW5pdENvbnRhaW5lcjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO3ppKHQsXCJtb3VzZW1vdmVcIix0aGlzLl9vbk1vdXNlTW92ZSx0aGlzKSx6aSh0LFwiY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgY29udGV4dG1lbnVcIix0aGlzLl9vbkNsaWNrLHRoaXMpLHppKHQsXCJtb3VzZW91dFwiLHRoaXMuX2hhbmRsZU1vdXNlT3V0LHRoaXMpLHRoaXMuX2N0eD10LmdldENvbnRleHQoXCIyZFwiKX0sX2Rlc3Ryb3lDb250YWluZXI6ZnVuY3Rpb24oKXt6KHRoaXMuX3JlZHJhd1JlcXVlc3QpLGRlbGV0ZSB0aGlzLl9jdHgscmkodGhpcy5fY29udGFpbmVyKSxTaSh0aGlzLl9jb250YWluZXIpLGRlbGV0ZSB0aGlzLl9jb250YWluZXJ9LF91cGRhdGVQYXRoczpmdW5jdGlvbigpe2lmKCF0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzKXtmb3IodmFyIHQgaW4gdGhpcy5fcmVkcmF3Qm91bmRzPW51bGwsdGhpcy5fbGF5ZXJzKXRoaXMuX2xheWVyc1t0XS5fdXBkYXRlKCk7dGhpcy5fcmVkcmF3KCl9fSxfdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQsaSxlLG47dGhpcy5fbWFwLl9hbmltYXRpbmdab29tJiZ0aGlzLl9ib3VuZHN8fChobi5wcm90b3R5cGUuX3VwZGF0ZS5jYWxsKHRoaXMpLHQ9dGhpcy5fYm91bmRzLGk9dGhpcy5fY29udGFpbmVyLGU9dC5nZXRTaXplKCksbj16dD8yOjEsdmkoaSx0Lm1pbiksaS53aWR0aD1uKmUueCxpLmhlaWdodD1uKmUueSxpLnN0eWxlLndpZHRoPWUueCtcInB4XCIsaS5zdHlsZS5oZWlnaHQ9ZS55K1wicHhcIix6dCYmdGhpcy5fY3R4LnNjYWxlKDIsMiksdGhpcy5fY3R4LnRyYW5zbGF0ZSgtdC5taW4ueCwtdC5taW4ueSksdGhpcy5maXJlKFwidXBkYXRlXCIpKX0sX3Jlc2V0OmZ1bmN0aW9uKCl7aG4ucHJvdG90eXBlLl9yZXNldC5jYWxsKHRoaXMpLHRoaXMuX3Bvc3Rwb25lVXBkYXRlUGF0aHMmJih0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzPSExLHRoaXMuX3VwZGF0ZVBhdGhzKCkpfSxfaW5pdFBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlRGFzaEFycmF5KHQpO3ZhciBpPSh0aGlzLl9sYXllcnNbbSh0KV09dCkuX29yZGVyPXtsYXllcjp0LHByZXY6dGhpcy5fZHJhd0xhc3QsbmV4dDpudWxsfTt0aGlzLl9kcmF3TGFzdCYmKHRoaXMuX2RyYXdMYXN0Lm5leHQ9aSksdGhpcy5fZHJhd0xhc3Q9aSx0aGlzLl9kcmF3Rmlyc3Q9dGhpcy5fZHJhd0ZpcnN0fHx0aGlzLl9kcmF3TGFzdH0sX2FkZFBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fcmVxdWVzdFJlZHJhdyh0KX0sX3JlbW92ZVBhdGg6ZnVuY3Rpb24odCl7dmFyIGk9dC5fb3JkZXIsZT1pLm5leHQsbj1pLnByZXY7ZT9lLnByZXY9bjp0aGlzLl9kcmF3TGFzdD1uLG4/bi5uZXh0PWU6dGhpcy5fZHJhd0ZpcnN0PWUsZGVsZXRlIHQuX29yZGVyLGRlbGV0ZSB0aGlzLl9sYXllcnNbbSh0KV0sdGhpcy5fcmVxdWVzdFJlZHJhdyh0KX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fZXh0ZW5kUmVkcmF3Qm91bmRzKHQpLHQuX3Byb2plY3QoKSx0Ll91cGRhdGUoKSx0aGlzLl9yZXF1ZXN0UmVkcmF3KHQpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlRGFzaEFycmF5KHQpLHRoaXMuX3JlcXVlc3RSZWRyYXcodCl9LF91cGRhdGVEYXNoQXJyYXk6ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQub3B0aW9ucy5kYXNoQXJyYXkpe2Zvcih2YXIgaSxlPXQub3B0aW9ucy5kYXNoQXJyYXkuc3BsaXQoL1ssIF0rLyksbj1bXSxvPTA7bzxlLmxlbmd0aDtvKyspe2lmKGk9TnVtYmVyKGVbb10pLGlzTmFOKGkpKXJldHVybjtuLnB1c2goaSl9dC5vcHRpb25zLl9kYXNoQXJyYXk9bn1lbHNlI
24510HQub3B0aW9ucy5fZGFzaEFycmF5PXQub3B0aW9ucy5kYXNoQXJyYXl9LF9yZXF1ZXN0UmVkcmF3OmZ1bmN0aW9uKHQpe3RoaXMuX21hcCYmKHRoaXMuX2V4dGVuZFJlZHJhd0JvdW5kcyh0KSx0aGlzLl9yZWRyYXdSZXF1ZXN0PXRoaXMuX3JlZHJhd1JlcXVlc3R8fE0odGhpcy5fcmVkcmF3LHRoaXMpKX0sX2V4dGVuZFJlZHJhd0JvdW5kczpmdW5jdGlvbih0KXt2YXIgaTt0Ll9weEJvdW5kcyYmKGk9KHQub3B0aW9ucy53ZWlnaHR8fDApKzEsdGhpcy5fcmVkcmF3Qm91bmRzPXRoaXMuX3JlZHJhd0JvdW5kc3x8bmV3IEksdGhpcy5fcmVkcmF3Qm91bmRzLmV4dGVuZCh0Ll9weEJvdW5kcy5taW4uc3VidHJhY3QoW2ksaV0pKSx0aGlzLl9yZWRyYXdCb3VuZHMuZXh0ZW5kKHQuX3B4Qm91bmRzLm1heC5hZGQoW2ksaV0pKSl9LF9yZWRyYXc6ZnVuY3Rpb24oKXt0aGlzLl9yZWRyYXdSZXF1ZXN0PW51bGwsdGhpcy5fcmVkcmF3Qm91bmRzJiYodGhpcy5fcmVkcmF3Qm91bmRzLm1pbi5fZmxvb3IoKSx0aGlzLl9yZWRyYXdCb3VuZHMubWF4Ll9jZWlsKCkpLHRoaXMuX2NsZWFyKCksdGhpcy5fZHJhdygpLHRoaXMuX3JlZHJhd0JvdW5kcz1udWxsfSxfY2xlYXI6ZnVuY3Rpb24oKXt2YXIgdCxpPXRoaXMuX3JlZHJhd0JvdW5kcztpPyh0PWkuZ2V0U2l6ZSgpLHRoaXMuX2N0eC5jbGVhclJlY3QoaS5taW4ueCxpLm1pbi55LHQueCx0LnkpKToodGhpcy5fY3R4LnNhdmUoKSx0aGlzLl9jdHguc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSx0aGlzLl9jdHguY2xlYXJSZWN0KDAsMCx0aGlzLl9jb250YWluZXIud2lkdGgsdGhpcy5fY29udGFpbmVyLmhlaWdodCksdGhpcy5fY3R4LnJlc3RvcmUoKSl9LF9kcmF3OmZ1bmN0aW9uKCl7dmFyIHQsaSxlPXRoaXMuX3JlZHJhd0JvdW5kczt0aGlzLl9jdHguc2F2ZSgpLGUmJihpPWUuZ2V0U2l6ZSgpLHRoaXMuX2N0eC5iZWdpblBhdGgoKSx0aGlzLl9jdHgucmVjdChlLm1pbi54LGUubWluLnksaS54LGkueSksdGhpcy5fY3R4LmNsaXAoKSksdGhpcy5fZHJhd2luZz0hMDtmb3IodmFyIG49dGhpcy5fZHJhd0ZpcnN0O247bj1uLm5leHQpdD1uLmxheWVyLCghZXx8dC5fcHhCb3VuZHMmJnQuX3B4Qm91bmRzLmludGVyc2VjdHMoZSkpJiZ0Ll91cGRhdGVQYXRoKCk7dGhpcy5fZHJhd2luZz0hMSx0aGlzLl9jdHgucmVzdG9yZSgpfSxfdXBkYXRlUG9seTpmdW5jdGlvbih0LGkpe2lmKHRoaXMuX2RyYXdpbmcpe3ZhciBlLG4sbyxzLHI9dC5fcGFydHMsYT1yLmxlbmd0aCxoPXRoaXMuX2N0eDtpZihhKXtmb3IoaC5iZWdpblBhdGgoKSxlPTA7ZTxhO2UrKyl7Zm9yKG49MCxvPXJbZV0ubGVuZ3RoO248bztuKyspcz1yW2VdW25dLGhbbj9cImxpbmVUb1wiOlwibW92ZVRvXCJdKHMueCxzLnkpO2kmJmguY2xvc2VQYXRoKCl9dGhpcy5fZmlsbFN0cm9rZShoLHQpfX19LF91cGRhdGVDaXJjbGU6ZnVuY3Rpb24odCl7dmFyIGksZSxuLG87dGhpcy5fZHJhd2luZyYmIXQuX2VtcHR5KCkmJihpPXQuX3BvaW50LGU9dGhpcy5fY3R4LG49TWF0aC5tYXgoTWF0aC5yb3VuZCh0Ll9yYWRpdXMpLDEpLDEhPShvPShNYXRoLm1heChNYXRoLnJvdW5kKHQuX3JhZGl1c1kpLDEpfHxuKS9uKSYmKGUuc2F2ZSgpLGUuc2NhbGUoMSxvKSksZS5iZWdpblBhdGgoKSxlLmFyYyhpLngsaS55L28sbiwwLDIqTWF0aC5QSSwhMSksMSE9byYmZS5yZXN0b3JlKCksdGhpcy5fZmlsbFN0cm9rZShlLHQpKX0sX2ZpbGxTdHJva2U6ZnVuY3Rpb24odCxpKXt2YXIgZT1pLm9wdGlvbnM7ZS5maWxsJiYodC5nbG9iYWxBbHBoYT1lLmZpbGxPcGFjaXR5LHQuZmlsbFN0eWxlPWUuZmlsbENvbG9yfHxlLmNvbG9yLHQuZmlsbChlLmZpbGxSdWxlfHxcImV2ZW5vZGRcIikpLGUuc3Ryb2tlJiYwIT09ZS53ZWlnaHQmJih0LnNldExpbmVEYXNoJiZ0LnNldExpbmVEYXNoKGkub3B0aW9ucyYmaS5vcHRpb25zLl9kYXNoQXJyYXl8fFtdKSx0Lmdsb2JhbEFscGhhPWUub3BhY2l0eSx0LmxpbmVXaWR0aD1lLndlaWdodCx0LnN0cm9rZVN0eWxlPWUuY29sb3IsdC5saW5lQ2FwPWUubGluZUNhcCx0LmxpbmVKb2luPWUubGluZUpvaW4sdC5zdHJva2UoKSl9LF9vbkNsaWNrOmZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxlLG49dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodCksbz10aGlzLl9kcmF3Rmlyc3Q7bztvPW8ubmV4dCkoaT1vLmxheWVyKS5vcHRpb25zLmludGVyYWN0aXZlJiZpLl9jb250YWluc1BvaW50KG4pJiYoKFwiY2xpY2tcIj09PXQudHlwZXx8XCJwcmVjbGlja1wiIT09dC50eXBlKSYmdGhpcy5fbWFwLl9kcmFnZ2FibGVNb3ZlZChpKXx8KGU9aSkpO2UmJihGaSh0KSx0aGlzLl9maXJlRXZlbnQoW2VdLHQpKX0sX29uTW91c2VNb3ZlOmZ1bmN0aW9uKHQpe3ZhciBpOyF0aGlzLl9tYXB8fHRoaXMuX21hcC5kcmFnZ2luZy5tb3ZpbmcoKXx8dGhpcy5fbWFwLl9hbmltYXRpbmdab29tfHwoaT10aGlzLl9tYXAubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0KSx0aGlzLl9oYW5kbGVNb3VzZUhvdmVyKHQsaSkpfSxfaGFuZGxlTW91c2VPdXQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5faG92ZXJlZExheWVyO2kmJihfaSh0aGlzLl9jb250YWluZXIsXCJsZWFmbGV0LWludGVyYWN0aXZlXCIpLHRoaXMuX2ZpcmVFdmVudChbaV0sdCxcIm1vdXNlb3V0XCIpLHRoaXMuX2hvdmVyZWRMYXllcj1udWxsLHRoaXMuX21vdXNlSG92ZXJUaHJvdHRsZWQ9ITEpfSxfaGFuZGxlTW91c2VIb3ZlcjpmdW5jdGlvbih0LGkpe2lmKCF0aGlzLl9tb3VzZUhvdmVyVGhyb3R0bGVkKXtmb3IodmFyIGUsbixvPXRoaXMuX2RyYXdGaXJzdDtvO289by5uZXh0KShlPW8ubGF5ZXIpLm9wdGlvbnMuaW50ZXJhY3RpdmUmJmUuX2NvbnRhaW5zUG9pbnQoaSkmJihuPWUpO24hPT10aGlzLl9ob3ZlcmVkTGF5ZXImJih0aGlzLl9oYW5kbGVNb3VzZU91dCh0KSxuJiYoY2kodGhpcy5fY29udGFpbmVyLFwibGVhZmxldC1pbnRlcmFjdGl2ZVwiKSx0aGlzLl9maXJlRXZlbnQoW25dLHQsXCJtb3VzZW92ZXJcIiksdGhpcy5faG92ZXJlZExheWVyPW4pKSx0aGlzLl9ob3ZlcmVkTGF5ZXImJnRoaXMuX2ZpcmVFdmVudChbdGhpcy5faG92ZXJlZExheWVyXSx0KSx0aGlzLl9tb3VzZUhvdmVyVGhyb3R0bGVkPSEwLHNldFRpbWVvdXQocChmdW5jdGlvbigpe3RoaXMuX21vdXNlSG92ZXJUaHJvdHRsZWQ9ITF9LHRoaXMpLDMyKX19LF9maXJlRXZlbnQ6ZnVuY3Rpb24odCxpLGUpe3RoaXMuX21hcC5fZmlyZURPTUV2ZW50KGksZXx8aS50eXBlLHQpfSxfYnJpbmdUb0Zyb250OmZ1bmN0aW9uKHQpe3ZhciBpLGUsbj10Ll9vcmRlcjtuJiYoaT1uLm5leHQsZT1uLnByZXYsaSYmKChpLnByZXY9ZSk/ZS5uZXh0PWk6aSYmKHR
24510oaXMuX2RyYXdGaXJzdD1pKSxuLnByZXY9dGhpcy5fZHJhd0xhc3QsKHRoaXMuX2RyYXdMYXN0Lm5leHQ9bikubmV4dD1udWxsLHRoaXMuX2RyYXdMYXN0PW4sdGhpcy5fcmVxdWVzdFJlZHJhdyh0KSkpfSxfYnJpbmdUb0JhY2s6ZnVuY3Rpb24odCl7dmFyIGksZSxuPXQuX29yZGVyO24mJihpPW4ubmV4dCwoZT1uLnByZXYpJiYoKGUubmV4dD1pKT9pLnByZXY9ZTplJiYodGhpcy5fZHJhd0xhc3Q9ZSksbi5wcmV2PW51bGwsbi5uZXh0PXRoaXMuX2RyYXdGaXJzdCx0aGlzLl9kcmF3Rmlyc3QucHJldj1uLHRoaXMuX2RyYXdGaXJzdD1uLHRoaXMuX3JlcXVlc3RSZWRyYXcodCkpKX19KTtmdW5jdGlvbiBsbih0KXtyZXR1cm4gU3Q/bmV3IHVuKHQpOm51bGx9dmFyIGNuPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBkb2N1bWVudC5uYW1lc3BhY2VzLmFkZChcImx2bWxcIixcInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sXCIpLGZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiPGx2bWw6XCIrdCsnIGNsYXNzPVwibHZtbFwiPicpfX1jYXRjaCh0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCI8XCIrdCsnIHhtbG5zPVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LmNvbTp2bWxcIiBjbGFzcz1cImx2bWxcIj4nKX19fSgpLF9uPXtfaW5pdENvbnRhaW5lcjpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lcj1zaShcImRpdlwiLFwibGVhZmxldC12bWwtY29udGFpbmVyXCIpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLl9hbmltYXRpbmdab29tfHwoaG4ucHJvdG90eXBlLl91cGRhdGUuY2FsbCh0aGlzKSx0aGlzLmZpcmUoXCJ1cGRhdGVcIikpfSxfaW5pdFBhdGg6ZnVuY3Rpb24odCl7dmFyIGk9dC5fY29udGFpbmVyPWNuKFwic2hhcGVcIik7Y2koaSxcImxlYWZsZXQtdm1sLXNoYXBlIFwiKyh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfHxcIlwiKSksaS5jb29yZHNpemU9XCIxIDFcIix0Ll9wYXRoPWNuKFwicGF0aFwiKSxpLmFwcGVuZENoaWxkKHQuX3BhdGgpLHRoaXMuX3VwZGF0ZVN0eWxlKHQpLHRoaXMuX2xheWVyc1ttKHQpXT10fSxfYWRkUGF0aDpmdW5jdGlvbih0KXt2YXIgaT10Ll9jb250YWluZXI7dGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGkpLHQub3B0aW9ucy5pbnRlcmFjdGl2ZSYmdC5hZGRJbnRlcmFjdGl2ZVRhcmdldChpKX0sX3JlbW92ZVBhdGg6ZnVuY3Rpb24odCl7dmFyIGk9dC5fY29udGFpbmVyO3JpKGkpLHQucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQoaSksZGVsZXRlIHRoaXMuX2xheWVyc1ttKHQpXX0sX3VwZGF0ZVN0eWxlOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX3N0cm9rZSxlPXQuX2ZpbGwsbj10Lm9wdGlvbnMsbz10Ll9jb250YWluZXI7by5zdHJva2VkPSEhbi5zdHJva2Usby5maWxsZWQ9ISFuLmZpbGwsbi5zdHJva2U/KGk9aXx8KHQuX3N0cm9rZT1jbihcInN0cm9rZVwiKSksby5hcHBlbmRDaGlsZChpKSxpLndlaWdodD1uLndlaWdodCtcInB4XCIsaS5jb2xvcj1uLmNvbG9yLGkub3BhY2l0eT1uLm9wYWNpdHksbi5kYXNoQXJyYXk/aS5kYXNoU3R5bGU9ZyhuLmRhc2hBcnJheSk/bi5kYXNoQXJyYXkuam9pbihcIiBcIik6bi5kYXNoQXJyYXkucmVwbGFjZSgvKCAqLCAqKS9nLFwiIFwiKTppLmRhc2hTdHlsZT1cIlwiLGkuZW5kY2FwPW4ubGluZUNhcC5yZXBsYWNlKFwiYnV0dFwiLFwiZmxhdFwiKSxpLmpvaW5zdHlsZT1uLmxpbmVKb2luKTppJiYoby5yZW1vdmVDaGlsZChpKSx0Ll9zdHJva2U9bnVsbCksbi5maWxsPyhlPWV8fCh0Ll9maWxsPWNuKFwiZmlsbFwiKSksby5hcHBlbmRDaGlsZChlKSxlLmNvbG9yPW4uZmlsbENvbG9yfHxuLmNvbG9yLGUub3BhY2l0eT1uLmZpbGxPcGFjaXR5KTplJiYoby5yZW1vdmVDaGlsZChlKSx0Ll9maWxsPW51bGwpfSxfdXBkYXRlQ2lyY2xlOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX3BvaW50LnJvdW5kKCksZT1NYXRoLnJvdW5kKHQuX3JhZGl1cyksbj1NYXRoLnJvdW5kKHQuX3JhZGl1c1l8fGUpO3RoaXMuX3NldFBhdGgodCx0Ll9lbXB0eSgpP1wiTTAgMFwiOlwiQUwgXCIraS54K1wiLFwiK2kueStcIiBcIitlK1wiLFwiK24rXCIgMCwyMzU5MjYwMFwiKX0sX3NldFBhdGg6ZnVuY3Rpb24odCxpKXt0Ll9wYXRoLnY9aX0sX2JyaW5nVG9Gcm9udDpmdW5jdGlvbih0KXtoaSh0Ll9jb250YWluZXIpfSxfYnJpbmdUb0JhY2s6ZnVuY3Rpb24odCl7dWkodC5fY29udGFpbmVyKX19LGRuPUV0P2NuOkoscG49aG4uZXh0ZW5kKHtnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD1obi5wcm90b3R5cGUuZ2V0RXZlbnRzLmNhbGwodGhpcyk7cmV0dXJuIHQuem9vbXN0YXJ0PXRoaXMuX29uWm9vbVN0YXJ0LHR9LF9pbml0Q29udGFpbmVyOmZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyPWRuKFwic3ZnXCIpLHRoaXMuX2NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJwb2ludGVyLWV2ZW50c1wiLFwibm9uZVwiKSx0aGlzLl9yb290R3JvdXA9ZG4oXCJnXCIpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9yb290R3JvdXApfSxfZGVzdHJveUNvbnRhaW5lcjpmdW5jdGlvbigpe3JpKHRoaXMuX2NvbnRhaW5lciksU2kodGhpcy5fY29udGFpbmVyKSxkZWxldGUgdGhpcy5fY29udGFpbmVyLGRlbGV0ZSB0aGlzLl9yb290R3JvdXAsZGVsZXRlIHRoaXMuX3N2Z1NpemV9LF9vblpvb21TdGFydDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZSgpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQsaSxlO3RoaXMuX21hcC5fYW5pbWF0aW5nWm9vbSYmdGhpcy5fYm91bmRzfHwoaG4ucHJvdG90eXBlLl91cGRhdGUuY2FsbCh0aGlzKSxpPSh0PXRoaXMuX2JvdW5kcykuZ2V0U2l6ZSgpLGU9dGhpcy5fY29udGFpbmVyLHRoaXMuX3N2Z1NpemUmJnRoaXMuX3N2Z1NpemUuZXF1YWxzKGkpfHwodGhpcy5fc3ZnU2l6ZT1pLGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIixpLngpLGUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsaS55KSksdmkoZSx0Lm1pbiksZS5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsW3QubWluLngsdC5taW4ueSxpLngsaS55XS5qb2luKFwiIFwiKSksdGhpcy5maXJlKFwidXBkYXRlXCIpKX0sX2luaXRQYXRoOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX3BhdGg9ZG4oXCJwYXRoXCIpO3Qub3B0aW9ucy5jbGFzc05hbWUmJmNpKGksdC5vcHRpb25zLmNsYXNzTmFtZSksdC5vcHRpb25zLmludGVyYWN0aXZlJiZjaShpLFwibGVhZmxldC1pbnRlcmFjdGl2ZVwiKSx0aGlzLl91cGRhdGVTdHlsZSh0KSx0aGlzLl9sYXllcnNbbSh0KV09dH0sX2FkZFBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fcm9vdEdyb3VwfHx0aGlzLl9pbml0Q29udGFpbmVyKCksdGhpcy5fcm9vdEdyb3VwLmFwcGVuZENoaWxkKHQuX3BhdGgpLHQuYWRkSW50ZXJhY3RpdmVUYXJnZXQodC5fcGF0aCl9LF9yZW1vdmVQYXRoOmZ1bmN0aW9uKHQpe3JpKHQuX3BhdGgpLHQucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQodC5fcGF0aCksZGVsZXRlIHRoaXMuX2xheWVyc1ttKHQpXX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24odCl7dC5fcHJvamVjdCgpLHQuX3VwZGF0ZSgpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24odCl7dmFyIGk9dC5fcGF0aCxlPXQub3B0aW9ucztpJiYoZS5zdHJva2U/KGkuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsZS5jb2xvciksaS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utb3BhY2l0eVwiLGUub3BhY2l0eSksaS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIixlLndlaWdodCksaS5zZXRBdHRyaWJ1dGUoXCJzdHJva2UtbGluZWNhcFwiLGUubGluZUNhcCksaS5zZXRBdHRyaWJ1dGUoXCJzdHJva2UtbGluZWpvaW5cIixlLmxpbmVKb2luKSxlLmRhc2hBcnJheT9pLnNldEF0dHJpYnV0ZShcInN0cm9rZS1kYXNoYXJyYXlcIixlLmRhc2hBcnJheSk6aS5yZW1vdmVBdHRyaWJ1dGUoXCJzdHJva2UtZGFzaGFycmF5XCIpLGUuZGFzaE9mZnNldD9pLnNldEF0dHJpYnV0ZShcInN0cm9rZS1kYXNob2Zmc2V0XCIsZS5kYXNoT2Zmc2V0KTppLnJlbW92ZUF0dHJpYnV0ZShcInN0cm9rZS1kYXNob2Zmc2V0XCIpKTppLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLFwibm9uZVwiKSxlLmZpbGw/KGkuc2V0QXR0cmlidXRlKFwiZmlsbFwiLGUuZmlsbENvbG9yfHxlLmNvbG9yKSxpLnNldEF0dHJpYnV0ZShcImZpbGwtb3BhY2l0eVwiLGUuZmlsbE9wYWNpdHkpLGkuc2V0QXR0cmlidXRlKFwiZmlsbC1ydWxlXCIsZS5maWxsUnVsZXx8XCJldmVub2RkXCIpKTppLnNldEF0dHJpYnV0ZShcImZpbGxcIixcIm5vbmVcIikpfSxfdXBkYXRlUG9seTpmdW5jdGlvbih0LGkpe3RoaXMuX3NldFBhdGgodCwkKHQuX3BhcnRzLGkpKX0sX3VwZGF0ZUNpcmNsZTpmdW5jdGlvbih0KXt2YXIgaT10Ll9wb2ludCxlPU1hdGgubWF4KE1hdGgucm91bmQodC5fcmFkaXVzKSwxKSxuPVwiYVwiK2UrXCIsXCIrKE1hdGgubWF4KE1hdGgucm91bmQodC5fcmFkaXVzWSksMSl8fGUpK1wiIDAgMSwwIFwiLG89dC5fZW1wdHkoKT9cIk0wIDBcIjpcIk1cIisoaS54LWUpK1wiLFwiK2kueStuKzIqZStcIiwwIFwiK24rMiotZStcIiwwIFwiO3RoaXMuX3NldFBhdGgodCxvKX0sX3NldFBhdGg6ZnVuY3Rpb24odCxpKXt0Ll9wYXRoLnNldEF0dHJpYnV0ZShcImRcIixpKX0sX2JyaW5nVG9Gcm9udDpmdW5jdGlvbih0KXtoaSh0Ll9wYXR
24510oKX0sX2JyaW5nVG9CYWNrOmZ1bmN0aW9uKHQpe3VpKHQuX3BhdGgpfX0pO2Z1bmN0aW9uIG1uKHQpe3JldHVybiBadHx8RXQ/bmV3IHBuKHQpOm51bGx9RXQmJnBuLmluY2x1ZGUoX24pLEtpLmluY2x1ZGUoe2dldFJlbmRlcmVyOmZ1bmN0aW9uKHQpe3ZhciBpPShpPXQub3B0aW9ucy5yZW5kZXJlcnx8dGhpcy5fZ2V0UGFuZVJlbmRlcmVyKHQub3B0aW9ucy5wYW5lKXx8dGhpcy5vcHRpb25zLnJlbmRlcmVyfHx0aGlzLl9yZW5kZXJlcil8fCh0aGlzLl9yZW5kZXJlcj10aGlzLl9jcmVhdGVSZW5kZXJlcigpKTtyZXR1cm4gdGhpcy5oYXNMYXllcihpKXx8dGhpcy5hZGRMYXllcihpKSxpfSxfZ2V0UGFuZVJlbmRlcmVyOmZ1bmN0aW9uKHQpe2lmKFwib3ZlcmxheVBhbmVcIj09PXR8fHZvaWQgMD09PXQpcmV0dXJuITE7dmFyIGk9dGhpcy5fcGFuZVJlbmRlcmVyc1t0XTtyZXR1cm4gdm9pZCAwPT09aSYmKGk9dGhpcy5fY3JlYXRlUmVuZGVyZXIoe3BhbmU6dH0pLHRoaXMuX3BhbmVSZW5kZXJlcnNbdF09aSksaX0sX2NyZWF0ZVJlbmRlcmVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMucHJlZmVyQ2FudmFzJiZsbih0KXx8bW4odCl9fSk7dmFyIGZuPVJlLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGkpe1JlLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyx0aGlzLl9ib3VuZHNUb0xhdExuZ3ModCksaSl9LHNldEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZXRMYXRMbmdzKHRoaXMuX2JvdW5kc1RvTGF0TG5ncyh0KSl9LF9ib3VuZHNUb0xhdExuZ3M6ZnVuY3Rpb24odCl7cmV0dXJuWyh0PU4odCkpLmdldFNvdXRoV2VzdCgpLHQuZ2V0Tm9ydGhXZXN0KCksdC5nZXROb3J0aEVhc3QoKSx0LmdldFNvdXRoRWFzdCgpXX19KTtwbi5jcmVhdGU9ZG4scG4ucG9pbnRzVG9QYXRoPSQsTmUuZ2VvbWV0cnlUb0xheWVyPURlLE5lLmNvb3Jkc1RvTGF0TG5nPVdlLE5lLmNvb3Jkc1RvTGF0TG5ncz1IZSxOZS5sYXRMbmdUb0Nvb3Jkcz1GZSxOZS5sYXRMbmdzVG9Db29yZHM9VWUsTmUuZ2V0RmVhdHVyZT1WZSxOZS5hc0ZlYXR1cmU9cWUsS2kubWVyZ2VPcHRpb25zKHtib3hab29tOiEwfSk7dmFyIGduPWllLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXI9dC5fY29udGFpbmVyLHRoaXMuX3BhbmU9dC5fcGFuZXMub3ZlcmxheVBhbmUsdGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQ9MCx0Lm9uKFwidW5sb2FkXCIsdGhpcy5fZGVzdHJveSx0aGlzKX0sYWRkSG9va3M6ZnVuY3Rpb24oKXt6aSh0aGlzLl9jb250YWluZXIsXCJtb3VzZWRvd25cIix0aGlzLl9vbk1vdXNlRG93bix0aGlzKX0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXtTaSh0aGlzLl9jb250YWluZXIsXCJtb3VzZWRvd25cIix0aGlzLl9vbk1vdXNlRG93bix0aGlzKX0sbW92ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW92ZWR9LF9kZXN0cm95OmZ1bmN0aW9uKCl7cmkodGhpcy5fcGFuZSksZGVsZXRlIHRoaXMuX3BhbmV9LF9yZXNldFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQ9MCx0aGlzLl9tb3ZlZD0hMX0sX2NsZWFyRGVmZXJyZWRSZXNldFN0YXRlOmZ1bmN0aW9uKCl7MCE9PXRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0KSx0aGlzLl9yZXNldFN0YXRlVGltZW91dD0wKX0sX29uTW91c2VEb3duOmZ1bmN0aW9uKHQpe2lmKCF0LnNoaWZ0S2V5fHwxIT09dC53aGljaCYmMSE9PXQuYnV0dG9uKXJldHVybiExO3RoaXMuX2NsZWFyRGVmZXJyZWRSZXNldFN0YXRlKCksdGhpcy5fcmVzZXRTdGF0ZSgpLFh0KCkseGkoKSx0aGlzLl9zdGFydFBvaW50PXRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0KSx6aShkb2N1bWVudCx7Y29udGV4dG1lbnU6TmksbW91c2Vtb3ZlOnRoaXMuX29uTW91c2VNb3ZlLG1vdXNldXA6dGhpcy5fb25Nb3VzZVVwLGtleWRvd246dGhpcy5fb25LZXlEb3dufSx0aGlzKX0sX29uTW91c2VNb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuX21vdmVkfHwodGhpcy5fbW92ZWQ9ITAsdGhpcy5fYm94PXNpKFwiZGl2XCIsXCJsZWFmbGV0LXpvb20tYm94XCIsdGhpcy5fY29udGFpbmVyKSxjaSh0aGlzLl9jb250YWluZXIsXCJsZWFmbGV0LWNyb3NzaGFpclwiKSx0aGlzLl9tYXAuZmlyZShcImJveHpvb21zdGFydFwiKSksdGhpcy5fcG9pbnQ9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpO3ZhciBpPW5ldyBJKHRoaXMuX3BvaW50LHRoaXMuX3N0YXJ0UG9pbnQpLGU9aS5nZXRTaXplKCk7dmkodGhpcy5fYm94LGkubWluKSx0aGlzLl9ib3guc3R5bGUud2lkdGg9ZS54K1wicHhcIix0aGlzLl9ib3guc3R5bGUuaGVpZ2h0PWUueStcInB4XCJ9LF9maW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9tb3ZlZCYmKHJpKHRoaXMuX2JveCksX2kodGhpcy5fY29udGFpbmVyLFwibGVhZmxldC1jcm9zc2hhaXJcIikpLEp0KCksd2koKSxTaShkb2N1bWVudCx7Y29udGV4dG1lbnU6TmksbW91c2Vtb3ZlOnRoaXMuX29uTW91c2VNb3ZlLG1vdXNldXA6dGhpcy5fb25Nb3VzZVVwLGtleWRvd246dGhpcy5fb25LZXlEb3dufSx0aGlzKX0sX29uTW91c2VVcDpmdW5jdGlvbih0KXt2YXIgaTsxIT09dC53aGljaCYmMSE9PXQuYnV0dG9ufHwodGhpcy5fZmluaXNoKCksdGhpcy5fbW92ZWQmJih0aGlzLl9jbGVhckRlZmVycmVkUmVzZXRTdGF0ZSgpLHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0PXNldFRpbWVvdXQocCh0aGlzLl9yZXNldFN0YXRlLHRoaXMpLDApLGk9bmV3IFIodGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcodGhpcy5fc3RhcnRQb2ludCksdGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcodGhpcy5fcG9pbnQpKSx0aGlzLl9tYXAuZml0Qm91bmRzKGkpLmZpcmUoXCJib3h6b29tZW5kXCIse2JveFpvb21Cb3VuZHM6aX0pKSl9LF9vbktleURvd246ZnVuY3Rpb24odCl7Mjc9PT10LmtleUNvZGUmJnRoaXMuX2ZpbmlzaCgpfX0pO0tpLmFkZEluaXRIb29rKFwiYWRkSGFuZGxlclwiLFwiYm94Wm9vbVwiLGduKSxLaS5tZXJnZU9wdGlvbnMoe2RvdWJsZUNsaWNrWm9vbTohMH0pO3ZhciB2bj1pZS5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLm9uKFwiZGJsY2xpY2tcIix0aGlzLl9vbkRvdWJsZUNsaWNrLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX21hcC5vZmYoXCJkYmxjbGlja1wiLHRoaXMuX29uRG91YmxlQ2xpY2ssdGhpcyl9LF9vbkRvdWJsZUNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcCxlPWkuZ2V0Wm9vbSgpLG49aS5vcHRpb25zLnpvb21EZWx0YSxvPXQub3JpZ2luYWxFdmVudC5zaGlmdEtleT9lLW46ZStuO1wiY2VudGVyXCI9PT1pLm9wdGlvbnMuZG91YmxlQ2xpY2tab29tP2kuc2V0Wm9vbShvKTppLnNldFpvb21Bcm91bmQodC5jb250YWluZXJQb2ludCxvKX19KTtLaS5hZGRJbml0SG9vayhcImFkZEhhbmRsZXJcIixcImRvdWJsZUNsaWNrWm9vbVwiLHZu
24510KSxLaS5tZXJnZU9wdGlvbnMoe2RyYWdnaW5nOiEwLGluZXJ0aWE6IXN0LGluZXJ0aWFEZWNlbGVyYXRpb246MzQwMCxpbmVydGlhTWF4U3BlZWQ6MS8wLGVhc2VMaW5lYXJpdHk6LjIsd29ybGRDb3B5SnVtcDohMSxtYXhCb3VuZHNWaXNjb3NpdHk6MH0pO3ZhciB5bj1pZS5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7dmFyIHQ7dGhpcy5fZHJhZ2dhYmxlfHwodD10aGlzLl9tYXAsdGhpcy5fZHJhZ2dhYmxlPW5ldyBhZSh0Ll9tYXBQYW5lLHQuX2NvbnRhaW5lciksdGhpcy5fZHJhZ2dhYmxlLm9uKHtkcmFnc3RhcnQ6dGhpcy5fb25EcmFnU3RhcnQsZHJhZzp0aGlzLl9vbkRyYWcsZHJhZ2VuZDp0aGlzLl9vbkRyYWdFbmR9LHRoaXMpLHRoaXMuX2RyYWdnYWJsZS5vbihcInByZWRyYWdcIix0aGlzLl9vblByZURyYWdMaW1pdCx0aGlzKSx0Lm9wdGlvbnMud29ybGRDb3B5SnVtcCYmKHRoaXMuX2RyYWdnYWJsZS5vbihcInByZWRyYWdcIix0aGlzLl9vblByZURyYWdXcmFwLHRoaXMpLHQub24oXCJ6b29tZW5kXCIsdGhpcy5fb25ab29tRW5kLHRoaXMpLHQud2hlblJlYWR5KHRoaXMuX29uWm9vbUVuZCx0aGlzKSkpLGNpKHRoaXMuX21hcC5fY29udGFpbmVyLFwibGVhZmxldC1ncmFiIGxlYWZsZXQtdG91Y2gtZHJhZ1wiKSx0aGlzLl9kcmFnZ2FibGUuZW5hYmxlKCksdGhpcy5fcG9zaXRpb25zPVtdLHRoaXMuX3RpbWVzPVtdfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe19pKHRoaXMuX21hcC5fY29udGFpbmVyLFwibGVhZmxldC1ncmFiXCIpLF9pKHRoaXMuX21hcC5fY29udGFpbmVyLFwibGVhZmxldC10b3VjaC1kcmFnXCIpLHRoaXMuX2RyYWdnYWJsZS5kaXNhYmxlKCl9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3ZlZH0sbW92aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3Zpbmd9LF9vbkRyYWdTdGFydDpmdW5jdGlvbigpe3ZhciB0LGk9dGhpcy5fbWFwO2kuX3N0b3AoKSx0aGlzLl9tYXAub3B0aW9ucy5tYXhCb3VuZHMmJnRoaXMuX21hcC5vcHRpb25zLm1heEJvdW5kc1Zpc2Nvc2l0eT8odD1OKHRoaXMuX21hcC5vcHRpb25zLm1heEJvdW5kcyksdGhpcy5fb2Zmc2V0TGltaXQ9Tyh0aGlzLl9tYXAubGF0TG5nVG9Db250YWluZXJQb2ludCh0LmdldE5vcnRoV2VzdCgpKS5tdWx0aXBseUJ5KC0xKSx0aGlzLl9tYXAubGF0TG5nVG9Db250YWluZXJQb2ludCh0LmdldFNvdXRoRWFzdCgpKS5tdWx0aXBseUJ5KC0xKS5hZGQodGhpcy5fbWFwLmdldFNpemUoKSkpLHRoaXMuX3Zpc2Nvc2l0eT1NYXRoLm1pbigxLE1hdGgubWF4KDAsdGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzVmlzY29zaXR5KSkpOnRoaXMuX29mZnNldExpbWl0PW51bGwsaS5maXJlKFwibW92ZXN0YXJ0XCIpLmZpcmUoXCJkcmFnc3RhcnRcIiksaS5vcHRpb25zLmluZXJ0aWEmJih0aGlzLl9wb3NpdGlvbnM9W10sdGhpcy5fdGltZXM9W10pfSxfb25EcmFnOmZ1bmN0aW9uKHQpe3ZhciBpLGU7dGhpcy5fbWFwLm9wdGlvbnMuaW5lcnRpYSYmKGk9dGhpcy5fbGFzdFRpbWU9K25ldyBEYXRlLGU9dGhpcy5fbGFzdFBvcz10aGlzLl9kcmFnZ2FibGUuX2Fic1Bvc3x8dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MsdGhpcy5fcG9zaXRpb25zLnB1c2goZSksdGhpcy5fdGltZXMucHVzaChpKSx0aGlzLl9wcnVuZVBvc2l0aW9ucyhpKSksdGhpcy5fbWFwLmZpcmUoXCJtb3ZlXCIsdCkuZmlyZShcImRyYWdcIix0KX0sX3BydW5lUG9zaXRpb25zOmZ1bmN0aW9uKHQpe2Zvcig7MTx0aGlzLl9wb3NpdGlvbnMubGVuZ3RoJiY1MDx0LXRoaXMuX3RpbWVzWzBdOyl0aGlzLl9wb3NpdGlvbnMuc2hpZnQoKSx0aGlzLl90
24510aW1lcy5zaGlmdCgpfSxfb25ab29tRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLmdldFNpemUoKS5kaXZpZGVCeSgyKSxpPXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQoWzAsMF0pO3RoaXMuX2luaXRpYWxXb3JsZE9mZnNldD1pLnN1YnRyYWN0KHQpLngsdGhpcy5fd29ybGRXaWR0aD10aGlzLl9tYXAuZ2V0UGl4ZWxXb3JsZEJvdW5kcygpLmdldFNpemUoKS54fSxfdmlzY291c0xpbWl0OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQtKHQtaSkqdGhpcy5fdmlzY29zaXR5fSxfb25QcmVEcmFnTGltaXQ6ZnVuY3Rpb24oKXt2YXIgdCxpO3RoaXMuX3Zpc2Nvc2l0eSYmdGhpcy5fb2Zmc2V0TGltaXQmJih0PXRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLnN1YnRyYWN0KHRoaXMuX2RyYWdnYWJsZS5fc3RhcnRQb3MpLGk9dGhpcy5fb2Zmc2V0TGltaXQsdC54PGkubWluLngmJih0Lng9dGhpcy5fdmlzY291c0xpbWl0KHQueCxpLm1pbi54KSksdC55PGkubWluLnkmJih0Lnk9dGhpcy5fdmlzY291c0xpbWl0KHQueSxpLm1pbi55KSksdC54PmkubWF4LngmJih0Lng9dGhpcy5fdmlzY291c0xpbWl0KHQueCxpLm1heC54KSksdC55PmkubWF4LnkmJih0Lnk9dGhpcy5fdmlzY291c0xpbWl0KHQueSxpLm1heC55KSksdGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3M9dGhpcy5fZHJhZ2dhYmxlLl9zdGFydFBvcy5hZGQodCkpfSxfb25QcmVEcmFnV3JhcDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3dvcmxkV2lkdGgsaT1NYXRoLnJvdW5kKHQvMiksZT10aGlzLl9pbml0aWFsV29ybGRPZmZzZXQsbj10aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy54LG89KG4taStlKSV0K2ktZSxzPShuK2krZSkldC1pLWUscj1NYXRoLmFicyhvK2UpPE1hdGguYWJzKHMrZSk/bzpzO3RoaXMuX2RyYWdnYWJsZS5fYWJzUG9zPXRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLmNsb25lKCksdGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MueD1yfSxfb25EcmFnRW5kOmZ1bmN0aW9uKHQpe3ZhciBpLGUsbi
24510xvLHMscixhLGgsdSxsPXRoaXMuX21hcCxjPWwub3B0aW9ucyxfPSFjLmluZXJ0aWF8fHRoaXMuX3RpbWVzLmxlbmd0aDwyO2wuZmlyZShcImRyYWdlbmRcIix0KSxfP2wuZmlyZShcIm1vdmVlbmRcIik6KHRoaXMuX3BydW5lUG9zaXRpb25zKCtuZXcgRGF0ZSksaT10aGlzLl9sYXN0UG9zLnN1YnRyYWN0KHRoaXMuX3Bvc2l0aW9uc1swXSksZT0odGhpcy5fbGFzdFRpbWUtdGhpcy5fdGltZXNbMF0pLzFlMyxuPWMuZWFzZUxpbmVhcml0eSxzPShvPWkubXVsdGlwbHlCeShuL2UpKS5kaXN0YW5jZVRvKFswLDBdKSxyPU1hdGgubWluKGMuaW5lcnRpYU1heFNwZWVkLHMpLGE9by5tdWx0aXBseUJ5KHIvcyksaD1yLyhjLmluZXJ0aWFEZWNlbGVyYXRpb24qbiksKHU9YS5tdWx0aXBseUJ5KC1oLzIpLnJvdW5kKCkpLnh8fHUueT8odT1sLl9saW1pdE9mZnNldCh1LGwub3B0aW9ucy5tYXhCb3VuZHMpLE0oZnVuY3Rpb24oKXtsLnBhbkJ5KHUse2R1cmF0aW9uOmgsZWFzZUxpbmVhcml0eTpuLG5vTW92ZVN0YXJ0OiEwLGFuaW1hdGU6ITB9KX0pKTpsLmZpcmUoXCJtb3ZlZW5kXCIpKX19KTtLaS5hZGRJbml0SG9vayhcImFkZEhhbmRsZXJcIixcImRyYWdnaW5nXCIseW4pLEtpLm1lcmdlT3B0aW9ucyh7a2V5Ym9hcmQ6ITAsa2V5Ym9hcmRQYW5EZWx0YTo4MH0pO3ZhciB4bj1pZS5leHRlbmQoe2tleUNvZGVzOntsZWZ0OlszN10scmlnaHQ6WzM5XSxkb3duOls0MF0sdXA6WzM4XSx6b29tSW46WzE4NywxMDcsNjEsMTcxXSx6b29tT3V0OlsxODksMTA5LDU0LDE3M119LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fc2V0UGFuRGVsdGEodC5vcHRpb25zLmtleWJvYXJkUGFuRGVsdGEpLHRoaXMuX3NldFpvb21EZWx0YSh0Lm9wdGlvbnMuem9vbURlbHRhKX0sYWRkSG9va3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuX2NvbnRhaW5lcjt0LnRhYkluZGV4PD0wJiYodC50YWJJbmRleD1cIjBcIiksemkodCx7Zm9jdXM6dGhpcy5fb25Gb2N1cyxibHVyOnRoaXMuX29uQmx1cixtb3VzZWRvd246dGhpcy5fb25Nb3VzZURvd259LHRoaXMpLHRoaXMuX21hcC5vbih7Zm9jdXM6dGhpcy5fYWRkSG9va3MsYmx1cjp0aGlzLl9yZW1vdmVIb29rc30sdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlSG9va3MoKSxTaSh0aGlzLl9tYXAuX2NvbnRhaW5lcix7Zm9jdXM6dGhpcy5fb25Gb2N1cyxibHVyOnRoaXMuX29uQmx1cixtb3VzZWRvd246dGhpcy5fb25Nb3VzZURvd259LHRoaXMpLHRoaXMuX21hcC5vZmYoe2ZvY3VzOnRoaXMuX2FkZEhvb2tzLGJsdXI6dGhpcy5fcmVtb3ZlSG9va3N9LHRoaXMpfSxfb25Nb3VzZURvd246ZnVuY3Rpb24oKXt2YXIgdCxpLGUsbjt0aGlzLl9mb2N1c2VkfHwodD1kb2N1bWVudC5ib2R5LGk9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGU9dC5zY3JvbGxUb3B8fGkuc2Nyb2xsVG9wLG49dC5zY3JvbGxMZWZ0fHxpLnNjcm9sbExlZnQsdGhpcy5fbWFwLl9jb250YWluZXIuZm9jdXMoKSx3aW5kb3cuc2Nyb2xsVG8obixlKSl9LF9vbkZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZD0hMCx0aGlzLl9tYXAuZmlyZShcImZvY3VzXCIpfSxfb25CbHVyOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZD0hMSx0aGlzLl9tYXAuZmlyZShcImJsdXJcIil9LF9zZXRQYW5EZWx0YTpmdW5jdGlvbih0KXtmb3IodmFyIGk9dGhpcy5fcGFuS2V5cz17fSxlPXRoaXMua2V5Q29kZXMsbj0wLG89ZS5sZWZ0Lmxlbmd0aDtuPG87bisrKWlbZS5sZWZ0W25dXT1bLTEqdCwwXTtmb3Iobj0wLG89ZS5yaWdodC5sZW5ndGg7bjxvO24rKylpW2UucmlnaHRbbl1dPVt0LDBdO2ZvcihuPTAsbz1lLmRvd24ubGVuZ3RoO248bztuKyspaVtlLmRvd25bbl1dPVswLHRdO2ZvcihuPTAsbz1lLnVwLmxlbmd0aDtuPG87bisrKWlbZS51cFtuXV09WzAsLTEqdF19LF9zZXRab29tRGVsdGE6ZnVuY3Rpb24odCl7Zm9yKHZhciBpPXRoaXMuX3pvb21LZXlzPXt9LGU9dGhpcy5rZXlDb2RlcyxuPTAsbz1lLnpvb21Jbi5sZW5ndGg7bjxvO24rKylpW2Uuem9vbUluW25dXT10O2ZvcihuPTAsbz1lLnpvb21PdXQubGVuZ3RoO248bztuKyspaVtlLnpvb21PdXRbbl1dPS10fSxfYWRkSG9va3M6ZnVuY3Rpb24oKXt6aShkb2N1bWVudCxcImtleWRvd25cIix0aGlzLl9vbktleURvd24sdGhpcyl9LF9yZW1vdmVIb29rczpmdW5jdGlvbigpe1NpKGRvY3VtZW50LFwia2V5ZG93blwiLHRoaXMuX29uS2V5RG93bix0aGlzKX0sX29uS2V5RG93bjpmdW5jdGlvbih0KXtpZighKHQuYWx0S2V5fHx0LmN0cmxLZXl8fHQubWV0YUtleSkpe3ZhciBpLGU9dC5rZXlDb2RlLG49dGhpcy5fbWFwO2lmKGUgaW4gdGhpcy5fcGFuS2V5cyluLl9wYW5BbmltJiZuLl9wYW5BbmltLl9pblByb2dyZXNzfHwoaT10aGlzLl9wYW5LZXlzW2VdLHQuc2hpZnRLZXkmJihpPUEoaSkubXVsdGlwbHlCeSgzKSksbi5wYW5CeShpKSxuLm9wdGlvbnMubWF4Qm91bmRzJiZuLnBhbkluc2lkZUJvdW5kcyhuLm9wdGlvbnMubWF4Qm91bmRzKSk7ZWxzZSBpZihlIGluIHRoaXMuX3pvb21LZXlzKW4uc2V0Wm9vbShuLmdldFpvb20oKSsodC5zaGlmdEtleT8zOjEpKnRoaXMuX3pvb21LZXlzW2VdKTtlbHNle2lmKDI3IT09ZXx8IW4uX3BvcHVwfHwhbi5fcG9wdXAub3B0aW9ucy5jbG9zZU9uRXNjYXBlS2V5KXJldHVybjtuLmNsb3NlUG9wdXAoKX1OaSh0KX19fSk7S2kuYWRkSW5pdEhvb2soXCJhZGRIYW5kbGVyXCIsXCJrZXlib2FyZFwiLHhuKSxLaS5tZXJnZU9wdGlvbnMoe3Njcm9sbFdoZWVsWm9vbTohMCx3aGVlbERlYm91bmNlVGltZTo0MCx3aGVlbFB4UGVyWm9vbUxldmVsOjYwfSk7dmFyIHduPWllLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXt6aSh0aGlzLl9tYXAuX2NvbnRhaW5lcixcIndoZWVsXCIsdGhpcy5fb25XaGVlbFNjcm9sbCx0aGlzKSx0aGlzLl9kZWx0YT0wfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe1NpKHRoaXMuX21hcC5fY29udGFpbmVyLFwid2hlZWxcIix0aGlzLl9vbldoZWVsU2Nyb2xsLHRoaXMpfSxfb25XaGVlbFNjcm9sbDpmdW5jdGlvbih0KXt2YXIgaT1XaSh0KSxlPXRoaXMuX21hcC5vcHRpb25zLndoZWVsRGVib3VuY2VUaW1lO3RoaXMuX2RlbHRhKz1pLHRoaXMuX2xhc3RNb3VzZVBvcz10aGlzLl9tYXAubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCksdGhpcy5fc3RhcnRUaW1lfHwodGhpcy5fc3RhcnRUaW1lPStuZXcgRGF0ZSk7dmFyIG49TWF0aC5tYXgoZS0obmV3IERhdGUtdGhpcy5fc3RhcnRUaW1lKSwwKTtjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpLHRoaXMuX3RpbWVyPXNldFRpbWVvdXQocCh0aGlzLl9wZXJmb3JtWm9vbSx0aGlzKSxuKSxOaSh0KX0sX3BlcmZvcm1ab29tOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGk9dC5nZXRab29tKCksZT10aGlzLl9tYXAub3B0aW9ucy56b29tU25hcHx8MDt0Ll9zdG9wKCk7dmFyIG49dGhpcy5fZGVsdGEvKDQqdGhpcy5fbWFwLm9wdGlvbnMud2hlZWx
24510QeFBlclpvb21MZXZlbCksbz00Kk1hdGgubG9nKDIvKDErTWF0aC5leHAoLU1hdGguYWJzKG4pKSkpL01hdGguTE4yLHM9ZT9NYXRoLmNlaWwoby9lKSplOm8scj10Ll9saW1pdFpvb20oaSsoMDx0aGlzLl9kZWx0YT9zOi1zKSktaTt0aGlzLl9kZWx0YT0wLHRoaXMuX3N0YXJ0VGltZT1udWxsLHImJihcImNlbnRlclwiPT09dC5vcHRpb25zLnNjcm9sbFdoZWVsWm9vbT90LnNldFpvb20oaStyKTp0LnNldFpvb21Bcm91bmQodGhpcy5fbGFzdE1vdXNlUG9zLGkrcikpfX0pO0tpLmFkZEluaXRIb29rKFwiYWRkSGFuZGxlclwiLFwic2Nyb2xsV2hlZWxab29tXCIsd24pLEtpLm1lcmdlT3B0aW9ucyh7dGFwOiEwLHRhcFRvbGVyYW5jZToxNX0pO3ZhciBQbj1pZS5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7emkodGhpcy5fbWFwLl9jb250YWluZXIsXCJ0b3VjaHN0YXJ0XCIsdGhpcy5fb25Eb3duLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe1NpKHRoaXMuX21hcC5fY29udGFpbmVyLFwidG91Y2hzdGFydFwiLHRoaXMuX29uRG93bix0aGlzKX0sX29uRG93bjpmdW5jdGlvbih0KXtpZih0LnRvdWNoZXMpe2lmKFJpKHQpLHRoaXMuX2ZpcmVDbGljaz0hMCwxPHQudG91Y2hlcy5sZW5ndGgpcmV0dXJuIHRoaXMuX2ZpcmVDbGljaz0hMSx2b2lkIGNsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCk7dmFyIGk9dC50b3VjaGVzWzBdLGU9aS50YXJnZXQ7dGhpcy5fc3RhcnRQb3M9dGhpcy5fbmV3UG9zPW5ldyBrKGkuY2xpZW50WCxpLmNsaWVudFkpLGUudGFnTmFtZSYmXCJhXCI9PT1lLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmY2koZSxcImxlYWZsZXQtYWN0aXZlXCIpLHRoaXMuX2hvbGRUaW1lb3V0PXNldFRpbWVvdXQocChmdW5jdGlvbigpe3RoaXMuX2lzVGFwVmFsaWQoKSYmKHRoaXMuX2ZpcmVDbGljaz0hMSx0aGlzLl9vblVwKCksdGhpcy5fc2ltdWxhdGVFdmVudChcImNvbnRleHRtZW51XCIsaSkpfSx0aGlzKSwxZTMpLHRoaXMuX3NpbXVsYXRlRXZlbnQoXCJtb3VzZWRvd25cIixpKSx6aShkb2N1bWVudCx7dG91Y2htb3ZlOnRoaXMuX29uTW92ZSx0b3VjaGVuZDp0aGlzLl9vblVwfSx0aGlzKX19LF9vblVwOmZ1bmN0aW9uKHQpe3ZhciBpLGU7Y2xlYXJUaW1lb3V0KHRoaXMuX2hvbGRUaW1lb3V0KSxTaShkb2N1bWVudCx7dG91Y2htb3ZlOnRoaXMuX29uTW92ZSx0b3VjaGVuZDp0aGlzLl9vblVwfSx0aGlzKSx0aGlzLl9maXJlQ2xpY2smJnQmJnQuY2hhbmdlZFRvdWNoZXMmJigoZT0oaT10LmNoYW5nZWRUb3VjaGVzWzBdKS50YXJnZXQpJiZlLnRhZ05hbWUmJlwiYVwiPT09ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJl9pKGUsXCJsZWFmbGV0LWFjdGl2ZVwiKSx0aGlzLl9zaW11bGF0ZUV2ZW50KFwibW91c2V1cFwiLGkpLHRoaXMuX2lzVGFwVmFsaWQoKSYmdGhpcy5fc2ltdWxhdGVFdmVudChcImNsaWNrXCIsaSkpfSxfaXNUYXBWYWxpZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZXdQb3MuZGlzdGFuY2VUbyh0aGlzLl9zdGFydFBvcyk8PXRoaXMuX21hcC5vcHRpb25zLnRhcFRvbGVyYW5jZX0sX29uTW92ZTpmdW5jdGlvbih0KXt2YXIgaT10LnRvdWNoZXNbMF07dGhpcy5fbmV3UG9zPW5ldyBrKGkuY2xpZW50WCxpLmNsaWVudFkpLHRoaXMuX3NpbXVsYXRlRXZlbnQoXCJtb3VzZW1vdmVcIixpKX0sX3NpbXVsYXRlRXZlbnQ6ZnVuY3Rpb24odCxpKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFdmVudChcIk1vdXNlRXZlbnRzXCIpO2UuX3NpbXVsYXRlZD0hMCxpLnRhcmdldC5fc2ltdWxhdGVkQ2xpY2s9ITAsZS5pbml0TW91c2VFdmVudCh0LCEwLCEwLHdpbmRvdywxLGkuc2NyZWVuWCxpLnNjcmVlblksaS5jbGllbnRYLGkuY2xpZW50WSwhMSwhMSwhMSwhMSwwLG51bGwpLGkudGFyZ2V0LmRpc3BhdGNoRXZlbnQoZSl9fSk7IWJ0fHxMdCYmIWN0fHxLaS5hZGRJbml0SG9vayhcImFkZEhhbmRsZXJcIixcInRhcFwiLFBuKSxLaS5tZXJnZU9wdGlvbnMoe3RvdWNoWm9vbTpidCYmIXN0LGJvdW5jZUF0Wm9vbUxpbWl0czohMH0pO3ZhciBMbj1pZS5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7Y2kodGhpcy5fbWFwLl9jb250YWluZXIsXCJsZWFmbGV0LXRvdWNoLXpvb21cIiksemkodGhpcy5fbWFwLl9jb250YWluZXIsXCJ0b3VjaHN0YXJ0XCIsdGhpcy5fb25Ub3VjaFN0YXJ0LHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe19pKHRoaXMuX21hcC5fY29udGFpbmVyLFwibGVhZmxldC10b3VjaC16b29tXCIpLFNpKHRoaXMuX21hcC5fY29udGFpbmVyLFwidG91Y2hzdGFydFwiLHRoaXMuX29uVG91Y2hTdGFydCx0aGlzKX0sX29uVG91Y2hTdGFydDpmdW5jdGlvbih0KXt2YXIgaSxlLG49dGhpcy5fbWFwOyF0LnRvdWNoZXN8fDIhPT10LnRvdWNoZXMubGVuZ3RofHxuLl9hbmltYXRpbmdab29tfHx0aGlzLl96b29taW5nfHwoaT1uLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQudG91Y2hlc1swXSksZT1uLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQudG91Y2hlc1sxXSksdGhpcy5fY2VudGVyUG9pbnQ9bi5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpLHRoaXMuX3N0YXJ0TGF0TG5nPW4uY29udGFpbmVyUG9pbnRUb0xhdExuZyh0aGlzLl9jZW50ZXJQb2ludCksXCJjZW50ZXJcIiE9PW4ub3B0aW9ucy50b3VjaFpvb20mJih0aGlzLl9waW5jaFN0YXJ0TGF0TG5nPW4uY29udGFpbmVyUG9pbnRUb0xhdExuZyhpLmFkZChlKS5fZGl2aWRlQnkoMikpKSx0aGlzLl9zdGFydERpc3Q9aS5kaXN0YW5jZVRvKGUpLHRoaXMuX3N0YXJ0Wm9vbT1uLmdldFpvb20oKSx0aGlzLl9tb3ZlZD0hMSx0aGlzLl96b29taW5nPSEwLG4uX3N0b3AoKSx6aShkb2N1bWVudCxcInRvdWNobW92ZVwiLHRoaXMuX29uVG91Y2hNb3ZlLHRoaXMpLHppKGRvY3VtZW50LFwidG91Y2hlbmRcIix0aGlzLl9vblRvdWNoRW5kLHRoaXMpLFJpKHQpKX0sX29uVG91Y2hNb3ZlOmZ1bmN0aW9uKHQpe2lmKHQudG91Y2hlcyYmMj09PXQudG91Y2hlcy5sZW5ndGgmJnRoaXMuX3pvb21pbmcpe3ZhciBpPXRoaXMuX21hcCxlPWkubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodC50b3VjaGVzWzBdKSxuPWkubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodC50b3VjaGVzWzFdKSxvPWUuZGlzdGFuY2VUbyhuKS90aGlzLl9zdGFydERpc3Q7aWYodGhpcy5fem9vbT1pLmdldFNjYWxlWm9vbShvLHRoaXMuX3N0YXJ0Wm9vbSksIWkub3B0aW9ucy5ib3VuY2VBdFpvb21MaW1pdHMmJih0aGlzLl96b29tPGkuZ2V0TWluWm9vbSgpJiZvPDF8fHRoaXMuX3pvb20+aS5nZXRNYXhab29tKCkmJjE8bykmJih0aGlzLl96b29tPWkuX2xpbWl0Wm9vbSh0aGlzLl96b29tKSksXCJjZW50ZXJcIj09PWkub3B0aW9ucy50b3VjaFpvb20pe2lmKHRoaXMuX2NlbnRlcj10aGlzLl9zdGFydExhdExuZywxPT1vKXJldHVybn1lbHNle3ZhciBzPWUuX2FkZChuKS5fZGl2aWRlQnkoMikuX3N1YnRyYWN0KHRoaXMuX2NlbnRlclBvaW50KTtpZigxPT1vJiYwPT09cy54JiYwPT09cy55KXJldHVybjt0aGlzLl9jZW50ZXI9aS51bnByb2plY3QoaS5wcm9qZWN0KHRoaXMuX3BpbmNoU3RhcnRMYXRMbmcsdGhpcy5fem9vbSkuc3VidHJhY3QocyksdGhpcy5fem9vbSl9dGhpcy5fbW92ZWR8fChpLl9tb3ZlU3RhcnQoITAsITEpLHRoaXMuX21vdmVkPSEwKSx6KHRoaXMuX2FuaW1SZXF1ZXN0KTt2YXIgcj1wKGkuX21vdmUsaSx0aGlzLl9jZW50ZXIsdGhpcy5fem9vbSx7cGluY2g6ITAscm91bmQ6ITF9KTt0aGlzLl9hbmltUmVxdWVzdD1NKHIsdGhpcywhMCksUmkodCl9fSxfb25Ub3VjaEVuZDpmdW5jdGlvbigpe3RoaXMuX21vdmVkJiZ0aGlzLl96b29taW5nPyh0aGlzLl96b29taW5nPSExLHoodGhpcy5fYW5pbVJlcXVlc3QpLFNpKGRvY3VtZW50LFwidG91Y2htb3ZlXCIsdGhpcy5fb25Ub3VjaE1vdmUsdGhpcyksU2koZG9jdW1lbnQsXCJ0b3VjaGVuZFwiLH
24510RoaXMuX29uVG91Y2hFbmQsdGhpcyksdGhpcy5fbWFwLm9wdGlvbnMuem9vbUFuaW1hdGlvbj90aGlzLl9tYXAuX2FuaW1hdGVab29tKHRoaXMuX2NlbnRlcix0aGlzLl9tYXAuX2xpbWl0Wm9vbSh0aGlzLl96b29tKSwhMCx0aGlzLl9tYXAub3B0aW9ucy56b29tU25hcCk6dGhpcy5fbWFwLl9yZXNldFZpZXcodGhpcy5fY2VudGVyLHRoaXMuX21hcC5fbGltaXRab29tKHRoaXMuX3pvb20pKSk6dGhpcy5fem9vbWluZz0hMX19KTtLaS5hZGRJbml0SG9vayhcImFkZEhhbmRsZXJcIixcInRvdWNoWm9vbVwiLExuKSxLaS5Cb3hab29tPWduLEtpLkRvdWJsZUNsaWNrWm9vbT12bixLaS5EcmFnPXluLEtpLktleWJvYXJkPXhuLEtpLlNjcm9sbFdoZWVsWm9vbT13bixLaS5UYXA9UG4sS2kuVG91Y2hab29tPUxuLHQudmVyc2lvbj1cIjEuNy4xXCIsdC5Db250cm9sPVhpLHQuY29udHJvbD1ZaSx0LkJyb3dzZXI9QnQsdC5FdmVudGVkPUUsdC5NaXhpbj1uZSx0LlV0aWw9Qyx0LkNsYXNzPVMsdC5IYW5kbGVyPWllLHQuZXh0ZW5kPWgsdC5iaW5kPXAsdC5zdGFtcD1tLHQuc2V0T3B0aW9ucz1jLHQuRG9tRXZlbnQ9cWksdC5Eb21VdGlsPU1pLHQuUG9zQW5pbWF0aW9uPUdpLHQuRHJhZ2dhYmxlPWFlLHQuTGluZVV0aWw9ZmUsdC5Qb2x5VXRpbD15ZSx0LlBvaW50PWssdC5wb2ludD1BLHQuQm91bmRzPUksdC5ib3VuZHM9Tyx0LlRyYW5zZm9ybWF0aW9uPXEsdC50cmFuc2Zvcm1hdGlvbj1HLHQuUHJvamVjdGlvbj1QZSx0LkxhdExuZz1ELHQubGF0TG5nPWosdC5MYXRMbmdCb3VuZHM9Uix0LmxhdExuZ0JvdW5kcz1OLHQuQ1JTPUgsdC5HZW9KU09OPU5lLHQuZ2VvSlNPTj1LZSx0Lmdlb0pzb249WWUsdC5MYXllcj1NZSx0LkxheWVyR3JvdXA9emUsdC5sYXllckdyb3VwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyB6ZSh0LGkpfSx0LkZlYXR1cmVHcm91cD1DZSx0LmZlYXR1cmVHcm91cD1mdW5jdGlvbih0LGkpe3JldHVybiBuZXcgQ2UodCxpKX0sdC5JbWFnZU92ZXJsYXk9WGUsdC5pbWFnZU92ZXJsYXk9ZnVuY3Rpb24odCxpLGUpe3JldHVybiBuZXcgWGUodCxpLGUpfSx0LlZpZGVvT3ZlcmxheT1KZSx0LnZpZGVvT3ZlcmxheT1mdW5jdGlvbih0LGksZSl7cmV0dXJuIG5ldyBKZSh0LGksZSl9LHQuU1ZHT3ZlcmxheT0kZSx0LnN2Z092ZXJsYXk9ZnVuY3Rpb24odCxpLGUpe3JldHVybiBuZXcgJGUodCxpLGUpfSx0LkRpdk92ZXJsYXk9UWUsdC5Qb3B1cD10bix0LnBvcHVwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyB0bih0LGkpfSx0LlRvb2x0aXA9ZW4sdC50b29sdGlwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBlbih0LGkpfSx0Lkljb249U2UsdC5pY29uPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgU2UodCl9LHQuRGl2SWNvbj1ubix0LmRpdkljb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBubih0KX0sdC5NYXJrZXI9a2UsdC5tYXJrZXI9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbmV3IGtlKHQsaSl9LHQuVGlsZUxheWVyPXNuLHQudGlsZUxheWVyPXJuLHQuR3JpZExheWVyPW9uLHQuZ3JpZExheWVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgb24odCl9LHQuU1ZHPXBuLHQuc3ZnPW1uLHQuUmVuZGVyZXI9aG4sdC5DYW52YXM9dW4sdC5jYW52YXM9bG4sdC5QYXRoPUJlLHQuQ2lyY2xlTWFya2VyPUFlLHQuY2lyY2xlTWFya2VyPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBBZSh0LGkpfSx0LkNpcmNsZT1JZSx0LmNpcmNsZT1mdW5jdGlvbih0LGksZSl7cmV0dXJuIG5ldyBJZSh0LGksZSl9LHQuUG9seWxpbmU9T2UsdC5wb2x5bGluZT1mdW5jdGlvbih0LGkpe3JldHVybiBuZXcgT2UodCxpKX0sdC5Qb2x5Z29uPVJlLHQucG9seWdvbj1mdW5jdGlvbih0LGkpe3JldHVybiBuZXcgUmUodCxpKX0sdC5SZWN0YW5nbGU9Zm4sdC5yZWN0YW5nbGU9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbmV3IGZuKHQsaSl9LHQuTWFwPUtpLHQubWFwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBLaSh0LGkpfTt2YXIgYm49d2luZG93Lkw7dC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5MPWJuLHRoaXN9LHdpbmRvdy5MPXR9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxlYWZsZXQuanMubWFwIiwiLypcbiAqIExlYWZsZXQuU2xlZXBcbiAqL1xuXG4vKlxuICogRGVmYXVsdCBCdXR0b24gKHRvdWNoIGRldmljZXMgb25seSlcbiAqL1xuXG5MLkNvbnRyb2wuU2xlZXBNYXBDb250cm9sID0gTC5Db250cm9sLmV4dGVuZCh7XG5cbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0cyl7XG4gICAgTC5zZXRPcHRpb25zKHRoaXMsb3B0cyk7XG4gIH0sXG5cbiAgb3B0aW9uczoge1xuICAgIHBvc2l0aW9uOiAndG9wcmlnaHQnLFxuICAgIHByb21wdDogJ2Rpc2FibGUgbWFwJyxcbiAgICBzdHlsZXM6IHtcbiAgICAgICdiYWNrZ3JvdW5kQ29sb3InOiAnd2hpdGUnLFxuICAgICAgJ3BhZGRpbmcnOiAnNXB4JyxcbiAgICAgICdib3JkZXInOiAnMnB4IHNvbGlkIGdyYXknXG4gICAgfVxuICB9LFxuXG4gIGJ1aWxkQ29udGFpbmVyOiBmdW5jdGlvbigpe1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgY29udGFpbmVyID0gTC5Eb21VdGlsLmNyZWF0ZSgncCcsICdzbGVlcC1idXR0b24nKTtcbiAgICB2YXIgYm91bmRFdmVudCA9IHRoaXMuX25vbkJvdW5kRXZlbnQuYmluZCh0aGlzKTtcbiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLnByb21wdDtcbiAgICBMLkRvbUV2ZW50LmFkZExpc3RlbmVyKGNvbnRhaW5lciwgJ2NsaWNrJywgYm91bmRFdmVudCk7XG4gICAgTC5Eb21FdmVudC5hZGRMaXN0ZW5lcihjb250YWluZXIsICd0b3VjaHN0YXJ0JywgYm91bmRFdmVudCk7XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMuc3R5bGVzKS5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICBjb250YWluZXIuc3R5bGVba2V5XSA9IHNlbGYub3B0aW9ucy5zdHlsZXNba2V5XTtcbiAgICB9KTtcblxuICAgIHJldHVybiAodGhpcy5fY29udGFpbmVyID0gY29udGFpbmVyKTtcbiAgfSxcblxuICBvbkFkZDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250YWluZXIgfHwgdGhpcy5idWlsZENvbnRhaW5lcigpO1xuICB9LFxuXG4gIF9ub25Cb3VuZEV2ZW50OiBmdW5jdGlvbihlKSB7XG4gICAgTC5Eb21FdmVudC5zdG9wKGUpO1xuICAgIGlmICh0aGlzLl9tYXApIHRoaXMuX21hcC5zbGVlcC5fc2xlZXBNYXAoKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxufSk7XG5cbkwuQ29udHJvbC5zbGVlcE1hcENvbnRyb2wgPSBmdW5jdGlvbigpe1xuICByZXR1cm4gbmV3IEwuQ29udHJvbC5TbGVlcE1hcENvbnRyb2woKTtcbn07XG5cblxuLypcbiAqIFRoZSBTbGVlcCBIYW5kbGVyXG4gKi9cblxuTC5NYXAubWVyZ2VPcHRpb25zKHtcbiAgc2xlZXA6IHRydWUsXG4gIHNsZWVwVGltZTogNzUwLFxuICB3YWtlVGltZTogNzUwLFxuICB3YWtlTWVzc2FnZVRvdWNoOiAnVG91Y2ggdG8gV2FrZScsXG4gIHNsZWVwTm90ZTogdHJ1ZSxcbiAgaG92ZXJUb1dha2U6IHRydWUsXG4gIHNsZWVwT3BhY2l0eTouNyxcbiAgc2xlZXBCdXR0b246IEwuQ29udHJvbC5zbGVlcE1hcENvbnRyb2xcbn0pO1xuXG5MLk1hcC5TbGVlcCA9IEwuSGFuZGxlci5leHRlbmQoe1xuXG4gIGFkZEhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuc2xlZXBOb3RlID0gTC5Eb21VdGlsLmNyZWF0ZSgncCcsICdzbGVlcC1ub3RlJywgdGhpcy5fbWFwLl9jb250YWluZXIpO1xuICAgIHRoaXMuX2VudGVyVGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5fZXhpdFRpbWVvdXQgP
24510SBudWxsO1xuXG4gICAgLypcbiAgICAgKiBJZiB0aGUgZGV2aWNlIGhhcyBvbmx5IGEgdG91Y2hzY3JlZW4gd2Ugd2lsbCBuZXZlciBnZXRcbiAgICAgKiBhIG1vdXNlb3V0IGV2ZW50LCBzbyB3ZSBhZGQgYW4gZXh0cmEgYnV0dG9uIHRvIHB1dCB0aGUgbWFwXG4gICAgICogYmFjayB0byBzbGVlcCBtYW51YWxseS5cbiAgICAgKlxuICAgICAqIGEgY3VzdG9tIGNvbnRyb2wvYnV0dG9uIGNhbiBiZSBwcm92aWRlZCBieSB0aGUgdXNlclxuICAgICAqIHdpdGggdGhlIG1hcCdzIGBzbGVlcEJ1dHRvbmAgb3B0aW9uXG4gICAgICovXG4gICAgdGhpcy5fc2xlZXBCdXR0b24gPSB0aGlzLl9tYXAub3B0aW9ucy5zbGVlcEJ1dHRvbigpO1xuXG4gICAgaWYgKHRoaXMuX21hcC50YXApIHtcbiAgICAgIHRoaXMuX21hcC5hZGRDb250cm9sKHRoaXMuX3NsZWVwQnV0dG9uKTtcbiAgICB9XG5cbiAgICB2YXIgbWFwU3R5bGUgPSB0aGlzLl9tYXAuX2NvbnRhaW5lci5zdHlsZTtcbiAgICBtYXBTdHlsZS5XZWJraXRUcmFuc2l0aW9uICs9ICdvcGFjaXR5IC41cyc7XG4gICAgbWFwU3R5bGUuTW96VHJhbnNpdGlvbiArPSAnb3BhY2l0eSAuNXMnO1xuXG4gICAgdGhpcy5fc2V0U2xlZXBOb3RlU3R5bGUoKTtcbiAgICB0aGlzLl9zbGVlcE1hcCgpO1xuICB9LFxuXG4gIHJlbW92ZUhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9tYXAuc2Nyb2xsV2hlZWxab29tLmVuYWJsZWQoKSl7XG4gICAgICB0aGlzLl9tYXAuc2Nyb2xsV2hlZWxab29tLmVuYWJsZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbWFwLnRhcCkge1xuICAgICAgdGhpcy5fbWFwLnRvdWNoWm9vbS5lbmFibGUoKTtcbiAgICAgIHRoaXMuX21hcC5kcmFnZ2luZy5lbmFibGUoKTtcbiAgICAgIHRoaXMuX21hcC50YXAuZW5hYmxlKCk7XG4gICAgfVxuICAgIEwuRG9tVXRpbC5zZXRPcGFjaXR5KCB0aGlzLl9tYXAuX2NvbnRhaW5lciwgMSk7XG4gICAgTC5Eb21VdGlsLnNldE9wYWNpdHkoIHRoaXMuc2xlZXBOb3RlLCAwKTtcbiAgICB0aGlzLl9yZW1vdmVTbGVlcGluZ0xpc3RlbmVycygpO1xuICAgIHRoaXMuX3JlbW92ZUF3YWtlTGlzdGVuZXJzKCk7XG4gIH0sXG5cbiAgX3NldFNsZWVwTm90ZVN0eWxlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbm90ZVN0cmluZyA9ICcnO1xuICAgIHZhciBzdHlsZSA9IHRoaXMuc2xlZXBOb3RlLnN0eWxlO1xuXG4gICAgaWYodGhpcy5fbWFwLnRhcCkge1xuICAgICAgbm90ZVN0cmluZyA9IHRoaXMuX21hcC5vcHRpb25zLndha2VNZXNzYWdlVG91Y2g7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9tYXAub3B0aW9ucy53YWtlTWVzc2FnZSkge1xuICAgICAgbm90ZVN0cmluZyA9IHRoaXMuX21hcC5vcHRpb25zLndha2VNZXNzYWdlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fbWFwLm9wdGlvbnMuaG92ZXJUb1dha2UpIHtcbiAgICAgIG5vdGVTdHJpbmcgPSAnY2xpY2sgb3IgaG92ZXIgdG8gd2FrZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdGVTdHJpbmcgPSAnY2xpY2sgdG8gd2FrZSc7XG4gICAgfVxuXG4gICAgaWYoIHRoaXMuX21hcC5vcHRpb25zLnNsZWVwTm90ZSApe1xuICAgICAgdGhpcy5zbGVlcE5vdGUuaW5uZXJIVE1MID0gbm90ZVN0cmluZztcbiAgICAgIHN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICBzdHlsZS5tYXhXaWR0aCA9ICcxNTBweCc7XG4gICAgICBzdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSAnLjJzJztcbiAgICAgIHN0eWxlLnpJbmRleCA9IDUwMDA7XG4gICAgICBzdHlsZS5tYXJnaW4gPSAnYXV0byc7XG4gICAgICBzdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICAgIHN0eWxlLmJvcmRlclJhZGl1cyA9ICc0cHgnO1xuICAgICAgc3R5bGUudG9wID0gJzUwJSc7XG4gICAgICBzdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgICBzdHlsZS5wYWRkaW5nID0gJzVweCc7XG4gICAgICBzdHlsZS5ib3JkZXIgPSAnc29saWQgMnB4IGJsYWNrJztcbiAgICAgIHN0eWxlLmJhY2tncm91bmQgPSAnd2hpdGUnO1xuXG4gICAgICBpZih0aGlzLl9tYXAub3B0aW9ucy5zbGVlcE5vdGVTdHlsZSkge1xuICAgICAgICB2Y
24510XIgbm90ZVN0eWxlT3ZlcnJpZGVzID0gdGhpcy5fbWFwLm9wdGlvbnMuc2xlZXBOb3RlU3R5bGU7XG4gICAgICAgIE9iamVjdC5rZXlzKG5vdGVTdHlsZU92ZXJyaWRlcykubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgIHN0eWxlW2tleV0gPSBub3RlU3R5bGVPdmVycmlkZXNba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIF93YWtlTWFwOiBmdW5jdGlvbiAoZSkge1xuICAgIHRoaXMuX3N0b3BXYWl0aW5nKCk7XG4gICAgdGhpcy5fbWFwLnNjcm9sbFdoZWVsWm9vbS5lbmFibGUoKTtcbiAgICBpZiAodGhpcy5fbWFwLnRhcCkge1xuICAgICAgdGhpcy5fbWFwLnRvdWNoWm9vbS5lbmFibGUoKTtcbiAgICAgIHRoaXMuX21hcC5kcmFnZ2luZy5lbmFibGUoKTtcbiAgICAgIHRoaXMuX21hcC5hZGRDb250cm9sKHRoaXMuX3NsZWVwQnV0dG9uKTtcbiAgICB9XG4gICAgTC5Eb21VdGlsLnNldE9wYWNpdHkoIHRoaXMuX21hcC5fY29udGFpbmVyLCAxKTtcbiAgICB0aGlzLnNsZWVwTm90ZS5zdHlsZS5vcGFjaXR5ID0gMDtcbiAgICB0aGlzLl9hZGRBd2FrZUxpc3RlbmVycygpO1xuICB9LFxuXG4gIF9zbGVlcE1hcDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX3N0b3BXYWl0aW5nKCk7XG4gICAgdGhpcy5fbWFwLnNjcm9sbFdoZWVsWm9vbS5kaXNhYmxlKCk7XG5cbiAgICBpZiAodGhpcy5fbWFwLnRhcCkge1xuICAgICAgdGhpcy5fbWFwLnRvdWNoWm9vbS5kaXNhYmxlKCk7XG4gICAgICB0aGlzLl9tYXAuZHJhZ2dpbmcuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5fbWFwLnRhcC5kaXNhYmxlKCk7XG4gICAgICB0aGlzLl9tYXAucmVtb3ZlQ29udHJvbCh0aGlzLl9zbGVlcEJ1dHRvbik7XG4gICAgfVxuXG4gICAgTC5Eb21VdGlsLnNldE9wYWNpdHkoIHRoaXMuX21hcC5fY29udGFpbmVyLCB0aGlzLl9tYXAub3B0aW9ucy5zbGVlcE9wYWNpdHkpO1xuICAgIHRoaXMuc2xlZXBOb3RlLnN0eWxlLm9wYWNpdHkgPSB0aGlzLl9tYXAub3B0aW9ucy5zbGVlcE5vdGVTdHlsZSAmJiB0aGlzLl9tYXAub3B0aW9ucy5zbGVlcE5vdGVTdHlsZS5vcGFjaXR5ID8gdGhpcy5fbWFwLm9wdGlvbnMuc2xlZXBOb3RlU3R5bGUub3BhY2l0eSA6IC42O1xuICAgIHRoaXMuX2FkZFNsZWVwaW5nTGlzdGVuZXJzKCk7XG4gIH0sXG5cbiAgX3dha2VQZW5kaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fbWFwLm9uY2UoJ21vdXNlZG93bicsIHRoaXMuX3dha2VNYXAsIHRoaXMpO1xuICAgIGlmICh0aGlzLl9tYXAub3B0aW9ucy5ob3ZlclRvV2FrZSl7XG4gICAgICB2Y
24510XIgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLl9tYXAub25jZSgnbW91c2VvdXQnLCB0aGlzLl9zbGVlcE1hcCwgdGhpcyk7XG4gICAgICBzZWxmLl9lbnRlclRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgc2VsZi5fbWFwLm9mZignbW91c2VvdXQnLCBzZWxmLl9zbGVlcE1hcCwgc2VsZik7XG4gICAgICAgICAgc2VsZi5fd2FrZU1hcCgpO1xuICAgICAgfSAsIHNlbGYuX21hcC5vcHRpb25zLndha2VUaW1lKTtcbiAgICB9XG4gIH0sXG5cbiAgX3NsZWVwUGVuZGluZzogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBzZWxmLl9tYXAub25jZSgnbW91c2VvdmVyJywgc2VsZi5fd2FrZU1hcCwgc2VsZik7XG4gICAgc2VsZi5fZXhpdFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgIHNlbGYuX21hcC5vZmYoJ21vdXNlb3ZlcicsIHNlbGYuX3dha2VNYXAsIHNlbGYpO1xuICAgICAgICBzZWxmLl9zbGVlcE1hcCgpO1xuICAgIH0gLCBzZWxmLl9tYXAub3B0aW9ucy5zbGVlcFRpbWUpO1xuICB9LFxuXG4gIF9hZGRTbGVlcGluZ0xpc3RlbmVyczogZnVuY3Rpb24oKXtcbiAgICB0aGlzLl9tYXAub25jZSgnbW91c2VvdmVyJywgdGhpcy5fd2FrZVBlbmRpbmcsIHRoaXMpO1xuICAgIHRoaXMuX21hcC50YXAgJiZcbiAgICAgIHRoaXMuX21hcC5vbmNlKCdjbGljaycsIHRoaXMuX3dha2VNYXAsIHRoaXMpO1xuICAgIFxuICB9LFxuXG4gIF9hZGRBd2FrZUxpc3RlbmVyczogZnVuY3Rpb24oKXtcbiAgICB0aGlzLl9tYXAub25jZSgnbW91c2VvdXQnLCB0aGlzLl9zbGVlcFBlbmRpbmcsIHRoaXMpO1xuICB9LFxuXG4gIF9yZW1vdmVTbGVlcGluZ0xpc3RlbmVyczogZnVuY3Rpb24oKXtcbiAgICB0aGlzLl9tYXAub3B0aW9ucy5ob3ZlclRvV2FrZSAmJlxuICAgICAgdGhpcy5fbWFwLm9mZignbW91c2VvdmVyJywgdGhpcy5fd2FrZVBlbmRpbmcsIHRoaXMpO1xuICAgIHRoaXMuX21hcC5vZmYoJ21vdXNlZG93bicsIHRoaXMuX3dha2VNYXAsIHRoaXMpO1xuICAgIHRoaXMuX21hcC50YXAgJiZcbiAgICAgIHRoaXMuX21hcC5vZmYoJ2NsaWNrJywgdGhpcy5fd2FrZU1hcCwgdGhpcyk7XG4gIH0sXG5cbiAgX3JlbW92ZUF3YWtlTGlzdGVuZXJzOiBmdW5jdGlvbigpe1xuICAgIHRoaXMuX21hcC5vZmYoJ21vdXNlb3V0JywgdGhpcy5fc2xlZXBQZW5kaW5nLCB0aGlzKTtcbiAgfSxcblxuICBfc3RvcFdhaXRpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9yZW1vdmVTbGVlcGluZ0xpc3RlbmVycygpO1xuICAgIHRoaXMuX3JlbW92ZUF3YWtlTGlzdGVuZXJzKCk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmKHRoaXMuX2VudGVyVGltZW91dCkgY2xlYXJUaW1lb3V0KHNlbGYuX2VudGVyVGltZW91dCk7XG4gICAgaWYodGhpcy5fZXhpdFRpbWVvdXQpIGNsZWFyVGltZW91dChzZWxmLl9leGl0VGltZW91dCk7XG4gICAgdGhpcy5fZW50ZXJUaW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLl9leGl0VGltZW91dCA9IG51bGw7XG4gIH1cbn0pO1xuXG5MLk1hcC5hZGRJbml0SG9vaygnYWRkSGFuZGxlcicsICdzbGVlcCcsIEwuTWFwLlNsZWVwKTsiLCIhZnVuY3Rpb24oZSl7dmFyIHQ9e307ZnVuY3Rpb24gbihpKXtpZih0W2ldKXJldHVybiB0W2ldLmV4cG9ydHM7dmFyIHM9dFtpXT17aTppLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbaV0uY2FsbChzLmV4cG9ydHMscyxzLmV4cG9ydHMsbikscy5sPSEwLHMuZXhwb3J0c31uLm09ZSxuLmM9dCxuLmQ9ZnVuY3Rpb24oZSx0LGkpe24ubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDppfSl9LG4ucj1mdW5jdGlvbihlKXtcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxuLnQ9ZnVuY3Rpb24oZSx0KXtpZigxJnQmJihlPW4oZSkpLDgmdClyZXR1cm4gZTtpZig0JnQmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihuLnIoaSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pLDImdCYmXCJzdHJpbmdcIiE9dHlwZW9mIGUpZm9yKHZhciBzIGluIGUpbi5kKGkscyxmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0uYmluZChudWxsLHMpKTtyZXR1cm4gaX0sbi5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiBuLmQodCxcImFcIix0KSx0fSxuLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LG4ucD1cIlwiLG4obi5zPTEpfShbZnVuY3Rpb24oZSl7ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3tcImFcIjpcIjguNS4yMFwifScpfSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7bi5yKHQpO3ZhciBpPW4oMCkscz17aG9va3M6e30sZXh0ZW5zaW9uczpbXSx3cmFwcGVyczpbXSxuYXZiYXI6e2FkZDohMCxzdGlja3k6ITAsdGl0bGU6XCJNZW51XCIsdGl0bGVMaW5rOlwicGFyZW50XCJ9LG9uQ2xpY2s6e2Nsb3NlOm51bGwscHJldmVudERlZmF1bHQ6bnVsbCxzZXRTZWxlY3RlZDohMH0sc2xpZGluZ1N1Ym1lbnVzOiEwfSxhPXtjbGFzc05hbWVzOntpbnNldDpcIkluc2V0XCIsbm9saXN0dmlldzpcIk5vTGlzdHZpZXdcIixub3BhbmVsOlwiTm9QYW5lbFwiLHBhbmVsOlwiUGFuZWxcIixzZWxlY3RlZDpcIlNlbGVjdGVkXCIsdmVydGljYWw6XCJWZXJ0aWNhbFwifSxsYW5ndWFnZTpudWxsLG9wZW5pbmdJbnRlcnZhbDoyNSxwYW5lbE5vZGV0eXBlOltcInVsXCIsXCJvbFwiLFwiZGl2XCJdLHRyYW5zaXRpb25EdXJhdGlvbjo0MDB9O2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIG4gaW5cIm9iamVjdFwiIT1yKGUpJiYoZT17fSksXCJvYmplY3RcIiE9cih0KSYmKHQ9e30pLHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKHZvaWQgMD09PWVbbl0/ZVtuXT10W25dOlwib2JqZWN0XCI9PXIoZVtuXSkmJm8oZVtuXSx0W25dKSk7cmV0dXJuIGV9ZnVuY3Rpb24gcihlKXtyZXR1cm57fS50b1N0cmluZy5jYWxsKGUpLm1hdGNoKC9cXHMoW2EtekEtWl0rKS8pWzFdLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gYyhlLHQsbil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdCl7dmFyIGk9dC5jYWxsKGUpO2lmKHZvaWQgMCE9PWkpcmV0dXJuIGl9cmV0dXJuIG51bGwhPT10JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZ2b2lkIDAhPT10fHx2b2lkIDA9PT1uP3Q6bn1mdW5jdGlvbiBtKGUsdCxuKXt2YXIgaT0hMSxzPWZ1bmN0aW9uKG4pe3ZvaWQgMCE9PW4mJm4udGFyZ2V0IT09ZXx8KGl8fChlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIscyksZS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2Via2l0VHJhbnNpdGlvbkVuZFwiLHMpLHQuY2FsbChlKSksaT0hMCl9O2UuYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIixzKSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJ3ZWJraXRUcmFuc2l0aW9uRW5kXCIscyksc2V0VGltZW91dChzLDEuMSpuKX1mdW5jdGlvbiBsKCl7cmV0dXJuXCJtbS1cIitkKyt9dmFyIGQ9MDtmdW5jdGlvbiBwKGUpe3JldHVyblwibW0tXCI9PWUuc2xpY2UoMCwzKT9lLnNsaWNlKDMpOmV9dmFyIHU9e307ZnVuY3Rpb24gZihlLHQpe3ZvaWQgMD09PXVbdF0mJih1W3RdPXt9KSxvKHVbdF0sZSl9dmFyIGg9e01lbnU6XCLZhdmG2YhcIn0sdj17TWVudTpcIk1lbsO8XCJ9LGI9e01lbnU6XCLQnNC10L3RjlwifTtmdW5jdGlvbiBnKGUpe3ZhciB0PWUuc3BsaXQoXCIuXCIpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0LnNoaWZ0KCkpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe24uY2xhc3NMaXN0LmFkZChlKX0pKSxufWZ1bmN0aW9uIF8oZSx0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5xdWVyeVNlbGVjdG9yQWxsKHQpKX1mdW5jdGlvbiB5KGUsdCl7dmFyIG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5jaGlsZHJlbik7cmV0dXJuIHQ/bi5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoZXModCl9KSk6bn1mdW5jdGlvbiBMKGUsdCl7Zm9yKHZhciBuPVtdLGk9ZS5wYXJlbnRFbGVtZW50O2k7KW4ucHVzaChpKSxpPWkucGFyZW50RWxlbWVudDtyZXR1cm4gdD9uLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2hlcyh0KX0pKTpufWZ1bmN0aW9uIHcoZSl7cmV0dXJuIGUuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5tYXRjaGVzKFwiLm1tLWhpZGRlblwiKX0pKX1mdW5jdGlvbiBFKGUpe3ZhciB0PVtdO3JldHVybiB3KGUpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaC5hcHBseSh0LHkoZSxcImEubW0tbGlzdGl0ZW1fX3RleHRcIikpfSkpLHQuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5tYXRjaGVzKFwiLm1tLWJ0bl9uZXh0XCIpfSkpfWZ1bmN0aW9uIHgoZSx0LG4pe2UubWF0Y2hlcyhcIi5cIit0KSYmKGUuY2xhc3NMaXN0LnJlbW92ZSh0KSxlLmNsYXNzTGlzdC5hZGQobikpfXZhciBQPXt9O2Z1bmN0aW9uIGsoZSx0LG4pe1wibnVtYmVyXCI9PXR5cGVvZiBlJiYoZT1cIihtaW4td2lkdGg6IFwiK2UrXCJweClcIiksUFtlXT1QW2VdfHxbXSxQW2VdLnB1c2goe3llczp0LG5vOm59KX1mdW5jdGlvbiBTKGUsdCl7Zm9yKHZhciBuPXQubWF0Y2hlcz9cInllc1wiOlwibm9cIixpPTA7aTxQW2VdLmxlbmd0aDtpKyspUFtlXVtpXVtuXSgpfWYoe01lbnU6XCJNZW51XCJ9LFwibmxcIiksZihoLFwiZmFcIiksZih2LFwiZGVcIiksZihiLFwicnVcIik7dmFyIE09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbixpKXtyZXR1cm4gdGhpcy5vcHRzPW8obixlLm9wdGlvbnMpLHRoaXMuY29uZj1vKGksZS5jb25maWdzKSx0aGlzLl9hcGk9W1wiYmluZFwiLFwiaW5
24510pdFBhbmVsXCIsXCJpbml0TGlzdHZpZXdcIixcIm9wZW5QYW5lbFwiLFwiY2xvc2VQYW5lbFwiLFwiY2xvc2VBbGxQYW5lbHNcIixcInNldFNlbGVjdGVkXCJdLHRoaXMubm9kZT17fSx0aGlzLnZhcnM9e30sdGhpcy5ob29rPXt9LHRoaXMuY2xjaz1bXSx0aGlzLm5vZGUubWVudT1cInN0cmluZ1wiPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpOnQsXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5fZGVwcmVjYXRlZFdhcm5pbmdzJiZ0aGlzLl9kZXByZWNhdGVkV2FybmluZ3MoKSx0aGlzLl9pbml0V3JhcHBlcnMoKSx0aGlzLl9pbml0QWRkb25zKCksdGhpcy5faW5pdEV4dGVuc2lvbnMoKSx0aGlzLl9pbml0SG9va3MoKSx0aGlzLl9pbml0QVBJKCksdGhpcy5faW5pdE1lbnUoKSx0aGlzLl9pbml0UGFuZWxzKCksdGhpcy5faW5pdE9wZW5lZCgpLHRoaXMuX2luaXRBbmNob3JzKCksZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbihlKXt2YXIgdD13aW5kb3cubWF0Y2hNZWRpYShlKTtTKGUsdCksdC5vbmNoYW5nZT1mdW5jdGlvbihuKXtTKGUsdCl9fTtmb3IodmFyIHQgaW4gUCllKHQpfSgpLHRoaXN9cmV0dXJuIGUucHJvdG90eXBlLm9wZW5QYW5lbD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYodGhpcy50cmlnZ2VyKFwib3BlblBhbmVsOmJlZm9yZVwiLFtlXSksZSYmKGUubWF0Y2hlcyhcIi5tbS1wYW5lbFwiKXx8KGU9ZS5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpKSxlKSl7aWYoXCJib29sZWFuXCIhPXR5cGVvZiB0JiYodD0hMCksZS5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoXCIubW0tbGlzdGl0ZW1fdmVydGljYWxcIikpe0woZSxcIi5tbS1saXN0aXRlbV92ZXJ0aWNhbFwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNsYXNzTGlzdC5hZGQoXCJtbS1saXN0aXRlbV9vcGVuZWRcIikseShlLFwiLm1tLXBhbmVsXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWhpZGRlblwiKX0pKX0pKTt2YXIgaT1MKGUsXCIubW0tcGFuZWxcIikuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoXCIubW0tbGlzdGl0ZW1fdmVydGljYWxcIil9KSk7dGhpcy50cmlnZ2VyKFwib3BlblBhbmVsOnN0YXJ0XCIsW2VdKSxpLmxlbmd0aCYmdGhpcy5vcGVuUGFuZWwoaVswXSksdGhpcy50cmlnZ2VyKFwib3BlblBhbmVsOmZpbmlzaFwiLFtlXSl9ZWxzZXtpZihlLm1hdGNoZXMoXCIubW0tcGFuZWxfb3BlbmVkXCIpKXJldHVybjt2YXIgcz15KHRoaXMubm9kZS5wbmxzLFwiLm1tLXBhbmVsXCIpLGE9eSh0aGlzLm5vZGUucG5scyxcIi5tbS1wYW5lbF9vcGVuZWRcIilbMF07cy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09ZX0pKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1wYW5lbF9vcGVuZWQtcGFyZW50XCIpfSkpO2Zvcih2YXIgbz1lLm1tUGFyZW50O287KShvPW8uY2xvc2VzdChcIi5tbS1wYW5lbFwiKSkmJihvLnBhcmVudEVsZW1lbnQubWF0Y2hlcyhcIi5tbS1saXN0aXRlbV92ZXJ0aWNhbFwiKXx8by5jbGFzc0xpc3QuYWRkKFwibW0tcGFuZWxfb3BlbmVkLXBhcmVudFwiKSxvPW8ubW1QYXJlbnQpO3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0tcGFuZWxfaGlnaGVzdFwiKX0pKSxzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1hfSkpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1lfSkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuY2xhc3NMaXN0LmFkZChcIm1tLWhpZGRlblwiKX0pKSxlLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1oaWRkZW5cIik7dmFyIHI9ZnVuY3Rpb24oKXthJiZhLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1wYW5lbF9vcGVuZWRcIiksZS5jbGFzc0xpc3QuYWRkKFwibW0tcGFuZWxfb3BlbmVkXCIpLGUubWF0Y2hlcyhcIi5tbS1wYW5lbF9vcGVuZWQtcGFyZW50XCIpPyhhJiZhLmNsYXNzTGlzdC5hZGQoXCJtbS1wYW5lbF9oaWdoZXN0XCIpLGUuY2xhc3NMaXN0LnJlbW92ZShcIm1tLXBhbmVsX29wZW5lZC1wYXJlbnRcIikpOihhJiZhLmNsYXNzTGlzdC5hZGQoXCJtbS1wYW5lbF9vcGVuZWQtcGFyZW50XCIpLGUuY2xhc3NMaXN0LmFkZChcIm1tLXBhbmVsX2hpZ2hlc3RcIikpLG4udHJpZ2dlcihcIm9wZW5QYW5lbDpzdGFydFwiLFtlXSl9LGM9ZnVuY3Rpb24oKXthJiYoYS5jbGFzc0xpc3QucmVtb3ZlKFwibW0tcGFuZWxfaGlnaGVzdFwiKSxhLmNsYXNzTGlzdC5hZGQoXCJtbS1oaWRkZW5cIikpLGUuY2xhc3NMaXN0LnJlbW92ZShcIm1tLXBhbmVsX2hpZ2hlc3RcIiksbi50cmlnZ2VyKFwib3BlblBhbmVsOmZpbmlzaFwiLFtlXSl9O3QmJiFlLm1hdGNoZXMoXCIubW0tcGFuZWxfbm9hbmltYXRpb25cIik/c2V0VGltZW91dCgoZnVuY3Rpb24oKXttKGUsKGZ1bmN0aW9uKCl7YygpfSksbi5jb25mLnRyYW5zaXRpb25EdXJhdGlvbikscigpfSksdGhpcy5jb25mLm9wZW5pbmdJbnRlcnZhbCk6KHIoKSxjKCkpfXRoaXMudHJpZ2dlcihcIm9wZW5QYW5lbDphZnRlclwiLFtlXSl9fSxlLnByb3RvdHlwZS5jbG9zZVBhbmVsPWZ1bmN0aW9uKGUpe3RoaXMudHJpZ2dlcihcImNsb3NlUGFuZWw6YmVmb3JlXCIsW2VdKTt2YXIgdD1lLnBhcmVudEVsZW1lbnQ7dC5tYXRjaGVzKFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpJiYodC5jbGFzc0xpc3QucmVtb3ZlKFwibW0tbGlzdGl0ZW1fb3BlbmVkXCIpLGUuY2xhc3NMaXN0LmFkZChcIm1tLWhpZGRlblwiKSx0aGlzLnRyaWdnZXIoXCJjbG9zZVBhbmVsXCIsW2VdKSksdGhpcy50cmlnZ2VyKFwiY2xvc2VQYW5lbDphZnRlclwiLFtlXSl9LGUucHJvdG90eXBlLmNsb3NlQWxsUGFuZWxzPWZ1bmN0aW9uKGUpe3RoaXMudHJpZ2dlcihcImNsb3NlQWxsUGFuZWxzOmJlZm9yZVwiKSx0aGlzLm5vZGUucG5scy5xdWVyeVNlbGVjdG9yQWxsKFwiLm1tLWxpc3RpdGVtXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWxpc3RpdGVtX3NlbGVjdGVkXCIpLGUuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWxpc3RpdGVtX29wZW5lZFwiKX0pKTt2YXIgdD15KHRoaXMubm9kZS5wbmxzLFwiLm1tLXBhbmVsXCIpLG49ZXx8dFswXTt5KHRoaXMubm9kZS5wbmxzLFwiLm1tLXBhbmVsXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UhPT1uJiYoZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0tcGFuZWxfb3BlbmVkXCIpLGUuY2xhc3NMaXN0LnJlbW92ZShcIm1tLXBhbmVsX29wZW5lZC1wYXJlbnRcIiksZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0tcGFuZWxfaGlnaGVzdFwiKSxlLmNsYXNzTGlzdC5hZGQoXCJtbS1oaWRkZW5cIikpfSkpLHRoaXMub3BlblBhbmVsKG4sITEpLHRoaXMudHJpZ2dlcihcImNsb3NlQWxsUGFuZWxzOmFmdGVyXCIpfSxlLnByb3RvdHlwZS50b2dnbGVQYW5lbD1mdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudEVsZW1lbnQ7dC5tYXRjaGVzKFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpJiZ0aGlzW3QubWF0Y2hlcyhcIi5tbS1saXN0aXRlbV9vcGVuZWRcIik/XCJjbG9zZVBhbmVsXCI6XCJvcGVuUGFuZWxcIl0oZSl9LGUucHJvdG90eXBlLnNldFNlbGVjdGVkPWZ1bmN0aW9uKGUpe3RoaXMudHJpZ2dlcihcInNldFNlbGVjdGVkOmJlZm9yZVwiLFtlXSksXyh0aGlzLm5vZGUubWVudSxcIi5tbS1saXN0aXRlbV9zZWxlY3RlZFwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1saXN0aXRlbV9zZWxlY3RlZFwiKX0pKSxlLmNsYXNzTGlzdC5hZGQoXCJtbS1saXN0aXRlbV9zZWxlY3RlZFwiKSx0aGlzLnRyaWdnZXIoXCJzZXRTZWxlY3RlZDphZnRlclwiLFtlXSl9LGUucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmhvb2tbZV09dGhpcy5ob29rW2VdfHxbXSx0aGlzLmhvb2tbZV0ucHVzaCh0KX0sZS5wcm90b3R5cGUudHJpZ2dlcj1mdW5jdGlvbihlLHQpe2lmKHRoaXMuaG9va1tlXSlmb3IodmFyIG49MCxpPXRoaXMuaG9va1tlXS5sZW5ndGg7bjxpO24rKyl0aGlzLmhvb2tbZV1bbl0uYXBwbHkodGhpcyx0KX0sZS5wcm90b3R5cGUuX2luaXRBUEk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpczt0aGlzLkFQST17fS
24510x0aGlzLl9hcGkuZm9yRWFjaCgoZnVuY3Rpb24obil7ZS5BUElbbl09ZnVuY3Rpb24oKXt2YXIgZT10W25dLmFwcGx5KHQsYXJndW1lbnRzKTtyZXR1cm4gdm9pZCAwPT09ZT90LkFQSTplfX0pKSx0aGlzLm5vZGUubWVudS5tbUFwaT10aGlzLkFQSX0sZS5wcm90b3R5cGUuX2luaXRIb29rcz1mdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLm9wdHMuaG9va3MpdGhpcy5iaW5kKGUsdGhpcy5vcHRzLmhvb2tzW2VdKX0sZS5wcm90b3R5cGUuX2luaXRXcmFwcGVycz1mdW5jdGlvbigpe3RoaXMudHJpZ2dlcihcImluaXRXcmFwcGVyczpiZWZvcmVcIik7Zm9yKHZhciB0PTA7dDx0aGlzLm9wdHMud3JhcHBlcnMubGVuZ3RoO3QrKyl7dmFyIG49ZS53cmFwcGVyc1t0aGlzLm9wdHMud3JhcHBlcnNbdF1dO1wiZnVuY3Rpb25cIj09dHlwZW9mIG4mJm4uY2FsbCh0aGlzKX10aGlzLnRyaWdnZXIoXCJpbml0V3JhcHBlcnM6YWZ0ZXJcIil9LGUucHJvdG90eXBlLl9pbml0QWRkb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMudHJpZ2dlcihcImluaXRBZGRvbnM6YmVmb3JlXCIpLGUuYWRkb25zKWUuYWRkb25zW3RdLmNhbGwodGhpcyk7dGhpcy50cmlnZ2VyKFwiaW5pdEFkZG9uczphZnRlclwiKX0sZS5wcm90b3R5cGUuX2luaXRFeHRlbnNpb25zPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnRyaWdnZXIoXCJpbml0RXh0ZW5zaW9uczpiZWZvcmVcIiksXCJhcnJheVwiPT1yKHRoaXMub3B0cy5leHRlbnNpb25zKSYmKHRoaXMub3B0cy5leHRlbnNpb25zPXthbGw6dGhpcy5vcHRzLmV4dGVuc2lvbnN9KSxPYmplY3Qua2V5cyh0aGlzLm9wdHMuZXh0ZW5zaW9ucykuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49ZS5vcHRzLmV4dGVuc2lvbnNbdF0ubWFwKChmdW5jdGlvbihlKXtyZXR1cm5cIm1tLW1lbnVfXCIrZX0pKTtuLmxlbmd0aCYmayh0LChmdW5jdGlvbigpe24uZm9yRWFjaCgoZnVuY3Rpb24odCl7ZS5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZCh0KX0pKX0pLChmdW5jdGlvbigpe24uZm9yRWFjaCgoZnVuY3Rpb24odCl7ZS5ub2RlLm1lbnUuY2xhc3NMaXN0LnJlbW92ZSh0KX0pKX0pKX0pKSx0aGlzLnRyaWdnZXIoXCJpbml0RXh0ZW5zaW9uczphZnRlclwiKX0sZS5wcm90b3R5cGUuX2luaXRNZW51PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnRyaWdnZXIoXCJpbml0TWVudTpiZWZvcmVcIiksdGhpcy5ub2RlLndycHI9dGhpcy5ub2RlLndycHJ8fHRoaXMubm9kZS5tZW51LnBhcmVudEVsZW1lbnQsdGhpcy5ub2RlLndycHIuY2xhc3NMaXN0LmFkZChcIm1tLXdyYXBwZXJcIiksdGhpcy5ub2RlLm1lbnUuaWQ9dGhpcy5ub2RlLm1lbnUuaWR8fGwoKTt2YXIgdD1nKFwiZGl2Lm1tLXBhbmVsc1wiKTt5KHRoaXMubm9kZS5tZW51KS5mb3JFYWNoKChmdW5jdGlvbihuKXtlLmNvbmYucGFuZWxOb2RldHlwZS5pbmRleE9mKG4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk+LTEmJnQuYXBwZW5kKG4pfSkpLHRoaXMubm9kZS5tZW51LmFwcGVuZCh0KSx0aGlzLm5vZGUucG5scz10LHRoaXMubm9kZS5tZW51LmNsYXNzTGlzdC5hZGQoXCJtbS1tZW51XCIpLHRoaXMudHJpZ2dlcihcImluaXRNZW51OmFmdGVyXCIpfSxlLnByb3RvdHlwZS5faW5pdFBhbmVscz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy50cmlnZ2VyKFwiaW5pdFBhbmVsczpiZWZvcmVcIiksdGhpcy5jbGNrLnB1c2goKGZ1bmN0aW9uKHQsbil7aWYobi5pbk1lbnUpe3ZhciBpPXQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKTtpZihpJiZpLmxlbmd0aD4xJiZcIiNcIj09aS5zbGljZSgwLDEpKXRyeXt2YXIgcz1fKGUubm9kZS5tZW51LGkpWzBdO2lmKHMmJnMubWF0Y2hlcyhcIi5tbS1wYW5lbFwiKSlyZXR1cm4gdC5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoXCIubW0tbGlzdGl0ZW1fdmVydGljYWxcIik/ZS50b2dnbGVQYW5lbChzKTplLm9wZW5QYW5lbChzKSwhMH1jYXRjaChlKXt9fX0pKSx5KHRoaXMubm9kZS5wbmxzKS5mb3JFYWNoKChmdW5jdGlvbih0KXtlLmluaXRQYW5lbCh0KX0pKSx0aGlzLnRyaWdnZXIoXCJpbml0UGFuZWxzOmFmdGVyXCIpfSxlLnByb3RvdHlwZS5pbml0UGFuZWw9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMuY29uZi5wYW5lbE5vZGV0eXBlLmpvaW4oXCIsIFwiKTtpZihlLm1hdGNoZXMobikmJihlLm1hdGNoZXMoXCIubW0tcGFuZWxcIil8fChlPXRoaXMuX2luaXRQYW5lbChlKSksZSkpe3ZhciBpPVtdO2kucHVzaC5hcHBseShpLHkoZSxcIi5cIit0aGlzLmNvbmYuY2xhc3NOYW1lcy5wYW5lbCkpLHkoZSxcIi
245105tbS1saXN0dmlld1wiKS5mb3JFYWNoKChmdW5jdGlvbihlKXt5KGUsXCIubW0tbGlzdGl0ZW1cIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aS5wdXNoLmFwcGx5KGkseShlLG4pKX0pKX0pKSxpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuaW5pdFBhbmVsKGUpfSkpfX0sZS5wcm90b3R5cGUuX2luaXRQYW5lbD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKHRoaXMudHJpZ2dlcihcImluaXRQYW5lbDpiZWZvcmVcIixbZV0pLHgoZSx0aGlzLmNvbmYuY2xhc3NOYW1lcy5wYW5lbCxcIm1tLXBhbmVsXCIpLHgoZSx0aGlzLmNvbmYuY2xhc3NOYW1lcy5ub3BhbmVsLFwibW0tbm9wYW5lbFwiKSx4KGUsdGhpcy5jb25mLmNsYXNzTmFtZXMuaW5zZXQsXCJtbS1saXN0dmlld19pbnNldFwiKSxlLm1hdGNoZXMoXCIubW0tbGlzdHZpZXdfaW5zZXRcIikmJmUuY2xhc3NMaXN0LmFkZChcIm1tLW5vcGFuZWxcIiksZS5tYXRjaGVzKFwiLm1tLW5vcGFuZWxcIikpcmV0dXJuIG51bGw7dmFyIG49ZS5pZHx8bCgpLGk9ZS5tYXRjaGVzKFwiLlwiK3RoaXMuY29uZi5jbGFzc05hbWVzLnZlcnRpY2FsKXx8IXRoaXMub3B0cy5zbGlkaW5nU3VibWVudXM7aWYoZS5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuY29uZi5jbGFzc05hbWVzLnZlcnRpY2FsKSxlLm1hdGNoZXMoXCJ1bCwgb2xcIikpe2UucmVtb3ZlQXR0cmlidXRlKFwiaWRcIik7dmFyIHM9ZyhcImRpdlwiKTtlLmJlZm9yZShzKSxzLmFwcGVuZChlKSxlPXN9ZS5pZD1uLGUuY2xhc3NMaXN0LmFkZChcIm1tLXBhbmVsXCIpLGUuY2xhc3NMaXN0LmFkZChcIm1tLWhpZGRlblwiKTt2YXIgYT1bZS5wYXJlbnRFbGVtZW50XS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoZXMoXCJsaVwiKX0pKVswXTtpZihpP2EmJmEuY2xhc3NMaXN0LmFkZChcIm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpOnRoaXMubm9kZS5wbmxzLmFwcGVuZChlKSxhJiYoYS5tbUNoaWxkPWUsZS5tbVBhcmVudD1hLGEmJmEubWF0Y2hlcyhcIi5tbS1saXN0aXRlbVwiKSYmIXkoYSxcIi5tbS1idG5cIikubGVuZ3RoKSl7dmFyIG89eShhLFwiLm1tLWxpc3RpdGVtX190ZXh0XCIpWzBdO2lmKG8pe3ZhciByPWcoXCJhLm1tLWJ0bi5tbS1idG5fbmV4dC5tbS1saXN0aXRlbV9fYnRuXCIpO3Iuc2V0QXR0cmlidXRlKFwiaHJlZlwiLFwiI1wiK2UuaWQpLG8ubWF0Y2hlcyhcInNwYW5cIik/KHIuY2xhc3NMaXN0LmFkZChcIm1tLWxpc3RpdGVtX190ZXh0XCIpLHIuaW5uZXJIVE1MPW8uaW5uZXJIVE1MLGEuaW5zZXJ0QmVmb3JlKHIsby5uZXh0RWxlbWVudFNpYmxpbmcpLG8ucmVtb3ZlKCkpOmEuaW5zZXJ0QmVmb3JlKHIseShhLFwiLm1tLXBhbmVsXCIpWzBdKX19cmV0dXJuIHRoaXMuX2luaXROYXZiYXIoZSkseShlLFwidWwsIG9sXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuaW5pdExpc3R2aWV3KGUpfSkpLHRoaXMudHJpZ2dlcihcImluaXRQYW5lbDphZnRlclwiLFtlXSksZX0sZS5wcm90b3R5cGUuX2luaXROYXZiYXI9ZnVuY3Rpb24oZSl7aWYodGhpcy50cmlnZ2VyKFwiaW5pdE5hdmJhcjpiZWZvcmVcIixbZV0pLCF5KGUsXCIubW0tbmF2YmFyXCIpLmxlbmd0aCl7dmFyIHQ9bnVsbCxuPW51bGw7aWYoZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1tLXBhcmVudFwiKT9uPV8odGhpcy5ub2RlLnBubHMsZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1tLXBhcmVudFwiKSlbMF06KHQ9ZS5tbVBhcmVudCkmJihuPXQuY2xvc2VzdChcIi5tbS1wYW5lbFwiKSksIXR8fCF0Lm1hdGNoZXMoXCIubW0tbGlzdGl0ZW1fdmVydGljYWxcIikpe3ZhciBpPWcoXCJkaXYubW0tbmF2YmFyXCIpO2lmKHRoaXMub3B0cy5uYXZiYXIuYWRkP3RoaXMub3B0cy5uYXZiYXIuc3RpY2t5JiZpLmNsYXNzTGlzdC5hZGQoXCJtbS1uYXZiYXJfc3RpY2t5XCIpOmkuY2xhc3NMaXN0LmFkZChcIm1tLWhpZGRlblwiKSxuKXt2YXIgcz1nKFwiYS5tbS1idG4ubW0tYnRuX3ByZXYubW0tbmF2YmFyX19idG5cIik7cy5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsXCIjXCIrbi5pZCksaS5hcHBlbmQocyl9dmFyIGE9bnVsbDt0P2E9eSh0LFwiLm1tLWxpc3RpdGVtX190ZXh0XCIpWzBdOm4mJihhPV8obiwnYVtocmVmPVwiIycrZS5pZCsnXCJdJylbMF0pO3ZhciBvPWcoXCJhLm1tLW5hdmJhcl9fdGl0bGVcIikscj1nKFwic3BhblwiKTtzd2l0Y2goby5hcHBlbmQociksci5pbm5lckhUTUw9ZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1tLXRpdGxlXCIpfHwoYT9hLnRleHRDb250ZW50OlwiXCIpfHx0aGlzLmkxOG4odGhpcy5vcHRzLm5hdmJhci50aXRsZSl8fHRoaXMuaTE4bihcIk1lbnVcIiksdGhpcy5vcHRzLm5hdmJhci50aXRsZUxpbmspe2Nhc2VcImFuY2hvclwiOmEmJm8uc2V0QXR0cmlidXRlKFwiaHJlZlwiLGEuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSk7YnJlYWs7Y2FzZVwicGFyZW50XCI6biYmby5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsXCIjXCIrbi5pZCl9aS5hcHBlbmQobyksZS5wcmVwZW5kKGkpLHRoaXMudHJpZ2dlcihcImluaXROYXZiYXI6YWZ0ZXJcIixbZV0pfX19LGUucHJvdG90eXBlLmluaXRMaXN0dmlldz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMudHJpZ2dlcihcImluaXRMaXN0dmlldzpiZWZvcmVcIixbZV0pLHgoZSx0aGlzLmNvbmYuY2xhc3NOYW1lcy5ub2xpc3R2aWV3LFwibW0tbm9saXN0dmlld1wiKSxlLm1hdGNoZXMoXCIubW0tbm9saXN0dmlld1wiKXx8KGUuY2xhc3NMaXN0LmFkZChcIm1tLWxpc3R2aWV3XCIpLHkoZSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jbGFzc0xpc3QuYWRkKFwibW0tbGlzdGl0ZW1cIikseChlLHQuY29uZi5jbGFzc05hbWVzLnNlbGVjdGVkLFwibW0tbGlzdGl0ZW1fc2VsZWN0ZWRcIikseShlLFwiYSwgc3BhblwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLm1hdGNoZXMoXCIubW0tYnRuXCIpfHxlLmNsYXNzTGlzdC5hZGQoXCJtbS1saXN0aXRlbV9fdGV4dFwiKX0pKX0pKSksdGhpcy50cmlnZ2VyKFwiaW5pdExpc3R2aWV3OmFmdGVyXCIsW2VdKX0sZS5wcm90b3R5cGUuX2luaXRPcGVuZWQ9ZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoXCJpbml0T3BlbmVkOmJlZm9yZVwiKTt2YXIgZT10aGlzLm5vZGUucG5scy5xdWVyeVNlbGVjdG9yQWxsKFwiLm1tLWxpc3RpdGVtX3NlbGVjdGVkXCIpLHQ9bnVsbDtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3Q9ZSxlLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1saXN0aXRlbV9zZWxlY3RlZFwiKX0pKSx0JiZ0LmNsYXNzTGlzdC5hZGQoXCJtbS1saXN0aXRlbV9zZWxlY3RlZFwiKTt2YXIgbj10P3QuY2xvc2VzdChcIi5tbS1wYW5lbFwiKTp5KHRoaXMubm9kZS5wbmxzLFwiLm1tLXBhbmVsXCIpWzBdO3RoaXMub3BlblBhbmVsKG4sITEpLHRoaXMudHJpZ2dlcihcImluaXRPcGVuZWQ6YWZ0ZXJcIil9LGUucHJvdG90eXBlLl9pbml0QW5jaG9ycz1mdW5jdGlvbigpe3ZhciBlPXR
24510oaXM7dGhpcy50cmlnZ2VyKFwiaW5pdEFuY2hvcnM6YmVmb3JlXCIpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChmdW5jdGlvbih0KXt2YXIgbj10LnRhcmdldC5jbG9zZXN0KFwiYVtocmVmXVwiKTtpZihuKXtmb3IodmFyIGk9e2luTWVudTpuLmNsb3Nlc3QoXCIubW0tbWVudVwiKT09PWUubm9kZS5tZW51LGluTGlzdHZpZXc6bi5tYXRjaGVzKFwiLm1tLWxpc3RpdGVtID4gYVwiKSx0b0V4dGVybmFsOm4ubWF0Y2hlcygnW3JlbD1cImV4dGVybmFsXCJdJyl8fG4ubWF0Y2hlcygnW3RhcmdldD1cIl9ibGFua1wiXScpfSxzPXtjbG9zZTpudWxsLHNldFNlbGVjdGVkOm51bGwscHJldmVudERlZmF1bHQ6XCIjXCI9PW4uZ2V0QXR0cmlidXRlKFwiaHJlZlwiKS5zbGljZSgwLDEpfSxhPTA7YTxlLmNsY2subGVuZ3RoO2ErKyl7dmFyIG09ZS5jbGNrW2FdLmNhbGwoZSxuLGkpO2lmKG0pe2lmKFwiYm9vbGVhblwiPT10eXBlb2YgbSlyZXR1cm4gdm9pZCB0LnByZXZlbnREZWZhdWx0KCk7XCJvYmplY3RcIj09cihtKSYmKHM9byhtLHMpKX19aS5pbk1lbnUmJmkuaW5MaXN0dmlldyYmIWkudG9FeHRlcm5hbCYmKGMobixlLm9wdHMub25DbGljay5zZXRTZWxlY3RlZCxzLnNldFNlbGVjdGVkKSYmZS5zZXRTZWxlY3RlZChuLnBhcmVudEVsZW1lbnQpLGMobixlLm9wdHMub25DbGljay5wcmV2ZW50RGVmYXVsdCxzLnByZXZlbnREZWZhdWx0KSYmdC5wcmV2ZW50RGVmYXVsdCgpLGMobixlLm9wdHMub25DbGljay5jbG9zZSxzLmNsb3NlKSYmZS5vcHRzLm9mZkNhbnZhcyYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jbG9zZSYmZS5jbG9zZSgpKX19KSwhMCksdGhpcy50cmlnZ2VyKFwiaW5pdEFuY2hvcnM6YWZ0ZXJcIil9LGUucHJvdG90eXBlLmkxOG49ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJnZvaWQgMCE9PXVbdF0mJnVbdF1bZV18fGV9KGUsdGhpcy5jb25mLmxhbmd1YWdlKX0sZS52ZXJzaW9uPWkuYSxlLm9wdGlvbnM9cyxlLmNvbmZpZ3M9YSxlLmFkZG9ucz17fSxlLndyYXBwZXJzPXt9LGUubm9kZT17fSxlLnZhcnM9e30sZX0oKSxBPXtibG9ja1VJOiEwLG1vdmVCYWNrZ3JvdW5kOiEwfTt2YXIgVD17Y2xvbmU6ITEsbWVudTp7aW5zZXJ0TWV0aG9kOlwicHJlcGVuZFwiLGluc2VydFNlbGVjdG9yOlwiYm9keVwifSxwYWdlOntub2RldHlwZTpcImRpdlwiLHNlbGVjdG9yOm51bGwsbm9TZWxlY3RvcjpbXX19O2Z1bmN0aW9uIEMoZSl7cmV0dXJuIGU/ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpOlwiXCJ9ZnVuY3Rpb24gTihlLHQsbil7dmFyIGk9dC5zcGxpdChcIi5cIik7ZVt0PVwibW1FdmVudFwiK0MoaVswXSkrQyhpWzFdKV09ZVt0XXx8W10sZVt0XS5wdXNoKG4pLGUuYWRkRXZlbnRMaXN0ZW5lcihpWzBdLG4pfWZ1bmN0aW9uIEgoZSx0KXt2YXIgbj10LnNwbGl0KFwiLlwiKTt0PVwibW1FdmVudFwiK0MoblswXSkrQyhuWzFdKSwoZVt0XXx8W10pLmZvckVhY2goKGZ1bmN0aW9uKHQpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihuWzBdLHQpfSkpfU0ub3B0aW9ucy5vZmZDYW52YXM9QSxNLmNvbmZpZ3Mub2ZmQ2FudmFzPVQ7TS5wcm90b3R5cGUub3Blbj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy50cmlnZ2VyKFwib3BlbjpiZWZvcmVcIiksdGhpcy52YXJzLm9wZW5lZHx8KHRoaXMuX29wZW5TZXR1cCgpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5fb3BlblN0YXJ0KCl9KSx0aGlzLmNvbmYub3BlbmluZ0ludGVydmFsKSx0aGlzLnRyaWdnZXIoXCJvcGVuOmFmdGVyXCIpKX0sTS5wcm90b3R5cGUuX29wZW5TZXR1cD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLm9wdHMub2ZmQ2FudmFzO3RoaXMuY2xvc2VBbGxPdGhlcnMoKSxmdW5jdGlvbihlLHQsbil7dmFyIGk9dC5zcGxpdChcIi5cIik7KGVbdD1cIm1tRXZlbnRcIitDKGlbMF0pK0MoaVsxXSldfHxbXSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZShufHx7fSl9KSl9KHdpbmRvdyxcInJlc2l6ZS5wYWdlXCIse2ZvcmNlOiEwfSk7dmFyIG49W1wibW0td3JhcHBlcl9vcGVuZWRcIl07dC5ibG9ja1VJJiZuLnB1c2goXCJtbS13cmFwcGVyX2Jsb2NraW5nXCIpLFwibW9kYWxcIj09dC5ibG9ja1VJJiZuLnB1c2goXCJtbS13cmFwcGVyX21vZGFsXCIpLHQubW92ZUJhY2tncm91bmQmJm4ucHVzaChcIm1tLXdyYXBwZXJfYmFja2dyb3VuZFwiKSxuLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Uubm9kZS53cnByLmNsYXNzTGlzdC5hZGQodCl9KSksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLnZhcnMub3BlbmVkPSEwfSksdGhpcy5jb25mLm9wZW5pbmdJbnRlcnZhbCksdGhpcy5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZChcIm1tLW1lbnVfb3BlbmVkXCIpfSxNLnByb3RvdHlwZS5fb3BlblN0YXJ0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczttKE0ubm9kZS5wYWdlLChmdW5jdGlvbigpe2UudHJpZ2dlcihcIm9wZW46ZmluaXNoXCIpfSksdGhpcy5jb25mLnRyYW5zaXRpb25EdXJhdGlvbiksdGhpcy50cmlnZ2VyKFwib3BlbjpzdGFydFwiKSx0aGlzLm5vZGUud3Jwci5jbGFzc0xpc3QuYWRkKFwibW0td3JhcHBlcl9vcGVuaW5nXCIpfSxNLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy50cmlnZ2VyKFwiY2xvc2U6YmVmb3JlXCIpLHRoaXMudmFycy5vcGVuZWQmJihtKE0ubm9kZS5wYWdlLChmdW5jdGlvbigpe2Uubm9kZS5tZW51LmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1tZW51X29wZW5lZFwiKTtbXCJtbS13cmFwcGVyX29wZW5lZFwiLFwibW0td3JhcHBlcl9ibG9ja2luZ1wiLFwibW0td3JhcHBlcl9tb2RhbFwiLFwibW0td3JhcHBlcl9iYWNrZ3JvdW5kXCJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Uubm9kZS53cnByLmNsYXNzTGlzdC5yZW1vdmUodCl9KSksZS52YXJzLm9wZW5lZD0hMSxlLnRyaWdnZXIoXCJjbG9zZTpmaW5pc2hcIil9KSx0aGlzLmNvbmYudHJhbnNpdGlvbkR1cmF0aW9uKSx0aGlzLnRyaWdnZXIoXCJjbG9zZTpzdGFydFwiKSx0aGlzLm5vZGUud3Jwci5jbGFzc0xpc3QucmVtb3ZlKFwibW0td3JhcHBlcl9vcGVuaW5nXCIpLHRoaXMudHJpZ2dlcihcImNsb3NlOmFmdGVyXCIpKX0sTS5wcm90b3R5cGUuY2xvc2VBbGxPdGhlcnM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO18oZG9jdW1lbnQuYm9keSxcIi5tbS1tZW51X29mZmNhbnZhc1wiKS5mb3JFYWNoKChmdW5jdGlvbih0KXtpZih0IT09ZS5ub2RlLm1lbnUpe3ZhciBuPXQubW1BcGk7biYmbi5jbG9zZSYmbi5jbG9zZSgpfX0pKX0sTS5wcm90b3R5cGUuc2V0UGFnZT1mdW5jdGlvbihlKXt0aGlzLnRyaWdnZXIoXCJzZXRQYWdlOmJlZm9yZVwiLFtlXSk7dmFyIHQ9dGhpcy5jb25mLm9mZkNhbnZhcztpZighZSl7dmFyIG49XCJzdHJpbmdcIj09dHlwZW9mIHQucGFnZS5zZWxlY3Rvcj9fKGRvY3VtZW50LmJvZHksdC5wYWdlLnNlbGVjdG9yKTp5KGRvY3VtZW50LmJvZHksdC5wYWdlLm5vZGV0eXBlKTtpZihuPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5tYXRjaGVzKFwiLm1tLW1lbnUsIC5tbS13cmFwcGVyX19ibG9ja2VyXCIpfSkpLHQucGFnZS5ub1NlbGVjdG9yLmxlbmd0aCYmKG49bi5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLm1hdGNoZXModC5wYWdlLm5vU2VsZWN0b3Iuam9pbihcIiwgXCIpKX0pKSksbi5sZW5ndGg+MSl7dmFyIGk9ZyhcImRp
24510dlwiKTtuWzBdLmJlZm9yZShpKSxuLmZvckVhY2goKGZ1bmN0aW9uKGUpe2kuYXBwZW5kKGUpfSkpLG49W2ldfWU9blswXX1lLmNsYXNzTGlzdC5hZGQoXCJtbS1wYWdlXCIpLGUuY2xhc3NMaXN0LmFkZChcIm1tLXNsaWRlb3V0XCIpLGUuaWQ9ZS5pZHx8bCgpLE0ubm9kZS5wYWdlPWUsdGhpcy50cmlnZ2VyKFwic2V0UGFnZTphZnRlclwiLFtlXSl9O3ZhciBqPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztIKGRvY3VtZW50LmJvZHksXCJrZXlkb3duLnRhYmd1YXJkXCIpLE4oZG9jdW1lbnQuYm9keSxcImtleWRvd24udGFiZ3VhcmRcIiwoZnVuY3Rpb24odCl7OT09dC5rZXlDb2RlJiZlLm5vZGUud3Jwci5tYXRjaGVzKFwiLm1tLXdyYXBwZXJfb3BlbmVkXCIpJiZ0LnByZXZlbnREZWZhdWx0KCl9KSl9LEQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMudHJpZ2dlcihcImluaXRCbG9ja2VyOmJlZm9yZVwiKTt2YXIgdD10aGlzLm9wdHMub2ZmQ2FudmFzLG49dGhpcy5jb25mLm9mZkNhbnZhcztpZih0LmJsb2NrVUkpe2lmKCFNLm5vZGUuYmxjayl7dmFyIGk9ZyhcImRpdi5tbS13cmFwcGVyX19ibG9ja2VyLm1tLXNsaWRlb3V0XCIpO2kuaW5uZXJIVE1MPVwiPGE+PC9hPlwiLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iobi5tZW51Lmluc2VydFNlbGVjdG9yKS5hcHBlbmQoaSksTS5ub2RlLmJsY2s9aX12YXIgcz1mdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSxlLm5vZGUud3Jwci5tYXRjaGVzKFwiLm1tLXdyYXBwZXJfbW9kYWxcIil8fGUuY2xvc2UoKX07TS5ub2RlLmJsY2suYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLHMpLE0ubm9kZS5ibGNrLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIscyksTS5ub2RlLmJsY2suYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLHMpLHRoaXMudHJpZ2dlcihcImluaXRCbG9ja2VyOmFmdGVyXCIpfX0sTz17YXJpYTohMCx0ZXh0OiEwfTt2YXIgST17dGV4dDp7Y2xvc2VNZW51OlwiQ2xvc2UgbWVudVwiLGNsb3NlU3VibWVudTpcIkNsb3NlIHN1Ym1lbnVcIixvcGVuU3VibWVudTpcIk9wZW4gc3VibWVudVwiLHRvZ2dsZVN1Ym1lbnU6XCJUb2dnbGUgc3VibWVudVwifX0scT17XCJDbG9zZSBtZW51XCI6XCLYqNiz2KrZhiDZhdmG2YhcIixcIkNsb3NlIHN1Ym1lbnVcIjpcItio2LPYqtmGINiy24zYsdmF2YbZiFwiLFwiT3BlbiBzdWJtZW51XCI6XCLYqNin2LLaqdix2K/ZhiDYstuM2LHZhdmG2YhcIixcIlRvZ2dsZSBzdWJtZW51XCI6XCLYs9mI24zbjNqGINiy24zYsdmF2YbZiFwifSxCPXtcIkNsb3NlIG1lbnVcIjpcIk1lbsO8IHNjaGxpZcOfZW5cIixcIkNsb3NlIHN1Ym1lbnVcIjpcIlVudGVybWVuw7wgc2NobGllw59lblwiLFwiT3BlbiBzdWJtZW51XCI6XCJVbnRlcm1lbsO8IMO2ZmZuZW5cIixcIlRvZ2dsZSBzdWJtZW51XCI6XCJVbnRlcm1lbsO8IHdlY2hzZWxuXCJ9LHo9e1wiQ2xvc2UgbWVudVwiOlwi0JfQsNC60YDRi9GC0Ywg0LzQtdC90Y5cIixcIkNsb3NlIHN1Ym1lbnVcIjpcItCX0LDQutGA0YvRgtGMINC/0L7QtNC80LXQvdGOXCIsXCJPcGVuIHN1Ym1lbnVcIjpcItCe0YLQutGA0YvRgtGMINC/0L7QtNC80LXQvdGOXCIsXCJUb2dnbGUgc3VibWVudVwiOlwi0J/QtdGA0LXQutC70Y7Rh9C40YLRjCDQv9C+0LTQvNC10L3RjlwifTtmKHtcIkNsb3NlIG1lbnVcIjpcIk1lbnUgc2x1aXRlblwiLFwiQ2xvc2Ugc3VibWVudVwiOlwiU3VibWVudSBzbHVpdGVuXCIsXCJPcGVuIHN1Ym1lbnVcIjpcIlN1Ym1lbnUgb3BlbmVuXCIsXCJUb2dnbGUgc3VibWVudVwiOlwiU3VibWVudSB3aXNzZWxlblwifSxcIm5sXCIpLGYocSxcImZhXCIpLGYoQixcImRlXCIpLGYoeixcInJ1XCIpLE0ub3B0aW9ucy5zY3JlZW5SZWFkZXI9TyxNLmNvbmZpZ3Muc2NyZWVuUmVhZGVyPUk7dmFyIFI7Uj1mdW5jdGlvbihlLHQsbil7ZVt0XT1uLG4/ZS5zZXRBdHRyaWJ1dGUodCxuLnRvU3RyaW5nKCkpOmUucmVtb3ZlQXR0cmlidXRlKHQpfSxNLnNyX2FyaWE9ZnVuY3Rpb24oZSx0LG4pe1IoZSxcImFyaWEtXCIrdCxuKX0sTS5zcl9yb2xlPWZ1bmN0aW9uKGUsdCl7UihlLFwicm9sZVwiLHQpfSxNLnNyX3RleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuJzxzcGFuIGNsYXNzPVwibW0tc3Jvbmx5XCI+JytlK1wiPC9zcGFuPlwifTt2YXIgVT17Zml4OiEwfTt2YXIgVz1cIm9udG91Y2hzdGFydFwiaW4gd2luZG93fHwhIW5hdmlnYXRvci5tc01heFRvdWNoUG9pbnRzfHwhMTtNLm9wdGlvbnMuc2Nyb2xsQnVnRml4PVU7dmFyIFk9e2hlaWdodDpcImRlZmF1bHRcIn07TS5vcHRpb25zLmF1dG9IZWlnaHQ9WTt2YXIgRj17Y2xvc2U6ITEsb3BlbjohMX07TS5vcHRpb25zLmJhY2tCdXR0b249Rjt2YXIgWD17YWRkOiExLHZpc2libGU6e21pbjoxLG1heDozfX07TS5vcHRpb25zLmNvbHVtbnM9WDt2YXIgVj17YWRkOiExLGFkZFRvOlwicGFuZWxzXCIsY291bnQ6ITF9O00ub3B0aW9ucy5jb3VudGVycz1WLE0uY29uZmlncy5jbGFzc05hbWVzLmNvdW50ZXJzPXtjb3VudGVyOlwiQ291bnRlclwifTt2YXIgWj17YWRkOiExLGFkZFRvOlwicGFuZWxzXCJ9O00ub3B0aW9ucy5kaXZpZGVycz1aLE0uY29uZmlncy5jbGFzc05hbWVzLmRpdmlkZXI9XCJEaXZpZGVyXCI7dmFyIEc9e29wZW46ITEsbm9kZTpudWxsfTt2YXIgSj1cIm9udG91Y2hzdGFydFwiaW4gd2luZG93fHwhIW5hdmlnYXRvci5tc01heFRvdWNoUG9pbnRzfHwhMSxLPXt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0sUT17c3RhcnQ6MTUsc3dpcGU6MTV9LCQ9e3g6W1wiUmlnaHRcIixcIkxlZnRcIl0seTpbXCJEb3duXCIsXCJVcFwiXX0sZWU9MCx0ZT0xLG5lPTIsaWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmXCIlXCI9PWUuc2xpY2UoLTEpJiYoZT10KigoZT1wYXJzZUludChlLnNsaWNlKDAsLTEpLDEwKSkvMTAwKSksZX0sc2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnN1cmZhY2U9ZSx0aGlzLmFyZWE9byh0LEspLHRoaXMudHJlc2hvbGQ9byhuLFEpLHRoaXMuc3VyZmFjZS5tbUhhc0RyYWdFdmVudHN8fCh0aGlzLnN1cmZhY2UuYWRkRXZlbnRMaXN0ZW5lcihKP1widG91Y2hzdGFydFwiOlwibW91c2Vkb3duXCIsdGhpcy5zdGFydC5iaW5kKHRoaXMpKSx0aGlzLnN1cmZhY2UuYWRkRXZlbnRMaXN0ZW5lcihKP1widG91Y2hlbmRcIjpcIm1vdXNldXBcIix0aGlzLnN0b3AuYmluZCh0aGlzKSksdGhpcy5zdXJmYWNlLmFkZEV2ZW50TGlzdGVuZXIoSj9cInRvdWNobGVhdmVcIjpcIm1vdXNlbGVhdmVcIix0aGlzLnN0b3AuYmluZCh0aGlzKSksdGhpcy5zdXJmYWNlLmFkZEV2ZW50TGlzdGVuZXIoSj9cInRvdWNobW92ZVwiOlwibW91c2Vtb3ZlXCIsdGhpcy5tb3ZlLmJpbmQodGhpcykpKSx0aGlzLnN1cmZhY2UubW1IYXNEcmFnRXZlbnRzPSEwfXJldHVybi
24510BlLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbihlKXt0aGlzLmN1cnJlbnRQb3NpdGlvbj17eDplLnRvdWNoZXM/ZS50b3VjaGVzWzBdLnBhZ2VYOmUucGFnZVh8fDAseTplLnRvdWNoZXM/ZS50b3VjaGVzWzBdLnBhZ2VZOmUucGFnZVl8fDB9O3ZhciB0PXRoaXMuc3VyZmFjZS5jbGllbnRXaWR0aCxuPXRoaXMuc3VyZmFjZS5jbGllbnRIZWlnaHQsaT1pZSh0aGlzLmFyZWEudG9wLG4pO2lmKCEoXCJudW1iZXJcIj09dHlwZW9mIGkmJnRoaXMuY3VycmVudFBvc2l0aW9uLnk8aSkpe3ZhciBzPWllKHRoaXMuYXJlYS5yaWdodCx0KTtpZighKFwibnVtYmVyXCI9PXR5cGVvZiBzJiYocz10LXMsdGhpcy5jdXJyZW50UG9zaXRpb24ueD5zKSkpe3ZhciBhPWllKHRoaXMuYXJlYS5ib3R0b20sbik7aWYoIShcIm51bWJlclwiPT10eXBlb2YgYSYmKGE9bi1hLHRoaXMuY3VycmVudFBvc2l0aW9uLnk+YSkpKXt2YXIgbz1pZSh0aGlzLmFyZWEubGVmdCx0KTtcIm51bWJlclwiPT10eXBlb2YgbyYmdGhpcy5jdXJyZW50UG9zaXRpb24ueDxvfHwodGhpcy5zdGFydFBvc2l0aW9uPXt4OnRoaXMuY3VycmVudFBvc2l0aW9uLngseTp0aGlzLmN1cnJlbnRQb3NpdGlvbi55fSx0aGlzLnN0YXRlPXRlKX19fX0sZS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbihlKXtpZih0aGlzLnN0YXRlPT1uZSl7dmFyIHQ9dGhpcy5fZHJhZ0RpcmVjdGlvbigpLG49dGhpcy5fZXZlbnREZXRhaWwodCk7aWYodGhpcy5fZGlzcGF0Y2hFdmVudHMoXCJkcmFnKkVuZFwiLG4pLE1hdGguYWJzKHRoaXMubW92ZW1lbnRbdGhpcy5heGlzXSk+dGhpcy50cmVzaG9sZC5zd2lwZSl7dmFyIGk9dGhpcy5fc3dpcGVEaXJlY3Rpb24oKTtuLmRpcmVjdGlvbj1pLHRoaXMuX2Rpc3BhdGNoRXZlbnRzKFwic3dpcGUqXCIsbil9fXRoaXMuc3RhdGU9ZWV9LGUucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oZSl7c3dpdGNoKHRoaXMuc3RhdGUpe2Nhc2UgdGU6Y2FzZSBuZTp2YXIgdD17eDplLmNoYW5nZWRUb3VjaGVzP2UudG91Y2hlc1swXS5wYWdlWDplLnBhZ2VYfHwwLHk6ZS5jaGFuZ2VkVG91Y2hlcz9lLnRvdWNoZXNbMF0ucGFnZVk6ZS5wYWdlWXx8MH07dGhpcy5tb3ZlbWVudD17eDp0LngtdGhpcy5jdXJyZW50UG9zaXRpb24ueCx5OnQueS10aGlzLmN1cnJlbnRQb3NpdGlvbi55fSx0aGlzLmRpc3RhbmNlPXt4OnQueC10aGlzLnN0YXJ0UG9zaXRpb24ueCx5OnQueS10aGlzLnN0YXJ0UG9zaXRpb24ueX0sdGhpcy5jdXJyZW50UG9zaXRpb249e3g6dC54LHk6dC55fSx0aGlzLmF4aXM9TWF0aC5hYnModGhpcy5kaXN0YW5jZS54KT5NYXRoLmFicyh0aGlzLmRpc3RhbmNlLnkpP1wieFwiOlwieVwiO3ZhciBuPXRoaXMuX2RyYWdEaXJlY3Rpb24oKSxpPXRoaXMuX2V2ZW50RGV0YWlsKG4pO3RoaXMuc3RhdGU9PXRlJiZNYXRoLmFicyh0aGlzLmRpc3RhbmNlW3RoaXMuYXhpc10pPnRoaXMudHJlc2hvbGQuc3RhcnQmJih0aGlzLl9kaXNwYXRjaEV2ZW50cyhcImRyYWcqU3RhcnRcIixpKSx0aGlzLnN0YXRlPW5lKSx0aGlzLnN0YXRlPT1uZSYmdGhpcy5fZGlzcGF0Y2hFdmVudHMoXCJkcmFnKk1vdmVcIixpKX19LGUucHJvdG90eXBlLl9ldmVudERldGFpbD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmRpc3RhbmNlLngsbj10aGlzLmRpc3RhbmNlLnk7cmV0dXJuXCJ4XCI9PXRoaXMuYXhpcyYmKHQtPXQ+MD90aGlzLnRyZXNob2xkLnN0YXJ0OjAtdGhpcy50cmVzaG9sZC5zdGFydCksXCJ5XCI9PXRoaXMuYXhpcyYmKG4tPW4+MD90aGlzLnRyZXNob2xkLnN0YXJ0OjAtdGhpcy50cmVzaG9sZC5zdGFydCkse2F4aXM6dGhpcy5heGlzLGRpcmVjdGlvbjplLG1vdmVtZW50WDp0aGlzLm1vdmVtZW50LngsbW92ZW1lbnRZOnRoaXMubW92ZW1lbnQueSxkaXN0YW5jZVg6dCxkaXN0YW5jZVk6bn19LGUucHJvdG90eXBlLl9kaXNwYXRjaEV2ZW50cz1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBDdXN0b21FdmVudChlLnJlcGxhY2UoXCIqXCIsXCJcIikse2RldGFpbDp0fSk7dGhpcy5zdXJmYWNlLmRpc3BhdGNoRXZlbnQobik7dmFyIGk9bmV3IEN1c3RvbUV2ZW50KGUucmVwbGFjZShcIipcIix0aGlzLmF4aXMudG9VcHBlckNhc2UoKSkse2RldGFpbDp0fSk7dGhpcy5zdXJmYWNlLmRpc3BhdGNoRXZlbnQoaSk7dmFyIHM9bmV3IEN1c3RvbUV2ZW50KGUucmVwbGFjZShcIipcIix0LmRpcmVjdGlvbikse2RldGFpbDp0fSk7dGhpcy5zdXJmYWNlLmRpc3BhdGNoRXZlbnQocyl9LGUucHJvdG90eXBlLl9kcmFnRGlyZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuICRbdGhpcy5heGlzXVt0aGlzLmRpc3RhbmNlW3RoaXMuYXhpc10+MD8wOjFdfSxlLnByb3RvdHlwZS5fc3dpcGVEaXJlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gJFt0aGlzLmF4aXNdW3RoaXMubW92ZW1lbnRbdGhpcy5heGlzXT4wPzA6MV19LGV9KCksYWU9bnVsbCxvZT1udWxsLHJlPTAsY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXt9LGk9ITEscz1mdW5jdGlvbigpe3ZhciBlPU9iamVjdC5rZXlzKHQub3B0cy5leHRlbnNpb25zKTtlLmxlbmd0aD8oayhlLmpvaW4oXCIsIFwiKSwoZnVuY3Rpb24oKXt9KSwoZnVuY3Rpb24oKXtuPW1lKG4sW10sdC5ub2RlLm1lbnUpfSkpLGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ayhlLChmdW5jdGlvbigpe249bWUobix0Lm9wdHMuZXh0ZW5zaW9uc1tlXSx0Lm5vZGUubWVudSl9KSwoZnVuY3Rpb24oKXt9KSl9KSkpOm49bWUobixbXSx0Lm5vZGUubWVudSl9O29lJiYoSChvZSxcImRyYWdTdGFydFwiKSxIKG9lLFwiZHJhZ01vdmVcIiksSChvZSxcImRyYWdFbmRcIikpLGFlPW5ldyBzZShvZT1lKSxzKCkscz1mdW5jdGlvbigpe30sb2UmJihOKG9lLFwiZHJhZ1N0YXJ0XCIsKGZ1bmN0aW9uKGUpe2UuZGV0YWlsLmRpcmVjdGlvbj09bi5kaXJlY3Rpb24mJihpPSEwLHQubm9kZS53cnByLmNsYXNzTGlzdC5hZGQoXCJtbS13cmFwcGVyX2RyYWdnaW5nXCIpLHQuX29wZW5TZXR1cCgpLHQudHJpZ2dlcihcIm9wZW46c3RhcnRcIikscmU9dC5ub2RlLm1lbnVbXCJ4XCI9PW4uYXhpcz9cImNsaWVudFdpZHRoXCI6XCJjbGllbnRIZWlnaHRcIl0pfSkpLE4ob2UsXCJkcmFnTW92ZVwiLChmdW5jdGlvbihlKXtpZihlLmRldGFpbC5heGlzPT1uLmF4aXMmJmkpe3ZhciB0PWUuZGV0YWlsW1wiZGlzdGFuY2VcIituLmF4aXMudG9VcHBlckNhc2UoKV07c3dpdGNoKG4ucG9zaXRpb24pe2Nhc2VcInJpZ2h0XCI6Y2FzZVwiYm90dG9tXCI6dD1NYXRoLm1pbihNYXRoLm1heCh0LC1yZSksMCk7YnJlYWs7ZGVmYXVsdDp0PU1hdGgubWF4KE1hdGgubWluKHQscmUpLDApfWlmKFwiZnJvbnRcIj09bi56cG9zaXRpb24pc3dpdGNoKG4ucG9zaXRpb24pe2Nhc2VcInJpZ2h0XCI6Y2FzZVwiYm90dG9tXCI6dCs9cmU7YnJlYWs7ZGVmYXVsdDp0LT1yZX1uLnNsaWRlT3V0Tm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5zdHlsZS50cmFuc2Zvcm09XCJ0cmFuc2xhdGVcIituLmF4aXMudG9VcHBlckNhc2UoKStcIihcIit0K1wicHgpXCJ9KSl9fSkpLE4ob2UsXCJkcmFnRW5kXCIsKGZ1bmN0aW9uKGUpe2lmKGUuZGV0YWlsLmF4aXM9PW4uYXhpcyYmaSl7aT0hMSx0Lm5vZGUud3Jwci5jbGFzc0xpc3QucmVtb3ZlKFwibW0td3JhcHBlcl9kcmFnZ2luZ1wiKSxuLnNsaWRlT3V0Tm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5zdHlsZS50cmFuc2Zvcm09XCJcIn0pKTt2YXIgcz1NYXRoLmFicyhlLmRldGFpbFtcImRpc3RhbmNlXCIrbi5heGlzLnRvVXBwZXJDYXNlKCldKT49Ljc1KnJlO2lmKCFzKXt2YXIgYT1lLmRldGFpbFtcIm1vdmVtZW50XCIrbi5heGlzLnRvVXBwZXJDYXNlKCldO3N3aXRjaC
24510huLnBvc2l0aW9uKXtjYXNlXCJyaWdodFwiOmNhc2VcImJvdHRvbVwiOnM9YTw9MDticmVhaztkZWZhdWx0OnM9YT49MH19cz90Ll9vcGVuU3RhcnQoKTp0LmNsb3NlKCl9fSkpKX0sbWU9ZnVuY3Rpb24oZSx0LG4pe3N3aXRjaChlLnBvc2l0aW9uPVwibGVmdFwiLGUuenBvc2l0aW9uPVwiYmFja1wiLFtcInJpZ2h0XCIsXCJ0b3BcIixcImJvdHRvbVwiXS5mb3JFYWNoKChmdW5jdGlvbihuKXt0LmluZGV4T2YoXCJwb3NpdGlvbi1cIituKT4tMSYmKGUucG9zaXRpb249bil9KSksW1wiZnJvbnRcIixcInRvcFwiLFwiYm90dG9tXCJdLmZvckVhY2goKGZ1bmN0aW9uKG4pe3QuaW5kZXhPZihcInBvc2l0aW9uLVwiK24pPi0xJiYoZS56cG9zaXRpb249XCJmcm9udFwiKX0pKSxhZS5hcmVhPXt0b3A6XCJib3R0b21cIj09ZS5wb3NpdGlvbj9cIjc1JVwiOjAscmlnaHQ6XCJsZWZ0XCI9PWUucG9zaXRpb24/XCI3NSVcIjowLGJvdHRvbTpcInRvcFwiPT1lLnBvc2l0aW9uP1wiNzUlXCI6MCxsZWZ0OlwicmlnaHRcIj09ZS5wb3NpdGlvbj9cIjc1JVwiOjB9LGUucG9zaXRpb24pe2Nhc2VcInRvcFwiOmNhc2VcImJvdHRvbVwiOmUuYXhpcz1cInlcIjticmVhaztkZWZhdWx0OmUuYXhpcz1cInhcIn1zd2l0Y2goZS5wb3NpdGlvbil7Y2FzZVwidG9wXCI6ZS5kaXJlY3Rpb249XCJEb3duXCI7YnJlYWs7Y2FzZVwicmlnaHRcIjplLmRpcmVjdGlvbj1cIkxlZnRcIjticmVhaztjYXNlXCJib3R0b21cIjplLmRpcmVjdGlvbj1cIlVwXCI7YnJlYWs7ZGVmYXVsdDplLmRpcmVjdGlvbj1cIlJpZ2h0XCJ9c3dpdGNoKGUuenBvc2l0aW9uKXtjYXNlXCJmcm9udFwiOmUuc2xpZGVPdXROb2Rlcz1bbl07YnJlYWs7ZGVmYXVsdDplLnNsaWRlT3V0Tm9kZXM9Xyhkb2N1bWVudC5ib2R5LFwiLm1tLXNsaWRlb3V0XCIpfXJldHVybiBlfTtNLm9wdGlvbnMuZHJhZz1HO3ZhciBsZT17ZHJvcDohMSxmaXRWaWV3cG9ydDohMCxldmVudDpcImNsaWNrXCIscG9zaXRpb246e30sdGlwOiEwfTt2YXIgZGU9e29mZnNldDp7YnV0dG9uOnt4Oi01LHk6NX0sdmlld3BvcnQ6e3g6MjAseToyMH19LGhlaWdodDp7bWF4Ojg4MH0sd2lkdGg6e21heDo0NDB9fTtNLm9wdGlvbnMuZHJvcGRvd249bGUsTS5jb25maWdzLmRyb3Bkb3duPWRlO3ZhciBwZT17aW5zZXJ0TWV0aG9kOlwiYXBwZW5kXCIsaW5zZXJ0U2VsZWN0b3I6XCJib2R5XCJ9O00uY29uZmlncy5maXhlZEVsZW1lbnRzPXBlLE0uY29uZmlncy5jbGFzc05hbWVzLmZpeGVkRWxlbWVudHM9e2ZpeGVkOlwiRml4ZWRcIn07dmFyIHVlPXt1c2U6ITEsdG9wOltdLGJvdHRvbTpbXSxwb3NpdGlvbjpcImxlZnRcIix0eXBlOlwiZGVmYXVsdFwifTtNLm9wdGlvbnMuaWNvbmJhcj11ZTt2YXIgZmU9e2FkZDohMSxibG9ja1BhbmVsOiEwLGhpZGVEaXZpZGVyOiExLGhpZGVOYXZiYXI6ITAsdmlzaWJsZTozfTtNLm9wdGlvbnMuaWNvblBhbmVscz1mZTt2YXIgaGU9e2VuYWJsZTohMSxlbmhhbmNlOiExfTtNLm9wdGlvbnMua2V5Ym9hcmROYXZpZ2F0aW9uPWhlO3ZhciB2ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO0goZG9jdW1lbnQuYm9keSxcImtleWRvd24udGFiZ3VhcmRcIiksSChkb2N1bWVudC5ib2R5LFwiZm9jdXNpbi50YWJndWFyZFwiKSxOKGRvY3VtZW50LmJvZHksXCJmb2N1c2luLnRhYmd1YXJkXCIsKGZ1bmN0aW9uKGUpe2lmKHQubm9kZS53cnByLm1hdGNoZXMoXCIubW0td3JhcHBlcl9vcGVuZWRcIikpe3ZhciBuPWUudGFyZ2V0O2lmKG4ubWF0Y2hlcyhcIi5tbS10YWJlbmRcIikpe3ZhciBpPXZvaWQgMDtuLnBhcmVudEVsZW1lbnQubWF0Y2hlcyhcIi5tbS1tZW51XCIpJiZNLm5vZGUuYmxjayYmKGk9TS5ub2RlLmJsY2spLG4ucGFyZW50RWxlbWVudC5tYXRjaGVzKFwiLm1tLXdyYXBwZXJfX2Jsb2NrZXJcIikmJihpPV8oZG9jdW1lbnQuYm9keSxcIi5tbS1tZW51X29mZmNhbnZhcy5tbS1tZW51X29wZW5lZFwiKVswXSksaXx8KGk9bi5wYXJlbnRFbGVtZW50KSxpJiZ5KGksXCIubW0tdGFic3RhcnRcIilbMF0uZm9jdXMoKX19fSkpLEgoZG9jdW1lbnQuYm9keSxcImtleWRvd24ubmF2aWdhdGVcIiksTihkb2N1bWVudC5ib2R5LFwia2V5ZG93bi5uYXZpZ2F0ZVwiLChmdW5jdGlvbih0KXt2YXIgbj10LnRhcmdldCxpPW4uY2xvc2VzdChcIi5tbS1tZW51XCIpO2lmKGkpe2kubW1BcGk7aWYoIW4ubWF0Y2hlcyhcImlucHV0LCB0ZXh0YXJlYVwiKSlzd2l0Y2godC5rZXlDb2RlKXtjYXNlIDEzOihuLm1hdGNoZXMoXCIubW0tdG9nZ2xlXCIpfHxuLm1hdGNoZXMoXCIubW0tY2hlY2tcIikpJiZuLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2xpY2tcIikpO2JyZWFrO2Nhc2UgMzI6Y2FzZSAzNzpjYXNlIDM4OmNhc2UgMzk6Y2FzZSA0MDp0LnByZXZlbn
24510REZWZhdWx0KCl9aWYoZSlpZihuLm1hdGNoZXMoXCJpbnB1dFwiKSlzd2l0Y2godC5rZXlDb2RlKXtjYXNlIDI3Om4udmFsdWU9XCJcIn1lbHNle3ZhciBzPWkubW1BcGk7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSA4OnZhciBhPV8oaSxcIi5tbS1wYW5lbF9vcGVuZWRcIilbMF0ubW1QYXJlbnQ7YSYmcy5vcGVuUGFuZWwoYS5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpKTticmVhaztjYXNlIDI3OmkubWF0Y2hlcyhcIi5tbS1tZW51X29mZmNhbnZhc1wiKSYmcy5jbG9zZSgpfX19fSkpfSxiZT17bG9hZDohMX07TS5vcHRpb25zLmxhenlTdWJtZW51cz1iZTt2YXIgZ2U9W107dmFyIF9lPXticmVhZGNydW1iczp7c2VwYXJhdG9yOlwiL1wiLHJlbW92ZUZpcnN0OiExfX07ZnVuY3Rpb24geWUoKXt2YXIgZT10aGlzLHQ9dGhpcy5vcHRzLm5hdmJhcnM7aWYodm9pZCAwIT09dCl7dCBpbnN0YW5jZW9mIEFycmF5fHwodD1bdF0pO3ZhciBuPXt9O3QubGVuZ3RoJiYodC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZighKHQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlJiZlJiYoZT17fSksXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KSx2b2lkIDA9PT1lLmNvbnRlbnQmJihlLmNvbnRlbnQ9W1wicHJldlwiLFwidGl0bGVcIl0pLGUuY29udGVudCBpbnN0YW5jZW9mIEFycmF5fHwoZS5jb250ZW50PVtlLmNvbnRlbnRdKSx2b2lkIDA9PT1lLnVzZSYmKGUudXNlPSEwKSxcImJvb2xlYW5cIj09dHlwZW9mIGUudXNlJiZlLnVzZSYmKGUudXNlPSEwKSxlfSh0KSkudXNlKXJldHVybiExO3ZhciBpPWcoXCJkaXYubW0tbmF2YmFyXCIpLHM9dC5wb3NpdGlvbjtcImJvdHRvbVwiIT09cyYmKHM9XCJ0b3BcIiksbltzXXx8KG5bc109ZyhcImRpdi5tbS1uYXZiYXJzX1wiK3MpKSxuW3NdLmFwcGVuZChpKTtmb3IodmFyIGE9MCxvPXQuY29udGVudC5sZW5ndGg7YTxvO2ErKyl7dmFyIHIsYz10LmNvbnRlbnRbYV07aWYoXCJzdHJpbmdcIj09dHlwZW9mIGMpaWYoXCJmdW5jdGlvblwiPT10eXBlb2Yocj15ZS5uYXZiYXJDb250ZW50c1tjXSkpci5jYWxsKGUsaSk7ZWxzZXt2YXIgbT1nKFwic3BhblwiKTttLmlubmVySFRNTD1jO3ZhciBsPXkobSk7MT09bC5sZW5ndGgmJihtPWxbMF0pLGkuYXBwZW5kKG0pfWVsc2UgaS5hcHBlbmQoYyl9XCJzdHJpbmdcIj09dHlwZW9mIHQudHlwZSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mKHI9eWUubmF2YmFyVHlwZXNbdC50eXBlXSkmJnIuY2FsbChlLGkpKTtcImJvb2xlYW5cIiE9dHlwZW9mIHQudXNlJiZrKHQudXNlLChmdW5jdGlvbigpe2kuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWhpZGRlblwiKSxNLnNyX2FyaWEoaSxcImhpZGRlblwiLCExKX0pLChmdW5jdGlvbigpe2kuY2xhc3NMaXN0LmFkZChcIm1tLWhpZGRlblwiKSxNLnNyX2FyaWEoaSxcImhpZGRlblwiLCEwKX0pKX0pKSx0aGlzLmJpbmQoXCJpbml0TWVudTphZnRlclwiLChmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBuKWUubm9kZS5tZW51W1wiYm90dG9tXCI9PXQ/XCJhcHBlbmRcIjpcInByZXBlbmRcIl0oblt0XSl9KSkpfX1NLm9wdGlvbnMubmF2YmFycz1nZSxNLmNvbmZpZ3MubmF2YmFycz1fZSxNLmNvbmZpZ3MuY2xhc3NOYW1lcy5uYXZiYXJzPXtwYW5lbFByZXY6XCJQcmV2XCIscGFuZWxUaXRsZTpcIlRpdGxlXCJ9LHllLm5hdmJhckNvbnRlbnRzPXticmVhZGNydW1iczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49ZyhcImRpdi5tbS1uYXZiYXJfX2JyZWFkY3J1bWJzXCIpO2UuYXBwZW5kKG4pLHRoaXMuYmluZChcImluaXROYXZiYXI6YWZ0ZXJcIiwoZnVuY3Rpb24oZSl7aWYoIWUucXVlcnlTZWxlY3RvcihcIi5tbS1uYXZiYXJfX2JyZWFkY3J1bWJzXCIpKXt5KGUsXCIubW0tbmF2YmFyXCIpWzBdLmNsYXNzTGlzdC5hZGQoXCJtbS1oaWRkZW5cIik7Zm9yKHZhciBuPVtdLGk9ZyhcInNwYW4ubW0tbmF2YmFyX19icmVhZGNydW1ic1wiKSxzPWUsYT0hMDtzOyl7aWYoIShzPXMuY2xvc2VzdChcIi5tbS1wYW5lbFwiKSkucGFyZW50RWxlbWVudC5tYXRjaGVzKFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpKXt2YXIgbz1fKHMsXCIubW0tbmF2YmFyX190aXRsZSBzcGFuXCIpWzBdO2lmKG8pe3ZhciByPW8udGV4dENvbnRlbnQ7ci5sZW5ndGgmJm4udW5zaGlmdChhP1wiPHNwYW4+XCIrcitcIjwvc3Bhbj5cIjonPGEgaHJlZj1cIiMnK3MuaWQrJ1wiPicrcitcIjwvYT5cIil9YT0hMX1zPXMubW1QYXJlbnR9dC5jb25mLm5hdmJhcnMuYnJlYWRjcnVtYnMucmVtb3ZlRmlyc3QmJm4uc2hpZnQoKSxpLmlubmVySFRNTD1uLmpvaW4oJzxzcGFuIGNsYXNzPVwibW0tc2VwYXJhdG9yXCI+Jyt0LmNvbmYubmF2YmFycy5icmVhZGNydW1icy5zZXBhcmF0b3IrXCI8L3NwYW4+XCIpLHkoZSxcIi5tbS1uYXZiYXJcIilbMF0uYXBwZW5kKGkpfX0pKSx0aGlzLmJpbmQoXCJvcGVuUGFuZWw6c3RhcnRcIiwoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5xdWVyeVNlbGVjdG9yKFwiLm1tLW5hdmJhcl9fYnJlYWRjcnVtYnNcIik7bi5pbm5lckhUTUw9dD90LmlubmVySFRNTDpcIlwifSkpLHRoaXMuYmluZChcImluaXROYXZiYXI6YWZ0ZXI6c3ItYXJpYVwiLChmdW5jdGlvbihlKXtfKGUsXCIubW0tYnJlYWRjcnVtYnMgYVwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtNLnNyX2FyaWEoZSxcIm93bnNcIixlLmdldEF0dHJpYnV0ZShcImhyZWZcIikuc2xpY2UoMSkpfSkpfSkpfSxjbG9zZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49ZyhcImEubW0tYnRuLm1tLWJ0bl9jbG9zZS5tbS1uYXZiYXJfX2J0blwiKTtlLmFwcGVuZChuKSx0aGlzLmJpbmQoXCJzZXRQYWdlOmFmdGVyXCIsKGZ1bmN0aW9uKGUpe24uc2V0QXR0cmlidXRlKFwiaHJlZlwiLFwiI1wiK2UuaWQpfSkpLHRoaXMuYmluZChcInNldFBhZ2U6YWZ0ZXI6c3ItdGV4dFwiLChmdW5jdGlvbigpe24uaW5uZXJIVE1MPU0uc3JfdGV4dCh0LmkxOG4odC5jb25mLnNjcmVlblJlYWRlci50ZXh0LmNsb3NlTWVudSkpfSkpfSxwcmV2OmZ1bmN0aW9uKGUpe3ZhciB0LG4saSxzPXRoaXMsYT1nKFwiYS5tbS1idG4ubW0tYnRuX3ByZXYubW0tbmF2YmFyX19idG5cIik7ZS5hcHBlbmQoYSksdGhpcy5iaW5kKFwiaW5
24510pdE5hdmJhcjphZnRlclwiLChmdW5jdGlvbihlKXt5KGUsXCIubW0tbmF2YmFyXCIpWzBdLmNsYXNzTGlzdC5hZGQoXCJtbS1oaWRkZW5cIil9KSksdGhpcy5iaW5kKFwib3BlblBhbmVsOnN0YXJ0XCIsKGZ1bmN0aW9uKGUpe2UucGFyZW50RWxlbWVudC5tYXRjaGVzKFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpfHwoKHQ9ZS5xdWVyeVNlbGVjdG9yKFwiLlwiK3MuY29uZi5jbGFzc05hbWVzLm5hdmJhcnMucGFuZWxQcmV2KSl8fCh0PWUucXVlcnlTZWxlY3RvcihcIi5tbS1uYXZiYXJfX2J0bi5tbS1idG5fcHJldlwiKSksbj10P3QuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKTpcIlwiLGk9dD90LmlubmVySFRNTDpcIlwiLG4/YS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsbik6YS5yZW1vdmVBdHRyaWJ1dGUoXCJocmVmXCIpLGEuY2xhc3NMaXN0W258fGk/XCJyZW1vdmVcIjpcImFkZFwiXShcIm1tLWhpZGRlblwiKSxhLmlubmVySFRNTD1pKX0pKSx0aGlzLmJpbmQoXCJpbml0TmF2YmFyOmFmdGVyOnNyLWFyaWFcIiwoZnVuY3Rpb24oZSl7TS5zcl9hcmlhKGUucXVlcnlTZWxlY3RvcihcIi5tbS1uYXZiYXJcIiksXCJoaWRkZW5cIiwhMCl9KSksdGhpcy5iaW5kKFwib3BlblBhbmVsOnN0YXJ0OnNyLWFyaWFcIiwoZnVuY3Rpb24oZSl7TS5zcl9hcmlhKGEsXCJoaWRkZW5cIixhLm1hdGNoZXMoXCIubW0taGlkZGVuXCIpKSxNLnNyX2FyaWEoYSxcIm93bnNcIiwoYS5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpfHxcIlwiKS5zbGljZSgxKSl9KSl9LHNlYXJjaGZpZWxkOmZ1bmN0aW9uKGUpe1wib2JqZWN0XCIhPXIodGhpcy5vcHRzLnNlYXJjaGZpZWxkKSYmKHRoaXMub3B0cy5zZWFyY2hmaWVsZD17fSk7dmFyIHQ9ZyhcImRpdi5tbS1uYXZiYXJfX3NlYXJjaGZpZWxkXCIpO2UuYXBwZW5kKHQpLHRoaXMub3B0cy5zZWFyY2hmaWVsZC5hZGQ9ITAsdGhpcy5vcHRzLnNlYXJjaGZpZWxkLmFkZFRvPVt0XX0sdGl0bGU6ZnVuY3Rpb24oZSl7dmFyIHQsbixpLHMsYT10aGlzLG89ZyhcImEubW0tbmF2YmFyX190aXRsZVwiKSxyPWcoXCJzcGFuXCIpO28uYXBwZW5kKHIpLGUuYXBwZW5kKG8pLHRoaXMuYmluZChcIm9wZW5QYW5lbDpzdGFydFwiLChmdW5jdGlvbihlKXtlLnBhcmVudEVsZW1lbnQubWF0Y2hlcyhcIi5tbS1saXN0aXRlbV92ZXJ0aWNhbFwiKXx8KChpPWUucXVlcnlTZWxlY3RvcihcIi5cIithLmNvbmYuY2xhc3NOYW1lcy5uYXZiYXJzLnBhbmVsVGl0bGUpKXx8KGk9ZS5xdWVyeVNlbGVjdG9yKFwiLm1tLW5hdmJhcl9fdGl0bGUgc3BhblwiKSksKHQ9aSYmaS5jbG9zZXN0KFwiYVwiKT9pLmNsb3Nlc3QoXCJhXCIpLmdldEF0dHJpYnV0ZShcImhyZWZcIik6XCJcIik/by5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsdCk6by5yZW1vdmVBdHRyaWJ1dGUoXCJocmVmXCIpLG49aT9pLmlubmVySFRNTDpcIlwiLHIuaW5uZXJIVE1MPW4pfSkpLHRoaXMuYmluZChcIm9wZW5QYW5lbDpzdGFydDpzci1hcmlhXCIsKGZ1bmN0aW9uKGUpe2lmKGEub3B0cy5zY3JlZW5SZWFkZXIudGV4dCl7aWYoIXMpeShhLm5vZGUubWVudSxcIi5tbS1uYXZiYXJzX3RvcCwgLm1tLW5hdmJhcnNfYm90dG9tXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUucXVlcnlTZWxlY3RvcihcIi5tbS1idG5fcHJldlwiKTt0JiYocz10KX0pKTtpZihzKXt2YXIgdD0hMDtcInBhcmVudFwiPT1hLm9wdHMubmF2YmFyLnRpdGxlTGluayYmKHQ9IXMubWF0Y2hlcyhcIi5tbS1oaWRkZW5cIikpLE0uc3JfYXJpYShvLFwiaGlkZGVuXCIsdCl9fX0pKX19LHllLm5hdmJhclR5cGVzPXt0YWJzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZS5jbGFzc0xpc3QuYWRkKFwibW0tbmF2YmFyX3RhYnNcIiksZS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJtbS1uYXZiYXJzX2hhcy10YWJzXCIpO3ZhciBuPXkoZSxcImFcIik7ZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZnVuY3Rpb24oZSl7dmFyIG49ZS50YXJnZXQ7aWYobi5tYXRjaGVzKFwiYVwiKSlpZihuLm1hdGNoZXMoXCIubW0tbmF2YmFyX190YWJfc2VsZWN0ZWRcIikpZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtlbHNlIHRyeXt0Lm9wZW5QYW5lbCh0Lm5vZGUubWVudS5xdWVyeVNlbGVjdG9yKG4uZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSksITEpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9Y2F0Y2goZSl7fX0pKSx0aGlzLmJpbmQoXCJvcGVuUGFuZWw6c3RhcnRcIiwoZnVuY3Rpb24gZSh0KXtuLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuY2xhc3NMaXN0LnJlbW92ZShcIm1tLW5hdmJhcl9fdGFiX3NlbGVjdGVkXCIpfSkpO3ZhciBpPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaGVzKCdbaHJlZj1cIiMnK3QuaWQrJ1wiXScpfSkpWzBdO2lmKGkpaS5jbGFzc0xpc3QuYWRkKFwibW0tbmF2YmFyX190YWJfc2VsZWN0ZWRcIik7ZWxzZXt2YXIgcz10Lm1tUGFyZW50O3MmJmUuY2FsbCh0aGlzLHMuY2xvc2VzdChcIi5tbS1wYW5lbFwiKSl9fSkpfX07dmFyIExlPXtzY3JvbGw6ITEsdXBkYXRlOiExfTt2YXIgd2U9e3Njcm9sbE9mZnNldDowLHVwZGF0ZU9mZnNldDo1MH07TS5vcHRpb25zLnBhZ2VTY3JvbGw9TGUsTS5jb25maWdzLnBhZ2VTY3JvbGw9d2U7dmFyIEVlPXthZGQ6ITEsYWRkVG86XCJwYW5lbHNcIixjYW5jZWw6ITEsbm9SZXN1bHRzOlwiTm8gcmVzdWx0cyBmb3VuZC5cIixwbGFjZWhvbGRlcjpcIlNlYXJjaFwiLHBhbmVsOnthZGQ6ITEsZGl2aWRlcnM6ITAsZng6XCJub25lXCIsaWQ6bnVsbCxzcGxhc2g6bnVsbCx0aXRsZTpcIlNlYXJjaFwifSxzZWFyY2g6ITAsc2hvd1RleHRJdGVtczohMSxzaG93U3ViUGFuZWxzOiEwfTt2YXIgeGU9e2NsZWFyOiExLGZvcm06ITEsaW5wdXQ6ITEsc3VibWl0OiExfSxQZT17U2VhcmNoOlwi2KzYs9iq2KzZiFwiLFwiTm8gcmVzdWx0cyBmb3VuZC5cIjpcItmG2KrbjNis2YfigIzYp9uMINuM2KfZgdiqINmG2LTYry5cIixjYW5jZWw6XCLYp9mG2LXYsdin2YFcIn0sa2U9e1NlYXJjaDpcIlN1Y2hlXCIsXCJObyByZXN1bHRzIGZvdW5kLlwiOlwiS2VpbmUgRXJnZWJuaXNzZSBnZWZ1bmRlbi5cIixjYW5jZWw6XCJiZWVuZGVuXCJ9LFNlPXtTZWFyY2g6XCLQndCw0LnRgtC4XCIsXCJObyByZXN1bHRzIGZvdW5kLlwiOlwi0J3QuNGH0LXQs9C+INC90LUg0L3QsNC50LTQtdC90L4uXCIsY2FuY2VsOlwi0L7RgtC80LXQvdC40YLRjFwifSxNZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGg7dDxuO3QrKyllKz1hcmd1bWVudHNbdF0ubGVuZ3RoO3ZhciBpPUFycmF5KGUpLHM9MDtmb3IodD0wO3Q8bjt0KyspZm9yKHZhciBhPWFyZ3VtZW50c1t0XSxvPTAscj1hLmxlbmd0aDtvPHI7bysrLHMrKylpW3NdPWFbb107cmV0dXJuIGl9O2Yoe1NlYXJjaDpcIlpvZWtlblwiLFwiTm8gcmVzdWx0cyBmb3VuZC5cIjpcIkdlZW4gcmVzdWx0YXRlbiBnZXZvbmRlbi5cIixjYW5jZWw6XCJhbm51bGVyZW5cIn0sXCJubFwiKSxmKFBlLFwiZmFcIiksZihrZSxcImRlXCIpLGYoU2UsXCJydVwiKSxNLm9wdGlvbnMuc2VhcmNoZmllbGQ9RWUsTS5jb25maWdzLnNlYXJjaGZpZWxkPXhlO3ZhciBBZT1mdW5jdGlvbigpe3ZhciBlPXR
24510oaXMub3B0cy5zZWFyY2hmaWVsZCx0PSh0aGlzLmNvbmYuc2VhcmNoZmllbGQseSh0aGlzLm5vZGUucG5scyxcIi5tbS1wYW5lbF9zZWFyY2hcIilbMF0pO2lmKHQpcmV0dXJuIHQ7dD1nKFwiZGl2Lm1tLXBhbmVsLm1tLXBhbmVsX3NlYXJjaC5tbS1oaWRkZW5cIiksZS5wYW5lbC5pZCYmKHQuaWQ9ZS5wYW5lbC5pZCksZS5wYW5lbC50aXRsZSYmdC5zZXRBdHRyaWJ1dGUoXCJkYXRhLW1tLXRpdGxlXCIsZS5wYW5lbC50aXRsZSk7dmFyIG49ZyhcInVsXCIpO3N3aXRjaCh0LmFwcGVuZChuKSx0aGlzLm5vZGUucG5scy5hcHBlbmQodCksdGhpcy5pbml0TGlzdHZpZXcobiksdGhpcy5faW5pdE5hdmJhcih0KSxlLnBhbmVsLmZ4KXtjYXNlITE6YnJlYWs7Y2FzZVwibm9uZVwiOnQuY2xhc3NMaXN0LmFkZChcIm1tLXBhbmVsX25vYW5pbWF0aW9uXCIpO2JyZWFrO2RlZmF1bHQ6dC5jbGFzc0xpc3QuYWRkKFwibW0tcGFuZWxfZngtXCIrZS5wYW5lbC5meCl9aWYoZS5wYW5lbC5zcGxhc2gpe3ZhciBpPWcoXCJkaXYubW0tcGFuZWxfX2NvbnRlbnRcIik7aS5pbm5lckhUTUw9ZS5wYW5lbC5zcGxhc2gsdC5hcHBlbmQoaSl9cmV0dXJuIHQuY2xhc3NMaXN0LmFkZChcIm1tLXBhbmVsXCIpLHQuY2xhc3NMaXN0LmFkZChcIm1tLWhpZGRlblwiKSx0aGlzLm5vZGUucG5scy5hcHBlbmQodCksdH0sVGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vcHRzLnNlYXJjaGZpZWxkLG49dGhpcy5jb25mLnNlYXJjaGZpZWxkO2lmKGUucGFyZW50RWxlbWVudC5tYXRjaGVzKFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpKXJldHVybiBudWxsO2lmKGE9XyhlLFwiLm1tLXNlYXJjaGZpZWxkXCIpWzBdKXJldHVybiBhO2Z1bmN0aW9uIGkoZSx0KXtpZih0KWZvcih2YXIgbiBpbiB0KWUuc2V0QXR0cmlidXRlKG4sdFtuXSl9dmFyIHMsYT1nKChuLmZvcm0/XCJmb3JtXCI6XCJkaXZcIikrXCIubW0tc2VhcmNoZmllbGRcIiksbz1nKFwiZGl2Lm1tLXNlYXJjaGZpZWxkX19pbnB1dFwiKSxyPWcoXCJpbnB1dFwiKTsoci50eXBlPVwidGV4dFwiLHIuYXV0b2NvbXBsZXRlPVwib2ZmXCIsci5wbGFjZWhvbGRlcj10aGlzLmkxOG4odC5wbGFjZWhvbGRlciksby5hcHBlbmQociksYS5hcHBlbmQobyksZS5wcmVwZW5kKGEpLGkocixuLmlucHV0KSxuLmNsZWFyKSYmKChzPWcoXCJhLm1tLWJ0bi5tbS1idG5fY2xvc2UubW0tc2VhcmNoZmllbGRfX2J0blwiKSkuc2V0QXR0cmlidXRlKFwiaHJlZlwiLFwiI1wiKSxvLmFwcGVuZChzKSk7KGkoYSxuLmZvcm0pLG4uZm9ybSYmbi5zdWJtaXQmJiFuLmNsZWFyKSYmKChzPWcoXCJhLm1tLWJ0bi5tbS1idG5fbmV4dC5tbS1zZWFyY2hmaWVsZF9fYnRuXCIpKS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsXCIjXCIpLG8uYXBwZW5kKHMpKTt0LmNhbmNlbCYmKChzPWcoXCJhLm1tLXNlYXJjaGZpZWxkX19jYW5jZWxcIikpLnNldEF0dHJpYnV0ZShcImhyZWZcIixcIiNcIikscy50ZXh0Q29udGVudD10aGlzLmkxOG4oXCJjYW5jZWxcIiksYS5hcHBlbmQocykpO3JldHVybiBhfSxDZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy5vcHRzLnNlYXJjaGZpZWxkLGk9KHRoaXMuY29uZi5zZWFyY2hmaWVsZCx7fSk7ZS5jbG9zZXN0KFwiLm1tLXBhbmVsX3NlYXJjaFwiKT8oaS5wYW5lbHM9Xyh0aGlzLm5vZGUucG5scyxcIi5tbS1wYW5lbFwiKSxpLm5vcmVzdWx0cz1bZS5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpXSk6ZS5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpPyhpLnBhbmVscz1bZS5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpXSxpLm5vcmVzdWx0cz1pLnBhbmVscyk6KGkucGFuZWxzPV8odGhpcy5ub2RlLnBubHMsXCIubW0tcGFuZWxcIiksaS5ub3Jlc3VsdHM9W3RoaXMubm9kZS5tZW51XSksaS5wYW5lbHM9aS5wYW5lbHMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5tYXRjaGVzKFwiLm1tLXBhbmVsX3NlYXJjaFwiKX0pKSxpLnBhbmVscz1pLnBhbmVscy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLnBhcmVudEVsZW1lbnQubWF0Y2hlcyhcIi5tbS1saXN0aXRlbV92ZXJ0aWNhbFwiKX0pKSxpLmxpc3RpdGVtcz1bXSxpLmRpdmlkZXJzPVtdLGkucGFuZWxzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0LG47KHQ9aS5saXN0aXRlbXMpLnB1c2guYXBwbHkodCxfKGUsXCIubW0tbGlzdGl0ZW1cIikpLChuPWkuZGl2aWRlcnMpLnB1c2guYXBwbHkobixfKGUsXCIubW0tZGl2aWRlclwiKSl9KSk7dmFyIHM9eSh0aGlzLm5vZGUucG5scyxcIi5tbS1wYW5lbF9zZWFyY2hcIilbMF0sYT1fKGUsXCJpbnB1dFwiKVswXSxvPV8oZSxcIi5tbS1zZWFyY2hmaWVsZF9fY2FuY2VsXCIpWzBdO2EubW1TZWFyY2hmaWVsZD1pLG4ucGFuZWwuYWRkJiZuLnBhbmVsLnNwbGFzaCYmKEgoYSxcImZvY3VzLnNwbGFzaFwiKSxOKGEsXCJmb2N1cy5zcGxhc2hcIiwoZnVuY3Rpb24oZSl7dC5vcGVuUGFuZWwocyl9KSkpLG4uY2FuY2VsJiYoSChhLFwiZm9jdXMuY2FuY2VsXCIpLE4oYSxcImZvY3VzLmNhbmNlbFwiLChmdW5jdGlvbihlKXtvLmNsYXNzTGlzdC5hZGQoXCJtbS1zZWFyY2hmaWVsZF9fY2FuY2VsLWFjdGl2ZVwiKX0pKSxIKG8sXCJjbGljay5zcGxhc2hcIiksTihvLFwiY2xpY2suc3BsYXNoXCIsKGZ1bmN0aW9uKGUpe2lmKGUucHJldmVudERlZmF1bHQoKSxvLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1zZWFyY2hmaWVsZF9fY2FuY2VsLWFjdGl2ZVwiKSxzLm1hdGNoZXMoXCIubW0tcGFuZWxfb3BlbmVkXCIpKXt2YXIgbj15KHQubm9kZS5wbmxzLFwiLm1tLXBhbmVsX29wZW5lZC1wYXJlbnRcIik7bi5sZW5ndGgmJnQub3BlblBhbmVsKG5bbi5sZW5ndGgtMV0pfX0pKSksbi5wYW5lbC5hZGQmJlwicGFuZWxcIj09bi5hZGRUbyYmdGhpcy5iaW5kKFwib3BlblBhbmVsOmZpbmlzaFwiLChmdW5jdGlvbihlKXtlPT09cyYmYS5mb2N1cygpfSkpLEgoYSxcImlucHV0LnNlYXJjaFwiKSxOKGEsXCJpbnB1dC5zZWFyY2hcIiwoZnVuY3Rpb24oZSl7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSA5OmNhc2UgMTY6Y2FzZSAxNzpjYXNlIDE4OmNhc2UgMzc6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6YnJlYWs7ZGVmYXVsdDp0LnNlYXJjaChhKX19KSksdGhpcy5zZWFyY2goYSl9LE5lPWZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PXRoaXMub3B0cy5zZWFyY2hmaWVsZDt0aGlzLmNvbmYuc2VhcmNoZmllbGQ7aWYoZS5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpfHwoZT15KHRoaXMubm9kZS5wbmxzLFwiLm1tLXBhbmVsXCIpWzBdKSwheShlLFwiLm1tLXBhbmVsX19ub3Jlc3VsdHNtc2dcIikubGVuZ3RoKXt2YXIgbj1nKFwiZGl2Lm1tLXBhbmVsX19ub3Jlc3VsdHNtc2cubW0taGlkZGVuXCIpO24uaW5uZXJIVE1MPXRoaXMuaTE4bih0Lm5vUmVzdWx0cyksZS5hcHBlbmQobil9fX07TS5wcm90b3R5cGUuc2VhcmNoPWZ1bmN0aW9uKGUsdCl7dmFyIG4saT10aGlzLHM9dGhpcy5vcHRzLnNlYXJjaGZpZWxkO3RoaXMuY29uZi5zZWFyY2hmaWVsZDt0PSh0PXR8fFwiXCIrZS52YWx1ZSkudG9Mb3dlckNhc2UoKS50cmltKCk7dmFyIGE9ZS5tbVNlYXJjaGZpZWxkLG89XyhlLmNsb3Nlc3QoXCIubW0tc2VhcmNoZmllbGRcIiksXCIubW0tYnRuXCIpLHI9eSh0aGlzLm5vZGUucG5scyxcIi5tbS1wYW5lbF9zZWFyY2hcIilbMF0sYz1hLnBhbmVscyxtPWEubm9yZXN1bHRzLGw9YS5saXN0aXRlbXMsZD1hLmRpdmlkZXJzO2lmKGwuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0tbGlzdGl0ZW1fbm9zdWJpdGVtc1wiKSxlLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1saXN0aXRlbV9vbmx5c3ViaXRlbXNcIiksZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0taGlkZGVuXCIpfSkpLHImJih5KHIsXCIubW0tbGlzdHZpZXdcIilbMF0uaW5uZXJIVE1MPVwiXCIpLGMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5zY3JvbGxUb3A9MH0pKSx0Lmxlbmd0aCl7ZC5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNsYXNzTGlzdC5hZGQoXCJtbS1oaWRkZW5cIil9KSksbC5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbixpPXkoZSxcIi
245105tbS1saXN0aXRlbV9fdGV4dFwiKVswXSxhPSExO2kmJihuPWksQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobi5jaGlsZE5vZGVzKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiAzPT1lLm5vZGVUeXBlfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGV4dENvbnRlbnR9KSkuam9pbihcIiBcIikpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0KT4tMSYmKGkubWF0Y2hlcyhcIi5tbS1saXN0aXRlbV9fYnRuXCIpP3Muc2hvd1N1YlBhbmVscyYmKGE9ITApOihpLm1hdGNoZXMoXCJhXCIpfHxzLnNob3dUZXh0SXRlbXMpJiYoYT0hMCkpLGF8fGUuY2xhc3NMaXN0LmFkZChcIm1tLWhpZGRlblwiKX0pKTt2YXIgcD1sLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUubWF0Y2hlcyhcIi5tbS1oaWRkZW5cIil9KSkubGVuZ3RoO2lmKHMucGFuZWwuYWRkKXt2YXIgdT1bXTtjLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PXcoXyhlLFwiLm1tLWxpc3RpdGVtXCIpKTtpZigodD10LmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUubWF0Y2hlcyhcIi5tbS1oaWRkZW5cIil9KSkpLmxlbmd0aCl7aWYocy5wYW5lbC5kaXZpZGVycyl7dmFyIG49ZyhcImxpLm1tLWRpdmlkZXJcIiksaT1fKGUsXCIubW0tbmF2YmFyX190aXRsZVwiKVswXTtpJiYobi5pbm5lckhUTUw9aS5pbm5lckhUTUwsdS5wdXNoKG4pKX10LmZvckVhY2goKGZ1bmN0aW9uKGUpe3UucHVzaChlLmNsb25lTm9kZSghMCkpfSkpfX0pKSx1LmZvckVhY2goKGZ1bmN0aW9uKGUpe2UucXVlcnlTZWxlY3RvckFsbChcIi5tbS10b2dnbGUsIC5tbS1jaGVja1wiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnJlbW92ZSgpfSkpfSkpLChuPXkocixcIi5tbS1saXN0dmlld1wiKVswXSkuYXBwZW5kLmFwcGx5KG4sdSksdGhpcy5vcGVuUGFuZWwocil9ZWxzZSBzLnNob3dTdWJQYW5lbHMmJmMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dyhfKGUsXCIubW0tbGlzdGl0ZW1cIikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUubW1DaGlsZDt0JiZfKHQsXCIubW0tbGlzdGl0ZW1cIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0taGlkZGVuXCIpfSkpfSkpfSkpLE1lKGMpLnJldmVyc2UoKS5mb3JFYWNoKChmdW5jdGlvbih0LG4pe3ZhciBzPXQubW1QYXJlbnQ7cyYmKHcoXyh0LFwiLm1tLWxpc3RpdGVtXCIpKS5sZW5ndGg/KHMubWF0Y2hlcyhcIi5tbS1oaWRkZW5cIikmJnMuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWhpZGRlblwiKSxzLmNsYXNzTGlzdC5hZGQoXCJtbS1saXN0aXRlbV9vbmx5c3ViaXRlbXNcIikpOmUuY2xvc2VzdChcIi5tbS1wYW5lbFwiKXx8KCh0Lm1hdGNoZXMoXCIubW0tcGFuZWxfb3BlbmVkXCIpfHx0Lm1hdGNoZXMoXCIubW0tcGFuZWxfb3BlbmVkLXBhcmVudFwiKSkmJnNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7aS5vcGVuUGFuZWwocy5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpKX0pLChuKzEpKigxLjUqaS5jb25mLm9wZW5pbmdJbnRlcnZhbCkpLHMuY2xhc3NMaXN0LmFkZChcIm1tLWxpc3RpdGVtX25vc3ViaXRlbXNcIikpKX0pKSxjLmZvckVhY2goKGZ1bmN0aW9uKGUpe3coXyhlLFwiLm1tLWxpc3RpdGVtXCIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtMKGUsXCIubW0tbGlzdGl0ZW1fdmVydGljYWxcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5tYXRjaGVzKFwiLm1tLWhpZGRlblwiKSYmKGUuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWhpZGRlblwiKSxlLmNsYXNzTGlzdC5hZGQoXCJtbS1saXN0aXRlbV9vbmx5c3ViaXRlbXNcIikpfSkpfSkpfSkpLGMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dyhfKGUsXCIubW0tbGlzdGl0ZW1cIikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLGk9ZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO2k7KXQmJiFpLm1hdGNoZXModCl8fG4ucHVzaChpKSxpPWkucHJldmlvdXNFbGVtZW50U2libGluZztyZXR1cm4gbn0oZSxcIi5tbS1kaXZpZGVyXCIpWzBdO3QmJnQuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWhpZGRlblwiKX0pKX0pKTtvLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1oaWRkZW5cIil9KSksbS5mb3JFYWNoKChmdW5jdGlvbihlKXtfKGUsXCIubW0tcGFuZWxfX25vcmVzdWx0c21zZ1wiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc0xpc3RbcD9cImFkZFwiOlwicmVtb3ZlXCJdKFwibW0taGlkZGVuXCIpfSkpfSkpLHMucGFuZWwuYWRkJiYocy5wYW5lbC5zcGxhc2gmJl8ocixcIi5tbS1wYW5lbF9fY29udGVudFwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc0xpc3QuYWRkKFwibW0taGlkZGVuXCIpfSkpLGwuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWhpZGRlblwiKX0pKSxkLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1oaWRkZW5cIil9KSkpfWVsc2UgaWYobC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0taGlkZGVuXCIpfSkpLGQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWhpZGRlblwiKX0pKSxvLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTGlzdC5hZGQoXCJtbS1oaWRkZW5cIil9KSksbS5mb3JFYWNoKChmdW5jdGlvbihlKXtfKGUsXCIubW0tcGFuZWxfX25vcmVzdWx0c21zZ1wiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc0xpc3QuYWRkKFwibW0taGlkZGVuXCIpfSkpfSkpLHMucGFuZWwuYWRkKWlmKHMucGFuZWwuc3BsYXNoKV8ocixcIi5tbS1wYW5lbF9fY29udGVudFwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0taGlkZGVuXCIpfSkpO2Vsc2UgaWYoIWUuY2xvc2VzdChcIi5tbS1wYW5lbF9zZWFyY2hcIikpe3ZhciBmPXkodGhpcy5ub2RlLnBubHMsXCIubW0tcGFuZWxfb3BlbmVkLXBhcmVudFwiKTt0aGlzLm9wZW5QYW5lbChmLnNsaWNlKC0xKVswXSl9dGhpcy50cmlnZ2VyKFwidXBkYXRlTGlzdHZpZXdcIil9O3ZhciBIZT17YWRkOiExLGFkZFRvOlwicGFuZWxzXCJ9O00ub3B0aW9ucy5zZWN0aW9uSW5kZXhlcj1IZTt2YXIgamU9e2N1cnJlbnQ6ITAsaG92ZXI6ITEscGFyZW50OiExfTtNLm9wdGlvbnMuc2V0U2VsZWN0ZWQ9amU7dmFyIERlPXtjb2xsYXBzZWQ6e3VzZTohMSxibG9ja01lbnU6ITAsaGlkZURpdmlkZXI6ITEsaGlkZU5hdmJhcjohMH0sZXhwYW5kZWQ6e3VzZTohMSxpbml0aWFsOlwib3BlblwifX07TS5vcHRpb25zLnNpZGViYXI9RGU7TS5jb25maWdzLmNsYXNzTmFtZXMudG9nZ2xlcz17dG9nZ2xlOlwiVG9nZ2xlXCIsY2hlY2s6XCJDaGVja1wifTtcbi8qIVxuICogbW1lbnUuanNcbiAqIG1tZW51anMuY29tXG4gKlxuICogQ29weXJpZ2h0IChjKSBGcmVkIEhldXNzY2hlblxuICogZnJlYnNpdGUubmxcbiAqL1xuTS5hZGRvbnM9e29mZmNhbnZhczpmdW5jdGlvbigpe3ZhciBlPXR
24510oaXM7aWYodGhpcy5vcHRzLm9mZkNhbnZhcyl7dmFyIHQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KSxlfSh0aGlzLm9wdHMub2ZmQ2FudmFzKTt0aGlzLm9wdHMub2ZmQ2FudmFzPW8odCxNLm9wdGlvbnMub2ZmQ2FudmFzKTt2YXIgbj10aGlzLmNvbmYub2ZmQ2FudmFzO3RoaXMuX2FwaS5wdXNoKFwib3BlblwiLFwiY2xvc2VcIixcInNldFBhZ2VcIiksdGhpcy52YXJzLm9wZW5lZD0hMSx0aGlzLmJpbmQoXCJpbml0TWVudTpiZWZvcmVcIiwoZnVuY3Rpb24oKXtuLmNsb25lJiYoZS5ub2RlLm1lbnU9ZS5ub2RlLm1lbnUuY2xvbmVOb2RlKCEwKSxlLm5vZGUubWVudS5pZCYmKGUubm9kZS5tZW51LmlkPVwibW0tXCIrZS5ub2RlLm1lbnUuaWQpLF8oZS5ub2RlLm1lbnUsXCJbaWRdXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuaWQ9XCJtbS1cIitlLmlkfSkpKSxlLm5vZGUud3Jwcj1kb2N1bWVudC5ib2R5LGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iobi5tZW51Lmluc2VydFNlbGVjdG9yKVtuLm1lbnUuaW5zZXJ0TWV0aG9kXShlLm5vZGUubWVudSl9KSksdGhpcy5iaW5kKFwiaW5pdE1lbnU6YWZ0ZXJcIiwoZnVuY3Rpb24oKXtELmNhbGwoZSksZS5zZXRQYWdlKE0ubm9kZS5wYWdlKSxqLmNhbGwoZSksZS5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZChcIm1tLW1lbnVfb2ZmY2FudmFzXCIpO3ZhciB0PXdpbmRvdy5sb2NhdGlvbi5oYXNoO2lmKHQpe3ZhciBuPXAoZS5ub2RlLm1lbnUuaWQpO24mJm49PXQuc2xpY2UoMSkmJnNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5vcGVuKCl9KSwxZTMpfX0pKSx0aGlzLmJpbmQoXCJzZXRQYWdlOmFmdGVyXCIsKGZ1bmN0aW9uKGUpe00ubm9kZS5ibGNrJiZ5KE0ubm9kZS5ibGNrLFwiYVwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNldEF0dHJpYnV0ZShcImhyZWZcIixcIiNcIitlLmlkKX0pKX0pKSx0aGlzLmJpbmQoXCJvcGVuOnN0YXJ0OnNyLWFyaWFcIiwoZnVuY3Rpb24oKXtNLnNyX2FyaWEoZS5ub2RlLm1lbnUsXCJoaWRkZW5cIiwhMSl9KSksdGhpcy5iaW5kKFwiY2xvc2U6ZmluaXNoOnNyLWFyaWFcIiwoZnVuY3Rpb24oKXtNLnNyX2FyaWEoZS5ub2RlLm1lbnUsXCJoaWRkZW5cIiwhMCl9KSksdGhpcy5iaW5kKFwiaW5pdE1lbnU6YWZ0ZXI6c3ItYXJpYVwiLChmdW5jdGlvbigpe00uc3JfYXJpYShlLm5vZGUubWVudSxcImhpZGRlblwiLCEwKX0pKSx0aGlzLmJpbmQoXCJpbml0QmxvY2tlcjphZnRlcjpzci10ZXh0XCIsKGZ1bmN0aW9uKCl7eShNLm5vZGUuYmxjayxcImFcIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5pbm5lckhUTUw9TS5zcl90ZXh0KGUuaTE4bihlLmNvbmYuc2NyZWVuUmVhZGVyLnRleHQuY2xvc2VNZW51KSl9KSl9KSksdGhpcy5jbGNrLnB1c2goKGZ1bmN0aW9uKHQsbil7dmFyIGk9cChlLm5vZGUubWVudS5pZCk7aWYoaSYmdC5tYXRjaGVzKCdbaHJlZj1cIiMnK2krJ1wiXScpKXtpZihuLmluTWVudSlyZXR1cm4gZS5vcGVuKCksITA7dmFyIHM9dC5jbG9zZXN0KFwiLm1tLW1lbnVcIik7aWYocyl7dmFyIGE9cy5tbUFwaTtpZihhJiZhLmNsb3NlKXJldHVybi
24510BhLmNsb3NlKCksbShzLChmdW5jdGlvbigpe2Uub3BlbigpfSksZS5jb25mLnRyYW5zaXRpb25EdXJhdGlvbiksITB9cmV0dXJuIGUub3BlbigpLCEwfWlmKChpPU0ubm9kZS5wYWdlLmlkKSYmdC5tYXRjaGVzKCdbaHJlZj1cIiMnK2krJ1wiXScpKXJldHVybiBlLmNsb3NlKCksITB9KSl9fSxzY3JlZW5SZWFkZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlJiYoZT17YXJpYTplLHRleHQ6ZX0pLFwib2JqZWN0XCIhPXR5cGVvZiBlJiYoZT17fSksZX0odGhpcy5vcHRzLnNjcmVlblJlYWRlcik7dGhpcy5vcHRzLnNjcmVlblJlYWRlcj1vKHQsTS5vcHRpb25zLnNjcmVlblJlYWRlcik7dmFyIG49dGhpcy5jb25mLnNjcmVlblJlYWRlcjt0LmFyaWEmJih0aGlzLmJpbmQoXCJpbml0QWRkb25zOmFmdGVyXCIsKGZ1bmN0aW9uKCl7ZS5iaW5kKFwiaW5pdE1lbnU6YWZ0ZXJcIiwoZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoXCJpbml0TWVudTphZnRlcjpzci1hcmlhXCIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX0pKSxlLmJpbmQoXCJpbml0TmF2YmFyOmFmdGVyXCIsKGZ1bmN0aW9uKCl7dGhpcy50cmlnZ2VyKFwiaW5pdE5hdmJhcjphZnRlcjpzci1hcmlhXCIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX0pKSxlLmJpbmQoXCJvcGVuUGFuZWw6c3RhcnRcIiwoZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoXCJvcGVuUGFuZWw6c3RhcnQ6c3ItYXJpYVwiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9KSksZS5iaW5kKFwiY2xvc2U6c3RhcnRcIiwoZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoXCJjbG9zZTpzdGFydDpzci1hcmlhXCIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX0pKSxlLmJpbmQoXCJjbG9zZTpmaW5pc2hcIiwoZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoXCJjbG9zZTpmaW5pc2g6c3ItYXJpYVwiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9KSksZS5iaW5kKFwib3BlbjpzdGFydFwiLChmdW5jdGlvbigpe3RoaXMudHJpZ2dlcihcIm9wZW46c3RhcnQ6c3ItYXJpYVwiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9KSksZS5iaW5kKFwiaW5pdE9wZW5lZDphZnRlclwiLChmdW5jdGlvbigpe3RoaXMudHJpZ2dlcihcImluaXRPcGVuZWQ6YWZ0ZXI6c3ItYXJpYVwiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9KSl9KSksdGhpcy5iaW5kKFwidXBkYXRlTGlzdHZpZXdcIiwoZnVuY3Rpb24oKXtlLm5vZGUucG5scy5xdWVyeVNlbGVjdG9yQWxsKFwiLm1tLWxpc3RpdGVtXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe00uc3JfYXJpYShlLFwiaGlkZGVuXCIsZS5tYXRjaGVzKFwiLm1tLWhpZGRlblwiKSl9KSl9KSksdGhpcy5iaW5kKFwib3BlblBhbmVsOnN0YXJ0XCIsKGZ1bmN0aW9uKHQpe3ZhciBuPV8oZS5ub2RlLnBubHMsXCIubW0tcGFuZWxcIikuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXR9KSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoXCIubW0tcGFuZWxcIil9KSksaT1bdF07Xyh0LFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsIC5tbS1saXN0aXRlbV9vcGVuZWRcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aS5wdXNoLmFwcGx5KGkseShlLFwiLm1tLXBhbmVsXCIpKX0pKSxuLmZvckVhY2goKGZ1bmN0aW9uKGUpe00uc3JfYXJpYShlLFwiaGlkZGVuXCIsITApfSkpLGkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7TS5zcl9hcmlhKGUsXCJoaWRkZW5cIiwhMSl9KSl9KSksdGhpcy5iaW5kKFwiY2xvc2VQYW5lbFwiLChmdW5jdGlvbihlKXtNLnNyX2FyaWEoZSxcImhpZGRlblwiLCEwKX0pKSx0aGlzLmJpbmQoXCJpbml0UGFuZWw6YWZ0ZXJcIiwoZnVuY3Rpb24oZSl7XyhlLFwiLm1tLWJ0blwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtNLnNyX2FyaWEoZSxcImhhc3BvcHVwXCIsITApO3ZhciB0PWUuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKTt0JiZNLnNyX2FyaWEoZSxcIm93bnNcIix0LnJlcGxhY2UoXCIjXCIsXCJcIikpfSkpfSkpLHRoaXMuYmluZChcImluaXROYXZiYXI6YWZ0ZXJcIiwoZnVuY3Rpb24oZSl7dmFyIHQ9eShlLFwiLm1tLW5hdmJhclwiKVswXSxuPXQubWF0Y2hlcyhcIi5tbS1oaWRkZW5cIik7TS5zcl9hcmlhKHQsXCJoaWRkZW5cIixuKX0pKSx0LnRleHQmJlwicGFyZW50XCI9PXRoaXMub3B0cy5uYXZiYXIudGl0bGVMaW5rJiZ0aGlzLmJpbmQoXCJpbml0TmF2YmFyOmFmdGVyXCIsKGZ1bmN0aW9uKGUpe3ZhciB0PXkoZSxcIi
245105tbS1uYXZiYXJcIilbMF0sbj0hIXQucXVlcnlTZWxlY3RvcihcIi5tbS1idG5fcHJldlwiKTtNLnNyX2FyaWEoXyh0LFwiLm1tLW5hdmJhcl9fdGl0bGVcIilbMF0sXCJoaWRkZW5cIixuKX0pKSksdC50ZXh0JiYodGhpcy5iaW5kKFwiaW5pdEFkZG9uczphZnRlclwiLChmdW5jdGlvbigpe2UuYmluZChcInNldFBhZ2U6YWZ0ZXJcIiwoZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoXCJzZXRQYWdlOmFmdGVyOnNyLXRleHRcIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfSkpLGUuYmluZChcImluaXRCbG9ja2VyOmFmdGVyXCIsKGZ1bmN0aW9uKCl7dGhpcy50cmlnZ2VyKFwiaW5pdEJsb2NrZXI6YWZ0ZXI6c3ItdGV4dFwiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9KSl9KSksdGhpcy5iaW5kKFwiaW5pdE5hdmJhcjphZnRlclwiLChmdW5jdGlvbih0KXt2YXIgaT15KHQsXCIubW0tbmF2YmFyXCIpWzBdO2lmKGkpe3ZhciBzPXkoaSxcIi5tbS1idG5fcHJldlwiKVswXTtzJiYocy5pbm5lckhUTUw9TS5zcl90ZXh0KGUuaTE4bihuLnRleHQuY2xvc2VTdWJtZW51KSkpfX0pKSx0aGlzLmJpbmQoXCJpbml0TGlzdHZpZXc6YWZ0ZXJcIiwoZnVuY3Rpb24odCl7dmFyIGk9dC5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpLm1tUGFyZW50O2lmKGkpe3ZhciBzPXkoaSxcIi5tbS1idG5fbmV4dFwiKVswXTtpZihzKXt2YXIgYT1lLmkxOG4obi50ZXh0W3MucGFyZW50RWxlbWVudC5tYXRjaGVzKFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpP1widG9nZ2xlU3VibWVudVwiOlwib3BlblN1Ym1lbnVcIl0pO3MuaW5uZXJIVE1MKz1NLnNyX3RleHQoYSl9fX0pKSl9LHNjcm9sbEJ1Z0ZpeDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoVyYmdGhpcy5vcHRzLm9mZkNhbnZhcyYmdGhpcy5vcHRzLm9mZkNhbnZhcy5ibG9ja1VJKXt2YXIgdD1mdW5jdGlvbihlKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGUmJihlPXtmaXg6ZX0pLFwib2JqZWN0XCIhPXR5cGVvZiBlJiYoZT17fSksZX0odGhpcy5vcHRzLnNjcm9sbEJ1Z0ZpeCk7aWYodGhpcy5vcHRzLnNjcm9sbEJ1Z0ZpeD1vKHQsTS5vcHRpb25zLnNjcm9sbEJ1Z0ZpeCksdC5maXgpe3ZhciBuLGkscz0obj10aGlzLm5vZGUubWVudSxpPVwiXCIsbi5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsKGZ1bmN0aW9uKGUpe2k9XCJcIixlLm1vdmVtZW50WT4wP2k9XCJkb3duXCI6ZS5tb3ZlbWVudFk8MCYmKGk9XCJ1cFwiKX0pKSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGl9fSk7dGhpcy5ub2RlLm1lbnUuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLGEse3Bhc3NpdmU6ITF9KSx0aGlzLm5vZGUubWVudS5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0LmNsb3Nlc3QoXCIubW0tcGFuZWwsIC5tbS1pY29uYmFyX190b3AsIC5tbS1pY29uYmFyX19ib3R0b21cIik7dCYmdC5jbG9zZXN0KFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpJiYodD1MKHQsXCIubW0tcGFuZWxcIikucG9wKCkpLHQ/KHQuc2Nyb2xsSGVpZ2h0PT09dC5vZmZzZXRIZWlnaHR8fDA9PXQuc2Nyb2xsVG9wJiZcImRvd25cIj09cy5nZXQoKXx8dC5zY3JvbGxIZWlnaHQ9PXQuc2Nyb2xsVG9wK3Qub2Zmc2V0SGVpZ2h0JiZcInVwXCI9PXMuZ2V0KCkpJiZhKGUpOmEoZSl9KSx7cGFzc2l2ZTohMX0pLHRoaXMuYmluZChcIm9wZW46c3RhcnRcIiwoZnVuY3Rpb24oKXt2YXIgdD15KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsX29wZW5lZFwiKVswXTt0JiYodC5zY3JvbGxUb3A9MCl9KSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLChmdW5jdGlvbih0KXt2YXIgbj15KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsX29wZW5lZFwiKVswXTtuJiYobi5zY3JvbGxUb3A9MCxuLnN0eWxlW1wiLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmdcIl09XCJhdXRvXCIsbi5zdHlsZVtcIi13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nXCJdPVwidG91Y2hcIil9KSl9fWZ1bmN0aW9uIGEoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCl9fSxhdXRvSGVpZ2h0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWZ1bmN0aW9uKGUpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgZSYmZSYmKGU9e2hlaWdodDpcImF1dG9cIn0pLFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT17aGVpZ2h0OmV9KSxcIm9iamVjdFwiIT10eXBlb2YgZSYmKGU9e30pLGV9KHRoaXMub3B0cy5hdXRvSGVpZ2h0KTtpZih0aGlzLm9wdHMuYXV0b0hlaWdodD1vKHQsTS5vcHRpb25zLmF1dG9IZWlnaHQpLFwiYXV0b1wiPT10LmhlaWdodHx8XCJoaWdoZXN0XCI9PXQuaGVpZ2h0KXt2YXIgbixpPShuPWZ1bmN0aW9uKGUpe3JldHVybiBlLnBhcmVudEVsZW1lbnQubWF0Y2hlcyhcIi5tbS1saXN0aXRlbV92ZXJ0aWNhbFwiKSYmKGU9TChlLFwiLm1tLXBhbmVsXCIpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUucGFyZW50RWxlbWVudC5tYXRjaGVzKFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpfSkpWzBdKSxlfSxmdW5jdGlvbigpe2lmKCFlLm9wdHMub2ZmQ2FudmFzfHxlLnZhcnMub3BlbmVkKXt2YXIgaSxzLGE9MCxvPWUubm9kZS5tZW51Lm9mZnNldEhlaWdodC1lLm5vZGUucG5scy5vZmZzZXRIZWlnaHQ7ZS5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZChcIm1tLW1lbnVfYXV0b2hlaWdodC1tZWFzdXJpbmdcIiksXCJhdXRvXCI9PXQuaGVpZ2h0Pygocz15KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsX29wZW5lZFwiKVswXSkmJihzPW4ocykpLHN8fChzPXkoZS5ub2RlLnBubHMsXCIubW0tcGFuZWxcIilbMF0pLGE9cy5zY3JvbGxIZWlnaHQpOlwiaGlnaGVzdFwiPT10LmhlaWdodCYmKGk9MCx5KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2U9bihlKSxpPU1hdGgubWF4KGksZS5zY3JvbGxIZWlnaHQpfSkpLGE9aSksZS5ub2RlLm1lbnUuc3R5bGUuaGVpZ2h0PWErbytcInB4XCIsZS5ub2RlLm1lbnUuY2xhc3NMaXN0LnJlbW92ZShcIm1tLW1lbnVfYXV0b2hlaWdodC1tZWFzdXJpbmdcIil9fSk7
24510dGhpcy5iaW5kKFwiaW5pdE1lbnU6YWZ0ZXJcIiwoZnVuY3Rpb24oKXtlLm5vZGUubWVudS5jbGFzc0xpc3QuYWRkKFwibW0tbWVudV9hdXRvaGVpZ2h0XCIpfSkpLHRoaXMub3B0cy5vZmZDYW52YXMmJnRoaXMuYmluZChcIm9wZW46c3RhcnRcIixpKSxcImhpZ2hlc3RcIj09dC5oZWlnaHQmJnRoaXMuYmluZChcImluaXRQYW5lbHM6YWZ0ZXJcIixpKSxcImF1dG9cIj09dC5oZWlnaHQmJih0aGlzLmJpbmQoXCJ1cGRhdGVMaXN0dmlld1wiLGkpLHRoaXMuYmluZChcIm9wZW5QYW5lbDpzdGFydFwiLGkpKX19LGJhY2tCdXR0b246ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKHRoaXMub3B0cy5vZmZDYW52YXMpe3ZhciB0PWZ1bmN0aW9uKGUpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgZSYmKGU9e2Nsb3NlOmV9KSxcIm9iamVjdFwiIT10eXBlb2YgZSYmKGU9e30pLGV9KHRoaXMub3B0cy5iYWNrQnV0dG9uKTt0aGlzLm9wdHMuYmFja0J1dHRvbj1vKHQsTS5vcHRpb25zLmJhY2tCdXR0b24pO3ZhciBuPVwiI1wiK3RoaXMubm9kZS5tZW51LmlkO2lmKHQuY2xvc2Upe3ZhciBpPVtdLHM9ZnVuY3Rpb24oKXtpPVtuXSx5KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsX29wZW5lZCwgLm1tLXBhbmVsX29wZW5lZC1wYXJlbnRcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aS5wdXNoKFwiI1wiK2UuaWQpfSkpfTt0aGlzLmJpbmQoXCJvcGVuOmZpbmlzaFwiLChmdW5jdGlvbigpe2hpc3RvcnkucHVzaFN0YXRlKG51bGwsZG9jdW1lbnQudGl0bGUsbil9KSksdGhpcy5iaW5kKFwib3BlbjpmaW5pc2hcIixzKSx0aGlzLmJpbmQoXCJvcGVuUGFuZWw6ZmluaXNoXCIscyksdGhpcy5iaW5kKFwiY2xvc2U6ZmluaXNoXCIsKGZ1bmN0aW9uKCl7aT1bXSxoaXN0b3J5LmJhY2soKSxoaXN0b3J5LnB1c2hTdGF0ZShudWxsLGRvY3VtZW50LnRpdGxlLGxvY2F0aW9uLnBhdGhuYW1lK2xvY2F0aW9uLnNlYXJjaCl9KSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLChmdW5jdGlvbih0KXtpZihlLnZhcnMub3BlbmVkJiZpLmxlbmd0aCl7dmFyIHM9KGk9aS5zbGljZSgwLC0xKSlbaS5sZW5ndGgtMV07cz09bj9lLmNsb3NlKCk6KGUub3BlblBhbmVsKGUubm9kZS5tZW51LnF1ZXJ5U2VsZWN0b3IocykpLGhpc3RvcnkucHVzaFN0YXRlKG51bGwsZG9jdW1lbnQudGl0bGUsbikpfX0pKX10Lm9wZW4mJndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwoZnVuY3Rpb24odCl7ZS52YXJzLm9wZW5lZHx8bG9jYXRpb24uaGFzaCE9bnx8ZS5vcGVuKCl9KSl9fSxjb2x1bW5zOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWZ1bmN0aW9uKGUpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgZSYmKGU9e2FkZDplfSksXCJudW1iZXJcIj09dHlwZW9mIGUmJihlPXthZGQ6ITAsdmlzaWJsZTplfSksXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KSxcIm51bWJlclwiPT10eXBlb2YgZS52aXNpYmxlJiYoZS52aXNpYmxlPXttaW46ZS52aXNpYmxlLG1heDplLnZpc2libGV9KSxlfSh0aGlzLm9wdHMuY29sdW1ucyk7aWYodGhpcy5vcHRzLmNvbHVtbnM9byh0LE0ub3B0aW9ucy5jb2x1bW5zKSx0LmFkZCl7dC52aXNpYmxlLm1pbj1NYXRoLm1heCgxLE1hdGgubWluKDYsdC52aXNpYmxlLm1pbikpLHQudmlzaWJsZS5tYXg9TWF0aC5tYXgodC52aXNpYmxlLm1pbixNYXRoLm1pbig2LHQudmlzaWJsZS5tYXgpKTtmb3IodmFyIG49W10saT1bXSxzPVtcIm1tLXBhbmVsX29wZW5lZFwiLFwibW0tcGFuZWxfb3BlbmVkLXBhcmVudFwiLFwibW0tcGFuZWxfaGlnaGVzdFwiXSxhPTA7YTw9dC52aXNpYmxlLm1heDthKyspbi5wdXNoKFwibW0tbWVudV9jb2x1bW5zLVwiK2EpLGkucHVzaChcIm1tLXBhbmVsX2NvbHVtbnMtXCIrYSk7cy5wdXNoLmFwcGx5KHMsaSksdGhpcy5iaW5kKFwib3BlblBhbmVsOmJlZm9yZVwiLChmdW5jdGlvbih0KXt2YXIgbjtpZih0JiYobj10Lm1tUGFyZW50KSxuJiYhbi5jbGFzc0xpc3QuY29udGFpbnMoXCJtbS1saXN0aXRlbV92ZXJ0aWNhbFwiKSYmKG49bi5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpKSl7dmFyIGk9bi5jbGFzc05hbWU7aWYoaS5sZW5ndGgmJihpPWkuc3BsaXQoXCJtbS1wYW5lbF9jb2x1bW5zLVwiKVsxXSkpZm9yKHZhciBhPXBhcnNlSW50KGkuc3BsaXQoXCIgXCIpWzBdLDEwKSsxO2E+MDspe2lmKCEodD15KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsX2NvbHVtbnMtXCIrYSlbMF0pKXthPS0xO2JyZWFrfWErKyx0LmNsYXNzTGlzdC5hZGQoXCJtbS1oaWRkZW5cIikscy5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmNsYXNzTGlzdC5yZW1vdmUoZSl9KSl9fX0pKSx0aGlzLmJpbmQoXCJvcGVuUGFuZWw6c3RhcnRcIiwoZnVuY3Rpb24ocyl7aWYocyl7dmFyIGE9cy5tbVBhcmVudDtpZihhJiZhLmNsYXNzTGlzdC5jb250YWlucyhcIm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpKXJldHVybn12YXIgbz15KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsX29wZW5lZC1wYXJlbnRcIikubGVuZ3RoO3MubWF0Y2hlcyhcIi5tbS1wYW5lbF9vcGVuZWQtcGFyZW50XCIpfHxvKyssbz1NYXRoLm1pbih0LnZpc2libGUubWF4LE1hdGgubWF4KHQudmlzaWJsZS5taW4sbykpLG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7ZS5ub2RlLm1lbnUuY2xhc3NMaXN0LnJlbW92ZSh0KX0pKSxlLm5vZGUubWVudS5jbGFzc0xpc3QuYWRkKFwibW0tbWVudV9jb2x1bW5zLVwiK28pO3ZhciByPVtdO3koZS5ub2RlLnBubHMsXCIubW0tcGFuZWxcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aS5mb3JFYWNoKChmdW5jdGlvbih0KXtlLmNsYXNzTGlzdC5yZW1vdmUodCl9KSksZS5tYXRjaGVzKFwiLm1tLXBhbmVsX29wZW5lZC1wYXJlbnRcIikmJnIucHVzaChlKX0pKSxyLnB1c2gocyksci5zbGljZSgtdC52aXNpYmxlLm1heCkuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtlLmNsYXNzTGlzdC5hZGQoXCJtbS1wYW5lbF9jb2x1bW5zLVwiK3QpfSkpfSkpfX0sY291bnRlcnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlJiYoZT17YWRkOmUsYWRkVG86XCJwYW5lbHNcIixjb3VudDplfSksXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KSxcInBhbmVsc1wiPT1lLmFkZFRvJiYoZS5hZGRUbz1cIi5tbS1saXN0dmlld1wiKSxlfSh0aGlzLm9wdHMuY291bnRlcnMpO2lmKHRoaXMub3B0cy5jb3VudGVycz1vKHQsTS5vcHRpb25zLmNvdW50ZXJzKSx0aGlzLmJpbmQoXCJpbml0TGlzdHZpZXc6YWZ0ZXJcIiwoZnVuY3Rpb24odCl7dmFyIG49ZS5jb25mLmNsYXNzTmFtZXMuY291bnRlcnMuY291bnRlcjtfKHQsXCIuXCIrbikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7eChlLG4sXCJtbS1jb3VudGVyXCIpfSkpfSkpLHQuYWRkJiZ0aGlzLmJpbmQoXCJpbml0TGlzdHZpZXc6YWZ0ZXJcIiwoZnVuY3Rpb24oZSl7aWYoZS5tYXRjaGVzKHQuYWRkVG8pKXt2YXIgbj1lLmNsb3Nlc3QoXCIubW0tcGFuZWxcIikubW1QYXJlbnQ7aWYobiYmIV8obixcIi5tbS1jb3VudGVyXCIpLmxlbmd0aCl7dmFyIGk9eShuLFwiLm1tLWJ0blwiKVswXTtpJiZpLnByZXBlbmQoZyhcInNwYW4ubW0tY291bnRlclwiKSl9fX0pKSx0LmNvdW50KXt2YXIgbj1mdW5jdGlvbih0KXsodD9bdC5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpXTp5KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsXCIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLm1tUGFyZW50O2lmKHQpe3ZhciBuPV8odCxcIi5tbS1jb3VudGVyXCIpWzBdO2lmKG4pe3ZhciBpPVtdO3koZSxcIi5tbS1saXN0dmlld1wiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtpLnB1c2guYXBwbHkoaSx5KGUpKX0pKSxuLmlubmVySFRNTD13KGkpLmxlbmd0aC50b1N0cmluZygpfX19KSl9O3RoaXMuYmluZChcImluaXRMaXN0dmlldzphZnRlclwiLG4pL
24510HRoaXMuYmluZChcInVwZGF0ZUxpc3R2aWV3XCIsbil9fSxkaXZpZGVyczpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1mdW5jdGlvbihlKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGUmJihlPXthZGQ6ZX0pLFwib2JqZWN0XCIhPXR5cGVvZiBlJiYoZT17fSksXCJwYW5lbHNcIj09ZS5hZGRUbyYmKGUuYWRkVG89XCIubW0tbGlzdHZpZXdcIiksZX0odGhpcy5vcHRzLmRpdmlkZXJzKTt0aGlzLm9wdHMuZGl2aWRlcnM9byh0LE0ub3B0aW9ucy5kaXZpZGVycyksdGhpcy5iaW5kKFwiaW5pdExpc3R2aWV3OmFmdGVyXCIsKGZ1bmN0aW9uKHQpe3kodCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7eCh0LGUuY29uZi5jbGFzc05hbWVzLmRpdmlkZXIsXCJtbS1kaXZpZGVyXCIpLHQubWF0Y2hlcyhcIi5tbS1kaXZpZGVyXCIpJiZ0LmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1saXN0aXRlbVwiKX0pKX0pKSx0LmFkZCYmdGhpcy5iaW5kKFwiaW5pdExpc3R2aWV3OmFmdGVyXCIsKGZ1bmN0aW9uKGUpe2lmKGUubWF0Y2hlcyh0LmFkZFRvKSl7XyhlLFwiLm1tLWRpdmlkZXJcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5yZW1vdmUoKX0pKTt2YXIgbj1cIlwiO3coeShlKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9eSh0LFwiLm1tLWxpc3RpdGVtX190ZXh0XCIpWzBdLnRleHRDb250ZW50LnRyaW0oKS50b0xvd2VyQ2FzZSgpWzBdO2lmKGkubGVuZ3RoJiZpIT1uKXtuPWk7dmFyIHM9ZyhcImxpLm1tLWRpdmlkZXJcIik7cy50ZXh0Q29udGVudD1pLGUuaW5zZXJ0QmVmb3JlKHMsdCl9fSkpfX0pKX0sZHJhZzpmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5vcHRzLm9mZkNhbnZhcyl7dmFyIHQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlJiYoZT17b3BlbjplfSksXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KSxlfSh0aGlzLm9wdHMuZHJhZyk7dGhpcy5vcHRzLmRyYWc9byh0LE0ub3B0aW9ucy5kcmFnKSx0Lm9wZW4mJnRoaXMuYmluZChcInNldFBhZ2U6YWZ0ZXJcIiwoZnVuY3Rpb24obil7Y2UuY2FsbChlLHQubm9kZXx8bil9KSl9fSxkcm9wZG93bjpmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5vcHRzLm9mZkNhbnZhcyl7dmFyIHQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlJiZlJiYoZT17ZHJvcDplfSksXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KSxcInN0cmluZ1wiPT10eXBlb2YgZS5wb3NpdGlvbiYmKGUucG9zaXRpb249e29mOmUucG9zaXRpb259KSxlfSh0aGlzLm9wdHMuZHJvcGRvd24pO3RoaXMub3B0cy5kcm9wZG93bj1vKHQsTS5vcHRpb25zLmRyb3Bkb3duKTt2YXIgbj10aGlzLmNvbmYuZHJvcGRvd247aWYodC5kcm9wKXt2YXIgaTt0aGlzLmJpbmQoXCJpbml0TWVudTphZnRlclwiLChmdW5jdGlvbigpe2lmKGUubm9kZS5tZW51LmNsYXNzTGlzdC5hZGQoXCJtbS1tZW51X2Ryb3Bkb3duXCIpLFwic3RyaW5nXCIhPXR5cGVvZiB0LnBvc2l0aW9uLm9mKXt2YXIgbj1wKGUubm9kZS5tZW51LmlkKTtuJiYodC5wb3NpdGlvbi5vZj0nW2hyZWY9XCIjJytuKydcIl0nKX1pZihcInN0cmluZ1wiPT10eXBlb2YgdC5wb3NpdGlvbi5vZil7aT1fKGRvY3VtZW50LmJvZHksdC5wb3NpdGlvbi5vZilbMF07dmFyIHM9dC5ldmVudC5zcGxpdChcIiBcIik7MT09cy5sZW5ndGgmJihzWzFdPXNbMF0pLFwiaG92ZXJcIj09c1swXSYmaS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLChmdW5jdGlvbigpe2Uub3BlbigpfSkse3Bhc3NpdmU6ITB9KSxcImhvdmVyXCI9PXNbMV0mJmUubm9kZS5tZW51LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsKGZ1bmN0aW9uKCl7ZS5jbG9zZSgpfSkse3Bhc3NpdmU6ITB9KX19KSksdGhpcy5iaW5kKFwib3BlbjpzdGFydFwiLChmdW5jdGlvbigpe2Uubm9kZS5tZW51Lm1tU3R5bGU9ZS5ub2RlLm1lbnUuZ2V0QXR0cmlidXRlKFwic3R5bGVcIiksZS5ub2RlLndycHIuY2xhc3NMaXN0LmFkZChcIm1tLXdyYXBwZXJfZHJvcGRvd25cIil9KSksdGhpcy5iaW5kKFwiY2xvc2U6ZmluaXNoXCIsKGZ1bmN0aW9uKCl7ZS5ub2RlLm1lbnUuc2V0QXR0cmlidXRlKFwic3R5bGVcIixlLm5vZGUubWVudS5tbVN0eWxlKSxlLm5vZGUud3Jwci5jbGFzc0xpc3QucmVtb3ZlKFwibW0td3JhcHBlcl9kcm9wZG93blwiKX0pKTt2YXIgcz1mdW5jdGlvbihlLHMpe3ZhciBhLG8scixjPXNbMF0sbT1zWzFdLGw9XCJ4XCI9PWU/XCJvZmZzZXRXaWR0aFwiOlwib2Zmc2V0SGVpZ2h0XCIsZD1cInhcIj09ZT9cImxlZnRcIjpcInRvcFwiLHA9XCJ4XCI9PWU/XCJyaWdodFwiOlwiYm90dG9tXCIsdT1cInhcIj09ZT9cIndpZHRoXCI6XCJoZWlnaHRcIixmPVwieFwiPT1lP1wiaW5uZXJXaWR0aFwiOlwiaW5uZXJIZWlnaHRcIixoPVwieFwiPT1lP1wibWF4V2lkdGhcIjpcIm1heEhlaWdodFwiLHY9bnVsbCxiPShhPWQsaS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVthXStkb2N1bWVudC5ib2R5W1wibGVmdFwiPT09YT9cInNjcm9sbExlZnRcIjpcInNjcm9sbFRvcFwiXSksZz1iK2lbbF0sXz13aW5kb3dbZl0seT1uLm9mZnNldC5idXR0b25bZV0rbi5vZmZzZXQudmlld3BvcnRbZV07aWYodC5wb3NpdGlvbltlXSlzd2l0Y2godC5wb3NpdGlvbltlXSl7Y2FzZVwibGVmdFwiOmNhc2VcImJvdHRvbVwiOnY9XCJhZnRlclwiO2JyZWFrO2Nhc2VcInJpZ2h0XCI6Y2FzZVwidG9wXCI6dj1cImJlZm9yZVwifXJldHVybiBudWxsPT09diYmKHY9YisoZy1iKS8yPF8vMj9cImFmdGVyXCI6XCJiZWZvcmVcIiksXCJhZnRlclwiPT12PyhyPV8tKChvPVwieFwiPT1lP2I6ZykreSksY1tkXT1vK24ub2Zmc2V0LmJ1dHRvbltlXStcInB4XCIsY1twXT1cImF1dG9cIix0LnRpcCYmbS5wdXNoKFwibW0tbWVudV90aXAtXCIrKFwieFwiPT1lP1wibGVmdFwiOlwidG9wXCIpKSk6KHI9KG89XCJ4XCI9PWU/ZzpiKS15LGNbcF09XCJjYWxjKCAxMDAlIC0gXCIrKG8tbi5vZmZzZXQuYnV0dG9uW2VdKStcInB4IClcIixjW2RdPVwiYXV0b1wiLHQudGlwJiZtLnB1c2goXCJtbS1tZW51X3RpcC1cIisoXCJ4XCI9PWU/XCJyaWdodFwiOlwiYm90dG9tXCIpKSksdC5maXRWaWV3cG9ydCYmKGNbaF09TWF0aC5taW4oblt1XS5tYXgscikrXCJweFwiKSxbYyxtXX07dGhpcy5iaW5kKFwib3BlbjpzdGFydFwiLGEpLHdpbmRvdy5hZGR
24510FdmVudExpc3RlbmVyKFwicmVzaXplXCIsKGZ1bmN0aW9uKHQpe2EuY2FsbChlKX0pLHtwYXNzaXZlOiEwfSksdGhpcy5vcHRzLm9mZkNhbnZhcy5ibG9ja1VJfHx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLChmdW5jdGlvbih0KXthLmNhbGwoZSl9KSx7cGFzc2l2ZTohMH0pfX1mdW5jdGlvbiBhKCl7dmFyIGU9dGhpcztpZih0aGlzLnZhcnMub3BlbmVkKXt0aGlzLm5vZGUubWVudS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLHRoaXMubm9kZS5tZW51Lm1tU3R5bGUpO3ZhciBuPVt7fSxbXV07Zm9yKHZhciBpIGluIG49cy5jYWxsKHRoaXMsXCJ5XCIsbiksKG49cy5jYWxsKHRoaXMsXCJ4XCIsbikpWzBdKXRoaXMubm9kZS5tZW51LnN0eWxlW2ldPW5bMF1baV07aWYodC50aXApe1tcIm1tLW1lbnVfdGlwLWxlZnRcIixcIm1tLW1lbnVfdGlwLXJpZ2h0XCIsXCJtbS1tZW51X3RpcC10b3BcIixcIm1tLW1lbnVfdGlwLWJvdHRvbVwiXS5mb3JFYWNoKChmdW5jdGlvbih0KXtlLm5vZGUubWVudS5jbGFzc0xpc3QucmVtb3ZlKHQpfSkpLG5bMV0uZm9yRWFjaCgoZnVuY3Rpb24odCl7ZS5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZCh0KX0pKX19fX0sZml4ZWRFbGVtZW50czpmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5vcHRzLm9mZkNhbnZhcyl7dmFyIHQsbixpPXRoaXMuY29uZi5maXhlZEVsZW1lbnRzO3RoaXMuYmluZChcInNldFBhZ2U6YWZ0ZXJcIiwoZnVuY3Rpb24ocyl7dD1lLmNvbmYuY2xhc3NOYW1lcy5maXhlZEVsZW1lbnRzLmZpeGVkLG49Xyhkb2N1bWVudCxpLmluc2VydFNlbGVjdG9yKVswXSxfKHMsXCIuXCIrdCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7eChlLHQsXCJtbS1zbGlkZW91dFwiKSxuW2kuaW5zZXJ0TWV0aG9kXShlKX0pKX0pKX19LGljb25iYXI6ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMsbj1mdW5jdGlvbihlKXtyZXR1cm5cImFycmF5XCI9PXIoZSkmJihlPXt1c2U6ITAsdG9wOmV9KSxcIm9iamVjdFwiIT1yKGUpJiYoZT17fSksdm9pZCAwPT09ZS51c2UmJihlLnVzZT0hMCksXCJib29sZWFuXCI9PXR5cGVvZiBlLnVzZSYmZS51c2UmJihlLnVzZT0hMCksZX0odGhpcy5vcHRzLmljb25iYXIpO2lmKCh0aGlzLm9wdHMuaWNvbmJhcj1vKG4sTS5vcHRpb25zLmljb25iYXIpLG4udXNlKSYmKFtcInRvcFwiLFwiYm90dG9tXCJdLmZvckVhY2goKGZ1bmN0aW9uKHQsaSl7dmFyIHM9blt0XTtcImFycmF5XCIhPXIocykmJihzPVtzXSk7Zm9yKHZhciBhPWcoXCJkaXYubW0taWNvbmJhcl9fXCIrdCksbz0wLGM9cy5sZW5ndGg7bzxjO28rKylcInN0cmluZ1wiPT10eXBlb2Ygc1tvXT9hLmlubmVySFRNTCs9c1tvXTphLmFwcGVuZChzW29dKTthLmNoaWxkcmVuLmxlbmd0aCYmKGV8fChlPWcoXCJkaXYubW0taWNvbmJhclwiKSksZS5hcHBlbmQoYSkpfSkpLGUpKXt0aGlzLmJpbmQoXCJpbml0TWVudTphZnRlclwiLChmdW5jdGlvbigpe3Qubm9kZS5tZW51LnByZXBlbmQoZSl9KSk7dmFyIGk9XCJtbS1tZW51X2ljb25iYXItXCIrbi5wb3NpdGlvbixzPWZ1bmN0aW9uKCl7dC5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZChpKSxNLnNyX2FyaWEoZSxcImhpZGRlblwiLCExKX07aWYoXCJib29sZWFuXCI9PXR5cGVvZiBuLnVzZT90aGlzLmJpbmQoXCJpbml0TWVudTphZnRlclwiLHMpOmsobi51c2UscywoZnVuY3Rpb24oKXt0Lm5vZGUubWVudS5jbGFzc0xpc3QucmVtb3ZlKGkpLE0uc3JfYXJpYShlLFwiaGlkZGVuXCIsITApfSkpLFwidGFic1wiPT1uLnR5cGUpe2UuY2xhc3NMaXN0LmFkZChcIm1tLWljb25iYXJfdGFic1wiKSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChmdW5jdGlvbihlKXt2YXIgbj1lLnRhcmdldDtpZihuLm1hdGNoZXMoXCJhXCIpKWlmKG4ubWF0Y2hlcyhcIi5tbS1pY29uYmFyX190YWJfc2VsZWN0ZWRcIikpZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtlbHNlIHRyeXt2YXIgaT10Lm5vZGUubWVudS5xdWVyeVNlbGVjdG9yKG4uZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSlbMF07aSYmaS5tYXRjaGVzKFwiLm1tLXBhbmVsXCIpJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdC5vcGVuUGFuZWwoaSwhMSkpfWNhdGNoKGUpe319KSk7dmFyIGE9ZnVuY3Rpb24odCl7XyhlLFwiYVwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS1pY29uYmFyX190YWJfc2VsZWN0ZWRcIil9KSk7dmFyIG49XyhlLCdbaHJlZj1cIiMnK3QuaWQrJ1wiXScpWzBdO2lmKG4pbi5jbGFzc0xpc3QuYWRkKFwibW0taWNvbmJhcl9fdGFiX3NlbGVjdGVkXCIpO2Vsc2V7dmFyIGk9dC5tbVBhcmVudDtpJiZhKGkuY2xvc2VzdChcIi5tbS1wYW5lbFwiKSl9fTt0aGlzLmJpbmQoXCJvcGVuUGFuZWw6c3RhcnRcIixhKX19fSxpY29uUGFuZWxzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWZ1bmN0aW9uKGUpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgZSYmKGU9e2FkZDplfSksXCJudW1iZXJcIiE9dHlwZW9mIGUmJlwic3RyaW5nXCIhPXR5cGVvZiBlfHwoZT17YWRkOiEwLHZpc2libGU6ZX0pLFwib2JqZWN0XCIhPXR5cGVvZiBlJiYoZT17fSksZX0odGhpcy5vcHRzLmljb25QYW5lbHMpO3RoaXMub3B0cy5pY29uUGFuZWxzPW8odCxNLm9wdGlvbnMuaWNvblBhbmVscyk7dmFyIG49ITE7aWYoXCJmaXJzdFwiPT10LnZpc2libGUmJihuPSEwLHQudmlzaWJsZT0xKSx0LnZpc2libGU9TWF0aC5taW4oMyxNYXRoLm1heCgxLHQudmlzaWJsZSkpLHQudmlzaWJsZSsrLHQuYWRkKXt0aGlzLmJpbmQoXCJpbml0TWVudTphZnRlclwiLChmdW5jdGlvbigpe3ZhciBuPVtcIm1tLW1lbnVfaWNvbnBhbmVsXCJdO3QuaGlkZU5hdmJhciYmbi5wdXNoKFwibW0tbWVudV9oaWRlbmF2YmFyXCIpLHQuaGlkZURpdmlkZXImJm4ucHVzaChcIm1tLW1lbnVfaGlkZWRpdmlkZXJcIiksbi5mb3JFYWNoKChmdW5jdGlvbih0KXtlLm5vZGUubWVudS5jbGFzc0xpc3QuYWRkKHQpfSkpfSkpO3ZhciBpPVtdO2lmKCFuKWZvcih2YXIgcz0wO3M8PXQudmlzaWJsZTtzKyspaS5wdXNoKFwibW0tcGFuZWxfaWNvbnBhbmVsLVwiK3MpO3RoaXMuYmluZChcIm9wZW5QYW5lbDpzdGFydFwiLChmdW5jdGlvbihzKXt2YXIgYT15KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsXCIpO2lmKCEocz1zfHxhWzBdKS5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoXCIubW0tbGlzdGl0ZW1fdmVydGljYWxcIikpaWYobilhLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7ZS5jbGFzc0xpc3RbMD09dD9cImFkZFwiOlwicmVtb3ZlXCJdKFwibW0tcGFuZWxfaWNvbnBhbmVsLWZpcnN0XCIpfSkpO2Vsc2V7YS5mb3JFYWNoKChmdW5jdGlvbihlKXtpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2UuY2xhc3NMaXN0LnJlbW92ZSh0KX0pKX0pKSxhPWEuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaGVzKFwiLm1tLXBhbmVsX29wZW5lZC1wYXJlbnRcIil9KSk7dmFyIG89ITE7YS5mb3JFYWNoKChmdW5jdGlvbihlKXtzPT09ZSYmKG89ITApfSkpLG98fGEucHVzaChzKSxhLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuY2xhc3NMaXN0LnJlbW92ZShcIm1tLWhpZGRlblwiKX0pKSwoYT1hLnNsaWNlKC10LnZpc2libGUpKS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2UuY2xhc3NMaXN0LmFkZChcIm1tLXBhbmVsX2ljb25wYW5lbC1cIit0KX0pKX19KSksdGhpcy5iaW5kKFwiaW5
24510pdFBhbmVsOmFmdGVyXCIsKGZ1bmN0aW9uKGUpe2lmKHQuYmxvY2tQYW5lbCYmIWUucGFyZW50RWxlbWVudC5tYXRjaGVzKFwiLm1tLWxpc3RpdGVtX3ZlcnRpY2FsXCIpJiYheShlLFwiLm1tLXBhbmVsX19ibG9ja2VyXCIpWzBdKXt2YXIgbj1nKFwiYS5tbS1wYW5lbF9fYmxvY2tlclwiKTtuLnNldEF0dHJpYnV0ZShcImhyZWZcIixcIiNcIitlLmNsb3Nlc3QoXCIubW0tcGFuZWxcIikuaWQpLGUucHJlcGVuZChuKX19KSl9fSxrZXlib2FyZE5hdmlnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCFXKXt2YXIgdD1mdW5jdGlvbihlKXtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIGUmJlwic3RyaW5nXCIhPXR5cGVvZiBlfHwoZT17ZW5hYmxlOmV9KSxcIm9iamVjdFwiIT10eXBlb2YgZSYmKGU9e30pLGV9KHRoaXMub3B0cy5rZXlib2FyZE5hdmlnYXRpb24pO2lmKHRoaXMub3B0cy5rZXlib2FyZE5hdmlnYXRpb249byh0LE0ub3B0aW9ucy5rZXlib2FyZE5hdmlnYXRpb24pLHQuZW5hYmxlKXt2YXIgbj1nKFwiYnV0dG9uLm1tLXRhYnN0YXJ0Lm1tLXNyb25seVwiKSxpPWcoXCJidXR0b24ubW0tdGFiZW5kLm1tLXNyb25seVwiKSxzPWcoXCJidXR0b24ubW0tdGFiZW5kLm1tLXNyb25seVwiKTt0aGlzLmJpbmQoXCJpbml0TWVudTphZnRlclwiLChmdW5jdGlvbigpe3QuZW5oYW5jZSYmZS5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZChcIm1tLW1lbnVfa2V5Ym9hcmRmb2N1c1wiKSx2ZS5jYWxsKGUsdC5lbmhhbmNlKX0pKSx0aGlzLmJpbmQoXCJpbml0T3BlbmVkOmJlZm9yZVwiLChmdW5jdGlvbigpe2Uubm9kZS5tZW51LnByZXBlbmQobiksZS5ub2RlLm1lbnUuYXBwZW5kKGkpLHkoZS5ub2RlLm1lbnUsXCIubW0tbmF2YmFycy10b3AsIC5tbS1uYXZiYXJzLWJvdHRvbVwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubW0tbmF2YmFyX190aXRsZVwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCItMVwiKX0pKX0pKX0pKSx0aGlzLmJpbmQoXCJpbml0QmxvY2tlcjphZnRlclwiLChmdW5jdGlvbigpe00ubm9kZS5ibGNrLmFwcGVuZChzKSx5KE0ubm9kZS5ibGNrLFwiYVwiKVswXS5jbGFzc0xpc3QuYWRkKFwibW0tdGFic3RhcnRcIil9KSk7dmFyIGE9XCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCBsYWJlbCwgYVtocmVmXVwiLHI9ZnVuY3Rpb24obil7bj1ufHx5KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsX29wZW5lZFwiKVswXTt2YXIgaT1udWxsLHM9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5jbG9zZXN0KFwiLm1tLW5hdmJhclwiKTtpZighc3x8cy5jbG9zZXN0KFwiLm1tLW1lbnVcIikhPWUubm9kZS5tZW51KXtpZihcImRlZmF1bHRcIj09dC5lbmFibGUmJigoaT1fKG4sXCIubW0tbGlzdHZpZXcgYVtocmVmXTpub3QoLm1tLWhpZGRlbilcIilbMF0pfHwoaT1fKG4sYStcIjpub3QoLm1tLWhpZGRlbilcIilbMF0pLCFpKSl7dmFyIG89W107eShlLm5vZGUubWVudSxcIi5tbS1uYXZiYXJzX3RvcCwgLm1tLW5hdmJhcnNfYm90dG9tXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe28ucHVzaC5hcHBseShvLF8oZSxhK1wiOm5vdCgubW0taGlkZGVuKVwiKSl9KSksaT1vWzBdfWl8fChpPXkoZS5ub2RlLm1lbnUsXCIubW0tdGFic3RhcnRcIilbMF0pLGkmJmkuZm9jdXMoKX19O3RoaXMuYmluZChcIm9wZW46ZmluaXNoXCIsciksdGhpcy5iaW5kKFwib3BlblBhbmVsOmZpbmlzaFwiLHIpLHRoaXMuYmluZChcImluaXRPcGVuZWQ6YWZ0ZXI6c3ItYXJpYVwiLChmdW5jdGlvbigpe1tlLm5vZGUubWVudSxNLm5vZGUuYmxja10uZm9yRWFjaCgoZnVuY3Rpb24oZSl7eShlLFwiLm1tLXRhYnN0YXJ0LCAubW0tdGFiZW5kXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe00uc3JfYXJpYShlLFwiaGlkZGVuXCIsITApLE0uc3Jfcm9sZShlLFwicHJlc2VudGF0aW9uXCIpfSkpfSkpfSkpfX19LGxhenlTdWJtZW51czpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1mdW5jdGlvbihlKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGUmJihlPXtsb2FkOmV9KSxcIm9iamVjdFwiIT10eXBlb2YgZSYmKGU9e30pLGV9KHRoaXMub3B0cy5sYXp5U3VibWVudXMpO3RoaXMub3B0cy5sYXp5U3VibWVudXM9byh0LE0ub3B0aW9ucy5sYXp5U3VibWVudXMpLHQubG9hZCYmKHRoaXMuYmluZChcImluaXRQYW5lbHM6YmVmb3JlXCIsKGZ1bmN0aW9uKCl7dmFyIHQ9W107XyhlLm5vZGUucG5scyxcImxpXCIpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3QucHVzaC5hcHBseSh0LHkobixlLmNvbmYucGFuZWxOb2RldHlwZS5qb2luKFwiLCBcIikpKX0pKSx0LmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUubWF0Y2hlcyhcIi5tbS1saXN0dmlld19pbnNldFwiKX0pKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLm1hdGNoZXMoXCIubW0tbm9saXN0dmlld1wiKX0pKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLm1hdGNoZXMoXCIubW0tbm9wYW5lbFwiKX0pKS5mb3JFYWNoKChmdW5jdGlvbihlKXtbXCJtbS1wYW5lbF9sYXp5c3VibWVudVwiLFwibW0tbm9saXN0dmlld1wiLFwibW0tbm9wYW5lbFwiXS5mb3JFYWNoKChmdW5jdGlvbih0KXtlLmNsYXNzTGlzdC5hZGQodCl9KSl9KSl9KSksdGhpcy5iaW5kKFwiaW5pdFBhbmVsczpiZWZvcmVcIiwoZnVuY3Rpb24oKXt2YXIgdD1bXTtfKGUubm9kZS5wbmxzLFwiLlwiK2UuY29uZi5jbGFzc05hbWVzLnNlbGVjdGVkKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnB1c2guYXBwbHkodCxMKGUsXCIubW0tcGFuZWxfbGF6eXN1Ym1lbnVcIikpfSkpLHQubGVuZ3RoJiZ0LmZvckVhY2goKGZ1bmN0aW9uKGUpe2NvbnNvbGUubG9nKGUpO1tcIm1tLXBhbmVsX2xhenlzdWJtZW51XCIsXCJtbS1ub2xpc3R2aWV3XCIsXCJtbS1ub3BhbmVsXCJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2UuY2xhc3NMaXN0LnJlbW92ZSh0KX0pKX0pKX0pKSx0aGlzLmJpbmQoXCJvcGVuUGFuZWw6YmVmb3JlXCIsKGZ1bmN0aW9uKHQpe3ZhciBuPV8odCxcIi5tbS1wYW5lbF9sYXp5c3VibWVudVwiKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLm1hdGNoZXMoXCIubW0tcGFuZWxfbGF6eXN1Ym1lbnUgLm1tLXBhbmVsX2xhenlzdWJtZW51XCIpfSkpO3QubWF0Y2hlcyhcIi5tbS1wYW5lbF9sYXp5c3VibWVudVwiKSYmbi51bnNoaWZ0KHQpLG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7W1wibW0tcGFuZWxfbGF6eXN1Ym1lbnVcIixcIm1tLW5vbGlzdHZpZXdcIixcIm1tLW5vcGFuZWxcIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5jbGFzc0xpc3QucmVtb3ZlKGUpfSkpLGUuaW5pdFBhbmVsKHQpfSkpfSkpKX0sbmF2YmFyczp5ZSxwYWdlU2Nyb2xsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWZ1bmN0aW9uKGUpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgZSYmKGU9e3Njcm9sbDplfSksXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KSxlfSh0aGlzLm9wdHMucGFnZVNjcm9sbCk7dGhpcy5vcHRzLnBhZ2VTY3JvbGw9byh0LE0ub3B0aW9ucy5wYWdlU2Nyb2xsKTt2YXIgbixpPXRoaXMuY29uZi5wYWdlU2Nyb2xsO2Z1bmN0aW9uIHMoKXtuJiZ3aW5kb3cuc2Nyb2xsVG8oe3RvcDpuLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCtkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcC1pLnNjcm9sbE9mZnNldCxiZWhhdmlvcjpcInNtb290aFwifSksbj1udWxsfWZ1bmN0aW9uIGEoZSl7dHJ5e3JldHVyblwiI1wiIT1lJiZcIiNcIj09ZS5zbGljZSgwLDEpP00ubm9kZS5wYWdlLnF1ZXJ5U2VsZWN0b3IoZSk6bnVsbH1jYXRjaChlKXtyZXR1cm4gbnVsbH19aWYodC5zY3JvbGwmJnRoaXMuYmluZChcImNsb3NlOmZpbmlzaFwiLChmdW5jdGlvbigpe3MoKX0pKSx0aGlzLm9wdHMub2ZmQ2FudmFzJiZ0LnNjcm9sbCYmdGhpcy5jbGNrLnB1c2goKGZ1bmN0aW9uKHQsaSl7aWYobj1udWxsLGkuaW5NZW51KXt2YXIgbz10LmdldEF0dHJpYnV0ZShcImhyZWZcIik7aWYobj1hKG8pKXJldHVybi
24510BlLm5vZGUubWVudS5tYXRjaGVzKFwiLm1tLW1lbnVfc2lkZWJhci1leHBhbmRlZFwiKSYmZS5ub2RlLndycHIubWF0Y2hlcyhcIi5tbS13cmFwcGVyX3NpZGViYXItZXhwYW5kZWRcIik/dm9pZCBzKCk6e2Nsb3NlOiEwfX19KSksdC51cGRhdGUpe3ZhciByPVtdO3RoaXMuYmluZChcImluaXRMaXN0dmlldzphZnRlclwiLChmdW5jdGlvbihlKXtFKHkoZSxcIi5tbS1saXN0aXRlbVwiKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9YShlLmdldEF0dHJpYnV0ZShcImhyZWZcIikpO3QmJnIudW5zaGlmdCh0KX0pKX0pKTt2YXIgYz0tMTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLChmdW5jdGlvbih0KXtmb3IodmFyIG49d2luZG93LnNjcm9sbFkscz0wO3M8ci5sZW5ndGg7cysrKWlmKHJbc10ub2Zmc2V0VG9wPG4raS51cGRhdGVPZmZzZXQpe2lmKGMhPT1zKXtjPXM7dmFyIGE9RShfKHkoZS5ub2RlLnBubHMsXCIubW0tcGFuZWxfb3BlbmVkXCIpWzBdLFwiLm1tLWxpc3RpdGVtXCIpKTsoYT1hLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2hlcygnW2hyZWY9XCIjJytyW3NdLmlkKydcIl0nKX0pKSkubGVuZ3RoJiZlLnNldFNlbGVjdGVkKGFbMF0ucGFyZW50RWxlbWVudCl9YnJlYWt9fSkpfX0sc2VhcmNoZmllbGQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlJiYoZT17YWRkOmV9KSxcIm9iamVjdFwiIT10eXBlb2YgZSYmKGU9e30pLFwiYm9vbGVhblwiPT10eXBlb2YgZS5wYW5lbCYmKGUucGFuZWw9e2FkZDplLnBhbmVsfSksXCJvYmplY3RcIiE9dHlwZW9mIGUucGFuZWwmJihlLnBhbmVsPXt9KSxcInBhbmVsXCI9PWUuYWRkVG8mJihlLnBhbmVsLmFkZD0hMCksZS5wYW5lbC5hZGQmJihlLnNob3dTdWJQYW5lbHM9ITEsZS5wYW5lbC5zcGxhc2gmJihlLmNhbmNlbD0hMCkpLGV9KHRoaXMub3B0cy5zZWFyY2hmaWVsZCk7dGhpcy5vcHRzLnNlYXJjaGZpZWxkPW8odCxNLm9wdGlvbnMuc2VhcmNoZmllbGQpO3RoaXMuY29uZi5zZWFyY2hmaWVsZDt0LmFkZCYmKHRoaXMuYmluZChcImNsb3NlOnN0YXJ0XCIsKGZ1bmN0aW9uKCl7XyhlLm5vZGUubWVudSxcIi5tbS1zZWFyY2hmaWVsZFwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmJsdXIoKX0pKX0pKSx0aGlzLmJpbmQoXCJpbml0UGFuZWw6YWZ0ZXJcIiwoZnVuY3Rpb24obil7dmFyIGk9bnVsbDt0LnBhbmVsLmFkZCYmKGk9QWUuY2FsbChlKSk7dmFyIHM9bnVsbDtzd2l0Y2godC5hZGRUbyl7Y2FzZVwicGFuZWxzXCI6cz1bbl07YnJlYWs7Y2FzZVwicGFuZWxcIjpzPVtpXTticmVhaztkZWZhdWx0Olwic3RyaW5nXCI9PXR5cGVvZiB0LmFkZFRvP3M9XyhlLm5vZGUubWVudSx0LmFkZFRvKTpcImFycmF5XCI9PXIodC5hZGRUbykmJihzPXQuYWRkVG8pfXMuZm9yRWFjaCgoZnVuY3Rpb24obil7bj1UZS5jYWxsKGUsbiksdC5zZWFyY2gmJm4mJkNlLmNhbGwoZSxuKX0pKSx0Lm5vUmVzdWx0cyYmTmUuY2FsbChlLHQucGFuZWwuYWRkP2k6bil9KSksdGhpcy5jbGNrLnB1c2goKGZ1bmN0aW9uKHQsbil7aWYobi5pbk1lbnUmJnQubWF0Y2hlcyhcIi5tbS1zZWFyY2hmaWVsZF9fYnRuXCIpKXtpZih0Lm1hdGNoZXMoXCIubW0tYnRuX2Nsb3NlXCIpKXt2YXIgaT1fKHM9dC5jbG9zZXN0KFwiLm1tLXNlYXJjaGZpZWxkXCIpLFwiaW5wdXRcIilbMF07cmV0dXJuIGkudmFsdWU9XCJcIixlLnNlYXJjaChpKSwhMH12YXIgcztpZih0Lm1hdGNoZXMoXCIubW0tYnRuX25leHRcIikpcmV0dXJuKHM9dC5jbG9zZXN0KFwiZm9ybVwiKSkmJnMuc3VibWl0KCksITB9fSkpKX0sc2VjdGlvbkluZGV4ZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlJiYoZT17YWRkOmV9KSxcIm9iamVjdFwiIT10eXBlb2YgZSYmKGU9e30pLGV9KHRoaXMub3B0cy5zZWN0aW9uSW5kZXhlcik7dGhpcy5vcHRzLnNlY3Rpb25JbmRleGVyPW8odCxNLm9wdGlvbnMuc2VjdGlvbkluZGV4ZXIpLHQuYWRkJiZ0aGlzLmJpbmQoXCJpbml0UGFuZWxzOmFmdGVyXCIsKGZ1bmN0aW9uKCl7aWYoIWUubm9kZS5pbmR4KXt2YXIgdD1cIlwiO1wiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIi5zcGxpdChcIlwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0Kz0nPGEgaHJlZj1cIiNcIj4nK2UrXCI8L2E+XCJ9KSk7dmFyIG49ZyhcImRpdi5tbS1zZWN0aW9uaW5kZXhlclwiKTtuLmlubmVySFRNTD10LGUubm9kZS5wbmxzLnByZXBlbmQobiksZS5ub2RlLmluZHg9bixlLm5vZGUuaW5keC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZnVuY3Rpb24oZSl7ZS50YXJnZXQubWF0Y2hlcyhcImFcIikmJmUucHJldmVudERlZmF1bHQoKX0pKTt2YXIgaT1mdW5jdGlvbih0KXtpZih0LnRhcmdldC5tYXRjaGVzKFwiYVwiKSl7dmFyIG49dC50YXJnZXQudGV4dENvbnRlbnQsaT15KGUubm9kZS5wbmxzLFwiLm1tLXBhbmVsX29wZW5lZFwiKVswXSxzPS0xLGE9aS5zY3JvbGxUb3A7aS5zY3JvbGxUb3A9MCxfKGksXCIubW0tZGl2aWRlclwiKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLm1hdGNoZXMoXCIubW0taGlkZGVuXCIpfSkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3M8MCYmbj09ZS50ZXh0Q29udGVudC50cmltKCkuc2xpY2UoMCwxKS50b0xvd2VyQ2FzZSgpJiYocz1lLm9mZnNldFRvcCl9KSksaS5zY3JvbGxUb3A9cz4tMT9zOmF9fTtXPyhlLm5vZGUuaW5keC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLGkpLGUubm9kZS5pbmR4LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIixpKSk6ZS5ub2RlLmluZHguYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLGkpfWUuYmluZChcIm9wZW5QYW5lbDpzdGFydFwiLChmdW5jdGlvbih0KXt2YXIgbj1fKHQsXCIubW0tZGl2aWRlclwiKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLm1hdGNoZXMoXCIubW0taGlkZGVuXCIpfSkpLmxlbmd0aDtlLm5vZGUuaW5keC5jbGFzc0xpc3Rbbj9cImFkZFwiOlwicmVtb3ZlXCJdKFwibW0tc2VjdGlvbmluZGV4ZXJfYWN0aXZlXCIpfSkpfSkpfSxzZXRTZWxlY3RlZDpmdW5jdGlvbigpe3ZhciBlPXR
24510oaXMsdD1mdW5jdGlvbihlKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGUmJihlPXtob3ZlcjplLHBhcmVudDplfSksXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KSxlfSh0aGlzLm9wdHMuc2V0U2VsZWN0ZWQpO2lmKHRoaXMub3B0cy5zZXRTZWxlY3RlZD1vKHQsTS5vcHRpb25zLnNldFNlbGVjdGVkKSxcImRldGVjdFwiPT10LmN1cnJlbnQpe3ZhciBuPWZ1bmN0aW9uKHQpe3Q9dC5zcGxpdChcIj9cIilbMF0uc3BsaXQoXCIjXCIpWzBdO3ZhciBpPWUubm9kZS5tZW51LnF1ZXJ5U2VsZWN0b3IoJ2FbaHJlZj1cIicrdCsnXCJdLCBhW2hyZWY9XCInK3QrJy9cIl0nKTtpZihpKWUuc2V0U2VsZWN0ZWQoaS5wYXJlbnRFbGVtZW50KTtlbHNle3ZhciBzPXQuc3BsaXQoXCIvXCIpLnNsaWNlKDAsLTEpO3MubGVuZ3RoJiZuKHMuam9pbihcIi9cIikpfX07dGhpcy5iaW5kKFwiaW5pdE1lbnU6YWZ0ZXJcIiwoZnVuY3Rpb24oKXtuLmNhbGwoZSx3aW5kb3cubG9jYXRpb24uaHJlZil9KSl9ZWxzZSB0LmN1cnJlbnR8fHRoaXMuYmluZChcImluaXRMaXN0dmlldzphZnRlclwiLChmdW5jdGlvbihlKXt5KGUsXCIubW0tbGlzdGl0ZW1fc2VsZWN0ZWRcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0tbGlzdGl0ZW1fc2VsZWN0ZWRcIil9KSl9KSk7dC5ob3ZlciYmdGhpcy5iaW5kKFwiaW5pdE1lbnU6YWZ0ZXJcIiwoZnVuY3Rpb24oKXtlLm5vZGUubWVudS5jbGFzc0xpc3QuYWRkKFwibW0tbWVudV9zZWxlY3RlZC1ob3ZlclwiKX0pKSx0LnBhcmVudCYmKHRoaXMuYmluZChcIm9wZW5QYW5lbDpmaW5pc2hcIiwoZnVuY3Rpb24odCl7XyhlLm5vZGUucG5scyxcIi5tbS1saXN0aXRlbV9zZWxlY3RlZC1wYXJlbnRcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jbGFzc0xpc3QucmVtb3ZlKFwibW0tbGlzdGl0ZW1fc2VsZWN0ZWQtcGFyZW50XCIpfSkpO2Zvcih2YXIgbj10Lm1tUGFyZW50O247KW4ubWF0Y2hlcyhcIi5tbS1saXN0aXRlbV92ZXJ0aWNhbFwiKXx8bi5jbGFzc0xpc3QuYWRkKFwibW0tbGlzdGl0ZW1fc2VsZWN0ZWQtcGFyZW50XCIpLG49KG49bi5jbG9zZXN0KFwiLm1tLXBhbmVsXCIpKS5tbVBhcmVudH0pKSx0aGlzLmJpbmQoXCJpbml0TWVudTphZnRlclwiLChmdW5jdGlvbigpe2Uubm9kZS5tZW51LmNsYXNzTGlzdC5hZGQoXCJtbS1tZW51X3NlbGVjdGVkLXBhcmVudFwiKX0pKSl9LHNpZGViYXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKHRoaXMub3B0cy5vZmZDYW52YXMpe3ZhciB0PWZ1bmN0aW9uKGUpe3JldHVybihcInN0cmluZ1wiPT10eXBlb2YgZXx8XCJib29sZWFuXCI9PXR5cGVvZiBlJiZlfHxcIm51bWJlclwiPT10eXBlb2YgZSkmJihlPXtleHBhbmRlZDplfSksXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXt9KSxcImJvb2xlYW5cIj09dHlwZW9mIGUuY29sbGFwc2VkJiZlLmNvbGxhcHNlZCYmKGUuY29sbGFwc2VkPXt1c2U6ITB9KSxcInN0cmluZ1wiIT10eXBlb2YgZS5jb2xsYXBzZWQmJlwibnVtYmVyXCIhPXR5cGVvZiBlLmNvbGxhcHNlZHx8KGUuY29sbGFwc2VkPXt1c2U6ZS5jb2xsYXBzZWR9KSxcIm9iamVjdFwiIT10eXBlb2YgZS5jb2xsYXBzZWQmJihlLmNvbGxhcHNlZD17fSksXCJib29sZWFuXCI9PXR5cGVvZiBlLmV4cGFuZGVkJiZlLmV4cGFuZGVkJiYoZS5leHBhbmRlZD17dXNlOiEwfSksXCJzdHJpbmdcIiE9dHlwZW9mIGUuZXhwYW5kZWQmJlwibnVtYmVyXCIhPXR5cGVvZiBlLmV4cGFuZGVkfHwoZS5leHBhbmRlZD17dXNlOmUuZXhwYW5kZWR9KSxcIm9iamVjdFwiIT10eXBlb2YgZS5leHBhbmRlZCYmKGUuZXhwYW5kZWQ9e30pLGV9KHRoaXMub3B0cy5zaWRlYmFyKTtpZih0aGlzLm9wdHMuc2lkZWJhcj1vKHQsTS5vcHRpb25zLnNpZGViYXIpLHQuY29sbGFwc2VkLnVzZSl7dGhpcy5iaW5kKFwiaW5pdE1lbnU6YWZ0ZXJcIiwoZnVuY3Rpb24oKXtpZihlLm5vZGUubWVudS5jbGFzc0xpc3QuYWRkKFwibW0tbWVudV9zaWRlYmFyLWNvbGxhcHNlZFwiKSx0LmNvbGxhcHNlZC5ibG9ja01lbnUmJmUub3B0cy5vZmZDYW52YXMmJiF5KGUubm9kZS5tZW51LFwiLm1tLW1lbnVfX2Jsb2NrZXJcIilbMF0pe3ZhciBuPWcoXCJhLm1tLW1lbnVfX2Jsb2NrZXJcIik7bi5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsXCIjXCIrZS5ub2RlLm1lbnUuaWQpLGUubm9kZS5tZW51LnByZXBlbmQobil9dC5jb2xsYXBzZWQuaGlkZU5hdmJhciYmZS5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZChcIm1tLW1lbnVfaGlkZW5hdmJhclwiKSx0LmNvbGxhcHNlZC5oaWRlRGl2aWRlciYmZS5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZChcIm1tLW1lbnVfaGlkZWRpdmlkZXJcIil9KSk7dmFyIG49ZnVuY3Rpb24oKXtlLm5vZGUud3Jwci5jbGFzc0xpc3QuYWRkKFwibW0td3JhcHBlcl9zaWRlYmFyLWNvbGxhcHNlZFwiKX0saT1mdW5jdGlvbigpe2Uubm9kZS53cnByLmNsYXNzTGlzdC5yZW1vdmUoXCJtbS13cmFwcGVyX3NpZGViYXItY29sbGFwc2VkXCIpfTtcImJvb2xlYW5cIj09dHlwZW9mIHQuY29sbGFwc2VkLnVzZT90aGlzLmJpbmQoXCJpbml0TWVudTphZnRlclwiLG4pOmsodC5jb2xsYXBzZWQudXNlLG4saSl9aWYodC5leHBhbmRlZC51c2Upe3RoaXMuYmluZChcImluaXRNZW51OmFmdGVyXCIsKGZ1bmN0aW9uKCl7ZS5ub2RlLm1lbnUuY2xhc3NMaXN0LmFkZChcIm1tLW1lbnVfc2lkZWJhci1leHBhbmRlZFwiKX0pKTtuPWZ1bmN0aW9uKCl7ZS5ub2RlLndycHIuY2xhc3NMaXN0LmFkZChcIm1tLXdyYXBwZXJfc2lkZWJhci1leHBhbmRlZFwiKSxlLm5vZGUud3Jwci5tYXRjaGVzKFwiLm1tLXdyYXBwZXJfc2lkZWJhci1jbG9zZWRcIil8fGUub3BlbigpfSxpPWZ1bmN0aW9uKCl7ZS5ub2RlLndycHIuY2xhc3NMaXN0LnJlbW92ZShcIm1tLXdyYXBwZXJfc2lkZWJhci1leHBhbmRlZFwiKSxlLmNsb3NlKCl9O1wiYm9vbGVhblwiPT10eXBlb2YgdC5leHBhbmRlZC51c2U/dGhpcy5iaW5kKFwiaW5pdE1lbnU6YWZ0ZXJcIixuKTprKHQuZXhwYW5kZWQudXNlLG4saSksdGhpcy5iaW5kKFwiY2xvc2U6c3RhcnRcIiwoZnVuY3Rpb24oKXtlLm5vZGUud3Jwci5tYXRjaGVzKFwiLm1tLXdyYXBwZXJfc2lkZWJhci1leHBhbmRlZFwiKSYmKGUubm9kZS53cnByLmNsYXNzTGlzdC5hZGQoXCJtbS13cmFwcGVyX3NpZGViYXItY2xvc2VkXCIpLFwicmVtZW1iZXJcIj09dC5leHBhbmRlZC5pbml0aWFsJiZ3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJtbWVudUV4cGFuZGVkU3RhdGVcIixcImNsb3NlZFwiKSl9KSksdGhpcy5iaW5kKFwib3BlbjpzdGFydFwiLChmdW5jdGlvbigpe2Uubm9kZS53cnByLm1hdGNoZXMoXCIubW0td3JhcHBlcl9zaWRlYmFyLWV4cGFuZGVkXCIpJiYoZS5ub2RlLndycHIuY2xhc3NMaXN0LnJlbW92ZShcIm1tLXdyYXBwZXJfc2lkZWJhci1jbG9zZWRcIiksXCJyZW1lbWJlclwiPT10LmV4cGFuZGVkLmluaXRpYWwmJndpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIm1tZW51RXhwYW5kZWRTdGF0ZVwiLFwib3BlblwiKSl9KSk7dmFyIHM9dC5leHBhbmRlZC5pbml0aWFsO2lmKFwicmVtZW1iZXJcIj09dC5leHBhbmRlZC5pbml0aWFsKXt2YXIgYT13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJtbWVudUV4cGFuZGVkU3RhdGVcIik7c3dpdGNoKGEpe2Nhc2VcIm9wZW5cIjpjYXNlXCJjbG9zZWRcIjpzPWF9fVwiY2xvc2VkXCI9PXMmJnRoaXMuYmluZChcImluaXRNZW51OmFmdGVyXCIsKGZ1bmN0aW9uKCl7ZS5ub2RlLndycHIuY2xhc3NMaXN0LmFkZChcIm1tLXdyYXBwZXJfc2lkZWJhci1jbG9zZWRcIil9KSksdGhpcy5jbGNrLnB1c2goKGZ1bmN0aW9uKG4saSl7aWYoaS5pbk1lbnUmJmkuaW5MaXN0dmlldyYmZS5ub2RlLndycHIubWF0Y2hlcyhcIi5tbS13cmFwcGVyX3NpZGViYXItZXhwYW5kZWRcIikpcmV0dXJue2Nsb3NlOlwiY2xvc2VkXCI9PXQuZXhwYW5kZWQuaW5pdGlhbH19KSl9fX0sdG9nZ2xlczpmdW5jdGlvbigpe3ZhciBlPXR
24510oaXM7dGhpcy5iaW5kKFwiaW5pdFBhbmVsOmFmdGVyXCIsKGZ1bmN0aW9uKHQpe18odCxcImlucHV0XCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3godCxlLmNvbmYuY2xhc3NOYW1lcy50b2dnbGVzLnRvZ2dsZSxcIm1tLXRvZ2dsZVwiKSx4KHQsZS5jb25mLmNsYXNzTmFtZXMudG9nZ2xlcy5jaGVjayxcIm1tLWNoZWNrXCIpfSkpfSkpfX0sTS53cmFwcGVycz17YW5ndWxhcjpmdW5jdGlvbigpe3RoaXMub3B0cy5vbkNsaWNrPXtjbG9zZTohMCxwcmV2ZW50RGVmYXVsdDohMSxzZXRTZWxlY3RlZDohMH19LGJvb3RzdHJhcDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5ub2RlLm1lbnUubWF0Y2hlcyhcIi5uYXZiYXItY29sbGFwc2VcIikpe3RoaXMuY29uZi5vZmZDYW52YXMmJih0aGlzLmNvbmYub2ZmQ2FudmFzLmNsb25lPSExKTt2YXIgdD1nKFwibmF2XCIpLG49ZyhcImRpdlwiKTt0LmFwcGVuZChuKSx5KHRoaXMubm9kZS5tZW51KS5mb3JFYWNoKChmdW5jdGlvbih0KXtzd2l0Y2goITApe2Nhc2UgdC5tYXRjaGVzKFwiLm5hdmJhci1uYXZcIik6bi5hcHBlbmQoZnVuY3Rpb24oZSl7dmFyIHQ9ZyhcInVsXCIpO3JldHVybiBfKGUsXCIubmF2LWl0ZW1cIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49ZyhcImxpXCIpO2lmKGUubWF0Y2hlcyhcIi5hY3RpdmVcIikmJm4uY2xhc3NMaXN0LmFkZChcIlNlbGVjdGVkXCIpLCFlLm1hdGNoZXMoXCIubmF2LWxpbmtcIikpe3ZhciBpPXkoZSxcIi5kcm9wZG93bi1tZW51XCIpWzBdO2kmJm4uYXBwZW5kKG8oaSkpLGU9eShlLFwiLm5hdi1saW5rXCIpWzBdfW4ucHJlcGVuZChhKGUpKSx0LmFwcGVuZChuKX0pKSx0fSh0KSk7YnJlYWs7Y2FzZSB0Lm1hdGNoZXMoXCIuZHJvcGRvd24tbWVudVwiKTpuLmFwcGVuZChvKHQpKTticmVhaztjYXNlIHQubWF0Y2hlcyhcIi5mb3JtLWlubGluZVwiKTplLmNvbmYuc2VhcmNoZmllbGQuZm9ybT17YWN0aW9uOnQuZ2V0QXR0cmlidXRlKFwiYWN0aW9uXCIpfHxudWxsLG1ldGhvZDp0LmdldEF0dHJpYnV0ZShcIm1ldGhvZFwiKXx8bnVsbH0sZS5jb25mLnNlYXJjaGZpZWxkLmlucHV0PXtuYW1lOnQucXVlcnlTZWxlY3RvcihcImlucHV0XCIpLmdldEF0dHJpYnV0ZShcIm5hbWVcIil8fG51bGx9LGUuY29uZi5zZWFyY2hmaWVsZC5jbGVhcj0hMSxlLmNvbmYuc2VhcmNoZmllbGQuc3VibWl0PSEwO2JyZWFrO2RlZmF1bHQ6bi5hcHBlbmQodC5jbG9uZU5vZGUoITApKX19KSksdGhpcy5iaW5kKFwiaW5pdE1lbnU6YmVmb3JlXCIsKGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5wcmVwZW5kKHQpLGUubm9kZS5tZW51PXR9KSk7dmFyIGk9dGhpcy5ub2RlLm1lbnUucGFyZW50RWxlbWVudDtpZihpKXt2YXIgcz1pLnF1ZXJ5U2VsZWN0b3IoXCIubmF2YmFyLXRvZ2dsZXJcIik7cyYmKHMucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS10YXJnZXRcIikscy5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLWNvbnRyb2xzXCIpLHMub3V0ZXJIVE1MPXMub3V0ZXJIVE1MLChzPWkucXVlcnlTZWxlY3RvcihcIi5uYXZiYXItdG9nZ2xlclwiKSkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLGVbZS52YXJzLm9wZW5lZD9cImNsb3NlXCI6XCJvcGVuXCJdKCl9KSkpfX1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgdD1nKGUubWF0Y2hlcyhcImFcIik/XCJhXCI6XCJzcGFuXCIpLG49W1wiaHJlZlwiLFwidGl0bGVcIixcInRhcmdldFwiXSxpPTA7aTxuLmxlbmd0aDtpKyspZS5nZXRBdHRyaWJ1dGUobltpXSkmJnQuc2V0QXR0cmlidXRlKG5baV0sZS5nZXRBdHRyaWJ1dGUobltpXSkpO3JldHVybiB0LmlubmVySFRNTD1lLmlubmVySFRNTCxfKHQsXCIuc3Itb25seVwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnJlbW92ZSgpfSkpLHR9ZnVuY3Rpb24gbyhlKXt2YXIgdD1nKFwidWxcIik7cmV0dXJuIHkoZSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49ZyhcImxpXCIpO2UubWF0Y2hlcyhcIi5kcm9wZG93bi1kaXZpZGVyXCIpP24uY2xhc3NMaXN0LmFkZChcIkRpdmlkZXJcIik6ZS5tYXRjaGVzKFwiLmRyb3Bkb3duLWl0ZW1cIikmJm4uYXBwZW5kKGEoZSkpLHQuYXBwZW5kKG4pfSkpLHR9fSxvbGFyazpmdW5jdGlvbigpe3RoaXMuY29uZi5vZmZDYW52YXMucGFnZS5ub1NlbGVjdG9yLnB1c2goXCIjb2xhcmtcIil9LHR1cmJvbGlua3M6ZnVuY3Rpb24oKXt2YXIgZTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidHVyYm9saW5rczpiZWZvcmUtdmlzaXRcIiwoZnVuY3Rpb24odCl7ZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLm1tLXdyYXBwZXJcIikuY2xhc3NOYW1lLnNwbGl0KFwiIFwiKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybi9tbS0vLnRlc3QoZSl9KSl9KSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInR1cmJvbGlua3M6bG9hZFwiLChmdW5jdGlvbih0KXt2b2lkIDAhPT1lJiYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5tbS13cmFwcGVyXCIpLmNsYXNzTmFtZT1lKX0pKX0sd29yZHByZXNzOmZ1bmN0aW9uKCl7dGhpcy5jb25mLmNsYXNzTmFtZXMuc2VsZWN0ZWQ9XCJjdXJyZW50LW1lbnUtaXRlbVwiO3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwid3BhZG1pbmJhclwiKTtlJiYoZS5zdHlsZS5wb3NpdGlvbj1cImZpeGVkXCIsZS5jbGFzc0xpc3QuYWRkKFwibW0tc2xpZGVvdXRcIikpfX07dmFyIE9lO3QuZGVmYXVsdD1NO3dpbmRvdyYmKHdpbmRvdy5NbWVudT1NKSwoT2U9d2luZG93LmpRdWVyeXx8d2luZG93LlplcHRvfHxudWxsKSYmKE9lLmZuLm1tZW51PWZ1bmN0aW9uKGUsdCl7dmFyIG49T2UoKTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihpLHMpe2lmKCFzLm1tQXBpKXt2YXIgYT1uZXcgTShzLGUsdCksbz1PZShhLm5vZGUubWVudSk7by5kYXRhKFwibW1lbnVcIixhLkFQSSksbj1uLmFkZChvKX19KSksbn0pfV0pOyIsIi8qXG4gKlxuICogSlM6IHB4RWFzeUV4cGFuZFxuICpcbiAqIFZlcnNpb24gMS42IC8gMTQuMy4yMDIzXG4gKlxuICovXG5cInVzZSBzdHJpY3RcIjtcblxuXG5jbGFzcyBweEVhc3lFeHBhbmQge1xuXG5cbiAgY29uc3RydWN0b3IgKGJ1dHRvbiwgc2V0dGluZ3MgPSB7fSwgYnV0dG9uU2V0dGluZ3MgPSB7fSkge1xuXG4gICAgdGhpcy5kZWZh
24510dWx0cyA9IHtcbiAgICAgICdzZXRSb290Q2xhc3MnIDogZmFsc2UsIC8vIHNvbGwgZWluZSBLbGFzc2UgaW0gSFRNTCBnZXNldHp0IHdlcmRlblxuICAgICAgJ3N3aXRjaEJ1dHRvbkh0bWwnIDogZmFsc2UsXG4gICAgICAnYWRkQ2xvc2VCdXR0b24nIDogZmFsc2UsXG4gICAgICAnY2xvc2VCdXR0b25Qb3MnIDogZmFsc2UsXG4gICAgICAnY2xvc2VXaXRoRXNjJyA6IGZhbHNlLFxuICAgICAgJ3NldEZvY3VzVG9FbGVtZW50JyA6IGZhbHNlLCAvLyBTZWxlY3RvciBvZGVyIGZhbHNlXG4gICAgICAnc2V0Rm9jdXNUb0ZpcnN0RWxlbWVudCcgOiBmYWxzZSxcbiAgICAgICdrZWVwRm9jdXNJblRhcmdldEVsZW1lbnQnIDogZmFsc2UsXG4gICAgICAnZGlzYWJsZUZvY3VzSGFuZGxpbmcnIDogZmFsc2UsXG4gICAgICAncmVzZXRTY3JvbGxQb3NpdGlvbicgOiBmYWxzZSxcbiAgICAgICdoaWRkZW5BdHRyaWJ1dGUnIDogJ2FyaWEtaGlkZGVuJyxcbiAgICAgICdoaWRkZW5XaGVuT3BlbicgOiBmYWxzZVxuICAgIH07XG5cbiAgICB0aGlzLmZ1bmN0aW9ucyA9IHtcbiAgICAgIGJlZm9yZVRvZ2dsZSA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9LFxuICAgICAgYWZ0ZXJUb2dnbGUgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBidXR0b25TZXR0aW5ncyA9IHtcbiAgICAvLyAgIGNvbnRyb2xzOiAnJyxcbiAgICAvLyAgIGxhYmVsT3BlbjogJycsXG4gICAgLy8gICBsYWJlbENsb3NlOiAnJyxcbiAgICAvLyAgIHRleHRPcGVuOiAnJyxcbiAgICAvLyAgIHRleHRDbG9zZTogJycsXG4gICAgLy8gICBmb2N1c0hlbHBlclRleHQ6ICcnXG4gICAgLy8gfVxuXG4gICAgLy8gQ29uZmlnIGVyc3RlbGxlblxuICAgIHRoaXMuY29uZmlnID0gT2JqZWN0LmFzc2lnbih0aGlzLmRlZmF1bHRzLHNldHRpbmdzKTtcbiAgICB0aGlzLmNvbmZpZy5vbiA9IE9iamVjdC5hc3NpZ24odGhpcy5mdW5jdGlvbnMsc2V0dGluZ3Mub24pO1xuXG4gICAgdGhpcy5pbml0QnV0dG9ucyA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiBidXR0b24gPT09ICdzdHJpbmcnIHx8IGJ1dHRvbiBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgdGhpcy5idXR0b25PYmogPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChidXR0b24ucmVwbGFjZSgnIycsICcnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnV0dG9uT2JqID0gYnV0dG9uO1xuICAgIH1cblxuICAgIC8vIGdld2lzc2VuIEVpZ2Vuc2NoYWZ0ZW4gd2VyZGVuIGFscyBwcm9wZXJ0eSBpbSBCdXR0b24gZ2VzcGVpY2hlcnRcbiAgICBpZiAoIHR5cGVvZih0aGlzLmJ1dHRvbk9iaikgIT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5idXR0b25PYmogIT0gbnVsbCApIHtcbiAgICAgIHRoaXMuYnV0dG9uT2JqLmNvbnRyb2xzID0gW107XG4gICAgICB0aGlzLmJ1dHRvbk9iai5leHBhbmRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGRlciBlaW4tL2F1c3p1YmxlbmRlbmRlIENvbnRhaW5lciB3aXJkIGdlc3BlaWNoZXJ0XG4gICAgdGhpcy50YXJnZXRPYmogPSBbXTtcblxuICAgIGlmICggdGhpcy5idXR0b25PYmogJiYgdGhpcy5idXR0b25PYmouaGFzQXR0cmlidXRlKCdkYXRhLWNvbnRyb2xzJykgKSB7XG4gICAgICB0aGlzLmNvbnRyb2xzID0gdGhpcy5idXR0b25PYmouZ2V0QXR0cmlidXRlKCdkYXRhLWNvbnRyb2xzJyk7XG4gICAgICB0aGlzLmJ1dHRvbk9iai5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtY29udHJvbHMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250cm9scyA9IGJ1dHRvblNldHRpbmdzWydjb250cm9scyddO1xuICAgIH1cblxuICAgIGlmICggdGhpcy5jb250cm9scyApIHtcbiAgICAgIGxldCB0YXJnZXRJZHMgPSB0aGlzLmNvbnRyb2xzLnNwbGl0KCcgJylcbiAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0YXJnZXRJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy50YXJnZXRPYmpbaV0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggdGFyZ2V0SWRzW2ldICk7XG4gICAgICAgIHRoaXMuYnV0dG9uT2JqLmNvbnRyb2xzW2ldID0gdGhpcy50YXJnZXRPYmpbaV07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICggdGhpcy5idXR0b25PYmogJiYgdGhpcy5idXR0b25PYmouaGFzQXR0cmlidXRlKCdocmVmJykgKSB7XG4gICAgICB0aGlzLnRhcmdldE9ialswXSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYnV0dG9uT2JqLmhhc2gucmVwbGFjZSgnIycsICcnKSk7XG4gICAgfVxuXG4gICAgLy8gQWJicnVjaCBmYWxscyBlcyBrZWluZW4gWmllbC1Db250YWluZXIgZ2lidFxuICAgIGlmICggdGhpcy50YXJnZXRPYmoubGVuZ3RoIDwgMSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gQXJpYS1MYWJlbHMgZGVzIEJ1dHRvbnNcbiAgICBpZiAodGhpcy5idXR0b25PYmouaGFzQXR0cmlidXRlKCdkYXRhLWxhYmVsLW9wZW4nKSkge1xuICAgICAgdGhpcy5sYWJlbE9wZW4gPSB0aGlzLmJ1dHRvbk9iai5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwtb3BlbicpO1xuICAgICAgdGhpcy5idXR0b25PYmoucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWxhYmVsLW9wZW4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYWJlbE9wZW4gPSBidXR0b25TZXR0aW5nc1snbGFiZWxPcGVuJ10gPyBidXR0b25TZXR0aW5nc1snbGFiZWxPcGVuJ10gOiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYnV0dG9uT2JqLmhhc0F0dHJpYnV0ZSgnZGF0YS1sYWJlbC1jbG9zZScpKSB7XG4gICAgICB0aGlzLmxhYmVsQ2xvc2UgPSB0aGlzLmJ1dHRvbk9iai5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwtY2xvc2UnKTtcbiAgICAgIHRoaXMuYnV0dG9uT2JqLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1sYWJlbC1jbG9zZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxhYmVsQ2xvc2UgPSBidXR0b25TZXR0aW5nc1snbGFiZWxDbG9zZSddID8gYnV0dG9uU2V0dGluZ3NbJ2xhYmVsQ2xvc2UnXSA6IGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICAvLyBUZXh0IGRlcyBCdXR0b25zXG4gICAgaWYgKHRoaXMuYnV0dG9uT2JqLmhhc0F0dHJpYnV0ZSgnZGF0YS10ZXh0LW9wZW4nKSkge1xuICAgICAgdGhpcy50ZXh0T3BlbiA9IHRoaXMuYnV0dG9uT2JqLmdldEF0dHJpYnV0ZSgnZGF0YS10ZXh0LW9wZW4nKTtcbiAgICAgIHRoaXMuYnV0dG9uT2JqLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10ZXh0LW9wZW4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50ZXh0T3BlbiA9IGJ1dHRvblNldHRpbmdzWyd0ZXh0T3BlbiddID8gYnV0dG9uU2V0dGluZ3NbJ3RleHRPcGVuJ10gOiB0aGlzLmxhYmVsT3BlbjtcbiAgICB9XG4gICAgaWYgKHRoaXMuYnV0dG9uT2JqLmhhc0F0dHJpYnV0ZSgnZGF0YS10ZXh0LWNsb3NlJykpIHtcbiAgICAgIHRoaXMudGV4dENsb3NlID0gdGhpcy5idXR0b25PYmouZ2V0QXR0cmlidXRlKCdkYXRhLXRleHQtY2xvc2UnKTtcbiAgICAgIHRoaXMuYnV0dG9uT2JqLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10ZXh0LWNsb3NlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGV4dENsb3NlID0gYnV0dG9uU2V0dGluZ3NbJ3RleHRDbG9zZSddID8gYnV0dG9uU2V0dGluZ3NbJ3RleHRDbG9zZSddIDogdGhpcy5sYWJlbENsb3NlO1xuICAgIH1cblxuICAgIC8vIFRleHQgZGVzIEZvY3VzIEhlbHBlcnNcbiAgICBpZiAodGhpcy5idXR0b25PYmouaGFzQXR0cmlidXRlKCdkYXRhLWZvY3VzLWhlbHBlci10ZXh0JykpIHtcbiAgICAgIHRoaXMuZm9jdXNIZWxwZXJUZXh0ID0gdGhpcy5idXR0b25PYmouZ2V0QXR0cmlidXRlKCdkYXRhLWZvY3VzLWhlbHBlci10ZXh0Jyk7XG4gICAgICB0aGlzLmJ1dHRvbk9iai5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtZm9jdXMtaGVscGVyLXRleHQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c0hlbHBlclRleHQgPSBidXR0b25TZXR0aW5nc1snZm9jdXNIZWxwZXJUZXh0J10gPyBidXR0b25TZXR0aW5nc1snZm9jdXNIZWxwZXJUZXh0J10gOiB0aGlzLmxhYmVsQ2xvc2U7XG4gICAgfVxuXG4gICAgLy8gYXVmIGdlaHRzXG4gICAgaWYgKHRoaXMuYnV0dG9uT2JqKSB7XG5cbiAgICAgIC8vIEJ1dHRvbiBpbml0aWFsaXNpZXJlblxuICAgICAgdGhpcy5pbml0QnV0dG9uKCk7XG5cbiAgICAgIC8vIFNjaGxpZcOfZW4tQnV0dG9uIGVpbmbDvGdlblxuICAgICAgaWYgKHRoaXMuY29uZmlnLmFkZENsb3NlQnV0dG9uICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmNsb3NlQnV0dG9uT2JqID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgI
24510HRoaXMuY2xvc2VCdXR0b25PYmouaW5uZXJIVE1MID0gJzxzcGFuPicgKyB0aGlzLnRleHRDbG9zZSArICc8L3NwYW4+JztcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGVzKHRoaXMuY2xvc2VCdXR0b25PYmosIHtcbiAgICAgICAgICAnYXJpYS1jb250cm9scyc6IHRoaXMudGFyZ2V0T2JqWzBdLmlkLFxuICAgICAgICAgICdhcmlhLWV4cGFuZGVkJzogJ3RydWUnLFxuICAgICAgICAgICdhcmlhLWxhYmVsJzogdGhpcy5sYWJlbENsb3NlLFxuICAgICAgICAgICdjbGFzcyc6ICdqcy1jbG9zZSdcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2xvc2VCdXR0b25PYmouYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMudG9nZ2xlU3RhdGVzKCk7XG4gICAgICAgIH0sIGZhbHNlKTtcbiAgICAgICAgaWYgKCBOdW1iZXIuaXNJbnRlZ2VyKHRoaXMuY29uZmlnLmNsb3NlQnV0dG9uUG9zKSApIHtcbiAgICAgICAgICB0aGlzLnRhcmdldE9ialswXS5pbnNlcnRCZWZvcmUodGhpcy5jbG9zZUJ1dHRvbk9iaix0aGlzLnRhcmdldE9ialswXS5jaGlsZE5vZGVzW3RoaXMuY29uZmlnLmNsb3NlQnV0dG9uUG9zXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50YXJnZXRPYmpbMF0uYXBwZW5kQ2hpbGQodGhpcy5jbG9zZUJ1dHRvbk9iaik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2NobGllw59lbiBtaXQgRVNDXG4gICAgICBpZiAodGhpcy5jb25maWcuY2xvc2VXaXRoRXNjID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0T2JqWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgdmFyIGtleSA9IGV2ZW50LmtleSB8fCBldmVudC5rZXlDb2RlO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdFc2NhcGUnIHx8IGtleSA9PT0gJ0VzYycgfHwga2V5ID09PSAyNykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlU3RhdGVzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5idXR0b25PYmouYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCB0aGlzLmJ1dHRvbk9iai5nZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnKSA9PT0gJ2ZhbHNlJykgeyByZXR1cm47IH1cbiAgICAgICAgICB2Y
24510XIga2V5ID0gZXZlbnQua2V5IHx8IGV2ZW50LmtleUNvZGU7XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ0VzY2FwZScgfHwga2V5ID09PSAnRXNjJyB8fCBrZXkgPT09IDI3KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy50b2dnbGVTdGF0ZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBUYXN0YXR1cnN0ZXVlcnVuZyAvIFRhYnJlaWhlbmZvbGdlXG4gICAgICBpZiAodGhpcy5jb25maWcua2VlcEZvY3VzSW5UYXJnZXRFbGVtZW50ID09PSB0cnVlKSB7XG5cbiAgICAgICAgLy8gMS4gYmVpbSBSw7xja3fDpHJ0c3Zlcmxhc3NlbiBkZXMgZXJzdGVuIEVsZW1lbnRzLCB3aXJkIGRlciBGb2N1cyB6dXLDvGNrXG4gICAgICAgIC8vIGF1ZiBkZW4gw5ZmZm5lbi1CdXR0b24gZ2VzY2hvYmVuXG4gICAgICAgIC8vIG9kZXIgYXVmIGRlbiBTY2hsaWXDn2VuLUJ1dHRvbiwgZmFsbHMgZGllc2VyIHZvcmhhbmRlbiBpc3RcbiAgICAgICAgdGhpcy50YXJnZXRPYmpbMF0uYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudCkgPT4ge1xuXG4gICAgICAgICAgLy8gQWJicnVjaCBmYWxscyBkYXMgRm9jdXMgSGFuZGxpbmcgZGVha3RpdmllcnQgd3VyZGVcbiAgICAgICAgICBpZiAoIHRoaXMuY29uZmlnLmRpc2FibGVGb2N1c0hhbmRsaW5nID09PSB0cnVlIHx8IHRoaXMuaXNIaWRkZW4oZm9jdXNIZWxwZXIpID09PSB0cnVlICkgeyByZXR1cm47IH1cblxuICAgICAgICAgIGlmICggZXZlbnQuc2hpZnRLZXkgPT09IHRydWUgJiYgKGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpID09IDkgKSB7XG5cbiAgICAgICAgICAgIGxldCBmb2N1c2FibGVFbGVtZW50cyA9IHRoaXMudGFyZ2V0T2JqWzBdLnF1ZXJ5U2VsZWN0b3JBbGwoJ2FbaHJlZl06bm90KC5mb2N1cy1oZWxwZXIpLGlucHV0LHNlbGVjdCxidXR0b24nKTtcbiAgICAgICAgICAgIGxldCB2aXNpYmxlRm9jdXNhYmxlRWxlbWVudHMgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb2N1c2FibGVFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNIaWRkZW4oZm9jdXNhYmxlRWxlbWVudHNbaV0pKSB7XG4gICAgICAgICAgICAgICAgdmlzaWJsZUZvY3VzYWJsZUVsZW1lbnRzLnB1c2goZm9jdXNhYmxlRWxlbWVudHNbaV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGtsZWluZSBTY2h3YWNoc3RlbGxlOiB0aGVvcmV0aXNjaCBrw7ZubnRlbiBhdWNoIGFuZGVyZSBFbGVtZW50ZSBGb2N1cyBlcmhhbHRlblxuICAgICAgICAgICAgaWYgKCB2aXNpYmxlRm9jdXNhYmxlRWxlbWVudHNbMF0gPT0gZXZlbnQudGFyZ2V0ICkge1xuXG4gICAgICAgICAgICAgIGlmICggdGhpcy5jb25maWcuYWRkQ2xvc2VCdXR0b24gPT09IHRydWUgKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoICF0aGlzLmlzSGlkZGVuKHRoaXMuY2xvc2VCdXR0b25PYmopICkge1xuICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VCdXR0b25PYmouZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoICF0aGlzLmlzSGlkZGVuKHRoaXMuYnV0dG9uT2JqKSApIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uT2JqLmZvY3VzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gMi4gYmVpbSBFcnJlaWNoZW4gZWluZXMgaGllciBlaW5nZWbDvGd0ZW4gSGlsZnNsaW5rcyBhbSBFbmRlIGRlcyBDb250YWluZXJzLFxuICAgICAgICAvLyB3aXJkIGViZW5mYWxscyBkZXIgRm9jdXMgenVyw7xjayBhdWYgZGVuIMOWZmZuZW4tQnV0dG9uIGdlc2Nob2JlblxuICAgICAgICBsZXQgZm9jdXNIZWxwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgICAgXG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlcyhmb2N1c0hlbHBlciwge1xuICAgICAgICAgICdhcmlhLWxhYmVsJzogdGhpcy5mb2N1c0hlbHBlclRleHQsXG4gICAgICAgICAgJ2hyZWYnOiAnIycgKyB0aGlzLmJ1dHRvbk9iai5pZCxcbiAgICAgICAgICAnY2xhc3MnOiAnZm9jdXMtaGVscGVyJ1xuICAgICAgICB9KTtcblxuICAgICAgICBmb2N1c0hlbHBlci5pbm5lckhUTUwgPSAnPHNwYW4+JyArIHRoaXMuZm9jdXNIZWxwZXJUZXh0ICsgJzwvc3Bhbj4nO1xuXG4gICAgICAgIGZvY3VzSGVscGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKGV2ZW50KSA9PiB7XG5cbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgaWYgKCB0aGlzLmNvbmZpZy5hZGRDbG9zZUJ1dHRvbiA9PT0gdHJ1ZSApIHtcblxuICAgICAgICAgICAgLy8ga2xlaW5lIFNjaHdhY2hzdGVsbGU6IHRoZW9yZXRpc2NoIGvDtm5udGVuIGF1Y2ggYW5kZXJlIEVsZW1lbnRlIEZvY3VzIGVyaGFsdGVuXG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IHRoaXMudGFyZ2V0T2JqWzBdLnF1ZXJ5U2VsZWN0b3IoJ2FbaHJlZl0saW5wdXQsc2VsZWN0LGJ1dHRvbicpO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uT2JqLmZvY3VzKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudGFyZ2V0T2JqWzBdLmFwcGVuZENoaWxkKGZvY3VzSGVscGVyKTtcblxuICAgICAgfVxuXG4gICAgfVxuXG4gIH1cblxuXG4gIGlzSGlkZGVuIChlbGVtZW50KSB7XG5cbiAgICAvLyBiZWkgcG9zaXRpb24gZml4ZWQgdW5kIMOkbHRlcmVuIFZlcnNpb25lblxuICAgIC8vIGxldCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAgIC8vIHJldHVybiAoc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKVxuXG4gICAgcmV0dXJuIChlbGVtZW50Lm9mZnNldFBhcmVudCA9PT0gbnVsbClcblxuICB9XG5cblxuICBzZXRBdHRyaWJ1dGVzIChlbGVtZW50LCBhdHRyaWJ1dGVzKSB7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChrZXkgPT4gZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBhdHRyaWJ1dGVzW2tleV0pKTtcbiAgfVxuXG5cbiAgc2V0QnV0dG9uIChidXR0b24pIHtcblxuICAgIGxldCBleHBhbmRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKCB0aGlzLmJ1dHRvbk9iai5nZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnKSA9PT0gJ3RydWUnICkge1xuICAgICAgdGhpcy50b2dnbGVTdGF0ZXMoKTtcbiAgICAgIGV4cGFuZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1dHRvbk9iaiA9IGJ1dHRvbjt
24510cblxuICAgIGlmICh0aGlzLmluaXRCdXR0b25zLmluZGV4T2YodGhpcy5idXR0b25PYmopIDwgMCkge1xuICAgICAgdGhpcy5pbml0QnV0dG9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkQXJpYSgpO1xuICAgIH1cblxuICAgIGlmIChleHBhbmRlZCkge1xuICAgICAgdGhpcy50b2dnbGVTdGF0ZXMoKTtcbiAgICB9XG5cbiAgfVxuXG5cbiAgaW5pdEJ1dHRvbigpIHtcblxuICAgIC8vIEFyaWEtQXR0cmlidXRlIGVpbmbDvGdlblxuICAgIHRoaXMuYWRkQXJpYSgpO1xuXG4gICAgLy8gQnV0dG9uIGJlbGVnZW4gdW5kIEZ1bmt0aW9uIGFuYmluZGVuXG4gICAgdGhpcy5idXR0b25PYmouYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnRvZ2dsZVN0YXRlcygpO1xuICAgIH0sIGZhbHNlKTtcblxuICAgIC8vIFRhc3RhdHVyc3RldWVydW5nIC8gVGFicmVpaGVuZm9sZ2U6IG5hY2ggZGVtIFN0ZXVlcnVuZ3NidXR0b24gZGlyZWt0IGluIGRhcyBGZW5zdGVyIHNwcmluZ2VuXG4gICAgLy8gc29sbCBudXIgYmVpIFRBQiBncmVpZmVuIC0+IChldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKSA9PSA5XG4gICAgdGhpcy5idXR0b25PYmouYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudCkgPT4ge1xuICAgICAgaWYgKCB0aGlzLmJ1dHRvbk9iai5nZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnKSA9PT0gJ3RydWUnICYmIChldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKSA9PSA5ICYmIHRoaXMuY29uZmlnLmtlZXBGb2N1c0luVGFyZ2V0RWxlbWVudCA9PT0gdHJ1ZSkge1xuXG4gICAgICAgIC8vIEFiYnJ1Y2ggZmFsbHMgZGFzIEZvY3VzIEhhbmRsaW5nIGRlYWt0aXZpZXJ0IHd1cmRlXG4gICAgICAgIGlmICggdGhpcy5jb25maWcuZGlzYWJsZUZvY3VzSGFuZGxpbmcgPT09IHRydWUgKSB7IHJldHVybjsgfVxuXG4gICAgICAgIC8vIEFiYnJ1Y2gsIGZhbGxzIEJ1dHRvbnMgdmVyc3RlY2t0IHNpbmRcbiAgICAgICAgaWYgKCB0aGlzLmNvbmZpZy5hZGRDbG9zZUJ1dHRvbiA9PT0gdHJ1ZSApIHtcbiAgICAgICAgICBpZiAoIHRoaXMuaXNIaWRkZW4odGhpcy5jbG9zZUJ1dHRvbk9iaikgKSB7IHJldHVybjsgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICggdGhpcy5pc0hpZGRlbih0aGlzLmJ1dHRvbk9iaikgKSB7IHJldHVybjsgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAvLyBrbGVpbmUgU2Nod2FjaHN0ZWxsZTogdGhlb3JldGlzY2gga8O2bm50ZW4gYXVjaCBhbmRlcmUgRWxlbWVudGUgRm9jdXMgZXJoYWx0ZW5cbiAgICAgICAgbGV0IGZvY3VzYWJsZUVsZW1lbnRzID0gdGhpcy50YXJnZXRPYmpbMF0ucXVlcnlTZWxlY3RvckFsbCgnYVtocmVmXTpub3QoLmZvY3VzLWhlbHBlciksaW5wdXQsc2VsZWN0LGJ1dHRvbicpO1xuICAgICAgICBsZXQgdmlzaWJsZUZvY3VzYWJsZUVsZW1lbnRzID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb2N1c2FibGVFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICghdGhpcy5pc0hpZGRlbihmb2N1c2FibGVFbGVtZW50c1tpXSkpIHtcbiAgICAgICAgICAgIHZpc2libGVGb2N1c2FibGVFbGVtZW50cy5wdXNoKGZvY3VzYWJsZUVsZW1lbnRzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIGV2ZW50LnNoaWZ0S2V5ID09PSBmYWxzZSAmJiB2aXNpYmxlRm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoID4gMCApIHtcbiAgICAgICAgICB2aXNpYmxlRm9jdXNhYmxlRWxlbWVudHNbMF0uZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIGlmICggZXZlbnQuc2hpZnRLZXkgPT09IHRydWUgJiYgdmlzaWJsZUZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7XG4gICAgICAgICAgdmlzaWJsZUZvY3VzYWJsZUVsZW1lbnRzW3Zpc2libGVGb2N1c2FibGVFbGVtZW50cy5sZW5ndGggLSAxXS5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuaW5pdEJ1dHRvbnMucHVzaCh0aGlzLmJ1dHRvbk9iaik7XG5cbiAgfVxuXG5cbiAgdG9nZ2xlU3RhdGVzICgpIHtcblxuICAgIGxldCBleHBhbmRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKCB0aGlzLmJ1dHRvbk9iai5nZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnKSA9PT0gJ3RydWUnICkge1xuICAgICAgZXhwYW5kZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnLm9uLmJlZm9yZVRvZ2dsZSh0aGlzLmJ1dHRvbk9iaik7XG5cbiAgICAvLyBTY3JvbGx0IGRpZSBTZWl0ZSBuYWNoIGRlbSBTY2hsaWXDn2VuIHp1csO8Y2sgenVyIFBvc2l0aW9uIHZvciBkZW0gw5ZmZm5lblxuICAgIGlmICh0aGlzLmNvbmZpZy5yZXNldFNjcm9sbFBvc2l0aW9uICE9PSBmYWxzZSkge1xuXG4gICAgICBpZiAoIGV4cGFuZGVkID09PSBmYWxzZSApIHtcbiAgICAgICAgdGhpcy5zY3JvbGxQb3NpdGlvbiA9IE1hdGgubWF4KHdpbmRvdy5wYWdlWU9mZnNldCwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbXVzcyBhdXNnZWbDvGhydCB3ZXJkZW4sIGJldm9yIGRlciBCdXR0b24gRm9jdXMgYmVrb21tdFxuICAgICAgICB0aGlzLnJlc2V0U2Nyb2xsUG9zaXRpb24oKTtcbiAgICAgIH1cbiAgICAgIFxuICAgIH1cblxuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoICgpID0+IHtcblxuICAgICAgaWYgKHRoaXMuY29uZmlnLnNldFJvb3RDbGFzcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2h0bWwnKVswXS5jbGFzc0xpc3QudG9nZ2xlKHRoaXMuY29uZmlnLnNldFJvb3RDbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYnV0dG9uT2JqLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIWV4cGFuZGVkKTtcbiAgICAgIHRoaXMuYnV0dG9uT2JqLmV4cGFuZGVkID0gIWV4cGFuZGVkO1xuXG4gICAgICBpZiAodGhpcy5sYWJlbE9wZW4gJiYgdGhpcy5sYWJlbENsb3NlKSB7XG4gICAgICAgI
24510HRoaXMuYnV0dG9uT2JqLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsZXhwYW5kZWQgPyB0aGlzLmxhYmVsT3BlbiA6IHRoaXMubGFiZWxDbG9zZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbmZpZy5zd2l0Y2hCdXR0b25IdG1sICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmJ1dHRvbk9iai5pbm5lckhUTUwgPSBleHBhbmRlZCA/ICc8c3Bhbj4nICsgdGhpcy50ZXh0T3BlbiArICc8L3NwYW4+JyA6ICc8c3Bhbj4nICsgdGhpcy50ZXh0Q2xvc2UgKyAnPC9zcGFuPic7XG4gICAgICB9XG5cbiAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLnRhcmdldE9iai5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLnRhcmdldE9ialtpXS5zZXRBdHRyaWJ1dGUodGhpcy5jb25maWcuaGlkZGVuQXR0cmlidXRlLCBleHBhbmRlZCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29uZmlnLm9uLmFmdGVyVG9nZ2xlKHRoaXMuYnV0dG9uT2JqKTtcblxuICAgIH0pO1xuXG4gICAgbGV0IGhpZGRlbkVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5oaWRkZW5XaGVuT3Blbik7XG5cbiAgICBpZiAoZXhwYW5kZWQpIHtcblxuICAgICAgaWYgKCB0aGlzLmNvbmZpZy5kaXNhYmxlRm9jdXNIYW5kbGluZyAhPT0gdHJ1ZSApIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoaWRkZW5FbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGhpZGRlbkVsZW1lbnRzW2ldLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTb2xsdGUgbmFjaCBBYnNjaGx1c3MgZWluZXIgQW5pbWF0aW9uIGVyZm9sZ2VuXG4gICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICAgIHRoaXMuYnV0dG9uT2JqLmZvY3VzKCk7XG4gICAgICB9LCA2MDApO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIFxuICAgICAgaWYgKCB0aGlzLmNvbmZpZy5kaXNhYmxlRm9jdXNIYW5kbGluZyAhPT0gdHJ1ZSApIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoaWRkZW5FbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGhpZGRlbkVsZW1lbnRzW2ldLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoIHRoaXMuY29uZmlnLnNldEZvY3VzVG9FbGVtZW50ICE9PSBmYWxzZSApIHtcbiAgICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLnRhcmdldE9ialswXS5xdWVyeVNlbGVjdG9yKHRoaXMuY29uZmlnLnNldEZvY3VzVG9FbGVtZW50KTtcbiAgICAgICAgaWYgKCBlbGVtZW50Lmxlbmd0aCAhPT0gbnVsbCApIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29uZmlnLnNldEZvY3VzVG9GaXJzdEVsZW1lbnQgPT09IHRydWUpIHtcbiAgICAgICAgc2V0VGltZW91dCggKCkgPT4ge1xuICAgICAgICAgICh0aGlzLnRhcmdldE9ialswXS5xdWVyeVNlbGVjdG9yKCdhW2hyZWZdLGlucHV0LHNlbGVjdCxidXR0b24nKSB8fCB0aGlzLnRhcmdldE9ialswXSkuZm9jdXMoKTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICAgIH1cbiAgICAgIFxuICAgIH1cblxuICB9O1xuXG5cbiAgaXNJblZpZXdwb3J0KGVsZW1lbnQpIHtcbiAgICBcbiAgICBsZXQgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgcmVjdC50b3AgPj0gMCAmJlxuICAgICAgcmVjdC5sZWZ0ID49IDAgJiZcbiAgICAgIHJlY3QuYm90dG9tIDw9ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkgJiZcbiAgICAgIHJlY3QucmlnaHQgPD0gKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aClcbiAgICApO1xuXG4gIH07XG5cblxuICByZXNldFNjcm9sbFBvc2l0aW9uKCkge1xuXG4gICAgaWYgKCAhdGhpcy5pc0luVmlld3BvcnQodGhpcy5idXR0b25PYmopICkge1xuICAgICAgY29uc29sZS5sb2coJ3Njcm9sbCcpO1xuICAgICAgd2luZG93LnNjcm9sbCh7XG4gICAgICAgIHRvcDogdGhpcy5zY3JvbGxQb3NpdGlvbixcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG5cbiAgZGlzYWJsZUZvY3VzSGFuZGxpbmcoc3RhdHVzKSB7XG4gICAgdGhpcy5jb25maWcuZGlzYWJsZUZvY3VzSGFuZGxpbmcgPSBzdGF0dXM7XG4gIH1cblxuXG4gIGFkZEFyaWEgKCkge1xuXG4gICAgbGV0IGNvbnRyb2xzID0gW107XG4gICAgbGV0IGhpZGRlbkF0dHJpYnV0ZSA9IHRoaXMuY29uZmlnLmhpZGRlbkF0dHJpYnV0ZTtcblxuICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLnRhcmdldE9iai5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGVzKHRoaXMudGFyZ2V0T2JqW2ldLCB7XG4gICAgICAgIFtoaWRkZW5BdHRyaWJ1dGVdOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGNvbnRyb2xzLnB1c2godGhpcy50YXJnZXRPYmpbaV0uaWQpO1xuICAgIH1cblxuICAgIGlmICggdGhpcy5idXR0b25PYmoubm9kZU5hbWUgIT0gJ0JVVFRPTicgKSB7XG4gICAgICB0aGlzLmJ1dHRvbk9iai5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCdidXR0b24nKTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVzKHRoaXMuYnV0dG9uT2JqLCB7XG4gICAgICAnYXJpYS1jb250cm9scyc6IGNvbnRyb2xzLmpvaW4oJyAnKSxcbiAgICAgICdhcmlhLWV4cGFuZGVkJzogJ2ZhbHNlJ1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMubGFiZWxPcGVuKSB7XG4gICAgICB0aGlzLmJ1dHRvbk9iai5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLHRoaXMubGFiZWxPcGVuKTtcbiAgICB9XG5cbiAgfTtcblxuXG59XG5cblxuZXhwb3J0IGRlZmF1bHQgcHhFYXN5RXhwYW5kO1xuXG4iLCIvKipcbiAqIFN3aXBlciA2LjcuMFxuICogTW9zdCBtb2Rlcm4gbW9iaWxlIHRvdWNoIHNsaWRlciBhbmQgZnJhbWV3b3JrIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0ZWQgdHJhbnNpdGlvbnNcbiAqIGh0dHBzOi8vc3dpcGVyanMuY29tXG4gKlxuICogQ29weXJpZ2h0IDIwMTQtMjAyMSBWbGFkaW1pciBLaGFybGFtcGlkaVxuICpcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuICpcbiAqIFJlbGVhc2VkIG9uOiBNYXkgMzEsIDIwMjFcbiAqL1xuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gIChnbG9iYWwgP
24510SB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5Td2lwZXIgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9XG5cbiAgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gICAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG5cbiAgICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTU1IgV2luZG93IDMuMC4wXG4gICAqIEJldHRlciBoYW5kbGluZyBmb3Igd2luZG93IG9iamVjdCBpbiBTU1IgZW52aXJvbm1lbnRcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL25vbGltaXRzNHdlYi9zc3Itd2luZG93XG4gICAqXG4gICAqIENvcHlyaWdodCAyMDIwLCBWbGFkaW1pciBLaGFybGFtcGlkaVxuICAgKlxuICAgKiBMaWNlbnNlZCB1bmRlciBNSVRcbiAgICpcbiAgICogUmVsZWFzZWQgb246IE5vdmVtYmVyIDksIDIwMjBcbiAgICovXG5cbiAgLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbiAgZnVuY3Rpb24gaXNPYmplY3QkMShvYmopIHtcbiAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICdjb25zdHJ1Y3RvcicgaW4gb2JqICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xuICB9XG5cbiAgZnVuY3Rpb24gZXh0ZW5kJDEodGFyZ2V0LCBzcmMpIHtcbiAgICBpZiAodGFyZ2V0ID09PSB2b2lkIDApIHtcbiAgICAgIHRhcmdldCA9IHt9O1xuICAgIH1cblxuICAgIGlmIChzcmMgPT09IHZvaWQgMCkge1xuICAgICAgc3JjID0ge307XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMoc3JjKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmICh0eXBlb2YgdGFyZ2V0W2tleV0gPT09ICd1bmRlZmluZWQnKSB0YXJnZXRba2V5XSA9IHNyY1trZXldO2Vsc2UgaWYgKGlzT2JqZWN0JDEoc3JjW2tleV0pICYmIGlzT2JqZWN0JDEodGFyZ2V0W2tleV0pICYmIE9iamVjdC5rZXlzKHNyY1trZXldKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGV4dGVuZCQxKHRhcmdldFtrZXldLCBzcmNba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB2YXIgc3NyRG9jdW1lbnQgPSB7XG4gICAgYm9keToge30sXG4gICAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcigpIHt9LFxuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIoKSB7fSxcbiAgICBhY3RpdmVFbGVtZW50OiB7XG4gICAgICBibHVyOiBmdW5jdGlvbiBibHVyKCkge30sXG4gICAgICBub2RlTmFtZTogJydcbiAgICB9LFxuICAgIHF1ZXJ5U2VsZWN0b3I6IGZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3IoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHF1ZXJ5U2VsZWN0b3JBbGw6IGZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3JBbGwoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcbiAgICBnZXRFbGVtZW50QnlJZDogZnVuY3Rpb24gZ2V0RWxlbWVudEJ5SWQoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIGNyZWF0ZUV2ZW50OiBmdW5jdGlvbiBjcmVhdGVFdmVudCgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluaXRFdmVudDogZnVuY3Rpb24gaW5pdEV2ZW50KCkge31cbiAgICAgIH07XG4gICAgfSxcbiAgICBjcmVhdGVFbGVtZW50OiBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICBjaGlsZE5vZGVzOiBbXSxcbiAgICAgICAgc3R5bGU6IHt9LFxuICAgICAgICBzZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uIHNldEF0dHJpYnV0ZSgpIHt9LFxuICAgICAgICBnZXRFbGVtZW50c0J5VGFnTmFtZTogZnVuY3Rpb24gZ2V0RWxlbWVudHNCeVRhZ05hbWUoKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sXG4gICAgY3JlYXRlRWxlbWVudE5TOiBmdW5jdGlvbiBjcmVhdGVFbGVtZW50TlMoKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfSxcbiAgICBpbXBvcnROb2RlOiBmdW5jdGlvbiBpbXBvcnROb2RlKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBsb2NhdGlvbjoge1xuICAgICAgaGFzaDogJycsXG4gICAgICBob3N0OiAnJyxcbiAgICAgIGhvc3RuYW1lOiAnJyxcbiAgICAgIGhyZWY6ICcnLFxuICAgICAgb3JpZ2luOiAnJyxcbiAgICAgIHBhdGhuYW1lOiAnJyxcbiAgICAgIHByb3RvY29sOiAnJyxcbiAgICAgIHNlYXJjaDogJydcbiAgICB9XG4gI
24510H07XG5cbiAgZnVuY3Rpb24gZ2V0RG9jdW1lbnQoKSB7XG4gICAgdmFyIGRvYyA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IHt9O1xuICAgIGV4dGVuZCQxKGRvYywgc3NyRG9jdW1lbnQpO1xuICAgIHJldHVybiBkb2M7XG4gIH1cblxuICB2YXIgc3NyV2luZG93ID0ge1xuICAgIGRvY3VtZW50OiBzc3JEb2N1bWVudCxcbiAgICBuYXZpZ2F0b3I6IHtcbiAgICAgIHVzZXJBZ2VudDogJydcbiAgICB9LFxuICAgIGxvY2F0aW9uOiB7XG4gICAgICBoYXNoOiAnJyxcbiAgICAgIGhvc3Q6ICcnLFxuICAgICAgaG9zdG5hbWU6ICcnLFxuICAgICAgaHJlZjogJycsXG4gICAgICBvcmlnaW46ICcnLFxuICAgICAgcGF0aG5hbWU6ICcnLFxuICAgICAgcHJvdG9jb2w6ICcnLFxuICAgICAgc2VhcmNoOiAnJ1xuICAgIH0sXG4gICAgaGlzdG9yeToge1xuICAgICAgcmVwbGFjZVN0YXRlOiBmdW5jdGlvbiByZXBsYWNlU3RhdGUoKSB7fSxcbiAgICAgIHB1c2hTdGF0ZTogZnVuY3Rpb24gcHVzaFN0YXRlKCkge30sXG4gICAgICBnbzogZnVuY3Rpb24gZ28oKSB7fSxcbiAgICAgIGJhY2s6IGZ1bmN0aW9uIGJhY2soKSB7fVxuICAgIH0sXG4gICAgQ3VzdG9tRXZlbnQ6IGZ1bmN0aW9uIEN1c3RvbUV2ZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKCkge30sXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcigpIHt9LFxuICAgIGdldENvbXB1dGVkU3R5bGU6IGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZXRQcm9wZXJ0eVZhbHVlOiBmdW5jdGlvbiBnZXRQcm9wZXJ0eVZhbHVlKCkge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LFxuICAgIEltYWdlOiBmdW5jdGlvbiBJbWFnZSgpIHt9LFxuICAgIERhdGU6IGZ1bmN0aW9uIERhdGUoKSB7fSxcbiAgICBzY3JlZW46IHt9LFxuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIHNldFRpbWVvdXQoKSB7fSxcbiAgICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uIGNsZWFyVGltZW91dCgpIHt9LFxuICAgIG1hdGNoTWVkaWE6IGZ1bmN0aW9uIG1hdGNoTWVkaWEoKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfSxcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IGZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjaykge1xuICAgICAgaWYgKHR5cGVvZiBzZXRUaW
245101lb3V0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICAgIH0sXG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWU6IGZ1bmN0aW9uIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKSB7XG4gICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gZ2V0V2luZG93KCkge1xuICAgIHZhciB3aW4gPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHt9O1xuICAgIGV4dGVuZCQxKHdpbiwgc3NyV2luZG93KTtcbiAgICByZXR1cm4gd2luO1xuICB9XG5cbiAgLyoqXG4gICAqIERvbTcgMy4wLjBcbiAgICogTWluaW1hbGlzdGljIEphdmFTY3JpcHQgbGlicmFyeSBmb3IgRE9NIG1hbmlwdWxhdGlvbiwgd2l0aCBhIGpRdWVyeS1jb21wYXRpYmxlIEFQSVxuICAgKiBodHRwczovL2ZyYW1ld29yazcuaW8vZG9jcy9kb203Lmh0bWxcbiAgICpcbiAgICogQ29weXJpZ2h0IDIwMjAsIFZsYWRpbWlyIEtoYXJsYW1waWRpXG4gICAqXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVFxuICAgKlxuICAgKiBSZWxlYXNlZCBvbjogTm92ZW1iZXIgOSwgMjAyMFxuICAgKi9cblxuICBmdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICAgIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICAgIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG4gIH1cblxuICBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICByZXR1cm4gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICAgIGlmIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHtcbiAgICAgIF9jb25zdHJ1Y3QgPSBSZWZsZWN0LmNvbnN0cnVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgX2NvbnN0cnVjdCA9IGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICAgICAgICB2Y
24510XIgYSA9IFtudWxsXTtcbiAgICAgICAgYS5wdXNoLmFwcGx5KGEsIGFyZ3MpO1xuICAgICAgICB2YXIgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCwgYSk7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgICBpZiAoQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihpbnN0YW5jZSwgQ2xhc3MucHJvdG90eXBlKTtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2lzTmF0aXZlRnVuY3Rpb24oZm4pIHtcbiAgICByZXR1cm4gRnVuY3Rpb24udG9TdHJpbmcuY2FsbChmbikuaW5kZXhPZihcIltuYXRpdmUgY29kZV1cIikgIT09IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICAgIHZhciBfY2FjaGUgPSB0eXBlb2YgTWFwID09PSBcImZ1bmN0aW9uXCIgPyBuZXcgTWFwKCkgOiB1bmRlZmluZWQ7XG5cbiAgICBfd3JhcE5hdGl2ZVN1cGVyID0gZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICAgICAgaWYgKENsYXNzID09PSBudWxsIHx8ICFfaXNOYXRpdmVGdW5jdGlvbihDbGFzcykpIHJldHVybiBDbGFzcztcblxuICAgICAgaWYgKHR5cGVvZiBDbGFzcyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBfY2FjaGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgaWYgKF9jYWNoZS5oYXMoQ2xhc3MpKSByZXR1cm4gX2NhY2hlLmdldChDbGFzcyk7XG5cbiAgICAgICAgX2NhY2hlLnNldChDbGFzcywgV3JhcHBlcik7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIFdyYXBwZXIoKSB7XG4gICAgICAgIHJldHVybiBfY29uc3RydWN0KENsYXNzLCBhcmd1bWVudHMsIF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcik7XG4gICAgICB9XG5cbiAgICAgIFdyYXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICB2YWx1ZTogV3JhcHBlcixcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKFdyYXBwZXIsIENsYXNzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxmO1xuICB9XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cblxuICBmdW5jdGlvbiBtYWtlUmVhY3RpdmUob2JqKSB7XG4gICAgdmFyIHByb3RvID0gb2JqLl9fcHJvdG9fXztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAnX19wcm90b19fJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBwcm90bztcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgICBwcm90by5fX3Byb3RvX18gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBEb203ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQXJyYXkpIHtcbiAgICBfaW5oZXJpdHNMb29zZShEb203LCBfQXJyYXkpO1xuXG4gICAgZnVuY3Rpb24gRG9tNyhpdGVtcykge1xuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBfdGhpcyA9IF9BcnJheS5jYWxsLmFwcGx5KF9BcnJheSwgW3RoaXNdLmNvbmNhdChpdGVtcykpIHx8IHRoaXM7XG4gICAgICBtYWtlUmVhY3RpdmUoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cblxuICAgIHJldHVybiBEb203O1xuICB9KCAvKiNfX1BVUkVfXyovX3dyYXBOYXRpdmVTdXBlcihBcnJheSkpO1xuXG4gIGZ1bmN0aW9uIGFycmF5RmxhdChhcnIpIHtcbiAgICBpZiAoYXJyID09PSB2b2lkIDApIHtcbiAgICAgIGFyciA9IFtdO1xuICAgIH1cblxuICAgIHZhciByZXMgPSBbXTtcbiAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGVsKSkge1xuICAgICAgICByZXMucHVzaC5hcHBseShyZXMsIGFycmF5RmxhdChlbCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzLnB1c2goZWwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBmdW5jdGlvbiBhcnJheUZpbHRlcihhcnIsIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChhcnIsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFycmF5VW5pcXVlKGFycikge1xuICAgIHZhciB1bmlxdWVBcnJheSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICh1bmlxdWVBcnJheS5pbmRleE9mKGFycltpXSkgPT09IC0xKSB1bmlxdWVBcnJheS5wdXNoKGFycltpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaXF1ZUFycmF5O1xuICB9XG5cbiAgZnVuY3Rpb24gcXNhKHNlbGVjdG9yLCBjb250ZXh0KSB7XG4gICAgaWYgKHR5cGVvZiBzZWxlY3RvciAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBbc2VsZWN0b3JdO1xuICAgIH1cblxuICAgIHZhciBhID0gW107XG4gICAgdmFyIHJlcyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgYS5wdXNoKHJlc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICBmdW5jdGlvbiAkKHNlbGVjdG9yLCBjb250ZXh0KSB7XG4gICAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgdmFyIGFyciA9IFtdO1xuXG4gICAgaWYgKCFjb250ZXh0ICYmIHNlbGVjdG9yIGluc3RhbmNlb2YgRG9tNykge1xuICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgIH1cblxuICAgIGlmICghc2VsZWN0b3IpIHtcbiAgICAgIHJldHVybi
24510BuZXcgRG9tNyhhcnIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgaHRtbCA9IHNlbGVjdG9yLnRyaW0oKTtcblxuICAgICAgaWYgKGh0bWwuaW5kZXhPZignPCcpID49IDAgJiYgaHRtbC5pbmRleE9mKCc+JykgPj0gMCkge1xuICAgICAgICB2YXIgdG9DcmVhdGUgPSAnZGl2JztcbiAgICAgICAgaWYgKGh0bWwuaW5kZXhPZignPGxpJykgPT09IDApIHRvQ3JlYXRlID0gJ3VsJztcbiAgICAgICAgaWYgKGh0bWwuaW5kZXhPZignPHRyJykgPT09IDApIHRvQ3JlYXRlID0gJ3Rib2R5JztcbiAgICAgICAgaWYgKGh0bWwuaW5kZXhPZignPHRkJykgPT09IDAgfHwgaHRtbC5pbmRleE9mKCc8dGgnKSA9PT0gMCkgdG9DcmVhdGUgPSAndHInO1xuICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCc8dGJvZHknKSA9PT0gMCkgdG9DcmVhdGUgPSAndGFibGUnO1xuICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCc8b3B0aW9uJykgPT09IDApIHRvQ3JlYXRlID0gJ3NlbGVjdCc7XG4gICAgICAgIHZhciB0ZW1wUGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0b0NyZWF0ZSk7XG4gICAgICAgIHRlbXBQYXJlbnQuaW5uZXJIVE1MID0gaHRtbDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlbXBQYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIGFyci5wdXNoKHRlbXBQYXJlbnQuY2hpbGROb2Rlc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFyciA9IHFzYShzZWxlY3Rvci50cmltKCksIGNvbnRleHQgfHwgZG9jdW1lbnQpO1xuICAgICAgfSAvLyBhcnIgPSBxc2Eoc2VsZWN0b3IsIGRvY3VtZW50KTtcblxuICAgIH0gZWxzZSBpZiAoc2VsZWN0b3Iubm9kZVR5cGUgfHwgc2VsZWN0b3IgPT09IHdpbmRvdyB8fCBzZWxlY3RvciA9PT0gZG9jdW1lbnQpIHtcbiAgICAgIGFyci5wdXNoKHNlbGVjdG9yKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc2VsZWN0b3IpKSB7XG4gICAgICBpZiAoc2VsZWN0b3IgaW5zdGFuY2VvZiBEb203KSByZXR1cm4gc2VsZWN0b3I7XG4gICAgICBhcnIgPSBzZWxlY3RvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERvbTcoYXJyYXlVbmlxdWUoYXJyKSk7XG4gIH1cblxuICAkLmZuID0gRG9tNy5wcm90b3R5cGU7XG5cbiAgZnVuY3Rpb24gYWRkQ2xhc3MoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGNsYXNzZXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBjbGFzc2VzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBjbGFzc05hbWVzID0gYXJyYXlGbGF0KGNsYXNzZXMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICByZXR1cm4gYy5zcGxpdCgnICcpO1xuICAgIH0pKTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgICB2Y
24510XIgX2VsJGNsYXNzTGlzdDtcblxuICAgICAgKF9lbCRjbGFzc0xpc3QgPSBlbC5jbGFzc0xpc3QpLmFkZC5hcHBseShfZWwkY2xhc3NMaXN0LCBjbGFzc05hbWVzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUNsYXNzKCkge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgY2xhc3NlcyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgY2xhc3Nlc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHZhciBjbGFzc05hbWVzID0gYXJyYXlGbGF0KGNsYXNzZXMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICByZXR1cm4gYy5zcGxpdCgnICcpO1xuICAgIH0pKTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgICB2YXIgX2VsJGNsYXNzTGlzdDI7XG5cbiAgICAgIChfZWwkY2xhc3NMaXN0MiA9IGVsLmNsYXNzTGlzdCkucmVtb3ZlLmFwcGx5KF9lbCRjbGFzc0xpc3QyLCBjbGFzc05hbWVzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKCkge1xuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgY2xhc3NlcyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgY2xhc3Nlc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIHZhciBjbGFzc05hbWVzID0gYXJyYXlGbGF0KGNsYXNzZXMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICByZXR1cm4gYy5zcGxpdCgnICcpO1xuICAgIH0pKTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgICBjbGFzc05hbWVzLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgICAgICBlbC5jbGFzc0xpc3QudG9nZ2xlKGNsYXNzTmFtZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhc0NsYXNzKCkge1xuICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgY2xhc3NlcyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgY2xhc3Nlc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgIH1cblxuICAgIHZhciBjbGFzc05hbWVzID0gYXJyYXlGbGF0KGNsYXNzZXMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICByZXR1cm4gYy5zcGxpdCgnICcpO1xuICAgIH0pKTtcbiAgICByZXR1cm4gYXJyYXlGaWx0ZXIodGhpcywgZnVuY3Rpb24gKGVsKSB7XG4gICAgICByZXR1cm4gY2xhc3NOYW1lcy5maWx0ZXIoZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgICAgICByZXR1cm4gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XG4gICAgICB9KS5sZW5ndGggPiAwO1xuICAgIH0pLmxlbmd0aCA+IDA7XG4gIH1cblxuICBmdW5jdGlvbiBhdHRyKGF0dHJzLCB2YWx1ZSkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhdHRycyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIEdldCBhdHRyXG4gICAgICBpZiAodGhpc1swXSkgcmV0dXJuIHRoaXNbMF0uZ2V0QXR0cmlidXRlKGF0dHJzKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSAvLyBTZXQgYXR0cnNcblxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBTdHJpbmdcbiAgICAgICAgdGhpc1tpXS5zZXRBdHRyaWJ1dGUoYXR0cnMsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE9iamVjdFxuICAgICAgICBmb3IgKHZhciBhdHRyTmFtZSBpbiBhdHRycykge1xuICAgICAgICAgIHRoaXNbaV1bYXR0ck5hbWVdID0gYXR0cnNbYXR0ck5hbWVdO1xuICAgICAgICAgIHRoaXNbaV0uc2V0QXR0cmlidXRlKGF0dHJOYW1lLCBhdHRyc1thdHRyTmFtZV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVBdHRyKGF0dHIpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHRoaXNbaV0ucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNmb3JtKHRyYW5zZm9ybSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdGhpc1tpXS5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2l0aW9uJDEoZHVyYXRpb24pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHRoaXNbaV0uc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gdHlwZW9mIGR1cmF0aW9uICE9PSAnc3RyaW5nJyA/IGR1cmF0aW9uICsgXCJtc1wiIDogZHVyYXRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiBvbigpIHtcbiAgICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjUpLCBfa2V5NSA9IDA7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcbiAgICAgIGFyZ3NbX2tleTVdID0gYXJndW1lbnRzW19rZXk1XTtcbiAgICB9XG5cbiAgICB2YXIgZXZlbnRUeXBlID0gYXJnc1swXSxcbiAgICAgICAgdGFyZ2V0U2VsZWN0b3IgPSBhcmdzWzFdLFxuICAgICAgICBsaXN0ZW5lciA9IGFyZ3NbMl0sXG4gICAgICAgIGNhcHR1cmUgPSBhcmdzWzNdO1xuXG4gICAgaWYgKHR5cGVvZiBhcmdzWzFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBldmVudFR5cGUgPSBhcmdzWzBdO1xuICAgICAgbGlzdGVuZXIgPSBhcmdzWzFdO1xuICAgICAgY2FwdHVyZSA9IGFyZ3NbMl07XG4gICAgICB0YXJnZXRTZWxlY3RvciA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIWNhcHR1cmUpIGNhcHR1cmUgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGhhbmRsZUxpdmVFdmVudChlKSB7XG4gICAgICB2Y
24510XIgdGFyZ2V0ID0gZS50YXJnZXQ7XG4gICAgICBpZiAoIXRhcmdldCkgcmV0dXJuO1xuICAgICAgdmFyIGV2ZW50RGF0YSA9IGUudGFyZ2V0LmRvbTdFdmVudERhdGEgfHwgW107XG5cbiAgICAgIGlmIChldmVudERhdGEuaW5kZXhPZihlKSA8IDApIHtcbiAgICAgICAgZXZlbnREYXRhLnVuc2hpZnQoZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICgkKHRhcmdldCkuaXModGFyZ2V0U2VsZWN0b3IpKSBsaXN0ZW5lci5hcHBseSh0YXJnZXQsIGV2ZW50RGF0YSk7ZWxzZSB7XG4gICAgICAgIHZhciBfcGFyZW50cyA9ICQodGFyZ2V0KS5wYXJlbnRzKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuXG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgX3BhcmVudHMubGVuZ3RoOyBrICs9IDEpIHtcbiAgICAgICAgICBpZiAoJChfcGFyZW50c1trXSkuaXModGFyZ2V0U2VsZWN0b3IpKSBsaXN0ZW5lci5hcHBseShfcGFyZW50c1trXSwgZXZlbnREYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZUV2ZW50KGUpIHtcbiAgICAgIHZhciBldmVudERhdGEgPSBlICYmIGUudGFyZ2V0ID8gZS50YXJnZXQuZG9tN0V2ZW50RGF0YSB8fCBbXSA6IFtdO1xuXG4gICAgICBpZiAoZXZlbnREYXRhLmluZGV4T2YoZSkgPCAwKSB7XG4gICAgICAgIGV2ZW50RGF0YS51bnNoaWZ0KGUpO1xuICAgICAgfVxuXG4gICAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBldmVudERhdGEpO1xuICAgIH1cblxuICAgIHZhciBldmVudHMgPSBldmVudFR5cGUuc3BsaXQoJyAnKTtcbiAgICB2YXIgajtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIGVsID0gdGhpc1tpXTtcblxuICAgICAgaWYgKCF0YXJnZXRTZWxlY3Rvcikge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgZXZlbnRzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgICAgdmFyIGV2ZW50ID0gZXZlbnRzW2pdO1xuICAgICAgICAgIGlmICghZWwuZG9tN0xpc3RlbmVycykgZWwuZG9tN0xpc3RlbmVycyA9IHt9O1xuICAgICAgICAgIGlmICghZWwuZG9tN0xpc3RlbmVyc1tldmVudF0pIGVsLmRvbTdMaXN0ZW5lcnNbZXZlbnRdID0gW107XG4gICAgICAgICAgZWwuZG9tN0xpc3RlbmVyc1tldmVudF0ucHVzaCh7XG4gICAgICAgICAgICBsaXN0ZW5lcjogbGlzdGVuZXIsXG4gICAgICAgICAgICBwcm94eUxpc3RlbmVyOiBoYW5kbGVFdmVudFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZUV2ZW50LCBjYXB0dXJlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTGl2ZSBldmVudHNcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGV2ZW50cy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgIHZhciBfZXZlbnQgPSBldmVudHNbal07XG4gICAgICAgICAgaWYgKCFlbC5kb203TGl2ZUxpc3RlbmVycykgZWwuZG9tN0xpdmVMaXN0ZW5lcnMgPSB7fTtcbiAgICAgICAgICBpZiAoIWVsLmRvbTdMaXZlTGlzdGVuZXJzW19ldmVudF0pIGVsLmRvbTdMaXZlTGlzdGVuZXJzW19ldmVudF0gPSBbXTtcblxuICAgICAgICAgIGVsLmRvbTdMaXZlTGlzdGVuZXJzW19ldmVudF0ucHVzaCh7XG4gICAgICAgICAgICBsaXN0ZW5lcjogbGlzdGVuZXIsXG4gICAgICAgICAgICBwcm94eUxpc3RlbmVyOiBoYW5kbGVMaXZlRXZlbnRcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoX2V2ZW50LCBoYW5kbGVMaXZlRXZlbnQsIGNhcHR1cmUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiBvZmYoKSB7XG4gICAgZm9yICh2YXIgX2xlbjYgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW42KSwgX2tleTYgPSAwOyBfa2V5NiA8IF9sZW42OyBfa2V5NisrKSB7XG4gICAgICBhcmdzW19rZXk2XSA9IGFyZ3VtZW50c1tfa2V5Nl07XG4gICAgfVxuXG4gICAgdmFyIGV2ZW50VHlwZSA9IGFyZ3NbMF0sXG4gICAgICAgIHRhcmdldFNlbGVjdG9yID0gYXJnc1sxXSxcbiAgICAgICAgbGlzdGVuZXIgPSBhcmdzWzJdLFxuICAgICAgICBjYXB0dXJlID0gYXJnc1szXTtcblxuICAgIGlmICh0eXBlb2YgYXJnc1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXZlbnRUeXBlID0gYXJnc1swXTtcbiAgICAgIGxpc3RlbmVyID0gYXJnc1sxXTtcbiAgICAgIGNhcHR1cmUgPSBhcmdzWzJdO1xuICAgICAgdGFyZ2V0U2VsZWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFjYXB0dXJlKSBjYXB0dXJlID0gZmFsc2U7XG4gICAgdmFyIGV2ZW50cyA9IGV2ZW50VHlwZS5zcGxpdCgnICcpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHZhciBldmVudCA9IGV2ZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIHZhciBlbCA9IHRoaXNbal07XG4gICAgICAgIHZhciBoYW5kbGVycyA9IHZvaWQgMDtcblxuICAgICAgICBpZiAoIXRhcmdldFNlbGVjdG9yICYmIGVsLmRvbTdMaXN0ZW5lcnMpIHtcbiAgICAgICAgICBoYW5kbGVycyA9IGVsLmRvbTdMaXN0ZW5lcnNbZXZlbnRdO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFNlbGVjdG9yICYmIGVsLmRvbTdMaXZlTGlzdGVuZXJzKSB7XG4gICAgICAgICAgaGFuZGxlcnMgPSBlbC5kb203TGl2ZUxpc3RlbmVyc1tldmVudF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFuZGxlcnMgJiYgaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgZm9yICh2YXIgayA9IGhhbmRsZXJzLmxlbmd0aCAtIDE7IGsgPj0gMDsgayAtPSAxKSB7XG4gICAgICAgICAgICB2Y
24510XIgaGFuZGxlciA9IGhhbmRsZXJzW2tdO1xuXG4gICAgICAgICAgICBpZiAobGlzdGVuZXIgJiYgaGFuZGxlci5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlci5wcm94eUxpc3RlbmVyLCBjYXB0dXJlKTtcbiAgICAgICAgICAgICAgaGFuZGxlcnMuc3BsaWNlKGssIDEpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lciAmJiBoYW5kbGVyLmxpc3RlbmVyICYmIGhhbmRsZXIubGlzdGVuZXIuZG9tN3Byb3h5ICYmIGhhbmRsZXIubGlzdGVuZXIuZG9tN3Byb3h5ID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLnByb3h5TGlzdGVuZXIsIGNhcHR1cmUpO1xuICAgICAgICAgICAgICBoYW5kbGVycy5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFsaXN0ZW5lcikge1xuICAgICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLnByb3h5TGlzdGVuZXIsIGNhcHR1cmUpO1xuICAgICAgICAgICAgICBoYW5kbGVycy5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiB0cmlnZ2VyKCkge1xuICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuICAgIGZvciAodmFyIF9sZW45ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuOSksIF9rZXk5ID0gMDsgX2tleTkgPCBfbGVuOTsgX2tleTkrKykge1xuICAgICAgYXJnc1tfa2V5OV0gPSBhcmd1bWVudHNbX2tleTldO1xuICAgIH1cblxuICAgIHZhciBldmVudHMgPSBhcmdzWzBdLnNwbGl0KCcgJyk7XG4gICAgdmFyIGV2ZW50RGF0YSA9IGFyZ3NbMV07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIGV2ZW50ID0gZXZlbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgdmFyIGVsID0gdGhpc1tqXTtcblxuICAgICAgICBpZiAod2luZG93LkN1c3RvbUV2ZW50KSB7XG4gICAgICAgICAgdmFyIGV2dCA9IG5ldyB3aW5kb3cuQ3VzdG9tRXZlbnQoZXZlbnQsIHtcbiAgICAgICAgICAgIGRldGFpbDogZXZlbnREYXRhLFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibG
24510U6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBlbC5kb203RXZlbnREYXRhID0gYXJncy5maWx0ZXIoZnVuY3Rpb24gKGRhdGEsIGRhdGFJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFJbmRleCA+IDA7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZWwuZGlzcGF0Y2hFdmVudChldnQpO1xuICAgICAgICAgIGVsLmRvbTdFdmVudERhdGEgPSBbXTtcbiAgICAgICAgICBkZWxldGUgZWwuZG9tN0V2ZW50RGF0YTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNpdGlvbkVuZCQxKGNhbGxiYWNrKSB7XG4gICAgdmFyIGRvbSA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBmaXJlQ2FsbEJhY2soZSkge1xuICAgICAgaWYgKGUudGFyZ2V0ICE9PSB0aGlzKSByZXR1cm47XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGUpO1xuICAgICAgZG9tLm9mZigndHJhbnNpdGlvbmVuZCcsIGZpcmVDYWxsQmFjayk7XG4gICAgfVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBkb20ub24oJ3RyYW5zaXRpb25lbmQnLCBmaXJlQ2FsbEJhY2spO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gb3V0ZXJXaWR0aChpbmNsdWRlTWFyZ2lucykge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChpbmNsdWRlTWFyZ2lucykge1xuICAgICAgICB2YXIgX3N0eWxlcyA9IHRoaXMuc3R5bGVzKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXNbMF0ub2Zmc2V0V2lkdGggKyBwYXJzZU
24510Zsb2F0KF9zdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLXJpZ2h0JykpICsgcGFyc2VGbG9hdChfc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1sZWZ0JykpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1swXS5vZmZzZXRXaWR0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG91dGVySGVpZ2h0KGluY2x1ZGVNYXJnaW5zKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGluY2x1ZGVNYXJnaW5zKSB7XG4gICAgICAgIHZhciBfc3R5bGVzMiA9IHRoaXMuc3R5bGVzKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXNbMF0ub2Zmc2V0SGVpZ2h0ICsgcGFyc2VGbG9hdChfc3R5bGVzMi5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJnaW4tdG9wJykpICsgcGFyc2VGbG9hdChfc3R5bGVzMi5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJnaW4tYm90dG9tJykpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1swXS5vZmZzZXRIZWlnaHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBvZmZzZXQoKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICAgICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgIHZhciBlbCA9IHRoaXNbMF07XG4gICAgICB2YXIgYm94ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gICAgICB2Y
24510XIgY2xpZW50VG9wID0gZWwuY2xpZW50VG9wIHx8IGJvZHkuY2xpZW50VG9wIHx8IDA7XG4gICAgICB2YXIgY2xpZW50TGVmdCA9IGVsLmNsaWVudExlZnQgfHwgYm9keS5jbGllbnRMZWZ0IHx8IDA7XG4gICAgICB2YXIgc2Nyb2xsVG9wID0gZWwgPT09IHdpbmRvdyA/IHdpbmRvdy5zY3JvbGxZIDogZWwuc2Nyb2xsVG9wO1xuICAgICAgdmFyIHNjcm9sbExlZnQgPSBlbCA9PT0gd2luZG93ID8gd2luZG93LnNjcm9sbFggOiBlbC5zY3JvbGxMZWZ0O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9wOiBib3gudG9wICsgc2Nyb2xsVG9wIC0gY2xpZW50VG9wLFxuICAgICAgICBsZWZ0OiBib3gubGVmdCArIHNjcm9sbExlZnQgLSBjbGllbnRMZWZ0XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gc3R5bGVzKCkge1xuICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgICBpZiAodGhpc1swXSkgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXNbMF0sIG51bGwpO1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNzcyhwcm9wcywgdmFsdWUpIHtcbiAgICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgdmFyIGk7XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gLmNzcygnd2lkdGgnKVxuICAgICAgICBpZiAodGhpc1swXSkgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXNbMF0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUocHJvcHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gLmNzcyh7IHdpZHRoOiAnMTAwcHgnIH0pXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgZm9yICh2YXIgX3Byb3AgaW4gcHJvcHMpIHtcbiAgICAgICAgICAgIHRoaXNbaV0uc3R5bGVbX3Byb3BdID0gcHJvcHNbX3Byb3BdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBwcm9wcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIC5jc3MoJ3dpZHRoJywgJzEwMHB4JylcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHRoaXNbaV0uc3R5bGVbcHJvcHNdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gZWFjaChjYWxsYmFjaykge1xuICAgIGlmICghY2FsbGJhY2spIHJldHVybiB0aGlzO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoZWwsIGluZGV4KSB7XG4gICAgICBjYWxsYmFjay5hcHBseShlbCwgW2VsLCBpbmRleF0pO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlc3VsdCA9IGFycmF5RmlsdGVyKHRoaXMsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gJChyZXN1bHQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaHRtbChodG1sKSB7XG4gICAgaWYgKHR5cGVvZiBodG1sID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXNbMF0gPyB0aGlzWzBdLmlubmVySFRNTCA6IG51bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB0aGlzW2ldLmlubmVySFRNTCA9IGh0bWw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiB0ZXh0KHRleHQpIHtcbiAgICBpZiAodHlwZW9mIHRleHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdGhpc1swXSA/IHRoaXNbMF0udGV4dENvbnRlbnQudHJpbSgpIDogbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHRoaXNbaV0udGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gaXMoc2VsZWN0b3IpIHtcbiAgICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICB2YXIgZWwgPSB0aGlzWzBdO1xuICAgIHZhciBjb21wYXJlV2l0aDtcbiAgICB2YXIgaTtcbiAgICBpZiAoIWVsIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBmYWxzZTtcblxuICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoZWwubWF0Y2hlcykgcmV0dXJuIGVsLm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgICAgaWYgKGVsLndlYmtpdE1hdGNoZXNTZWxlY3RvcikgcmV0dXJuIGVsLndlYmtpdE1hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICBpZiAoZWwubXNNYXRjaGVzU2VsZWN0b3IpIHJldHVybiBlbC5tc01hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICBjb21wYXJlV2l0aCA9ICQoc2VsZWN0b3IpO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY29tcGFyZVdpdGgubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKGNvbXBhcmVXaXRoW2ldID09PSBlbCkgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0b3IgPT09IGRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gZWwgPT09IGRvY3VtZW50O1xuICAgIH1cblxuICAgIGlmIChzZWxlY3RvciA9PT0gd2luZG93KSB7XG4gICAgICByZXR1cm4gZWwgPT09IHdpbmRvdztcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0b3Iubm9kZVR5cGUgfHwgc2VsZWN0b3IgaW5zdGFuY2VvZiBEb203KSB7XG4gICAgICBjb21wYXJlV2l0aCA9IHNlbGVjdG9yLm5vZGVUeXBlID8gW3NlbGVjdG9yXSA6IHNlbGVjdG9yO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY29tcGFyZVdpdGgubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKGNvbXBhcmVXaXRoW2ldID09PSBlbCkgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybi
24510BmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBpbmRleCgpIHtcbiAgICB2YXIgY2hpbGQgPSB0aGlzWzBdO1xuICAgIHZhciBpO1xuXG4gICAgaWYgKGNoaWxkKSB7XG4gICAgICBpID0gMDsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5cbiAgICAgIHdoaWxlICgoY2hpbGQgPSBjaGlsZC5wcmV2aW91c1NpYmxpbmcpICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSkgaSArPSAxO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gZXEoaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIGluZGV4ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIHRoaXM7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXG4gICAgaWYgKGluZGV4ID4gbGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuICQoW10pO1xuICAgIH1cblxuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHZhciByZXR1cm5JbmRleCA9IGxlbmd0aCArIGluZGV4O1xuICAgICAgaWYgKHJldHVybkluZGV4IDwgMCkgcmV0dXJuICQoW10pO1xuICAgICAgcmV0dXJuICQoW3RoaXNbcmV0dXJuSW5kZXhdXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICQoW3RoaXNbaW5kZXhdXSk7XG4gIH1cblxuICBmdW5jdGlvbiBhcHBlbmQoKSB7XG4gICAgdmFyIG5ld0NoaWxkO1xuICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IGFyZ3VtZW50cy5sZW5ndGg7IGsgKz0gMSkge1xuICAgICAgbmV3Q2hpbGQgPSBrIDwgMCB8fCBhcmd1bWVudHMubGVuZ3RoIDw9IGsgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNba107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZhciB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgdGVtcERpdi5pbm5lckhUTUwgPSBuZXdDaGlsZDtcblxuICAgICAgICAgIHdoaWxlICh0ZW1wRGl2LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIHRoaXNbaV0uYXBwZW5kQ2hpbGQodGVtcERpdi5maXJzdENoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3Q2hpbGQgaW5zdGFuY2VvZiBEb203KSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuZXdDaGlsZC5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgICAgdGhpc1tpXS5hcHBlbmRDaGlsZChuZXdDaGlsZFtqXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXNbaV0uYXBwZW5kQ2hpbGQobmV3Q2hpbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiBwcmVwZW5kKG5ld0NoaWxkKSB7XG4gICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICB2YXIgaTtcbiAgICB2YXIgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJykge1xuICAgICAgICB2Y
24510XIgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0ZW1wRGl2LmlubmVySFRNTCA9IG5ld0NoaWxkO1xuXG4gICAgICAgIGZvciAoaiA9IHRlbXBEaXYuY2hpbGROb2Rlcy5sZW5ndGggLSAxOyBqID49IDA7IGogLT0gMSkge1xuICAgICAgICAgIHRoaXNbaV0uaW5zZXJ0QmVmb3JlKHRlbXBEaXYuY2hpbGROb2Rlc1tqXSwgdGhpc1tpXS5jaGlsZE5vZGVzWzBdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChuZXdDaGlsZCBpbnN0YW5jZW9mIERvbTcpIHtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IG5ld0NoaWxkLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgICAgdGhpc1tpXS5pbnNlcnRCZWZvcmUobmV3Q2hpbGRbal0sIHRoaXNbaV0uY2hpbGROb2Rlc1swXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbaV0uaW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCB0aGlzW2ldLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gbmV4dChzZWxlY3Rvcikge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICBpZiAodGhpc1swXS5uZXh0RWxlbWVudFNpYmxpbmcgJiYgJCh0aGlzWzBdLm5leHRFbGVtZW50U2libGluZykuaXMoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgcmV0dXJuICQoW3RoaXNbMF0ubmV4dEVsZW1lbnRTaWJsaW5nXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJChbXSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzWzBdLm5leHRFbGVtZW50U2libGluZykgcmV0dXJuICQoW3RoaXNbMF0ubmV4dEVsZW1lbnRTaWJsaW5nXSk7XG4gICAgICByZXR1cm4gJChbXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICQoW10pO1xuICB9XG5cbiAgZnVuY3Rpb24gbmV4dEFsbChzZWxlY3Rvcikge1xuICAgIHZhciBuZXh0RWxzID0gW107XG4gICAgdmFyIGVsID0gdGhpc1swXTtcbiAgICBpZiAoIWVsKSByZXR1cm4gJChbXSk7XG5cbiAgICB3aGlsZSAoZWwubmV4dEVsZW1lbnRTaWJsaW5nKSB7XG4gICAgICB2Y
24510XIgX25leHQgPSBlbC5uZXh0RWxlbWVudFNpYmxpbmc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIGlmICgkKF9uZXh0KS5pcyhzZWxlY3RvcikpIG5leHRFbHMucHVzaChfbmV4dCk7XG4gICAgICB9IGVsc2UgbmV4dEVscy5wdXNoKF9uZXh0KTtcblxuICAgICAgZWwgPSBfbmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gJChuZXh0RWxzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZXYoc2VsZWN0b3IpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzWzBdO1xuXG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYgJChlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKS5pcyhzZWxlY3RvcikpIHtcbiAgICAgICAgICByZXR1cm4gJChbZWwucHJldmlvdXNFbGVtZW50U2libGluZ10pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICQoW10pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWwucHJldmlvdXNFbGVtZW50U2libGluZykgcmV0dXJuICQoW2VsLnByZXZpb3VzRWxlbWVudFNpYmxpbmddKTtcbiAgICAgIHJldHVybiAkKFtdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJChbXSk7XG4gIH1cblxuICBmdW5jdGlvbiBwcmV2QWxsKHNlbGVjdG9yKSB7XG4gICAgdmFyIHByZXZFbHMgPSBbXTtcbiAgICB2YXIgZWwgPSB0aGlzWzBdO1xuICAgIGlmICghZWwpIHJldHVybiAkKFtdKTtcblxuICAgIHdoaWxlIChlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XG4gICAgICB2Y
24510XIgX3ByZXYgPSBlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICBpZiAoJChfcHJldikuaXMoc2VsZWN0b3IpKSBwcmV2RWxzLnB1c2goX3ByZXYpO1xuICAgICAgfSBlbHNlIHByZXZFbHMucHVzaChfcHJldik7XG5cbiAgICAgIGVsID0gX3ByZXY7XG4gICAgfVxuXG4gICAgcmV0dXJuICQocHJldkVscyk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJlbnQoc2VsZWN0b3IpIHtcbiAgICB2YXIgcGFyZW50cyA9IFtdOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICh0aGlzW2ldLnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgICAgaWYgKCQodGhpc1tpXS5wYXJlbnROb2RlKS5pcyhzZWxlY3RvcikpIHBhcmVudHMucHVzaCh0aGlzW2ldLnBhcmVudE5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmVudHMucHVzaCh0aGlzW2ldLnBhcmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICQocGFyZW50cyk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJlbnRzKHNlbGVjdG9yKSB7XG4gICAgdmFyIHBhcmVudHMgPSBbXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2Y
24510XIgX3BhcmVudCA9IHRoaXNbaV0ucGFyZW50Tm9kZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgICB3aGlsZSAoX3BhcmVudCkge1xuICAgICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgICBpZiAoJChfcGFyZW50KS5pcyhzZWxlY3RvcikpIHBhcmVudHMucHVzaChfcGFyZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJlbnRzLnB1c2goX3BhcmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBfcGFyZW50ID0gX3BhcmVudC5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAkKHBhcmVudHMpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VzdChzZWxlY3Rvcikge1xuICAgIHZhciBjbG9zZXN0ID0gdGhpczsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiAkKFtdKTtcbiAgICB9XG5cbiAgICBpZiAoIWNsb3Nlc3QuaXMoc2VsZWN0b3IpKSB7XG4gICAgICBjbG9zZXN0ID0gY2xvc2VzdC5wYXJlbnRzKHNlbGVjdG9yKS5lcSgwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xvc2VzdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmQoc2VsZWN0b3IpIHtcbiAgICB2YXIgZm91bmRFbGVtZW50cyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgZm91bmQgPSB0aGlzW2ldLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKHNlbGVjdG9yKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmb3VuZC5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICBmb3VuZEVsZW1lbnRzLnB1c2goZm91bmRbal0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAkKGZvdW5kRWxlbWVudHMpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hpbGRyZW4oc2VsZWN0b3IpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBbXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2Y
24510XIgY2hpbGROb2RlcyA9IHRoaXNbaV0uY2hpbGRyZW47XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2hpbGROb2Rlcy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICBpZiAoIXNlbGVjdG9yIHx8ICQoY2hpbGROb2Rlc1tqXSkuaXMoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZE5vZGVzW2pdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAkKGNoaWxkcmVuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICh0aGlzW2ldLnBhcmVudE5vZGUpIHRoaXNbaV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZhciBNZXRob2RzID0ge1xuICAgIGFkZENsYXNzOiBhZGRDbGFzcyxcbiAgICByZW1vdmVDbGFzczogcmVtb3ZlQ2xhc3MsXG4gICAgaGFzQ2xhc3M6IGhhc0NsYXNzLFxuICAgIHRvZ2dsZUNsYXNzOiB0b2dnbGVDbGFzcyxcbiAgICBhdHRyOiBhdHRyLFxuICAgIHJlbW92ZUF0dHI6IHJlbW92ZUF0dHIsXG4gICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0sXG4gICAgdHJhbnNpdGlvbjogdHJhbnNpdGlvbiQxLFxuICAgIG9uOiBvbixcbiAgICBvZmY6IG9mZixcbiAgICB0cmlnZ2VyOiB0cmlnZ2VyLFxuICAgIHRyYW5zaXRpb25FbmQ6IHRyYW5zaXRpb25FbmQkMSxcbiAgICBvdXRlcldpZHRoOiBvdXRlcldpZHRoLFxuICAgIG91dGVySGVpZ2h0OiBvdXRlckhlaWdodCxcbiAgICBzdHlsZXM6IHN0eWxlcyxcbiAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICBjc3M6IGNzcyxcbiAgICBlYWNoOiBlYWNoLFxuICAgIGh0bWw6IGh0bWwsXG4gICAgdGV4dDogdGV4dCxcbiAgICBpczogaXMsXG4gICAgaW5kZXg6IGluZGV4LFxuICAgIGVxOiBlcSxcbiAgICBhcHBlbmQ6IGFwcGVuZCxcbiAgICBwcmVwZW5kOiBwcmVwZW5kLFxuICAgIG5leHQ6IG5leHQsXG4gICAgbmV4dEFsbDogbmV4dEFsbCxcbiAgICBwcmV2OiBwcmV2LFxuICAgIHByZXZBbGw6IHByZXZBbGwsXG4gICAgcGFyZW50OiBwYXJlbnQsXG4gICAgcGFyZW50czogcGFyZW50cyxcbiAgICBjbG9zZXN0OiBjbG9zZXN0LFxuICAgIGZpbmQ6IGZpbmQsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGZpbHRlcjogZmlsdGVyLFxuICAgIHJlbW92ZTogcmVtb3ZlXG4gIH07XG4gIE9iamVjdC5rZXlzKE1ldGhvZHMpLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZE5hbWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoJC5mbiwgbWV0aG9kTmFtZSwge1xuICAgICAgdmFsdWU6IE1ldGhvZHNbbWV0aG9kTmFtZV0sXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9KTtcblxuICBmdW5jdGlvbiBkZWxldGVQcm9wcyhvYmopIHtcbiAgICB2YXIgb2JqZWN0ID0gb2JqO1xuICAgIE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB0cnkge1xuICAgICAgICBvYmplY3Rba2V5XSA9IG51bGw7XG4gICAgICB9IGNhdGNoIChlKSB7Ly8gbm8gZ2V0dGVyIGZvciBvYmplY3RcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgZGVsZXRlIG9iamVjdFtrZXldO1xuICAgICAgfSBjYXRjaCAoZSkgey8vIHNvbWV0aGluZyBnb3Qgd3JvbmdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5leHRUaWNrKGNhbGxiYWNrLCBkZWxheSkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7XG4gICAgICBkZWxheSA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vdygpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUkMShlbCkge1xuICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgICB2YXIgc3R5bGU7XG5cbiAgICBpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUpIHtcbiAgICAgIHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpO1xuICAgIH1cblxuICAgIGlmICghc3R5bGUgJiYgZWwuY3VycmVudFN0eWxlKSB7XG4gICAgICBzdHlsZSA9IGVsLmN1cnJlbnRTdHlsZTtcbiAgICB9XG5cbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICBzdHlsZSA9IGVsLnN0eWxlO1xuICAgIH1cblxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFRyYW5zbGF0ZShlbCwgYXhpcykge1xuICAgIGlmIChheGlzID09PSB2b2lkIDApIHtcbiAgICAgIGF4aXMgPSAneCc7XG4gICAgfVxuXG4gICAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICAgIHZhciBtYXRyaXg7XG4gICAgdmFyIGN1clRyYW5zZm9ybTtcbiAgICB2YXIgdHJhbnNmb3JtTWF0cml4O1xuICAgIHZhciBjdXJTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUkMShlbCk7XG5cbiAgICBpZiAod2luZG93LldlYktpdENTU01hdHJpeCkge1xuICAgICAgY3VyVHJhbnNmb3JtID0gY3VyU3R5bGUudHJhbnNmb3JtIHx8IGN1clN0eWxlLndlYmtpdFRyYW5zZm9ybTtcblxuICAgICAgaWYgKGN1clRyYW5zZm9ybS5zcGxpdCgnLCcpLmxlbmd0aCA+IDYpIHtcbiAgICAgICAgY3VyVHJhbnNmb3JtID0gY3VyVHJhbnNmb3JtLnNwbGl0KCcsICcpLm1hcChmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIHJldHVybiBhLnJlcGxhY2UoJywnLCAnLicpO1xuICAgICAgICB9KS5qb2luKCcsICcpO1xuICAgICAgfSAvLyBTb21lIG9sZCB2ZXJzaW9ucyBvZiBXZWJraXQgY2hva2Ugd2hlbiAnbm9uZScgaXMgcGFzc2VkOyBwYXNzXG4gICAgICAvLyBlbXB0eSBzdHJpbmcgaW5zdGVhZCBpbiB0aGlzIGNhc2VcblxuXG4gICAgICB0cmFuc2Zvcm1NYXRyaXggPSBuZXcgd2luZG93LldlYktpdENTU01hdHJpeChjdXJUcmFuc2Zvcm0gPT09ICdub25lJyA/ICcnIDogY3VyVHJhbnNmb3JtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJhbnNmb3JtTWF0cml4ID0gY3VyU3R5bGUuTW96VHJhbnNmb3JtIHx8IGN1clN0eWxlLk9UcmFuc2Zvcm0gfHwgY3VyU3R5bGUuTXNUcmFuc2Zvcm0gfHwgY3VyU3R5bGUubXNUcmFuc2Zvcm0gfHwgY3VyU3R5bGUudHJhbnNmb3JtIHx8IGN1clN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3RyYW5zZm9ybScpLnJlcGxhY2UoJ3RyYW5zbGF0ZSgnLCAnbWF0cml4KDEsIDAsIDAsIDEsJyk7XG4gICAgICBtYXRyaXggPSB0cmFuc2Zvcm1NYXRyaXgudG9TdHJpbmc
24510oKS5zcGxpdCgnLCcpO1xuICAgIH1cblxuICAgIGlmIChheGlzID09PSAneCcpIHtcbiAgICAgIC8vIExhdGVzdCBDaHJvbWUgYW5kIHdlYmtpdHMgRml4XG4gICAgICBpZiAod2luZG93LldlYktpdENTU01hdHJpeCkgY3VyVHJhbnNmb3JtID0gdHJhbnNmb3JtTWF0cml4Lm00MTsgLy8gQ3JhenkgSUUxMCBNYXRyaXhcbiAgICAgIGVsc2UgaWYgKG1hdHJpeC5sZW5ndGggPT09IDE2KSBjdXJUcmFuc2Zvcm0gPSBwYXJzZUZsb2F0KG1hdHJpeFsxMl0pOyAvLyBOb3JtYWwgQnJvd3NlcnNcbiAgICAgICAgZWxzZSBjdXJUcmFuc2Zvcm0gPSBwYXJzZUZsb2F0KG1hdHJpeFs0XSk7XG4gICAgfVxuXG4gICAgaWYgKGF4aXMgPT09ICd5Jykge1xuICAgICAgLy8gTGF0ZXN0IENocm9tZSBhbmQgd2Via2l0cyBGaXhcbiAgICAgIGlmICh3aW5kb3cuV2ViS2l0Q1NTTWF0cml4KSBjdXJUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1NYXRyaXgubTQyOyAvLyBDcmF6eSBJRTEwIE1hdHJpeFxuICAgICAgZWxzZSBpZiAobWF0cml4Lmxlbmd0aCA9PT0gMTYpIGN1clRyYW5zZm9ybSA9IHBhcnNlRmxvYXQobWF0cml4WzEzXSk7IC8vIE5vcm1hbCBCcm93c2Vyc1xuICAgICAgICBlbHNlIGN1clRyYW5zZm9ybSA9IHBhcnNlRmxvYXQobWF0cml4WzVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VyVHJhbnNmb3JtIHx8IDA7XG4gIH1cblxuICBmdW5jdGlvbiBpc09iamVjdChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBvICE9PSBudWxsICYmIG8uY29uc3RydWN0b3IgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKSA9PT0gJ09iamVjdCc7XG4gIH1cblxuICBmdW5jdGlvbiBleHRlbmQoKSB7XG4gICAgdmFyIHRvID0gT2JqZWN0KGFyZ3VtZW50cy5sZW5ndGggPD0gMCA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1swXSk7XG4gICAgdmFyIG5vRXh0ZW5kID0gWydfX3Byb3RvX18nLCAnY29uc3RydWN0b3InLCAncHJvdG90eXBlJ107XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIG5leHRTb3VyY2UgPSBpIDwgMCB8fCBhcmd1bWVudHMubGVuZ3RoIDw9IGkgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbaV07XG5cbiAgICAgIGlmIChuZXh0U291cmNlICE9PSB1bmRlZmluZWQgJiYgbmV4dFNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICB2Y
24510XIga2V5c0FycmF5ID0gT2JqZWN0LmtleXMoT2JqZWN0KG5leHRTb3VyY2UpKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJldHVybiBub0V4dGVuZC5pbmRleE9mKGtleSkgPCAwO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKHZhciBuZXh0SW5kZXggPSAwLCBsZW4gPSBrZXlzQXJyYXkubGVuZ3RoOyBuZXh0SW5kZXggPCBsZW47IG5leHRJbmRleCArPSAxKSB7XG4gICAgICAgICAgdmFyIG5leHRLZXkgPSBrZXlzQXJyYXlbbmV4dEluZGV4XTtcbiAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmV4dFNvdXJjZSwgbmV4dEtleSk7XG5cbiAgICAgICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkICYmIGRlc2MuZW51bWVyYWJsZSkge1xuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHRvW25leHRLZXldKSAmJiBpc09iamVjdChuZXh0U291cmNlW25leHRLZXldKSkge1xuICAgICAgICAgICAgICBpZiAobmV4dFNvdXJjZVtuZXh0S2V5XS5fX3N3aXBlcl9fKSB7XG4gICAgICAgICAgICAgICAgdG9bbmV4dEtleV0gPSBuZXh0U291cmNlW25leHRLZXldO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4dGVuZCh0b1tuZXh0S2V5XSwgbmV4dFNvdXJjZVtuZXh0S2V5XSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzT2JqZWN0KHRvW25leHRLZXldKSAmJiBpc09iamVjdChuZXh0U291cmNlW25leHRLZXldKSkge1xuICAgICAgICAgICAgICB0b1tuZXh0S2V5XSA9IHt9O1xuXG4gICAgICAgICAgICAgIGlmIChuZXh0U291cmNlW25leHRLZXldLl9fc3dpcGVyX18pIHtcbiAgICAgICAgICAgICAgICB0b1tuZXh0S2V5XSA9IG5leHRTb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXh0ZW5kKHRvW25leHRLZXldLCBuZXh0U291cmNlW25leHRLZXldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdG9bbmV4dEtleV0gPSBuZXh0U291cmNlW25leHRLZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0bztcbiAgfVxuXG4gIGZ1bmN0aW9uIGJpbmRNb2R1bGVNZXRob2RzKGluc3RhbmNlLCBvYmopIHtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgaWYgKGlzT2JqZWN0KG9ialtrZXldKSkge1xuICAgICAgICBPYmplY3Qua2V5cyhvYmpba2V5XSkuZm9yRWFjaChmdW5jdGlvbiAoc3ViS2V5KSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBvYmpba2V5XVtzdWJLZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBvYmpba2V5XVtzdWJLZXldID0gb2JqW2tleV1bc3ViS2V5XS5iaW5kKGluc3RhbmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZVtrZXldID0gb2JqW2tleV07XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGFzc2VzVG9TZWxlY3RvcihjbGFzc2VzKSB7XG4gICAgaWYgKGNsYXNzZXMgPT09IHZvaWQgMCkge1xuICAgICAgY2xhc3NlcyA9ICcnO1xuICAgIH1cblxuICAgIHJldHVybiBcIi5cIiArIGNsYXNzZXMudHJpbSgpLnJlcGxhY2UoLyhbXFwuOlxcL10pL2csICdcXFxcJDEnKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgLnJlcGxhY2UoLyAvZywgJy4nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRJZk5vdERlZmluZWQoJGNvbnRhaW5lciwgcGFyYW1zLCBjcmVhdGVFbGVtZW50cywgY2hlY2tQcm9wcykge1xuICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cbiAgICBpZiAoY3JlYXRlRWxlbWVudHMpIHtcbiAgICAgIE9iamVjdC5rZXlzKGNoZWNrUHJvcHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIXBhcmFtc1trZXldICYmIHBhcmFtcy5hdXRvID09PSB0cnVlKSB7XG4gICAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGNoZWNrUHJvcHNba2V5XTtcbiAgICAgICAgICAkY29udGFpbmVyLmFwcGVuZChlbGVtZW50KTtcbiAgICAgICAgICBwYXJhbXNba2V5XSA9IGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICB2YXIgc3VwcG9ydDtcblxuICBmdW5jdGlvbiBjYWxjU3VwcG9ydCgpIHtcbiAgICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdG91Y2g6ICEhKCdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdyB8fCB3aW5kb3cuRG9jdW1lbnRUb3VjaCAmJiBkb2N1bWVudCBpbnN0YW5jZW9mIHdpbmRvdy5Eb2N1bWVudFRvdWNoKSxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICEhd2luZG93LlBvaW50ZXJFdmVudCAmJiAnbWF4VG91Y2hQb2ludHMnIGluIHdpbmRvdy5uYXZpZ2F0b3IgJiYgd2luZG93Lm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+PSAwLFxuICAgICAgb2JzZXJ2ZXI6IGZ1bmN0aW9uIGNoZWNrT2JzZXJ2ZXIoKSB7XG4gICAgICAgIHJldHVybiAnTXV0YXRpb25PYnNlcnZlcicgaW4gd2luZG93IHx8ICdXZWJraXRNdXRhdGlvbk9ic2VydmVyJyBpbiB3aW5kb3c7XG4gICAgICB9KCksXG4gICAgICBwYXNzaXZlTGlzdGVuZXI6IGZ1bmN0aW9uIGNoZWNrUGFzc2l2ZUxpc3RlbmVyKCkge1xuICAgICAgICB2Y
24510XIgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgb3B0cyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICBzdXBwb3J0c1Bhc3NpdmUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0UGFzc2l2ZUxpc3RlbmVyJywgbnVsbCwgb3B0cyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsvLyBObyBzdXBwb3J0XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VwcG9ydHNQYXNzaXZlO1xuICAgICAgfSgpLFxuICAgICAgZ2VzdHVyZXM6IGZ1bmN0aW9uIGNoZWNrR2VzdHVyZXMoKSB7XG4gICAgICAgIHJldHVybiAnb25nZXN0dXJlc3RhcnQnIGluIHdpbmRvdztcbiAgICAgIH0oKVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTdXBwb3J0KCkge1xuICAgIGlmICghc3VwcG9ydCkge1xuICAgICAgc3VwcG9ydCA9IGNhbGNTdXBwb3J0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cHBvcnQ7XG4gIH1cblxuICB2YXIgZGV2aWNlO1xuXG4gIGZ1bmN0aW9uIGNhbGNEZXZpY2UoX3RlbXApIHtcbiAgICB2YXIgX3JlZiA9IF90ZW1wID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wLFxuICAgICAgICB1c2VyQWdlbnQgPSBfcmVmLnVzZXJBZ2VudDtcblxuICAgIHZhciBzdXBwb3J0ID0gZ2V0U3VwcG9ydCgpO1xuICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgICB2YXIgcGxhdGZvcm0gPSB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtO1xuICAgIHZhciB1YSA9IHVzZXJBZ2VudCB8fCB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICB2YXIgZGV2aWNlID0ge1xuICAgICAgaW9zOiBmYWxzZSxcbiAgICAgIGFuZHJvaWQ6IGZhbHNlXG4gICAgfTtcbiAgICB2YXIgc2NyZWVuV2lkdGggPSB3aW5kb3cuc2NyZWVuLndpZHRoO1xuICAgIHZhciBzY3JlZW5IZWlnaHQgPSB3aW5kb3cuc2NyZWVuLmhlaWdodDtcbiAgICB2YXIgYW5kcm9pZCA9IHVhLm1hdGNoKC8oQW5kcm9pZCk7P1tcXHNcXC9dKyhbXFxkLl0rKT8vKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgdmFyIGlwYWQgPSB1YS5tYXRjaCgvKGlQYWQpLipPU1xccyhbXFxkX10rKS8pO1xuICAgIHZhciBpcG9kID0gdWEubWF0Y2goLyhpUG9kKSguKk9TXFxzKFtcXGRfXSspKT8vKTtcbiAgICB2YXIgaXBob25lID0gIWlwYWQgJiYgdWEubWF0Y2goLyhpUGhvbmVcXHNPU3xpT1MpXFxzKFtcXGRfXSspLyk7XG4gICAgdmFyIHdpbmRvd3MgPSBwbGF0Zm9ybSA9PT0gJ1dpbjMyJztcbiAgICB2YXIgbWFjb3MgPSBwbGF0Zm9ybSA9PT0gJ01hY0ludGVsJzsgLy8gaVBhZE9zIDEzIGZpeFxuXG4gICAgdmFyIGlQYWRTY3JlZW5zID0gWycxMDI0eDEzNjYnLCAnMTM2NngxMDI0JywgJzgzNHgxMTk0JywgJzExOTR4ODM0JywgJzgzNHgxMTEyJywgJzExMTJ4ODM0JywgJzc2OHgxMDI0JywgJzEwMjR4NzY4JywgJzgyMHgxMTgwJywgJzExODB4ODIwJywgJzgxMHgxMDgwJywgJzEwODB4ODEwJ107XG5cbiAgICBpZiAoIWlwYWQgJiYgbWFjb3MgJiYgc3VwcG9ydC50b3VjaCAmJiBpUGFkU2NyZWVucy5pbmRleE9mKHNjcmVlbldpZHRoICsgXCJ4XCIgKyBzY3JlZW5IZWlnaHQpID49IDApIHtcbiAgICAgIGlwYWQgPSB1YS5tYXRjaCgvKFZlcnNpb24pXFwvKFtcXGQuXSspLyk7XG4gICAgICBpZiAoIWlwYWQpIGlwYWQgPSBbMCwgMSwgJzEzXzBfMCddO1xuICAgICAgbWFjb3MgPSBmYWxzZTtcbiAgICB9IC8vIEFuZHJvaWRcblxuXG4gICAgaWYgKGFuZHJvaWQgJiYgIXdpbmRvd3MpIHtcbiAgICAgIGRldmljZS5vcyA9ICdhbmRyb2lkJztcbiAgICAgIGRldmljZS5hbmRyb2lkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXBhZCB8fCBpcGhvbmUgfHwgaXBvZCkge1xuICAgICAgZGV2aWNlLm9zID0gJ2lvcyc7XG4gICAgICBkZXZpY2UuaW9zID0gdHJ1ZTtcbiAgICB9IC8vIEV4cG9ydCBvYmplY3RcblxuXG4gICAgcmV0dXJuIGRldmljZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERldmljZShvdmVycmlkZXMpIHtcbiAgICBpZiAob3ZlcnJpZGVzID09PSB2b2lkIDApIHtcbiAgICAgIG92ZXJyaWRlcyA9IHt9O1xuICAgIH1cblxuICAgIGlmICghZGV2aWNlKSB7XG4gICAgICBkZXZpY2UgPSBjYWxjRGV2aWNlKG92ZXJyaWRlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRldmljZTtcbiAgfVxuXG4gIHZhciBicm93c2VyO1xuXG4gIGZ1bmN0aW9uIGNhbGNCcm93c2VyKCkge1xuICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuICAgIGZ1bmN0aW9uIGlzU2FmYXJpKCkge1xuICAgICAgdmFyIHVhID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiB1YS5pbmRleE9mKCdzYWZhcmknKSA+PSAwICYmIHVhLmluZGV4T2YoJ2Nocm9tZScpIDwgMCAmJiB1YS5pbmRleE9mKCdhbmRyb2lkJykgPCAwO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpc0VkZ2U6ICEhd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0VkZ2UvZyksXG4gICAgICBpc1NhZmFyaTogaXNTYWZhcmkoKSxcbiAgICAgIGlzV2ViVmlldzogLyhpUGhvbmV8aVBvZHxpUGFkKS4qQXBwbGVXZWJLaXQoPyEuKlNhZmFyaSkvaS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRCcm93c2VyKCkge1xuICAgIGlmICghYnJvd3Nlcikge1xuICAgICAgYnJvd3NlciA9IGNhbGNCcm93c2VyKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJyb3dzZXI7XG4gIH1cblxuICB2YXIgc3VwcG9ydHNSZXNpemVPYnNlcnZlciA9IGZ1bmN0aW9uIHN1cHBvcnRzUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICAgIHJldHVybiB0eXBlb2Ygd2luZG93LlJlc2l6ZU9ic2VydmVyICE9PSAndW5kZWZpbmVkJztcbiAgfTtcblxuICB2Y
24510XIgUmVzaXplID0ge1xuICAgIG5hbWU6ICdyZXNpemUnLFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBleHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIHJlc2l6ZToge1xuICAgICAgICAgIG9ic2VydmVyOiBudWxsLFxuICAgICAgICAgIGNyZWF0ZU9ic2VydmVyOiBmdW5jdGlvbiBjcmVhdGVPYnNlcnZlcigpIHtcbiAgICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci5pbml0aWFsaXplZCkgcmV0dXJuO1xuICAgICAgICAgICAgc3dpcGVyLnJlc2l6ZS5vYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihmdW5jdGlvbiAoZW50cmllcykge1xuICAgICAgICAgICAgICB2YXIgd2lkdGggPSBzd2lwZXIud2lkdGgsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQgPSBzd2lwZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICB2YXIgbmV3V2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgdmFyIG5ld0hlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRCb3hTaXplID0gX3JlZi5jb250ZW50Qm94U2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudFJlY3QgPSBfcmVmLmNvbnRlbnRSZWN0LFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBfcmVmLnRhcmdldDtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldCAhPT0gc3dpcGVyLmVsKSByZXR1cm47XG4gICAgICAgICAgICAgICAgbmV3V2lkdGggPSBjb250ZW50UmVjdCA/IGNvbnRlbnRSZWN0LndpZHRoIDogKGNvbnRlbnRCb3hTaXplWzBdIHx8IGNvbnRlbnRCb3hTaXplKS5pbmxpbmVTaXplO1xuICAgICAgICAgICAgICAgIG5ld0hlaWdodCA9IGNvbnRlbnRSZWN0ID8gY29udGVudFJlY3QuaGVpZ2h0IDogKGNvbnRlbnRCb3hTaXplWzBdIHx8IGNvbnRlbnRCb3hTaXplKS5ibG9ja1NpemU7XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChuZXdXaWR0aCAhPT0gd2lkdGggfHwgbmV3SGVpZ2h0ICE9PSBoZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBzd2lwZXIucmVzaXplLnJlc2l6ZUhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzd2lwZXIucmVzaXplLm9ic2VydmVyLm9ic2VydmUoc3dpcGVyLmVsKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlbW92ZU9ic2VydmVyOiBmdW5jdGlvbiByZW1vdmVPYnNlcnZlcigpIHtcbiAgICAgICAgICAgIGlmIChzd2lwZXIucmVzaXplLm9ic2VydmVyICYmIHN3aXBlci5yZXNpemUub2JzZXJ2ZXIudW5vYnNlcnZlICYmIHN3aXBlci5lbCkge1xuICAgICAgICAgICAgICBzd2lwZXIucmVzaXplLm9ic2VydmVyLnVub2JzZXJ2ZShzd2lwZXIuZWwpO1xuICAgICAgICAgICAgICBzd2lwZXIucmVzaXplLm9ic2VydmVyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2l6ZUhhbmRsZXI6IGZ1bmN0aW9uIHJlc2l6ZUhhbmRsZXIoKSB7XG4gICAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkIHx8ICFzd2lwZXIuaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCdiZWZvcmVSZXNpemUnKTtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCdyZXNpemUnKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9yaWVudGF0aW9uQ2hhbmdlSGFuZGxlcjogZnVuY3Rpb24gb3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKCkge1xuICAgICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCAhc3dpcGVyLmluaXRpYWxpemVkKSByZXR1cm47XG4gICAgICAgICAgICBzd2lwZXIuZW1pdCgnb3JpZW50YXRpb25jaGFuZ2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoc3dpcGVyKSB7XG4gICAgICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5yZXNpemVPYnNlcnZlciAmJiBzdXBwb3J0c1Jlc2l6ZU9ic2VydmVyKCkpIHtcbiAgICAgICAgICBzd2lwZXIucmVzaXplLmNyZWF0ZU9ic2VydmVyKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIEVtaXQgcmVzaXplXG5cblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgc3dpcGVyLnJlc2l6ZS5yZXNpemVIYW5kbGVyKTsgLy8gRW1pdCBvcmllbnRhdGlvbmNoYW5nZVxuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIHN3aXBlci5yZXNpemUub3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKTtcbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KHN3aXBlcikge1xuICAgICAgICB2Y
24510XIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgICAgIHN3aXBlci5yZXNpemUucmVtb3ZlT2JzZXJ2ZXIoKTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHN3aXBlci5yZXNpemUucmVzaXplSGFuZGxlcik7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIHN3aXBlci5yZXNpemUub3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIE9ic2VydmVyID0ge1xuICAgIGF0dGFjaDogZnVuY3Rpb24gYXR0YWNoKHRhcmdldCwgb3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgICB9XG5cbiAgICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIE9ic2VydmVyRnVuYyA9IHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyIHx8IHdpbmRvdy5XZWJraXRNdXRhdGlvbk9ic2VydmVyO1xuICAgICAgdmFyIG9ic2VydmVyID0gbmV3IE9ic2VydmVyRnVuYyhmdW5jdGlvbiAobXV0YXRpb25zKSB7XG4gICAgICAgIC8vIFRoZSBvYnNlcnZlclVwZGF0ZSBldmVudCBzaG91bGQgb25seSBiZSB0cmlnZ2VyZWRcbiAgICAgICAgLy8gb25jZSBkZXNwaXRlIHRoZSBudW1iZXIgb2YgbXV0YXRpb25zLiAgQWRkaXRpb25hbFxuICAgICAgICAvLyB0cmlnZ2VycyBhcmUgcmVkdW5kYW50IGFuZCBhcmUgdmVyeSBjb3N0bHlcbiAgICAgICAgaWYgKG11dGF0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnb2JzZXJ2ZXJVcGRhdGUnLCBtdXRhdGlvbnNbMF0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvYnNlcnZlclVwZGF0ZSA9IGZ1bmN0aW9uIG9ic2VydmVyVXBkYXRlKCkge1xuICAgICAgICAgIHN3aXBlci5lbWl0KCdvYnNlcnZlclVwZGF0ZScsIG11dGF0aW9uc1swXSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9ic2VydmVyVXBkYXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChvYnNlcnZlclVwZGF0ZSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXQsIHtcbiAgICAgICAgYXR0cmlidXRlczogdHlwZW9mIG9wdGlvbnMuYXR0cmlidXRlcyA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogb3B0aW9ucy5hdHRyaWJ1dGVzLFxuICAgICAgICBjaGlsZExpc3Q6IHR5cGVvZiBvcHRpb25zLmNoaWxkTGlzdCA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogb3B0aW9ucy5jaGlsZExpc3QsXG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHR5cGVvZiBvcHRpb25zLmNoYXJhY3RlckRhdGEgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IG9wdGlvbnMuY2hhcmFjdGVyRGF0YVxuICAgICAgfSk7XG4gICAgICBzd2lwZXIub2JzZXJ2ZXIub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgIH0sXG4gICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIuc3VwcG9ydC5vYnNlcnZlciB8fCAhc3dpcGVyLnBhcmFtcy5vYnNlcnZlcikgcmV0dXJuO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5vYnNlcnZlUGFyZW50cykge1xuICAgICAgICB2Y
24510XIgY29udGFpbmVyUGFyZW50cyA9IHN3aXBlci4kZWwucGFyZW50cygpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29udGFpbmVyUGFyZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIHN3aXBlci5vYnNlcnZlci5hdHRhY2goY29udGFpbmVyUGFyZW50c1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gT2JzZXJ2ZSBjb250YWluZXJcblxuXG4gICAgICBzd2lwZXIub2JzZXJ2ZXIuYXR0YWNoKHN3aXBlci4kZWxbMF0sIHtcbiAgICAgICAgY2hpbGRMaXN0OiBzd2lwZXIucGFyYW1zLm9ic2VydmVTbGlkZUNoaWxkcmVuXG4gICAgICB9KTsgLy8gT2JzZXJ2ZSB3cmFwcGVyXG5cbiAgICAgIHN3aXBlci5vYnNlcnZlci5hdHRhY2goc3dpcGVyLiR3cmFwcGVyRWxbMF0sIHtcbiAgICAgICAgYXR0cmlidXRlczogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgc3dpcGVyLm9ic2VydmVyLm9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9KTtcbiAgICAgIHN3aXBlci5vYnNlcnZlci5vYnNlcnZlcnMgPSBbXTtcbiAgICB9XG4gIH07XG4gIHZhciBPYnNlcnZlciQxID0ge1xuICAgIG5hbWU6ICdvYnNlcnZlcicsXG4gICAgcGFyYW1zOiB7XG4gICAgICBvYnNlcnZlcjogZmFsc2UsXG4gICAgICBvYnNlcnZlUGFyZW50czogZmFsc2UsXG4gICAgICBvYnNlcnZlU2xpZGVDaGlsZHJlbjogZmFsc2VcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBiaW5kTW9kdWxlTWV0aG9kcyhzd2lwZXIsIHtcbiAgICAgICAgb2JzZXJ2ZXI6IF9leHRlbmRzKHt9LCBPYnNlcnZlciwge1xuICAgICAgICAgIG9ic2VydmVyczogW11cbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoc3dpcGVyKSB7XG4gICAgICAgIHN3aXBlci5vYnNlcnZlci5pbml0KCk7XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveShzd2lwZXIpIHtcbiAgICAgICAgc3dpcGVyLm9ic2VydmVyLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIG1vZHVsYXIgPSB7XG4gICAgdXNlUGFyYW1zOiBmdW5jdGlvbiB1c2VQYXJhbXMoaW5zdGFuY2VQYXJhbXMpIHtcbiAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXM7XG4gICAgICBpZiAoIWluc3RhbmNlLm1vZHVsZXMpIHJldHVybjtcbiAgICAgIE9iamVjdC5rZXlzKGluc3RhbmNlLm1vZHVsZXMpLmZvckVhY2goZnVuY3Rpb24gKG1vZHVsZU5hbWUpIHtcbiAgICAgICAgdmFyIG1vZHVsZSA9IGluc3RhbmNlLm1vZHVsZXNbbW9kdWxlTmFtZV07IC8vIEV4dGVuZCBwYXJhbXNcblxuICAgICAgICBpZiAobW9kdWxlLnBhcmFtcykge1xuICAgICAgICAgIGV4dGVuZChpbnN0YW5jZVBhcmFtcywgbW9kdWxlLnBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdXNlTW9kdWxlczogZnVuY3Rpb24gdXNlTW9kdWxlcyhtb2R1bGVzUGFyYW1zKSB7XG4gICAgICBpZiAobW9kdWxlc1BhcmFtcyA9PT0gdm9pZCAwKSB7XG4gICAgICAgIG1vZHVsZXNQYXJhbXMgPSB7fTtcbiAgICAgIH1cblxuICAgICAgdmFyIGluc3RhbmNlID0gdGhpcztcbiAgICAgIGlmICghaW5zdGFuY2UubW9kdWxlcykgcmV0dXJuO1xuICAgICAgT2JqZWN0LmtleXMoaW5zdGFuY2UubW9kdWxlcykuZm9yRWFjaChmdW5jdGlvbiAobW9kdWxlTmFtZSkge1xuICAgICAgICB2Y
24510XIgbW9kdWxlID0gaW5zdGFuY2UubW9kdWxlc1ttb2R1bGVOYW1lXTtcbiAgICAgICAgdmFyIG1vZHVsZVBhcmFtcyA9IG1vZHVsZXNQYXJhbXNbbW9kdWxlTmFtZV0gfHwge307IC8vIEFkZCBldmVudCBsaXN0ZW5lcnNcblxuICAgICAgICBpZiAobW9kdWxlLm9uICYmIGluc3RhbmNlLm9uKSB7XG4gICAgICAgICAgT2JqZWN0LmtleXMobW9kdWxlLm9uKS5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGVFdmVudE5hbWUpIHtcbiAgICAgICAgICAgIGluc3RhbmNlLm9uKG1vZHVsZUV2ZW50TmFtZSwgbW9kdWxlLm9uW21vZHVsZUV2ZW50TmFtZV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IC8vIE1vZHVsZSBjcmVhdGUgY2FsbGJhY2tcblxuXG4gICAgICAgIGlmIChtb2R1bGUuY3JlYXRlKSB7XG4gICAgICAgICAgbW9kdWxlLmNyZWF0ZS5iaW5kKGluc3RhbmNlKShtb2R1bGVQYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbiAgdmFyIGV2ZW50c0VtaXR0ZXIgPSB7XG4gICAgb246IGZ1bmN0aW9uIG9uKGV2ZW50cywgaGFuZGxlciwgcHJpb3JpdHkpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHNlbGY7XG4gICAgICB2YXIgbWV0aG9kID0gcHJpb3JpdHkgPyAndW5zaGlmdCcgOiAncHVzaCc7XG4gICAgICBldmVudHMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBpZiAoIXNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSkgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdID0gW107XG4gICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XVttZXRob2RdKGhhbmRsZXIpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gc2VsZjtcbiAgICB9LFxuICAgIG9uY2U6IGZ1bmN0aW9uIG9uY2UoZXZlbnRzLCBoYW5kbGVyLCBwcmlvcml0eSkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gc2VsZjtcblxuICAgICAgZnVuY3Rpb24gb25jZUhhbmRsZXIoKSB7XG4gICAgICAgIHNlbGYub2ZmKGV2ZW50cywgb25jZUhhbmRsZXIpO1xuXG4gICAgICAgIGlmIChvbmNlSGFuZGxlci5fX2VtaXR0ZXJQcm94eSkge1xuICAgICAgICAgIGRlbGV0ZSBvbmNlSGFuZGxlci5fX2VtaXR0ZXJQcm94eTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVyLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgICAgfVxuXG4gICAgICBvbmNlSGFuZGxlci5fX2VtaXR0ZXJQcm94eSA9IGhhbmRsZXI7XG4gICAgICByZXR1cm4gc2VsZi5vbihldmVudHMsIG9uY2VIYW5kbGVyLCBwcmlvcml0eSk7XG4gICAgfSxcbiAgICBvbkFueTogZnVuY3Rpb24gb25BbnkoaGFuZGxlciwgcHJpb3JpdHkpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHNlbGY7XG4gICAgICB2Y
24510XIgbWV0aG9kID0gcHJpb3JpdHkgPyAndW5zaGlmdCcgOiAncHVzaCc7XG5cbiAgICAgIGlmIChzZWxmLmV2ZW50c0FueUxpc3RlbmVycy5pbmRleE9mKGhhbmRsZXIpIDwgMCkge1xuICAgICAgICBzZWxmLmV2ZW50c0FueUxpc3RlbmVyc1ttZXRob2RdKGhhbmRsZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2VsZjtcbiAgICB9LFxuICAgIG9mZkFueTogZnVuY3Rpb24gb2ZmQW55KGhhbmRsZXIpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIGlmICghc2VsZi5ldmVudHNBbnlMaXN0ZW5lcnMpIHJldHVybiBzZWxmO1xuICAgICAgdmFyIGluZGV4ID0gc2VsZi5ldmVudHNBbnlMaXN0ZW5lcnMuaW5kZXhPZihoYW5kbGVyKTtcblxuICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgc2VsZi5ldmVudHNBbnlMaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfSxcbiAgICBvZmY6IGZ1bmN0aW9uIG9mZihldmVudHMsIGhhbmRsZXIpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIGlmICghc2VsZi5ldmVudHNMaXN0ZW5lcnMpIHJldHVybiBzZWxmO1xuICAgICAgZXZlbnRzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSkge1xuICAgICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudEhhbmRsZXIsIGluZGV4KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnRIYW5kbGVyID09PSB
24510oYW5kbGVyIHx8IGV2ZW50SGFuZGxlci5fX2VtaXR0ZXJQcm94eSAmJiBldmVudEhhbmRsZXIuX19lbWl0dGVyUHJveHkgPT09IGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbiBlbWl0KCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVycykgcmV0dXJuIHNlbGY7XG4gICAgICB2YXIgZXZlbnRzO1xuICAgICAgdmFyIGRhdGE7XG4gICAgICB2YXIgY29udGV4dDtcblxuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KGFyZ3NbMF0pKSB7XG4gICAgICAgIGV2ZW50cyA9IGFyZ3NbMF07XG4gICAgICAgIGRhdGEgPSBhcmdzLnNsaWNlKDEsIGFyZ3MubGVuZ3RoKTtcbiAgICAgICAgY29udGV4dCA9IHNlbGY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudHMgPSBhcmdzWzBdLmV2ZW50cztcbiAgICAgICAgZGF0YSA9IGFyZ3NbMF0uZGF0YTtcbiAgICAgICAgY29udGV4dCA9IGFyZ3NbMF0uY29udGV4dCB8fCBzZWxmO1xuICAgICAgfVxuXG4gICAgICBkYXRhLnVuc2hpZnQoY29udGV4dCk7XG4gICAgICB2Y
24510XIgZXZlbnRzQXJyYXkgPSBBcnJheS5pc0FycmF5KGV2ZW50cykgPyBldmVudHMgOiBldmVudHMuc3BsaXQoJyAnKTtcbiAgICAgIGV2ZW50c0FycmF5LmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmIChzZWxmLmV2ZW50c0FueUxpc3RlbmVycyAmJiBzZWxmLmV2ZW50c0FueUxpc3RlbmVycy5sZW5ndGgpIHtcbiAgICAgICAgICBzZWxmLmV2ZW50c0FueUxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudEhhbmRsZXIpIHtcbiAgICAgICAgICAgIGV2ZW50SGFuZGxlci5hcHBseShjb250ZXh0LCBbZXZlbnRdLmNvbmNhdChkYXRhKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VsZi5ldmVudHNMaXN0ZW5lcnMgJiYgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdKSB7XG4gICAgICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50SGFuZGxlcikge1xuICAgICAgICAgICAgZXZlbnRIYW5kbGVyLmFwcGx5KGNvbnRleHQsIGRhdGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzZWxmO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiB1cGRhdGVTaXplKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuICAgIHZhciAkZWwgPSBzd2lwZXIuJGVsO1xuXG4gICAgaWYgKHR5cGVvZiBzd2lwZXIucGFyYW1zLndpZHRoICE9PSAndW5kZWZpbmVkJyAmJiBzd2lwZXIucGFyYW1zLndpZHRoICE9PSBudWxsKSB7XG4gICAgICB3aWR0aCA9IHN3aXBlci5wYXJhbXMud2lkdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpZHRoID0gJGVsWzBdLmNsaWVudFdpZHRoO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc3dpcGVyLnBhcmFtcy5oZWlnaHQgIT09ICd1bmRlZmluZWQnICYmIHN3aXBlci5wYXJhbXMuaGVpZ2h0ICE9PSBudWxsKSB7XG4gICAgICBoZWlnaHQgPSBzd2lwZXIucGFyYW1zLmhlaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVpZ2h0ID0gJGVsWzBdLmNsaWVudEhlaWdodDtcbiAgICB9XG5cbiAgICBpZiAod2lkdGggPT09IDAgJiYgc3dpcGVyLmlzSG9yaXpvbnRhbCgpIHx8IGhlaWdodCA9PT0gMCAmJiBzd2lwZXIuaXNWZXJ0aWNhbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBTdWJ0cmFjdCBwYWRkaW5nc1xuXG5cbiAgICB3aWR0aCA9IHdpZHRoIC0gcGFyc2VJbnQoJGVsLmNzcygncGFkZGluZy1sZWZ0JykgfHwgMCwgMTApIC0gcGFyc2VJbnQoJGVsLmNzcygncGFkZGluZy1yaWdodCcpIHx8IDAsIDEwKTtcbiAgICBoZWlnaHQgPSBoZWlnaHQgLSBwYXJzZUludCgkZWwuY3NzKCdwYWRkaW5nLXRvcCcpIHx8IDAsIDEwKSAtIHBhcnNlSW50KCRlbC5jc3MoJ3BhZGRpbmctYm90dG9tJykgfHwgMCwgMTApO1xuICAgIGlmIChOdW1iZXIuaXNOYU4od2lkdGgpKSB3aWR0aCA9IDA7XG4gICAgaWYgKE51bWJlci5pc05hTihoZWlnaHQpKSBoZWlnaHQgPSAwO1xuICAgIGV4dGVuZChzd2lwZXIsIHtcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgc2l6ZTogc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gd2lkdGggOiBoZWlnaHRcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNsaWRlcygpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIGdldERpcmVjdGlvbkxhYmVsKHByb3BlcnR5KSB7XG4gICAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICAgIH0gLy8gcHJldHRpZXItaWdub3JlXG5cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ3dpZHRoJzogJ2hlaWdodCcsXG4gICAgICAgICdtYXJnaW4tdG9wJzogJ21hcmdpbi1sZWZ0JyxcbiAgICAgICAgJ21hcmdpbi1ib3R0b20gJzogJ21hcmdpbi1yaWdodCcsXG4gICAgICAgICdtYXJnaW4tbGVmdCc6ICdtYXJnaW4tdG9wJyxcbiAgICAgICAgJ21hcmdpbi1yaWdodCc6ICdtYXJnaW4tYm90dG9tJyxcbiAgICAgICAgJ3BhZGRpbmctbGVmdCc6ICdwYWRkaW5nLXRvcCcsXG4gICAgICAgICdwYWRkaW5nLXJpZ2h0JzogJ3BhZGRpbmctYm90dG9tJyxcbiAgICAgICAgJ21hcmdpblJpZ2h0JzogJ21hcmdpbkJvdHRvbSdcbiAgICAgIH1bcHJvcGVydHldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERpcmVjdGlvblByb3BlcnR5VmFsdWUobm9kZSwgbGFiZWwpIHtcbiAgICAgIHJldHVybiBwYXJzZUZsb2F0KG5vZGUuZ2V0UHJvcGVydHlWYWx1ZShnZXREaXJlY3Rpb25MYWJlbChsYWJlbCkpIHx8IDApO1xuICAgIH1cblxuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWwsXG4gICAgICAgIHN3aXBlclNpemUgPSBzd2lwZXIuc2l6ZSxcbiAgICAgICAgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSxcbiAgICAgICAgd3JvbmdSVEwgPSBzd2lwZXIud3JvbmdSVEw7XG4gICAgdmFyIGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gICAgdmFyIHByZXZpb3VzU2xpZGVzTGVuZ3RoID0gaXNWaXJ0dWFsID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCA6IHN3aXBlci5zbGlkZXMubGVuZ3RoO1xuICAgIHZhciBzbGlkZXMgPSAkd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzKTtcbiAgICB2YXIgc2xpZGVzTGVuZ3RoID0gaXNWaXJ0dWFsID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCA6IHNsaWRlcy5sZW5ndGg7XG4gICAgdmFyIHNuYXBHcmlkID0gW107XG4gICAgdmFyIHNsaWRlc0dyaWQgPSBbXTtcbiAgICB2YXIgc2xpZGVzU2l6ZXNHcmlkID0gW107XG4gICAgdmFyIG9mZnNldEJlZm9yZSA9IHBhcmFtcy5zbGlkZXNPZmZzZXRCZWZvcmU7XG5cbiAgICBpZiAodHlwZW9mIG9mZnNldEJlZm9yZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb2Zmc2V0QmVmb3JlID0gcGFyYW1zLnNsaWRlc09mZnNldEJlZm9yZS5jYWxsKHN3aXBlcik7XG4gICAgfVxuXG4gICAgdmFyIG9mZnNldEFmdGVyID0gcGFyYW1zLnNsaWRlc09mZnNldEFmdGVyO1xuXG4gICAgaWYgKHR5cGVvZiBvZmZzZXRBZnRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb2Zmc2V0QWZ0ZXIgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QWZ0ZXIuY2FsbChzd2lwZXIpO1xuICAgIH1cblxuICAgI
24510HZhciBwcmV2aW91c1NuYXBHcmlkTGVuZ3RoID0gc3dpcGVyLnNuYXBHcmlkLmxlbmd0aDtcbiAgICB2YXIgcHJldmlvdXNTbGlkZXNHcmlkTGVuZ3RoID0gc3dpcGVyLnNsaWRlc0dyaWQubGVuZ3RoO1xuICAgIHZhciBzcGFjZUJldHdlZW4gPSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuICAgIHZhciBzbGlkZVBvc2l0aW9uID0gLW9mZnNldEJlZm9yZTtcbiAgICB2YXIgcHJldlNsaWRlU2l6ZSA9IDA7XG4gICAgdmFyIGluZGV4ID0gMDtcblxuICAgIGlmICh0eXBlb2Ygc3dpcGVyU2l6ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNwYWNlQmV0d2VlbiA9PT0gJ3N0cmluZycgJiYgc3BhY2VCZXR3ZWVuLmluZGV4T2YoJyUnKSA+PSAwKSB7XG4gICAgICBzcGFjZUJldHdlZW4gPSBwYXJzZUZsb2F0KHNwYWNlQmV0d2Vlbi5yZXBsYWNlKCclJywgJycpKSAvIDEwMCAqIHN3aXBlclNpemU7XG4gICAgfVxuXG4gICAgc3dpcGVyLnZpcnR1YWxTaXplID0gLXNwYWNlQmV0d2VlbjsgLy8gcmVzZXQgbWFyZ2luc1xuXG4gICAgaWYgKHJ0bCkgc2xpZGVzLmNzcyh7XG4gICAgICBtYXJnaW5MZWZ0OiAnJyxcbiAgICAgIG1hcmdpblRvcDogJydcbiAgICB9KTtlbHNlIHNsaWRlcy5jc3Moe1xuICAgICAgbWFyZ2luUmlnaHQ6ICcnLFxuICAgICAgbWFyZ2luQm90dG9tOiAnJ1xuICAgIH0pO1xuICAgIHZhciBzbGlkZXNOdW1iZXJFdmVuVG9Sb3dzO1xuXG4gICAgaWYgKHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4gPiAxKSB7XG4gICAgICBpZiAoTWF0aC5mbG9vcihzbGlkZXNMZW5ndGggLyBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uKSA9PT0gc2xpZGVzTGVuZ3RoIC8gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJDb2x1bW4pIHtcbiAgICAgICAgc2xpZGVzTnVtYmVyRXZlblRvUm93cyA9IHNsaWRlc0xlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsaWRlc051bWJlckV2ZW5Ub1Jvd3MgPSBNYXRoLmNlaWwoc2xpZGVzTGVuZ3RoIC8gcGFyYW1zLnNsaWRlc1BlckNvbHVtbikgKiBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLnNsaWRlc1BlclZpZXcgIT09ICdhdXRvJyAmJiBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uRmlsbCA9PT0gJ3JvdycpIHtcbiAgICAgICAgc2xpZGVzTnVtYmVyRXZlblRvUm93cyA9IE1hdGgubWF4KHNsaWRlc051bWJlckV2ZW5Ub1Jvd3MsIHBhcmFtcy5zbGlkZXNQZXJWaWV3ICogcGFyYW1zLnNsaWRlc1BlckNvbHVtbik7XG4gICAgICB9XG4gICAgfSAvLyBDYWxjIHNsaWRlc1xuXG5cbiAgICB2YXIgc2xpZGVTaXplO1xuICAgIHZhciBzbGlkZXNQZXJDb2x1bW4gPSBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uO1xuICAgIHZhciBzbGlkZXNQZXJSb3cgPSBzbGlkZXNOdW1iZXJFdmVuVG9Sb3dzIC8gc2xpZGVzUGVyQ29sdW1uO1xuICAgIHZhciBudW1GdWxsQ29sdW1ucyA9IE1hdGguZmxvb3Ioc2xpZGVzTGVuZ3RoIC8gcGFyYW1zLnNsaWRlc1BlckNvbHVtbik7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlc0xlbmd0aDsgaSArPSAxKSB7XG4gICAgICBzbGlkZVNpemUgPSAwO1xuICAgICAgdmFyIHNsaWRlID0gc2xpZGVzLmVxKGkpO1xuXG4gICAgICBpZiAocGFyYW1zLnNsaWRlc1BlckNvbHVtbiA+IDEpIHtcbiAgICAgICAgLy8gU2V0IHNsaWRlcyBvcmRlclxuICAgICAgICB2Y
24510XIgbmV3U2xpZGVPcmRlckluZGV4ID0gdm9pZCAwO1xuICAgICAgICB2YXIgY29sdW1uID0gdm9pZCAwO1xuICAgICAgICB2YXIgcm93ID0gdm9pZCAwO1xuXG4gICAgICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyQ29sdW1uRmlsbCA9PT0gJ3JvdycgJiYgcGFyYW1zLnNsaWRlc1Blckdyb3VwID4gMSkge1xuICAgICAgICAgIHZhciBncm91cEluZGV4ID0gTWF0aC5mbG9vcihpIC8gKHBhcmFtcy5zbGlkZXNQZXJHcm91cCAqIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4pKTtcbiAgICAgICAgICB2YXIgc2xpZGVJbmRleEluR3JvdXAgPSBpIC0gcGFyYW1zLnNsaWRlc1BlckNvbHVtbiAqIHBhcmFtcy5zbGlkZXNQZXJHcm91cCAqIGdyb3VwSW5kZXg7XG4gICAgICAgICAgdmFyIGNvbHVtbnNJbkdyb3VwID0gZ3JvdXBJbmRleCA9PT0gMCA/IHBhcmFtcy5zbGlkZXNQZXJHcm91cCA6IE1hdGgubWluKE1hdGguY2VpbCgoc2xpZGVzTGVuZ3RoIC0gZ3JvdXBJbmRleCAqIHNsaWRlc1BlckNvbHVtbiAqIHBhcmFtcy5zbGlkZXNQZXJHcm91cCkgLyBzbGlkZXNQZXJDb2x1bW4pLCBwYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuICAgICAgICAgIHJvdyA9IE1hdGguZmxvb3Ioc2xpZGVJbmRleEluR3JvdXAgLyBjb2x1bW5zSW5Hcm91cCk7XG4gICAgICAgICAgY29sdW1uID0gc2xpZGVJbmRleEluR3JvdXAgLSByb3cgKiBjb2x1bW5zSW5Hcm91cCArIGdyb3VwSW5kZXggKiBwYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG4gICAgICAgICAgbmV3U2xpZGVPcmRlckluZGV4ID0gY29sdW1uICsgcm93ICogc2xpZGVzTnVtYmVyRXZlblRvUm93cyAvIHNsaWRlc1BlckNvbHVtbjtcbiAgICAgICAgICBzbGlkZS5jc3Moe1xuICAgICAgICAgICAgJy13ZWJraXQtYm94LW9yZGluYWwtZ3JvdXAnOiBuZXdTbGlkZU9yZGVySW5kZXgsXG4gICAgICAgICAgICAnLW1vei1ib3gtb3JkaW5hbC1ncm91cCc6IG5ld1NsaWRlT3JkZXJJbmRleCxcbiAgICAgICAgICAgICctbXMtZmxleC1vcmRlcic6IG5ld1NsaWRlT3JkZXJJbmRleCxcbiAgICAgICAgICAgICctd2Via2l0LW9yZGVyJzogbmV3U2xpZGVPcmRlckluZGV4LFxuICAgICAgICAgICAgb3JkZXI6IG5ld1NsaWRlT3JkZXJJbmRleFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy5zbGlkZXNQZXJDb2x1bW5GaWxsID09PSAnY29sdW1uJykge1xuICAgICAgICAgIGNvbHVtbiA9IE1hdGguZmxvb3IoaSAvIHNsaWRlc1BlckNvbHVtbik7XG4gICAgICAgICAgcm93ID0gaSAtIGNvbHVtbiAqIHNsaWRlc1BlckNvbHVtbjtcblxuICAgICAgICAgIGlmIChjb2x1bW4gPiBudW1GdWxsQ29sdW1ucyB8fCBjb2x1bW4gPT09IG51bUZ1bGxDb2x1bW5zICYmIHJvdyA9PT0gc2xpZGVzUGVyQ29sdW1uIC0gMSkge1xuICAgICAgICAgICAgcm93ICs9IDE7XG5cbiAgICAgICAgICAgIGlmIChyb3cgPj0gc2xpZGVzUGVyQ29sdW1uKSB7XG4gICAgICAgICAgICAgIHJvdyA9IDA7XG4gICAgICAgICAgICAgIGNvbHVtbiArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByb3cgPSBNYXRoLmZsb29yKGkgLyBzbGlkZXNQZXJSb3cpO1xuICAgICAgICAgIGNvbHVtbiA9IGkgLSByb3cgKiBzbGlkZXNQZXJSb3c7XG4gICAgICAgIH1cblxuICAgICAgICBzbGlkZS5jc3MoZ2V0RGlyZWN0aW9uTGFiZWwoJ21hcmdpbi10b3AnKSwgcm93ICE9PSAwICYmIHBhcmFtcy5zcGFjZUJldHdlZW4gJiYgcGFyYW1zLnNwYWNlQmV0d2VlbiArIFwicHhcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzbGlkZS5jc3MoJ2Rpc3BsYXknKSA9PT0gJ25vbmUnKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgICBpZiAocGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJykge1xuICAgICAgICB2Y
24510XIgc2xpZGVTdHlsZXMgPSBnZXRDb21wdXRlZFN0eWxlKHNsaWRlWzBdKTtcbiAgICAgICAgdmFyIGN1cnJlbnRUcmFuc2Zvcm0gPSBzbGlkZVswXS5zdHlsZS50cmFuc2Zvcm07XG4gICAgICAgIHZhciBjdXJyZW50V2ViS2l0VHJhbnNmb3JtID0gc2xpZGVbMF0uc3R5bGUud2Via2l0VHJhbnNmb3JtO1xuXG4gICAgICAgIGlmIChjdXJyZW50VHJhbnNmb3JtKSB7XG4gICAgICAgICAgc2xpZGVbMF0uc3R5bGUudHJhbnNmb3JtID0gJ25vbmUnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnRXZWJLaXRUcmFuc2Zvcm0pIHtcbiAgICAgICAgICBzbGlkZVswXS5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSAnbm9uZSc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykge1xuICAgICAgICAgIHNsaWRlU2l6ZSA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHNsaWRlLm91dGVyV2lkdGgodHJ1ZSkgOiBzbGlkZS5vdXRlckhlaWdodCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICB2YXIgd2lkdGggPSBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKHNsaWRlU3R5bGVzLCAnd2lkdGgnKTtcbiAgICAgICAgICB2YXIgcGFkZGluZ0xlZnQgPSBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKHNsaWRlU3R5bGVzLCAncGFkZGluZy1sZWZ0Jyk7XG4gICAgICAgICAgdmFyIHBhZGRpbmdSaWdodCA9IGdldERpcmVjdGlvblByb3BlcnR5VmFsdWUoc2xpZGVTdHlsZXMsICdwYWRkaW5nLXJpZ2h0Jyk7XG4gICAgICAgICAgdmFyIG1hcmdpbkxlZnQgPSBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKHNsaWRlU3R5bGVzLCAnbWFyZ2luLWxlZnQnKTtcbiAgICAgICAgICB2Y
24510XIgbWFyZ2luUmlnaHQgPSBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKHNsaWRlU3R5bGVzLCAnbWFyZ2luLXJpZ2h0Jyk7XG4gICAgICAgICAgdmFyIGJveFNpemluZyA9IHNsaWRlU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2JveC1zaXppbmcnKTtcblxuICAgICAgICAgIGlmIChib3hTaXppbmcgJiYgYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcpIHtcbiAgICAgICAgICAgIHNsaWRlU2l6ZSA9IHdpZHRoICsgbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgX3NsaWRlJCA9IHNsaWRlWzBdLFxuICAgICAgICAgICAgICAgIGNsaWVudFdpZHRoID0gX3NsaWRlJC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgICAgICBvZmZzZXRXaWR0aCA9IF9zbGlkZSQub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICBzbGlkZVNpemUgPSB3aWR0aCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0ICsgKG9mZnNldFdpZHRoIC0gY2xpZW50V2lkdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50VHJhbnNmb3JtKSB7XG4gICAgICAgICAgc2xpZGVbMF0uc3R5bGUudHJhbnNmb3JtID0gY3VycmVudFRyYW5zZm9ybTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50V2ViS2l0VHJhbnNmb3JtKSB7XG4gICAgICAgICAgc2xpZGVbMF0uc3R5bGUud2Via2l0VHJhbnNmb3JtID0gY3VycmVudFdlYktpdFRyYW5zZm9ybTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBzbGlkZVNpemUgPSBNYXRoLmZsb29yKHNsaWRlU2l6ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbGlkZVNpemUgPSAoc3dpcGVyU2l6ZSAtIChwYXJhbXMuc2xpZGVzUGVyVmlldyAtIDEpICogc3BhY2VCZXR3ZWVuKSAvIHBhcmFtcy5zbGlkZXNQZXJWaWV3O1xuICAgICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykgc2xpZGVTaXplID0gTWF0aC5mbG9vcihzbGlkZVNpemUpO1xuXG4gICAgICAgIGlmIChzbGlkZXNbaV0pIHtcbiAgICAgICAgICBzbGlkZXNbaV0uc3R5bGVbZ2V0RGlyZWN0aW9uTGFiZWwoJ3dpZHRoJyldID0gc2xpZGVTaXplICsgXCJweFwiO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzbGlkZXNbaV0pIHtcbiAgICAgICAgc2xpZGVzW2ldLnN3aXBlclNsaWRlU2l6ZSA9IHNsaWRlU2l6ZTtcbiAgICAgIH1cblxuICAgICAgc2xpZGVzU2l6ZXNHcmlkLnB1c2goc2xpZGVTaXplKTtcblxuICAgICAgaWYgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgICBzbGlkZVBvc2l0aW9uID0gc2xpZGVQb3NpdGlvbiArIHNsaWRlU2l6ZSAvIDIgKyBwcmV2U2xpZGVTaXplIC8gMiArIHNwYWNlQmV0d2VlbjtcbiAgICAgICAgaWYgKHByZXZTbGlkZVNpemUgPT09IDAgJiYgaSAhPT0gMCkgc2xpZGVQb3NpdGlvbiA9IHNsaWRlUG9zaXRpb24gLSBzd2lwZXJTaXplIC8gMiAtIHNwYWNlQmV0d2VlbjtcbiAgICAgICAgaWYgKGkgPT09IDApIHNsaWRlUG9zaXRpb24gPSBzbGlkZVBvc2l0aW9uIC0gc3dpcGVyU2l6ZSAvIDIgLSBzcGFjZUJldHdlZW47XG4gICAgICAgIGlmIChNYXRoLmFicyhzbGlkZVBvc2l0aW9uKSA8IDEgLyAxMDAwKSBzbGlkZVBvc2l0aW9uID0gMDtcbiAgICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHNsaWRlUG9zaXRpb24gPSBNYXRoLmZsb29yKHNsaWRlUG9zaXRpb24pO1xuICAgICAgICBpZiAoaW5kZXggJSBwYXJhbXMuc2xpZGVzUGVyR3JvdXAgPT09IDApIHNuYXBHcmlkLnB1c2goc2xpZGVQb3NpdGlvbik7XG4gICAgICAgIHNsaWRlc0dyaWQucHVzaChzbGlkZVBvc2l0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBzbGlkZVBvc2l0aW9uID0gTWF0aC5mbG9vcihzbGlkZVBvc2l0aW9uKTtcbiAgICAgICAgaWYgKChpbmRleCAtIE1hdGgubWluKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwLCBpbmRleCkpICUgc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCA9PT0gMCkgc25hcEdyaWQucHVzaChzbGlkZVBvc2l0aW9uKTtcbiAgICAgICAgc2xpZGVzR3JpZC5wdXNoKHNsaWRlUG9zaXRpb24pO1xuICAgICAgICBzbGlkZVBvc2l0aW9uID0gc2xpZGVQb3NpdGlvbiArIHNsaWRlU2l6ZSArIHNwYWNlQmV0d2VlbjtcbiAgICAgIH1cblxuICAgICAgc3dpcGVyLnZpcnR1YWxTaXplICs9IHNsaWRlU2l6ZSArIHNwYWNlQmV0d2VlbjtcbiAgICAgIHByZXZTbGlkZVNpemUgPSBzbGlkZVNpemU7XG4gICAgICBpbmRleCArPSAxO1xuICAgIH1cblxuICAgIHN3aXBlci52aXJ0dWFsU2l6ZSA9IE1hdGgubWF4KHN3aXBlci52aXJ0dWFsU2l6ZSwgc3dpcGVyU2l6ZSkgKyBvZmZzZXRBZnRlcjtcbiAgICB2YXIgbmV3U2xpZGVzR3JpZDtcblxuICAgIGlmIChydGwgJiYgd3JvbmdSVEwgJiYgKHBhcmFtcy5lZmZlY3QgPT09ICdzbGlkZScgfHwgcGFyYW1zLmVmZmVjdCA9PT0gJ2NvdmVyZmxvdycpKSB7XG4gICAgICAkd3JhcHBlckVsLmNzcyh7XG4gICAgICAgIHdpZHRoOiBzd2lwZXIudmlydHVhbFNpemUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVuICsgXCJweFwiXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnNldFdyYXBwZXJTaXplKSB7XG4gICAgICB2Y
24510XIgXyR3cmFwcGVyRWwkY3NzO1xuXG4gICAgICAkd3JhcHBlckVsLmNzcygoXyR3cmFwcGVyRWwkY3NzID0ge30sIF8kd3JhcHBlckVsJGNzc1tnZXREaXJlY3Rpb25MYWJlbCgnd2lkdGgnKV0gPSBzd2lwZXIudmlydHVhbFNpemUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVuICsgXCJweFwiLCBfJHdyYXBwZXJFbCRjc3MpKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnNsaWRlc1BlckNvbHVtbiA+IDEpIHtcbiAgICAgIHZhciBfJHdyYXBwZXJFbCRjc3MyO1xuXG4gICAgICBzd2lwZXIudmlydHVhbFNpemUgPSAoc2xpZGVTaXplICsgcGFyYW1zLnNwYWNlQmV0d2VlbikgKiBzbGlkZXNOdW1iZXJFdmVuVG9Sb3dzO1xuICAgICAgc3dpcGVyLnZpcnR1YWxTaXplID0gTWF0aC5jZWlsKHN3aXBlci52aXJ0dWFsU2l6ZSAvIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4pIC0gcGFyYW1zLnNwYWNlQmV0d2VlbjtcbiAgICAgICR3cmFwcGVyRWwuY3NzKChfJHdyYXBwZXJFbCRjc3MyID0ge30sIF8kd3JhcHBlckVsJGNzczJbZ2V0RGlyZWN0aW9uTGFiZWwoJ3dpZHRoJyldID0gc3dpcGVyLnZpcnR1YWxTaXplICsgcGFyYW1zLnNwYWNlQmV0d2VlbiArIFwicHhcIiwgXyR3cmFwcGVyRWwkY3NzMikpO1xuXG4gICAgICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICAgIG5ld1NsaWRlc0dyaWQgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgc25hcEdyaWQubGVuZ3RoOyBfaSArPSAxKSB7XG4gICAgICAgICAgdmFyIHNsaWRlc0dyaWRJdGVtID0gc25hcEdyaWRbX2ldO1xuICAgICAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBzbGlkZXNHcmlkSXRlbSA9IE1hdGguZmxvb3Ioc2xpZGVzR3JpZEl0ZW0pO1xuICAgICAgICAgIGlmIChzbmFwR3JpZFtfaV0gPCBzd2lwZXIudmlydHVhbFNpemUgKyBzbmFwR3JpZFswXSkgbmV3U2xpZGVzR3JpZC5wdXNoKHNsaWRlc0dyaWRJdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNuYXBHcmlkID0gbmV3U2xpZGVzR3JpZDtcbiAgICAgIH1cbiAgICB9IC8vIFJlbW92ZSBsYXN0IGdyaWQgZWxlbWVudHMgZGVwZW5kaW5nIG9uIHdpZHRoXG5cblxuICAgIGlmICghcGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICBuZXdTbGlkZXNHcmlkID0gW107XG5cbiAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IHNuYXBHcmlkLmxlbmd0aDsgX2kyICs9IDEpIHtcbiAgICAgICAgdmFyIF9zbGlkZXNHcmlkSXRlbSA9IHNuYXBHcmlkW19pMl07XG4gICAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBfc2xpZGVzR3JpZEl0ZW0gPSBNYXRoLmZsb29yKF9zbGlkZXNHcmlkSXRlbSk7XG5cbiAgICAgICAgaWYgKHNuYXBHcmlkW19pMl0gPD0gc3dpcGVyLnZpcnR1YWxTaXplIC0gc3dpcGVyU2l6ZSkge1xuICAgICAgICAgIG5ld1NsaWRlc0dyaWQucHVzaChfc2xpZGVzR3JpZEl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNuYXBHcmlkID0gbmV3U2xpZGVzR3JpZDtcblxuICAgICAgaWYgKE1hdGguZmxvb3Ioc3dpcGVyLnZpcnR1YWxTaXplIC0gc3dpcGVyU2l6ZSkgLSBNYXRoLmZsb29yKHNuYXBHcmlkW3NuYXBHcmlkLmxlbmd0aCAtIDFdKSA+IDEpIHtcbiAgICAgICAgc25hcEdyaWQucHVzaChzd2lwZXIudmlydHVhbFNpemUgLSBzd2lwZXJTaXplKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc25hcEdyaWQubGVuZ3RoID09PSAwKSBzbmFwR3JpZCA9IFswXTtcblxuICAgIGlmIChwYXJhbXMuc3BhY2VCZXR3ZWVuICE9PSAwKSB7XG4gICAgICB2Y
24510XIgX3NsaWRlcyRmaWx0ZXIkY3NzO1xuXG4gICAgICB2YXIga2V5ID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpICYmIHJ0bCA/ICdtYXJnaW5MZWZ0JyA6IGdldERpcmVjdGlvbkxhYmVsKCdtYXJnaW5SaWdodCcpO1xuICAgICAgc2xpZGVzLmZpbHRlcihmdW5jdGlvbiAoXywgc2xpZGVJbmRleCkge1xuICAgICAgICBpZiAoIXBhcmFtcy5jc3NNb2RlKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBpZiAoc2xpZGVJbmRleCA9PT0gc2xpZGVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pLmNzcygoX3NsaWRlcyRmaWx0ZXIkY3NzID0ge30sIF9zbGlkZXMkZmlsdGVyJGNzc1trZXldID0gc3BhY2VCZXR3ZWVuICsgXCJweFwiLCBfc2xpZGVzJGZpbHRlciRjc3MpKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzICYmIHBhcmFtcy5jZW50ZXJlZFNsaWRlc0JvdW5kcykge1xuICAgICAgdmFyIGFsbFNsaWRlc1NpemUgPSAwO1xuICAgICAgc2xpZGVzU2l6ZXNHcmlkLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlU2l6ZVZhbHVlKSB7XG4gICAgICAgIGFsbFNsaWRlc1NpemUgKz0gc2xpZGVTaXplVmFsdWUgKyAocGFyYW1zLnNwYWNlQmV0d2VlbiA/IHBhcmFtcy5zcGFjZUJldHdlZW4gOiAwKTtcbiAgICAgIH0pO1xuICAgICAgYWxsU2xpZGVzU2l6ZSAtPSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuICAgICAgdmFyIG1heFNuYXAgPSBhbGxTbGlkZXNTaXplIC0gc3dpcGVyU2l6ZTtcbiAgICAgIHNuYXBHcmlkID0gc25hcEdyaWQubWFwKGZ1bmN0aW9uIChzbmFwKSB7XG4gICAgICAgIGlmIChzbmFwIDwgMCkgcmV0dXJuIC1vZmZzZXRCZWZvcmU7XG4gICAgICAgIGlmIChzbmFwID4gbWF4U25hcCkgcmV0dXJuIG1heFNuYXAgKyBvZmZzZXRBZnRlcjtcbiAgICAgICAgcmV0dXJuIHNuYXA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmNlbnRlckluc3VmZmljaWVudFNsaWRlcykge1xuICAgICAgdmFyIF9hbGxTbGlkZXNTaXplID0gMDtcbiAgICAgIHNsaWRlc1NpemVzR3JpZC5mb3JFYWNoKGZ1bmN0aW9uIChzbGlkZVNpemVWYWx1ZSkge1xuICAgICAgICBfYWxsU2xpZGVzU2l6ZSArPSBzbGlkZVNpemVWYWx1ZSArIChwYXJhbXMuc3BhY2VCZXR3ZWVuID8gcGFyYW1zLnNwYWNlQmV0d2VlbiA6IDApO1xuICAgICAgfSk7XG4gICAgICBfYWxsU2xpZGVzU2l6ZSAtPSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuXG4gICAgICBpZiAoX2FsbFNsaWRlc1NpemUgPCBzd2lwZXJTaXplKSB7XG4gICAgICAgIHZhciBhbGxTbGlkZXNPZmZzZXQgPSAoc3dpcGVyU2l6ZSAtIF9hbGxTbGlkZXNTaXplKSAvIDI7XG4gICAgICAgIHNuYXBHcmlkLmZvckVhY2goZnVuY3Rpb24gKHNuYXAsIHNuYXBJbmRleCkge1xuICAgICAgICAgIHNuYXBHcmlkW3NuYXBJbmRleF0gPSBzbmFwIC0gYWxsU2xpZGVzT2Zmc2V0O1xuICAgICAgICB9KTtcbiAgICAgICAgc2xpZGVzR3JpZC5mb3JFYWNoKGZ1bmN0aW9uIChzbmFwLCBzbmFwSW5kZXgpIHtcbiAgICAgICAgICBzbGlkZXNHcmlkW3NuYXBJbmRleF0gPSBzbmFwICsgYWxsU2xpZGVzT2Zmc2V0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBleHRlbmQoc3dpcGVyLCB7XG4gICAgICBzbGlkZXM6IHNsaWRlcyxcbiAgICAgIHNuYXBHcmlkOiBzbmFwR3JpZCxcbiAgICAgIHNsaWRlc0dyaWQ6IHNsaWRlc0dyaWQsXG4gICAgICBzbGlkZXNTaXplc0dyaWQ6IHNsaWRlc1NpemVzR3JpZFxuICAgIH0pO1xuXG4gICAgaWYgKHNsaWRlc0xlbmd0aCAhPT0gcHJldmlvdXNTbGlkZXNMZW5ndGgpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdzbGlkZXNMZW5ndGhDaGFuZ2UnKTtcbiAgICB9XG5cbiAgICBpZiAoc25hcEdyaWQubGVuZ3RoICE9PSBwcmV2aW91c1NuYXBHcmlkTGVuZ3RoKSB7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93KSBzd2lwZXIuY2hlY2tPdmVyZmxvdygpO1xuICAgICAgc3dpcGVyLmVtaXQoJ3NuYXBHcmlkTGVuZ3RoQ2hhbmdlJyk7XG4gICAgfVxuXG4gICAgaWYgKHNsaWRlc0dyaWQubGVuZ3RoICE9PSBwcmV2aW91c1NsaWRlc0dyaWRMZW5ndGgpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdzbGlkZXNHcmlkTGVuZ3RoQ2hhbmdlJyk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzIHx8IHBhcmFtcy53YXRjaFNsaWRlc1Zpc2liaWxpdHkpIHtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNPZmZzZXQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVBdXRvSGVpZ2h0KHNwZWVkKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGFjdGl2ZVNsaWRlcyA9IFtdO1xuICAgIHZhciBpc1ZpcnR1YWwgPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZDtcbiAgICB2YXIgbmV3SGVpZ2h0ID0gMDtcbiAgICB2YXIgaTtcblxuICAgIGlmICh0eXBlb2Ygc3BlZWQgPT09ICdudW1iZXInKSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihzcGVlZCk7XG4gICAgfSBlbHNlIGlmIChzcGVlZCA9PT0gdHJ1ZSkge1xuICAgICAgc3dpcGVyLnNldFRyYW5zaXRpb24oc3dpcGVyLnBhcmFtcy5zcGVlZCk7XG4gICAgfVxuXG4gICAgdmFyIGdldFNsaWRlQnlJbmRleCA9IGZ1bmN0aW9uIGdldFNsaWRlQnlJbmRleChpbmRleCkge1xuICAgICAgaWYgKGlzVmlydHVhbCkge1xuICAgICAgICByZXR1cm4gc3dpcGVyLnNsaWRlcy5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSwgMTApID09PSBpbmRleDtcbiAgICAgICAgfSlbMF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzd2lwZXIuc2xpZGVzLmVxKGluZGV4KVswXTtcbiAgICB9OyAvLyBGaW5kIHNsaWRlcyBjdXJyZW50bHkgaW4gdmlld1xuXG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ICE9PSAnYXV0bycgJiYgc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ID4gMSkge1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgc3dpcGVyLnZpc2libGVTbGlkZXMuZWFjaChmdW5jdGlvbiAoc2xpZGUpIHtcbiAgICAgICAgICBhY3RpdmVTbGlkZXMucHVzaChzbGlkZSk7XG4gICAgICAgI
24510H0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IE1hdGguY2VpbChzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcpOyBpICs9IDEpIHtcbiAgICAgICAgICB2YXIgaW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXggKyBpO1xuICAgICAgICAgIGlmIChpbmRleCA+IHN3aXBlci5zbGlkZXMubGVuZ3RoICYmICFpc1ZpcnR1YWwpIGJyZWFrO1xuICAgICAgICAgIGFjdGl2ZVNsaWRlcy5wdXNoKGdldFNsaWRlQnlJbmRleChpbmRleCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjdGl2ZVNsaWRlcy5wdXNoKGdldFNsaWRlQnlJbmRleChzd2lwZXIuYWN0aXZlSW5kZXgpKTtcbiAgICB9IC8vIEZpbmQgbmV3IGhlaWdodCBmcm9tIGhpZ2hlc3Qgc2xpZGUgaW4gdmlld1xuXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgYWN0aXZlU2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAodHlwZW9mIGFjdGl2ZVNsaWRlc1tpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFyIGhlaWdodCA9IGFjdGl2ZVNsaWRlc1tpXS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIG5ld0hlaWdodCA9IGhlaWdodCA+IG5ld0hlaWdodCA/IGhlaWdodCA6IG5ld0hlaWdodDtcbiAgICAgIH1cbiAgICB9IC8vIFVwZGF0ZSBIZWlnaHRcblxuXG4gICAgaWYgKG5ld0hlaWdodCkgc3dpcGVyLiR3cmFwcGVyRWwuY3NzKCdoZWlnaHQnLCBuZXdIZWlnaHQgKyBcInB4XCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2xpZGVzT2Zmc2V0KCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHNsaWRlc1tpXS5zd2lwZXJTbGlkZU9mZnNldCA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHNsaWRlc1tpXS5vZmZzZXRMZWZ0IDogc2xpZGVzW2ldLm9mZnNldFRvcDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVTbGlkZXNQcm9ncmVzcyh0cmFuc2xhdGUpIHtcbiAgICBpZiAodHJhbnNsYXRlID09PSB2b2lkIDApIHtcbiAgICAgIHRyYW5zbGF0ZSA9IHRoaXMgJiYgdGhpcy50cmFuc2xhdGUgfHwgMDtcbiAgICB9XG5cbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgc2xpZGVzID0gc3dpcGVyLnNsaWRlcyxcbiAgICAgICAgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZTtcbiAgICBpZiAoc2xpZGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2Ygc2xpZGVzWzBdLnN3aXBlclNsaWRlT2Zmc2V0ID09PSAndW5kZWZpbmVkJykgc3dpcGVyLnVwZGF0ZVNsaWRlc09mZnNldCgpO1xuICAgIHZhciBvZmZzZXRDZW50ZXIgPSAtdHJhbnNsYXRlO1xuICAgIGlmIChydGwpIG9mZnNldENlbnRlciA9IHRyYW5zbGF0ZTsgLy8gVmlzaWJsZSBTbGlkZXNcblxuICAgIHNsaWRlcy5yZW1vdmVDbGFzcyhwYXJhbXMuc2xpZGVWaXNpYmxlQ2xhc3MpO1xuICAgIHN3aXBlci52aXNpYmxlU2xpZGVzSW5kZXhlcyA9IFtdO1xuICAgIHN3aXBlci52aXNpYmxlU2xpZGVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIHNsaWRlID0gc2xpZGVzW2ldO1xuICAgICAgdmFyIHNsaWRlUHJvZ3Jlc3MgPSAob2Zmc2V0Q2VudGVyICsgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcyA/IHN3aXBlci5taW5UcmFuc2xhdGUoKSA6IDApIC0gc2xpZGUuc3dpcGVyU2xpZGVPZmZzZXQpIC8gKHNsaWRlLnN3aXBlclNsaWRlU2l6ZSArIHBhcmFtcy5zcGFjZUJldHdlZW4pO1xuXG4gICAgICBpZiAocGFyYW1zLndhdGNoU2xpZGVzVmlzaWJpbGl0eSB8fCBwYXJhbXMuY2VudGVyZWRTbGlkZXMgJiYgcGFyYW1zLmF1dG9IZWlnaHQpIHtcbiAgICAgICAgdmFyIHNsaWRlQmVmb3JlID0gLShvZmZzZXRDZW50ZXIgLSBzbGlkZS5zd2lwZXJTbGlkZU9mZnNldCk7XG4gICAgICAgIHZhciBzbGlkZUFmdGVyID0gc2xpZGVCZWZvcmUgKyBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkW2ldO1xuICAgICAgICB2Y
24510XIgaXNWaXNpYmxlID0gc2xpZGVCZWZvcmUgPj0gMCAmJiBzbGlkZUJlZm9yZSA8IHN3aXBlci5zaXplIC0gMSB8fCBzbGlkZUFmdGVyID4gMSAmJiBzbGlkZUFmdGVyIDw9IHN3aXBlci5zaXplIHx8IHNsaWRlQmVmb3JlIDw9IDAgJiYgc2xpZGVBZnRlciA+PSBzd2lwZXIuc2l6ZTtcblxuICAgICAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICAgICAgc3dpcGVyLnZpc2libGVTbGlkZXMucHVzaChzbGlkZSk7XG4gICAgICAgICAgc3dpcGVyLnZpc2libGVTbGlkZXNJbmRleGVzLnB1c2goaSk7XG4gICAgICAgICAgc2xpZGVzLmVxKGkpLmFkZENsYXNzKHBhcmFtcy5zbGlkZVZpc2libGVDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2xpZGUucHJvZ3Jlc3MgPSBydGwgPyAtc2xpZGVQcm9ncmVzcyA6IHNsaWRlUHJvZ3Jlc3M7XG4gICAgfVxuXG4gICAgc3dpcGVyLnZpc2libGVTbGlkZXMgPSAkKHN3aXBlci52aXNpYmxlU2xpZGVzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVByb2dyZXNzKHRyYW5zbGF0ZSkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gICAgaWYgKHR5cGVvZiB0cmFuc2xhdGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgbXVsdGlwbGllciA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyAtMSA6IDE7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuXG4gICAgICB0cmFuc2xhdGUgPSBzd2lwZXIgJiYgc3dpcGVyLnRyYW5zbGF0ZSAmJiBzd2lwZXIudHJhbnNsYXRlICogbXVsdGlwbGllciB8fCAwO1xuICAgIH1cblxuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciB0cmFuc2xhdGVzRGlmZiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgICB2YXIgcHJvZ3Jlc3MgPSBzd2lwZXIucHJvZ3Jlc3MsXG4gICAgICAgIGlzQmVnaW5uaW5nID0gc3dpcGVyLmlzQmVnaW5uaW5nLFxuICAgICAgICBpc0VuZCA9IHN3aXBlci5pc0VuZDtcbiAgICB2YXIgd2FzQmVnaW5uaW5nID0gaXNCZWdpbm5pbmc7XG4gICAgdmFyIHdhc0VuZCA9IGlzRW5kO1xuXG4gICAgaWYgKHRyYW5zbGF0ZXNEaWZmID09PSAwKSB7XG4gICAgICBwcm9ncmVzcyA9IDA7XG4gICAgICBpc0JlZ2lubmluZyA9IHRydWU7XG4gICAgICBpc0VuZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyZXNzID0gKHRyYW5zbGF0ZSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKSkgLyB0cmFuc2xhdGVzRGlmZjtcbiAgICAgIGlzQmVnaW5uaW5nID0gcHJvZ3Jlc3MgPD0gMDtcbiAgICAgIGlzRW5kID0gcHJvZ3Jlc3MgPj0gMTtcbiAgICB9XG5cbiAgICBleHRlbmQoc3dpcGVyLCB7XG4gICAgICBwcm9ncmVzczogcHJvZ3Jlc3MsXG4gICAgICBpc0JlZ2lubmluZzogaXNCZWdpbm5pbmcsXG4gICAgICBpc0VuZDogaXNFbmRcbiAgICB9KTtcbiAgICBpZiAocGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgfHwgcGFyYW1zLndhdGNoU2xpZGVzVmlzaWJpbGl0eSB8fCBwYXJhbXMuY2VudGVyZWRTbGlkZXMgJiYgcGFyYW1zLmF1dG9IZWlnaHQpIHN3aXBlci51cGRhdGVTbGlkZXNQcm9ncmVzcyh0cmFuc2xhdGUpO1xuXG4gICAgaWYgKGlzQmVnaW5uaW5nICYmICF3YXNCZWdpbm5pbmcpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdyZWFjaEJlZ2lubmluZyB0b0VkZ2UnKTtcbiAgICB9XG5cbiAgICBpZiAoaXNFbmQgJiYgIXdhc0VuZCkge1xuICAgICAgc3dpcGVyLmVtaXQoJ3JlYWNoRW5kIHRvRWRnZScpO1xuICAgIH1cblxuICAgIGlmICh3YXNCZWdpbm5pbmcgJiYgIWlzQmVnaW5uaW5nIHx8IHdhc0VuZCAmJiAhaXNFbmQpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdmcm9tRWRnZScpO1xuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KCdwcm9ncmVzcycsIHByb2dyZXNzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNsaWRlc0NsYXNzZXMoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXMsXG4gICAgICAgIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbCxcbiAgICAgICAgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXgsXG4gICAgICAgIHJlYWxJbmRleCA9IHN3aXBlci5yZWFsSW5kZXg7XG4gICAgdmFyIGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gICAgc2xpZGVzLnJlbW92ZUNsYXNzKHBhcmFtcy5zbGlkZUFjdGl2ZUNsYXNzICsgXCIgXCIgKyBwYXJhbXMuc2xpZGVOZXh0Q2xhc3MgKyBcIiBcIiArIHBhcmFtcy5zbGlkZVByZXZDbGFzcyArIFwiIFwiICsgcGFyYW1zLnNsaWRlRHVwbGljYXRlQWN0aXZlQ2xhc3MgKyBcIiBcIiArIHBhcmFtcy5zbGlkZUR1cGxpY2F0ZU5leHRDbGFzcyArIFwiIFwiICsgcGFyYW1zLnNsaWRlRHVwbGljYXRlUHJldkNsYXNzKTtcbiAgICB2YXIgYWN0aXZlU2xpZGU7XG5cbiAgICBpZiAoaXNWaXJ0dWFsKSB7XG4gICAgICBhY3RpdmVTbGlkZSA9IHN3aXBlci4kd3JhcHBlckVsLmZpbmQoXCIuXCIgKyBwYXJhbXMuc2xpZGVDbGFzcyArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIGFjdGl2ZUluZGV4ICsgXCJcXFwiXVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWN0aXZlU2xpZGUgPSBzbGlkZXMuZXEoYWN0aXZlSW5kZXgpO1xuICAgIH0gLy8gQWN0aXZlIGNsYXNzZXNcblxuXG4gICAgYWN0aXZlU2xpZGUuYWRkQ2xhc3MocGFyYW1zLnNsaWRlQWN0aXZlQ2xhc3MpO1xuXG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICAvLyBEdXBsaWNhdGUgdG8gYWxsIGxvb3BlZCBzbGlkZXNcbiAgICAgIGlmIChhY3RpdmVTbGlkZS5oYXNDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpIHtcbiAgICAgICAgJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzICsgXCI6bm90KC5cIiArIHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzICsgXCIpW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIHJlYWxJbmRleCArIFwiXFxcIl1cIikuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQWN0aXZlQ2xhc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzICsgXCIuXCIgKyBwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcyArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIHJlYWxJbmRleCArIFwiXFxcIl1cIikuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQWN0aXZlQ2xhc3MpO1xuICAgICAgfVxuICAgIH0gLy8gTmV4dCBTbGlkZVxuXG5cbiAgICB2YXIgbmV4dFNsaWRlID0gYWN0aXZlU2xpZGUubmV4dEFsbChcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzKS5lcSgwKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVOZXh0Q2xhc3MpO1xuXG4gICAgaWYgKHBhcmFtcy5sb29w
24510ICYmIG5leHRTbGlkZS5sZW5ndGggPT09IDApIHtcbiAgICAgIG5leHRTbGlkZSA9IHNsaWRlcy5lcSgwKTtcbiAgICAgIG5leHRTbGlkZS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVOZXh0Q2xhc3MpO1xuICAgIH0gLy8gUHJldiBTbGlkZVxuXG5cbiAgICB2YXIgcHJldlNsaWRlID0gYWN0aXZlU2xpZGUucHJldkFsbChcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzKS5lcSgwKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVQcmV2Q2xhc3MpO1xuXG4gICAgaWYgKHBhcmFtcy5sb29wICYmIHByZXZTbGlkZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHByZXZTbGlkZSA9IHNsaWRlcy5lcSgtMSk7XG4gICAgICBwcmV2U2xpZGUuYWRkQ2xhc3MocGFyYW1zLnNsaWRlUHJldkNsYXNzKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIC8vIER1cGxpY2F0ZSB0byBhbGwgbG9vcGVkIHNsaWRlc1xuICAgICAgaWYgKG5leHRTbGlkZS5oYXNDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpIHtcbiAgICAgICAgJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzICsgXCI6bm90KC5cIiArIHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzICsgXCIpW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIG5leHRTbGlkZS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpICsgXCJcXFwiXVwiKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVOZXh0Q2xhc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzICsgXCIuXCIgKyBwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcyArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIG5leHRTbGlkZS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpICsgXCJcXFwiXVwiKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVOZXh0Q2xhc3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJldlNsaWRlLmhhc0NsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSkge1xuICAgICAgICAkd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgcGFyYW1zLnNsaWRlQ2xhc3MgKyBcIjpub3QoLlwiICsgcGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MgKyBcIilbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgcHJldlNsaWRlLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JykgKyBcIlxcXCJdXCIpLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZVByZXZDbGFzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgcGFyYW1zLnNsaWRlQ2xhc3MgKyBcIi5cIiArIHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzICsgXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgcHJldlNsaWRlLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JykgKyBcIlxcXCJdXCIpLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZVByZXZDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXRTbGlkZXNDbGFzc2VzKCk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVBY3RpdmVJbmRleChuZXdBY3RpdmVJbmRleCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciB0cmFuc2xhdGUgPSBzd2lwZXIucnRsVHJhbnNsYXRlID8gc3dpcGVyLnRyYW5zbGF0ZSA6IC1zd2lwZXIudHJhbnNsYXRlO1xuICAgIHZhciBzbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQsXG4gICAgICAgIHNuYXBHcmlkID0gc3dpcGVyLnNuYXBHcmlkLFxuICAgICAgICBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgICBwcmV2aW91c0luZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4LFxuICAgICAgICBwcmV2aW91c1JlYWxJbmRleCA9IHN3aXBlci5yZWFsSW5kZXgsXG4gICAgICAgIHByZXZpb3VzU25hcEluZGV4ID0gc3dpcGVyLnNuYXBJbmRleDtcbiAgICB2YXIgYWN0aXZlSW5kZXggPSBuZXdBY3RpdmVJbmRleDtcbiAgICB2YXIgc25hcEluZGV4O1xuXG4gICAgaWYgKHR5cGVvZiBhY3RpdmVJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzR3JpZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAodHlwZW9mIHNsaWRlc0dyaWRbaSArIDFdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGlmICh0cmFuc2xhdGUgPj0gc2xpZGVzR3JpZFtpXSAmJiB0cmFuc2xhdGUgPCBzbGlkZXNHcmlkW2kgKyAxXSAtIChzbGlkZXNHcmlkW2kgKyAxXSAtIHNsaWRlc0dyaWRbaV0pIC8gMikge1xuICAgICAgICAgICAgYWN0aXZlSW5kZXggPSBpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHJhbnNsYXRlID49IHNsaWRlc0dyaWRbaV0gJiYgdHJhbnNsYXRlIDwgc2xpZGVzR3JpZFtpICsgMV0pIHtcbiAgICAgICAgICAgIGFjdGl2ZUluZGV4ID0gaSArIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRyYW5zbGF0ZSA+PSBzbGlkZXNHcmlkW2ldKSB7XG4gICAgICAgICAgYWN0aXZlSW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICB9IC8vIE5vcm1hbGl6ZSBzbGlkZUluZGV4XG5cblxuICAgICAgaWYgKHBhcmFtcy5ub3JtYWxpemVTbGlkZUluZGV4KSB7XG4gICAgICAgIGlmIChhY3RpdmVJbmRleCA8IDAgfHwgdHlwZW9mIGFjdGl2ZUluZGV4ID09PSAndW5kZWZpbmVkJykgYWN0aXZlSW5kZXggPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzbmFwR3JpZC5pbmRleE9mKHRyYW5zbGF0ZSkgPj0gMCkge1xuICAgICAgc25hcEluZGV4ID0gc25hcEdyaWQuaW5kZXhPZih0cmFuc2xhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2Y
24510XIgc2tpcCA9IE1hdGgubWluKHBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAsIGFjdGl2ZUluZGV4KTtcbiAgICAgIHNuYXBJbmRleCA9IHNraXAgKyBNYXRoLmZsb29yKChhY3RpdmVJbmRleCAtIHNraXApIC8gcGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcbiAgICB9XG5cbiAgICBpZiAoc25hcEluZGV4ID49IHNuYXBHcmlkLmxlbmd0aCkgc25hcEluZGV4ID0gc25hcEdyaWQubGVuZ3RoIC0gMTtcblxuICAgIGlmIChhY3RpdmVJbmRleCA9PT0gcHJldmlvdXNJbmRleCkge1xuICAgICAgaWYgKHNuYXBJbmRleCAhPT0gcHJldmlvdXNTbmFwSW5kZXgpIHtcbiAgICAgICAgc3dpcGVyLnNuYXBJbmRleCA9IHNuYXBJbmRleDtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3NuYXBJbmRleENoYW5nZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBHZXQgcmVhbCBpbmRleFxuXG5cbiAgICB2YXIgcmVhbEluZGV4ID0gcGFyc2VJbnQoc3dpcGVyLnNsaWRlcy5lcShhY3RpdmVJbmRleCkuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSB8fCBhY3RpdmVJbmRleCwgMTApO1xuICAgIGV4dGVuZChzd2lwZXIsIHtcbiAgICAgIHNuYXBJbmRleDogc25hcEluZGV4LFxuICAgICAgcmVhbEluZGV4OiByZWFsSW5kZXgsXG4gICAgICBwcmV2aW91c0luZGV4OiBwcmV2aW91c0luZGV4LFxuICAgICAgYWN0aXZlSW5kZXg6IGFjdGl2ZUluZGV4XG4gICAgfSk7XG4gICAgc3dpcGVyLmVtaXQoJ2FjdGl2ZUluZGV4Q2hhbmdlJyk7XG4gICAgc3dpcGVyLmVtaXQoJ3NuYXBJbmRleENoYW5nZScpO1xuXG4gICAgaWYgKHByZXZpb3VzUmVhbEluZGV4ICE9PSByZWFsSW5kZXgpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdyZWFsSW5kZXhDaGFuZ2UnKTtcbiAgICB9XG5cbiAgICBpZiAoc3dpcGVyLmluaXRpYWxpemVkIHx8IHN3aXBlci5wYXJhbXMucnVuQ2FsbGJhY2tzT25Jbml0KSB7XG4gICAgICBzd2lwZXIuZW1pdCgnc2xpZGVDaGFuZ2UnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVDbGlja2VkU2xpZGUoZSkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciBzbGlkZSA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoXCIuXCIgKyBwYXJhbXMuc2xpZGVDbGFzcylbMF07XG4gICAgdmFyIHNsaWRlRm91bmQgPSBmYWxzZTtcbiAgICB2YXIgc2xpZGVJbmRleDtcblxuICAgIGlmIChzbGlkZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzd2lwZXIuc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChzd2lwZXIuc2xpZGVzW2ldID09PSBzbGlkZSkge1xuICAgICAgICAgIHNsaWRlRm91bmQgPSB0cnVlO1xuICAgICAgICAgIHNsaWRlSW5kZXggPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNsaWRlICYmIHNsaWRlRm91bmQpIHtcbiAgICAgIHN3aXBlci5jbGlja2VkU2xpZGUgPSBzbGlkZTtcblxuICAgICAgaWYgKHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkKSB7XG4gICAgICAgIHN3aXBlci5jbGlja2VkSW5kZXggPSBwYXJzZUludCgkKHNsaWRlKS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpLCAxMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuY2xpY2tlZEluZGV4ID0gc2xpZGVJbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLmNsaWNrZWRTbGlkZSA9IHVuZGVmaW5lZDtcbiAgICAgIHN3aXBlci5jbGlja2VkSW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5zbGlkZVRvQ2xpY2tlZFNsaWRlICYmIHN3aXBlci5jbGlja2VkSW5kZXggIT09IHVuZGVmaW5lZCAmJiBzd2lwZXIuY2xpY2tlZEluZGV4ICE9PSBzd2lwZXIuYWN0aXZlSW5kZXgpIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvQ2xpY2tlZFNsaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHVwZGF0ZSA9IHtcbiAgICB1cGRhdGVTaXplOiB1cGRhdGVTaXplLFxuICAgIHVwZGF0ZVNsaWRlczogdXBkYXRlU2xpZGVzLFxuICAgIHVwZGF0ZUF1dG9IZWlnaHQ6IHVwZGF0ZUF1dG9IZWlnaHQsXG4gICAgdXBkYXRlU2xpZGVzT2Zmc2V0OiB1cGRhdGVTbGlkZXNPZmZzZXQsXG4gICAgdXBkYXRlU2xpZGVzUHJvZ3Jlc3M6IHVwZGF0ZVNsaWRlc1Byb2dyZXNzLFxuICAgIHVwZGF0ZVByb2dyZXNzOiB1cGRhdGVQcm9ncmVzcyxcbiAgICB1cGRhdGVTbGlkZXNDbGFzc2VzOiB1cGRhdGVTbGlkZXNDbGFzc2VzLFxuICAgIHVwZGF0ZUFjdGl2ZUluZGV4OiB1cGRhdGVBY3RpdmVJbmRleCxcbiAgICB1cGRhdGVDbGlja2VkU2xpZGU6IHVwZGF0ZUNsaWNrZWRTbGlkZVxuICB9O1xuXG4gIGZ1bmN0aW9uIGdldFN3aXBlclRyYW5zbGF0ZShheGlzKSB7XG4gICAgaWYgKGF4aXMgPT09IHZvaWQgMCkge1xuICAgICAgYXhpcyA9IHRoaXMuaXNIb3Jpem9udGFsKCkgPyAneCcgOiAneSc7XG4gICAgfVxuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGUsXG4gICAgICAgIHRyYW5zbGF0ZSA9IHN3aXBlci50cmFuc2xhdGUsXG4gICAgICAgICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcblxuICAgIGlmIChwYXJhbXMudmlydHVhbFRyYW5zbGF0ZSkge1xuICAgICAgcmV0dXJuIHJ0bCA/IC10cmFuc2xhdGUgOiB0cmFuc2xhdGU7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICByZXR1cm4gdHJhbnNsYXRlO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50VHJhbnNsYXRlID0gZ2V0VHJhbnNsYXRlKCR3cmFwcGVyRWxbMF0sIGF4aXMpO1xuICAgIGlmIChydGwpIGN1cnJlbnRUcmFuc2xhdGUgPSAtY3VycmVudFRyYW5zbGF0ZTtcbiAgICByZXR1cm4gY3VycmVudFRyYW5zbGF0ZSB8fCAwO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0VHJhbnNsYXRlKHRyYW5zbGF0ZSwgYnlDb250cm9sbGVyKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGUsXG4gICAgICAgI
24510HBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbCxcbiAgICAgICAgd3JhcHBlckVsID0gc3dpcGVyLndyYXBwZXJFbCxcbiAgICAgICAgcHJvZ3Jlc3MgPSBzd2lwZXIucHJvZ3Jlc3M7XG4gICAgdmFyIHggPSAwO1xuICAgIHZhciB5ID0gMDtcbiAgICB2YXIgeiA9IDA7XG5cbiAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICB4ID0gcnRsID8gLXRyYW5zbGF0ZSA6IHRyYW5zbGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgeSA9IHRyYW5zbGF0ZTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykge1xuICAgICAgeCA9IE1hdGguZmxvb3IoeCk7XG4gICAgICB5ID0gTWF0aC5mbG9vcih5KTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHdyYXBwZXJFbFtzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnc2Nyb2xsTGVmdCcgOiAnc2Nyb2xsVG9wJ10gPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAteCA6IC15O1xuICAgIH0gZWxzZSBpZiAoIXBhcmFtcy52aXJ0dWFsVHJhbnNsYXRlKSB7XG4gICAgICAkd3JhcHBlckVsLnRyYW5zZm9ybShcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgsIFwiICsgeiArIFwicHgpXCIpO1xuICAgIH1cblxuICAgIHN3aXBlci5wcmV2aW91c1RyYW5zbGF0ZSA9IHN3aXBlci50cmFuc2xhdGU7XG4gICAgc3dpcGVyLnRyYW5zbGF0ZSA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHggOiB5OyAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIHVwZGF0ZSBwcm9ncmVzc1xuXG4gICAgdmFyIG5ld1Byb2dyZXNzO1xuICAgIHZhciB0cmFuc2xhdGVzRGlmZiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKTtcblxuICAgIGlmICh0cmFuc2xhdGVzRGlmZiA9PT0gMCkge1xuICAgICAgbmV3UHJvZ3Jlc3MgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdQcm9ncmVzcyA9ICh0cmFuc2xhdGUgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIC8gdHJhbnNsYXRlc0RpZmY7XG4gICAgfVxuXG4gICAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKHRyYW5zbGF0ZSk7XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ3NldFRyYW5zbGF0ZScsIHN3aXBlci50cmFuc2xhdGUsIGJ5Q29udHJvbGxlcik7XG4gIH1cblxuICBmdW5jdGlvbiBtaW5UcmFuc2xhdGUoKSB7XG4gICAgcmV0dXJuIC10aGlzLnNuYXBHcmlkWzBdO1xuICB9XG5cbiAgZnVuY3Rpb24gbWF4VHJhbnNsYXRlKCkge1xuICAgIHJldHVybiAtdGhpcy5zbmFwR3JpZFt0aGlzLnNuYXBHcmlkLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNsYXRlVG8odHJhbnNsYXRlLCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCB0cmFuc2xhdGVCb3VuZHMsIGludGVybmFsKSB7XG4gICAgaWYgKHRyYW5zbGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICB0cmFuc2xhdGUgPSAwO1xuICAgIH1cblxuICAgIGlmIChzcGVlZCA9PT0gdm9pZCAwKSB7XG4gICAgICBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkO1xuICAgIH1cblxuICAgIGlmIChydW5DYWxsYmFja3MgPT09IHZvaWQgMCkge1xuICAgICAgcnVuQ2FsbGJhY2tzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHJhbnNsYXRlQm91bmRzID09PSB2b2lkIDApIHtcbiAgICAgIHRyYW5zbGF0ZUJvdW5kcyA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgIHdyYXBwZXJFbCA9IHN3aXBlci53cmFwcGVyRWw7XG5cbiAgICBpZiAoc3dpcGVyLmFuaW1hdGluZyAmJiBwYXJhbXMucHJldmVudEludGVyYWN0aW9uT25UcmFuc2l0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIG1pblRyYW5zbGF0ZSA9IHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgICB2YXIgbWF4VHJhbnNsYXRlID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpO1xuICAgIHZhciBuZXdUcmFuc2xhdGU7XG4gICAgaWYgKHRyYW5zbGF0ZUJvdW5kcyAmJiB0cmFuc2xhdGUgPiBtaW5UcmFuc2xhdGUpIG5ld1RyYW5zbGF0ZSA9IG1pblRyYW5zbGF0ZTtlbHNlIGlmICh0cmFuc2xhdGVCb3VuZHMgJiYgdHJhbnNsYXRlIDwgbWF4VHJhbnNsYXRlKSBuZXdUcmFuc2xhdGUgPSBtYXhUcmFuc2xhdGU7ZWxzZSBuZXdUcmFuc2xhdGUgPSB0cmFuc2xhdGU7IC8vIFVwZGF0ZSBwcm9ncmVzc1xuXG4gICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKG5ld1RyYW5zbGF0ZSk7XG5cbiAgICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHZhciBpc0ggPSBzd2lwZXIuaXNIb3Jpem9udGFsKCk7XG5cbiAgICAgIGlmIChzcGVlZCA9PT0gMCkge1xuICAgICAgICB3cmFwcGVyRWxbaXNIID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddID0gLW5ld1RyYW5zbGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICBpZiAod3JhcHBlckVsLnNjcm9sbFRvKSB7XG4gICAgICAgICAgdmFyIF93cmFwcGVyRWwkc2Nyb2xsVG87XG5cbiAgICAgICAgICB3cmFwcGVyRWwuc2Nyb2xsVG8oKF93cmFwcGVyRWwkc2Nyb2xsVG8gPSB7fSwgX3dyYXBwZXJFbCRzY3JvbGxUb1tpc0ggPyAnbGVmdCcgOiAndG9wJ10gPSAtbmV3VHJhbnNsYXRlLCBfd3JhcHBlckVsJHNjcm9sbFRvLmJlaGF2aW9yID0gJ3Ntb290aCcsIF93cmFwcGVyRWwkc2Nyb2xsVG8pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3cmFwcGVyRWxbaXNIID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddID0gLW5ld1RyYW5zbGF0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3BlZWQgPT09IDApIHtcbiAgICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKDApO1xuICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShuZXdUcmFuc2xhdGUpO1xuXG4gICAgICBpZiAocnVuQ2FsbGJhY2tzKSB7XG4gICAgICAgI
24510HN3aXBlci5lbWl0KCdiZWZvcmVUcmFuc2l0aW9uU3RhcnQnLCBzcGVlZCwgaW50ZXJuYWwpO1xuICAgICAgICBzd2lwZXIuZW1pdCgndHJhbnNpdGlvbkVuZCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihzcGVlZCk7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1RyYW5zbGF0ZSk7XG5cbiAgICAgIGlmIChydW5DYWxsYmFja3MpIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ2JlZm9yZVRyYW5zaXRpb25TdGFydCcsIHNwZWVkLCBpbnRlcm5hbCk7XG4gICAgICAgIHN3aXBlci5lbWl0KCd0cmFuc2l0aW9uU3RhcnQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICAgIHN3aXBlci5hbmltYXRpbmcgPSB0cnVlO1xuXG4gICAgICAgIGlmICghc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCkge1xuICAgICAgICAgIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kKGUpIHtcbiAgICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChlLnRhcmdldCAhPT0gdGhpcykgcmV0dXJuO1xuICAgICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNpdGlvbkVuZCcsIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCA9IG51bGw7XG4gICAgICAgICAgICBkZWxldGUgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZDtcblxuICAgICAgICAgICAgaWYgKHJ1bkNhbGxiYWNrcykge1xuICAgICAgICAgICAgICBzd2lwZXIuZW1pdCgndHJhbnNpdGlvbkVuZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCBzd2lwZXIub25UcmFuc2xhdGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciB0cmFuc2xhdGUgPSB7XG4gICAgZ2V0VHJhbnNsYXRlOiBnZXRTd2lwZXJUcmFuc2xhdGUsXG4gICAgc2V0VHJhbnNsYXRlOiBzZXRUcmFuc2xhdGUsXG4gICAgbWluVHJhbnNsYXRlOiBtaW5UcmFuc2xhdGUsXG4gICAgbWF4VHJhbnNsYXRlOiBtYXhUcmFuc2xhdGUsXG4gICAgdHJhbnNsYXRlVG86IHRyYW5zbGF0ZVRvXG4gIH07XG5cbiAgZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbiwgYnlDb250cm9sbGVyKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG5cbiAgICBpZiAoIXN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgc3dpcGVyLiR3cmFwcGVyRWwudHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ3NldFRyYW5zaXRpb24nLCBkdXJhdGlvbiwgYnlDb250cm9sbGVyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zaXRpb25TdGFydChydW5DYWxsYmFja3MsIGRpcmVjdGlvbikge1xuICAgIGlmIChydW5DYWxsYmFja3MgPT09IHZvaWQgMCkge1xuICAgICAgcnVuQ2FsbGJhY2tzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXgsXG4gICAgICAgIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgIHByZXZpb3VzSW5kZXggPSBzd2lwZXIucHJldmlvdXNJbmRleDtcbiAgICBpZiAocGFyYW1zLmNzc01vZGUpIHJldHVybjtcblxuICAgIGlmIChwYXJhbXMuYXV0b0hlaWdodCkge1xuICAgICAgc3dpcGVyLnVwZGF0ZUF1dG9IZWlnaHQoKTtcbiAgICB9XG5cbiAgICB2YXIgZGlyID0gZGlyZWN0aW9uO1xuXG4gICAgaWYgKCFkaXIpIHtcbiAgICAgIGlmIChhY3RpdmVJbmRleCA+IHByZXZpb3VzSW5kZXgpIGRpciA9ICduZXh0JztlbHNlIGlmIChhY3RpdmVJbmRleCA8IHByZXZpb3VzSW5kZXgpIGRpciA9ICdwcmV2JztlbHNlIGRpciA9ICdyZXNldCc7XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ3RyYW5zaXRpb25TdGFydCcpO1xuXG4gICAgaWYgKHJ1bkNhbGxiYWNrcyAmJiBhY3RpdmVJbmRleCAhPT0gcHJldmlvdXNJbmRleCkge1xuICAgICAgaWYgKGRpciA9PT0gJ3Jlc2V0Jykge1xuICAgICAgICBzd2lwZXIuZW1pdCgnc2xpZGVSZXNldFRyYW5zaXRpb25TdGFydCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci5lbWl0KCdzbGlkZUNoYW5nZVRyYW5zaXRpb25TdGFydCcpO1xuXG4gICAgICBpZiAoZGlyID09PSAnbmV4dCcpIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlTmV4dFRyYW5zaXRpb25TdGFydCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlUHJldlRyYW5zaXRpb25TdGFydCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zaXRpb25FbmQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pIHtcbiAgICBpZiAocnVuQ2FsbGJhY2tzID09PSB2b2lkIDApIHtcbiAgICAgIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4LFxuICAgICAgICBwcmV2aW91c0luZGV4ID0gc3dpcGVyLnByZXZpb3VzSW5kZXgsXG4gICAgICAgIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgc3dpcGVyLmFuaW1hdGluZyA9IGZhbHNlO1xuICAgIGlmIChwYXJhbXMuY3NzTW9kZSkgcmV0dXJuO1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKDApO1xuICAgIHZhciBkaXIgPSBkaXJlY3Rpb247XG5cbiAgICBpZiAoIWRpcikge1xuICAgICAgaWYgKGFjdGl2ZUluZGV4ID4gcHJldmlvdXNJbmRleCkgZGlyID0gJ25leHQnO2Vsc2UgaWYgKGFjdGl2ZUluZGV4IDwgcHJldmlvdXNJbmRleCkgZGlyID0gJ3ByZXYnO2Vsc2UgZGlyID0gJ3Jlc2V0JztcbiAgICB9XG5cbiAgICBzd2lwZXIuZW1pdCgndHJhbnNpdGlvbkVuZCcpO1xuXG4gICAgaWYgKHJ1bkNhbGxiYWNrcyAmJiBhY3RpdmVJbmRleCAhPT0gcHJldmlvdXNJbmRleCkge1xuICAgICAgaWYgKGRpciA9PT0gJ3Jlc2V0Jykge1xuICAgICAgICBzd2lwZXIuZW1pdCgnc2xpZGVSZXNldFRyYW5zaXRpb25FbmQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuZW1pdCgnc2xpZGVDaGFuZ2VUcmFuc2l0aW9uRW5kJyk7XG5cbiAgICAgIGlmIChkaXIgPT09ICduZXh0Jykge1xuICAgICAgICBzd2lwZXIuZW1pdCgnc2xpZGVOZXh0VHJhbnNpdGlvbkVuZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlUHJldlRyYW5zaXRpb25FbmQnKTtcbiAgICAgIH1cbiAgICB9XG4gI
24510H1cblxuICB2YXIgdHJhbnNpdGlvbiA9IHtcbiAgICBzZXRUcmFuc2l0aW9uOiBzZXRUcmFuc2l0aW9uLFxuICAgIHRyYW5zaXRpb25TdGFydDogdHJhbnNpdGlvblN0YXJ0LFxuICAgIHRyYW5zaXRpb25FbmQ6IHRyYW5zaXRpb25FbmRcbiAgfTtcblxuICBmdW5jdGlvbiBzbGlkZVRvKGluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCwgaW5pdGlhbCkge1xuICAgIGlmIChpbmRleCA9PT0gdm9pZCAwKSB7XG4gICAgICBpbmRleCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHNwZWVkID09PSB2b2lkIDApIHtcbiAgICAgIHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQ7XG4gICAgfVxuXG4gICAgaWYgKHJ1bkNhbGxiYWNrcyA9PT0gdm9pZCAwKSB7XG4gICAgICBydW5DYWxsYmFja3MgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5kZXggIT09ICdudW1iZXInICYmIHR5cGVvZiBpbmRleCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSAnaW5kZXgnIGFyZ3VtZW50IGNhbm5vdCBoYXZlIHR5cGUgb3RoZXIgdGhhbiAnbnVtYmVyJyBvciAnc3RyaW5nJy4gW1wiICsgdHlwZW9mIGluZGV4ICsgXCJdIGdpdmVuLlwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluZGV4ID09PSAnc3RyaW5nJykge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgYGluZGV4YCBhcmd1bWVudCBjb252ZXJ0ZWQgZnJvbSBgc3RyaW5nYCB0byBgbnVtYmVyYC5cbiAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgKi9cbiAgICAgIHZhciBpbmRleEFzTnVtYmVyID0gcGFyc2VJbnQoaW5kZXgsIDEwKTtcbiAgICAgIC8qKlxuICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR
24510oZSBgaW5kZXhgIGFyZ3VtZW50IGlzIGEgdmFsaWQgYG51bWJlcmBcbiAgICAgICAqIGFmdGVyIGJlaW5nIGNvbnZlcnRlZCBmcm9tIHRoZSBgc3RyaW5nYCB0eXBlLlxuICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgKi9cblxuICAgICAgdmFyIGlzVmFsaWROdW1iZXIgPSBpc0Zpbml0ZShpbmRleEFzTnVtYmVyKTtcblxuICAgICAgaWYgKCFpc1ZhbGlkTnVtYmVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXNzZWQtaW4gJ2luZGV4JyAoc3RyaW5nKSBjb3VsZG4ndCBiZSBjb252ZXJ0ZWQgdG8gJ251bWJlcicuIFtcIiArIGluZGV4ICsgXCJdIGdpdmVuLlwiKTtcbiAgICAgIH0gLy8gS25vd2luZyB0aGF0IHRoZSBjb252ZXJ0ZWQgYGluZGV4YCBpcyBhIHZhbGlkIG51bWJlcixcbiAgICAgIC8vIHdlIGNhbiB1cGRhdGUgdGhlIG9yaWdpbmFsIGFyZ3VtZW50J3MgdmFsdWUuXG5cblxuICAgICAgaW5kZXggPSBpbmRleEFzTnVtYmVyO1xuICAgIH1cblxuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBzbGlkZUluZGV4ID0gaW5kZXg7XG4gICAgaWYgKHNsaWRlSW5kZXggPCAwKSBzbGlkZUluZGV4ID0gMDtcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQsXG4gICAgICAgIHNsaWRlc0dyaWQgPSBzd2lwZXIuc2xpZGVzR3JpZCxcbiAgICAgICAgcHJldmlvdXNJbmRleCA9IHN3aXBlci5wcmV2aW91c0luZGV4LFxuICAgICAgICBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCxcbiAgICAgICAgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSxcbiAgICAgICAgd3JhcHBlckVsID0gc3dpcGVyLndyYXBwZXJFbCxcbiAgICAgICAgZW5hYmxlZCA9IHN3aXBlci5lbmFibGVkO1xuXG4gICAgaWYgKHN3aXBlci5hbmltYXRpbmcgJiYgcGFyYW1zLnByZXZlbnRJbnRlcmFjdGlvbk9uVHJhbnNpdGlvbiB8fCAhZW5hYmxlZCAmJiAhaW50ZXJuYWwgJiYgIWluaXRpYWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgc2tpcCA9IE1hdGgubWluKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwLCBzbGlkZUluZGV4KTtcbiAgICB2YXIgc25hcEluZGV4ID0gc2tpcCArIE1hdGguZmxvb3IoKHNsaWRlSW5kZXggLSBza2lwKSAvIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuICAgIGlmIChzbmFwSW5kZXggPj0gc25hcEdyaWQubGVuZ3RoKSBzbmFwSW5kZXggPSBzbmFwR3JpZC5sZW5ndGggLSAxO1xuXG4gICAgaWYgKChhY3RpdmVJbmRleCB8fCBwYXJhbXMuaW5pdGlhbFNsaWRlIHx8IDApID09PSAocHJldmlvdXNJbmRleCB8fCAwKSAmJiBydW5DYWxsYmFja3MpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdiZWZvcmVTbGlkZUNoYW5nZVN0YXJ0Jyk7XG4gICAgfVxuXG4gICAgdmFyIHRyYW5zbGF0ZSA9IC1zbmFwR3JpZFtzbmFwSW5kZXhdOyAvLyBVcGRhdGUgcHJvZ3Jlc3NcblxuICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyh0cmFuc2xhdGUpOyAvLyBOb3JtYWxpemUgc2xpZGVJbmRleFxuXG4gICAgaWYgKHBhcmFtcy5ub3JtYWxpemVTbGlkZUluZGV4KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlc0dyaWQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRUcmFuc2xhdGUgPSAtTWF0aC5mbG9vcih0cmFuc2xhdGUgKiAxMDApO1xuICAgICAgICB2Y
24510XIgbm9ybWFsaXplZEdpcmQgPSBNYXRoLmZsb29yKHNsaWRlc0dyaWRbaV0gKiAxMDApO1xuICAgICAgICB2YXIgbm9ybWFsaXplZEdyaWROZXh0ID0gTWF0aC5mbG9vcihzbGlkZXNHcmlkW2kgKyAxXSAqIDEwMCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBzbGlkZXNHcmlkW2kgKyAxXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBpZiAobm9ybWFsaXplZFRyYW5zbGF0ZSA+PSBub3JtYWxpemVkR2lyZCAmJiBub3JtYWxpemVkVHJhbnNsYXRlIDwgbm9ybWFsaXplZEdyaWROZXh0IC0gKG5vcm1hbGl6ZWRHcmlkTmV4dCAtIG5vcm1hbGl6ZWRHaXJkKSAvIDIpIHtcbiAgICAgICAgICAgIHNsaWRlSW5kZXggPSBpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZFRyYW5zbGF0ZSA+PSBub3JtYWxpemVkR2lyZCAmJiBub3JtYWxpemVkVHJhbnNsYXRlIDwgbm9ybWFsaXplZEdyaWROZXh0KSB7XG4gICAgICAgICAgICBzbGlkZUluZGV4ID0gaSArIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWRUcmFuc2xhdGUgPj0gbm9ybWFsaXplZEdpcmQpIHtcbiAgICAgICAgICBzbGlkZUluZGV4ID0gaTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gRGlyZWN0aW9ucyBsb2Nrc1xuXG5cbiAgICBpZiAoc3dpcGVyLmluaXRpYWxpemVkICYmIHNsaWRlSW5kZXggIT09IGFjdGl2ZUluZGV4KSB7XG4gICAgICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlTmV4dCAmJiB0cmFuc2xhdGUgPCBzd2lwZXIudHJhbnNsYXRlICYmIHRyYW5zbGF0ZSA8IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVQcmV2ICYmIHRyYW5zbGF0ZSA+IHN3aXBlci50cmFuc2xhdGUgJiYgdHJhbnNsYXRlID4gc3dpcGVyLm1heFRyYW5zbGF0ZSgpKSB7XG4gICAgICAgIGlmICgoYWN0aXZlSW5kZXggfHwgMCkgIT09IHNsaWRlSW5kZXgpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGlyZWN0aW9uO1xuICAgIGlmIChzbGlkZUluZGV4ID4gYWN0aXZlSW5kZXgpIGRpcmVjdGlvbiA9ICduZXh0JztlbHNlIGlmIChzbGlkZUluZGV4IDwgYWN0aXZlSW5kZXgpIGRpcmVjdGlvbiA9ICdwcmV2JztlbHNlIGRpcmVjdGlvbiA9ICdyZXNldCc7IC8vIFVwZGF0ZSBJbmRleFxuXG4gICAgaWYgKHJ0bCAmJiAtdHJhbnNsYXRlID09PSBzd2lwZXIudHJhbnNsYXRlIHx8ICFydGwgJiYgdHJhbnNsYXRlID09PSBzd2lwZXIudHJhbnNsYXRlKSB7XG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoc2xpZGVJbmRleCk7IC8vIFVwZGF0ZSBIZWlnaHRcblxuICAgICAgaWYgKHBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgICAgIHN3aXBlci51cGRhdGVBdXRvSGVpZ2h0KCk7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG5cbiAgICAgIGlmIChwYXJhbXMuZWZmZWN0ICE9PSAnc2xpZGUnKSB7XG4gICAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUodHJhbnNsYXRlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpcmVjdGlvbiAhPT0gJ3Jlc2V0Jykge1xuICAgICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgICAgICAgc3dpcGVyLnRyYW5zaXRpb25FbmQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICB2Y
24510XIgaXNIID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpO1xuICAgICAgdmFyIHQgPSAtdHJhbnNsYXRlO1xuXG4gICAgICBpZiAocnRsKSB7XG4gICAgICAgIHQgPSB3cmFwcGVyRWwuc2Nyb2xsV2lkdGggLSB3cmFwcGVyRWwub2Zmc2V0V2lkdGggLSB0O1xuICAgICAgfVxuXG4gICAgICBpZiAoc3BlZWQgPT09IDApIHtcbiAgICAgICAgd3JhcHBlckVsW2lzSCA/ICdzY3JvbGxMZWZ0JyA6ICdzY3JvbGxUb3AnXSA9IHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgaWYgKHdyYXBwZXJFbC5zY3JvbGxUbykge1xuICAgICAgICAgIHZhciBfd3JhcHBlckVsJHNjcm9sbFRvO1xuXG4gICAgICAgICAgd3JhcHBlckVsLnNjcm9sbFRvKChfd3JhcHBlckVsJHNjcm9sbFRvID0ge30sIF93cmFwcGVyRWwkc2Nyb2xsVG9baXNIID8gJ2xlZnQnIDogJ3RvcCddID0gdCwgX3dyYXBwZXJFbCRzY3JvbGxUby5iZWhhdmlvciA9ICdzbW9vdGgnLCBfd3JhcHBlckVsJHNjcm9sbFRvKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd3JhcHBlckVsW2lzSCA/ICdzY3JvbGxMZWZ0JyA6ICdzY3JvbGxUb3AnXSA9IHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHNwZWVkID09PSAwKSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbigwKTtcbiAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUodHJhbnNsYXRlKTtcbiAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleChzbGlkZUluZGV4KTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgICBzd2lwZXIuZW1pdCgnYmVmb3JlVHJhbnNpdGlvblN0YXJ0Jywgc3BlZWQsIGludGVybmFsKTtcbiAgICAgIHN3aXBlci50cmFuc2l0aW9uU3RhcnQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgICAgc3dpcGVyLnRyYW5zaXRpb25FbmQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihzcGVlZCk7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKHRyYW5zbGF0ZSk7XG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoc2xpZGVJbmRleCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgICAgc3dpcGVyLmVtaXQoJ2JlZm9yZVRyYW5zaXRpb25TdGFydCcsIHNwZWVkLCBpbnRlcm5hbCk7XG4gICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcblxuICAgICAgaWYgKCFzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICAgIHN3aXBlci5hbmltYXRpbmcgPSB0cnVlO1xuXG4gICAgICAgIGlmICghc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKSB7XG4gICAgICAgICAgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gdHJhbnNpdGlvbkVuZChlKSB7XG4gICAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoZS50YXJnZXQgIT09IHRoaXMpIHJldHVybjtcbiAgICAgICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNpdGlvbkVuZCcsIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gICAgICAgICAgICBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQgPSBudWxsO1xuICAgICAgICAgICAgZGVsZXRlIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZDtcbiAgICAgICAgICAgIHN3aXBlci50cmFuc2l0aW9uRW5kKHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0uYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2xpZGVUb0xvb3AoaW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKSB7XG4gICAgaWYgKGluZGV4ID09PSB2b2lkIDApIHtcbiAgICAgIGluZGV4ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoc3BlZWQgPT09IHZvaWQgMCkge1xuICAgICAgc3BlZWQgPSB0aGlzLnBhcmFtcy5zcGVlZDtcbiAgICB9XG5cbiAgICBpZiAocnVuQ2FsbGJhY2tzID09PSB2b2lkIDApIHtcbiAgICAgIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIG5ld0luZGV4ID0gaW5kZXg7XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICBuZXdJbmRleCArPSBzd2lwZXIubG9vcGVkU2xpZGVzO1xuICAgIH1cblxuICAgIHJldHVybiBzd2lwZXIuc2xpZGVUbyhuZXdJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG4gIGZ1bmN0aW9uIHNsaWRlTmV4dChzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCkge1xuICAgIGlmIChzcGVlZCA9PT0gdm9pZCAwKSB7XG4gICAgICBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkO1xuICAgIH1cblxuICAgIGlmIChydW5DYWxsYmFja3MgPT09IHZvaWQgMCkge1xuICAgICAgcnVuQ2FsbGJhY2tzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgYW5pbWF0aW5nID0gc3dpcGVyLmFuaW1hdGluZyxcbiAgICAgICAgZW5hYmxlZCA9IHN3aXBlci5lbmFibGVkO1xuICAgIGlmICghZW5hYmxlZCkgcmV0dXJuIHN3aXBlcjtcbiAgICB2YXIgaW5jcmVtZW50ID0gc3dpcGVyLmFjdGl2ZUluZGV4IDwgcGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCA/IDEgOiBwYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG5cbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIGlmIChhbmltYXRpbmcgJiYgcGFyYW1zLmxvb3BQcmV2ZW50c1NsaWRlKSByZXR1cm4gZmFsc2U7XG4gICAgICBzd2lwZXIubG9vcEZpeCgpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcblxuICAgICAgc3dpcGVyLl9jbGllbnRMZWZ0ID0gc3dpcGVyLiR3cmFwcGVyRWxbMF0uY2xpZW50TGVmdDtcbiAgICB9XG5cbiAgICByZXR1cm4gc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4ICsgaW5jcmVtZW50LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG4gIH1cblxuICAvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IFwib2ZmXCIgKi9cbiAgZnVuY3Rpb24gc2xpZGVQcmV2KHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKSB7XG4gICAgaWYgKHNwZWVkID09PSB2b2lkIDApIHtcbiAgICAgIHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQ7XG4gICAgfVxuXG4gICAgaWYgKHJ1bkNhbGxiYWNrcyA9PT0gdm9pZCAwKSB7XG4gICAgICBydW5DYWxsYmFja3MgPSB0cnVlO1xuICAgIH1cblxuICAgI
24510HZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgICBhbmltYXRpbmcgPSBzd2lwZXIuYW5pbWF0aW5nLFxuICAgICAgICBzbmFwR3JpZCA9IHN3aXBlci5zbmFwR3JpZCxcbiAgICAgICAgc2xpZGVzR3JpZCA9IHN3aXBlci5zbGlkZXNHcmlkLFxuICAgICAgICBydGxUcmFuc2xhdGUgPSBzd2lwZXIucnRsVHJhbnNsYXRlLFxuICAgICAgICBlbmFibGVkID0gc3dpcGVyLmVuYWJsZWQ7XG4gICAgaWYgKCFlbmFibGVkKSByZXR1cm4gc3dpcGVyO1xuXG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBpZiAoYW5pbWF0aW5nICYmIHBhcmFtcy5sb29wUHJldmVudHNTbGlkZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgc3dpcGVyLmxvb3BGaXgoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5cbiAgICAgIHN3aXBlci5fY2xpZW50TGVmdCA9IHN3aXBlci4kd3JhcHBlckVsWzBdLmNsaWVudExlZnQ7XG4gICAgfVxuXG4gICAgdmFyIHRyYW5zbGF0ZSA9IHJ0bFRyYW5zbGF0ZSA/IHN3aXBlci50cmFuc2xhdGUgOiAtc3dpcGVyLnRyYW5zbGF0ZTtcblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZSh2YWwpIHtcbiAgICAgIGlmICh2YWwgPCAwKSByZXR1cm4gLU1hdGguZmxvb3IoTWF0aC5hYnModmFsKSk7XG4gICAgICByZXR1cm4gTWF0aC5mbG9vcih2YWwpO1xuICAgIH1cblxuICAgIHZhciBub3JtYWxpemVkVHJhbnNsYXRlID0gbm9ybWFsaXplKHRyYW5zbGF0ZSk7XG4gICAgdmFyIG5vcm1hbGl6ZWRTbmFwR3JpZCA9IHNuYXBHcmlkLm1hcChmdW5jdGlvbiAodmFsKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplKHZhbCk7XG4gICAgfSk7XG4gICAgc25hcEdyaWRbbm9ybWFsaXplZFNuYXBHcmlkLmluZGV4T2Yobm9ybWFsaXplZFRyYW5zbGF0ZSldO1xuICAgIHZhciBwcmV2U25hcCA9IHNuYXBHcmlkW25vcm1hbGl6ZWRTbmFwR3JpZC5pbmRleE9mKG5vcm1hbGl6ZWRUcmFuc2xhdGUpIC0gMV07XG5cbiAgICBpZiAodHlwZW9mIHByZXZTbmFwID09PSAndW5kZWZpbmVkJyAmJiBwYXJhbXMuY3NzTW9kZSkge1xuICAgICAgc25hcEdyaWQuZm9yRWFjaChmdW5jdGlvbiAoc25hcCkge1xuICAgICAgICBpZiAoIXByZXZTbmFwICYmIG5vcm1hbGl6ZWRUcmFuc2xhdGUgPj0gc25hcCkgcHJldlNuYXAgPSBzbmFwO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZJbmRleDtcblxuICAgIGlmICh0eXBlb2YgcHJldlNuYXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwcmV2SW5kZXggPSBzbGlkZXNHcmlkLmluZGV4T2YocHJldlNuYXApO1xuICAgICAgaWYgKHByZXZJbmRleCA8IDApIHByZXZJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCAtIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKHByZXZJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG4gIGZ1bmN0aW9uIHNsaWRlUmVzZXQoc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpIHtcbiAgICBpZiAoc3BlZWQgPT09IHZvaWQgMCkge1xuICAgICAgc3BlZWQgPSB0aGlzLnBhcmFtcy5zcGVlZDtcbiAgICB9XG5cbiAgICBpZiAocnVuQ2FsbGJhY2tzID09PSB2b2lkIDApIHtcbiAgICAgIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG4gIGZ1bmN0aW9uIHNsaWRlVG9DbG9zZXN0KHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsLCB0aHJlc2hvbGQpIHtcbiAgICBpZiAoc3BlZWQgPT09IHZvaWQgMCkge1xuICAgICAgc3BlZWQgPSB0aGlzLnBhcmFtcy5zcGVlZDtcbiAgICB9XG5cbiAgICBpZiAocnVuQ2FsbGJhY2tzID09PSB2b2lkIDApIHtcbiAgICAgIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJlc2hvbGQgPSAwLjU7XG4gICAgfVxuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgIHZhciBza2lwID0gTWF0aC5taW4oc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAsIGluZGV4KTtcbiAgICB2YXIgc25hcEluZGV4ID0gc2tpcCArIE1hdGguZmxvb3IoKGluZGV4IC0gc2tpcCkgLyBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcbiAgICB2YXIgdHJhbnNsYXRlID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IHN3aXBlci50cmFuc2xhdGUgOiAtc3dpcGVyLnRyYW5zbGF0ZTtcblxuICAgIGlmICh0cmFuc2xhdGUgPj0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleF0pIHtcbiAgICAgIC8vIFRoZSBjdXJyZW50IHRyYW5zbGF0ZSBpcyBvbiBvciBhZnRlciB0aGUgY3VycmVudCBzbmFwIGluZGV4LCBzbyB0aGUgY2hvaWNlXG4gICAgICAvLyBpcyBiZXR3ZWVuIHRoZSBjdXJyZW50IGluZGV4IGFuZCB0aGUgb25lIGFmdGVyIGl0LlxuICAgICAgdmFyIGN1cnJlbnRTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleF07XG4gICAgICB2Y
24510XIgbmV4dFNuYXAgPSBzd2lwZXIuc25hcEdyaWRbc25hcEluZGV4ICsgMV07XG5cbiAgICAgIGlmICh0cmFuc2xhdGUgLSBjdXJyZW50U25hcCA+IChuZXh0U25hcCAtIGN1cnJlbnRTbmFwKSAqIHRocmVzaG9sZCkge1xuICAgICAgICBpbmRleCArPSBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgY3VycmVudCB0cmFuc2xhdGUgaXMgYmVmb3JlIHRoZSBjdXJyZW50IHNuYXAgaW5kZXgsIHNvIHRoZSBjaG9pY2VcbiAgICAgIC8vIGlzIGJldHdlZW4gdGhlIGN1cnJlbnQgaW5kZXggYW5kIHRoZSBvbmUgYmVmb3JlIGl0LlxuICAgICAgdmFyIHByZXZTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleCAtIDFdO1xuICAgICAgdmFyIF9jdXJyZW50U25hcCA9IHN3aXBlci5zbmFwR3JpZFtzbmFwSW5kZXhdO1xuXG4gICAgICBpZiAodHJhbnNsYXRlIC0gcHJldlNuYXAgPD0gKF9jdXJyZW50U25hcCAtIHByZXZTbmFwKSAqIHRocmVzaG9sZCkge1xuICAgICAgICBpbmRleCAtPSBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluZGV4ID0gTWF0aC5tYXgoaW5kZXgsIDApO1xuICAgIGluZGV4ID0gTWF0aC5taW4oaW5kZXgsIHN3aXBlci5zbGlkZXNHcmlkLmxlbmd0aCAtIDEpO1xuICAgIHJldHVybiBzd2lwZXIuc2xpZGVUbyhpbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2xpZGVUb0NsaWNrZWRTbGlkZSgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgIHZhciBzbGlkZXNQZXJWaWV3ID0gcGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyA/IHN3aXBlci5zbGlkZXNQZXJWaWV3RHluYW1pYygpIDogcGFyYW1zLnNsaWRlc1BlclZpZXc7XG4gICAgdmFyIHNsaWRlVG9JbmRleCA9IHN3aXBlci5jbGlja2VkSW5kZXg7XG4gICAgdmFyIHJlYWxJbmRleDtcblxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgaWYgKHN3aXBlci5hbmltYXRpbmcpIHJldHVybjtcbiAgICAgIHJlYWxJbmRleCA9IHBhcnNlSW50KCQoc3dpcGVyLmNsaWNrZWRTbGlkZSkuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSwgMTApO1xuXG4gICAgICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICAgIGlmIChzbGlkZVRvSW5kZXggPCBzd2lwZXIubG9vcGVkU2xpZGVzIC0gc2xpZGVzUGVyVmlldyAvIDIgfHwgc2xpZGVUb0luZGV4ID4gc3dpcGVyLnNsaWRlcy5sZW5ndGggLSBzd2lwZXIubG9vcGVkU2xpZGVzICsgc2xpZGVzUGVyVmlldyAvIDIpIHtcbiAgICAgICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgICAgIHNsaWRlVG9JbmRleCA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oXCIuXCIgKyBwYXJhbXMuc2xpZGVDbGFzcyArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIHJlYWxJbmRleCArIFwiXFxcIl06bm90KC5cIiArIHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzICsgXCIpXCIpLmVxKDApLmluZGV4KCk7XG4gICAgICAgICAgbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNsaWRlVG9JbmRleCA+IHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gc2xpZGVzUGVyVmlldykge1xuICAgICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgICBzbGlkZVRvSW5kZXggPSAkd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgcGFyYW1zLnNsaWRlQ2xhc3MgKyBcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyByZWFsSW5kZXggKyBcIlxcXCJdOm5vdCguXCIgKyBwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcyArIFwiKVwiKS5lcSgwKS5pbmRleCgpO1xuICAgICAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzbGlkZSA9IHtcbiAgICBzbGlkZVRvOiBzbGlkZVRvLFxuICAgIHNsaWRlVG9Mb29wOiBzbGlkZVRvTG9vcCxcbiAgICBzbGlkZU5leHQ6IHNsaWRlTmV4dCxcbiAgICBzbGlkZVByZXY6IHNsaWRlUHJldixcbiAgICBzbGlkZVJlc2V0OiBzbGlkZVJlc2V0LFxuICAgIHNsaWRlVG9DbG9zZXN0OiBzbGlkZVRvQ2xvc2VzdCxcbiAgICBzbGlkZVRvQ2xpY2tlZFNsaWRlOiBzbGlkZVRvQ2xpY2tlZFNsaWRlXG4gIH07XG5cbiAgZnVuY3Rpb24gbG9vcENyZWF0ZSgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgICAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7IC8vIFJlbW92ZSBkdXBsaWNhdGVkIHNsaWRlc1xuXG4gICAgJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzICsgXCIuXCIgKyBwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykucmVtb3ZlKCk7XG4gICAgdmFyIHNsaWRlcyA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oXCIuXCIgKyBwYXJhbXMuc2xpZGVDbGFzcyk7XG5cbiAgICBpZiAocGFyYW1zLmxvb3BGaWxsR3JvdXBXaXRoQmxhbmspIHtcbiAgICAgIHZhciBibGFua1NsaWRlc051bSA9IHBhcmFtcy5zbGlkZXNQZXJHcm91cCAtIHNsaWRlcy5sZW5ndGggJSBwYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG5cbiAgICAgIGlmIChibGFua1NsaWRlc051bSAhPT0gcGFyYW1zLnNsaWRlc1Blckdyb3VwKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxhbmtTbGlkZXNOdW07IGkgKz
245100gMSkge1xuICAgICAgICAgIHZhciBibGFua05vZGUgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVDbGFzcyArIFwiIFwiICsgcGFyYW1zLnNsaWRlQmxhbmtDbGFzcyk7XG4gICAgICAgICAgJHdyYXBwZXJFbC5hcHBlbmQoYmxhbmtOb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNsaWRlcyA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oXCIuXCIgKyBwYXJhbXMuc2xpZGVDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bycgJiYgIXBhcmFtcy5sb29wZWRTbGlkZXMpIHBhcmFtcy5sb29wZWRTbGlkZXMgPSBzbGlkZXMubGVuZ3RoO1xuICAgIHN3aXBlci5sb29wZWRTbGlkZXMgPSBNYXRoLmNlaWwocGFyc2VGbG9hdChwYXJhbXMubG9vcGVkU2xpZGVzIHx8IHBhcmFtcy5zbGlkZXNQZXJWaWV3LCAxMCkpO1xuICAgIHN3aXBlci5sb29wZWRTbGlkZXMgKz0gcGFyYW1zLmxvb3BBZGRpdGlvbmFsU2xpZGVzO1xuXG4gICAgaWYgKHN3aXBlci5sb29wZWRTbGlkZXMgPiBzbGlkZXMubGVuZ3RoKSB7XG4gICAgICBzd2lwZXIubG9vcGVkU2xpZGVzID0gc2xpZGVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICB2YXIgcHJlcGVuZFNsaWRlcyA9IFtdO1xuICAgIHZhciBhcHBlbmRTbGlkZXMgPSBbXTtcbiAgICBzbGlkZXMuZWFjaChmdW5jdGlvbiAoZWwsIGluZGV4KSB7XG4gICAgICB2YXIgc2xpZGUgPSAkKGVsKTtcblxuICAgICAgaWYgKGluZGV4IDwgc3dpcGVyLmxvb3BlZFNsaWRlcykge1xuICAgICAgICBhcHBlbmRTbGlkZXMucHVzaChlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmRleCA8IHNsaWRlcy5sZW5ndGggJiYgaW5kZXggPj0gc2xpZGVzLmxlbmd0aCAtIHN3aXBlci5sb29wZWRTbGlkZXMpIHtcbiAgICAgICAgcHJlcGVuZFNsaWRlcy5wdXNoKGVsKTtcbiAgICAgIH1cblxuICAgICAgc2xpZGUuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnLCBpbmRleCk7XG4gICAgfSk7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXBwZW5kU2xpZGVzLmxlbmd0aDsgX2kgKz0gMSkge1xuICAgICAgJHdyYXBwZXJFbC5hcHBlbmQoJChhcHBlbmRTbGlkZXNbX2ldLmNsb25lTm9kZSh0cnVlKSkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaTIgPSBwcmVwZW5kU2xpZGVzLmxlbmd0aCAtIDE7IF9pMiA+PSAwOyBfaTIgLT0gMSkge1xuICAgICAgJHdyYXBwZXJFbC5wcmVwZW5kKCQocHJlcGVuZFNsaWRlc1tfaTJdLmNsb25lTm9kZSh0cnVlKSkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBsb29wRml4KCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHN3aXBlci5lbWl0KCdiZWZvcmVMb29wRml4Jyk7XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4LFxuICAgICAgICBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzLFxuICAgICAgICBsb29wZWRTbGlkZXMgPSBzd2lwZXIubG9vcGVkU2xpZGVzLFxuICAgICAgICBhbGxvd1NsaWRlUHJldiA9IHN3aXBlci5hbGxvd1NsaWRlUHJldixcbiAgICAgICAgYWxsb3dTbGlkZU5leHQgPSBzd2lwZXIuYWxsb3dTbGlkZU5leHQsXG4gICAgICAgIHNuYXBHcmlkID0gc3dpcGVyLnNuYXBHcmlkLFxuICAgICAgICBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuICAgIHZhciBuZXdJbmRleDtcbiAgICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSB0cnVlO1xuICAgIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9IHRydWU7XG4gICAgdmFyIHNuYXBUcmFuc2xhdGUgPSAtc25hcEdyaWRbYWN0aXZlSW5kZXhdO1xuICAgIHZhciBkaWZmID0gc25hcFRyYW5zbGF0ZSAtIHN3aXBlci5nZXRUcmFuc2xhdGUoKTsgLy8gRml4IEZvciBOZWdhdGl2ZSBPdmVyc2xpZGluZ1xuXG4gICAgaWYgKGFjdGl2ZUluZGV4IDwgbG9vcGVkU2xpZGVzKSB7XG4gICAgICBuZXdJbmRleCA9IHNsaWRlcy5sZW5ndGggLSBsb29wZWRTbGlkZXMgKiAzICsgYWN0aXZlSW5kZXg7XG4gICAgICBuZXdJbmRleCArPSBsb29wZWRTbGlkZXM7XG4gICAgICB2Y
24510XIgc2xpZGVDaGFuZ2VkID0gc3dpcGVyLnNsaWRlVG8obmV3SW5kZXgsIDAsIGZhbHNlLCB0cnVlKTtcblxuICAgICAgaWYgKHNsaWRlQ2hhbmdlZCAmJiBkaWZmICE9PSAwKSB7XG4gICAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUoKHJ0bCA/IC1zd2lwZXIudHJhbnNsYXRlIDogc3dpcGVyLnRyYW5zbGF0ZSkgLSBkaWZmKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFjdGl2ZUluZGV4ID49IHNsaWRlcy5sZW5ndGggLSBsb29wZWRTbGlkZXMpIHtcbiAgICAgIC8vIEZpeCBGb3IgUG9zaXRpdmUgT3ZlcnNsaWRpbmdcbiAgICAgIG5ld0luZGV4ID0gLXNsaWRlcy5sZW5ndGggKyBhY3RpdmVJbmRleCArIGxvb3BlZFNsaWRlcztcbiAgICAgIG5ld0luZGV4ICs9IGxvb3BlZFNsaWRlcztcblxuICAgICAgdmFyIF9zbGlkZUNoYW5nZWQgPSBzd2lwZXIuc2xpZGVUbyhuZXdJbmRleCwgMCwgZmFsc2UsIHRydWUpO1xuXG4gICAgICBpZiAoX3NsaWRlQ2hhbmdlZCAmJiBkaWZmICE9PSAwKSB7XG4gICAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUoKHJ0bCA/IC1zd2lwZXIudHJhbnNsYXRlIDogc3dpcGVyLnRyYW5zbGF0ZSkgLSBkaWZmKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSBhbGxvd1NsaWRlUHJldjtcbiAgICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSBhbGxvd1NsaWRlTmV4dDtcbiAgICBzd2lwZXIuZW1pdCgnbG9vcEZpeCcpO1xuICB9XG5cbiAgZnVuY3Rpb24gbG9vcERlc3Ryb3koKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbCxcbiAgICAgICAgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgc2xpZGVzID0gc3dpcGVyLnNsaWRlcztcbiAgICAkd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgcGFyYW1zLnNsaWRlQ2xhc3MgKyBcIi5cIiArIHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzICsgXCIsLlwiICsgcGFyYW1zLnNsaWRlQ2xhc3MgKyBcIi5cIiArIHBhcmFtcy5zbGlkZUJsYW5rQ2xhc3MpLnJlbW92ZSgpO1xuICAgIHNsaWRlcy5yZW1vdmVBdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpO1xuICB9XG5cbiAgdmFyIGxvb3AgPSB7XG4gICAgbG9vcENyZWF0ZTogbG9vcENyZWF0ZSxcbiAgICBsb29wRml4OiBsb29wRml4LFxuICAgIGxvb3BEZXN0cm95OiBsb29wRGVzdHJveVxuICB9O1xuXG4gIGZ1bmN0aW9uIHNldEdyYWJDdXJzb3IobW92aW5nKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKHN3aXBlci5zdXBwb3J0LnRvdWNoIHx8ICFzd2lwZXIucGFyYW1zLnNpbXVsYXRlVG91Y2ggfHwgc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5pc0xvY2tlZCB8fCBzd2lwZXIucGFyYW1zLmNzc01vZGUpIHJldHVybjtcbiAgICB2YXIgZWwgPSBzd2lwZXIuZWw7XG4gICAgZWwuc3R5bGUuY3Vyc29yID0gJ21vdmUnO1xuICAgIGVsLnN0eWxlLmN1cnNvciA9IG1vdmluZyA/ICctd2Via2l0LWdyYWJiaW5nJyA6ICctd2Via2l0LWdyYWInO1xuICAgIGVsLnN0eWxlLmN1cnNvciA9IG1vdmluZyA/ICctbW96LWdyYWJiaW4nIDogJy1tb3otZ3JhYic7XG4gICAgZWwuc3R5bGUuY3Vyc29yID0gbW92aW5nID8gJ2dyYWJiaW5nJyA6ICdncmFiJztcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuc2V0R3JhYkN1cnNvcigpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgIGlmIChzd2lwZXIuc3VwcG9ydC50b3VjaCB8fCBzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmlzTG9ja2VkIHx8IHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXBlci5lbC5zdHlsZS5jdXJzb3IgPSAnJztcbiAgfVxuXG4gIHZhciBncmFiQ3Vyc29yID0ge1xuICAgIHNldEdyYWJDdXJzb3I6IHNldEdyYWJDdXJzb3IsXG4gICAgdW5zZXRHcmFiQ3Vyc29yOiB1bnNldEdyYWJDdXJzb3JcbiAgfTtcblxuICBmdW5jdGlvbiBhcHBlbmRTbGlkZShzbGlkZXMpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsLFxuICAgICAgICBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuXG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNsaWRlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoc2xpZGVzW2ldKSAkd3JhcHBlckVsLmFwcGVuZChzbGlkZXNbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAkd3JhcHBlckVsLmFwcGVuZChzbGlkZXMpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLmxvb3BDcmVhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAoIShwYXJhbXMub2JzZXJ2ZXIgJiYgc3dpcGVyLnN1cHBvcnQub2JzZXJ2ZXIpKSB7XG4gICAgICBzd2lwZXIudXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJlcGVuZFNsaWRlKHNsaWRlcykge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgICAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWwsXG4gICAgICAgIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuXG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB2YXIgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleCArIDE7XG5cbiAgICBpZiAodHlwZW9mIHNsaWRlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoc2xpZGVzW2ldKSAkd3JhcHBlckVsLnByZXBlbmQoc2xpZGVzW2ldKTtcbiAgICAgIH1cblxuICAgICAgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleCArIHNsaWRlcy5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgICR3cmFwcGVyRWwucHJlcGVuZChzbGlkZXMpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLmxvb3BDcmVhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAoIShwYXJhbXMub2JzZXJ2ZXIgJiYgc3dpcGVyLnN1cHBvcnQub2JzZXJ2ZXIpKSB7XG4gICAgICBzd2lwZXIudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgc3dpcGVyLnNsaWRlVG8obmV3QWN0aXZlSW5kZXgsIDAsIGZhbHNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZFNsaWRlKGluZGV4LCBzbGlkZXMpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsLFxuICAgICAgICBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgICBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICB2YXIgYWN0aXZlSW5kZXhCdWZmZXIgPSBhY3RpdmVJbmRleDtcblxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgYWN0aXZlSW5kZXhCdWZmZXIgLT0gc3dpcGVyLmxvb3BlZFNsaWRlcztcbiAgICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICAgICAgc3dpcGVyLnNsaWRlcyA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oXCIuXCIgKyBwYXJhbXMuc2xpZGVDbGFzcyk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VMZW5ndGggPSBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcblxuICAgIGlmIChpbmRleCA8PSAwKSB7XG4gICAgICBzd2lwZXIucHJlcGVuZFNsaWRlKHNsaWRlcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGluZGV4ID49IGJhc2VMZW5ndGgpIHtcbiAgICAgIHN3aXBlci5hcHBlbmRTbGlkZShzbGlkZXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgI
24510HZhciBuZXdBY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4QnVmZmVyID4gaW5kZXggPyBhY3RpdmVJbmRleEJ1ZmZlciArIDEgOiBhY3RpdmVJbmRleEJ1ZmZlcjtcbiAgICB2YXIgc2xpZGVzQnVmZmVyID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gYmFzZUxlbmd0aCAtIDE7IGkgPj0gaW5kZXg7IGkgLT0gMSkge1xuICAgICAgdmFyIGN1cnJlbnRTbGlkZSA9IHN3aXBlci5zbGlkZXMuZXEoaSk7XG4gICAgICBjdXJyZW50U2xpZGUucmVtb3ZlKCk7XG4gICAgICBzbGlkZXNCdWZmZXIudW5zaGlmdChjdXJyZW50U2xpZGUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc2xpZGVzID09PSAnb2JqZWN0JyAmJiAnbGVuZ3RoJyBpbiBzbGlkZXMpIHtcbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBzbGlkZXMubGVuZ3RoOyBfaSArPSAxKSB7XG4gICAgICAgIGlmIChzbGlkZXNbX2ldKSAkd3JhcHBlckVsLmFwcGVuZChzbGlkZXNbX2ldKTtcbiAgICAgIH1cblxuICAgICAgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleEJ1ZmZlciA+IGluZGV4ID8gYWN0aXZlSW5kZXhCdWZmZXIgKyBzbGlkZXMubGVuZ3RoIDogYWN0aXZlSW5kZXhCdWZmZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgICR3cmFwcGVyRWwuYXBwZW5kKHNsaWRlcyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgc2xpZGVzQnVmZmVyLmxlbmd0aDsgX2kyICs9IDEpIHtcbiAgICAgICR3cmFwcGVyRWwuYXBwZW5kKHNsaWRlc0J1ZmZlcltfaTJdKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKCEocGFyYW1zLm9ic2VydmVyICYmIHN3aXBlci5zdXBwb3J0Lm9ic2VydmVyKSkge1xuICAgICAgc3dpcGVyLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLnNsaWRlVG8obmV3QWN0aXZlSW5kZXggKyBzd2lwZXIubG9vcGVkU2xpZGVzLCAwLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKG5ld0FjdGl2ZUluZGV4LCAwLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlU2xpZGUoc2xpZGVzSW5kZXhlcykge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgICAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWwsXG4gICAgICAgIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgIHZhciBhY3RpdmVJbmRleEJ1ZmZlciA9IGFjdGl2ZUluZGV4O1xuXG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBhY3RpdmVJbmRleEJ1ZmZlciAtPSBzd2lwZXIubG9vcGVkU2xpZGVzO1xuICAgICAgc3dpcGVyLmxvb3BEZXN0cm95KCk7XG4gICAgICBzd2lwZXIuc2xpZGVzID0gJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHBhcmFtcy5zbGlkZUNsYXNzKTtcbiAgICB9XG5cbiAgICB2YXIgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleEJ1ZmZlcjtcbiAgICB2YXIgaW5kZXhUb1JlbW92ZTtcblxuICAgIGlmICh0eXBlb2Ygc2xpZGVzSW5kZXhlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzSW5kZXhlcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXNJbmRleGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGluZGV4VG9SZW1vdmUgPSBzbGlkZXNJbmRleGVzW2ldO1xuICAgICAgICBpZiAoc3dpcGVyLnNsaWRlc1tpbmRleFRvUmVtb3ZlXSkgc3dpcGVyLnNsaWRlcy5lcShpbmRleFRvUmVtb3ZlKS5yZW1vdmUoKTtcbiAgICAgICAgaWYgKGluZGV4VG9SZW1vdmUgPCBuZXdBY3RpdmVJbmRleCkgbmV3QWN0aXZlSW5kZXggLT0gMTtcbiAgICAgIH1cblxuICAgICAgbmV3QWN0aXZlSW5kZXggPSBNYXRoLm1heChuZXdBY3RpdmVJbmRleCwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4VG9SZW1vdmUgPSBzbGlkZXNJbmRleGVzO1xuICAgICAgaWYgKHN3aXBlci5zbGlkZXNbaW5kZXhUb1JlbW92ZV0pIHN3aXBlci5zbGlkZXMuZXEoaW5kZXhUb1JlbW92ZSkucmVtb3ZlKCk7XG4gICAgICBpZiAoaW5kZXhUb1JlbW92ZSA8IG5ld0FjdGl2ZUluZGV4KSBuZXdBY3RpdmVJbmRleCAtPSAxO1xuICAgICAgbmV3QWN0aXZlSW5kZXggPSBNYXRoLm1heChuZXdBY3RpdmVJbmRleCwgMCk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIubG9vcENyZWF0ZSgpO1xuICAgIH1cblxuICAgIGlmICghKHBhcmFtcy5vYnNlcnZlciAmJiBzd2lwZXIuc3VwcG9ydC5vYnNlcnZlcikpIHtcbiAgICAgIHN3aXBlci51cGRhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKG5ld0FjdGl2ZUluZGV4ICsgc3dpcGVyLmxvb3BlZFNsaWRlcywgMCwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhuZXdBY3RpdmVJbmRleCwgMCwgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUFsbFNsaWRlcygpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgc2xpZGVzSW5kZXhlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzd2lwZXIuc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBzbGlkZXNJbmRleGVzLnB1c2goaSk7XG4gICAgfVxuXG4gICAgc3dpcGVyLnJlbW92ZVNsaWRlKHNsaWRlc0luZGV4ZXMpO1xuICB9XG5cbiAgdmFyIG1hbmlwdWxhdGlvbiA9IHtcbiAgICBhcHBlbmRTbGlkZTogYXBwZW5kU2xpZGUsXG4gICAgcHJlcGVuZFNsaWRlOiBwcmVwZW5kU2xpZGUsXG4gICAgYWRkU2xpZGU6IGFkZFNsaWRlLFxuICAgIHJlbW92ZVNsaWRlOiByZW1vdmVTbGlkZSxcbiAgICByZW1vdmVBbGxTbGlkZXM6IHJlbW92ZUFsbFNsaWRlc1xuICB9O1xuXG4gIGZ1bmN0aW9uIG9uVG91Y2hTdGFydChldmVudCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICAgIHZhciBkYXRhID0gc3dpcGVyLnRvdWNoRXZlbnRzRGF0YTtcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgdG91Y2hlcyA9IHN3aXBlci50b3VjaGVzLFxuICAgICAgICBlbmFibGVkID0gc3dpcGVyLmVuYWJsZWQ7XG4gICAgaWYgKCFlbmFibGVkKSByZXR1cm47XG5cbiAgICBpZiAoc3dpcGVyLmFuaW1hdGluZyAmJiBwYXJhbXMucHJldmVudEludGVyYWN0aW9uT25UcmFuc2l0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGUgPSBldmVudDtcbiAgICBpZiAoZS5vcmlnaW5hbEV2ZW50KSBlID0gZS5vcmlnaW5hbEV2ZW50O1xuICAgIHZhciAkdGFyZ2V0RWwgPSAkKGUudGFyZ2V0KTtcblxuICAgIGlmIChwYXJhbXMudG91Y2hFdmVudHNUYXJnZXQgPT09ICd3cmFwcGVyJykge1xuICAgICAgaWYgKCEkdGFyZ2V0RWwuY2xvc2VzdChzd2lwZXIud3JhcHBlckVsKS5sZW5ndGgpIHJldHVybjtcbiAgICB9XG5cbiAgICBkYXRhLmlzVG91Y2hFdmVudCA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnO1xuICAgIGlmICghZGF0YS5pc1RvdWNoRXZlbnQgJiYgJ3doaWNoJyBpbiBlICYmIGUud2hpY2ggPT09IDMpIHJldHVybjtcbiAgICBpZiAoIWRhdGEuaXNUb3VjaEV2ZW50ICYmICdidXR0b24nIGluIGUgJiYgZS5idXR0b24gPiAwKSByZXR1cm47XG4gICAgaWYgKGRhdGEuaXNUb3VjaGVkICYmIGRhdGEuaXNNb3ZlZCkgcmV0dXJuOyAvLyBjaGFuZ2UgdGFyZ2V0IGVsIGZvciBzaGFkb3cgcm9vdCBjb21wb25lbmV0XG5cbiAgICB2YXIgc3dpcGluZ0NsYXNzSGFzVmFsdWUgPSAhIXBhcmFtcy5ub1N3aXBpbmdDbGFzcyAmJiBwYXJhbXMubm9Td2lwaW5nQ2xhc3MgIT09ICcnO1xuXG4gICAgaWYgKHN3aXBpbmdDbGFzc0hhc1ZhbHVlICYmIGUudGFyZ2V0ICYmIGUudGFyZ2V0LnNoYWRvd1Jvb3QgJiYgZXZlbnQucGF0aCAmJi
24510BldmVudC5wYXRoWzBdKSB7XG4gICAgICAkdGFyZ2V0RWwgPSAkKGV2ZW50LnBhdGhbMF0pO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubm9Td2lwaW5nICYmICR0YXJnZXRFbC5jbG9zZXN0KHBhcmFtcy5ub1N3aXBpbmdTZWxlY3RvciA/IHBhcmFtcy5ub1N3aXBpbmdTZWxlY3RvciA6IFwiLlwiICsgcGFyYW1zLm5vU3dpcGluZ0NsYXNzKVswXSkge1xuICAgICAgc3dpcGVyLmFsbG93Q2xpY2sgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuc3dpcGVIYW5kbGVyKSB7XG4gICAgICBpZiAoISR0YXJnZXRFbC5jbG9zZXN0KHBhcmFtcy5zd2lwZUhhbmRsZXIpWzBdKSByZXR1cm47XG4gICAgfVxuXG4gICAgdG91Y2hlcy5jdXJyZW50WCA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnID8gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VYIDogZS5wYWdlWDtcbiAgICB0b3VjaGVzLmN1cnJlbnRZID0gZS50eXBlID09PSAndG91Y2hzdGFydCcgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVkgOiBlLnBhZ2VZO1xuICAgIHZhciBzdGFydFggPSB0b3VjaGVzLmN1cnJlbnRYO1xuICAgIHZhciBzdGFydFkgPSB0b3VjaGVzLmN1cnJlbnRZOyAvLyBEbyBOT1Qgc3RhcnQgaWYgaU9TIGVkZ2Ugc3dpcGUgaXMgZGV0ZWN0ZWQuIE90aGVyd2lzZSBpT1MgYXBwIGNhbm5vdCBzd2lwZS10by1nby1iYWNrIGFueW1vcmVcblxuICAgIHZhciBlZGdlU3dpcGVEZXRlY3Rpb24gPSBwYXJhbXMuZWRnZVN3aXBlRGV0ZWN0aW9uIHx8IHBhcmFtcy5pT1NFZGdlU3dpcGVEZXRlY3Rpb247XG4gICAgdmFyIGVkZ2VTd2lwZVRocmVzaG9sZCA9IHBhcmFtcy5lZGdlU3dpcGVUaHJlc2hvbGQgfHwgcGFyYW1zLmlPU0VkZ2VTd2lwZVRocmVzaG9sZDtcblxuICAgIGlmIChlZGdlU3dpcGVEZXRlY3Rpb24gJiYgKHN0YXJ0WCA8PSBlZGdlU3dpcGVUaHJlc2hvbGQgfHwgc3RhcnRYID49IHdpbmRvdy5pbm5lcldpZHRoIC0gZWRnZVN3aXBlVGhyZXNob2xkKSkge1xuICAgICAgaWYgKGVkZ2VTd2lwZURldGVjdGlvbiA9PT0gJ3ByZXZlbnQnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgZXh0ZW5kKGRhdGEsIHtcbiAgICAgIGlzVG91Y2hlZDogdHJ1ZSxcbiAgICAgIGlzTW92ZWQ6IGZhbHNlLFxuICAgICAgYWxsb3dUb3VjaENhbGxiYWNrczogdHJ1ZSxcbiAgICAgIGlzU2Nyb2xsaW5nOiB1bmRlZmluZWQsXG4gICAgICBzdGFydE1vdmluZzogdW5kZWZpbmVkXG4gICAgfSk7XG4gICAgdG91Y2hlcy5zdGFydFggPSBzdGFydFg7XG4gICAgdG91Y2hlcy5zdGFydFkgPSBzdGFydFk7XG4gICAgZGF0YS50b3VjaFN0YXJ0VGltZSA9IG5vdygpO1xuICAgIHN3aXBlci5hbGxvd0NsaWNrID0gdHJ1ZTtcbiAgICBzd2lwZXIudXBkYXRlU2l6ZSgpO1xuICAgIHN3aXBlci5zd2lwZURpcmVjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyYW1zLnRocmVzaG9sZCA+IDApIGRhdGEuYWxsb3dUaHJlc2hvbGRNb3ZlID0gZmFsc2U7XG5cbiAgICBpZiAoZS50eXBlICE9PSAndG91Y2hzdGFydCcpIHtcbiAgICAgIHZhciBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICBpZiAoJHRhcmdldEVsLmlzKGRhdGEuZm9ybUVsZW1lbnRzKSkgcHJldmVudERlZmF1bHQgPSBmYWxzZTtcblxuICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgJChkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5pcyhkYXRhLmZvcm1FbGVtZW50cykgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gJHRhcmdldEVsWzBdKSB7XG4gICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgfVxuXG4gICAgICB2Y
24510XIgc2hvdWxkUHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdCAmJiBzd2lwZXIuYWxsb3dUb3VjaE1vdmUgJiYgcGFyYW1zLnRvdWNoU3RhcnRQcmV2ZW50RGVmYXVsdDtcblxuICAgICAgaWYgKChwYXJhbXMudG91Y2hTdGFydEZvcmNlUHJldmVudERlZmF1bHQgfHwgc2hvdWxkUHJldmVudERlZmF1bHQpICYmICEkdGFyZ2V0RWxbMF0uaXNDb250ZW50RWRpdGFibGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KCd0b3VjaFN0YXJ0JywgZSk7XG4gIH1cblxuICBmdW5jdGlvbiBvblRvdWNoTW92ZShldmVudCkge1xuICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGRhdGEgPSBzd2lwZXIudG91Y2hFdmVudHNEYXRhO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgICB0b3VjaGVzID0gc3dpcGVyLnRvdWNoZXMsXG4gICAgICAgIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGUsXG4gICAgICAgIGVuYWJsZWQgPSBzd2lwZXIuZW5hYmxlZDtcbiAgICBpZiAoIWVuYWJsZWQpIHJldHVybjtcbiAgICB2YXIgZSA9IGV2ZW50O1xuICAgIGlmIChlLm9yaWdpbmFsRXZlbnQpIGUgPSBlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICBpZiAoIWRhdGEuaXNUb3VjaGVkKSB7XG4gICAgICBpZiAoZGF0YS5zdGFydE1vdmluZyAmJiBkYXRhLmlzU2Nyb2xsaW5nKSB7XG4gICAgICAgIHN3aXBlci5lbWl0KCd0b3VjaE1vdmVPcHBvc2l0ZScsIGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuaXNUb3VjaEV2ZW50ICYmIGUudHlwZSAhPT0gJ3RvdWNobW92ZScpIHJldHVybjtcbiAgICB2YXIgdGFyZ2V0VG91Y2ggPSBlLnR5cGUgPT09ICd0b3VjaG1vdmUnICYmIGUudGFyZ2V0VG91Y2hlcyAmJiAoZS50YXJnZXRUb3VjaGVzWzBdIHx8IGUuY2hhbmdlZFRvdWNoZXNbMF0pO1xuICAgIHZhciBwYWdlWCA9IGUudHlwZSA9PT0gJ3RvdWNobW92ZScgPyB0YXJnZXRUb3VjaC5wYWdlWCA6IGUucGFnZVg7XG4gICAgdmFyIHBhZ2VZID0gZS50eXBlID09PSAndG91Y2htb3ZlJyA/IHRhcmdldFRvdWNoLnBhZ2VZIDogZS5wYWdlWTtcblxuICAgIGlmIChlLnByZXZlbnRlZEJ5TmVzdGVkU3dpcGVyKSB7XG4gICAgICB0b3VjaGVzLnN0YXJ0WCA9IHBhZ2VYO1xuICAgICAgdG91Y2hlcy5zdGFydFkgPSBwYWdlWTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXN3aXBlci5hbGxvd1RvdWNoTW92ZSkge1xuICAgICAgLy8gaXNNb3ZlZCA9IHRydWU7XG4gICAgICBzd2lwZXIuYWxsb3dDbGljayA9IGZhbHNlO1xuXG4gICAgICBpZiAoZGF0YS5pc1RvdWNoZWQpIHtcbiAgICAgICAgZXh0ZW5kKHRvdWNoZXMsIHtcbiAgICAgICAgICBzdGFydFg6IHBhZ2VYLFxuICAgICAgICAgIHN0YXJ0WTogcGFnZVksXG4gICAgICAgICAgY3VycmVudFg6IHBhZ2VYLFxuICAgICAgICAgIGN1cnJlbnRZOiBwYWdlWVxuICAgICAgICB9KTtcbiAgICAgICAgZGF0YS50b3VjaFN0YXJ0VGltZSA9IG5vdygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuaXNUb3VjaEV2ZW50ICYmIHBhcmFtcy50b3VjaFJlbGVhc2VPbkVkZ2VzICYmICFwYXJhbXMubG9vcCkge1xuICAgICAgaWYgKHN3aXBlci5pc1ZlcnRpY2FsKCkpIHtcbiAgICAgICAgLy8gVmVydGljYWxcbiAgICAgICAgaWYgKHBhZ2VZIDwgdG91Y2hlcy5zdGFydFkgJiYgc3dpcGVyLnRyYW5zbGF0ZSA8PSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgfHwgcGFnZVkgPiB0b3VjaGVzLnN0YXJ0WSAmJiBzd2lwZXIudHJhbnNsYXRlID49IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgICAgIGRhdGEuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICAgICAgZGF0YS5pc01vdmVkID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHBhZ2VYIDwgdG91Y2hlcy5zdGFydFggJiYgc3dpcGVyLnRyYW5zbGF0ZSA8PSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgfHwgcGFnZVggPiB0b3VjaGVzLnN0YXJ0WCAmJiBzd2lwZXIudHJhbnNsYXRlID49IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuaXNUb3VjaEV2ZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGlmIChlLnRhcmdldCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiAkKGUudGFyZ2V0KS5pcyhkYXRhLmZvcm1FbGVtZW50cykpIHtcbiAgICAgICAgZGF0YS5pc01vdmVkID0gdHJ1ZTtcbiAgICAgICAgc3dpcGVyLmFsbG93Q2xpY2sgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkYXRhLmFsbG93VG91Y2hDYWxsYmFja3MpIHtcbiAgICAgIHN3aXBlci5lbWl0KCd0b3VjaE1vdmUnLCBlKTtcbiAgICB9XG5cbiAgICBpZiAoZS50YXJnZXRUb3VjaGVzICYmIGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPiAxKSByZXR1cm47XG4gICAgdG91Y2hlcy5jdXJyZW50WCA9IHBhZ2VYO1xuICAgIHRvdWNoZXMuY3VycmVudFkgPSBwYWdlWTtcbiAgICB2YXIgZGlmZlggPSB0b3VjaGVzLmN1cnJlbnRYIC0gdG91Y2hlcy5zdGFydFg7XG4gICAgdmFyIGRpZmZZID0gdG91Y2hlcy5jdXJyZW50WSAtIHRvdWNoZXMuc3RhcnRZO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLnRocmVzaG9sZCAmJiBNYXRoLnNxcnQoTWF0aC5wb3coZGlmZlgsIDIpICsgTWF0aC5wb3coZGlmZlksIDIpKSA8IHN3aXBlci5wYXJhbXMudGhyZXNob2xkKSByZXR1cm47XG5cbiAgICBpZiAodHlwZW9mIGRhdGEuaXNTY3JvbGxpbmcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2Y
24510XIgdG91Y2hBbmdsZTtcblxuICAgICAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSAmJiB0b3VjaGVzLmN1cnJlbnRZID09PSB0b3VjaGVzLnN0YXJ0WSB8fCBzd2lwZXIuaXNWZXJ0aWNhbCgpICYmIHRvdWNoZXMuY3VycmVudFggPT09IHRvdWNoZXMuc3RhcnRYKSB7XG4gICAgICAgIGRhdGEuaXNTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICBpZiAoZGlmZlggKiBkaWZmWCArIGRpZmZZICogZGlmZlkgPj0gMjUpIHtcbiAgICAgICAgICB0b3VjaEFuZ2xlID0gTWF0aC5hdGFuMihNYXRoLmFicyhkaWZmWSksIE1hdGguYWJzKGRpZmZYKSkgKiAxODAgLyBNYXRoLlBJO1xuICAgICAgICAgIGRhdGEuaXNTY3JvbGxpbmcgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyB0b3VjaEFuZ2xlID4gcGFyYW1zLnRvdWNoQW5nbGUgOiA5MCAtIHRvdWNoQW5nbGUgPiBwYXJhbXMudG91Y2hBbmdsZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkYXRhLmlzU2Nyb2xsaW5nKSB7XG4gICAgICBzd2lwZXIuZW1pdCgndG91Y2hNb3ZlT3Bwb3NpdGUnLCBlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEuc3RhcnRNb3ZpbmcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodG91Y2hlcy5jdXJyZW50WCAhPT0gdG91Y2hlcy5zdGFydFggfHwgdG91Y2hlcy5jdXJyZW50WSAhPT0gdG91Y2hlcy5zdGFydFkpIHtcbiAgICAgICAgZGF0YS5zdGFydE1vdmluZyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuaXNTY3JvbGxpbmcpIHtcbiAgICAgIGRhdGEuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhLnN0YXJ0TW92aW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpcGVyLmFsbG93Q2xpY2sgPSBmYWxzZTtcblxuICAgIGlmICghcGFyYW1zLmNzc01vZGUgJiYgZS5jYW5jZWxhYmxlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy50b3VjaE1vdmVTdG9wUHJvcGFnYXRpb24gJiYgIXBhcmFtcy5uZXN0ZWQpIHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhLmlzTW92ZWQpIHtcbiAgICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgfVxuXG4gICAgICBkYXRhLnN0YXJ0VHJhbnNsYXRlID0gc3dpcGVyLmdldFRyYW5zbGF0ZSgpO1xuICAgICAgc3dpcGVyLnNldFRyYW5zaXRpb24oMCk7XG5cbiAgICAgIGlmIChzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLnRyaWdnZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQgdHJhbnNpdGlvbmVuZCcpO1xuICAgICAgfVxuXG4gICAgICBkYXRhLmFsbG93TW9tZW50dW1Cb3VuY2UgPSBmYWxzZTsgLy8gR3JhYiBDdXJzb3JcblxuICAgICAgaWYgKHBhcmFtcy5ncmFiQ3Vyc29yICYmIChzd2lwZXIuYWxsb3dTbGlkZU5leHQgPT09IHRydWUgfHwgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID09PSB0cnVlKSkge1xuICAgICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcih0cnVlKTtcbiAgICAgIH1cblxuICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlckZpcnN0TW92ZScsIGUpO1xuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KCdzbGlkZXJNb3ZlJywgZSk7XG4gICAgZGF0YS5pc01vdmVkID0gdHJ1ZTtcbiAgICB2YXIgZGlmZiA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IGRpZmZYIDogZGlmZlk7XG4gICAgdG91Y2hlcy5kaWZmID0gZGlmZjtcbiAgICBkaWZmICo9IHBhcmFtcy50b3VjaFJhdGlvO1xuICAgIGlmIChydGwpIGRpZmYgPSAtZGlmZjtcbiAgICBzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPSBkaWZmID4gMCA/ICdwcmV2JyA6ICduZXh0JztcbiAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBkaWZmICsgZGF0YS5zdGFydFRyYW5zbGF0ZTtcbiAgICB2YXIgZGlzYWJsZVBhcmVudFN3aXBlciA9IHRydWU7XG4gICAgdmFyIHJlc2lzdGFuY2VSYXRpbyA9IHBhcmFtcy5yZXNpc3RhbmNlUmF0aW87XG5cbiAgICBpZiAocGFyYW1zLnRvdWNoUmVsZWFzZU9uRWRnZXMpIHtcbiAgICAgIHJlc2lzdGFuY2VSYXRpbyA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGRpZmYgPiAwICYmIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA+IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgZGlzYWJsZVBhcmVudFN3aXBlciA9IGZhbHNlO1xuICAgICAgaWYgKHBhcmFtcy5yZXNpc3RhbmNlKSBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBzd2lwZXIubWluVHJhbnNsYXRlKCkgLSAxICsgTWF0aC5wb3coLXN3aXBlci5taW5UcmFuc2xhdGUoKSArIGRhdGEuc3RhcnRUcmFuc2xhdGUgKyBkaWZmLCByZXNpc3RhbmNlUmF0aW8pO1xuICAgIH0gZWxzZSBpZiAoZGlmZiA8IDAgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlIDwgc3dpcGVyLm1heFRyYW5zbGF0ZSgpKSB7XG4gICAgICBkaXNhYmxlUGFyZW50U3dpcGVyID0gZmFsc2U7XG4gICAgICBpZiAocGFyYW1zLnJlc2lzdGFuY2UpIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSArIDEgLSBNYXRoLnBvdyhzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBkYXRhLnN0YXJ0VHJhbnNsYXRlIC0gZGlmZiwgcmVzaXN0YW5jZVJhdGlvKTtcbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZVBhcmVudFN3aXBlcikge1xuICAgICAgZS5wcmV2ZW50ZWRCeU5lc3RlZFN3aXBlciA9IHRydWU7XG4gICAgfSAvLyBEaXJlY3Rpb25zIGxvY2tzXG5cblxuICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVOZXh0ICYmIHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ25leHQnICYmIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA8IGRhdGEuc3RhcnRUcmFuc2xhdGUpIHtcbiAgICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gICAgfVxuXG4gICAgaWYgKCFzd2lwZXIuYWxsb3dTbGlkZVByZXYgJiYgc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAncHJldicgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlID4gZGF0YS5zdGFydFRyYW5zbGF0ZSkge1xuICAgICAgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gZGF0YS5zdGFydFRyYW5zbGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlUHJldiAmJiAhc3dpcGVyLmFsbG93U2xpZGVOZXh0KSB7XG4gICAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBkYXRhLnN0YXJ0VHJhbnNsYXRlO1xuICAgIH0gLy8gVGhyZXNob2xkXG5cblxuICAgIGlmIChwYXJhbXMudGhyZXNob2xkID4gMCkge1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmYpID4gcGFyYW1zLnRocmVzaG9sZCB8fCBkYXRhLmFsbG93VGhyZXNob2xkTW92ZSkge1xuICAgICAgICBpZiAoIWRhdGEuYWxsb3dUaHJlc2hvbGRNb3ZlKSB7XG4gICAgICAgICAgZGF0YS5hbGxvd1RocmVzaG9sZE1vdmUgPSB0cnVlO1xuICAgICAgICAgI
24510HRvdWNoZXMuc3RhcnRYID0gdG91Y2hlcy5jdXJyZW50WDtcbiAgICAgICAgICB0b3VjaGVzLnN0YXJ0WSA9IHRvdWNoZXMuY3VycmVudFk7XG4gICAgICAgICAgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gZGF0YS5zdGFydFRyYW5zbGF0ZTtcbiAgICAgICAgICB0b3VjaGVzLmRpZmYgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyB0b3VjaGVzLmN1cnJlbnRYIC0gdG91Y2hlcy5zdGFydFggOiB0b3VjaGVzLmN1cnJlbnRZIC0gdG91Y2hlcy5zdGFydFk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBkYXRhLnN0YXJ0VHJhbnNsYXRlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJhbXMuZm9sbG93RmluZ2VyIHx8IHBhcmFtcy5jc3NNb2RlKSByZXR1cm47IC8vIFVwZGF0ZSBhY3RpdmUgaW5kZXggaW4gZnJlZSBtb2RlXG5cbiAgICBpZiAocGFyYW1zLmZyZWVNb2RlIHx8IHBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzIHx8IHBhcmFtcy53YXRjaFNsaWRlc1Zpc2liaWxpdHkpIHtcbiAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmZyZWVNb2RlKSB7XG4gICAgICAvLyBWZWxvY2l0eVxuICAgICAgaWYgKGRhdGEudmVsb2NpdGllcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGF0YS52ZWxvY2l0aWVzLnB1c2goe1xuICAgICAgICAgIHBvc2l0aW9uOiB0b3VjaGVzW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdzdGFydFgnIDogJ3N0YXJ0WSddLFxuICAgICAgICAgIHRpbWU6IGRhdGEudG91Y2hTdGFydFRpbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGRhdGEudmVsb2NpdGllcy5wdXNoKHtcbiAgICAgICAgcG9zaXRpb246IHRvdWNoZXNbc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ2N1cnJlbnRYJyA6ICdjdXJyZW50WSddLFxuICAgICAgICB0aW1lOiBub3coKVxuICAgICAgfSk7XG4gICAgfSAvLyBVcGRhdGUgcHJvZ3Jlc3NcblxuXG4gICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKGRhdGEuY3VycmVudFRyYW5zbGF0ZSk7IC8vIFVwZGF0ZSB0cmFuc2xhdGVcblxuICAgIHN3aXBlci5zZXRUcmFuc2xhdGUoZGF0YS5jdXJyZW50VHJhbnNsYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uVG91Y2hFbmQoZXZlbnQpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgZGF0YSA9IHN3aXBlci50b3VjaEV2ZW50c0RhdGE7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgIHRvdWNoZXMgPSBzd2lwZXIudG91Y2hlcyxcbiAgICAgICAgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSxcbiAgICAgICAgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsLFxuICAgICAgICBzbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQsXG4gICAgICAgIHNuYXBHcmlkID0gc3dpcGVyLnNuYXBHcmlkLFxuICAgICAgICBlbmFibGVkID0gc3dpcGVyLmVuYWJsZWQ7XG4gICAgaWYgKCFlbmFibGVkKSByZXR1cm47XG4gICAgdmFyIGUgPSBldmVudDtcbiAgICBpZiAoZS5vcmlnaW5hbEV2ZW50KSBlID0gZS5vcmlnaW5hbEV2ZW50O1xuXG4gICAgaWYgKGRhdGEuYWxsb3dUb3VjaENhbGxiYWNrcykge1xuICAgICAgc3dpcGVyLmVtaXQoJ3RvdWNoRW5kJywgZSk7XG4gICAgfVxuXG4gICAgZGF0YS5hbGxvd1RvdWNoQ2FsbGJhY2tzID0gZmFsc2U7XG5cbiAgICBpZiAoIWRhdGEuaXNUb3VjaGVkKSB7XG4gICAgICBpZiAoZGF0YS5pc01vdmVkICYmIHBhcmFtcy5ncmFiQ3Vyc29yKSB7XG4gICAgICAgIHN3aXBlci5zZXRHcmFiQ3Vyc29yKGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgZGF0YS5pc01vdmVkID0gZmFsc2U7XG4gICAgICBkYXRhLnN0YXJ0TW92aW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBSZXR1cm4gR3JhYiBDdXJzb3JcblxuXG4gICAgaWYgKHBhcmFtcy5ncmFiQ3Vyc29yICYmIGRhdGEuaXNNb3ZlZCAmJiBkYXRhLmlzVG91Y2hlZCAmJiAoc3dpcGVyLmFsbG93U2xpZGVOZXh0ID09PSB0cnVlIHx8IHN3aXBlci5hbGxvd1NsaWRlUHJldiA9PT0gdHJ1ZSkpIHtcbiAgICAgIHN3aXBlci5zZXRHcmFiQ3Vyc29yKGZhbHNlKTtcbiAgICB9IC8vIFRpbWUgZGlmZlxuXG5cbiAgICB2YXIgdG91Y2hFbmRUaW1lID0gbm93KCk7XG4gICAgdmFyIHRpbWVEaWZmID0gdG91Y2hFbmRUaW1lIC0gZGF0YS50b3VjaFN0YXJ0VGltZTsgLy8gVGFwLCBkb3VibGVUYXAsIENsaWNrXG5cbiAgICBpZiAoc3dpcGVyLmFsbG93Q2xpY2spIHtcbiAgICAgIHN3aXBlci51cGRhdGVDbGlja2VkU2xpZGUoZSk7XG4gICAgICBzd2lwZXIuZW1pdCgndGFwIGNsaWNrJywgZSk7XG5cbiAgICAgIGlmICh0aW1lRGlmZiA8IDMwMCAmJiB0b3VjaEVuZFRpbWUgLSBkYXRhLmxhc3RDbGlja1RpbWUgPCAzMDApIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ2RvdWJsZVRhcCBkb3VibGVDbGljaycsIGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRhdGEubGFzdENsaWNrVGltZSA9IG5vdygpO1xuICAgIG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghc3dpcGVyLmRlc3Ryb3llZCkgc3dpcGVyLmFsbG93Q2xpY2sgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgaWYgKCFkYXRhLmlzVG91Y2hlZCB8fCAhZGF0YS5pc01vdmVkIHx8ICFzd2lwZXIuc3dpcGVEaXJlY3Rpb24gfHwgdG91Y2hlcy5kaWZmID09PSAwIHx8IGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9PT0gZGF0YS5zdGFydFRyYW5zbGF0ZSkge1xuICAgICAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICAgIGRhdGEuaXNNb3ZlZCA9IGZhbHNlO1xuICAgICAgZGF0YS5zdGFydE1vdmluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRhdGEuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgZGF0YS5pc01vdmVkID0gZmFsc2U7XG4gICAgZGF0YS5zdGFydE1vdmluZyA9IGZhbHNlO1xuICAgIHZhciBjdXJyZW50UG9zO1xuXG4gICAgaWYgKHBhcmFtcy5mb2xsb3dGaW5nZXIpIHtcbiAgICAgIGN1cnJlbnRQb3MgPSBydGwgPyBzd2lwZXIudHJhbnNsYXRlIDogLXN3aXBlci50cmFuc2xhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRQb3MgPSAtZGF0YS5jdXJyZW50VHJhbnNsYXRlO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuZnJlZU1vZGUpIHtcbiAgICAgIGlmIChjdXJyZW50UG9zIDwgLXN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50UG9zID4gLXN3aXBlci5tYXhUcmFuc2xhdGUoKSkge1xuICAgICAgICBpZiAoc3dpcGVyLnNsaWRlcy5sZW5ndGggPCBzbmFwR3JpZC5sZW5ndGgpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbmFwR3JpZC5sZW5ndGggLSAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLmZyZWVNb2RlTW9tZW50dW0pIHtcbiAgICAgICAgaWYgKGRhdGEudmVsb2NpdGllcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdmFyIGxhc3RNb3ZlRXZlbnQgPSBkYXRhLnZlbG9jaXRpZXMucG9wKCk7XG4gICAgICAgICAgdmFyIHZlbG9jaXR5RXZlbnQgPSBkYXRhLnZlbG9jaXRpZXMucG9wKCk7XG4gICAgICAgICAgdmFyIGRpc3R
24510hbmNlID0gbGFzdE1vdmVFdmVudC5wb3NpdGlvbiAtIHZlbG9jaXR5RXZlbnQucG9zaXRpb247XG4gICAgICAgICAgdmFyIHRpbWUgPSBsYXN0TW92ZUV2ZW50LnRpbWUgLSB2ZWxvY2l0eUV2ZW50LnRpbWU7XG4gICAgICAgICAgc3dpcGVyLnZlbG9jaXR5ID0gZGlzdGFuY2UgLyB0aW1lO1xuICAgICAgICAgIHN3aXBlci52ZWxvY2l0eSAvPSAyO1xuXG4gICAgICAgICAgaWYgKE1hdGguYWJzKHN3aXBlci52ZWxvY2l0eSkgPCBwYXJhbXMuZnJlZU1vZGVNaW5pbXVtVmVsb2NpdHkpIHtcbiAgICAgICAgICAgIHN3aXBlci52ZWxvY2l0eSA9IDA7XG4gICAgICAgICAgfSAvLyB0aGlzIGltcGxpZXMgdGhhdCB0aGUgdXNlciBzdG9wcGVkIG1vdmluZyBhIGZpbmdlciB0aGVuIHJlbGVhc2VkLlxuICAgICAgICAgIC8vIFRoZXJlIHdvdWxkIGJlIG5vIGV2ZW50cyB3aXRoIGRpc3RhbmNlIHplcm8sIHNvIHRoZSBsYXN0IGV2ZW50IGlzIHN0YWxlLlxuXG5cbiAgICAgICAgICBpZiAodGltZSA+IDE1MCB8fCBub3coKSAtIGxhc3RNb3ZlRXZlbnQudGltZSA+IDMwMCkge1xuICAgICAgICAgICAgc3dpcGVyLnZlbG9jaXR5ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpcGVyLnZlbG9jaXR5ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXBlci52ZWxvY2l0eSAqPSBwYXJhbXMuZnJlZU1vZGVNb21lbnR1bVZlbG9jaXR5UmF0aW87XG4gICAgICAgIGRhdGEudmVsb2NpdGllcy5sZW5ndGggPSAwO1xuICAgICAgICB2YXIgbW9tZW50dW1EdXJhdGlvbiA9IDEwMDAgKiBwYXJhbXMuZnJlZU1vZGVNb21lbnR1bVJhdGlvO1xuICAgICAgICB2Y
24510XIgbW9tZW50dW1EaXN0YW5jZSA9IHN3aXBlci52ZWxvY2l0eSAqIG1vbWVudHVtRHVyYXRpb247XG4gICAgICAgIHZhciBuZXdQb3NpdGlvbiA9IHN3aXBlci50cmFuc2xhdGUgKyBtb21lbnR1bURpc3RhbmNlO1xuICAgICAgICBpZiAocnRsKSBuZXdQb3NpdGlvbiA9IC1uZXdQb3NpdGlvbjtcbiAgICAgICAgdmFyIGRvQm91bmNlID0gZmFsc2U7XG4gICAgICAgIHZhciBhZnRlckJvdW5jZVBvc2l0aW9uO1xuICAgICAgICB2YXIgYm91bmNlQW1vdW50ID0gTWF0aC5hYnMoc3dpcGVyLnZlbG9jaXR5KSAqIDIwICogcGFyYW1zLmZyZWVNb2RlTW9tZW50dW1Cb3VuY2VSYXRpbztcbiAgICAgICAgdmFyIG5lZWRzTG9vcEZpeDtcblxuICAgICAgICBpZiAobmV3UG9zaXRpb24gPCBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHtcbiAgICAgICAgICBpZiAocGFyYW1zLmZyZWVNb2RlTW9tZW50dW1Cb3VuY2UpIHtcbiAgICAgICAgICAgIGlmIChuZXdQb3NpdGlvbiArIHN3aXBlci5tYXhUcmFuc2xhdGUoKSA8IC1ib3VuY2VBbW91bnQpIHtcbiAgICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBib3VuY2VBbW91bnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFmdGVyQm91bmNlUG9zaXRpb24gPSBzd2lwZXIubWF4VHJhbnNsYXRlKCk7XG4gICAgICAgICAgICBkb0JvdW5jZSA9IHRydWU7XG4gICAgICAgICAgICBkYXRhLmFsbG93TW9tZW50dW1Cb3VuY2UgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdQb3NpdGlvbiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyYW1zLmxvb3AgJiYgcGFyYW1zLmNlbnRlcmVkU2xpZGVzKSBuZWVkc0xvb3BGaXggPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKG5ld1Bvc2l0aW9uID4gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSB7XG4gICAgICAgICAgaWYgKHBhcmFtcy5mcmVlTW9kZU1vbWVudHVtQm91bmNlKSB7XG4gICAgICAgICAgICBpZiAobmV3UG9zaXRpb24gLSBzd2lwZXIubWluVHJhbnNsYXRlKCkgPiBib3VuY2VBbW91bnQpIHtcbiAgICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzd2lwZXIubWluVHJhbnNsYXRlKCkgKyBib3VuY2VBbW91bnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFmdGVyQm91bmNlUG9zaXRpb24gPSBzd2lwZXIubWluVHJhbnNsYXRlKCk7XG4gICAgICAgICAgICBkb0JvdW5jZSA9IHRydWU7XG4gICAgICAgICAgICBkYXRhLmFsbG93TW9tZW50dW1Cb3VuY2UgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdQb3NpdGlvbiA9IHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyYW1zLmxvb3AgJiYgcGFyYW1zLmNlbnRlcmVkU2xpZGVzKSBuZWVkc0xvb3BGaXggPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy5mcmVlTW9kZVN0aWNreSkge1xuICAgICAgICAgIHZhciBuZXh0U2xpZGU7XG5cbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNuYXBHcmlkLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgICAgICBpZiAoc25hcEdyaWRbal0gPiAtbmV3UG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgbmV4dFNsaWRlID0gajtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKE1hdGguYWJzKHNuYXBHcmlkW25leHRTbGlkZV0gLSBuZXdQb3NpdGlvbikgPCBNYXRoLmFicyhzbmFwR3JpZFtuZXh0U2xpZGUgLSAxXSAtIG5ld1Bvc2l0aW9uKSB8fCBzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPT09ICduZXh0Jykge1xuICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzbmFwR3JpZFtuZXh0U2xpZGVdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdQb3NpdGlvbiA9IHNuYXBHcmlkW25leHRTbGlkZSAtIDFdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld1Bvc2l0aW9uID0gLW5ld1Bvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5lZWRzTG9vcEZpeCkge1xuICAgICAgICAgIHN3aXBlci5vbmNlKCd0cmFuc2l0aW9uRW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSAvLyBGaXggZHVyYXRpb25cblxuXG4gICAgICAgIGlmIChzd2lwZXIudmVsb2NpdHkgIT09IDApIHtcbiAgICAgICAgICBpZiAocnRsKSB7XG4gICAgICAgICAgICBtb21lbnR1bUR1cmF0aW9uID0gTWF0aC5hYnMoKC1uZXdQb3NpdGlvbiAtIHN3aXBlci50cmFuc2xhdGUpIC8gc3dpcGVyLnZlbG9jaXR5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9tZW50dW1EdXJhdGlvbiA9IE1hdGguYWJzKChuZXdQb3NpdGlvbiAtIHN3aXBlci50cmFuc2xhdGUpIC8gc3dpcGVyLnZlbG9jaXR5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyYW1zLmZyZWVNb2RlU3RpY2t5KSB7XG4gICAgICAgICAgICAvLyBJZiBmcmVlTW9kZVN0aWNreSBpcyBhY3RpdmUgYW5kIHRoZSB1c2VyIGVuZHMgYSBzd2lwZSB3aXRoIGEgc2xvdy12ZWxvY2l0eVxuICAgICAgICAgICAgLy8gZXZlbnQsIHRoZW4gZHVyYXRpb25zIGNhbiBiZSAyMCsgc2Vjb25kcyB0byBzbGlkZSBvbmUgKG9yIHplcm8hKSBzbGlkZXMuXG4gICAgICAgICAgICAvLyBJdCdzIGVhc3kgdG8gc2VlIHRoaXMgd2hlbiBzaW11bGF0aW5nIHRvdWNoIHdpdGggbW91c2UgZXZlbnRzLiBUbyBmaXggdGhpcyxcbiAgICAgICAgICAgIC8vIGxpbWl0IHNpbmdsZS1zbGlkZSBzd2lwZXMgdG8gdGhlIGRlZmF1bHQgc2xpZGUgZHVyYXRpb24uIFRoaXMgYWxzbyBoYXMgdGhlXG4gICAgICAgICAgICAvLyBuaWNlIHNpZGUgZWZmZWN0IG9mIG1hdGNoaW5nIHNsaWRlIHNwZWVkIGlmIHRoZSB1c2VyIHN0b3BwZWQgbW92aW5nIGJlZm9yZVxuICAgICAgICAgICAgLy8gbGlmdGluZyBmaW5nZXIgb3IgbW91c2UgdnMuIG1vdmluZyBzbG93bHkgYmVmb3JlIGxpZnRpbmcgdGhlIGZpbmdlci9tb3VzZS5cbiAgICAgICAgICAgIC8vIEZvciBmYXN0ZXIgc3dpcGVzLCBhbHNvIGFwcGx5IGxpbWl0cyAoYWxiZWl0IGhpZ2hlciBvbmVzKS5cbiAgICAgICAgICAgI
24510HZhciBtb3ZlRGlzdGFuY2UgPSBNYXRoLmFicygocnRsID8gLW5ld1Bvc2l0aW9uIDogbmV3UG9zaXRpb24pIC0gc3dpcGVyLnRyYW5zbGF0ZSk7XG4gICAgICAgICAgICB2YXIgY3VycmVudFNsaWRlU2l6ZSA9IHN3aXBlci5zbGlkZXNTaXplc0dyaWRbc3dpcGVyLmFjdGl2ZUluZGV4XTtcblxuICAgICAgICAgICAgaWYgKG1vdmVEaXN0YW5jZSA8IGN1cnJlbnRTbGlkZVNpemUpIHtcbiAgICAgICAgICAgICAgbW9tZW50dW1EdXJhdGlvbiA9IHBhcmFtcy5zcGVlZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobW92ZURpc3RhbmNlIDwgMiAqIGN1cnJlbnRTbGlkZVNpemUpIHtcbiAgICAgICAgICAgICAgbW9tZW50dW1EdXJhdGlvbiA9IHBhcmFtcy5zcGVlZCAqIDEuNTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1vbWVudHVtRHVyYXRpb24gPSBwYXJhbXMuc3BlZWQgKiAyLjU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy5mcmVlTW9kZVN0aWNreSkge1xuICAgICAgICAgIHN3aXBlci5zbGlkZVRvQ2xvc2VzdCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJhbXMuZnJlZU1vZGVNb21lbnR1bUJvdW5jZSAmJiBkb0JvdW5jZSkge1xuICAgICAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyhhZnRlckJvdW5jZVBvc2l0aW9uKTtcbiAgICAgICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihtb21lbnR1bUR1cmF0aW9uKTtcbiAgICAgICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHRydWUsIHN3aXBlci5zd2lwZURpcmVjdGlvbik7XG4gICAgICAgICAgc3dpcGVyLmFuaW1hdGluZyA9IHRydWU7XG4gICAgICAgICAgJHdyYXBwZXJFbC50cmFuc2l0aW9uRW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQgfHwgIWRhdGEuYWxsb3dNb21lbnR1bUJvdW5jZSkgcmV0dXJuO1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ21vbWVudHVtQm91bmNlJyk7XG4gICAgICAgICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihwYXJhbXMuc3BlZWQpO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUoYWZ0ZXJCb3VuY2VQb3NpdGlvbik7XG4gICAgICAgICAgICAgICR3cmFwcGVyRWwudHJhbnNpdGlvbkVuZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHN3aXBlci50cmFuc2l0aW9uRW5kKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3dpcGVyLnZlbG9jaXR5KSB7XG4gICAgICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihtb21lbnR1bUR1cmF0aW9uKTtcbiAgICAgICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHRydWUsIHN3aXBlci5zd2lwZURpcmVjdGlvbik7XG5cbiAgICAgICAgICBpZiAoIXN3aXBlci5hbmltYXRpbmcpIHtcbiAgICAgICAgICAgIHN3aXBlci5hbmltYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgJHdyYXBwZXJFbC50cmFuc2l0aW9uRW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICAgICAgICBzd2lwZXIudHJhbnNpdGlvbkVuZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN3aXBlci5lbWl0KCdfZnJlZU1vZGVOb01vbWVudHVtUmVsZWFzZScpO1xuICAgICAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyhuZXdQb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmZyZWVNb2RlU3RpY2t5KSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvQ2xvc2VzdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5mcmVlTW9kZSkge1xuICAgICAgICBzd2lwZXIuZW1pdCgnX2ZyZWVNb2RlTm9Nb21lbnR1bVJlbGVhc2UnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwYXJhbXMuZnJlZU1vZGVNb21lbnR1bSB8fCB0aW1lRGlmZiA+PSBwYXJhbXMubG9uZ1N3aXBlc01zKSB7XG4gICAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcygpO1xuICAgICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRmluZCBjdXJyZW50IHNsaWRlXG5cblxuICAgIHZhciBzdG9wSW5kZXggPSAwO1xuICAgIHZhciBncm91cFNpemUgPSBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkWzBdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXNHcmlkLmxlbmd0aDsgaSArPSBpIDwgcGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCA/IDEgOiBwYXJhbXMuc2xpZGVzUGVyR3JvdXApIHtcbiAgICAgIHZhciBfaW5jcmVtZW50ID0gaSA8IHBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAgLSAxID8gMSA6IHBhcmFtcy5zbGlkZXNQZXJHcm91cDtcblxuICAgICAgaWYgKHR5cGVvZiBzbGlkZXNHcmlkW2kgKyBfaW5jcmVtZW50XSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRQb3MgPj0gc2xpZGVzR3JpZFtpXSAmJiBjdXJyZW50UG9zIDwgc2xpZGVzR3JpZFtpICsgX2luY3JlbWVudF0pIHtcbiAgICAgICAgICBzdG9wSW5kZXggPSBpO1xuICAgICAgICAgIGdyb3VwU2l6ZSA9IHNsaWRlc0dyaWRbaSArIF9pbmNyZW1lbnRdIC0gc2xpZGVzR3JpZFtpXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50UG9zID49IHNsaWRlc0dyaWRbaV0pIHtcbiAgICAgICAgc3RvcEluZGV4ID0gaTtcbiAgICAgICAgZ3JvdXBTaXplID0gc2xpZGVzR3JpZFtzbGlkZXNHcmlkLmxlbmd0aCAtIDFdIC0gc2xpZGVzR3JpZFtzbGlkZXNHcmlkLmxlbmd0aCAtIDJdO1xuICAgICAgfVxuICAgIH0gLy8gRmluZCBjdXJyZW50IHNsaWRlIHNpemVcblxuXG4gICAgdmFyIHJhdGlvID0gKGN1cnJlbnRQb3MgLSBzbGlkZXNHcmlkW3N0b3BJbmRleF0pIC8gZ3JvdXBTaXplO1xuICAgIHZhciBpbmNyZW1lbnQgPSBzdG9wSW5kZXggPCBwYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwIC0gMSA/IDEgOiBwYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG5cbiAgICBpZiAodGltZURpZmYgPiBwYXJhbXMubG9uZ1N3aXBlc01zKSB7XG4gICAgICAvLyBMb25nIHRvdWNoZXNcbiAgICAgIGlmICghcGFyYW1zLmxvbmdTd2lwZXMpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAnbmV4dCcpIHtcbiAgICAgICAgaWYgKHJhdGlvID49IHBhcmFtcy5sb25nU3dpcGVzUmF0aW8pIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCArIGluY3JlbWVudCk7ZWxzZSBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAncHJldicpIHtcbiAgICAgICAgaWYgKHJhdGlvID4gMSAtIHBhcmFtcy5sb25nU3dpcGVzUmF0aW8pIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCArIGluY3JlbWVudCk7ZWxzZSBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTaG9ydCBzd2lwZXNcbiAgICAgIGlmICghcGFyYW1zLnNob3J0U3dpcGVzKSB7XG4gICAgICAgI
24510HN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGlzTmF2QnV0dG9uVGFyZ2V0ID0gc3dpcGVyLm5hdmlnYXRpb24gJiYgKGUudGFyZ2V0ID09PSBzd2lwZXIubmF2aWdhdGlvbi5uZXh0RWwgfHwgZS50YXJnZXQgPT09IHN3aXBlci5uYXZpZ2F0aW9uLnByZXZFbCk7XG5cbiAgICAgIGlmICghaXNOYXZCdXR0b25UYXJnZXQpIHtcbiAgICAgICAgaWYgKHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ25leHQnKSB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4ICsgaW5jcmVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPT09ICdwcmV2Jykge1xuICAgICAgICAgIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZS50YXJnZXQgPT09IHN3aXBlci5uYXZpZ2F0aW9uLm5leHRFbCkge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXggKyBpbmNyZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvblJlc2l6ZSgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgZWwgPSBzd2lwZXIuZWw7XG4gICAgaWYgKGVsICYmIGVsLm9mZnNldFdpZHRoID09PSAwKSByZXR1cm47IC8vIEJyZWFrcG9pbnRzXG5cbiAgICBpZiAocGFyYW1zLmJyZWFrcG9pbnRzKSB7XG4gICAgICBzd2lwZXIuc2V0QnJlYWtwb2ludCgpO1xuICAgIH0gLy8gU2F2ZSBsb2Nrc1xuXG5cbiAgICB2YXIgYWxsb3dTbGlkZU5leHQgPSBzd2lwZXIuYWxsb3dTbGlkZU5leHQsXG4gICAgICAgIGFsbG93U2xpZGVQcmV2ID0gc3dpcGVyLmFsbG93U2xpZGVQcmV2LFxuICAgICAgICBzbmFwR3JpZCA9IHN3aXBlci5zbmFwR3JpZDsgLy8gRGlzYWJsZSBsb2NrcyBvbiByZXNpemVcblxuICAgIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9IHRydWU7XG4gICAgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID0gdHJ1ZTtcbiAgICBzd2lwZXIudXBkYXRlU2l6ZSgpO1xuICAgIHN3aXBlci51cGRhdGVTbGlkZXMoKTtcbiAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuXG4gICAgaWYgKChwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nIHx8IHBhcmFtcy5zbGlkZXNQZXJWaWV3ID4gMSkgJiYgc3dpcGVyLmlzRW5kICYmICFzd2lwZXIuaXNCZWdpbm5pbmcgJiYgIXN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMSwgMCwgZmFsc2UsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgsIDAsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoc3dpcGVyLmF1dG9wbGF5ICYmIHN3aXBlci5hdXRvcGxheS5ydW5uaW5nICYmIHN3aXBlci5hdXRvcGxheS5wYXVzZWQpIHtcbiAgICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICB9IC8vIFJldHVybiBsb2NrcyBhZnRlciByZXNpemVcblxuXG4gICAgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID0gYWxsb3dTbGlkZVByZXY7XG4gICAgc3dpcGVyLmFsbG93U2xpZGVOZXh0ID0gYWxsb3dTbGlkZU5leHQ7XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHNuYXBHcmlkICE9PSBzd2lwZXIuc25hcEdyaWQpIHtcbiAgICAgIHN3aXBlci5jaGVja092ZXJmbG93KCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKCFzd2lwZXIuZW5hYmxlZCkgcmV0dXJuO1xuXG4gICAgaWYgKCFzd2lwZXIuYWxsb3dDbGljaykge1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMucHJldmVudENsaWNrcykgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5wcmV2ZW50Q2xpY2tzUHJvcGFnYXRpb24gJiYgc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uU2Nyb2xsKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciB3cmFwcGVyRWwgPSBzd2lwZXIud3JhcHBlckVsLFxuICAgICAgICBydGxUcmFuc2xhdGUgPSBzd2lwZXIucnRsVHJhbnNsYXRlLFxuICAgICAgICBlbmFibGVkID0gc3dpcGVyLmVuYWJsZWQ7XG4gICAgaWYgKCFlbmFibGVkKSByZXR1cm47XG4gICAgc3dpcGVyLnByZXZpb3VzVHJhbnNsYXRlID0gc3dpcGVyLnRyYW5zbGF0ZTtcblxuICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgIGlmIChydGxUcmFuc2xhdGUpIHtcbiAgICAgICAgc3dpcGVyLnRyYW5zbGF0ZSA9IHdyYXBwZXJFbC5zY3JvbGxXaWR0aCAtIHdyYXBwZXJFbC5vZmZzZXRXaWR0aCAtIHdyYXBwZXJFbC5zY3JvbGxMZWZ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnRyYW5zbGF0ZSA9IC13cmFwcGVyRWwuc2Nyb2xsTGVmdDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLnRyYW5zbGF0ZSA9IC13cmFwcGVyRWwuc2Nyb2xsVG9wO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5cblxuICAgIGlmIChzd2lwZXIudHJhbnNsYXRlID09PSAtMCkgc3dpcGVyLnRyYW5zbGF0ZSA9IDA7XG4gICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICB2YXIgbmV3UHJvZ3Jlc3M7XG4gICAgdmFyIHRyYW5zbGF0ZXNEaWZmID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuXG4gICAgaWYgKHRyYW5zbGF0ZXNEaWZmID09PSAwKSB7XG4gICAgICBuZXdQcm9ncmVzcyA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1Byb2dyZXNzID0gKHN3aXBlci50cmFuc2xhdGUgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIC8gdHJhbnNsYXRlc0RpZmY7XG4gICAgfVxuXG4gICAgaWYgKG5ld1Byb2dyZXNzICE9PSBzd2lwZXIucHJvZ3Jlc3MpIHtcbiAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyhydGxUcmFuc2xhdGUgPyAtc3dpcGVyLnRyYW5zbGF0ZSA6IHN3aXBlci50cmFuc2xhdGUpO1xuICAgIH1cblxuICAgI
24510HN3aXBlci5lbWl0KCdzZXRUcmFuc2xhdGUnLCBzd2lwZXIudHJhbnNsYXRlLCBmYWxzZSk7XG4gIH1cblxuICB2YXIgZHVtbXlFdmVudEF0dGFjaGVkID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZHVtbXlFdmVudExpc3RlbmVyKCkge31cblxuICBmdW5jdGlvbiBhdHRhY2hFdmVudHMoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgdG91Y2hFdmVudHMgPSBzd2lwZXIudG91Y2hFdmVudHMsXG4gICAgICAgIGVsID0gc3dpcGVyLmVsLFxuICAgICAgICB3cmFwcGVyRWwgPSBzd2lwZXIud3JhcHBlckVsLFxuICAgICAgICBkZXZpY2UgPSBzd2lwZXIuZGV2aWNlLFxuICAgICAgICBzdXBwb3J0ID0gc3dpcGVyLnN1cHBvcnQ7XG4gICAgc3dpcGVyLm9uVG91Y2hTdGFydCA9IG9uVG91Y2hTdGFydC5iaW5kKHN3aXBlcik7XG4gICAgc3dpcGVyLm9uVG91Y2hNb3ZlID0gb25Ub3VjaE1vdmUuYmluZChzd2lwZXIpO1xuICAgIHN3aXBlci5vblRvdWNoRW5kID0gb25Ub3VjaEVuZC5iaW5kKHN3aXBlcik7XG5cbiAgICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHN3aXBlci5vblNjcm9sbCA9IG9uU2Nyb2xsLmJpbmQoc3dpcGVyKTtcbiAgICB9XG5cbiAgICBzd2lwZXIub25DbGljayA9IG9uQ2xpY2suYmluZChzd2lwZXIpO1xuICAgIHZhciBjYXB0dXJlID0gISFwYXJhbXMubmVzdGVkOyAvLyBUb3VjaCBFdmVudHNcblxuICAgIGlmICghc3VwcG9ydC50b3VjaCAmJiBzdXBwb3J0LnBvaW50ZXJFdmVudHMpIHtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuc3RhcnQsIHN3aXBlci5vblRvdWNoU3RhcnQsIGZhbHNlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMubW92ZSwgc3dpcGVyLm9uVG91Y2hNb3ZlLCBjYXB0dXJlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuZW5kLCBzd2lwZXIub25Ub3VjaEVuZCwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3VwcG9ydC50b3VjaCkge1xuICAgICAgICB2Y
24510XIgcGFzc2l2ZUxpc3RlbmVyID0gdG91Y2hFdmVudHMuc3RhcnQgPT09ICd0b3VjaHN0YXJ0JyAmJiBzdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBwYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHtcbiAgICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgICAgIGNhcHR1cmU6IGZhbHNlXG4gICAgICAgIH0gOiBmYWxzZTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5zdGFydCwgc3dpcGVyLm9uVG91Y2hTdGFydCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5tb3ZlLCBzd2lwZXIub25Ub3VjaE1vdmUsIHN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyID8ge1xuICAgICAgICAgIHBhc3NpdmU6IGZhbHNlLFxuICAgICAgICAgIGNhcHR1cmU6IGNhcHR1cmVcbiAgICAgICAgfSA6IGNhcHR1cmUpO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLmVuZCwgc3dpcGVyLm9uVG91Y2hFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG5cbiAgICAgICAgaWYgKHRvdWNoRXZlbnRzLmNhbmNlbCkge1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuY2FuY2VsLCBzd2lwZXIub25Ub3VjaEVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZHVtbXlFdmVudEF0dGFjaGVkKSB7XG4gICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGR1bW15RXZlbnRMaXN0ZW5lcik7XG4gICAgICAgICAgZHVtbXlFdmVudEF0dGFjaGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLnNpbXVsYXRlVG91Y2ggJiYgIWRldmljZS5pb3MgJiYgIWRldmljZS5hbmRyb2lkIHx8IHBhcmFtcy5zaW11bGF0ZVRvdWNoICYmICFzdXBwb3J0LnRvdWNoICYmIGRldmljZS5pb3MpIHtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgc3dpcGVyLm9uVG91Y2hTdGFydCwgZmFsc2UpO1xuICAgICAgICBkb2
24510N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBzd2lwZXIub25Ub3VjaE1vdmUsIGNhcHR1cmUpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgc3dpcGVyLm9uVG91Y2hFbmQsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9IC8vIFByZXZlbnQgTGlua3MgQ2xpY2tzXG5cblxuICAgIGlmIChwYXJhbXMucHJldmVudENsaWNrcyB8fCBwYXJhbXMucHJldmVudENsaWNrc1Byb3BhZ2F0aW9uKSB7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHN3aXBlci5vbkNsaWNrLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHdyYXBwZXJFbC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzd2lwZXIub25TY3JvbGwpO1xuICAgIH0gLy8gUmVzaXplIGhhbmRsZXJcblxuXG4gICAgaWYgKHBhcmFtcy51cGRhdGVPbldpbmRvd1Jlc2l6ZSkge1xuICAgICAgc3dpcGVyLm9uKGRldmljZS5pb3MgfHwgZGV2aWNlLmFuZHJvaWQgPyAncmVzaXplIG9yaWVudGF0aW9uY2hhbmdlIG9ic2VydmVyVXBkYXRlJyA6ICdyZXNpemUgb2JzZXJ2ZXJVcGRhdGUnLCBvblJlc2l6ZSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5vbignb2JzZXJ2ZXJVcGRhdGUnLCBvblJlc2l6ZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGV0YWNoRXZlbnRzKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgIHRvdWNoRXZlbnRzID0gc3dpcGVyLnRvdWNoRXZlbnRzLFxuICAgICAgICBlbCA9IHN3aXBlci5lbCxcbiAgICAgICAgd3JhcHBlckVsID0gc3dpcGVyLndyYXBwZXJFbCxcbiAgICAgICAgZGV2aWNlID0gc3dpcGVyLmRldmljZSxcbiAgICAgICAgc3VwcG9ydCA9IHN3aXBlci5zdXBwb3J0O1xuICAgIHZhciBjYXB0dXJlID0gISFwYXJhbXMubmVzdGVkOyAvLyBUb3VjaCBFdmVudHNcblxuICAgIGlmICghc3VwcG9ydC50b3VjaCAmJiBzdXBwb3J0LnBvaW50ZXJFdmVudHMpIHtcbiAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuc3RhcnQsIHN3aXBlci5vblRvdWNoU3RhcnQsIGZhbHNlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMubW92ZSwgc3dpcGVyLm9uVG91Y2hNb3ZlLCBjYXB0dXJlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuZW5kLCBzd2lwZXIub25Ub3VjaEVuZCwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3VwcG9ydC50b3VjaCkge1xuICAgICAgICB2Y
24510XIgcGFzc2l2ZUxpc3RlbmVyID0gdG91Y2hFdmVudHMuc3RhcnQgPT09ICdvblRvdWNoU3RhcnQnICYmIHN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8ge1xuICAgICAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICAgICAgY2FwdHVyZTogZmFsc2VcbiAgICAgICAgfSA6IGZhbHNlO1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLnN0YXJ0LCBzd2lwZXIub25Ub3VjaFN0YXJ0LCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLm1vdmUsIHN3aXBlci5vblRvdWNoTW92ZSwgY2FwdHVyZSk7XG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuZW5kLCBzd2lwZXIub25Ub3VjaEVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcblxuICAgICAgICBpZiAodG91Y2hFdmVudHMuY2FuY2VsKSB7XG4gICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5jYW5jZWwsIHN3aXBlci5vblRvdWNoRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMuc2ltdWxhdGVUb3VjaCAmJiAhZGV2aWNlLmlvcyAmJiAhZGV2aWNlLmFuZHJvaWQgfHwgcGFyYW1zLnNpbXVsYXRlVG91Y2ggJiYgIXN1cHBvcnQudG91Y2ggJiYgZGV2aWNlLmlvcykge1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBzd2lwZXIub25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHN3aXBlci5vblRvdWNoTW92ZSwgY2FwdHVyZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBzd2lwZXIub25Ub3VjaEVuZCwgZmFsc2UpO1xuICAgICAgfVxuICAgIH0gLy8gUHJldmVudCBMaW5rcyBDbGlja3NcblxuXG4gICAgaWYgKHBhcmFtcy5wcmV2ZW50Q2xpY2tzIHx8IHBhcmFtcy5wcmV2ZW50Q2xpY2tzUHJvcGFnYXRpb24pIHtcbiAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3dpcGVyLm9uQ2xpY2ssIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgICAgd3JhcHBlckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHN3aXBlci5vblNjcm9sbCk7XG4gICAgfSAvLyBSZXNpemUgaGFuZGxlclxuXG5cbiAgICBzd2lwZXIub2ZmKGRldmljZS5pb3MgfHwgZGV2aWNlLmFuZHJvaWQgPyAncmVzaXplIG9yaWVudGF0aW9uY2hhbmdlIG9ic2VydmVyVXBkYXRlJyA6ICdyZXNpemUgb2JzZXJ2ZXJVcGRhdGUnLCBvblJlc2l6ZSk7XG4gIH1cblxuICB2YXIgZXZlbnRzID0ge1xuICAgIGF0dGFjaEV2ZW50czogYXR0YWNoRXZlbnRzLFxuICAgIGRldGFjaEV2ZW50czogZGV0YWNoRXZlbnRzXG4gIH07XG5cbiAgZnVuY3Rpb24gc2V0QnJlYWtwb2ludCgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXgsXG4gICAgICAgIGluaXRpYWxpemVkID0gc3dpcGVyLmluaXRpYWxpemVkLFxuICAgICAgICBfc3dpcGVyJGxvb3BlZFNsaWRlcyA9IHN3aXBlci5sb29wZWRTbGlkZXMsXG4gICAgICAgIGxvb3BlZFNsaWRlcyA9IF9zd2lwZXIkbG9vcGVkU2xpZGVzID09PSB2b2lkIDAgPyAwIDogX3N3aXBlciRsb29wZWRTbGlkZXMsXG4gICAgICAgIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgICRlbCA9IHN3aXBlci4kZWw7XG4gICAgdmFyIGJyZWFrcG9pbnRzID0gcGFyYW1zLmJyZWFrcG9pbnRzO1xuICAgIGlmICghYnJlYWtwb2ludHMgfHwgYnJlYWtwb2ludHMgJiYgT2JqZWN0LmtleXMoYnJlYWtwb2ludHMpLmxlbmd0aCA9PT0gMCkgcmV0dXJuOyAvLyBHZXQgYnJlYWtwb2ludCBmb3Igd2luZG93IHdpZHRoIGFuZCB1cGRhdGUgcGFyYW1ldGVyc1xuXG4gICAgdmFyIGJyZWFrcG9pbnQgPSBzd2lwZXIuZ2V0QnJlYWtwb2ludChicmVha3BvaW50cywgc3dpcGVyLnBhcmFtcy5icmVha3BvaW50c0Jhc2UsIHN3aXBlci5lbCk7XG4gICAgaWYgKCFicmVha3BvaW50IHx8IHN3aXBlci5jdXJyZW50QnJlYWtwb2ludCA9PT0gYnJlYWtwb2ludCkgcmV0dXJuO1xuICAgIHZhciBicmVha3BvaW50T25seVBhcmFtcyA9IGJyZWFrcG9pbnQgaW4gYnJlYWtwb2ludHMgPyBicmVha3BvaW50c1ticmVha3BvaW50XSA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChicmVha3BvaW50T25seVBhcmFtcykge1xuICAgICAgWydzbGlkZXNQZXJWaWV3JywgJ3NwYWNlQmV0d2VlbicsICdzbGlkZXNQZXJHcm91cCcsICdzbGlkZXNQZXJHcm91cFNraXAnLCAnc2xpZGVzUGVyQ29sdW1uJ10uZm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgICAgdmFyIHBhcmFtVmFsdWUgPSBicmVha3BvaW50T25seVBhcmFtc1twYXJhbV07XG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1WYWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuICAgICAgICBpZiAocGFyYW0gPT09ICdzbGlkZXNQZXJWaWV3JyAmJiAocGFyYW1WYWx1ZSA9PT0gJ0FVVE8nIHx8IHBhcmFtVmFsdWUgPT09ICdhdXRvJykpIHtcbiAgICAgICAgICBicmVha3BvaW50T25seVBhcmFtc1twYXJhbV0gPSAnYXV0byc7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW0gPT09ICdzbGlkZXNQZXJWaWV3Jykge1xuICAgICAgICAgIGJyZWFrcG9pbnRPbmx5UGFyYW1zW3BhcmFtXSA9IHBhcnNlRmxvYXQocGFyYW1WYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWtwb2ludE9ubHlQYXJhbXNbcGFyYW1dID0gcGFyc2VJbnQocGFyYW1WYWx1ZSwgMTApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgYnJlYWtwb2ludFBhcmFtcyA9IGJyZWFrcG9pbnRPbmx5UGFyYW1zIHx8IHN3aXBlci5vcmlnaW5hbFBhcmFtcztcbiAgICB2YXIgd2FzTXVsdGlSb3cgPSBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uID4gMTtcbiAgICB2YXIgaXNNdWx0aVJvdyA9IGJyZWFrcG9pbnRQYXJhbXMuc2xpZGVzUGVyQ29sdW1uID4gMTtcbiAgICB2YXIgd2FzRW5hYmxlZCA9IHBhcmFtcy5lbmFibGVkO1xuXG4gICAgaWYgKHdhc011bHRpUm93ICYmICFpc011bHRpUm93KSB7XG4gICAgICAkZWwucmVtb3ZlQ2xhc3MocGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MgKyBcIm11bHRpcm93IFwiICsgcGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MgKyBcIm11bHRpcm93LWNvbHVtblwiKTtcbiAgICAgIHN3aXBlci5lbWl0Q29udGFpbmVyQ2xhc3NlcygpO1xuICAgIH0gZWxzZSBpZiAoIXdhc011bHRpUm93ICYmIGlzTXVsdGlSb3cpIHtcbiAgICAgICRlbC5hZGRDbGFzcyhwYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcyArIFwibXVsdGlyb3dcIik7XG5cbiAgICAgIGlmIChicmVha3BvaW50UGFyYW1zLnNsaWRlc1BlckNvbHVtbkZpbGwgPT09ICdjb2x1bW4nKSB7XG4gICAgICAgICRlbC5hZGRDbGFzcyhwYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcyArIFwibXVsdGlyb3ctY29sdW1uXCIpO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuZW1pdENvb
24510nRhaW5lckNsYXNzZXMoKTtcbiAgICB9XG5cbiAgICB2YXIgZGlyZWN0aW9uQ2hhbmdlZCA9IGJyZWFrcG9pbnRQYXJhbXMuZGlyZWN0aW9uICYmIGJyZWFrcG9pbnRQYXJhbXMuZGlyZWN0aW9uICE9PSBwYXJhbXMuZGlyZWN0aW9uO1xuICAgIHZhciBuZWVkc1JlTG9vcCA9IHBhcmFtcy5sb29wICYmIChicmVha3BvaW50UGFyYW1zLnNsaWRlc1BlclZpZXcgIT09IHBhcmFtcy5zbGlkZXNQZXJWaWV3IHx8IGRpcmVjdGlvbkNoYW5nZWQpO1xuXG4gICAgaWYgKGRpcmVjdGlvbkNoYW5nZWQgJiYgaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHN3aXBlci5jaGFuZ2VEaXJlY3Rpb24oKTtcbiAgICB9XG5cbiAgICBleHRlbmQoc3dpcGVyLnBhcmFtcywgYnJlYWtwb2ludFBhcmFtcyk7XG4gICAgdmFyIGlzRW5hYmxlZCA9IHN3aXBlci5wYXJhbXMuZW5hYmxlZDtcbiAgICBleHRlbmQoc3dpcGVyLCB7XG4gICAgICBhbGxvd1RvdWNoTW92ZTogc3dpcGVyLnBhcmFtcy5hbGxvd1RvdWNoTW92ZSxcbiAgICAgIGFsbG93U2xpZGVOZXh0OiBzd2lwZXIucGFyYW1zLmFsbG93U2xpZGVOZXh0LFxuICAgICAgYWxsb3dTbGlkZVByZXY6IHN3aXBlci5wYXJhbXMuYWxsb3dTbGlkZVByZXZcbiAgICB9KTtcblxuICAgIGlmICh3YXNFbmFibGVkICYmICFpc0VuYWJsZWQpIHtcbiAgICAgIHN3aXBlci5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIGlmICghd2FzRW5hYmxlZCAmJiBpc0VuYWJsZWQpIHtcbiAgICAgIHN3aXBlci5lbmFibGUoKTtcbiAgICB9XG5cbiAgICBzd2lwZXIuY3VycmVudEJyZWFrcG9pbnQgPSBicmVha3BvaW50O1xuICAgIHN3aXBlci5lbWl0KCdfYmVmb3JlQnJlYWtwb2ludCcsIGJyZWFrcG9pbnRQYXJhbXMpO1xuXG4gICAgaWYgKG5lZWRzUmVMb29wICYmIGluaXRpYWxpemVkKSB7XG4gICAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzKCk7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhhY3RpdmVJbmRleCAtIGxvb3BlZFNsaWRlcyArIHN3aXBlci5sb29wZWRTbGlkZXMsIDAsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBzd2lwZXIuZW1pdCgnYnJlYWtwb2ludCcsIGJyZWFrcG9pbnRQYXJhbXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QnJlYWtwb2ludChicmVha3BvaW50cywgYmFzZSwgY29udGFpbmVyRWwpIHtcbiAgICBpZiAoYmFzZSA9PT0gdm9pZCAwKSB7XG4gICAgICBiYXNlID0gJ3dpbmRvdyc7XG4gICAgfVxuXG4gICAgaWYgKCFicmVha3BvaW50cyB8fCBiYXNlID09PSAnY29udGFpbmVyJyAmJiAhY29udGFpbmVyRWwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdmFyIGJyZWFrcG9pbnQgPSBmYWxzZTtcbiAgICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgdmFyIGN1cnJlbnRXaWR0aCA9IGJhc2UgPT09ICd3aW5kb3cnID8gd2luZG93LmlubmVyV2lkdGggOiBjb250YWluZXJFbC5jbGllbnRXaWR0aDtcbiAgICB2YXIgY3VycmVudEhlaWdodCA9IGJhc2UgPT09ICd3aW5kb3cnID8gd2luZG93LmlubmVySGVpZ2h0IDogY29udGFpbmVyRWwuY2xpZW50SGVpZ2h0O1xuICAgIHZhciBwb2ludHMgPSBPYmplY3Qua2V5cyhicmVha3BvaW50cykubWFwKGZ1bmN0aW9uIChwb2ludCkge1xuICAgICAgaWYgKHR5cGVvZiBwb2ludCA9PT0gJ3N0cmluZycgJiYgcG9pbnQuaW5kZXhPZignQCcpID09PSAwKSB7XG4gICAgICAgIHZhciBtaW5SYXRpbyA9IHBhcnNlRmxvYXQocG9pbnQuc3Vic3RyKDEpKTtcbiAgICAgICAgdmFyIHZhbHVlID0gY3VycmVudEhlaWdodCAqIG1pblJhdGlvO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBwb2ludDogcG9pbnRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHBvaW50LFxuICAgICAgICBwb2ludDogcG9pbnRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcG9pbnRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBwYXJzZUludChhLnZhbHVlLCAxMCkgLSBwYXJzZUludChiLnZhbHVlLCAxMCk7XG4gICAgfSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIF9wb2ludHMkaSA9IHBvaW50c1tpXSxcbiAgICAgICAgICBwb2ludCA9IF9wb2ludHMkaS5wb2ludCxcbiAgICAgICAgICB2YWx1ZSA9IF9wb2ludHMkaS52YWx1ZTtcblxuICAgICAgaWYgKHZhbHVlIDw9IGN1cnJlbnRXaWR0aCkge1xuICAgICAgICBicmVha3BvaW50ID0gcG9pbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGJyZWFrcG9pbnQgfHwgJ21heCc7XG4gIH1cblxuICB2YXIgYnJlYWtwb2ludHMgPSB7XG4gICAgc2V0QnJlYWtwb2ludDogc2V0QnJlYWtwb2ludCxcbiAgICBnZXRCcmVha3BvaW50OiBnZXRCcmVha3BvaW50XG4gIH07XG5cbiAgZnVuY3Rpb24gcHJlcGFyZUNsYXNzZXMoZW50cmllcywgcHJlZml4KSB7XG4gICAgdmFyIHJlc3VsdENsYXNzZXMgPSBbXTtcbiAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoaXRlbSkuZm9yRWFjaChmdW5jdGlvbiAoY2xhc3NOYW1lcykge1xuICAgICAgICAgIGlmIChpdGVtW2NsYXNzTmFtZXNdKSB7XG4gICAgICAgICAgICByZXN1bHRDbGFzc2VzLnB1c2gocHJlZml4ICsgY2xhc3NOYW1lcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJlc3VsdENsYXNzZXMucHVzaChwcmVmaXggKyBpdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0Q2xhc3NlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZENsYXNzZXMoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGNsYXNzTmFtZXMgPSBzd2lwZXIuY2xhc3NOYW1lcyxcbiAgICAgICAgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgcnRsID0gc3dpcGVyLnJ0bCxcbiAgICAgICAgJGVsID0gc3dpcGVyLiRlbCxcbiAgICAgICAgZGV2aWNlID0gc3dpcGVyLmRldmljZSxcbiAgICAgICAgc3VwcG9ydCA9IHN3aXBlci5zdXBwb3J0OyAvLyBwcmV0dGllci1pZ25vcmVcblxuICAgI
24510HZhciBzdWZmaXhlcyA9IHByZXBhcmVDbGFzc2VzKFsnaW5pdGlhbGl6ZWQnLCBwYXJhbXMuZGlyZWN0aW9uLCB7XG4gICAgICAncG9pbnRlci1ldmVudHMnOiBzdXBwb3J0LnBvaW50ZXJFdmVudHMgJiYgIXN1cHBvcnQudG91Y2hcbiAgICB9LCB7XG4gICAgICAnZnJlZS1tb2RlJzogcGFyYW1zLmZyZWVNb2RlXG4gICAgfSwge1xuICAgICAgJ2F1dG9oZWlnaHQnOiBwYXJhbXMuYXV0b0hlaWdodFxuICAgIH0sIHtcbiAgICAgICdydGwnOiBydGxcbiAgICB9LCB7XG4gICAgICAnbXVsdGlyb3cnOiBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uID4gMVxuICAgIH0sIHtcbiAgICAgICdtdWx0aXJvdy1jb2x1bW4nOiBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uID4gMSAmJiBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uRmlsbCA9PT0gJ2NvbHVtbidcbiAgICB9LCB7XG4gICAgICAnYW5kcm9pZCc6IGRldmljZS5hbmRyb2lkXG4gICAgfSwge1xuICAgICAgJ2lvcyc6IGRldmljZS5pb3NcbiAgICB9LCB7XG4gICAgICAnY3NzLW1vZGUnOiBwYXJhbXMuY3NzTW9kZVxuICAgIH1dLCBwYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcyk7XG4gICAgY2xhc3NOYW1lcy5wdXNoLmFwcGx5KGNsYXNzTmFtZXMsIHN1ZmZpeGVzKTtcbiAgICAkZWwuYWRkQ2xhc3MoW10uY29uY2F0KGNsYXNzTmFtZXMpLmpvaW4oJyAnKSk7XG4gICAgc3dpcGVyLmVtaXRDb250YWluZXJDbGFzc2VzKCk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVDbGFzc2VzKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciAkZWwgPSBzd2lwZXIuJGVsLFxuICAgICAgICBjbGFzc05hbWVzID0gc3dpcGVyLmNsYXNzTmFtZXM7XG4gICAgJGVsLnJlbW92ZUNsYXNzKGNsYXNzTmFtZXMuam9pbignICcpKTtcbiAgICBzd2lwZXIuZW1pdENvbnRhaW5lckNsYXNzZXMoKTtcbiAgfVxuXG4gIHZhciBjbGFzc2VzID0ge1xuICAgIGFkZENsYXNzZXM6IGFkZENsYXNzZXMsXG4gICAgcmVtb3ZlQ2xhc3NlczogcmVtb3ZlQ2xhc3Nlc1xuICB9O1xuXG4gIGZ1bmN0aW9uIGxvYWRJbWFnZShpbWFnZUVsLCBzcmMsIHNyY3NldCwgc2l6ZXMsIGNoZWNrRm9yQ29tcGxldGUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICAgIHZhciBpbWFnZTtcblxuICAgIGZ1bmN0aW9uIG9uUmVhZHkoKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgdmFyIGlzUGljdHVyZSA9ICQoaW1hZ2VFbCkucGFyZW50KCdwaWN0dXJlJylbMF07XG5cbiAgICBpZiAoIWlzUGljdHVyZSAmJiAoIWltYWdlRWwuY29tcGxldGUgfHwgIWNoZWNrRm9yQ29tcGxldGUpKSB7XG4gICAgICBpZiAoc3JjKSB7XG4gICAgICAgIGltYWdlID0gbmV3IHdpbmRvdy5JbWFnZSgpO1xuICAgICAgICBpbWFnZS5vbmxvYWQgPSBvblJlYWR5O1xuICAgICAgICBpbWFnZS5vbmVycm9yID0gb25SZWFkeTtcblxuICAgICAgICBpZiAoc2l6ZXMpIHtcbiAgICAgICAgICBpbWFnZS5zaXplcyA9IHNpemVzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNyY3NldCkge1xuICAgICAgICAgIGltYWdlLnNyY3NldCA9IHNyY3NldDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzcmMpIHtcbiAgICAgICAgICBpbWFnZS5zcmMgPSBzcmM7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uUmVhZHkoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW1hZ2UgYWxyZWFkeSBsb2FkZWQuLi5cbiAgICAgIG9uUmVhZHkoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcmVsb2FkSW1hZ2VzKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHN3aXBlci5pbWFnZXNUb0xvYWQgPSBzd2lwZXIuJGVsLmZpbmQoJ2ltZycpO1xuXG4gICAgZnVuY3Rpb24gb25SZWFkeSgpIHtcbiAgICAgIGlmICh0eXBlb2Ygc3dpcGVyID09PSAndW5kZWZpbmVkJyB8fCBzd2lwZXIgPT09IG51bGwgfHwgIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSByZXR1cm47XG4gICAgICBpZiAoc3dpcGVyLmltYWdlc0xvYWRlZCAhPT0gdW5kZWZpbmVkKSBzd2lwZXIuaW1hZ2VzTG9hZGVkICs9IDE7XG5cbiAgICAgIGlmIChzd2lwZXIuaW1hZ2VzTG9hZGVkID09PSBzd2lwZXIuaW1hZ2VzVG9Mb2FkLmxlbmd0aCkge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy51cGRhdGVPbkltYWdlc1JlYWR5KSBzd2lwZXIudXBkYXRlKCk7XG4gICAgICAgIHN3aXBlci5lbWl0KCdpbWFnZXNSZWFkeScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3dpcGVyLmltYWdlc1RvTG9hZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIGltYWdlRWwgPSBzd2lwZXIuaW1hZ2VzVG9Mb2FkW2ldO1xuICAgICAgc3dpcGVyLmxvYWRJbWFnZShpbWFnZUVsLCBpbWFnZUVsLmN1cnJlbnRTcmMgfHwgaW1hZ2VFbC5nZXRBdHRyaWJ1dGUoJ3NyYycpLCBpbWFnZUVsLnNyY3NldCB8fCBpbWFnZUVsLmdldEF0dHJpYnV0ZSgnc3Jjc2V0JyksIGltYWdlRWwuc2l6ZXMgfHwgaW1hZ2VFbC5nZXRBdHRyaWJ1dGUoJ3NpemVzJyksIHRydWUsIG9uUmVhZHkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpbWFnZXMgPSB7XG4gICAgbG9hZEltYWdlOiBsb2FkSW1hZ2UsXG4gICAgcHJlbG9hZEltYWdlczogcHJlbG9hZEltYWdlc1xuICB9O1xuXG4gIGZ1bmN0aW9uIGNoZWNrT3ZlcmZsb3coKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHdhc0xvY2tlZCA9IHN3aXBlci5pc0xvY2tlZDtcbiAgICB2YXIgbGFzdFNsaWRlUG9zaXRpb24gPSBzd2lwZXIuc2xpZGVzLmxlbmd0aCA+IDAgJiYgcGFyYW1zLnNsaWRlc09mZnNldEJlZm9yZSArIHBhcmFtcy5zcGFjZUJldHdlZW4gKiAoc3dpcGVyLnNsaWRlcy5sZW5ndGggLSAxKSArIHN3aXBlci5zbGlkZXNbMF0ub2Zmc2V0V2lkdGggKiBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcblxuICAgIGlmIChwYXJhbXMuc2xpZGVzT2Zmc2V0QmVmb3JlICYmIHBhcmFtcy5zbGlkZXNPZmZzZXRBZnRlciAmJiBsYXN0U2xpZGVQb3NpdGlvbikge1xuICAgICAgc3dpcGVyLmlzTG9ja2VkID0gbGFzdFNsaWRlUG9zaXRpb24gPD0gc3dpcGVyLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5pc0xvY2tlZCA9IHN3aXBlci5zbmFwR3JpZC5sZW5ndGggPT09IDE7XG4gICAgfVxuXG4gICAgc3dpcGVyLmFsbG93U2xpZGVOZXh0ID0gIXN3aXBlci5pc0xvY2tlZDtcbiAgICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSAhc3dpcGVyLmlzTG9ja2VkOyAvLyBldmVudHNcblxuICAgIGlmICh3YXNMb2NrZWQgIT09I
24510HN3aXBlci5pc0xvY2tlZCkgc3dpcGVyLmVtaXQoc3dpcGVyLmlzTG9ja2VkID8gJ2xvY2snIDogJ3VubG9jaycpO1xuXG4gICAgaWYgKHdhc0xvY2tlZCAmJiB3YXNMb2NrZWQgIT09IHN3aXBlci5pc0xvY2tlZCkge1xuICAgICAgc3dpcGVyLmlzRW5kID0gZmFsc2U7XG4gICAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24pIHN3aXBlci5uYXZpZ2F0aW9uLnVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGVja092ZXJmbG93JDEgPSB7XG4gICAgY2hlY2tPdmVyZmxvdzogY2hlY2tPdmVyZmxvd1xuICB9O1xuXG4gIHZhciBkZWZhdWx0cyA9IHtcbiAgICBpbml0OiB0cnVlLFxuICAgIGRpcmVjdGlvbjogJ2hvcml6b250YWwnLFxuICAgIHRvdWNoRXZlbnRzVGFyZ2V0OiAnY29udGFpbmVyJyxcbiAgICBpbml0aWFsU2xpZGU6IDAsXG4gICAgc3BlZWQ6IDMwMCxcbiAgICBjc3NNb2RlOiBmYWxzZSxcbiAgICB1cGRhdGVPbldpbmRvd1Jlc2l6ZTogdHJ1ZSxcbiAgICByZXNpemVPYnNlcnZlcjogZmFsc2UsXG4gICAgbmVzdGVkOiBmYWxzZSxcbiAgICBjcmVhdGVFbGVtZW50czogZmFsc2UsXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvLyBPdmVycmlkZXNcbiAgICB3aWR0aDogbnVsbCxcbiAgICBoZWlnaHQ6IG51bGwsXG4gICAgLy9cbiAgICBwcmV2ZW50SW50ZXJhY3Rpb25PblRyYW5zaXRpb246IGZhbHNlLFxuICAgIC8vIHNzclxuICAgIHVzZXJBZ2VudDogbnVsbCxcbiAgICB1cmw6IG51bGwsXG4gICAgLy8gVG8gc3VwcG9ydCBpT1MncyBzd2lwZS10by1nby1iYWNrIGdlc3R1cmUgKHdoZW4gYmVpbmcgdXNlZCBpbi1hcHApLlxuICAgIGVkZ2VTd2lwZURldGVjdGlvbjogZmFsc2UsXG4gICAgZWRnZVN3aXBlVGhyZXNob2xkOiAyMCxcbiAgICAvLyBGcmVlIG1vZGVcbiAgICBmcmVlTW9kZTogZmFsc2UsXG4gICAgZnJlZU1vZGVNb21lbnR1bTogdHJ1ZSxcbiAgICBmcmVlTW9kZU1vbWVudHVtUmF0aW86IDEsXG4gICAgZnJlZU1vZGVNb21lbnR1bUJvdW5jZTogdHJ1ZSxcbiAgICBmcmVlTW9kZU1vbWVudHVtQm91bmNlUmF0aW86IDEsXG4gICAgZnJlZU1vZGVNb21lbnR1bVZlbG9jaXR5UmF0aW86IDEsXG4gICAgZnJlZU1vZGVTdGlja3k6IGZhbHNlLFxuICAgIGZyZWVNb2RlTWluaW11bVZlbG9jaXR5OiAwLjAyLFxuICAgIC8vIEF1dG9oZWlnaHRcbiAgICBhdXRvSGVpZ2h0OiBmYWxzZSxcbiAgICAvLyBTZXQgd3JhcHBlciB3aWR0aFxuICAgIHNldFdyYXBwZXJTaXplOiBmYWxzZSxcbiAgICAvLyBWaXJ0dWFsIFRyYW5zbGF0ZVxuICAgIHZpcnR1YWxUcmFuc2xhdGU6IGZhbHNlLFxuICAgIC8vIEVmZmVjdHNcbiAgICBlZmZlY3Q6ICdzbGlkZScsXG4gICAgLy8gJ3NsaWRlJyBvciAnZmFkZScgb3IgJ2N1YmUnIG9yICdjb3ZlcmZsb3cnIG9yICdmbGlwJ1xuICAgIC8vIEJyZWFrcG9pbnRzXG4gICAgYnJlYWtwb2ludHM6IHVuZGVmaW5lZCxcbiAgICBicmVha3BvaW50c0Jhc2U6ICd3aW5kb3cnLFxuICAgIC8vIFNsaWRlcyBncmlkXG4gICAgc3BhY2VCZXR3ZWVuOiAwLFxuICAgIHNsaWRlc1BlclZpZXc6IDEsXG4gICAgc2xpZGVzUGVyQ29sdW1uOiAxLFxuICAgIHNsaWRlc1BlckNvbHVtbkZpbGw6ICdjb2x1bW4nLFxuICAgIHNsaWRlc1Blckdyb3VwOiAxLFxuICAgIHNsaWRlc1Blckdyb3VwU2tpcDogMCxcbiAgICBjZW50ZXJlZFNsaWRlczogZmFsc2UsXG4gICAgY2VudGVyZWRTbGlkZXNCb3VuZHM6IGZhbHNlLFxuICAgIHNsaWRlc09mZnNldEJlZm9yZTogMCxcbiAgICAvLyBpbiBweFxuICAgIHNsaWRlc09mZnNldEFmdGVyOiAwLFxuICAgIC8vIGluIHB4XG4gICAgbm9ybWFsaXplU2xpZGVJbmRleDogdHJ1ZSxcbiAgICBjZW50ZXJJbnN1ZmZpY2llbnRTbGlkZXM6IGZhbHNlLFxuICAgIC8vIERpc2FibGUgc3dpcGVyIGFuZCBoaWRlIG5hdmlnYXRpb24gd2hlbiBjb250YWluZXIgbm90IG92ZXJmbG93XG4gICAgd2F0Y2hPdmVyZmxvdzogZmFsc2UsXG4gICAgLy8gUm91bmQgbGVuZ3RoXG4gICAgcm91bmRMZW5ndGhzOiBmYWxzZSxcbiAgICAvLyBUb3VjaGVzXG4gICAgdG91Y2hSYXRpbzogMSxcbiAgICB0b3VjaEFuZ2xlOiA0NSxcbiAgICBzaW11bGF0ZVRvdWNoOiB0cnVlLFxuICAgIHNob3J0U3dpcGVzOiB0cnVlLFxuICAgIGxvbmdTd2lwZXM6IHRydWUsXG4gICAgbG9uZ1N3aXBlc1JhdGlvOiAwLjUsXG4gICAgbG9uZ1N3aXBlc01zOiAzMDAsXG4gICAgZm9sbG93RmluZ2VyOiB0cnVlLFxuICAgIGFsbG93VG91Y2hNb3ZlOiB0cnVlLFxuICAgIHRocmVzaG9sZDogMCxcbiAgICB0b3VjaE1vdmVTdG9wUHJvcGFnYXRpb246IGZhbHNlLFxuICAgIHRvdWNoU3RhcnRQcmV2ZW50RGVmYXVsdDogdHJ1ZSxcbiAgICB0b3VjaFN0YXJ0Rm9yY2VQcmV2ZW50RGVmYXVsdDogZmFsc2UsXG4gICAgdG91Y2hSZWxlYXNlT25FZGdlczogZmFsc2UsXG4gICAgLy8gVW5pcXVlIE5hdmlnYXRpb24gRWxlbWVudHNcbiAgICB1bmlxdWVOYXZFbGVtZW50czogdHJ1ZSxcbiAgICAvLyBSZXNpc3RhbmNlXG4gICAgcmVzaXN0YW5jZTogdHJ1ZSxcbiAgICByZXNpc3RhbmNlUmF0aW86IDAuODUsXG4gICAgLy8gUHJvZ3Jlc3NcbiAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiBmYWxzZSxcbiAgICB3YXRjaFNsaWRlc1Zpc2liaWxpdHk6IGZhbHNlLFxuICAgIC8vIEN1cnNvclxuICAgIGdyYWJDdXJzb3I6IGZhbHNlLFxuICAgIC8vIENsaWNrc1xuICAgIHByZXZlbnRDbGlja3M6IHRydWUsXG4gICAgcHJldmVudENsaWNrc1Byb3BhZ2F0aW9uOiB0cnVlLFxuICAgIHNsaWRlVG9DbGlja2VkU2xpZGU6IGZhbHNlLFxuICAgIC8vIEltYWdlc1xuICAgIHByZWxvYWRJbWFnZXM6IHRydWUsXG4gICAgdXBkYXRlT25JbWFnZXNSZWFkeTogdHJ1ZSxcbiAgICAvLyBsb29wXG4gICAgbG9vcDogZmFsc2UsXG4gICAgbG9vcEFkZGl0aW9uYWxTbGlkZXM6IDAsXG4gICAgbG9vcGVkU2xpZGVzOiBudWxsLFxuICAgIGxvb3BGaWxsR3JvdXBXaXRoQmxhbms6IGZhbHNlLFxuICAgIGxvb3BQcmV2ZW50c1NsaWRlOiB0cnVlLFxuICAgIC8vIFN3aXBpbmcvbm8gc3dpcGluZ1xuICAgIGFsbG93U2xpZGVQcmV2OiB0cnVlLFxuICAgIGFsbG93U2xpZGVOZXh0OiB0cnVlLFxuICAgIHN3aXBlSGFuZGxlcjogbnVsbCxcbiAgICAvLyAnLnN3aXBlLWhhbmRsZXInLFxuICAgIG5vU3dpcGluZzogdHJ1ZSxcbiAgICBub1N3aXBpbmdDbGFzczogJ3N3aXBlci1uby1zd2lwaW5nJyxcbiAgICBub1N3aXBpbmdTZWxlY3RvcjogbnVsbCxcbiAgICAvLyBQYXNzaXZlIExpc3RlbmVyc1xuICAgIHBhc3NpdmVMaXN0ZW5lcnM6IHRydWUsXG4gICAgLy8gTlNcbiAgICBjb250YWluZXJNb2RpZmllckNsYXNzOiAnc3dpcGVyLWNvbnRhaW5lci0nLFxuICAgIC8vIE5FV1xuICAgIHNsaWRlQ2xhc3M6ICdzd2lwZXItc2xpZGUnLFxuICAgIHNsaWRlQmxhbmtDbGFzczogJ3N3aXBlci1zbGlkZS1pbnZpc2libGUtYmxhbmsnLFxuICAgIHNsaWRlQWN0aXZlQ2xhc3M6ICdzd2lwZXItc2xpZGUtYWN0aXZlJyxcbiAgICBzbGlkZUR1cGxpY2F0ZUFjdGl2ZUNsYXNzOiAnc3dpcGVyLXNsaWRlLWR1cGxpY2F0ZS1hY3RpdmUnLFxuICAgIHNsaWRlVmlzaWJsZUNsYXNzOiAnc3dpcGVyLXNsaWRlLXZpc2libGUnLFxuICAgIHNsaWRlRHVwbGljYXRlQ2xhc3M6ICdzd2lwZXItc2xpZGUtZHVwbGljYXRlJyxcbiAgICBzbGlkZU5leHRDbGFzczogJ3N3aXBlci1zbGlkZS1uZXh0JyxcbiAgICBzbGlkZUR1cGxpY2F0ZU5leHRDbGFzczogJ3N3aXBlci1zbGlkZS1kdXBsaWNhdGUtbmV4dCcsXG4gICAgc2xpZGVQcmV2Q2xhc3M6ICdzd2lwZXItc2xpZGUtcHJldicsXG4gICAgc2xpZGVEdXBsaWNhdGVQcmV2Q2xhc3M6ICdzd2lwZXItc2xpZGUtZHVwbGljYXRlLXByZXYnLFxuICAgIHdyYXBwZXJDbGFzczogJ3N3aXBlci13cmFwcGVyJyxcbiAgICAvLyBDYWxsYmFja3NcbiAgICBydW5DYWxsYmFja3NPbkluaXQ6IHRydWUsXG4gICAgLy8gSW50ZXJuYWxzXG4gICAgX2VtaXRDbGFzc2VzOiBmYWxzZVxuICB9O1xuXG4gIHZhciBwcm90b3R5cGVzID0ge1xuICAgIG1vZHVsYXI6IG1vZHVsYXIsXG4gICAgZXZlbnRzRW1pdHRlcjogZXZlbnRzRW1pdHRlcixcbiAgICB1cGRhdGU6IHVwZGF0ZSxcbiAgICB0cmFuc2xhdGU6IHRyYW5zbGF0ZSxcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uLFxuICAgIHNsaWRlOiBzbGlkZSxcbiAgICBsb29wOiBsb29wLFxuICAgIGdyYWJDdXJzb3I6IGdyYWJDdXJzb3IsXG4gICAgbWFuaXB1bGF0aW9uOiBtYW5pcHVsYXRpb24sXG4gICAgZXZlbnRzOiBldmVudHMsXG4gICAgYnJlYWtwb2ludHM6IGJyZWFrcG9pbnRzLFxuICAgIGNoZWNrT3ZlcmZsb3c6IGNoZWNrT3ZlcmZsb3ckMSxcbiAgICBjbGFzc2VzOiBjbGFzc2VzLFxuICAgIGltYWdlczogaW1hZ2VzXG4gIH07XG4gIHZhciBleHRlbmRlZERlZmF1bHRzID0ge307XG5cbiAgdmFyIFN3aXBlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3dpcGVyKCkge1xuICAgICAgdmFyIGVsO1xuICAgICAgdmFyIHBhcmFtcztcblxuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJi
24510BhcmdzWzBdLmNvbnN0cnVjdG9yICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmdzWzBdKS5zbGljZSg4LCAtMSkgPT09ICdPYmplY3QnKSB7XG4gICAgICAgIHBhcmFtcyA9IGFyZ3NbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbCA9IGFyZ3NbMF07XG4gICAgICAgIHBhcmFtcyA9IGFyZ3NbMV07XG4gICAgICB9XG5cbiAgICAgIGlmICghcGFyYW1zKSBwYXJhbXMgPSB7fTtcbiAgICAgIHBhcmFtcyA9IGV4dGVuZCh7fSwgcGFyYW1zKTtcbiAgICAgIGlmIChlbCAmJiAhcGFyYW1zLmVsKSBwYXJhbXMuZWwgPSBlbDtcblxuICAgICAgaWYgKHBhcmFtcy5lbCAmJiAkKHBhcmFtcy5lbCkubGVuZ3RoID4gMSkge1xuICAgICAgICB2YXIgc3dpcGVycyA9IFtdO1xuICAgICAgICAkKHBhcmFtcy5lbCkuZWFjaChmdW5jdGlvbiAoY29udGFpbmVyRWwpIHtcbiAgICAgICAgICB2YXIgbmV3UGFyYW1zID0gZXh0ZW5kKHt9LCBwYXJhbXMsIHtcbiAgICAgICAgICAgIGVsOiBjb250YWluZXJFbFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHN3aXBlcnMucHVzaChuZXcgU3dpcGVyKG5ld1BhcmFtcykpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN3aXBlcnM7XG4gICAgICB9IC8vIFN3aXBlciBJbnN0YW5jZVxuXG5cbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgc3dpcGVyLl9fc3dpcGVyX18gPSB0cnVlO1xuICAgICAgc3dpcGVyLnN1cHBvcnQgPSBnZXRTdXBwb3J0KCk7XG4gICAgICBzd2lwZXIuZGV2aWNlID0gZ2V0RGV2aWNlKHtcbiAgICAgICAgdXNlckFnZW50OiBwYXJhbXMudXNlckFnZW50XG4gICAgICB9KTtcbiAgICAgIHN3aXBlci5icm93c2VyID0gZ2V0QnJvd3NlcigpO1xuICAgICAgc3dpcGVyLmV2ZW50c0xpc3RlbmVycyA9IHt9O1xuICAgICAgc3dpcGVyLmV2ZW50c0FueUxpc3RlbmVycyA9IFtdO1xuXG4gICAgICBpZiAodHlwZW9mIHN3aXBlci5tb2R1bGVzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBzd2lwZXIubW9kdWxlcyA9IHt9O1xuICAgICAgfVxuXG4gICAgICBPYmplY3Qua2V5cyhzd2lwZXIubW9kdWxlcykuZm9yRWFjaChmdW5jdGlvbiAobW9kdWxlTmFtZSkge1xuICAgICAgICB2Y
24510XIgbW9kdWxlID0gc3dpcGVyLm1vZHVsZXNbbW9kdWxlTmFtZV07XG5cbiAgICAgICAgaWYgKG1vZHVsZS5wYXJhbXMpIHtcbiAgICAgICAgICB2YXIgbW9kdWxlUGFyYW1OYW1lID0gT2JqZWN0LmtleXMobW9kdWxlLnBhcmFtcylbMF07XG4gICAgICAgICAgdmFyIG1vZHVsZVBhcmFtcyA9IG1vZHVsZS5wYXJhbXNbbW9kdWxlUGFyYW1OYW1lXTtcbiAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZVBhcmFtcyAhPT0gJ29iamVjdCcgfHwgbW9kdWxlUGFyYW1zID09PSBudWxsKSByZXR1cm47XG5cbiAgICAgICAgICBpZiAoWyduYXZpZ2F0aW9uJywgJ3BhZ2luYXRpb24nLCAnc2Nyb2xsYmFyJ10uaW5kZXhPZihtb2R1bGVQYXJhbU5hbWUpID49IDAgJiYgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdID0ge1xuICAgICAgICAgICAgICBhdXRvOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghKG1vZHVsZVBhcmFtTmFtZSBpbiBwYXJhbXMgJiYgJ2VuYWJsZWQnIGluIG1vZHVsZVBhcmFtcykpIHJldHVybjtcblxuICAgICAgICAgIGlmIChwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0gPSB7XG4gICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9PT0gJ29iamVjdCcgJiYgISgnZW5hYmxlZCcgaW4gcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0pKSB7XG4gICAgICAgICAgICBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXS5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdKSBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7IC8vIEV4dGVuZCBkZWZhdWx0cyB3aXRoIG1vZHVsZXMgcGFyYW1zXG5cbiAgICAgIHZhciBzd2lwZXJQYXJhbXMgPSBleHRlbmQoe30sIGRlZmF1bHRzKTtcbiAgICAgIHN3aXBlci51c2VQYXJhbXMoc3dpcGVyUGFyYW1zKTsgLy8gRXh0ZW5kIGRlZmF1bHRzIHdpdGggcGFzc2VkIHBhcmFtc1xuXG4gICAgICBzd2lwZXIucGFyYW1zID0gZXh0ZW5kKHt9LCBzd2lwZXJQYXJhbXMsIGV4dGVuZGVkRGVmYXVsdHMsIHBhcmFtcyk7XG4gICAgICBzd2lwZXIub3JpZ2luYWxQYXJhbXMgPSBleHRlbmQoe30sIHN3aXBlci5wYXJhbXMpO1xuICAgICAgc3dpcGVyLnBhc3NlZFBhcmFtcyA9IGV4dGVuZCh7fSwgcGFyYW1zKTsgLy8gYWRkIGV2ZW50IGxpc3RlbmVyc1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcyAmJiBzd2lwZXIucGFyYW1zLm9uKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHN3aXBlci5wYXJhbXMub24pLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICAgICAgICAgIHN3aXBlci5vbihldmVudE5hbWUsIHN3aXBlci5wYXJhbXMub25bZXZlbnROYW1lXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcyAmJiBzd2lwZXIucGFyYW1zLm9uQW55KSB7XG4gICAgICAgIHN3aXBlci5vbkFueShzd2lwZXIucGFyYW1zLm9uQW55KTtcbiAgICAgIH0gLy8gU2F2ZSBEb20gbGliXG5cblxuICAgICAgc3dpcGVyLiQgPSAkOyAvLyBFeHRlbmQgU3dpcGVyXG5cbiAgICAgIGV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgZW5hYmxlZDogc3dpcGVyLnBhcmFtcy5lbmFibGVkLFxuICAgICAgICBlbDogZWwsXG4gICAgICAgIC8vIENsYXNzZXNcbiAgICAgICAgY2xhc3NOYW1lczogW10sXG4gICAgICAgIC8vIFNsaWRlc1xuICAgICAgICBzbGlkZXM6ICQoKSxcbiAgICAgICAgc2xpZGVzR3JpZDogW10sXG4gICAgICAgIHNuYXBHcmlkOiBbXSxcbiAgICAgICAgc2xpZGVzU2l6ZXNHcmlkOiBbXSxcbiAgICAgICAgLy8gaXNEaXJlY3Rpb25cbiAgICAgICAgaXNIb3Jpem9udGFsOiBmdW5jdGlvbiBpc0hvcml6b250YWwoKSB7XG4gICAgICAgICAgcmV0dXJuIHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gICAgICAgIH0sXG4gICAgICAgIGlzVmVydGljYWw6IGZ1bmN0aW9uIGlzVmVydGljYWwoKSB7XG4gICAgICAgICAgcmV0dXJuIHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uID09PSAndmVydGljYWwnO1xuICAgICAgICB9LFxuICAgICAgICAvLyBJbmRleGVzXG4gICAgICAgIGFjdGl2ZUluZGV4OiAwLFxuICAgICAgICByZWFsSW5kZXg6IDAsXG4gICAgICAgIC8vXG4gICAgICAgIGlzQmVnaW5uaW5nOiB0cnVlLFxuICAgICAgICBpc0VuZDogZmFsc2UsXG4gICAgICAgIC8vIFByb3BzXG4gICAgICAgIHRyYW5zbGF0ZTogMCxcbiAgICAgICAgcHJldmlvdXNUcmFuc2xhdGU6IDAsXG4gICAgICAgIHByb2dyZXNzOiAwLFxuICAgICAgICB2ZWxvY2l0eTogMCxcbiAgICAgICAgYW5pbWF0aW5nOiBmYWxzZSxcbiAgICAgICAgLy8gTG9ja3NcbiAgICAgICAgYWxsb3dTbGlkZU5leHQ6IHN3aXBlci5wYXJhbXMuYWxsb3dTbGlkZU5leHQsXG4gICAgICAgIGFsbG93U2xpZGVQcmV2OiBzd2lwZXIucGFyYW1zLmFsbG93U2xpZGVQcmV2LFxuICAgICAgICAvLyBUb3VjaCBFdmVudHNcbiAgICAgICAgdG91Y2hFdmVudHM6IGZ1bmN0aW9uIHRvdWNoRXZlbnRzKCkge1xuICAgICAgICAgIHZhciB0b3VjaCA9IFsndG91Y2hzdGFydCcsICd0b3VjaG1vdmUnLCAndG91Y2hlbmQnLCAndG91Y2hjYW5jZWwnXTtcbiAgICAgICAgICB2Y
24510XIgZGVza3RvcCA9IFsnbW91c2Vkb3duJywgJ21vdXNlbW92ZScsICdtb3VzZXVwJ107XG5cbiAgICAgICAgICBpZiAoc3dpcGVyLnN1cHBvcnQucG9pbnRlckV2ZW50cykge1xuICAgICAgICAgICAgZGVza3RvcCA9IFsncG9pbnRlcmRvd24nLCAncG9pbnRlcm1vdmUnLCAncG9pbnRlcnVwJ107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3dpcGVyLnRvdWNoRXZlbnRzVG91Y2ggPSB7XG4gICAgICAgICAgICBzdGFydDogdG91Y2hbMF0sXG4gICAgICAgICAgICBtb3ZlOiB0b3VjaFsxXSxcbiAgICAgICAgICAgIGVuZDogdG91Y2hbMl0sXG4gICAgICAgICAgICBjYW5jZWw6IHRvdWNoWzNdXG4gICAgICAgICAgfTtcbiAgICAgICAgICBzd2lwZXIudG91Y2hFdmVudHNEZXNrdG9wID0ge1xuICAgICAgICAgICAgc3RhcnQ6IGRlc2t0b3BbMF0sXG4gICAgICAgICAgICBtb3ZlOiBkZXNrdG9wWzFdLFxuICAgICAgICAgICAgZW5kOiBkZXNrdG9wWzJdXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gc3dpcGVyLnN1cHBvcnQudG91Y2ggfHwgIXN3aXBlci5wYXJhbXMuc2ltdWxhdGVUb3VjaCA/IHN3aXBlci50b3VjaEV2ZW50c1RvdWNoIDogc3dpcGVyLnRvdWNoRXZlbnRzRGVza3RvcDtcbiAgICAgICAgfSgpLFxuICAgICAgICB0b3VjaEV2ZW50c0RhdGE6IHtcbiAgICAgICAgICBpc1RvdWNoZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICBpc01vdmVkOiB1bmRlZmluZWQsXG4gICAgICAgICAgYWxsb3dUb3VjaENhbGxiYWNrczogdW5kZWZpbmVkLFxuICAgICAgICAgIHRvdWNoU3RhcnRUaW1lOiB1bmRlZmluZWQsXG4gICAgICAgICAgaXNTY3JvbGxpbmc6IHVuZGVmaW5lZCxcbiAgICAgICAgICBjdXJyZW50VHJhbnNsYXRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgc3RhcnRUcmFuc2xhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBhbGxvd1RocmVzaG9sZE1vdmU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAvLyBGb3JtIGVsZW1lbnRzIHRvIG1hdGNoXG4gICAgICAgICAgZm9ybUVsZW1lbnRzOiAnaW5wdXQsIHNlbGVjdCwgb3B0aW9uLCB0ZXh0YXJlYSwgYnV0dG9uLCB2aWRlbywgbGFiZWwnLFxuICAgICAgICAgIC8vIExhc3QgY2xpY2sgdGltZVxuICAgICAgICAgIGxhc3RDbGlja1RpbWU6IG5vdygpLFxuICAgICAgICAgIGNsaWNrVGltZW91dDogdW5kZWZpbmVkLFxuICAgICAgICAgIC8vIFZlbG9jaXRpZXNcbiAgICAgICAgICB2ZWxvY2l0aWVzOiBbXSxcbiAgICAgICAgICBhbGxvd01vbWVudHVtQm91bmNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgaXNUb3VjaEV2ZW50OiB1bmRlZmluZWQsXG4gICAgICAgICAgc3RhcnRNb3Zpbmc6IHVuZGVmaW5lZFxuICAgICAgICB9LFxuICAgICAgICAvLyBDbGlja3NcbiAgICAgICAgYWxsb3dDbGljazogdHJ1ZSxcbiAgICAgICAgLy8gVG91Y2hlc1xuICAgICAgICBhbGxvd1RvdWNoTW92ZTogc3dpcGVyLnBhcmFtcy5hbGxvd1RvdWNoTW92ZSxcbiAgICAgICAgdG91Y2hlczoge1xuICAgICAgICAgIHN0YXJ0WDogMCxcbiAgICAgICAgICBzdGFydFk6IDAsXG4gICAgICAgICAgY3VycmVudFg6IDAsXG4gICAgICAgICAgY3VycmVudFk6IDAsXG4gICAgICAgICAgZGlmZjogMFxuICAgICAgICB9LFxuICAgICAgICAvLyBJbWFnZXNcbiAgICAgICAgaW1hZ2VzVG9Mb2FkOiBbXSxcbiAgICAgICAgaW1hZ2VzTG9hZGVkOiAwXG4gICAgICB9KTsgLy8gSW5zdGFsbCBNb2R1bGVzXG5cbiAgICAgIHN3aXBlci51c2VNb2R1bGVzKCk7XG4gICAgICBzd2lwZXIuZW1pdCgnX3N3aXBlcicpOyAvLyBJbml0XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmluaXQpIHtcbiAgICAgICAgc3dpcGVyLmluaXQoKTtcbiAgICAgIH0gLy8gUmV0dXJuIGFwcCBpbnN0YW5jZVxuXG5cbiAgICAgIHJldHVybiBzd2lwZXI7XG4gICAgfVxuXG4gICAgdmFyIF9wcm90byA9IFN3aXBlci5wcm90b3R5cGU7XG5cbiAgICBfcHJvdG8uZW5hYmxlID0gZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLmVuYWJsZWQpIHJldHVybjtcbiAgICAgIHN3aXBlci5lbmFibGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZ3JhYkN1cnNvcikge1xuICAgICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcigpO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuZW1pdCgnZW5hYmxlJyk7XG4gICAgfTtcblxuICAgIF9wcm90by5kaXNhYmxlID0gZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIuZW5hYmxlZCkgcmV0dXJuO1xuICAgICAgc3dpcGVyLmVuYWJsZWQgPSBmYWxzZTtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZ3JhYkN1cnNvcikge1xuICAgICAgICBzd2lwZXIudW5zZXRHcmFiQ3Vyc29yKCk7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci5lbWl0KCdkaXNhYmxlJyk7XG4gICAgfTtcblxuICAgIF9wcm90by5zZXRQcm9ncmVzcyA9IGZ1bmN0aW9uIHNldFByb2dyZXNzKHByb2dyZXNzLCBzcGVlZCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBwcm9ncmVzcyA9IE1hdGgubWluKE1hdGgubWF4KHByb2dyZXNzLCAwKSwgMSk7XG4gICAgICB2Y
24510XIgbWluID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICAgICAgdmFyIG1heCA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKTtcbiAgICAgIHZhciBjdXJyZW50ID0gKG1heCAtIG1pbikgKiBwcm9ncmVzcyArIG1pbjtcbiAgICAgIHN3aXBlci50cmFuc2xhdGVUbyhjdXJyZW50LCB0eXBlb2Ygc3BlZWQgPT09ICd1bmRlZmluZWQnID8gMCA6IHNwZWVkKTtcbiAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmVtaXRDb250YWluZXJDbGFzc2VzID0gZnVuY3Rpb24gZW1pdENvbnRhaW5lckNsYXNzZXMoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5fZW1pdENsYXNzZXMgfHwgIXN3aXBlci5lbCkgcmV0dXJuO1xuICAgICAgdmFyIGNsYXNzZXMgPSBzd2lwZXIuZWwuY2xhc3NOYW1lLnNwbGl0KCcgJykuZmlsdGVyKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzTmFtZS5pbmRleE9mKCdzd2lwZXItY29udGFpbmVyJykgPT09IDAgfHwgY2xhc3NOYW1lLmluZGV4T2Yoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKSA9PT0gMDtcbiAgICAgIH0pO1xuICAgICAgc3dpcGVyLmVtaXQoJ19jb250YWluZXJDbGFzc2VzJywgY2xhc3Nlcy5qb2luKCcgJykpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uZ2V0U2xpZGVDbGFzc2VzID0gZnVuY3Rpb24gZ2V0U2xpZGVDbGFzc2VzKHNsaWRlRWwpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgcmV0dXJuIHNsaWRlRWwuY2xhc3NOYW1lLnNwbGl0KCcgJykuZmlsdGVyKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzTmFtZS5pbmRleE9mKCdzd2lwZXItc2xpZGUnKSA9PT0gMCB8fCBjbGFzc05hbWUuaW5kZXhPZihzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3MpID09PSAwO1xuICAgICAgfSkuam9pbignICcpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uZW1pdFNsaWRlc0NsYXNzZXMgPSBmdW5jdGlvbiBlbWl0U2xpZGVzQ2xhc3NlcygpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLl9lbWl0Q2xhc3NlcyB8fCAhc3dpcGVyLmVsKSByZXR1cm47XG4gICAgICB2Y
24510XIgdXBkYXRlcyA9IFtdO1xuICAgICAgc3dpcGVyLnNsaWRlcy5lYWNoKGZ1bmN0aW9uIChzbGlkZUVsKSB7XG4gICAgICAgIHZhciBjbGFzc05hbWVzID0gc3dpcGVyLmdldFNsaWRlQ2xhc3NlcyhzbGlkZUVsKTtcbiAgICAgICAgdXBkYXRlcy5wdXNoKHtcbiAgICAgICAgICBzbGlkZUVsOiBzbGlkZUVsLFxuICAgICAgICAgIGNsYXNzTmFtZXM6IGNsYXNzTmFtZXNcbiAgICAgICAgfSk7XG4gICAgICAgIHN3aXBlci5lbWl0KCdfc2xpZGVDbGFzcycsIHNsaWRlRWwsIGNsYXNzTmFtZXMpO1xuICAgICAgfSk7XG4gICAgICBzd2lwZXIuZW1pdCgnX3NsaWRlQ2xhc3NlcycsIHVwZGF0ZXMpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc2xpZGVzUGVyVmlld0R5bmFtaWMgPSBmdW5jdGlvbiBzbGlkZXNQZXJWaWV3RHluYW1pYygpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgICAgc2xpZGVzID0gc3dpcGVyLnNsaWRlcyxcbiAgICAgICAgICBzbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQsXG4gICAgICAgICAgc3dpcGVyU2l6ZSA9IHN3aXBlci5zaXplLFxuICAgICAgICAgIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgICAgdmFyIHNwdiA9IDE7XG5cbiAgICAgIGlmIChwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgdmFyIHNsaWRlU2l6ZSA9IHNsaWRlc1thY3RpdmVJbmRleF0uc3dpcGVyU2xpZGVTaXplO1xuICAgICAgICB2YXIgYnJlYWtMb29wO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBhY3RpdmVJbmRleCArIDE7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICBpZiAoc2xpZGVzW2ldICYmICFicmVha0xvb3ApIHtcbiAgICAgICAgICAgIHNsaWRlU2l6ZSArPSBzbGlkZXNbaV0uc3dpcGVyU2xpZGVTaXplO1xuICAgICAgICAgICAgc3B2ICs9IDE7XG4gICAgICAgICAgICBpZiAoc2xpZGVTaXplID4gc3dpcGVyU2l6ZSkgYnJlYWtMb29wID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBfaSA9IGFjdGl2ZUluZGV4IC0gMTsgX2kgPj0gMDsgX2kgLT0gMSkge1xuICAgICAgICAgIGlmIChzbGlkZXNbX2ldICYmICFicmVha0xvb3ApIHtcbiAgICAgICAgICAgIHNsaWRlU2l6ZSArPSBzbGlkZXNbX2ldLnN3aXBlclNsaWRlU2l6ZTtcbiAgICAgICAgICAgIHNwdiArPSAxO1xuICAgICAgICAgICAgaWYgKHNsaWRlU2l6ZSA+IHN3aXBlclNpemUpIGJyZWFrTG9vcCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBfaTIgPSBhY3RpdmVJbmRleCArIDE7IF9pMiA8IHNsaWRlcy5sZW5ndGg7IF9pMiArPSAxKSB7XG4gICAgICAgICAgaWYgKHNsaWRlc0dyaWRbX2kyXSAtIHNsaWRlc0dyaWRbYWN0aXZlSW5kZXhdIDwgc3dpcGVyU2l6ZSkge1xuICAgICAgICAgICAgc3B2ICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzcHY7XG4gICAgfTtcblxuICAgIF9wcm90by51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgIHZhciBzbmFwR3JpZCA9IHN3aXBlci5zbmFwR3JpZCxcbiAgICAgICAgICBwYXJhbXMgPSBzd2lwZXIucGFyYW1zOyAvLyBCcmVha3BvaW50c1xuXG4gICAgICBpZiAocGFyYW1zLmJyZWFrcG9pbnRzKSB7XG4gICAgICAgIHN3aXBlci5zZXRCcmVha3BvaW50KCk7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci51cGRhdGVTaXplKCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzKCk7XG4gICAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG5cbiAgICAgIGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgICAgdmFyIHRyYW5zbGF0ZVZhbHVlID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IHN3aXBlci50cmFuc2xhdGUgKiAtMSA6IHN3aXBlci50cmFuc2xhdGU7XG4gICAgICAgIHZhciBuZXdUcmFuc2xhdGUgPSBNYXRoLm1pbihNYXRoLm1heCh0cmFuc2xhdGVWYWx1ZSwgc3dpcGVyLm1heFRyYW5zbGF0ZSgpKSwgc3dpcGVyLm1pblRyYW5zbGF0ZSgpKTtcbiAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShuZXdUcmFuc2xhdGUpO1xuICAgICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHRyYW5zbGF0ZWQ7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmZyZWVNb2RlKSB7XG4gICAgICAgIHNldFRyYW5zbGF0ZSgpO1xuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9IZWlnaHQpIHtcbiAgICAgICAgICBzd2lwZXIudXBkYXRlQXV0b0hlaWdodCgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nIHx8IHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyA+IDEpICYmIHN3aXBlci5pc0VuZCAmJiAhc3dpcGVyLnBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgICAgIHRyYW5zbGF0ZWQgPSBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDEsIDAsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cmFuc2xhdGVkID0gc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4LCAwLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRyYW5zbGF0ZWQpIHtcbiAgICAgICAgICBzZXRUcmFuc2xhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc25hcEdyaWQgIT09I
24510HN3aXBlci5zbmFwR3JpZCkge1xuICAgICAgICBzd2lwZXIuY2hlY2tPdmVyZmxvdygpO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuZW1pdCgndXBkYXRlJyk7XG4gICAgfTtcblxuICAgIF9wcm90by5jaGFuZ2VEaXJlY3Rpb24gPSBmdW5jdGlvbiBjaGFuZ2VEaXJlY3Rpb24obmV3RGlyZWN0aW9uLCBuZWVkVXBkYXRlKSB7XG4gICAgICBpZiAobmVlZFVwZGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIG5lZWRVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBjdXJyZW50RGlyZWN0aW9uID0gc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb247XG5cbiAgICAgIGlmICghbmV3RGlyZWN0aW9uKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICBuZXdEaXJlY3Rpb24gPSBjdXJyZW50RGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3RGlyZWN0aW9uID09PSBjdXJyZW50RGlyZWN0aW9uIHx8IG5ld0RpcmVjdGlvbiAhPT0gJ2hvcml6b250YWwnICYmIG5ld0RpcmVjdGlvbiAhPT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICByZXR1cm4gc3dpcGVyO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuJGVsLnJlbW92ZUNsYXNzKFwiXCIgKyBzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MgKyBjdXJyZW50RGlyZWN0aW9uKS5hZGRDbGFzcyhcIlwiICsgc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzICsgbmV3RGlyZWN0aW9uKTtcbiAgICAgIHN3aXBlci5lbWl0Q29udGFpbmVyQ2xhc3NlcygpO1xuICAgICAgc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb24gPSBuZXdEaXJlY3Rpb247XG4gICAgICBzd2lwZXIuc2xpZGVzLmVhY2goZnVuY3Rpb24gKHNsaWRlRWwpIHtcbiAgICAgICAgaWYgKG5ld0RpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICAgIHNsaWRlRWwuc3R5bGUud2lkdGggPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzbGlkZUVsLnN0eWxlLmhlaWdodCA9ICcnO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHN3aXBlci5lbWl0KCdjaGFuZ2VEaXJlY3Rpb24nKTtcbiAgICAgIGlmIChuZWVkVXBkYXRlKSBzd2lwZXIudXBkYXRlKCk7XG4gICAgICByZXR1cm4gc3dpcGVyO1xuICAgIH07XG5cbiAgICBfcHJvdG8ubW91bnQgPSBmdW5jdGlvbiBtb3VudChlbCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLm1vdW50ZWQpIHJldHVybiB0cnVlOyAvLyBGaW5kIGVsXG5cbiAgICAgIHZhciAkZWwgPSAkKGVsIHx8IHN3aXBlci5wYXJhbXMuZWwpO1xuICAgICAgZWwgPSAkZWxbMF07XG5cbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBlbC5zd2lwZXIgPSBzd2lwZXI7XG5cbiAgICAgIHZhciBnZXRXcmFwcGVyID0gZnVuY3Rpb24gZ2V0V3JhcHBlcigpIHtcbiAgICAgICAgaWYgKGVsICYmIGVsLnNoYWRvd1Jvb3QgJiYgZWwuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKSB7XG4gICAgICAgICAgdmFyIHJlcyA9ICQoZWwuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiLlwiICsgc3dpcGVyLnBhcmFtcy53cmFwcGVyQ2xhc3MpKTsgLy8gQ2hpbGRyZW4gbmVlZHMgdG8gcmV0dXJuIHNsb3QgaXRlbXNcblxuICAgICAgICAgIHJlcy5jaGlsZHJlbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gJGVsLmNoaWxkcmVuKG9wdGlvbnMpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICRlbC5jaGlsZHJlbihcIi5cIiArIHN3aXBlci5wYXJhbXMud3JhcHBlckNsYXNzKTtcbiAgICAgIH07IC8vIEZpbmQgV3JhcHBlclxuXG5cbiAgICAgIHZhciAkd3JhcHBlckVsID0gZ2V0V3JhcHBlcigpO1xuXG4gICAgICBpZiAoJHdyYXBwZXJFbC5sZW5ndGggPT09IDAgJiYgc3dpcGVyLnBhcmFtcy5jcmVhdGVFbGVtZW50cykge1xuICAgICAgICB2Y
24510XIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAkd3JhcHBlckVsID0gJCh3cmFwcGVyKTtcbiAgICAgICAgd3JhcHBlci5jbGFzc05hbWUgPSBzd2lwZXIucGFyYW1zLndyYXBwZXJDbGFzcztcbiAgICAgICAgJGVsLmFwcGVuZCh3cmFwcGVyKTtcbiAgICAgICAgJGVsLmNoaWxkcmVuKFwiLlwiICsgc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzKS5lYWNoKGZ1bmN0aW9uIChzbGlkZUVsKSB7XG4gICAgICAgICAgJHdyYXBwZXJFbC5hcHBlbmQoc2xpZGVFbCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBleHRlbmQoc3dpcGVyLCB7XG4gICAgICAgICRlbDogJGVsLFxuICAgICAgICBlbDogZWwsXG4gICAgICAgICR3cmFwcGVyRWw6ICR3cmFwcGVyRWwsXG4gICAgICAgIHdyYXBwZXJFbDogJHdyYXBwZXJFbFswXSxcbiAgICAgICAgbW91bnRlZDogdHJ1ZSxcbiAgICAgICAgLy8gUlRMXG4gICAgICAgIHJ0bDogZWwuZGlyLnRvTG93ZXJDYXNlKCkgPT09ICdydGwnIHx8ICRlbC5jc3MoJ2RpcmVjdGlvbicpID09PSAncnRsJyxcbiAgICAgICAgcnRsVHJhbnNsYXRlOiBzd2lwZXIucGFyYW1zLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnICYmIChlbC5kaXIudG9Mb3dlckNhc2UoKSA9PT0gJ3J0bCcgfHwgJGVsLmNzcygnZGlyZWN0aW9uJykgPT09ICdydGwnKSxcbiAgICAgICAgd3JvbmdSVEw6ICR3cmFwcGVyRWwuY3NzKCdkaXNwbGF5JykgPT09ICctd2Via2l0LWJveCdcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIF9wcm90by5pbml0ID0gZnVuY3Rpb24gaW5pdChlbCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLmluaXRpYWxpemVkKSByZXR1cm4gc3dpcGVyO1xuICAgICAgdmFyIG1vdW50ZWQgPSBzd2lwZXIubW91bnQoZWwpO1xuICAgICAgaWYgKG1vdW50ZWQgPT09IGZhbHNlKSByZXR1cm4gc3dpcGVyO1xuICAgICAgc3dpcGVyLmVtaXQoJ2JlZm9yZUluaXQnKTsgLy8gU2V0IGJyZWFrcG9pbnRcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuYnJlYWtwb2ludHMpIHtcbiAgICAgICAgc3dpcGVyLnNldEJyZWFrcG9pbnQoKTtcbiAgICAgIH0gLy8gQWRkIENsYXNzZXNcblxuXG4gICAgICBzd2lwZXIuYWRkQ2xhc3NlcygpOyAvLyBDcmVhdGUgbG9vcFxuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gICAgICB9IC8vIFVwZGF0ZSBzaXplXG5cblxuICAgICAgc3dpcGVyLnVwZGF0ZVNpemUoKTsgLy8gVXBkYXRlIHNsaWRlc1xuXG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzKCk7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cpIHtcbiAgICAgICAgc3dpcGVyLmNoZWNrT3ZlcmZsb3coKTtcbiAgICAgIH0gLy8gU2V0IEdyYWIgQ3Vyc29yXG5cblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZ3JhYkN1cnNvciAmJiBzd2lwZXIuZW5hYmxlZCkge1xuICAgICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcigpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5wcmVsb2FkSW1hZ2VzKSB7XG4gICAgICAgIHN3aXBlci5wcmVsb2FkSW1hZ2VzKCk7XG4gICAgICB9IC8vIFNsaWRlIFRvIEluaXRpYWwgU2xpZGVcblxuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5wYXJhbXMuaW5pdGlhbFNsaWRlICsgc3dpcGVyLmxvb3BlZFNsaWRlcywgMCwgc3dpcGVyLnBhcmFtcy5ydW5DYWxsYmFja3NPbkluaXQsIGZhbHNlLCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5wYXJhbXMuaW5pdGlhbFNsaWRlLCAwLCBzd2lwZXIucGFyYW1zLnJ1bkNhbGxiYWNrc09uSW5pdCwgZmFsc2UsIHRydWUpO1xuICAgICAgfSAvLyBBdHRhY2ggZXZlbnRzXG5cblxuICAgICAgc3dpcGVyLmF0dGFjaEV2ZW50cygpOyAvLyBJbml0IEZsYWdcblxuICAgICAgc3dpcGVyLmluaXRpYWxpemVkID0gdHJ1ZTsgLy8gRW1pdFxuXG4gICAgICBzd2lwZXIuZW1pdCgnaW5pdCcpO1xuICAgICAgc3dpcGVyLmVtaXQoJ2FmdGVySW5pdCcpO1xuICAgICAgcmV0dXJuIHN3aXBlcjtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KGRlbGV0ZUluc3RhbmNlLCBjbGVhblN0eWxlcykge1xuICAgICAgaWYgKGRlbGV0ZUluc3RhbmNlID09PSB2b2lkIDApIHtcbiAgICAgICAgZGVsZXRlSW5zdGFuY2UgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2xlYW5TdHlsZXMgPT09IHZvaWQgMCkge1xuICAgICAgICBjbGVhblN0eWxlcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgICAgJGVsID0gc3dpcGVyLiRlbCxcbiAgICAgICAgICAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWwsXG4gICAgICAgICAgc2xpZGVzID0gc3dpcGVyLnNsaWRlcztcblxuICAgICAgaWYgKHR5cGVvZiBzd2lwZXIucGFyYW1zID09PSAndW5kZWZpbmVkJyB8fCBzd2lwZXIuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuZW1pdCgnYmVmb3JlRGVzdHJveScpOyAvLyBJbml0IEZsYWdcblxuICAgICAgc3dpcGVyLmluaXRpYWxpemVkID0gZmFsc2U7IC8vIERldGFjaCBldmVudHNcblxuICAgICAgc3dpcGVyLmRldGFjaEV2ZW50cygpOyAvLyBEZXN0cm95IGxvb3BcblxuICAgICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICAgICAgfSAvLyBDbGVhbnVwIHN0eWxlc1xuXG5cbiAgICAgIGlmIChjbGVhblN0eWxlcykge1xuICAgICAgICBzd2lwZXIucmVtb3ZlQ2xhc3NlcygpO1xuICAgICAgICAkZWwucmVtb3ZlQXR0cignc3R5bGUnKTtcbiAgICAgICAgJHdyYXBwZXJFbC5yZW1vdmVBdHRyKCdzdHlsZScpO1xuXG4gICAgICAgIGlmIChzbGlkZXMgJiYgc2xpZGVzLmxlbmd0aCkge1xuICAgICAgICAgI
24510HNsaWRlcy5yZW1vdmVDbGFzcyhbcGFyYW1zLnNsaWRlVmlzaWJsZUNsYXNzLCBwYXJhbXMuc2xpZGVBY3RpdmVDbGFzcywgcGFyYW1zLnNsaWRlTmV4dENsYXNzLCBwYXJhbXMuc2xpZGVQcmV2Q2xhc3NdLmpvaW4oJyAnKSkucmVtb3ZlQXR0cignc3R5bGUnKS5yZW1vdmVBdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci5lbWl0KCdkZXN0cm95Jyk7IC8vIERldGFjaCBlbWl0dGVyIGV2ZW50c1xuXG4gICAgICBPYmplY3Qua2V5cyhzd2lwZXIuZXZlbnRzTGlzdGVuZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudE5hbWUpIHtcbiAgICAgICAgc3dpcGVyLm9mZihldmVudE5hbWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChkZWxldGVJbnN0YW5jZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgc3dpcGVyLiRlbFswXS5zd2lwZXIgPSBudWxsO1xuICAgICAgICBkZWxldGVQcm9wcyhzd2lwZXIpO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBTd2lwZXIuZXh0ZW5kRGVmYXVsdHMgPSBmdW5jdGlvbiBleHRlbmREZWZhdWx0cyhuZXdEZWZhdWx0cykge1xuICAgICAgZXh0ZW5kKGV4dGVuZGVkRGVmYXVsdHMsIG5ld0RlZmF1bHRzKTtcbiAgICB9O1xuXG4gICAgU3dpcGVyLmluc3RhbGxNb2R1bGUgPSBmdW5jdGlvbiBpbnN0YWxsTW9kdWxlKG1vZHVsZSkge1xuICAgICAgaWYgKCFTd2lwZXIucHJvdG90eXBlLm1vZHVsZXMpIFN3aXBlci5wcm90b3R5cGUubW9kdWxlcyA9IHt9O1xuICAgICAgdmFyIG5hbWUgPSBtb2R1bGUubmFtZSB8fCBPYmplY3Qua2V5cyhTd2lwZXIucHJvdG90eXBlLm1vZHVsZXMpLmxlbmd0aCArIFwiX1wiICsgbm93KCk7XG4gICAgICBTd2lwZXIucHJvdG90eXBlLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGU7XG4gICAgfTtcblxuICAgIFN3aXBlci51c2UgPSBmdW5jdGlvbiB1c2UobW9kdWxlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShtb2R1bGUpKSB7XG4gICAgICAgIG1vZHVsZS5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgcmV0dXJuIFN3aXBlci5pbnN0YWxsTW9kdWxlKG0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFN3aXBlcjtcbiAgICAgIH1cblxuICAgICAgU3dpcGVyLmluc3RhbGxNb2R1bGUobW9kdWxlKTtcbiAgICAgIHJldHVybiBTd2lwZXI7XG4gICAgfTtcblxuICAgIF9jcmVhdGVDbGFzcyhTd2lwZXIsIG51bGwsIFt7XG4gICAgICBrZXk6IFwiZXh0ZW5kZWREZWZhdWx0c1wiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmRlZERlZmF1bHRzO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJkZWZhdWx0c1wiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gU3dpcGVyO1xuICB9KCk7XG5cbiAgT2JqZWN0LmtleXMocHJvdG90eXBlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvdG90eXBlR3JvdXApIHtcbiAgICBPYmplY3Qua2V5cyhwcm90b3R5cGVzW3Byb3RvdHlwZUdyb3VwXSkuZm9yRWFjaChmdW5jdGlvbiAocHJvdG9NZXRob2QpIHtcbiAgICAgIFN3aXBlci5wcm90b3R5cGVbcHJvdG9NZXRob2RdID0gcHJvdG90eXBlc1twcm90b3R5cGVHcm91cF1bcHJvdG9NZXRob2RdO1xuICAgIH0pO1xuICB9KTtcbiAgU3dpcGVyLnVzZShbUmVzaXplLCBPYnNlcnZlciQxXSk7XG5cbiAgdmFyIFZpcnR1YWwgPSB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoZm9yY2UpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIF9zd2lwZXIkcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICAgICAgICBzbGlkZXNQZXJWaWV3ID0gX3N3aXBlciRwYXJhbXMuc2xpZGVzUGVyVmlldyxcbiAgICAgICAgICBzbGlkZXNQZXJHcm91cCA9IF9zd2lwZXIkcGFyYW1zLnNsaWRlc1Blckdyb3VwLFxuICAgICAgICAgIGNlbnRlcmVkU2xpZGVzID0gX3N3aXBlciRwYXJhbXMuY2VudGVyZWRTbGlkZXM7XG4gICAgICB2Y
24510XIgX3N3aXBlciRwYXJhbXMkdmlydHVhID0gc3dpcGVyLnBhcmFtcy52aXJ0dWFsLFxuICAgICAgICAgIGFkZFNsaWRlc0JlZm9yZSA9IF9zd2lwZXIkcGFyYW1zJHZpcnR1YS5hZGRTbGlkZXNCZWZvcmUsXG4gICAgICAgICAgYWRkU2xpZGVzQWZ0ZXIgPSBfc3dpcGVyJHBhcmFtcyR2aXJ0dWEuYWRkU2xpZGVzQWZ0ZXI7XG4gICAgICB2YXIgX3N3aXBlciR2aXJ0dWFsID0gc3dpcGVyLnZpcnR1YWwsXG4gICAgICAgICAgcHJldmlvdXNGcm9tID0gX3N3aXBlciR2aXJ0dWFsLmZyb20sXG4gICAgICAgICAgcHJldmlvdXNUbyA9IF9zd2lwZXIkdmlydHVhbC50byxcbiAgICAgICAgICBzbGlkZXMgPSBfc3dpcGVyJHZpcnR1YWwuc2xpZGVzLFxuICAgICAgICAgIHByZXZpb3VzU2xpZGVzR3JpZCA9IF9zd2lwZXIkdmlydHVhbC5zbGlkZXNHcmlkLFxuICAgICAgICAgIHJlbmRlclNsaWRlID0gX3N3aXBlciR2aXJ0dWFsLnJlbmRlclNsaWRlLFxuICAgICAgICAgIHByZXZpb3VzT2Zmc2V0ID0gX3N3aXBlciR2aXJ0dWFsLm9mZnNldDtcbiAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4IHx8IDA7XG4gICAgICB2YXIgb2Zmc2V0UHJvcDtcbiAgICAgIGlmIChzd2lwZXIucnRsVHJhbnNsYXRlKSBvZmZzZXRQcm9wID0gJ3JpZ2h0JztlbHNlIG9mZnNldFByb3AgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnbGVmdCcgOiAndG9wJztcbiAgICAgIHZhciBzbGlkZXNBZnRlcjtcbiAgICAgIHZhciBzbGlkZXNCZWZvcmU7XG5cbiAgICAgIGlmIChjZW50ZXJlZFNsaWRlcykge1xuICAgICAgICBzbGlkZXNBZnRlciA9IE1hdGguZmxvb3Ioc2xpZGVzUGVyVmlldyAvIDIpICsgc2xpZGVzUGVyR3JvdXAgKyBhZGRTbGlkZXNBZnRlcjtcbiAgICAgICAgc2xpZGVzQmVmb3JlID0gTWF0aC5mbG9vcihzbGlkZXNQZXJWaWV3IC8gMikgKyBzbGlkZXNQZXJHcm91cCArIGFkZFNsaWRlc0JlZm9yZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsaWRlc0FmdGVyID0gc2xpZGVzUGVyVmlldyArIChzbGlkZXNQZXJHcm91cCAtIDEpICsgYWRkU2xpZGVzQWZ0ZXI7XG4gICAgICAgIHNsaWRlc0JlZm9yZSA9IHNsaWRlc1Blckdyb3VwICsgYWRkU2xpZGVzQmVmb3JlO1xuICAgICAgfVxuXG4gICAgICB2Y
24510XIgZnJvbSA9IE1hdGgubWF4KChhY3RpdmVJbmRleCB8fCAwKSAtIHNsaWRlc0JlZm9yZSwgMCk7XG4gICAgICB2YXIgdG8gPSBNYXRoLm1pbigoYWN0aXZlSW5kZXggfHwgMCkgKyBzbGlkZXNBZnRlciwgc2xpZGVzLmxlbmd0aCAtIDEpO1xuICAgICAgdmFyIG9mZnNldCA9IChzd2lwZXIuc2xpZGVzR3JpZFtmcm9tXSB8fCAwKSAtIChzd2lwZXIuc2xpZGVzR3JpZFswXSB8fCAwKTtcbiAgICAgIGV4dGVuZChzd2lwZXIudmlydHVhbCwge1xuICAgICAgICBmcm9tOiBmcm9tLFxuICAgICAgICB0bzogdG8sXG4gICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICBzbGlkZXNHcmlkOiBzd2lwZXIuc2xpZGVzR3JpZFxuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIG9uUmVuZGVyZWQoKSB7XG4gICAgICAgIHN3aXBlci51cGRhdGVTbGlkZXMoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG5cbiAgICAgICAgaWYgKHN3aXBlci5sYXp5ICYmIHN3aXBlci5wYXJhbXMubGF6eS5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmV2aW91c0Zyb20gPT09IGZyb20gJiYgcHJldmlvdXNUbyA9PT0gdG8gJiYgIWZvcmNlKSB7XG4gICAgICAgIGlmIChzd2lwZXIuc2xpZGVzR3JpZCAhPT0gcHJldmlvdXNTbGlkZXNHcmlkICYmIG9mZnNldCAhPT0gcHJldmlvdXNPZmZzZXQpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVzLmNzcyhvZmZzZXRQcm9wLCBvZmZzZXQgKyBcInB4XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbC5yZW5kZXJFeHRlcm5hbCkge1xuICAgICAgICBzd2lwZXIucGFyYW1zLnZpcnR1YWwucmVuZGVyRXh0ZXJuYWwuY2FsbChzd2lwZXIsIHtcbiAgICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgICBmcm9tOiBmcm9tLFxuICAgICAgICAgIHRvOiB0byxcbiAgICAgICAgICBzbGlkZXM6IGZ1bmN0aW9uIGdldFNsaWRlcygpIHtcbiAgICAgICAgICAgIHZhciBzbGlkZXNUb1JlbmRlciA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gZnJvbTsgaSA8PSB0bzsgaSArPSAxKSB7XG4gICAgICAgICAgICAgIHNsaWRlc1RvUmVuZGVyLnB1c2goc2xpZGVzW2ldKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHNsaWRlc1RvUmVuZGVyO1xuICAgICAgICAgIH0oKVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy52aXJ0dWFsLnJlbmRlckV4dGVybmFsVXBkYXRlKSB7XG4gICAgICAgICAgb25SZW5kZXJlZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2Y
24510XIgcHJlcGVuZEluZGV4ZXMgPSBbXTtcbiAgICAgIHZhciBhcHBlbmRJbmRleGVzID0gW107XG5cbiAgICAgIGlmIChmb3JjZSkge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5maW5kKFwiLlwiICsgc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzKS5yZW1vdmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBwcmV2aW91c0Zyb207IGkgPD0gcHJldmlvdXNUbzsgaSArPSAxKSB7XG4gICAgICAgICAgaWYgKGkgPCBmcm9tIHx8IGkgPiB0bykge1xuICAgICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwuZmluZChcIi5cIiArIHN3aXBlci5wYXJhbXMuc2xpZGVDbGFzcyArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIGkgKyBcIlxcXCJdXCIpLnJlbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgc2xpZGVzLmxlbmd0aDsgX2kgKz0gMSkge1xuICAgICAgICBpZiAoX2kgPj0gZnJvbSAmJiBfaSA8PSB0bykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcHJldmlvdXNUbyA9PT0gJ3VuZGVmaW5lZCcgfHwgZm9yY2UpIHtcbiAgICAgICAgICAgIGFwcGVuZEluZGV4ZXMucHVzaChfaSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChfaSA+IHByZXZpb3VzVG8pIGFwcGVuZEluZGV4ZXMucHVzaChfaSk7XG4gICAgICAgICAgICBpZiAoX2kgPCBwcmV2aW91c0Zyb20pIHByZXBlbmRJbmRleGVzLnB1c2goX2kpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhcHBlbmRJbmRleGVzLmZvckVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLmFwcGVuZChyZW5kZXJTbGlkZShzbGlkZXNbaW5kZXhdLCBpbmRleCkpO1xuICAgICAgfSk7XG4gICAgICBwcmVwZW5kSW5kZXhlcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBiIC0gYTtcbiAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLnByZXBlbmQocmVuZGVyU2xpZGUoc2xpZGVzW2luZGV4XSwgaW5kZXgpKTtcbiAgICAgIH0pO1xuICAgICAgc3dpcGVyLiR3cmFwcGVyRWwuY2hpbGRyZW4oJy5zd2lwZXItc2xpZGUnKS5jc3Mob2Zmc2V0UHJvcCwgb2Zmc2V0ICsgXCJweFwiKTtcbiAgICAgIG9uUmVuZGVyZWQoKTtcbiAgICB9LFxuICAgIHJlbmRlclNsaWRlOiBmdW5jdGlvbiByZW5kZXJTbGlkZShzbGlkZSwgaW5kZXgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMudmlydHVhbDtcblxuICAgICAgaWYgKHBhcmFtcy5jYWNoZSAmJiBzd2lwZXIudmlydHVhbC5jYWNoZVtpbmRleF0pIHtcbiAgICAgICAgcmV0dXJuIHN3aXBlci52aXJ0dWFsLmNhY2hlW2luZGV4XTtcbiAgICAgIH1cblxuICAgICAgdmFyICRzbGlkZUVsID0gcGFyYW1zLnJlbmRlclNsaWRlID8gJChwYXJhbXMucmVuZGVyU2xpZGUuY2FsbChzd2lwZXIsIHNsaWRlLCBpbmRleCkpIDogJChcIjxkaXYgY2xhc3M9XFxcIlwiICsgc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzICsgXCJcXFwiIGRhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIGluZGV4ICsgXCJcXFwiPlwiICsgc2xpZGUgKyBcIjwvZGl2PlwiKTtcbiAgICAgIGlmICghJHNsaWRlRWwuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSkgJHNsaWRlRWwuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnLCBpbmRleCk7XG4gICAgICBpZiAocGFyYW1zLmNhY2hlKSBzd2lwZXIudmlydHVhbC5jYWNoZVtpbmRleF0gPSAkc2xpZGVFbDtcbiAgICAgIHJldHVybiAkc2xpZGVFbDtcbiAgICB9LFxuICAgIGFwcGVuZFNsaWRlOiBmdW5jdGlvbiBhcHBlbmRTbGlkZShzbGlkZXMpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gICAgICBpZiAodHlwZW9mIHNsaWRlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgaWYgKHNsaWRlc1tpXSkgc3dpcGVyLnZpcnR1YWwuc2xpZGVzLnB1c2goc2xpZGVzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnZpcnR1YWwuc2xpZGVzLnB1c2goc2xpZGVzKTtcbiAgICAgIH1cblxuICAgICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKHRydWUpO1xuICAgIH0sXG4gICAgcHJlcGVuZFNsaWRlOiBmdW5jdGlvbiBwcmVwZW5kU2xpZGUoc2xpZGVzKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICAgIHZhciBuZXdBY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4ICsgMTtcbiAgICAgIHZhciBudW1iZXJPZk5ld1NsaWRlcyA9IDE7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNsaWRlcykpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICBpZiAoc2xpZGVzW2ldKSBzd2lwZXIudmlydHVhbC5zbGlkZXMudW5zaGlmdChzbGlkZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleCArIHNsaWRlcy5sZW5ndGg7XG4gICAgICAgIG51bWJlck9mTmV3U2xpZGVzID0gc2xpZGVzLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci52aXJ0dWFsLnNsaWRlcy51bnNoaWZ0KHNsaWRlcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWwuY2FjaGUpIHtcbiAgICAgICAgdmFyIGNhY2hlID0gc3dpcGVyLnZpcnR1YWwuY2FjaGU7XG4gICAgICAgIHZhciBuZXdDYWNoZSA9IHt9O1xuICAgICAgICBPYmplY3Qua2V5cyhjYWNoZSkuZm9yRWFjaChmdW5jdGlvbiAoY2FjaGVkSW5kZXgpIHtcbiAgICAgICAgICB2YXIgJGNhY2hlZEVsID0gY2FjaGVbY2FjaGVkSW5kZXhdO1xuICAgICAgICAgIHZhciBjYWNoZWRFbEluZGV4ID0gJGNhY2hlZEVsLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyk7XG5cbiAgICAgICAgICBpZiAoY2FjaGVkRWxJbmRleCkge1xuICAgICAgICAgICAgJGNhY2hlZEVsLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JywgcGFyc2VJbnQoY2FjaGVkRWxJbmRleCwgMTApICsgMSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3Q2FjaGVbcGFyc2VJbnQoY2FjaGVkSW5kZXgsIDEwKSArIG51bWJlck9mTmV3U2xpZGVzXSA9ICRjYWNoZWRFbDtcbiAgICAgICAgfSk7XG4gICAgICAgIHN3aXBlci52aXJ0dWFsLmNhY2hlID0gbmV3Q2FjaGU7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci52aXJ0dWFsLnVwZGF0ZSh0cnVlKTtcbiAgICAgIHN3aXBlci5zbGlkZVRvKG5ld0FjdGl2ZUluZGV4LCAwKTtcbiAgICB9LFxuICAgIHJlbW92ZVNsaWRlOiBmdW5jdGlvbiByZW1vdmVTbGlkZShzbGlkZXNJbmRleGVzKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2Ygc2xpZGVzSW5kZXhlcyA9PT0gJ3VuZGVmaW5lZCcgfHwgc2xpZGVzSW5kZXhlcyA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzbGlkZXNJbmRleGVzKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gc2xpZGVzSW5kZXhlcy5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgICAgICAgIHN3aXBlci52aXJ0dWFsLnNsaWRlcy5zcGxpY2Uoc2xpZGVzSW5kZXhlc1tpXSwgMSk7XG5cbiAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmNhY2hlKSB7XG4gICAgICAgICAgICBkZWxldGUgc3dpcGVyLnZpcnR1YWwuY2FjaGVbc2xpZGVzSW5kZXhlc1tpXV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNsaWRlc0luZGV4ZXNbaV0gPCBhY3RpdmVJbmRleCkgYWN0aXZlSW5kZXggLT0gMTtcbiAgICAgICAgICBhY3RpdmVJbmRleCA9IE1hdGgubWF4KGFjdGl2ZUluZGV4LCAwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnZpcnR1YWwuc2xpZGVzLnNwbGljZShzbGlkZXNJbmRleGVzLCAxKTtcblxuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmNhY2hlKSB7XG4gICAgICAgICAgZGVsZXRlIHN3aXBlci52aXJ0dWFsLmNhY2hlW3NsaWRlc0luZGV4ZXNdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNsaWRlc0luZGV4ZXMgPCBhY3RpdmVJbmRleCkgYWN0aXZlSW5kZXggLT0gMTtcbiAgICAgICAgYWN0aXZlSW5kZXggPSBNYXRoLm1heChhY3RpdmVJbmRleCwgMCk7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci52aXJ0dWFsLnVwZGF0ZSh0cnVlKTtcbiAgICAgIHN3aXBlci5zbGlkZVRvKGFjdGl2ZUluZGV4LCAwKTtcbiAgICB9LFxuICAgIHJlbW92ZUFsbFNsaWRlczogZnVuY3Rpb24gcmVtb3ZlQWxsU2xpZGVzKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIudmlydHVhbC5zbGlkZXMgPSBbXTtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbC5jYWNoZSkge1xuICAgICAgICBzd2lwZXIudmlydHVhbC5jYWNoZSA9IHt9O1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIudmlydHVhbC51cGRhdGUodHJ1ZSk7XG4gICAgICBzd2lwZXIuc2xpZGVUbygwLCAwKTtcbiAgICB9XG4gIH07XG4gIHZhciBWaXJ0dWFsJDEgPSB7XG4gICAgbmFtZTogJ3ZpcnR1YWwnLFxuICAgIHBhcmFtczoge1xuICAgICAgdmlydHVhbDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgc2xpZGVzOiBbXSxcbiAgICAgICAgY2FjaGU6IHRydWUsXG4gICAgICAgIHJlbmRlclNsaWRlOiBudWxsLFxuICAgICAgICByZW5kZXJFeHRlcm5hbDogbnVsbCxcbiAgICAgICAgcmVuZGVyRXh0ZXJuYWxVcGRhdGU6IHRydWUsXG4gICAgICAgIGFkZFNsaWRlc0JlZm9yZTogMCxcbiAgICAgICAgYWRkU2xpZGVzQWZ0ZXI6IDBcbiAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBiaW5kTW9kdWxlTWV0aG9kcyhzd2lwZXIsIHtcbiAgICAgICAgdmlydHVhbDogX2V4dGVuZHMoe30sIFZpcnR1YWwsIHtcbiAgICAgICAgICBzbGlkZXM6IHN3aXBlci5wYXJhbXMudmlydHVhbC5zbGlkZXMsXG4gICAgICAgICAgY2FjaGU6IHt9XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBiZWZvcmVJbml0OiBmdW5jdGlvbiBiZWZvcmVJbml0KHN3aXBlcikge1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5jbGFzc05hbWVzLnB1c2goc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzICsgXCJ2aXJ0dWFsXCIpO1xuICAgICAgICB2Y
24510XIgb3ZlcndyaXRlUGFyYW1zID0ge1xuICAgICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgZXh0ZW5kKHN3aXBlci5wYXJhbXMsIG92ZXJ3cml0ZVBhcmFtcyk7XG4gICAgICAgIGV4dGVuZChzd2lwZXIub3JpZ2luYWxQYXJhbXMsIG92ZXJ3cml0ZVBhcmFtcyk7XG5cbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLmluaXRpYWxTbGlkZSkge1xuICAgICAgICAgIHN3aXBlci52aXJ0dWFsLnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBLZXlib2FyZCA9IHtcbiAgICBoYW5kbGU6IGZ1bmN0aW9uIGhhbmRsZShldmVudCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5lbmFibGVkKSByZXR1cm47XG4gICAgICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgICB2YXIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgICB2YXIgZSA9IGV2ZW50O1xuICAgICAgaWYgKGUub3JpZ2luYWxFdmVudCkgZSA9IGUub3JpZ2luYWxFdmVudDsgLy8ganF1ZXJ5IGZpeFxuXG4gICAgICB2YXIga2MgPSBlLmtleUNvZGUgfHwgZS5jaGFyQ29kZTtcbiAgICAgIHZhciBwYWdlVXBEb3duID0gc3dpcGVyLnBhcmFtcy5rZXlib2FyZC5wYWdlVXBEb3duO1xuICAgICAgdmFyIGlzUGFnZVVwID0gcGFnZVVwRG93biAmJiBrYyA9PT0gMzM7XG4gICAgICB2Y
24510XIgaXNQYWdlRG93biA9IHBhZ2VVcERvd24gJiYga2MgPT09IDM0O1xuICAgICAgdmFyIGlzQXJyb3dMZWZ0ID0ga2MgPT09IDM3O1xuICAgICAgdmFyIGlzQXJyb3dSaWdodCA9IGtjID09PSAzOTtcbiAgICAgIHZhciBpc0Fycm93VXAgPSBrYyA9PT0gMzg7XG4gICAgICB2YXIgaXNBcnJvd0Rvd24gPSBrYyA9PT0gNDA7IC8vIERpcmVjdGlvbnMgbG9ja3NcblxuICAgICAgaWYgKCFzd2lwZXIuYWxsb3dTbGlkZU5leHQgJiYgKHN3aXBlci5pc0hvcml6b250YWwoKSAmJiBpc0Fycm93UmlnaHQgfHwgc3dpcGVyLmlzVmVydGljYWwoKSAmJiBpc0Fycm93RG93biB8fCBpc1BhZ2VEb3duKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVQcmV2ICYmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkgJiYgaXNBcnJvd0xlZnQgfHwgc3dpcGVyLmlzVmVydGljYWwoKSAmJiBpc0Fycm93VXAgfHwgaXNQYWdlVXApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGUuc2hpZnRLZXkgfHwgZS5hbHRLZXkgfHwgZS5jdHJsS2V5IHx8IGUubWV0YUtleSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50Lm5vZGVOYW1lICYmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAndGV4dGFyZWEnKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5rZXlib2FyZC5vbmx5SW5WaWV3cG9ydCAmJiAoaXNQYWdlVXAgfHwgaXNQYWdlRG93biB8fCBpc0Fycm93TGVmdCB8fCBpc0Fycm93UmlnaHQgfHwgaXNBcnJvd1VwIHx8IGlzQXJyb3dEb3duKSkge1xuICAgICAgICB2Y
24510XIgaW5WaWV3ID0gZmFsc2U7IC8vIENoZWNrIHRoYXQgc3dpcGVyIHNob3VsZCBiZSBpbnNpZGUgb2YgdmlzaWJsZSBhcmVhIG9mIHdpbmRvd1xuXG4gICAgICAgIGlmIChzd2lwZXIuJGVsLnBhcmVudHMoXCIuXCIgKyBzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3MpLmxlbmd0aCA+IDAgJiYgc3dpcGVyLiRlbC5wYXJlbnRzKFwiLlwiICsgc3dpcGVyLnBhcmFtcy5zbGlkZUFjdGl2ZUNsYXNzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyICRlbCA9IHN3aXBlci4kZWw7XG4gICAgICAgIHZhciBzd2lwZXJXaWR0aCA9ICRlbFswXS5jbGllbnRXaWR0aDtcbiAgICAgICAgdmFyIHN3aXBlckhlaWdodCA9ICRlbFswXS5jbGllbnRIZWlnaHQ7XG4gICAgICAgIHZhciB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgICB2YXIgd2luZG93SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xuICAgICAgICB2YXIgc3dpcGVyT2Zmc2V0ID0gc3dpcGVyLiRlbC5vZmZzZXQoKTtcbiAgICAgICAgaWYgKHJ0bCkgc3dpcGVyT2Zmc2V0LmxlZnQgLT0gc3dpcGVyLiRlbFswXS5zY3JvbGxMZWZ0O1xuICAgICAgICB2YXIgc3dpcGVyQ29vcmQgPSBbW3N3aXBlck9mZnNldC5sZWZ0LCBzd2lwZXJPZmZzZXQudG9wXSwgW3N3aXBlck9mZnNldC5sZWZ0ICsgc3dpcGVyV2lkdGgsIHN3aXBlck9mZnNldC50b3BdLCBbc3dpcGVyT2Zmc2V0LmxlZnQsIHN3aXBlck9mZnNldC50b3AgKyBzd2lwZXJIZWlnaHRdLCBbc3dpcGVyT2Zmc2V0LmxlZnQgKyBzd2lwZXJXaWR0aCwgc3dpcGVyT2Zmc2V0LnRvcCArIHN3aXBlckhlaWdodF1dO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3dpcGVyQ29vcmQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICB2Y
24510XIgcG9pbnQgPSBzd2lwZXJDb29yZFtpXTtcblxuICAgICAgICAgIGlmIChwb2ludFswXSA+PSAwICYmIHBvaW50WzBdIDw9IHdpbmRvd1dpZHRoICYmIHBvaW50WzFdID49IDAgJiYgcG9pbnRbMV0gPD0gd2luZG93SGVpZ2h0KSB7XG4gICAgICAgICAgICBpZiAocG9pbnRbMF0gPT09IDAgJiYgcG9pbnRbMV0gPT09IDApIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICAgICAgICAgIGluVmlldyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpblZpZXcpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgaWYgKGlzUGFnZVVwIHx8IGlzUGFnZURvd24gfHwgaXNBcnJvd0xlZnQgfHwgaXNBcnJvd1JpZ2h0KSB7XG4gICAgICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTtlbHNlIGUucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoaXNQYWdlRG93biB8fCBpc0Fycm93UmlnaHQpICYmICFydGwgfHwgKGlzUGFnZVVwIHx8IGlzQXJyb3dMZWZ0KSAmJiBydGwpIHN3aXBlci5zbGlkZU5leHQoKTtcbiAgICAgICAgaWYgKChpc1BhZ2VVcCB8fCBpc0Fycm93TGVmdCkgJiYgIXJ0bCB8fCAoaXNQYWdlRG93biB8fCBpc0Fycm93UmlnaHQpICYmIHJ0bCkgc3dpcGVyLnNsaWRlUHJldigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzUGFnZVVwIHx8IGlzUGFnZURvd24gfHwgaXNBcnJvd1VwIHx8IGlzQXJyb3dEb3duKSB7XG4gICAgICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTtlbHNlIGUucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1BhZ2VEb3duIHx8IGlzQXJyb3dEb3duKSBzd2lwZXIuc2xpZGVOZXh0KCk7XG4gICAgICAgIGlmIChpc1BhZ2VVcCB8fCBpc0Fycm93VXApIHN3aXBlci5zbGlkZVByZXYoKTtcbiAgICAgIH1cblxuICAgICAgc3dpcGVyLmVtaXQoJ2tleVByZXNzJywga2MpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGVuYWJsZTogZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgaWYgKHN3aXBlci5rZXlib2FyZC5lbmFibGVkKSByZXR1cm47XG4gICAgICAkKGRvY3VtZW50KS5vbigna2V5ZG93bicsIHN3aXBlci5rZXlib2FyZC5oYW5kbGUpO1xuICAgICAgc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQgPSB0cnVlO1xuICAgIH0sXG4gICAgZGlzYWJsZTogZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgIGlmICghc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQpIHJldHVybjtcbiAgICAgICQoZG9jdW1lbnQpLm9mZigna2V5ZG93bicsIHN3aXBlci5rZXlib2FyZC5oYW5kbGUpO1xuICAgICAgc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gIH07XG4gIHZhciBLZXlib2FyZCQxID0ge1xuICAgIG5hbWU6ICdrZXlib2FyZCcsXG4gICAgcGFyYW1zOiB7XG4gICAgICBrZXlib2FyZDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgb25seUluVmlld3BvcnQ6IHRydWUsXG4gICAgICAgIHBhZ2VVcERvd246IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBiaW5kTW9kdWxlTWV0aG9kcyhzd2lwZXIsIHtcbiAgICAgICAga2V5Ym9hcmQ6IF9leHRlbmRzKHtcbiAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICB9LCBLZXlib2FyZClcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoc3dpcGVyKSB7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmtleWJvYXJkLmVuYWJsZWQpIHtcbiAgICAgICAgICBzd2lwZXIua2V5Ym9hcmQuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQpIHtcbiAgICAgICAgICBzd2lwZXIua2V5Ym9hcmQuZGlzYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qIGVzbGludC1kaXNhYmxlIGNvbnNpc3RlbnQtcmV0dXJuICovXG5cbiAgZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZCgpIHtcbiAgICB2YXIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgIHZhciBldmVudE5hbWUgPSAnb253aGVlbCc7XG4gICAgdmFyIGlzU3VwcG9ydGVkID0gKGV2ZW50TmFtZSBpbiBkb2N1bWVudCk7XG5cbiAgICBpZiAoIWlzU3VwcG9ydGVkKSB7XG4gICAgICB2Y
24510XIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoZXZlbnROYW1lLCAncmV0dXJuOycpO1xuICAgICAgaXNTdXBwb3J0ZWQgPSB0eXBlb2YgZWxlbWVudFtldmVudE5hbWVdID09PSAnZnVuY3Rpb24nO1xuICAgIH1cblxuICAgIGlmICghaXNTdXBwb3J0ZWQgJiYgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24gJiYgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSAmJiAvLyBhbHdheXMgcmV0dXJucyB0cnVlIGluIG5ld2VyIGJyb3dzZXJzIGFzIHBlciB0aGUgc3RhbmRhcmQuXG4gICAgLy8gQHNlZSBodHRwOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZG9tLWRvbWltcGxlbWVudGF0aW9uLWhhc2ZlYXR1cmVcbiAgICBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCcnLCAnJykgIT09IHRydWUpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIHRlc3Qgc3VwcG9ydCBmb3IgdGhlIGB3aGVlbGAgZXZlbnQgaW4gSUU5Ky5cbiAgICAgIGlzU3VwcG9ydGVkID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgnRXZlbnRzLndoZWVsJywgJzMuMCcpO1xuICAgIH1cblxuICAgIHJldHVybiBpc1N1cHBvcnRlZDtcbiAgfVxuXG4gIHZhciBNb3VzZXdoZWVsID0ge1xuICAgIGxhc3RTY3JvbGxUaW1lOiBub3coKSxcbiAgICBsYXN0RXZlbnRCZWZvcmVTbmFwOiB1bmRlZmluZWQsXG4gICAgcmVjZW50V2hlZWxFdmVudHM6IFtdLFxuICAgIGV2ZW50OiBmdW5jdGlvbiBldmVudCgpIHtcbiAgICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdmaXJlZm94JykgPiAtMSkgcmV0dXJuICdET01Nb3VzZVNjcm9sbCc7XG4gICAgICByZXR1cm4gaXNFdmVudFN1cHBvcnRlZCgpID8gJ3doZWVsJyA6ICdtb3VzZXdoZWVsJztcbiAgICB9LFxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24gbm9ybWFsaXplKGUpIHtcbiAgICAgIC8vIFJlYXNvbmFibGUgZGVmYXVsdHNcbiAgICAgIHZhciBQSVhFTF9TVEVQID0gMTA7XG4gICAgICB2Y
24510XIgTElORV9IRUlHSFQgPSA0MDtcbiAgICAgIHZhciBQQUdFX0hFSUdIVCA9IDgwMDtcbiAgICAgIHZhciBzWCA9IDA7XG4gICAgICB2YXIgc1kgPSAwOyAvLyBzcGluWCwgc3BpbllcblxuICAgICAgdmFyIHBYID0gMDtcbiAgICAgIHZhciBwWSA9IDA7IC8vIHBpeGVsWCwgcGl4ZWxZXG4gICAgICAvLyBMZWdhY3lcblxuICAgICAgaWYgKCdkZXRhaWwnIGluIGUpIHtcbiAgICAgICAgc1kgPSBlLmRldGFpbDtcbiAgICAgIH1cblxuICAgICAgaWYgKCd3aGVlbERlbHRhJyBpbiBlKSB7XG4gICAgICAgIHNZID0gLWUud2hlZWxEZWx0YSAvIDEyMDtcbiAgICAgIH1cblxuICAgICAgaWYgKCd3aGVlbERlbHRhWScgaW4gZSkge1xuICAgICAgICBzWSA9IC1lLndoZWVsRGVsdGFZIC8gMTIwO1xuICAgICAgfVxuXG4gICAgICBpZiAoJ3doZWVsRGVsdGFYJyBpbiBlKSB7XG4gICAgICAgIHNYID0gLWUud2hlZWxEZWx0YVggLyAxMjA7XG4gICAgICB9IC8vIHNpZGUgc2Nyb2xsaW5nIG9uIEZGIHdpdGggRE9NTW91c2VTY3JvbGxcblxuXG4gICAgICBpZiAoJ2F4aXMnIGluIGUgJiYgZS5heGlzID09PSBlLkhPUklaT05UQUxfQVhJUykge1xuICAgICAgICBzWCA9IHNZO1xuICAgICAgICBzWSA9IDA7XG4gICAgICB9XG5cbiAgICAgIHBYID0gc1ggKiBQSVhFTF9TVEVQO1xuICAgICAgcFkgPSBzWSAqIFBJWEVMX1NURVA7XG5cbiAgICAgIGlmICgnZGVsdGFZJyBpbiBlKSB7XG4gICAgICAgIHBZID0gZS5kZWx0YVk7XG4gICAgICB9XG5cbiAgICAgIGlmICgnZGVsdGFYJyBpbiBlKSB7XG4gICAgICAgIHBYID0gZS5kZWx0YVg7XG4gICAgICB9XG5cbiAgICAgIGlmIChlLnNoaWZ0S2V5ICYmICFwWCkge1xuICAgICAgICAvLyBpZiB1c2VyIHNjcm9sbHMgd2l0aCBzaGlmdCBoZSB3YW50cyBob3Jpem9udGFsIHNjcm9sbFxuICAgICAgICBwWCA9IHBZO1xuICAgICAgICBwWSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICgocFggfHwgcFkpICYmIGUuZGVsdGFNb2RlKSB7XG4gICAgICAgIGlmIChlLmRlbHRhTW9kZSA9PT0gMSkge1xuICAgICAgICAgIC8vIGRlbHRhIGluIExJTkUgdW5pdHNcbiAgICAgICAgICBwWCAqPSBMSU5FX0hFSUdIVDtcbiAgICAgICAgICBwWSAqPSBMSU5FX0hFSUdIVDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkZWx0YSBpbiBQQUdFIHVuaXRzXG4gICAgICAgICAgcFggKj0gUEFHRV9IRUlHSFQ7XG4gICAgICAgICAgcFkgKj0gUEFHRV9IRUlHSFQ7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gRmFsbC1iYWNrIGlmIHNwaW4gY2Fubm90IGJlIGRldGVybWluZWRcblxuXG4gICAgICBpZiAocFggJiYgIXNYKSB7XG4gICAgICAgIHNYID0gcFggPCAxID8gLTEgOiAxO1xuICAgICAgfVxuXG4gICAgICBpZiAocFkgJiYgIXNZKSB7XG4gICAgICAgIHNZID0gcFkgPCAxID8gLTEgOiAxO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzcGluWDogc1gsXG4gICAgICAgIHNwaW5ZOiBzWSxcbiAgICAgICAgcGl4ZWxYOiBwWCxcbiAgICAgICAgcGl4ZWxZOiBwWVxuICAgICAgfTtcbiAgICB9LFxuICAgIGhhbmRsZU1vdXNlRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRW50ZXIoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLmVuYWJsZWQpIHJldHVybjtcbiAgICAgIHN3aXBlci5tb3VzZUVudGVyZWQgPSB0cnVlO1xuICAgIH0sXG4gICAgaGFuZGxlTW91c2VMZWF2ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VMZWF2ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIuZW5hYmxlZCkgcmV0dXJuO1xuICAgICAgc3dpcGVyLm1vdXNlRW50ZXJlZCA9IGZhbHNlO1xuICAgIH0sXG4gICAgaGFuZGxlOiBmdW5jdGlvbiBoYW5kbGUoZXZlbnQpIHtcbiAgICAgIHZhciBlID0gZXZlbnQ7XG4gICAgICB2YXIgZGlzYWJsZVBhcmVudFN3aXBlciA9IHRydWU7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLmVuYWJsZWQpIHJldHVybjtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm1vdXNld2hlZWw7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdGFyZ2V0ID0gc3dpcGVyLiRlbDtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMubW91c2V3aGVlbC5ldmVudHNUYXJnZXQgIT09ICdjb250YWluZXInKSB7XG4gICAgICAgIHRhcmdldCA9ICQoc3dpcGVyLnBhcmFtcy5tb3VzZXdoZWVsLmV2ZW50c1RhcmdldCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3dpcGVyLm1vdXNlRW50ZXJlZCAmJiAhdGFyZ2V0WzBdLmNvbnRhaW5zKGUudGFyZ2V0KSAmJiAhcGFyYW1zLnJlbGVhc2VPbkVkZ2VzKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChlLm9yaWdpbmFsRXZlbnQpIGUgPSBlLm9yaWdpbmFsRXZlbnQ7IC8vIGpxdWVyeSBmaXhcblxuICAgICAgdmFyIGRlbHRhID0gMDtcbiAgICAgIHZhciBydGxGYWN0b3IgPSBzd2lwZXIucnRsVHJhbnNsYXRlID8gLTEgOiAxO1xuICAgICAgdmFyIGRhdGEgPSBNb3VzZXdoZWVsLm5vcm1hbGl6ZShlKTtcblxuICAgICAgaWYgKHBhcmFtcy5mb3JjZVRvQXhpcykge1xuICAgICAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgaWYgKE1hdGguYWJzKGRhdGEucGl4ZWxYKSA+IE1hdGguYWJzKGRhdGEucGl4ZWxZKSkgZGVsdGEgPSAtZGF0YS5waXhlbFggKiBydGxGYWN0b3I7ZWxzZSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhkYXRhLnBpeGVsWSkgPiBNYXRoLmFicyhkYXRhLnBpeGVsWCkpIGRlbHRhID0gLWRhdGEucGl4ZWxZO2Vsc2UgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWx0YSA9IE1hdGguYWJzKGRhdGEucGl4ZWxYKSA+IE1hdGguYWJzKGRhdGEucGl4ZWxZKSA/IC1kYXRhLnBpeGVsWCAqIHJ0bEZhY3RvciA6IC1kYXRhLnBpeGVsWTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlbHRhID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChwYXJhbXMuaW52ZXJ0KSBkZWx0YSA9IC1kZWx0YTsgLy8gR2V0IHRoZSBzY3JvbGwgcG9zaXRpb25zXG5cbiAgICAgIHZhciBwb3NpdGlvbnMgPSBzd2lwZXIuZ2V0VHJhbnNsYXRlKCkgKyBkZWx0YSAqIHBhcmFtcy5zZW5zaXRpdml0eTtcbiAgICAgIGlmIChwb3NpdGlvbnMgPj0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSBwb3NpdGlvbnMgPSBzd2lwZXIubWluVHJhbnNsYXRlKCk7XG4gICAgICBpZiAocG9zaXRpb25zIDw9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSkgcG9zaXRpb25zID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpOyAvLyBXaGVuIGxvb3AgaXMgdHJ1ZTpcbiAgICAgIC8vICAgICB0aGUgZGlzYWJsZVBhcmVudFN3aXBlciB3aWxsIGJlIHRydWUuXG4gICAgICAvLyBXaGVuIGxvb3AgaXMgZmFsc2U6XG4gICAgICAvLyAgICAgaWYgdGhlIHNjcm9sbCBwb3NpdGlvbnMgaXMgbm90IG9uIGVkZ2UsXG4gICAgICAvLyAgICAgdGhlbiB0aGUgZGlzYWJsZVBhcmVudFN3aXBlciB3aWxsIGJlIHRydWUuXG4gICAgICAvLyAgICAgaWYgdGhlIHNjcm9sbCBvbiBlZGdlIHBvc2l0aW9ucyxcbiAgICAgIC8vICAgICB0aGVuIHRoZSBkaXNhYmxlUGFyZW50U3dpcGVyIHdpbGwgYmUgZmFsc2UuXG5cbiAgICAgIGRpc2FibGVQYXJlbnRTd2lwZXIgPSBzd2lwZXIucGFyYW1zLmxvb3AgPyB0cnVlIDogIShwb3NpdGlvbnMgPT09IHN3aXBlci5taW5UcmFuc2xhdGUoKSB8fCBwb3NpdGlvbnMgPT09IHN3aXBlci5tYXhUcmFuc2xhdGUoKSk7XG4gICAgICBpZiAoZGlzYWJsZVBhcmVudFN3aXBlciAmJiBzd2lwZXIucGFyYW1zLm5lc3RlZCkgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLmZyZWVNb2RlKSB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBuZXcgZXZlbnQgaW4gYSB2YXJpYWJsZSB3aGljaCBzdG9yZXMgdGhlIHJlbGV2YW50IGRhdGFcbiAgICAgICAgdmFyIG5ld0V2ZW50ID0ge1xuICAgICAgICAgIHRpbWU6IG5vdygpLFxuICAgICAgICAgIGRlbHRhOiBNYXRoLmFicyhkZWx0YSksXG4gICAgICAgICAgZGlyZWN0aW9uOiBNYXRoLnNpZ24oZGVsdGEpLFxuICAgICAgICAgIHJhdzogZXZlbnRcbiAgICAgICAgfTsgLy8gS2VlcCB0aGUgbW9zdCByZWNlbnQgZXZlbnRzXG5cbiAgICAgICAgdmFyIHJlY2VudFdoZWVsRXZlbnRzID0gc3dpcGVyLm1vdXNld2hlZWwucmVjZW50V2hlZWxFdmVudHM7XG5cbiAgICAgICAgaWYgKHJlY2VudFdoZWVsRXZlbnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgcmVjZW50V2hlZWxFdmVudHMuc2hpZnQoKTsgLy8gb25seSBzdG9yZSB0aGUgbGFzdCBOIGV2ZW50c1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByZXZFdmVudCA9IHJlY2VudFdoZWVsRXZlbnRzLmxlbmd0aCA/IHJlY2VudFdoZWVsRXZlbnRzW3JlY2VudFdoZWVsRXZlbnRzLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuICAgICAgICByZWNlbnRXaGVlbEV2ZW50cy5wdXNoKG5ld0V2ZW50KTsgLy8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHByZXZpb3VzIHJlY29yZGVkIGV2ZW50OlxuICAgICAgICAvLyAgIElmIGRpcmVjdGlvbiBoYXMgY2hhbmdlZCBvclxuICAgICAgICAvLyAgIGlmIHRoZSBzY3JvbGwgaXMgcXVpY2tlciB0aGFuIHRoZSBwcmV2aW91cyBvbmU6XG4gICAgICAgIC8vICAgICBBbmltYXRlIHRoZSBzbGlkZXIuXG4gICAgICAgIC8vIEVsc2UgKHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIHdoZWVsIGlzIG1vdmVkKTpcbiAgICAgICAgLy8gICAgIEFuaW1hdGUgdGhlIHNsaWRlci5cblxuICAgICAgICBpZiAocHJldkV2ZW50KSB7XG4gICAgICAgICAgaWYgKG5ld0V2ZW50LmRpcmVjdGlvbiAhPT0gcHJldkV2ZW50LmRpcmVjdGlvbiB8fCBuZXdFdmVudC5kZWx0YSA+IHByZXZFdmVudC5kZWx0YSB8fCBuZXdFdmVudC50aW1lID4gcHJldkV2ZW50LnRpbWUgKyAxNTApIHtcbiAgICAgICAgICAgI
24510HN3aXBlci5tb3VzZXdoZWVsLmFuaW1hdGVTbGlkZXIobmV3RXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIubW91c2V3aGVlbC5hbmltYXRlU2xpZGVyKG5ld0V2ZW50KTtcbiAgICAgICAgfSAvLyBJZiBpdCdzIHRpbWUgdG8gcmVsZWFzZSB0aGUgc2Nyb2xsOlxuICAgICAgICAvLyAgIFJldHVybiBub3cgc28geW91IGRvbid0IGhpdCB0aGUgcHJldmVudERlZmF1bHQuXG5cblxuICAgICAgICBpZiAoc3dpcGVyLm1vdXNld2hlZWwucmVsZWFzZVNjcm9sbChuZXdFdmVudCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRnJlZW1vZGUgb3Igc2Nyb2xsQ29udGFpbmVyOlxuICAgICAgICAvLyBJZiB3ZSByZWNlbnRseSBzbmFwcGVkIGFmdGVyIGEgbW9tZW50dW0gc2Nyb2xsLCB0aGVuIGlnbm9yZSB3aGVlbCBldmVudHNcbiAgICAgICAgLy8gdG8gZ2l2ZSB0aW1lIGZvciB0aGUgZGVjZWxlcmF0aW9uIHRvIGZpbmlzaC4gU3RvcCBpZ25vcmluZyBhZnRlciA1MDAgbXNlY3NcbiAgICAgICAgLy8gb3IgaWYgaXQncyBhIG5ldyBzY3JvbGwgKGxhcmdlciBkZWx0YSBvciBpbnZlcnNlIHNpZ24gYXMgbGFzdCBldmVudCBiZWZvcmVcbiAgICAgICAgLy8gYW4gZW5kLW9mLW1vbWVudHVtIHNuYXApLlxuICAgICAgICB2YXIgX25ld0V2ZW50ID0ge1xuICAgICAgICAgIHRpbWU6IG5vdygpLFxuICAgICAgICAgIGRlbHRhOiBNYXRoLmFicyhkZWx0YSksXG4gICAgICAgICAgZGlyZWN0aW9uOiBNYXRoLnNpZ24oZGVsdGEpXG4gICAgICAgIH07XG4gICAgICAgIHZhciBsYXN0RXZlbnRCZWZvcmVTbmFwID0gc3dpcGVyLm1vdXNld2hlZWwubGFzdEV2ZW50QmVmb3JlU25hcDtcbiAgICAgICAgdmFyIGlnbm9yZVdoZWVsRXZlbnRzID0gbGFzdEV2ZW50QmVmb3JlU25hcCAmJiBfbmV3RXZlbnQudGltZSA8IGxhc3RFdmVudEJlZm9yZVNuYXAudGltZSArIDUwMCAmJiBfbmV3RXZlbnQuZGVsdGEgPD0gbGFzdEV2ZW50QmVmb3JlU25hcC5kZWx0YSAmJiBfbmV3RXZlbnQuZGlyZWN0aW9uID09PSBsYXN0RXZlbnRCZWZvcmVTbmFwLmRpcmVjdGlvbjtcblxuICAgICAgICBpZiAoIWlnbm9yZVdoZWVsRXZlbnRzKSB7XG4gICAgICAgICAgc3dpcGVyLm1vdXNld2hlZWwubGFzdEV2ZW50QmVmb3JlU25hcCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgICAgIHN3aXBlci5sb29wRml4KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHBvc2l0aW9uID0gc3dpcGVyLmdldFRyYW5zbGF0ZSgpICsgZGVsdGEgKiBwYXJhbXMuc2Vuc2l0aXZpdHk7XG4gICAgICAgICAgdmFyIHdhc0JlZ2lubmluZyA9IHN3aXBlci5pc0JlZ2lubmluZztcbiAgICAgICAgICB2Y
24510XIgd2FzRW5kID0gc3dpcGVyLmlzRW5kO1xuICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIHBvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICAgICAgICAgIGlmIChwb3NpdGlvbiA8PSBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHBvc2l0aW9uID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpO1xuICAgICAgICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKDApO1xuICAgICAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUocG9zaXRpb24pO1xuICAgICAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcygpO1xuICAgICAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG5cbiAgICAgICAgICBpZiAoIXdhc0JlZ2lubmluZyAmJiBzd2lwZXIuaXNCZWdpbm5pbmcgfHwgIXdhc0VuZCAmJiBzd2lwZXIuaXNFbmQpIHtcbiAgICAgICAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZnJlZU1vZGVTdGlja3kpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2hlZWwgc2Nyb2xsaW5nIHN0YXJ0cyB3aXRoIHN0aWNreSAoYWthIHNuYXApIGVuYWJsZWQsIHRoZW4gZGV0ZWN0XG4gICAgICAgICAgICAvLyB0aGUgZW5kIG9mIGEgbW9tZW50dW0gc2Nyb2xsIGJ5IHN0b3JpbmcgcmVjZW50IChOPTE1Pykgd2hlZWwgZXZlbnRzLlxuICAgICAgICAgICAgLy8gMS4gZG8gYWxsIE4gZXZlbnRzIGhhdmUgZGVjcmVhc2luZyBvciBzYW1lIChhYnNvbHV0ZSB2YWx1ZSkgZGVsdGE/XG4gICAgICAgICAgICAvLyAyLiBkaWQgYWxsIE4gZXZlbnRzIGFycml2ZSBpbiB0aGUgbGFzdCBNIChNPTUwMD8pIG1zZWNzP1xuICAgICAgICAgICAgLy8gMy4gZG9lcyB0aGUgZWFybGllc3QgZXZlbnQgaGF2ZSBhbiAoYWJzb2x1dGUgdmFsdWUpIGRlbHRhIHRoYXQnc1xuICAgICAgICAgICAgLy8gICAgYXQgbGVhc3QgUCAoUD0xPykgbGFyZ2VyIHRoYW4gdGhlIG1vc3QgcmVjZW50IGV2ZW50J3MgZGVsdGE/XG4gICAgICAgICAgICAvLyA0LiBkb2VzIHRoZSBsYXRlc3QgZXZlbnQgaGF2ZSBhIGRlbHRhIHRoYXQncyBzbWFsbGVyIHRoYW4gUSAoUT02PykgcGl4ZWxzP1xuICAgICAgICAgICAgLy8gSWYgMS00IGFyZSBcInllc1wiIHRoZW4gd2UncmUgbmVhciB0aGUgZW5kIG9mIGEgbW9tZW50dW0gc2Nyb2xsIGRlY2VsZXJhdGlvbi5cbiAgICAgICAgICAgIC8vIFNuYXAgaW1tZWRpYXRlbHkgYW5kIGlnbm9yZSByZW1haW5pbmcgd2hlZWwgZXZlbnRzIGluIHRoaXMgc2Nyb2xsLlxuICAgICAgICAgICAgLy8gU2VlIGNvbW1lbnQgYWJvdmUgZm9yIFwicmVtYWluaW5nIHdoZWVsIGV2ZW50cyBpbiB0aGlzIHNjcm9sbFwiIGRldGVybWluYXRpb24uXG4gICAgICAgICAgICAvLyBJZiAxLTQgYXJlbid0IHNhdGlzZmllZCwgdGhlbiB3YWl0IHRvIHNuYXAgdW50aWwgNTAwbXMgYWZ0ZXIgdGhlIGxhc3QgZXZlbnQuXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoc3dpcGVyLm1vdXNld2hlZWwudGltZW91dCk7XG4gICAgICAgICAgICBzd2lwZXIubW91c2V3aGVlbC50aW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdmFyIF9yZWNlbnRXaGVlbEV2ZW50cyA9IHN3aXBlci5tb3VzZXdoZWVsLnJlY2VudFdoZWVsRXZlbnRzO1xuXG4gICAgICAgICAgICBpZiAoX3JlY2VudFdoZWVsRXZlbnRzLmxlbmd0aCA+PSAxNSkge1xuICAgICAgICAgICAgICBfcmVjZW50V2hlZWxFdmVudHMuc2hpZnQoKTsgLy8gb25seSBzdG9yZSB0aGUgbGFzdCBOIGV2ZW50c1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBfcHJldkV2ZW50ID0gX3JlY2VudFdoZWVsRXZlbnRzLmxlbmd0aCA/IF9yZWNlbnRXaGVlbEV2ZW50c1tfcmVjZW50V2hlZWxFdmVudHMubGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIHZhciBmaXJzdEV2ZW50ID0gX3JlY2VudFdoZWVsRXZlbnRzWzBdO1xuXG4gICAgICAgICAgICBfcmVjZW50V2hlZWxFdmVudHMucHVzaChfbmV3RXZlbnQpO1xuXG4gICAgICAgICAgICBpZiAoX3ByZXZFdmVudCAmJiAoX25ld0V2ZW50LmRlbHRhID4gX3ByZXZFdmVudC5kZWx0YSB8fCBfbmV3RXZlbnQuZGlyZWN0aW9uICE9PSBfcHJldkV2ZW50LmRpcmVjdGlvbikpIHtcbiAgICAgICAgICAgICAgLy8gSW5jcmVhc2luZyBvciByZXZlcnNlLXNpZ24gZGVsdGEgbWVhbnMgdGhlIHVzZXIgc3RhcnRlZCBzY3JvbGxpbmcgYWdhaW4uIENsZWFyIHRoZSB3aGVlbCBldmVudCBsb2cuXG4gICAgICAgICAgICAgIF9yZWNlbnRXaGVlbEV2ZW50cy5zcGxpY2UoMCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF9yZWNlbnRXaGVlbEV2ZW50cy5sZW5ndGggPj0gMTUgJiYgX25ld0V2ZW50LnRpbWUgLSBmaXJzdEV2ZW50LnRpbWUgPCA1MDAgJiYgZmlyc3RFdmVudC5kZWx0YSAtIF9uZXdFdmVudC5kZWx0YSA+PSAxICYmIF9uZXdFdmVudC5kZWx0YSA8PSA2KSB7XG4gICAgICAgICAgICAgIC8vIFdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGRlY2VsZXJhdGlvbiBvZiBhIG1vbWVudHVtIHNjcm9sbCwgc28gdGhlcmUncyBubyBuZWVkXG4gICAgICAgICAgICAgIC8vIHRvIHdhaXQgZm9yIG1vcmUgZXZlbnRzLiBTbmFwIEFTQVAgb24gdGhlIG5leHQgdGljay5cbiAgICAgICAgICAgICAgLy8gQWxzbywgYmVjYXVzZSB0aGVyZSdzIHNvbWUgcmVtYWluaW5nIG1vbWVudHVtIHdlJ2xsIGJpYXMgdGhlIHNuYXAgaW4gdGhlXG4gICAgICAgICAgICAgIC8vIGRpcmVjdGlvbiBvZiB0aGUgb25nb2luZyBzY3JvbGwgYmVjYXVzZSBpdCdzIGJldHRlciBVWCBmb3IgdGhlIHNjcm9sbCB0byBzbmFwXG4gICAgICAgICAgICAgIC8vIGluIHRoZSBzYW1lIGRpcmVjdGlvbiBhcyB0aGUgc2Nyb2xsIGluc3RlYWQgb2YgcmV2ZXJzaW5nIHRvIHNuYXAuICBUaGVyZWZvcmUsXG4gICAgICAgICAgICAgIC8vIGlmIGl0J3MgYWxyZWFkeSBzY3JvbGxlZCBtb3JlIHRoYW4gMjAlIGluIHRoZSBjdXJyZW50IGRpcmVjdGlvbiwga2VlcCBnb2luZy5cbiAgICAgICAgICAgICAgdmFyIHNuYXBUb1RocmVzaG9sZCA9IGRlbHRhID4gMCA/IDAuOCA6IDAuMjtcbiAgICAgICAgICAgICAgc3dpcGVyLm1vdXNld2hlZWwubGFzdEV2ZW50QmVmb3JlU25hcCA9IF9uZXdFdmVudDtcblxuICAgICAgICAgICAgICBfcmVjZW50V2hlZWxFdmVudHMuc3BsaWNlKDApO1xuXG4gICAgICAgICAgICAgI
24510HN3aXBlci5tb3VzZXdoZWVsLnRpbWVvdXQgPSBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpcGVyLnNsaWRlVG9DbG9zZXN0KHN3aXBlci5wYXJhbXMuc3BlZWQsIHRydWUsIHVuZGVmaW5lZCwgc25hcFRvVGhyZXNob2xkKTtcbiAgICAgICAgICAgICAgfSwgMCk7IC8vIG5vIGRlbGF5OyBtb3ZlIG9uIG5leHQgdGlja1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXN3aXBlci5tb3VzZXdoZWVsLnRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgLy8gaWYgd2UgZ2V0IGhlcmUsIHRoZW4gd2UgaGF2ZW4ndCBkZXRlY3RlZCB0aGUgZW5kIG9mIGEgbW9tZW50dW0gc2Nyb2xsLCBzb1xuICAgICAgICAgICAgICAvLyB3ZSdsbCBjb25zaWRlciBhIHNjcm9sbCBcImNvbXBsZXRlXCIgd2hlbiB0aGVyZSBoYXZlbid0IGJlZW4gYW55IHdoZWVsIGV2ZW50c1xuICAgICAgICAgICAgICAvLyBmb3IgNTAwbXMuXG4gICAgICAgICAgICAgIHN3aXBlci5tb3VzZXdoZWVsLnRpbWVvdXQgPSBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNuYXBUb1RocmVzaG9sZCA9IDAuNTtcbiAgICAgICAgICAgICAgICBzd2lwZXIubW91c2V3aGVlbC5sYXN0RXZlbnRCZWZvcmVTbmFwID0gX25ld0V2ZW50O1xuXG4gICAgICAgICAgICAgICAgX3JlY2VudFdoZWVsRXZlbnRzLnNwbGljZSgwKTtcblxuICAgICAgICAgICAgICAgIHN3aXBlci5zbGlkZVRvQ2xvc2VzdChzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB1bmRlZmluZWQsIHNuYXBUb1RocmVzaG9sZCk7XG4gICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBFbWl0IGV2ZW50XG5cblxuICAgICAgICAgIGlmICghaWdub3JlV2hlZWxFdmVudHMpIHN3aXBlci5lbWl0KCdzY3JvbGwnLCBlKTsgLy8gU3RvcCBhdXRvcGxheVxuXG4gICAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuYXV0b3BsYXkgJiYgc3dpcGVyLnBhcmFtcy5hdXRvcGxheURpc2FibGVPbkludGVyYWN0aW9uKSBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpOyAvLyBSZXR1cm4gcGFnZSBzY3JvbGwgb24gZWRnZSBwb3NpdGlvbnNcblxuICAgICAgICAgIGlmIChwb3NpdGlvbiA9PT0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpIHx8IHBvc2l0aW9uID09PSBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSBlLnByZXZlbnREZWZhdWx0KCk7ZWxzZSBlLnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBhbmltYXRlU2xpZGVyOiBmdW5jdGlvbiBhbmltYXRlU2xpZGVyKG5ld0V2ZW50KSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuICAgICAgaWYgKHRoaXMucGFyYW1zLm1vdXNld2hlZWwudGhyZXNob2xkRGVsdGEgJiYgbmV3RXZlbnQuZGVsdGEgPCB0aGlzLnBhcmFtcy5tb3VzZXdoZWVsLnRocmVzaG9sZERlbHRhKSB7XG4gICAgICAgIC8vIFByZXZlbnQgaWYgZGVsdGEgb2Ygd2hlZWwgc2Nyb2xsIGRlbHRhIGlzIGJlbG93IGNvbmZpZ3VyZWQgdGhyZXNob2xkXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucGFyYW1zLm1vdXNld2hlZWwudGhyZXNob2xkVGltZSAmJiBub3coKSAtIHN3aXBlci5tb3VzZXdoZWVsLmxhc3RTY3JvbGxUaW1lIDwgdGhpcy5wYXJhbXMubW91c2V3aGVlbC50aHJlc2hvbGRUaW1lKSB7XG4gICAgICAgIC8vIFByZXZlbnQgaWYgdGltZSBiZXR3ZWVuIHNjcm9sbHMgaXMgYmVsb3cgY29uZmlndXJlZCB0aHJlc2hvbGRcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSAvLyBJZiB0aGUgbW92ZW1lbnQgaXMgTk9UIGJpZyBlbm91Z2ggYW5kXG4gICAgICAvLyBpZiB0aGUgbGFzdCB0aW1lIHRoZSB1c2VyIHNjcm9sbGVkIHdhcyB0b28gY2xvc2UgdG8gdGhlIGN1cnJlbnQgb25lIChhdm9pZCBjb250aW51b3VzbHkgdHJpZ2dlcmluZyB0aGUgc2xpZGVyKTpcbiAgICAgIC8vICAgRG9uJ3QgZ28gYW55IGZ1cnRoZXIgKGF2b2lkIGluc2lnbmlmaWNhbnQgc2Nyb2xsIG1vdmVtZW50KS5cblxuXG4gICAgICBpZiAobmV3RXZlbnQuZGVsdGEgPj0gNiAmJiBub3coKSAtIHN3aXBlci5tb3VzZXdoZWVsLmxhc3RTY3JvbGxUaW1lIDwgNjApIHtcbiAgICAgICAgLy8gUmV0dXJuIGZhbHNlIGFzIGEgZGVmYXVsdFxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gLy8gSWYgdXNlciBpcyBzY3JvbGxpbmcgdG93YXJkcyB0aGUgZW5kOlxuICAgICAgLy8gICBJZiB0aGUgc2xpZGVyIGhhc24ndCBoaXQgdGhlIGxhdGVzdCBzbGlkZSBvclxuICAgICAgLy8gICBpZiB0aGUgc2xpZGVyIGlzIGEgbG9vcCBhbmRcbiAgICAgIC8vICAgaWYgdGhlIHNsaWRlciBpc24ndCBtb3ZpbmcgcmlnaHQgbm93OlxuICAgICAgLy8gICAgIEdvIHRvIG5leHQgc2xpZGUgYW5kXG4gICAgICAvLyAgICAgZW1pdCBhIHNjcm9sbCBldmVudC5cbiAgICAgIC8vIEVsc2UgKHRoZSB1c2VyIGlzIHNjcm9sbGluZyB0b3dhcmRzIHRoZSBiZWdpbm5pbmcpIGFuZFxuICAgICAgLy8gaWYgdGhlIHNsaWRlciBoYXNuJ3QgaGl0IHRoZSBmaXJzdCBzbGlkZSBvclxuICAgICAgLy8gaWYgdGhlIHNsaWRlciBpcyBhIGxvb3AgYW5kXG4gICAgICAvLyBpZiB0aGUgc2xpZGVyIGlzbid0IG1vdmluZyByaWdodCBub3c6XG4gICAgICAvLyAgIEdvIHRvIHByZXYgc2xpZGUgYW5kXG4gICAgICAvLyAgIGVtaXQgYSBzY3JvbGwgZXZlbnQuXG5cblxuICAgICAgaWYgKG5ld0V2ZW50LmRpcmVjdGlvbiA8IDApIHtcbiAgICAgICAgaWYgKCghc3dpcGVyLmlzRW5kIHx8IHN3aXBlci5wYXJhbXMubG9vcCkgJiYgIXN3aXBlci5hbmltYXRpbmcpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVOZXh0KCk7XG4gICAgICAgICAgc3dpcGVyLmVtaXQoJ3Njcm9sbCcsIG5ld0V2ZW50LnJhdyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKCFzd2lwZXIuaXNCZWdpbm5pbmcgfHwgc3dpcGVyLnBhcmFtcy5sb29wKSAmJiAhc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgICBzd2lwZXIuc2xpZGVQcmV2KCk7XG4gICAgICAgIHN3aXBlci5lbWl0KCdzY3JvbGwnLCBuZXdFdmVudC5yYXcpO1xuICAgICAgfSAvLyBJZiB5b3UgZ290IGhlcmUgaXMgYmVjYXVzZSBhbiBhbmltYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkIHNvIHN0b3JlIHRoZSBjdXJyZW50IHRpbWVcblxuXG4gICAgICBzd2lwZXIubW91c2V3aGVlbC5sYXN0U2Nyb2xsVGltZSA9IG5ldyB3aW5kb3cuRGF0ZSgpLmdldFRpbWUoKTsgLy8gUmV0dXJuIGZhbHNlIGFzIGEgZGVmYXVsdFxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICByZWxlYXNlU2Nyb2xsOiBmdW5jdGlvbiByZWxlYXNlU2Nyb2xsKG5ld0V2ZW50KSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm1vdXNld2hlZWw7XG5cbiAgICAgIGlmIChuZXdFdmVudC5kaXJlY3Rpb24gPCAwKSB7XG4gICAgICAgIGlmIChzd2lwZXIuaXNFbmQgJiYgIXN3aXBlci5wYXJhbXMubG9vcCAmJiBwYXJhbXMucmVsZWFzZU9uRWRnZXMpIHtcbiAgICAgICAgICAvLyBSZXR1cm4gdHJ1ZSB0byBhbmltYXRlIHNjcm9sbCBvbiBlZGdlc1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN3aXBlci5pc0JlZ2lubmluZyAmJiAhc3dpcGVyLnBhcmFtcy5sb29wICYmIHBhcmFtcy5yZWxlYXNlT25FZGdlcykge1xuICAgICAgICAvLyBSZXR1cm4gdHJ1ZSB0byBhbmltYXRlIHNjcm9sbCBvbiBlZGdlc1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgZW5hYmxlOiBmdW5jdGlvbiBlbmFibGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBldmVudCA9IE1vdXNld2hlZWwuZXZlbnQoKTtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgICBzd2lwZXIud3JhcHBlckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIHN3aXBlci5tb3VzZXdoZWVsLmhhbmRsZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWV2ZW50KSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoc3dpcGVyLm1vdXNld2hlZWwuZW5hYmxlZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIHRhcmdldCA9IHN3aXBlci4kZWw7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLm1vdXNld2hlZWwuZXZlbnRzVGFyZ2V0ICE9PSAnY29udGFpbmVyJykge1xuICAgICAgICB0YXJnZXQgPSAkKHN3aXBlci5wYXJhbXMubW91c2V3aGVlbC5ldmVudHNUYXJnZXQpO1xuICAgICAgfVxuXG4gICAgICB0YXJnZXQub24oJ21vdXNlZW50ZXInLCBzd2lwZXIubW91c2V3aGVlbC5oYW5kbGVNb3VzZUVudGVyKTtcbiAgICAgIHRhcmdldC5vbignbW91c2VsZWF2ZScsIHN3aXBlci5tb3VzZXdoZWVsLmhhbmRsZU1vdXNlTGVhdmUpO1xuICAgICAgdGFyZ2V0Lm9uKGV2ZW50LCBzd2lwZXIubW91c2V3aGVlbC5oYW5kbGUpO1xuICAgICAgc3dpcGVyLm1vdXNld2hlZWwuZW5hYmxlZCA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGRpc2FibGU6IGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBldmVudCA9IE1vdXNld2hlZWwuZXZlbnQoKTtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgICBzd2lwZXIud3JhcHBlckVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIHN3aXBlci5tb3VzZXdoZWVsLmhhbmRsZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWV2ZW50KSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIXN3aXBlci5tb3VzZXdoZWVsLmVuYWJsZWQpIHJldHVybiBmYWxzZTtcbiAgICAgIHZhciB0YXJnZXQgPSBzd2lwZXIuJGVsO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5tb3VzZXdoZWVsLmV2ZW50c1RhcmdldCAhPT0gJ2NvbnRhaW5lcicpIHtcbiAgICAgICAgdGFyZ2V0ID0gJChzd2lwZXIucGFyYW1zLm1vdXNld2hlZWwuZXZlbnRzVGFyZ2V0KTtcbiAgICAgIH1cblxuICAgICAgdGFyZ2V0Lm9mZihldmVudCwgc3dpcGVyLm1vdXNld2hlZWwuaGFuZGxlKTtcbiAgICAgIHN3aXBlci5tb3VzZXdoZWVsLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfTtcbiAgdmFyIE1vdXNld2hlZWwkMSA9IHtcbiAgICBuYW1lOiAnbW91c2V3aGVlbCcsXG4gICAgcGFyYW1zOiB7XG4gICAgICBtb3VzZXdoZWVsOiB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICByZWxlYXNlT25FZGdlczogZmFsc2UsXG4gICAgICAgIGludmVydDogZmFsc2UsXG4gICAgICAgIGZvcmNlVG9BeGlzOiBmYWxzZSxcbiAgICAgICAgc2Vuc2l0aXZpdHk6IDEsXG4gICAgICAgIGV2ZW50c1RhcmdldDogJ2NvbnRhaW5lcicsXG4gICAgICAgIHRocmVzaG9sZERlbHRhOiBudWxsLFxuICAgICAgICB0aHJlc2hvbGRUaW1lOiBudWxsXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICAgIG1vdXNld2hlZWw6IHtcbiAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICBsYXN0U2Nyb2xsVGltZTogbm93KCksXG4gICAgICAgICAgbGFzdEV2ZW50QmVmb3JlU25hcDogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlY2VudFdoZWVsRXZlbnRzOiBbXSxcbiAgICAgICAgICBlbmFibGU6IE1vdXNld2hlZWwuZW5hYmxlLFxuICAgICAgICAgIGRpc2FibGU6IE1vdXNld2hlZWwuZGlzYWJsZSxcbiAgICAgICAgICBoYW5kbGU6IE1vdXNld2hlZWwuaGFuZGxlLFxuICAgICAgICAgIGhhbmRsZU1vdXNlRW50ZXI6IE1vdXNld2hlZWwuaGFuZGxlTW91c2VFbnRlcixcbiAgICAgICAgICBoYW5kbGVNb3VzZUxlYXZlOiBNb3VzZXdoZWVsLmhhbmRsZU1vdXNlTGVhdmUsXG4gICAgICAgICAgYW5pbWF0ZVNsaWRlcjogTW91c2V3aGVlbC5hbmltYXRlU2xpZGVyLFxuICAgICAgICAgIHJlbGVhc2VTY3JvbGw6IE1vdXNld2hlZWwucmVsZWFzZVNjcm9sbFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KHN3aXBlcikge1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMubW91c2V3aGVlbC5lbmFibGVkICYmIHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgICAgIHN3aXBlci5tb3VzZXdoZWVsLmRpc2FibGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLm1vdXNld2hlZWwuZW5hYmxlZCkgc3dpcGVyLm1vdXNld2hlZWwuZW5hYmxlKCk7XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveShzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgICAgIHN3aXBlci5tb3VzZXdoZWVsLmVuYWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN3aXBlci5tb3VzZXdoZWVsLmVuYWJsZWQpIHN3aXBlci5tb3VzZXdoZWVsLmRpc2FibGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIE5hdmlnYXRpb24gPSB7XG4gICAgdG9nZ2xlRWw6IGZ1bmN0aW9uIHRvZ2dsZUVsKCRlbCwgZGlzYWJsZWQpIHtcbiAgICAgICRlbFtkaXNhYmxlZCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXSh0aGlzLnBhcmFtcy5uYXZpZ2F0aW9uLmRpc2FibGVkQ2xhc3MpO1xuICAgICAgaWYgKCRlbFswXSAmJiAkZWxbMF0udGFnTmFtZSA9PT0gJ0JVVFRPTicpICRlbFswXS5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIH0sXG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICAvLyBVcGRhdGUgTmF2aWdhdGlvbiBCdXR0b25zXG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm5hdmlnYXRpb247XG4gICAgICB2YXIgdG9nZ2xlRWwgPSBzd2lwZXIubmF2aWdhdGlvbi50b2dnbGVFbDtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHJldHVybjtcbiAgICAgIHZhciBfc3dpcGVyJG5hdmlnYXRpb24gPSBzd2lwZXIubmF2aWdhdGlvbixcbiAgICAgICAgICAkbmV4dEVsID0gX3N3aXBlciRuYXZpZ2F0aW9uLiRuZXh0RWwsXG4gICAgICAgICAgJHByZXZFbCA9IF9zd2lwZXIkbmF2aWdhdGlvbi4kcHJldkVsO1xuXG4gICAgICBpZiAoJHByZXZFbCAmJiAkcHJldkVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHN3aXBlci5pc0JlZ2lubmluZykge1xuICAgICAgICAgIHRvZ2dsZUVsKCRwcmV2RWwsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvZ2dsZUVsKCRwcmV2RWwsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmVuYWJsZWQpIHtcbiAgICAgICAgICAkcHJldkVsW3N3aXBlci5pc0xvY2tlZCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXShwYXJhbXMubG9ja0NsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoJG5leHRFbCAmJiAkbmV4dEVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHN3aXBlci5pc0VuZCkge1xuICAgICAgICAgIHRvZ2dsZUVsKCRuZXh0RWwsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvZ2dsZUVsKCRuZXh0RWwsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmVuYWJsZWQpIHtcbiAgICAgICAgICAkbmV4dEVsW3N3aXBlci5pc0xvY2tlZCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXShwYXJhbXMubG9ja0NsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgb25QcmV2Q2xpY2s6IGZ1bmN0aW9uIG9uUHJldkNsaWNrKGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKHN3aXBlci5pc0JlZ2lubmluZyAmJiAhc3dpcGVyLnBhcmFtcy5sb29wKSByZXR1cm47XG4gICAgICBzd2lwZXIuc2xpZGVQcmV2KCk7XG4gICAgfSxcbiAgICBvbk5leHRDbGljazogZnVuY3Rpb24gb25OZXh0Q2xpY2soZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoc3dpcGVyLmlzRW5kICYmICFzd2lwZXIucGFyYW1zLmxvb3ApIHJldHVybjtcbiAgICAgIHN3aXBlci5zbGlkZU5leHQoKTtcbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm5hdmlnYXRpb247XG4gICAgICBzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24gPSBjcmVhdGVFbGVtZW50SWZOb3REZWZpbmVkKHN3aXBlci4kZWwsIHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbiwgc3dpcGVyLnBhcmFtcy5jcmVhdGVFbGVtZW50cywge1xuICAgICAgICBuZXh0RWw6ICdzd2lwZXItYnV0dG9uLW5leHQnLFxuICAgICAgICBwcmV2RWw6ICdzd2lwZXItYnV0dG9uLXByZXYnXG4gICAgICB9KTtcbiAgICAgIGlmICghKHBhcmFtcy5uZXh0RWwgfHwgcGFyYW1zLnByZXZFbCkpIHJldHVybjtcbiAgICAgIHZhciAkbmV4dEVsO1xuICAgICAgdmFyICRwcmV2RWw7XG5cbiAgICAgIGlmIChwYXJhbXMubmV4dEVsKSB7XG4gICAgICAgICRuZXh0RWwgPSAkKHBhcmFtcy5uZXh0RWwpO1xuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLnVuaXF1ZU5hdkVsZW1lbnRzICYmIHR5cGVvZiBwYXJhbXMubmV4dEVsID09PSAnc3RyaW5nJyAmJiAkbmV4dEVsLmxlbmd0aCA+IDEgJiYgc3dpcGVyLiRlbC5maW5kKHBhcmFtcy5uZXh0RWwpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICRuZXh0RWwgPSBzd2lwZXIuJGVsLmZpbmQocGFyYW1zLm5leHRFbCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtcy5wcmV2RWwpIHtcbiAgICAgICAgJHByZXZFbCA9ICQocGFyYW1zLnByZXZFbCk7XG5cbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMudW5pcXVlTmF2RWxlbWVudHMgJiYgdHlwZW9mIHBhcmFtcy5wcmV2RWwgPT09ICdzdHJpbmcnICYmICRwcmV2RWwubGVuZ3RoID4gMSAmJiBzd2lwZXIuJGVsLmZpbmQocGFyYW1zLnByZXZFbCkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgJHByZXZFbCA9IHN3aXBlci4kZWwuZmluZChwYXJhbXMucHJldkVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoJG5leHRFbCAmJiAkbmV4dEVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgJG5leHRFbC5vbignY2xpY2snLCBzd2lwZXIubmF2aWdhdGlvbi5vbk5leHRDbGljayk7XG4gICAgICB9XG5cbiAgICAgIGlmICgkcHJldkVsICYmICRwcmV2RWwubGVuZ3RoID4gMCkge1xuICAgICAgICAkcHJldkVsLm9uKCdjbGljaycsIHN3aXBlci5uYXZpZ2F0aW9uLm9uUHJldkNsaWNrKTtcbiAgICAgIH1cblxuICAgICAgZXh0ZW5kKHN3aXBlci5uYXZpZ2F0aW9uLCB7XG4gICAgICAgICRuZXh0RWw6ICRuZXh0RWwsXG4gICAgICAgIG5leHRFbDogJG5leHRFbCAmJiAkbmV4dEVsWzBdLFxuICAgICAgICAkcHJldkVsOiAkcHJldkVsLFxuICAgICAgICBwcmV2RWw6ICRwcmV2RWwgJiYgJHByZXZFbFswXVxuICAgICAgfSk7XG5cbiAgICAgIGlmICghc3dpcGVyLmVuYWJsZWQpIHtcbiAgICAgICAgaWYgKCRuZXh0RWwpICRuZXh0RWwuYWRkQ2xhc3MocGFyYW1zLmxvY2tDbGFzcyk7XG4gICAgICAgIGlmICgkcHJldkVsKSAkcHJldkVsLmFkZENsYXNzKHBhcmFtcy5sb2NrQ2xhc3MpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIF9zd2lwZXIkbmF2aWdhdGlvbjIgPSBzd2lwZXIubmF2aWdhdGlvbixcbiAgICAgICAgICAkbmV4dEVsID0gX3N3aXBlciRuYXZpZ2F0aW9uMi4kbmV4dEVsLFxuICAgICAgICAgICRwcmV2RWwgPSBfc3dpcGVyJG5hdmlnYXRpb24yLiRwcmV2RWw7XG5cbiAgICAgIGlmICgkbmV4dEVsICYmICRuZXh0RWwubGVuZ3RoKSB7XG4gICAgICAgICRuZXh0RWwub2ZmKCdjbGljaycsIHN3aXBlci5uYXZpZ2F0aW9uLm9uTmV4dENsaWNrKTtcbiAgICAgICAgJG5leHRFbC5yZW1vdmVDbGFzcyhzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24uZGlzYWJsZWRDbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICgkcHJldkVsICYmICRwcmV2RWwubGVuZ3RoKSB7XG4gICAgICAgICRwcmV2RWwub2ZmKCdjbGljaycsIHN3aXBlci5uYXZpZ2F0aW9uLm9uUHJldkNsaWNrKTtcbiAgICAgICAgJHByZXZFbC5yZW1vdmVDbGFzcyhzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24uZGlzYWJsZWRDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgTmF2aWdhdGlvbiQxID0ge1xuICAgIG5hbWU6ICduYXZpZ2F0aW9uJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIG5hdmlnYXRpb246IHtcbiAgICAgICAgbmV4dEVsOiBudWxsLFxuICAgICAgICBwcmV2RWw6IG51bGwsXG4gICAgICAgIGhpZGVPbkNsaWNrOiBmYWxzZSxcbiAgICAgICAgZGlzYWJsZWRDbGFzczogJ3N3aXBlci1idXR0b24tZGlzYWJsZWQnLFxuICAgICAgICBoaWRkZW5DbGFzczogJ3N3aXBlci1idXR0b24taGlkZGVuJyxcbiAgICAgICAgbG9ja0NsYXNzOiAnc3dpcGVyLWJ1dHRvbi1sb2NrJ1xuICAgICAgfVxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIGJpbmRNb2R1bGVNZXRob2RzKHN3aXBlciwge1xuICAgICAgICBuYXZpZ2F0aW9uOiBfZXh0ZW5kcyh7fSwgTmF2aWdhdGlvbilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoc3dpcGVyKSB7XG4gICAgICAgIHN3aXBlci5uYXZpZ2F0aW9uLmluaXQoKTtcbiAgICAgICAgc3dpcGVyLm5hdmlnYXRpb24udXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgdG9FZGdlOiBmdW5jdGlvbiB0b0VkZ2Uoc3dpcGVyKSB7XG4gICAgICAgIHN3aXBlci5uYXZpZ2F0aW9uLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIGZyb21FZGdlOiBmdW5jdGlvbiBmcm9tRWRnZShzd2lwZXIpIHtcbiAgICAgICAgc3dpcGVyLm5hdmlnYXRpb24udXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveShzd2lwZXIpIHtcbiAgICAgICAgc3dpcGVyLm5hdmlnYXRpb24uZGVzdHJveSgpO1xuICAgICAgfSxcbiAgICAgICdlbmFibGUgZGlzYWJsZSc6IGZ1bmN0aW9uIGVuYWJsZURpc2FibGUoc3dpcGVyKSB7XG4gICAgICAgIHZhciBfc3dpcGVyJG5hdmlnYXRpb24zID0gc3dpcGVyLm5hdmlnYXRpb24sXG4gICAgICAgICAgICAkbmV4dEVsID0gX3N3aXBlciRuYXZpZ2F0aW9uMy4kbmV4dEVsLFxuICAgICAgICAgICAgJHByZXZFbCA9IF9zd2lwZXIkbmF2aWdhdGlvbjMuJHByZXZFbDtcblxuICAgICAgICBpZiAoJG5leHRFbCkge1xuICAgICAgICAgICRuZXh0RWxbc3dpcGVyLmVuYWJsZWQgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmxvY2tDbGFzcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHByZXZFbCkge1xuICAgICAgICAgICRwcmV2RWxbc3dpcGVyLmVuYWJsZWQgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmxvY2tDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjbGljazogZnVuY3Rpb24gY2xpY2soc3dpcGVyLCBlKSB7XG4gICAgICAgIHZhciBfc3dpcGVyJG5hdmlnYXRpb240ID0gc3dpcGVyLm5hdmlnYXRpb24sXG4gICAgICAgICAgICAkbmV4dEVsID0gX3N3aXBlciRuYXZpZ2F0aW9uNC4kbmV4dEVsLFxuICAgICAgICAgICAgJHByZXZFbCA9IF9zd2lwZXIkbmF2aWdhdGlvbjQuJHByZXZFbDtcbiAgICAgICAgdmFyIHRhcmdldEVsID0gZS50YXJnZXQ7XG5cbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRlT25DbGljayAmJiAhJCh0YXJnZXRFbCkuaXMoJHByZXZFbCkgJiYgISQodGFyZ2V0RWwpLmlzKCRuZXh0RWwpKSB7XG4gICAgICAgICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbiAmJiBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uY2xpY2thYmxlICYmIChzd2lwZXIucGFnaW5hdGlvbi5lbCA9PT0gdGFyZ2V0RWwgfHwgc3dpcGVyLnBhZ2luYXRpb24uZWwuY29udGFpbnModGFyZ2V0RWwpKSkgcmV0dXJuO1xuICAgICAgICAgIHZhciBpc0hpZGRlbjtcblxuICAgICAgICAgIGlmICgkbmV4dEVsKSB7XG4gICAgICAgICAgICBpc0hpZGRlbiA9ICRuZXh0RWwuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmhpZGRlbkNsYXNzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCRwcmV2RWwpIHtcbiAgICAgICAgICAgIGlzSGlkZGVuID0gJHByZXZFbC5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24uaGlkZGVuQ2xhc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc0hpZGRlbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ25hdmlnYXRpb25TaG93Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCduYXZpZ2F0aW9uSGlkZScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgkbmV4dEVsKSB7XG4gICAgICAgICAgICAkbmV4dEVsLnRvZ2dsZUNsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCRwcmV2RWwpIHtcbiAgICAgICAgICAgICRwcmV2RWwudG9nZ2xlQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmhpZGRlbkNsYXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIFBhZ2luYXRpb24gPSB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICAvLyBSZW5kZXIgfHwgVXBkYXRlIFBhZ2luYXRpb24gYnVsbGV0cy9pdGVtc1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgcnRsID0gc3dpcGVyLnJ0bDtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb247XG4gICAgICBpZiAoIXBhcmFtcy5lbCB8fCAhc3dpcGVyLnBhZ2luYXRpb24uZWwgfHwgIXN3aXBlci5wYWdpbmF0aW9uLiRlbCB8fCBzd2lwZXIucGFnaW5hdGlvbi4kZWwubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICB2YXIgc2xpZGVzTGVuZ3RoID0gc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQgPyBzd2lwZXIudmlydHVhbC5zbGlkZXMubGVuZ3RoIDogc3dpcGVyLnNsaWRlcy5sZW5ndGg7XG4gICAgICB2YXIgJGVsID0gc3dpcGVyLnBhZ2luYXRpb24uJGVsOyAvLyBDdXJyZW50L1RvdGFsXG5cbiAgICAgIHZhciBjdXJyZW50O1xuICAgICAgdmFyIHRvdGFsID0gc3dpcGVyLnBhcmFtcy5sb29wID8gTWF0aC5jZWlsKChzbGlkZXNMZW5ndGggLSBzd2lwZXIubG9vcGVkU2xpZGVzICogMikgLyBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwKSA6IHN3aXBlci5zbmFwR3JpZC5sZW5ndGg7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgY3VycmVudCA9IE1hdGguY2VpbCgoc3dpcGVyLmFjdGl2ZUluZGV4IC0gc3dpcGVyLmxvb3BlZFNsaWRlcykgLyBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcblxuICAgICAgICBpZiAoY3VycmVudCA+IHNsaWRlc0xlbmd0aCAtIDEgLSBzd2lwZXIubG9vcGVkU2xpZGVzICogMikge1xuICAgICAgICAgIGN1cnJlbnQgLT0gc2xpZGVzTGVuZ3RoIC0gc3dpcGVyLmxvb3BlZFNsaWRlcyAqIDI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudCA+IHRvdGFsIC0gMSkgY3VycmVudCAtPSB0b3RhbDtcbiAgICAgICAgaWYgKGN1cnJlbnQgPCAwICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvblR5cGUgIT09ICdidWxsZXRzJykgY3VycmVudCA9IHRvdGFsICsgY3VycmVudDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN3aXBlci5zbmFwSW5kZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGN1cnJlbnQgPSBzd2lwZXIuc25hcEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudCA9IHN3aXBlci5hY3RpdmVJbmRleCB8fCAwO1xuICAgICAgfSAvLyBUeXBlc1xuXG5cbiAgICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2J1bGxldHMnICYmIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBidWxsZXRzID0gc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cztcbiAgICAgICAgdmFyIGZpcnN0SW5kZXg7XG4gICAgICAgIHZhciBsYXN0SW5kZXg7XG4gICAgICAgIHZhciBtaWRJbmRleDtcblxuICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNCdWxsZXRzKSB7XG4gICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0U2l6ZSA9IGJ1bGxldHMuZXEoMClbc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ291dGVyV2lkdGgnIDogJ291dGVySGVpZ2h0J10odHJ1ZSk7XG4gICAgICAgICAgJGVsLmNzcyhzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnd2lkdGgnIDogJ2hlaWdodCcsIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldFNpemUgKiAocGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyArIDQpICsgXCJweFwiKTtcblxuICAgICAgICAgIGlmIChwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzID4gMSAmJiBzd2lwZXIucHJldmlvdXNJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5keW5hbWljQnVsbGV0SW5kZXggKz0gY3VycmVudCAtIHN3aXBlci5wcmV2aW91c0luZGV4O1xuXG4gICAgICAgICAgICBpZiAoc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4ID4gcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyAtIDEpIHtcbiAgICAgICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4ID0gcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyAtIDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN3aXBlci5wYWdpbmF0aW9uLmR5bmFtaWNCdWxsZXRJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmaXJzdEluZGV4ID0gY3VycmVudCAtIHN3aXBlci5wYWdpbmF0aW9uLmR5bmFtaWNCdWxsZXRJbmRleDtcbiAgICAgICAgICBsYXN0SW5kZXggPSBmaXJzdEluZGV4ICsgKE1hdGgubWluKGJ1bGxldHMubGVuZ3RoLCBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzKSAtIDEpO1xuICAgICAgICAgIG1pZEluZGV4ID0gKGxhc3RJbmRleCArIGZpcnN0SW5kZXgpIC8gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1bGxldHMucmVtb3ZlQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzICsgXCIgXCIgKyBwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1uZXh0IFwiICsgcGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzICsgXCItbmV4dC1uZXh0IFwiICsgcGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzICsgXCItcHJldiBcIiArIHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLXByZXYtcHJldiBcIiArIHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLW1haW5cIik7XG5cbiAgICAgICAgaWYgKCRlbC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgYnVsbGV0cy5lYWNoKGZ1bmN0aW9uIChidWxsZXQpIHtcbiAgICAgICAgICAgIHZhciAkYnVsbGV0ID0gJChidWxsZXQpO1xuICAgICAgICAgICAgdmFyIGJ1bGxldEluZGV4ID0gJGJ1bGxldC5pbmRleCgpO1xuXG4gICAgICAgICAgICBpZiAoYnVsbGV0SW5kZXggPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgJGJ1bGxldC5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNCdWxsZXRzKSB7XG4gICAgICAgICAgICAgIGlmIChidWxsZXRJbmRleCA+PSBmaXJzdEluZGV4ICYmIGJ1bGxldEluZGV4IDw9IGxhc3RJbmRleCkge1xuICAgICAgICAgICAgICAgICRidWxsZXQuYWRkQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzICsgXCItbWFpblwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChidWxsZXRJbmRleCA9PT0gZmlyc3RJbmRleCkge1xuICAgICAgICAgICAgICAgICRidWxsZXQucHJldigpLmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLXByZX
24510ZcIikucHJldigpLmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLXByZXYtcHJldlwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChidWxsZXRJbmRleCA9PT0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgJGJ1bGxldC5uZXh0KCkuYWRkQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzICsgXCItbmV4dFwiKS5uZXh0KCkuYWRkQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzICsgXCItbmV4dC1uZXh0XCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyICRidWxsZXQgPSBidWxsZXRzLmVxKGN1cnJlbnQpO1xuICAgICAgICAgIHZhciBidWxsZXRJbmRleCA9ICRidWxsZXQuaW5kZXgoKTtcbiAgICAgICAgICAkYnVsbGV0LmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyk7XG5cbiAgICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNCdWxsZXRzKSB7XG4gICAgICAgICAgICB2YXIgJGZpcnN0RGlzcGxheWVkQnVsbGV0ID0gYnVsbGV0cy5lcShmaXJzdEluZGV4KTtcbiAgICAgICAgICAgIHZhciAkbGFzdERpc3BsYXllZEJ1bGxldCA9IGJ1bGxldHMuZXEobGFzdEluZGV4KTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGZpcnN0SW5kZXg7IGkgPD0gbGFzdEluZGV4OyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgYnVsbGV0cy5lcShpKS5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1tYWluXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgICAgICAgIGlmIChidWxsZXRJbmRleCA+PSBidWxsZXRzLmxlbmd0aCAtIHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHM7IF9pID49IDA7IF9pIC09IDEpIHtcbiAgICAgICAgICAgICAgICAgIGJ1bGxldHMuZXEoYnVsbGV0cy5sZW5ndGggLSBfaSkuYWRkQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzICsgXCItbWFpblwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBidWxsZXRzLmVxKGJ1bGxldHMubGVuZ3RoIC0gcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyAtIDEpLmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLXByZXZcIik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJGZpcnN0RGlzcGxheWVkQnVsbGV0LnByZXYoKS5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1wcmV2XCIpLnByZXYoKS5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1wcmV2LXByZXZcIik7XG4gICAgICAgICAgICAgICAgJGxhc3REaXNwbGF5ZWRCdWxsZXQubmV4dCgpLmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLW5leHRcIikubmV4dCgpLmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyArIFwiLW5leHQtbmV4dFwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgJGZpcnN0RGlzcGxheWVkQnVsbGV0LnByZXYoKS5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1wcmV2XCIpLnByZXYoKS5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1wcmV2LXByZXZcIik7XG4gICAgICAgICAgICAgICRsYXN0RGlzcGxheWVkQnVsbGV0Lm5leHQoKS5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1uZXh0XCIpLm5leHQoKS5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MgKyBcIi1uZXh0LW5leHRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgICAgIHZhciBkeW5hbWljQnVsbGV0c0xlbmd0aCA9IE1hdGgubWluKGJ1bGxldHMubGVuZ3RoLCBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzICsgNCk7XG4gICAgICAgICAgdmFyIGJ1bGxldHNPZmZzZXQgPSAoc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0U2l6ZSAqIGR5bmFtaWNCdWxsZXRzTGVuZ3RoIC0gc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0U2l6ZSkgLyAyIC0gbWlkSW5kZXggKiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRTaXplO1xuICAgICAgICAgIHZhciBvZmZzZXRQcm9wID0gcnRsID8gJ3JpZ2h0JyA6ICdsZWZ0JztcbiAgICAgICAgICBidWxsZXRzLmNzcyhzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyBvZmZzZXRQcm9wIDogJ3RvcCcsIGJ1bGxldHNPZmZzZXQgKyBcInB4XCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2ZyYWN0aW9uJykge1xuICAgICAgICAkZWwuZmluZChjbGFzc2VzVG9TZWxlY3RvcihwYXJhbXMuY3VycmVudENsYXNzKSkudGV4dChwYXJhbXMuZm9ybWF0RnJhY3Rpb25DdXJyZW50KGN1cnJlbnQgKyAxKSk7XG4gICAgICAgICRlbC5maW5kKGNsYXNzZXNUb1NlbGVjdG9yKHBhcmFtcy50b3RhbENsYXNzKSkudGV4dChwYXJhbXMuZm9ybWF0RnJhY3Rpb25Ub3RhbCh0b3RhbCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdwcm9ncmVzc2JhcicpIHtcbiAgICAgICAgdmFyIHByb2dyZXNzYmFyRGlyZWN0aW9uO1xuXG4gICAgICAgIGlmIChwYXJhbXMucHJvZ3Jlc3NiYXJPcHBvc2l0ZSkge1xuICAgICAgICAgIHByb2dyZXNzYmFyRGlyZWN0aW9uID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9ncmVzc2JhckRpcmVjdGlvbiA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/ICdob3Jpem9udGFsJyA6ICd2ZXJ0aWNhbCc7XG4gICAgICAgIH1cblxuICAgICAgICB2Y
24510XIgc2NhbGUgPSAoY3VycmVudCArIDEpIC8gdG90YWw7XG4gICAgICAgIHZhciBzY2FsZVggPSAxO1xuICAgICAgICB2YXIgc2NhbGVZID0gMTtcblxuICAgICAgICBpZiAocHJvZ3Jlc3NiYXJEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIHNjYWxlWCA9IHNjYWxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjYWxlWSA9IHNjYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgJGVsLmZpbmQoY2xhc3Nlc1RvU2VsZWN0b3IocGFyYW1zLnByb2dyZXNzYmFyRmlsbENsYXNzKSkudHJhbnNmb3JtKFwidHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlWChcIiArIHNjYWxlWCArIFwiKSBzY2FsZVkoXCIgKyBzY2FsZVkgKyBcIilcIikudHJhbnNpdGlvbihzd2lwZXIucGFyYW1zLnNwZWVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtcy50eXBlID09PSAnY3VzdG9tJyAmJiBwYXJhbXMucmVuZGVyQ3VzdG9tKSB7XG4gICAgICAgICRlbC5odG1sKHBhcmFtcy5yZW5kZXJDdXN0b20oc3dpcGVyLCBjdXJyZW50ICsgMSwgdG90YWwpKTtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3BhZ2luYXRpb25SZW5kZXInLCAkZWxbMF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3BhZ2luYXRpb25VcGRhdGUnLCAkZWxbMF0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5lbmFibGVkKSB7XG4gICAgICAgICRlbFtzd2lwZXIuaXNMb2NrZWQgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10ocGFyYW1zLmxvY2tDbGFzcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIC8vIFJlbmRlciBDb250YWluZXJcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbjtcbiAgICAgIGlmICghcGFyYW1zLmVsIHx8ICFzd2lwZXIucGFnaW5hdGlvbi5lbCB8fCAhc3dpcGVyLnBhZ2luYXRpb24uJGVsIHx8IHN3aXBlci5wYWdpbmF0aW9uLiRlbC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIHZhciBzbGlkZXNMZW5ndGggPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggOiBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcbiAgICAgIHZhciAkZWwgPSBzd2lwZXIucGFnaW5hdGlvbi4kZWw7XG4gICAgICB2Y
24510XIgcGFnaW5hdGlvbkhUTUwgPSAnJztcblxuICAgICAgaWYgKHBhcmFtcy50eXBlID09PSAnYnVsbGV0cycpIHtcbiAgICAgICAgdmFyIG51bWJlck9mQnVsbGV0cyA9IHN3aXBlci5wYXJhbXMubG9vcCA/IE1hdGguY2VpbCgoc2xpZGVzTGVuZ3RoIC0gc3dpcGVyLmxvb3BlZFNsaWRlcyAqIDIpIC8gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCkgOiBzd2lwZXIuc25hcEdyaWQubGVuZ3RoO1xuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmZyZWVNb2RlICYmICFzd2lwZXIucGFyYW1zLmxvb3AgJiYgbnVtYmVyT2ZCdWxsZXRzID4gc2xpZGVzTGVuZ3RoKSB7XG4gICAgICAgICAgbnVtYmVyT2ZCdWxsZXRzID0gc2xpZGVzTGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkJ1bGxldHM7IGkgKz0gMSkge1xuICAgICAgICAgIGlmIChwYXJhbXMucmVuZGVyQnVsbGV0KSB7XG4gICAgICAgICAgICBwYWdpbmF0aW9uSFRNTCArPSBwYXJhbXMucmVuZGVyQnVsbGV0LmNhbGwoc3dpcGVyLCBpLCBwYXJhbXMuYnVsbGV0Q2xhc3MpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYWdpbmF0aW9uSFRNTCArPSBcIjxcIiArIHBhcmFtcy5idWxsZXRFbGVtZW50ICsgXCIgY2xhc3M9XFxcIlwiICsgcGFyYW1zLmJ1bGxldENsYXNzICsgXCJcXFwiPjwvXCIgKyBwYXJhbXMuYnVsbGV0RWxlbWVudCArIFwiPlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICRlbC5odG1sKHBhZ2luYXRpb25IVE1MKTtcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cyA9ICRlbC5maW5kKGNsYXNzZXNUb1NlbGVjdG9yKHBhcmFtcy5idWxsZXRDbGFzcykpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdmcmFjdGlvbicpIHtcbiAgICAgICAgaWYgKHBhcmFtcy5yZW5kZXJGcmFjdGlvbikge1xuICAgICAgICAgIHBhZ2luYXRpb25IVE1MID0gcGFyYW1zLnJlbmRlckZyYWN0aW9uLmNhbGwoc3dpcGVyLCBwYXJhbXMuY3VycmVudENsYXNzLCBwYXJhbXMudG90YWxDbGFzcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFnaW5hdGlvbkhUTUwgPSBcIjxzcGFuIGNsYXNzPVxcXCJcIiArIHBhcmFtcy5jdXJyZW50Q2xhc3MgKyBcIlxcXCI+PC9zcGFuPlwiICsgJyAvICcgKyAoXCI8c3BhbiBjbGFzcz1cXFwiXCIgKyBwYXJhbXMudG90YWxDbGFzcyArIFwiXFxcIj48L3NwYW4+XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgJGVsLmh0bWwocGFnaW5hdGlvbkhUTUwpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdwcm9ncmVzc2JhcicpIHtcbiAgICAgICAgaWYgKHBhcmFtcy5yZW5kZXJQcm9ncmVzc2Jhcikge1xuICAgICAgICAgIHBhZ2luYXRpb25IVE1MID0gcGFyYW1zLnJlbmRlclByb2dyZXNzYmFyLmNhbGwoc3dpcGVyLCBwYXJhbXMucHJvZ3Jlc3NiYXJGaWxsQ2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhZ2luYXRpb25IVE1MID0gXCI8c3BhbiBjbGFzcz1cXFwiXCIgKyBwYXJhbXMucHJvZ3Jlc3NiYXJGaWxsQ2xhc3MgKyBcIlxcXCI+PC9zcGFuPlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgJGVsLmh0bWwocGFnaW5hdGlvbkhUTUwpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLnR5cGUgIT09ICdjdXN0b20nKSB7XG4gICAgICAgIHN3aXBlci5lbWl0KCdwYWdpbmF0aW9uUmVuZGVyJywgc3dpcGVyLnBhZ2luYXRpb24uJGVsWzBdKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbiA9IGNyZWF0ZUVsZW1lbnRJZk5vdERlZmluZWQoc3dpcGVyLiRlbCwgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLCBzd2lwZXIucGFyYW1zLmNyZWF0ZUVsZW1lbnRzLCB7XG4gICAgICAgIGVsOiAnc3dpcGVyLXBhZ2luYXRpb24nXG4gICAgICB9KTtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb247XG4gICAgICBpZiAoIXBhcmFtcy5lbCkgcmV0dXJuO1xuICAgICAgdmFyICRlbCA9ICQocGFyYW1zLmVsKTtcbiAgICAgIGlmICgkZWwubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnVuaXF1ZU5hdkVsZW1lbnRzICYmIHR5cGVvZiBwYXJhbXMuZWwgPT09ICdzdHJpbmcnICYmICRlbC5sZW5ndGggPiAxKSB7XG4gICAgICAgICRlbCA9IHN3aXBlci4kZWwuZmluZChwYXJhbXMuZWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdidWxsZXRzJyAmJiBwYXJhbXMuY2xpY2thYmxlKSB7XG4gICAgICAgICRlbC5hZGRDbGFzcyhwYXJhbXMuY2xpY2thYmxlQ2xhc3MpO1xuICAgICAgfVxuXG4gICAgICAkZWwuYWRkQ2xhc3MocGFyYW1zLm1vZGlmaWVyQ2xhc3MgKyBwYXJhbXMudHlwZSk7XG5cbiAgICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2J1bGxldHMnICYmIHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgICAkZWwuYWRkQ2xhc3MoXCJcIiArIHBhcmFtcy5tb2RpZmllckNsYXNzICsgcGFyYW1zLnR5cGUgKyBcIi1keW5hbWljXCIpO1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5keW5hbWljQnVsbGV0SW5kZXggPSAwO1xuXG4gICAgICAgIGlmIChwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzIDwgMSkge1xuICAgICAgICAgIHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMgPSAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ3Byb2dyZXNzYmFyJyAmJiBwYXJhbXMucHJvZ3Jlc3NiYXJPcHBvc2l0ZSkge1xuICAgICAgICAkZWwuYWRkQ2xhc3MocGFyYW1zLnByb2dyZXNzYmFyT3Bwb3NpdGVDbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMuY2xpY2thYmxlKSB7XG4gICAgICAgICRlbC5vbignY2xpY2snLCBjbGFzc2VzVG9TZWxlY3RvcihwYXJhbXMuYnVsbGV0Q2xhc3MpLCBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdmFyIGluZGV4ID0gJCh0aGlzKS5pbmRleCgpICogc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cDtcbiAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSBpbmRleCArPSBzd2lwZXIubG9vcGVkU2xpZGVzO1xuICAgICAgICAgIHN3aXBlci5zbGlkZVRvKGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGV4dGVuZChzd2lwZXIucGFnaW5hdGlvbiwge1xuICAgICAgICAkZWw6ICRlbCxcbiAgICAgICAgZWw6ICRlbFswXVxuICAgICAgfSk7XG5cbiAgICAgIGlmICghc3dpcGVyLmVuYWJsZWQpIHtcbiAgICAgICAgJGVsLmFkZENsYXNzKHBhcmFtcy5sb2NrQ2xhc3MpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbjtcbiAgICAgIGlmICghcGFyYW1zLmVsIHx8ICFzd2lwZXIucGFnaW5hdGlvbi5lbCB8fCAhc3dpcGVyLnBhZ2luYXRpb24uJGVsIHx8IHN3aXBlci5wYWdpbmF0aW9uLiRlbC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIHZhciAkZWwgPSBzd2lwZXIucGFnaW5hdGlvbi4kZWw7XG4gICAgICAkZWwucmVtb3ZlQ2xhc3MocGFyYW1zLmhpZGRlbkNsYXNzKTtcbiAgICAgICRlbC5yZW1vdmVDbGFzcyhwYXJhbXMubW9kaWZpZXJDbGFzcyArIHBhcmFtcy50eXBlKTtcbiAgICAgIGlmIChzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzKSBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzLnJlbW92ZUNsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyk7XG5cbiAgICAgIGlmIChwYXJhbXMuY2xpY2thYmxlKSB7XG4gICAgICAgICRlbC5vZmYoJ2NsaWNrJywgY2xhc3Nlc1RvU2VsZWN0b3IocGFyYW1zLmJ1bGxldENsYXNzKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgUGFnaW5hdGlvbiQxID0ge1xuICAgIG5hbWU6ICdwYWdpbmF0aW9uJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgZWw6IG51bGwsXG4gICAgICAgIGJ1bGxldEVsZW1lbnQ6ICdzcGFuJyxcbiAgICAgICAgY2xpY2thYmxlOiBmYWxzZSxcbiAgICAgICAgaGlkZU9uQ2xpY2s6IGZhbHNlLFxuICAgICAgICByZW5kZXJCdWxsZXQ6IG51bGwsXG4gICAgICAgIHJlbmRlclByb2dyZXNzYmFyOiBudWxsLFxuICAgICAgICByZW5kZXJGcmFjdGlvbjogbnVsbCxcbiAgICAgICAgcmVuZGVyQ3VzdG9tOiBudWxsLFxuICAgICAgICBwcm9ncmVzc2Jhck9wcG9zaXRlOiBmYWxzZSxcbiAgICAgICAgdHlwZTogJ2J1bGxldHMnLFxuICAgICAgICAvLyAnYnVsbGV0cycgb3IgJ3Byb2dyZXNzYmFyJyBvciAnZnJhY3Rpb24nIG9yICdjdXN0b20nXG4gICAgICAgIGR5bmFtaWNCdWxsZXRzOiBmYWxzZSxcbiAgICAgICAgZHluYW1pY01haW5CdWxsZXRzOiAxLFxuICAgICAgICBmb3JtYXRGcmFjdGlvbkN1cnJlbnQ6IGZ1bmN0aW9uIGZvcm1hdEZyYWN0aW9uQ3VycmVudChudW1iZXIpIHtcbiAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXRGcmFjdGlvblRvdGFsOiBmdW5jdGlvbiBmb3JtYXRGcmFjdGlvblRvdGFsKG51bWJlcikge1xuICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH0sXG4gICAgICAgIGJ1bGxldENsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0JyxcbiAgICAgICAgYnVsbGV0QWN0aXZlQ2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlJyxcbiAgICAgICAgbW9kaWZpZXJDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLScsXG4gICAgICAgIC8vIE5FV1xuICAgICAgICBjdXJyZW50Q2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi1jdXJyZW50JyxcbiAgICAgICAgdG90YWxDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLXRvdGFsJyxcbiAgICAgICAgaGlkZGVuQ2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi1oaWRkZW4nLFxuICAgICAgICBwcm9ncmVzc2JhckZpbGxDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLWZpbGwnLFxuICAgICAgICBwcm9ncmVzc2Jhck9wcG9zaXRlQ2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci1vcHBvc2l0ZScsXG4gICAgICAgIGNsaWNrYWJsZUNsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24tY2xpY2thYmxlJyxcbiAgICAgICAgLy8gTkVXXG4gICAgICAgIGxvY2tDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLWxvY2snXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICAgI
24510HBhZ2luYXRpb246IF9leHRlbmRzKHtcbiAgICAgICAgICBkeW5hbWljQnVsbGV0SW5kZXg6IDBcbiAgICAgICAgfSwgUGFnaW5hdGlvbilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoc3dpcGVyKSB7XG4gICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLmluaXQoKTtcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24ucmVuZGVyKCk7XG4gICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIGFjdGl2ZUluZGV4Q2hhbmdlOiBmdW5jdGlvbiBhY3RpdmVJbmRleENoYW5nZShzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnVwZGF0ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzd2lwZXIuc25hcEluZGV4ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc25hcEluZGV4Q2hhbmdlOiBmdW5jdGlvbiBzbmFwSW5kZXhDaGFuZ2Uoc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24udXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzbGlkZXNMZW5ndGhDaGFuZ2U6IGZ1bmN0aW9uIHNsaWRlc0xlbmd0aENoYW5nZShzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnJlbmRlcigpO1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc25hcEdyaWRMZW5ndGhDaGFuZ2U6IGZ1bmN0aW9uIHNuYXBHcmlkTGVuZ3RoQ2hhbmdlKHN3aXBlcikge1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnJlbmRlcigpO1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveShzd2lwZXIpIHtcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uZGVzdHJveSgpO1xuICAgICAgfSxcbiAgICAgICdlbmFibGUgZGlzYWJsZSc6IGZ1bmN0aW9uIGVuYWJsZURpc2FibGUoc3dpcGVyKSB7XG4gICAgICAgIHZhciAkZWwgPSBzd2lwZXIucGFnaW5hdGlvbi4kZWw7XG5cbiAgICAgICAgaWYgKCRlbCkge1xuICAgICAgICAgICRlbFtzd2lwZXIuZW5hYmxlZCA/ICdyZW1vdmVDbGFzcycgOiAnYWRkQ2xhc3MnXShzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24ubG9ja0NsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNsaWNrOiBmdW5jdGlvbiBjbGljayhzd2lwZXIsIGUpIHtcbiAgICAgICAgdmFyIHRhcmdldEVsID0gZS50YXJnZXQ7XG5cbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5lbCAmJiBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uaGlkZU9uQ2xpY2sgJiYgc3dpcGVyLnBhZ2luYXRpb24uJGVsLmxlbmd0aCA+IDAgJiYgISQodGFyZ2V0RWwpLmhhc0NsYXNzKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5idWxsZXRDbGFzcykpIHtcbiAgICAgICAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24gJiYgKHN3aXBlci5uYXZpZ2F0aW9uLm5leHRFbCAmJiB0YXJnZXRFbCA9PT0gc3dpcGVyLm5hdmlnYXRpb24ubmV4dEVsIHx8IHN3aXBlci5uYXZpZ2F0aW9uLnByZXZFbCAmJiB0YXJnZXRFbCA9PT0gc3dpcGVyLm5hdmlnYXRpb24ucHJldkVsKSkgcmV0dXJuO1xuICAgICAgICAgIHZhciBpc0hpZGRlbiA9IHN3aXBlci5wYWdpbmF0aW9uLiRlbC5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uaGlkZGVuQ2xhc3MpO1xuXG4gICAgICAgICAgaWYgKGlzSGlkZGVuID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzd2lwZXIuZW1pdCgncGFnaW5hdGlvblNob3cnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ3BhZ2luYXRpb25IaWRlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uJGVsLnRvZ2dsZUNsYXNzKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIFNjcm9sbGJhciA9IHtcbiAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5lbCB8fCAhc3dpcGVyLnNjcm9sbGJhci5lbCkgcmV0dXJuO1xuICAgICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXIsXG4gICAgICAgICAgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSxcbiAgICAgICAgICBwcm9ncmVzcyA9IHN3aXBlci5wcm9ncmVzcztcbiAgICAgIHZhciBkcmFnU2l6ZSA9IHNjcm9sbGJhci5kcmFnU2l6ZSxcbiAgICAgICAgICB0cmFja1NpemUgPSBzY3JvbGxiYXIudHJhY2tTaXplLFxuICAgICAgICAgICRkcmFnRWwgPSBzY3JvbGxiYXIuJGRyYWdFbCxcbiAgICAgICAgICAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyO1xuICAgICAgdmFyIG5ld1NpemUgPSBkcmFnU2l6ZTtcbiAgICAgIHZhciBuZXdQb3MgPSAodHJhY2tTaXplIC0gZHJhZ1NpemUpICogcHJvZ3Jlc3M7XG5cbiAgICAgIGlmIChydGwpIHtcbiAgICAgICAgbmV3UG9zID0gLW5ld1BvcztcblxuICAgICAgICBpZiAobmV3UG9zID4gMCkge1xuICAgICAgICAgIG5ld1NpemUgPSBkcmFnU2l6ZSAtIG5ld1BvcztcbiAgICAgICAgICBuZXdQb3MgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKC1uZXdQb3MgKyBkcmFnU2l6ZSA+IHRyYWNrU2l6ZSkge1xuICAgICAgICAgIG5ld1NpemUgPSB0cmFja1NpemUgKyBuZXdQb3M7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobmV3UG9zIDwgMCkge1xuICAgICAgICBuZXdTaXplID0gZHJhZ1NpemUgKyBuZXdQb3M7XG4gICAgICAgIG5ld1BvcyA9IDA7XG4gICAgICB9IGVsc2UgaWYgKG5ld1BvcyArIGRyYWdTaXplID4gdHJhY2tTaXplKSB7XG4gICAgICAgIG5ld1NpemUgPSB0cmFja1NpemUgLSBuZXdQb3M7XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgJGRyYWdFbC50cmFuc2Zvcm0oXCJ0cmFuc2xhdGUzZChcIiArIG5ld1BvcyArIFwicHgsIDAsIDApXCIpO1xuICAgICAgICAkZHJhZ0VsWzBdLnN0eWxlLndpZHRoID0gbmV3U2l6ZSArIFwicHhcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRkcmFnRWwudHJhbnNmb3JtKFwidHJhbnNsYXRlM2QoMHB4LCBcIiArIG5ld1BvcyArIFwicHgsIDApXCIpO1xuICAgICAgICAkZHJhZ0VsWzBdLnN0eWxlLmhlaWdodCA9IG5ld1NpemUgKyBcInB4XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMuaGl
24510kZSkge1xuICAgICAgICBjbGVhclRpbWVvdXQoc3dpcGVyLnNjcm9sbGJhci50aW1lb3V0KTtcbiAgICAgICAgJGVsWzBdLnN0eWxlLm9wYWNpdHkgPSAxO1xuICAgICAgICBzd2lwZXIuc2Nyb2xsYmFyLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAkZWxbMF0uc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgICAgICAgJGVsLnRyYW5zaXRpb24oNDAwKTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZWwgfHwgIXN3aXBlci5zY3JvbGxiYXIuZWwpIHJldHVybjtcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuJGRyYWdFbC50cmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICB9LFxuICAgIHVwZGF0ZVNpemU6IGZ1bmN0aW9uIHVwZGF0ZVNpemUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZWwgfHwgIXN3aXBlci5zY3JvbGxiYXIuZWwpIHJldHVybjtcbiAgICAgIHZhciBzY3JvbGxiYXIgPSBzd2lwZXIuc2Nyb2xsYmFyO1xuICAgICAgdmFyICRkcmFnRWwgPSBzY3JvbGxiYXIuJGRyYWdFbCxcbiAgICAgICAgICAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgICAgJGRyYWdFbFswXS5zdHlsZS53aWR0aCA9ICcnO1xuICAgICAgJGRyYWdFbFswXS5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgIHZhciB0cmFja1NpemUgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAkZWxbMF0ub2Zmc2V0V2lkdGggOiAkZWxbMF0ub2Zmc2V0SGVpZ2h0O1xuICAgICAgdmFyIGRpdmlkZXIgPSBzd2lwZXIuc2l6ZSAvIHN3aXBlci52aXJ0dWFsU2l6ZTtcbiAgICAgIHZhciBtb3ZlRGl2aWRlciA9IGRpdmlkZXIgKiAodHJhY2tTaXplIC8gc3dpcGVyLnNpemUpO1xuICAgICAgdmFyIGRyYWdTaXplO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZHJhZ1NpemUgPT09ICdhdXRvJykge1xuICAgICAgICBkcmFnU2l6ZSA9IHRyYWNrU2l6ZSAqIGRpdmlkZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkcmFnU2l6ZSA9IHBhcnNlSW50KHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmRyYWdTaXplLCAxMCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgJGRyYWdFbFswXS5zdHlsZS53aWR0aCA9IGRyYWdTaXplICsgXCJweFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJGRyYWdFbFswXS5zdHlsZS5oZWlnaHQgPSBkcmFnU2l6ZSArIFwicHhcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpdmlkZXIgPj0gMSkge1xuICAgICAgICAkZWxbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRlbFswXS5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5oaWRlKSB7XG4gICAgICAgICRlbFswXS5zdHlsZS5vcGFjaXR5ID0gMDtcbiAgICAgIH1cblxuICAgICAgZXh0ZW5kKHNjcm9sbGJhciwge1xuICAgICAgICB0cmFja1NpemU6IHRyYWNrU2l6ZSxcbiAgICAgICAgZGl2aWRlcjogZGl2aWRlcixcbiAgICAgICAgbW92ZURpdmlkZXI6IG1vdmVEaXZpZGVyLFxuICAgICAgICBkcmFnU2l6ZTogZHJhZ1NpemVcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5lbmFibGVkKSB7XG4gICAgICAgIHNjcm9sbGJhci4kZWxbc3dpcGVyLmlzTG9ja2VkID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmxvY2tDbGFzcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRQb2ludGVyUG9zaXRpb246IGZ1bmN0aW9uIGdldFBvaW50ZXJQb3NpdGlvbihlKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcblxuICAgICAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgICByZXR1cm4gZS50eXBlID09PSAndG91Y2hzdGFydCcgfHwgZS50eXBlID09PSAndG91Y2htb3ZlJyA/IGUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRYIDogZS5jbGllbnRYO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZS50eXBlID09PSAndG91Y2hzdGFydCcgfHwgZS50eXBlID09PSAndG91Y2htb3ZlJyA/IGUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRZIDogZS5jbGllbnRZO1xuICAgIH0sXG4gICAgc2V0RHJhZ1Bvc2l0aW9uOiBmdW5jdGlvbiBzZXREcmFnUG9zaXRpb24oZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgc2Nyb2xsYmFyID0gc3dpcGVyLnNjcm9sbGJhcixcbiAgICAgICAgICBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuICAgICAgdmFyICRlbCA9IHNjcm9sbGJhci4kZWwsXG4gICAgICAgICAgZHJhZ1NpemUgPSBzY3JvbGxiYXIuZHJhZ1NpemUsXG4gICAgICAgICAgdHJhY2tTaXplID0gc2Nyb2xsYmFyLnRyYWNrU2l6ZSxcbiAgICAgICAgICBkcmFnU3RhcnRQb3MgPSBzY3JvbGxiYXIuZHJhZ1N0YXJ0UG9zO1xuICAgICAgdmFyIHBvc2l0aW9uUmF0aW87XG4gICAgICBwb3NpdGlvblJhdGlvID0gKHNjcm9sbGJhci5nZXRQb2ludGVyUG9zaXRpb24oZSkgLSAkZWwub2Zmc2V0KClbc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ2xlZnQnIDogJ3RvcCddIC0gKGRyYWdTdGFydFBvcyAhPT0gbnVsbCA/IGRyYWdTdGFydFBvcyA6IGRyYWdTaXplIC8gMikpIC8gKHRyYWNrU2l6ZSAtIGRyYWdTaXplKTtcbiAgICAgIHBvc2l0aW9uUmF0aW8gPSBNYXRoLm1heChNYXRoLm1pbihwb3NpdGlvblJhdGlvLCAxKSwgMCk7XG5cbiAgICAgIGlmIChydGwpIHtcbiAgICAgICAgcG9zaXRpb25SYXRpbyA9IDEgLSBwb3NpdGlvblJhdGlvO1xuICAgICAgfVxuXG4gICAgICB2Y
24510XIgcG9zaXRpb24gPSBzd2lwZXIubWluVHJhbnNsYXRlKCkgKyAoc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSAqIHBvc2l0aW9uUmF0aW87XG4gICAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MocG9zaXRpb24pO1xuICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShwb3NpdGlvbik7XG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgfSxcbiAgICBvbkRyYWdTdGFydDogZnVuY3Rpb24gb25EcmFnU3RhcnQoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXI7XG4gICAgICB2YXIgc2Nyb2xsYmFyID0gc3dpcGVyLnNjcm9sbGJhcixcbiAgICAgICAgICAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgICB2YXIgJGVsID0gc2Nyb2xsYmFyLiRlbCxcbiAgICAgICAgICAkZHJhZ0VsID0gc2Nyb2xsYmFyLiRkcmFnRWw7XG4gICAgICBzd2lwZXIuc2Nyb2xsYmFyLmlzVG91Y2hlZCA9IHRydWU7XG4gICAgICBzd2lwZXIuc2Nyb2xsYmFyLmRyYWdTdGFydFBvcyA9IGUudGFyZ2V0ID09PSAkZHJhZ0VsWzBdIHx8IGUudGFyZ2V0ID09PSAkZHJhZ0VsID8gc2Nyb2xsYmFyLmdldFBvaW50ZXJQb3NpdGlvbihlKSAtIGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdsZWZ0JyA6ICd0b3AnXSA6IG51bGw7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgJHdyYXBwZXJFbC50cmFuc2l0aW9uKDEwMCk7XG4gICAgICAkZHJhZ0VsLnRyYW5zaXRpb24oMTAwKTtcbiAgICAgIHNjcm9sbGJhci5zZXREcmFnUG9zaXRpb24oZSk7XG4gICAgICBjbGVhclRpbWVvdXQoc3dpcGVyLnNjcm9sbGJhci5kcmFnVGltZW91dCk7XG4gICAgICAkZWwudHJhbnNpdGlvbigwKTtcblxuICAgICAgaWYgKHBhcmFtcy5oaWRlKSB7XG4gICAgICAgICRlbC5jc3MoJ29wYWNpdHknLCAxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5jc3MoJ3Njcm9sbC1zbmFwLXR5cGUnLCAnbm9uZScpO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuZW1pdCgnc2Nyb2xsYmFyRHJhZ1N0YXJ0JywgZSk7XG4gICAgfSxcbiAgICBvbkRyYWdNb3ZlOiBmdW5jdGlvbiBvbkRyYWdNb3ZlKGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXIsXG4gICAgICAgICAgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgICAgdmFyICRlbCA9IHNjcm9sbGJhci4kZWwsXG4gICAgICAgICAgJGRyYWdFbCA9IHNjcm9sbGJhci4kZHJhZ0VsO1xuICAgICAgaWYgKCFzd2lwZXIuc2Nyb2xsYmFyLmlzVG91Y2hlZCkgcmV0dXJuO1xuICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTtlbHNlIGUucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgIHNjcm9sbGJhci5zZXREcmFnUG9zaXRpb24oZSk7XG4gICAgICAkd3JhcHBlckVsLnRyYW5zaXRpb24oMCk7XG4gICAgICAkZWwudHJhbnNpdGlvbigwKTtcbiAgICAgICRkcmFnRWwudHJhbnNpdGlvbigwKTtcbiAgICAgIHN3aXBlci5lbWl0KCdzY3JvbGxiYXJEcmFnTW92ZScsIGUpO1xuICAgIH0sXG4gICAgb25EcmFnRW5kOiBmdW5jdGlvbiBvbkRyYWdFbmQoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXI7XG4gICAgICB2YXIgc2Nyb2xsYmFyID0gc3dpcGVyLnNjcm9sbGJhcixcbiAgICAgICAgICAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgICB2YXIgJGVsID0gc2Nyb2xsYmFyLiRlbDtcbiAgICAgIGlmICghc3dpcGVyLnNjcm9sbGJhci5pc1RvdWNoZWQpIHJldHVybjtcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuaXNUb3VjaGVkID0gZmFsc2U7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwuY3NzKCdzY3JvbGwtc25hcC10eXBlJywgJycpO1xuICAgICAgICAkd3JhcHBlckVsLnRyYW5zaXRpb24oJycpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLmhpZGUpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHN3aXBlci5zY3JvbGxiYXIuZHJhZ1RpbWVvdXQpO1xuICAgICAgICBzd2lwZXIuc2Nyb2xsYmFyLmRyYWdUaW1lb3V0ID0gbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICRlbC5jc3MoJ29wYWNpdHknLCAwKTtcbiAgICAgICAgICAkZWwudHJhbnNpdGlvbig0MDApO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICAgIH1cblxuICAgICAgc3dpcGVyLmVtaXQoJ3Njcm9sbGJhckRyYWdFbmQnLCBlKTtcblxuICAgICAgaWYgKHBhcmFtcy5zbmFwT25SZWxlYXNlKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvQ2xvc2VzdCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZW5hYmxlRHJhZ2dhYmxlOiBmdW5jdGlvbiBlbmFibGVEcmFnZ2FibGUoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZWwpIHJldHVybjtcbiAgICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgICB2YXIgc2Nyb2xsYmFyID0gc3dpcGVyLnNjcm9sbGJhcixcbiAgICAgICAgICB0b3VjaEV2ZW50c1RvdWNoID0gc3dpcGVyLnRvdWNoRXZlbnRzVG91Y2gsXG4gICAgICAgICAgdG91Y2hFdmVudHNEZXNrdG9wID0gc3dpcGVyLnRvdWNoRXZlbnRzRGVza3RvcCxcbiAgICAgICAgICBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgICAgIHN1cHBvcnQgPSBzd2lwZXIuc3VwcG9ydDtcbiAgICAgIHZhciAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgICAgdmFyIHRhcmdldCA9ICRlbFswXTtcbiAgICAgIHZhciBhY3RpdmVMaXN0ZW5lciA9IHN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8ge1xuICAgICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICAgICAgY2FwdHVyZTogZmFsc2VcbiAgICAgIH0gOiBmYWxzZTtcbiAgICAgIHZhciBwYXNzaXZlTGlzdGVuZXIgPSBzdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBwYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHtcbiAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgICAgY2FwdHVyZTogZmFsc2VcbiAgICAgIH0gOiBmYWxzZTtcbiAgICAgIGlmICghdGFyZ2V0KSByZXR1cm47XG5cbiAgICAgIGlmICghc3VwcG9ydC50b3VjaCkge1xuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c0Rlc2t0b3Auc3RhcnQsIHN3aXBlci5zY3JvbGxiYXIub25EcmFnU3RhcnQsIGFjdGl2ZUxpc3RlbmVyKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c0Rlc2t0b3AubW92ZSwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdNb3ZlLCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNEZXNrdG9wLmVuZCwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c1RvdWNoLnN0YXJ0LCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ1N0YXJ0LCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2gubW92ZSwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdNb3ZlLCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2guZW5kLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ0VuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRpc2FibGVEcmFnZ2FibGU6IGZ1bmN0aW9uIGRpc2FibGVEcmFnZ2FibGUoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZWwpIHJldHVybjtcbiAgICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgICB2YXIgc2Nyb2xsYmFyID0gc3dpcGVyLnNjcm9sbGJhcixcbiAgICAgICAgICB0b3VjaEV2ZW50c1RvdWNoID0gc3dpcGVyLnRvdWNoRXZlbnRzVG91Y2gsXG4gICAgICAgICAgdG91Y2hFdmVudHNEZXNrdG9wID0gc3dpcGVyLnRvdWNoRXZlbnRzRGVza3RvcCxcbiAgICAgICAgICBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgICAgIHN1cHBvcnQgPSBzd2lwZXIuc3VwcG9ydDtcbiAgICAgIHZhciAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgICAgdmFyIHRhcmdldCA9ICRlbFswXTtcbiAgICAgIHZhciBhY3RpdmVMaXN0ZW5lciA9IHN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8ge1xuICAgICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICAgICAgY2FwdHVyZTogZmFsc2VcbiAgICAgIH0gOiBmYWxzZTtcbiAgICAgIHZhciBwYXNzaXZlTGlzdGVuZXIgPSBzdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBwYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHtcbiAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgICAgY2FwdHVyZTogZmFsc2VcbiAgICAgIH0gOiBmYWxzZTtcbiAgICAgIGlmICghdGFyZ2V0KSByZXR1cm47XG5cbiAgICAgIGlmICghc3VwcG9ydC50b3VjaCkge1xuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c0Rlc2t0b3Auc3RhcnQsIHN3aXBlci5zY3JvbGxiYXIub25EcmFnU3RhcnQsIGFjdGl2ZUxpc3RlbmVyKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c0Rlc2t0b3AubW92ZSwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdNb3ZlLCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNEZXNrdG9wLmVuZCwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c1RvdWNoLnN0YXJ0LCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ1N0YXJ0LCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2gubW92ZSwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdNb3ZlLCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2guZW5kLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ0VuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBzY3JvbGxiYXIgPSBzd2lwZXIuc2Nyb2xsYmFyLFxuICAgICAgICAgICRzd2lwZXJFbCA9IHN3aXBlci4kZWw7XG4gICAgICBzd2lwZXIucGFyYW1zLnNjcm9sbGJhciA9IGNyZWF0ZUVsZW1lbnRJZk5vdERlZmluZWQoJHN3aXBlckVsLCBzd2lwZXIucGFyYW1zLnNjcm9sbGJhciwgc3dpcGVyLnBhcmFtcy5jcmVhdGVFbGVtZW50cywge1xuICAgICAgICBlbDogJ3N3aXBlci1zY3JvbGxiYXInXG4gICAgICB9KTtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnNjcm9sbGJhcjtcbiAgICAgIGlmICghcGFyYW1zLmVsKSByZXR1cm47XG4gICAgICB2YXIgJGVsID0gJChwYXJhbXMuZWwpO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy51bmlxdWVOYXZFbGVtZW50cyAmJiB0eXBlb2YgcGFyYW1zLmVsID09PSAnc3RyaW5nJyAmJiAkZWwubGVuZ3RoID4gMSAmJiAkc3dpcGVyRWwuZmluZChwYXJhbXMuZWwpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAkZWwgPSAkc3dpcGVyRWwuZmluZChwYXJhbXMuZWwpO1xuICAgICAgfVxuXG4gICAgICB2YXIgJGRyYWdFbCA9ICRlbC5maW5kKFwiLlwiICsgc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZHJhZ0NsYXNzKTtcblxuICAgICAgaWYgKCRkcmFnRWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICRkcmFnRWwgPSAkKFwiPGRpdiBjbGFzcz1cXFwiXCIgKyBzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5kcmFnQ2xhc3MgKyBcIlxcXCI+PC9kaXY+XCIpO1xuICAgICAgICAkZWwuYXBwZW5kKCRkcmFnRWwpO1xuICAgICAgfVxuXG4gICAgICBleHRlbmQoc2Nyb2xsYmFyLCB7XG4gICAgICAgICRlbDogJGVsLFxuICAgICAgICBlbDogJGVsWzBdLFxuICAgICAgICAkZHJhZ0VsOiAkZHJhZ0VsLFxuICAgICAgICBkcmFnRWw6ICRkcmFnRWxbMF1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAocGFyYW1zLmRyYWdnYWJsZSkge1xuICAgICAgICBzY3JvbGxiYXIuZW5hYmxlRHJhZ2dhYmxlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgkZWwpIHtcbiAgICAgICAgJGVsW3N3aXBlci5lbmFibGVkID8gJ3JlbW92ZUNsYXNzJyA6ICdhZGRDbGFzcyddKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmxvY2tDbGFzcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIuc2Nyb2xsYmFyLmRpc2FibGVEcmFnZ2FibGUoKTtcbiAgICB9XG4gIH07XG4gIHZhciBTY3JvbGxiYXIkMSA9IHtcbiAgICBuYW1lOiAnc2Nyb2xsYmFyJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIHNjcm9sbGJhcjoge1xuICAgICAgICBlbDogbnVsbCxcbiAgICAgICAgZHJhZ1NpemU6ICdhdXRvJyxcbiAgICAgICAgaGlkZTogZmFsc2UsXG4gICAgICAgIGRyYWdnYWJsZTogZmFsc2UsXG4gICAgICAgIHNuYXBPblJlbGVhc2U6IHRydWUsXG4gICAgICAgIGxvY2tDbGFzczogJ3N3aXBlci1zY3JvbGxiYXItbG9jaycsXG4gICAgICAgIGRyYWdDbGFzczogJ3N3aXBlci1zY3JvbGxiYXItZHJhZydcbiAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBiaW5kTW9kdWxlTWV0aG9kcyhzd2lwZXIsIHtcbiAgICAgICAgc2Nyb2xsYmFyOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgaXNUb3VjaGVkOiBmYWxzZSxcbiAgICAgICAgICB0aW1lb3V0OiBudWxsLFxuICAgICAgICAgIGRyYWdUaW1lb3V0OiBudWxsXG4gICAgICAgIH0sIFNjcm9sbGJhcilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoc3dpcGVyKSB7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIuaW5pdCgpO1xuICAgICAgICBzd2lwZXIuc2Nyb2xsYmFyLnVwZGF0ZVNpemUoKTtcbiAgICAgICAgc3dpcGVyLnNjcm9sbGJhci5zZXRUcmFuc2xhdGUoKTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShzd2lwZXIpIHtcbiAgICAgICAgc3dpcGVyLnNjcm9sbGJhci51cGRhdGVTaXplKCk7XG4gICAgICB9LFxuICAgICAgcmVzaXplOiBmdW5jdGlvbiByZXNpemUoc3dpcGVyKSB7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIudXBkYXRlU2l6ZSgpO1xuICAgICAgfSxcbiAgICAgIG9ic2VydmVyVXBkYXRlOiBmdW5jdGlvbiBvYnNlcnZlclVwZGF0ZShzd2lwZXIpIHtcbiAgICAgICAgc3dpcGVyLnNjcm9sbGJhci51cGRhdGVTaXplKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoc3dpcGVyKSB7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIuc2V0VHJhbnNsYXRlKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihzd2lwZXIsIGR1cmF0aW9uKSB7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIuc2V0VHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgICB9LFxuICAgICAgJ2VuYWJsZSBkaXNhYmxlJzogZnVuY3Rpb24gZW5hYmxlRGlzYWJsZShzd2lwZXIpIHtcbiAgICAgICAgdmFyICRlbCA9IHN3aXBlci5zY3JvbGxiYXIuJGVsO1xuXG4gICAgICAgIGlmICgkZWwpIHtcbiAgICAgICAgICAkZWxbc3dpcGVyLmVuYWJsZWQgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIubG9ja0NsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koc3dpcGVyKSB7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIuZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgUGFyYWxsYXggPSB7XG4gICAgc2V0VHJhbnNmb3JtOiBmdW5jdGlvbiBzZXRUcmFuc2Zvcm0oZWwsIHByb2dyZXNzKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBydGwgPSBzd2lwZXIucnRsO1xuICAgICAgdmFyICRlbCA9ICQoZWwpO1xuICAgICAgdmFyIHJ0bEZhY3RvciA9IHJ0bCA/IC0xIDogMTtcbiAgICAgIHZhciBwID0gJGVsLmF0dHIoJ2RhdGEtc3dpcGVyLXBhcmFsbGF4JykgfHwgJzAnO1xuICAgICAgdmFyIHggPSAkZWwuYXR0cignZGF0YS1zd2lwZXItcGFyYWxsYXgteCcpO1xuICAgICAgdmFyIHkgPSAkZWwuYXR0cignZGF0YS1zd2lwZXItcGFyYWxsYXgteScpO1xuICAgICAgdmFyIHNjYWxlID0gJGVsLmF0dHIoJ2RhdGEtc3dpcGVyLXBhcmFsbGF4LXNjYWxlJyk7XG4gICAgICB2YXIgb3BhY2l0eSA9ICRlbC5hdHRyKCdkYXRhLXN3aXBlci1wYXJhbGxheC1vcGFjaXR5Jyk7XG5cbiAgICAgIGlmICh4IHx8IHkpIHtcbiAgICAgICAgeCA9IHggfHwgJzAnO1xuICAgICAgICB5ID0geSB8fCAnMCc7XG4gICAgICB9IGVsc2UgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgICB4ID0gcDtcbiAgICAgICAgeSA9ICcwJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHkgPSBwO1xuICAgICAgICB4ID0gJzAnO1xuICAgICAgfVxuXG4gICAgICBpZiAoeC5pbmRleE9mKCclJykgPj0gMCkge1xuICAgICAgICB4ID0gcGFyc2VJbnQoeCwgMTApICogcHJvZ3Jlc3MgKiBydGxGYWN0b3IgKyBcIiVcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHggPSB4ICogcHJvZ3Jlc3MgKiBydGxGYWN0b3IgKyBcInB4XCI7XG4gICAgICB9XG5cbiAgICAgIGlmICh5LmluZGV4T2YoJyUnKSA+PSAwKSB7XG4gICAgICAgIHkgPSBwYXJzZUludCh5LCAxMCkgKiBwcm9ncmVzcyArIFwiJVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeSA9IHkgKiBwcm9ncmVzcyArIFwicHhcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcGFjaXR5ICE9PSAndW5kZWZpbmVkJyAmJiBvcGFjaXR5ICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBjdXJyZW50T3BhY2l0eSA9IG9wYWNpdHkgLSAob3BhY2l0eSAtIDEpICogKDEgLSBNYXRoLmFicyhwcm9ncmVzcykpO1xuICAgICAgICAkZWxbMF0uc3R5bGUub3BhY2l0eSA9IGN1cnJlbnRPcGFjaXR5O1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHNjYWxlID09PSAndW5kZWZpbmVkJyB8fCBzY2FsZSA9PT0gbnVsbCkge1xuICAgICAgICAkZWwudHJhbnNmb3JtKFwidHJhbnNsYXRlM2QoXCIgKyB4ICsgXCIsIFwiICsgeSArIFwiLCAwcHgpXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGN1cnJlbnRTY2FsZSA9IHNjYWxlIC0gKHNjYWxlIC0gMSkgKiAoMSAtIE1hdGguYWJzKHByb2dyZXNzKSk7XG4gICAgICAgICRlbC50cmFuc2Zvcm0oXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcIiwgXCIgKyB5ICsgXCIsIDBweCkgc2NhbGUoXCIgKyBjdXJyZW50U2NhbGUgKyBcIilcIik7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyICRlbCA9IHN3aXBlci4kZWwsXG4gICAgICAgICAgc2xpZGVzID0gc3dpcGVyLnNsaWRlcyxcbiAgICAgICAgICBwcm9ncmVzcyA9IHN3aXBlci5wcm9ncmVzcyxcbiAgICAgICAgICBzbmFwR3JpZCA9IHN3aXBlci5zbmFwR3JpZDtcbiAgICAgICRlbC5jaGlsZHJlbignW2RhdGEtc3dpcGVyLXBhcmFsbGF4XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXhdLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgteV0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC1vcGFjaXR5XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXNjYWxlXScpLmVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgIHN3aXBlci5wYXJhbGxheC5zZXRUcmFuc2Zvcm0oZWwsIHByb2dyZXNzKTtcbiAgICAgIH0pO1xuICAgICAgc2xpZGVzLmVhY2goZnVuY3Rpb24gKHNsaWRlRWwsIHNsaWRlSW5kZXgpIHtcbiAgICAgICAgdmFyIHNsaWRlUHJvZ3Jlc3MgPSBzbGlkZUVsLnByb2dyZXNzO1xuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwID4gMSAmJiBzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgIT09ICdhdXRvJykge1xuICAgICAgICAgIHNsaWRlUHJvZ3Jlc3MgKz0gTWF0aC5jZWlsKHNsaWRlSW5kZXggLyAyKSAtIHByb2dyZXNzICogKHNuYXBHcmlkLmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2xpZGVQcm9ncmVzcyA9IE1hdGgubWluKE1hdGgubWF4KHNsaWRlUHJvZ3Jlc3MsIC0xKSwgMSk7XG4gICAgICAgICQoc2xpZGVFbCkuZmluZCgnW2RhdGEtc3dpcGVyLXBhcmFsbGF4XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXhdLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgteV0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC1vcGFjaXR5XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXNjYWxlXScpLmVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgc3dpcGVyLnBhcmFsbGF4LnNldFRyYW5zZm9ybShlbCwgc2xpZGVQcm9ncmVzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgICBpZiAoZHVyYXRpb24gPT09IHZvaWQgMCkge1xuICAgICAgICBkdXJhdGlvbiA9IHRoaXMucGFyYW1zLnNwZWVkO1xuICAgICAgfVxuXG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciAkZWwgPSBzd2lwZXIuJGVsO1xuICAgICAgJGVsLmZpbmQoJ1tkYXRhLXN3aXBlci1wYXJhbGxheF0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC14XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXldLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgtb3BhY2l0eV0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC1zY2FsZV0nKS5lYWNoKGZ1bmN0aW9uIChwYXJhbGxheEVsKSB7XG4gICAgICAgIHZhciAkcGFyYWxsYXhFbCA9ICQocGFyYWxsYXhFbCk7XG4gICAgICAgIHZhciBwYXJhbGxheER1cmF0aW9uID0gcGFyc2VJbnQoJHBhcmFsbGF4RWwuYXR0cignZGF0YS1zd2lwZXItcGFyYWxsYXgtZHVyYXRpb24nKSwgMTApIHx8IGR1cmF0aW9uO1xuICAgICAgICBpZiAoZHVyYXRpb24gPT09IDApIHBhcmFsbGF4RHVyYXRpb24gPSAwO1xuICAgICAgICAkcGFyYWxsYXhFbC50cmFuc2l0aW9uKHBhcmFsbGF4RHVyYXRpb24pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICB2YXIgUGFyYWxsYXgkMSA9IHtcbiAgICBuYW1lOiAncGFyYWxsYXgnLFxuICAgIHBhcmFtczoge1xuICAgICAgcGFyYWxsYXg6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBiaW5kTW9kdWxlTWV0aG9kcyhzd2lwZXIsIHtcbiAgICAgICAgcGFyYWxsYXg6IF9leHRlbmRzKHt9LCBQYXJhbGxheClcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGJlZm9yZUluaXQ6IGZ1bmN0aW9uIGJlZm9yZUluaXQoc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5wYXJhbGxheC5lbmFibGVkKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5wYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcyA9IHRydWU7XG4gICAgICAgIHN3aXBlci5vcmlnaW5hbFBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KHN3aXBlcikge1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMucGFyYWxsYXguZW5hYmxlZCkgcmV0dXJuO1xuICAgICAgICBzd2lwZXIucGFyYWxsYXguc2V0VHJhbnNsYXRlKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5wYXJhbGxheC5lbmFibGVkKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5wYXJhbGxheC5zZXRUcmFuc2xhdGUoKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKHN3aXBlciwgZHVyYXRpb24pIHtcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnBhcmFsbGF4LmVuYWJsZWQpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLnBhcmFsbGF4LnNldFRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgWm9vbSA9IHtcbiAgICAvLyBDYWxjIFNjYWxlIEZyb20gTXVsdGktdG91Y2hlc1xuICAgIGdldERpc3RhbmNlQmV0d2VlblRvdWNoZXM6IGZ1bmN0aW9uIGdldERpc3RhbmNlQmV0d2VlblRvdWNoZXMoZSkge1xuICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPCAyKSByZXR1cm4gMTtcbiAgICAgIHZhciB4MSA9IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWDtcbiAgICAgIHZhciB5MSA9IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWTtcbiAgICAgIHZhciB4MiA9IGUudGFyZ2V0VG91Y2hlc1sxXS5wYWdlWDtcbiAgICAgIHZhciB5MiA9IGUudGFyZ2V0VG91Y2hlc1sxXS5wYWdlWTtcbiAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydChNYXRoLnBvdyh4MiAtIHgxLCAyKSArIE1hdGgucG93KHkyIC0geTEsIDIpKTtcbiAgICAgIHJldHVybiBkaXN0YW5jZTtcbiAgICB9LFxuICAgIC8vIEV2ZW50c1xuICAgIG9uR2VzdHVyZVN0YXJ0OiBmdW5jdGlvbiBvbkdlc3R1cmVTdGFydChlKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBzdXBwb3J0ID0gc3dpcGVyLnN1cHBvcnQ7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy56b29tO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlO1xuICAgICAgem9vbS5mYWtlR2VzdHVyZVRvdWNoZWQgPSBmYWxzZTtcbiAgICAgIHpvb20uZmFrZUdlc3R1cmVNb3ZlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoIXN1cHBvcnQuZ2VzdHVyZXMpIHtcbiAgICAgICAgaWYgKGUudHlwZSAhPT0gJ3RvdWNoc3RhcnQnIHx8IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnICYmIGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgem9vbS5mYWtlR2VzdHVyZVRvdWNoZWQgPSB0cnVlO1xuICAgICAgICBnZXN0dXJlLnNjYWxlU3RhcnQgPSBab29tLmdldERpc3RhbmNlQmV0d2VlblRvdWNoZXMoZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZ2VzdHVyZS4kc2xpZGVFbCB8fCAhZ2VzdHVyZS4kc2xpZGVFbC5sZW5ndGgpIHtcbiAgICAgICAgZ2VzdHVyZS4kc2xpZGVFbCA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoXCIuXCIgKyBzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3MpO1xuICAgICAgICBpZiAoZ2VzdHVyZS4kc2xpZGVFbC5sZW5ndGggPT09IDApIGdlc3R1cmUuJHNsaWRlRWwgPSBzd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICAgIGdlc3R1cmUuJGltYWdlRWwgPSBnZXN0dXJlLiRzbGlkZUVsLmZpbmQoJ2ltZywgc3ZnLCBjYW52YXMsIHBpY3R1cmUsIC5zd2lwZXItem9vbS10YXJnZXQnKTtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwgPSBnZXN0dXJlLiRpbWFnZUVsLnBhcmVudChcIi5cIiArIHBhcmFtcy5jb250YWluZXJDbGFzcyk7XG4gICAgICAgIGdlc3R1cmUubWF4UmF0aW8gPSBnZXN0dXJlLiRpbWFnZVdyYXBFbC5hdHRyKCdkYXRhLXN3aXBlci16b29tJykgfHwgcGFyYW1zLm1heFJhdGlvO1xuXG4gICAgICAgIGlmIChnZXN0dXJlLiRpbWFnZVdyYXBFbC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBnZXN0dXJlLiRpbWFnZUVsID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2VzdHVyZS4kaW1hZ2VFbCkge1xuICAgICAgICBnZXN0dXJlLiRpbWFnZUVsLnRyYW5zaXRpb24oMCk7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci56b29tLmlzU2NhbGluZyA9IHRydWU7XG4gICAgfSxcbiAgICBvbkdlc3R1cmVDaGFuZ2U6IGZ1bmN0aW9uIG9uR2VzdHVyZUNoYW5nZShlKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBzdXBwb3J0ID0gc3dpcGVyLnN1cHBvcnQ7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy56b29tO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlO1xuXG4gICAgICBpZiAoIXN1cHBvcnQuZ2VzdHVyZXMpIHtcbiAgICAgICAgaWYgKGUudHlwZSAhPT0gJ3RvdWNobW92ZScgfHwgZS50eXBlID09PSAndG91Y2htb3ZlJyAmJiBlLnRhcmdldFRvdWNoZXMubGVuZ3RoIDwgMikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvb20uZmFrZUdlc3R1cmVNb3ZlZCA9IHRydWU7XG4gICAgICAgIGdlc3R1cmUuc2NhbGVNb3ZlID0gWm9vbS5nZXREaXN0YW5jZUJldHdlZW5Ub3VjaGVzKGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKGUudHlwZSA9PT0gJ2dlc3R1cmVjaGFuZ2UnKSB6b29tLm9uR2VzdHVyZVN0YXJ0KGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3J0Lmdlc3R1cmVzKSB7XG4gICAgICAgIHpvb20uc2NhbGUgPSBlLnNjYWxlICogem9vbS5jdXJyZW50U2NhbGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB6b29tLnNjYWxlID0gZ2VzdHVyZS5zY2FsZU1vdmUgLyBnZXN0dXJlLnNjYWxlU3RhcnQgKiB6b29tLmN1cnJlbnRTY2FsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHpvb20uc2NhbGUgPiBnZXN0dXJlLm1heFJhdGlvKSB7XG4gICAgICAgIHpvb20uc2NhbGUgPSBnZXN0dXJlLm1heFJhdGlvIC0gMSArIE1hdGgucG93KHpvb20uc2NhbGUgLSBnZXN0dXJlLm1heFJhdGlvICsgMSwgMC41KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHpvb20uc2NhbGUgPCBwYXJhbXMubWluUmF0aW8pIHtcbiAgICAgICAgem9vbS5zY2FsZSA9IHBhcmFtcy5taW5SYXRpbyArIDEgLSBNYXRoLnBvdyhwYXJhbXMubWluUmF0aW8gLSB6b29tLnNjYWxlICsgMSwgMC41KTtcbiAgICAgIH1cblxuICAgICAgZ2VzdHVyZS4kaW1hZ2VFbC50cmFuc2Zvcm0oXCJ0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoXCIgKyB6b29tLnNjYWxlICsgXCIpXCIpO1xuICAgIH0sXG4gICAgb25HZXN0dXJlRW5kOiBmdW5jdGlvbiBvbkdlc3R1cmVFbmQoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgZGV2aWNlID0gc3dpcGVyLmRldmljZTtcbiAgICAgIHZhciBzdXBwb3J0ID0gc3dpcGVyLnN1cHBvcnQ7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy56b29tO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlO1xuXG4gICAgICBpZiAoIXN1cHBvcnQuZ2VzdHVyZXMpIHtcbiAgICAgICAgaWYgKCF6b29tLmZha2VHZXN0dXJlVG91Y2hlZCB8fCAhem9vbS5mYWtlR2VzdHVyZU1vdmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGUudHlwZSAhPT0gJ3RvdWNoZW5kJyB8fCBlLnR5cGUgPT09ICd0b3VjaGVuZCcgJiYgZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGggPCAyICYmICFkZXZpY2UuYW5kcm9pZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvb20uZmFrZUdlc3R1cmVUb3VjaGVkID0gZmFsc2U7XG4gICAgICAgIHpvb20uZmFrZUdlc3R1cmVNb3ZlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIHpvb20uc2NhbGUgPSBNYXRoLm1heChNYXRoLm1pbih6b29tLnNjYWxlLCBnZXN0dXJlLm1heFJhdGlvKSwgcGFyYW1zLm1pblJhdGlvKTtcbiAgICAgIGdlc3R1cmUuJGltYWdlRWwudHJhbnNpdGlvbihzd2lwZXIucGFyYW1zLnNwZWVkKS50cmFuc2Zvcm0oXCJ0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoXCIgKyB6b29tLnNjYWxlICsgXCIpXCIpO1xuICAgICAgem9vbS5jdXJyZW50U2NhbGUgPSB6b29tLnNjYWxlO1xuICAgICAgem9vbS5pc1NjYWxpbmcgPSBmYWxzZTtcbiAgICAgIGlmICh6b29tLnNjYWxlID09PSAxKSBnZXN0dXJlLiRzbGlkZUVsID0gdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgb25Ub3VjaFN0YXJ0OiBmdW5jdGlvbiBvblRvdWNoU3RhcnQoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgZGV2aWNlID0gc3dpcGVyLmRldmljZTtcbiAgICAgIHZhciB6b29tID0gc3dpcGVyLnpvb207XG4gICAgICB2YXIgZ2VzdHVyZSA9IHpvb20uZ2VzdHVyZSxcbiAgICAgICAgICBpbWFnZSA9IHpvb20uaW1hZ2U7XG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIGlmIChpbWFnZS5pc1RvdWNoZWQpIHJldHVybjtcbiAgICAgIGlmIChkZXZpY2UuYW5kcm9pZCAmJiBlLmNhbmNlbGFibGUpIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGltYWdlLmlzVG91Y2hlZCA9IHRydWU7XG4gICAgICBpbWFnZS50b3VjaGVzU3RhcnQueCA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnID8gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VYIDogZS5wYWdlWDtcbiAgICAgIGltYWdlLnRvdWNoZXNTdGFydC55ID0gZS50eXBlID09PSAndG91Y2hzdGFydCcgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVkgOiBlLnBhZ2VZO1xuICAgIH0sXG4gICAgb25Ub3VjaE1vdmU6IGZ1bmN0aW9uIG9uVG91Y2hNb3ZlKGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlLFxuICAgICAgICAgIGltYWdlID0gem9vbS5pbWFnZSxcbiAgICAgICAgICB2ZWxvY2l0eSA9IHpvb20udmVsb2NpdHk7XG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIHN3aXBlci5hbGxvd0NsaWNrID0gZmFsc2U7XG4gICAgICBpZiAoIWltYWdlLmlzVG91Y2hlZCB8fCAhZ2VzdHVyZS4kc2xpZGVFbCkgcmV0dXJuO1xuXG4gICAgICBpZiAoIWltYWdlLmlzTW92ZWQpIHtcbiAgICAgICAgaW1hZ2Uud2lkdGggPSBnZXN0dXJlLiRpbWFnZUVsWzBdLm9mZnNldFdpZHRoO1xuICAgICAgICBpbWFnZS5oZWlnaHQgPSBnZXN0dXJlLiRpbWFnZUVsWzBdLm9mZnNldEhlaWdodDtcbiAgICAgICAgaW1hZ2Uuc3RhcnRYID0gZ2V0VHJhbnNsYXRlKGdlc3R1cmUuJGltYWdlV3JhcEVsWzBdLCAneCcpIHx8IDA7XG4gICAgICAgIGltYWdlLnN0YXJ0WSA9IGdldFRyYW5zbGF0ZShnZXN0dXJlLiRpbWFnZVdyYXBFbFswXSwgJ3knKSB8fCAwO1xuICAgICAgICBnZXN0dXJlLnNsaWRlV2lkdGggPSBnZXN0dXJlLiRzbGlkZUVsWzBdLm9mZnNldFdpZHRoO1xuICAgICAgICBnZXN0dXJlLnNsaWRlSGVpZ2h0ID0gZ2VzdHVyZS4kc2xpZGVFbFswXS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGdlc3R1cmUuJGltYWdlV3JhcEVsLnRyYW5zaXRpb24oMCk7XG5cbiAgICAgICAgaWYgKHN3aXBlci5ydGwpIHtcbiAgICAgICAgICBpbWFnZS5zdGFydFggPSAtaW1hZ2Uuc3RhcnRYO1xuICAgICAgICAgIGltYWdlLnN0YXJ0WSA9IC1pbWFnZS5zdGFydFk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gRGVmaW5lIGlmIHdlIG5lZWQgaW1hZ2UgZHJhZ1xuXG5cbiAgICAgIHZhciBzY2FsZWRXaWR0aCA9IGltYWdlLndpZHRoICogem9vbS5zY2FsZTtcbiAgICAgIHZhciBzY2FsZWRIZWlnaHQgPSBpbWFnZS5oZWlnaHQgKiB6b29tLnNjYWxlO1xuICAgICAgaWYgKHNjYWxlZFdpZHRoIDwgZ2VzdHVyZS5zbGlkZVdpZHRoICYmIHNjYWxlZEhlaWdodCA8IGdlc3R1cmUuc2xpZGVIZWlnaHQpIHJldHVybjtcbiAgICAgIGltYWdlLm1pblggPSBNYXRoLm1pbihnZXN0dXJlLnNsaWRlV2lkdGggLyAyIC0gc2NhbGVkV2lkdGggLyAyLCAwKTtcbiAgICAgIGltYWdlLm1heFggPSAtaW1hZ2UubWluWDtcbiAgICAgIGltYWdlLm1pblkgPSBNYXRoLm1pbihnZXN0dXJlLnNsaWRlSGVpZ2h0IC8gMiAtIHNjYWxlZEhlaWdodCAvIDIsIDApO1xuICAgICAgaW1hZ2UubWF4WSA9IC1pbWFnZS5taW5ZO1xuICAgICAgaW1hZ2UudG91Y2hlc0N1cnJlbnQueCA9IGUudHlwZSA9PT0gJ3RvdWNobW92ZScgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVggOiBlLnBhZ2VYO1xuICAgICAgaW1hZ2UudG91Y2hlc0N1cnJlbnQueSA9IGUudHlwZSA9PT0gJ3RvdWNobW92ZScgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVkgOiBlLnBhZ2VZO1xuXG4gICAgICBpZiAoIWltYWdlLmlzTW92ZWQgJiYgIXpvb20uaXNTY2FsaW5nKSB7XG4gICAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkgJiYgKE1hdGguZmxvb3IoaW1hZ2UubWluWCkgPT09IE1hdGguZmxvb3IoaW1hZ2Uuc3RhcnRYKSAmJiBpbWFnZS50b3VjaGVzQ3VycmVudC54IDwgaW1hZ2UudG91Y2hlc1N0YXJ0LnggfHwgTWF0aC5mbG9vcihpbWFnZS5tYXhYKSA9PT0gTWF0aC5mbG9vcihpbWFnZS5zdGFydFgpICYmIGltYWdlLnRvdWNoZXNDdXJyZW50LnggPiBpbWFnZS50b3VjaGVzU3RhcnQueCkpIHtcbiAgICAgICAgICBpbWFnZS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN3aXBlci5pc0hvcml6b250YWwoKSAmJiAoTWF0aC5mbG9vcihpbWFnZS5taW5ZKSA9PT0gTWF0aC5mbG9vcihpbWFnZS5zdGFydFkpICYmIGltYWdlLnRvdWNoZXNDdXJyZW50LnkgPCBpbWFnZS50b3VjaGVzU3RhcnQueSB8fCBNYXRoLmZsb29yKGltYWdlLm1heFkpID09PSBNYXRoLmZsb29yKGltYWdlLnN0YXJ0WSkgJiYgaW1hZ2UudG91Y2hlc0N1cnJlbnQueSA+IGltYWdlLnRvdWNoZXNTdGFydC55KSkge1xuICAgICAgICAgIGltYWdlLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZS5jYW5jZWxhYmxlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cblxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGltYWdlLmlzTW92ZWQgPSB0cnVlO1xuICAgICAgaW1hZ2UuY3VycmVudFggPSBpbWFnZS50b3VjaGVzQ3VycmVudC54IC0gaW1hZ2UudG91Y2hlc1N0YXJ0LnggKyBpbWFnZS5zdGFydFg7XG4gICAgICBpbWFnZS5jdXJyZW50WSA9IGltYWdlLnRvdWNoZXNDdXJyZW50LnkgLSBpbWFnZS50b3VjaGVzU3RhcnQueSArIGltYWdlLnN0YXJ0WTtcblxuICAgICAgaWYgKGltYWdlLmN1cnJlbnRYIDwgaW1hZ2UubWluWCkge1xuICAgICAgICBpbWFnZS5jdXJyZW50WCA9IGltYWdlLm1pblggKyAxIC0gTWF0aC5wb3coaW1hZ2UubWluWCAtIGltYWdlLmN1cnJlbnRYICsgMSwgMC44KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGltYWdlLmN1cnJlbnRYID4gaW1hZ2UubWF4WCkge1xuICAgICAgICBpbWFnZS5jdXJyZW50WCA9IGltYWdlLm1heFggLSAxICsgTWF0aC5wb3coaW1hZ2UuY3VycmVudFggLSBpbWFnZS5tYXhYICsgMSwgMC44KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGltYWdlLmN1cnJlbnRZIDwgaW1hZ2UubWluWSkge1xuICAgICAgICBpbWFnZS5jdXJyZW50WSA9IGltYWdlLm1pblkgKyAxIC0gTWF0aC5wb3coaW1hZ2UubWluWSAtIGltYWdlLmN1cnJlbnRZICsgMSwgMC44KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGltYWdlLmN1cnJlbnRZID4gaW1hZ2UubWF4WSkge1xuICAgICAgICBpbWFnZS5jdXJyZW50WSA9IGltYWdlLm1heFkgLSAxICsgTWF0aC5wb3coaW1hZ2UuY3VycmVudFkgLSBpbWFnZS5tYXhZICsgMSwgMC44KTtcbiAgICAgIH0gLy8gVmVsb2NpdHlcblxuXG4gICAgICBpZiAoIXZlbG9jaXR5LnByZXZQb3NpdGlvblgpIHZlbG9jaXR5LnByZXZQb3NpdGlvblggPSBpbWFnZS50b3VjaGVzQ3VycmVudC54O1xuICAgICAgaWYgKCF2ZWxvY2l0eS5wcmV2UG9zaXRpb25ZKSB2ZWxvY2l0eS5wcmV2UG9zaXRpb25ZID0gaW1hZ2UudG91Y2hlc0N1cnJlbnQueTtcbiAgICAgIGlmICghdmVsb2NpdHkucHJldlRpbW
24510UpIHZlbG9jaXR5LnByZXZUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgIHZlbG9jaXR5LnggPSAoaW1hZ2UudG91Y2hlc0N1cnJlbnQueCAtIHZlbG9jaXR5LnByZXZQb3NpdGlvblgpIC8gKERhdGUubm93KCkgLSB2ZWxvY2l0eS5wcmV2VGltZSkgLyAyO1xuICAgICAgdmVsb2NpdHkueSA9IChpbWFnZS50b3VjaGVzQ3VycmVudC55IC0gdmVsb2NpdHkucHJldlBvc2l0aW9uWSkgLyAoRGF0ZS5ub3coKSAtIHZlbG9jaXR5LnByZXZUaW1lKSAvIDI7XG4gICAgICBpZiAoTWF0aC5hYnMoaW1hZ2UudG91Y2hlc0N1cnJlbnQueCAtIHZlbG9jaXR5LnByZXZQb3NpdGlvblgpIDwgMikgdmVsb2NpdHkueCA9IDA7XG4gICAgICBpZiAoTWF0aC5hYnMoaW1hZ2UudG91Y2hlc0N1cnJlbnQueSAtIHZlbG9jaXR5LnByZXZQb3NpdGlvblkpIDwgMikgdmVsb2NpdHkueSA9IDA7XG4gICAgICB2ZWxvY2l0eS5wcmV2UG9zaXRpb25YID0gaW1hZ2UudG91Y2hlc0N1cnJlbnQueDtcbiAgICAgIHZlbG9jaXR5LnByZXZQb3NpdGlvblkgPSBpbWFnZS50b3VjaGVzQ3VycmVudC55O1xuICAgICAgdmVsb2NpdHkucHJldlRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwudHJhbnNmb3JtKFwidHJhbnNsYXRlM2QoXCIgKyBpbWFnZS5jdXJyZW50WCArIFwicHgsIFwiICsgaW1hZ2UuY3VycmVudFkgKyBcInB4LDApXCIpO1xuICAgIH0sXG4gICAgb25Ub3VjaEVuZDogZnVuY3Rpb24gb25Ub3VjaEVuZCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlLFxuICAgICAgICAgIGltYWdlID0gem9vbS5pbWFnZSxcbiAgICAgICAgICB2ZWxvY2l0eSA9IHpvb20udmVsb2NpdHk7XG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgaWYgKCFpbWFnZS5pc1RvdWNoZWQgfHwgIWltYWdlLmlzTW92ZWQpIHtcbiAgICAgICAgaW1hZ2UuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICAgIGltYWdlLmlzTW92ZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpbWFnZS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICAgIGltYWdlLmlzTW92ZWQgPSBmYWxzZTtcbiAgICAgIHZhciBtb21lbnR1bUR1cmF0aW9uWCA9IDMwMDtcbiAgICAgIHZhciBtb21lbnR1bUR1cmF0aW9uWSA9IDMwMDtcbiAgICAgIHZhciBtb21lbnR1bURpc3RhbmNlWCA9IHZlbG9jaXR5LnggKiBtb21lbnR1bUR1cmF0aW9uWDtcbiAgICAgIHZhciBuZXdQb3NpdGlvblggPSBpbWFnZS5jdXJyZW50WCArIG1vbWVudHVtRGlzdGFuY2VYO1xuICAgICAgdmFyIG1vbWVudHVtRGlzdGFuY2VZID0gdmVsb2NpdHkueSAqIG1vbWVudHVtRHVyYXRpb25ZO1xuICAgICAgdmFyIG5ld1Bvc2l0aW9uWSA9IGltYWdlLmN1cnJlbnRZICsgbW9tZW50dW1EaXN0YW5jZVk7IC8vIEZpeCBkdXJhdGlvblxuXG4gICAgICBpZiAodmVsb2NpdHkueCAhPT0gMCkgbW9tZW50dW1EdXJhdGlvblggPSBNYXRoLmFicygobmV3UG9zaXRpb25YIC0gaW1hZ2UuY3VycmVudFgpIC8gdmVsb2NpdHkueCk7XG4gICAgICBpZiAodmVsb2NpdHkueSAhPT0gMCkgbW9tZW50dW1EdXJhdGlvblkgPSBNYXRoLmFicygobmV3UG9zaXRpb25ZIC0gaW1hZ2UuY3VycmVudFkpIC8gdmVsb2NpdHkueSk7XG4gICAgICB2Y
24510XIgbW9tZW50dW1EdXJhdGlvbiA9IE1hdGgubWF4KG1vbWVudHVtRHVyYXRpb25YLCBtb21lbnR1bUR1cmF0aW9uWSk7XG4gICAgICBpbWFnZS5jdXJyZW50WCA9IG5ld1Bvc2l0aW9uWDtcbiAgICAgIGltYWdlLmN1cnJlbnRZID0gbmV3UG9zaXRpb25ZOyAvLyBEZWZpbmUgaWYgd2UgbmVlZCBpbWFnZSBkcmFnXG5cbiAgICAgIHZhciBzY2FsZWRXaWR0aCA9IGltYWdlLndpZHRoICogem9vbS5zY2FsZTtcbiAgICAgIHZhciBzY2FsZWRIZWlnaHQgPSBpbWFnZS5oZWlnaHQgKiB6b29tLnNjYWxlO1xuICAgICAgaW1hZ2UubWluWCA9IE1hdGgubWluKGdlc3R1cmUuc2xpZGVXaWR0aCAvIDIgLSBzY2FsZWRXaWR0aCAvIDIsIDApO1xuICAgICAgaW1hZ2UubWF4WCA9IC1pbWFnZS5taW5YO1xuICAgICAgaW1hZ2UubWluWSA9IE1hdGgubWluKGdlc3R1cmUuc2xpZGVIZWlnaHQgLyAyIC0gc2NhbGVkSGVpZ2h0IC8gMiwgMCk7XG4gICAgICBpbWFnZS5tYXhZID0gLWltYWdlLm1pblk7XG4gICAgICBpbWFnZS5jdXJyZW50WCA9IE1hdGgubWF4KE1hdGgubWluKGltYWdlLmN1cnJlbnRYLCBpbWFnZS5tYXhYKSwgaW1hZ2UubWluWCk7XG4gICAgICBpbWFnZS5jdXJyZW50WSA9IE1hdGgubWF4KE1hdGgubWluKGltYWdlLmN1cnJlbnRZLCBpbWFnZS5tYXhZKSwgaW1hZ2UubWluWSk7XG4gICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbC50cmFuc2l0aW9uKG1vbWVudHVtRHVyYXRpb24pLnRyYW5zZm9ybShcInRyYW5zbGF0ZTNkKFwiICsgaW1hZ2UuY3VycmVudFggKyBcInB4LCBcIiArIGltYWdlLmN1cnJlbnRZICsgXCJweCwwKVwiKTtcbiAgICB9LFxuICAgIG9uVHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgem9vbSA9IHN3aXBlci56b29tO1xuICAgICAgdmFyIGdlc3R1cmUgPSB6b29tLmdlc3R1cmU7XG5cbiAgICAgIGlmIChnZXN0dXJlLiRzbGlkZUVsICYmIHN3aXBlci5wcmV2aW91c0luZGV4ICE9PSBzd2lwZXIuYWN0aXZlSW5kZXgpIHtcbiAgICAgICAgaWYgKGdlc3R1cmUuJGltYWdlRWwpIHtcbiAgICAgICAgICBnZXN0dXJlLiRpbWFnZUVsLnRyYW5zZm9ybSgndHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlKDEpJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ2VzdHVyZS4kaW1hZ2VXcmFwRWwpIHtcbiAgICAgICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbC50cmFuc2Zvcm0oJ3RyYW5zbGF0ZTNkKDAsMCwwKScpO1xuICAgICAgICB9XG5cbiAgICAgICAgem9vbS5zY2FsZSA9IDE7XG4gICAgICAgIHpvb20uY3VycmVudFNjYWxlID0gMTtcbiAgICAgICAgZ2VzdHVyZS4kc2xpZGVFbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VFbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSxcbiAgICAvLyBUb2dnbGUgWm9vbVxuICAgIHRvZ2dsZTogZnVuY3Rpb24gdG9nZ2xlKGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcblxuICAgICAgaWYgKHpvb20uc2NhbGUgJiYgem9vbS5zY2FsZSAhPT0gMSkge1xuICAgICAgICAvLyBab29tIE91dFxuICAgICAgICB6b29tLm91dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gWm9vbSBJblxuICAgICAgICB6b29tLmluKGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaW46IGZ1bmN0aW9uIF9pbihlKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgICAgIHZhciB6b29tID0gc3dpcGVyLnpvb207XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy56b29tO1xuICAgICAgdmFyIGdlc3R1cmUgPSB6b29tLmdlc3R1cmUsXG4gICAgICAgICAgaW1hZ2UgPSB6b29tLmltYWdlO1xuXG4gICAgICBpZiAoIWdlc3R1cmUuJHNsaWRlRWwpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCAmJiBzd2lwZXIudmlydHVhbCkge1xuICAgICAgICAgIGdlc3R1cmUuJHNsaWRlRWwgPSBzd2lwZXIuJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHN3aXBlci5wYXJhbXMuc2xpZGVBY3RpdmVDbGFzcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ2VzdHVyZS4kc2xpZGVFbCA9IHN3aXBlci5zbGlkZXMuZXEoc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdlc3R1cmUuJGltYWdlRWwgPSBnZXN0dXJlLiRzbGlkZUVsLmZpbmQoJ2ltZywgc3ZnLCBjYW52YXMsIHBpY3R1cmUsIC5zd2lwZXItem9vbS10YXJnZXQnKTtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwgPSBnZXN0dXJlLiRpbWFnZUVsLnBhcmVudChcIi5cIiArIHBhcmFtcy5jb250YWluZXJDbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZ2VzdHVyZS4kaW1hZ2VFbCB8fCBnZXN0dXJlLiRpbWFnZUVsLmxlbmd0aCA9PT0gMCB8fCAhZ2VzdHVyZS4kaW1hZ2VXcmFwRWwgfHwgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICBnZXN0dXJlLiRzbGlkZUVsLmFkZENsYXNzKFwiXCIgKyBwYXJhbXMuem9vbWVkU2xpZGVDbGFzcyk7XG4gICAgICB2Y
24510XIgdG91Y2hYO1xuICAgICAgdmFyIHRvdWNoWTtcbiAgICAgIHZhciBvZmZzZXRYO1xuICAgICAgdmFyIG9mZnNldFk7XG4gICAgICB2YXIgZGlmZlg7XG4gICAgICB2YXIgZGlmZlk7XG4gICAgICB2YXIgdHJhbnNsYXRlWDtcbiAgICAgIHZhciB0cmFuc2xhdGVZO1xuICAgICAgdmFyIGltYWdlV2lkdGg7XG4gICAgICB2YXIgaW1hZ2VIZWlnaHQ7XG4gICAgICB2YXIgc2NhbGVkV2lkdGg7XG4gICAgICB2YXIgc2NhbGVkSGVpZ2h0O1xuICAgICAgdmFyIHRyYW5zbGF0ZU1pblg7XG4gICAgICB2YXIgdHJhbnNsYXRlTWluWTtcbiAgICAgIHZhciB0cmFuc2xhdGVNYXhYO1xuICAgICAgdmFyIHRyYW5zbGF0ZU1heFk7XG4gICAgICB2YXIgc2xpZGVXaWR0aDtcbiAgICAgIHZhciBzbGlkZUhlaWdodDtcblxuICAgICAgaWYgKHR5cGVvZiBpbWFnZS50b3VjaGVzU3RhcnQueCA9PT0gJ3VuZGVmaW5lZCcgJiYgZSkge1xuICAgICAgICB0b3VjaFggPSBlLnR5cGUgPT09ICd0b3VjaGVuZCcgPyBlLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYIDogZS5wYWdlWDtcbiAgICAgICAgdG91Y2hZID0gZS50eXBlID09PSAndG91Y2hlbmQnID8gZS5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWSA6IGUucGFnZVk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3VjaFggPSBpbWFnZS50b3VjaGVzU3RhcnQueDtcbiAgICAgICAgdG91Y2hZID0gaW1hZ2UudG91Y2hlc1N0YXJ0Lnk7XG4gICAgICB9XG5cbiAgICAgIHpvb20uc2NhbGUgPSBnZXN0dXJlLiRpbWFnZVdyYXBFbC5hdHRyKCdkYXRhLXN3aXBlci16b29tJykgfHwgcGFyYW1zLm1heFJhdGlvO1xuICAgICAgem9vbS5jdXJyZW50U2NhbGUgPSBnZXN0dXJlLiRpbWFnZVdyYXBFbC5hdHRyKCdkYXRhLXN3aXBlci16b29tJykgfHwgcGFyYW1zLm1heFJhdGlvO1xuXG4gICAgICBpZiAoZSkge1xuICAgICAgICBzbGlkZVdpZHRoID0gZ2VzdHVyZS4kc2xpZGVFbFswXS5vZmZzZXRXaWR0aDtcbiAgICAgICAgc2xpZGVIZWlnaHQgPSBnZXN0dXJlLiRzbGlkZUVsWzBdLm9mZnNldEhlaWdodDtcbiAgICAgICAgb2Zmc2V0WCA9IGdlc3R1cmUuJHNsaWRlRWwub2Zmc2V0KCkubGVmdCArIHdpbmRvdy5zY3JvbGxYO1xuICAgICAgICBvZmZzZXRZID0gZ2VzdHVyZS4kc2xpZGVFbC5vZmZzZXQoKS50b3AgKyB3aW5kb3cuc2Nyb2xsWTtcbiAgICAgICAgZGlmZlggPSBvZmZzZXRYICsgc2xpZGVXaWR0aCAvIDIgLSB0b3VjaFg7XG4gICAgICAgIGRpZmZZID0gb2Zmc2V0WSArIHNsaWRlSGVpZ2h0IC8gMiAtIHRvdWNoWTtcbiAgICAgICAgaW1hZ2VXaWR0aCA9IGdlc3R1cmUuJGltYWdlRWxbMF0ub2Zmc2V0V2lkdGg7XG4gICAgICAgIGltYWdlSGVpZ2h0ID0gZ2VzdHVyZS4kaW1hZ2VFbFswXS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIHNjYWxlZFdpZHRoID0gaW1hZ2VXaWR0aCAqIHpvb20uc2NhbGU7XG4gICAgICAgIHNjYWxlZEhlaWdodCA9IGltYWdlSGVpZ2h0ICogem9vbS5zY2FsZTtcbiAgICAgICAgdHJhbnNsYXRlTWluWCA9IE1hdGgubWluKHNsaWRlV2lkdGggLyAyIC0gc2NhbGVkV2lkdGggLyAyLCAwKTtcbiAgICAgICAgdHJhbnNsYXRlTWluWSA9IE1hdGgubWluKHNsaWRlSGVpZ2h0IC8gMiAtIHNjYWxlZEhlaWdodCAvIDIsIDApO1xuICAgICAgICB0cmFuc2xhdGVNYXhYID0gLXRyYW5zbGF0ZU1pblg7XG4gICAgICAgIHRyYW5zbGF0ZU1heFkgPSAtdHJhbnNsYXRlTWluWTtcbiAgICAgICAgdHJhbnNsYXRlWCA9IGRpZmZYICogem9vbS5zY2FsZTtcbiAgICAgICAgdHJhbnNsYXRlWSA9IGRpZmZZICogem9vbS5zY2FsZTtcblxuICAgICAgICBpZiAodHJhbnNsYXRlWCA8IHRyYW5zbGF0ZU1pblgpIHtcbiAgICAgICAgICB0cmFuc2xhdGVYID0gdHJhbnNsYXRlTWluWDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0cmFuc2xhdGVYID4gdHJhbnNsYXRlTWF4WCkge1xuICAgICAgICAgIHRyYW5zbGF0ZVggPSB0cmFuc2xhdGVNYXhYO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyYW5zbGF0ZVkgPCB0cmFuc2xhdGVNaW5ZKSB7XG4gICAgICAgICAgdHJhbnNsYXRlWSA9IHRyYW5zbGF0ZU1pblk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHJhbnNsYXRlWSA+IHRyYW5zbGF0ZU1heFkpIHtcbiAgICAgICAgICB0cmFuc2xhdGVZID0gdHJhbnNsYXRlTWF4WTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNsYXRlWCA9IDA7XG4gICAgICAgIHRyYW5zbGF0ZVkgPSAwO1xuICAgICAgfVxuXG4gICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbC50cmFuc2l0aW9uKDMwMCkudHJhbnNmb3JtKFwidHJhbnNsYXRlM2QoXCIgKyB0cmFuc2xhdGVYICsgXCJweCwgXCIgKyB0cmFuc2xhdGVZICsgXCJweCwwKVwiKTtcbiAgICAgIGdlc3R1cmUuJGltYWdlRWwudHJhbnNpdGlvbigzMDApLnRyYW5zZm9ybShcInRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZShcIiArIHpvb20uc2NhbGUgKyBcIilcIik7XG4gICAgfSxcbiAgICBvdXQ6IGZ1bmN0aW9uIG91dCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnpvb207XG4gICAgICB2Y
24510XIgZ2VzdHVyZSA9IHpvb20uZ2VzdHVyZTtcblxuICAgICAgaWYgKCFnZXN0dXJlLiRzbGlkZUVsKSB7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQgJiYgc3dpcGVyLnZpcnR1YWwpIHtcbiAgICAgICAgICBnZXN0dXJlLiRzbGlkZUVsID0gc3dpcGVyLiR3cmFwcGVyRWwuY2hpbGRyZW4oXCIuXCIgKyBzd2lwZXIucGFyYW1zLnNsaWRlQWN0aXZlQ2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdlc3R1cmUuJHNsaWRlRWwgPSBzd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICBnZXN0dXJlLiRpbWFnZUVsID0gZ2VzdHVyZS4kc2xpZGVFbC5maW5kKCdpbWcsIHN2ZywgY2FudmFzLCBwaWN0dXJlLCAuc3dpcGVyLXpvb20tdGFyZ2V0Jyk7XG4gICAgICAgIGdlc3R1cmUuJGltYWdlV3JhcEVsID0gZ2VzdHVyZS4kaW1hZ2VFbC5wYXJlbnQoXCIuXCIgKyBwYXJhbXMuY29udGFpbmVyQ2xhc3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDAgfHwgIWdlc3R1cmUuJGltYWdlV3JhcEVsIHx8IGdlc3R1cmUuJGltYWdlV3JhcEVsLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgem9vbS5zY2FsZSA9IDE7XG4gICAgICB6b29tLmN1cnJlbnRTY2FsZSA9IDE7XG4gICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbC50cmFuc2l0aW9uKDMwMCkudHJhbnNmb3JtKCd0cmFuc2xhdGUzZCgwLDAsMCknKTtcbiAgICAgIGdlc3R1cmUuJGltYWdlRWwudHJhbnNpdGlvbigzMDApLnRyYW5zZm9ybSgndHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlKDEpJyk7XG4gICAgICBnZXN0dXJlLiRzbGlkZUVsLnJlbW92ZUNsYXNzKFwiXCIgKyBwYXJhbXMuem9vbWVkU2xpZGVDbGFzcyk7XG4gICAgICBnZXN0dXJlLiRzbGlkZUVsID0gdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgdG9nZ2xlR2VzdHVyZXM6IGZ1bmN0aW9uIHRvZ2dsZUdlc3R1cmVzKG1ldGhvZCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgem9vbSA9IHN3aXBlci56b29tO1xuICAgICAgdmFyIHNlbGVjdG9yID0gem9vbS5zbGlkZVNlbGVjdG9yLFxuICAgICAgICAgIHBhc3NpdmUgPSB6b29tLnBhc3NpdmVMaXN0ZW5lcjtcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsW21ldGhvZF0oJ2dlc3R1cmVzdGFydCcsIHNlbGVjdG9yLCB6b29tLm9uR2VzdHVyZVN0YXJ0LCBwYXNzaXZlKTtcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsW21ldGhvZF0oJ2dlc3R1cmVjaGFuZ2UnLCBzZWxlY3Rvciwgem9vbS5vbkdlc3R1cmVDaGFuZ2UsIHBhc3NpdmUpO1xuICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbbWV0aG9kXSgnZ2VzdHVyZWVuZCcsIHNlbGVjdG9yLCB6b29tLm9uR2VzdHVyZUVuZCwgcGFzc2l2ZSk7XG4gICAgfSxcbiAgICBlbmFibGVHZXN0dXJlczogZnVuY3Rpb24gZW5hYmxlR2VzdHVyZXMoKSB7XG4gICAgICBpZiAodGhpcy56b29tLmdlc3R1cmVzRW5hYmxlZCkgcmV0dXJuO1xuICAgICAgdGhpcy56b29tLmdlc3R1cmVzRW5hYmxlZCA9IHRydWU7XG4gICAgICB0aGlzLnpvb20udG9nZ2xlR2VzdHVyZXMoJ29uJyk7XG4gICAgfSxcbiAgICBkaXNhYmxlR2VzdHVyZXM6IGZ1bmN0aW9uIGRpc2FibGVHZXN0dXJlcygpIHtcbiAgICAgIGlmICghdGhpcy56b29tLmdlc3R1cmVzRW5hYmxlZCkgcmV0dXJuO1xuICAgICAgdGhpcy56b29tLmdlc3R1cmVzRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgdGhpcy56b29tLnRvZ2dsZUdlc3R1cmVzKCdvZmYnKTtcbiAgICB9LFxuICAgIC8vIEF0dGFjaC9EZXRhY2ggRXZlbnRzXG4gICAgZW5hYmxlOiBmdW5jdGlvbiBlbmFibGUoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBzdXBwb3J0ID0gc3dpcGVyLnN1cHBvcnQ7XG4gICAgICB2YXIgem9vbSA9IHN3aXBlci56b29tO1xuICAgICAgaWYgKHpvb20uZW5hYmxlZCkgcmV0dXJuO1xuICAgICAgem9vbS5lbmFibGVkID0gdHJ1ZTtcbiAgICAgIHZhciBwYXNzaXZlTGlzdGVuZXIgPSBzd2lwZXIudG91Y2hFdmVudHMuc3RhcnQgPT09ICd0b3VjaHN0YXJ0JyAmJiBzdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBzd2lwZXIucGFyYW1zLnBhc3NpdmVMaXN0ZW5lcnMgPyB7XG4gICAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICAgIGNhcHR1cmU6IGZhbHNlXG4gICAgICB9IDogZmFsc2U7XG4gICAgICB2YXIgYWN0aXZlTGlzdGVuZXJXaXRoQ2FwdHVyZSA9IHN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyID8ge1xuICAgICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICAgICAgY2FwdHVyZTogdHJ1ZVxuICAgICAgfSA6IHRydWU7XG4gICAgICB2YXIgc2xpZGVTZWxlY3RvciA9IFwiLlwiICsgc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzO1xuICAgICAgc3dpcGVyLnpvb20ucGFzc2l2ZUxpc3RlbmVyID0gcGFzc2l2ZUxpc3RlbmVyO1xuICAgICAgc3dpcGVyLnpvb20uc2xpZGVTZWxlY3RvciA9IHNsaWRlU2VsZWN0b3I7IC8vIFNjYWxlIGltYWdlXG5cbiAgICAgIGlmIChzdXBwb3J0Lmdlc3R1cmVzKSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9uKHN3aXBlci50b3VjaEV2ZW50cy5zdGFydCwgc3dpcGVyLnpvb20uZW5hYmxlR2VzdHVyZXMsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9uKHN3aXBlci50b3VjaEV2ZW50cy5lbmQsIHN3aXBlci56b29tLmRpc2FibGVHZXN0dXJlcywgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgIH0gZWxzZSBpZiAoc3dpcGVyLnRvdWNoRXZlbnRzLnN0YXJ0ID09PSAndG91Y2hzdGFydCcpIHtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub24oc3dpcGVyLnRvdWNoRXZlbnRzLnN0YXJ0LCBzbGlkZVNlbGVjdG9yLCB6b29tLm9uR2VzdHVyZVN0YXJ0LCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vbihzd2lwZXIudG91Y2hFdmVudHMubW92ZSwgc2xpZGVTZWxlY3Rvciwgem9vbS5vbkdlc3R1cmVDaGFuZ2UsIGFjdGl2ZUxpc3RlbmVyV2l0aENhcHR1cmUpO1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vbihzd2lwZXIudG91Y2hFdmVudHMuZW5kLCBzbGlkZVNlbGVjdG9yLCB6b29tLm9uR2VzdHVyZUVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcblxuICAgICAgICBpZiAoc3dpcGVyLnRvdWNoRXZlbnRzLmNhbmNlbCkge1xuICAgICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9uKHN3aXBlci50b3VjaEV2ZW50cy5jYW5jZWwsIHNsaWRlU2VsZWN0b3IsIHpvb20ub25HZXN0dXJlRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IC8vIE1vdmUgaW1hZ2VcblxuXG4gICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vbihzd2lwZXIudG91Y2hFdmVudHMubW92ZSwgXCIuXCIgKyBzd2lwZXIucGFyYW1zLnpvb20uY29udGFpbmVyQ2xhc3MsIHpvb20ub25Ub3VjaE1vdmUsIGFjdGl2ZUxpc3RlbmVyV2l0aENhcHR1cmUpO1xuICAgIH0sXG4gICAgZGlzYWJsZTogZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIGlmICghem9vbS5lbmFibGVkKSByZXR1cm47XG4gICAgICB2Y
24510XIgc3VwcG9ydCA9IHN3aXBlci5zdXBwb3J0O1xuICAgICAgc3dpcGVyLnpvb20uZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgdmFyIHBhc3NpdmVMaXN0ZW5lciA9IHN3aXBlci50b3VjaEV2ZW50cy5zdGFydCA9PT0gJ3RvdWNoc3RhcnQnICYmIHN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHN3aXBlci5wYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHtcbiAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgICAgY2FwdHVyZTogZmFsc2VcbiAgICAgIH0gOiBmYWxzZTtcbiAgICAgIHZhciBhY3RpdmVMaXN0ZW5lcldpdGhDYXB0dXJlID0gc3VwcG9ydC5wYXNzaXZlTGlzdGVuZXIgPyB7XG4gICAgICAgIHBhc3NpdmU6IGZhbHNlLFxuICAgICAgICBjYXB0dXJlOiB0cnVlXG4gICAgICB9IDogdHJ1ZTtcbiAgICAgIHZhciBzbGlkZVNlbGVjdG9yID0gXCIuXCIgKyBzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3M7IC8vIFNjYWxlIGltYWdlXG5cbiAgICAgIGlmIChzdXBwb3J0Lmdlc3R1cmVzKSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9mZihzd2lwZXIudG91Y2hFdmVudHMuc3RhcnQsIHN3aXBlci56b29tLmVuYWJsZUdlc3R1cmVzLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vZmYoc3dpcGVyLnRvdWNoRXZlbnRzLmVuZCwgc3dpcGVyLnpvb20uZGlzYWJsZUdlc3R1cmVzLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgfSBlbHNlIGlmIChzd2lwZXIudG91Y2hFdmVudHMuc3RhcnQgPT09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vZmYoc3dpcGVyLnRvdWNoRXZlbnRzLnN0YXJ0LCBzbGlkZVNlbGVjdG9yLCB6b29tLm9uR2VzdHVyZVN0YXJ0LCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vZmYoc3dpcGVyLnRvdWNoRXZlbnRzLm1vdmUsIHNsaWRlU2VsZWN0b3IsIHpvb20ub25HZXN0dXJlQ2hhbmdlLCBhY3RpdmVMaXN0ZW5lcldpdGhDYXB0dXJlKTtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub2ZmKHN3aXBlci50b3VjaEV2ZW50cy5lbmQsIHNsaWRlU2VsZWN0b3IsIHpvb20ub25HZXN0dXJlRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuXG4gICAgICAgIGlmIChzd2lwZXIudG91Y2hFdmVudHMuY2FuY2VsKSB7XG4gICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub2ZmKHN3aXBlci50b3VjaEV2ZW50cy5jYW5jZWwsIHNsaWRlU2VsZWN0b3IsIHpvb20ub25HZXN0dXJlRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IC8vIE1vdmUgaW1hZ2VcblxuXG4gICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vZmYoc3dpcGVyLnRvdWNoRXZlbnRzLm1vdmUsIFwiLlwiICsgc3dpcGVyLnBhcmFtcy56b29tLmNvbnRhaW5lckNsYXNzLCB6b29tLm9uVG91Y2hNb3ZlLCBhY3RpdmVMaXN0ZW5lcldpdGhDYXB0dXJlKTtcbiAgICB9XG4gIH07XG4gIHZhciBab29tJDEgPSB7XG4gICAgbmFtZTogJ3pvb20nLFxuICAgIHBhcmFtczoge1xuICAgICAgem9vbToge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbWF4UmF0aW86IDMsXG4gICAgICAgIG1pblJhdGlvOiAxLFxuICAgICAgICB0b2dnbGU6IHRydWUsXG4gICAgICAgIGNvbnRhaW5lckNsYXNzOiAnc3dpcGVyLXpvb20tY29udGFpbmVyJyxcbiAgICAgICAgem9vbWVkU2xpZGVDbGFzczogJ3N3aXBlci1zbGlkZS16b29tZWQnXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICAgIHpvb206IF9leHRlbmRzKHtcbiAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICBzY2FsZTogMSxcbiAgICAgICAgICBjdXJyZW50U2NhbGU6IDEsXG4gICAgICAgICAgaXNTY2FsaW5nOiBmYWxzZSxcbiAgICAgICAgICBnZXN0dXJlOiB7XG4gICAgICAgICAgICAkc2xpZGVFbDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc2xpZGVXaWR0aDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc2xpZGVIZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICRpbWFnZUVsOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAkaW1hZ2VXcmFwRWw6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG1heFJhdGlvOiAzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbWFnZToge1xuICAgICAgICAgICAgaXNUb3VjaGVkOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBpc01vdmVkOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjdXJyZW50WDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY3VycmVudFk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG1pblg6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG1pblk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG1heFg6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG1heFk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHdpZHRoOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBoZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHN0YXJ0WDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc3RhcnRZOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0b3VjaGVzU3RhcnQ6IHt9LFxuICAgICAgICAgICAgdG91Y2hlc0N1cnJlbnQ6IHt9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB2ZWxvY2l0eToge1xuICAgICAgICAgICAgeDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgeTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcHJldlBvc2l0aW9uWDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcHJldlBvc2l0aW9uWTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcHJldlRpbWU6IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgfSwgWm9vbSlcbiAgICAgIH0pO1xuICAgICAgdmFyIHNjYWxlID0gMTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzd2lwZXIuem9vbSwgJ3NjYWxlJywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gc2NhbGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICAgICAgaWYgKHNjYWxlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGltYWdlRWwgPSBzd2lwZXIuem9vbS5nZXN0dXJlLiRpbWFnZUVsID8gc3dpcGVyLnpvb20uZ2VzdHVyZS4kaW1hZ2VFbFswXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgI
24510HZhciBzbGlkZUVsID0gc3dpcGVyLnpvb20uZ2VzdHVyZS4kc2xpZGVFbCA/IHN3aXBlci56b29tLmdlc3R1cmUuJHNsaWRlRWxbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBzd2lwZXIuZW1pdCgnem9vbUNoYW5nZScsIHZhbHVlLCBpbWFnZUVsLCBzbGlkZUVsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzY2FsZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy56b29tLmVuYWJsZWQpIHtcbiAgICAgICAgICBzd2lwZXIuem9vbS5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koc3dpcGVyKSB7XG4gICAgICAgIHN3aXBlci56b29tLmRpc2FibGUoKTtcbiAgICAgIH0sXG4gICAgICB0b3VjaFN0YXJ0OiBmdW5jdGlvbiB0b3VjaFN0YXJ0KHN3aXBlciwgZSkge1xuICAgICAgICBpZiAoIXN3aXBlci56b29tLmVuYWJsZWQpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLnpvb20ub25Ub3VjaFN0YXJ0KGUpO1xuICAgICAgfSxcbiAgICAgIHRvdWNoRW5kOiBmdW5jdGlvbiB0b3VjaEVuZChzd2lwZXIsIGUpIHtcbiAgICAgICAgaWYgKCFzd2lwZXIuem9vbS5lbmFibGVkKSByZXR1cm47XG4gICAgICAgIHN3aXBlci56b29tLm9uVG91Y2hFbmQoZSk7XG4gICAgICB9LFxuICAgICAgZG91YmxlVGFwOiBmdW5jdGlvbiBkb3VibGVUYXAoc3dpcGVyLCBlKSB7XG4gICAgICAgIGlmICghc3dpcGVyLmFuaW1hdGluZyAmJiBzd2lwZXIucGFyYW1zLnpvb20uZW5hYmxlZCAmJiBzd2lwZXIuem9vbS5lbmFibGVkICYmIHN3aXBlci5wYXJhbXMuem9vbS50b2dnbGUpIHtcbiAgICAgICAgICBzd2lwZXIuem9vbS50b2dnbGUoZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0cmFuc2l0aW9uRW5kOiBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kKHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnpvb20uZW5hYmxlZCAmJiBzd2lwZXIucGFyYW1zLnpvb20uZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci56b29tLm9uVHJhbnNpdGlvbkVuZCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2xpZGVDaGFuZ2U6IGZ1bmN0aW9uIHNsaWRlQ2hhbmdlKHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnpvb20uZW5hYmxlZCAmJiBzd2lwZXIucGFyYW1zLnpvb20uZW5hYmxlZCAmJiBzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgICAgICBzd2lwZXIuem9vbS5vblRyYW5zaXRpb25FbmQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgTGF6eSA9IHtcbiAgICBsb2FkSW5TbGlkZTogZnVuY3Rpb24gbG9hZEluU2xpZGUoaW5kZXgsIGxvYWRJbkR1cGxpY2F0ZSkge1xuICAgICAgaWYgKGxvYWRJbkR1cGxpY2F0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGxvYWRJbkR1cGxpY2F0ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMubGF6eTtcbiAgICAgIGlmICh0eXBlb2YgaW5kZXggPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgICBpZiAoc3dpcGVyLnNsaWRlcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIHZhciBpc1ZpcnR1YWwgPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZDtcbiAgICAgIHZhciAkc2xpZGVFbCA9IGlzVmlydHVhbCA/IHN3aXBlci4kd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzICsgXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgaW5kZXggKyBcIlxcXCJdXCIpIDogc3dpcGVyLnNsaWRlcy5lcShpbmRleCk7XG4gICAgICB2Y
24510XIgJGltYWdlcyA9ICRzbGlkZUVsLmZpbmQoXCIuXCIgKyBwYXJhbXMuZWxlbWVudENsYXNzICsgXCI6bm90KC5cIiArIHBhcmFtcy5sb2FkZWRDbGFzcyArIFwiKTpub3QoLlwiICsgcGFyYW1zLmxvYWRpbmdDbGFzcyArIFwiKVwiKTtcblxuICAgICAgaWYgKCRzbGlkZUVsLmhhc0NsYXNzKHBhcmFtcy5lbGVtZW50Q2xhc3MpICYmICEkc2xpZGVFbC5oYXNDbGFzcyhwYXJhbXMubG9hZGVkQ2xhc3MpICYmICEkc2xpZGVFbC5oYXNDbGFzcyhwYXJhbXMubG9hZGluZ0NsYXNzKSkge1xuICAgICAgICAkaW1hZ2VzLnB1c2goJHNsaWRlRWxbMF0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoJGltYWdlcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICRpbWFnZXMuZWFjaChmdW5jdGlvbiAoaW1hZ2VFbCkge1xuICAgICAgICB2YXIgJGltYWdlRWwgPSAkKGltYWdlRWwpO1xuICAgICAgICAkaW1hZ2VFbC5hZGRDbGFzcyhwYXJhbXMubG9hZGluZ0NsYXNzKTtcbiAgICAgICAgdmFyIGJhY2tncm91bmQgPSAkaW1hZ2VFbC5hdHRyKCdkYXRhLWJhY2tncm91bmQnKTtcbiAgICAgICAgdmFyIHNyYyA9ICRpbWFnZUVsLmF0dHIoJ2RhdGEtc3JjJyk7XG4gICAgICAgIHZhciBzcmNzZXQgPSAkaW1hZ2VFbC5hdHRyKCdkYXRhLXNyY3NldCcpO1xuICAgICAgICB2YXIgc2l6ZXMgPSAkaW1hZ2VFbC5hdHRyKCdkYXRhLXNpemVzJyk7XG4gICAgICAgIHZhciAkcGljdHVyZUVsID0gJGltYWdlRWwucGFyZW50KCdwaWN0dXJlJyk7XG4gICAgICAgIHN3aXBlci5sb2FkSW1hZ2UoJGltYWdlRWxbMF0sIHNyYyB8fCBiYWNrZ3JvdW5kLCBzcmNzZXQsIHNpemVzLCBmYWxzZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICh0eXBlb2Ygc3dpcGVyID09PSAndW5kZWZpbmVkJyB8fCBzd2lwZXIgPT09IG51bGwgfHwgIXN3aXBlciB8fCBzd2lwZXIgJiYgIXN3aXBlci5wYXJhbXMgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuXG4gICAgICAgICAgaWYgKGJhY2tncm91bmQpIHtcbiAgICAgICAgICAgICRpbWFnZUVsLmNzcygnYmFja2dyb3VuZC1pbWFnZScsIFwidXJsKFxcXCJcIiArIGJhY2tncm91bmQgKyBcIlxcXCIpXCIpO1xuICAgICAgICAgICAgJGltYWdlRWwucmVtb3ZlQXR0cignZGF0YS1iYWNrZ3JvdW5kJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzcmNzZXQpIHtcbiAgICAgICAgICAgICAgJGltYWdlRWwuYXR0cignc3Jjc2V0Jywgc3Jjc2V0KTtcbiAgICAgICAgICAgICAgJGltYWdlRWwucmVtb3ZlQXR0cignZGF0YS1zcmNzZXQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNpemVzKSB7XG4gICAgICAgICAgICAgICRpbWFnZUVsLmF0dHIoJ3NpemVzJywgc2l6ZXMpO1xuICAgICAgICAgICAgICAkaW1hZ2VFbC5yZW1vdmVBdHRyKCdkYXRhLXNpemVzJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgkcGljdHVyZUVsLmxlbmd0aCkge1xuICAgICAgICAgICAgICAkcGljdHVyZUVsLmNoaWxkcmVuKCdzb3VyY2UnKS5lYWNoKGZ1bmN0aW9uIChzb3VyY2VFbCkge1xuICAgICAgICAgICAgICAgIHZhciAkc291cmNlID0gJChzb3VyY2VFbCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoJHNvdXJjZS5hdHRyKCdkYXRhLXNyY3NldCcpKSB7XG4gICAgICAgICAgICAgICAgICAkc291cmNlLmF0dHIoJ3NyY3NldCcsICRzb3VyY2UuYXR0cignZGF0YS1zcmNzZXQnKSk7XG4gICAgICAgICAgICAgICAgICAkc291cmNlLnJlbW92ZUF0dHIoJ2RhdGEtc3Jjc2V0Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNyYykge1xuICAgICAgICAgICAgICAkaW1hZ2VFbC5hdHRyKCdzcmMnLCBzcmMpO1xuICAgICAgICAgICAgICAkaW1hZ2VFbC5yZW1vdmVBdHRyKCdkYXRhLXNyYycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICRpbWFnZUVsLmFkZENsYXNzKHBhcmFtcy5sb2FkZWRDbGFzcykucmVtb3ZlQ2xhc3MocGFyYW1zLmxvYWRpbmdDbGFzcyk7XG4gICAgICAgICAgJHNsaWRlRWwuZmluZChcIi5cIiArIHBhcmFtcy5wcmVsb2FkZXJDbGFzcykucmVtb3ZlKCk7XG5cbiAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wICYmIGxvYWRJbkR1cGxpY2F0ZSkge1xuICAgICAgICAgICAgdmFyIHNsaWRlT3JpZ2luYWxJbmRleCA9ICRzbGlkZUVsLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyk7XG5cbiAgICAgICAgICAgIGlmICgkc2xpZGVFbC5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICAgICAgIHZhciBvcmlnaW5hbFNsaWRlID0gc3dpcGVyLiR3cmFwcGVyRWwuY2hpbGRyZW4oXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgc2xpZGVPcmlnaW5hbEluZGV4ICsgXCJcXFwiXTpub3QoLlwiICsgc3dpcGVyLnBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzICsgXCIpXCIpO1xuICAgICAgICAgICAgICBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShvcmlnaW5hbFNsaWRlLmluZGV4KCksIGZhbHNlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBkdXBsaWNhdGVkU2xpZGUgPSBzd2lwZXIuJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHN3aXBlci5wYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcyArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIHNsaWRlT3JpZ2luYWxJbmRleCArIFwiXFxcIl1cIik7XG4gICAgICAgICAgICAgIHN3aXBlci5sYXp5LmxvYWRJblNsaWRlKGR1cGxpY2F0ZWRTbGlkZS5pbmRleCgpLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3dpcGVyLmVtaXQoJ2xhenlJbWFnZVJlYWR5JywgJHNsaWRlRWxbMF0sICRpbWFnZUVsWzBdKTtcblxuICAgICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9IZWlnaHQpIHtcbiAgICAgICAgICAgIHN3aXBlci51cGRhdGVBdXRvSGVpZ2h0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ2xhenlJbWFnZUxvYWQnLCAkc2xpZGVFbFswXSwgJGltYWdlRWxbMF0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBsb2FkOiBmdW5jdGlvbiBsb2FkKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsLFxuICAgICAgICAgIHN3aXBlclBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgICAgc2xpZGVzID0gc3dpcGVyLnNsaWRlcyxcbiAgICAgICAgICBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICAgIHZhciBpc1ZpcnR1YWwgPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXJQYXJhbXMudmlydHVhbC5lbmFibGVkO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlclBhcmFtcy5sYXp5O1xuICAgICAgdmFyIHNsaWRlc1BlclZpZXcgPSBzd2lwZXJQYXJhbXMuc2xpZGVzUGVyVmlldztcblxuICAgICAgaWYgKHNsaWRlc1BlclZpZXcgPT09ICdhdXRvJykge1xuICAgICAgICBzbGlkZXNQZXJWaWV3ID0gMDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gc2xpZGVFeGlzdChpbmRleCkge1xuICAgICAgICBpZiAoaXNWaXJ0dWFsKSB7XG4gICAgICAgICAgaWYgKCR3cmFwcGVyRWwuY2hpbGRyZW4oXCIuXCIgKyBzd2lwZXJQYXJhbXMuc2xpZGVDbGFzcyArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIGluZGV4ICsgXCJcXFwiXVwiKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzbGlkZXNbaW5kZXhdKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNsaWRlSW5kZXgoc2xpZGVFbCkge1xuICAgICAgICBpZiAoaXNWaXJ0dWFsKSB7XG4gICAgICAgICAgcmV0dXJuICQoc2xpZGVFbCkuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAkKHNsaWRlRWwpLmluZGV4KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3dpcGVyLmxhenkuaW5pdGlhbEltYWdlTG9hZGVkKSBzd2lwZXIubGF6eS5pbml0aWFsSW1hZ2VMb2FkZWQgPSB0cnVlO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaFNsaWRlc1Zpc2liaWxpdHkpIHtcbiAgICAgICAgJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHN3aXBlclBhcmFtcy5zbGlkZVZpc2libGVDbGFzcykuZWFjaChmdW5jdGlvbiAoc2xpZGVFbCkge1xuICAgICAgICAgIHZhciBpbmRleCA9IGlzVmlydHVhbCA/ICQoc2xpZGVFbCkuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSA6ICQoc2xpZGVFbCkuaW5kZXgoKTtcbiAgICAgICAgICBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShpbmRleCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChzbGlkZXNQZXJWaWV3ID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gYWN0aXZlSW5kZXg7IGkgPCBhY3RpdmVJbmRleCArIHNsaWRlc1BlclZpZXc7IGkgKz0gMSkge1xuICAgICAgICAgIGlmIChzbGlkZUV4aXN0KGkpKSBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmxhenkubG9hZEluU2xpZGUoYWN0aXZlSW5kZXgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLmxvYWRQcmV2TmV4dCkge1xuICAgICAgICBpZiAoc2xpZGVzUGVyVmlldyA+IDEgfHwgcGFyYW1zLmxvYWRQcmV2TmV4dEFtb3VudCAmJiBwYXJhbXMubG9hZFByZXZOZXh0QW1vdW50ID4gMSkge1xuICAgICAgICAgIHZhciBhbW91bnQgPSBwYXJhbXMubG9hZFByZXZOZXh0QW1vdW50O1xuICAgICAgICAgIHZhciBzcHYgPSBzbGlkZXNQZXJWaWV3O1xuICAgICAgICAgIHZhciBtYXhJbmRleCA9IE1hdGgubWluKGFjdGl2ZUluZGV4ICsgc3B2ICsgTWF0aC5tYXgoYW1vdW50LCBzcHYpLCBzbGlkZXMubGVuZ3RoKTtcbiAgICAgICAgICB2Y
24510XIgbWluSW5kZXggPSBNYXRoLm1heChhY3RpdmVJbmRleCAtIE1hdGgubWF4KHNwdiwgYW1vdW50KSwgMCk7IC8vIE5leHQgU2xpZGVzXG5cbiAgICAgICAgICBmb3IgKHZhciBfaSA9IGFjdGl2ZUluZGV4ICsgc2xpZGVzUGVyVmlldzsgX2kgPCBtYXhJbmRleDsgX2kgKz0gMSkge1xuICAgICAgICAgICAgaWYgKHNsaWRlRXhpc3QoX2kpKSBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShfaSk7XG4gICAgICAgICAgfSAvLyBQcmV2IFNsaWRlc1xuXG5cbiAgICAgICAgICBmb3IgKHZhciBfaTIgPSBtaW5JbmRleDsgX2kyIDwgYWN0aXZlSW5kZXg7IF9pMiArPSAxKSB7XG4gICAgICAgICAgICBpZiAoc2xpZGVFeGlzdChfaTIpKSBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShfaTIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgbmV4dFNsaWRlID0gJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHN3aXBlclBhcmFtcy5zbGlkZU5leHRDbGFzcyk7XG4gICAgICAgICAgaWYgKG5leHRTbGlkZS5sZW5ndGggPiAwKSBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShzbGlkZUluZGV4KG5leHRTbGlkZSkpO1xuICAgICAgICAgIHZhciBwcmV2U2xpZGUgPSAkd3JhcHBlckVsLmNoaWxkcmVuKFwiLlwiICsgc3dpcGVyUGFyYW1zLnNsaWRlUHJldkNsYXNzKTtcbiAgICAgICAgICBpZiAocHJldlNsaWRlLmxlbmd0aCA+IDApIHN3aXBlci5sYXp5LmxvYWRJblNsaWRlKHNsaWRlSW5kZXgocHJldlNsaWRlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNoZWNrSW5WaWV3T25Mb2FkOiBmdW5jdGlvbiBjaGVja0luVmlld09uTG9hZCgpIHtcbiAgICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgdmFyICRzY3JvbGxFbGVtZW50ID0gc3dpcGVyLnBhcmFtcy5sYXp5LnNjcm9sbGluZ0VsZW1lbnQgPyAkKHN3aXBlci5wYXJhbXMubGF6eS5zY3JvbGxpbmdFbGVtZW50KSA6ICQod2luZG93KTtcbiAgICAgIHZhciBpc1dpbmRvdyA9ICRzY3JvbGxFbGVtZW50WzBdID09PSB3aW5kb3c7XG4gICAgICB2Y
24510XIgc2Nyb2xsRWxlbWVudFdpZHRoID0gaXNXaW5kb3cgPyB3aW5kb3cuaW5uZXJXaWR0aCA6ICRzY3JvbGxFbGVtZW50WzBdLm9mZnNldFdpZHRoO1xuICAgICAgdmFyIHNjcm9sbEVsZW1lbnRIZWlnaHQgPSBpc1dpbmRvdyA/IHdpbmRvdy5pbm5lckhlaWdodCA6ICRzY3JvbGxFbGVtZW50WzBdLm9mZnNldEhlaWdodDtcbiAgICAgIHZhciBzd2lwZXJPZmZzZXQgPSBzd2lwZXIuJGVsLm9mZnNldCgpO1xuICAgICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgICB2YXIgaW5WaWV3ID0gZmFsc2U7XG4gICAgICBpZiAocnRsKSBzd2lwZXJPZmZzZXQubGVmdCAtPSBzd2lwZXIuJGVsWzBdLnNjcm9sbExlZnQ7XG4gICAgICB2YXIgc3dpcGVyQ29vcmQgPSBbW3N3aXBlck9mZnNldC5sZWZ0LCBzd2lwZXJPZmZzZXQudG9wXSwgW3N3aXBlck9mZnNldC5sZWZ0ICsgc3dpcGVyLndpZHRoLCBzd2lwZXJPZmZzZXQudG9wXSwgW3N3aXBlck9mZnNldC5sZWZ0LCBzd2lwZXJPZmZzZXQudG9wICsgc3dpcGVyLmhlaWdodF0sIFtzd2lwZXJPZmZzZXQubGVmdCArIHN3aXBlci53aWR0aCwgc3dpcGVyT2Zmc2V0LnRvcCArIHN3aXBlci5oZWlnaHRdXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzd2lwZXJDb29yZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB2YXIgcG9pbnQgPSBzd2lwZXJDb29yZFtpXTtcblxuICAgICAgICBpZiAocG9pbnRbMF0gPj0gMCAmJiBwb2ludFswXSA8PSBzY3JvbGxFbGVtZW50V2lkdGggJiYgcG9pbnRbMV0gPj0gMCAmJiBwb2ludFsxXSA8PSBzY3JvbGxFbGVtZW50SGVpZ2h0KSB7XG4gICAgICAgICAgaWYgKHBvaW50WzBdID09PSAwICYmIHBvaW50WzFdID09PSAwKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgICAgICAgaW5WaWV3ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2Y
24510XIgcGFzc2l2ZUxpc3RlbmVyID0gc3dpcGVyLnRvdWNoRXZlbnRzLnN0YXJ0ID09PSAndG91Y2hzdGFydCcgJiYgc3dpcGVyLnN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHN3aXBlci5wYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHtcbiAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgICAgY2FwdHVyZTogZmFsc2VcbiAgICAgIH0gOiBmYWxzZTtcblxuICAgICAgaWYgKGluVmlldykge1xuICAgICAgICBzd2lwZXIubGF6eS5sb2FkKCk7XG4gICAgICAgICRzY3JvbGxFbGVtZW50Lm9mZignc2Nyb2xsJywgc3dpcGVyLmxhenkuY2hlY2tJblZpZXdPbkxvYWQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9IGVsc2UgaWYgKCFzd2lwZXIubGF6eS5zY3JvbGxIYW5kbGVyQXR0YWNoZWQpIHtcbiAgICAgICAgc3dpcGVyLmxhenkuc2Nyb2xsSGFuZGxlckF0dGFjaGVkID0gdHJ1ZTtcbiAgICAgICAgJHNjcm9sbEVsZW1lbnQub24oJ3Njcm9sbCcsIHN3aXBlci5sYXp5LmNoZWNrSW5WaWV3T25Mb2FkLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIExhenkkMSA9IHtcbiAgICBuYW1lOiAnbGF6eScsXG4gICAgcGFyYW1zOiB7XG4gICAgICBsYXp5OiB7XG4gICAgICAgIGNoZWNrSW5WaWV3OiBmYWxzZSxcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIGxvYWRQcmV2TmV4dDogZmFsc2UsXG4gICAgICAgIGxvYWRQcmV2TmV4dEFtb3VudDogMSxcbiAgICAgICAgbG9hZE9uVHJhbnNpdGlvblN0YXJ0OiBmYWxzZSxcbiAgICAgICAgc2Nyb2xsaW5nRWxlbWVudDogJycsXG4gICAgICAgIGVsZW1lbnRDbGFzczogJ3N3aXBlci1sYXp5JyxcbiAgICAgICAgbG9hZGluZ0NsYXNzOiAnc3dpcGVyLWxhenktbG9hZGluZycsXG4gICAgICAgIGxvYWRlZENsYXNzOiAnc3dpcGVyLWxhenktbG9hZGVkJyxcbiAgICAgICAgcHJlbG9hZGVyQ2xhc3M6ICdzd2lwZXItbGF6eS1wcmVsb2FkZXInXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICAgIGxhenk6IF9leHRlbmRzKHtcbiAgICAgICAgICBpbml0aWFsSW1hZ2VMb2FkZWQ6IGZhbHNlXG4gICAgICAgIH0sIExhenkpXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBiZWZvcmVJbml0OiBmdW5jdGlvbiBiZWZvcmVJbml0KHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sYXp5LmVuYWJsZWQgJiYgc3dpcGVyLnBhcmFtcy5wcmVsb2FkSW1hZ2VzKSB7XG4gICAgICAgICAgc3dpcGVyLnBhcmFtcy5wcmVsb2FkSW1hZ2VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sYXp5LmVuYWJsZWQgJiYgIXN3aXBlci5wYXJhbXMubG9vcCAmJiBzd2lwZXIucGFyYW1zLmluaXRpYWxTbGlkZSA9PT0gMCkge1xuICAgICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxhenkuY2hlY2tJblZpZXcpIHtcbiAgICAgICAgICAgIHN3aXBlci5sYXp5LmNoZWNrSW5WaWV3T25Mb2FkKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXBlci5sYXp5LmxvYWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzY3JvbGw6IGZ1bmN0aW9uIHNjcm9sbChzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZnJlZU1vZGUgJiYgIXN3aXBlci5wYXJhbXMuZnJlZU1vZGVTdGlja3kpIHtcbiAgICAgICAgICBzd2lwZXIubGF6eS5sb2FkKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAnc2Nyb2xsYmFyRHJhZ01vdmUgcmVzaXplIF9mcmVlTW9kZU5vTW9tZW50dW1SZWxlYXNlJzogZnVuY3Rpb24gbGF6eUxvYWQoc3dpcGVyKSB7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxhenkuZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci5sYXp5LmxvYWQoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRyYW5zaXRpb25TdGFydDogZnVuY3Rpb24gdHJhbnNpdGlvblN0YXJ0KHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sYXp5LmVuYWJsZWQpIHtcbiAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sYXp5LmxvYWRPblRyYW5zaXRpb25TdGFydCB8fCAhc3dpcGVyLnBhcmFtcy5sYXp5LmxvYWRPblRyYW5zaXRpb25TdGFydCAmJiAhc3dpcGVyLmxhenkuaW5pdGlhbEltYWdlTG9hZGVkKSB7XG4gICAgICAgICAgICBzd2lwZXIubGF6eS5sb2FkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gdHJhbnNpdGlvbkVuZChzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubGF6eS5lbmFibGVkICYmICFzd2lwZXIucGFyYW1zLmxhenkubG9hZE9uVHJhbnNpdGlvblN0YXJ0KSB7XG4gICAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2xpZGVDaGFuZ2U6IGZ1bmN0aW9uIHNsaWRlQ2hhbmdlKHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sYXp5LmVuYWJsZWQgJiYgc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBDb250cm9sbGVyID0ge1xuICAgIExpbmVhclNwbGluZTogZnVuY3Rpb24gTGluZWFyU3BsaW5lKHgsIHkpIHtcbiAgICAgIHZhciBiaW5hcnlTZWFyY2ggPSBmdW5jdGlvbiBzZWFyY2goKSB7XG4gICAgICAgIHZhciBtYXhJbmRleDtcbiAgICAgICAgdmFyIG1pbkluZGV4O1xuICAgICAgICB2Y
24510XIgZ3Vlc3M7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyYXksIHZhbCkge1xuICAgICAgICAgIG1pbkluZGV4ID0gLTE7XG4gICAgICAgICAgbWF4SW5kZXggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgICAgICB3aGlsZSAobWF4SW5kZXggLSBtaW5JbmRleCA+IDEpIHtcbiAgICAgICAgICAgIGd1ZXNzID0gbWF4SW5kZXggKyBtaW5JbmRleCA+PiAxO1xuXG4gICAgICAgICAgICBpZiAoYXJyYXlbZ3Vlc3NdIDw9IHZhbCkge1xuICAgICAgICAgICAgICBtaW5JbmRleCA9IGd1ZXNzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWF4SW5kZXggPSBndWVzcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbWF4SW5kZXg7XG4gICAgICAgIH07XG4gICAgICB9KCk7XG5cbiAgICAgIHRoaXMueCA9IHg7XG4gICAgICB0aGlzLnkgPSB5O1xuICAgICAgdGhpcy5sYXN0SW5kZXggPSB4Lmxlbmd0aCAtIDE7IC8vIEdpdmVuIGFuIHggdmFsdWUgKHgyKSwgcmV0dXJuIHRoZSBleHBlY3RlZCB5MiB2YWx1ZTpcbiAgICAgIC8vICh4MSx5MSkgaXMgdGhlIGtub3duIHBvaW50IGJlZm9yZSBnaXZlbiB2YWx1ZSxcbiAgICAgIC8vICh4Myx5MykgaXMgdGhlIGtub3duIHBvaW50IGFmdGVyIGdpdmVuIHZhbHVlLlxuXG4gICAgICB2YXIgaTE7XG4gICAgICB2YXIgaTM7XG5cbiAgICAgIHRoaXMuaW50ZXJwb2xhdGUgPSBmdW5jdGlvbiBpbnRlcnBvbGF0ZSh4Mikge1xuICAgICAgICBpZiAoIXgyKSByZXR1cm4gMDsgLy8gR2V0IHRoZSBpbmRleGVzIG9mIHgxIGFuZCB4MyAodGhlIGFycmF5IGluZGV4ZXMgYmVmb3JlIGFuZCBhZnRlciBnaXZlbiB4Mik6XG5cbiAgICAgICAgaTMgPSBiaW5hcnlTZWFyY2godGhpcy54LCB4Mik7XG4gICAgICAgIGkxID0gaTMgLSAxOyAvLyBXZSBoYXZlIG91ciBpbmRleGVzIGkxICYgaTMsIHNvIHdlIGNhbiBjYWxjdWxhdGUgYWxyZWFkeTpcbiAgICAgICAgLy8geTIgOj0gKCh4MuKIkngxKSDDlyAoeTPiiJJ5MSkpIMO3ICh4M+KIkngxKSArIHkxXG5cbiAgICAgICAgcmV0dXJuICh4MiAtIHRoaXMueFtpMV0pICogKHRoaXMueVtpM10gLSB0aGlzLnlbaTFdKSAvICh0aGlzLnhbaTNdIC0gdGhpcy54W2kxXSkgKyB0aGlzLnlbaTFdO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICAvLyB4eHg6IGZvciBub3cgaSB3aWxsIGp1c3Qgc2F2ZSBvbmUgc3BsaW5lIGZ1bmN0aW9uIHRvIHRvXG4gICAgZ2V0SW50ZXJwb2xhdGVGdW5jdGlvbjogZnVuY3Rpb24gZ2V0SW50ZXJwb2xhdGVGdW5jdGlvbihjKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcblxuICAgICAgaWYgKCFzd2lwZXIuY29udHJvbGxlci5zcGxpbmUpIHtcbiAgICAgICAgc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lID0gc3dpcGVyLnBhcmFtcy5sb29wID8gbmV3IENvbnRyb2xsZXIuTGluZWFyU3BsaW5lKHN3aXBlci5zbGlkZXNHcmlkLCBjLnNsaWRlc0dyaWQpIDogbmV3IENvbnRyb2xsZXIuTGluZWFyU3BsaW5lKHN3aXBlci5zbmFwR3JpZCwgYy5zbmFwR3JpZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZShfc2V0VHJhbnNsYXRlLCBieUNvbnRyb2xsZXIpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIGNvbnRyb2xsZWQgPSBzd2lwZXIuY29udHJvbGxlci5jb250cm9sO1xuICAgICAgdmFyIG11bHRpcGxpZXI7XG4gICAgICB2YXIgY29udHJvbGxlZFRyYW5zbGF0ZTtcbiAgICAgIHZhciBTd2lwZXIgPSBzd2lwZXIuY29uc3RydWN0b3I7XG5cbiAgICAgIGZ1bmN0aW9uIHNldENvbnRyb2xsZWRUcmFuc2xhdGUoYykge1xuICAgICAgICAvLyB0aGlzIHdpbGwgY3JlYXRlIGFuIEludGVycG9sYXRlIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSBzbmFwR3JpZHNcbiAgICAgICAgLy8geCBpcyB0aGUgR3JpZCBvZiB0aGUgc2Nyb2xsZWQgc2Nyb2xsZXIgYW5kIHkgd2lsbCBiZSB0aGUgY29udHJvbGxlZCBzY3JvbGxlclxuICAgICAgICAvLyBpdCBtYWtlcyBzZW5zZSB0byBjcmVhdGUgdGhpcyBvbmx5IG9uY2UgYW5kIHJlY2FsbCBpdCBmb3IgdGhlIGludGVycG9sYXRpb25cbiAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIGRvZXMgYSBsb3Qgb2YgdmFsdWUgY2FjaGluZyBmb3IgcGVyZm9ybWFuY2VcbiAgICAgICAgdmFyIHRyYW5zbGF0ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyAtc3dpcGVyLnRyYW5zbGF0ZSA6IHN3aXBlci50cmFuc2xhdGU7XG5cbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5ieSA9PT0gJ3NsaWRlJykge1xuICAgICAgICAgIHN3aXBlci5jb250cm9sbGVyLmdldEludGVycG9sYXRlRnVuY3Rpb24oYyk7IC8vIGkgYW0gbm90IHN1cmUgd2h5IHRoZSB2YWx1ZXMgaGF2ZSB0byBiZSBtdWx0aXBsaWNhdGVkIHRoaXMgd2F5LCB0cmllZCB0byBpbnZlcnQgdGhlIHNuYXBHcmlkXG4gICAgICAgICAgLy8gYnV0IGl0IGRpZCBub3Qgd29yayBvdXRcblxuICAgICAgICAgIGNvbnRyb2xsZWRUcmFuc2xhdGUgPSAtc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lLmludGVycG9sYXRlKC10cmFuc2xhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb250cm9sbGVkVHJhbnNsYXRlIHx8IHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5ieSA9PT0gJ2NvbnRhaW5lcicpIHtcbiAgICAgICAgICBtdWx0aXBsaWVyID0gKGMubWF4VHJhbnNsYXRlKCkgLSBjLm1pblRyYW5zbGF0ZSgpKSAvIChzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpO1xuICAgICAgICAgIGNvbnRyb2xsZWRUcmFuc2xhdGUgPSAodHJhbnNsYXRlIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSAqIG11bHRpcGxpZXIgKyBjLm1pblRyYW5zbGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5pbnZlcnNlKSB7XG4gICAgICAgICAgY29udHJvbGxlZFRyYW5zbGF0ZSA9IGMubWF4VHJhbnNsYXRlKCkgLSBjb250cm9sbGVkVHJhbnNsYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgYy51cGRhdGVQcm9ncmVzcyhjb250cm9sbGVkVHJhbnNsYXRlKTtcbiAgICAgICAgYy5zZXRUcmFuc2xhdGUoY29udHJvbGxlZFRyYW5zbGF0ZSwgc3dpcGVyKTtcbiAgICAgICAgYy51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgICBjLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29udHJvbGxlZCkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250cm9sbGVkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgaWYgKGNvbnRyb2xsZWRbaV0gIT09IGJ5Q29udHJvbGxlciAmJiBjb250cm9sbGVkW2ldIGluc3RhbmNlb2YgU3dpcGVyKSB7XG4gICAgICAgICAgICBzZXRDb250cm9sbGVkVHJhbnNsYXRlKGNvbnRyb2xsZWRbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb250cm9sbGVkIGluc3RhbmNlb2YgU3dpcGVyICYmIGJ5Q29udHJvbGxlciAhPT0gY29udHJvbGxlZCkge1xuICAgICAgICBzZXRDb250cm9sbGVkVHJhbnNsYXRlKGNvbnRyb2xsZWQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbiwgYnlDb250cm9sbGVyKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBTd2lwZXIgPSBzd2lwZXIuY29uc3RydWN0b3I7XG4gICAgICB2YXIgY29udHJvbGxlZCA9IHN3aXBlci5jb250cm9sbGVyLmNvbnRyb2w7XG4gICAgICB2YXIgaTtcblxuICAgICAgZnVuY3Rpb24gc2V0Q29udHJvbGxlZFRyYW5zaXRpb24oYykge1xuICAgICAgICBjLnNldFRyYW5zaXRpb24oZHVyYXRpb24sIHN3aXBlcik7XG5cbiAgICAgICAgaWYgKGR1cmF0aW9uICE9PSAwKSB7XG4gICAgICAgICAgYy50cmFuc2l0aW9uU3RhcnQoKTtcblxuICAgICAgICAgIGlmIChjLnBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgICAgICAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGMudXBkYXRlQXV0b0hlaWdodCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYy4kd3JhcHBlckVsLnRyYW5zaXRpb25FbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFjb250cm9sbGVkKSByZXR1cm47XG5cbiAgICAgICAgICAgIGlmIChjLnBhcmFtcy5sb29wICYmIHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5ieSA9PT0gJ3NsaWRlJykge1xuICAgICAgICAgICAgICBjLmxvb3BGaXgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYy50cmFuc2l0aW9uRW5kKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29udHJvbGxlZCkpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbnRyb2xsZWQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICBpZiAoY29udHJvbGxlZFtpXSAhPT0gYnlDb250cm9sbGVyICYmIGNvbnRyb2xsZWRbaV0gaW5zdGFuY2VvZiBTd2lwZXIpIHtcbiAgICAgICAgICAgIHNldENvbnRyb2xsZWRUcmFuc2l0aW9uKGNvbnRyb2xsZWRbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb250cm9sbGVkIGluc3RhbmNlb2YgU3dpcGVyICYmIGJ5Q29udHJvbGxlciAhPT0gY29udHJvbGxlZCkge1xuICAgICAgICBzZXRDb250cm9sbGVkVHJhbnNpdGlvbihjb250cm9sbGVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciBDb250cm9sbGVyJDEgPSB7XG4gICAgbmFtZTogJ2NvbnRyb2xsZXInLFxuICAgIHBhcmFtczoge1xuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBjb250cm9sOiB1bmRlZmluZWQsXG4gICAgICAgIGludmVyc2U6IGZhbHNlLFxuICAgICAgICBieTogJ3NsaWRlJyAvLyBvciAnY29udGFpbmVyJ1xuXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICAgIGNvbnRyb2xsZXI6IF9leHRlbmRzKHtcbiAgICAgICAgICBjb250cm9sOiBzd2lwZXIucGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbFxuICAgICAgICB9LCB
24510Db250cm9sbGVyKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLmNvbnRyb2xsZXIuY29udHJvbCkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChzd2lwZXIuY29udHJvbGxlci5zcGxpbmUpIHtcbiAgICAgICAgICBzd2lwZXIuY29udHJvbGxlci5zcGxpbmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIHN3aXBlci5jb250cm9sbGVyLnNwbGluZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlc2l6ZTogZnVuY3Rpb24gcmVzaXplKHN3aXBlcikge1xuICAgICAgICBpZiAoIXN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wpIHJldHVybjtcblxuICAgICAgICBpZiAoc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lKSB7XG4gICAgICAgICAgc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBzd2lwZXIuY29udHJvbGxlci5zcGxpbmU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvYnNlcnZlclVwZGF0ZTogZnVuY3Rpb24gb2JzZXJ2ZXJVcGRhdGUoc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLmNvbnRyb2xsZXIuY29udHJvbCkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChzd2lwZXIuY29udHJvbGxlci5zcGxpbmUpIHtcbiAgICAgICAgICBzd2lwZXIuY29udHJvbGxlci5zcGxpbmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIHN3aXBlci5jb250cm9sbGVyLnNwbGluZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKHN3aXBlciwgdHJhbnNsYXRlLCBieUNvbnRyb2xsZXIpIHtcbiAgICAgICAgaWYgKCFzd2lwZXIuY29udHJvbGxlci5jb250cm9sKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5jb250cm9sbGVyLnNldFRyYW5zbGF0ZSh0cmFuc2xhdGUsIGJ5Q29udHJvbGxlcik7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihzd2lwZXIsIGR1cmF0aW9uLCBieUNvbnRyb2xsZXIpIHtcbiAgICAgICAgaWYgKCFzd2lwZXIuY29udHJvbGxlci5jb250cm9sKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5jb250cm9sbGVyLnNldFRyYW5zaXRpb24oZHVyYXRpb24sIGJ5Q29udHJvbGxlcik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBBMTF5ID0ge1xuICAgIGdldFJhbmRvbU51bWJlcjogZnVuY3Rpb24gZ2V0UmFuZG9tTnVtYmVyKHNpemUpIHtcbiAgICAgIGlmIChzaXplID09PSB2b2lkIDApIHtcbiAgICAgICAgc2l6ZSA9IDE2O1xuICAgICAgfVxuXG4gICAgICB2Y
24510XIgcmFuZG9tQ2hhciA9IGZ1bmN0aW9uIHJhbmRvbUNoYXIoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKDE2ICogTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMTYpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuICd4Jy5yZXBlYXQoc2l6ZSkucmVwbGFjZSgveC9nLCByYW5kb21DaGFyKTtcbiAgICB9LFxuICAgIG1ha2VFbEZvY3VzYWJsZTogZnVuY3Rpb24gbWFrZUVsRm9jdXNhYmxlKCRlbCkge1xuICAgICAgJGVsLmF0dHIoJ3RhYkluZGV4JywgJzAnKTtcbiAgICAgIHJldHVybiAkZWw7XG4gICAgfSxcbiAgICBtYWtlRWxOb3RGb2N1c2FibGU6IGZ1bmN0aW9uIG1ha2VFbE5vdEZvY3VzYWJsZSgkZWwpIHtcbiAgICAgICRlbC5hdHRyKCd0YWJJbmRleCcsICctMScpO1xuICAgICAgcmV0dXJuICRlbDtcbiAgICB9LFxuICAgIGFkZEVsUm9sZTogZnVuY3Rpb24gYWRkRWxSb2xlKCRlbCwgcm9sZSkge1xuICAgICAgJGVsLmF0dHIoJ3JvbGUnLCByb2xlKTtcbiAgICAgIHJldHVybiAkZWw7XG4gICAgfSxcbiAgICBhZGRFbFJvbGVEZXNjcmlwdGlvbjogZnVuY3Rpb24gYWRkRWxSb2xlRGVzY3JpcHRpb24oJGVsLCBkZXNjcmlwdGlvbikge1xuICAgICAgJGVsLmF0dHIoJ2FyaWEtcm9sZWRlc2NyaXB0aW9uJywgZGVzY3JpcHRpb24pO1xuICAgICAgcmV0dXJuICRlbDtcbiAgICB9LFxuICAgIGFkZEVsQ29udHJvbHM6IGZ1bmN0aW9uIGFkZEVsQ29udHJvbHMoJGVsLCBjb250cm9scykge1xuICAgICAgJGVsLmF0dHIoJ2FyaWEtY29udHJvbHMnLCBjb250cm9scyk7XG4gICAgICByZXR1cm4gJGVsO1xuICAgIH0sXG4gICAgYWRkRWxMYWJlbDogZnVuY3Rpb24gYWRkRWxMYWJlbCgkZWwsIGxhYmVsKSB7XG4gICAgICAkZWwuYXR0cignYXJpYS1sYWJlbCcsIGxhYmVsKTtcbiAgICAgIHJldHVybiAkZWw7XG4gICAgfSxcbiAgICBhZGRFbElkOiBmdW5jdGlvbiBhZGRFbElkKCRlbCwgaWQpIHtcbiAgICAgICRlbC5hdHRyKCdpZCcsIGlkKTtcbiAgICAgIHJldHVybiAkZWw7XG4gICAgfSxcbiAgICBhZGRFbExpdmU6IGZ1bmN0aW9uIGFkZEVsTGl2ZSgkZWwsIGxpdmUpIHtcbiAgICAgICRlbC5hdHRyKCdhcmlhLWxpdmUnLCBsaXZlKTtcbiAgICAgIHJldHVybiAkZWw7XG4gICAgfSxcbiAgICBkaXNhYmxlRWw6IGZ1bmN0aW9uIGRpc2FibGVFbCgkZWwpIHtcbiAgICAgICRlbC5hdHRyKCdhcmlhLWRpc2FibGVkJywgdHJ1ZSk7XG4gICAgICByZXR1cm4gJGVsO1xuICAgIH0sXG4gICAgZW5hYmxlRWw6IGZ1bmN0aW9uIGVuYWJsZUVsKCRlbCkge1xuICAgICAgJGVsLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gJGVsO1xuICAgIH0sXG4gICAgb25FbnRlck9yU3BhY2VLZXk6IGZ1bmN0aW9uIG9uRW50ZXJPclNwYWNlS2V5KGUpIHtcbiAgICAgIGlmIChlLmtleUNvZGUgIT09IDEzICYmIGUua2V5Q29kZSAhPT0gMzIpIHJldHVybjtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuYTExeTtcbiAgICAgIHZhciAkdGFyZ2V0RWwgPSAkKGUudGFyZ2V0KTtcblxuICAgICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWwgJiYgJHRhcmdldEVsLmlzKHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWwpKSB7XG4gICAgICAgIGlmICghKHN3aXBlci5pc0VuZCAmJiAhc3dpcGVyLnBhcmFtcy5sb29wKSkge1xuICAgICAgICAgIHN3aXBlci5zbGlkZU5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzd2lwZXIuaXNFbmQpIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5ub3RpZnkocGFyYW1zLmxhc3RTbGlkZU1lc3NhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN3aXBlci5hMTF5Lm5vdGlmeShwYXJhbXMubmV4dFNsaWRlTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWwgJiYgJHRhcmdldEVsLmlzKHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWwpKSB7XG4gICAgICAgIGlmICghKHN3aXBlci5pc0JlZ2lubmluZyAmJiAhc3dpcGVyLnBhcmFtcy5sb29wKSkge1xuICAgICAgICAgIHN3aXBlci5zbGlkZVByZXYoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzd2lwZXIuaXNCZWdpbm5pbmcpIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5ub3RpZnkocGFyYW1zLmZpcnN0U2xpZGVNZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5ub3RpZnkocGFyYW1zLnByZXZTbGlkZU1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIucGFnaW5hdGlvbiAmJiAkdGFyZ2V0RWwuaXMoY2xhc3Nlc1RvU2VsZWN0b3Ioc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmJ1bGxldENsYXNzKSkpIHtcbiAgICAgICAgJHRhcmdldEVsWzBdLmNsaWNrKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBub3RpZnk6IGZ1bmN0aW9uIG5vdGlmeShtZXNzYWdlKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBub3RpZmljYXRpb24gPSBzd2lwZXIuYTExeS5saXZlUmVnaW9uO1xuICAgICAgaWYgKG5vdGlmaWNhdGlvbi5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIG5vdGlmaWNhdGlvbi5odG1sKCcnKTtcbiAgICAgIG5vdGlmaWNhdGlvbi5odG1sKG1lc3NhZ2UpO1xuICAgIH0sXG4gICAgdXBkYXRlTmF2aWdhdGlvbjogZnVuY3Rpb24gdXBkYXRlTmF2aWdhdGlvbigpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCB8fCAhc3dpcGVyLm5hdmlnYXRpb24pIHJldHVybjtcbiAgICAgIHZhciBfc3dpcGVyJG5hdmlnYXRpb24gPSBzd2lwZXIubmF2aWdhdGlvbixcbiAgICAgICAgICAkbmV4dEVsID0gX3N3aXBlciRuYXZpZ2F0aW9uLiRuZXh0RWwsXG4gICAgICAgICAgJHByZXZFbCA9IF9zd2lwZXIkbmF2aWdhdGlvbi4kcHJldkVsO1xuXG4gICAgICBpZiAoJHByZXZFbCAmJiAkcHJldkVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHN3aXBlci5pc0JlZ2lubmluZykge1xuICAgICAgICAgIHN3aXBlci5hMTF5LmRpc2FibGVFbCgkcHJldkVsKTtcbiAgICAgICAgICBzd2lwZXIuYTExeS5tYWtlRWxOb3RGb2N1c2FibGUoJHByZXZFbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpcGVyLmExMXkuZW5hYmxlRWwoJHByZXZFbCk7XG4gICAgICAgICAgc3dpcGVyLmExMXkubWFrZUVsRm9jdXNhYmxlKCRwcmV2RWwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICgkbmV4dEVsICYmICRuZXh0RWwubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoc3dpcGVyLmlzRW5kKSB7XG4gICAgICAgICAgc3dpcGVyLmExMXkuZGlzYWJsZUVsKCRuZXh0RWwpO1xuICAgICAgICAgIHN3aXBlci5hMTF5Lm1ha2VFbE5vdEZvY3VzYWJsZSgkbmV4dEVsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5lbmFibGVFbCgkbmV4dEVsKTtcbiAgICAgICAgICBzd2lwZXIuYTExeS5tYWtlRWxGb2N1c2FibGUoJG5leHRFbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHVwZGF0ZVBhZ2luYXRpb246IGZ1bmN0aW9uIHVwZGF0ZVBhZ2luYXRpb24oKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmExMXk7XG5cbiAgICAgIGlmIChzd2lwZXIucGFnaW5hdGlvbiAmJiBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uY2xpY2thYmxlICYmIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cy5sZW5ndGgpIHtcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cy5lYWNoKGZ1bmN0aW9uIChidWxsZXRFbCkge1xuICAgICAgICAgIHZhciAkYnVsbGV0RWwgPSAkKGJ1bGxldEVsKTtcbiAgICAgICAgICBzd2lwZXIuYTExeS5tYWtlRWxGb2N1c2FibGUoJGJ1bGxldEVsKTtcblxuICAgICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLnJlbmRlckJ1bGxldCkge1xuICAgICAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxSb2xlKCRidWxsZXRFbCwgJ2J1dHRvbicpO1xuICAgICAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxMYWJlbCgkYnVsbGV0RWwsIHBhcmFtcy5wYWdpbmF0aW9uQnVsbGV0TWVzc2FnZS5yZXBsYWNlKC9cXHtcXHtpbmRleFxcfVxcfS8sICRidWxsZXRFbC5pbmRleCgpICsgMSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5hMTF5O1xuICAgICAgc3dpcGVyLiRlbC5hcHBlbmQoc3dpcGVyLmExMXkubGl2ZVJlZ2lvbik7IC8vIENvbnRhaW5lclxuXG4gICAgICB2Y
24510XIgJGNvbnRhaW5lckVsID0gc3dpcGVyLiRlbDtcblxuICAgICAgaWYgKHBhcmFtcy5jb250YWluZXJSb2xlRGVzY3JpcHRpb25NZXNzYWdlKSB7XG4gICAgICAgIHN3aXBlci5hMTF5LmFkZEVsUm9sZURlc2NyaXB0aW9uKCRjb250YWluZXJFbCwgcGFyYW1zLmNvbnRhaW5lclJvbGVEZXNjcmlwdGlvbk1lc3NhZ2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLmNvbnRhaW5lck1lc3NhZ2UpIHtcbiAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxMYWJlbCgkY29udGFpbmVyRWwsIHBhcmFtcy5jb250YWluZXJNZXNzYWdlKTtcbiAgICAgIH0gLy8gV3JhcHBlclxuXG5cbiAgICAgIHZhciAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgICB2YXIgd3JhcHBlcklkID0gJHdyYXBwZXJFbC5hdHRyKCdpZCcpIHx8IFwic3dpcGVyLXdyYXBwZXItXCIgKyBzd2lwZXIuYTExeS5nZXRSYW5kb21OdW1iZXIoMTYpO1xuICAgICAgdmFyIGxpdmUgPSBzd2lwZXIucGFyYW1zLmF1dG9wbGF5ICYmIHN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZW5hYmxlZCA/ICdvZmYnIDogJ3BvbGl0ZSc7XG4gICAgICBzd2lwZXIuYTExeS5hZGRFbElkKCR3cmFwcGVyRWwsIHdyYXBwZXJJZCk7XG4gICAgICBzd2lwZXIuYTExeS5hZGRFbExpdmUoJHdyYXBwZXJFbCwgbGl2ZSk7IC8vIFNsaWRlXG5cbiAgICAgIGlmIChwYXJhbXMuaXRlbVJvbGVEZXNjcmlwdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxSb2xlRGVzY3JpcHRpb24oJChzd2lwZXIuc2xpZGVzKSwgcGFyYW1zLml0ZW1Sb2xlRGVzY3JpcHRpb25NZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgc3dpcGVyLmExMXkuYWRkRWxSb2xlKCQoc3dpcGVyLnNsaWRlcyksIHBhcmFtcy5zbGlkZVJvbGUpO1xuICAgICAgc3dpcGVyLnNsaWRlcy5lYWNoKGZ1bmN0aW9uIChzbGlkZUVsKSB7XG4gICAgICAgIHZhciAkc2xpZGVFbCA9ICQoc2xpZGVFbCk7XG4gICAgICAgIHZhciBhcmlhTGFiZWxNZXNzYWdlID0gcGFyYW1zLnNsaWRlTGFiZWxNZXNzYWdlLnJlcGxhY2UoL1xce1xce2luZGV4XFx9XFx9LywgJHNsaWRlRWwuaW5kZXgoKSArIDEpLnJlcGxhY2UoL1xce1xce3NsaWRlc0xlbmd0aFxcfVxcfS8sIHN3aXBlci5zbGlkZXMubGVuZ3RoKTtcbiAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxMYWJlbCgkc2xpZGVFbCwgYXJpYUxhYmVsTWVzc2FnZSk7XG4gICAgICB9KTsgLy8gTmF2aWdhdGlvblxuXG4gICAgICB2Y
24510XIgJG5leHRFbDtcbiAgICAgIHZhciAkcHJldkVsO1xuXG4gICAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24gJiYgc3dpcGVyLm5hdmlnYXRpb24uJG5leHRFbCkge1xuICAgICAgICAkbmV4dEVsID0gc3dpcGVyLm5hdmlnYXRpb24uJG5leHRFbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWwpIHtcbiAgICAgICAgJHByZXZFbCA9IHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWw7XG4gICAgICB9XG5cbiAgICAgIGlmICgkbmV4dEVsICYmICRuZXh0RWwubGVuZ3RoKSB7XG4gICAgICAgIHN3aXBlci5hMTF5Lm1ha2VFbEZvY3VzYWJsZSgkbmV4dEVsKTtcblxuICAgICAgICBpZiAoJG5leHRFbFswXS50YWdOYW1lICE9PSAnQlVUVE9OJykge1xuICAgICAgICAgIHN3aXBlci5hMTF5LmFkZEVsUm9sZSgkbmV4dEVsLCAnYnV0dG9uJyk7XG4gICAgICAgICAgJG5leHRFbC5vbigna2V5ZG93bicsIHN3aXBlci5hMTF5Lm9uRW50ZXJPclNwYWNlS2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXBlci5hMTF5LmFkZEVsTGFiZWwoJG5leHRFbCwgcGFyYW1zLm5leHRTbGlkZU1lc3NhZ2UpO1xuICAgICAgICBzd2lwZXIuYTExeS5hZGRFbENvbnRyb2xzKCRuZXh0RWwsIHdyYXBwZXJJZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgkcHJldkVsICYmICRwcmV2RWwubGVuZ3RoKSB7XG4gICAgICAgIHN3aXBlci5hMTF5Lm1ha2VFbEZvY3VzYWJsZSgkcHJldkVsKTtcblxuICAgICAgICBpZiAoJHByZXZFbFswXS50YWdOYW1lICE9PSAnQlVUVE9OJykge1xuICAgICAgICAgIHN3aXBlci5hMTF5LmFkZEVsUm9sZSgkcHJldkVsLCAnYnV0dG9uJyk7XG4gICAgICAgICAgJHByZXZFbC5vbigna2V5ZG93bicsIHN3aXBlci5hMTF5Lm9uRW50ZXJPclNwYWNlS2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXBlci5hMTF5LmFkZEVsTGFiZWwoJHByZXZFbCwgcGFyYW1zLnByZXZTbGlkZU1lc3NhZ2UpO1xuICAgICAgICBzd2lwZXIuYTExeS5hZGRFbENvbnRyb2xzKCRwcmV2RWwsIHdyYXBwZXJJZCk7XG4gICAgICB9IC8vIFBhZ2luYXRpb25cblxuXG4gICAgICBpZiAoc3dpcGVyLnBhZ2luYXRpb24gJiYgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmNsaWNrYWJsZSAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzICYmIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMubGVuZ3RoKSB7XG4gICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLiRlbC5vbigna2V5ZG93bicsIGNsYXNzZXNUb1NlbGVjdG9yKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5idWxsZXRDbGFzcyksIHN3aXBlci5hMTF5Lm9uRW50ZXJPclNwYWNlS2V5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIuYTExeS5saXZlUmVnaW9uICYmIHN3aXBlci5hMTF5LmxpdmVSZWdpb24ubGVuZ3RoID4gMCkgc3dpcGVyLmExMXkubGl2ZVJlZ2lvbi5yZW1vdmUoKTtcbiAgICAgIHZhciAkbmV4dEVsO1xuICAgICAgdmFyICRwcmV2RWw7XG5cbiAgICAgIGlmIChzd2lwZXIubmF2aWdhdGlvbiAmJiBzd2lwZXIubmF2aWdhdGlvbi4kbmV4dEVsKSB7XG4gICAgICAgICRuZXh0RWwgPSBzd2lwZXIubmF2aWdhdGlvbi4kbmV4dEVsO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24gJiYgc3dpcGVyLm5hdmlnYXRpb24uJHByZXZFbCkge1xuICAgICAgICAkcHJldkVsID0gc3dpcGVyLm5hdmlnYXRpb24uJHByZXZFbDtcbiAgICAgIH1cblxuICAgICAgaWYgKCRuZXh0RWwpIHtcbiAgICAgICAgJG5leHRFbC5vZmYoJ2tleWRvd24nLCBzd2lwZXIuYTExeS5vbkVudGVyT3JTcGFjZUtleSk7XG4gICAgICB9XG5cbiAgICAgIGlmICgkcHJldkVsKSB7XG4gICAgICAgICRwcmV2RWwub2ZmKCdrZXlkb3duJywgc3dpcGVyLmExMXkub25FbnRlck9yU3BhY2VLZXkpO1xuICAgICAgfSAvLyBQYWdpbmF0aW9uXG5cblxuICAgICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5jbGlja2FibGUgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cyAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzLmxlbmd0aCkge1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi4kZWwub2ZmKCdrZXlkb3duJywgY2xhc3Nlc1RvU2VsZWN0b3Ioc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmJ1bGxldENsYXNzKSwgc3dpcGVyLmExMXkub25FbnRlck9yU3BhY2VLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIEExMXkkMSA9IHtcbiAgICBuYW1lOiAnYTExeScsXG4gICAgcGFyYW1zOiB7XG4gICAgICBhMTF5OiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIG5vdGlmaWNhdGlvbkNsYXNzOiAnc3dpcGVyLW5vdGlmaWNhdGlvbicsXG4gICAgICAgIHByZXZTbGlkZU1lc3NhZ2U6ICdQcmV2aW91cyBzbGlkZScsXG4gICAgICAgIG5leHRTbGlkZU1lc3NhZ2U6ICdOZXh0IHNsaWRlJyxcbiAgICAgICAgZmlyc3RTbGlkZU1lc3NhZ2U6ICdUaGlzIGlzIHRoZSBmaXJzdCBzbGlkZScsXG4gICAgICAgIGxhc3RTbGlkZU1lc3NhZ2U6ICdUaGlzIGlzIHRoZSBsYXN0IHNsaWRlJyxcbiAgICAgICAgcGFnaW5hdGlvbkJ1bGxldE1lc3NhZ2U6ICdHbyB0byBzbGlkZSB7e2luZGV4fX0nLFxuICAgICAgICBzbGlkZUxhYmVsTWVzc2FnZTogJ3t7aW5kZXh9fSAvIHt7c2xpZGVzTGVuZ3RofX0nLFxuICAgICAgICBjb250YWluZXJNZXNzYWdlOiBudWxsLFxuICAgICAgICBjb250YWluZXJSb2xlRGVzY3JpcHRpb25NZXNzYWdlOiBudWxsLFxuICAgICAgICBpdGVtUm9sZURlc2NyaXB0aW9uTWVzc2FnZTogbnVsbCxcbiAgICAgICAgc2xpZGVSb2xlOiAnZ3JvdXAnXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICAgIGExMXk6IF9leHRlbmRzKHt9LCBBMTF5LCB7XG4gICAgICAgICAgbGl2ZVJlZ2lvbjogJChcIjxzcGFuIGNsYXNzPVxcXCJcIiArIHN3aXBlci5wYXJhbXMuYTExeS5ub3RpZmljYXRpb25DbGFzcyArIFwiXFxcIiBhcmlhLWxpdmU9XFxcImFzc2VydGl2ZVxcXCIgYXJpYS1hdG9taWM9XFxcInRydWVcXFwiPjwvc3Bhbj5cIilcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGFmdGVySW5pdDogZnVuY3Rpb24gYWZ0ZXJJbml0KHN3aXBlcikge1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMuYTExeS5lbmFibGVkKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5hMTF5LmluaXQoKTtcbiAgICAgICAgc3dpcGVyLmExMXkudXBkYXRlTmF2aWdhdGlvbigpO1xuICAgICAgfSxcbiAgICAgIHRvRWRnZTogZnVuY3Rpb24gdG9FZGdlKHN3aXBlcikge1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMuYTExeS5lbmFibGVkKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5hMTF5LnVwZGF0ZU5hdmlnYXRpb24oKTtcbiAgICAgIH0sXG4gICAgICBmcm9tRWRnZTogZnVuY3Rpb24gZnJvbUVkZ2Uoc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5hMTF5LmVuYWJsZWQpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLmExMXkudXBkYXRlTmF2aWdhdGlvbigpO1xuICAgICAgfSxcbiAgICAgIHBhZ2luYXRpb25VcGRhdGU6IGZ1bmN0aW9uIHBhZ2luYXRpb25VcGRhdGUoc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5hMTF5LmVuYWJsZWQpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLmExMXkudXBkYXRlUGFnaW5hdGlvbigpO1xuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5hMTF5LmVuYWJsZWQpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLmExMXkuZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgSGlzdG9yeSA9IHtcbiAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMuaGlzdG9yeSkgcmV0dXJuO1xuXG4gICAgICBpZiAoIXdpbmRvdy5oaXN0b3J5IHx8ICF3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUpIHtcbiAgICAgICAgc3dpcGVyLnBhcmFtcy5oaXN0b3J5LmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgaGlzdG9yeSA9IHN3aXBlci5oaXN0b3J5O1xuICAgICAgaGlzdG9yeS5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICBoaXN0b3J5LnBhdGhzID0gSGlzdG9yeS5nZXRQYXRoVmFsdWVzKHN3aXBlci5wYXJhbXMudXJsKTtcbiAgICAgIGlmICghaGlzdG9yeS5wYXRocy5rZXkgJiYgIWhpc3RvcnkucGF0aHMudmFsdWUpIHJldHVybjtcbiAgICAgIGhpc3Rvcnkuc2Nyb2xsVG9TbGlkZSgwLCBoaXN0b3J5LnBhdGhzLnZhbHVlLCBzd2lwZXIucGFyYW1zLnJ1bkNhbGxiYWNrc09uSW5pdCk7XG5cbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSkge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCBzd2lwZXIuaGlzdG9yeS5zZXRIaXN0b3J5UG9wU3RhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuXG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMuaGlzdG9yeS5yZXBsYWNlU3RhdGUpIHtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgc3dpcGVyLmhpc3Rvcnkuc2V0SGlzdG9yeVBvcFN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldEhpc3RvcnlQb3BTdGF0ZTogZnVuY3Rpb24gc2V0SGlzdG9yeVBvcFN0YXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIuaGlzdG9yeS5wYXRocyA9IEhpc3RvcnkuZ2V0UGF0aFZhbHVlcyhzd2lwZXIucGFyYW1zLnVybCk7XG4gICAgICBzd2lwZXIuaGlzdG9yeS5zY3JvbGxUb1NsaWRlKHN3aXBlci5wYXJhbXMuc3BlZWQsIHN3aXBlci5oaXN0b3J5LnBhdGhzLnZhbHVlLCBmYWxzZSk7XG4gICAgfSxcbiAgICBnZXRQYXRoVmFsdWVzOiBmdW5jdGlvbiBnZXRQYXRoVmFsdWVzKHVybE92ZXJyaWRlKSB7XG4gICAgICB2Y
24510XIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgICB2YXIgbG9jYXRpb247XG5cbiAgICAgIGlmICh1cmxPdmVycmlkZSkge1xuICAgICAgICBsb2NhdGlvbiA9IG5ldyBVUkwodXJsT3ZlcnJpZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXRoQXJyYXkgPSBsb2NhdGlvbi5wYXRobmFtZS5zbGljZSgxKS5zcGxpdCgnLycpLmZpbHRlcihmdW5jdGlvbiAocGFydCkge1xuICAgICAgICByZXR1cm4gcGFydCAhPT0gJyc7XG4gICAgICB9KTtcbiAgICAgIHZhciB0b3RhbCA9IHBhdGhBcnJheS5sZW5ndGg7XG4gICAgICB2YXIga2V5ID0gcGF0aEFycmF5W3RvdGFsIC0gMl07XG4gICAgICB2YXIgdmFsdWUgPSBwYXRoQXJyYXlbdG90YWwgLSAxXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgIH07XG4gICAgfSxcbiAgICBzZXRIaXN0b3J5OiBmdW5jdGlvbiBzZXRIaXN0b3J5KGtleSwgaW5kZXgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICAgICAgaWYgKCFzd2lwZXIuaGlzdG9yeS5pbml0aWFsaXplZCB8fCAhc3dpcGVyLnBhcmFtcy5oaXN0b3J5LmVuYWJsZWQpIHJldHVybjtcbiAgICAgIHZhciBsb2NhdGlvbjtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudXJsKSB7XG4gICAgICAgIGxvY2F0aW9uID0gbmV3IFVSTChzd2lwZXIucGFyYW1zLnVybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNsaWRlID0gc3dpcGVyLnNsaWRlcy5lcShpbmRleCk7XG4gICAgICB2Y
24510XIgdmFsdWUgPSBIaXN0b3J5LnNsdWdpZnkoc2xpZGUuYXR0cignZGF0YS1oaXN0b3J5JykpO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5oaXN0b3J5LnJvb3QubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgcm9vdCA9IHN3aXBlci5wYXJhbXMuaGlzdG9yeS5yb290O1xuICAgICAgICBpZiAocm9vdFtyb290Lmxlbmd0aCAtIDFdID09PSAnLycpIHJvb3QgPSByb290LnNsaWNlKDAsIHJvb3QubGVuZ3RoIC0gMSk7XG4gICAgICAgIHZhbHVlID0gcm9vdCArIFwiL1wiICsga2V5ICsgXCIvXCIgKyB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoIWxvY2F0aW9uLnBhdGhuYW1lLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgdmFsdWUgPSBrZXkgKyBcIi9cIiArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgY3VycmVudFN0YXRlID0gd2luZG93Lmhpc3Rvcnkuc3RhdGU7XG5cbiAgICAgIGlmIChjdXJyZW50U3RhdGUgJiYgY3VycmVudFN0YXRlLnZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmhpc3RvcnkucmVwbGFjZVN0YXRlKSB7XG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIH0sIG51bGwsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSh7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIH0sIG51bGwsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNsdWdpZnk6IGZ1bmN0aW9uIHNsdWdpZnkodGV4dCkge1xuICAgICAgcmV0dXJuIHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csICctJykucmVwbGFjZSgvW15cXHctXSsvZywgJycpLnJlcGxhY2UoLy0tKy9nLCAnLScpLnJlcGxhY2UoL14tKy8sICcnKS5yZXBsYWNlKC8tKyQvLCAnJyk7XG4gICAgfSxcbiAgICBzY3JvbGxUb1NsaWRlOiBmdW5jdGlvbiBzY3JvbGxUb1NsaWRlKHNwZWVkLCB2YWx1ZSwgcnVuQ2FsbGJhY2tzKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcblxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzd2lwZXIuc2xpZGVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgdmFyIHNsaWRlID0gc3dpcGVyLnNsaWRlcy5lcShpKTtcbiAgICAgICAgICB2YXIgc2xpZGVIaXN0b3J5ID0gSGlzdG9yeS5zbHVnaWZ5KHNsaWRlLmF0dHIoJ2RhdGEtaGlzdG9yeScpKTtcblxuICAgICAgICAgIGlmIChzbGlkZUhpc3RvcnkgPT09IHZhbHVlICYmICFzbGlkZS5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBzbGlkZS5pbmRleCgpO1xuICAgICAgICAgICAgc3dpcGVyLnNsaWRlVG8oaW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oMCwgc3BlZWQsIHJ1bkNhbGxiYWNrcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgSGlzdG9yeSQxID0ge1xuICAgIG5hbWU6ICdoaXN0b3J5JyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIGhpc3Rvcnk6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHJvb3Q6ICcnLFxuICAgICAgICByZXBsYWNlU3RhdGU6IGZhbHNlLFxuICAgICAgICBrZXk6ICdzbGlkZXMnXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICAgIGhpc3Rvcnk6IF9leHRlbmRzKHt9LCBIaXN0b3J5KVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdChzd2lwZXIp
24510IHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuaGlzdG9yeS5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmhpc3RvcnkuaW5pdCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveShzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuaGlzdG9yeS5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmhpc3RvcnkuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgJ3RyYW5zaXRpb25FbmQgX2ZyZWVNb2RlTm9Nb21lbnR1bVJlbGVhc2UnOiBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kX2ZyZWVNb2RlTm9Nb21lbnR1bVJlbGVhc2Uoc3dpcGVyKSB7XG4gICAgICAgIGlmIChzd2lwZXIuaGlzdG9yeS5pbml0aWFsaXplZCkge1xuICAgICAgICAgIHN3aXBlci5oaXN0b3J5LnNldEhpc3Rvcnkoc3dpcGVyLnBhcmFtcy5oaXN0b3J5LmtleSwgc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNsaWRlQ2hhbmdlOiBmdW5jdGlvbiBzbGlkZUNoYW5nZShzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5oaXN0b3J5LmluaXRpYWxpemVkICYmIHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgICAgIHN3aXBlci5oaXN0b3J5LnNldEhpc3Rvcnkoc3dpcGVyLnBhcmFtcy5oaXN0b3J5LmtleSwgc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgSGFzaE5hdmlnYXRpb24gPSB7XG4gICAgb25IYXNoQ2FuZ2U6IGZ1bmN0aW9uIG9uSGFzaENhbmdlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgc3dpcGVyLmVtaXQoJ2hhc2hDaGFuZ2UnKTtcbiAgICAgIHZhciBuZXdIYXNoID0gZG9jdW1lbnQubG9jYXRpb24uaGFzaC5yZXBsYWNlKCcjJywgJycpO1xuICAgICAgdmFyIGFjdGl2ZVNsaWRlSGFzaCA9IHN3aXBlci5zbGlkZXMuZXEoc3dpcGVyLmFjdGl2ZUluZGV4KS5hdHRyKCdkYXRhLWhhc2gnKTtcblxuICAgICAgaWYgKG5ld0hhc2ggIT09IGFjdGl2ZVNsaWRlSGFzaCkge1xuICAgICAgICB2YXIgbmV3SW5kZXggPSBzd2lwZXIuJHdyYXBwZXJFbC5jaGlsZHJlbihcIi5cIiArIHN3aXBlci5wYXJhbXMuc2xpZGVDbGFzcyArIFwiW2RhdGEtaGFzaD1cXFwiXCIgKyBuZXdIYXNoICsgXCJcXFwiXVwiKS5pbmRleCgpO1xuICAgICAgICBpZiAodHlwZW9mIG5ld0luZGV4ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhuZXdJbmRleCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRIYXNoOiBmdW5jdGlvbiBzZXRIYXNoKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgICB2YXIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgaWYgKCFzd2lwZXIuaGFzaE5hdmlnYXRpb24uaW5pdGlhbGl6ZWQgfHwgIXN3aXBlci5wYXJhbXMuaGFzaE5hdmlnYXRpb24uZW5hYmxlZCkgcmV0dXJuO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5yZXBsYWNlU3RhdGUgJiYgd2luZG93Lmhpc3RvcnkgJiYgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKSB7XG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCBudWxsLCBcIiNcIiArIHN3aXBlci5zbGlkZXMuZXEoc3dpcGVyLmFjdGl2ZUluZGV4KS5hdHRyKCdkYXRhLWhhc2gnKSB8fCAnJyk7XG4gICAgICAgIHN3aXBlci5lbWl0KCdoYXNoU2V0Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2Y
24510XIgc2xpZGUgPSBzd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICAgIHZhciBoYXNoID0gc2xpZGUuYXR0cignZGF0YS1oYXNoJykgfHwgc2xpZGUuYXR0cignZGF0YS1oaXN0b3J5Jyk7XG4gICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPSBoYXNoIHx8ICcnO1xuICAgICAgICBzd2lwZXIuZW1pdCgnaGFzaFNldCcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5lbmFibGVkIHx8IHN3aXBlci5wYXJhbXMuaGlzdG9yeSAmJiBzd2lwZXIucGFyYW1zLmhpc3RvcnkuZW5hYmxlZCkgcmV0dXJuO1xuICAgICAgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIHZhciBoYXNoID0gZG9jdW1lbnQubG9jYXRpb24uaGFzaC5yZXBsYWNlKCcjJywgJycpO1xuXG4gICAgICBpZiAoaGFzaCkge1xuICAgICAgICB2YXIgc3BlZWQgPSAwO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzd2lwZXIuc2xpZGVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgdmFyIHNsaWRlID0gc3dpcGVyLnNsaWRlcy5lcShpKTtcbiAgICAgICAgICB2YXIgc2xpZGVIYXNoID0gc2xpZGUuYXR0cignZGF0YS1oYXNoJykgfHwgc2xpZGUuYXR0cignZGF0YS1oaXN0b3J5Jyk7XG5cbiAgICAgICAgICBpZiAoc2xpZGVIYXNoID09PSBoYXNoICYmICFzbGlkZS5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICAgICB2Y
24510XIgaW5kZXggPSBzbGlkZS5pbmRleCgpO1xuICAgICAgICAgICAgc3dpcGVyLnNsaWRlVG8oaW5kZXgsIHNwZWVkLCBzd2lwZXIucGFyYW1zLnJ1bkNhbGxiYWNrc09uSW5pdCwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmhhc2hOYXZpZ2F0aW9uLndhdGNoU3RhdGUpIHtcbiAgICAgICAgJCh3aW5kb3cpLm9uKCdoYXNoY2hhbmdlJywgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLm9uSGFzaENhbmdlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuaGFzaE5hdmlnYXRpb24ud2F0Y2hTdGF0ZSkge1xuICAgICAgICAkKHdpbmRvdykub2ZmKCdoYXNoY2hhbmdlJywgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLm9uSGFzaENhbmdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciBIYXNoTmF2aWdhdGlvbiQxID0ge1xuICAgIG5hbWU6ICdoYXNoLW5hdmlnYXRpb24nLFxuICAgIHBhcmFtczoge1xuICAgICAgaGFzaE5hdmlnYXRpb246IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHJlcGxhY2VTdGF0ZTogZmFsc2UsXG4gICAgICAgIHdhdGNoU3RhdGU6IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICAgIGhhc2hOYXZpZ2F0aW9uOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgaW5pdGlhbGl6ZWQ6IGZhbHNlXG4gICAgICAgIH0sIEhhc2hOYXZpZ2F0aW9uKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdChzd2lwZXIp
24510IHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuaGFzaE5hdmlnYXRpb24uZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci5oYXNoTmF2aWdhdGlvbi5pbml0KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICd0cmFuc2l0aW9uRW5kIF9mcmVlTW9kZU5vTW9tZW50dW1SZWxlYXNlJzogZnVuY3Rpb24gdHJhbnNpdGlvbkVuZF9mcmVlTW9kZU5vTW9tZW50dW1SZWxlYXNlKHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLnNldEhhc2goKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNsaWRlQ2hhbmdlOiBmdW5jdGlvbiBzbGlkZUNoYW5nZShzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5oYXNoTmF2aWdhdGlvbi5pbml0aWFsaXplZCAmJiBzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgICAgICBzd2lwZXIuaGFzaE5hdmlnYXRpb24uc2V0SGFzaCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBBdXRvcGxheSA9IHtcbiAgICBydW46IGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyICRhY3RpdmVTbGlkZUVsID0gc3dpcGVyLnNsaWRlcy5lcShzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICAgICAgdmFyIGRlbGF5ID0gc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5kZWxheTtcblxuICAgICAgaWYgKCRhY3RpdmVTbGlkZUVsLmF0dHIoJ2RhdGEtc3dpcGVyLWF1dG9wbGF5JykpIHtcbiAgICAgICAgZGVsYXkgPSAkYWN0aXZlU2xpZGVFbC5hdHRyKCdkYXRhLXN3aXBlci1hdXRvcGxheScpIHx8IHN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZGVsYXk7XG4gICAgICB9XG5cbiAgICAgIGNsZWFyVGltZW91dChzd2lwZXIuYXV0b3BsYXkudGltZW91dCk7XG4gICAgICBzd2lwZXIuYXV0b3BsYXkudGltZW91dCA9IG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGF1dG9wbGF5UmVzdWx0O1xuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LnJldmVyc2VEaXJlY3Rpb24pIHtcbiAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgICAgICAgYXV0b3BsYXlSZXN1bHQgPSBzd2lwZXIuc2xpZGVQcmV2KHN3aXBlci5wYXJhbXMuc3BlZWQsIHRydWUsIHRydWUpO1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICAgICAgfSBlbHNlIGlmICghc3dpcGVyLmlzQmVnaW5uaW5nKSB7XG4gICAgICAgICAgICBhdXRvcGxheVJlc3VsdCA9IHN3aXBlci5zbGlkZVByZXYoc3dpcGVyLnBhcmFtcy5zcGVlZCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXknKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFzd2lwZXIucGFyYW1zLmF1dG9wbGF5LnN0b3BPbkxhc3RTbGlkZSkge1xuICAgICAgICAgICAgYXV0b3BsYXlSZXN1bHQgPSBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDEsIHN3aXBlci5wYXJhbXMuc3BlZWQsIHRydWUsIHRydWUpO1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5zdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgIHN3aXBlci5sb29wRml4KCk7XG4gICAgICAgICAgYXV0b3BsYXlSZXN1bHQgPSBzd2lwZXIuc2xpZGVOZXh0KHN3aXBlci5wYXJhbXMuc3BlZWQsIHRydWUsIHRydWUpO1xuICAgICAgICAgIHN3aXBlci5lbWl0KCdhdXRvcGxheScpO1xuICAgICAgICB9IGVsc2UgaWYgKCFzd2lwZXIuaXNFbmQpIHtcbiAgICAgICAgICBhdXRvcGxheVJlc3VsdCA9IHN3aXBlci5zbGlkZU5leHQoc3dpcGVyLnBhcmFtcy5zcGVlZCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXN3aXBlci5wYXJhbXMuYXV0b3BsYXkuc3RvcE9uTGFzdFNsaWRlKSB7XG4gICAgICAgICAgYXV0b3BsYXlSZXN1bHQgPSBzd2lwZXIuc2xpZGVUbygwLCBzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSAmJiBzd2lwZXIuYXV0b3BsYXkucnVubmluZykgc3dpcGVyLmF1dG9wbGF5LnJ1bigpO2Vsc2UgaWYgKGF1dG9wbGF5UmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICAgICAgfVxuICAgICAgfSwgZGVsYXkpO1xuICAgIH0sXG4gICAgc3RhcnQ6IGZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIHN3aXBlci5hdXRvcGxheS50aW1lb3V0ICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKHN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSByZXR1cm4gZmFsc2U7XG4gICAgICBzd2lwZXIuYXV0b3BsYXkucnVubmluZyA9IHRydWU7XG4gICAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXlTdGFydCcpO1xuICAgICAgc3dpcGVyLmF1dG9wbGF5LnJ1bigpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAodHlwZW9mIHN3aXBlci5hdXRvcGxheS50aW1lb3V0ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBpZiAoc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHN3aXBlci5hdXRvcGxheS50aW1lb3V0KTtcbiAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQgP
24510SB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci5hdXRvcGxheS5ydW5uaW5nID0gZmFsc2U7XG4gICAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXlTdG9wJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIHBhdXNlOiBmdW5jdGlvbiBwYXVzZShzcGVlZCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSByZXR1cm47XG4gICAgICBpZiAoc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCkgcmV0dXJuO1xuICAgICAgaWYgKHN3aXBlci5hdXRvcGxheS50aW1lb3V0KSBjbGVhclRpbWVvdXQoc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQpO1xuICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCA9IHRydWU7XG5cbiAgICAgIGlmIChzcGVlZCA9PT0gMCB8fCAhc3dpcGVyLnBhcmFtcy5hdXRvcGxheS53YWl0Rm9yVHJhbnNpdGlvbikge1xuICAgICAgICBzd2lwZXIuYXV0b3BsYXkucGF1c2VkID0gZmFsc2U7XG4gICAgICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFsndHJhbnNpdGlvbmVuZCcsICd3ZWJraXRUcmFuc2l0aW9uRW5kJ10uZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBzd2lwZXIuYXV0b3BsYXkub25UcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvblZpc2liaWxpdHlDaGFuZ2U6IGZ1bmN0aW9uIG9uVmlzaWJpbGl0eUNoYW5nZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ2hpZGRlbicgJiYgc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHtcbiAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJyAmJiBzd2lwZXIuYXV0b3BsYXkucGF1c2VkKSB7XG4gICAgICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0sXG4gICAgb25UcmFuc2l0aW9uRW5kOiBmdW5jdGlvbiBvblRyYW5zaXRpb25FbmQoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkIHx8ICFzd2lwZXIuJHdyYXBwZXJFbCkgcmV0dXJuO1xuICAgICAgaWYgKGUudGFyZ2V0ICE9PSBzd2lwZXIuJHdyYXBwZXJFbFswXSkgcmV0dXJuO1xuICAgICAgWyd0cmFuc2l0aW9uZW5kJywgJ3dlYmtpdFRyYW5zaXRpb25FbmQnXS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBzd2lwZXIuYXV0b3BsYXkub25UcmFuc2l0aW9uRW5kKTtcbiAgICAgIH0pO1xuICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoIXN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSB7XG4gICAgICAgIHN3aXBlci5hdXRvcGxheS5zdG9wKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuYXV0b3BsYXkucnVuKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbk1vdXNlRW50ZXI6IGZ1bmN0aW9uIG9uTW91c2VFbnRlcigpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5kaXNhYmxlT25JbnRlcmFjdGlvbikge1xuICAgICAgICBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlKCk7XG4gICAgICB9XG5cbiAgICAgIFsndHJhbnNpdGlvbmVuZCcsICd3ZWJraXRUcmFuc2l0aW9uRW5kJ10uZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgc3dpcGVyLmF1dG9wbGF5Lm9uVHJhbnNpdGlvbkVuZCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uTW91c2VMZWF2ZTogZnVuY3Rpb24gb25Nb3VzZUxlYXZlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmRpc2FibGVPbkludGVyYWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCA9IGZhbHNlO1xuICAgICAgc3dpcGVyLmF1dG9wbGF5LnJ1bigpO1xuICAgIH0sXG4gICAgYXR0YWNoTW91c2VFdmVudHM6IGZ1bmN0aW9uIGF0dGFjaE1vdXNlRXZlbnRzKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LnBhdXNlT25Nb3VzZUVudGVyKSB7XG4gICAgICAgIHN3aXBlci4kZWwub24oJ21vdXNlZW50ZXInLCBzd2lwZXIuYXV0b3BsYXkub25Nb3VzZUVudGVyKTtcbiAgICAgICAgc3dpcGVyLiRlbC5vbignbW91c2VsZWF2ZScsIHN3aXBlci5hdXRvcGxheS5vbk1vdXNlTGVhdmUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGV0YWNoTW91c2VFdmVudHM6IGZ1bmN0aW9uIGRldGFjaE1vdXNlRXZlbnRzKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIuJGVsLm9mZignbW91c2VlbnRlcicsIHN3aXBlci5hdXRvcGxheS5vbk1vdXNlRW50ZXIpO1xuICAgICAgc3dpcGVyLiRlbC5vZmYoJ21vdXNlbGVhdmUnLCBzd2lwZXIuYXV0b3BsYXkub25Nb3VzZUxlYXZlKTtcbiAgICB9XG4gIH07XG4gIHZhciBBdXRvcGxheSQxID0ge1xuICAgIG5hbWU6ICdhdXRvcGxheScsXG4gICAgcGFyYW1zOiB7XG4gICAgICBhdXRvcGxheToge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgZGVsYXk6IDMwMDAsXG4gICAgICAgIHdhaXRGb3JUcmFuc2l0aW9uOiB0cnVlLFxuICAgICAgICBkaXNhYmxlT25JbnRlcmFjdGlvbjogdHJ1ZSxcbiAgICAgICAgc3RvcE9uTGFzdFNsaWRlOiBmYWxzZSxcbiAgICAgICAgcmV2ZXJzZURpcmVjdGlvbj
24510ogZmFsc2UsXG4gICAgICAgIHBhdXNlT25Nb3VzZUVudGVyOiBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGJpbmRNb2R1bGVNZXRob2RzKHN3aXBlciwge1xuICAgICAgICBhdXRvcGxheTogX2V4dGVuZHMoe30sIEF1dG9wbGF5LCB7XG4gICAgICAgICAgcnVubmluZzogZmFsc2UsXG4gICAgICAgICAgcGF1c2VkOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdChzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5zdGFydCgpO1xuICAgICAgICAgIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIHN3aXBlci5hdXRvcGxheS5vblZpc2liaWxpdHlDaGFuZ2UpO1xuICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5hdHRhY2hNb3VzZUV2ZW50cygpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYmVmb3JlVHJhbnNpdGlvblN0YXJ0OiBmdW5jdGlvbiBiZWZvcmVUcmFuc2l0aW9uU3RhcnQoc3dpcGVyLCBzcGVlZCwgaW50ZXJuYWwpIHtcbiAgICAgICAgaWYgKHN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSB7XG4gICAgICAgICAgaWYgKGludGVybmFsIHx8ICFzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmRpc2FibGVPbkludGVyYWN0aW9uKSB7XG4gICAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkucGF1c2Uoc3BlZWQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNsaWRlckZpcnN0TW92ZTogZnVuY3Rpb24gc2xpZGVyRmlyc3RNb3ZlKHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHtcbiAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5kaXNhYmxlT25JbnRlcmFjdGlvbikge1xuICAgICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnN0b3AoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdG91Y2hFbmQ6IGZ1bmN0aW9uIHRvdWNoRW5kKHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5jc3NNb2RlICYmIHN3aXBlci5hdXRvcGxheS5wYXVzZWQgJiYgIXN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZGlzYWJsZU9uSW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkucnVuKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KHN3aXBlcikge1xuICAgICAgICBzd2lwZXIuYXV0b3BsYXkuZGV0YWNoTW91c2VFdmVudHMoKTtcblxuICAgICAgICBpZiAoc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHtcbiAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIHN3aXBlci5hdXRvcGxheS5vblZpc2liaWxpdHlDaGFuZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgRmFkZSA9IHtcbiAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciAkc2xpZGVFbCA9IHN3aXBlci5zbGlkZXMuZXEoaSk7XG4gICAgICAgIHZhciBvZmZzZXQgPSAkc2xpZGVFbFswXS5zd2lwZXJTbGlkZU9mZnNldDtcbiAgICAgICAgdmFyIHR4ID0gLW9mZnNldDtcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnZpcnR1YWxUcmFuc2xhdGUpIHR4IC09IHN3aXBlci50cmFuc2xhdGU7XG4gICAgICAgIHZhciB0eSA9IDA7XG5cbiAgICAgICAgaWYgKCFzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICB0eSA9IHR4O1xuICAgICAgICAgIHR4ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzbGlkZU9wYWNpdHkgPSBzd2lwZXIucGFyYW1zLmZhZGVFZmZlY3QuY3Jvc3NGYWRlID8gTWF0aC5tYXgoMSAtIE1hdGguYWJzKCRzbGlkZUVsWzBdLnByb2dyZXNzKSwgMCkgOiAxICsgTWF0aC5taW4oTWF0aC5tYXgoJHNsaWRlRWxbMF0ucHJvZ3Jlc3MsIC0xKSwgMCk7XG4gICAgICAgICRzbGlkZUVsLmNzcyh7XG4gICAgICAgICAgb3BhY2l0eTogc2xpZGVPcGFjaXR5XG4gICAgICAgIH0pLnRyYW5zZm9ybShcInRyYW5zbGF0ZTNkKFwiICsgdHggKyBcInB4LCBcIiArIHR5ICsgXCJweCwgMHB4KVwiKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXMsXG4gICAgICAgICAgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgICAgc2xpZGVzLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy52aXJ0dWFsVHJhbnNsYXRlICYmIGR1cmF0aW9uICE9PSAwKSB7XG4gICAgICAgIHZhciBldmVudFRyaWdnZXJlZCA9IGZhbHNlO1xuICAgICAgICBzbGlkZXMudHJhbnNpdGlvbkVuZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGV2ZW50VHJpZ2dlcmVkKSByZXR1cm47XG4gICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICAgIGV2ZW50VHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgICAgICBzd2lwZXIuYW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgdmFyIHRyaWdnZXJFdmVudHMgPSBbJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCAndHJhbnNpdGlvbmVuZCddO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmlnZ2VyRXZlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAkd3JhcHBlckVsLnRyaWdnZXIodHJpZ2dlckV2ZW50c1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gI
24510H07XG4gIHZhciBFZmZlY3RGYWRlID0ge1xuICAgIG5hbWU6ICdlZmZlY3QtZmFkZScsXG4gICAgcGFyYW1zOiB7XG4gICAgICBmYWRlRWZmZWN0OiB7XG4gICAgICAgIGNyb3NzRmFkZTogZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBiaW5kTW9kdWxlTWV0aG9kcyhzd2lwZXIsIHtcbiAgICAgICAgZmFkZUVmZmVjdDogX2V4dGVuZHMoe30sIEZhZGUpXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBiZWZvcmVJbml0OiBmdW5jdGlvbiBiZWZvcmVJbml0KHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdmYWRlJykgcmV0dXJuO1xuICAgICAgICBzd2lwZXIuY2xhc3NOYW1lcy5wdXNoKHN3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcyArIFwiZmFkZVwiKTtcbiAgICAgICAgdmFyIG92ZXJ3cml0ZVBhcmFtcyA9IHtcbiAgICAgICAgICBzbGlkZXNQZXJWaWV3OiAxLFxuICAgICAgICAgIHNsaWRlc1BlckNvbHVtbjogMSxcbiAgICAgICAgICBzbGlkZXNQZXJHcm91cDogMSxcbiAgICAgICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLFxuICAgICAgICAgIHNwYWNlQmV0d2VlbjogMCxcbiAgICAgICAgICB2aXJ0dWFsVHJhbnNsYXRlOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIGV4dGVuZChzd2lwZXIucGFyYW1zLCBvdmVyd3JpdGVQYXJhbXMpO1xuICAgICAgICBleHRlbmQoc3dpcGVyLm9yaWdpbmFsUGFyYW1zLCBvdmVyd3JpdGVQYXJhbXMpO1xuICAgICAgfSxcbiAgICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdmYWRlJykgcmV0dXJuO1xuICAgICAgICBzd2lwZXIuZmFkZUVmZmVjdC5zZXRUcmFuc2xhdGUoKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKHN3aXBlciwgZHVyYXRpb24pIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnZmFkZScpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLmZhZGVFZmZlY3Quc2V0VHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBDdWJlID0ge1xuICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgJGVsID0gc3dpcGVyLiRlbCxcbiAgICAgICAgICAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWwsXG4gICAgICAgICAgc2xpZGVzID0gc3dpcGVyLnNsaWRlcyxcbiAgICAgICAgICBzd2lwZXJXaWR0aCA9IHN3aXBlci53aWR0aCxcbiAgICAgICAgICBzd2lwZXJIZWlnaHQgPSBzd2lwZXIuaGVpZ2h0LFxuICAgICAgICAgIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGUsXG4gICAgICAgICAgc3dpcGVyU2l6ZSA9IHN3aXBlci5zaXplLFxuICAgICAgICAgIGJyb3dzZXIgPSBzd2lwZXIuYnJvd3NlcjtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmN1YmVFZmZlY3Q7XG4gICAgICB2YXIgaXNIb3Jpem9udGFsID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpO1xuICAgICAgdmFyIGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkO1xuICAgICAgdmFyIHdyYXBwZXJSb3RhdGUgPSAwO1xuICAgICAgdmFyICRjdWJlU2hhZG93RWw7XG5cbiAgICAgIGlmIChwYXJhbXMuc2hhZG93KSB7XG4gICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAkY3ViZVNoYWRvd0VsID0gJHdyYXBwZXJFbC5maW5kKCcuc3dpcGVyLWN1YmUtc2hhZG93Jyk7XG5cbiAgICAgICAgICBpZiAoJGN1YmVTaGFkb3dFbC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICRjdWJlU2hhZG93RWwgPSAkKCc8ZGl2IGNsYXNzPVwic3dpcGVyLWN1YmUtc2hhZG93XCI+PC9kaXY+Jyk7XG4gICAgICAgICAgICAkd3JhcHBlckVsLmFwcGVuZCgkY3ViZVNoYWRvd0VsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAkY3ViZVNoYWRvd0VsLmNzcyh7XG4gICAgICAgICAgICBoZWlnaHQ6IHN3aXBlcldpZHRoICsgXCJweFwiXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJGN1YmVTaGFkb3dFbCA9ICRlbC5maW5kKCcuc3dpcGVyLWN1YmUtc2hhZG93Jyk7XG5cbiAgICAgICAgICBpZiAoJGN1YmVTaGFkb3dFbC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICRjdWJlU2hhZG93RWwgPSAkKCc8ZGl2IGNsYXNzPVwic3dpcGVyLWN1YmUtc2hhZG93XCI+PC9kaXY+Jyk7XG4gICAgICAgICAgICAkZWwuYXBwZW5kKCRjdWJlU2hhZG93RWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB2Y
24510XIgJHNsaWRlRWwgPSBzbGlkZXMuZXEoaSk7XG4gICAgICAgIHZhciBzbGlkZUluZGV4ID0gaTtcblxuICAgICAgICBpZiAoaXNWaXJ0dWFsKSB7XG4gICAgICAgICAgc2xpZGVJbmRleCA9IHBhcnNlSW50KCRzbGlkZUVsLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JyksIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzbGlkZUFuZ2xlID0gc2xpZGVJbmRleCAqIDkwO1xuICAgICAgICB2YXIgcm91bmQgPSBNYXRoLmZsb29yKHNsaWRlQW5nbGUgLyAzNjApO1xuXG4gICAgICAgIGlmIChydGwpIHtcbiAgICAgICAgICBzbGlkZUFuZ2xlID0gLXNsaWRlQW5nbGU7XG4gICAgICAgICAgcm91bmQgPSBNYXRoLmZsb29yKC1zbGlkZUFuZ2xlIC8gMzYwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwcm9ncmVzcyA9IE1hdGgubWF4KE1hdGgubWluKCRzbGlkZUVsWzBdLnByb2dyZXNzLCAxKSwgLTEpO1xuICAgICAgICB2YXIgdHggPSAwO1xuICAgICAgICB2YXIgdHkgPSAwO1xuICAgICAgICB2YXIgdHogPSAwO1xuXG4gICAgICAgIGlmIChzbGlkZUluZGV4ICUgNCA9PT0gMCkge1xuICAgICAgICAgIHR4ID0gLXJvdW5kICogNCAqIHN3aXBlclNpemU7XG4gICAgICAgICAgdHogPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKChzbGlkZUluZGV4IC0gMSkgJSA0ID09PSAwKSB7XG4gICAgICAgICAgdHggPSAwO1xuICAgICAgICAgIHR6ID0gLXJvdW5kICogNCAqIHN3aXBlclNpemU7XG4gICAgICAgIH0gZWxzZSBpZiAoKHNsaWRlSW5kZXggLSAyKSAlIDQgPT09IDApIHtcbiAgICAgICAgICB0eCA9IHN3aXBlclNpemUgKyByb3VuZCAqIDQgKiBzd2lwZXJTaXplO1xuICAgICAgICAgIHR6ID0gc3dpcGVyU2l6ZTtcbiAgICAgICAgfSBlbHNlIGlmICgoc2xpZGVJbmRleCAtIDMpICUgNCA9PT0gMCkge1xuICAgICAgICAgIHR4ID0gLXN3aXBlclNpemU7XG4gICAgICAgICAgdHogPSAzICogc3dpcGVyU2l6ZSArIHN3aXBlclNpemUgKiA0ICogcm91bmQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocnRsKSB7XG4gICAgICAgICAgdHggPSAtdHg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgIHR5ID0gdHg7XG4gICAgICAgICAgdHggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IFwicm90YXRlWChcIiArIChpc0hvcml6b250YWwgPyAwIDogLXNsaWRlQW5nbGUpICsgXCJkZWcpIHJvdGF0ZVkoXCIgKyAoaXNIb3Jpem9udGFsID8gc2xpZGVBbmdsZSA6IDApICsgXCJkZWcpIHRyYW5zbGF0ZTNkKFwiICsgdHggKyBcInB4LCBcIiArIHR5ICsgXCJweCwgXCIgKyB0eiArIFwicHgpXCI7XG5cbiAgICAgICAgaWYgKHByb2dyZXNzIDw9IDEgJiYgcHJvZ3Jlc3MgPiAtMSkge1xuICAgICAgICAgIHdyYXBwZXJSb3RhdGUgPSBzbGlkZUluZGV4ICogOTAgKyBwcm9ncmVzcyAqIDkwO1xuICAgICAgICAgIGlmIChydGwpIHdyYXBwZXJSb3RhdGUgPSAtc2xpZGVJbmRleCAqIDkwIC0gcHJvZ3Jlc3MgKiA5MDtcbiAgICAgICAgfVxuXG4gICAgICAgICRzbGlkZUVsLnRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuXG4gICAgICAgIGlmIChwYXJhbXMuc2xpZGVTaGFkb3dzKSB7XG4gICAgICAgICAgLy8gU2V0IHNoYWRvd3NcbiAgICAgICAgICB2Y
24510XIgc2hhZG93QmVmb3JlID0gaXNIb3Jpem9udGFsID8gJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCcpIDogJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wJyk7XG4gICAgICAgICAgdmFyIHNoYWRvd0FmdGVyID0gaXNIb3Jpem9udGFsID8gJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQnKSA6ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbScpO1xuXG4gICAgICAgICAgaWYgKHNoYWRvd0JlZm9yZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHNoYWRvd0JlZm9yZSA9ICQoXCI8ZGl2IGNsYXNzPVxcXCJzd2lwZXItc2xpZGUtc2hhZG93LVwiICsgKGlzSG9yaXpvbnRhbCA/ICdsZWZ0JyA6ICd0b3AnKSArIFwiXFxcIj48L2Rpdj5cIik7XG4gICAgICAgICAgICAkc2xpZGVFbC5hcHBlbmQoc2hhZG93QmVmb3JlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2hhZG93QWZ0ZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBzaGFkb3dBZnRlciA9ICQoXCI8ZGl2IGNsYXNzPVxcXCJzd2lwZXItc2xpZGUtc2hhZG93LVwiICsgKGlzSG9yaXpvbnRhbCA/ICdyaWdodCcgOiAnYm90dG9tJykgKyBcIlxcXCI+PC9kaXY+XCIpO1xuICAgICAgICAgICAgJHNsaWRlRWwuYXBwZW5kKHNoYWRvd0FmdGVyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2hhZG93QmVmb3JlLmxlbmd0aCkgc2hhZG93QmVmb3JlWzBdLnN0eWxlLm9wYWNpdHkgPSBNYXRoLm1heCgtcHJvZ3Jlc3MsIDApO1xuICAgICAgICAgIGlmIChzaGFkb3dBZnRlci5sZW5ndGgpIHNoYWRvd0FmdGVyWzBdLnN0eWxlLm9wYWNpdHkgPSBNYXRoLm1heChwcm9ncmVzcywgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJHdyYXBwZXJFbC5jc3Moe1xuICAgICAgICAnLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luJzogXCI1MCUgNTAlIC1cIiArIHN3aXBlclNpemUgLyAyICsgXCJweFwiLFxuICAgICAgICAnLW1vei10cmFuc2Zvcm0tb3JpZ2luJzogXCI1MCUgNTAlIC1cIiArIHN3aXBlclNpemUgLyAyICsgXCJweFwiLFxuICAgICAgICAnLW1zLXRyYW5zZm9ybS1vcmlnaW4nOiBcIjUwJSA1MCUgLVwiICsgc3dpcGVyU2l6ZSAvIDIgKyBcInB4XCIsXG4gICAgICAgICd0cmFuc2Zvcm0tb3JpZ2luJzogXCI1MCUgNTAlIC1cIiArIHN3aXBlclNpemUgLyAyICsgXCJweFwiXG4gICAgICB9KTtcblxuICAgICAgaWYgKHBhcmFtcy5zaGFkb3cpIHtcbiAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICRjdWJlU2hhZG93RWwudHJhbnNmb3JtKFwidHJhbnNsYXRlM2QoMHB4LCBcIiArIChzd2lwZXJXaWR0aCAvIDIgKyBwYXJhbXMuc2hhZG93T2Zmc2V0KSArIFwicHgsIFwiICsgLXN3aXBlcldpZHRoIC8gMiArIFwicHgpIHJvdGF0ZVgoOTBkZWcpIHJvdGF0ZVooMGRlZykgc2NhbGUoXCIgKyBwYXJhbXMuc2hhZG93U2NhbGUgKyBcIilcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHNoYWRvd0FuZ2xlID0gTWF0aC5hYnMod3JhcHBlclJvdGF0ZSkgLSBNYXRoLmZsb29yKE1hdGguYWJzKHdyYXBwZXJSb3RhdGUpIC8gOTApICogOTA7XG4gICAgICAgICAgdmFyIG11bHRpcGxpZXIgPSAxLjUgLSAoTWF0aC5zaW4oc2hhZG93QW5nbGUgKiAyICogTWF0aC5QSSAvIDM2MCkgLyAyICsgTWF0aC5jb3Moc2hhZG93QW5nbGUgKiAyICogTWF0aC5QSSAvIDM2MCkgLyAyKTtcbiAgICAgICAgICB2Y
24510XIgc2NhbGUxID0gcGFyYW1zLnNoYWRvd1NjYWxlO1xuICAgICAgICAgIHZhciBzY2FsZTIgPSBwYXJhbXMuc2hhZG93U2NhbGUgLyBtdWx0aXBsaWVyO1xuICAgICAgICAgIHZhciBvZmZzZXQgPSBwYXJhbXMuc2hhZG93T2Zmc2V0O1xuICAgICAgICAgICRjdWJlU2hhZG93RWwudHJhbnNmb3JtKFwic2NhbGUzZChcIiArIHNjYWxlMSArIFwiLCAxLCBcIiArIHNjYWxlMiArIFwiKSB0cmFuc2xhdGUzZCgwcHgsIFwiICsgKHN3aXBlckhlaWdodCAvIDIgKyBvZmZzZXQpICsgXCJweCwgXCIgKyAtc3dpcGVySGVpZ2h0IC8gMiAvIHNjYWxlMiArIFwicHgpIHJvdGF0ZVgoLTkwZGVnKVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgekZhY3RvciA9IGJyb3dzZXIuaXNTYWZhcmkgfHwgYnJvd3Nlci5pc1dlYlZpZXcgPyAtc3dpcGVyU2l6ZSAvIDIgOiAwO1xuICAgICAgJHdyYXBwZXJFbC50cmFuc2Zvcm0oXCJ0cmFuc2xhdGUzZCgwcHgsMCxcIiArIHpGYWN0b3IgKyBcInB4KSByb3RhdGVYKFwiICsgKHN3aXBlci5pc0hvcml6b250YWwoKSA/IDAgOiB3cmFwcGVyUm90YXRlKSArIFwiZGVnKSByb3RhdGVZKFwiICsgKHN3aXBlci5pc0hvcml6b250YWwoKSA/IC13cmFwcGVyUm90YXRlIDogMCkgKyBcImRlZylcIik7XG4gICAgfSxcbiAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciAkZWwgPSBzd2lwZXIuJGVsLFxuICAgICAgICAgIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgICBzbGlkZXMudHJhbnNpdGlvbihkdXJhdGlvbikuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wLCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCwgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tLCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0JykudHJhbnNpdGlvbihkdXJhdGlvbik7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmN1YmVFZmZlY3Quc2hhZG93ICYmICFzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgJGVsLmZpbmQoJy5zd2lwZXItY3ViZS1zaGFkb3cnKS50cmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciBFZmZlY3RDdWJlID0ge1xuICAgIG5hbWU6ICdlZmZlY3QtY3ViZScsXG4gICAgcGFyYW1zOiB7XG4gICAgICBjdWJlRWZmZWN0OiB7XG4gICAgICAgIHNsaWRlU2hhZG93czogdHJ1ZSxcbiAgICAgICAgc2hhZG93OiB0cnVlLFxuICAgICAgICBzaGFkb3dPZmZzZXQ6IDIwLFxuICAgICAgICBzaGFkb3dTY2FsZTogMC45NFxuICAgICAgfVxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIGJpbmRNb2R1bGVNZXRob2RzKHN3aXBlciwge1xuICAgICAgICBjdWJlRWZmZWN0OiBfZXh0ZW5kcyh7fSwgQ3ViZSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGJlZm9yZUluaXQ6IGZ1bmN0aW9uIGJlZm9yZUluaXQoc3dpcGVyKSB7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2N1YmUnKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5jbGFzc05hbWVzLnB1c2goc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzICsgXCJjdWJlXCIpO1xuICAgICAgICBzd2lwZXIuY2xhc3NOYW1lcy5wdXNoKHN3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcyArIFwiM2RcIik7XG4gICAgICAgIHZhciBvdmVyd3JpdGVQYXJhbXMgPSB7XG4gICAgICAgICAgc2xpZGVzUGVyVmlldzogMSxcbiAgICAgICAgICBzbGlkZXNQZXJDb2x1bW46IDEsXG4gICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDEsXG4gICAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICByZXNpc3RhbmNlUmF0aW86IDAsXG4gICAgICAgICAgc3BhY2VCZXR3ZWVuOiAwLFxuICAgICAgICAgIGNlbnRlcmVkU2xpZGVzOiBmYWxzZSxcbiAgICAgICAgICB2aXJ0dWFsVHJhbnNsYXRlOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIGV4dGVuZChzd2lwZXIucGFyYW1zLCBvdmVyd3JpdGVQYXJhbXMpO1xuICAgICAgICBleHRlbmQoc3dpcGVyLm9yaWdpbmFsUGFyYW1zLCBvdmVyd3JpdGVQYXJhbXMpO1xuICAgICAgfSxcbiAgICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKHN3aXBlcikge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdjdWJlJykgcmV0dXJuO1xuICAgICAgICBzd2lwZXIuY3ViZUVmZmVjdC5zZXRUcmFuc2xhdGUoKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKHN3aXBlciwgZHVyYXRpb24pIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnY3ViZScpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLmN1YmVFZmZlY3Quc2V0VHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBGbGlwID0ge1xuICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgc2xpZGVzID0gc3dpcGVyLnNsaWRlcyxcbiAgICAgICAgICBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB2YXIgJHNsaWRlRWwgPSBzbGlkZXMuZXEoaSk7XG4gICAgICAgIHZhciBwcm9ncmVzcyA9ICRzbGlkZUVsWzBdLnByb2dyZXNzO1xuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmZsaXBFZmZlY3QubGltaXRSb3RhdGlvbikge1xuICAgICAgICAgIHByb2dyZXNzID0gTWF0aC5tYXgoTWF0aC5taW4oJHNsaWRlRWxbMF0ucHJvZ3Jlc3MsIDEpLCAtMSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb2Zmc2V0ID0gJHNsaWRlRWxbMF0uc3dpcGVyU2xpZGVPZmZzZXQ7XG4gICAgICAgIHZhciByb3RhdGUgPSAtMTgwICogcHJvZ3Jlc3M7XG4gICAgICAgIHZhciByb3RhdGVZID0gcm90YXRlO1xuICAgICAgICB2YXIgcm90YXRlWCA9IDA7XG4gICAgICAgIHZhciB0eCA9IC1vZmZzZXQ7XG4gICAgICAgIHZhciB0eSA9IDA7XG5cbiAgICAgICAgaWYgKCFzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICB0eSA9IHR4O1xuICAgICAgICAgIHR4ID0gMDtcbiAgICAgICAgICByb3RhdGVYID0gLXJvdGF0ZVk7XG4gICAgICAgICAgcm90YXRlWSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAocnRsKSB7XG4gICAgICAgICAgcm90YXRlWSA9IC1yb3RhdGVZO1xuICAgICAgICB9XG5cbiAgICAgICAgJHNsaWRlRWxbMF0uc3R5bGUuekluZGV4ID0gLU1hdGguYWJzKE1hdGgucm91bmQocHJvZ3Jlc3MpKSArIHNsaWRlcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZmxpcEVmZmVjdC5zbGlkZVNoYWRvd3MpIHtcbiAgICAgICAgICAvLyBTZXQgc2hhZG93c1xuICAgICAgICAgIHZhciBzaGFkb3dCZWZvcmUgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAkc2xpZGVFbC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0JykgOiAkc2xpZGVFbC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AnKTtcbiAgICAgICAgICB2Y
24510XIgc2hhZG93QWZ0ZXIgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAkc2xpZGVFbC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCcpIDogJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tJyk7XG5cbiAgICAgICAgICBpZiAoc2hhZG93QmVmb3JlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgc2hhZG93QmVmb3JlID0gJChcIjxkaXYgY2xhc3M9XFxcInN3aXBlci1zbGlkZS1zaGFkb3ctXCIgKyAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ2xlZnQnIDogJ3RvcCcpICsgXCJcXFwiPjwvZGl2PlwiKTtcbiAgICAgICAgICAgICRzbGlkZUVsLmFwcGVuZChzaGFkb3dCZWZvcmUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzaGFkb3dBZnRlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHNoYWRvd0FmdGVyID0gJChcIjxkaXYgY2xhc3M9XFxcInN3aXBlci1zbGlkZS1zaGFkb3ctXCIgKyAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ3JpZ2h0JyA6ICdib3R0b20nKSArIFwiXFxcIj48L2Rpdj5cIik7XG4gICAgICAgICAgICAkc2xpZGVFbC5hcHBlbmQoc2hhZG93QWZ0ZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzaGFkb3dCZWZvcmUubGVuZ3RoKSBzaGFkb3dCZWZvcmVbMF0uc3R5bGUub3BhY2l0eSA9IE1hdGgubWF4KC1wcm9ncmVzcywgMCk7XG4gICAgICAgICAgaWYgKHNoYWRvd0FmdGVyLmxlbmd0aCkgc2hhZG93QWZ0ZXJbMF0uc3R5bGUub3BhY2l0eSA9IE1hdGgubWF4KHByb2dyZXNzLCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgICRzbGlkZUVsLnRyYW5zZm9ybShcInRyYW5zbGF0ZTNkKFwiICsgdHggKyBcInB4LCBcIiArIHR5ICsgXCJweCwgMHB4KSByb3RhdGVYKFwiICsgcm90YXRlWCArIFwiZGVnKSByb3RhdGVZKFwiICsgcm90YXRlWSArIFwiZGVnKVwiKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXMsXG4gICAgICAgICAgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXgsXG4gICAgICAgICAgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgICAgc2xpZGVzLnRyYW5zaXRpb24oZHVyYXRpb24pLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LXRvcCwgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQsIC5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbSwgLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCcpLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy52aXJ0dWFsVHJhbnNsYXRlICYmIGR1cmF0aW9uICE9PSAwKSB7XG4gICAgICAgIHZhciBldmVudFRyaWdnZXJlZCA9IGZhbHNlOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcblxuICAgICAgICBzbGlkZXMuZXEoYWN0aXZlSW5kZXgpLnRyYW5zaXRpb25FbmQoZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKCkge1xuICAgICAgICAgIGlmIChldmVudFRyaWdnZXJlZCkgcmV0dXJuO1xuICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjsgLy8gaWYgKCEkKHRoaXMpLmhhc0NsYXNzKHN3aXBlci5wYXJhbXMuc2xpZGVBY3RpdmVDbGFzcykpIHJldHVybjtcblxuICAgICAgICAgIGV2ZW50VHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgICAgICBzd2lwZXIuYW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgdmFyIHRyaWdnZXJFdmVudHMgPSBbJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCAndHJhbnNpdGlvbmVuZCddO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmlnZ2VyRXZlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAkd3JhcHBlckVsLnRyaWdnZXIodHJpZ2dlckV2ZW50c1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciBFZmZlY3RGbGlwID0ge1xuICAgIG5hbWU6ICdlZmZlY3QtZmxpcCcsXG4gICAgcGFyYW1zOiB7XG4gICAgICBmbGlwRWZmZWN0OiB7XG4gICAgICAgIHNsaWRlU2hhZG93czogdHJ1ZSxcbiAgICAgICAgbGltaXRSb3RhdGlvbjogdHJ1ZVxuICAgICAgfVxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIGJpbmRNb2R1bGVNZXRob2RzKHN3aXBlciwge1xuICAgICAgICBmbGlwRWZmZWN0OiBfZXh0ZW5kcyh7fSwgRmxpcClcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGJlZm9yZUluaXQ6IGZ1bmN0aW9uIGJlZm9yZUluaXQoc3dpcGVyKSB7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2ZsaXAnKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5jbGFzc05hbWVzLnB1c2goc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzICsgXCJmbGlwXCIpO1xuICAgICAgICBzd2lwZXIuY2xhc3NOYW1lcy5wdXNoKHN3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcyArIFwiM2RcIik7XG4gICAgICAgIHZhciBvdmVyd3JpdGVQYXJhbXMgPSB7XG4gICAgICAgICAgc2xpZGVzUGVyVmlldzogMSxcbiAgICAgICAgICBzbGlkZXNQZXJDb2x1bW46IDEsXG4gICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDEsXG4gICAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICBzcGFjZUJldHdlZW46IDAsXG4gICAgICAgICAgdmlydHVhbFRyYW5zbGF0ZTogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICBleHRlbmQoc3dpcGVyLnBhcmFtcywgb3ZlcndyaXRlUGFyYW1zKTtcbiAgICAgICAgZXh0ZW5kKHN3aXBlci5vcmlnaW5hbFBhcmFtcywgb3ZlcndyaXRlUGFyYW1zKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZShzd2lwZXIpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnZmxpcCcpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLmZsaXBFZmZlY3Quc2V0VHJhbnNsYXRlKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihzd2lwZXIsIGR1cmF0aW9uKSB7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2ZsaXAnKSByZXR1cm47XG4gICAgICAgIHN3aXBlci5mbGlwRWZmZWN0LnNldFRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgQ292ZXJmbG93ID0ge1xuICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
24510XIgc3dpcGVyV2lkdGggPSBzd2lwZXIud2lkdGgsXG4gICAgICAgICAgc3dpcGVySGVpZ2h0ID0gc3dpcGVyLmhlaWdodCxcbiAgICAgICAgICBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzLFxuICAgICAgICAgIHNsaWRlc1NpemVzR3JpZCA9IHN3aXBlci5zbGlkZXNTaXplc0dyaWQ7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5jb3ZlcmZsb3dFZmZlY3Q7XG4gICAgICB2YXIgaXNIb3Jpem9udGFsID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpO1xuICAgICAgdmFyIHRyYW5zZm9ybSA9IHN3aXBlci50cmFuc2xhdGU7XG4gICAgICB2YXIgY2VudGVyID0gaXNIb3Jpem9udGFsID8gLXRyYW5zZm9ybSArIHN3aXBlcldpZHRoIC8gMiA6IC10cmFuc2Zvcm0gKyBzd2lwZXJIZWlnaHQgLyAyO1xuICAgICAgdmFyIHJvdGF0ZSA9IGlzSG9yaXpvbnRhbCA/IHBhcmFtcy5yb3RhdGUgOiAtcGFyYW1zLnJvdGF0ZTtcbiAgICAgIHZhciB0cmFuc2xhdGUgPSBwYXJhbXMuZGVwdGg7IC8vIEVhY2ggc2xpZGUgb2Zmc2V0IGZyb20gY2VudGVyXG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzbGlkZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFyICRzbGlkZUVsID0gc2xpZGVzLmVxKGkpO1xuICAgICAgICB2YXIgc2xpZGVTaXplID0gc2xpZGVzU2l6ZXNHcmlkW2ldO1xuICAgICAgICB2YXIgc2xpZGVPZmZzZXQgPSAkc2xpZGVFbFswXS5zd2lwZXJTbGlkZU9mZnNldDtcbiAgICAgICAgdmFyIG9mZnNldE11bHRpcGxpZXIgPSAoY2VudGVyIC0gc2xpZGVPZmZzZXQgLSBzbGlkZVNpemUgLyAyKSAvIHNsaWRlU2l6ZSAqIHBhcmFtcy5tb2RpZmllcjtcbiAgICAgICAgdmFyIHJvdGF0ZVkgPSBpc0hvcml6b250YWwgPyByb3RhdGUgKiBvZmZzZXRNdWx0aXBsaWVyIDogMDtcbiAgICAgICAgdmFyIHJvdGF0ZVggPSBpc0hvcml6b250YWwgPyAwIDogcm90YXRlICogb2Zmc2V0TXVsdGlwbGllcjsgLy8gdmFyIHJvdGF0ZVogPSAwXG5cbiAgICAgICAgdmFyIHRyYW5zbGF0ZVogPSAtdHJhbnNsYXRlICogTWF0aC5hYnMob2Zmc2V0TXVsdGlwbGllcik7XG4gICAgICAgIHZhciBzdHJldGNoID0gcGFyYW1zLnN0cmV0Y2g7IC8vIEFsbG93IHBlcmNlbnRhZ2UgdG8gbWFrZSBhIHJlbGF0aXZlIHN0cmV0Y2ggZm9yIHJlc3BvbnNpdmUgc2xpZGVyc1xuXG4gICAgICAgIGlmICh0eXBlb2Ygc3RyZXRjaCA9PT0gJ3N0cmluZycgJiYgc3RyZXRjaC5pbmRleE9mKCclJykgIT09IC0xKSB7XG4gICAgICAgICAgc3RyZXRjaCA9IHBhcnNlRmxvYXQocGFyYW1zLnN0cmV0Y2gpIC8gMTAwICogc2xpZGVTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRyYW5zbGF0ZVkgPSBpc0hvcml6b250YWwgPyAwIDogc3RyZXRjaCAqIG9mZnNldE11bHRpcGxpZXI7XG4gICAgICAgIHZhciB0cmFuc2xhdGVYID0gaXNIb3Jpem9udGFsID8gc3RyZXRjaCAqIG9mZnNldE11bHRpcGxpZXIgOiAwO1xuICAgICAgICB2Y
24510XIgc2NhbGUgPSAxIC0gKDEgLSBwYXJhbXMuc2NhbGUpICogTWF0aC5hYnMob2Zmc2V0TXVsdGlwbGllcik7IC8vIEZpeCBmb3IgdWx0cmEgc21hbGwgdmFsdWVzXG5cbiAgICAgICAgaWYgKE1hdGguYWJzKHRyYW5zbGF0ZVgpIDwgMC4wMDEpIHRyYW5zbGF0ZVggPSAwO1xuICAgICAgICBpZiAoTWF0aC5hYnModHJhbnNsYXRlWSkgPCAwLjAwMSkgdHJhbnNsYXRlWSA9IDA7XG4gICAgICAgIGlmIChNYXRoLmFicyh0cmFuc2xhdGVaKSA8IDAuMDAxKSB0cmFuc2xhdGVaID0gMDtcbiAgICAgICAgaWYgKE1hdGguYWJzKHJvdGF0ZVkpIDwgMC4wMDEpIHJvdGF0ZVkgPSAwO1xuICAgICAgICBpZiAoTWF0aC5hYnMocm90YXRlWCkgPCAwLjAwMSkgcm90YXRlWCA9IDA7XG4gICAgICAgIGlmIChNYXRoLmFicyhzY2FsZSkgPCAwLjAwMSkgc2NhbGUgPSAwO1xuICAgICAgICB2YXIgc2xpZGVUcmFuc2Zvcm0gPSBcInRyYW5zbGF0ZTNkKFwiICsgdHJhbnNsYXRlWCArIFwicHgsXCIgKyB0cmFuc2xhdGVZICsgXCJweCxcIiArIHRyYW5zbGF0ZVogKyBcInB4KSAgcm90YXRlWChcIiArIHJvdGF0ZVggKyBcImRlZykgcm90YXRlWShcIiArIHJvdGF0ZVkgKyBcImRlZykgc2NhbGUoXCIgKyBzY2FsZSArIFwiKVwiO1xuICAgICAgICAkc2xpZGVFbC50cmFuc2Zvcm0oc2xpZGVUcmFuc2Zvcm0pO1xuICAgICAgICAkc2xpZGVFbFswXS5zdHlsZS56SW5kZXggPSAtTWF0aC5hYnMoTWF0aC5yb3VuZChvZmZzZXRNdWx0aXBsaWVyKSkgKyAxO1xuXG4gICAgICAgIGlmIChwYXJhbXMuc2xpZGVTaGFkb3dzKSB7XG4gICAgICAgICAgLy8gU2V0IHNoYWRvd3NcbiAgICAgICAgICB2Y
24510XIgJHNoYWRvd0JlZm9yZUVsID0gaXNIb3Jpem9udGFsID8gJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCcpIDogJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wJyk7XG4gICAgICAgICAgdmFyICRzaGFkb3dBZnRlckVsID0gaXNIb3Jpem9udGFsID8gJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQnKSA6ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbScpO1xuXG4gICAgICAgICAgaWYgKCRzaGFkb3dCZWZvcmVFbC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICRzaGFkb3dCZWZvcmVFbCA9ICQoXCI8ZGl2IGNsYXNzPVxcXCJzd2lwZXItc2xpZGUtc2hhZG93LVwiICsgKGlzSG9yaXpvbnRhbCA/ICdsZWZ0JyA6ICd0b3AnKSArIFwiXFxcIj48L2Rpdj5cIik7XG4gICAgICAgICAgICAkc2xpZGVFbC5hcHBlbmQoJHNoYWRvd0JlZm9yZUVsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoJHNoYWRvd0FmdGVyRWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAkc2hhZG93QWZ0ZXJFbCA9ICQoXCI8ZGl2IGNsYXNzPVxcXCJzd2lwZXItc2xpZGUtc2hhZG93LVwiICsgKGlzSG9yaXpvbnRhbCA/ICdyaWdodCcgOiAnYm90dG9tJykgKyBcIlxcXCI+PC9kaXY+XCIpO1xuICAgICAgICAgICAgJHNsaWRlRWwuYXBwZW5kKCRzaGFkb3dBZnRlckVsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoJHNoYWRvd0JlZm9yZUVsLmxlbmd0aCkgJHNoYWRvd0JlZm9yZUVsWzBdLnN0eWxlLm9wYWNpdHkgPSBvZmZzZXRNdWx0aXBsaWVyID4gMCA/IG9mZnNldE11bHRpcGxpZXIgOiAwO1xuICAgICAgICAgIGlmICgkc2hhZG93QWZ0ZXJFbC5sZW5ndGgpICRzaGFkb3dBZnRlckVsWzBdLnN0eWxlLm9wYWNpdHkgPSAtb2Zmc2V0TXVsdGlwbGllciA+IDAgPyAtb2Zmc2V0TXVsdGlwbGllciA6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgc3dpcGVyLnNsaWRlcy50cmFuc2l0aW9uKGR1cmF0aW9uKS5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AsIC5zd2lwZXItc2xpZGUtc2hhZG93LXJpZ2h0LCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20sIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQnKS50cmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICB9XG4gIH07XG4gIHZhciBFZmZlY3RDb3ZlcmZsb3cgPSB7XG4gICAgbmFtZTogJ2VmZmVjdC1jb3ZlcmZsb3cnLFxuICAgIHBhcmFtczoge1xuICAgICAgY292ZXJmbG93RWZmZWN0OiB7XG4gICAgICAgIHJvdGF0ZTogNTAsXG4gICAgICAgIHN0cmV0Y2g6IDAsXG4gICAgICAgIGRlcHRoOiAxMDAsXG4gICAgICAgIHNjYWxlOiAxLFxuICAgICAgICBtb2RpZmllcjogMSxcbiAgICAgICAgc2xpZGVTaGFkb3dzOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgYmluZE1vZHVsZU1ldGhvZHMoc3dpcGVyLCB7XG4gICAgICAgIGNvdmVyZmxvd0VmZmVjdDogX2V4dGVuZHMoe30sIENvdmVyZmxvdylcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGJlZm9yZUluaXQ6IGZ1bmN0aW9uIGJlZm9yZUluaXQoc3dpcGVyKSB7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2NvdmVyZmxvdycpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLmNsYXNzTmFtZXMucHVzaChzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MgKyBcImNvdmVyZmxvd1wiKTtcbiAgICAgICAgc3dpcGVyLmNsYXNzTmFtZXMucHVzaChzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MgKyBcIjNkXCIpO1xuICAgICAgICBzd2lwZXIucGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICBzd2lwZXIub3JpZ2luYWxQYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcyA9IHRydWU7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoc3dpcGVyKSB7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2NvdmVyZmxvdycpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLmNvdmVyZmxvd0VmZmVjdC5zZXRUcmFuc2xhdGUoKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKHN3aXBlciwgZHVyYXRpb24pIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnY292ZXJmbG93JykgcmV0dXJuO1xuICAgICAgICBzd2lwZXIuY292ZXJmbG93RWZmZWN0LnNldFRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgVGh1bWJzID0ge1xuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciB0aHVtYnNQYXJhbXMgPSBzd2lwZXIucGFyYW1zLnRodW1icztcbiAgICAgIGlmIChzd2lwZXIudGh1bWJzLmluaXRpYWxpemVkKSByZXR1cm4gZmFsc2U7XG4gICAgICBzd2lwZXIudGh1bWJzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIHZhciBTd2lwZXJDbGFzcyA9IHN3aXBlci5jb25zdHJ1Y3RvcjtcblxuICAgICAgaWYgKHRodW1ic1BhcmFtcy5zd2lwZXIgaW5zdGFuY2VvZiBTd2lwZXJDbGFzcykge1xuICAgICAgICBzd2lwZXIudGh1bWJzLnN3aXBlciA9IHRodW1ic1BhcmFtcy5zd2lwZXI7XG4gICAgICAgIGV4dGVuZChzd2lwZXIudGh1bWJzLnN3aXBlci5vcmlnaW5hbFBhcmFtcywge1xuICAgICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgc2xpZGVUb0NsaWNrZWRTbGlkZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIGV4dGVuZChzd2lwZXIudGh1bWJzLnN3aXBlci5wYXJhbXMsIHtcbiAgICAgICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLFxuICAgICAgICAgIHNsaWRlVG9DbGlja2VkU2xpZGU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdCh0aHVtYnNQYXJhbXMuc3dpcGVyKSkge1xuICAgICAgICBzd2lwZXIudGh1bWJzLnN3aXBlciA9IG5ldyBTd2lwZXJDbGFzcyhleHRlbmQoe30sIHRodW1ic1BhcmFtcy5zd2lwZXIsIHtcbiAgICAgICAgICB3YXRjaFNsaWRlc1Zpc2liaWxpdHk6IHRydWUsXG4gICAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICBzbGlkZVRvQ2xpY2tlZFNsaWRlOiBmYWxzZVxuICAgICAgICB9KSk7XG4gICAgICAgIHN3aXBlci50aHVtYnMuc3dpcGVyQ3JlYXRlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci50aHVtYnMuc3dpcGVyLiRlbC5hZGRDbGFzcyhzd2lwZXIucGFyYW1zLnRodW1icy50aHVtYnNDb250YWluZXJDbGFzcyk7XG4gICAgICBzd2lwZXIudGh1bWJzLnN3aXBlci5vbigndGFwJywgc3dpcGVyLnRodW1icy5vblRodW1iQ2xpY2spO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBvblRodW1iQ2xpY2s6IGZ1bmN0aW9uIG9uVGh1bWJDbGljaygpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHRodW1ic1N3aXBlciA9IHN3aXBlci50aHVtYnMuc3dpcGVyO1xuICAgICAgaWYgKCF0aHVtYnNTd2lwZXIpIHJldHVybjtcbiAgICAgIHZhciBjbGlja2VkSW5kZXggPSB0aHVtYnNTd2lwZXIuY2xpY2tlZEluZGV4O1xuICAgICAgdmFyIGNsaWNrZWRTbGlkZSA9IHRodW1ic1N3aXBlci5jbGlja2VkU2xpZGU7XG4gICAgICBpZiAoY2xpY2tlZFNsaWRlICYmICQoY2xpY2tlZFNsaWRlKS5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnRodW1icy5zbGlkZVRodW1iQWN0aXZlQ2xhc3MpKSByZXR1cm47XG4gICAgICBpZiAodHlwZW9mIGNsaWNrZWRJbmRleCA9PT0gJ3VuZGVmaW5lZCcgfHwgY2xpY2tlZEluZGV4ID09PSBudWxsKSByZXR1cm47XG4gICAgICB2Y
24510XIgc2xpZGVUb0luZGV4O1xuXG4gICAgICBpZiAodGh1bWJzU3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgIHNsaWRlVG9JbmRleCA9IHBhcnNlSW50KCQodGh1bWJzU3dpcGVyLmNsaWNrZWRTbGlkZSkuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSwgMTApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2xpZGVUb0luZGV4ID0gY2xpY2tlZEluZGV4O1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgIHZhciBjdXJyZW50SW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG5cbiAgICAgICAgaWYgKHN3aXBlci5zbGlkZXMuZXEoY3VycmVudEluZGV4KS5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5cbiAgICAgICAgICBzd2lwZXIuX2NsaWVudExlZnQgPSBzd2lwZXIuJHdyYXBwZXJFbFswXS5jbGllbnRMZWZ0O1xuICAgICAgICAgIGN1cnJlbnRJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwcmV2SW5kZXggPSBzd2lwZXIuc2xpZGVzLmVxKGN1cnJlbnRJbmRleCkucHJldkFsbChcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyBzbGlkZVRvSW5kZXggKyBcIlxcXCJdXCIpLmVxKDApLmluZGV4KCk7XG4gICAgICAgIHZhciBuZXh0SW5kZXggPSBzd2lwZXIuc2xpZGVzLmVxKGN1cnJlbnRJbmRleCkubmV4dEFsbChcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyBzbGlkZVRvSW5kZXggKyBcIlxcXCJdXCIpLmVxKDApLmluZGV4KCk7XG4gICAgICAgIGlmICh0eXBlb2YgcHJldkluZGV4ID09PSAndW5kZWZpbmVkJykgc2xpZGVUb0luZGV4ID0gbmV4dEluZGV4O2Vsc2UgaWYgKHR5cGVvZiBuZXh0SW5kZXggPT09ICd1bmRlZmluZWQnKSBzbGlkZVRvSW5kZXggPSBwcmV2SW5kZXg7ZWxzZSBpZiAobmV4dEluZGV4IC0gY3VycmVudEluZGV4IDwgY3VycmVudEluZGV4IC0gcHJldkluZGV4KSBzbGlkZVRvSW5kZXggPSBuZXh0SW5kZXg7ZWxzZSBzbGlkZVRvSW5kZXggPSBwcmV2SW5kZXg7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci5zbGlkZVRvKHNsaWRlVG9JbmRleCk7XG4gICAgfSxcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShpbml0aWFsKSB7XG4gICAgICB2Y
24510XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciB0aHVtYnNTd2lwZXIgPSBzd2lwZXIudGh1bWJzLnN3aXBlcjtcbiAgICAgIGlmICghdGh1bWJzU3dpcGVyKSByZXR1cm47XG4gICAgICB2YXIgc2xpZGVzUGVyVmlldyA9IHRodW1ic1N3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nID8gdGh1bWJzU3dpcGVyLnNsaWRlc1BlclZpZXdEeW5hbWljKCkgOiB0aHVtYnNTd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXc7XG4gICAgICB2YXIgYXV0b1Njcm9sbE9mZnNldCA9IHN3aXBlci5wYXJhbXMudGh1bWJzLmF1dG9TY3JvbGxPZmZzZXQ7XG4gICAgICB2YXIgdXNlT2Zmc2V0ID0gYXV0b1Njcm9sbE9mZnNldCAmJiAhdGh1bWJzU3dpcGVyLnBhcmFtcy5sb29wO1xuXG4gICAgICBpZiAoc3dpcGVyLnJlYWxJbmRleCAhPT0gdGh1bWJzU3dpcGVyLnJlYWxJbmRleCB8fCB1c2VPZmZzZXQpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRUaHVtYnNJbmRleCA9IHRodW1ic1N3aXBlci5hY3RpdmVJbmRleDtcbiAgICAgICAgdmFyIG5ld1RodW1ic0luZGV4O1xuICAgICAgICB2YXIgZGlyZWN0aW9uO1xuXG4gICAgICAgIGlmICh0aHVtYnNTd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgICBpZiAodGh1bWJzU3dpcGVyLnNsaWRlcy5lcShjdXJyZW50VGh1bWJzSW5kZXgpLmhhc0NsYXNzKHRodW1ic1N3aXBlci5wYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpIHtcbiAgICAgICAgICAgIHRodW1ic1N3aXBlci5sb29wRml4KCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuXG4gICAgICAgICAgICB0aHVtYnNTd2lwZXIuX2NsaWVudExlZnQgPSB0aHVtYnNTd2lwZXIuJHdyYXBwZXJFbFswXS5jbGllbnRMZWZ0O1xuICAgICAgICAgICAgY3VycmVudFRodW1ic0luZGV4ID0gdGh1bWJzU3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgICAgICAgIH0gLy8gRmluZCBhY3R1YWwgdGh1bWJzIGluZGV4IHRvIHNsaWRlIHRvXG5cblxuICAgICAgICAgIHZhciBwcmV2VGh1bWJzSW5kZXggPSB0aHVtYnNTd2lwZXIuc2xpZGVzLmVxKGN1cnJlbnRUaHVtYnNJbmRleCkucHJldkFsbChcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyBzd2lwZXIucmVhbEluZGV4ICsgXCJcXFwiXVwiKS5lcSgwKS5pbmRleCgpO1xuICAgICAgICAgIHZhciBuZXh0VGh1bWJzSW5kZXggPSB0aHVtYnNTd2lwZXIuc2xpZGVzLmVxKGN1cnJlbnRUaHVtYnNJbmRleCkubmV4dEFsbChcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyBzd2lwZXIucmVhbEluZGV4ICsgXCJcXFwiXVwiKS5lcSgwKS5pbmRleCgpO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBwcmV2VGh1bWJzSW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBuZXdUaHVtYnNJbmRleCA9IG5leHRUaHVtYnNJbmRleDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0VGh1bWJzSW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBuZXdUaHVtYnNJbmRleCA9IHByZXZUaHVtYnNJbmRleDtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5leHRUaHVtYnNJbmRleCAtIGN1cnJlbnRUaHVtYnNJbmRleCA9PT0gY3VycmVudFRodW1ic0luZGV4IC0gcHJldlRodW1ic0luZGV4KSB7XG4gICAgICAgICAgICBuZXdUaHVtYnNJbmRleCA9IHRodW1ic1N3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXAgPiAxID8gbmV4dFRodW1ic0luZGV4IDogY3VycmVudFRodW1ic0luZGV4O1xuICAgICAgICAgIH0gZWxzZSBpZiAobmV4dFRodW1ic0luZGV4IC0gY3VycmVudFRodW1ic0luZGV4IDwgY3VycmVudFRodW1ic0luZGV4IC0gcHJldlRodW1ic0luZGV4KSB7XG4gICAgICAgICAgICBuZXdUaHVtYnNJbmRleCA9IG5leHRUaHVtYnNJbmRleDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3VGh1bWJzSW5kZXggPSBwcmV2VGh1bWJzSW5kZXg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlyZWN0aW9uID0gc3dpcGVyLmFjdGl2ZUluZGV4ID4gc3dpcGVyLnByZXZpb3VzSW5kZXggPyAnbmV4dCcgOiAncHJldic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3VGh1bWJzSW5kZXggPSBzd2lwZXIucmVhbEluZGV4O1xuICAgICAgICAgIGRpcmVjdGlvbiA9IG5ld1RodW1ic0luZGV4ID4gc3dpcGVyLnByZXZpb3VzSW5kZXggPyAnbmV4dCcgOiAncHJldic7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXNlT2Zmc2V0KSB7XG4gICAgICAgICAgbmV3VGh1bWJzSW5kZXggKz0gZGlyZWN0aW9uID09PSAnbmV4dCcgPyBhdXRvU2Nyb2xsT2Zmc2V0IDogLTEgKiBhdXRvU2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRodW1ic1N3aXBlci52aXNpYmxlU2xpZGVzSW5kZXhlcyAmJiB0aHVtYnNTd2lwZXIudmlzaWJsZVNsaWRlc0luZGV4ZXMuaW5kZXhPZihuZXdUaHVtYnNJbmRleCkgPCAwKSB7XG4gICAgICAgICAgaWYgKHRodW1ic1N3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgICAgIGlmIChuZXdUaHVtYnNJbmRleCA+IGN1cnJlbnRUaHVtYnNJbmRleCkge1xuICAgICAgICAgICAgICBuZXdUaHVtYnNJbmRleCA9IG5ld1RodW1ic0luZGV4IC0gTWF0aC5mbG9vcihzbGlkZXNQZXJWaWV3IC8gMikgKyAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3VGh1bWJzSW5kZXggPSBuZXdUaHVtYnNJbmRleCArIE1hdGguZmxvb3Ioc2xpZGVzUGVyVmlldyAvIDIpIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKG5ld1RodW1ic0luZGV4ID4gY3VycmVudFRodW1ic0luZGV4ICYmIHRodW1ic1N3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXAgPT09IDEpIDtcblxuICAgICAgICAgIHRodW1ic1N3aXBlci5zbGlkZVRvKG5ld1RodW1ic0luZGV4LCBpbml0aWFsID8gMCA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQWN0aXZhdGUgdGh1bWJzXG5cblxuICAgICAgdmFyIHRodW1ic1RvQWN0aXZhdGUgPSAxO1xuICAgICAgdmFyIHRodW1iQWN0aXZlQ2xhc3MgPSBzd2lwZXIucGFyYW1zLnRodW1icy5zbGlkZVRodW1iQWN0aXZlQ2xhc3M7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgPiAxICYmICFzd2lwZXIucGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICAgI
24510HRodW1ic1RvQWN0aXZhdGUgPSBzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXc7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy50aHVtYnMubXVsdGlwbGVBY3RpdmVUaHVtYnMpIHtcbiAgICAgICAgdGh1bWJzVG9BY3RpdmF0ZSA9IDE7XG4gICAgICB9XG5cbiAgICAgIHRodW1ic1RvQWN0aXZhdGUgPSBNYXRoLmZsb29yKHRodW1ic1RvQWN0aXZhdGUpO1xuICAgICAgdGh1bWJzU3dpcGVyLnNsaWRlcy5yZW1vdmVDbGFzcyh0aHVtYkFjdGl2ZUNsYXNzKTtcblxuICAgICAgaWYgKHRodW1ic1N3aXBlci5wYXJhbXMubG9vcCB8fCB0aHVtYnNTd2lwZXIucGFyYW1zLnZpcnR1YWwgJiYgdGh1bWJzU3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aHVtYnNUb0FjdGl2YXRlOyBpICs9IDEpIHtcbiAgICAgICAgICB0aHVtYnNTd2lwZXIuJHdyYXBwZXJFbC5jaGlsZHJlbihcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyAoc3dpcGVyLnJlYWxJbmRleCArIGkpICsgXCJcXFwiXVwiKS5hZGRDbGFzcyh0aHVtYkFjdGl2ZUNsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHRodW1ic1RvQWN0aXZhdGU7IF9pICs9IDEpIHtcbiAgICAgICAgICB0aHVtYnNTd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5yZWFsSW5kZXggKyBfaSkuYWRkQ2xhc3ModGh1bWJBY3RpdmVDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciBUaHVtYnMkMSA9IHtcbiAgICBuYW1lOiAndGh1bWJzJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIHRodW1iczoge1xuICAgICAgICBzd2lwZXI6IG51bGwsXG4gICAgICAgIG11bHRpcGxlQWN0aXZlVGh1bWJzOiB0cnVlLFxuICAgICAgICBhdXRvU2Nyb2xsT2Zmc2V0OiAwLFxuICAgICAgICBzbGlkZVRodW1iQWN0aXZlQ2xhc3M6ICdzd2lwZXItc2xpZGUtdGh1bWItYWN0aXZlJyxcbiAgICAgICAgdGh1bWJzQ29udGFpbmVyQ2xhc3M6ICdzd2lwZXItY29udGFpbmVyLXRodW1icydcbiAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBiaW5kTW9kdWxlTWV0aG9kcyhzd2lwZXIsIHtcbiAgICAgICAgdGh1bWJzOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgc3dpcGVyOiBudWxsLFxuICAgICAgICAgIGluaXRpYWxpemVkOiBmYWxzZVxuICAgICAgICB9LCBUaHVtYnMpXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBiZWZvcmVJbml0OiBmdW5jdGlvbiBiZWZvcmVJbml0KHN3aXBlcikge1xuICAgICAgICB2Y
24510XIgdGh1bWJzID0gc3dpcGVyLnBhcmFtcy50aHVtYnM7XG4gICAgICAgIGlmICghdGh1bWJzIHx8ICF0aHVtYnMuc3dpcGVyKSByZXR1cm47XG4gICAgICAgIHN3aXBlci50aHVtYnMuaW5pdCgpO1xuICAgICAgICBzd2lwZXIudGh1bWJzLnVwZGF0ZSh0cnVlKTtcbiAgICAgIH0sXG4gICAgICBzbGlkZUNoYW5nZTogZnVuY3Rpb24gc2xpZGVDaGFuZ2Uoc3dpcGVyKSB7XG4gICAgICAgIGlmICghc3dpcGVyLnRodW1icy5zd2lwZXIpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLnRodW1icy51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShzd2lwZXIpIHtcbiAgICAgICAgaWYgKCFzd2lwZXIudGh1bWJzLnN3aXBlcikgcmV0dXJuO1xuICAgICAgICBzd2lwZXIudGh1bWJzLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIHJlc2l6ZTogZnVuY3Rpb24gcmVzaXplKHN3aXBlcikge1xuICAgICAgICBpZiAoIXN3aXBlci50aHVtYnMuc3dpcGVyKSByZXR1cm47XG4gICAgICAgIHN3aXBlci50aHVtYnMudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgb2JzZXJ2ZXJVcGRhdGU6IGZ1bmN0aW9uIG9ic2VydmVyVXBkYXRlKHN3aXBlcikge1xuICAgICAgICBpZiAoIXN3aXBlci50aHVtYnMuc3dpcGVyKSByZXR1cm47XG4gICAgICAgIHN3aXBlci50aHVtYnMudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihzd2lwZXIsIGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciB0aHVtYnNTd2lwZXIgPSBzd2lwZXIudGh1bWJzLnN3aXBlcjtcbiAgICAgICAgaWYgKCF0aHVtYnNTd2lwZXIpIHJldHVybjtcbiAgICAgICAgdGh1bWJzU3dpcGVyLnNldFRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgfSxcbiAgICAgIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koc3dpcGVyKSB7XG4gICAgICAgIHZhciB0aHVtYnNTd2lwZXIgPSBzd2lwZXIudGh1bWJzLnN3aXBlcjtcbiAgICAgICAgaWYgKCF0aHVtYnNTd2lwZXIpIHJldHVybjtcblxuICAgICAgICBpZiAoc3dpcGVyLnRodW1icy5zd2lwZXJDcmVhdGVkICYmIHRodW1ic1N3aXBlcikge1xuICAgICAgICAgIHRodW1ic1N3aXBlci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gU3dpcGVyIENsYXNzXG4gIHZhciBjb21wb25lbnRzID0gW1ZpcnR1YWwkMSwgS2V5Ym9hcmQkMSwgTW91c2V3aGVlbCQxLCBOYXZpZ2F0aW9uJDEsIFBhZ2luYXRpb24kMSwgU2Nyb2xsYmFyJDEsIFBhcmFsbGF4JDEsIFpvb20kMSwgTGF6eSQxLCBDb250cm9sbGVyJDEsIEExMXkkMSwgSGlzdG9yeSQxLCBIYXNoTmF2aWdhdGlvbiQxLCBBdXRvcGxheSQxLCBFZmZlY3RGYWRlLCBFZmZlY3RDdWJlLCBFZmZlY3RGbGlwLCBFZmZlY3RDb3ZlcmZsb3csIFRodW1icyQxXTtcbiAgU3dpcGVyLnVzZShjb21wb25lbnRzKTtcblxuICByZXR1cm4gU3dpcGVyO1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3dpcGVyLWJ1bmRsZS5qcy5tYXAiLCIvKipcbiAqIHdlYmNhbSB3aXRoIHByb2dyZXNzYmFyIGFuZCBhcmlhLVN1cHBvcnRcbiAqIFVtc2V0enVuZzogRGFubnkgT3R0byBmw7xyIGFuYXRvbTVcbiAqIGluc3BpcmVkIGJ5IGh0dHA6Ly9hY2Nlc3MuYW9sLmNvbS9hZWdpcy8jZ290b19wcm9ncmVzc2JhclxuICpcbiAqIFZlcnNpb246IDJcbiAqL1xuXG5jbGFzcyB3ZWJjYW0ge1xuXG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9yLHNldHRpbmdzID0ge30pIHtcblxuICAgIHRoaXMuZGVmYXVsdHMgPSB7XG4gICAgICAndGltZW91dCcgOiAyMCxcbiAgICAgICdwcm9ncmVzc2JhclZpc2libGVUaW1lJyA6IDEwLFxuICAgICAgJ3ByZWZpeCcgOiAnd2ViY2FtJ1xuICAgIH07XG5cbiAgICAvLyBDb25maWcgZXJzdGVsbGVuXG4gICAgdGhpcy5jb25maWcgPSBPYmplY3QuYXNzaWduKHRoaXMuZGVmYXVsdHMsc2V0dGluZ3MpO1xuXG4gICAgLy8gYWxsZSBXZWJjYW1zIGZpbmRlblxuICAgIGxldCB3ZWJjYW1JdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgXG4gICAgLy8gRnVua3Rpb25lbiBhdWYgYWxsZSBXZWJjYW1zIGFud2VuZGVuXG4gICAgZm9yKCBpbmRleD0wOyBpbmRleCA8IHdlYmNhbUl0ZW1zLmxlbmd0aDsgaW5kZXgrKyApIHtcbiAgICAgIHRoaXMucnVuKHdlYmNhbUl0ZW1zW2luZGV4XSxpbmRleCk7XG4gICAgfVxuXG4gIH1cblxuICBydW4gKGNvbnRhaW5lcixudW0pIHtcblxuICAgIGxldCB3ZWJjYW0gPSB7fTtcblxuICAgIHdlYmNhbS5sYWJlbCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcud2ViY2FtLWxhYmVsJyk7XG4gICAgd2ViY2FtLmxhYmVsLmlubmVyVGV4dCA9IHdlYmNhbS5sYWJlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGl0bGUnKTtcbiAgICB3ZWJjYW0udW5pdCA9IHdlYmNhbS5sYWJlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdW5pdCcpO1xuICAgIHdlYmNhbS5pbWFnZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcud2ViY2FtLWltYWdlJyk7XG4gICAgd2ViY2FtLmltYWdlc3JjID0gd2ViY2FtLmltYWdlLmdldEF0dHJpYnV0ZSgnc3JjJyk7XG5cbiAgICAvLyBIVE1MIGbDvHIgUHJvZ3Jlc3NiYXIgZXJ6ZXVnZW5cbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXJDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXJDb250YWluZXIuc2V0QXR0cmlidXRlKCdjbGFzcycsdGhpcy5jb25maWcucHJlZml4ICsgJy1wcm9ncmVzc2Jhci1jb250YWluZXInKTtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQod2ViY2FtLnByb2dyZXNzYmFyQ29udGFpbmVyKTtcblxuICAgIHdlYmNhbS5wcm9ncmVzc2JhcldyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXJXcmFwcGVyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLHRoaXMuY29uZmlnLnByZWZpeCArICctcHJvZ3Jlc3NiYXInKTtcbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXJDb250YWluZXIuYXBwZW5kQ2hpbGQod2ViY2FtLnByb2dyZXNzYmFyV3JhcHBlcik7XG5cbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcm9ncmVzcycpO1xuICAgIHdlYmNhbS5wcm9ncmVzc2Jhci5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgMCk7XG4gICAgd2ViY2FtLnByb2dyZXNzYmFyLnNldEF0dHJpYnV0ZSgnbWF4JywgMTAwKTtcbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXJXcmFwcGVyLmFwcGVuZENoaWxkKHdlYmNhbS5wcm9ncmVzc2Jhcik7XG5cbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXJUaW1lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHdlYmNhbS5wcm9ncmVzc2JhclRpbWVyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLHRoaXMuY29uZmlnLnByZWZpeCArICctcHJvZ3Jlc3NiYXItdGltZXInKTtcbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXJDb250YWluZXIuYXBwZW5kQ2hpbGQod2ViY2FtLnByb2dyZXNzYmFyVGltZXIpO1xuXG4gICAgLy8gSUQncyBhbmbDvGdlblxuICAgI
24510HdlYmNhbS5sYWJlbC5pZCA9IHRoaXMuY29uZmlnLnByZWZpeCArICctbGFiZWwnICsgbnVtO1xuICAgIHdlYmNhbS5pbWFnZS5pZCA9IHRoaXMuY29uZmlnLnByZWZpeCArICctaW1hZ2UnICsgbnVtO1xuICAgIHdlYmNhbS5wcm9ncmVzc2Jhci5pZCA9IHRoaXMuY29uZmlnLnByZWZpeCArICctcHJvZ3Jlc3NiYXInICsgbnVtO1xuICAgIHdlYmNhbS5wcm9ncmVzc2JhclRpbWVyLmlkID0gdGhpcy5jb25maWcucHJlZml4ICsgJy1wcm9ncmVzc2Jhci10aW1lcicgKyBudW07XG5cbiAgICAvLyBBcmlhXG4gICAgd2ViY2FtLmxhYmVsLnNldEF0dHJpYnV0ZSgnYXJpYS1saXZlJywgJ3BvbGl0ZScpO1xuICAgIHdlYmNhbS5pbWFnZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIHdlYmNhbS5wcm9ncmVzc2Jhci5pZCArICcgJyArIHdlYmNhbS5wcm9ncmVzc2JhclRpbWVyLmlkKTtcbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXIuc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVlbWluJywgMCk7XG5cbiAgICAvLyBDb3VudGVyIHN0YXJ0ZW5cbiAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXIuc2V0QXR0cmlidXRlKCdkYXRhLWhpZGRlbicsJ3RydWUnKTtcbiAgICB0aGlzLmNvdW50ZXIod2ViY2FtKTtcblxuICB9XG5cbiAgLy8gQmlsZCBha3R1YWxpc2llcmVuXG4gIHJlbG9hZEltYWdlICh3ZWJjYW0pIHtcbiAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgbGV0IHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICAgIHdlYmNhbS5pbWFnZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHdlYmNhbS5pbWFnZXNyYyArICc/JyArIHRpbWVzdGFtcCk7XG4gIH1cblxuICAvLyBVcGRhdGUgZGVyIFByb2dyZXNzYmFyXG4gIHVwZGF0ZVByb2dyZXNzYmFyIChjb3VudGVyLHdlYmNhbSkge1xuICAgIGxldCBwZXJjZW50ID0gY291bnRlciAqIDEwMCAvIHRoaXMuY29uZmlnLnByb2dyZXNzYmFyVmlzaWJsZVRpbWU7XG4gICAgd2ViY2FtLnByb2dyZXNzYmFyLnNldEF0dHJpYnV0ZSgndmFsdWUnLCAxMDAgLSBwZXJjZW50ICk7XG4gIH1cblxuICAvLyBDb3VudGVyXG4gIGNvdW50ZXIgKHdlYmNhbSkge1xuXG4gICAgbGV0IHQgPSB0aGlzO1xuICAgIHZhciBwcmVjaXNpb24gPSAyNTtcbiAgICB2YXIgY291bnRlciA9IHQuY29uZmlnLnRpbWVvdXQ7XG4gICAgdmFyIHByb2dyZXNzSXNWaXNpYmxlID0gZmFsc2U7XG5cbiAgICB2YXIgY291bnRlckludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtcblxuICAgICAgLy8gUHJvZ3Jlc3NiYXIgYW56ZWlnZW5cbiAgICAgIGlmICggY291bnRlciA8PSB0LmNvbmZpZy5wcm9ncmVzc2JhclZpc2libGVUaW1lICYmICFwcm9ncmVzc0lzVmlzaWJsZSApIHtcbiAgICAgICAgd2ViY2FtLnByb2dyZXNzYmFyLnNldEF0dHJpYnV0ZSgnZGF0YS1oaWRkZW4nLCdmYWxzZScpO1xuICAgICAgICBwcm9ncmVzc0lzVmlzaWJsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFByb2dyZXNzYmFyIGFrdHVhbGlzaWVyZW5cbiAgICAgIGlmICggY291bnRlciA8PSB0LmNvbmZpZy5wcm9ncmVzc2JhclZpc2libGVUaW1lICkge1xuICAgICAgICB0LnVwZGF0ZVByb2dyZXNzYmFyKGNvdW50ZXIsd2ViY2FtKTtcbiAgICAgIH1cblxuICAgICAgLy8gQW56ZWlnZSBha3R1YWxpc2llcmVuXG4gICAgICB3ZWJjYW0ucHJvZ3Jlc3NiYXJUaW1lci5pbm5lclRleHQgPSBNYXRoLmNlaWwoY291bnRlcikgKyAnICcgKyB3ZWJjYW0udW5pdDtcblxuICAgICAgLy8gUmVzdGFydFxuICAgICAgaWYgKGNvdW50ZXIgPD0gMCkge1xuICAgICAgICBcbiAgICAgICAgLy8gQ291bnRlciB6dXLDvGNrc2V0emVuXG4gICAgICAgIGNvdW50ZXIgPSB0LmNvbmZpZy50aW1lb3V0O1xuICAgICAgICBcbiAgICAgICAgLy8gQmlsZCBuZXVsYWRlblxuICAgICAgICB0LnJlbG9hZEltYWdlKHdlYmNhbSk7XG4gICAgICAgIFxuICAgICAgICAvLyBQcm9ncmVzc2JhciBhdXNibGVuZGVuXG4gICAgICAgIHdlYmNhbS5wcm9ncmVzc2Jhci5zZXRBdHRyaWJ1dGUoJ2RhdGEtaGlkZGVuJywndHJ1ZScpO1xuICAgICAgICBwcm9ncmVzc0lzVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBDb3VudGVyIHZlcnJpbmdlcm5cbiAgICAgIGNvdW50ZXIgPSBjb3VudGVyIC0gKDEgLyBwcmVjaXNpb24pO1xuXG4gICAgfSwgMTAwMCAvIHByZWNpc2lvbik7XG5cbiAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IHdlYmNhbTtcblxuXG4iLCJyZWFkeShmdW5jdGlvbigpIHtcblxuICAvLyBGb3JtdWxhci1JbmZvYnV0dG9uXG4gIGxldCBpbmZvQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmE1LWluZm8tYnV0dG9uJyk7XG4gIGZvcihsZXQgaSA9IDA7IGkgPCBpbmZvQnV0dG9uLmxlbmd0aDsgaSsrKSB7XG5cbiAgICBpbmZvQnV0dG9uW2ldLnBhcmVudE5vZGUuY2xhc3NMaXN0LmFkZCgnaGFzLWluZm8tYnV0dG9uJyk7XG5cbiAgICBsZXQgaW5mb0J0biA9IG5ldyBweEVhc3lFeHBhbmQoaW5mb0J1dHRvbltpXSx7XG4gICAgICBjbG9zZVdpdGhFc2MgOiBmYWxzZSxcbiAgICAgIGFkZENsb3NlQnV0dG9uIDogZmFsc2UsXG4gICAgICBrZWVwRm9jdXNJblRhcmdldEVsZW1lbnQgOiBmYWxzZVxuICAgIH0pO1xuXG4gIH1cblxufSk7IiwicmVhZHkoZnVuY3Rpb24oKSB7XG5cbiAgLy8gSGFtYnVyZ2VyXG4gIGNvbnN0IGhhbWJ1cmdlciA9IG5ldyBweEVhc3lFeHBhbmQoJyNoYW1idXJnZXInLHtcbiAgICBjbG9zZVdpdGhFc2MgOiB0cnVlLFxuICAgIHNldFJvb3RDbGFzcyA6ICdvZmZjYW52YXMtdmlzaWJsZScsXG4gICAgYWRkQ2xvc2VCdXR0b24gOiB0cnVlLFxuICAgIHNldEZvY3VzVG9FbGVtZW50OiAnLmpzLWNsb3NlJyxcbiAgICBrZWVwRm9jdXNJblRhcmdldEVsZW1lbnQgOiB0cnVlLFxuICAgIGhpZGRlbldoZW5PcGVuOiAnLnBhZ2UnXG4gIH0pO1xuXG59KTsiLCJpbXBvcnQgR0xpZ2h0Ym94IGZyb20gJy4uL21vZHVsZXMvZ2xpZ2h0Ym94LmpzJztcbnJlYWR5KGZ1bmN0aW9uKCkge1xuXG5cbiAgLy8gTGlnaHRib3hncnVwcGVuIGZpbmRlbiB1bmQgTGlnaHRib3ggYW5iaW5kZW5cbiAgbGV0IGxpZ2h0Ym94SW5zdGFuY2VzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmE1LXRleHQtaW1hZ2UgZmlndXJlLCAuYTUtaW1hZ2UgZmlndXJlLCAuYTUtaW1hZ2UtZ2FsbGVyeScpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpZ2h0Ym94SW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICBsZXQgbGlnaHRib3hMaW5rcyA9IGxpZ2h0Ym94SW5zdGFuY2VzW2ldLnF1ZXJ5U2VsZWN0b3JBbGwoJ2FbZGF0YS1saWdodGJveF0nKTtcbiAgICBpZiAobGlnaHRib3hMaW5rcy5sZW5ndGggPiAxKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpZ2h0Ym94TGlua3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgbGV0IGNvdW50ZXIgPSB3aW5kb3cubGlnaHRib3guY291bnRUZXh0O1xuICAgICAgICBjb3VudGVyID0gY291bnRlci5yZXBsYWNlKC97Q1VSfS9nLGogKyAxKTtcbiAgICAgICAgY291bnRlciA9IGNvdW50ZXIucmVwbGFjZSgve1NVTX0vZyxsaWdodGJveExpbmtzLmxlbmd0aCk7XG4gICAgICAgIGxpZ2h0Ym94TGlua3Nbal0uc2V0QXR0cmlidXRlKCdkYXRhLXRpdGxlJyxjb3VudGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsaWdodGJveEluc3RhbmNlc1tpXS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbGlnaHRib3gtZ3JvdXAnLGkpO1xuICAgIGluaXRMaWdodGJveCgnW2RhdGEtbGlnaHRib3gtZ3JvdXA9XCInICsgaSArICdcIl0gYVtkYXRhLWxpZ2h0Ym94XScpOyAgICBcblxuICB9XG5cblxuICBmdW5jdGlvbiBpbml0TGlnaHRib3goc2VsZWN0b3IpIHtcblxuICAgIGNvbnN0IGxpZ2h0Ym94SFRNTCA9ICc8ZGl2IGlkPVwiZ2xpZ2h0Ym94LWJvZHlcIiBjbGFzcz1cImdsaWdodGJveC1jb250YWluZXJcIiBhcmlhLWxhYmVsPVwiJyArIHdpbmRvdy5saWdodGJveC5hcmlhTGFiZWwgKyAnXCI+PGRpdiBjbGFzcz1cImdsb2FkZXIgdmlzaWJsZVwiPjwvZGl2PjxkaXYgY2xhc3M9XCJnb3ZlcmxheVwiPjwvZGl2PjxkaXYgY2xhc3M9XCJnY29udGFpbmVyXCI+PGRpdiBpZD1cImdsaWdodGJveC1zbGlkZXJcIiBjbGFzcz1cImdzbGlkZXJcIj48L2Rpdj48YnV0dG9uIGNsYXNzPVwiZ3ByZXYgZ2J0blwiIGFyaWEtbGFiZWw9XCInICsgd2luZG93LmxpZ2h0Ym94LnByZXZUZXh0ICsgJ1wiPntwcmV2U1ZHfTwvYnV0dG9uPjxidXR0b24gY2xhc3M9XCJnbmV4dCBnYnRuXCIgYXJpYS1sYWJlbD1cIicgKyB3aW5kb3cubGlnaHRib3gubmV4dFRleHQgKyAnXCI+e25leHRTVkd9PC9idXR0b24+J1xuICAgICAgICAgICAgICAgICAgICAgICArICc8ZGV0YWlscyBpZD1cImdTaGFyZVwiIGNsYXNzPVwiZ3NoYXJlXCIgZGF0YS1oaWRkZW49XCJ0cnVlXCI+PHN1bW1hcnkgdGl0bGU9XCInICsgd2luZG93LmxpZ2h0Ym94LnNoYXJlVGl0bGUgKyAnXCI+JyArIHdpbmRvdy5saWdodGJveC5zaGFyZVN2ZyArICc8c3B
24510hbj4nICsgd2luZG93LmxpZ2h0Ym94LnNoYXJlSGlkZGVuVGV4dCArICc8L3NwYW4+PC9zdW1tYXJ5Pjx1bD48L3VsPjwvZGV0YWlscz4nXG4gICAgICAgICAgICAgICAgICAgICAgICsgJzxidXR0b24gY2xhc3M9XCJnY2xvc2UgZ2J0blwiIGFyaWEtbGFiZWw9XCInICsgd2luZG93LmxpZ2h0Ym94LmNsb3NlVGV4dCArICdcIj57Y2xvc2VTVkd9PC9idXR0b24+PC9kaXY+PC9kaXY+JztcblxuICAgIGNvbnN0IGxpZ2h0Ym94U2xpZGVIVE1MID0gJzxkaXYgY2xhc3M9XCJnc2xpZGVcIj48ZGl2IGNsYXNzPVwiZ3NsaWRlLWlubmVyLWNvbnRlbnRcIj48ZGl2IGNsYXNzPVwiZ2lubmVyLWNvbnRhaW5lclwiPjxkaXYgY2xhc3M9XCJnc2xpZGUtbWVkaWFcIj48L2Rpdj48ZGl2IGNsYXNzPVwiZ3NsaWRlLWRlc2NyaXB0aW9uXCI+PGRpdiBjbGFzcz1cImdkZXNjLWlubmVyXCI+PHN0cm9uZyBjbGFzcz1cImdzbGlkZS10aXRsZVwiPjwvc3Ryb25nPjxwIGNsYXNzPVwiZ3NsaWRlLWRlc2NcIj48L3A+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+JztcblxuICAgIGNvbnN0IGxpZ2h0Ym94ID0gR0xpZ2h0Ym94KHtcbiAgICAgIHNlbGVjdG9yOiBzZWxlY3RvcixcbiAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IGZhbHNlLFxuICAgICAgbGlnaHRib3hIVE1MOiBsaWdodGJveEhUTUwsXG4gICAgICBzbGlkZUhUTUw6IGxpZ2h0Ym94U2xpZGVIVE1MLFxuICAgICAgdG91Y2hOYXZpZ2F0aW9uOiB0cnVlLFxuICAgICAgbW9yZUxlbmd0aDogMCxcbiAgICAgIGxvb3A6IHRydWUsXG4gICAgICB6b29tYWJsZTogZmFsc2UsXG4gICAgICBzdmc6IHtcbiAgICAgICAgY2xvc2U6IHdpbmRvdy5saWdodGJveC5jbG9zZVN2ZyxcbiAgICAgICAgbmV4dDogd2luZG93LmxpZ2h0Ym94Lm5leHRTdmcsXG4gICAgICAgIHByZXY6IHdpbmRvdy5saWdodGJveC5wcmV2U3ZnXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgZm9jdXNhYmxlRWxlbWVudHMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUZvY3VzYWJsZUVsZW1lbnRzKCkge1xuXG4gICAgICBsZXQgZWxlbWVudHMgPSBsaWdodGJveC5tb2RhbC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b246bm90KC5kaXNhYmxlZCksIHN1bW1hcnksIGRldGFpbHNbb3Blbl0gYScpO1xuXG4gICAgICBmb2N1c2FibGVFbGVtZW50cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGVsZW1lbnRzKS5maWx0ZXIoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiAhIShcbiAgICAgICAgICBjaGlsZC5vZmZzZXRXaWR0aCB8fFxuICAgICAgICAgIGNoaWxkLm9mZnNldEhlaWdodCB8fFxuICAgICAgICAgIGNoaWxkLmdldENsaWVudFJlY3RzKCkubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlRm9jdXMoZXZlbnQpIHtcblxuICAgICAgaWYgKGV2ZW50LndoaWNoID09PSA5KSB7XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBsZXQgaW5kZXggPSBmb2N1c2FibGVFbGVtZW50cy5pbmRleE9mKGV2ZW50LnRhcmdldCk7XG5cbiAgICAgICAgaWYgKCFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIGlmICgoaW5kZXggKyAxKSA9PSBmb2N1c2FibGVFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvY3VzYWJsZUVsZW1lbnRzWzBdLmZvY3VzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvY3VzYWJsZUVsZW1lbnRzW2luZGV4ICsgMV0uZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGluZGV4ID09IDApIHtcbiAgICAgICAgICAgIGZvY3VzYWJsZUVsZW1lbnRzW2ZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCAtIDFdLmZvY3VzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvY3VzYWJsZUVsZW1lbnRzW2luZGV4IC0gMV0uZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgfTtcblxuICAgIGxpZ2h0Ym94Lm9uKCdvcGVuJywgKCkgPT4ge1xuXG4gICAgICAvLyBGb2N1cyBhdWYgZGVuIE5leHQtQnV0dG9uIG9kZXIgYWx0ZXJuYXRpdiBhdWYgZGVuIFNjaGxpZcOfZW4tQnV0dG9uXG4gICAgICBpZiAoICFsaWdodGJveC5uZXh0QnV0dG9uLmNsYXNzTGlzdC5jb250YWlucygnZGlzYWJsZWQnKSApIHtcbiAgICAgICAgbGlnaHRib3gubmV4dEJ1dHRvbi5mb2N1cygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGlnaHRib3gubW9kYWwucXVlcnlTZWxlY3RvcignLmdjbG9zZScpLmZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZvcmJlcmVpdHVuZyBTcHJhY2hhdXNnYWJlXG4gICAgICBsaWdodGJveC5weFN0YXR1cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcbiAgICAgIGxpZ2h0Ym94LnB4U3RhdHVzLnNldEF0dHJpYnV0ZSgnYXJpYS1saXZlJywncG9saXRlJyk7XG4gICAgICBsaWdodGJveC5tb2RhbC5hcHBlbmRDaGlsZChsaWdodGJveC5weFN0YXR1cyk7XG5cbiAgICAgIC8vIFZvcmJlcmVpdHVuZyBTaGFyZS1CdXR0b25cbiAgICAgIGxpZ2h0Ym94LnB4U2hhcmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ1NoYXJlJyk7XG4gICAgICBsaWdodGJveC5weFNoYXJlVUwgPSBsaWdodGJveC5weFNoYXJlLnF1ZXJ5U2VsZWN0b3IoJ3VsJyk7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh3aW5kb3cubGlnaHRib3guc2hhcmVOZXR3b3JrcykpIHtcbiAgICAgICAgbGV0IHB4U2hhcmVJdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtcbiAgICAgICAgcHhTaGFyZUl0ZW0uaW5uZXJIVE1MID0gdmFsdWU7XG4gICAgICAgIGxpZ2h0Ym94LnB4U2hhcmVVTC5hcHBlbmRDaGlsZChweFNoYXJlSXRlbSk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZUZvY3VzYWJsZUVsZW1lbnRzKCk7XG4gICAgICBkb2
24510N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlRm9jdXMsIGZhbHNlKTtcblxuICAgIH0pO1xuXG4gICAgbGlnaHRib3gub24oJ3NsaWRlX2NoYW5nZWQnLCh7cHJldixjdXJyZW50fSkgPT4ge1xuXG4gICAgICAvLyBhcmlhLWxhYmVsbGVkYnkgYW0gQmlsZCBlbnRmZXJuZW4sIGZhbGxzIHZvcmhhbmRlblxuICAgICAgbGV0IGhhc0FyaWFMYWJlbGxlZGJ5ID0gbGlnaHRib3gubW9kYWwucXVlcnlTZWxlY3RvcignW2FyaWEtbGFiZWxsZWRieV0nKTtcbiAgICAgIGlmICh0eXBlb2YoaGFzQXJpYUxhYmVsbGVkYnkpICE9ICd1bmRlZmluZWQnICYmIGhhc0FyaWFMYWJlbGxlZGJ5ICE9IG51bGwpIHtcbiAgICAgICAgaGFzQXJpYUxhYmVsbGVkYnkucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknKVxuICAgICAgfVxuXG4gICAgICAvLyBDb3VudGVyIGF1ZmJlcmVpdGVuXG4gICAgICAvLyBsZXQgY291bnRlciA9IHdpbmRvdy5saWdodGJveC5jb3VudFRleHQ7XG4gICAgICAvLyBjb3VudGVyID0gY291bnRlci5yZXBsYWNlKC97Q1VSfS9nLGN1cnJlbnQuaW5kZXggKyAxKTtcbiAgICAgIC8vIGNvdW50ZXIgPSBjb3VudGVyLnJlcGxhY2UoL3tTVU19L2csbGlnaHRib3guZWxlbWVudHMubGVuZ3RoKTtcblxuICAgICAgLy8gU3ByYWNoYXVzZ2FiZVxuICAgICAgbGlnaHRib3gucHhTdGF0dXMuaW5uZXJIVE1MID0gJyc7XG4gICAgICBpZiAoIGN1cnJlbnQudHJpZ2dlci5oYXNBdHRyaWJ1dGUoJ2RhdGEtdGl0bGUnKSApIHtcbiAgICAgICAgbGlnaHRib3gucHhTdGF0dXMuaW5uZXJIVE1MID0gbGlnaHRib3gucHhTdGF0dXMuaW5uZXJIVE1MICsgJyAnICsgY3VycmVudC50cmlnZ2VyLmdldEF0dHJpYnV0ZSgnZGF0YS10aXRsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCBjdXJyZW50LnRyaWdnZXIuaGFzQXR0cmlidXRlKCdkYXRhLWRlc2NyaXB0aW9uJykgKSB7XG4gICAgICAgIGxpZ2h0Ym94LnB4U3RhdHVzLmlubmVySFRNTCA9IGxpZ2h0Ym94LnB4U3RhdHVzLmlubmVySFRNTCArICcgJyArIGN1cnJlbnQudHJpZ2dlci5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGVzY3JpcHRpb24nKTtcbiAgICAgIH1cbiAgICAgIGlmICggY3VycmVudC50cmlnZ2VyLmhhc0F0dHJpYnV0ZSgnZGF0YS1hbHQnKSApIHtcbiAgICAgICAgbGlnaHRib3gucHhTdGF0dXMuaW5uZXJIVE1MID0gbGlnaHRib3gucHhTdGF0dXMuaW5uZXJIVE1MICsgJyAnICsgY3VycmVudC50cmlnZ2VyLmdldEF0dHJpYnV0ZSgnZGF0YS1hbHQnKTtcbiAgICAgIH1cbiAgICBcbiAgICAgIC8vIGFrdGl2ZXMgRWxlbWVudCB6dW0gc2V0emVuIGRlcyBGb2N1cyBuYWNoIGRlbSBTY2hsaWXDn2VuIHNwZWljaGVyblxuICAgICAgbGlnaHRib3gubGFzdFRpZ2dlciA9IGN1cnJlbnQudHJpZ2dlcjtcblxuICAgICAgLy8gU2hhcmUtTGlua3MgYXVzYmxlbmRlbj8gQWx0ZXJuYXRpdiBVUkwgaW4gU2hhcmUtTGlua3MgYW5wYXNzZW5cbiAgICAgIGlmKHR5cGVvZihsaWdodGJveC5weFNoYXJlKSAhPSAndW5kZWZpbmVkJyAmJiBsaWdodGJveC5weFNoYXJlICE9IG51bGwpIHtcblxuICAgICAgICBpZiAoY3VycmVudC50cmlnZ2VyLmhhc0F0dHJpYnV0ZSgnZGF0YS1zaGFyZS11cmwnKSkge1xuICAgICAgICAgIGxldCBzaGFyZUVsZW1lbnRzID0gbGlnaHRib3gucHhTaGFyZS5xdWVyeVNlbGVjdG9yQWxsKCdhJyk7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGFyZUVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaHJlZiA9IHNoYXJlRWxlbWVudHNbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLWhyZWYnKTtcbiAgICAgICAgICAgIGxldCBpbWFnZVVSTCA9IGN1cnJlbnQudHJpZ2dlci5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgICAgICAgIHNoYXJlRWxlbWVudHNbaV0uc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZi5yZXBsYWNlKC97SU1BR0V9L2csaW1hZ2VVUkwpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGlnaHRib3gucHhTaGFyZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtaGlkZGVuJywnZmFsc2UnKTtcbiAgICAgICAgICBsaWdodGJveC5weFNoYXJlLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHVwZGF0ZUZvY3VzYWJsZUVsZW1lbnRzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGlnaHRib3gucHhTaGFyZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtaGlkZGVuJywndHJ1ZScpO1xuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgdXBkYXRlRm9jdXNhYmxlRWxlbWVudHMoKTtcblxuICAgIH0pO1xuXG4gICAgbGlnaHRib3gub24oJ2Nsb3NlJywoKSA9PiB7XG4gICAgICBsaWdodGJveC5sYXN0VGlnZ2VyLmZvY3VzKCk7XG4gICAgICBkb2
24510N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlRm9jdXMpO1xuICAgIH0pO1xuXG4gIH1cblxuXG59KTtcblxuXG4iLCJyZWFkeShmdW5jdGlvbigpIHtcblxuICBpZiAoIHdpbmRvdy5pbm5lcldpZHRoIDwgNzYwICkge1xuXG4gICAgLy8gS2xhcHBlbGVtZW50ZSBpbSBGb290ZXJcbiAgICBsZXQgZm9vdGVyVG9nZ2xlQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm5hdi1tZXRhJyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvb3RlclRvZ2dsZUNvbnRhaW5lci5sZW5ndGg7IGkrKykge1xuXG4gICAgICBsZXQgdG9nZ2xlV3JhcHBlciA9IGZvb3RlclRvZ2dsZUNvbnRhaW5lcltpXTtcbiAgICAgIGxldCB0b2dnbGVUYXJnZXQgPSB0b2dnbGVXcmFwcGVyLmNoaWxkcmVuWzBdO1xuXG4gICAgICB0b2dnbGVUYXJnZXQuc2V0QXR0cmlidXRlKCdpZCcsICdmb290ZXItdG9nZ2xlLScgKyBpKTtcblxuICAgICAgdG9nZ2xlV3JhcHBlci5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyYmVnaW4nLCAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJmb290ZXItdG9nZ2xlLWJ1dHRvbi0nICsgaSArICdcIj4nICsgdG9nZ2xlV3JhcHBlci5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGV4dC1vcGVuJykgKyAnPC9idXR0b24+Jyk7XG5cbiAgICAgIGxldCBlYXN5ZXhwYW5kID0gbmV3IHB4RWFzeUV4cGFuZCgnZm9vdGVyLXRvZ2dsZS1idXR0b24tJyArIGkse1xuICAgICAgICBjbG9zZVdpdGhFc2M6IGZhbHNlLFxuICAgICAgICBzd2l0Y2hCdXR0b25IdG1sOiB0cnVlLFxuICAgICAgICBoaWRkZW5BdHRyaWJ1dGU6ICdkYXRhLWhpZGRlbidcbiAgICAgIH0se1xuICAgICAgICBsYWJlbE9wZW46IHRvZ2dsZVdyYXBwZXIuZ2V0QXR0cmlidXRlKCdkYXRhLWxhYmVsLW9wZW4nKSxcbiAgICAgICAgbGFiZWxDbG9zZTogdG9nZ2xlV3JhcHBlci5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwtY2xvc2UnKSxcbiAgICAgICAgdGV4dE9wZW46IHRvZ2dsZVdyYXBwZXIuZ2V0QXR0cmlidXRlKCdkYXRhLXRleHQtb3BlbicpLFxuICAgICAgICB0ZXh0Q2xvc2U6IHRvZ2dsZVdyYXBwZXIuZ2V0QXR0cmlidXRlKCdkYXRhLXRleHQtY2xvc2UnKSxcbiAgICAgICAgY29udHJvbHM6ICdmb290ZXItdG9nZ2xlLScgKyBpXG4gICAgICB9KTtcblxuICAgICAgZWFzeWV4cGFuZC5mdW5jdGlvbnMuYWZ0ZXJUb2dnbGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgY29uc29sZS5sb2codG9nZ2xlVGFyZ2V0KTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgdG9nZ2xlVGFyZ2V0LnNjcm9sbEludG9WaWV3KHRydWUpOyB9LCAyMDApO1xuICAgICAgfVxuXG4gICAgfVxuXG4gIH1cblxufSk7IiwicmVhZHkoZnVuY3Rpb24oKSB7XG5cbiAgLy8gSGF1cHRuYXZpZ2F0aW9uIGFscyBPdmVybGF5XG4gIGxldCBtbWVudUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21tZW51Jyk7XG5cbiAgaWYgKHR5cGVvZihtbWVudUVsKSAhPSAndW5kZWZpbmVkJyAmJiBtbWVudUVsICE9IG51bGwpIHtcblxuICAgIC8vIEhhdXB0bmF2aWdhdGlvblxuICAgIGxldCBtbWVudVN0cm9uZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtbWVudSBzdHJvbmdbYXJpYS1jdXJyZW50XScpO1xuICAgIGlmIChtbWVudVN0cm9uZykge1xuICAgICAgbGV0IG1tZW51U3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgIG1tZW51U3Bhbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcsJ3BhZ2UnKTtcbiAgICAgIG1tZW51U3Bhbi5pbm5lckhUTUwgPSBtbWVudVN0cm9uZy5pbm5lckhUTUw7XG4gICAgICBtbWVudVN0cm9uZy5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChtbWVudVNwYW4sIG1tZW51U3Ryb25nKTtcbiAgICB9XG5cblxuICAgIGNvbnN0IG1tZW51ID0gbmV3IE1tZW51KCcjbW1lbnUnLHtcbiAgICAgICdvZmZDYW52YXMnIDogZmFsc2UsXG4gICAgICAnbmF2YmFycycgOiBbe1xuICAgICAgICAncG9zaXRpb24nIDogJ3RvcCcsXG4gICAgICAgICdjb250ZW50JyA6IFsndGl0bGUnLCdwcmV2J11cbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgICduYXZiYXInIDoge1xuICAgICAgICAndGl0bGUnIDogbW1lbnVFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwnKVxuICAgICAgfSxcbiAgICAgICdrZXlib2FyZE5hdmlnYXRpb24nIDoge1xuICAgICAgICAnZW5hYmxlJyA6IGZhbHNlLFxuICAgICAgICAnZW5oYW5jZScgOiBmYWxzZVxuICAgICAgfSxcbiAgICAgICdzY3JlZW5SZWFkZXInIDogZmFsc2UsXG4gICAgICAnaG9va3MnIDoge1xuICAgICAgICAnb3BlblBhbmVsOmZpbmlzaCcgOiAocGFuZWwpID0+IHtcbiAgICAgICAgICBsZXQgbW1UaXRsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtbWVudSAubW0tbmF2YmFyc190b3AgYS5tbS1uYXZiYXJfX3RpdGxlW2hyZWZdJyk7XG4gICAgICAgICAgaWYgKG1tVGl0bGUpIHtcblxuICAgICAgICAgICAgbGV0IGlzQmFja2xpbmsgPSBtbVRpdGxlLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NwYW4uYmFja2xpbmsnKTtcbiAgICAgICAgICAgIGlmIChpc0JhY2tsaW5rLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgbGV0IGJhY2tUaXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgYmFja1RpdGxlLmNsYXNzTGlzdC5hZGQoJ2JhY2tsaW5rJyk7XG4gICAgICAgICAgICAgIGJhY2tUaXRsZS5pbm5lckhUTUwgPSBtbWVudUVsLmdldEF0dHJpYnV0ZSgnZGF0YS1iYWNrJyk7XG4gICAgICAgICAgICAgIG1tVGl0bGUucHJlcGVuZChiYWNrVGl0bGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtbVRpdGxlLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICAgICAgICAgIG1tVGl0bGUuc2V0QXR0cmlidXRlKCd0aXRsZScsd2luZG93Lm1tZW51LnRpdGxlTGF5ZXJQcmV2KTtcbiAgICAgICAgICAgIG1tVGl0bGUuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJyxtbVRpdGxlLnRleHQgKyAnLiAnICsgd2luZG93Lm1tZW51LmxhYmVsTGF5ZXJQcmV2KTtcbiAgICAgICAgICAgIG1tVGl0bGUuc2V0QXR0cmlidXRlKCdyb2xlJywnYnV0dG9uJyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIE5WREE6IHNldFRpbWVvdXQgdG8gcmVhZCBjb3JyZWN0IHRpdGxlXG4gICAgICAgICAgICBzZXRUaW
245101lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBtbVRpdGxlLmZvY3VzKCk7XG4gICAgICAgICAgICB9LCAxMDApO1xuXG4gICAgICAgICAgfSBlbHNlIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHRtbCcpWzBdLmNsYXNzTGlzdC5jb250YWlucygnanMtbmF2JykpIHtcbiAgICAgICAgICAgIHBhbmVsLnF1ZXJ5U2VsZWN0b3IoJy5tbS1saXN0dmlldyBhJykuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LHtcbiAgICAgICdsYW5ndWFnZScgOiAnZGUnLFxuICAgICAgJ2NsYXNzTmFtZXMnIDoge1xuICAgICAgICAnc2VsZWN0ZWQnOiAnb3BlbidcbiAgICAgIH1cbiAgICB9KTtcblxuXG4gICAgLy8gUGFuZWwgZGVzIGFrdGl2ZW4gTGlua3Mgw7ZmZm5lblxuICAgIGNvbnN0IG1tZW51QXBpID0gbW1lbnUuQVBJO1xuICAgIGNvbnN0IG1tZW51UGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubW0tbWVudSAubW0tbGlzdGl0ZW1fc2VsZWN0ZWQgPiBhJyk7XG4gICAgaWYgKG1tZW51UGFuZWwpIHtcbiAgICAgIG1tZW51QXBpLm9wZW5QYW5lbChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtbWVudVBhbmVsLmhhc2guc3Vic3RyKDEpKSk7XG4gICAgfVxuXG4gICAgLy8gS29ycmVrdHVyZW4gZsO8ciBNTWVudVxuICAgIGxldCBtbUJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tbS1wYW5lbCAubW0tYnRuX25leHQnKTtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgbW1CdXR0b24ubGVuZ3RoOyBpKyspIHtcblxuICAgICAgaWYgKCBtbUJ1dHRvbltpXS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nICYmIG1tQnV0dG9uW2ldLnByZXZpb3VzRWxlbWVudFNpYmxpbmcudGFnTmFtZSA9PSAnQScgKSB7XG4gICAgICAgIG1tQnV0dG9uW2ldLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsd2luZG93Lm1tZW51LmxhYmVsTGF5ZXJOZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1tQnV0dG9uW2ldLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsbW1CdXR0b25baV0uaW5uZXJUZXh0ICsgJy4gJyArIHdpbmRvdy5tbWVudS5sYWJlbExheWVyTmV4dCk7XG4gICAgICB9XG5cbiAgICAgIG1tQnV0dG9uW2ldLnNldEF0dHJpYnV0ZSgndGl0bGUnLHdpbmRvdy5tbWVudS50aXRsZUxheWVyTmV4dCk7XG4gICAgICBtbUJ1dHRvbltpXS5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCdidXR0b24nKTtcbiAgICAgIG1tQnV0dG9uW2ldLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsJ2ZhbHNlJyk7XG5cbiAgICB9XG5cbiAgfVxuXG59KTtcblxuXG4iLCJcblxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2Nyb2xsc3RhcnRcblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZ1bmN0aW9uKCkge1xuICBpZiAoIE1hdGgubWF4KHdpbmRvdy5wYWdlWU9mZnNldCwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApID4gMTAwKSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXRvcCcpO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpcy10b3AnKTtcbiAgfVxufSk7XG5cbmlmICggTWF0aC5tYXgod2luZG93LnBhZ2VZT2Zmc2V0LCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCkgPCAxMDEpIHtcbiAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2lzLXRvcCcpO1xufVxuXG5cbiIsInJlYWR5KGZ1bmN0aW9uKCkge1xuXG4gIC8vIFN1Y2hlXG4gIGNvbnN0IHN1Y2hlID0gbmV3IHB4RWFzeUV4cGFuZCgnI3NlYXJjaGJ1dHRvbicse1xuICAgIGNsb3NlV2l0aEVzYyA6IHRydWUsXG4gICAgc2V0Um9vdENsYXNzIDogJ29mZmNhbnZhcy12aXNpYmxlJyxcbiAgICBhZGRDbG9zZUJ1dHRvbiA6IHRydWUsXG4gICAgc2V0Rm9jdXNUb0VsZW1lbnQ6ICcuanMtY2xvc2UnLFxuICAgIGtlZXBGb2N1c0luVGFyZ2V0RWxlbWVudCA6IHRydWUsXG4gICAgaGlkZGVuV2hlbk9wZW46ICcucGFnZScsXG4gICAgb246IHtcbiAgICAgIGJlZm9yZVRvZ2dsZTogZnVuY3Rpb24gKGJ1dHRvbikge1xuICAgICAgICAvLyB3aW5kb3cuc2Nyb2xsVG8oe3RvcDogMCwgbGVmdDogMCwgYmVoYXZpb3I6ICdpbnN0YW50J30pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbn0pOyIsIlxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3dpcGVyXG5cbnJlYWR5KGZ1bmN0aW9uKCkge1xuXG5cbiAgY29uc3Qgc2xpZGVyQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmE1LWV2ZW50cy1zbGlkZXIsIC5hNS1pbWFnZS1zbGlkZXItaW5uZXIsIC5wYWdlLWFzaWRlLXNsaWRlcicpO1xuXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGlkZXJDb250YWluZXIubGVuZ3RoOyBpKyspIHtcblxuICAgIGxldCBzbGlkZXJVTCA9IHNsaWRlckNvbnRhaW5lcltpXS5xdWVyeVNlbGVjdG9yKCd1bCcpO1xuICAgIGxldCBzbGlkZXJJdGVtcyA9IHNsaWRlclVMLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpJyk7XG5cbiAgICBpZiAoIHNsaWRlckl0ZW1zLmxlbmd0aCA8IDIgKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoc2xpZGVyQ29udGFpbmVyW2ldLmdldEF0dHJpYnV0ZSgnZGF0YS1zbGlkZXItbWluaXRlbXMnKSkge1xuXG4gICAgICBpZiAoc2xpZGVySXRlbXMubGVuZ3RoIDwgc2xpZGVyQ29udGFpbmVyW2ldLmdldEF0dHJpYnV0ZSgnZGF0YS1zbGlkZXItbWluaXRlbXMnKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIHNsaWRlckNvbnRhaW5lcltpXS5jbGFzc0xpc3QuYWRkKCdzd2lwZXItY29udGFpbmVyJyk7XG4gICAgc2xpZGVyVUwuY2xhc3NMaXN0LmFkZCgnc3dpcGVyLXdyYXBwZXInKTtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2xpZGVySXRlbXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHNsaWRlckl0ZW1zW2pdLmNsYXNzTGlzdC5hZGQoJ3N3aXBlci1zbGlkZScpO1xuICAgIH1cblxuICAgIGxldCBwcmV2VGl0bGUgPSBzd2lwZXIucHJldlRpdGxlO1xuICAgIGlmIChzbGlkZXJDb250YWluZXJbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLWJ1dHRvbi1sYWJlbC1wcmV2JykpIHtcbiAgICAgIHByZXZUaXRsZSA9IHNsaWRlckNvbnRhaW5lcltpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnV0dG9uLWxhYmVsLXByZXYnKTtcbiAgICB9XG4gICAgbGV0IG5leHRUaXRsZSA9IHN3aXBlci5uZXh0VGl0bGU7XG4gICAgaWYgKHNsaWRlckNvbnRhaW5lcltpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnV0dG9uLWxhYmVsLW5leHQnKSkge1xuICAgICAgbmV4dFRpdGxlID0gc2xpZGVyQ29udGFpbmVyW2ldLmdldEF0dHJpYnV0ZSgnZGF0YS1idXR0b24tbGFiZWwtbmV4dCcpO1xuICAgIH1cblxuXG4gICAgLy8gSGVybyBTbGlkZXJcbiAgICBpZiAoc2xpZGVyQ29udGFpbmVyW2ldLmNsYXNzTGlzdC5jb250YWlucygncGFnZS1hc2l
24510kZS1zbGlkZXInKSkge1xuXG4gICAgICBsZXQgYnV0dG9uV3JhcHBlciA9IGNyZWF0ZUVsZW1lbnQoJzxkaXYgY2xhc3M9XCJzd2lwZXItY29udHJvbHNcIj48L2Rpdj4nKTtcbiAgICAgIHNsaWRlckNvbnRhaW5lcltpXS5hcHBlbmQoYnV0dG9uV3JhcHBlcik7XG5cbiAgICAgIGxldCBidXR0b25Db250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICBidXR0b25Db250cm9sLnNldEF0dHJpYnV0ZSgndHlwZScsICdidXR0b24nKTtcbiAgICAgIGJ1dHRvbkNvbnRyb2wuc2V0QXR0cmlidXRlKCdkYXRhLWF1dG9wbGF5JywgJ3N0b3AnKTtcbiAgICAgIGJ1dHRvbkNvbnRyb2wuaW5uZXJIVE1MID0gc3dpcGVyLnN0b3BUaXRsZTtcbiAgICAgIGJ1dHRvbkNvbnRyb2wuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgc3dpcGVyLmFyaWFMYWJlbFN0b3ApO1xuICAgICAgYnV0dG9uQ29udHJvbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxldCBzbGlkZXIgPSB0aGlzLmNsb3Nlc3QoJy5zd2lwZXItY29udGFpbmVyJykuc3dpcGVyO1xuICAgICAgICBpZiAoc2xpZGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHtcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnZGF0YS1hdXRvcGxheScsICdzdGFydCcpO1xuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgc3dpcGVyLmFyaWFMYWJlbFN0YXJ0KTtcbiAgICAgICAgICBidXR0b25Db250cm9sLmlubmVySFRNTCA9IHN3aXBlci5zdGFydFRpdGxlO1xuICAgICAgICAgIHNsaWRlclVMLnNldEF0dHJpYnV0ZSgnYXJpYS1saXZlJywgJ3BvbGl0ZScpO1xuICAgICAgICAgIHNsaWRlci5hdXRvcGxheS5zdG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2RhdGEtYXV0b3BsYXknLCAnc3RvcCcpO1xuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgc3dpcGVyLmFyaWFMYWJlbFN0b3ApO1xuICAgICAgICAgIGJ1dHRvbkNvbnRyb2wuaW5uZXJIVE1MID0gc3dpcGVyLnN0b3BUaXRsZTtcbiAgICAgICAgICBzbGlkZXJVTC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGl2ZScsICdvZmYnKTtcbiAgICAgICAgICBzbGlkZXIuYXV0b3BsYXkuc3RhcnQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBidXR0b25XcmFwcGVyLmFwcGVuZChidXR0b25Db250cm9sKTtcblxuICAgICAgLy8gU3RvcCBzbGlkZXIgb24gaW50ZXJhY3RcbiAgICAgIHNsaWRlclVMLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGJ1dHRvbkNvbnRyb2wuZ2V0QXR0cmlidXRlKCdkYXRhLWF1dG9wbGF5JykgPT0gJ3N0b3AnKSB7XG4gICAgICAgICAgYnV0dG9uQ29udHJvbC5jbGljaygpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbmV3IFN3aXBlcihzbGlkZXJDb250YWluZXJbaV0se1xuICAgICAgICBlZmZlY3Q6ICdmYWRlJyxcbiAgICAgICAgZmFkZUVmZmVjdDoge1xuICAgICAgICAgIGNyb3NzRmFkZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBhMTF5OiB7XG4gICAgICAgICAgc2xpZGVSb2xlOiAnbGlzdGl0ZW0nXG4gICAgICAgIH0sXG4gICAgICAgIGF1dG9wbGF5OiB0cnVlLFxuICAgICAgICBzcGVlZDogMTAwMCxcbiAgICAgICAgYXV0b0hlaWdodDogdHJ1ZSxcbiAgICAgICAgYWxsb3dUb3VjaE1vdmU6IGZhbHNlLFxuICAgICAgICBrZXlib2FyZDoge1xuICAgICAgICAgIGVuYWJsZWQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB9XG5cblxuICAgIC8vIEV2ZW50LVNsaWRlclxuICAgIGlmIChzbGlkZXJDb250YWluZXJbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCdhNS1ldmVudHMtc2xpZGVyJykpIHtcblxuICAgICAgbGV0IGJ1dHRvbldyYXBwZXIgPSBjcmVhdGVFbGVtZW50KCc8ZGl2IGNsYXNzPVwic3dpcGVyLWNvbnRyb2xzXCI+PC9kaXY+Jyk7XG4gICAgICBzbGlkZXJDb250YWluZXJbaV0uYXBwZW5kKGJ1dHRvbldyYXBwZXIpO1xuXG4gICAgICAvLyBsZXQgYnV0dG9uTmV4dCA9IGNyZWF0ZUVsZW1lbnQoJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic3dpcGVyLW5leHRcIj4nICsgc3dpcGVyLm5leHQgKyAnPC9idXR0b24+Jyk7XG4gICAgICAvLyBidXR0b25XcmFwcGVyLmluc2VydEJlZm9yZShidXR0b25OZXh0LGJ1dHRvbldyYXBwZXIuZmlyc3RDaGlsZCk7XG5cbiAgICAgIC8vIGxldCBidXR0b25QcmV2ID0gY3JlYXRlRWxlbWVudCgnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzd2lwZXItcHJldlwiPicgKyBzd2lwZXIucHJldiArICc8L2J1dHRvbj4nKTtcbiAgICAgIC8vIGJ1dHRvbldyYXBwZXIuaW5zZXJ0QmVmb3JlKGJ1dHRvblByZXYsYnV0dG9uV3JhcHBlci5maXJzdENoaWxkKTtcblxuICAgICAgbGV0IHBhZ2luYXRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpXG4gICAgICBwYWdpbmF0aW9uLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnc2xpZGVyLXBhZ2luYXRpb24nKTtcbiAgICAgIGJ1dHRvbldyYXBwZXIuYXBwZW5kKHBhZ2luYXRpb24pO1xuXG4gICAgICBsZXQgYnV0dG9uQ29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgYnV0dG9uQ29udHJvbC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnYnV0dG9uJyk7XG4gICAgICBidXR0b25Db250cm9sLnNldEF0dHJpYnV0ZSgnZGF0YS1hdXRvcGxheScsICdzdG9wJyk7XG4gICAgICBidXR0b25Db250cm9sLmlubmVySFRNTCA9IHN3aXBlci5zdG9wVGl0bGU7XG4gICAgICBidXR0b25Db250cm9sLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHN3aXBlci5hcmlhTGFiZWxTdG9wKTtcbiAgICAgIGJ1dHRvbkNvbnRyb2wuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBsZXQgc2xpZGVyID0gdGhpcy5jbG9zZXN0KCcuc3dpcGVyLWNvbnRhaW5lcicpLnN3aXBlcjtcbiAgICAgICAgaWYgKHNsaWRlci5hdXRvcGxheS5ydW5uaW5nKSB7XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2RhdGEtYXV0b3BsYXknLCAnc3RhcnQnKTtcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHN3aXBlci5hcmlhTGFiZWxTdGFydCk7XG4gICAgICAgICAgYnV0dG9uQ29udHJvbC5pbm5lckhUTUwgPSBzd2lwZXIuc3RhcnRUaXRsZTtcbiAgICAgICAgICBzbGlkZXJVTC5zZXRB
24510dHRyaWJ1dGUoJ2FyaWEtbGl2ZScsICdwb2xpdGUnKTtcbiAgICAgICAgICBzbGlkZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdkYXRhLWF1dG9wbGF5JywgJ3N0b3AnKTtcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHN3aXBlci5hcmlhTGFiZWxTdG9wKTtcbiAgICAgICAgICBidXR0b25Db250cm9sLmlubmVySFRNTCA9IHN3aXBlci5zdG9wVGl0bGU7XG4gICAgICAgICAgc2xpZGVyVUwuc2V0QXR0cmlidXRlKCdhcmlhLWxpdmUnLCAnb2ZmJyk7XG4gICAgICAgICAgc2xpZGVyLmF1dG9wbGF5LnN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYnV0dG9uV3JhcHBlci5hcHBlbmQoYnV0dG9uQ29udHJvbCk7XG5cbiAgICAgIC8vIFN0b3Agc2xpZGVyIG9uIGludGVyYWN0XG4gICAgICBzbGlkZXJVTC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChidXR0b25Db250cm9sLmdldEF0dHJpYnV0ZSgnZGF0YS1hdXRvcGxheScpID09ICdzdG9wJykge1xuICAgICAgICAgIGJ1dHRvbkNvbnRyb2wuY2xpY2soKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBTd2lwZXIoc2xpZGVyQ29udGFpbmVyW2ldLHtcbiAgICAgICAgZWZmZWN0OiAnZmFkZScsXG4gICAgICAgIGZhZGVFZmZlY3Q6IHtcbiAgICAgICAgICBjcm9zc0ZhZGU6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgYTExeToge1xuICAgICAgICAgIHNsaWRlUm9sZTogJ2xpc3RpdGVtJ1xuICAgICAgICB9LFxuICAgICAgICBhdXRvcGxheTogdHJ1ZSxcbiAgICAgICAgc3BlZWQ6IDEwMDAsXG4gICAgICAgIGF1dG9IZWlnaHQ6IHRydWUsXG4gICAgICAgIGFsbG93VG91Y2hNb3ZlOiBmYWxzZSxcbiAgICAgICAga2V5Ym9hcmQ6IHtcbiAgICAgICAgICBlbmFibGVkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICBlbDogcGFnaW5hdGlvbixcbiAgICAgICAgICBjbGlja2FibGU6IHRydWUsXG4gICAgICAgICAgcmVuZGVyQnVsbGV0OiBmdW5jdGlvbiAoaW5kZXgsIGNsYXNzTmFtZSkge1xuICAgICAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5zbGlkZXNbaW5kZXhdLmdldEF0dHJpYnV0ZSgnZGF0YS10aXRsZScpO1xuICAgICAgICAgICAgbGV0IGxhYmVsID0gc3dpcGVyLmJ1bGxldFRpdGxlICsgJyAnICsgKGluZGV4ICsgMSk7XG4gICAgICAgICAgICByZXR1cm4gJzxsaSByb2xlPVwiYnV0dG9uXCIgY2xhc3M9XCInICsgY2xhc3NOYW1lICsgJ1wiIHRpdGxlPVwiJyArIHRpdGxlICsgJ1wiIGFyaWEtbGFiZWw9XCInICsgbGFiZWwgKyAnXCI+PC9saT4nO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBwYWdpbmF0aW9uUmVuZGVyOiBmdW5jdGlvbiAoc3dpcGVyRWwpIHtcblxuICAgICAgICAgICAgbGV0IGJ1bGxldHMgPSBzd2lwZXJFbC5wYWdpbmF0aW9uLmJ1bGxldHM7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVsbGV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBidWxsZXRzW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlICE9PSAxMyAmJiBldmVudC5rZXlDb2RlICE9PSAzMikgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBidWxsZXRzW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdzd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlJykpIHtcbiAgICAgICAgICAgICAgICAgIGJ1dHRvbkNvbnRyb2wuc2V0QXR0cmlidXRlKCdkYXRhLWF1dG9wbGF5JywgJ3N0YXJ0Jyk7XG4gICAgICAgICAgICAgICAgICBidXR0b25Db250cm9sLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHN3aXBlci5hcmlhTGFiZWxTdGFydCk7XG4gICAgICAgICAgICAgICAgICBidXR0b25Db250cm9sLmlubmVySFRNTCA9IHN3aXBlci5zdGFydFRpdGxlO1xuICAgICAgICAgICAgICAgICAgc2xpZGVyVUwuc2V0QXR0cmlidXRlKCdhcmlhLWxpdmUnLCAncG9saXRlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBsaW5rID0gc3dpcGVyRWwuc2xpZGVzW2ldLnF1ZXJ5U2VsZWN0b3IoJ2EnKTtcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YobGluaykgIT0gJ3VuZGVmaW5lZCcgJiYgbGluayAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBsaW5rLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFnaW5hdGlvblVwZGF0ZTogZnVuY3Rpb24gKHN3aXBlckVsKSB7XG5cbiAgICAgICAgICAgIGxldCBidWxsZXRzID0gc3dpcGVyRWwucGFnaW5hdGlvbi5idWxsZXRzO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1bGxldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgYnVsbGV0c1tpXS5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcpO1xuICAgICAgICAgICAgICBzd2lwZXJFbC5zbGlkZXNbaV0ucXVlcnlTZWxlY3RvcignYScpLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnVsbGV0c1tzd2lwZXJFbC5yZWFsSW5kZXhdLnNldEF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JywgJ3RydWUnKTtcbiAgICAgICAgICAgIHN3aXBlckVsLnNsaWRlc1tzd2lwZXJFbC5yZWFsSW5kZXhdLnF1ZXJ5U2VsZWN0b3IoJ2EnKS5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG5cbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cblxuICAgIH1cblxuICAgIC8vIG5vcm1hbGVyIFNsaWRlclxuICAgIGlmIChzbGlkZXJDb250YWluZXJbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCdhNS1pbWFnZS1zbGlkZXItaW5uZXInKSkge1xuXG4gICAgICBsZXQgYnV0dG9uV3JhcHBlciA9IGNyZWF0ZUVsZW1lbnQoJzxkaXYgY2xhc3M9XCJzd2lwZXItY29udHJvbHNcIj48L2Rpdj4nKTtcbiAgICAgIHNsaWRlckNvbnRhaW5lcltpXS5wYXJlbnROb2RlLmFwcGVuZChidXR0b25XcmFwcGVyKTtcblxuICAgICAgbGV0IGJ1dHRvbk5leHQgPSBjcmVhdGVFbGVtZW50KCc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInN3aXBlci1uZXh0XCI+JyArIHN3aXBlci5uZXh0ICsgJzwvYnV0dG9uPicpO1xuICAgICAgYnV0dG9uV3JhcHBlci5pbnNlcnRCZWZvcmUoYnV0dG9uTmV4dCxidXR0b25XcmFwcGVyLmZpcnN0Q2hpbGQpO1xuXG4gICAgICBsZXQgYnV0dG9uUHJldiA9IGNyZWF0ZUVsZW1lbnQoJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic3dpcGVyLXByZXZcIj4nICsgc3dpcGVyLnByZXYgKyAnPC9idXR0b24+Jyk7XG4gICAgICBidXR0b25XcmFwcGVyLmluc2VydEJlZm9yZShidXR0b25QcmV2LGJ1dHRvbldyYXBwZXIuZmlyc3RDaGlsZCk7XG5cbiAgICAgIG5ldyBTd2lwZXIoc2xpZGVyQ29udGFpbmVyW2ldLHtcbiAgICAgICAgZWZmZWN0OiAnc2xpZGUnLFxuICAgICAgICBsb29wOiB0cnVlLFxuICAgICAgICBhdXRvSGVpZ2h0OiB0cnVlLFxuICAgICAgICBhMTF5OiB7XG4gICAgICAgICAgcHJldlNsaWRlTWVzc2FnZTogcHJldlRpdGxlLFxuICAgICAgICAgIG5leHRTbGlkZU1lc3NhZ2U6IG5leHRUaXRsZSxcbiAgICAgICAgICBzbGlkZVJvbGU6ICdsaXN0aXRlbSdcbiAgICAgICAgfSxcbiAgICAgICAgbmF2aWdhdGlvbjoge1xuICAgICAgICAgIG5leHRFbDogYnV0dG9uTmV4dCxcbiAgICAgICAgICBwcmV2RWw6IGJ1dHRvblByZXZcbiAgICAgICAgfSxcbiAgICAgICAga2V5Ym9hcmQ6IHtcbiAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIG9ubHlJblZpZXdwb3J0OiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBzbGlkZXNQZXJWaWV3OiAxLFxuICAgICAgICBzcGFjZUJldHdlZW46IDBcbiAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLy8gU2xpZGVyLUjDtmhlIG5hY2ggZGVtIExhZGVuIHZvbiBCaWxkZXJuIGFucGFzc2VuXG4gICAgbGV0IGltYWdlcyA9IHNsaWRlckNvbnRhaW5lcltpXS5xdWVyeVNlbGVjdG9yQWxsKCdpbWcuanMtbG9hZCcpO1xuICAgIGZvcihsZXQgaiA9IDA7IGogPCBpbWFnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGltYWdlc1tqXS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKGZ1bmN0aW9uKHNsaWRlcil7XG4gICAgICAgI
24510HJldHVybiBmdW5jdGlvbigpe1xuICAgICAgICAgIHNsaWRlci51cGRhdGVBdXRvSGVpZ2h0KDIwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pKHNsaWRlckNvbnRhaW5lcltpXS5zd2lwZXIpKTtcbiAgICB9XG5cblxuICB9XG5cbn0pO1xuXG5cbiIsInJlYWR5KGZ1bmN0aW9uKCkge1xuXG4gIC8vIFRvZ2dsZS1Cb3hcbiAgbGV0IHRvZ2dsZUJveFdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYTUtdG9nZ2xlLWJveC13cmFwcGVyJyk7XG4gIGZvcihsZXQgaSA9IDA7IGkgPCB0b2dnbGVCb3hXcmFwcGVyLmxlbmd0aDsgaSsrKSB7XG5cbiAgICBsZXQgdG9nZ2xlTXVsdGkgPSB0cnVlO1xuICAgIGxldCBpZExpc3QgPSAnJztcblxuICAgIGlmICggdG9nZ2xlQm94V3JhcHBlcltpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbXVsdGknKSA9PSAnZmFsc2UnICkge1xuICAgICAgdG9nZ2xlTXVsdGkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgdG9nZ2xlQm94ID0gdG9nZ2xlQm94V3JhcHBlcltpXS5xdWVyeVNlbGVjdG9yQWxsKCcuYTUtdG9nZ2xlLWJveCcpO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdG9nZ2xlQm94Lmxlbmd0aDsgaisrKSB7XG5cbiAgICAgIGxldCB0b2dnbGVCb3hCdXR0b25XcmFwcGVyID0gdG9nZ2xlQm94W2pdLnF1ZXJ5U2VsZWN0b3IoJy5hNS10b2dnbGUtYm94LWJ1dHRvbicpO1xuXG4gICAgICBsZXQgdG9nZ2xlQm94QnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICBsZXQgY2hpbGRzTGVuZ3RoID0gdG9nZ2xlQm94QnV0dG9uV3JhcHBlci5jaGlsZE5vZGVzLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgY2hpbGRzTGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdG9nZ2xlQm94QnV0dG9uLmFwcGVuZCh0b2dnbGVCb3hCdXR0b25XcmFwcGVyLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgfVxuICAgICAgdG9nZ2xlQm94QnV0dG9uV3JhcHBlci5hcHBlbmRDaGlsZCh0b2dnbGVCb3hCdXR0b24pO1xuXG4gICAgICBsZXQgdG9nZ2xlQm94Q29udGVudCA9IHRvZ2dsZUJveFtqXS5xdWVyeVNlbGVjdG9yKCcuYTUtdG9nZ2xlLWJveC1jb250ZW50Jyk7XG4gICAgICB0b2dnbGVCb3hDb250ZW50LmlkID0gJ2E1LXRvZ2dsZS1jb250ZW50LScgKyBpICsgJy0nICsgajtcbiAgICAgIGlkTGlzdCA9IGlkTGlzdCArICcgYTUtdG9nZ2xlLWNvbnRlbnQtJyArIGkgKyAnLScgKyBqO1xuXG4gICAgICBsZXQgdGIgPSBuZXcgcHhFYXN5RXhwYW5kKHRvZ2dsZUJveEJ1dHRvbix7XG4gICAgICAgIGNsb3NlV2l0aEVzYyA6IGZhbHNlLFxuICAgICAgICBzd2l0Y2hCdXR0b25IdG1sIDogZmFsc2UsXG4gICAgICAgIHNldEZvY3VzVG9GaXJzdEVsZW1lbnQgOiBmYWxzZSxcbiAgICAgICAga2VlcEZvY3VzSW5UYXJnZXRFbGVtZW50IDogZmFsc2VcbiAgICAgIH0se1xuICAgICAgICBjb250cm9sczogJ2E1LXRvZ2dsZS1jb250ZW50LScgKyBpICsgJy0nICsgalxuICAgICAgfSk7XG5cbiAgICAgIHRiLmZ1bmN0aW9ucy5hZnRlclRvZ2dsZSA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpZiAoIHRvZ2dsZUJveEJ1dHRvbi5leHBhbmRlZCA9PT0gdHJ1ZSApIHtcblxuICAgICAgICAgIHRvZ2dsZUJveENvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gMDtcblxuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRvZ2dsZUJveENvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gdG9nZ2xlQm94Q29udGVudC5jaGlsZHJlblswXS5jbGllbnRIZWlnaHQgKyAncHgnO1xuICAgICAgICAgICAgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgIHRvZ2dsZUJveENvbnRlbnQuZ2V0QW5pbWF0aW9ucyh7c3VidHJlZTpmYWxzZX0pLm1hcChmdW5jdGlvbihhbmltYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFuaW1hdGlvbnMuZmluaXNoZWQ7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHRvZ2dsZUJveENvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LDEwKTtcblxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgdG9nZ2xlQm94Q29udGVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICB0b2dnbGVCb3hDb250ZW50LnN0eWxlLmhlaWdodCA9IHRvZ2dsZUJveENvbnRlbnQuY2hpbGRyZW5bMF0uY2xpZW50SGVpZ2h0ICsgJ3B4JztcblxuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRvZ2dsZUJveENvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICB0b2dnbGVCb3hDb250ZW50LmdldEFuaW1hdGlvbnMoe3N1YnRyZWU6ZmFsc2V9KS5tYXAoZnVuY3Rpb24oYW5pbWF0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbmltYXRpb25zLmZpbmlzaGVkO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB0b2dnbGVCb3hDb250ZW50LnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgICAgICAgICAgdG9nZ2xlQm94Q29udGVudC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sMTApO1xuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IGNsb3NlT3RoZXJzID0gZnVuY3Rpb24gKGNvbnRhaW5lcixjdXJyZW50KSB7XG4gICAgICAgIGxldCB0b2dnbGVCb3hPcGVuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5hNS10b2dnbGUtYm94LWJ1dHRvbiBidXR0b25bYXJpYS1leHBhbmRlZD1cInRydWVcIl0nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2dnbGVCb3hPcGVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCB0b2dnbGVCb3hPcGVuW2ldICE9IGN1cnJlbnQgKSB7XG4gICAgICAgICAgICB0b2dnbGVCb3hPcGVuW2ldLmNsaWNrKCk7XG4gICAgICAgICAgICBjdXJyZW50LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICggdG9nZ2xlTXVsdGkgPT09IGZhbHNlICkge1xuICAgICAgICB0b2dnbGVCb3hCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpe1xuICAgICAgICAgIGlmICggdGhpcy5nZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnKSA9PSAnZmFsc2UnICkgeyBcbiAgICAgICAgICAgIGNsb3NlT3RoZXJzKHRvZ2dsZUJveFdyYXBwZXJbaV0sdGhpcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgI
24510H1cblxuICAgIC8vIEZ1bmt0aW9uZW4gZsO8ciBhbGxlIEVsZW1lbnRlXG4gICAgaWYgKHRvZ2dsZUJveC5sZW5ndGggPiAxKSB7XG5cbiAgICAgIGlmICggIXRvZ2dsZUJveFdyYXBwZXJbaV0uaGFzQXR0cmlidXRlKCdkYXRhLWNsb3NlLWFsbCcpICYmICF0b2dnbGVCb3hXcmFwcGVyW2ldLmhhc0F0dHJpYnV0ZSgnZGF0YS1vcGVuLWFsbCcpICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGJ1dHRvbldyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGJ1dHRvbldyYXBwZXIuc2V0QXR0cmlidXRlKCdjbGFzcycsJ2E1LXRvZ2dsZS1mdW5jdGlvbnMnKTtcbiAgICAgIHRvZ2dsZUJveFdyYXBwZXJbaV0uaW5zZXJ0QmVmb3JlKGJ1dHRvbldyYXBwZXIsdG9nZ2xlQm94V3JhcHBlcltpXS5maXJzdENoaWxkKTtcblxuICAgICAgaWYgKCB0b2dnbGVCb3hXcmFwcGVyW2ldLmhhc0F0dHJpYnV0ZSgnZGF0YS1vcGVuLWFsbCcpICkge1xuICAgICAgICBcbiAgICAgICAgbGV0IHRvZ2dsZU9wZW5BbGwgPSBjcmVhdGVFbGVtZW50KCc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcmlhLWNvbnRyb2xzPVwiJytpZExpc3QrJ1wiIGFyaWEtbGFiZWw9XCInICsgdG9nZ2xlQm94V3JhcHBlcltpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwnKSArICcgJyArIHRvZ2dsZUJveFdyYXBwZXJbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLW9wZW4tYWxsJykgKyAnXCI+Jyt0b2dnbGVCb3hXcmFwcGVyW2ldLmdldEF0dHJpYnV0ZSgnZGF0YS1vcGVuLWFsbCcpKyc8L2J1dHRvbj4nKTtcblxuICAgICAgICB0b2dnbGVPcGVuQWxsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICBsZXQgdG9nZ2xlQm94TGlzdCA9IHRvZ2dsZUJveFdyYXBwZXJbaV0ucXVlcnlTZWxlY3RvckFsbCgnLmE1LXRvZ2dsZS1ib3gtYnV0dG9uIGJ1dHRvblthcmlhLWV4cGFuZGVkPVwiZmFsc2VcIl0nKTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvZ2dsZUJveExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRvZ2dsZUJveExpc3RbaV0uY2xpY2soKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHRvZ2dsZUJ1dHRvbnMgPSBidXR0b25XcmFwcGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9nZ2xlQnV0dG9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMgIT0gdG9nZ2xlQnV0dG9uc1tpXSkge1xuICAgICAgICAgICAgICB0b2dnbGVCdXR0b25zW2ldLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0b2dnbGVCdXR0b25zW2ldLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywndHJ1ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYnV0dG9uV3JhcHBlci5hcHBlbmRDaGlsZCh0b2dnbGVPcGVuQWxsKTtcblxuICAgICAgfVxuXG4gICAgICBpZiAoIHRvZ2dsZUJveFdyYXBwZXJbaV0uaGFzQXR0cmlidXRlKCdkYXRhLWNsb3NlLWFsbCcpICkge1xuXG4gICAgICAgIGxldCB0b2dnbGVDbG9zZUFsbCA9IGNyZWF0ZUVsZW1lbnQoJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtY29udHJvbHM9XCInK2lkTGlzdCsnXCIgYXJpYS1sYWJlbD1cIicgKyB0b2dnbGVCb3hXcmFwcGVyW2ldLmdldEF0dHJpYnV0ZSgnZGF0YS1sYWJlbCcpICsgJyAnICsgdG9nZ2xlQm94V3JhcHBlcltpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY2xvc2UtYWxsJykgKyAnXCIgYXJpYS1wcmVzc2VkPVwidHJ1ZVwiPicrdG9nZ2xlQm94V3JhcHBlcltpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY2xvc2UtYWxsJykrJzwvYnV0dG9uPicpO1xuXG4gICAgICAgIHRvZ2dsZUNsb3NlQWxsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICBsZXQgdG9nZ2xlQm94TGlzdCA9IHRvZ2dsZUJveFdyYXBwZXJbaV0ucXVlcnlTZWxlY3RvckFsbCgnLmE1LXRvZ2dsZS1ib3gtYnV0dG9uIGJ1dHRvblthcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXScpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9nZ2xlQm94TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdG9nZ2xlQm94TGlzdFtpXS5jbGljaygpO1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgdG9nZ2xlQnV0dG9ucyA9IGJ1dHRvbldyYXBwZXIucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uJyk7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2dnbGVCdXR0b25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcyAhPSB0b2dnbGVCdXR0b25zW2ldKSB7XG4gICAgICAgICAgICAgIHRvZ2dsZUJ1dHRvbnNbaV0ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLXByZXNzZWQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRvZ2dsZUJ1dHRvbnNbaV0uc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCd0cnVlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBidXR0b25XcmFwcGVyLmFwcGVuZENoaWxkKHRvZ2dsZUNsb3NlQWxsKTtcblxuICAgICAgfVxuXG4gICAgfVxuXG4gIH1cblxufSk7IiwiLypcbiAgU1RJQ0tZQklUUyDwn5KJXG4gIC0tLS0tLS0tXG4gID4gYSBsaWdodHdlaWdodCBhbHRlcm5hdGl2ZSB0byBgcG9zaXRpb246IHN0aWNreWAgcG9seWZpbGxzIPCfjaxcbiAgLS0tLS0tLS1cbiAgLSBlYWNoIG1ldGhvZCBpcyBkb2N1bWVudGVkIGFib3ZlIGl0IG91ciB2aWV3IHRoZSByZWFkbWVcbiAgLSBTdGlja3liaXRzIGRvZXMgbm90IG1hbmFnZSBwb2x5bW9ycGhpYyBmdW5jdGlvbmFsaXR5IChwb3NpdGlvbiBsaWtlIHByb3BlcnRpZXMpXG4gICogcG9seW1vcnBoaWMgZnVuY3Rpb25hbGl0eTogKGluIHRoZSBjb250ZXh0IG9mIGRlc2NyaWJpbmcgU3RpY2t5Yml0cylcbiAgICBtZWFucyBtYWtpbmcgdGhpbmdzIGxpa2UgYHBvc2l0aW9uOiBzdGlja3lgIGJlIGxvb3NlbHkgc3VwcG9ydGVkIHdpdGggcG9zaXRpb24gZml4ZWQuXG4gICAgSXQgYWxzbyBtZWFucyB0aGF0IGZlYXR1cmVzIGxpa2UgYHVzZVN0aWNreUNsYXNzZXNgIHRha2VzIG9uIHN0eWxlcyBsaWtlIGBwb3NpdGlvbjogZml4ZWRgLlxuICAtLS0tLS0tLVxuICBkZWZhdWx0cyDwn5SMXG4gIC0tLS0tLS0tXG4gIC0gdmVyc2lvbiA9IGBwYWNrYWdlLmpzb25gIHZlcnNpb25cbiAgLSB1c2VyQWdlbnQgPSB2aWV3ZXIgYnJvd3NlciBhZ2VudFxuICAtIHRhcmdldCA9IERPTSBlbGVtZW50IHNlbGVjdG9yXG4gIC0gbm9TdHlsZXMgPSBib29sZWFuXG4gIC0gb2Zmc2V0ID0gbnVtYmVyXG4gIC0gcGFyZW50Q2xhc3MgPSAnc3RyaW5nJ1xuICAtIHNjcm9sbEVsID0gd2luZG93IHx8IERPTSBlbGVtZW50IHNlbGVjdG9yIHx8IERPTSBlbGVtZW50XG4gIC0gc3RpY2t5Q2xhc3MgPSAnc3RyaW5nJ1xuICAtIHN0dWNrQ2xhc3MgPSAnc3RyaW5nJ1xuICAtIHVzZVN0aWNreUNsYXNzZXMgPSBib29sZWFuXG4gIC0gdXNlRml4ZWQgPSBib29sZWFuXG4gIC0gdXNlR2V0Qm91bmRpbmdDbGllbnRSZWN0ID0gYm9vbGVhblxuICAtIHZlcnRpY2FsUG9zaXRpb24gPSAnc3RyaW5nJ1xuICAtIGFwcGx5U3R5bGUgPSBmdW5jdGlvblxuICAtLS0tLS0tLVxuICBwcm9wc/CflIxcbiAgLS0tLS0tLS1cbiAgLSBwID0gcHJvcHMge29iamVjdH1cbiAgLS0tLS0tLS1cbiAgaW5zdGFuY2Ugbm90ZVxuICAtLS0tLS0tLVxuICAtIHN0aWNreWJpdHMgcGFyZW50IG1ldGhvZHMgcmV0dXJuIHRoaXNcbiAgLSBzdGlja3liaXRzIGluc3RhbmNlIG1ldGhvZHMgcmV0dXJuIGFuIGluc3RhbmNlIGl0ZW1cbiAgLS0tLS0tLS1cbiAgbm9tZW5jbGF0dXJlXG4gIC0tLS0tLS0tXG4gIC0gdGFyZ2V0ID0+IGVsID0+IGVcbiAgLSBwcm9wcyA9PiBvIHx8IHBcbiAgLSBpbnN0YW5jZSA9PiBpdGVtID0+IGl0XG4gIC0tLS0tLS0tXG4gIG1ldGhvZHNcbiAgLS0tLS0tLS1cbiAgLSAuZGVmaW5lUG9zaXRpb24gPSBkZWZpbmVzIHN0aWNreSBvciBmaXhlZFxuICAtIC5hZGRJb
24510nN0YW5jZSA9IGFuIGFycmF5IG9mIG9iamVjdHMgZm9yIGVhY2ggU3RpY2t5Yml0cyBUYXJnZXRcbiAgLSAuZ2V0Q2xvc2VzdFBhcmVudCA9IGdldHMgdGhlIHBhcmVudCBmb3Igbm9uLXdpbmRvdyBzY3JvbGxcbiAgLSAuZ2V0VG9wUG9zaXRpb24gPSBnZXRzIHRoZSBlbGVtZW50IHRvcCBwaXhlbCBwb3NpdGlvbiBmcm9tIHRoZSB2aWV3cG9ydFxuICAtIC5jb21wdXRlU2Nyb2xsT2Zmc2V0cyA9IGNvbXB1dGVzIHNjcm9sbCBwb3NpdGlvblxuICAtIC50b2dnbGVDbGFzc2VzID0gb2xkZXIgYnJvd3NlciB0b2dnbGVyXG4gIC0gLm1hbmFnZVN0YXRlID0gbWFuYWdlcyBzdGlja3kgc3RhdGVcbiAgLSAucmVtb3ZlSW5zdGFuY2UgPSByZW1vdmVzIGFuIGluc3RhbmNlXG4gIC0gLmNsZWFudXAgPSByZW1vdmVzIGFsbCBTdGlja3liaXRzIGluc3RhbmNlcyBhbmQgY2xlYW5zIHVwIGRvbSBmcm9tIHN0aWNreWJpdHNcbiovXG5jbGFzcyBTdGlja3liaXRzIHtcbiAgY29uc3RydWN0b3IgKHRhcmdldCwgb2JqKSB7XG4gICAgY29uc3QgbyA9IHR5cGVvZiBvYmogIT09ICd1bmRlZmluZWQnID8gb2JqIDoge31cbiAgICB0aGlzLnZlcnNpb24gPSAnVkVSU0lPTidcbiAgICB0aGlzLnVzZXJBZ2VudCA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50IHx8ICdubyBgdXNlckFnZW50YCBwcm92aWRlZCBieSB0aGUgYnJvd3NlcidcbiAgICB0aGlzLnByb3BzID0ge1xuICAgICAgY3VzdG9tU3RpY2t5Q2hhbmdlTnVtYmVyOiBvLmN1c3RvbVN0aWNreUNoYW5nZU51bWJlciB8fCBudWxsLFxuICAgICAgbm9TdHlsZXM6IG8ubm9TdHlsZXMgfHwgZmFsc2UsXG4gICAgICBzdGlja3lCaXRTdGlja3lPZmZzZXQ6IG8uc3RpY2t5Qml0U3RpY2t5T2Zmc2V0IHx8IDAsXG4gICAgICBwYXJlbnRDbGFzczogby5wYXJlbnRDbGFzcyB8fCAnanMtc3RpY2t5Yml0LXBhcmVudCcsXG4gICAgICBzY3JvbGxFbDogdHlwZW9mIG8uc2Nyb2xsRWwgPT09ICdzdHJpbmcnID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvLnNjcm9sbEVsKSA6IG8uc2Nyb2xsRWwgfHwgd2luZG93LFxuICAgICAgc3RpY2t5Q2xhc3M6IG8uc3RpY2t5Q2xhc3MgfHwgJ2pzLWlzLXN0aWNreScsXG4gICAgICBzdHVja0NsYXNzOiBvLnN0dWNrQ2xhc3MgfHwgJ2pzLWlzLXN0dWNrJyxcbiAgICAgIHN0aWNreUNoYW5nZUNsYXNzOiBvLnN0aWNreUNoYW5nZUNsYXNzIHx8ICdqcy1pcy1zdGlja3ktLWNoYW5nZScsXG4gICAgICB1c2VTdGlja3lDbGFzc2VzOiBvLnVzZVN0aWNreUNsYXNzZXMgfHwgZmFsc2UsXG4gICAgICB1c2VGaXhlZDogby51c2VGaXhlZCB8fCBmYWxzZSxcbiAgICAgIHVzZUdldEJvdW5kaW5nQ2xpZW50UmVjdDogby51c2VHZXRCb3VuZGluZ0NsaWVudFJlY3QgfHwgZmFsc2UsXG4gICAgICB2ZXJ0aWNhbFBvc2l0aW9uOiBvLnZlcnRpY2FsUG9zaXRpb24gfHwgJ3RvcCcsXG4gICAgICBhcHBseVN0eWxlOiBvLmFwcGx5U3R5bGUgfHwgKChpdGVtLCBzdHlsZSkgPT4gdGhpcy5hcHBseVN0eWxlKGl0ZW0sIHN0eWxlKSksXG4gICAgfVxuICAgIC8qXG4gICAgICBkZWZpbmUgcG9zaXRpb25WYWwgYWZ0ZXIgdGhlIHNldHRpbmcgb2YgcHJvcHMsIGJlY2F1c2UgZGVmaW5lUG9zaXRpb24gbG9va3MgYXQgdGhlIHByb3BzLnVzZUZpeGVkXG4gICAgICAtLS0tXG4gICAgICAtICB1c2VzIGEgY29tcHV0ZWQgKGAuZGVmaW5lUG9zaXRpb24oKWApXG4gICAgICAtICBkZWZpbmVkIHRoZSBwb3NpdGlvblxuICAgICovXG4gICAgdGhpcy5wcm9wcy5wb3NpdGlvblZhbCA9IHRoaXMuZGVmaW5lUG9zaXRpb24oKSB8fCAnZml4ZWQnXG5cbiAgICB0aGlzLmluc3RhbmNlcyA9IFtdXG5cbiAgICBjb25zdCB7XG4gICAgICBwb3NpdGlvblZhbCxcbiAgICAgIHZlcnRpY2FsUG9zaXRpb24sXG4gICAgICBub1N0eWxlcyxcbiAgICAgIHN0aWNreUJpdFN0aWNreU9mZnNldCxcbiAgICB9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHZlcnRpY2FsUG9zaXRpb25TdHlsZSA9IHZlcnRpY2FsUG9zaXRpb24gPT09ICd0b3AnICYmICFub1N0eWxlcyA/IGAke3N0aWNreUJpdFN0aWNreU9mZnNldH1weGAgOiAnJ1xuICAgIGNvbnN0IHBvc2l0aW9uU3R5bGUgPSBwb3NpdGlvblZhbCAhPT0gJ2ZpeGVkJyA/IHBvc2l0aW9uVmFsIDogJydcblxuICAgIHRoaXMuZWxzID0gdHlwZW9mIHRhcmdldCA9PT0gJ3N0cmluZycgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHRhcmdldCkgOiB0YXJnZXRcblxuICAgIGlmICghKCdsZW5ndGgnIGluIHRoaXMuZWxzKSkgdGhpcy5lbHMgPSBbdGhpcy5lbHNdXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlbCA9IHRoaXMuZWxzW2ldXG5cbiAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMuYWRkSW5zdGFuY2UoZWwsIHRoaXMucHJvcHMpXG4gICAgICAvLyBzZXQgdmVydGljYWwgcG9zaXRpb25cbiAgICAgIHRoaXMucHJvcHMuYXBwbHlTdHlsZShcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgW3ZlcnRpY2FsUG9zaXRpb25dOiB2ZXJ0aWNhbFBvc2l0aW9uU3R5bGUsXG4gICAgICAgICAgICBwb3NpdGlvbjogcG9zaXRpb25TdHlsZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgICB9LFxuICAgICAgICBpbnN0YW5jZSxcbiAgICAgIClcbiAgICAgIHRoaXMubWFuYWdlU3RhdGUoaW5zdGFuY2UpXG5cbiAgICAgIC8vIGluc3RhbmNlcyBhcmUgYW4gYXJyYXkgb2Ygb2JqZWN0c1xuICAgICAgdGhpcy5pbnN0YW5jZXMucHVzaChpbnN0YW5jZSlcbiAgICB9XG4gIH1cblxuICAvKlxuICAgIHNldFN0aWNreVBvc2l0aW9uIOKclO+4j1xuICAgIC0tLS0tLS0tXG4gICAg4oCUICBtb3N0IGJhc2ljIHRoaW5nIHN0aWNreWJpdHMgZG9lc1xuICAgID0+IGNoZWNrcyB0byBzZWUgaWYgcG9zaXRpb24gc3RpY2t5IGlzIHN1cHBvcnRlZFxuICAgID0+IGRlZmluZWQgdGhlIHBvc2l0aW9uIHRvIGJlIHVzZWRcbiAgICA9PiBzdGlja3liaXRzIHdvcmtzIGFjY29yZGluZ2x5XG4gICovXG4gIGRlZmluZVBvc2l0aW9uICgpIHtcbiAgICBsZXQgc3RpY2t5UHJvcF
24510xuICAgIGlmICh0aGlzLnByb3BzLnVzZUZpeGVkKSB7XG4gICAgICBzdGlja3lQcm9wID0gJ2ZpeGVkJ1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwcmVmaXggPSBbJycsICctby0nLCAnLXdlYmtpdC0nLCAnLW1vei0nLCAnLW1zLSddXG4gICAgICBjb25zdCB0ZXN0ID0gZG9jdW1lbnQuaGVhZC5zdHlsZVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmVmaXgubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdGVzdC5wb3NpdGlvbiA9IGAke3ByZWZpeFtpXX1zdGlja3lgXG4gICAgICB9XG4gICAgICBzdGlja3lQcm9wID0gdGVzdC5wb3NpdGlvbiA/IHRlc3QucG9zaXRpb24gOiAnZml4ZWQnXG4gICAgICB0ZXN0LnBvc2l0aW9uID0gJydcbiAgICB9XG4gICAgcmV0dXJuIHN0aWNreVByb3BcbiAgfVxuXG4gIC8qXG4gICAgYWRkSW5zdGFuY2Ug4pyU77iPXG4gICAgLS0tLS0tLS1cbiAgICDigJQgbWFuYWdlcyBpbnN0YW5jZXMgb2YgaXRlbXNcbiAgICAtIHRha2VzIGluIGFuIGVsIGFuZCBwcm9wc1xuICAgIC0gcmV0dXJucyBhbiBpdGVtIG9iamVjdFxuICAgIC0tLVxuICAgIC0gdGFyZ2V0ID0gZWxcbiAgICAtIG8gPSB7b2JqZWN0fSA9IHByb3BzXG4gICAgICAtIHNjcm9sbEVsID0gJ3N0cmluZycgfCBvYmplY3RcbiAgICAgIC0gdmVydGljYWxQb3NpdGlvbiA9IG51bWJlclxuICAgICAgLSBvZmYgPSBib29sZWFuXG4gICAgICAtIHBhcmVudENsYXNzID0gJ3N0cmluZydcbiAgICAgIC0gc3RpY2t5Q2xhc3MgPSAnc3RyaW5nJ1xuICAgICAgLSBzdHVja0NsYXNzID0gJ3N0cmluZydcbiAgICAtLS1cbiAgICAtIGRlZmluZWQgbGF0ZXJcbiAgICAgIC0gcGFyZW50ID0gZG9tIGVsZW1lbnRcbiAgICAgIC0gc3RhdGUgPSAnc3RyaW5nJ1xuICAgICAgLSBvZmZzZXQgPSBudW1iZXJcbiAgICAgIC0gc3RpY2t5U3RhcnQgPSBudW1iZXJcbiAgICAgIC0gc3RpY2t5U3RvcCA9IG51bWJlclxuICAgIC0gcmV0dXJucyBhbiBpbnN0YW5jZSBvYmplY3RcbiAgKi9cbiAgYWRkSW5zdGFuY2UgKGVsLCBwcm9wcykge1xuICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICBlbCxcbiAgICAgIHBhcmVudDogZWwucGFyZW50Tm9kZSxcbiAgICAgIHByb3BzLFxuICAgIH1cbiAgICBpZiAocHJvcHMucG9zaXRpb25WYWwgPT09ICdmaXhlZCcgfHwgcHJvcHMudXNlU3RpY2t5Q2xhc3Nlcykge1xuICAgICAgdGhpcy5pc1dpbiA9IHRoaXMucHJvcHMuc2Nyb2xsRWwgPT09IHdpbmRvd1xuICAgICAgY29uc3Qgc2UgPSB0aGlzLmlzV2luID8gd2luZG93IDogdGhpcy5nZXRDbG9zZXN0UGFyZW50KGl0ZW0uZWwsIGl0ZW0ucHJvcHMuc2Nyb2xsRWwpXG4gICAgICB0aGlzLmNvbXB1dGVTY3JvbGxPZmZzZXRzKGl0ZW0pXG4gICAgICB0aGlzLnRvZ2dsZUNsYXNzZXMoaXRlbS5wYXJlbnQsICcnLCBwcm9wcy5wYXJlbnRDbGFzcylcbiAgICAgIGl0ZW0uc3RhdGUgPSAnZGVmYXVsdCdcbiAgICAgIGl0ZW0uc3RhdGVDaGFuZ2UgPSAnZGVmYXVsdCdcbiAgICAgIGl0ZW0uc3RhdGVDb250YWluZXIgPSAoKSA9PiB0aGlzLm1hbmFnZVN0YXRlKGl0ZW0pXG4gICAgICBzZS5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpdGVtLnN0YXRlQ29udGFpbmVyKVxuICAgIH1cbiAgICByZXR1cm4gaXRlbVxuICB9XG5cbiAgLypcbiAgICAtLS0tLS0tLVxuICAgIGdldFBhcmVudCDwn5Go4oCNXG4gICAgLS0tLS0tLS1cbiAgICAtIGEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgZ2V0cyB0aGUgdGFyZ2V0IGVsZW1lbnQncyBwYXJlbnQgc2VsZWN0ZWQgZWxcbiAgICAtIG9ubHkgdXNlZCBmb3Igbm9uIGB3aW5kb3dgIHNjcm9sbCBlbGVtZW50c1xuICAgIC0gc3VwcG9ydHMgb2xkZXIgYnJvd3NlcnNcbiAgKi9cbiAgZ2V0Q2xvc2VzdFBhcmVudCAoZWwsIG1hdGNoKSB7XG4gICAgLy8gcCA9IHBhcmVudCBlbGVtZW50XG4gICAgY29uc3QgcCA9IG1hdGNoXG4gICAgbGV0IGUgPSBlbFxuICAgIGlmIChlLnBhcmVudEVsZW1lbnQgPT09IHApIHJldHVybiBwXG4gICAgLy8gdHJhdmVyc2UgdXAgdGhlIGRvbSB0cmVlIHVudGlsIHdlIGdldCB0byB0aGUgcGFyZW50XG4gICAgd2hpbGUgKGUucGFyZW50RWxlbWVudCAhPT0gcCkgZSA9IGUucGFyZW50RWxlbWVudFxuICAgIC8vIHJldHVybiBwYXJlbnQgZWxlbWVudFxuICAgIHJldHVybiBwXG4gIH1cblxuICAvKlxuICAgIC0tLS0tLS0tXG4gICAgZ2V0VG9wUG9zaXRpb25cbiAgICAtLS0tLS0tLVxuICAgIC0gYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBnZXRzIHRoZSB0b3BQb3NpdGlvbiBvZiBhIFN0aWNreWJpdCBlbGVtZW50XG4gICAgLSBmcm9tIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIERPTVxuICAqL1xuICBnZXRUb3BQb3NpdGlvbiAoZWwpIHtcbiAgICBpZiAodGhpcy5wcm9wcy51c2VHZXRCb3VuZGluZ0NsaWVudFJlY3QpIHtcbiAgICAgIHJldHVybiBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyAodGhpcy5wcm9wcy5zY3JvbGxFbC5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKVxuICAgIH1cbiAgICBsZXQgdG9wUG9zaXRpb24gPSAwXG4gICAgZG8ge1xuICAgICAgdG9wUG9zaXRpb24gPSBlbC5vZmZzZXRUb3AgKyB0b3BQb3NpdGlvblxuICAgIH0gd2hpbGUgKChlbCA9IGVsLm9mZnNldFBhcmVudCkpXG4gICAgcmV0dXJuIHRvcFBvc2l0aW9uXG4gIH1cblxuICAvKlxuICAgIGNvbXB1dGVTY3JvbGxPZmZzZXRzIPCfk4pcbiAgICAtLS1cbiAgICBjb21wdXRlU2Nyb2xsT2Zmc2V0cyBmb3IgU3RpY2t5Yml0c1xuICAgIC0gZGVmaW5lc1xuICAgICAgLSBvZmZzZXRcbiAgICAgIC0gc3RhcnRcbiAgICAgIC0gc3RvcFxuICAqL1xuICBjb21wdXRlU2Nyb2xsT2Zmc2V0cyAoaXRlbSkge1xuICAgIGNvbnN0IGl0ID0gaXRlbVxuICAgIGNvbnN0IHAgPSBpdC5wcm9wc1xuICAgIGNvbnN0IGVsID0gaXQuZWxcbiAgICBjb25zdCBwYXJlbnQgPSBpdC5wYXJlbnRcbiAgICBjb25zdCBpc0N1c3RvbSA9ICF0aGlzLmlzV2luICYmIHAucG9zaXRpb25WYWwgPT09ICdmaXhlZCdcbiAgICBjb25zdCBpc1RvcCA9IHAudmVydGljYWxQb3NpdGlvbiAhPT0gJ2JvdHRvbSdcbiAgICBjb25zdCBzY3JvbGxFbE9mZnNldCA9IGlzQ3VzdG9tID8gdGhpcy5nZXRUb3BQb3NpdGlvbihwLnNjcm9sbEVsKSA6IDBcbiAgICBjb25zdCBzdGlja3lTdGFydCA9IGlzQ3VzdG9tXG4gICAgICA/IHRoaXMuZ2V0VG9wUG9zaXRpb24ocGFyZW50KSAtIHNjcm9sbEVsT2Zmc2V0XG4gICAgICA6IHRoaXMuZ2V0VG9wUG9zaXRpb24ocGFyZW50KVxuICAgIGNvbnN0IHN0aWNreUNoYW5nZU9mZnNldCA9IHAuY3VzdG9tU3RpY2t5Q2hhbmdlTnVtYmVyICE9PSBudWxsXG4gICAgICA/IHAuY3VzdG9tU3RpY2t5Q2hhbmdlTnVtYmVyXG4gICAgICA6IGVsLm9mZnNldEhlaWdodFxuICAgIGNvbnN0IHBhcmVudEJvdHRvbSA9IHN0aWNreVN0YXJ0ICsgcGFyZW50Lm9mZnNldEhlaWdodFxuICAgIGl0Lm9mZnNldCA9ICFpc0N1c3RvbSA/IHNjcm9sbEVsT2Zmc2V0ICsgcC5zdGlja3lCaXRTdGlja3lPZmZzZXQgOiAwXG4gICAgaXQuc3RpY2t5U3RhcnQgPSBpc1RvcCA/IHN0aWNreVN0YXJ0IC0gaXQub2Zmc2V0IDogMFxuICAgIGl0LnN0aWNreUNoYW5nZSA9IGl0LnN0aWNreVN0YXJ0ICsgc3RpY2t5Q2hhbmdlT2Zmc2V0XG4gICAgaXQuc3RpY2t5U3RvcCA9IGlzVG9wXG4gICAgICA/IHBhcmVudEJvdHRvbSAtIChlbC5vZmZzZXRIZWlnaHQgKyBpdC5vZmZzZXQpXG4gICAgICA6IHBhcmVudEJvdHRvbSAtIHdpbmRvdy5pbm5lckhlaWdodFxuICB9XG5cbiAgLypcbiAgICB0b2dnbGVDbGFzc2VzIOKalu+4j1xuICAgIC0tLVxuICAgIHRvZ2dsZXMgY2x
24510hc3NlcyAoZm9yIG9sZGVyIGJyb3dzZXIgc3VwcG9ydClcbiAgICByID0gcmVtb3ZlZCBjbGFzc1xuICAgIGEgPSBhZGRlZCBjbGFzc1xuICAqL1xuICB0b2dnbGVDbGFzc2VzIChlbCwgciwgYSkge1xuICAgIGNvbnN0IGUgPSBlbFxuICAgIGNvbnN0IGNBcnJheSA9IGUuY2xhc3NOYW1lLnNwbGl0KCcgJylcbiAgICBpZiAoYSAmJiBjQXJyYXkuaW5kZXhPZihhKSA9PT0gLTEpIGNBcnJheS5wdXNoKGEpXG4gICAgY29uc3Qgckl0ZW0gPSBjQXJyYXkuaW5kZXhPZihyKVxuICAgIGlmIChySXRlbSAhPT0gLTEpIGNBcnJheS5zcGxpY2Uockl0ZW0sIDEpXG4gICAgZS5jbGFzc05hbWUgPSBjQXJyYXkuam9pbignICcpXG4gIH1cblxuICAvKlxuICAgIG1hbmFnZVN0YXRlIPCfk51cbiAgICAtLS1cbiAgICAtIGRlZmluZXMgdGhlIHN0YXRlXG4gICAgICAtIG5vcm1hbFxuICAgICAgLSBzdGlja3lcbiAgICAgIC0gc3R1Y2tcbiAgKi9cbiAgbWFuYWdlU3RhdGUgKGl0ZW0pIHtcbiAgICAvLyBjYWNoZSBvYmplY3RcbiAgICBjb25zdCBpdCA9IGl0ZW1cbiAgICBjb25zdCBwID0gaXQucHJvcHNcbiAgICBjb25zdCBzdGF0ZSA9IGl0LnN0YXRlXG4gICAgY29uc3Qgc3RhdGVDaGFuZ2UgPSBpdC5zdGF0ZUNoYW5nZVxuICAgIGNvbnN0IHN0YXJ0ID0gaXQuc3RpY2t5U3RhcnRcbiAgICBjb25zdCBjaGFuZ2UgPSBpdC5zdGlja3lDaGFuZ2VcbiAgICBjb25zdCBzdG9wID0gaXQuc3RpY2t5U3RvcFxuICAgIC8vIGNhY2hlIHByb3BzXG4gICAgY29uc3QgcHYgPSBwLnBvc2l0aW9uVmFsXG4gICAgY29uc3Qgc2UgPSBwLnNjcm9sbEVsXG4gICAgY29uc3Qgc3RpY2t5ID0gcC5zdGlja3lDbGFzc1xuICAgIGNvbnN0IHN0aWNreUNoYW5nZSA9IHAuc3RpY2t5Q2hhbmdlQ2xhc3NcbiAgICBjb25zdCBzdHVjayA9IHAuc3R1Y2tDbGFzc1xuICAgIGNvbnN0IHZwID0gcC52ZXJ0aWNhbFBvc2l0aW9uXG4gICAgY29uc3QgaXNUb3AgPSB2cCAhPT0gJ2JvdHRvbSdcbiAgICBjb25zdCBhUyA9IHAuYXBwbHlTdHlsZVxuICAgIGNvbnN0IG5zID0gcC5ub1N0eWxlc1xuICAgIC8qXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICAgIC0tLVxuICAgICAgLSB1c2UgckFGXG4gICAgICAtIG9yIHN0dWIgckFGXG4gICAgKi9cbiAgICBjb25zdCByQUZTdHViID0gZnVuY3Rpb24gckFGRHVtbXkgKGYpIHsgZigpIH1cbiAgICBjb25zdCByQUYgPSAhdGhpcy5pc1dpblxuICAgICAgPyByQUZTdHViXG4gICAgICA6IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgIHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgIHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgICAgckFGU3R1YlxuXG4gICAgLypcbiAgICAgIGRlZmluZSBzY3JvbGwgdmFyc1xuICAgICAgLS0tXG4gICAgICAtIHNjcm9sbFxuICAgICAgLSBub3RTdGlja3lcbiAgICAgIC0gaXNTdGlja3lcbiAgICAgIC0gaXNTdHVja1xuICAgICovXG4gICAgY29uc3Qgc2Nyb2xsID0gdGhpcy5pc1dpbiA/ICh3aW5kb3cuc2Nyb2xsWSB8fCB3aW5kb3cucGFnZVlPZmZzZXQpIDogc2Uuc2Nyb2xsVG9wXG4gICAgY29uc3Qgbm90U3RpY2t5ID0gc2Nyb2xsID4gc3RhcnQgJiYgc2Nyb2xsIDwgc3RvcCAmJiAoc3RhdGUgPT09ICdkZWZhdWx0JyB8fCBzdGF0ZSA9PT0gJ3N0dWNrJylcbiAgICBjb25zdCBpc1N0aWNreSA9IGlzVG9wICYmIHNjcm9sbCA8PSBzdGFydCAmJiAoc3RhdGUgPT09ICdzdGlja3knIHx8IHN0YXRlID09PSAnc3R1Y2snKVxuICAgIGNvbnN0IGlzU3R1Y2sgPSBzY3JvbGwgPj0gc3RvcCAmJiBzdGF0ZSA9PT0gJ3N0aWNreSdcbiAgICAvKlxuICAgICAgVW5uYW1lZCBhcnJvdyBmdW5jdGlvbnMgd2l0aGluIHRoaXMgYmxvY2tcbiAgICAgIC0tLVxuICAgICAgLSBoZWxwIHdhbnRlZCBvciBkaXNjdXNzaW9uXG4gICAgICAtIHZpZXcgdGVzdC5zdGlja3liaXRzLmpzXG4gICAgICAgIC0gYHN0aWNreWJpdHMgLm1hbmFnZVN0YXRlICBgcG9zaXRpb246IGZpeGVkYCBpbnRlcmZhY2VgIGZvciBtb3JlIGF3YXJlbmVzcyDwn5GAXG4gICAgKi9cbiAgICBpZiAobm90U3RpY2t5KSB7XG4gICAgICBpdC5zdGF0ZSA9ICdzdGlja3knXG4gICAgfSBlbHNlIGlmIChpc1N0aWNreSkge1xuICAgICAgaXQuc3RhdGUgPSAnZGVmYXVsdCdcbiAgICB9IGVsc2UgaWYgKGlzU3R1Y2spIHtcbiAgICAgIGl0LnN0YXRlID0gJ3N0dWNrJ1xuICAgIH1cblxuICAgIGNvbnN0IGlzU3RpY2t5Q2hhbmdlID0gc2Nyb2xsID49IGNoYW5nZSAmJiBzY3JvbGwgPD0gc3RvcFxuICAgIGNvbnN0IGlzTm90U3RpY2t5Q2hhbmdlID0gc2Nyb2xsIDwgY2hhbmdlIC8gMiB8fCBzY3JvbGwgPiBzdG9wXG4gICAgaWYgKGlzTm90U3RpY2t5Q2hhbmdlKSB7XG4gICAgICBpdC5zdGF0ZUNoYW5nZSA9ICdkZWZhdWx0J1xuICAgIH0gZWxzZSBpZiAoaXNTdGlja3lDaGFuZ2UpIHtcbiAgICAgIGl0LnN0YXRlQ2hhbmdlID0gJ3N0aWNreSdcbiAgICB9XG5cbiAgICAvLyBPbmx5IGFwcGx5IG5ldyBzdHlsZXMgaWYgdGhlIHN0YXRlIGhhcyBjaGFuZ2VkXG4gICAgaWYgKHN0YXRlID09PSBpdC5zdGF0ZSAmJiBzdGF0ZUNoYW5nZSA9PT0gaXQuc3RhdGVDaGFuZ2UpIHJldHVyblxuICAgI
24510HJBRigoKSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZVN0eWxlcyA9IHtcbiAgICAgICAgc3RpY2t5OiB7XG4gICAgICAgICAgc3R5bGVzOiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogcHYsXG4gICAgICAgICAgICB0b3A6ICcnLFxuICAgICAgICAgICAgYm90dG9tOiAnJyxcbiAgICAgICAgICAgIFt2cF06IGAke3Auc3RpY2t5Qml0U3RpY2t5T2Zmc2V0fXB4YCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsYXNzZXM6IHsgW3N0aWNreV06IHRydWUgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgW3ZwXTogJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjbGFzc2VzOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgc3R1Y2s6IHtcbiAgICAgICAgICBzdHlsZXM6IHtcbiAgICAgICAgICAgIFt2cF06ICcnLFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBsZWF2ZSAhdGhpcy5pc1dpblxuICAgICAgICAgICAgICogQGV4YW1wbGUgaHR0cHM6Ly9jb2RlcGVuLmlvL3lvd2FpbndyaWdodC9wZW4vRVh6SmViXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIC4uLigocHYgPT09ICdmaXhlZCcgJiYgIW5zKSB8fCAhdGhpcy5pc1dpbiA/IHtcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgIHRvcDogJycsXG4gICAgICAgICAgICAgIGJvdHRvbTogJzAnLFxuICAgICAgICAgICAgfSA6IHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsYXNzZXM6IHsgW3N0dWNrXTogdHJ1ZSB9LFxuICAgICAgICB9LFxuICAgICAgfVxuXG4gICAgICBpZiAocHYgPT09ICdmaXhlZCcpIHtcbiAgICAgICAgc3RhdGVTdHlsZXMuZGVmYXVsdC5zdHlsZXMucG9zaXRpb24gPSAnJ1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdHlsZSA9IHN0YXRlU3R5bGVzW2l0LnN0YXRlXVxuICAgICAgc3R5bGUuY2xhc3NlcyA9IHtcbiAgICAgICAgW3N0dWNrXTogISFzdHlsZS5jbGFzc2VzW3N0dWNrXSxcbiAgICAgICAgW3N0aWNreV06ICEhc3R5bGUuY2xhc3Nlc1tzdGlja3ldLFxuICAgICAgICBbc3RpY2t5Q2hhbmdlXTogaXNTdGlja3lDaGFuZ2UsXG4gICAgICB9XG5cbiAgICAgIGFTKHN0eWxlLCBpdGVtKVxuICAgIH0pXG4gIH1cblxuICAvKlxuICAgIGFwcGx5U3R5bGVcbiAgICAtLS1cbiAgICAtIGFwcGx5IHRoZSBnaXZlbiBzdHlsZXMgYW5kIGNsYXNzZXMgdG8gdGhlIGVsZW1lbnRcbiAgKi9cbiAgYXBwbHlTdHlsZSAoeyBzdHlsZXMsIGNsYXNzZXMgfSwgaXRlbSkge1xuICAgIC8vIGNhY2hlIG9iamVjdFxuICAgIGNvbnN0IGl0ID0gaXRlbVxuICAgIGNvbnN0IGUgPSBpdC5lbFxuICAgIGNvbnN0IHAgPSBpdC5wcm9wc1xuICAgIGNvbnN0IHN0bCA9IGUuc3R5bGVcbiAgICAvLyBjYWNoZSBwcm9wc1xuICAgIGNvbnN0IG5zID0gcC5ub1N0eWxlc1xuXG4gICAgY29uc3QgY0FycmF5ID0gZS5jbGFzc05hbWUuc3BsaXQoJyAnKVxuICAgIC8vIERpc2FibGUgZHVlIHRvIGJ1ZyB3aXRoIG9sZCB2ZXJzaW9ucyBvZiBlc2xpbnQtc2NvcGUgYW5kIGZvciAuLi4gaW5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9pc3N1ZXMvMTIxMTdcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBmb3IgKGNvbnN0IGNscyBpbiBjbGFzc2VzKSB7XG4gICAgICBjb25zdCBhZGRDbGFzcyA9IGNsYXNzZXNbY2xzXVxuICAgICAgaWYgKGFkZENsYXNzKSB7XG4gICAgICAgIGlmIChjQXJyYXkuaW5kZXhPZihjbHMpID09PSAtMSkgY0FycmF5LnB1c2goY2xzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaWR4ID0gY0FycmF5LmluZGV4T2YoY2xzKVxuICAgICAgICBpZiAoaWR4ICE9PSAtMSkgY0FycmF5LnNwbGljZShpZHgsIDEpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZS5jbGFzc05hbWUgPSBjQXJyYXkuam9pbignICcpXG5cbiAgICBpZiAoc3R5bGVzWydwb3NpdGlvbiddKSB7XG4gICAgICBzdGxbJ3Bvc2l0aW9uJ10gPSBzdHlsZXNbJ3Bvc2l0aW9uJ11cbiAgICB9XG5cbiAgICBpZiAobnMpIHJldHVyblxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgZm9yIChjb25zdCBrZXkgaW4gc3R5bGVzKSB7XG4gICAgICBzdGxba2V5XSA9IHN0eWxlc1trZXldXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlICh1cGRhdGVkUHJvcHMgPSBudWxsKSB7XG4gICAgdGhpcy5pbnN0YW5jZXMuZm9yRWFjaCgoaW5zdGFuY2UpID0+IHtcbiAgICAgIHRoaXMuY29tcHV0ZVNjcm9sbE9mZnNldHMoaW5zdGFuY2UpXG4gICAgICBpZiAodXBkYXRlZFByb3BzKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgICBmb3IgKGNvbnN0IHVwZGF0ZWRQcm9wIGluIHVwZGF0ZWRQcm9wcykge1xuICAgICAgICAgIGluc3RhbmNlLnByb3BzW3VwZGF0ZWRQcm9wXSA9IHVwZGF0ZWRQcm9wc1t1cGRhdGVkUHJvcF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLypcbiAgICByZW1vdmVzIGFuIGluc3RhbmNlIPCfkYtcbiAgICAtLS0tLS0tLVxuICAgIC0gY2xlYW51cCBpbnN0YW5jZVxuICAqL1xuICByZW1vdmVJbnN0YW5jZSAoaW5zdGFuY2UpIHtcbiAgICBjb25zdCBlID0gaW5zdGFuY2UuZWxcbiAgICBjb25zdCBwID0gaW5zdGFuY2UucHJvcHNcblxuICAgIHRoaXMuYXBwbHlTdHlsZShcbiAgICAgIHtcbiAgICAgICAgc3R5bGVzOiB7IHBvc2l0aW9uOiAnJywgW3AudmVydGljYWxQb3NpdGlvbl06ICcnIH0sXG4gICAgICAgIGNsYXNzZXM6IHsgW3Auc3RpY2t5Q2xhc3NdOiAnJywgW3Auc3R1Y2tDbGFzc106ICcnIH0sXG4gICAgICB9LFxuICAgICAgaW5zdGFuY2UsXG4gICAgKVxuXG4gICAgdGhpcy50b2dnbGVDbGFzc2VzKGUucGFyZW50Tm9kZSwgcC5wYXJlbnRDbGFzcylcbiAgfVxuXG4gIC8qXG4gICAgY2xlYW51cCDwn5uBXG4gICAgLS0tLS0tLS1cbiAgICAtIGNsZWFucyB1cCBlYWNoIGluc3RhbmNlXG4gICAgLSBjbGVhcnMgaW5zdGFuY2VcbiAgKi9cbiAgY2xlYW51cCAoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmluc3RhbmNlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlc1tpXVxuICAgICAgaWYgKGluc3RhbmNlLnN0YXRlQ29udGFpbmVyKSB7XG4gICAgICAgIGluc3RhbmNlLnByb3BzLnNjcm9sbEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnN0YXRlQ29udGFpbmVyKVxuICAgICAgfVxuICAgICAgdGhpcy5yZW1vdmVJbnN0YW5jZShpbnN0YW5jZSlcbiAgICB9XG4gICAgdGhpcy5tYW5hZ2VTdGF0ZSA9IGZhbHNlXG4gICAgdGhpcy5pbnN0YW5jZXMgPSBbXVxuICB9XG59XG5cbi8qXG4gIGV4cG9ydFxuICAtLS0tLS0tLVxuICBleHBvcnRzIFN0aWNrQml0cyB0byBiZSB1c2VkIPCfj4FcbiovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGlja3liaXRzICh0YXJnZXQsIG8pIHtcbiAgcmV0dXJuIG5ldyBTdGlja3liaXRzKHRhcmdldCwgbylcbn1cbiIsImZ1bmN0aW9uIEhDVGVzdCgpIHtcbiAgdmFyIG9iakRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBvYmpEaXYuc3R5bGUuY29sb3IgPSAncmdiYSgyNDUsMjQwLDI1NSwwKSc7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob2JqRGl2KTtcbiAgdmFyIHN0ckNvbG9yID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcgPyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKG9iakRpdiwgbnVsbCkuY29sb3IgOiBvYmpEaXYuY3VycmVudFN0eWxlLmNvbG9yO1xuICBzdHJDb2xvciA9IHN0ckNvbG9yLnJlcGxhY2UoLyAvZywgJycpO1xuICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG9iakRpdik7XG4gIGlmIChzdHJDb2xvciAhPT0gJ3JnYmEoMjQ1LDI0MCwyNTUsMCknKSB7IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnaGNtLXRydWUnKTsgfVxufVxucmVhZHkoZnVuY3Rpb24oKSB7IEhDVGVzdCgpOyB9KTsiLCJcblxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGtvbXBsZXhlIExlYWZsZXQtS2FydGVcbndpbmRvdy5pbml0TGVhZmxldEV4dGVuZGVkI
24510D0gZnVuY3Rpb24gKHJvb3RDb250YWluZXIsYWN0aXZlID0gZmFsc2UpIHtcblxuICBpZiAodHlwZW9mKHJvb3RDb250YWluZXIpID09ICd1bmRlZmluZWQnIHx8IHJvb3RDb250YWluZXIgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBtYXBJRCA9ICdtYXAnICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwKTtcblxuICBsZXQgY2F0ZWdvcnlMaXN0Q29udGFpbmVyID0gcm9vdENvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcubWFwLXdpdGgtbWFya2VyLWNhdGVnb3JpZScpO1xuXG4gIGlmICghY2F0ZWdvcnlMaXN0Q29udGFpbmVyLmxlbmd0aCkge1xuXG4gICAgLy8gTGFiZWxzIHp3aXNjaGVuc3BlaWNoZXJuXG4gICAgbGV0IGxhYmVsTWFwID0gcm9vdENvbnRhaW5lci5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwtbWFwJyk7XG4gICAgbGV0IG1hcmtlclRpdGxlU3VmZml4ID0gcm9vdENvbnRhaW5lci5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWFya2VyLXRpdGxlLXN1ZmZpeCcpO1xuXG5cbiAgICAvL1xuICAgIC8vIFppZWxjb250YWluZXIgZsO8ciBLYXJ0ZSBlcnN0ZWxsZW4gdW5kIGltIERvbSBlaW5mw7xnZW5cbiAgICBsZXQgbWFwQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgbWFwQ29udGFpbmVyLmlkID0gJ21hcC1leHRlbmRlZCcgKyBtYXBJRDtcbiAgICBtYXBDb250YWluZXIuc2V0QXR0cmlidXRlKCdyb2xlJywnYXBwbGljYXRpb24nKTtcbiAgICBtYXBDb250YWluZXIuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJyxsYWJlbE1hcCk7XG5cbiAgICByb290Q29udGFpbmVyLmluc2VydEJlZm9yZShtYXBDb250YWluZXIsIHJvb3RDb250YWluZXIuZmlyc3RDaGlsZCk7XG5cblxuICAgIC8vXG4gICAgLy8gTGF5ZXIgdW5kIE1hcmtlciBlcnN0ZWxsZW5cbiAgICBsZXQgbDtcbiAgICBsZXQgbWFya2VycyA9IEwuZmVhdHVyZUdyb3VwKCk7XG4gICAgbGV0IG1hcmtlckl0ZW1zID0gcm9vdENvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdsaVtkYXRhLWxhdF0nKTtcblxuICAgIGlmICggbWFya2VySXRlbXMubGVuZ3RoID4gMCApIHtcblxuICAgICAgLy8gVGV4dGUgdW5kIERhdGVuIGF1c2xlc2VuXG4gICAgICBsZXQgbWFya2VySWNvb
24510iA9IHJvb3RDb250YWluZXIuZ2V0QXR0cmlidXRlKCdkYXRhLWljb24nKTtcbiAgICAgIGxldCBtYXJrZXJJY29uV2lkdGggPSByb290Q29udGFpbmVyLmdldEF0dHJpYnV0ZSgnZGF0YS1pY29uLXdpZHRoJyk7XG4gICAgICBsZXQgbWFya2VySWNvbkhlaWdodCA9IHJvb3RDb250YWluZXIuZ2V0QXR0cmlidXRlKCdkYXRhLWljb24taGVpZ2h0Jyk7XG5cbiAgICAgIC8vIEljb25cbiAgICAgIGxldCBpY29uID0gTC5pY29uKHtcbiAgICAgICAgaWNvblVybDogbWFya2VySWNvbixcbiAgICAgICAgaWNvblNpemU6IFttYXJrZXJJY29uV2lkdGgsIG1hcmtlckljb25IZWlnaHRdXG4gICAgICB9KTtcblxuICAgICAgbGV0IG07XG4gICAgICBmb3IgKG0gPSAwOyBtIDwgbWFya2VySXRlbXMubGVuZ3RoOyBtKyspIHtcblxuICAgICAgICBsZXQgbWFya2VyTG9uID0gbWFya2VySXRlbXNbbV0uZ2V0QXR0cmlidXRlKCdkYXRhLWxvbicpO1xuICAgICAgICBsZXQgbWFya2VyTGF0ID0gbWFya2VySXRlbXNbbV0uZ2V0QXR0cmlidXRlKCdkYXRhLWxhdCcpO1xuICAgICAgICBsZXQgbWFya2VyVGl0bGUgID0gbWFya2VySXRlbXNbbV0uZ2V0QXR0cmlidXRlKCdkYXRhLXRpdGxlJyk7XG5cbiAgICAgICAgbGV0IG1hcmtlck9iaiA9IEwubWFya2VyKFttYXJrZXJMYXQsIG1hcmtlckxvbl0se1xuICAgICAgICAgIGljb246IGljb24sXG4gICAgICAgICAgYWx0OiBtYXJrZXJUaXRsZSArICcgJyArIG1hcmtlclRpdGxlU3VmZml4XG4gICAgICAgIH0pLmJpbmRQb3B1cChtYXJrZXJJdGVtc1ttXS5pbm5lckhUTUwpLmFkZFRvKG1hcmtlcnMpO1xuICAgICAgICBtYXJrZXJPYmouYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgICB0aGlzLm9wZW5Qb3B1cCgpO1xuICAgICAgICB9KTtcblxuICAgICAgfVxuXG4gICAgfVxuXG5cblxuICAgIC8vXG4gICAgLy8gQ2FsbGJhY2stRnVua3Rpb25lblxuICAgIGxldCBtYXBPbkxvYWQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIFxuICAgICAgbGV0IHNraXBUb1N0YXJ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgc2tpcFRvU3RhcnQuaW5uZXJIVE1MID0gbGVhZmxldC5za2lwVG9TdGFydDtcbiAgICAgIHNraXBUb1N0YXJ0LmhyZWYgPSAnIycgKyBtYXBDb250YWluZXIuaWQ7XG4gICAgICBza2lwVG9TdGFydC5jbGFzc0xpc3QuYWRkKCdsZWFmbGV0LXNraXAtdG8tc3RhcnQnKTtcbiAgICAgIHJvb3RDb250YWluZXIuaW5zZXJ0QmVmb3JlKHNraXBUb1N0YXJ0LCBtYXBDb250YWluZXIubmV4dFNpYmxpbmcpO1xuXG4gICAgICBsZXQgc2tpcFRvRW5kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgc2tpcFRvRW5kLmlubmVySFRNTCA9IGxlYWZsZXQuc2tpcFRvRW5kO1xuICAgICAgc2tpcFRvRW5kLmhyZWYgPSAnIycgKyBtYXBDb250YWluZXIuaWQ7XG4gICAgICBza2lwVG9FbmQuY2xhc3NMaXN0LmFkZCgnbGVhZmxldC1za2lwLXRvLWVuZCcpO1xuICAgICAgcm9vdENvbnRhaW5lci5pbnNlcnRCZWZvcmUoc2tpcFRvRW5kLCBtYXBDb250YWluZXIpO1xuXG4gICAgICBza2lwVG9TdGFydC5vbmNsaWNrID0gZnVuY3Rpb24oZXZlbnQpIHsgZXZlbnQucHJldmVudERlZmF1bHQoKTsgc2tpcFRvRW5kLmZvY3VzKCk7IH07XG4gICAgICBza2lwVG9FbmQub25jbGljayA9IGZ1bmN0aW9uKGV2ZW50KSB7IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHNraXBUb1N0YXJ0LmZvY3VzKCk7IH07XG5cbiAgICB9XG5cblxuICAgIC8vIGRpdmVyc2UgS2FydGVuIGFscyDDnGJlcnNpY2h0OiBodHRwczovL2xlYWZsZXQtZXh0cmFzLmdpdGh1Yi5pby9sZWFmbGV0LXByb3ZpZGVycy9wcmV2aWV3L1xuICAgIGxldCBiYXNlTGF5ZXIgPSBMLnRpbGVMYXllcignaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLmRlL3RpbGVzL29zbWRlL3t6fS97eH0ve3l9LnBuZycsIHthdHRyaWJ1dGlvbjogJyZjb3B5OyA8YSBocmVmPVwiaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCI+T3BlblN0cmVldE1hcDwvYT4gY29udHJpYnV0b3JzJ30pO1xuXG4gICAgbGV0IG1hcCA9IEwubWFwKCdtYXAtZXh0ZW5kZWQnICsgbWFwSUQsIHtcbiAgICAgIGxheWVyczogW2Jhc2VMYXllciwgbWFya2Vyc10sXG4gICAgICBjZW50ZXI6IG1hcmtlcnMuZ2V0Qm91bmRzKCkuZ2V0Q2VudGVyKCksXG4gICAgICB6b29tQ29udHJvbDogZmFsc2UsXG4gICAgICBzY3JvbGxXaGVlbFpvb206IGZhbHNlLFxuICAgICAgc2xlZXA6IHRydWUsXG4gICAgICBzbGVlcE9wYWNpdHk6IC42LFxuICAgICAgc2xlZXBOb3RlU3R5bGU6IHtcbiAgICAgICAgbWF4V2lkdGg6ICcxMHJlbScsXG4gICAgICAgIG9wYWNpdHk6IDFcbiAgICAgIH0sXG4gICAgICB3YWtlTWVzc2FnZTogbGVhZmxldC53YWtlTWVzc2FnZSxcbiAgICAgIHdha2VNZXNzYWdlVG91Y2g6IGxlYWZsZXQud2FrZU1lc3NhZ2VUb3VjaFxuICAgIH0pXG5cbiAgICBtYXAub24oJ2xvYWQnLG1hcE9uTG9hZCk7XG5cbiAgICBMLmNvbnRyb2wuem9vbSh7XG4gICAgICB6b29tSW5UaXRsZTogbGVhZmxldC56b29tSW5UaXRsZSxcbiAgICAgIHpvb21PdXRUaXRsZTogbGVhZmxldC56b29tT3V0VGl0bGVcbiAgICB9KS5hZGRUbyhtYXApO1xuXG4gICAgbWFwLmZpdEJvdW5kcyhtYXJrZXJzLmdldEJvdW5kcygpLnBhZCguMSkpO1xuXG4gICAgLy9cbiAgICAvLyBCYXJyaWVyZWZyZWloZWl0XG4gICAgYmFzZUxheWVyLm9uKCd0aWxlbG9hZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBldmVudC50aWxlLnJlbW92ZUF0dHJpYnV0ZSgncm9sZScpO1xuICAgIH0pO1xuICAgIFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sZWFmbGV0LXNoYWRvdy1wYW5lJykucmVtb3ZlKCk7XG5cbiAgICAvLyBhcmlhLWxhYmVsIGFtIFNjaGxpZcOfZW4tQnV0dG9uIGVyZ8OkbnplblxuICAgIC8vIGZvY3VzIGF1ZiBkYXMgRmVuc3RlciBsZWdlblxuICAgIG1hcC5vbigncG9wdXBvcGVuJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgICAgZXZlbnQucG9wdXAuX2Nsb3NlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsbGVhZmxldC5jbG9zZVBvcHVwTGFiZWwpO1xuICAgICAgbGV0IGNsaWNrZWRNYXJrZXIgPSBldmVudC5wb3B1cC
245105fc291cmNlLl9pY29uO1xuICAgICAgZXZlbnQucG9wdXAuX2Nsb3NlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbihldmVudCl7XG4gICAgICAgIGNsaWNrZWRNYXJrZXIuZm9jdXMoKTtcbiAgICAgIH0se29uY2U6dHJ1ZX0pO1xuXG4gICAgICBldmVudC5wb3B1cC5fd3JhcHBlci5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywnMCcpO1xuICAgICAgZXZlbnQucG9wdXAuX3dyYXBwZXIuZm9jdXMoKTtcblxuICAgIH0pO1xuXG4gICAgLy8gQXJpYS1Sb2xlIGbDvHIgZGllIE1hcmtlclxuICAgIC8vIFRleHQgenVtIEJlaGViZW4gdm9uIEZlaGxlcm4gaW4gTlZEQVxuICAgIGxldCBtYXJrZXIgPSBtYXBDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmxlYWZsZXQtbWFya2VyLWljb24ubGVhZmxldC1pbnRlcmFjdGl2ZScpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFya2VyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXJrZXJbaV0uc2V0QXR0cmlidXRlKCdyb2xlJywnYnV0dG9uJyk7XG4gICAgfVxuXG4gIH1cblxufVxuXG5cbiIsIlxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gZWluZmFjaGUgTGVhZmxldC1LYXJ0ZVxud2luZG93LmluaXRMZWFmbGV0ID0gZnVuY3Rpb24gKHJvb3RDb250YWluZXIsYWN0aXZlID0gZmFsc2UpIHtcblxuICBpZiAodHlwZW9mKHJvb3RDb250YWluZXIpID09ICd1bmRlZmluZWQnIHx8IHJvb3RDb250YWluZXIgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBtYXBJRCA9ICdtYXAnICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwKTtcblxuICAvLyBMYWJlbHMgendpc2NoZW5zcGVpY2hlcm5cbiAgbGV0IGxhYmVsTWFwID0gcm9vdENvbnRhaW5lci5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwtbWFwJyk7XG4gIGxldCBtYXJrZXJUaXRsZVN1ZmZpeCA9IHJvb3RDb250YWluZXIuZ2V0QXR0cmlidXRlKCdkYXRhLW1hcmtlci10aXRsZS1zdWZmaXgnKTtcblxuICAvL1xuICAvLyBaaWVsY29udGFpbmVyIGbDvHIgS2FydGUgZXJzdGVsbGVuIHVuZCBpbSBEb20gZWluZsO8Z2VuXG4gIGxldCBtYXBDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbWFwQ29udGFpbmVyLmlkID0gJ21hcCcgKyBtYXBJRDtcbiAgbWFwQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgncm9sZScsJ2FwcGxpY2F0aW9uJyk7XG4gIG1hcENvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLGxhYmVsTWFwKTtcblxuICByb290Q29udGFpbmVyLmluc2VydEJlZm9yZShtYXBDb250YWluZXIsIHJvb3RDb250YWluZXIuZmlyc3RDaGlsZCk7XG5cblxuICAvL1xuICAvLyBMYXllciB1bmQgTWFya2VyIGVyc3RlbGxlblxuICBsZXQgbWFya2VySXRlbXMgPSByb290Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5hNS1tYXAtbWFya2VyJyk7XG4gIGxldCBsYXllcjtcblxuICBpZiAoIG1hcmtlckl0ZW1zLmxlbmd0aCA+IDAgKSB7XG5cbiAgICAvLyBMYXllciBlcnN0ZWxsZW5cbiAgICBsYXllciA9IEwubGF5ZXJHcm91cCgpO1xuXG4gICAgbGV0IG07XG4gICAgZm9yIChtID0gMDsgbSA8IG1hcmtlckl0ZW1zLmxlbmd0aDsgbSsrKSB7XG5cbiAgICAgIGxldCBtYXJrZXJMb24gPSBtYXJrZXJJdGVtc1ttXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbG9uJyk7XG4gICAgICBsZXQgbWFya2VyTGF0ID0gbWFya2VySXRlbXNbbV0uZ2V0QXR0cmlidXRlKCdkYXRhLWxhdCcpO1xuICAgICAgbGV0IG1hcmtlclRpdGxlICA9IG1hcmtlckl0ZW1zW21dLmdldEF0dHJpYnV0ZSgnZGF0YS10aXRsZScpO1xuICAgICAgbGV0IG1hcmtlckljb24gPSBtYXJrZXJJdGVtc1ttXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWNvbicpO1xuICAgICAgbGV0IG1hcmtlckljb25XaWR0aCA9IG1hcmtlckl0ZW1zW21dLmdldEF0dHJpYnV0ZSgnZGF0YS1pY29uLXdpZHRoJyk7XG4gICAgICBsZXQgbWFya2VySWNvbkhlaWdodCA9IG1hcmtlckl0ZW1zW21dLmdldEF0dHJpYnV0ZSgnZGF0YS1pY29uLWhlaWdodCcpO1xuXG4gICAgICAvLyBRdWVsbGVsZW1lbnQgYXVzYmxlbmRlblxuICAgICAgbWFya2VySXRlbXNbbV0uc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsJ3RydWUnKTtcblxuICAgICAgLy8gSWNvblxuICAgICAgbGV0IGljb24gPSBMLmljb24oe1xuICAgICAgICBpY29uVXJsOiBtYXJrZXJJY29uLFxuICAgICAgICBpY29uU2l6ZTogW21hcmtlckljb25XaWR0aCwgbWFya2VySWNvbkhlaWdodF0sXG4gICAgICAgIGNsYXNzTmFtZTogJ21hcmtlci0nICsgbVxuICAgICAgfSk7XG5cbiAgICAgIGxldCBtYXJrZXJPYmogPSBMLm1hcmtlcihbbWFya2VyTGF0LCBtYXJrZXJMb25dLHtcbiAgICAgICAgaWNvbjogaWNvbixcbiAgICAgICAgYWx0OiBtYXJrZXJUaXRsZSArICcgJyArIG1hcmtlclRpdGxlU3VmZml4XG4gICAgICB9KS5iaW5kUG9wdXAobWFya2VySXRlbXNbbV0uaW5uZXJIVE1MKS5hZGRUbyhsYXllcilcbiAgICAgIG1hcmtlck9iai5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICB0aGlzLm9wZW5Qb3B1cCgpO1xuICAgICAgfSk7XG5cbiAgICB9XG5cbiAgfVxuXG5cbiAgLy9cbiAgLy8gS2FydGUgZXJzdGVsbGVuXG4gIGxldCBpbml0TGF0ID0gcm9vdENvbnRhaW5lci5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5pdC1sYXQnKTtcbiAgbGV0IGluaXRMb24gPSByb290Q29udGFpbmVyLmdldEF0dHJpYnV0ZSgnZGF0YS1pbml0LWxvbicpO1xuICBsZXQgaW5pdFpvb20gPSByb290Q29udGFpbmVyLmdldEF0dHJpYnV0ZSgnZGF0YS1pbml0LXpvb20nKTtcblxuICBsZXQgYmFzZUxheWVyID0gTC50aWxlTGF5ZXIoJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywge2F0dHJpYnV0aW9uOiAnJmNvcHk7IDxhIGhyZWY9XCJodHRwczovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIj5PcGVuU3RyZWV0TWFwPC9hPiBjb250cmlidXRvcnMnfSk7XG5cbiAgbGV0IG1hcCA9IEwubWFwKCdtYXAnICsgbWFwSUQsIHtcbiAgICBsYXllcnM6IFtiYXNlTGF5ZXIsIGxheWVyXSxcbiAgICB6b29tQ29udHJvbDogZmFsc2UsXG4gICAgc2Nyb2xsV2hlZWxab29tOiBmYWxzZSxcbiAgICBzbGVlcDogdHJ1ZSxcbiAgICBzbGVlcE9wYWNpdHk6IC45LFxuICAgIHNsZWVwTm90ZVN0eWxlOiB7XG4gICAgICBtYXhXaWR0aDogJzEwcmVtJyxcbiAgICAgIG9wYWNpdHk6IDFcbiAgICB9LFxuICAgIHdha2VNZXNzYWdlOiBsZWFmbGV0Lndha2VNZXNzYWdlLF
24510xuICAgIHdha2VNZXNzYWdlVG91Y2g6IGxlYWZsZXQud2FrZU1lc3NhZ2VUb3VjaFxuICB9KVxuXG4gIEwuY29udHJvbC5mdWxsc2NyZWVuKHtcbiAgICBwb3NpdGlvbjogJ3RvcGxlZnQnLFxuICAgIHRpdGxlOiBsZWFmbGV0LmZ1bGxTY3JlZW5UaXRsZSxcbiAgICB0aXRsZUNhbmNlbDogbGVhZmxldC5mdWxsU2NyZWVuVGl0bGVDYW5jZWxcbiAgfSkuYWRkVG8obWFwKTtcblxuICBtYXAub24oJ2VudGVyRnVsbHNjcmVlbicsIGZ1bmN0aW9uKGV2ZW50KXtcbiAgICBtYXBDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbGVhZmxldC1mdWxsc2NyZWVuJyk7XG4gIH0pO1xuXG4gIG1hcC5vbignZXhpdEZ1bGxzY3JlZW4nLCBmdW5jdGlvbihldmVudCl7XG4gICAgbWFwQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2xlYWZsZXQtZnVsbHNjcmVlbicpO1xuICB9KTtcblxuICBMLmNvbnRyb2wuem9vbSh7XG4gICAgem9vbUluVGl0bGU6IGxlYWZsZXQuem9vbUluVGl0bGUsXG4gICAgem9vbU91dFRpdGxlOiBsZWFmbGV0Lnpvb21PdXRUaXRsZVxuICB9KS5hZGRUbyhtYXApO1xuXG4gIC8vXG4gIC8vIEJhcnJpZXJlZnJlaWhlaXRcbiAgYmFzZUxheWVyLm9uKCd0aWxlbG9hZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgZXZlbnQudGlsZS5yZW1vdmVBdHRyaWJ1dGUoJ3JvbGUnKTtcbiAgfSk7XG5cbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxlYWZsZXQtc2hhZG93LXBhbmUnKS5yZW1vdmUoKTtcblxuICBtYXAub24oJ3BvcHVwb3BlbicsZnVuY3Rpb24oZXZlbnQpIHsgXG5cbiAgICBldmVudC5wb3B1cC5fY2xvc2VCdXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJyxsZWFmbGV0LmNsb3NlUG9wdXBMYWJlbCk7XG4gICAgbGV0IGNsaWNrZWRNYXJrZXIgPSBldmVudC5wb3B1cC5fc291cmNlLl9pY29uO1xuICAgIGV2ZW50LnBvcHVwLl9jbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgY2xpY2tlZE1hcmtlci5mb2N1cygpO1xuICAgIH0se29uY2U6dHJ1ZX0pO1xuXG4gICAgZXZlbnQucG9wdXAuX3dyYXBwZXIuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsJzAnKTtcbiAgICBldmVudC5wb3B1cC5fd3JhcHBlci5mb2N1cygpO1xuXG4gIH0pO1xuXG4gIC8vIG5hY2ggZGllc2VyIEFud2Vpc3VuZyB3aXJkIGRlciBMb2FkLUV2ZW50IGF1c2dlZsO8aHJ0XG4gIG1hcC5zZXRWaWV3KFtpbml0TGF0LGluaXRMb25dLCBpbml0Wm9vbSk7XG5cbiAgLy8gVmlld3BvcnQgbmV1IHNldHp0ZW4sIGZhbGxzIGRpZSBLYXJ0ZSBpbiBlaW5lbSBkZXRhaWxzLUVsZW1lbnQgbGllZ3QgdW5kIGRpZXNlcyBnZcO2ZmZuZXQgd2lyZFxuICBpZiAoIHJvb3RDb250YWluZXIuY2xvc2VzdCgnZGV0YWlscycpICkge1xuICAgIHZhciBkZXRhaWxzQ29udGFpbmVyID0gcm9vdENvbnRhaW5lci5jbG9zZXN0KCdkZXRhaWxzJyk7XG4gICAgZGV0YWlsc0NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCd0b2dnbGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgaWYgKGRldGFpbHNDb250YWluZXIuaGFzQXR0cmlidXRlKCdvcGVuJykpIHtcbiAgICAgICAgbWFwLmludmFsaWRhdGVTaXplKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBBcmlhLVJvbGUgZsO8ciBkaWUgTWFya2VyXG4gIC8vIFRleHQgenVtIEJlaGViZW4gdm9uIEZlaGxlcm4gaW4gTlZEQVxuICBsZXQgbWFya2VyID0gbWFwQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5sZWFmbGV0LW1hcmtlci1pY29uLmxlYWZsZXQtaW50ZXJhY3RpdmUnKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXJrZXIubGVuZ3RoOyBpKyspIHtcbiAgICBtYXJrZXJbaV0uc2V0QXR0cmlidXRlKCdyb2xlJywnYnV0dG9uJyk7XG4gIH1cblxuICBpZiAoIGFjdGl2ZSA9PSB0cnVlICkge1xuICAgIG1hcENvbnRhaW5lci5mb2N1cygpO1xuICB9XG5cbn1cblxuXG4iLCIoZnVuY3Rpb24od2luZG93LCBmYWN0b3J5KSB7XG5cdHZhciBsYXp5U2l6ZXMgPSBmYWN0b3J5KHdpbmRvdywgd2luZG93LmRvY3VtZW50LCBEYXRlKTtcblx0d2luZG93LmxhenlTaXplcyA9IGxhenlTaXplcztcblx0aWYodHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cyl7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBsYXp5U2l6ZXM7XG5cdH1cbn0odHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyA/XG4gICAgICB3aW5kb3cgOiB7fSwgXG4vKipcbiAqIGltcG9ydChcIi4vdHlwZXMvZ2xvYmFsXCIpXG4gKiBAdHlwZWRlZiB7IGltcG9ydChcIi4vdHlwZXMvbGF6eXNpemVzLWNvbmZpZ1wiKS5MYXp5U2l6ZXNDb25maWdQYXJ0aWFsIH0gTGF6eVNpemVzQ29uZmlnUGFydGlhbFxuICovXG5mdW5jdGlvbiBsKHdpbmRvdywgZG9jdW1lbnQsIERhdGUpIHsgLy8gUGFzcyBpbiB0aGUgd2luZG93IERhdGUgZnVuY3Rpb24gYWxzbyBmb3IgU1NSIGJlY2F1c2UgdGhlIERhdGUgY2xhc3MgY2FuIGJlIGxvc3Rcblx0J3VzZSBzdHJpY3QnO1xuXHQvKmpzaGludCBlcW51bGw6dHJ1ZSAqL1xuXG5cdHZhciBsYXp5c2l6ZXMsXG5cdFx0LyoqXG5cdFx0ICogQHR5cGUgeyBMYXp5U2l6ZXNDb25maWdQYXJ0aWFsIH1cblx0XHQgKi9cblx0XHRsYXp5U2l6ZXNDZmc7XG5cblx0KGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHByb3A7XG5cblx0XHR2YXIgbGF6eVNpemVzRGVmYXVsdHMgPSB7XG5cdFx0XHRsYXp5Q2xhc3M6ICdsYXp5bG9hZCcsXG5cdFx0XHRsb2FkZWRDbGFzczogJ2xhenlsb2FkZWQnLFxuXHRcdFx0bG9hZGluZ0NsYXNzOiAnbGF6eWxvYWRpbmcnLFxuXHRcdFx0cHJlbG9hZENsYXNzOiAnbGF6eXByZWxvYWQnLFxuXHRcdFx0ZXJyb3JDbGFzczogJ2xhenllcnJvcicsXG5cdFx0XHQvL3N0cmljdENsYXNzOiAnbGF6eXN0cmljdCcsXG5cdFx0XHRhdXRvc2l6ZXNDbGFzczogJ2xhenlhdXRvc2l6ZXMnLFxuXHRcdFx0ZmFzdExvYWRlZENsYXNzOiAnbHMtaXMtY2FjaGVkJyxcblx0XHRcdGlmcmFtZUxvYWRNb2RlOiAwLFxuXHRcdFx0c3JjQXR0cjogJ2RhdGEtc3JjJyxcblx0XHRcdHNyY3NldEF0dHI6ICdkYXRhLXNyY3NldCcsXG5cdFx0XHRzaXplc0F0dHI6ICdkYXRhLXNpemVzJyxcblx0XHRcdC8vcHJlbG9hZEFmdGVyTG9hZDogZmFsc2UsXG5cdFx0XHRtaW5TaXplOiA0MCxcblx0XHRcdGN1c3RvbU1lZGlhOiB7fSxcblx0XHRcdGluaXQ6IHRydWUsXG5cdFx0XHRleHBGYWN0b3I6IDEuNSxcblx0XHRcdGhGYWM6IDAuOCxcblx0XHRcdGxvYWRNb2RlOiAyLFxuXHRcdFx0bG9hZEhpZGRlbjogdHJ1ZSxcblx0XHRcdHJpY1RpbWVvdXQ6IDAsXG5cdFx0XHR0aHJvdHRsZURlbGF5OiAxMjUsXG5cdFx0fTtcblxuXHRcdGxhenlTaXplc0NmZyA9IHdpbmRvdy5sYXp5U2l6ZXNDb25maWcgfHwgd2luZG93LmxhenlzaXplc0NvbmZpZyB8fCB7fTtcblxuXHRcdGZvcihwcm9wIGluIGxhenlTaXplc0RlZmF1bHRzKXtcblx0XHRcdGlmKCEocHJvcCBpbiBsYXp5U2l6ZXNDZmcpKXtcblx0XHRcdFx0bGF6eVNpemVzQ2ZnW3Byb3BdID0gbGF6eVNpemVzRGVmYXVsdHNbcHJvcF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9KSgpO1xuXG5cdGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aW5pdDogZnVuY3Rpb24gKCkge30sXG5cdFx0XHQvKipcblx0XHRcdCAqIEB0eXBlIHsgTGF6eVNpemVzQ29uZmlnUGFydGlhbCB9XG5cdFx0XHQgKi9cblx0XHRcdGNmZzogbGF6eVNpemVzQ2ZnLFxuXHRcdFx0LyoqXG5cdFx0XHQgKiBAdHlwZSB7IHRydWUgfVxuXHRcdFx0ICovXG5cdFx0XHRub1N1cHBvcnQ6IHRydWUsXG5cdFx0fTtcblx0fVxuXG5cdHZhciBkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG5cdHZhciBzdXBwb3J0UGljdHVyZSA9IHdpbmRvdy5IVE1MUGljdHVyZUVsZW1lbnQ7XG5cblx0dmFyIF9hZGRFdmVudExpc3RlbmVyID0gJ2FkZEV2ZW50TGlzdGVuZXInO1xuXG5cdHZhciBfZ2V0QXR0cmlidXRlID0gJ2dldEF0dHJpYnV0ZSc7XG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0byBiaW5kIHRvIHdpbmRvdyBiZWNhdXNlICd0aGlzJy
24510BiZWNvbWVzIG51bGwgZHVyaW5nIFNTUlxuXHQgKiBidWlsZHMuXG5cdCAqL1xuXHR2YXIgYWRkRXZlbnRMaXN0ZW5lciA9IHdpbmRvd1tfYWRkRXZlbnRMaXN0ZW5lcl0uYmluZCh3aW5kb3cpO1xuXG5cdHZhciBzZXRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQ7XG5cblx0dmFyIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgc2V0VGltZW91dDtcblxuXHR2YXIgcmVxdWVzdElkbGVDYWxsYmFjayA9IHdpbmRvdy5yZXF1ZXN0SWRsZUNhbGxiYWNrO1xuXG5cdHZhciByZWdQaWN0dXJlID0gL15waWN0dXJlJC9pO1xuXG5cdHZhciBsb2FkRXZlbnRzID0gWydsb2FkJywgJ2Vycm9yJywgJ2xhenlpbmNsdWRlZCcsICdfbGF6eWxvYWRlZCddO1xuXG5cdHZhciByZWdDbGFzc0NhY2hlID0ge307XG5cblx0dmFyIGZvckVhY2ggPSBBcnJheS5wcm90b3R5cGUuZm9yRWFjaDtcblxuXHQvKipcblx0ICogQHBhcmFtIGVsZSB7RWxlbWVudH1cblx0ICogQHBhcmFtIGNscyB7c3RyaW5nfVxuXHQgKi9cblx0dmFyIGhhc0NsYXNzID0gZnVuY3Rpb24oZWxlLCBjbHMpIHtcblx0XHRpZighcmVnQ2xhc3NDYWNoZVtjbHNdKXtcblx0XHRcdHJlZ0NsYXNzQ2FjaGVbY2xzXSA9IG5ldyBSZWdFeHAoJyhcXFxcc3xeKScrY2xzKycoXFxcXHN8JCknKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlZ0NsYXNzQ2FjaGVbY2xzXS50ZXN0KGVsZVtfZ2V0QXR0cmlidXRlXSgnY2xhc3MnKSB8fCAnJykgJiYgcmVnQ2xhc3NDYWNoZVtjbHNdO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0gZWxlIHtFbGVtZW50fVxuXHQgKiBAcGFyYW0gY2xzIHtzdHJpbmd9XG5cdCAqL1xuXHR2YXIgYWRkQ2xhc3MgPSBmdW5jdGlvbihlbGUsIGNscykge1xuXHRcdGlmICghaGFzQ2xhc3MoZWxlLCBjbHMpKXtcblx0XHRcdGVsZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgKGVsZVtfZ2V0QXR0cmlidXRlXSgnY2xhc3MnKSB8fCAnJykudHJpbSgpICsgJyAnICsgY2xzKTtcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSBlbGUge0VsZW1lbnR9XG5cdCAqIEBwYXJhbSBjbHMge3N0cmluZ31cblx0ICovXG5cdHZhciByZW1vdmVDbGFzcyA9IGZ1bmN0aW9uKGVsZSwgY2xzKSB7XG5cdFx0dmFyIHJlZztcblx0XHRpZiAoKHJlZyA9IGhhc0NsYXNzKGVsZSxjbHMpKSkge1xuXHRcdFx0ZWxlLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAoZWxlW19nZXRBdHRyaWJ1dGVdKCdjbGFzcycpIHx8ICcnKS5yZXBsYWNlKHJlZywgJyAnKSk7XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBhZGRSZW1vdmVMb2FkRXZlbnRzID0gZnVuY3Rpb24oZG9tLCBmbiwgYWRkKXtcblx0XHR2YXIgYWN0aW9uID0gYWRkID8gX2FkZEV2ZW50TGlzdGVuZXIgOiAncmVtb3ZlRXZlbnRMaXN0ZW5lcic7XG5cdFx0aWYoYWRkKXtcblx0XHRcdGFkZFJlbW92ZUxvYWRFdmVudHMoZG9tLCBmbik7XG5cdFx0fVxuXHRcdGxvYWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihldnQpe1xuXHRcdFx0ZG9tW2FjdGlvbl0oZXZ0LCBmbik7XG5cdFx0fSk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSBlbGVtIHsgRWxlbWVudCB9XG5cdCAqIEBwYXJhbSBuYW1lIHsgc3RyaW5nIH1cblx0ICogQHBhcmFtIGRldGFpbCB7IGFueSB9XG5cdCAqIEBwYXJhbSBub0J1YmJsZXMgeyBib29sZWFuIH1cblx0ICogQHBhcmFtIG5vQ2FuY2VsYWJsZSB7IGJvb2xlYW4gfVxuXHQgKiBAcmV0dXJucyB7IEN1c3RvbUV2ZW50IH1cblx0ICovXG5cdHZhciB0cmlnZ2VyRXZlbnQgPSBmdW5jdGlvbihlbGVtLCBuYW1lLCBkZXRhaWwsIG5vQnViYmxlcywgbm9DYW5jZWxhYmxlKXtcblx0XHR2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcblxuXHRcdGlmKCFkZXRhaWwpe1xuXHRcdFx0ZGV0YWlsID0ge307XG5cdFx0fVxuXG5cdFx0ZGV0YWlsLmluc3RhbmNlID0gbGF6eXNpemVzO1xuXG5cdFx0ZXZlbnQuaW5pdEV2ZW50KG5hbWUsICFub0J1YmJsZXMsICFub0NhbmNlbGFibGUpO1xuXG5cdFx0ZXZlbnQuZGV0YWlsID0gZGV0YWlsO1xuXG5cdFx0ZWxlbS5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcblx0XHRyZXR1cm4gZXZlbnQ7XG5cdH07XG5cblx0dmFyIHVwZGF0ZVBvbHlmaWxsID0gZnVuY3Rpb24gKGVsLCBmdWxsKXtcblx0XHR2YXIgcG9seWZpbGw7XG5cdFx0aWYoICFzdXBwb3J0UGljdHVyZSAmJiAoIHBvbHlmaWxsID0gKHdpbmRvdy5waWN0dXJlZmlsbCB8fCBsYXp5U2l6ZXNDZmcucGYpICkgKXtcblx0XHRcdGlmKGZ1bGwgJiYgZnVsbC5zcmMgJiYgIWVsW19nZXRBdHRyaWJ1dGVdKCdzcmNzZXQnKSl7XG5cdFx0XHRcdGVsLnNldEF0dHJpYnV0ZSgnc3Jjc2V0JywgZnVsbC5zcmMpO1xuXHRcdFx0fVxuXHRcdFx0cG9seWZpbGwoe3JlZXZhbHVhdGU6IHRydWUsIGVsZW1lbnRzOiBbZWxdfSk7XG5cdFx0fSBlbHNlIGlmKGZ1bGwgJiYgZnVsbC5zcmMpe1xuXHRcdFx0ZWwuc3JjID0gZnVsbC5zcmM7XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBnZXRDU1MgPSBmdW5jdGlvbiAoZWxlbSwgc3R5bGUpe1xuXHRcdHJldHVybiAoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKSB8fCB7fSlbc3R5bGVdO1xuXHR9O1xuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gZWxlbSB7IEVsZW1lbnQgfVxuXHQgKiBAcGFyYW0gcGFyZW50IHsgRWxlbWVudCB9XG5cdCAqIEBwYXJhbSBbd2lkdGhdIHtudW1iZXJ9XG5cdCAqIEByZXR1cm5zIHtudW1iZXJ9XG5cdCAqL1xuXHR2YXIgZ2V0V2lkdGggPSBmdW5jdGlvbihlbGVtLCBwYXJlbnQsIHdpZHRoKXtcblx0XHR3aWR0aCA9IHdpZHRoIHx8IGVsZW0ub2Zmc2V0V2lkdGg7XG5cblx0XHR3aGlsZSh3aWR0aCA8IGxhenlTaXplc0NmZy5taW5TaXplICYmIHBhcmVudCAmJiAhZWxlbS5fbGF6eXNpemVzV2lkdGgpe1xuXHRcdFx0d2lkdGggPSAgcGFyZW50Lm9mZnNldFdpZHRoO1xuXHRcdFx0cGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHdpZHRoO1xuXHR9O1xuXG5cdHZhciByQUYgPSAoZnVuY3Rpb24oKXtcblx0XHR2YXIgcnVubmluZywgd2FpdGluZztcblx0XHR2YXIgZmlyc3RGbnMgPSBbXTtcblx0XHR2YXIgc2Vjb25kRm5zID0gW107XG5cdFx0dmFyIGZucyA9IGZpcnN0Rm5zO1xuXG5cdFx0dmFyIHJ1biA9IGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgcnVuRm5zID0gZm5zO1xuXG5cdFx0XHRmbnMgPSBmaXJzdEZucy5sZW5ndGggPyBzZWNvbmRGbnMgOiBmaXJzdEZucztcblxuXHRcdFx0cnVubmluZyA9IHRydWU7XG5cdFx0XHR3YWl0aW5nID0gZmFsc2U7XG5cblx0XHRcdHdoaWxlKHJ1bkZucy5sZW5ndGgpe1xuXHRcdFx0XHRydW5GbnMuc2hpZnQoKSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRydW5uaW5nID0gZmFsc2U7XG5cdFx0fTtcblxuXHRcdHZhciByYWZCYXRjaCA9IGZ1bmN0aW9uKGZuLCBxdWV1ZSl7XG5cdFx0XHRpZihydW5uaW5nICYmICFxdWV1ZSl7XG5cdFx0XHRcdGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmbnMucHVzaChmb
24510ik7XG5cblx0XHRcdFx0aWYoIXdhaXRpbmcpe1xuXHRcdFx0XHRcdHdhaXRpbmcgPSB0cnVlO1xuXHRcdFx0XHRcdChkb2N1bWVudC5oaWRkZW4gPyBzZXRUaW1lb3V0IDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lKShydW4pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHJhZkJhdGNoLl9sc0ZsdXNoID0gcnVuO1xuXG5cdFx0cmV0dXJuIHJhZkJhdGNoO1xuXHR9KSgpO1xuXG5cdHZhciByQUZJdCA9IGZ1bmN0aW9uKGZuLCBzaW1wbGUpe1xuXHRcdHJldHVybiBzaW1wbGUgP1xuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJBRihmbik7XG5cdFx0XHR9IDpcblx0XHRcdGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHRcdFx0dmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdFx0XHRcdHJBRihmdW5jdGlvbigpe1xuXHRcdFx0XHRcdGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHQ7XG5cdH07XG5cblx0dmFyIHRocm90dGxlID0gZnVuY3Rpb24oZm4pe1xuXHRcdHZhciBydW5uaW5nO1xuXHRcdHZhciBsYXN0VGltZSA9IDA7XG5cdFx0dmFyIGdEZWxheSA9IGxhenlTaXplc0NmZy50aHJvdHRsZURlbGF5O1xuXHRcdHZhciBySUNUaW1lb3V0ID0gbGF6eVNpemVzQ2ZnLnJpY1RpbWVvdXQ7XG5cdFx0dmFyIHJ1biA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRydW5uaW5nID0gZmFsc2U7XG5cdFx0XHRsYXN0VGltZSA9IERhdGUubm93KCk7XG5cdFx0XHRmbigpO1xuXHRcdH07XG5cdFx0dmFyIGlkbGVDYWxsYmFjayA9IHJlcXVlc3RJZGxlQ2FsbGJhY2sgJiYgcklDVGltZW91dCA+IDQ5ID9cblx0XHRcdGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHJlcXVlc3RJZGxlQ2FsbGJhY2socnVuLCB7dGltZW91dDogcklDVGltZW91dH0pO1xuXG5cdFx0XHRcdGlmKHJJQ1RpbWVvdXQgIT09IGxhenlTaXplc0NmZy5yaWNUaW1lb3V0KXtcblx0XHRcdFx0XHRySUNUaW1lb3V0ID0gbGF6eVNpemVzQ2ZnLnJpY1RpbWVvdXQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gOlxuXHRcdFx0ckFGSXQoZnVuY3Rpb24oKXtcblx0XHRcdFx0c2V0VGltZW91dChydW4pO1xuXHRcdFx0fSwgdHJ1ZSlcblx0XHQ7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oaXNQcmlvcml0eSl7XG5cdFx0XHR2YXIgZGVsYXk7XG5cblx0XHRcdGlmKChpc1ByaW9yaXR5ID0gaXNQcmlvcml0eSA9PT0gdHJ1ZSkpe1xuXHRcdFx0XHRySUNUaW1lb3V0ID0gMzM7XG5cdFx0XHR9XG5cblx0XHRcdGlmKHJ1bm5pbmcpe1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHJ1bm5pbmcgPSAgdHJ1ZTtcblxuXHRcdFx0ZGVsYXkgPSBnRGVsYXkgLSAoRGF0ZS5ub3coKSAtIGxhc3RUaW1lKTtcblxuXHRcdFx0aWYoZGVsYXkgPCAwKXtcblx0XHRcdFx0ZGVsYXkgPSAwO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihpc1ByaW9yaXR5IHx8IGRlbGF5IDwgOSl7XG5cdFx0XHRcdGlkbGVDYWxsYmFjaygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2V0VGltZW91dChpZGxlQ2FsbGJhY2ssIGRlbGF5KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9O1xuXG5cdC8vYmFzZWQgb24gaHR0cDovL21vZGVybmphdmFzY3JpcHQuYmxvZ3Nwb3QuZGUvMjAxMy8wOC9idWlsZGluZy1iZXR0ZXItZGVib3VuY2UuaHRtbFxuXHR2YXIgZGVib3VuY2UgPSBmdW5jdGlvbihmdW5jKSB7XG5cdFx0dmFyIHRpbWVvdXQsIHRpbWVzdGFtcDtcblx0XHR2YXIgd2FpdCA9IDk5O1xuXHRcdHZhciBydW4gPSBmdW5jdGlvbigpe1xuXHRcdFx0dGltZW91dCA9IG51bGw7XG5cdFx0XHRmdW5jKCk7XG5cdFx0fTtcblx0XHR2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBsYXN0ID0gRGF0ZS5ub3coKSAtIHRpbWVzdGFtcDtcblxuXHRcdFx0aWYgKGxhc3QgPCB3YWl0KSB7XG5cdFx0XHRcdHNldFRpbWVvdXQobGF0ZXIsIHdhaXQgLSBsYXN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdChyZXF1ZXN0SWRsZUNhbGxiYWNrIHx8IHJ1bikocnVuKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0dGltZXN0YW1wID0gRGF0ZS5ub3coKTtcblxuXHRcdFx0aWYgKCF0aW1lb3V0KSB7XG5cdFx0XHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9O1xuXG5cdHZhciBsb2FkZXIgPSAoZnVuY3Rpb24oKXtcblx0XHR2YXIgcHJlbG9hZEVsZW1zLCBpc0NvbXBsZXRlZCwgcmVzZXRQcmVsb2FkaW5nVGltZXIsIGxvYWRNb2RlLCBzdGFydGVkO1xuXG5cdFx0dmFyIGVMdlcsIGVsdkgsIGVMdG9wLCBlTGxlZnQsIGVMcmlnaHQsIGVMYm90dG9tLCBpc0JvZHlIaWRkZW47XG5cblx0XHR2YXIgcmVnSW1nID0gL15pbWckL2k7XG5cdFx0dmFyIHJlZ0lmcmFtZSA9IC9eaWZyYW1lJC9pO1xuXG5cdFx0dmFyIHN1cHBvcnRTY3JvbGwgPSAoJ29uc2Nyb2xsJyBpbiB3aW5kb3cpICYmICEoLyhnbGV8aW5nKWJvdC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSk7XG5cblx0XHR2YXIgc2hyaW5rRXhwYW5kID0gMDtcblx0XHR2YXIgY3VycmVudEV4cGFuZCA9IDA7XG5cblx0XHR2YXIgaXNMb2FkaW5nID0gMDtcblx0XHR2YXIgbG93UnVucyA9IC0xO1xuXG5cdFx0dmFyIHJlc2V0UHJlbG9hZGluZyA9IGZ1bmN0aW9uKGUpe1xuXHRcdFx0aXNMb2FkaW5nLS07XG5cdFx0XHRpZighZSB8fCBpc0xvYWRpbmcgPCAwIHx8ICFlLnRhcmdldCl7XG5cdFx0XHRcdGlzTG9hZGluZyA9IDA7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHZhciBpc1Zpc2libGUgPSBmdW5jdGlvbiAoZWxlbSkge1xuXHRcdFx0aWYgKGlzQm9keUhpZGRlbiA9PSBudWxsKSB7XG5cdFx0XHRcdGlzQm9keUhpZGRlbiA9IGdldENTUyhkb2N1bWVudC5ib2R5LCAndmlzaWJpbGl0eScpID09ICdoaWRkZW4nO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gaXNCb2R5SGlkZGVuIHx8ICEoZ2V0Q1NTKGVsZW0ucGFyZW50Tm9kZSwgJ3Zpc2liaWxpdHknKSA9PSAnaGlkZGVuJyAmJiBnZXRDU1MoZWxlbSwgJ3Zpc2liaWxpdHknKSA9PSAnaGlkZGVuJyk7XG5cdFx0fTtcblxuXHRcdHZhciBpc05lc3RlZFZpc2libGUgPSBmdW5jdGlvbihlbGVtLCBlbGVtRXhwYW5kKXtcblx0XHRcdHZhciBvdXRlclJlY3Q7XG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbTtcblx0XHRcdHZhciB2aXNpYmxlID0gaXNWaXNpYmxlKGVsZW0pO1xuXG5cdFx0XHRlTHRvcCAtPSBlbGVtRXhwYW5kO1xuXHRcdFx0ZUxib3R0b20gKz0gZWxlbUV4cGFuZDtcblx0XHRcdGVMbGVmdCAtPSBlbGVtRXhwYW5kO1xuXHRcdFx0ZUxyaWdodCArPSBlbGVtRXhwYW5kO1xuXG5cdFx0XHR3aGlsZSh2aXNpYmxlICYmIChwYXJlbnQgPSBwYXJlbnQub2Zmc2V0UGFyZW50KSAmJiBwYXJlbnQgIT0gZG9jdW1lbnQuYm9keSAmJiBwYXJlbnQgIT0gZG9jRWxlbSl7XG5cdFx0XHRcdHZpc2libGUgPSAoKGdldENTUyhwYXJlbnQsICdvcGFjaXR5JykgfHwgMSkgPiAwKTtcblxuXHRcdFx0XHRpZih2aXNpYmxlICYmIGdldENTUyhwYXJlbnQsICdvdmVyZmxvdycpICE9ICd2aXNpYmxlJyl7XG5cdFx0XHRcdFx0b3V0ZXJSZWN0ID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0XHRcdHZpc2libGUgPSBlTHJpZ2h0ID4gb3V0ZXJSZWN0LmxlZnQgJiZcblx0XHRcdFx0XHRcdGVMbGVmdCA8IG91dGVyUmVjdC5yaWdodCAmJlxuXHRcdFx0XHRcdFx0ZUxib3R0b20gPiBvdXRlclJlY3QudG9wIC0gMSAmJlxuXHRcdFx0XHRcdFx0ZUx0b3AgPCBvdXRlclJlY3QuYm90dG9tICsgMVxuXHRcdFx0XHRcdDt
24510cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmlzaWJsZTtcblx0XHR9O1xuXG5cdFx0dmFyIGNoZWNrRWxlbWVudHMgPSBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBlTGxlbiwgaSwgcmVjdCwgYXV0b0xvYWRFbGVtLCBsb2FkZWRTb21ldGhpbmcsIGVsZW1FeHBhbmQsIGVsZW1OZWdhdGl2ZUV4cGFuZCwgZWxlbUV4cGFuZFZhbCxcblx0XHRcdFx0YmVmb3JlRXhwYW5kVmFsLCBkZWZhdWx0RXhwYW5kLCBwcmVsb2FkRXhwYW5kLCBoRmFjO1xuXHRcdFx0dmFyIGxhenlsb2FkRWxlbXMgPSBsYXp5c2l6ZXMuZWxlbWVudHM7XG5cblx0XHRcdGlmKChsb2FkTW9kZSA9IGxhenlTaXplc0NmZy5sb2FkTW9kZSkgJiYgaXNMb2FkaW5nIDwgOCAmJiAoZUxsZW4gPSBsYXp5bG9hZEVsZW1zLmxlbmd0aCkpe1xuXG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHRcdGxvd1J1bnMrKztcblxuXHRcdFx0XHRmb3IoOyBpIDwgZUxsZW47IGkrKyl7XG5cblx0XHRcdFx0XHRpZighbGF6eWxvYWRFbGVtc1tpXSB8fCBsYXp5bG9hZEVsZW1zW2ldLl9sYXp5UmFjZSl7Y29udGludWU7fVxuXG5cdFx0XHRcdFx0aWYoIXN1cHBvcnRTY3JvbGwgfHwgKGxhenlzaXplcy5wcmVtYXR1cmVVbnZlaWwgJiYgbGF6eXNpemVzLnByZW1hdHVyZVVudmVpbChsYXp5bG9hZEVsZW1zW2ldKSkpe3VudmVpbEVsZW1lbnQobGF6eWxvYWRFbGVtc1tpXSk7Y29udGludWU7fVxuXG5cdFx0XHRcdFx0aWYoIShlbGVtRXhwYW5kVmFsID0gbGF6eWxvYWRFbGVtc1tpXVtfZ2V0QXR0cmlidXRlXSgnZGF0YS1leHBhbmQnKSkgfHwgIShlbGVtRXhwYW5kID0gZWxlbUV4cGFuZFZhbCAqIDEpKXtcblx0XHRcdFx0XHRcdGVsZW1FeHBhbmQgPSBjdXJyZW50RXhwYW5kO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICghZGVmYXVsdEV4cGFuZCkge1xuXHRcdFx0XHRcdFx0ZGVmYXVsdEV4cGFuZCA9ICghbGF6eVNpemVzQ2ZnLmV4cGFuZCB8fCBsYXp5U2l6ZXNDZmcuZXhwYW5kIDwgMSkgP1xuXHRcdFx0XHRcdFx0XHRkb2NFbGVtLmNsaWVudEhlaWdodCA+IDUwMCAmJiBkb2NFbGVtLmNsaWVudFdpZHRoID4gNTAwID8gNTAwIDogMzcwIDpcblx0XHRcdFx0XHRcdFx0bGF6eVNpemVzQ2ZnLmV4cGFuZDtcblxuXHRcdFx0XHRcdFx0bGF6eXNpemVzLl9kZWZFeCA9IGRlZmF1bHRFeHBhbmQ7XG5cblx0XHRcdFx0XHRcdHByZWxvYWRFeHBhbmQgPSBkZWZhdWx0RXhwYW5kICogbGF6eVNpemVzQ2ZnLmV4cEZhY3Rvcjtcblx0XHRcdFx0XHRcdGhGYWMgPSBsYXp5U2l6ZXNDZmcuaEZhYztcblx0XHRcdFx0XHRcdGlzQm9keUhpZGRlbiA9IG51bGw7XG5cblx0XHRcdFx0XHRcdGlmKGN1cnJlbnRFeHBhbmQgPCBwcmVsb2FkRXhwYW5kICYmIGlzTG9hZGluZyA8IDEgJiYgbG93UnVucyA+IDIgJiYgbG9hZE1vZGUgPiAyICYmICFkb2N1bWVudC5oaWRkZW4pe1xuXHRcdFx0XHRcdFx0XHRjdXJyZW50RXhwYW5kID0gcHJlbG9hZEV4cGFuZDtcblx0XHRcdFx0XHRcdFx0bG93UnVucyA9IDA7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYobG9hZE1vZGUgPiAxICYmIGxvd1J1bnMgPiAxICYmIGlzTG9hZGluZyA8IDYpe1xuXHRcdFx0XHRcdFx0XHRjdXJyZW50RXhwYW5kID0gZGVmYXVsdEV4cGFuZDtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRFeHBhbmQgPSBzaHJpbmtFeHBhbmQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoYmVmb3JlRXhwYW5kVmFsICE9PSBlbGVtRXhwYW5kKXtcblx0XHRcdFx0XHRcdGVMdlcgPSBpbm5lcldpZHRoICsgKGVsZW1FeHBhbmQgKiBoRmFjKTtcblx0XHRcdFx0XHRcdGVsdkggPSBpbm5lckhlaWdodCArIGVsZW1FeHBhbmQ7XG5cdFx0XHRcdFx0XHRlbGVtTmVnYXRpdmVFeHBhbmQgPSBlbGVtRXhwYW5kICogLTE7XG5cdFx0XHRcdFx0XHRiZWZvcmVFeHBhbmRWYWwgPSBlbGVtRXhwYW5kO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJlY3QgPSBsYXp5bG9hZEVsZW1zW2ldLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0XHRcdFx0aWYgKChlTGJvdHRvbSA9IHJlY3QuYm90dG9tKSA+PSBlbGVtTmVnYXRpdmVFeHBhbmQgJiZcblx0XHRcdFx0XHRcdChlTHRvcCA9IHJlY3QudG9wKSA8PSBlbHZIICYmXG5cdFx0XHRcdFx0XHQoZUxyaWdodCA9IHJlY3QucmlnaHQpID49IGVsZW1OZWdhdGl2ZUV4cGFuZCAqIGhGYWMgJiZcblx0XHRcdFx0XHRcdChlTGxlZnQgPSByZWN0LmxlZnQpIDw9IGVMdlcgJiZcblx0XHRcdFx0XHRcdChlTGJvdHRvbSB8fCBlTHJpZ2h0IHx8IGVMbGVmdCB8fCBlTHRvcCkgJiZcblx0XHRcdFx0XHRcdChsYXp5U2l6ZXNDZmcubG9hZEhpZGRlbiB8fCBpc1Zpc2libGUobGF6eWxvYWRFbGVtc1tpXSkpICYmXG5cdFx0XHRcdFx0XHQoKGlzQ29tcGxldGVkICYmIGlzTG9hZGluZyA8IDMgJiYgIWVsZW1FeHBhbmRWYWwgJiYgKGxvYWRNb2RlIDwgMyB8fCBsb3dSdW5zIDwgNCkpIHx8IGlzTmVzdGVkVmlzaWJsZShsYXp5bG9hZEVsZW1zW2ldLCBlbGVtRXhwYW5kKSkpe1xuXHRcdFx0XHRcdFx0dW52ZWlsRWxlbWVudChsYXp5bG9hZEVsZW1zW2ldKTtcblx0XHRcdFx0XHRcdGxvYWRlZFNvbWV0aGluZyA9IHRydWU7XG5cdFx0XHRcdFx0XHRpZihpc0xvYWRpbmcgPiA5KXticmVhazt9XG5cdFx0XHRcdFx0fSBlbHNlIGlmKCFsb2FkZWRTb21ldGhpbmcgJiYgaXNDb21wbGV0ZWQgJiYgIWF1dG9Mb2FkRWxlbSAmJlxuXHRcdFx0XHRcdFx0aXNMb2FkaW5nIDwgNCAmJiBsb3dSdW5zIDwgNCAmJiBsb2FkTW9kZSA+IDIgJiZcblx0XHRcdFx0XHRcdChwcmVsb2FkRWxlbXNbMF0gfHwgbGF6eVNpemVzQ2ZnLnByZWxvYWRBZnRlckxvYWQpICYmXG5cdFx0XHRcdFx0XHQocHJlbG9hZEVsZW1zWzBdIHx8ICghZWxlbUV4cGFuZFZhbCAmJiAoKGVMYm90dG9tIHx8IGVMcmlnaHQgfHwgZUxsZWZ0IHx8IGVMdG9wKSB8fCBsYXp5bG9hZEVsZW1zW2ldW19nZXRBdHRyaWJ1dGVdKGxhenlTaXplc0NmZy5zaXplc0F0dHIpICE9ICdhdXRvJykpKSl7XG5cdFx0XHRcdFx0XHRhdXRvTG9hZEVsZW0gPSBwcmVsb2FkRWxlbXNbMF0gfHwgbGF6eWxvYWRFbGVtc1tpXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihhdXRvTG9hZEVsZW0gJiYgIWxvYWRlZFNvbWV0aGluZyl7XG5cdFx0XHRcdFx0dW52ZWlsRWxlbWVudChhdXRvTG9hZEVsZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHZhciB0aHJvdHRsZWRDaGVja0VsZW1lbnRzID0gdGhyb3R0bGUoY2hlY2tFbGVtZW50cyk7XG5cblx0XHR2YXIgc3dpdGNoTG9hZGluZ0NsYXNzID0gZnVuY3Rpb24oZSl7XG5cdFx0XHR2YXIgZWxlbSA9IGUudGFyZ2V0O1xuXG5cdFx0XHRpZiAoZWxlbS5fbGF6eUNhY2hlKSB7XG5cdFx0XHRcdGRlbGV0ZSBlbGVtLl9sYXp5Q2FjaGU7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0cmVzZXRQcmVsb2FkaW5nKGUpO1xuXHRcdFx0YWRkQ2xhc3MoZWxlbSwgbGF6eVNpemVzQ2ZnLmxvYWRlZENsYXNzKTtcblx0XHRcdHJlbW92ZUNsYXNzKGVsZW0sIGxhenlTaXplc0NmZy5sb2FkaW5nQ2xhc3MpO1xuXHRcdFx0YWRkUmVtb3ZlTG9hZEV2ZW50cyhlbGVtLCByYWZTd2l0Y2hMb2FkaW5nQ2xhc3MpO1xuXHRcdFx0dHJpZ2dlckV2ZW50KGVsZW0sICdsYXp5bG9hZGVkJyk7XG5cdFx0fTtcblx0XHR2YXIgcmFmZWRTd2l0Y2hMb2FkaW5nQ2xhc3MgPSByQUZJdChzd2l0Y2hMb2FkaW5nQ2xhc3MpO1xuXHRcdHZhciByYWZTd2l0Y2hMb2FkaW5nQ2xhc3MgPSBmdW5jdGlvbihlKXtcblx0XHRcdHJhZmVkU3d
24510pdGNoTG9hZGluZ0NsYXNzKHt0YXJnZXQ6IGUudGFyZ2V0fSk7XG5cdFx0fTtcblxuXHRcdHZhciBjaGFuZ2VJZnJhbWVTcmMgPSBmdW5jdGlvbihlbGVtLCBzcmMpe1xuXHRcdFx0dmFyIGxvYWRNb2RlID0gZWxlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbG9hZC1tb2RlJykgfHwgbGF6eVNpemVzQ2ZnLmlmcmFtZUxvYWRNb2RlO1xuXG5cdFx0XHQvLyBsb2FkTW9kZSBjYW4gYmUgYWxzbyBhIHN0cmluZyFcblx0XHRcdGlmIChsb2FkTW9kZSA9PSAwKSB7XG5cdFx0XHRcdGVsZW0uY29udGVudFdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHNyYyk7XG5cdFx0XHR9IGVsc2UgaWYgKGxvYWRNb2RlID09IDEpIHtcblx0XHRcdFx0ZWxlbS5zcmMgPSBzcmM7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHZhciBoYW5kbGVTb3VyY2VzID0gZnVuY3Rpb24oc291cmNlKXtcblx0XHRcdHZhciBjdXN0b21NZWRpYTtcblxuXHRcdFx0dmFyIHNvdXJjZVNyY3NldCA9IHNvdXJjZVtfZ2V0QXR0cmlidXRlXShsYXp5U2l6ZXNDZmcuc3Jjc2V0QXR0cik7XG5cblx0XHRcdGlmKCAoY3VzdG9tTWVkaWEgPSBsYXp5U2l6ZXNDZmcuY3VzdG9tTWVkaWFbc291cmNlW19nZXRBdHRyaWJ1dGVdKCdkYXRhLW1lZGlhJykgfHwgc291cmNlW19nZXRBdHRyaWJ1dGVdKCdtZWRpYScpXSkgKXtcblx0XHRcdFx0c291cmNlLnNldEF0dHJpYnV0ZSgnbWVkaWEnLCBjdXN0b21NZWRpYSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmKHNvdXJjZVNyY3NldCl7XG5cdFx0XHRcdHNvdXJjZS5zZXRBdHRyaWJ1dGUoJ3NyY3NldCcsIHNvdXJjZVNyY3NldCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHZhciBsYXp5VW52ZWlsID0gckFGSXQoZnVuY3Rpb24gKGVsZW0sIGRldGFpbCwgaXNBdXRvLCBzaXplcywgaXNJbWcpe1xuXHRcdFx0dmFyIHNyYywgc3Jjc2V0LCBwYXJlbnQsIGlzUGljdHVyZSwgZXZlbnQsIGZpcmVzTG9hZDtcblxuXHRcdFx0aWYoIShldmVudCA9IHRyaWdnZXJFdmVudChlbGVtLCAnbGF6eWJlZm9yZXVudmVpbCcsIGRldGFpbCkpLmRlZmF1bHRQcmV2ZW50ZWQpe1xuXG5cdFx0XHRcdGlmKHNpemVzKXtcblx0XHRcdFx0XHRpZihpc0F1dG8pe1xuXHRcdFx0XHRcdFx0YWRkQ2xhc3MoZWxlbSwgbGF6eVNpemVzQ2ZnLmF1dG9zaXplc0NsYXNzKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoJ3NpemVzJywgc2l6ZXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNyY3NldCA9IGVsZW1bX2dldEF0dHJpYnV0ZV0obGF6eVNpemVzQ2ZnLnNyY3NldEF0dHIpO1xuXHRcdFx0XHRzcmMgPSBlbGVtW19nZXRBdHRyaWJ1dGVdKGxhenlTaXplc0NmZy5zcmNBdHRyKTtcblxuXHRcdFx0XHRpZihpc0ltZykge1xuXHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0XHRpc1BpY3R1cmUgPSBwYXJlbnQgJiYgcmVnUGljdHVyZS50ZXN0KHBhcmVudC5ub2RlTmFtZSB8fCAnJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmaXJlc0xvYWQgPSBkZXRhaWwuZmlyZXNMb2FkIHx8ICgoJ3NyYycgaW4gZWxlbSkgJiYgKHNyY3NldCB8fCBzcmMgfHwgaXNQaWN0dXJlKSk7XG5cblx0XHRcdFx0ZXZlbnQgPSB7dGFyZ2V0OiBlbGVtfTtcblxuXHRcdFx0XHRhZGRDbGFzcyhlbGVtLCBsYXp5U2l6ZXNDZmcubG9hZGluZ0NsYXNzKTtcblxuXHRcdFx0XHRpZihmaXJlc0xvYWQpe1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dChyZXNldFByZWxvYWRpbmdUaW1lcik7XG5cdFx0XHRcdFx0cmVzZXRQcmVsb2FkaW5nVGltZXIgPSBzZXRUaW1lb3V0KHJlc2V0UHJlbG9hZGluZywgMjUwMCk7XG5cdFx0XHRcdFx0YWRkUmVtb3ZlTG9hZEV2ZW50cyhlbGVtLCByYWZTd2l0Y2hMb2FkaW5nQ2xhc3MsIHRydWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoaXNQaWN0dXJlKXtcblx0XHRcdFx0XHRmb3JFYWNoLmNhbGwocGFyZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzb3VyY2UnKSwgaGFuZGxlU291cmNlcyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihzcmNzZXQpe1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCdzcmNzZXQnLCBzcmNzZXQpO1xuXHRcdFx0XHR9IGVsc2UgaWYoc3JjICYmICFpc1BpY3R1cmUpe1xuXHRcdFx0XHRcdGlmKHJlZ0lmcmFtZS50ZXN0KGVsZW0ubm9kZU5hbWUpKXtcblx0XHRcdFx0XHRcdGNoYW5nZUlmcmFtZVNyYyhlbGVtLCBzcmMpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNyYyA9IHNyYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihpc0ltZyAmJiAoc3Jjc2V0IHx8IGlzUGljdHVyZSkpe1xuXHRcdFx0XHRcdHVwZGF0ZVBvbHlmaWxsKGVsZW0sIHtzcmM6IHNyY30pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmKGVsZW0uX2xhenlSYWNlKXtcblx0XHRcdFx0ZGVsZXRlIGVsZW0uX2xhenlSYWNlO1xuXHRcdFx0fVxuXHRcdFx0cmVtb3ZlQ2xhc3MoZWxlbSwgbGF6eVNpemVzQ2ZnLmxhenlDbGFzcyk7XG5cblx0XHRcdHJBRihmdW5jdGlvbigpe1xuXHRcdFx0XHQvLyBQYXJ0IG9mIHRoaXMgY2FuIGJlIHJlbW92ZWQgYXMgc29vbiBhcyB0aGlzIGZpeCBpcyBvbGRlcjogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NzczMSAoMjAxNSlcblx0XHRcdFx0dmFyIGlzTG9hZGVkID0gZWxlbS5jb21wbGV0ZSAmJiBlbGVtLm5hdHVyYWxXaWR0aCA+IDE7XG5cblx0XHRcdFx0aWYoICFmaXJlc0xvYWQgfHwgaXNMb2FkZWQpe1xuXHRcdFx0XHRcdGlmIChpc0xvYWRlZCkge1xuXHRcdFx0XHRcdFx0YWRkQ2xhc3MoZWxlbSwgbGF6eVNpemVzQ2ZnLmZhc3RMb2FkZWRDbGFzcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHN3aXRjaExvYWRpbmdDbGFzcyhldmVudCk7XG5cdFx0XHRcdFx0ZWxlbS5fbGF6eUNhY2hlID0gdHJ1ZTtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0XHRpZiAoJ19sYXp5Q2FjaGUnIGluIGVsZW0pIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIGVsZW0uX2xhenlDYWNoZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LCA5KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZWxlbS5sb2FkaW5nID09ICdsYXp5Jykge1xuXHRcdFx0XHRcdGlzTG9hZGluZy0tO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCB0cnVlKTtcblx0XHR9KTtcblxuXHRcdC8qKlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIGVsZW0geyBFbGVtZW50IH1cblx0XHQgKi9cblx0XHR2YXIgdW52ZWlsRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtKXtcblx0XHRcdGlmIChlbGVtLl9sYXp5UmFjZSkge3JldHVybjt9XG5cdFx0XHR2YXIgZGV0YWlsO1xuXG5cdFx0XHR2YXIgaXNJbWcgPSByZWdJbWcudGVzdChlbGVtLm5vZGVOYW1lKTtcblxuXHRcdFx0Ly9hbGxvdyB1c2luZyBzaXplcz1cImF1dG9cIiwgYnV0IGRvbid0IHVzZS4gaXQncyBpbnZhbGlkLiBVc2UgZGF0YS1zaXplcz1cImF1dG9cIiBvciBhIHZhbGlkIHZhbHVlIGZvciBzaXplcyBpbnN0ZWFkIChpLmUuOiBzaXplcz1cIjgwdndcIilcblx0XHRcdHZhciBzaXplcyA9IGlzSW1nICYmIChlbGVtW19nZXRBdHRyaWJ1dGVdKGxhenlTaXplc0NmZy5zaXplc0F0dHIpIHx8IGVsZW1bX2dldEF0dHJpYnV0ZV0oJ3NpemVzJykpO1xuXHRcdFx0dmFyIGlzQXV0byA9IHNpemVzID09ICdhdXRvJztcblxuXHRcdFx0aWYoIChpc0F1dG8gfHwgIWlzQ29tcGxldGVkKSAmJiBpc0ltZyAmJiAoZWxlbVtfZ2V0QXR0cmlidXRlXSgnc3JjJykgfHwgZWxlbS5zcmNzZXQpICYmICFlbGVtLmNvbXBsZXRlICYmICFoYXNDbGFzcyhlbGVtLCBsYXp5U2l6ZXNDZmcuZXJyb3JDbGFzcykgJiYgaGFzQ2xhc3MoZWxlbSwgbGF6eVNpemVzQ2ZnLmxhenlDbGFzcykpe3JldHVybjt9XG5cblx0XHRcdGRldGFpbCA9IHRyaWdnZXJFdmVudChlbGVtLCAnbGF6eXVudmVpbHJlYWQnKS5kZXRhaWw7XG5cblx0XHRcdGlmKGlzQXV0byl7XG5cdFx0XHRcdCBhdXRvU2l6ZXIudXBkYXRlRWxlbShlbGVtLCB0cnVlLCBlbGVtLm9mZnNldFdpZHRoKTtcblx0XHRcdH1cblxuXHRcdFx0ZWxlbS5fbGF6eVJhY2UgPSB0cnVlO1xuXHRcdFx0aXNMb2FkaW5nKys7XG5cblx0XHRcdGxhenlVbnZlaWwoZWxlbSwgZGV0YWlsLCBpc0F1dG8sIHNpemVzLCBpc0ltZyk7XG5cdFx0fTtcblxuXHRcdHZhciBhZnRlclNjcm9sbCA9IGRlYm91bmNlKGZ1bmN0aW9uKCl7XG5cdFx0XHRsYXp5U2l6ZXNDZmcubG9hZE1vZGUgPSAzO1xuXHRcdFx0dGhyb3R0bGVkQ2hlY2tFbGVtZW50cygpO1xuXHRcdH0pO1xuXG5cdFx0dmFyIGFsdExvYWRtb2RlU2Nyb2xsTGlzdG5lciA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRpZihsYXp5U2l6ZXNDZmcubG9hZE1vZGUgPT0gMyl7XG5cdFx0XHRcdGxhenlTaXplc0NmZy5sb2FkTW9kZSA9IDI7XG5cdFx0XHR9XG5cdFx0XHRhZnRlclNjcm9sbCgpO1xuXHRcdH07XG5cblx0XHR2YXIgb25sb2FkID0gZnVuY3Rpb24oKXtcblx0XHRcdGlmKGlzQ29tcGxldGVkKXtyZXR1cm47fVxuXHRcdFx0aWYoRGF0ZS5ub3coKSAtIHN0YXJ0ZWQgPCA5OTkpe1xuXHRcdFx0XHRzZXRUaW
245101lb3V0KG9ubG9hZCwgOTk5KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cblx0XHRcdGlzQ29tcGxldGVkID0gdHJ1ZTtcblxuXHRcdFx0bGF6eVNpemVzQ2ZnLmxvYWRNb2RlID0gMztcblxuXHRcdFx0dGhyb3R0bGVkQ2hlY2tFbGVtZW50cygpO1xuXG5cdFx0XHRhZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBhbHRMb2FkbW9kZVNjcm9sbExpc3RuZXIsIHRydWUpO1xuXHRcdH07XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0XzogZnVuY3Rpb24oKXtcblx0XHRcdFx0c3RhcnRlZCA9IERhdGUubm93KCk7XG5cblx0XHRcdFx0bGF6eXNpemVzLmVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShsYXp5U2l6ZXNDZmcubGF6eUNsYXNzKTtcblx0XHRcdFx0cHJlbG9hZEVsZW1zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShsYXp5U2l6ZXNDZmcubGF6eUNsYXNzICsgJyAnICsgbGF6eVNpemVzQ2ZnLnByZWxvYWRDbGFzcyk7XG5cblx0XHRcdFx0YWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhyb3R0bGVkQ2hlY2tFbGVtZW50cywgdHJ1ZSk7XG5cblx0XHRcdFx0YWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhyb3R0bGVkQ2hlY2tFbGVtZW50cywgdHJ1ZSk7XG5cblx0XHRcdFx0YWRkRXZlbnRMaXN0ZW5lcigncGFnZXNob3cnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdGlmIChlLnBlcnNpc3RlZCkge1xuXHRcdFx0XHRcdFx0dmFyIGxvYWRpbmdFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy4nICsgbGF6eVNpemVzQ2ZnLmxvYWRpbmdDbGFzcyk7XG5cblx0XHRcdFx0XHRcdGlmIChsb2FkaW5nRWxlbWVudHMubGVuZ3RoICYmIGxvYWRpbmdFbGVtZW50cy5mb3JFYWNoKSB7XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0bG9hZGluZ0VsZW1lbnRzLmZvckVhY2goIGZ1bmN0aW9uIChpbWcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChpbWcuY29tcGxldGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dW52ZWlsRWxlbWVudChpbWcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmKHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyKXtcblx0XHRcdFx0XHRuZXcgTXV0YXRpb25PYnNlcnZlciggdGhyb3R0bGVkQ2hlY2tFbGVtZW50cyApLm9ic2VydmUoIGRvY0VsZW0sIHtjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUsIGF0dHJpYnV0ZXM6IHRydWV9ICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZG9jRWxlbVtfYWRkRXZlbnRMaXN0ZW5lcl0oJ0RPTU5vZGVJbnNlcnRlZCcsIHRocm90dGxlZENoZWNrRWxlbWVudHMsIHRydWUpO1xuXHRcdFx0XHRcdGRvY0VsZW1bX2FkZEV2ZW50TGlzdGVuZXJdKCdET01BdHRyTW9kaWZpZWQnLCB0aHJvdHRsZWRDaGVja0VsZW1lbnRzLCB0cnVlKTtcblx0XHRcdFx0XHRzZXRJbnRlcnZhbCh0aHJvdHRsZWRDaGVja0VsZW1lbnRzLCA5OTkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWRkRXZlbnRMaXN0ZW5lcignaGFzaGNoYW5nZScsIHRocm90dGxlZENoZWNrRWxlbWVudHMsIHRydWUpO1xuXG5cdFx0XHRcdC8vLCAnZnVsbHNjcmVlbmNoYW5nZSdcblx0XHRcdFx0Wydmb2N1cycsICdtb3VzZW92ZXInLCAnY2xpY2snLCAnbG9hZCcsICd0cmFuc2l0aW9uZW5kJywgJ2FuaW1hdGlvbmVuZCddLmZvckVhY2goZnVuY3Rpb24obmFtZSl7XG5cdFx0XHRcdFx0ZG9jdW1lbnRbX2FkZEV2ZW50TGlzdGVuZXJdKG5hbWUsIHRocm90dGxlZENoZWNrRWxlbWVudHMsIHRydWUpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZigoL2QkfF5jLy50ZXN0KGRvY3VtZW50LnJlYWR5U3RhdGUpKSl7XG5cdFx0XHRcdFx0b25sb2FkKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIG9ubG9hZCk7XG5cdFx0XHRcdFx0ZG9jdW1lbnRbX2FkZEV2ZW50TGlzdGVuZXJdKCdET01Db250ZW50TG9hZGVkJywgdGhyb3R0bGVkQ2hlY2tFbGVtZW50cyk7XG5cdFx0XHRcdFx0c2V0VGltZW91dChvbmxvYWQsIDIwMDAwKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKGxhenlzaXplcy5lbGVtZW50cy5sZW5ndGgpe1xuXHRcdFx0XHRcdGNoZWNrRWxlbWVudHMoKTtcblx0XHRcdFx0XHRyQUYuX2xzRmx1c2goKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdHRsZWRDaGVja0VsZW1lbnRzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRjaGVja0VsZW1zOiB0aHJvdHRsZWRDaGVja0VsZW1lbnRzLFxuXHRcdFx0dW52ZWlsOiB1bnZlaWxFbGVtZW50LFxuXHRcdFx0X2FMU0w6IGFsdExvYWRtb2RlU2Nyb2xsTGlzdG5lcixcblx0XHR9O1xuXHR9KSgpO1xuXG5cblx0dmFyIGF1dG9TaXplciA9IChmdW5jdGlvbigpe1xuXHRcdHZhciBhdXRvc2l6ZXNFbGVtcztcblxuXHRcdHZhciBzaXplRWxlbWVudCA9IHJBRkl0KGZ1bmN0aW9uKGVsZW0sIHBhcmVudCwgZXZlbnQsIHdpZHRoKXtcblx0XHRcdHZhciBzb3VyY2VzLCBpLCBsZW47XG5cdFx0XHRlbGVtLl9sYXp5c2l6ZXNXaWR0aCA9IHdpZHRoO1xuXHRcdFx0d2lkdGggKz0gJ3B4JztcblxuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoJ3NpemVzJywgd2lkdGgpO1xuXG5cdFx0XHRpZihyZWdQaWN0dXJlLnRlc3QocGFyZW50Lm5vZGVOYW1lIHx8ICcnKSl7XG5cdFx0XHRcdHNvdXJjZXMgPSBwYXJlbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NvdXJjZScpO1xuXHRcdFx0XHRmb3IoaSA9IDAsIGxlbiA9IHNvdXJjZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspe1xuXHRcdFx0XHRcdHNvdXJjZXNbaV0uc2V0QXR0cmlidXRlKCdzaXplcycsIHdpZHRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZighZXZlbnQuZGV0YWlsLmRhdGFBdHRyKXtcblx0XHRcdFx0dXBkYXRlUG9seWZpbGwoZWxlbSwgZXZlbnQuZGV0YWlsKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHQvKipcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBlbGVtIHtFbGVtZW50fVxuXHRcdCAqIEBwYXJhbSBkYXRhQXR0clxuXHRcdCAqIEBwYXJhbSBbd2lkdGhdIHsgbnVtYmVyIH1cblx0XHQgKi9cblx0XHR2YXIgZ2V0U2l6ZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbSwgZGF0YUF0dHIsIHdpZHRoKXtcblx0XHRcdHZhciBldmVudDtcblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cblx0XHRcdGlmKHBhcmVudCl7XG5cdFx0XHRcdHdpZHRoID0gZ2V0V2lkdGgoZWxlbSwgcGFyZW50LCB3aWR0aCk7XG5cdFx0XHRcdGV2ZW50ID0gdHJpZ2dlckV2ZW50KGVsZW0sICdsYXp5YmVmb3Jlc2l6ZXMnLCB7d2lk
24510dGg6IHdpZHRoLCBkYXRhQXR0cjogISFkYXRhQXR0cn0pO1xuXG5cdFx0XHRcdGlmKCFldmVudC5kZWZhdWx0UHJldmVudGVkKXtcblx0XHRcdFx0XHR3aWR0aCA9IGV2ZW50LmRldGFpbC53aWR0aDtcblxuXHRcdFx0XHRcdGlmKHdpZHRoICYmIHdpZHRoICE9PSBlbGVtLl9sYXp5c2l6ZXNXaWR0aCl7XG5cdFx0XHRcdFx0XHRzaXplRWxlbWVudChlbGVtLCBwYXJlbnQsIGV2ZW50LCB3aWR0aCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHZhciB1cGRhdGVFbGVtZW50c1NpemVzID0gZnVuY3Rpb24oKXtcblx0XHRcdHZhciBpO1xuXHRcdFx0dmFyIGxlbiA9IGF1dG9zaXplc0VsZW1zLmxlbmd0aDtcblx0XHRcdGlmKGxlbil7XG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHRcdGZvcig7IGkgPCBsZW47IGkrKyl7XG5cdFx0XHRcdFx0Z2V0U2l6ZUVsZW1lbnQoYXV0b3NpemVzRWxlbXNbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHZhciBkZWJvdW5jZWRVcGRhdGVFbGVtZW50c1NpemVzID0gZGVib3VuY2UodXBkYXRlRWxlbWVudHNTaXplcyk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0XzogZnVuY3Rpb24oKXtcblx0XHRcdFx0YXV0b3NpemVzRWxlbXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGxhenlTaXplc0NmZy5hdXRvc2l6ZXNDbGFzcyk7XG5cdFx0XHRcdGFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGRlYm91bmNlZFVwZGF0ZUVsZW1lbnRzU2l6ZXMpO1xuXHRcdFx0fSxcblx0XHRcdGNoZWNrRWxlbXM6IGRlYm91bmNlZFVwZGF0ZUVsZW1lbnRzU2l6ZXMsXG5cdFx0XHR1cGRhdGVFbGVtOiBnZXRTaXplRWxlbWVudFxuXHRcdH07XG5cdH0pKCk7XG5cblx0dmFyIGluaXQgPSBmdW5jdGlvbigpe1xuXHRcdGlmKCFpbml0LmkgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSl7XG5cdFx0XHRpbml0LmkgPSB0cnVlO1xuXHRcdFx0YXV0b1NpemVyLl8oKTtcblx0XHRcdGxvYWRlci5fKCk7XG5cdFx0fVxuXHR9O1xuXG5cdHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcblx0XHRpZihsYXp5U2l6ZXNDZmcuaW5pdCl7XG5cdFx0XHRpbml0KCk7XG5cdFx0fVxuXHR9KTtcblxuXHRsYXp5c2l6ZXMgPSB7XG5cdFx0LyoqXG5cdFx0ICogQHR5cGUgeyBMYXp5U2l6ZXNDb25maWdQYXJ0aWFsIH1cblx0XHQgKi9cblx0XHRjZmc6IGxhenlTaXplc0NmZyxcblx0XHRhdXRvU2l6ZXI6IGF1dG9TaXplcixcblx0XHRsb2FkZXI6IGxvYWRlcixcblx0XHRpbml0OiBpbml0LFxuXHRcdHVQOiB1cGRhdGVQb2x5ZmlsbCxcblx0XHRhQzogYWRkQ2xhc3MsXG5cdFx0ckM6IHJlbW92ZUNsYXNzLFxuXHRcdGhDOiBoYXNDbGFzcyxcblx0XHRmaXJlOiB0cmlnZ2VyRXZlbnQsXG5cdFx0Z1c6IGdldFdpZHRoLFxuXHRcdHJBRjogckFGLFxuXHR9O1xuXG5cdHJldHVybiBsYXp5c2l6ZXM7XG59XG4pKTtcbiIsIihmdW5jdGlvbih3aW5kb3csIGZhY3RvcnkpIHtcblx0dmFyIGdsb2JhbEluc3RhbGwgPSBmdW5jdGlvbigpe1xuXHRcdGZhY3Rvcnkod2luZG93LmxhenlTaXplcyk7XG5cdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xhenl1bnZlaWxyZWFkJywgZ2xvYmFsSW5zdGFsbCwgdHJ1ZSk7XG5cdH07XG5cblx0ZmFjdG9yeSA9IGZhY3RvcnkuYmluZChudWxsLCB3aW5kb3csIHdpbmRvdy5kb2N1bWVudCk7XG5cblx0aWYodHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cyl7XG5cdFx0ZmFjdG9yeShyZXF1aXJlKCdsYXp5c2l6ZXMnKSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcblx0XHRkZWZpbmUoWydsYXp5c2l6ZXMnXSwgZmFjdG9yeSk7XG5cdH0gZWxzZSBpZih3aW5kb3cubGF6eVNpemVzKSB7XG5cdFx0Z2xvYmFsSW5zdGFsbCgpO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsYXp5dW52ZWlscmVhZCcsIGdsb2JhbEluc3RhbGwsIHRydWUpO1xuXHR9XG59KHdpbmRvdywgZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCwgbGF6eVNpemVzKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaW1nU3VwcG9ydCA9ICdsb2FkaW5nJyBpbiBIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZTtcblx0dmFyIGlmcmFtZVN1cHBvcnQgPSAnbG9hZGluZycgaW4gSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlO1xuXHR2YXIgaXNDb25maWdTZXQgPSBmYWxzZTtcblx0dmFyIG9sZFByZW1hdHVyZVVudmVpbCA9IGxhenlTaXplcy5wcmVtYXR1cmVVbnZlaWw7XG5cdHZhciBjZmcgPSBsYXp5U2l6ZXMuY2ZnO1xuXHR2YXIgbGlzdGVuZXJNYXAgPSB7XG5cdFx0Zm9jdXM6IDEsXG5cdFx0bW91c2VvdmVyOiAxLFxuXHRcdGNsaWNrOiAxLFxuXHRcdGxvYWQ6IDEsXG5cdFx0dHJhbnNpdGlvbmVuZDogMSxcblx0XHRhbmltYXRpb25lbmQ6IDEsXG5cdFx0c2Nyb2xsOiAxLFxuXHRcdHJlc2l6ZTogMSxcblx0fTtcblxuXHRpZiAoIWNmZy5uYXRpdmVMb2FkaW5nKSB7XG5cdFx0Y2ZnLm5hdGl2ZUxvYWRpbmcgPSB7fTtcblx0fVxuXG5cdGlmICghd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgfHwgIXdpbmRvdy5NdXRhdGlvbk9ic2VydmVyIHx8ICghaW1nU3VwcG9ydCAmJiAhaWZyYW1lU3VwcG9ydCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRmdW5jdGlvbiBkaXNhYmxlRXZlbnRzKCkge1xuXHRcdHZhciBsb2FkZXIgPSBsYXp5U2l6ZXMubG9hZGVyO1xuXHRcdHZhciB0aHJvdHRsZWRDaGVja0VsZW1lbnRzID0gbG9hZGVyLmNoZWNrRWxlbXM7XG5cdFx0dmFyIHJlbW92ZUFMU0wgPSBmdW5jdGlvbigpe1xuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xuXHRcdFx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgbG9hZGVyLl9hTFNMLCB0cnVlKTtcblx0XHRcdH0sIDEwMDApO1xuXHRcdH07XG5cdFx0dmFyIGN1cnJlbnRMaXN0ZW5lck1hcCA9IHR5cGVvZiBjZmcubmF0aXZlTG9hZGluZy5kaXNhYmxlTGlzdGVuZXJzID09ICdvYmplY3QnID9cblx0XHRcdGNmZy5uYXRpdmVMb2FkaW5nLmRpc2FibGVMaXN0ZW5lcnMgOlxuXHRcdFx0bGlzdGVuZXJNYXA7XG5cblx0XHRpZiAoY3VycmVudExpc3RlbmVyTWFwLnNjcm9sbCkge1xuXHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCByZW1vdmVBTFNMKTtcblx0XHRcdHJlbW92ZUFMU0woKTtcblxuXHRcdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRocm90dGxlZENoZWNrRWxlbWVudHMsIHRydWUpO1xuXHRcdH1cblxuXHRcdGlmIChjdXJyZW50TGlzdGVuZXJNYXAucmVzaXplKSB7XG5cdFx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhyb3R0bGVkQ2hlY2tFbGVtZW50cywgdHJ1ZSk7XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmtleXMoY3VycmVudExpc3RlbmVyTWFwKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdGlmIChjdXJyZW50TGlzdGVuZXJNYXBbbmFtZV0pIHtcblx0XHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCB0aHJvdHRsZWRDaGVja0VsZW1lbnRzLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJ1bkNvbmZpZygpIHtcblx0XHRpZiAoaXNDb25maWdTZXQpIHtyZXR1cm47fVxuXHRcdGlzQ29uZmlnU2V0ID0gdHJ1ZTtcblxuXHRcdGlmIChpbWdTdXBwb3J0ICYmIGlmcmFtZVN1cHBvcnQgJiYgY2ZnLm5hdGl2ZUxvYWRpbmcuZGlzYWJsZUxpc3RlbmVycykge1xuXHRcdFx0aWYgKGNmZy5uYXRpdmVMb2FkaW5nLmRpc2FibGVMaXN0ZW5lcnMgPT09IHRydWUpIHtcblx0XHRcdFx0Y2ZnLm5hdGl2ZUxvYWRpbmcuc2V0TG9hZGluZ0F0dHJpYnV0ZSA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGRpc2FibGVFdmVudHMoKTtcblx0XHR9XG5cblx0XHRpZiAoY2ZnLm5hdGl2ZUxvYWRpbmcuc2V0TG9hZGluZ0F0dHJpYnV0ZSkge1xuXHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xhenliZWZvcmV1bnZlaWwnLCBmdW5jdGlvbihlKXtcblx0XHRcdFx0dmFyIGVsZW1lbnQgPSBlLnRhcmdldDtcblxuXHRcdFx0XHRpZiAoJ2xvYWRpbmcnIGluIGVsZW1lbnQgJiYgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKCdsb2FkaW5nJykpIHtcblx0XHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZSgnbG9hZGluZycsICdsYXp5Jyk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdGxhenlTaXplcy5wcmVtYXR1cmVVbnZlaWwgPSBmdW5jdGlvbiBwcmVtYXR1cmVVbnZlaWwoZWxlbWVudCkge1xuXG5cdFx0aWYgKCFpc0NvbmZpZ1NldCkge1xuXHRcdFx0cnVuQ29uZmlnKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCdsb2FkaW5nJyBpbiBlbGVtZW50ICYmXG5cdFx0XHQoY2ZnLm5hdGl2ZUxvYWRpbmcuc2V0TG9hZGluZ0F0dHJpYnV0ZSB8fCBlbGVtZW50LmdldEF0dHJpYnV0ZSgnbG9hZGluZycpKSAmJlxuXHRcdFx0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXNpemVzJykgIT0gJ2F1dG8nIHx8IGVsZW1lbnQub2Zmc2V0V2lkdGgpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAob2xkUHJlbWF0dXJlVW52ZWlsKSB7XG5cdFx0XHRyZXR1cm4gb2xkUHJlbWF0dXJlVW52ZWlsKGVsZW1lbnQpO1xuXHRcdH1cblx0fTtcblxufSkpO1xuIl19
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.