PageSourceSearch

https://pepingen.be/modules/custom/ausy_oh/libraries/vue/app/opening-hours-status-app.js?v=1

js pepingen.be collected 2026-10-02 19:19:44 UTC 1,777,501 bytes, 13,835 lines download raw bytes

vendor: 87 bytes, lines 1-4
1/******/ (() => { // webpackBootstrap
2/******/ 	var __webpack_modules__ = ({
3
4/***/ "./
4app/utils/api.js":
5/*!**************************!*\
6  !*** ./app/utils/api.js ***!
7  \**************************/
8/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
9
10"use strict";
11
12
13var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
14Object.defineProperty(exports, "__esModule", ({
15  value: true
16}));
17exports["default"] = void 0;
18var _axios = _interopRequireDefault(__webpack_require__(/*! axios */ "./node_modules/axios/index.js"));
19var _drupalSettings = drupalSettings,
20  openingHours = _drupalSettings.openingHours,
21  path = _drupalSettings.path;
22var _openingHours$apiBase = openingHours.apiBaseUrl,
23  apiBaseUrl = _openingHours$apiBase === void 0 ? null : _openingHours$apiBase;
24var _path$pathPrefix = path.pathPrefix,
25  pathPrefix = _path$pathPrefix === void 0 ? "" : _path$pathPrefix;
26var _default = exports["default"] = function _default() {
27  return _axios.default.create({
28    baseURL: "".concat(apiBaseUrl || window.location.origin, "/").concat(pathPrefix, "jsonapi"),
29    headers: {
30      'Accept': 'application/json',
31      'Content-Type': 'application/json'
32    }
33  });
34};
35
36/***/ }),
37
vendor: 342 bytes, lines 38-47
38/***/ "./node_modules/axios/index.js":
39/*!*************************************!*\
40  !*** ./node_modules/axios/index.js ***!
41  \*************************************/
42/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
43
44module.exports = __webpack_require__(/*! ./lib/axios */ "./node_modules/axios/lib/axios.js");
45
46/***/ }),
47
vendor: 6,886 bytes, lines 48-227
48/***/ "./node_modules/axios/lib/adapters/xhr.js":
49/*!************************************************!*\
50  !*** ./node_modules/axios/lib/adapters/xhr.js ***!
51  \************************************************/
52/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
53
54"use strict";
55
56
57var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
58var settle = __webpack_require__(/*! ./../core/settle */ "./node_modules/axios/lib/core/settle.js");
59var cookies = __webpack_require__(/*! ./../helpers/cookies */ "./node_modules/axios/lib/helpers/cookies.js");
60var buildURL = __webpack_require__(/*! ./../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js");
61var buildFullPath = __webpack_require__(/*! ../core/buildFullPath */ "./node_modules/axios/lib/core/buildFullPath.js");
62var parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ "./node_modules/axios/lib/helpers/parseHeaders.js");
63var isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ "./node_modules/axios/lib/helpers/isURLSameOrigin.js");
64var createError = __webpack_require__(/*! ../core/createError */ "./node_modules/axios/lib/core/createError.js");
65module.exports = function xhrAdapter(config) {
66  return new Promise(function dispatchXhrRequest(resolve, reject) {
67    var requestData = config.data;
68    var requestHeaders = config.headers;
69    var responseType = config.responseType;
70    if (utils.isFormData(requestData)) {
71      delete requestHeaders['Content-Type']; // Let the browser set it
72    }
73    var request = new XMLHttpRequest();
74
75    // HTTP basic authentication
76    if (config.auth) {
77      var username = config.auth.username || '';
78      var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';
79      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
80    }
81    var fullPath = buildFullPath(config.baseURL, config.url);
82    request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);
83
84    // Set the request timeout in MS
85    request.timeout = config.timeout;
86    function onloadend() {
87      if (!request) {
88        return;
89      }
90      // Prepare the response
91      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
92      var responseData = !responseType || responseType === 'text' || responseType === 'json' ? request.responseText : request.response;
93      var response = {
94        data: responseData,
95        status: request.status,
96        statusText: request.statusText,
97        headers: responseHeaders,
98        config: config,
99        request: request
100      };
101      settle(resolve, reject, response);
102
103      // Clean up request
104      request = null;
105    }
106    if ('onloadend' in request) {
107      // Use onloadend if available
108      request.onloadend = onloadend;
109    } else {
110      // Listen for ready state to emulate onloadend
111      request.onreadystatechange = function handleLoad() {
112        if (!request || request.readyState !== 4) {
113          return;
114        }
115
116        // The request errored out and we didn't get a response, this will be
117        // handled by onerror instead
118        // With one exception: request that using file: protocol, most browsers
119        // will return status as 0 even though it's a successful request
120        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
121          return;
122        }
123        // readystate handler is calling before onerror or ontimeout handlers,
124        // so we should call onloadend on the next 'tick'
125        setTimeout(onloadend);
126      };
127    }
128
129    // Handle browser request cancellation (as opposed to a manual cancellation)
130    request.onabort = function handleAbort() {
131      if (!request) {
132        return;
133      }
134      reject(createError('Request aborted', config, 'ECONNABORTED', request));
135
136      // Clean up request
137      request = null;
138    };
139
140    // Handle low level network errors
141    request.onerror = function handleError() {
142      // Real errors are hidden from us by the browser
143      // onerror should only fire if it's a network error
144      reject(createError('Network Error', config, null, request));
145
146      // Clean up request
147      request = null;
148    };
149
150    // Handle timeout
151    request.ontimeout = function handleTimeout() {
152      var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';
153      if (config.timeoutErrorMessage) {
154        timeoutErrorMessage = config.timeoutErrorMessage;
155      }
156      reject(createError(timeoutErrorMessage, config, config.transitional && config.transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED', request));
157
158      // Clean up request
159      request = null;
160    };
161
162    // Add xsrf header
163    // This is only done if running in a standard browser environment.
164    // Specifically not if we're in a web worker, or react-native.
165    if (utils.isStandardBrowserEnv()) {
166      // Add xsrf header
167      var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? cookies.read(config.xsrfCookieName) : undefined;
168      if (xsrfValue) {
169        requestHeaders[config.xsrfHeaderName] = xsrfValue;
170      }
171    }
172
173    // Add headers to the request
174    if ('setRequestHeader' in request) {
175      utils.forEach(requestHeaders, function setRequestHeader(val, key) {
176        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
177          // Remove Content-Type if data is undefined
178          delete requestHeaders[key];
179        } else {
180          // Otherwise add header to the request
181          request.setRequestHeader(key, val);
182        }
183      });
184    }
185
186    // Add withCredentials to request if needed
187    if (!utils.isUndefined(config.withCredentials)) {
188      request.withCredentials = !!config.withCredentials;
189    }
190
191    // Add responseType to request if needed
192    if (responseType && responseType !== 'json') {
193      request.responseType = config.responseType;
194    }
195
196    // Handle progress if needed
197    if (typeof config.onDownloadProgress === 'function') {
198      request.addEventListener('progress', config.onDownloadProgress);
199    }
200
201    // Not all browsers support upload events
202    if (typeof config.onUploadProgress === 'function' && request.upload) {
203      request.upload.addEventListener('progress', config.onUploadProgress);
204    }
205    if (config.cancelToken) {
206      // Handle cancellation
207      config.cancelToken.promise.then(function onCanceled(cancel) {
208        if (!request) {
209          return;
210        }
211        request.abort();
212        reject(cancel);
213        // Clean up request
214        request = null;
215      });
216    }
217    if (!requestData) {
218      requestData = null;
219    }
220
221    // Send the request
222    request.send(requestData);
223  });
224};
225
226/***/ }),
227
vendor: 2,380 bytes, lines 228-291
228/***/ "./node_modules/axios/lib/axios.js":
229/*!*****************************************!*\
230  !*** ./node_modules/axios/lib/axios.js ***!
231  \*****************************************/
232/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
233
234"use strict";
235
236
237var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js");
238var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js");
239var Axios = __webpack_require__(/*! ./core/Axios */ "./node_modules/axios/lib/core/Axios.js");
240var mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js");
241var defaults = __webpack_require__(/*! ./defaults */ "./node_modules/axios/lib/defaults.js");
242
243/**
244 * Create an instance of Axios
245 *
246 * @param {Object} defaultConfig The default config for the instance
247 * @return {Axios} A new instance of Axios
248 */
249function createInstance(defaultConfig) {
250  var context = new Axios(defaultConfig);
251  var instance = bind(Axios.prototype.request, context);
252
253  // Copy axios.prototype to instance
254  utils.extend(instance, Axios.prototype, context);
255
256  // Copy context to instance
257  utils.extend(instance, context);
258  return instance;
259}
260
261// Create the default instance to be exported
262var axios = createInstance(defaults);
263
264// Expose Axios class to allow class inheritance
265axios.Axios = Axios;
266
267// Factory for creating new instances
268axios.create = function create(instanceConfig) {
269  return createInstance(mergeConfig(axios.defaults, instanceConfig));
270};
271
272// Expose Cancel & CancelToken
273axios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js");
274axios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ "./node_modules/axios/lib/cancel/CancelToken.js");
275axios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js");
276
277// Expose all/spread
278axios.all = function all(promises) {
279  return Promise.all(promises);
280};
281axios.spread = __webpack_require__(/*! ./helpers/spread */ "./node_modules/axios/lib/helpers/spread.js");
282
283// Expose isAxiosError
284axios.isAxiosError = __webpack_require__(/*! ./helpers/isAxiosError */ "./node_modules/axios/lib/helpers/isAxiosError.js");
285module.exports = axios;
286
287// Allow use of default import syntax in TypeScript
288module.exports["default"] = axios;
289
290/***/ }),
291
vendor: 632 bytes, lines 292-317
292/***/ "./node_modules/axios/lib/cancel/Cancel.js":
293/*!*************************************************!*\
294  !*** ./node_modules/axios/lib/cancel/Cancel.js ***!
295  \*************************************************/
296/***/ ((module) => {
297
298"use strict";
299
300
301/**
302 * A `Cancel` is an object that is thrown when an operation is canceled.
303 *
304 * @class
305 * @param {string=} message The message.
306 */
307function Cancel(message) {
308  this.message = message;
309}
310Cancel.prototype.toString = function toString() {
311  return 'Cancel' + (this.message ? ': ' + this.message : '');
312};
313Cancel.prototype.__CANCEL__ = true;
314module.exports = Cancel;
315
316/***/ }),
317
vendor: 1,614 bytes, lines 318-380
318/***/ "./node_modules/axios/lib/cancel/CancelToken.js":
319/*!******************************************************!*\
320  !*** ./node_modules/axios/lib/cancel/CancelToken.js ***!
321  \******************************************************/
322/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
323
324"use strict";
325
326
327var Cancel = __webpack_require__(/*! ./Cancel */ "./node_modules/axios/lib/cancel/Cancel.js");
328
329/**
330 * A `CancelToken` is an object that can be used to request cancellation of an operation.
331 *
332 * @class
333 * @param {Function} executor The executor function.
334 */
335function CancelToken(executor) {
336  if (typeof executor !== 'function') {
337    throw new TypeError('executor must be a function.');
338  }
339  var resolvePromise;
340  this.promise = new Promise(function promiseExecutor(resolve) {
341    resolvePromise = resolve;
342  });
343  var token = this;
344  executor(function cancel(message) {
345    if (token.reason) {
346      // Cancellation has already been requested
347      return;
348    }
349    token.reason = new Cancel(message);
350    resolvePromise(token.reason);
351  });
352}
353
354/**
355 * Throws a `Cancel` if cancellation has been requested.
356 */
357CancelToken.prototype.throwIfRequested = function throwIfRequested() {
358  if (this.reason) {
359    throw this.reason;
360  }
361};
362
363/**
364 * Returns an object that contains a new `CancelToken` and a function that, when called,
365 * cancels the `CancelToken`.
366 */
367CancelToken.source = function source() {
368  var cancel;
369  var token = new CancelToken(function executor(c) {
370    cancel = c;
371  });
372  return {
373    token: token,
374    cancel: cancel
375  };
376};
377module.exports = CancelToken;
378
379/***/ }),
380
vendor: 360 bytes, lines 381-395
381/***/ "./node_modules/axios/lib/cancel/isCancel.js":
382/*!***************************************************!*\
383  !*** ./node_modules/axios/lib/cancel/isCancel.js ***!
384  \***************************************************/
385/***/ ((module) => {
386
387"use strict";
388
389
390module.exports = function isCancel(value) {
391  return !!(value && value.__CANCEL__);
392};
393
394/***/ }),
395
vendor: 4,900 bytes, lines 396-533
396/***/ "./node_modules/axios/lib/core/Axios.js":
397/*!**********************************************!*\
398  !*** ./node_modules/axios/lib/core/Axios.js ***!
399  \**********************************************/
400/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
401
402"use strict";
403
404
405var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
406var buildURL = __webpack_require__(/*! ../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js");
407var InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ "./node_modules/axios/lib/core/InterceptorManager.js");
408var dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ "./node_modules/axios/lib/core/dispatchRequest.js");
409var mergeConfig = __webpack_require__(/*! ./mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js");
410var validator = __webpack_require__(/*! ../helpers/validator */ "./node_modules/axios/lib/helpers/validator.js");
411var validators = validator.validators;
412/**
413 * Create a new instance of Axios
414 *
415 * @param {Object} instanceConfig The default config for the instance
416 */
417function Axios(instanceConfig) {
418  this.defaults = instanceConfig;
419  this.interceptors = {
420    request: new InterceptorManager(),
421    response: new InterceptorManager()
422  };
423}
424
425/**
426 * Dispatch a request
427 *
428 * @param {Object} config The config specific for this request (merged with this.defaults)
429 */
430Axios.prototype.request = function request(config) {
431  /*eslint no-param-reassign:0*/
432  // Allow for axios('example/url'[, config]) a la fetch API
433  if (typeof config === 'string') {
434    config = arguments[1] || {};
435    config.url = arguments[0];
436  } else {
437    config = config || {};
438  }
439  config = mergeConfig(this.defaults, config);
440
441  // Set config.method
442  if (config.method) {
443    config.method = config.method.toLowerCase();
444  } else if (this.defaults.method) {
445    config.method = this.defaults.method.toLowerCase();
446  } else {
447    config.method = 'get';
448  }
449  var transitional = config.transitional;
450  if (transitional !== undefined) {
451    validator.assertOptions(transitional, {
452      silentJSONParsing: validators.transitional(validators.boolean, '1.0.0'),
453      forcedJSONParsing: validators.transitional(validators.boolean, '1.0.0'),
454      clarifyTimeoutError: validators.transitional(validators.boolean, '1.0.0')
455    }, false);
456  }
457
458  // filter out skipped interceptors
459  var requestInterceptorChain = [];
460  var synchronousRequestInterceptors = true;
461  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
462    if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {
463      return;
464    }
465    synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
466    requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
467  });
468  var responseInterceptorChain = [];
469  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
470    responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
471  });
472  var promise;
473  if (!synchronousRequestInterceptors) {
474    var chain = [dispatchRequest, undefined];
475    Array.prototype.unshift.apply(chain, requestInterceptorChain);
476    chain = chain.concat(responseInterceptorChain);
477    promise = Promise.resolve(config);
478    while (chain.length) {
479      promise = promise.then(chain.shift(), chain.shift());
480    }
481    return promise;
482  }
483  var newConfig = config;
484  while (requestInterceptorChain.length) {
485    var onFulfilled = requestInterceptorChain.shift();
486    var onRejected = requestInterceptorChain.shift();
487    try {
488      newConfig = onFulfilled(newConfig);
489    } catch (error) {
490      onRejected(error);
491      break;
492    }
493  }
494  try {
495    promise = dispatchRequest(newConfig);
496  } catch (error) {
497    return Promise.reject(error);
498  }
499  while (responseInterceptorChain.length) {
500    promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());
501  }
502  return promise;
503};
504Axios.prototype.getUri = function getUri(config) {
505  config = mergeConfig(this.defaults, config);
506  return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, '');
507};
508
509// Provide aliases for supported request methods
510utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
511  /*eslint func-names:0*/
512  Axios.prototype[method] = function (url, config) {
513    return this.request(mergeConfig(config || {}, {
514      method: method,
515      url: url,
516      data: (config || {}).data
517    }));
518  };
519});
520utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
521  /*eslint func-names:0*/
522  Axios.prototype[method] = function (url, data, config) {
523    return this.request(mergeConfig(config || {}, {
524      method: method,
525      url: url,
526      data: data
527    }));
528  };
529});
530module.exports = Axios;
531
532/***/ }),
533
vendor: 1,751 bytes, lines 534-595
534/***/ "./node_modules/axios/lib/core/InterceptorManager.js":
535/*!***********************************************************!*\
536  !*** ./node_modules/axios/lib/core/InterceptorManager.js ***!
537  \***********************************************************/
538/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
539
540"use strict";
541
542
543var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
544function InterceptorManager() {
545  this.handlers = [];
546}
547
548/**
549 * Add a new interceptor to the stack
550 *
551 * @param {Function} fulfilled The function to handle `then` for a `Promise`
552 * @param {Function} rejected The function to handle `reject` for a `Promise`
553 *
554 * @return {Number} An ID used to remove interceptor later
555 */
556InterceptorManager.prototype.use = function use(fulfilled, rejected, options) {
557  this.handlers.push({
558    fulfilled: fulfilled,
559    rejected: rejected,
560    synchronous: options ? options.synchronous : false,
561    runWhen: options ? options.runWhen : null
562  });
563  return this.handlers.length - 1;
564};
565
566/**
567 * Remove an interceptor from the stack
568 *
569 * @param {Number} id The ID that was returned by `use`
570 */
571InterceptorManager.prototype.eject = function eject(id) {
572  if (this.handlers[id]) {
573    this.handlers[id] = null;
574  }
575};
576
577/**
578 * Iterate over all the registered interceptors
579 *
580 * This method is particularly useful for skipping over any
581 * interceptors that may have become `null` calling `eject`.
582 *
583 * @param {Function} fn The function to call for each interceptor
584 */
585InterceptorManager.prototype.forEach = function forEach(fn) {
586  utils.forEach(this.handlers, function forEachHandler(h) {
587    if (h !== null) {
588      fn(h);
589    }
590  });
591};
592module.exports = InterceptorManager;
593
594/***/ }),
595
vendor: 1,148 bytes, lines 596-625
596/***/ "./node_modules/axios/lib/core/buildFullPath.js":
597/*!******************************************************!*\
598  !*** ./node_modules/axios/lib/core/buildFullPath.js ***!
599  \******************************************************/
600/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
601
602"use strict";
603
604
605var isAbsoluteURL = __webpack_require__(/*! ../helpers/isAbsoluteURL */ "./node_modules/axios/lib/helpers/isAbsoluteURL.js");
606var combineURLs = __webpack_require__(/*! ../helpers/combineURLs */ "./node_modules/axios/lib/helpers/combineURLs.js");
607
608/**
609 * Creates a new URL by combining the baseURL with the requestedURL,
610 * only when the requestedURL is not already an absolute URL.
611 * If the requestURL is absolute, this function returns the requestedURL untouched.
612 *
613 * @param {string} baseURL The base URL
614 * @param {string} requestedURL Absolute or relative URL to combine
615 * @returns {string} The combined full path
616 */
617module.exports = function buildFullPath(baseURL, requestedURL) {
618  if (baseURL && !isAbsoluteURL(requestedURL)) {
619    return combineURLs(baseURL, requestedURL);
620  }
621  return requestedURL;
622};
623
624/***/ }),
625
vendor: 999 bytes, lines 626-653
626/***/ "./node_modules/axios/lib/core/createError.js":
627/*!****************************************************!*\
628  !*** ./node_modules/axios/lib/core/createError.js ***!
629  \****************************************************/
630/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
631
632"use strict";
633
634
635var enhanceError = __webpack_require__(/*! ./enhanceError */ "./node_modules/axios/lib/core/enhanceError.js");
636
637/**
638 * Create an Error with the specified message, config, error code, request and response.
639 *
640 * @param {string} message The error message.
641 * @param {Object} config The config.
642 * @param {string} [code] The error code (for example, 'ECONNABORTED').
643 * @param {Object} [request] The request.
644 * @param {Object} [response] The response.
645 * @returns {Error} The created error.
646 */
647module.exports = function createError(message, config, code, request, response) {
648  var error = new Error(message);
649  return enhanceError(error, config, code, request, response);
650};
651
652/***/ }),
653
vendor: 2,419 bytes, lines 654-718
654/***/ "./node_modules/axios/lib/core/dispatchRequest.js":
655/*!********************************************************!*\
656  !*** ./node_modules/axios/lib/core/dispatchRequest.js ***!
657  \********************************************************/
658/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
659
660"use strict";
661
662
663var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
664var transformData = __webpack_require__(/*! ./transformData */ "./node_modules/axios/lib/core/transformData.js");
665var isCancel = __webpack_require__(/*! ../cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js");
666var defaults = __webpack_require__(/*! ../defaults */ "./node_modules/axios/lib/defaults.js");
667
668/**
669 * Throws a `Cancel` if cancellation has been requested.
670 */
671function throwIfCancellationRequested(config) {
672  if (config.cancelToken) {
673    config.cancelToken.throwIfRequested();
674  }
675}
676
677/**
678 * Dispatch a request to the server using the configured adapter.
679 *
680 * @param {object} config The config that is to be used for the request
681 * @returns {Promise} The Promise to be fulfilled
682 */
683module.exports = function dispatchRequest(config) {
684  throwIfCancellationRequested(config);
685
686  // Ensure headers exist
687  config.headers = config.headers || {};
688
689  // Transform request data
690  config.data = transformData.call(config, config.data, config.headers, config.transformRequest);
691
692  // Flatten headers
693  config.headers = utils.merge(config.headers.common || {}, config.headers[config.method] || {}, config.headers);
694  utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], function cleanHeaderConfig(method) {
695    delete config.headers[method];
696  });
697  var adapter = config.adapter || defaults.adapter;
698  return adapter(config).then(function onAdapterResolution(response) {
699    throwIfCancellationRequested(config);
700
701    // Transform response data
702    response.data = transformData.call(config, response.data, response.headers, config.transformResponse);
703    return response;
704  }, function onAdapterRejection(reason) {
705    if (!isCancel(reason)) {
706      throwIfCancellationRequested(config);
707
708      // Transform response data
709      if (reason && reason.response) {
710        reason.response.data = transformData.call(config, reason.response.data, reason.response.headers, config.transformResponse);
711      }
712    }
713    return Promise.reject(reason);
714  });
715};
716
717/***/ }),
718
vendor: 1,313 bytes, lines 719-768
719/***/ "./node_modules/axios/lib/core/enhanceError.js":
720/*!*****************************************************!*\
721  !*** ./node_modules/axios/lib/core/enhanceError.js ***!
722  \*****************************************************/
723/***/ ((module) => {
724
725"use strict";
726
727
728/**
729 * Update an Error with the specified config, error code, and response.
730 *
731 * @param {Error} error The error to update.
732 * @param {Object} config The config.
733 * @param {string} [code] The error code (for example, 'ECONNABORTED').
734 * @param {Object} [request] The request.
735 * @param {Object} [response] The response.
736 * @returns {Error} The error.
737 */
738module.exports = function enhanceError(error, config, code, request, response) {
739  error.config = config;
740  if (code) {
741    error.code = code;
742  }
743  error.request = request;
744  error.response = response;
745  error.isAxiosError = true;
746  error.toJSON = function toJSON() {
747    return {
748      // Standard
749      message: this.message,
750      name: this.name,
751      // Microsoft
752      description: this.description,
753      number: this.number,
754      // Mozilla
755      fileName: this.fileName,
756      lineNumber: this.lineNumber,
757      columnNumber: this.columnNumber,
758      stack: this.stack,
759      // Axios
760      config: this.config,
761      code: this.code
762    };
763  };
764  return error;
765};
766
767/***/ }),
768
vendor: 3,188 bytes, lines 769-842
769/***/ "./node_modules/axios/lib/core/mergeConfig.js":
770/*!****************************************************!*\
771  !*** ./node_modules/axios/lib/core/mergeConfig.js ***!
772  \****************************************************/
773/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
774
775"use strict";
776
777
778var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js");
779
780/**
781 * Config-specific merge-function which creates a new config-object
782 * by merging two configuration objects together.
783 *
784 * @param {Object} config1
785 * @param {Object} config2
786 * @returns {Object} New object resulting from merging config2 to config1
787 */
788module.exports = function mergeConfig(config1, config2) {
789  // eslint-disable-next-line no-param-reassign
790  config2 = config2 || {};
791  var config = {};
792  var valueFromConfig2Keys = ['url', 'method', 'data'];
793  var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];
794  var defaultToConfig2Keys = ['baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer', 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName', 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress', 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent', 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'];
795  var directMergeKeys = ['validateStatus'];
796  function getMergedValue(target, source) {
797    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {
798      return utils.merge(target, source);
799    } else if (utils.isPlainObject(source)) {
800      return utils.merge({}, source);
801    } else if (utils.isArray(source)) {
802      return source.slice();
803    }
804    return source;
805  }
806  function mergeDeepProperties(prop) {
807    if (!utils.isUndefined(config2[prop])) {
808      config[prop] = getMergedValue(config1[prop], config2[prop]);
809    } else if (!utils.isUndefined(config1[prop])) {
810      config[prop] = getMergedValue(undefined, config1[prop]);
811    }
812  }
813  utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {
814    if (!utils.isUndefined(config2[prop])) {
815      config[prop] = getMergedValue(undefined, config2[prop]);
816    }
817  });
818  utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);
819  utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {
820    if (!utils.isUndefined(config2[prop])) {
821      config[prop] = getMergedValue(undefined, config2[prop]);
822    } else if (!utils.isUndefined(config1[prop])) {
823      config[prop] = getMergedValue(undefined, config1[prop]);
824    }
825  });
826  utils.forEach(directMergeKeys, function merge(prop) {
827    if (prop in config2) {
828      config[prop] = getMergedValue(config1[prop], config2[prop]);
829    } else if (prop in config1) {
830      config[prop] = getMergedValue(undefined, config1[prop]);
831    }
832  });
833  var axiosKeys = valueFromConfig2Keys.concat(mergeDeepPropertiesKeys).concat(defaultToConfig2Keys).concat(directMergeKeys);
834  var otherKeys = Object.keys(config1).concat(Object.keys(config2)).filter(function filterAxiosKeys(key) {
835    return axiosKeys.indexOf(key) === -1;
836  });
837  utils.forEach(otherKeys, mergeDeepProperties);
838  return config;
839};
840
841/***/ }),
842
vendor: 1,023 bytes, lines 843-871
843/***/ "./node_modules/axios/lib/core/settle.js":
844/*!***********************************************!*\
845  !*** ./node_modules/axios/lib/core/settle.js ***!
846  \***********************************************/
847/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
848
849"use strict";
850
851
852var createError = __webpack_require__(/*! ./createError */ "./node_modules/axios/lib/core/createError.js");
853
854/**
855 * Resolve or reject a Promise based on response status.
856 *
857 * @param {Function} resolve A function that resolves the promise.
858 * @param {Function} reject A function that rejects the promise.
859 * @param {object} response The response.
860 */
861module.exports = function settle(resolve, reject, response) {
862  var validateStatus = response.config.validateStatus;
863  if (!response.status || !validateStatus || validateStatus(response.status)) {
864    resolve(response);
865  } else {
866    reject(createError('Request failed with status code ' + response.status, response.config, null, response.request, response));
867  }
868};
869
870/***/ }),
871
vendor: 1,064 bytes, lines 872-902
872/***/ "./node_modules/axios/lib/core/transformData.js":
873/*!******************************************************!*\
874  !*** ./node_modules/axios/lib/core/transformData.js ***!
875  \******************************************************/
876/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
877
878"use strict";
879
880
881var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
882var defaults = __webpack_require__(/*! ./../defaults */ "./node_modules/axios/lib/defaults.js");
883
884/**
885 * Transform the data for a request or a response
886 *
887 * @param {Object|String} data The data to be transformed
888 * @param {Array} headers The headers for the request or response
889 * @param {Array|Function} fns A single function or Array of functions
890 * @returns {*} The resulting transformed data
891 */
892module.exports = function transformData(data, headers, fns) {
893  var context = this || defaults;
894  /*eslint no-param-reassign:0*/
895  utils.forEach(fns, function transform(fn) {
896    data = fn.call(context, data, headers);
897  });
898  return data;
899};
900
901/***/ }),
902
vendor: 4,087 bytes, lines 903-1019
903/***/ "./node_modules/axios/lib/defaults.js":
904/*!********************************************!*\
905  !*** ./node_modules/axios/lib/defaults.js ***!
906  \********************************************/
907/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
908
909"use strict";
910
911
912var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js");
913var normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ "./node_modules/axios/lib/helpers/normalizeHeaderName.js");
914var enhanceError = __webpack_require__(/*! ./core/enhanceError */ "./node_modules/axios/lib/core/enhanceError.js");
915var DEFAULT_CONTENT_TYPE = {
916  'Content-Type': 'application/x-www-form-urlencoded'
917};
918function setContentTypeIfUnset(headers, value) {
919  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
920    headers['Content-Type'] = value;
921  }
922}
923function getDefaultAdapter() {
924  var adapter;
925  if (typeof XMLHttpRequest !== 'undefined') {
926    // For browsers use XHR adapter
927    adapter = __webpack_require__(/*! ./adapters/xhr */ "./node_modules/axios/lib/adapters/xhr.js");
928  } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
929    // For node use HTTP adapter
930    adapter = __webpack_require__(/*! ./adapters/http */ "./node_modules/axios/lib/adapters/xhr.js");
931  }
932  return adapter;
933}
934function stringifySafely(rawValue, parser, encoder) {
935  if (utils.isString(rawValue)) {
936    try {
937      (parser || JSON.parse)(rawValue);
938      return utils.trim(rawValue);
939    } catch (e) {
940      if (e.name !== 'SyntaxError') {
941        throw e;
942      }
943    }
944  }
945  return (encoder || JSON.stringify)(rawValue);
946}
947var defaults = {
948  transitional: {
949    silentJSONParsing: true,
950    forcedJSONParsing: true,
951    clarifyTimeoutError: false
952  },
953  adapter: getDefaultAdapter(),
954  transformRequest: [function transformRequest(data, headers) {
955    normalizeHeaderName(headers, 'Accept');
956    normalizeHeaderName(headers, 'Content-Type');
957    if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {
958      return data;
959    }
960    if (utils.isArrayBufferView(data)) {
961      return data.buffer;
962    }
963    if (utils.isURLSearchParams(data)) {
964      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
965      return data.toString();
966    }
967    if (utils.isObject(data) || headers && headers['Content-Type'] === 'application/json') {
968      setContentTypeIfUnset(headers, 'application/json');
969      return stringifySafely(data);
970    }
971    return data;
972  }],
973  transformResponse: [function transformResponse(data) {
974    var transitional = this.transitional;
975    var silentJSONParsing = transitional && transitional.silentJSONParsing;
976    var forcedJSONParsing = transitional && transitional.forcedJSONParsing;
977    var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';
978    if (strictJSONParsing || forcedJSONParsing && utils.isString(data) && data.length) {
979      try {
980        return JSON.parse(data);
981      } catch (e) {
982        if (strictJSONParsing) {
983          if (e.name === 'SyntaxError') {
984            throw enhanceError(e, this, 'E_JSON_PARSE');
985          }
986          throw e;
987        }
988      }
989    }
990    return data;
991  }],
992  /**
993   * A timeout in milliseconds to abort a request. If set to 0 (default) a
994   * timeout is not created.
995   */
996  timeout: 0,
997  xsrfCookieName: 'XSRF-TOKEN',
998  xsrfHeaderName: 'X-XSRF-TOKEN',
999  maxContentLength: -1,
1000  maxBodyLength: -1,
1001  validateStatus: function validateStatus(status) {
1002    return status >= 200 && status < 300;
1003  }
1004};
1005defaults.headers = {
1006  common: {
1007    'Accept': 'application/json, text/plain, */*'
1008  }
1009};
1010utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
1011  defaults.headers[method] = {};
1012});
1013utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
1014  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
1015});
1016module.exports = defaults;
1017
1018/***/ }),
1019
vendor: 502 bytes, lines 1020-1040
1020/***/ "./node_modules/axios/lib/helpers/bind.js":
1021/*!************************************************!*\
1022  !*** ./node_modules/axios/lib/helpers/bind.js ***!
1023  \************************************************/
1024/***/ ((module) => {
1025
1026"use strict";
1027
1028
1029module.exports = function bind(fn, thisArg) {
1030  return function wrap() {
1031    var args = new Array(arguments.length);
1032    for (var i = 0; i < args.length; i++) {
1033      args[i] = arguments[i];
1034    }
1035    return fn.apply(thisArg, args);
1036  };
1037};
1038
1039/***/ }),
1040
vendor: 1,967 bytes, lines 1041-1105
1041/***/ "./node_modules/axios/lib/helpers/buildURL.js":
1042/*!****************************************************!*\
1043  !*** ./node_modules/axios/lib/helpers/buildURL.js ***!
1044  \****************************************************/
1045/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1046
1047"use strict";
1048
1049
1050var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
1051function encode(val) {
1052  return encodeURIComponent(val).replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');
1053}
1054
1055/**
1056 * Build a URL by appending params to the end
1057 *
1058 * @param {string} url The base of the url (e.g., http://www.google.com)
1059 * @param {object} [params] The params to be appended
1060 * @returns {string} The formatted url
1061 */
1062module.exports = function buildURL(url, params, paramsSerializer) {
1063  /*eslint no-param-reassign:0*/
1064  if (!params) {
1065    return url;
1066  }
1067  var serializedParams;
1068  if (paramsSerializer) {
1069    serializedParams = paramsSerializer(params);
1070  } else if (utils.isURLSearchParams(params)) {
1071    serializedParams = params.toString();
1072  } else {
1073    var parts = [];
1074    utils.forEach(params, function serialize(val, key) {
1075      if (val === null || typeof val === 'undefined') {
1076        return;
1077      }
1078      if (utils.isArray(val)) {
1079        key = key + '[]';
1080      } else {
1081        val = [val];
1082      }
1083      utils.forEach(val, function parseValue(v) {
1084        if (utils.isDate(v)) {
1085          v = v.toISOString();
1086        } else if (utils.isObject(v)) {
1087          v = JSON.stringify(v);
1088        }
1089        parts.push(encode(key) + '=' + encode(v));
1090      });
1091    });
1092    serializedParams = parts.join('&');
1093  }
1094  if (serializedParams) {
1095    var hashmarkIndex = url.indexOf('#');
1096    if (hashmarkIndex !== -1) {
1097      url = url.slice(0, hashmarkIndex);
1098    }
1099    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
1100  }
1101  return url;
1102};
1103
1104/***/ }),
1105
vendor: 646 bytes, lines 1106-1127
1106/***/ "./node_modules/axios/lib/helpers/combineURLs.js":
1107/*!*******************************************************!*\
1108  !*** ./node_modules/axios/lib/helpers/combineURLs.js ***!
1109  \*******************************************************/
1110/***/ ((module) => {
1111
1112"use strict";
1113
1114
1115/**
1116 * Creates a new URL by combining the specified URLs
1117 *
1118 * @param {string} baseURL The base URL
1119 * @param {string} relativeURL The relative URL
1120 * @returns {string} The combined URL
1121 */
1122module.exports = function combineURLs(baseURL, relativeURL) {
1123  return relativeURL ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') : baseURL;
1124};
1125
1126/***/ }),
1127
vendor: 1,637 bytes, lines 1128-1180
1128/***/ "./node_modules/axios/lib/helpers/cookies.js":
1129/*!***************************************************!*\
1130  !*** ./node_modules/axios/lib/helpers/cookies.js ***!
1131  \***************************************************/
1132/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1133
1134"use strict";
1135
1136
1137var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
1138module.exports = utils.isStandardBrowserEnv() ?
1139// Standard browser envs support document.cookie
1140function standardBrowserEnv() {
1141  return {
1142    write: function write(name, value, expires, path, domain, secure) {
1143      var cookie = [];
1144      cookie.push(name + '=' + encodeURIComponent(value));
1145      if (utils.isNumber(expires)) {
1146        cookie.push('expires=' + new Date(expires).toGMTString());
1147      }
1148      if (utils.isString(path)) {
1149        cookie.push('path=' + path);
1150      }
1151      if (utils.isString(domain)) {
1152        cookie.push('domain=' + domain);
1153      }
1154      if (secure === true) {
1155        cookie.push('secure');
1156      }
1157      document.cookie = cookie.join('; ');
1158    },
1159    read: function read(name) {
1160      var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
1161      return match ? decodeURIComponent(match[3]) : null;
1162    },
1163    remove: function remove(name) {
1164      this.write(name, '', Date.now() - 86400000);
1165    }
1166  };
1167}() :
1168// Non standard browser env (web workers, react-native) lack needed support.
1169function nonStandardBrowserEnv() {
1170  return {
1171    write: function write() {},
1172    read: function read() {
1173      return null;
1174    },
1175    remove: function remove() {}
1176  };
1177}();
1178
1179/***/ }),
1180
vendor: 845 bytes, lines 1181-1204
1181/***/ "./node_modules/axios/lib/helpers/isAbsoluteURL.js":
1182/*!*********************************************************!*\
1183  !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***!
1184  \*********************************************************/
1185/***/ ((module) => {
1186
1187"use strict";
1188
1189
1190/**
1191 * Determines whether the specified URL is absolute
1192 *
1193 * @param {string} url The URL to test
1194 * @returns {boolean} True if the specified URL is absolute, otherwise false
1195 */
1196module.exports = function isAbsoluteURL(url) {
1197  // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
1198  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
1199  // by any combination of letters, digits, plus, period, or hyphen.
1200  return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
1201};
1202
1203/***/ }),
1204
vendor: 617 bytes, lines 1205-1225
1205/***/ "./node_modules/axios/lib/helpers/isAxiosError.js":
1206/*!********************************************************!*\
1207  !*** ./node_modules/axios/lib/helpers/isAxiosError.js ***!
1208  \********************************************************/
1209/***/ ((module) => {
1210
1211"use strict";
1212
1213
1214/**
1215 * Determines whether the payload is an error thrown by Axios
1216 *
1217 * @param {*} payload The value to test
1218 * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
1219 */
1220module.exports = function isAxiosError(payload) {
1221  return typeof payload === 'object' && payload.isAxiosError === true;
1222};
1223
1224/***/ }),
1225
vendor: 2,465 bytes, lines 1226-1292
1226/***/ "./node_modules/axios/lib/helpers/isURLSameOrigin.js":
1227/*!***********************************************************!*\
1228  !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***!
1229  \***********************************************************/
1230/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1231
1232"use strict";
1233
1234
1235var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
1236module.exports = utils.isStandardBrowserEnv() ?
1237// Standard browser envs have full support of the APIs needed to test
1238// whether the request URL is of the same origin as current location.
1239function standardBrowserEnv() {
1240  var msie = /(msie|trident)/i.test(navigator.userAgent);
1241  var urlParsingNode = document.createElement('a');
1242  var originURL;
1243
1244  /**
1245  * Parse a URL to discover it's components
1246  *
1247  * @param {String} url The URL to be parsed
1248  * @returns {Object}
1249  */
1250  function resolveURL(url) {
1251    var href = url;
1252    if (msie) {
1253      // IE needs attribute set twice to normalize properties
1254      urlParsingNode.setAttribute('href', href);
1255      href = urlParsingNode.href;
1256    }
1257    urlParsingNode.setAttribute('href', href);
1258
1259    // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
1260    return {
1261      href: urlParsingNode.href,
1262      protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
1263      host: urlParsingNode.host,
1264      search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
1265      hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
1266      hostname: urlParsingNode.hostname,
1267      port: urlParsingNode.port,
1268      pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname
1269    };
1270  }
1271  originURL = resolveURL(window.location.href);
1272
1273  /**
1274  * Determine if a URL shares the same origin as the current location
1275  *
1276  * @param {String} requestURL The URL to test
1277  * @returns {boolean} True if URL shares the same origin, otherwise false
1278  */
1279  return function isURLSameOrigin(requestURL) {
1280    var parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;
1281    return parsed.protocol === originURL.protocol && parsed.host === originURL.host;
1282  };
1283}() :
1284// Non standard browser envs (web workers, react-native) lack needed support.
1285function nonStandardBrowserEnv() {
1286  return function isURLSameOrigin() {
1287    return true;
1288  };
1289}();
1290
1291/***/ }),
1292
vendor: 762 bytes, lines 1293-1313
1293/***/ "./node_modules/axios/lib/helpers/normalizeHeaderName.js":
1294/*!***************************************************************!*\
1295  !*** ./node_modules/axios/lib/helpers/normalizeHeaderName.js ***!
1296  \***************************************************************/
1297/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1298
1299"use strict";
1300
1301
1302var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js");
1303module.exports = function normalizeHeaderName(headers, normalizedName) {
1304  utils.forEach(headers, function processHeader(value, name) {
1305    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
1306      headers[normalizedName] = value;
1307      delete headers[name];
1308    }
1309  });
1310};
1311
1312/***/ }),
1313
vendor: 1,763 bytes, lines 1314-1369
1314/***/ "./node_modules/axios/lib/helpers/parseHeaders.js":
1315/*!********************************************************!*\
1316  !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***!
1317  \********************************************************/
1318/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1319
1320"use strict";
1321
1322
1323var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
1324
1325// Headers whose duplicates are ignored by node
1326// c.f. https://nodejs.org/api/http.html#http_message_headers
1327var ignoreDuplicateOf = ['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent'];
1328
1329/**
1330 * Parse headers into an object
1331 *
1332 * ```
1333 * Date: Wed, 27 Aug 2014 08:58:49 GMT
1334 * Content-Type: application/json
1335 * Connection: keep-alive
1336 * Transfer-Encoding: chunked
1337 * ```
1338 *
1339 * @param {String} headers Headers needing to be parsed
1340 * @returns {Object} Headers parsed into an object
1341 */
1342module.exports = function parseHeaders(headers) {
1343  var parsed = {};
1344  var key;
1345  var val;
1346  var i;
1347  if (!headers) {
1348    return parsed;
1349  }
1350  utils.forEach(headers.split('\n'), function parser(line) {
1351    i = line.indexOf(':');
1352    key = utils.trim(line.substr(0, i)).toLowerCase();
1353    val = utils.trim(line.substr(i + 1));
1354    if (key) {
1355      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
1356        return;
1357      }
1358      if (key === 'set-cookie') {
1359        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
1360      } else {
1361        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
1362      }
1363    }
1364  });
1365  return parsed;
1366};
1367
1368/***/ }),
1369
vendor: 818 bytes, lines 1370-1406
1370/***/ "./node_modules/axios/lib/helpers/spread.js":
1371/*!**************************************************!*\
1372  !*** ./node_modules/axios/lib/helpers/spread.js ***!
1373  \**************************************************/
1374/***/ ((module) => {
1375
1376"use strict";
1377
1378
1379/**
1380 * Syntactic sugar for invoking a function and expanding an array for arguments.
1381 *
1382 * Common use case would be to use `Function.prototype.apply`.
1383 *
1384 *  ```js
1385 *  function f(x, y, z) {}
1386 *  var args = [1, 2, 3];
1387 *  f.apply(null, args);
1388 *  ```
1389 *
1390 * With `spread` this example can be re-written.
1391 *
1392 *  ```js
1393 *  spread(function(x, y, z) {})([1, 2, 3]);
1394 *  ```
1395 *
1396 * @param {Function} callback
1397 * @returns {Function}
1398 */
1399module.exports = function spread(callback) {
1400  return function wrap(arr) {
1401    return callback.apply(null, arr);
1402  };
1403};
1404
1405/***/ }),
1406
vendor: 3,108 bytes, lines 1407-1510
1407/***/ "./node_modules/axios/lib/helpers/validator.js":
1408/*!*****************************************************!*\
1409  !*** ./node_modules/axios/lib/helpers/validator.js ***!
1410  \*****************************************************/
1411/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1412
1413"use strict";
1414
1415
1416var pkg = __webpack_require__(/*! ./../../package.json */ "./node_modules/axios/package.json");
1417var validators = {};
1418
1419// eslint-disable-next-line func-names
1420['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function (type, i) {
1421  validators[type] = function validator(thing) {
1422    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;
1423  };
1424});
1425var deprecatedWarnings = {};
1426var currentVerArr = pkg.version.split('.');
1427
1428/**
1429 * Compare package versions
1430 * @param {string} version
1431 * @param {string?} thanVersion
1432 * @returns {boolean}
1433 */
1434function isOlderVersion(version, thanVersion) {
1435  var pkgVersionArr = thanVersion ? thanVersion.split('.') : currentVerArr;
1436  var destVer = version.split('.');
1437  for (var i = 0; i < 3; i++) {
1438    if (pkgVersionArr[i] > destVer[i]) {
1439      return true;
1440    } else if (pkgVersionArr[i] < destVer[i]) {
1441      return false;
1442    }
1443  }
1444  return false;
1445}
1446
1447/**
1448 * Transitional option validator
1449 * @param {function|boolean?} validator
1450 * @param {string?} version
1451 * @param {string} message
1452 * @returns {function}
1453 */
1454validators.transitional = function transitional(validator, version, message) {
1455  var isDeprecated = version && isOlderVersion(version);
1456  function formatMessage(opt, desc) {
1457    return '[Axios v' + pkg.version + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : '');
1458  }
1459
1460  // eslint-disable-next-line func-names
1461  return function (value, opt, opts) {
1462    if (validator === false) {
1463      throw new Error(formatMessage(opt, ' has been removed in ' + version));
1464    }
1465    if (isDeprecated && !deprecatedWarnings[opt]) {
1466      deprecatedWarnings[opt] = true;
1467      // eslint-disable-next-line no-console
1468      console.warn(formatMessage(opt, ' has been deprecated since v' + version + ' and will be removed in the near future'));
1469    }
1470    return validator ? validator(value, opt, opts) : true;
1471  };
1472};
1473
1474/**
1475 * Assert object's properties type
1476 * @param {object} options
1477 * @param {object} schema
1478 * @param {boolean?} allowUnknown
1479 */
1480
1481function assertOptions(options, schema, allowUnknown) {
1482  if (typeof options !== 'object') {
1483    throw new TypeError('options must be an object');
1484  }
1485  var keys = Object.keys(options);
1486  var i = keys.length;
1487  while (i-- > 0) {
1488    var opt = keys[i];
1489    var validator = schema[opt];
1490    if (validator) {
1491      var value = options[opt];
1492      var result = value === undefined || validator(value, opt, options);
1493      if (result !== true) {
1494        throw new TypeError('option ' + opt + ' must be ' + result);
1495      }
1496      continue;
1497    }
1498    if (allowUnknown !== true) {
1499      throw Error('Unknown option ' + opt);
1500    }
1501  }
1502}
1503module.exports = {
1504  isOlderVersion: isOlderVersion,
1505  assertOptions: assertOptions,
1506  validators: validators
1507};
1508
1509/***/ }),
1510
vendor: 15,433 bytes, lines 1511-1999
1511/***/ "./node_modules/axios/lib/utils.js":
1512/*!*****************************************!*\
1513  !*** ./node_modules/axios/lib/utils.js ***!
1514  \*****************************************/
1515/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1516
1517"use strict";
1518
1519
1520var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js");
1521
1522// utils is a library of generic helper functions non-specific to axios
1523
1524var toString = Object.prototype.toString;
1525
1526/**
1527 * Determine if a value is an Array
1528 *
1529 * @param {Object} val The value to test
1530 * @returns {boolean} True if value is an Array, otherwise false
1531 */
1532function isArray(val) {
1533  return toString.call(val) === '[object Array]';
1534}
1535
1536/**
1537 * Determine if a value is undefined
1538 *
1539 * @param {Object} val The value to test
1540 * @returns {boolean} True if the value is undefined, otherwise false
1541 */
1542function isUndefined(val) {
1543  return typeof val === 'undefined';
1544}
1545
1546/**
1547 * Determine if a value is a Buffer
1548 *
1549 * @param {Object} val The value to test
1550 * @returns {boolean} True if value is a Buffer, otherwise false
1551 */
1552function isBuffer(val) {
1553  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);
1554}
1555
1556/**
1557 * Determine if a value is an ArrayBuffer
1558 *
1559 * @param {Object} val The value to test
1560 * @returns {boolean} True if value is an ArrayBuffer, otherwise false
1561 */
1562function isArrayBuffer(val) {
1563  return toString.call(val) === '[object ArrayBuffer]';
1564}
1565
1566/**
1567 * Determine if a value is a FormData
1568 *
1569 * @param {Object} val The value to test
1570 * @returns {boolean} True if value is an FormData, otherwise false
1571 */
1572function isFormData(val) {
1573  return typeof FormData !== 'undefined' && val instanceof FormData;
1574}
1575
1576/**
1577 * Determine if a value is a view on an ArrayBuffer
1578 *
1579 * @param {Object} val The value to test
1580 * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
1581 */
1582function isArrayBufferView(val) {
1583  var result;
1584  if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {
1585    result = ArrayBuffer.isView(val);
1586  } else {
1587    result = val && val.buffer && val.buffer instanceof ArrayBuffer;
1588  }
1589  return result;
1590}
1591
1592/**
1593 * Determine if a value is a String
1594 *
1595 * @param {Object} val The value to test
1596 * @returns {boolean} True if value is a String, otherwise false
1597 */
1598function isString(val) {
1599  return typeof val === 'string';
1600}
1601
1602/**
1603 * Determine if a value is a Number
1604 *
1605 * @param {Object} val The value to test
1606 * @returns {boolean} True if value is a Number, otherwise false
1607 */
1608function isNumber(val) {
1609  return typeof val === 'number';
1610}
1611
1612/**
1613 * Determine if a value is an Object
1614 *
1615 * @param {Object} val The value to test
1616 * @returns {boolean} True if value is an Object, otherwise false
1617 */
1618function isObject(val) {
1619  return val !== null && typeof val === 'object';
1620}
1621
1622/**
1623 * Determine if a value is a plain Object
1624 *
1625 * @param {Object} val The value to test
1626 * @return {boolean} True if value is a plain Object, otherwise false
1627 */
1628function isPlainObject(val) {
1629  if (toString.call(val) !== '[object Object]') {
1630    return false;
1631  }
1632  var prototype = Object.getPrototypeOf(val);
1633  return prototype === null || prototype === Object.prototype;
1634}
1635
1636/**
1637 * Determine if a value is a Date
1638 *
1639 * @param {Object} val The value to test
1640 * @returns {boolean} True if value is a Date, otherwise false
1641 */
1642function isDate(val) {
1643  return toString.call(val) === '[object Date]';
1644}
1645
1646/**
1647 * Determine if a value is a File
1648 *
1649 * @param {Object} val The value to test
1650 * @returns {boolean} True if value is a File, otherwise false
1651 */
1652function isFile(val) {
1653  return toString.call(val) === '[object File]';
1654}
1655
1656/**
1657 * Determine if a value is a Blob
1658 *
1659 * @param {Object} val The value to test
1660 * @returns {boolean} True if value is a Blob, otherwise false
1661 */
1662function isBlob(val) {
1663  return toString.call(val) === '[object Blob]';
1664}
1665
1666/**
1667 * Determine if a value is a Function
1668 *
1669 * @param {Object} val The value to test
1670 * @returns {boolean} True if value is a Function, otherwise false
1671 */
1672function isFunction(val) {
1673  return toString.call(val) === '[object Function]';
1674}
1675
1676/**
1677 * Determine if a value is a Stream
1678 *
1679 * @param {Object} val The value to test
1680 * @returns {boolean} True if value is a Stream, otherwise false
1681 */
1682function isStream(val) {
1683  return isObject(val) && isFunction(val.pipe);
1684}
1685
1686/**
1687 * Determine if a value is a URLSearchParams object
1688 *
1689 * @param {Object} val The value to test
1690 * @returns {boolean} True if value is a URLSearchParams object, otherwise false
1691 */
1692function isURLSearchParams(val) {
1693  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;
1694}
1695
1696/**
1697 * Trim excess whitespace off the beginning and end of a string
1698 *
1699 * @param {String} str The String to trim
1700 * @returns {String} The String freed of excess whitespace
1701 */
1702function trim(str) {
1703  return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, '');
1704}
1705
1706/**
1707 * Determine if we're running in a standard browser environment
1708 *
1709 * This allows axios to run in a web worker, and react-native.
1710 * Both environments support XMLHttpRequest, but not fully standard globals.
1711 *
1712 * web workers:
1713 *  typeof window -> undefined
1714 *  typeof document -> undefined
1715 *
1716 * react-native:
1717 *  navigator.product -> 'ReactNative'
1718 * nativescript
1719 *  navigator.product -> 'NativeScript' or 'NS'
1720 */
1721function isStandardBrowserEnv() {
1722  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || navigator.product === 'NativeScript' || navigator.product === 'NS')) {
1723    return false;
1724  }
1725  return typeof window !== 'undefined' && typeof document !== 'undefined';
1726}
1727
1728/**
1729 * Iterate over an Array or an Object invoking a function for each item.
1730 *
1731 * If `obj` is an Array callback will be called passing
1732 * the value, index, and complete array for each item.
1733 *
1734 * If 'obj' is an Object callback will be called passing
1735 * the value, key, and complete object for each property.
1736 *
1737 * @param {Object|Array} obj The object to iterate
1738 * @param {Function} fn The callback to invoke for each item
1739 */
1740function forEach(obj, fn) {
1741  // Don't bother if no value provided
1742  if (obj === null || typeof obj === 'undefined') {
1743    return;
1744  }
1745
1746  // Force an array if not already something iterable
1747  if (typeof obj !== 'object') {
1748    /*eslint no-param-reassign:0*/
1749    obj = [obj];
1750  }
1751  if (isArray(obj)) {
1752    // Iterate over array values
1753    for (var i = 0, l = obj.length; i < l; i++) {
1754      fn.call(null, obj[i], i, obj);
1755    }
1756  } else {
1757    // Iterate over object keys
1758    for (var key in obj) {
1759      if (Object.prototype.hasOwnProperty.call(obj, key)) {
1760        fn.call(null, obj[key], key, obj);
1761      }
1762    }
1763  }
1764}
1765
1766/**
1767 * Accepts varargs expecting each argument to be an object, then
1768 * immutably merges the properties of each object and returns result.
1769 *
1770 * When multiple objects contain the same key the later object in
1771 * the arguments list will take precedence.
1772 *
1773 * Example:
1774 *
1775 * ```js
1776 * var result = merge({foo: 123}, {foo: 456});
1777 * console.log(result.foo); // outputs 456
1778 * ```
1779 *
1780 * @param {Object} obj1 Object to merge
1781 * @returns {Object} Result of all merge properties
1782 */
1783function merge( /* obj1, obj2, obj3, ... */
1784) {
1785  var result = {};
1786  function assignValue(val, key) {
1787    if (isPlainObject(result[key]) && isPlainObject(val)) {
1788      result[key] = merge(result[key], val);
1789    } else if (isPlainObject(val)) {
1790      result[key] = merge({}, val);
1791    } else if (isArray(val)) {
1792      result[key] = val.slice();
1793    } else {
1794      result[key] = val;
1795    }
1796  }
1797  for (var i = 0, l = arguments.length; i < l; i++) {
1798    forEach(arguments[i], assignValue);
1799  }
1800  return result;
1801}
1802
1803/**
1804 * Extends object a by mutably adding to it the properties of object b.
1805 *
1806 * @param {Object} a The object to be extended
1807 * @param {Object} b The object to copy properties from
1808 * @param {Object} thisArg The object to bind function to
1809 * @return {Object} The resulting value of object a
1810 */
1811function extend(a, b, thisArg) {
1812  forEach(b, function assignValue(val, key) {
1813    if (thisArg && typeof val === 'function') {
1814      a[key] = bind(val, thisArg);
1815    } else {
1816      a[key] = val;
1817    }
1818  });
1819  return a;
1820}
1821
1822/**
1823 * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
1824 *
1825 * @param {string} content with BOM
1826 * @return {string} content value without BOM
1827 */
1828function stripBOM(content) {
1829  if (content.charCodeAt(0) === 0xFEFF) {
1830    content = content.slice(1);
1831  }
1832  return content;
1833}
1834module.exports = {
1835  isArray: isArray,
1836  isArrayBuffer: isArrayBuffer,
1837  isBuffer: isBuffer,
1838  isFormData: isFormData,
1839  isArrayBufferView: isArrayBufferView,
1840  isString: isString,
1841  isNumber: isNumber,
1842  isObject: isObject,
1843  isPlainObject: isPlainObject,
1844  isUndefined: isUndefined,
1845  isDate: isDate,
1846  isFile: isFile,
1847  isBlob: isBlob,
1848  isFunction: isFunction,
1849  isStream: isStream,
1850  isURLSearchParams: isURLSearchParams,
1851  isStandardBrowserEnv: isStandardBrowserEnv,
1852  forEach: forEach,
1853  merge: merge,
1854  extend: extend,
1855  trim: trim,
1856  stripBOM: stripBOM
1857};
1858
1859/***/ }),
1860
1861/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=script&lang=js&":
1862/*!*****************************************************************************************************************************************************************************************!*\
1863  !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=script&lang=js& ***!
1864  \*****************************************************************************************************************************************************************************************/
1865/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1866
1867"use strict";
1868
1869
1870var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
1871Object.defineProperty(exports, "__esModule", ({
1872  value: true
1873}));
1874exports["default"] = void 0;
1875var _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"));
1876var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js"));
1877var _api = _interopRequireDefault(__webpack_require__(/*! ../../utils/api */ "./app/utils/api.js"));
1878var _default = exports["default"] = {
1879  name: "OpeningHoursStatus",
1880  props: {
1881    nid: {
1882      type: String
1883    },
1884    fieldName: {
1885      type: String
1886    }
1887  },
1888  data: function data() {
1889    return {
1890      Drupal: Drupal,
1891      openingHour: null
1892    };
1893  },
1894  computed: {
1895    isParkingPage: function isParkingPage() {
1896      return document.body.classList.contains('page-node-type-parking-zone');
1897    },
1898    openingHourMessage: function openingHourMessage() {
1899      var _this$openingHour;
1900      if (!this.openingHour) return '';
1901      var status = this.openingHour.status;
1902      if (this.isParkingPage) {
1903        switch (status) {
1904          case 'open':
1905            return this.Drupal.t('Parking possible');
1906          case 'opens_soon':
1907            return this.Drupal.t('Parking opens soon');
1908          case 'closes_soon':
1909            return this.Drupal.t('Parking closes soon');
1910          default:
1911            return this.Drupal.t('Parking closed');
1912        }
1913      } else {
1914        switch (status) {
1915          case 'open':
1916            return ((_this$openingHour = this.openingHour) === null || _this$openingHour === void 0 ? void 0 : _this$openingHour.custom_label) || this.Drupal.t('Open', {}, {
1917              context: 'Currently open'
1918            });
1919          case 'opens_soon':
1920            return this.Drupal.t('Opens soon');
1921          case 'closes_soon':
1922            return this.Drupal.t('Closes soon');
1923          default:
1924            return this.Drupal.t('Closed');
1925        }
1926      }
1927    },
1928    openingHourClass: function openingHourClass() {
1929      if (!this.openingHour) return '';
1930      return {
1931        open: this.openingHour.status === 'open',
1932        opens_soon: this.openingHour.status === 'opens_soon',
1933        closes_soon: this.openingHour.status === 'closes_soon',
1934        closed: this.openingHour.status !== 'open' && this.openingHour.status !== 'opens_soon' && this.openingHour.status !== 'closes_soon'
1935      };
1936    }
1937  },
1938  methods: {
1939    getOpeningHours: function getOpeningHours() {
1940      var _this = this;
1941      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
1942        return _regenerator.default.wrap(function _callee$(_context) {
1943          while (1) switch (_context.prev = _context.next) {
1944            case 0:
1945              _context.next = 2;
1946              return (0, _api.default)().get("opening-hours/".concat(_this.nid, "/").concat(_this.fieldName)).then(function (_ref) {
1947                var data = _ref.data.data;
1948                return data;
1949              });
1950            case 2:
1951              _this.openingHour = _context.sent;
1952            case 3:
1953            case "end":
1954              return _context.stop();
1955          }
1956        }, _callee);
1957      }))();
1958    }
1959  },
1960  created: function created() {
1961    this.getOpeningHours();
1962  }
1963};
1964
1965/***/ }),
1966
1967/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=template&id=79e290b8&":
1968/*!****************************************************************************************************************************************************************************************************************************************************************************!*\
1969  !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=template&id=79e290b8& ***!
1970  \****************************************************************************************************************************************************************************************************************************************************************************/
1971/***/ ((__unused_webpack_module, exports) => {
1972
1973"use strict";
1974
1975
1976Object.defineProperty(exports, "__esModule", ({
1977  value: true
1978}));
1979exports.staticRenderFns = exports.render = void 0;
1980var render = exports.render = function render() {
1981  var _vm = this,
1982    _c = _vm._self._c;
1983  return _vm.openingHour ? _c("div", {
1984    staticClass: "opening-hour"
1985  }, [_c("span", {
1986    staticClass: "time",
1987    class: _vm.openingHourClass,
1988    domProps: {
1989      innerHTML: _vm._s(_vm.openingHourMessage)
1990    }
1991  }), _vm._v(" "), _vm.isParkingPage && _vm.openingHour.status !== "closed" ? _c("span", {
1992    staticClass: "timestamp"
1993  }, [_vm._v("\n    " + _vm._s(_vm.openingHour.start) + " - " + _vm._s(_vm.openingHour.end) + "\n  ")]) : _vm._e()]) : _vm._e();
1994};
1995var staticRenderFns = exports.staticRenderFns = [];
1996render._withStripped = true;
1997
1998/***/ }),
1999
vendor: 363,849 bytes, lines 2000-13128
2000/***/ "./node_modules/vue/dist/vue.esm.js":
2001/*!******************************************!*\
2002  !*** ./node_modules/vue/dist/vue.esm.js ***!
2003  \******************************************/
2004/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2005
2006"use strict";
2007__webpack_require__.r(__webpack_exports__);
2008/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2009/* harmony export */   EffectScope: () => (/* binding */ EffectScope),
2010/* harmony export */   computed: () => (/* binding */ computed),
2011/* harmony export */   customRef: () => (/* binding */ customRef),
2012/* harmony export */   "default": () => (/* binding */ Vue),
2013/* harmony export */   defineAsyncComponent: () => (/* binding */ defineAsyncComponent),
2014/* harmony export */   defineComponent: () => (/* binding */ defineComponent),
2015/* harmony export */   del: () => (/* binding */ del),
2016/* harmony export */   effectScope: () => (/* binding */ effectScope),
2017/* harmony export */   getCurrentInstance: () => (/* binding */ getCurrentInstance),
2018/* harmony export */   getCurrentScope: () => (/* binding */ getCurrentScope),
2019/* harmony export */   h: () => (/* binding */ h),
2020/* harmony export */   inject: () => (/* binding */ inject),
2021/* harmony export */   isProxy: () => (/* binding */ isProxy),
2022/* harmony export */   isReactive: () => (/* binding */ isReactive),
2023/* harmony export */   isReadonly: () => (/* binding */ isReadonly),
2024/* harmony export */   isRef: () => (/* binding */ isRef),
2025/* harmony export */   isShallow: () => (/* binding */ isShallow),
2026/* harmony export */   markRaw: () => (/* binding */ markRaw),
2027/* harmony export */   mergeDefaults: () => (/* binding */ mergeDefaults),
2028/* harmony export */   nextTick: () => (/* binding */ nextTick),
2029/* harmony export */   onActivated: () => (/* binding */ onActivated),
2030/* harmony export */   onBeforeMount: () => (/* binding */ onBeforeMount),
2031/* harmony export */   onBeforeUnmount: () => (/* binding */ onBeforeUnmount),
2032/* harmony export */   onBeforeUpdate: () => (/* binding */ onBeforeUpdate),
2033/* harmony export */   onDeactivated: () => (/* binding */ onDeactivated),
2034/* harmony export */   onErrorCaptured: () => (/* binding */ onErrorCaptured),
2035/* harmony export */   onMounted: () => (/* binding */ onMounted),
2036/* harmony export */   onRenderTracked: () => (/* binding */ onRenderTracked),
2037/* harmony export */   onRenderTriggered: () => (/* binding */ onRenderTriggered),
2038/* harmony export */   onScopeDispose: () => (/* binding */ onScopeDispose),
2039/* harmony export */   onServerPrefetch: () => (/* binding */ onServerPrefetch),
2040/* harmony export */   onUnmounted: () => (/* binding */ onUnmounted),
2041/* harmony export */   onUpdated: () => (/* binding */ onUpdated),
2042/* harmony export */   provide: () => (/* binding */ provide),
2043/* harmony export */   proxyRefs: () => (/* binding */ proxyRefs),
2044/* harmony export */   reactive: () => (/* binding */ reactive),
2045/* harmony export */   readonly: () => (/* binding */ readonly),
2046/* harmony export */   ref: () => (/* binding */ ref$1),
2047/* harmony export */   set: () => (/* binding */ set),
2048/* harmony export */   shallowReactive: () => (/* binding */ shallowReactive),
2049/* harmony export */   shallowReadonly: () => (/* binding */ shallowReadonly),
2050/* harmony export */   shallowRef: () => (/* binding */ shallowRef),
2051/* harmony export */   toRaw: () => (/* binding */ toRaw),
2052/* harmony export */   toRef: () => (/* binding */ toRef),
2053/* harmony export */   toRefs: () => (/* binding */ toRefs),
2054/* harmony export */   triggerRef: () => (/* binding */ triggerRef),
2055/* harmony export */   unref: () => (/* binding */ unref),
2056/* harmony export */   useAttrs: () => (/* binding */ useAttrs),
2057/* harmony export */   useCssModule: () => (/* binding */ useCssModule),
2058/* harmony export */   useCssVars: () => (/* binding */ useCssVars),
2059/* harmony export */   useListeners: () => (/* binding */ useListeners),
2060/* harmony export */   useSlots: () => (/* binding */ useSlots),
2061/* harmony export */   version: () => (/* binding */ version),
2062/* harmony export */   watch: () => (/* binding */ watch),
2063/* harmony export */   watchEffect: () => (/* binding */ watchEffect),
2064/* harmony export */   watchPostEffect: () => (/* binding */ watchPostEffect),
2065/* harmony export */   watchSyncEffect: () => (/* binding */ watchSyncEffect)
2066/* harmony export */ });
2067/*!
2068 * Vue.js v2.7.14
2069 * (c) 2014-2022 Evan You
2070 * Released under the MIT License.
2071 */
2072var emptyObject = Object.freeze({});
2073var isArray = Array.isArray;
2074// These helpers produce better VM code in JS engines due to their
2075// explicitness and function inlining.
2076function isUndef(v) {
2077  return v === undefined || v === null;
2078}
2079function isDef(v) {
2080  return v !== undefined && v !== null;
2081}
2082function isTrue(v) {
2083  return v === true;
2084}
2085function isFalse(v) {
2086  return v === false;
2087}
2088/**
2089 * Check if value is primitive.
2090 */
2091function isPrimitive(value) {
2092  return typeof value === 'string' || typeof value === 'number' ||
2093  // $flow-disable-line
2094  typeof value === 'symbol' || typeof value === 'boolean';
2095}
2096function isFunction(value) {
2097  return typeof value === 'function';
2098}
2099/**
2100 * Quick object check - this is primarily used to tell
2101 * objects from primitive values when we know the value
2102 * is a JSON-compliant type.
2103 */
2104function isObject(obj) {
2105  return obj !== null && typeof obj === 'object';
2106}
2107/**
2108 * Get the raw type string of a value, e.g., [object Object].
2109 */
2110var _toString = Object.prototype.toString;
2111function toRawType(value) {
2112  return _toString.call(value).slice(8, -1);
2113}
2114/**
2115 * Strict object type check. Only returns true
2116 * for plain JavaScript objects.
2117 */
2118function isPlainObject(obj) {
2119  return _toString.call(obj) === '[object Object]';
2120}
2121function isRegExp(v) {
2122  return _toString.call(v) === '[object RegExp]';
2123}
2124/**
2125 * Check if val is a valid array index.
2126 */
2127function isValidArrayIndex(val) {
2128  var n = parseFloat(String(val));
2129  return n >= 0 && Math.floor(n) === n && isFinite(val);
2130}
2131function isPromise(val) {
2132  return isDef(val) && typeof val.then === 'function' && typeof val.catch === 'function';
2133}
2134/**
2135 * Convert a value to a string that is actually rendered.
2136 */
2137function toString(val) {
2138  return val == null ? '' : Array.isArray(val) || isPlainObject(val) && val.toString === _toString ? JSON.stringify(val, null, 2) : String(val);
2139}
2140/**
2141 * Convert an input value to a number for persistence.
2142 * If the conversion fails, return original string.
2143 */
2144function toNumber(val) {
2145  var n = parseFloat(val);
2146  return isNaN(n) ? val : n;
2147}
2148/**
2149 * Make a map and return a function for checking if a key
2150 * is in that map.
2151 */
2152function makeMap(str, expectsLowerCase) {
2153  var map = Object.create(null);
2154  var list = str.split(',');
2155  for (var i = 0; i < list.length; i++) {
2156    map[list[i]] = true;
2157  }
2158  return expectsLowerCase ? function (val) {
2159    return map[val.toLowerCase()];
2160  } : function (val) {
2161    return map[val];
2162  };
2163}
2164/**
2165 * Check if a tag is a built-in tag.
2166 */
2167var isBuiltInTag = makeMap('slot,component', true);
2168/**
2169 * Check if an attribute is a reserved attribute.
2170 */
2171var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
2172/**
2173 * Remove an item from an array.
2174 */
2175function remove$2(arr, item) {
2176  var len = arr.length;
2177  if (len) {
2178    // fast path for the only / last item
2179    if (item === arr[len - 1]) {
2180      arr.length = len - 1;
2181      return;
2182    }
2183    var index = arr.indexOf(item);
2184    if (index > -1) {
2185      return arr.splice(index, 1);
2186    }
2187  }
2188}
2189/**
2190 * Check whether an object has the property.
2191 */
2192var hasOwnProperty = Object.prototype.hasOwnProperty;
2193function hasOwn(obj, key) {
2194  return hasOwnProperty.call(obj, key);
2195}
2196/**
2197 * Create a cached version of a pure function.
2198 */
2199function cached(fn) {
2200  var cache = Object.create(null);
2201  return function cachedFn(str) {
2202    var hit = cache[str];
2203    return hit || (cache[str] = fn(str));
2204  };
2205}
2206/**
2207 * Camelize a hyphen-delimited string.
2208 */
2209var camelizeRE = /-(\w)/g;
2210var camelize = cached(function (str) {
2211  return str.replace(camelizeRE, function (_, c) {
2212    return c ? c.toUpperCase() : '';
2213  });
2214});
2215/**
2216 * Capitalize a string.
2217 */
2218var capitalize = cached(function (str) {
2219  return str.charAt(0).toUpperCase() + str.slice(1);
2220});
2221/**
2222 * Hyphenate a camelCase string.
2223 */
2224var hyphenateRE = /\B([A-Z])/g;
2225var hyphenate = cached(function (str) {
2226  return str.replace(hyphenateRE, '-$1').toLowerCase();
2227});
2228/**
2229 * Simple bind polyfill for environments that do not support it,
2230 * e.g., PhantomJS 1.x. Technically, we don't need this anymore
2231 * since native bind is now performant enough in most browsers.
2232 * But removing it would mean breaking code that was able to run in
2233 * PhantomJS 1.x, so this must be kept for backward compatibility.
2234 */
2235/* istanbul ignore next */
2236function polyfillBind(fn, ctx) {
2237  function boundFn(a) {
2238    var l = arguments.length;
2239    return l ? l > 1 ? fn.apply(ctx, arguments) : fn.call(ctx, a) : fn.call(ctx);
2240  }
2241  boundFn._length = fn.length;
2242  return boundFn;
2243}
2244function nativeBind(fn, ctx) {
2245  return fn.bind(ctx);
2246}
2247// @ts-expect-error bind cannot be `undefined`
2248var bind$1 = Function.prototype.bind ? nativeBind : polyfillBind;
2249/**
2250 * Convert an Array-like object to a real Array.
2251 */
2252function toArray(list, start) {
2253  start = start || 0;
2254  var i = list.length - start;
2255  var ret = new Array(i);
2256  while (i--) {
2257    ret[i] = list[i + start];
2258  }
2259  return ret;
2260}
2261/**
2262 * Mix properties into target object.
2263 */
2264function extend(to, _from) {
2265  for (var key in _from) {
2266    to[key] = _from[key];
2267  }
2268  return to;
2269}
2270/**
2271 * Merge an Array of Objects into a single Object.
2272 */
2273function toObject(arr) {
2274  var res = {};
2275  for (var i = 0; i < arr.length; i++) {
2276    if (arr[i]) {
2277      extend(res, arr[i]);
2278    }
2279  }
2280  return res;
2281}
2282/* eslint-disable no-unused-vars */
2283/**
2284 * Perform no operation.
2285 * Stubbing args to make Flow happy without leaving useless transpiled code
2286 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
2287 */
2288function noop(a, b, c) {}
2289/**
2290 * Always return false.
2291 */
2292var no = function (a, b, c) {
2293  return false;
2294};
2295/* eslint-enable no-unused-vars */
2296/**
2297 * Return the same value.
2298 */
2299var identity = function (_) {
2300  return _;
2301};
2302/**
2303 * Generate a string containing static keys from compiler modules.
2304 */
2305function genStaticKeys$1(modules) {
2306  return modules.reduce(function (keys, m) {
2307    return keys.concat(m.staticKeys || []);
2308  }, []).join(',');
2309}
2310/**
2311 * Check if two values are loosely equal - that is,
2312 * if they are plain objects, do they have the same shape?
2313 */
2314function looseEqual(a, b) {
2315  if (a === b) return true;
2316  var isObjectA = isObject(a);
2317  var isObjectB = isObject(b);
2318  if (isObjectA && isObjectB) {
2319    try {
2320      var isArrayA = Array.isArray(a);
2321      var isArrayB = Array.isArray(b);
2322      if (isArrayA && isArrayB) {
2323        return a.length === b.length && a.every(function (e, i) {
2324          return looseEqual(e, b[i]);
2325        });
2326      } else if (a instanceof Date && b instanceof Date) {
2327        return a.getTime() === b.getTime();
2328      } else if (!isArrayA && !isArrayB) {
2329        var keysA = Object.keys(a);
2330        var keysB = Object.keys(b);
2331        return keysA.length === keysB.length && keysA.every(function (key) {
2332          return looseEqual(a[key], b[key]);
2333        });
2334      } else {
2335        /* istanbul ignore next */
2336        return false;
2337      }
2338    } catch (e) {
2339      /* istanbul ignore next */
2340      return false;
2341    }
2342  } else if (!isObjectA && !isObjectB) {
2343    return String(a) === String(b);
2344  } else {
2345    return false;
2346  }
2347}
2348/**
2349 * Return the first index at which a loosely equal value can be
2350 * found in the array (if value is a plain object, the array must
2351 * contain an object of the same shape), or -1 if it is not present.
2352 */
2353function looseIndexOf(arr, val) {
2354  for (var i = 0; i < arr.length; i++) {
2355    if (looseEqual(arr[i], val)) return i;
2356  }
2357  return -1;
2358}
2359/**
2360 * Ensure a function is called only once.
2361 */
2362function once(fn) {
2363  var called = false;
2364  return function () {
2365    if (!called) {
2366      called = true;
2367      fn.apply(this, arguments);
2368    }
2369  };
2370}
2371// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill
2372function hasChanged(x, y) {
2373  if (x === y) {
2374    return x === 0 && 1 / x !== 1 / y;
2375  } else {
2376    return x === x || y === y;
2377  }
2378}
2379var SSR_ATTR = 'data-server-rendered';
2380var ASSET_TYPES = ['component', 'directive', 'filter'];
2381var LIFECYCLE_HOOKS = ['beforeCreate', 'created', 'beforeMount', 'mounted', 'beforeUpdate', 'updated', 'beforeDestroy', 'destroyed', 'activated', 'deactivated', 'errorCaptured', 'serverPrefetch', 'renderTracked', 'renderTriggered'];
2382var config = {
2383  /**
2384   * Option merge strategies (used in core/util/options)
2385   */
2386  // $flow-disable-line
2387  optionMergeStrategies: Object.create(null),
2388  /**
2389   * Whether to suppress warnings.
2390   */
2391  silent: false,
2392  /**
2393   * Show production mode tip message on boot?
2394   */
2395  productionTip: "development" !== 'production',
2396  /**
2397   * Whether to enable devtools
2398   */
2399  devtools: "development" !== 'production',
2400  /**
2401   * Whether to record perf
2402   */
2403  performance: false,
2404  /**
2405   * Error handler for watcher errors
2406   */
2407  errorHandler: null,
2408  /**
2409   * Warn handler for watcher warns
2410   */
2411  warnHandler: null,
2412  /**
2413   * Ignore certain custom elements
2414   */
2415  ignoredElements: [],
2416  /**
2417   * Custom user key aliases for v-on
2418   */
2419  // $flow-disable-line
2420  keyCodes: Object.create(null),
2421  /**
2422   * Check if a tag is reserved so that it cannot be registered as a
2423   * component. This is platform-dependent and may be overwritten.
2424   */
2425  isReservedTag: no,
2426  /**
2427   * Check if an attribute is reserved so that it cannot be used as a component
2428   * prop. This is platform-dependent and may be overwritten.
2429   */
2430  isReservedAttr: no,
2431  /**
2432   * Check if a tag is an unknown element.
2433   * Platform-dependent.
2434   */
2435  isUnknownElement: no,
2436  /**
2437   * Get the namespace of an element
2438   */
2439  getTagNamespace: noop,
2440  /**
2441   * Parse the real tag name for the specific platform.
2442   */
2443  parsePlatformTagName: identity,
2444  /**
2445   * Check if an attribute must be bound using property, e.g. value
2446   * Platform-dependent.
2447   */
2448  mustUseProp: no,
2449  /**
2450   * Perform updates asynchronously. Intended to be used by Vue Test Utils
2451   * This will significantly reduce performance if set to false.
2452   */
2453  async: true,
2454  /**
2455   * Exposed for legacy reasons
2456   */
2457  _lifecycleHooks: LIFECYCLE_HOOKS
2458};
2459
2460/**
2461 * unicode letters used for parsing html tags, component names and property paths.
2462 * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
2463 * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
2464 */
2465var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;
2466/**
2467 * Check if a string starts with $ or _
2468 */
2469function isReserved(str) {
2470  var c = (str + '').charCodeAt(0);
2471  return c === 0x24 || c === 0x5f;
2472}
2473/**
2474 * Define a property.
2475 */
2476function def(obj, key, val, enumerable) {
2477  Object.defineProperty(obj, key, {
2478    value: val,
2479    enumerable: !!enumerable,
2480    writable: true,
2481    configurable: true
2482  });
2483}
2484/**
2485 * Parse simple path.
2486 */
2487var bailRE = new RegExp("[^".concat(unicodeRegExp.source, ".$_\\d]"));
2488function parsePath(path) {
2489  if (bailRE.test(path)) {
2490    return;
2491  }
2492  var segments = path.split('.');
2493  return function (obj) {
2494    for (var i = 0; i < segments.length; i++) {
2495      if (!obj) return;
2496      obj = obj[segments[i]];
2497    }
2498    return obj;
2499  };
2500}
2501
2502// can we use __proto__?
2503var hasProto = ('__proto__' in {});
2504// Browser environment sniffing
2505var inBrowser = typeof window !== 'undefined';
2506var UA = inBrowser && window.navigator.userAgent.toLowerCase();
2507var isIE = UA && /msie|trident/.test(UA);
2508var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
2509var isEdge = UA && UA.indexOf('edge/') > 0;
2510UA && UA.indexOf('android') > 0;
2511var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);
2512UA && /chrome\/\d+/.test(UA) && !isEdge;
2513UA && /phantomjs/.test(UA);
2514var isFF = UA && UA.match(/firefox\/(\d+)/);
2515// Firefox has a "watch" function on Object.prototype...
2516// @ts-expect-error firebox support
2517var nativeWatch = {}.watch;
2518var supportsPassive = false;
2519if (inBrowser) {
2520  try {
2521    var opts = {};
2522    Object.defineProperty(opts, 'passive', {
2523      get: function () {
2524        /* istanbul ignore next */
2525        supportsPassive = true;
2526      }
2527    }); // https://github.com/facebook/flow/issues/285
2528    window.addEventListener('test-passive', null, opts);
2529  } catch (e) {}
2530}
2531// this needs to be lazy-evaled because vue may be required before
2532// vue-server-renderer can set VUE_ENV
2533var _isServer;
2534var isServerRendering = function () {
2535  if (_isServer === undefined) {
2536    /* istanbul ignore if */
2537    if (!inBrowser && typeof __webpack_require__.g !== 'undefined') {
2538      // detect presence of vue-server-renderer and avoid
2539      // Webpack shimming the process
2540      _isServer = __webpack_require__.g['process'] && __webpack_require__.g['process'].env.VUE_ENV === 'server';
2541    } else {
2542      _isServer = false;
2543    }
2544  }
2545  return _isServer;
2546};
2547// detect devtools
2548var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
2549/* istanbul ignore next */
2550function isNative(Ctor) {
2551  return typeof Ctor === 'function' && /native code/.test(Ctor.toString());
2552}
2553var hasSymbol = typeof Symbol !== 'undefined' && isNative(Symbol) && typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);
2554var _Set; // $flow-disable-line
2555/* istanbul ignore if */
2556if (typeof Set !== 'undefined' && isNative(Set)) {
2557  // use native Set when available.
2558  _Set = Set;
2559} else {
2560  // a non-standard Set polyfill that only works with primitive keys.
2561  _Set = /** @class */function () {
2562    function Set() {
2563      this.set = Object.create(null);
2564    }
2565    Set.prototype.has = function (key) {
2566      return this.set[key] === true;
2567    };
2568    Set.prototype.add = function (key) {
2569      this.set[key] = true;
2570    };
2571    Set.prototype.clear = function () {
2572      this.set = Object.create(null);
2573    };
2574    return Set;
2575  }();
2576}
2577var currentInstance = null;
2578/**
2579 * This is exposed for compatibility with v3 (e.g. some functions in VueUse
2580 * relies on it). Do not use this internally, just use `currentInstance`.
2581 *
2582 * @internal this function needs manual type declaration because it relies
2583 * on previously manually authored types from Vue 2
2584 */
2585function getCurrentInstance() {
2586  return currentInstance && {
2587    proxy: currentInstance
2588  };
2589}
2590/**
2591 * @internal
2592 */
2593function setCurrentInstance(vm) {
2594  if (vm === void 0) {
2595    vm = null;
2596  }
2597  if (!vm) currentInstance && currentInstance._scope.off();
2598  currentInstance = vm;
2599  vm && vm._scope.on();
2600}
2601
2602/**
2603 * @internal
2604 */
2605var VNode = /** @class */function () {
2606  function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) {
2607    this.tag = tag;
2608    this.data = data;
2609    this.children = children;
2610    this.text = text;
2611    this.elm = elm;
2612    this.ns = undefined;
2613    this.context = context;
2614    this.fnContext = undefined;
2615    this.fnOptions = undefined;
2616    this.fnScopeId = undefined;
2617    this.key = data && data.key;
2618    this.componentOptions = componentOptions;
2619    this.componentInstance = undefined;
2620    this.parent = undefined;
2621    this.raw = false;
2622    this.isStatic = false;
2623    this.isRootInsert = true;
2624    this.isComment = false;
2625    this.isCloned = false;
2626    this.isOnce = false;
2627    this.asyncFactory = asyncFactory;
2628    this.asyncMeta = undefined;
2629    this.isAsyncPlaceholder = false;
2630  }
2631  Object.defineProperty(VNode.prototype, "child", {
2632    // DEPRECATED: alias for componentInstance for backwards compat.
2633    /* istanbul ignore next */
2634    get: function () {
2635      return this.componentInstance;
2636    },
2637    enumerable: false,
2638    configurable: true
2639  });
2640  return VNode;
2641}();
2642var createEmptyVNode = function (text) {
2643  if (text === void 0) {
2644    text = '';
2645  }
2646  var node = new VNode();
2647  node.text = text;
2648  node.isComment = true;
2649  return node;
2650};
2651function createTextVNode(val) {
2652  return new VNode(undefined, undefined, undefined, String(val));
2653}
2654// optimized shallow clone
2655// used for static nodes and slot nodes because they may be reused across
2656// multiple renders, cloning them avoids errors when DOM manipulations rely
2657// on their elm reference.
2658function cloneVNode(vnode) {
2659  var cloned = new VNode(vnode.tag, vnode.data,
2660  // #7975
2661  // clone children array to avoid mutating original in case of cloning
2662  // a child.
2663  vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);
2664  cloned.ns = vnode.ns;
2665  cloned.isStatic = vnode.isStatic;
2666  cloned.key = vnode.key;
2667  cloned.isComment = vnode.isComment;
2668  cloned.fnContext = vnode.fnContext;
2669  cloned.fnOptions = vnode.fnOptions;
2670  cloned.fnScopeId = vnode.fnScopeId;
2671  cloned.asyncMeta = vnode.asyncMeta;
2672  cloned.isCloned = true;
2673  return cloned;
2674}
2675
2676/* not type checking this file because flow doesn't play well with Proxy */
2677var initProxy;
2678if (true) {
2679  var allowedGlobals_1 = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' + 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' + 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' + 'require' // for Webpack/Browserify
2680  );
2681  var warnNonPresent_1 = function (target, key) {
2682    warn$2("Property or method \"".concat(key, "\" is not defined on the instance but ") + 'referenced during render. Make sure that this property is reactive, ' + 'either in the data option, or for class-based components, by ' + 'initializing the property. ' + 'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target);
2683  };
2684  var warnReservedPrefix_1 = function (target, key) {
2685    warn$2("Property \"".concat(key, "\" must be accessed with \"$data.").concat(key, "\" because ") + 'properties starting with "$" or "_" are not proxied in the Vue instance to ' + 'prevent conflicts with Vue internals. ' + 'See: https://v2.vuejs.org/v2/api/#data', target);
2686  };
2687  var hasProxy_1 = typeof Proxy !== 'undefined' && isNative(Proxy);
2688  if (hasProxy_1) {
2689    var isBuiltInModifier_1 = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
2690    config.keyCodes = new Proxy(config.keyCodes, {
2691      set: function (target, key, value) {
2692        if (isBuiltInModifier_1(key)) {
2693          warn$2("Avoid overwriting built-in modifier in config.keyCodes: .".concat(key));
2694          return false;
2695        } else {
2696          target[key] = value;
2697          return true;
2698        }
2699      }
2700    });
2701  }
2702  var hasHandler_1 = {
2703    has: function (target, key) {
2704      var has = (key in target);
2705      var isAllowed = allowedGlobals_1(key) || typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data);
2706      if (!has && !isAllowed) {
2707        if (key in target.$data) warnReservedPrefix_1(target, key);else warnNonPresent_1(target, key);
2708      }
2709      return has || !isAllowed;
2710    }
2711  };
2712  var getHandler_1 = {
2713    get: function (target, key) {
2714      if (typeof key === 'string' && !(key in target)) {
2715        if (key in target.$data) warnReservedPrefix_1(target, key);else warnNonPresent_1(target, key);
2716      }
2717      return target[key];
2718    }
2719  };
2720  initProxy = function initProxy(vm) {
2721    if (hasProxy_1) {
2722      // determine which proxy handler to use
2723      var options = vm.$options;
2724      var handlers = options.render && options.render._withStripped ? getHandler_1 : hasHandler_1;
2725      vm._renderProxy = new Proxy(vm, handlers);
2726    } else {
2727      vm._renderProxy = vm;
2728    }
2729  };
2730}
2731
2732/******************************************************************************
2733Copyright (c) Microsoft Corporation.
2734
2735Permission to use, copy, modify, and/or distribute this software for any
2736purpose with or without fee is hereby granted.
2737
2738THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
2739REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
2740AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
2741INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
2742LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
2743OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
2744PERFORMANCE OF THIS SOFTWARE.
2745***************************************************************************** */
2746
2747var __assign = function () {
2748  __assign = Object.assign || function __assign(t) {
2749    for (var s, i = 1, n = arguments.length; i < n; i++) {
2750      s = arguments[i];
2751      for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
2752    }
2753    return t;
2754  };
2755  return __assign.apply(this, arguments);
2756};
2757var uid$2 = 0;
2758var pendingCleanupDeps = [];
2759var cleanupDeps = function () {
2760  for (var i = 0; i < pendingCleanupDeps.length; i++) {
2761    var dep = pendingCleanupDeps[i];
2762    dep.subs = dep.subs.filter(function (s) {
2763      return s;
2764    });
2765    dep._pending = false;
2766  }
2767  pendingCleanupDeps.length = 0;
2768};
2769/**
2770 * A dep is an observable that can have multiple
2771 * directives subscribing to it.
2772 * @internal
2773 */
2774var Dep = /** @class */function () {
2775  function Dep() {
2776    // pending subs cleanup
2777    this._pending = false;
2778    this.id = uid$2++;
2779    this.subs = [];
2780  }
2781  Dep.prototype.addSub = function (sub) {
2782    this.subs.push(sub);
2783  };
2784  Dep.prototype.removeSub = function (sub) {
2785    // #12696 deps with massive amount of subscribers are extremely slow to
2786    // clean up in Chromium
2787    // to workaround this, we unset the sub for now, and clear them on
2788    // next scheduler flush.
2789    this.subs[this.subs.indexOf(sub)] = null;
2790    if (!this._pending) {
2791      this._pending = true;
2792      pendingCleanupDeps.push(this);
2793    }
2794  };
2795  Dep.prototype.depend = function (info) {
2796    if (Dep.target) {
2797      Dep.target.addDep(this);
2798      if ( true && info && Dep.target.onTrack) {
2799        Dep.target.onTrack(__assign({
2800          effect: Dep.target
2801        }, info));
2802      }
2803    }
2804  };
2805  Dep.prototype.notify = function (info) {
2806    // stabilize the subscriber list first
2807    var subs = this.subs.filter(function (s) {
2808      return s;
2809    });
2810    if ( true && !config.async) {
2811      // subs aren't sorted in scheduler if not running async
2812      // we need to sort them now to make sure they fire in correct
2813      // order
2814      subs.sort(function (a, b) {
2815        return a.id - b.id;
2816      });
2817    }
2818    for (var i = 0, l = subs.length; i < l; i++) {
2819      var sub = subs[i];
2820      if ( true && info) {
2821        sub.onTrigger && sub.onTrigger(__assign({
2822          effect: subs[i]
2823        }, info));
2824      }
2825      sub.update();
2826    }
2827  };
2828  return Dep;
2829}();
2830// The current target watcher being evaluated.
2831// This is globally unique because only one watcher
2832// can be evaluated at a time.
2833Dep.target = null;
2834var targetStack = [];
2835function pushTarget(target) {
2836  targetStack.push(target);
2837  Dep.target = target;
2838}
2839function popTarget() {
2840  targetStack.pop();
2841  Dep.target = targetStack[targetStack.length - 1];
2842}
2843
2844/*
2845 * not type checking this file because flow doesn't play well with
2846 * dynamically accessing methods on Array prototype
2847 */
2848var arrayProto = Array.prototype;
2849var arrayMethods = Object.create(arrayProto);
2850var methodsToPatch = ['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'];
2851/**
2852 * Intercept mutating methods and emit events
2853 */
2854methodsToPatch.forEach(function (method) {
2855  // cache original method
2856  var original = arrayProto[method];
2857  def(arrayMethods, method, function mutator() {
2858    var args = [];
2859    for (var _i = 0; _i < arguments.length; _i++) {
2860      args[_i] = arguments[_i];
2861    }
2862    var result = original.apply(this, args);
2863    var ob = this.__ob__;
2864    var inserted;
2865    switch (method) {
2866      case 'push':
2867      case 'unshift':
2868        inserted = args;
2869        break;
2870      case 'splice':
2871        inserted = args.slice(2);
2872        break;
2873    }
2874    if (inserted) ob.observeArray(inserted);
2875    // notify change
2876    if (true) {
2877      ob.dep.notify({
2878        type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */,
2879        target: this,
2880        key: method
2881      });
2882    } else {}
2883    return result;
2884  });
2885});
2886var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
2887var NO_INIITIAL_VALUE = {};
2888/**
2889 * In some cases we may want to disable observation inside a component's
2890 * update computation.
2891 */
2892var shouldObserve = true;
2893function toggleObserving(value) {
2894  shouldObserve = value;
2895}
2896// ssr mock dep
2897var mockDep = {
2898  notify: noop,
2899  depend: noop,
2900  addSub: noop,
2901  removeSub: noop
2902};
2903/**
2904 * Observer class that is attached to each observed
2905 * object. Once attached, the observer converts the target
2906 * object's property keys into getter/setters that
2907 * collect dependencies and dispatch updates.
2908 */
2909var Observer = /** @class */function () {
2910  function Observer(value, shallow, mock) {
2911    if (shallow === void 0) {
2912      shallow = false;
2913    }
2914    if (mock === void 0) {
2915      mock = false;
2916    }
2917    this.value = value;
2918    this.shallow = shallow;
2919    this.mock = mock;
2920    // this.value = value
2921    this.dep = mock ? mockDep : new Dep();
2922    this.vmCount = 0;
2923    def(value, '__ob__', this);
2924    if (isArray(value)) {
2925      if (!mock) {
2926        if (hasProto) {
2927          value.__proto__ = arrayMethods;
2928          /* eslint-enable no-proto */
2929        } else {
2930          for (var i = 0, l = arrayKeys.length; i < l; i++) {
2931            var key = arrayKeys[i];
2932            def(value, key, arrayMethods[key]);
2933          }
2934        }
2935      }
2936      if (!shallow) {
2937        this.observeArray(value);
2938      }
2939    } else {
2940      /**
2941       * Walk through all properties and convert them into
2942       * getter/setters. This method should only be called when
2943       * value type is Object.
2944       */
2945      var keys = Object.keys(value);
2946      for (var i = 0; i < keys.length; i++) {
2947        var key = keys[i];
2948        defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock);
2949      }
2950    }
2951  }
2952  /**
2953   * Observe a list of Array items.
2954   */
2955  Observer.prototype.observeArray = function (value) {
2956    for (var i = 0, l = value.length; i < l; i++) {
2957      observe(value[i], false, this.mock);
2958    }
2959  };
2960  return Observer;
2961}();
2962// helpers
2963/**
2964 * Attempt to create an observer instance for a value,
2965 * returns the new observer if successfully observed,
2966 * or the existing observer if the value already has one.
2967 */
2968function observe(value, shallow, ssrMockReactivity) {
2969  if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
2970    return value.__ob__;
2971  }
2972  if (shouldObserve && (ssrMockReactivity || !isServerRendering()) && (isArray(value) || isPlainObject(value)) && Object.isExtensible(value) && !value.__v_skip /* ReactiveFlags.SKIP */ && !isRef(value) && !(value instanceof VNode)) {
2973    return new Observer(value, shallow, ssrMockReactivity);
2974  }
2975}
2976/**
2977 * Define a reactive property on an Object.
2978 */
2979function defineReactive(obj, key, val, customSetter, shallow, mock) {
2980  var dep = new Dep();
2981  var property = Object.getOwnPropertyDescriptor(obj, key);
2982  if (property && property.configurable === false) {
2983    return;
2984  }
2985  // cater for pre-defined getter/setters
2986  var getter = property && property.get;
2987  var setter = property && property.set;
2988  if ((!getter || setter) && (val === NO_INIITIAL_VALUE || arguments.length === 2)) {
2989    val = obj[key];
2990  }
2991  var childOb = !shallow && observe(val, false, mock);
2992  Object.defineProperty(obj, key, {
2993    enumerable: true,
2994    configurable: true,
2995    get: function reactiveGetter() {
2996      var value = getter ? getter.call(obj) : val;
2997      if (Dep.target) {
2998        if (true) {
2999          dep.depend({
3000            target: obj,
3001            type: "get" /* TrackOpTypes.GET */,
3002            key: key
3003          });
3004        } else {}
3005        if (childOb) {
3006          childOb.dep.depend();
3007          if (isArray(value)) {
3008            dependArray(value);
3009          }
3010        }
3011      }
3012      return isRef(value) && !shallow ? value.value : value;
3013    },
3014    set: function reactiveSetter(newVal) {
3015      var value = getter ? getter.call(obj) : val;
3016      if (!hasChanged(value, newVal)) {
3017        return;
3018      }
3019      if ( true && customSetter) {
3020        customSetter();
3021      }
3022      if (setter) {
3023        setter.call(obj, newVal);
3024      } else if (getter) {
3025        // #7981: for accessor properties without setter
3026        return;
3027      } else if (!shallow && isRef(value) && !isRef(newVal)) {
3028        value.value = newVal;
3029        return;
3030      } else {
3031        val = newVal;
3032      }
3033      childOb = !shallow && observe(newVal, false, mock);
3034      if (true) {
3035        dep.notify({
3036          type: "set" /* TriggerOpTypes.SET */,
3037          target: obj,
3038          key: key,
3039          newValue: newVal,
3040          oldValue: value
3041        });
3042      } else {}
3043    }
3044  });
3045  return dep;
3046}
3047function set(target, key, val) {
3048  if ( true && (isUndef(target) || isPrimitive(target))) {
3049    warn$2("Cannot set reactive property on undefined, null, or primitive value: ".concat(target));
3050  }
3051  if (isReadonly(target)) {
3052     true && warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly."));
3053    return;
3054  }
3055  var ob = target.__ob__;
3056  if (isArray(target) && isValidArrayIndex(key)) {
3057    target.length = Math.max(target.length, key);
3058    target.splice(key, 1, val);
3059    // when mocking for SSR, array methods are not hijacked
3060    if (ob && !ob.shallow && ob.mock) {
3061      observe(val, false, true);
3062    }
3063    return val;
3064  }
3065  if (key in target && !(key in Object.prototype)) {
3066    target[key] = val;
3067    return val;
3068  }
3069  if (target._isVue || ob && ob.vmCount) {
3070     true && warn$2('Avoid adding reactive properties to a Vue instance or its root $data ' + 'at runtime - declare it upfront in the data option.');
3071    return val;
3072  }
3073  if (!ob) {
3074    target[key] = val;
3075    return val;
3076  }
3077  defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);
3078  if (true) {
3079    ob.dep.notify({
3080      type: "add" /* TriggerOpTypes.ADD */,
3081      target: target,
3082      key: key,
3083      newValue: val,
3084      oldValue: undefined
3085    });
3086  } else {}
3087  return val;
3088}
3089function del(target, key) {
3090  if ( true && (isUndef(target) || isPrimitive(target))) {
3091    warn$2("Cannot delete reactive property on undefined, null, or primitive value: ".concat(target));
3092  }
3093  if (isArray(target) && isValidArrayIndex(key)) {
3094    target.splice(key, 1);
3095    return;
3096  }
3097  var ob = target.__ob__;
3098  if (target._isVue || ob && ob.vmCount) {
3099     true && warn$2('Avoid deleting properties on a Vue instance or its root $data ' + '- just set it to null.');
3100    return;
3101  }
3102  if (isReadonly(target)) {
3103     true && warn$2("Delete operation on key \"".concat(key, "\" failed: target is readonly."));
3104    return;
3105  }
3106  if (!hasOwn(target, key)) {
3107    return;
3108  }
3109  delete target[key];
3110  if (!ob) {
3111    return;
3112  }
3113  if (true) {
3114    ob.dep.notify({
3115      type: "delete" /* TriggerOpTypes.DELETE */,
3116      target: target,
3117      key: key
3118    });
3119  } else {}
3120}
3121/**
3122 * Collect dependencies on array elements when the array is touched, since
3123 * we cannot intercept array element access like property getters.
3124 */
3125function dependArray(value) {
3126  for (var e = void 0, i = 0, l = value.length; i < l; i++) {
3127    e = value[i];
3128    if (e && e.__ob__) {
3129      e.__ob__.dep.depend();
3130    }
3131    if (isArray(e)) {
3132      dependArray(e);
3133    }
3134  }
3135}
3136function reactive(target) {
3137  makeReactive(target, false);
3138  return target;
3139}
3140/**
3141 * Return a shallowly-reactive copy of the original object, where only the root
3142 * level properties are reactive. It also does not auto-unwrap refs (even at the
3143 * root level).
3144 */
3145function shallowReactive(target) {
3146  makeReactive(target, true);
3147  def(target, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
3148  return target;
3149}
3150function makeReactive(target, shallow) {
3151  // if trying to observe a readonly proxy, return the readonly version.
3152  if (!isReadonly(target)) {
3153    if (true) {
3154      if (isArray(target)) {
3155        warn$2("Avoid using Array as root value for ".concat(shallow ? "shallowReactive()" : "reactive()", " as it cannot be tracked in watch() or watchEffect(). Use ").concat(shallow ? "shallowRef()" : "ref()", " instead. This is a Vue-2-only limitation."));
3156      }
3157      var existingOb = target && target.__ob__;
3158      if (existingOb && existingOb.shallow !== shallow) {
3159        warn$2("Target is already a ".concat(existingOb.shallow ? "" : "non-", "shallow reactive object, and cannot be converted to ").concat(shallow ? "" : "non-", "shallow."));
3160      }
3161    }
3162    var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);
3163    if ( true && !ob) {
3164      if (target == null || isPrimitive(target)) {
3165        warn$2("value cannot be made reactive: ".concat(String(target)));
3166      }
3167      if (isCollectionType(target)) {
3168        warn$2("Vue 2 does not support reactive collection types such as Map or Set.");
3169      }
3170    }
3171  }
3172}
3173function isReactive(value) {
3174  if (isReadonly(value)) {
3175    return isReactive(value["__v_raw" /* ReactiveFlags.RAW */]);
3176  }
3177  return !!(value && value.__ob__);
3178}
3179function isShallow(value) {
3180  return !!(value && value.__v_isShallow);
3181}
3182function isReadonly(value) {
3183  return !!(value && value.__v_isReadonly);
3184}
3185function isProxy(value) {
3186  return isReactive(value) || isReadonly(value);
3187}
3188function toRaw(observed) {
3189  var raw = observed && observed["__v_raw" /* ReactiveFlags.RAW */];
3190  return raw ? toRaw(raw) : observed;
3191}
3192function markRaw(value) {
3193  // non-extensible objects won't be observed anyway
3194  if (Object.isExtensible(value)) {
3195    def(value, "__v_skip" /* ReactiveFlags.SKIP */, true);
3196  }
3197  return value;
3198}
3199/**
3200 * @internal
3201 */
3202function isCollectionType(value) {
3203  var type = toRawType(value);
3204  return type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet';
3205}
3206
3207/**
3208 * @internal
3209 */
3210var RefFlag = "__v_isRef";
3211function isRef(r) {
3212  return !!(r && r.__v_isRef === true);
3213}
3214function ref$1(value) {
3215  return createRef(value, false);
3216}
3217function shallowRef(value) {
3218  return createRef(value, true);
3219}
3220function createRef(rawValue, shallow) {
3221  if (isRef(rawValue)) {
3222    return rawValue;
3223  }
3224  var ref = {};
3225  def(ref, RefFlag, true);
3226  def(ref, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, shallow);
3227  def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));
3228  return ref;
3229}
3230function triggerRef(ref) {
3231  if ( true && !ref.dep) {
3232    warn$2("received object is not a triggerable ref.");
3233  }
3234  if (true) {
3235    ref.dep && ref.dep.notify({
3236      type: "set" /* TriggerOpTypes.SET */,
3237      target: ref,
3238      key: 'value'
3239    });
3240  } else {}
3241}
3242function unref(ref) {
3243  return isRef(ref) ? ref.value : ref;
3244}
3245function proxyRefs(objectWithRefs) {
3246  if (isReactive(objectWithRefs)) {
3247    return objectWithRefs;
3248  }
3249  var proxy = {};
3250  var keys = Object.keys(objectWithRefs);
3251  for (var i = 0; i < keys.length; i++) {
3252    proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]);
3253  }
3254  return proxy;
3255}
3256function proxyWithRefUnwrap(target, source, key) {
3257  Object.defineProperty(target, key, {
3258    enumerable: true,
3259    configurable: true,
3260    get: function () {
3261      var val = source[key];
3262      if (isRef(val)) {
3263        return val.value;
3264      } else {
3265        var ob = val && val.__ob__;
3266        if (ob) ob.dep.depend();
3267        return val;
3268      }
3269    },
3270    set: function (value) {
3271      var oldValue = source[key];
3272      if (isRef(oldValue) && !isRef(value)) {
3273        oldValue.value = value;
3274      } else {
3275        source[key] = value;
3276      }
3277    }
3278  });
3279}
3280function customRef(factory) {
3281  var dep = new Dep();
3282  var _a = factory(function () {
3283      if (true) {
3284        dep.depend({
3285          target: ref,
3286          type: "get" /* TrackOpTypes.GET */,
3287          key: 'value'
3288        });
3289      } else {}
3290    }, function () {
3291      if (true) {
3292        dep.notify({
3293          target: ref,
3294          type: "set" /* TriggerOpTypes.SET */,
3295          key: 'value'
3296        });
3297      } else {}
3298    }),
3299    get = _a.get,
3300    set = _a.set;
3301  var ref = {
3302    get value() {
3303      return get();
3304    },
3305    set value(newVal) {
3306      set(newVal);
3307    }
3308  };
3309  def(ref, RefFlag, true);
3310  return ref;
3311}
3312function toRefs(object) {
3313  if ( true && !isReactive(object)) {
3314    warn$2("toRefs() expects a reactive object but received a plain one.");
3315  }
3316  var ret = isArray(object) ? new Array(object.length) : {};
3317  for (var key in object) {
3318    ret[key] = toRef(object, key);
3319  }
3320  return ret;
3321}
3322function toRef(object, key, defaultValue) {
3323  var val = object[key];
3324  if (isRef(val)) {
3325    return val;
3326  }
3327  var ref = {
3328    get value() {
3329      var val = object[key];
3330      return val === undefined ? defaultValue : val;
3331    },
3332    set value(newVal) {
3333      object[key] = newVal;
3334    }
3335  };
3336  def(ref, RefFlag, true);
3337  return ref;
3338}
3339var rawToReadonlyFlag = "__v_rawToReadonly";
3340var rawToShallowReadonlyFlag = "__v_rawToShallowReadonly";
3341function readonly(target) {
3342  return createReadonly(target, false);
3343}
3344function createReadonly(target, shallow) {
3345  if (!isPlainObject(target)) {
3346    if (true) {
3347      if (isArray(target)) {
3348        warn$2("Vue 2 does not support readonly arrays.");
3349      } else if (isCollectionType(target)) {
3350        warn$2("Vue 2 does not support readonly collection types such as Map or Set.");
3351      } else {
3352        warn$2("value cannot be made readonly: ".concat(typeof target));
3353      }
3354    }
3355    return target;
3356  }
3357  if ( true && !Object.isExtensible(target)) {
3358    warn$2("Vue 2 does not support creating readonly proxy for non-extensible object.");
3359  }
3360  // already a readonly object
3361  if (isReadonly(target)) {
3362    return target;
3363  }
3364  // already has a readonly proxy
3365  var existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag;
3366  var existingProxy = target[existingFlag];
3367  if (existingProxy) {
3368    return existingProxy;
3369  }
3370  var proxy = Object.create(Object.getPrototypeOf(target));
3371  def(target, existingFlag, proxy);
3372  def(proxy, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, true);
3373  def(proxy, "__v_raw" /* ReactiveFlags.RAW */, target);
3374  if (isRef(target)) {
3375    def(proxy, RefFlag, true);
3376  }
3377  if (shallow || isShallow(target)) {
3378    def(proxy, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
3379  }
3380  var keys = Object.keys(target);
3381  for (var i = 0; i < keys.length; i++) {
3382    defineReadonlyProperty(proxy, target, keys[i], shallow);
3383  }
3384  return proxy;
3385}
3386function defineReadonlyProperty(proxy, target, key, shallow) {
3387  Object.defineProperty(proxy, key, {
3388    enumerable: true,
3389    configurable: true,
3390    get: function () {
3391      var val = target[key];
3392      return shallow || !isPlainObject(val) ? val : readonly(val);
3393    },
3394    set: function () {
3395       true && warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly."));
3396    }
3397  });
3398}
3399/**
3400 * Returns a reactive-copy of the original object, where only the root level
3401 * properties are readonly, and does NOT unwrap refs nor recursively convert
3402 * returned properties.
3403 * This is used for creating the props proxy object for stateful components.
3404 */
3405function shallowReadonly(target) {
3406  return createReadonly(target, true);
3407}
3408function computed(getterOrOptions, debugOptions) {
3409  var getter;
3410  var setter;
3411  var onlyGetter = isFunction(getterOrOptions);
3412  if (onlyGetter) {
3413    getter = getterOrOptions;
3414    setter =  true ? function () {
3415      warn$2('Write operation failed: computed value is readonly');
3416    } : 0;
3417  } else {
3418    getter = getterOrOptions.get;
3419    setter = getterOrOptions.set;
3420  }
3421  var watcher = isServerRendering() ? null : new Watcher(currentInstance, getter, noop, {
3422    lazy: true
3423  });
3424  if ( true && watcher && debugOptions) {
3425    watcher.onTrack = debugOptions.onTrack;
3426    watcher.onTrigger = debugOptions.onTrigger;
3427  }
3428  var ref = {
3429    // some libs rely on the presence effect for checking computed refs
3430    // from normal refs, but the implementation doesn't matter
3431    effect: watcher,
3432    get value() {
3433      if (watcher) {
3434        if (watcher.dirty) {
3435          watcher.evaluate();
3436        }
3437        if (Dep.target) {
3438          if ( true && Dep.target.onTrack) {
3439            Dep.target.onTrack({
3440              effect: Dep.target,
3441              target: ref,
3442              type: "get" /* TrackOpTypes.GET */,
3443              key: 'value'
3444            });
3445          }
3446          watcher.depend();
3447        }
3448        return watcher.value;
3449      } else {
3450        return getter();
3451      }
3452    },
3453    set value(newVal) {
3454      setter(newVal);
3455    }
3456  };
3457  def(ref, RefFlag, true);
3458  def(ref, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, onlyGetter);
3459  return ref;
3460}
3461var mark;
3462var measure;
3463if (true) {
3464  var perf_1 = inBrowser && window.performance;
3465  /* istanbul ignore if */
3466  if (perf_1 &&
3467  // @ts-ignore
3468  perf_1.mark &&
3469  // @ts-ignore
3470  perf_1.measure &&
3471  // @ts-ignore
3472  perf_1.clearMarks &&
3473  // @ts-ignore
3474  perf_1.clearMeasures) {
3475    mark = function (tag) {
3476      return perf_1.mark(tag);
3477    };
3478    measure = function (name, startTag, endTag) {
3479      perf_1.measure(name, startTag, endTag);
3480      perf_1.clearMarks(startTag);
3481      perf_1.clearMarks(endTag);
3482      // perf.clearMeasures(name)
3483    };
3484  }
3485}
3486var normalizeEvent = cached(function (name) {
3487  var passive = name.charAt(0) === '&';
3488  name = passive ? name.slice(1) : name;
3489  var once = name.charAt(0) === '~'; // Prefixed last, checked first
3490  name = once ? name.slice(1) : name;
3491  var capture = name.charAt(0) === '!';
3492  name = capture ? name.slice(1) : name;
3493  return {
3494    name: name,
3495    once: once,
3496    capture: capture,
3497    passive: passive
3498  };
3499});
3500function createFnInvoker(fns, vm) {
3501  function invoker() {
3502    var fns = invoker.fns;
3503    if (isArray(fns)) {
3504      var cloned = fns.slice();
3505      for (var i = 0; i < cloned.length; i++) {
3506        invokeWithErrorHandling(cloned[i], null, arguments, vm, "v-on handler");
3507      }
3508    } else {
3509      // return handler return value for single handlers
3510      return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler");
3511    }
3512  }
3513  invoker.fns = fns;
3514  return invoker;
3515}
3516function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {
3517  var name, cur, old, event;
3518  for (name in on) {
3519    cur = on[name];
3520    old = oldOn[name];
3521    event = normalizeEvent(name);
3522    if (isUndef(cur)) {
3523       true && warn$2("Invalid handler for event \"".concat(event.name, "\": got ") + String(cur), vm);
3524    } else if (isUndef(old)) {
3525      if (isUndef(cur.fns)) {
3526        cur = on[name] = createFnInvoker(cur, vm);
3527      }
3528      if (isTrue(event.once)) {
3529        cur = on[name] = createOnceHandler(event.name, cur, event.capture);
3530      }
3531      add(event.name, cur, event.capture, event.passive, event.params);
3532    } else if (cur !== old) {
3533      old.fns = cur;
3534      on[name] = old;
3535    }
3536  }
3537  for (name in oldOn) {
3538    if (isUndef(on[name])) {
3539      event = normalizeEvent(name);
3540      remove(event.name, oldOn[name], event.capture);
3541    }
3542  }
3543}
3544function mergeVNodeHook(def, hookKey, hook) {
3545  if (def instanceof VNode) {
3546    def = def.data.hook || (def.data.hook = {});
3547  }
3548  var invoker;
3549  var oldHook = def[hookKey];
3550  function wrappedHook() {
3551    hook.apply(this, arguments);
3552    // important: remove merged hook to ensure it's called only once
3553    // and prevent memory leak
3554    remove$2(invoker.fns, wrappedHook);
3555  }
3556  if (isUndef(oldHook)) {
3557    // no existing hook
3558    invoker = createFnInvoker([wrappedHook]);
3559  } else {
3560    /* istanbul ignore if */
3561    if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
3562      // already a merged invoker
3563      invoker = oldHook;
3564      invoker.fns.push(wrappedHook);
3565    } else {
3566      // existing plain hook
3567      invoker = createFnInvoker([oldHook, wrappedHook]);
3568    }
3569  }
3570  invoker.merged = true;
3571  def[hookKey] = invoker;
3572}
3573function extractPropsFromVNodeData(data, Ctor, tag) {
3574  // we are only extracting raw values here.
3575  // validation and default values are handled in the child
3576  // component itself.
3577  var propOptions = Ctor.options.props;
3578  if (isUndef(propOptions)) {
3579    return;
3580  }
3581  var res = {};
3582  var attrs = data.attrs,
3583    props = data.props;
3584  if (isDef(attrs) || isDef(props)) {
3585    for (var key in propOptions) {
3586      var altKey = hyphenate(key);
3587      if (true) {
3588        var keyInLowerCase = key.toLowerCase();
3589        if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {
3590          tip("Prop \"".concat(keyInLowerCase, "\" is passed to component ") + "".concat(formatComponentName(
3591          // @ts-expect-error tag is string
3592          tag || Ctor), ", but the declared prop name is") + " \"".concat(key, "\". ") + "Note that HTML attributes are case-insensitive and camelCased " + "props need to use their kebab-case equivalents when using in-DOM " + "templates. You should probably use \"".concat(altKey, "\" instead of \"").concat(key, "\"."));
3593        }
3594      }
3595      checkProp(res, props, key, altKey, true) || checkProp(res, attrs, key, altKey, false);
3596    }
3597  }
3598  return res;
3599}
3600function checkProp(res, hash, key, altKey, preserve) {
3601  if (isDef(hash)) {
3602    if (hasOwn(hash, key)) {
3603      res[key] = hash[key];
3604      if (!preserve) {
3605        delete hash[key];
3606      }
3607      return true;
3608    } else if (hasOwn(hash, altKey)) {
3609      res[key] = hash[altKey];
3610      if (!preserve) {
3611        delete hash[altKey];
3612      }
3613      return true;
3614    }
3615  }
3616  return false;
3617}
3618
3619// The template compiler attempts to minimize the need for normalization by
3620// statically analyzing the template at compile time.
3621//
3622// For plain HTML markup, normalization can be completely skipped because the
3623// generated render function is guaranteed to return Array<VNode>. There are
3624// two cases where extra normalization is needed:
3625// 1. When the children contains components - because a functional component
3626// may return an Array instead of a single root. In this case, just a simple
3627// normalization is needed - if any child is an Array, we flatten the whole
3628// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
3629// because functional components already normalize their own children.
3630function simpleNormalizeChildren(children) {
3631  for (var i = 0; i < children.length; i++) {
3632    if (isArray(children[i])) {
3633      return Array.prototype.concat.apply([], children);
3634    }
3635  }
3636  return children;
3637}
3638// 2. When the children contains constructs that always generated nested Arrays,
3639// e.g. <template>, <slot>, v-for, or when the children is provided by user
3640// with hand-written render functions / JSX. In such cases a full normalization
3641// is needed to cater to all possible types of children values.
3642function normalizeChildren(children) {
3643  return isPrimitive(children) ? [createTextVNode(children)] : isArray(children) ? normalizeArrayChildren(children) : undefined;
3644}
3645function isTextNode(node) {
3646  return isDef(node) && isDef(node.text) && isFalse(node.isComment);
3647}
3648function normalizeArrayChildren(children, nestedIndex) {
3649  var res = [];
3650  var i, c, lastIndex, last;
3651  for (i = 0; i < children.length; i++) {
3652    c = children[i];
3653    if (isUndef(c) || typeof c === 'boolean') continue;
3654    lastIndex = res.length - 1;
3655    last = res[lastIndex];
3656    //  nested
3657    if (isArray(c)) {
3658      if (c.length > 0) {
3659        c = normalizeArrayChildren(c, "".concat(nestedIndex || '', "_").concat(i));
3660        // merge adjacent text nodes
3661        if (isTextNode(c[0]) && isTextNode(last)) {
3662          res[lastIndex] = createTextVNode(last.text + c[0].text);
3663          c.shift();
3664        }
3665        res.push.apply(res, c);
3666      }
3667    } else if (isPrimitive(c)) {
3668      if (isTextNode(last)) {
3669        // merge adjacent text nodes
3670        // this is necessary for SSR hydration because text nodes are
3671        // essentially merged when rendered to HTML strings
3672        res[lastIndex] = createTextVNode(last.text + c);
3673      } else if (c !== '') {
3674        // convert primitive to vnode
3675        res.push(createTextVNode(c));
3676      }
3677    } else {
3678      if (isTextNode(c) && isTextNode(last)) {
3679        // merge adjacent text nodes
3680        res[lastIndex] = createTextVNode(last.text + c.text);
3681      } else {
3682        // default key for nested array children (likely generated by v-for)
3683        if (isTrue(children._isVList) && isDef(c.tag) && isUndef(c.key) && isDef(nestedIndex)) {
3684          c.key = "__vlist".concat(nestedIndex, "_").concat(i, "__");
3685        }
3686        res.push(c);
3687      }
3688    }
3689  }
3690  return res;
3691}
3692var SIMPLE_NORMALIZE = 1;
3693var ALWAYS_NORMALIZE = 2;
3694// wrapper function for providing a more flexible interface
3695// without getting yelled at by flow
3696function createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) {
3697  if (isArray(data) || isPrimitive(data)) {
3698    normalizationType = children;
3699    children = data;
3700    data = undefined;
3701  }
3702  if (isTrue(alwaysNormalize)) {
3703    normalizationType = ALWAYS_NORMALIZE;
3704  }
3705  return _createElement(context, tag, data, children, normalizationType);
3706}
3707function _createElement(context, tag, data, children, normalizationType) {
3708  if (isDef(data) && isDef(data.__ob__)) {
3709     true && warn$2("Avoid using observed data object as vnode data: ".concat(JSON.stringify(data), "\n") + 'Always create fresh vnode data objects in each render!', context);
3710    return createEmptyVNode();
3711  }
3712  // object syntax in v-bind
3713  if (isDef(data) && isDef(data.is)) {
3714    tag = data.is;
3715  }
3716  if (!tag) {
3717    // in case of component :is set to falsy value
3718    return createEmptyVNode();
3719  }
3720  // warn against non-primitive key
3721  if ( true && isDef(data) && isDef(data.key) && !isPrimitive(data.key)) {
3722    warn$2('Avoid using non-primitive value as key, ' + 'use string/number value instead.', context);
3723  }
3724  // support single function children as default scoped slot
3725  if (isArray(children) && isFunction(children[0])) {
3726    data = data || {};
3727    data.scopedSlots = {
3728      default: children[0]
3729    };
3730    children.length = 0;
3731  }
3732  if (normalizationType === ALWAYS_NORMALIZE) {
3733    children = normalizeChildren(children);
3734  } else if (normalizationType === SIMPLE_NORMALIZE) {
3735    children = simpleNormalizeChildren(children);
3736  }
3737  var vnode, ns;
3738  if (typeof tag === 'string') {
3739    var Ctor = void 0;
3740    ns = context.$vnode && context.$vnode.ns || config.getTagNamespace(tag);
3741    if (config.isReservedTag(tag)) {
3742      // platform built-in elements
3743      if ( true && isDef(data) && isDef(data.nativeOn) && data.tag !== 'component') {
3744        warn$2("The .native modifier for v-on is only valid on components but it was used on <".concat(tag, ">."), context);
3745      }
3746      vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context);
3747    } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {
3748      // component
3749      vnode = createComponent(Ctor, data, context, children, tag);
3750    } else {
3751      // unknown or unlisted namespaced elements
3752      // check at runtime because it may get assigned a namespace when its
3753      // parent normalizes children
3754      vnode = new VNode(tag, data, children, undefined, undefined, context);
3755    }
3756  } else {
3757    // direct component options / constructor
3758    vnode = createComponent(tag, data, context, children);
3759  }
3760  if (isArray(vnode)) {
3761    return vnode;
3762  } else if (isDef(vnode)) {
3763    if (isDef(ns)) applyNS(vnode, ns);
3764    if (isDef(data)) registerDeepBindings(data);
3765    return vnode;
3766  } else {
3767    return createEmptyVNode();
3768  }
3769}
3770function applyNS(vnode, ns, force) {
3771  vnode.ns = ns;
3772  if (vnode.tag === 'foreignObject') {
3773    // use default namespace inside foreignObject
3774    ns = undefined;
3775    force = true;
3776  }
3777  if (isDef(vnode.children)) {
3778    for (var i = 0, l = vnode.children.length; i < l; i++) {
3779      var child = vnode.children[i];
3780      if (isDef(child.tag) && (isUndef(child.ns) || isTrue(force) && child.tag !== 'svg')) {
3781        applyNS(child, ns, force);
3782      }
3783    }
3784  }
3785}
3786// ref #5318
3787// necessary to ensure parent re-render when deep bindings like :style and
3788// :class are used on slot nodes
3789function registerDeepBindings(data) {
3790  if (isObject(data.style)) {
3791    traverse(data.style);
3792  }
3793  if (isObject(data.class)) {
3794    traverse(data.class);
3795  }
3796}
3797
3798/**
3799 * Runtime helper for rendering v-for lists.
3800 */
3801function renderList(val, render) {
3802  var ret = null,
3803    i,
3804    l,
3805    keys,
3806    key;
3807  if (isArray(val) || typeof val === 'string') {
3808    ret = new Array(val.length);
3809    for (i = 0, l = val.length; i < l; i++) {
3810      ret[i] = render(val[i], i);
3811    }
3812  } else if (typeof val === 'number') {
3813    ret = new Array(val);
3814    for (i = 0; i < val; i++) {
3815      ret[i] = render(i + 1, i);
3816    }
3817  } else if (isObject(val)) {
3818    if (hasSymbol && val[Symbol.iterator]) {
3819      ret = [];
3820      var iterator = val[Symbol.iterator]();
3821      var result = iterator.next();
3822      while (!result.done) {
3823        ret.push(render(result.value, ret.length));
3824        result = iterator.next();
3825      }
3826    } else {
3827      keys = Object.keys(val);
3828      ret = new Array(keys.length);
3829      for (i = 0, l = keys.length; i < l; i++) {
3830        key = keys[i];
3831        ret[i] = render(val[key], key, i);
3832      }
3833    }
3834  }
3835  if (!isDef(ret)) {
3836    ret = [];
3837  }
3838  ret._isVList = true;
3839  return ret;
3840}
3841
3842/**
3843 * Runtime helper for rendering <slot>
3844 */
3845function renderSlot(name, fallbackRender, props, bindObject) {
3846  var scopedSlotFn = this.$scopedSlots[name];
3847  var nodes;
3848  if (scopedSlotFn) {
3849    // scoped slot
3850    props = props || {};
3851    if (bindObject) {
3852      if ( true && !isObject(bindObject)) {
3853        warn$2('slot v-bind without argument expects an Object', this);
3854      }
3855      props = extend(extend({}, bindObject), props);
3856    }
3857    nodes = scopedSlotFn(props) || (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
3858  } else {
3859    nodes = this.$slots[name] || (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
3860  }
3861  var target = props && props.slot;
3862  if (target) {
3863    return this.$createElement('template', {
3864      slot: target
3865    }, nodes);
3866  } else {
3867    return nodes;
3868  }
3869}
3870
3871/**
3872 * Runtime helper for resolving filters
3873 */
3874function resolveFilter(id) {
3875  return resolveAsset(this.$options, 'filters', id, true) || identity;
3876}
3877function isKeyNotMatch(expect, actual) {
3878  if (isArray(expect)) {
3879    return expect.indexOf(actual) === -1;
3880  } else {
3881    return expect !== actual;
3882  }
3883}
3884/**
3885 * Runtime helper for checking keyCodes from config.
3886 * exposed as Vue.prototype._k
3887 * passing in eventKeyName as last argument separately for backwards compat
3888 */
3889function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) {
3890  var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
3891  if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
3892    return isKeyNotMatch(builtInKeyName, eventKeyName);
3893  } else if (mappedKeyCode) {
3894    return isKeyNotMatch(mappedKeyCode, eventKeyCode);
3895  } else if (eventKeyName) {
3896    return hyphenate(eventKeyName) !== key;
3897  }
3898  return eventKeyCode === undefined;
3899}
3900
3901/**
3902 * Runtime helper for merging v-bind="object" into a VNode's data.
3903 */
3904function bindObjectProps(data, tag, value, asProp, isSync) {
3905  if (value) {
3906    if (!isObject(value)) {
3907       true && warn$2('v-bind without argument expects an Object or Array value', this);
3908    } else {
3909      if (isArray(value)) {
3910        value = toObject(value);
3911      }
3912      var hash = void 0;
3913      var _loop_1 = function (key) {
3914        if (key === 'class' || key === 'style' || isReservedAttribute(key)) {
3915          hash = data;
3916        } else {
3917          var type = data.attrs && data.attrs.type;
3918          hash = asProp || config.mustUseProp(tag, type, key) ? data.domProps || (data.domProps = {}) : data.attrs || (data.attrs = {});
3919        }
3920        var camelizedKey = camelize(key);
3921        var hyphenatedKey = hyphenate(key);
3922        if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
3923          hash[key] = value[key];
3924          if (isSync) {
3925            var on = data.on || (data.on = {});
3926            on["update:".concat(key)] = function ($event) {
3927              value[key] = $event;
3928            };
3929          }
3930        }
3931      };
3932      for (var key in value) {
3933        _loop_1(key);
3934      }
3935    }
3936  }
3937  return data;
3938}
3939
3940/**
3941 * Runtime helper for rendering static trees.
3942 */
3943function renderStatic(index, isInFor) {
3944  var cached = this._staticTrees || (this._staticTrees = []);
3945  var tree = cached[index];
3946  // if has already-rendered static tree and not inside v-for,
3947  // we can reuse the same tree.
3948  if (tree && !isInFor) {
3949    return tree;
3950  }
3951  // otherwise, render a fresh tree.
3952  tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates
3953  );
3954  markStatic$1(tree, "__static__".concat(index), false);
3955  return tree;
3956}
3957/**
3958 * Runtime helper for v-once.
3959 * Effectively it means marking the node as static with a unique key.
3960 */
3961function markOnce(tree, index, key) {
3962  markStatic$1(tree, "__once__".concat(index).concat(key ? "_".concat(key) : ""), true);
3963  return tree;
3964}
3965function markStatic$1(tree, key, isOnce) {
3966  if (isArray(tree)) {
3967    for (var i = 0; i < tree.length; i++) {
3968      if (tree[i] && typeof tree[i] !== 'string') {
3969        markStaticNode(tree[i], "".concat(key, "_").concat(i), isOnce);
3970      }
3971    }
3972  } else {
3973    markStaticNode(tree, key, isOnce);
3974  }
3975}
3976function markStaticNode(node, key, isOnce) {
3977  node.isStatic = true;
3978  node.key = key;
3979  node.isOnce = isOnce;
3980}
3981function bindObjectListeners(data, value) {
3982  if (value) {
3983    if (!isPlainObject(value)) {
3984       true && warn$2('v-on without argument expects an Object value', this);
3985    } else {
3986      var on = data.on = data.on ? extend({}, data.on) : {};
3987      for (var key in value) {
3988        var existing = on[key];
3989        var ours = value[key];
3990        on[key] = existing ? [].concat(existing, ours) : ours;
3991      }
3992    }
3993  }
3994  return data;
3995}
3996function resolveScopedSlots(fns, res,
3997// the following are added in 2.6
3998hasDynamicKeys, contentHashKey) {
3999  res = res || {
4000    $stable: !hasDynamicKeys
4001  };
4002  for (var i = 0; i < fns.length; i++) {
4003    var slot = fns[i];
4004    if (isArray(slot)) {
4005      resolveScopedSlots(slot, res, hasDynamicKeys);
4006    } else if (slot) {
4007      // marker for reverse proxying v-slot without scope on this.$slots
4008      // @ts-expect-error
4009      if (slot.proxy) {
4010        // @ts-expect-error
4011        slot.fn.proxy = true;
4012      }
4013      res[slot.key] = slot.fn;
4014    }
4015  }
4016  if (contentHashKey) {
4017    res.$key = contentHashKey;
4018  }
4019  return res;
4020}
4021
4022// helper to process dynamic keys for dynamic arguments in v-bind and v-on.
4023function bindDynamicKeys(baseObj, values) {
4024  for (var i = 0; i < values.length; i += 2) {
4025    var key = values[i];
4026    if (typeof key === 'string' && key) {
4027      baseObj[values[i]] = values[i + 1];
4028    } else if ( true && key !== '' && key !== null) {
4029      // null is a special value for explicitly removing a binding
4030      warn$2("Invalid value for dynamic directive argument (expected string or null): ".concat(key), this);
4031    }
4032  }
4033  return baseObj;
4034}
4035// helper to dynamically append modifier runtime markers to event names.
4036// ensure only append when value is already string, otherwise it will be cast
4037// to string and cause the type check to miss.
4038function prependModifier(value, symbol) {
4039  return typeof value === 'string' ? symbol + value : value;
4040}
4041function installRenderHelpers(target) {
4042  target._o = markOnce;
4043  target._n = toNumber;
4044  target._s = toString;
4045  target._l = renderList;
4046  target._t = renderSlot;
4047  target._q = looseEqual;
4048  target._i = looseIndexOf;
4049  target._m = renderStatic;
4050  target._f = resolveFilter;
4051  target._k = checkKeyCodes;
4052  target._b = bindObjectProps;
4053  target._v = createTextVNode;
4054  target._e = createEmptyVNode;
4055  target._u = resolveScopedSlots;
4056  target._g = bindObjectListeners;
4057  target._d = bindDynamicKeys;
4058  target._p = prependModifier;
4059}
4060
4061/**
4062 * Runtime helper for resolving raw children VNodes into a slot object.
4063 */
4064function resolveSlots(children, context) {
4065  if (!children || !children.length) {
4066    return {};
4067  }
4068  var slots = {};
4069  for (var i = 0, l = children.length; i < l; i++) {
4070    var child = children[i];
4071    var data = child.data;
4072    // remove slot attribute if the node is resolved as a Vue slot node
4073    if (data && data.attrs && data.attrs.slot) {
4074      delete data.attrs.slot;
4075    }
4076    // named slots should only be respected if the vnode was rendered in the
4077    // same context.
4078    if ((child.context === context || child.fnContext === context) && data && data.slot != null) {
4079      var name_1 = data.slot;
4080      var slot = slots[name_1] || (slots[name_1] = []);
4081      if (child.tag === 'template') {
4082        slot.push.apply(slot, child.children || []);
4083      } else {
4084        slot.push(child);
4085      }
4086    } else {
4087      (slots.default || (slots.default = [])).push(child);
4088    }
4089  }
4090  // ignore slots that contains only whitespace
4091  for (var name_2 in slots) {
4092    if (slots[name_2].every(isWhitespace)) {
4093      delete slots[name_2];
4094    }
4095  }
4096  return slots;
4097}
4098function isWhitespace(node) {
4099  return node.isComment && !node.asyncFactory || node.text === ' ';
4100}
4101function isAsyncPlaceholder(node) {
4102  // @ts-expect-error not really boolean type
4103  return node.isComment && node.asyncFactory;
4104}
4105function normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) {
4106  var res;
4107  var hasNormalSlots = Object.keys(normalSlots).length > 0;
4108  var isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots;
4109  var key = scopedSlots && scopedSlots.$key;
4110  if (!scopedSlots) {
4111    res = {};
4112  } else if (scopedSlots._normalized) {
4113    // fast path 1: child component re-render only, parent did not change
4114    return scopedSlots._normalized;
4115  } else if (isStable && prevScopedSlots && prevScopedSlots !== emptyObject && key === prevScopedSlots.$key && !hasNormalSlots && !prevScopedSlots.$hasNormal) {
4116    // fast path 2: stable scoped slots w/ no normal slots to proxy,
4117    // only need to normalize once
4118    return prevScopedSlots;
4119  } else {
4120    res = {};
4121    for (var key_1 in scopedSlots) {
4122      if (scopedSlots[key_1] && key_1[0] !== '$') {
4123        res[key_1] = normalizeScopedSlot(ownerVm, normalSlots, key_1, scopedSlots[key_1]);
4124      }
4125    }
4126  }
4127  // expose normal slots on scopedSlots
4128  for (var key_2 in normalSlots) {
4129    if (!(key_2 in res)) {
4130      res[key_2] = proxyNormalSlot(normalSlots, key_2);
4131    }
4132  }
4133  // avoriaz seems to mock a non-extensible $scopedSlots object
4134  // and when that is passed down this would cause an error
4135  if (scopedSlots && Object.isExtensible(scopedSlots)) {
4136    scopedSlots._normalized = res;
4137  }
4138  def(res, '$stable', isStable);
4139  def(res, '$key', key);
4140  def(res, '$hasNormal', hasNormalSlots);
4141  return res;
4142}
4143function normalizeScopedSlot(vm, normalSlots, key, fn) {
4144  var normalized = function () {
4145    var cur = currentInstance;
4146    setCurrentInstance(vm);
4147    var res = arguments.length ? fn.apply(null, arguments) : fn({});
4148    res = res && typeof res === 'object' && !isArray(res) ? [res] // single vnode
4149    : normalizeChildren(res);
4150    var vnode = res && res[0];
4151    setCurrentInstance(cur);
4152    return res && (!vnode || res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode)) // #9658, #10391
4153    ? undefined : res;
4154  };
4155  // this is a slot using the new v-slot syntax without scope. although it is
4156  // compiled as a scoped slot, render fn users would expect it to be present
4157  // on this.$slots because the usage is semantically a normal slot.
4158  if (fn.proxy) {
4159    Object.defineProperty(normalSlots, key, {
4160      get: normalized,
4161      enumerable: true,
4162      configurable: true
4163    });
4164  }
4165  return normalized;
4166}
4167function proxyNormalSlot(slots, key) {
4168  return function () {
4169    return slots[key];
4170  };
4171}
4172function initSetup(vm) {
4173  var options = vm.$options;
4174  var setup = options.setup;
4175  if (setup) {
4176    var ctx = vm._setupContext = createSetupContext(vm);
4177    setCurrentInstance(vm);
4178    pushTarget();
4179    var setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, "setup");
4180    popTarget();
4181    setCurrentInstance();
4182    if (isFunction(setupResult)) {
4183      // render function
4184      // @ts-ignore
4185      options.render = setupResult;
4186    } else if (isObject(setupResult)) {
4187      // bindings
4188      if ( true && setupResult instanceof VNode) {
4189        warn$2("setup() should not return VNodes directly - " + "return a render function instead.");
4190      }
4191      vm._setupState = setupResult;
4192      // __sfc indicates compiled bindings from <script setup>
4193      if (!setupResult.__sfc) {
4194        for (var key in setupResult) {
4195          if (!isReserved(key)) {
4196            proxyWithRefUnwrap(vm, setupResult, key);
4197          } else if (true) {
4198            warn$2("Avoid using variables that start with _ or $ in setup().");
4199          }
4200        }
4201      } else {
4202        // exposed for compiled render fn
4203        var proxy = vm._setupProxy = {};
4204        for (var key in setupResult) {
4205          if (key !== '__sfc') {
4206            proxyWithRefUnwrap(proxy, setupResult, key);
4207          }
4208        }
4209      }
4210    } else if ( true && setupResult !== undefined) {
4211      warn$2("setup() should return an object. Received: ".concat(setupResult === null ? 'null' : typeof setupResult));
4212    }
4213  }
4214}
4215function createSetupContext(vm) {
4216  var exposeCalled = false;
4217  return {
4218    get attrs() {
4219      if (!vm._attrsProxy) {
4220        var proxy = vm._attrsProxy = {};
4221        def(proxy, '_v_attr_proxy', true);
4222        syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs');
4223      }
4224      return vm._attrsProxy;
4225    },
4226    get listeners() {
4227      if (!vm._listenersProxy) {
4228        var proxy = vm._listenersProxy = {};
4229        syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners');
4230      }
4231      return vm._listenersProxy;
4232    },
4233    get slots() {
4234      return initSlotsProxy(vm);
4235    },
4236    emit: bind$1(vm.$emit, vm),
4237    expose: function (exposed) {
4238      if (true) {
4239        if (exposeCalled) {
4240          warn$2("expose() should be called only once per setup().", vm);
4241        }
4242        exposeCalled = true;
4243      }
4244      if (exposed) {
4245        Object.keys(exposed).forEach(function (key) {
4246          return proxyWithRefUnwrap(vm, exposed, key);
4247        });
4248      }
4249    }
4250  };
4251}
4252function syncSetupProxy(to, from, prev, instance, type) {
4253  var changed = false;
4254  for (var key in from) {
4255    if (!(key in to)) {
4256      changed = true;
4257      defineProxyAttr(to, key, instance, type);
4258    } else if (from[key] !== prev[key]) {
4259      changed = true;
4260    }
4261  }
4262  for (var key in to) {
4263    if (!(key in from)) {
4264      changed = true;
4265      delete to[key];
4266    }
4267  }
4268  return changed;
4269}
4270function defineProxyAttr(proxy, key, instance, type) {
4271  Object.defineProperty(proxy, key, {
4272    enumerable: true,
4273    configurable: true,
4274    get: function () {
4275      return instance[type][key];
4276    }
4277  });
4278}
4279function initSlotsProxy(vm) {
4280  if (!vm._slotsProxy) {
4281    syncSetupSlots(vm._slotsProxy = {}, vm.$scopedSlots);
4282  }
4283  return vm._slotsProxy;
4284}
4285function syncSetupSlots(to, from) {
4286  for (var key in from) {
4287    to[key] = from[key];
4288  }
4289  for (var key in to) {
4290    if (!(key in from)) {
4291      delete to[key];
4292    }
4293  }
4294}
4295/**
4296 * @internal use manual type def because public setup context type relies on
4297 * legacy VNode types
4298 */
4299function useSlots() {
4300  return getContext().slots;
4301}
4302/**
4303 * @internal use manual type def because public setup context type relies on
4304 * legacy VNode types
4305 */
4306function useAttrs() {
4307  return getContext().attrs;
4308}
4309/**
4310 * Vue 2 only
4311 * @internal use manual type def because public setup context type relies on
4312 * legacy VNode types
4313 */
4314function useListeners() {
4315  return getContext().listeners;
4316}
4317function getContext() {
4318  if ( true && !currentInstance) {
4319    warn$2("useContext() called without active instance.");
4320  }
4321  var vm = currentInstance;
4322  return vm._setupContext || (vm._setupContext = createSetupContext(vm));
4323}
4324/**
4325 * Runtime helper for merging default declarations. Imported by compiled code
4326 * only.
4327 * @internal
4328 */
4329function mergeDefaults(raw, defaults) {
4330  var props = isArray(raw) ? raw.reduce(function (normalized, p) {
4331    return normalized[p] = {}, normalized;
4332  }, {}) : raw;
4333  for (var key in defaults) {
4334    var opt = props[key];
4335    if (opt) {
4336      if (isArray(opt) || isFunction(opt)) {
4337        props[key] = {
4338          type: opt,
4339          default: defaults[key]
4340        };
4341      } else {
4342        opt.default = defaults[key];
4343      }
4344    } else if (opt === null) {
4345      props[key] = {
4346        default: defaults[key]
4347      };
4348    } else if (true) {
4349      warn$2("props default key \"".concat(key, "\" has no corresponding declaration."));
4350    }
4351  }
4352  return props;
4353}
4354function initRender(vm) {
4355  vm._vnode = null; // the root of the child tree
4356  vm._staticTrees = null; // v-once cached trees
4357  var options = vm.$options;
4358  var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree
4359  var renderContext = parentVnode && parentVnode.context;
4360  vm.$slots = resolveSlots(options._renderChildren, renderContext);
4361  vm.$scopedSlots = parentVnode ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots) : emptyObject;
4362  // bind the createElement fn to this instance
4363  // so that we get proper render context inside it.
4364  // args order: tag, data, children, normalizationType, alwaysNormalize
4365  // internal version is used by render functions compiled from templates
4366  // @ts-expect-error
4367  vm._c = function (a, b, c, d) {
4368    return createElement$1(vm, a, b, c, d, false);
4369  };
4370  // normalization is always applied for the public version, used in
4371  // user-written render functions.
4372  // @ts-expect-error
4373  vm.$createElement = function (a, b, c, d) {
4374    return createElement$1(vm, a, b, c, d, true);
4375  };
4376  // $attrs & $listeners are exposed for easier HOC creation.
4377  // they need to be reactive so that HOCs using them are always updated
4378  var parentData = parentVnode && parentVnode.data;
4379  /* istanbul ignore else */
4380  if (true) {
4381    defineReactive(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {
4382      !isUpdatingChildComponent && warn$2("$attrs is readonly.", vm);
4383    }, true);
4384    defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () {
4385      !isUpdatingChildComponent && warn$2("$listeners is readonly.", vm);
4386    }, true);
4387  } else {}
4388}
4389var currentRenderingInstance = null;
4390function renderMixin(Vue) {
4391  // install runtime convenience helpers
4392  installRenderHelpers(Vue.prototype);
4393  Vue.prototype.$nextTick = function (fn) {
4394    return nextTick(fn, this);
4395  };
4396  Vue.prototype._render = function () {
4397    var vm = this;
4398    var _a = vm.$options,
4399      render = _a.render,
4400      _parentVnode = _a._parentVnode;
4401    if (_parentVnode && vm._isMounted) {
4402      vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots);
4403      if (vm._slotsProxy) {
4404        syncSetupSlots(vm._slotsProxy, vm.$scopedSlots);
4405      }
4406    }
4407    // set parent vnode. this allows render functions to have access
4408    // to the data on the placeholder node.
4409    vm.$vnode = _parentVnode;
4410    // render self
4411    var vnode;
4412    try {
4413      // There's no need to maintain a stack because all render fns are called
4414      // separately from one another. Nested component's render fns are called
4415      // when parent component is patched.
4416      setCurrentInstance(vm);
4417      currentRenderingInstance = vm;
4418      vnode = render.call(vm._renderProxy, vm.$createElement);
4419    } catch (e) {
4420      handleError(e, vm, "render");
4421      // return error render result,
4422      // or previous vnode to prevent render error causing blank component
4423      /* istanbul ignore else */
4424      if ( true && vm.$options.renderError) {
4425        try {
4426          vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
4427        } catch (e) {
4428          handleError(e, vm, "renderError");
4429          vnode = vm._vnode;
4430        }
4431      } else {
4432        vnode = vm._vnode;
4433      }
4434    } finally {
4435      currentRenderingInstance = null;
4436      setCurrentInstance();
4437    }
4438    // if the returned array contains only a single node, allow it
4439    if (isArray(vnode) && vnode.length === 1) {
4440      vnode = vnode[0];
4441    }
4442    // return empty vnode in case the render function errored out
4443    if (!(vnode instanceof VNode)) {
4444      if ( true && isArray(vnode)) {
4445        warn$2('Multiple root nodes returned from render function. Render function ' + 'should return a single root node.', vm);
4446      }
4447      vnode = createEmptyVNode();
4448    }
4449    // set parent
4450    vnode.parent = _parentVnode;
4451    return vnode;
4452  };
4453}
4454function ensureCtor(comp, base) {
4455  if (comp.__esModule || hasSymbol && comp[Symbol.toStringTag] === 'Module') {
4456    comp = comp.default;
4457  }
4458  return isObject(comp) ? base.extend(comp) : comp;
4459}
4460function createAsyncPlaceholder(factory, data, context, children, tag) {
4461  var node = createEmptyVNode();
4462  node.asyncFactory = factory;
4463  node.asyncMeta = {
4464    data: data,
4465    context: context,
4466    children: children,
4467    tag: tag
4468  };
4469  return node;
4470}
4471function resolveAsyncComponent(factory, baseCtor) {
4472  if (isTrue(factory.error) && isDef(factory.errorComp)) {
4473    return factory.errorComp;
4474  }
4475  if (isDef(factory.resolved)) {
4476    return factory.resolved;
4477  }
4478  var owner = currentRenderingInstance;
4479  if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
4480    // already pending
4481    factory.owners.push(owner);
4482  }
4483  if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
4484    return factory.loadingComp;
4485  }
4486  if (owner && !isDef(factory.owners)) {
4487    var owners_1 = factory.owners = [owner];
4488    var sync_1 = true;
4489    var timerLoading_1 = null;
4490    var timerTimeout_1 = null;
4491    owner.$on('hook:destroyed', function () {
4492      return remove$2(owners_1, owner);
4493    });
4494    var forceRender_1 = function (renderCompleted) {
4495      for (var i = 0, l = owners_1.length; i < l; i++) {
4496        owners_1[i].$forceUpdate();
4497      }
4498      if (renderCompleted) {
4499        owners_1.length = 0;
4500        if (timerLoading_1 !== null) {
4501          clearTimeout(timerLoading_1);
4502          timerLoading_1 = null;
4503        }
4504        if (timerTimeout_1 !== null) {
4505          clearTimeout(timerTimeout_1);
4506          timerTimeout_1 = null;
4507        }
4508      }
4509    };
4510    var resolve = once(function (res) {
4511      // cache resolved
4512      factory.resolved = ensureCtor(res, baseCtor);
4513      // invoke callbacks only if this is not a synchronous resolve
4514      // (async resolves are shimmed as synchronous during SSR)
4515      if (!sync_1) {
4516        forceRender_1(true);
4517      } else {
4518        owners_1.length = 0;
4519      }
4520    });
4521    var reject_1 = once(function (reason) {
4522       true && warn$2("Failed to resolve async component: ".concat(String(factory)) + (reason ? "\nReason: ".concat(reason) : ''));
4523      if (isDef(factory.errorComp)) {
4524        factory.error = true;
4525        forceRender_1(true);
4526      }
4527    });
4528    var res_1 = factory(resolve, reject_1);
4529    if (isObject(res_1)) {
4530      if (isPromise(res_1)) {
4531        // () => Promise
4532        if (isUndef(factory.resolved)) {
4533          res_1.then(resolve, reject_1);
4534        }
4535      } else if (isPromise(res_1.component)) {
4536        res_1.component.then(resolve, reject_1);
4537        if (isDef(res_1.error)) {
4538          factory.errorComp = ensureCtor(res_1.error, baseCtor);
4539        }
4540        if (isDef(res_1.loading)) {
4541          factory.loadingComp = ensureCtor(res_1.loading, baseCtor);
4542          if (res_1.delay === 0) {
4543            factory.loading = true;
4544          } else {
4545            // @ts-expect-error NodeJS timeout type
4546            timerLoading_1 = setTimeout(function () {
4547              timerLoading_1 = null;
4548              if (isUndef(factory.resolved) && isUndef(factory.error)) {
4549                factory.loading = true;
4550                forceRender_1(false);
4551              }
4552            }, res_1.delay || 200);
4553          }
4554        }
4555        if (isDef(res_1.timeout)) {
4556          // @ts-expect-error NodeJS timeout type
4557          timerTimeout_1 = setTimeout(function () {
4558            timerTimeout_1 = null;
4559            if (isUndef(factory.resolved)) {
4560              reject_1( true ? "timeout (".concat(res_1.timeout, "ms)") : 0);
4561            }
4562          }, res_1.timeout);
4563        }
4564      }
4565    }
4566    sync_1 = false;
4567    // return in case resolved synchronously
4568    return factory.loading ? factory.loadingComp : factory.resolved;
4569  }
4570}
4571function getFirstComponentChild(children) {
4572  if (isArray(children)) {
4573    for (var i = 0; i < children.length; i++) {
4574      var c = children[i];
4575      if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
4576        return c;
4577      }
4578    }
4579  }
4580}
4581function initEvents(vm) {
4582  vm._events = Object.create(null);
4583  vm._hasHookEvent = false;
4584  // init parent attached events
4585  var listeners = vm.$options._parentListeners;
4586  if (listeners) {
4587    updateComponentListeners(vm, listeners);
4588  }
4589}
4590var target$1;
4591function add$1(event, fn) {
4592  target$1.$on(event, fn);
4593}
4594function remove$1(event, fn) {
4595  target$1.$off(event, fn);
4596}
4597function createOnceHandler$1(event, fn) {
4598  var _target = target$1;
4599  return function onceHandler() {
4600    var res = fn.apply(null, arguments);
4601    if (res !== null) {
4602      _target.$off(event, onceHandler);
4603    }
4604  };
4605}
4606function updateComponentListeners(vm, listeners, oldListeners) {
4607  target$1 = vm;
4608  updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm);
4609  target$1 = undefined;
4610}
4611function eventsMixin(Vue) {
4612  var hookRE = /^hook:/;
4613  Vue.prototype.$on = function (event, fn) {
4614    var vm = this;
4615    if (isArray(event)) {
4616      for (var i = 0, l = event.length; i < l; i++) {
4617        vm.$on(event[i], fn);
4618      }
4619    } else {
4620      (vm._events[event] || (vm._events[event] = [])).push(fn);
4621      // optimize hook:event cost by using a boolean flag marked at registration
4622      // instead of a hash lookup
4623      if (hookRE.test(event)) {
4624        vm._hasHookEvent = true;
4625      }
4626    }
4627    return vm;
4628  };
4629  Vue.prototype.$once = function (event, fn) {
4630    var vm = this;
4631    function on() {
4632      vm.$off(event, on);
4633      fn.apply(vm, arguments);
4634    }
4635    on.fn = fn;
4636    vm.$on(event, on);
4637    return vm;
4638  };
4639  Vue.prototype.$off = function (event, fn) {
4640    var vm = this;
4641    // all
4642    if (!arguments.length) {
4643      vm._events = Object.create(null);
4644      return vm;
4645    }
4646    // array of events
4647    if (isArray(event)) {
4648      for (var i_1 = 0, l = event.length; i_1 < l; i_1++) {
4649        vm.$off(event[i_1], fn);
4650      }
4651      return vm;
4652    }
4653    // specific event
4654    var cbs = vm._events[event];
4655    if (!cbs) {
4656      return vm;
4657    }
4658    if (!fn) {
4659      vm._events[event] = null;
4660      return vm;
4661    }
4662    // specific handler
4663    var cb;
4664    var i = cbs.length;
4665    while (i--) {
4666      cb = cbs[i];
4667      if (cb === fn || cb.fn === fn) {
4668        cbs.splice(i, 1);
4669        break;
4670      }
4671    }
4672    return vm;
4673  };
4674  Vue.prototype.$emit = function (event) {
4675    var vm = this;
4676    if (true) {
4677      var lowerCaseEvent = event.toLowerCase();
4678      if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
4679        tip("Event \"".concat(lowerCaseEvent, "\" is emitted in component ") + "".concat(formatComponentName(vm), " but the handler is registered for \"").concat(event, "\". ") + "Note that HTML attributes are case-insensitive and you cannot use " + "v-on to listen to camelCase events when using in-DOM templates. " + "You should probably use \"".concat(hyphenate(event), "\" instead of \"").concat(event, "\"."));
4680      }
4681    }
4682    var cbs = vm._events[event];
4683    if (cbs) {
4684      cbs = cbs.length > 1 ? toArray(cbs) : cbs;
4685      var args = toArray(arguments, 1);
4686      var info = "event handler for \"".concat(event, "\"");
4687      for (var i = 0, l = cbs.length; i < l; i++) {
4688        invokeWithErrorHandling(cbs[i], vm, args, vm, info);
4689      }
4690    }
4691    return vm;
4692  };
4693}
4694var activeInstance = null;
4695var isUpdatingChildComponent = false;
4696function setActiveInstance(vm) {
4697  var prevActiveInstance = activeInstance;
4698  activeInstance = vm;
4699  return function () {
4700    activeInstance = prevActiveInstance;
4701  };
4702}
4703function initLifecycle(vm) {
4704  var options = vm.$options;
4705  // locate first non-abstract parent
4706  var parent = options.parent;
4707  if (parent && !options.abstract) {
4708    while (parent.$options.abstract && parent.$parent) {
4709      parent = parent.$parent;
4710    }
4711    parent.$children.push(vm);
4712  }
4713  vm.$parent = parent;
4714  vm.$root = parent ? parent.$root : vm;
4715  vm.$children = [];
4716  vm.$refs = {};
4717  vm._provided = parent ? parent._provided : Object.create(null);
4718  vm._watcher = null;
4719  vm._inactive = null;
4720  vm._directInactive = false;
4721  vm._isMounted = false;
4722  vm._isDestroyed = false;
4723  vm._isBeingDestroyed = false;
4724}
4725function lifecycleMixin(Vue) {
4726  Vue.prototype._update = function (vnode, hydrating) {
4727    var vm = this;
4728    var prevEl = vm.$el;
4729    var prevVnode = vm._vnode;
4730    var restoreActiveInstance = setActiveInstance(vm);
4731    vm._vnode = vnode;
4732    // Vue.prototype.__patch__ is injected in entry points
4733    // based on the rendering backend used.
4734    if (!prevVnode) {
4735      // initial render
4736      vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);
4737    } else {
4738      // updates
4739      vm.$el = vm.__patch__(prevVnode, vnode);
4740    }
4741    restoreActiveInstance();
4742    // update __vue__ reference
4743    if (prevEl) {
4744      prevEl.__vue__ = null;
4745    }
4746    if (vm.$el) {
4747      vm.$el.__vue__ = vm;
4748    }
4749    // if parent is an HOC, update its $el as well
4750    var wrapper = vm;
4751    while (wrapper && wrapper.$vnode && wrapper.$parent && wrapper.$vnode === wrapper.$parent._vnode) {
4752      wrapper.$parent.$el = wrapper.$el;
4753      wrapper = wrapper.$parent;
4754    }
4755    // updated hook is called by the scheduler to ensure that children are
4756    // updated in a parent's updated hook.
4757  };
4758  Vue.prototype.$forceUpdate = function () {
4759    var vm = this;
4760    if (vm._watcher) {
4761      vm._watcher.update();
4762    }
4763  };
4764  Vue.prototype.$destroy = function () {
4765    var vm = this;
4766    if (vm._isBeingDestroyed) {
4767      return;
4768    }
4769    callHook$1(vm, 'beforeDestroy');
4770    vm._isBeingDestroyed = true;
4771    // remove self from parent
4772    var parent = vm.$parent;
4773    if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
4774      remove$2(parent.$children, vm);
4775    }
4776    // teardown scope. this includes both the render watcher and other
4777    // watchers created
4778    vm._scope.stop();
4779    // remove reference from data ob
4780    // frozen object may not have observer.
4781    if (vm._data.__ob__) {
4782      vm._data.__ob__.vmCount--;
4783    }
4784    // call the last hook...
4785    vm._isDestroyed = true;
4786    // invoke destroy hooks on current rendered tree
4787    vm.__patch__(vm._vnode, null);
4788    // fire destroyed hook
4789    callHook$1(vm, 'destroyed');
4790    // turn off all instance listeners.
4791    vm.$off();
4792    // remove __vue__ reference
4793    if (vm.$el) {
4794      vm.$el.__vue__ = null;
4795    }
4796    // release circular reference (#6759)
4797    if (vm.$vnode) {
4798      vm.$vnode.parent = null;
4799    }
4800  };
4801}
4802function mountComponent(vm, el, hydrating) {
4803  vm.$el = el;
4804  if (!vm.$options.render) {
4805    // @ts-expect-error invalid type
4806    vm.$options.render = createEmptyVNode;
4807    if (true) {
4808      /* istanbul ignore if */
4809      if (vm.$options.template && vm.$options.template.charAt(0) !== '#' || vm.$options.el || el) {
4810        warn$2('You are using the runtime-only build of Vue where the template ' + 'compiler is not available. Either pre-compile the templates into ' + 'render functions, or use the compiler-included build.', vm);
4811      } else {
4812        warn$2('Failed to mount component: template or render function not defined.', vm);
4813      }
4814    }
4815  }
4816  callHook$1(vm, 'beforeMount');
4817  var updateComponent;
4818  /* istanbul ignore if */
4819  if ( true && config.performance && mark) {
4820    updateComponent = function () {
4821      var name = vm._name;
4822      var id = vm._uid;
4823      var startTag = "vue-perf-start:".concat(id);
4824      var endTag = "vue-perf-end:".concat(id);
4825      mark(startTag);
4826      var vnode = vm._render();
4827      mark(endTag);
4828      measure("vue ".concat(name, " render"), startTag, endTag);
4829      mark(startTag);
4830      vm._update(vnode, hydrating);
4831      mark(endTag);
4832      measure("vue ".concat(name, " patch"), startTag, endTag);
4833    };
4834  } else {
4835    updateComponent = function () {
4836      vm._update(vm._render(), hydrating);
4837    };
4838  }
4839  var watcherOptions = {
4840    before: function () {
4841      if (vm._isMounted && !vm._isDestroyed) {
4842        callHook$1(vm, 'beforeUpdate');
4843      }
4844    }
4845  };
4846  if (true) {
4847    watcherOptions.onTrack = function (e) {
4848      return callHook$1(vm, 'renderTracked', [e]);
4849    };
4850    watcherOptions.onTrigger = function (e) {
4851      return callHook$1(vm, 'renderTriggered', [e]);
4852    };
4853  }
4854  // we set this to vm._watcher inside the watcher's constructor
4855  // since the watcher's initial patch may call $forceUpdate (e.g. inside child
4856  // component's mounted hook), which relies on vm._watcher being already defined
4857  new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */);
4858  hydrating = false;
4859  // flush buffer for flush: "pre" watchers queued in setup()
4860  var preWatchers = vm._preWatchers;
4861  if (preWatchers) {
4862    for (var i = 0; i < preWatchers.length; i++) {
4863      preWatchers[i].run();
4864    }
4865  }
4866  // manually mounted instance, call mounted on self
4867  // mounted is called for render-created child components in its inserted hook
4868  if (vm.$vnode == null) {
4869    vm._isMounted = true;
4870    callHook$1(vm, 'mounted');
4871  }
4872  return vm;
4873}
4874function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) {
4875  if (true) {
4876    isUpdatingChildComponent = true;
4877  }
4878  // determine whether component has slot children
4879  // we need to do this before overwriting $options._renderChildren.
4880  // check if there are dynamic scopedSlots (hand-written or compiled but with
4881  // dynamic slot names). Static scoped slots compiled from template has the
4882  // "$stable" marker.
4883  var newScopedSlots = parentVnode.data.scopedSlots;
4884  var oldScopedSlots = vm.$scopedSlots;
4885  var hasDynamicScopedSlot = !!(newScopedSlots && !newScopedSlots.$stable || oldScopedSlots !== emptyObject && !oldScopedSlots.$stable || newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key || !newScopedSlots && vm.$scopedSlots.$key);
4886  // Any static slot children from the parent may have changed during parent's
4887  // update. Dynamic scoped slots may also have changed. In such cases, a forced
4888  // update is necessary to ensure correctness.
4889  var needsForceUpdate = !!(renderChildren ||
4890  // has new static slots
4891  vm.$options._renderChildren ||
4892  // has old static slots
4893  hasDynamicScopedSlot);
4894  var prevVNode = vm.$vnode;
4895  vm.$options._parentVnode = parentVnode;
4896  vm.$vnode = parentVnode; // update vm's placeholder node without re-render
4897  if (vm._vnode) {
4898    // update child tree's parent
4899    vm._vnode.parent = parentVnode;
4900  }
4901  vm.$options._renderChildren = renderChildren;
4902  // update $attrs and $listeners hash
4903  // these are also reactive so they may trigger child update if the child
4904  // used them during render
4905  var attrs = parentVnode.data.attrs || emptyObject;
4906  if (vm._attrsProxy) {
4907    // force update if attrs are accessed and has changed since it may be
4908    // passed to a child component.
4909    if (syncSetupProxy(vm._attrsProxy, attrs, prevVNode.data && prevVNode.data.attrs || emptyObject, vm, '$attrs')) {
4910      needsForceUpdate = true;
4911    }
4912  }
4913  vm.$attrs = attrs;
4914  // update listeners
4915  listeners = listeners || emptyObject;
4916  var prevListeners = vm.$options._parentListeners;
4917  if (vm._listenersProxy) {
4918    syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners');
4919  }
4920  vm.$listeners = vm.$options._parentListeners = listeners;
4921  updateComponentListeners(vm, listeners, prevListeners);
4922  // update props
4923  if (propsData && vm.$options.props) {
4924    toggleObserving(false);
4925    var props = vm._props;
4926    var propKeys = vm.$options._propKeys || [];
4927    for (var i = 0; i < propKeys.length; i++) {
4928      var key = propKeys[i];
4929      var propOptions = vm.$options.props; // wtf flow?
4930      props[key] = validateProp(key, propOptions, propsData, vm);
4931    }
4932    toggleObserving(true);
4933    // keep a copy of raw propsData
4934    vm.$options.propsData = propsData;
4935  }
4936  // resolve slots + force update if has children
4937  if (needsForceUpdate) {
4938    vm.$slots = resolveSlots(renderChildren, parentVnode.context);
4939    vm.$forceUpdate();
4940  }
4941  if (true) {
4942    isUpdatingChildComponent = false;
4943  }
4944}
4945function isInInactiveTree(vm) {
4946  while (vm && (vm = vm.$parent)) {
4947    if (vm._inactive) return true;
4948  }
4949  return false;
4950}
4951function activateChildComponent(vm, direct) {
4952  if (direct) {
4953    vm._directInactive = false;
4954    if (isInInactiveTree(vm)) {
4955      return;
4956    }
4957  } else if (vm._directInactive) {
4958    return;
4959  }
4960  if (vm._inactive || vm._inactive === null) {
4961    vm._inactive = false;
4962    for (var i = 0; i < vm.$children.length; i++) {
4963      activateChildComponent(vm.$children[i]);
4964    }
4965    callHook$1(vm, 'activated');
4966  }
4967}
4968function deactivateChildComponent(vm, direct) {
4969  if (direct) {
4970    vm._directInactive = true;
4971    if (isInInactiveTree(vm)) {
4972      return;
4973    }
4974  }
4975  if (!vm._inactive) {
4976    vm._inactive = true;
4977    for (var i = 0; i < vm.$children.length; i++) {
4978      deactivateChildComponent(vm.$children[i]);
4979    }
4980    callHook$1(vm, 'deactivated');
4981  }
4982}
4983function callHook$1(vm, hook, args, setContext) {
4984  if (setContext === void 0) {
4985    setContext = true;
4986  }
4987  // #7573 disable dep collection when invoking lifecycle hooks
4988  pushTarget();
4989  var prev = currentInstance;
4990  setContext && setCurrentInstance(vm);
4991  var handlers = vm.$options[hook];
4992  var info = "".concat(hook, " hook");
4993  if (handlers) {
4994    for (var i = 0, j = handlers.length; i < j; i++) {
4995      invokeWithErrorHandling(handlers[i], vm, args || null, vm, info);
4996    }
4997  }
4998  if (vm._hasHookEvent) {
4999    vm.$emit('hook:' + hook);
5000  }
5001  setContext && setCurrentInstance(prev);
5002  popTarget();
5003}
5004var MAX_UPDATE_COUNT = 100;
5005var queue = [];
5006var activatedChildren = [];
5007var has = {};
5008var circular = {};
5009var waiting = false;
5010var flushing = false;
5011var index$1 = 0;
5012/**
5013 * Reset the scheduler's state.
5014 */
5015function resetSchedulerState() {
5016  index$1 = queue.length = activatedChildren.length = 0;
5017  has = {};
5018  if (true) {
5019    circular = {};
5020  }
5021  waiting = flushing = false;
5022}
5023// Async edge case #6566 requires saving the timestamp when event listeners are
5024// attached. However, calling performance.now() has a perf overhead especially
5025// if the page has thousands of event listeners. Instead, we take a timestamp
5026// every time the scheduler flushes and use that for all event listeners
5027// attached during that flush.
5028var currentFlushTimestamp = 0;
5029// Async edge case fix requires storing an event listener's attach timestamp.
5030var getNow = Date.now;
5031// Determine what event timestamp the browser is using. Annoyingly, the
5032// timestamp can either be hi-res (relative to page load) or low-res
5033// (relative to UNIX epoch), so in order to compare time we have to use the
5034// same timestamp type when saving the flush timestamp.
5035// All IE versions use low-res event timestamps, and have problematic clock
5036// implementations (#9632)
5037if (inBrowser && !isIE) {
5038  var performance_1 = window.performance;
5039  if (performance_1 && typeof performance_1.now === 'function' && getNow() > document.createEvent('Event').timeStamp) {
5040    // if the event timestamp, although evaluated AFTER the Date.now(), is
5041    // smaller than it, it means the event is using a hi-res timestamp,
5042    // and we need to use the hi-res version for event listener timestamps as
5043    // well.
5044    getNow = function () {
5045      return performance_1.now();
5046    };
5047  }
5048}
5049var sortCompareFn = function (a, b) {
5050  if (a.post) {
5051    if (!b.post) return 1;
5052  } else if (b.post) {
5053    return -1;
5054  }
5055  return a.id - b.id;
5056};
5057/**
5058 * Flush both queues and run the watchers.
5059 */
5060function flushSchedulerQueue() {
5061  currentFlushTimestamp = getNow();
5062  flushing = true;
5063  var watcher, id;
5064  // Sort queue before flush.
5065  // This ensures that:
5066  // 1. Components are updated from parent to child. (because parent is always
5067  //    created before the child)
5068  // 2. A component's user watchers are run before its render watcher (because
5069  //    user watchers are created before the render watcher)
5070  // 3. If a component is destroyed during a parent component's watcher run,
5071  //    its watchers can be skipped.
5072  queue.sort(sortCompareFn);
5073  // do not cache length because more watchers might be pushed
5074  // as we run existing watchers
5075  for (index$1 = 0; index$1 < queue.length; index$1++) {
5076    watcher = queue[index$1];
5077    if (watcher.before) {
5078      watcher.before();
5079    }
5080    id = watcher.id;
5081    has[id] = null;
5082    watcher.run();
5083    // in dev build, check and stop circular updates.
5084    if ( true && has[id] != null) {
5085      circular[id] = (circular[id] || 0) + 1;
5086      if (circular[id] > MAX_UPDATE_COUNT) {
5087        warn$2('You may have an infinite update loop ' + (watcher.user ? "in watcher with expression \"".concat(watcher.expression, "\"") : "in a component render function."), watcher.vm);
5088        break;
5089      }
5090    }
5091  }
5092  // keep copies of post queues before resetting state
5093  var activatedQueue = activatedChildren.slice();
5094  var updatedQueue = queue.slice();
5095  resetSchedulerState();
5096  // call component updated and activated hooks
5097  callActivatedHooks(activatedQueue);
5098  callUpdatedHooks(updatedQueue);
5099  cleanupDeps();
5100  // devtool hook
5101  /* istanbul ignore if */
5102  if (devtools && config.devtools) {
5103    devtools.emit('flush');
5104  }
5105}
5106function callUpdatedHooks(queue) {
5107  var i = queue.length;
5108  while (i--) {
5109    var watcher = queue[i];
5110    var vm = watcher.vm;
5111    if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
5112      callHook$1(vm, 'updated');
5113    }
5114  }
5115}
5116/**
5117 * Queue a kept-alive component that was activated during patch.
5118 * The queue will be processed after the entire tree has been patched.
5119 */
5120function queueActivatedComponent(vm) {
5121  // setting _inactive to false here so that a render function can
5122  // rely on checking whether it's in an inactive tree (e.g. router-view)
5123  vm._inactive = false;
5124  activatedChildren.push(vm);
5125}
5126function callActivatedHooks(queue) {
5127  for (var i = 0; i < queue.length; i++) {
5128    queue[i]._inactive = true;
5129    activateChildComponent(queue[i], true /* true */);
5130  }
5131}
5132/**
5133 * Push a watcher into the watcher queue.
5134 * Jobs with duplicate IDs will be skipped unless it's
5135 * pushed when the queue is being flushed.
5136 */
5137function queueWatcher(watcher) {
5138  var id = watcher.id;
5139  if (has[id] != null) {
5140    return;
5141  }
5142  if (watcher === Dep.target && watcher.noRecurse) {
5143    return;
5144  }
5145  has[id] = true;
5146  if (!flushing) {
5147    queue.push(watcher);
5148  } else {
5149    // if already flushing, splice the watcher based on its id
5150    // if already past its id, it will be run next immediately.
5151    var i = queue.length - 1;
5152    while (i > index$1 && queue[i].id > watcher.id) {
5153      i--;
5154    }
5155    queue.splice(i + 1, 0, watcher);
5156  }
5157  // queue the flush
5158  if (!waiting) {
5159    waiting = true;
5160    if ( true && !config.async) {
5161      flushSchedulerQueue();
5162      return;
5163    }
5164    nextTick(flushSchedulerQueue);
5165  }
5166}
5167var WATCHER = "watcher";
5168var WATCHER_CB = "".concat(WATCHER, " callback");
5169var WATCHER_GETTER = "".concat(WATCHER, " getter");
5170var WATCHER_CLEANUP = "".concat(WATCHER, " cleanup");
5171// Simple effect.
5172function watchEffect(effect, options) {
5173  return doWatch(effect, null, options);
5174}
5175function watchPostEffect(effect, options) {
5176  return doWatch(effect, null,  true ? __assign(__assign({}, options), {
5177    flush: 'post'
5178  }) : 0);
5179}
5180function watchSyncEffect(effect, options) {
5181  return doWatch(effect, null,  true ? __assign(__assign({}, options), {
5182    flush: 'sync'
5183  }) : 0);
5184}
5185// initial value for watchers to trigger on undefined initial values
5186var INITIAL_WATCHER_VALUE = {};
5187// implementation
5188function watch(source, cb, options) {
5189  if ( true && typeof cb !== 'function') {
5190    warn$2("`watch(fn, options?)` signature has been moved to a separate API. " + "Use `watchEffect(fn, options?)` instead. `watch` now only " + "supports `watch(source, cb, options?) signature.");
5191  }
5192  return doWatch(source, cb, options);
5193}
5194function doWatch(source, cb, _a) {
5195  var _b = _a === void 0 ? emptyObject : _a,
5196    immediate = _b.immediate,
5197    deep = _b.deep,
5198    _c = _b.flush,
5199    flush = _c === void 0 ? 'pre' : _c,
5200    onTrack = _b.onTrack,
5201    onTrigger = _b.onTrigger;
5202  if ( true && !cb) {
5203    if (immediate !== undefined) {
5204      warn$2("watch() \"immediate\" option is only respected when using the " + "watch(source, callback, options?) signature.");
5205    }
5206    if (deep !== undefined) {
5207      warn$2("watch() \"deep\" option is only respected when using the " + "watch(source, callback, options?) signature.");
5208    }
5209  }
5210  var warnInvalidSource = function (s) {
5211    warn$2("Invalid watch source: ".concat(s, ". A watch source can only be a getter/effect ") + "function, a ref, a reactive object, or an array of these types.");
5212  };
5213  var instance = currentInstance;
5214  var call = function (fn, type, args) {
5215    if (args === void 0) {
5216      args = null;
5217    }
5218    return invokeWithErrorHandling(fn, null, args, instance, type);
5219  };
5220  var getter;
5221  var forceTrigger = false;
5222  var isMultiSource = false;
5223  if (isRef(source)) {
5224    getter = function () {
5225      return source.value;
5226    };
5227    forceTrigger = isShallow(source);
5228  } else if (isReactive(source)) {
5229    getter = function () {
5230      source.__ob__.dep.depend();
5231      return source;
5232    };
5233    deep = true;
5234  } else if (isArray(source)) {
5235    isMultiSource = true;
5236    forceTrigger = source.some(function (s) {
5237      return isReactive(s) || isShallow(s);
5238    });
5239    getter = function () {
5240      return source.map(function (s) {
5241        if (isRef(s)) {
5242          return s.value;
5243        } else if (isReactive(s)) {
5244          return traverse(s);
5245        } else if (isFunction(s)) {
5246          return call(s, WATCHER_GETTER);
5247        } else {
5248           true && warnInvalidSource(s);
5249        }
5250      });
5251    };
5252  } else if (isFunction(source)) {
5253    if (cb) {
5254      // getter with cb
5255      getter = function () {
5256        return call(source, WATCHER_GETTER);
5257      };
5258    } else {
5259      // no cb -> simple effect
5260      getter = function () {
5261        if (instance && instance._isDestroyed) {
5262          return;
5263        }
5264        if (cleanup) {
5265          cleanup();
5266        }
5267        return call(source, WATCHER, [onCleanup]);
5268      };
5269    }
5270  } else {
5271    getter = noop;
5272     true && warnInvalidSource(source);
5273  }
5274  if (cb && deep) {
5275    var baseGetter_1 = getter;
5276    getter = function () {
5277      return traverse(baseGetter_1());
5278    };
5279  }
5280  var cleanup;
5281  var onCleanup = function (fn) {
5282    cleanup = watcher.onStop = function () {
5283      call(fn, WATCHER_CLEANUP);
5284    };
5285  };
5286  // in SSR there is no need to setup an actual effect, and it should be noop
5287  // unless it's eager
5288  if (isServerRendering()) {
5289    // we will also not call the invalidate callback (+ runner is not set up)
5290    onCleanup = noop;
5291    if (!cb) {
5292      getter();
5293    } else if (immediate) {
5294      call(cb, WATCHER_CB, [getter(), isMultiSource ? [] : undefined, onCleanup]);
5295    }
5296    return noop;
5297  }
5298  var watcher = new Watcher(currentInstance, getter, noop, {
5299    lazy: true
5300  });
5301  watcher.noRecurse = !cb;
5302  var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;
5303  // overwrite default run
5304  watcher.run = function () {
5305    if (!watcher.active) {
5306      return;
5307    }
5308    if (cb) {
5309      // watch(source, cb)
5310      var newValue = watcher.get();
5311      if (deep || forceTrigger || (isMultiSource ? newValue.some(function (v, i) {
5312        return hasChanged(v, oldValue[i]);
5313      }) : hasChanged(newValue, oldValue))) {
5314        // cleanup before running cb again
5315        if (cleanup) {
5316          cleanup();
5317        }
5318        call(cb, WATCHER_CB, [newValue,
5319        // pass undefined as the old value when it's changed for the first time
5320        oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue, onCleanup]);
5321        oldValue = newValue;
5322      }
5323    } else {
5324      // watchEffect
5325      watcher.get();
5326    }
5327  };
5328  if (flush === 'sync') {
5329    watcher.update = watcher.run;
5330  } else if (flush === 'post') {
5331    watcher.post = true;
5332    watcher.update = function () {
5333      return queueWatcher(watcher);
5334    };
5335  } else {
5336    // pre
5337    watcher.update = function () {
5338      if (instance && instance === currentInstance && !instance._isMounted) {
5339        // pre-watcher triggered before
5340        var buffer = instance._preWatchers || (instance._preWatchers = []);
5341        if (buffer.indexOf(watcher) < 0) buffer.push(watcher);
5342      } else {
5343        queueWatcher(watcher);
5344      }
5345    };
5346  }
5347  if (true) {
5348    watcher.onTrack = onTrack;
5349    watcher.onTrigger = onTrigger;
5350  }
5351  // initial run
5352  if (cb) {
5353    if (immediate) {
5354      watcher.run();
5355    } else {
5356      oldValue = watcher.get();
5357    }
5358  } else if (flush === 'post' && instance) {
5359    instance.$once('hook:mounted', function () {
5360      return watcher.get();
5361    });
5362  } else {
5363    watcher.get();
5364  }
5365  return function () {
5366    watcher.teardown();
5367  };
5368}
5369var activeEffectScope;
5370var EffectScope = /** @class */function () {
5371  function EffectScope(detached) {
5372    if (detached === void 0) {
5373      detached = false;
5374    }
5375    this.detached = detached;
5376    /**
5377     * @internal
5378     */
5379    this.active = true;
5380    /**
5381     * @internal
5382     */
5383    this.effects = [];
5384    /**
5385     * @internal
5386     */
5387    this.cleanups = [];
5388    this.parent = activeEffectScope;
5389    if (!detached && activeEffectScope) {
5390      this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;
5391    }
5392  }
5393  EffectScope.prototype.run = function (fn) {
5394    if (this.active) {
5395      var currentEffectScope = activeEffectScope;
5396      try {
5397        activeEffectScope = this;
5398        return fn();
5399      } finally {
5400        activeEffectScope = currentEffectScope;
5401      }
5402    } else if (true) {
5403      warn$2("cannot run an inactive effect scope.");
5404    }
5405  };
5406  /**
5407   * This should only be called on non-detached scopes
5408   * @internal
5409   */
5410  EffectScope.prototype.on = function () {
5411    activeEffectScope = this;
5412  };
5413  /**
5414   * This should only be called on non-detached scopes
5415   * @internal
5416   */
5417  EffectScope.prototype.off = function () {
5418    activeEffectScope = this.parent;
5419  };
5420  EffectScope.prototype.stop = function (fromParent) {
5421    if (this.active) {
5422      var i = void 0,
5423        l = void 0;
5424      for (i = 0, l = this.effects.length; i < l; i++) {
5425        this.effects[i].teardown();
5426      }
5427      for (i = 0, l = this.cleanups.length; i < l; i++) {
5428        this.cleanups[i]();
5429      }
5430      if (this.scopes) {
5431        for (i = 0, l = this.scopes.length; i < l; i++) {
5432          this.scopes[i].stop(true);
5433        }
5434      }
5435      // nested scope, dereference from parent to avoid memory leaks
5436      if (!this.detached && this.parent && !fromParent) {
5437        // optimized O(1) removal
5438        var last = this.parent.scopes.pop();
5439        if (last && last !== this) {
5440          this.parent.scopes[this.index] = last;
5441          last.index = this.index;
5442        }
5443      }
5444      this.parent = undefined;
5445      this.active = false;
5446    }
5447  };
5448  return EffectScope;
5449}();
5450function effectScope(detached) {
5451  return new EffectScope(detached);
5452}
5453/**
5454 * @internal
5455 */
5456function recordEffectScope(effect, scope) {
5457  if (scope === void 0) {
5458    scope = activeEffectScope;
5459  }
5460  if (scope && scope.active) {
5461    scope.effects.push(effect);
5462  }
5463}
5464function getCurrentScope() {
5465  return activeEffectScope;
5466}
5467function onScopeDispose(fn) {
5468  if (activeEffectScope) {
5469    activeEffectScope.cleanups.push(fn);
5470  } else if (true) {
5471    warn$2("onScopeDispose() is called when there is no active effect scope" + " to be associated with.");
5472  }
5473}
5474function provide(key, value) {
5475  if (!currentInstance) {
5476    if (true) {
5477      warn$2("provide() can only be used inside setup().");
5478    }
5479  } else {
5480    // TS doesn't allow symbol as index type
5481    resolveProvided(currentInstance)[key] = value;
5482  }
5483}
5484function resolveProvided(vm) {
5485  // by default an instance inherits its parent's provides object
5486  // but when it needs to provide values of its own, it creates its
5487  // own provides object using parent provides object as prototype.
5488  // this way in `inject` we can simply look up injections from direct
5489  // parent and let the prototype chain do the work.
5490  var existing = vm._provided;
5491  var parentProvides = vm.$parent && vm.$parent._provided;
5492  if (parentProvides === existing) {
5493    return vm._provided = Object.create(parentProvides);
5494  } else {
5495    return existing;
5496  }
5497}
5498function inject(key, defaultValue, treatDefaultAsFactory) {
5499  if (treatDefaultAsFactory === void 0) {
5500    treatDefaultAsFactory = false;
5501  }
5502  // fallback to `currentRenderingInstance` so that this can be called in
5503  // a functional component
5504  var instance = currentInstance;
5505  if (instance) {
5506    // #2400
5507    // to support `app.use` plugins,
5508    // fallback to appContext's `provides` if the instance is at root
5509    var provides = instance.$parent && instance.$parent._provided;
5510    if (provides && key in provides) {
5511      // TS doesn't allow symbol as index type
5512      return provides[key];
5513    } else if (arguments.length > 1) {
5514      return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance) : defaultValue;
5515    } else if (true) {
5516      warn$2("injection \"".concat(String(key), "\" not found."));
5517    }
5518  } else if (true) {
5519    warn$2("inject() can only be used inside setup() or functional components.");
5520  }
5521}
5522
5523/**
5524 * @internal this function needs manual public type declaration because it relies
5525 * on previously manually authored types from Vue 2
5526 */
5527function h(type, props, children) {
5528  if (!currentInstance) {
5529     true && warn$2("globally imported h() can only be invoked when there is an active " + "component instance, e.g. synchronously in a component's render or setup function.");
5530  }
5531  return createElement$1(currentInstance, type, props, children, 2, true);
5532}
5533function handleError(err, vm, info) {
5534  // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
5535  // See: https://github.com/vuejs/vuex/issues/1505
5536  pushTarget();
5537  try {
5538    if (vm) {
5539      var cur = vm;
5540      while (cur = cur.$parent) {
5541        var hooks = cur.$options.errorCaptured;
5542        if (hooks) {
5543          for (var i = 0; i < hooks.length; i++) {
5544            try {
5545              var capture = hooks[i].call(cur, err, vm, info) === false;
5546              if (capture) return;
5547            } catch (e) {
5548              globalHandleError(e, cur, 'errorCaptured hook');
5549            }
5550          }
5551        }
5552      }
5553    }
5554    globalHandleError(err, vm, info);
5555  } finally {
5556    popTarget();
5557  }
5558}
5559function invokeWithErrorHandling(handler, context, args, vm, info) {
5560  var res;
5561  try {
5562    res = args ? handler.apply(context, args) : handler.call(context);
5563    if (res && !res._isVue && isPromise(res) && !res._handled) {
5564      res.catch(function (e) {
5565        return handleError(e, vm, info + " (Promise/async)");
5566      });
5567      res._handled = true;
5568    }
5569  } catch (e) {
5570    handleError(e, vm, info);
5571  }
5572  return res;
5573}
5574function globalHandleError(err, vm, info) {
5575  if (config.errorHandler) {
5576    try {
5577      return config.errorHandler.call(null, err, vm, info);
5578    } catch (e) {
5579      // if the user intentionally throws the original error in the handler,
5580      // do not log it twice
5581      if (e !== err) {
5582        logError(e, null, 'config.errorHandler');
5583      }
5584    }
5585  }
5586  logError(err, vm, info);
5587}
5588function logError(err, vm, info) {
5589  if (true) {
5590    warn$2("Error in ".concat(info, ": \"").concat(err.toString(), "\""), vm);
5591  }
5592  /* istanbul ignore else */
5593  if (inBrowser && typeof console !== 'undefined') {
5594    console.error(err);
5595  } else {
5596    throw err;
5597  }
5598}
5599
5600/* globals MutationObserver */
5601var isUsingMicroTask = false;
5602var callbacks = [];
5603var pending = false;
5604function flushCallbacks() {
5605  pending = false;
5606  var copies = callbacks.slice(0);
5607  callbacks.length = 0;
5608  for (var i = 0; i < copies.length; i++) {
5609    copies[i]();
5610  }
5611}
5612// Here we have async deferring wrappers using microtasks.
5613// In 2.5 we used (macro) tasks (in combination with microtasks).
5614// However, it has subtle problems when state is changed right before repaint
5615// (e.g. #6813, out-in transitions).
5616// Also, using (macro) tasks in event handler would cause some weird behaviors
5617// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
5618// So we now use microtasks everywhere, again.
5619// A major drawback of this tradeoff is that there are some scenarios
5620// where microtasks have too high a priority and fire in between supposedly
5621// sequential events (e.g. #4521, #6690, which have workarounds)
5622// or even between bubbling of the same event (#6566).
5623var timerFunc;
5624// The nextTick behavior leverages the microtask queue, which can be accessed
5625// via either native Promise.then or MutationObserver.
5626// MutationObserver has wider support, however it is seriously bugged in
5627// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
5628// completely stops working after triggering a few times... so, if native
5629// Promise is available, we will use it:
5630/* istanbul ignore next, $flow-disable-line */
5631if (typeof Promise !== 'undefined' && isNative(Promise)) {
5632  var p_1 = Promise.resolve();
5633  timerFunc = function () {
5634    p_1.then(flushCallbacks);
5635    // In problematic UIWebViews, Promise.then doesn't completely break, but
5636    // it can get stuck in a weird state where callbacks are pushed into the
5637    // microtask queue but the queue isn't being flushed, until the browser
5638    // needs to do some other work, e.g. handle a timer. Therefore we can
5639    // "force" the microtask queue to be flushed by adding an empty timer.
5640    if (isIOS) setTimeout(noop);
5641  };
5642  isUsingMicroTask = true;
5643} else if (!isIE && typeof MutationObserver !== 'undefined' && (isNative(MutationObserver) ||
5644// PhantomJS and iOS 7.x
5645MutationObserver.toString() === '[object MutationObserverConstructor]')) {
5646  // Use MutationObserver where native Promise is not available,
5647  // e.g. PhantomJS, iOS7, Android 4.4
5648  // (#6466 MutationObserver is unreliable in IE11)
5649  var counter_1 = 1;
5650  var observer = new MutationObserver(flushCallbacks);
5651  var textNode_1 = document.createTextNode(String(counter_1));
5652  observer.observe(textNode_1, {
5653    characterData: true
5654  });
5655  timerFunc = function () {
5656    counter_1 = (counter_1 + 1) % 2;
5657    textNode_1.data = String(counter_1);
5658  };
5659  isUsingMicroTask = true;
5660} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
5661  // Fallback to setImmediate.
5662  // Technically it leverages the (macro) task queue,
5663  // but it is still a better choice than setTimeout.
5664  timerFunc = function () {
5665    setImmediate(flushCallbacks);
5666  };
5667} else {
5668  // Fallback to setTimeout.
5669  timerFunc = function () {
5670    setTimeout(flushCallbacks, 0);
5671  };
5672}
5673/**
5674 * @internal
5675 */
5676function nextTick(cb, ctx) {
5677  var _resolve;
5678  callbacks.push(function () {
5679    if (cb) {
5680      try {
5681        cb.call(ctx);
5682      } catch (e) {
5683        handleError(e, ctx, 'nextTick');
5684      }
5685    } else if (_resolve) {
5686      _resolve(ctx);
5687    }
5688  });
5689  if (!pending) {
5690    pending = true;
5691    timerFunc();
5692  }
5693  // $flow-disable-line
5694  if (!cb && typeof Promise !== 'undefined') {
5695    return new Promise(function (resolve) {
5696      _resolve = resolve;
5697    });
5698  }
5699}
5700function useCssModule(name) {
5701  if (name === void 0) {
5702    name = '$style';
5703  }
5704  /* istanbul ignore else */
5705  {
5706    if (!currentInstance) {
5707       true && warn$2("useCssModule must be called inside setup()");
5708      return emptyObject;
5709    }
5710    var mod = currentInstance[name];
5711    if (!mod) {
5712       true && warn$2("Current instance does not have CSS module named \"".concat(name, "\"."));
5713      return emptyObject;
5714    }
5715    return mod;
5716  }
5717}
5718
5719/**
5720 * Runtime helper for SFC's CSS variable injection feature.
5721 * @private
5722 */
5723function useCssVars(getter) {
5724  if (!inBrowser && !false) return;
5725  var instance = currentInstance;
5726  if (!instance) {
5727     true && warn$2("useCssVars is called without current active component instance.");
5728    return;
5729  }
5730  watchPostEffect(function () {
5731    var el = instance.$el;
5732    var vars = getter(instance, instance._setupProxy);
5733    if (el && el.nodeType === 1) {
5734      var style = el.style;
5735      for (var key in vars) {
5736        style.setProperty("--".concat(key), vars[key]);
5737      }
5738    }
5739  });
5740}
5741
5742/**
5743 * v3-compatible async component API.
5744 * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts
5745 * because it relies on existing manual types
5746 */
5747function defineAsyncComponent(source) {
5748  if (isFunction(source)) {
5749    source = {
5750      loader: source
5751    };
5752  }
5753  var loader = source.loader,
5754    loadingComponent = source.loadingComponent,
5755    errorComponent = source.errorComponent,
5756    _a = source.delay,
5757    delay = _a === void 0 ? 200 : _a,
5758    timeout = source.timeout,
5759    // undefined = never times out
5760    _b = source.suspensible,
5761    // undefined = never times out
5762    suspensible = _b === void 0 ? false : _b,
5763    // in Vue 3 default is true
5764    userOnError = source.onError;
5765  if ( true && suspensible) {
5766    warn$2("The suspensiblbe option for async components is not supported in Vue2. It is ignored.");
5767  }
5768  var pendingRequest = null;
5769  var retries = 0;
5770  var retry = function () {
5771    retries++;
5772    pendingRequest = null;
5773    return load();
5774  };
5775  var load = function () {
5776    var thisRequest;
5777    return pendingRequest || (thisRequest = pendingRequest = loader().catch(function (err) {
5778      err = err instanceof Error ? err : new Error(String(err));
5779      if (userOnError) {
5780        return new Promise(function (resolve, reject) {
5781          var userRetry = function () {
5782            return resolve(retry());
5783          };
5784          var userFail = function () {
5785            return reject(err);
5786          };
5787          userOnError(err, userRetry, userFail, retries + 1);
5788        });
5789      } else {
5790        throw err;
5791      }
5792    }).then(function (comp) {
5793      if (thisRequest !== pendingRequest && pendingRequest) {
5794        return pendingRequest;
5795      }
5796      if ( true && !comp) {
5797        warn$2("Async component loader resolved to undefined. " + "If you are using retry(), make sure to return its return value.");
5798      }
5799      // interop module default
5800      if (comp && (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {
5801        comp = comp.default;
5802      }
5803      if ( true && comp && !isObject(comp) && !isFunction(comp)) {
5804        throw new Error("Invalid async component load result: ".concat(comp));
5805      }
5806      return comp;
5807    }));
5808  };
5809  return function () {
5810    var component = load();
5811    return {
5812      component: component,
5813      delay: delay,
5814      timeout: timeout,
5815      error: errorComponent,
5816      loading: loadingComponent
5817    };
5818  };
5819}
5820function createLifeCycle(hookName) {
5821  return function (fn, target) {
5822    if (target === void 0) {
5823      target = currentInstance;
5824    }
5825    if (!target) {
5826       true && warn$2("".concat(formatName(hookName), " is called when there is no active component instance to be ") + "associated with. " + "Lifecycle injection APIs can only be used during execution of setup().");
5827      return;
5828    }
5829    return injectHook(target, hookName, fn);
5830  };
5831}
5832function formatName(name) {
5833  if (name === 'beforeDestroy') {
5834    name = 'beforeUnmount';
5835  } else if (name === 'destroyed') {
5836    name = 'unmounted';
5837  }
5838  return "on".concat(name[0].toUpperCase() + name.slice(1));
5839}
5840function injectHook(instance, hookName, fn) {
5841  var options = instance.$options;
5842  options[hookName] = mergeLifecycleHook(options[hookName], fn);
5843}
5844var onBeforeMount = createLifeCycle('beforeMount');
5845var onMounted = createLifeCycle('mounted');
5846var onBeforeUpdate = createLifeCycle('beforeUpdate');
5847var onUpdated = createLifeCycle('updated');
5848var onBeforeUnmount = createLifeCycle('beforeDestroy');
5849var onUnmounted = createLifeCycle('destroyed');
5850var onActivated = createLifeCycle('activated');
5851var onDeactivated = createLifeCycle('deactivated');
5852var onServerPrefetch = createLifeCycle('serverPrefetch');
5853var onRenderTracked = createLifeCycle('renderTracked');
5854var onRenderTriggered = createLifeCycle('renderTriggered');
5855var injectErrorCapturedHook = createLifeCycle('errorCaptured');
5856function onErrorCaptured(hook, target) {
5857  if (target === void 0) {
5858    target = currentInstance;
5859  }
5860  injectErrorCapturedHook(hook, target);
5861}
5862
5863/**
5864 * Note: also update dist/vue.runtime.mjs when adding new exports to this file.
5865 */
5866var version = '2.7.14';
5867/**
5868 * @internal type is manually declared in <root>/types/v3-define-component.d.ts
5869 */
5870function defineComponent(options) {
5871  return options;
5872}
5873var seenObjects = new _Set();
5874/**
5875 * Recursively traverse an object to evoke all converted
5876 * getters, so that every nested property inside the object
5877 * is collected as a "deep" dependency.
5878 */
5879function traverse(val) {
5880  _traverse(val, seenObjects);
5881  seenObjects.clear();
5882  return val;
5883}
5884function _traverse(val, seen) {
5885  var i, keys;
5886  var isA = isArray(val);
5887  if (!isA && !isObject(val) || val.__v_skip /* ReactiveFlags.SKIP */ || Object.isFrozen(val) || val instanceof VNode) {
5888    return;
5889  }
5890  if (val.__ob__) {
5891    var depId = val.__ob__.dep.id;
5892    if (seen.has(depId)) {
5893      return;
5894    }
5895    seen.add(depId);
5896  }
5897  if (isA) {
5898    i = val.length;
5899    while (i--) _traverse(val[i], seen);
5900  } else if (isRef(val)) {
5901    _traverse(val.value, seen);
5902  } else {
5903    keys = Object.keys(val);
5904    i = keys.length;
5905    while (i--) _traverse(val[keys[i]], seen);
5906  }
5907}
5908var uid$1 = 0;
5909/**
5910 * A watcher parses an expression, collects dependencies,
5911 * and fires callback when the expression value changes.
5912 * This is used for both the $watch() api and directives.
5913 * @internal
5914 */
5915var Watcher = /** @class */function () {
5916  function Watcher(vm, expOrFn, cb, options, isRenderWatcher) {
5917    recordEffectScope(this,
5918    // if the active effect scope is manually created (not a component scope),
5919    // prioritize it
5920    activeEffectScope && !activeEffectScope._vm ? activeEffectScope : vm ? vm._scope : undefined);
5921    if ((this.vm = vm) && isRenderWatcher) {
5922      vm._watcher = this;
5923    }
5924    // options
5925    if (options) {
5926      this.deep = !!options.deep;
5927      this.user = !!options.user;
5928      this.lazy = !!options.lazy;
5929      this.sync = !!options.sync;
5930      this.before = options.before;
5931      if (true) {
5932        this.onTrack = options.onTrack;
5933        this.onTrigger = options.onTrigger;
5934      }
5935    } else {
5936      this.deep = this.user = this.lazy = this.sync = false;
5937    }
5938    this.cb = cb;
5939    this.id = ++uid$1; // uid for batching
5940    this.active = true;
5941    this.post = false;
5942    this.dirty = this.lazy; // for lazy watchers
5943    this.deps = [];
5944    this.newDeps = [];
5945    this.depIds = new _Set();
5946    this.newDepIds = new _Set();
5947    this.expression =  true ? expOrFn.toString() : 0;
5948    // parse expression for getter
5949    if (isFunction(expOrFn)) {
5950      this.getter = expOrFn;
5951    } else {
5952      this.getter = parsePath(expOrFn);
5953      if (!this.getter) {
5954        this.getter = noop;
5955         true && warn$2("Failed watching path: \"".concat(expOrFn, "\" ") + 'Watcher only accepts simple dot-delimited paths. ' + 'For full control, use a function instead.', vm);
5956      }
5957    }
5958    this.value = this.lazy ? undefined : this.get();
5959  }
5960  /**
5961   * Evaluate the getter, and re-collect dependencies.
5962   */
5963  Watcher.prototype.get = function () {
5964    pushTarget(this);
5965    var value;
5966    var vm = this.vm;
5967    try {
5968      value = this.getter.call(vm, vm);
5969    } catch (e) {
5970      if (this.user) {
5971        handleError(e, vm, "getter for watcher \"".concat(this.expression, "\""));
5972      } else {
5973        throw e;
5974      }
5975    } finally {
5976      // "touch" every property so they are all tracked as
5977      // dependencies for deep watching
5978      if (this.deep) {
5979        traverse(value);
5980      }
5981      popTarget();
5982      this.cleanupDeps();
5983    }
5984    return value;
5985  };
5986  /**
5987   * Add a dependency to this directive.
5988   */
5989  Watcher.prototype.addDep = function (dep) {
5990    var id = dep.id;
5991    if (!this.newDepIds.has(id)) {
5992      this.newDepIds.add(id);
5993      this.newDeps.push(dep);
5994      if (!this.depIds.has(id)) {
5995        dep.addSub(this);
5996      }
5997    }
5998  };
5999  /**
6000   * Clean up for dependency collection.
6001   */
6002  Watcher.prototype.cleanupDeps = function () {
6003    var i = this.deps.length;
6004    while (i--) {
6005      var dep = this.deps[i];
6006      if (!this.newDepIds.has(dep.id)) {
6007        dep.removeSub(this);
6008      }
6009    }
6010    var tmp = this.depIds;
6011    this.depIds = this.newDepIds;
6012    this.newDepIds = tmp;
6013    this.newDepIds.clear();
6014    tmp = this.deps;
6015    this.deps = this.newDeps;
6016    this.newDeps = tmp;
6017    this.newDeps.length = 0;
6018  };
6019  /**
6020   * Subscriber interface.
6021   * Will be called when a dependency changes.
6022   */
6023  Watcher.prototype.update = function () {
6024    /* istanbul ignore else */
6025    if (this.lazy) {
6026      this.dirty = true;
6027    } else if (this.sync) {
6028      this.run();
6029    } else {
6030      queueWatcher(this);
6031    }
6032  };
6033  /**
6034   * Scheduler job interface.
6035   * Will be called by the scheduler.
6036   */
6037  Watcher.prototype.run = function () {
6038    if (this.active) {
6039      var value = this.get();
6040      if (value !== this.value ||
6041      // Deep watchers and watchers on Object/Arrays should fire even
6042      // when the value is the same, because the value may
6043      // have mutated.
6044      isObject(value) || this.deep) {
6045        // set new value
6046        var oldValue = this.value;
6047        this.value = value;
6048        if (this.user) {
6049          var info = "callback for watcher \"".concat(this.expression, "\"");
6050          invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info);
6051        } else {
6052          this.cb.call(this.vm, value, oldValue);
6053        }
6054      }
6055    }
6056  };
6057  /**
6058   * Evaluate the value of the watcher.
6059   * This only gets called for lazy watchers.
6060   */
6061  Watcher.prototype.evaluate = function () {
6062    this.value = this.get();
6063    this.dirty = false;
6064  };
6065  /**
6066   * Depend on all deps collected by this watcher.
6067   */
6068  Watcher.prototype.depend = function () {
6069    var i = this.deps.length;
6070    while (i--) {
6071      this.deps[i].depend();
6072    }
6073  };
6074  /**
6075   * Remove self from all dependencies' subscriber list.
6076   */
6077  Watcher.prototype.teardown = function () {
6078    if (this.vm && !this.vm._isBeingDestroyed) {
6079      remove$2(this.vm._scope.effects, this);
6080    }
6081    if (this.active) {
6082      var i = this.deps.length;
6083      while (i--) {
6084        this.deps[i].removeSub(this);
6085      }
6086      this.active = false;
6087      if (this.onStop) {
6088        this.onStop();
6089      }
6090    }
6091  };
6092  return Watcher;
6093}();
6094var sharedPropertyDefinition = {
6095  enumerable: true,
6096  configurable: true,
6097  get: noop,
6098  set: noop
6099};
6100function proxy(target, sourceKey, key) {
6101  sharedPropertyDefinition.get = function proxyGetter() {
6102    return this[sourceKey][key];
6103  };
6104  sharedPropertyDefinition.set = function proxySetter(val) {
6105    this[sourceKey][key] = val;
6106  };
6107  Object.defineProperty(target, key, sharedPropertyDefinition);
6108}
6109function initState(vm) {
6110  var opts = vm.$options;
6111  if (opts.props) initProps$1(vm, opts.props);
6112  // Composition API
6113  initSetup(vm);
6114  if (opts.methods) initMethods(vm, opts.methods);
6115  if (opts.data) {
6116    initData(vm);
6117  } else {
6118    var ob = observe(vm._data = {});
6119    ob && ob.vmCount++;
6120  }
6121  if (opts.computed) initComputed$1(vm, opts.computed);
6122  if (opts.watch && opts.watch !== nativeWatch) {
6123    initWatch(vm, opts.watch);
6124  }
6125}
6126function initProps$1(vm, propsOptions) {
6127  var propsData = vm.$options.propsData || {};
6128  var props = vm._props = shallowReactive({});
6129  // cache prop keys so that future props updates can iterate using Array
6130  // instead of dynamic object key enumeration.
6131  var keys = vm.$options._propKeys = [];
6132  var isRoot = !vm.$parent;
6133  // root instance props should be converted
6134  if (!isRoot) {
6135    toggleObserving(false);
6136  }
6137  var _loop_1 = function (key) {
6138    keys.push(key);
6139    var value = validateProp(key, propsOptions, propsData, vm);
6140    /* istanbul ignore else */
6141    if (true) {
6142      var hyphenatedKey = hyphenate(key);
6143      if (isReservedAttribute(hyphenatedKey) || config.isReservedAttr(hyphenatedKey)) {
6144        warn$2("\"".concat(hyphenatedKey, "\" is a reserved attribute and cannot be used as component prop."), vm);
6145      }
6146      defineReactive(props, key, value, function () {
6147        if (!isRoot && !isUpdatingChildComponent) {
6148          warn$2("Avoid mutating a prop directly since the value will be " + "overwritten whenever the parent component re-renders. " + "Instead, use a data or computed property based on the prop's " + "value. Prop being mutated: \"".concat(key, "\""), vm);
6149        }
6150      });
6151    } else {}
6152    // static props are already proxied on the component's prototype
6153    // during Vue.extend(). We only need to proxy props defined at
6154    // instantiation here.
6155    if (!(key in vm)) {
6156      proxy(vm, "_props", key);
6157    }
6158  };
6159  for (var key in propsOptions) {
6160    _loop_1(key);
6161  }
6162  toggleObserving(true);
6163}
6164function initData(vm) {
6165  var data = vm.$options.data;
6166  data = vm._data = isFunction(data) ? getData(data, vm) : data || {};
6167  if (!isPlainObject(data)) {
6168    data = {};
6169     true && warn$2('data functions should return an object:\n' + 'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm);
6170  }
6171  // proxy data on instance
6172  var keys = Object.keys(data);
6173  var props = vm.$options.props;
6174  var methods = vm.$options.methods;
6175  var i = keys.length;
6176  while (i--) {
6177    var key = keys[i];
6178    if (true) {
6179      if (methods && hasOwn(methods, key)) {
6180        warn$2("Method \"".concat(key, "\" has already been defined as a data property."), vm);
6181      }
6182    }
6183    if (props && hasOwn(props, key)) {
6184       true && warn$2("The data property \"".concat(key, "\" is already declared as a prop. ") + "Use prop default value instead.", vm);
6185    } else if (!isReserved(key)) {
6186      proxy(vm, "_data", key);
6187    }
6188  }
6189  // observe data
6190  var ob = observe(data);
6191  ob && ob.vmCount++;
6192}
6193function getData(data, vm) {
6194  // #7573 disable dep collection when invoking data getters
6195  pushTarget();
6196  try {
6197    return data.call(vm, vm);
6198  } catch (e) {
6199    handleError(e, vm, "data()");
6200    return {};
6201  } finally {
6202    popTarget();
6203  }
6204}
6205var computedWatcherOptions = {
6206  lazy: true
6207};
6208function initComputed$1(vm, computed) {
6209  // $flow-disable-line
6210  var watchers = vm._computedWatchers = Object.create(null);
6211  // computed properties are just getters during SSR
6212  var isSSR = isServerRendering();
6213  for (var key in computed) {
6214    var userDef = computed[key];
6215    var getter = isFunction(userDef) ? userDef : userDef.get;
6216    if ( true && getter == null) {
6217      warn$2("Getter is missing for computed property \"".concat(key, "\"."), vm);
6218    }
6219    if (!isSSR) {
6220      // create internal watcher for the computed property.
6221      watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions);
6222    }
6223    // component-defined computed properties are already defined on the
6224    // component prototype. We only need to define computed properties defined
6225    // at instantiation here.
6226    if (!(key in vm)) {
6227      defineComputed(vm, key, userDef);
6228    } else if (true) {
6229      if (key in vm.$data) {
6230        warn$2("The computed property \"".concat(key, "\" is already defined in data."), vm);
6231      } else if (vm.$options.props && key in vm.$options.props) {
6232        warn$2("The computed property \"".concat(key, "\" is already defined as a prop."), vm);
6233      } else if (vm.$options.methods && key in vm.$options.methods) {
6234        warn$2("The computed property \"".concat(key, "\" is already defined as a method."), vm);
6235      }
6236    }
6237  }
6238}
6239function defineComputed(target, key, userDef) {
6240  var shouldCache = !isServerRendering();
6241  if (isFunction(userDef)) {
6242    sharedPropertyDefinition.get = shouldCache ? createComputedGetter(key) : createGetterInvoker(userDef);
6243    sharedPropertyDefinition.set = noop;
6244  } else {
6245    sharedPropertyDefinition.get = userDef.get ? shouldCache && userDef.cache !== false ? createComputedGetter(key) : createGetterInvoker(userDef.get) : noop;
6246    sharedPropertyDefinition.set = userDef.set || noop;
6247  }
6248  if ( true && sharedPropertyDefinition.set === noop) {
6249    sharedPropertyDefinition.set = function () {
6250      warn$2("Computed property \"".concat(key, "\" was assigned to but it has no setter."), this);
6251    };
6252  }
6253  Object.defineProperty(target, key, sharedPropertyDefinition);
6254}
6255function createComputedGetter(key) {
6256  return function computedGetter() {
6257    var watcher = this._computedWatchers && this._computedWatchers[key];
6258    if (watcher) {
6259      if (watcher.dirty) {
6260        watcher.evaluate();
6261      }
6262      if (Dep.target) {
6263        if ( true && Dep.target.onTrack) {
6264          Dep.target.onTrack({
6265            effect: Dep.target,
6266            target: this,
6267            type: "get" /* TrackOpTypes.GET */,
6268            key: key
6269          });
6270        }
6271        watcher.depend();
6272      }
6273      return watcher.value;
6274    }
6275  };
6276}
6277function createGetterInvoker(fn) {
6278  return function computedGetter() {
6279    return fn.call(this, this);
6280  };
6281}
6282function initMethods(vm, methods) {
6283  var props = vm.$options.props;
6284  for (var key in methods) {
6285    if (true) {
6286      if (typeof methods[key] !== 'function') {
6287        warn$2("Method \"".concat(key, "\" has type \"").concat(typeof methods[key], "\" in the component definition. ") + "Did you reference the function correctly?", vm);
6288      }
6289      if (props && hasOwn(props, key)) {
6290        warn$2("Method \"".concat(key, "\" has already been defined as a prop."), vm);
6291      }
6292      if (key in vm && isReserved(key)) {
6293        warn$2("Method \"".concat(key, "\" conflicts with an existing Vue instance method. ") + "Avoid defining component methods that start with _ or $.");
6294      }
6295    }
6296    vm[key] = typeof methods[key] !== 'function' ? noop : bind$1(methods[key], vm);
6297  }
6298}
6299function initWatch(vm, watch) {
6300  for (var key in watch) {
6301    var handler = watch[key];
6302    if (isArray(handler)) {
6303      for (var i = 0; i < handler.length; i++) {
6304        createWatcher(vm, key, handler[i]);
6305      }
6306    } else {
6307      createWatcher(vm, key, handler);
6308    }
6309  }
6310}
6311function createWatcher(vm, expOrFn, handler, options) {
6312  if (isPlainObject(handler)) {
6313    options = handler;
6314    handler = handler.handler;
6315  }
6316  if (typeof handler === 'string') {
6317    handler = vm[handler];
6318  }
6319  return vm.$watch(expOrFn, handler, options);
6320}
6321function stateMixin(Vue) {
6322  // flow somehow has problems with directly declared definition object
6323  // when using Object.defineProperty, so we have to procedurally build up
6324  // the object here.
6325  var dataDef = {};
6326  dataDef.get = function () {
6327    return this._data;
6328  };
6329  var propsDef = {};
6330  propsDef.get = function () {
6331    return this._props;
6332  };
6333  if (true) {
6334    dataDef.set = function () {
6335      warn$2('Avoid replacing instance root $data. ' + 'Use nested data properties instead.', this);
6336    };
6337    propsDef.set = function () {
6338      warn$2("$props is readonly.", this);
6339    };
6340  }
6341  Object.defineProperty(Vue.prototype, '$data', dataDef);
6342  Object.defineProperty(Vue.prototype, '$props', propsDef);
6343  Vue.prototype.$set = set;
6344  Vue.prototype.$delete = del;
6345  Vue.prototype.$watch = function (expOrFn, cb, options) {
6346    var vm = this;
6347    if (isPlainObject(cb)) {
6348      return createWatcher(vm, expOrFn, cb, options);
6349    }
6350    options = options || {};
6351    options.user = true;
6352    var watcher = new Watcher(vm, expOrFn, cb, options);
6353    if (options.immediate) {
6354      var info = "callback for immediate watcher \"".concat(watcher.expression, "\"");
6355      pushTarget();
6356      invokeWithErrorHandling(cb, vm, [watcher.value], vm, info);
6357      popTarget();
6358    }
6359    return function unwatchFn() {
6360      watcher.teardown();
6361    };
6362  };
6363}
6364function initProvide(vm) {
6365  var provideOption = vm.$options.provide;
6366  if (provideOption) {
6367    var provided = isFunction(provideOption) ? provideOption.call(vm) : provideOption;
6368    if (!isObject(provided)) {
6369      return;
6370    }
6371    var source = resolveProvided(vm);
6372    // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to
6373    // iterate the keys ourselves.
6374    var keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided);
6375    for (var i = 0; i < keys.length; i++) {
6376      var key = keys[i];
6377      Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key));
6378    }
6379  }
6380}
6381function initInjections(vm) {
6382  var result = resolveInject(vm.$options.inject, vm);
6383  if (result) {
6384    toggleObserving(false);
6385    Object.keys(result).forEach(function (key) {
6386      /* istanbul ignore else */
6387      if (true) {
6388        defineReactive(vm, key, result[key], function () {
6389          warn$2("Avoid mutating an injected value directly since the changes will be " + "overwritten whenever the provided component re-renders. " + "injection being mutated: \"".concat(key, "\""), vm);
6390        });
6391      } else {}
6392    });
6393    toggleObserving(true);
6394  }
6395}
6396function resolveInject(inject, vm) {
6397  if (inject) {
6398    // inject is :any because flow is not smart enough to figure out cached
6399    var result = Object.create(null);
6400    var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject);
6401    for (var i = 0; i < keys.length; i++) {
6402      var key = keys[i];
6403      // #6574 in case the inject object is observed...
6404      if (key === '__ob__') continue;
6405      var provideKey = inject[key].from;
6406      if (provideKey in vm._provided) {
6407        result[key] = vm._provided[provideKey];
6408      } else if ('default' in inject[key]) {
6409        var provideDefault = inject[key].default;
6410        result[key] = isFunction(provideDefault) ? provideDefault.call(vm) : provideDefault;
6411      } else if (true) {
6412        warn$2("Injection \"".concat(key, "\" not found"), vm);
6413      }
6414    }
6415    return result;
6416  }
6417}
6418var uid = 0;
6419function initMixin$1(Vue) {
6420  Vue.prototype._init = function (options) {
6421    var vm = this;
6422    // a uid
6423    vm._uid = uid++;
6424    var startTag, endTag;
6425    /* istanbul ignore if */
6426    if ( true && config.performance && mark) {
6427      startTag = "vue-perf-start:".concat(vm._uid);
6428      endTag = "vue-perf-end:".concat(vm._uid);
6429      mark(startTag);
6430    }
6431    // a flag to mark this as a Vue instance without having to do instanceof
6432    // check
6433    vm._isVue = true;
6434    // avoid instances from being observed
6435    vm.__v_skip = true;
6436    // effect scope
6437    vm._scope = new EffectScope(true /* detached */);
6438    vm._scope._vm = true;
6439    // merge options
6440    if (options && options._isComponent) {
6441      // optimize internal component instantiation
6442      // since dynamic options merging is pretty slow, and none of the
6443      // internal component options needs special treatment.
6444      initInternalComponent(vm, options);
6445    } else {
6446      vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm);
6447    }
6448    /* istanbul ignore else */
6449    if (true) {
6450      initProxy(vm);
6451    } else {}
6452    // expose real self
6453    vm._self = vm;
6454    initLifecycle(vm);
6455    initEvents(vm);
6456    initRender(vm);
6457    callHook$1(vm, 'beforeCreate', undefined, false /* setContext */);
6458    initInjections(vm); // resolve injections before data/props
6459    initState(vm);
6460    initProvide(vm); // resolve provide after data/props
6461    callHook$1(vm, 'created');
6462    /* istanbul ignore if */
6463    if ( true && config.performance && mark) {
6464      vm._name = formatComponentName(vm, false);
6465      mark(endTag);
6466      measure("vue ".concat(vm._name, " init"), startTag, endTag);
6467    }
6468    if (vm.$options.el) {
6469      vm.$mount(vm.$options.el);
6470    }
6471  };
6472}
6473function initInternalComponent(vm, options) {
6474  var opts = vm.$options = Object.create(vm.constructor.options);
6475  // doing this because it's faster than dynamic enumeration.
6476  var parentVnode = options._parentVnode;
6477  opts.parent = options.parent;
6478  opts._parentVnode = parentVnode;
6479  var vnodeComponentOptions = parentVnode.componentOptions;
6480  opts.propsData = vnodeComponentOptions.propsData;
6481  opts._parentListeners = vnodeComponentOptions.listeners;
6482  opts._renderChildren = vnodeComponentOptions.children;
6483  opts._componentTag = vnodeComponentOptions.tag;
6484  if (options.render) {
6485    opts.render = options.render;
6486    opts.staticRenderFns = options.staticRenderFns;
6487  }
6488}
6489function resolveConstructorOptions(Ctor) {
6490  var options = Ctor.options;
6491  if (Ctor.super) {
6492    var superOptions = resolveConstructorOptions(Ctor.super);
6493    var cachedSuperOptions = Ctor.superOptions;
6494    if (superOptions !== cachedSuperOptions) {
6495      // super option changed,
6496      // need to resolve new options.
6497      Ctor.superOptions = superOptions;
6498      // check if there are any late-modified/attached options (#4976)
6499      var modifiedOptions = resolveModifiedOptions(Ctor);
6500      // update base extend options
6501      if (modifiedOptions) {
6502        extend(Ctor.extendOptions, modifiedOptions);
6503      }
6504      options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
6505      if (options.name) {
6506        options.components[options.name] = Ctor;
6507      }
6508    }
6509  }
6510  return options;
6511}
6512function resolveModifiedOptions(Ctor) {
6513  var modified;
6514  var latest = Ctor.options;
6515  var sealed = Ctor.sealedOptions;
6516  for (var key in latest) {
6517    if (latest[key] !== sealed[key]) {
6518      if (!modified) modified = {};
6519      modified[key] = latest[key];
6520    }
6521  }
6522  return modified;
6523}
6524function FunctionalRenderContext(data, props, children, parent, Ctor) {
6525  var _this = this;
6526  var options = Ctor.options;
6527  // ensure the createElement function in functional components
6528  // gets a unique context - this is necessary for correct named slot check
6529  var contextVm;
6530  if (hasOwn(parent, '_uid')) {
6531    contextVm = Object.create(parent);
6532    contextVm._original = parent;
6533  } else {
6534    // the context vm passed in is a functional context as well.
6535    // in this case we want to make sure we are able to get a hold to the
6536    // real context instance.
6537    contextVm = parent;
6538    // @ts-ignore
6539    parent = parent._original;
6540  }
6541  var isCompiled = isTrue(options._compiled);
6542  var needNormalization = !isCompiled;
6543  this.data = data;
6544  this.props = props;
6545  this.children = children;
6546  this.parent = parent;
6547  this.listeners = data.on || emptyObject;
6548  this.injections = resolveInject(options.inject, parent);
6549  this.slots = function () {
6550    if (!_this.$slots) {
6551      normalizeScopedSlots(parent, data.scopedSlots, _this.$slots = resolveSlots(children, parent));
6552    }
6553    return _this.$slots;
6554  };
6555  Object.defineProperty(this, 'scopedSlots', {
6556    enumerable: true,
6557    get: function () {
6558      return normalizeScopedSlots(parent, data.scopedSlots, this.slots());
6559    }
6560  });
6561  // support for compiled functional template
6562  if (isCompiled) {
6563    // exposing $options for renderStatic()
6564    this.$options = options;
6565    // pre-resolve slots for renderSlot()
6566    this.$slots = this.slots();
6567    this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots);
6568  }
6569  if (options._scopeId) {
6570    this._c = function (a, b, c, d) {
6571      var vnode = createElement$1(contextVm, a, b, c, d, needNormalization);
6572      if (vnode && !isArray(vnode)) {
6573        vnode.fnScopeId = options._scopeId;
6574        vnode.fnContext = parent;
6575      }
6576      return vnode;
6577    };
6578  } else {
6579    this._c = function (a, b, c, d) {
6580      return createElement$1(contextVm, a, b, c, d, needNormalization);
6581    };
6582  }
6583}
6584installRenderHelpers(FunctionalRenderContext.prototype);
6585function createFunctionalComponent(Ctor, propsData, data, contextVm, children) {
6586  var options = Ctor.options;
6587  var props = {};
6588  var propOptions = options.props;
6589  if (isDef(propOptions)) {
6590    for (var key in propOptions) {
6591      props[key] = validateProp(key, propOptions, propsData || emptyObject);
6592    }
6593  } else {
6594    if (isDef(data.attrs)) mergeProps(props, data.attrs);
6595    if (isDef(data.props)) mergeProps(props, data.props);
6596  }
6597  var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor);
6598  var vnode = options.render.call(null, renderContext._c, renderContext);
6599  if (vnode instanceof VNode) {
6600    return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext);
6601  } else if (isArray(vnode)) {
6602    var vnodes = normalizeChildren(vnode) || [];
6603    var res = new Array(vnodes.length);
6604    for (var i = 0; i < vnodes.length; i++) {
6605      res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
6606    }
6607    return res;
6608  }
6609}
6610function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) {
6611  // #7817 clone node before setting fnContext, otherwise if the node is reused
6612  // (e.g. it was from a cached normal slot) the fnContext causes named slots
6613  // that should not be matched to match.
6614  var clone = cloneVNode(vnode);
6615  clone.fnContext = contextVm;
6616  clone.fnOptions = options;
6617  if (true) {
6618    (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;
6619  }
6620  if (data.slot) {
6621    (clone.data || (clone.data = {})).slot = data.slot;
6622  }
6623  return clone;
6624}
6625function mergeProps(to, from) {
6626  for (var key in from) {
6627    to[camelize(key)] = from[key];
6628  }
6629}
6630function getComponentName(options) {
6631  return options.name || options.__name || options._componentTag;
6632}
6633// inline hooks to be invoked on component VNodes during patch
6634var componentVNodeHooks = {
6635  init: function (vnode, hydrating) {
6636    if (vnode.componentInstance && !vnode.componentInstance._isDestroyed && vnode.data.keepAlive) {
6637      // kept-alive components, treat as a patch
6638      var mountedNode = vnode; // work around flow
6639      componentVNodeHooks.prepatch(mountedNode, mountedNode);
6640    } else {
6641      var child = vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance);
6642      child.$mount(hydrating ? vnode.elm : undefined, hydrating);
6643    }
6644  },
6645  prepatch: function (oldVnode, vnode) {
6646    var options = vnode.componentOptions;
6647    var child = vnode.componentInstance = oldVnode.componentInstance;
6648    updateChildComponent(child, options.propsData,
6649    // updated props
6650    options.listeners,
6651    // updated listeners
6652    vnode,
6653    // new parent vnode
6654    options.children // new children
6655    );
6656  },
6657  insert: function (vnode) {
6658    var context = vnode.context,
6659      componentInstance = vnode.componentInstance;
6660    if (!componentInstance._isMounted) {
6661      componentInstance._isMounted = true;
6662      callHook$1(componentInstance, 'mounted');
6663    }
6664    if (vnode.data.keepAlive) {
6665      if (context._isMounted) {
6666        // vue-router#1212
6667        // During updates, a kept-alive component's child components may
6668        // change, so directly walking the tree here may call activated hooks
6669        // on incorrect children. Instead we push them into a queue which will
6670        // be processed after the whole patch process ended.
6671        queueActivatedComponent(componentInstance);
6672      } else {
6673        activateChildComponent(componentInstance, true /* direct */);
6674      }
6675    }
6676  },
6677  destroy: function (vnode) {
6678    var componentInstance = vnode.componentInstance;
6679    if (!componentInstance._isDestroyed) {
6680      if (!vnode.data.keepAlive) {
6681        componentInstance.$destroy();
6682      } else {
6683        deactivateChildComponent(componentInstance, true /* direct */);
6684      }
6685    }
6686  }
6687};
6688var hooksToMerge = Object.keys(componentVNodeHooks);
6689function createComponent(Ctor, data, context, children, tag) {
6690  if (isUndef(Ctor)) {
6691    return;
6692  }
6693  var baseCtor = context.$options._base;
6694  // plain options object: turn it into a constructor
6695  if (isObject(Ctor)) {
6696    Ctor = baseCtor.extend(Ctor);
6697  }
6698  // if at this stage it's not a constructor or an async component factory,
6699  // reject.
6700  if (typeof Ctor !== 'function') {
6701    if (true) {
6702      warn$2("Invalid Component definition: ".concat(String(Ctor)), context);
6703    }
6704    return;
6705  }
6706  // async component
6707  var asyncFactory;
6708  // @ts-expect-error
6709  if (isUndef(Ctor.cid)) {
6710    asyncFactory = Ctor;
6711    Ctor = resolveAsyncComponent(asyncFactory, baseCtor);
6712    if (Ctor === undefined) {
6713      // return a placeholder node for async component, which is rendered
6714      // as a comment node but preserves all the raw information for the node.
6715      // the information will be used for async server-rendering and hydration.
6716      return createAsyncPlaceholder(asyncFactory, data, context, children, tag);
6717    }
6718  }
6719  data = data || {};
6720  // resolve constructor options in case global mixins are applied after
6721  // component constructor creation
6722  resolveConstructorOptions(Ctor);
6723  // transform component v-model data into props & events
6724  if (isDef(data.model)) {
6725    // @ts-expect-error
6726    transformModel(Ctor.options, data);
6727  }
6728  // extract props
6729  // @ts-expect-error
6730  var propsData = extractPropsFromVNodeData(data, Ctor, tag);
6731  // functional component
6732  // @ts-expect-error
6733  if (isTrue(Ctor.options.functional)) {
6734    return createFunctionalComponent(Ctor, propsData, data, context, children);
6735  }
6736  // extract listeners, since these needs to be treated as
6737  // child component listeners instead of DOM listeners
6738  var listeners = data.on;
6739  // replace with listeners with .native modifier
6740  // so it gets processed during parent component patch.
6741  data.on = data.nativeOn;
6742  // @ts-expect-error
6743  if (isTrue(Ctor.options.abstract)) {
6744    // abstract components do not keep anything
6745    // other than props & listeners & slot
6746    // work around flow
6747    var slot = data.slot;
6748    data = {};
6749    if (slot) {
6750      data.slot = slot;
6751    }
6752  }
6753  // install component management hooks onto the placeholder node
6754  installComponentHooks(data);
6755  // return a placeholder vnode
6756  // @ts-expect-error
6757  var name = getComponentName(Ctor.options) || tag;
6758  var vnode = new VNode(
6759  // @ts-expect-error
6760  "vue-component-".concat(Ctor.cid).concat(name ? "-".concat(name) : ''), data, undefined, undefined, undefined, context,
6761  // @ts-expect-error
6762  {
6763    Ctor: Ctor,
6764    propsData: propsData,
6765    listeners: listeners,
6766    tag: tag,
6767    children: children
6768  }, asyncFactory);
6769  return vnode;
6770}
6771function createComponentInstanceForVnode(
6772// we know it's MountedComponentVNode but flow doesn't
6773vnode,
6774// activeInstance in lifecycle state
6775parent) {
6776  var options = {
6777    _isComponent: true,
6778    _parentVnode: vnode,
6779    parent: parent
6780  };
6781  // check inline-template render functions
6782  var inlineTemplate = vnode.data.inlineTemplate;
6783  if (isDef(inlineTemplate)) {
6784    options.render = inlineTemplate.render;
6785    options.staticRenderFns = inlineTemplate.staticRenderFns;
6786  }
6787  return new vnode.componentOptions.Ctor(options);
6788}
6789function installComponentHooks(data) {
6790  var hooks = data.hook || (data.hook = {});
6791  for (var i = 0; i < hooksToMerge.length; i++) {
6792    var key = hooksToMerge[i];
6793    var existing = hooks[key];
6794    var toMerge = componentVNodeHooks[key];
6795    // @ts-expect-error
6796    if (existing !== toMerge && !(existing && existing._merged)) {
6797      hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge;
6798    }
6799  }
6800}
6801function mergeHook(f1, f2) {
6802  var merged = function (a, b) {
6803    // flow complains about extra args which is why we use any
6804    f1(a, b);
6805    f2(a, b);
6806  };
6807  merged._merged = true;
6808  return merged;
6809}
6810// transform component v-model info (value and callback) into
6811// prop and event handler respectively.
6812function transformModel(options, data) {
6813  var prop = options.model && options.model.prop || 'value';
6814  var event = options.model && options.model.event || 'input';
6815  (data.attrs || (data.attrs = {}))[prop] = data.model.value;
6816  var on = data.on || (data.on = {});
6817  var existing = on[event];
6818  var callback = data.model.callback;
6819  if (isDef(existing)) {
6820    if (isArray(existing) ? existing.indexOf(callback) === -1 : existing !== callback) {
6821      on[event] = [callback].concat(existing);
6822    }
6823  } else {
6824    on[event] = callback;
6825  }
6826}
6827var warn$2 = noop;
6828var tip = noop;
6829var generateComponentTrace; // work around flow check
6830var formatComponentName;
6831if (true) {
6832  var hasConsole_1 = typeof console !== 'undefined';
6833  var classifyRE_1 = /(?:^|[-_])(\w)/g;
6834  var classify_1 = function (str) {
6835    return str.replace(classifyRE_1, function (c) {
6836      return c.toUpperCase();
6837    }).replace(/[-_]/g, '');
6838  };
6839  warn$2 = function (msg, vm) {
6840    if (vm === void 0) {
6841      vm = currentInstance;
6842    }
6843    var trace = vm ? generateComponentTrace(vm) : '';
6844    if (config.warnHandler) {
6845      config.warnHandler.call(null, msg, vm, trace);
6846    } else if (hasConsole_1 && !config.silent) {
6847      console.error("[Vue warn]: ".concat(msg).concat(trace));
6848    }
6849  };
6850  tip = function (msg, vm) {
6851    if (hasConsole_1 && !config.silent) {
6852      console.warn("[Vue tip]: ".concat(msg) + (vm ? generateComponentTrace(vm) : ''));
6853    }
6854  };
6855  formatComponentName = function (vm, includeFile) {
6856    if (vm.$root === vm) {
6857      return '<Root>';
6858    }
6859    var options = isFunction(vm) && vm.cid != null ? vm.options : vm._isVue ? vm.$options || vm.constructor.options : vm;
6860    var name = getComponentName(options);
6861    var file = options.__file;
6862    if (!name && file) {
6863      var match = file.match(/([^/\\]+)\.vue$/);
6864      name = match && match[1];
6865    }
6866    return (name ? "<".concat(classify_1(name), ">") : "<Anonymous>") + (file && includeFile !== false ? " at ".concat(file) : '');
6867  };
6868  var repeat_1 = function (str, n) {
6869    var res = '';
6870    while (n) {
6871      if (n % 2 === 1) res += str;
6872      if (n > 1) str += str;
6873      n >>= 1;
6874    }
6875    return res;
6876  };
6877  generateComponentTrace = function (vm) {
6878    if (vm._isVue && vm.$parent) {
6879      var tree = [];
6880      var currentRecursiveSequence = 0;
6881      while (vm) {
6882        if (tree.length > 0) {
6883          var last = tree[tree.length - 1];
6884          if (last.constructor === vm.constructor) {
6885            currentRecursiveSequence++;
6886            vm = vm.$parent;
6887            continue;
6888          } else if (currentRecursiveSequence > 0) {
6889            tree[tree.length - 1] = [last, currentRecursiveSequence];
6890            currentRecursiveSequence = 0;
6891          }
6892        }
6893        tree.push(vm);
6894        vm = vm.$parent;
6895      }
6896      return '\n\nfound in\n\n' + tree.map(function (vm, i) {
6897        return "".concat(i === 0 ? '---> ' : repeat_1(' ', 5 + i * 2)).concat(isArray(vm) ? "".concat(formatComponentName(vm[0]), "... (").concat(vm[1], " recursive calls)") : formatComponentName(vm));
6898      }).join('\n');
6899    } else {
6900      return "\n\n(found in ".concat(formatComponentName(vm), ")");
6901    }
6902  };
6903}
6904
6905/**
6906 * Option overwriting strategies are functions that handle
6907 * how to merge a parent option value and a child option
6908 * value into the final value.
6909 */
6910var strats = config.optionMergeStrategies;
6911/**
6912 * Options with restrictions
6913 */
6914if (true) {
6915  strats.el = strats.propsData = function (parent, child, vm, key) {
6916    if (!vm) {
6917      warn$2("option \"".concat(key, "\" can only be used during instance ") + 'creation with the `new` keyword.');
6918    }
6919    return defaultStrat(parent, child);
6920  };
6921}
6922/**
6923 * Helper that recursively merges two data objects together.
6924 */
6925function mergeData(to, from, recursive) {
6926  if (recursive === void 0) {
6927    recursive = true;
6928  }
6929  if (!from) return to;
6930  var key, toVal, fromVal;
6931  var keys = hasSymbol ? Reflect.ownKeys(from) : Object.keys(from);
6932  for (var i = 0; i < keys.length; i++) {
6933    key = keys[i];
6934    // in case the object is already observed...
6935    if (key === '__ob__') continue;
6936    toVal = to[key];
6937    fromVal = from[key];
6938    if (!recursive || !hasOwn(to, key)) {
6939      set(to, key, fromVal);
6940    } else if (toVal !== fromVal && isPlainObject(toVal) && isPlainObject(fromVal)) {
6941      mergeData(toVal, fromVal);
6942    }
6943  }
6944  return to;
6945}
6946/**
6947 * Data
6948 */
6949function mergeDataOrFn(parentVal, childVal, vm) {
6950  if (!vm) {
6951    // in a Vue.extend merge, both should be functions
6952    if (!childVal) {
6953      return parentVal;
6954    }
6955    if (!parentVal) {
6956      return childVal;
6957    }
6958    // when parentVal & childVal are both present,
6959    // we need to return a function that returns the
6960    // merged result of both functions... no need to
6961    // check if parentVal is a function here because
6962    // it has to be a function to pass previous merges.
6963    return function mergedDataFn() {
6964      return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal);
6965    };
6966  } else {
6967    return function mergedInstanceDataFn() {
6968      // instance merge
6969      var instanceData = isFunction(childVal) ? childVal.call(vm, vm) : childVal;
6970      var defaultData = isFunction(parentVal) ? parentVal.call(vm, vm) : parentVal;
6971      if (instanceData) {
6972        return mergeData(instanceData, defaultData);
6973      } else {
6974        return defaultData;
6975      }
6976    };
6977  }
6978}
6979strats.data = function (parentVal, childVal, vm) {
6980  if (!vm) {
6981    if (childVal && typeof childVal !== 'function') {
6982       true && warn$2('The "data" option should be a function ' + 'that returns a per-instance value in component ' + 'definitions.', vm);
6983      return parentVal;
6984    }
6985    return mergeDataOrFn(parentVal, childVal);
6986  }
6987  return mergeDataOrFn(parentVal, childVal, vm);
6988};
6989/**
6990 * Hooks and props are merged as arrays.
6991 */
6992function mergeLifecycleHook(parentVal, childVal) {
6993  var res = childVal ? parentVal ? parentVal.concat(childVal) : isArray(childVal) ? childVal : [childVal] : parentVal;
6994  return res ? dedupeHooks(res) : res;
6995}
6996function dedupeHooks(hooks) {
6997  var res = [];
6998  for (var i = 0; i < hooks.length; i++) {
6999    if (res.indexOf(hooks[i]) === -1) {
7000      res.push(hooks[i]);
7001    }
7002  }
7003  return res;
7004}
7005LIFECYCLE_HOOKS.forEach(function (hook) {
7006  strats[hook] = mergeLifecycleHook;
7007});
7008/**
7009 * Assets
7010 *
7011 * When a vm is present (instance creation), we need to do
7012 * a three-way merge between constructor options, instance
7013 * options and parent options.
7014 */
7015function mergeAssets(parentVal, childVal, vm, key) {
7016  var res = Object.create(parentVal || null);
7017  if (childVal) {
7018     true && assertObjectType(key, childVal, vm);
7019    return extend(res, childVal);
7020  } else {
7021    return res;
7022  }
7023}
7024ASSET_TYPES.forEach(function (type) {
7025  strats[type + 's'] = mergeAssets;
7026});
7027/**
7028 * Watchers.
7029 *
7030 * Watchers hashes should not overwrite one
7031 * another, so we merge them as arrays.
7032 */
7033strats.watch = function (parentVal, childVal, vm, key) {
7034  // work around Firefox's Object.prototype.watch...
7035  //@ts-expect-error work around
7036  if (parentVal === nativeWatch) parentVal = undefined;
7037  //@ts-expect-error work around
7038  if (childVal === nativeWatch) childVal = undefined;
7039  /* istanbul ignore if */
7040  if (!childVal) return Object.create(parentVal || null);
7041  if (true) {
7042    assertObjectType(key, childVal, vm);
7043  }
7044  if (!parentVal) return childVal;
7045  var ret = {};
7046  extend(ret, parentVal);
7047  for (var key_1 in childVal) {
7048    var parent_1 = ret[key_1];
7049    var child = childVal[key_1];
7050    if (parent_1 && !isArray(parent_1)) {
7051      parent_1 = [parent_1];
7052    }
7053    ret[key_1] = parent_1 ? parent_1.concat(child) : isArray(child) ? child : [child];
7054  }
7055  return ret;
7056};
7057/**
7058 * Other object hashes.
7059 */
7060strats.props = strats.methods = strats.inject = strats.computed = function (parentVal, childVal, vm, key) {
7061  if (childVal && "development" !== 'production') {
7062    assertObjectType(key, childVal, vm);
7063  }
7064  if (!parentVal) return childVal;
7065  var ret = Object.create(null);
7066  extend(ret, parentVal);
7067  if (childVal) extend(ret, childVal);
7068  return ret;
7069};
7070strats.provide = function (parentVal, childVal) {
7071  if (!parentVal) return childVal;
7072  return function () {
7073    var ret = Object.create(null);
7074    mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal);
7075    if (childVal) {
7076      mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive
7077      );
7078    }
7079    return ret;
7080  };
7081};
7082/**
7083 * Default strategy.
7084 */
7085var defaultStrat = function (parentVal, childVal) {
7086  return childVal === undefined ? parentVal : childVal;
7087};
7088/**
7089 * Validate component names
7090 */
7091function checkComponents(options) {
7092  for (var key in options.components) {
7093    validateComponentName(key);
7094  }
7095}
7096function validateComponentName(name) {
7097  if (!new RegExp("^[a-zA-Z][\\-\\.0-9_".concat(unicodeRegExp.source, "]*$")).test(name)) {
7098    warn$2('Invalid component name: "' + name + '". Component names ' + 'should conform to valid custom element name in html5 specification.');
7099  }
7100  if (isBuiltInTag(name) || config.isReservedTag(name)) {
7101    warn$2('Do not use built-in or reserved HTML elements as component ' + 'id: ' + name);
7102  }
7103}
7104/**
7105 * Ensure all props option syntax are normalized into the
7106 * Object-based format.
7107 */
7108function normalizeProps(options, vm) {
7109  var props = options.props;
7110  if (!props) return;
7111  var res = {};
7112  var i, val, name;
7113  if (isArray(props)) {
7114    i = props.length;
7115    while (i--) {
7116      val = props[i];
7117      if (typeof val === 'string') {
7118        name = camelize(val);
7119        res[name] = {
7120          type: null
7121        };
7122      } else if (true) {
7123        warn$2('props must be strings when using array syntax.');
7124      }
7125    }
7126  } else if (isPlainObject(props)) {
7127    for (var key in props) {
7128      val = props[key];
7129      name = camelize(key);
7130      res[name] = isPlainObject(val) ? val : {
7131        type: val
7132      };
7133    }
7134  } else if (true) {
7135    warn$2("Invalid value for option \"props\": expected an Array or an Object, " + "but got ".concat(toRawType(props), "."), vm);
7136  }
7137  options.props = res;
7138}
7139/**
7140 * Normalize all injections into Object-based format
7141 */
7142function normalizeInject(options, vm) {
7143  var inject = options.inject;
7144  if (!inject) return;
7145  var normalized = options.inject = {};
7146  if (isArray(inject)) {
7147    for (var i = 0; i < inject.length; i++) {
7148      normalized[inject[i]] = {
7149        from: inject[i]
7150      };
7151    }
7152  } else if (isPlainObject(inject)) {
7153    for (var key in inject) {
7154      var val = inject[key];
7155      normalized[key] = isPlainObject(val) ? extend({
7156        from: key
7157      }, val) : {
7158        from: val
7159      };
7160    }
7161  } else if (true) {
7162    warn$2("Invalid value for option \"inject\": expected an Array or an Object, " + "but got ".concat(toRawType(inject), "."), vm);
7163  }
7164}
7165/**
7166 * Normalize raw function directives into object format.
7167 */
7168function normalizeDirectives$1(options) {
7169  var dirs = options.directives;
7170  if (dirs) {
7171    for (var key in dirs) {
7172      var def = dirs[key];
7173      if (isFunction(def)) {
7174        dirs[key] = {
7175          bind: def,
7176          update: def
7177        };
7178      }
7179    }
7180  }
7181}
7182function assertObjectType(name, value, vm) {
7183  if (!isPlainObject(value)) {
7184    warn$2("Invalid value for option \"".concat(name, "\": expected an Object, ") + "but got ".concat(toRawType(value), "."), vm);
7185  }
7186}
7187/**
7188 * Merge two option objects into a new one.
7189 * Core utility used in both instantiation and inheritance.
7190 */
7191function mergeOptions(parent, child, vm) {
7192  if (true) {
7193    checkComponents(child);
7194  }
7195  if (isFunction(child)) {
7196    // @ts-expect-error
7197    child = child.options;
7198  }
7199  normalizeProps(child, vm);
7200  normalizeInject(child, vm);
7201  normalizeDirectives$1(child);
7202  // Apply extends and mixins on the child options,
7203  // but only if it is a raw options object that isn't
7204  // the result of another mergeOptions call.
7205  // Only merged options has the _base property.
7206  if (!child._base) {
7207    if (child.extends) {
7208      parent = mergeOptions(parent, child.extends, vm);
7209    }
7210    if (child.mixins) {
7211      for (var i = 0, l = child.mixins.length; i < l; i++) {
7212        parent = mergeOptions(parent, child.mixins[i], vm);
7213      }
7214    }
7215  }
7216  var options = {};
7217  var key;
7218  for (key in parent) {
7219    mergeField(key);
7220  }
7221  for (key in child) {
7222    if (!hasOwn(parent, key)) {
7223      mergeField(key);
7224    }
7225  }
7226  function mergeField(key) {
7227    var strat = strats[key] || defaultStrat;
7228    options[key] = strat(parent[key], child[key], vm, key);
7229  }
7230  return options;
7231}
7232/**
7233 * Resolve an asset.
7234 * This function is used because child instances need access
7235 * to assets defined in its ancestor chain.
7236 */
7237function resolveAsset(options, type, id, warnMissing) {
7238  /* istanbul ignore if */
7239  if (typeof id !== 'string') {
7240    return;
7241  }
7242  var assets = options[type];
7243  // check local registration variations first
7244  if (hasOwn(assets, id)) return assets[id];
7245  var camelizedId = camelize(id);
7246  if (hasOwn(assets, camelizedId)) return assets[camelizedId];
7247  var PascalCaseId = capitalize(camelizedId);
7248  if (hasOwn(assets, PascalCaseId)) return assets[PascalCaseId];
7249  // fallback to prototype chain
7250  var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
7251  if ( true && warnMissing && !res) {
7252    warn$2('Failed to resolve ' + type.slice(0, -1) + ': ' + id);
7253  }
7254  return res;
7255}
7256function validateProp(key, propOptions, propsData, vm) {
7257  var prop = propOptions[key];
7258  var absent = !hasOwn(propsData, key);
7259  var value = propsData[key];
7260  // boolean casting
7261  var booleanIndex = getTypeIndex(Boolean, prop.type);
7262  if (booleanIndex > -1) {
7263    if (absent && !hasOwn(prop, 'default')) {
7264      value = false;
7265    } else if (value === '' || value === hyphenate(key)) {
7266      // only cast empty string / same name to boolean if
7267      // boolean has higher priority
7268      var stringIndex = getTypeIndex(String, prop.type);
7269      if (stringIndex < 0 || booleanIndex < stringIndex) {
7270        value = true;
7271      }
7272    }
7273  }
7274  // check default value
7275  if (value === undefined) {
7276    value = getPropDefaultValue(vm, prop, key);
7277    // since the default value is a fresh copy,
7278    // make sure to observe it.
7279    var prevShouldObserve = shouldObserve;
7280    toggleObserving(true);
7281    observe(value);
7282    toggleObserving(prevShouldObserve);
7283  }
7284  if (true) {
7285    assertProp(prop, key, value, vm, absent);
7286  }
7287  return value;
7288}
7289/**
7290 * Get the default value of a prop.
7291 */
7292function getPropDefaultValue(vm, prop, key) {
7293  // no default, return undefined
7294  if (!hasOwn(prop, 'default')) {
7295    return undefined;
7296  }
7297  var def = prop.default;
7298  // warn against non-factory defaults for Object & Array
7299  if ( true && isObject(def)) {
7300    warn$2('Invalid default value for prop "' + key + '": ' + 'Props with type Object/Array must use a factory function ' + 'to return the default value.', vm);
7301  }
7302  // the raw prop value was also undefined from previous render,
7303  // return previous default value to avoid unnecessary watcher trigger
7304  if (vm && vm.$options.propsData && vm.$options.propsData[key] === undefined && vm._props[key] !== undefined) {
7305    return vm._props[key];
7306  }
7307  // call factory function for non-Function types
7308  // a value is Function if its prototype is function even across different execution context
7309  return isFunction(def) && getType(prop.type) !== 'Function' ? def.call(vm) : def;
7310}
7311/**
7312 * Assert whether a prop is valid.
7313 */
7314function assertProp(prop, name, value, vm, absent) {
7315  if (prop.required && absent) {
7316    warn$2('Missing required prop: "' + name + '"', vm);
7317    return;
7318  }
7319  if (value == null && !prop.required) {
7320    return;
7321  }
7322  var type = prop.type;
7323  var valid = !type || type === true;
7324  var expectedTypes = [];
7325  if (type) {
7326    if (!isArray(type)) {
7327      type = [type];
7328    }
7329    for (var i = 0; i < type.length && !valid; i++) {
7330      var assertedType = assertType(value, type[i], vm);
7331      expectedTypes.push(assertedType.expectedType || '');
7332      valid = assertedType.valid;
7333    }
7334  }
7335  var haveExpectedTypes = expectedTypes.some(function (t) {
7336    return t;
7337  });
7338  if (!valid && haveExpectedTypes) {
7339    warn$2(getInvalidTypeMessage(name, value, expectedTypes), vm);
7340    return;
7341  }
7342  var validator = prop.validator;
7343  if (validator) {
7344    if (!validator(value)) {
7345      warn$2('Invalid prop: custom validator check failed for prop "' + name + '".', vm);
7346    }
7347  }
7348}
7349var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;
7350function assertType(value, type, vm) {
7351  var valid;
7352  var expectedType = getType(type);
7353  if (simpleCheckRE.test(expectedType)) {
7354    var t = typeof value;
7355    valid = t === expectedType.toLowerCase();
7356    // for primitive wrapper objects
7357    if (!valid && t === 'object') {
7358      valid = value instanceof type;
7359    }
7360  } else if (expectedType === 'Object') {
7361    valid = isPlainObject(value);
7362  } else if (expectedType === 'Array') {
7363    valid = isArray(value);
7364  } else {
7365    try {
7366      valid = value instanceof type;
7367    } catch (e) {
7368      warn$2('Invalid prop type: "' + String(type) + '" is not a constructor', vm);
7369      valid = false;
7370    }
7371  }
7372  return {
7373    valid: valid,
7374    expectedType: expectedType
7375  };
7376}
7377var functionTypeCheckRE = /^\s*function (\w+)/;
7378/**
7379 * Use function string name to check built-in types,
7380 * because a simple equality check will fail when running
7381 * across different vms / iframes.
7382 */
7383function getType(fn) {
7384  var match = fn && fn.toString().match(functionTypeCheckRE);
7385  return match ? match[1] : '';
7386}
7387function isSameType(a, b) {
7388  return getType(a) === getType(b);
7389}
7390function getTypeIndex(type, expectedTypes) {
7391  if (!isArray(expectedTypes)) {
7392    return isSameType(expectedTypes, type) ? 0 : -1;
7393  }
7394  for (var i = 0, len = expectedTypes.length; i < len; i++) {
7395    if (isSameType(expectedTypes[i], type)) {
7396      return i;
7397    }
7398  }
7399  return -1;
7400}
7401function getInvalidTypeMessage(name, value, expectedTypes) {
7402  var message = "Invalid prop: type check failed for prop \"".concat(name, "\".") + " Expected ".concat(expectedTypes.map(capitalize).join(', '));
7403  var expectedType = expectedTypes[0];
7404  var receivedType = toRawType(value);
7405  // check if we need to specify expected value
7406  if (expectedTypes.length === 1 && isExplicable(expectedType) && isExplicable(typeof value) && !isBoolean(expectedType, receivedType)) {
7407    message += " with value ".concat(styleValue(value, expectedType));
7408  }
7409  message += ", got ".concat(receivedType, " ");
7410  // check if we need to specify received value
7411  if (isExplicable(receivedType)) {
7412    message += "with value ".concat(styleValue(value, receivedType), ".");
7413  }
7414  return message;
7415}
7416function styleValue(value, type) {
7417  if (type === 'String') {
7418    return "\"".concat(value, "\"");
7419  } else if (type === 'Number') {
7420    return "".concat(Number(value));
7421  } else {
7422    return "".concat(value);
7423  }
7424}
7425var EXPLICABLE_TYPES = ['string', 'number', 'boolean'];
7426function isExplicable(value) {
7427  return EXPLICABLE_TYPES.some(function (elem) {
7428    return value.toLowerCase() === elem;
7429  });
7430}
7431function isBoolean() {
7432  var args = [];
7433  for (var _i = 0; _i < arguments.length; _i++) {
7434    args[_i] = arguments[_i];
7435  }
7436  return args.some(function (elem) {
7437    return elem.toLowerCase() === 'boolean';
7438  });
7439}
7440function Vue(options) {
7441  if ( true && !(this instanceof Vue)) {
7442    warn$2('Vue is a constructor and should be called with the `new` keyword');
7443  }
7444  this._init(options);
7445}
7446//@ts-expect-error Vue has function type
7447initMixin$1(Vue);
7448//@ts-expect-error Vue has function type
7449stateMixin(Vue);
7450//@ts-expect-error Vue has function type
7451eventsMixin(Vue);
7452//@ts-expect-error Vue has function type
7453lifecycleMixin(Vue);
7454//@ts-expect-error Vue has function type
7455renderMixin(Vue);
7456function initUse(Vue) {
7457  Vue.use = function (plugin) {
7458    var installedPlugins = this._installedPlugins || (this._installedPlugins = []);
7459    if (installedPlugins.indexOf(plugin) > -1) {
7460      return this;
7461    }
7462    // additional parameters
7463    var args = toArray(arguments, 1);
7464    args.unshift(this);
7465    if (isFunction(plugin.install)) {
7466      plugin.install.apply(plugin, args);
7467    } else if (isFunction(plugin)) {
7468      plugin.apply(null, args);
7469    }
7470    installedPlugins.push(plugin);
7471    return this;
7472  };
7473}
7474function initMixin(Vue) {
7475  Vue.mixin = function (mixin) {
7476    this.options = mergeOptions(this.options, mixin);
7477    return this;
7478  };
7479}
7480function initExtend(Vue) {
7481  /**
7482   * Each instance constructor, including Vue, has a unique
7483   * cid. This enables us to create wrapped "child
7484   * constructors" for prototypal inheritance and cache them.
7485   */
7486  Vue.cid = 0;
7487  var cid = 1;
7488  /**
7489   * Class inheritance
7490   */
7491  Vue.extend = function (extendOptions) {
7492    extendOptions = extendOptions || {};
7493    var Super = this;
7494    var SuperId = Super.cid;
7495    var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
7496    if (cachedCtors[SuperId]) {
7497      return cachedCtors[SuperId];
7498    }
7499    var name = getComponentName(extendOptions) || getComponentName(Super.options);
7500    if ( true && name) {
7501      validateComponentName(name);
7502    }
7503    var Sub = function VueComponent(options) {
7504      this._init(options);
7505    };
7506    Sub.prototype = Object.create(Super.prototype);
7507    Sub.prototype.constructor = Sub;
7508    Sub.cid = cid++;
7509    Sub.options = mergeOptions(Super.options, extendOptions);
7510    Sub['super'] = Super;
7511    // For props and computed properties, we define the proxy getters on
7512    // the Vue instances at extension time, on the extended prototype. This
7513    // avoids Object.defineProperty calls for each instance created.
7514    if (Sub.options.props) {
7515      initProps(Sub);
7516    }
7517    if (Sub.options.computed) {
7518      initComputed(Sub);
7519    }
7520    // allow further extension/mixin/plugin usage
7521    Sub.extend = Super.extend;
7522    Sub.mixin = Super.mixin;
7523    Sub.use = Super.use;
7524    // create asset registers, so extended classes
7525    // can have their private assets too.
7526    ASSET_TYPES.forEach(function (type) {
7527      Sub[type] = Super[type];
7528    });
7529    // enable recursive self-lookup
7530    if (name) {
7531      Sub.options.components[name] = Sub;
7532    }
7533    // keep a reference to the super options at extension time.
7534    // later at instantiation we can check if Super's options have
7535    // been updated.
7536    Sub.superOptions = Super.options;
7537    Sub.extendOptions = extendOptions;
7538    Sub.sealedOptions = extend({}, Sub.options);
7539    // cache constructor
7540    cachedCtors[SuperId] = Sub;
7541    return Sub;
7542  };
7543}
7544function initProps(Comp) {
7545  var props = Comp.options.props;
7546  for (var key in props) {
7547    proxy(Comp.prototype, "_props", key);
7548  }
7549}
7550function initComputed(Comp) {
7551  var computed = Comp.options.computed;
7552  for (var key in computed) {
7553    defineComputed(Comp.prototype, key, computed[key]);
7554  }
7555}
7556function initAssetRegisters(Vue) {
7557  /**
7558   * Create asset registration methods.
7559   */
7560  ASSET_TYPES.forEach(function (type) {
7561    // @ts-expect-error function is not exact same type
7562    Vue[type] = function (id, definition) {
7563      if (!definition) {
7564        return this.options[type + 's'][id];
7565      } else {
7566        /* istanbul ignore if */
7567        if ( true && type === 'component') {
7568          validateComponentName(id);
7569        }
7570        if (type === 'component' && isPlainObject(definition)) {
7571          // @ts-expect-error
7572          definition.name = definition.name || id;
7573          definition = this.options._base.extend(definition);
7574        }
7575        if (type === 'directive' && isFunction(definition)) {
7576          definition = {
7577            bind: definition,
7578            update: definition
7579          };
7580        }
7581        this.options[type + 's'][id] = definition;
7582        return definition;
7583      }
7584    };
7585  });
7586}
7587function _getComponentName(opts) {
7588  return opts && (getComponentName(opts.Ctor.options) || opts.tag);
7589}
7590function matches(pattern, name) {
7591  if (isArray(pattern)) {
7592    return pattern.indexOf(name) > -1;
7593  } else if (typeof pattern === 'string') {
7594    return pattern.split(',').indexOf(name) > -1;
7595  } else if (isRegExp(pattern)) {
7596    return pattern.test(name);
7597  }
7598  /* istanbul ignore next */
7599  return false;
7600}
7601function pruneCache(keepAliveInstance, filter) {
7602  var cache = keepAliveInstance.cache,
7603    keys = keepAliveInstance.keys,
7604    _vnode = keepAliveInstance._vnode;
7605  for (var key in cache) {
7606    var entry = cache[key];
7607    if (entry) {
7608      var name_1 = entry.name;
7609      if (name_1 && !filter(name_1)) {
7610        pruneCacheEntry(cache, key, keys, _vnode);
7611      }
7612    }
7613  }
7614}
7615function pruneCacheEntry(cache, key, keys, current) {
7616  var entry = cache[key];
7617  if (entry && (!current || entry.tag !== current.tag)) {
7618    // @ts-expect-error can be undefined
7619    entry.componentInstance.$destroy();
7620  }
7621  cache[key] = null;
7622  remove$2(keys, key);
7623}
7624var patternTypes = [String, RegExp, Array];
7625// TODO defineComponent
7626var KeepAlive = {
7627  name: 'keep-alive',
7628  abstract: true,
7629  props: {
7630    include: patternTypes,
7631    exclude: patternTypes,
7632    max: [String, Number]
7633  },
7634  methods: {
7635    cacheVNode: function () {
7636      var _a = this,
7637        cache = _a.cache,
7638        keys = _a.keys,
7639        vnodeToCache = _a.vnodeToCache,
7640        keyToCache = _a.keyToCache;
7641      if (vnodeToCache) {
7642        var tag = vnodeToCache.tag,
7643          componentInstance = vnodeToCache.componentInstance,
7644          componentOptions = vnodeToCache.componentOptions;
7645        cache[keyToCache] = {
7646          name: _getComponentName(componentOptions),
7647          tag: tag,
7648          componentInstance: componentInstance
7649        };
7650        keys.push(keyToCache);
7651        // prune oldest entry
7652        if (this.max && keys.length > parseInt(this.max)) {
7653          pruneCacheEntry(cache, keys[0], keys, this._vnode);
7654        }
7655        this.vnodeToCache = null;
7656      }
7657    }
7658  },
7659  created: function () {
7660    this.cache = Object.create(null);
7661    this.keys = [];
7662  },
7663  destroyed: function () {
7664    for (var key in this.cache) {
7665      pruneCacheEntry(this.cache, key, this.keys);
7666    }
7667  },
7668  mounted: function () {
7669    var _this = this;
7670    this.cacheVNode();
7671    this.$watch('include', function (val) {
7672      pruneCache(_this, function (name) {
7673        return matches(val, name);
7674      });
7675    });
7676    this.$watch('exclude', function (val) {
7677      pruneCache(_this, function (name) {
7678        return !matches(val, name);
7679      });
7680    });
7681  },
7682  updated: function () {
7683    this.cacheVNode();
7684  },
7685  render: function () {
7686    var slot = this.$slots.default;
7687    var vnode = getFirstComponentChild(slot);
7688    var componentOptions = vnode && vnode.componentOptions;
7689    if (componentOptions) {
7690      // check pattern
7691      var name_2 = _getComponentName(componentOptions);
7692      var _a = this,
7693        include = _a.include,
7694        exclude = _a.exclude;
7695      if (
7696      // not included
7697      include && (!name_2 || !matches(include, name_2)) ||
7698      // excluded
7699      exclude && name_2 && matches(exclude, name_2)) {
7700        return vnode;
7701      }
7702      var _b = this,
7703        cache = _b.cache,
7704        keys = _b.keys;
7705      var key = vnode.key == null ?
7706      // same constructor may get registered as different local components
7707      // so cid alone is not enough (#3269)
7708      componentOptions.Ctor.cid + (componentOptions.tag ? "::".concat(componentOptions.tag) : '') : vnode.key;
7709      if (cache[key]) {
7710        vnode.componentInstance = cache[key].componentInstance;
7711        // make current key freshest
7712        remove$2(keys, key);
7713        keys.push(key);
7714      } else {
7715        // delay setting the cache until update
7716        this.vnodeToCache = vnode;
7717        this.keyToCache = key;
7718      }
7719      // @ts-expect-error can vnode.data can be undefined
7720      vnode.data.keepAlive = true;
7721    }
7722    return vnode || slot && slot[0];
7723  }
7724};
7725var builtInComponents = {
7726  KeepAlive: KeepAlive
7727};
7728function initGlobalAPI(Vue) {
7729  // config
7730  var configDef = {};
7731  configDef.get = function () {
7732    return config;
7733  };
7734  if (true) {
7735    configDef.set = function () {
7736      warn$2('Do not replace the Vue.config object, set individual fields instead.');
7737    };
7738  }
7739  Object.defineProperty(Vue, 'config', configDef);
7740  // exposed util methods.
7741  // NOTE: these are not considered part of the public API - avoid relying on
7742  // them unless you are aware of the risk.
7743  Vue.util = {
7744    warn: warn$2,
7745    extend: extend,
7746    mergeOptions: mergeOptions,
7747    defineReactive: defineReactive
7748  };
7749  Vue.set = set;
7750  Vue.delete = del;
7751  Vue.nextTick = nextTick;
7752  // 2.6 explicit observable API
7753  Vue.observable = function (obj) {
7754    observe(obj);
7755    return obj;
7756  };
7757  Vue.options = Object.create(null);
7758  ASSET_TYPES.forEach(function (type) {
7759    Vue.options[type + 's'] = Object.create(null);
7760  });
7761  // this is used to identify the "base" constructor to extend all plain-object
7762  // components with in Weex's multi-instance scenarios.
7763  Vue.options._base = Vue;
7764  extend(Vue.options.components, builtInComponents);
7765  initUse(Vue);
7766  initMixin(Vue);
7767  initExtend(Vue);
7768  initAssetRegisters(Vue);
7769}
7770initGlobalAPI(Vue);
7771Object.defineProperty(Vue.prototype, '$isServer', {
7772  get: isServerRendering
7773});
7774Object.defineProperty(Vue.prototype, '$ssrContext', {
7775  get: function () {
7776    /* istanbul ignore next */
7777    return this.$vnode && this.$vnode.ssrContext;
7778  }
7779});
7780// expose FunctionalRenderContext for ssr runtime helper installation
7781Object.defineProperty(Vue, 'FunctionalRenderContext', {
7782  value: FunctionalRenderContext
7783});
7784Vue.version = version;
7785
7786// these are reserved for web because they are directly compiled away
7787// during template compilation
7788var isReservedAttr = makeMap('style,class');
7789// attributes that should be using props for binding
7790var acceptValue = makeMap('input,textarea,option,select,progress');
7791var mustUseProp = function (tag, type, attr) {
7792  return attr === 'value' && acceptValue(tag) && type !== 'button' || attr === 'selected' && tag === 'option' || attr === 'checked' && tag === 'input' || attr === 'muted' && tag === 'video';
7793};
7794var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
7795var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');
7796var convertEnumeratedValue = function (key, value) {
7797  return isFalsyAttrValue(value) || value === 'false' ? 'false' :
7798  // allow arbitrary string value for contenteditable
7799  key === 'contenteditable' && isValidContentEditableValue(value) ? value : 'true';
7800};
7801var isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' + 'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' + 'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' + 'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' + 'required,reversed,scoped,seamless,selected,sortable,' + 'truespeed,typemustmatch,visible');
7802var xlinkNS = 'http://www.w3.org/1999/xlink';
7803var isXlink = function (name) {
7804  return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink';
7805};
7806var getXlinkProp = function (name) {
7807  return isXlink(name) ? name.slice(6, name.length) : '';
7808};
7809var isFalsyAttrValue = function (val) {
7810  return val == null || val === false;
7811};
7812function genClassForVnode(vnode) {
7813  var data = vnode.data;
7814  var parentNode = vnode;
7815  var childNode = vnode;
7816  while (isDef(childNode.componentInstance)) {
7817    childNode = childNode.componentInstance._vnode;
7818    if (childNode && childNode.data) {
7819      data = mergeClassData(childNode.data, data);
7820    }
7821  }
7822  // @ts-expect-error parentNode.parent not VNodeWithData
7823  while (isDef(parentNode = parentNode.parent)) {
7824    if (parentNode && parentNode.data) {
7825      data = mergeClassData(data, parentNode.data);
7826    }
7827  }
7828  return renderClass(data.staticClass, data.class);
7829}
7830function mergeClassData(child, parent) {
7831  return {
7832    staticClass: concat(child.staticClass, parent.staticClass),
7833    class: isDef(child.class) ? [child.class, parent.class] : parent.class
7834  };
7835}
7836function renderClass(staticClass, dynamicClass) {
7837  if (isDef(staticClass) || isDef(dynamicClass)) {
7838    return concat(staticClass, stringifyClass(dynamicClass));
7839  }
7840  /* istanbul ignore next */
7841  return '';
7842}
7843function concat(a, b) {
7844  return a ? b ? a + ' ' + b : a : b || '';
7845}
7846function stringifyClass(value) {
7847  if (Array.isArray(value)) {
7848    return stringifyArray(value);
7849  }
7850  if (isObject(value)) {
7851    return stringifyObject(value);
7852  }
7853  if (typeof value === 'string') {
7854    return value;
7855  }
7856  /* istanbul ignore next */
7857  return '';
7858}
7859function stringifyArray(value) {
7860  var res = '';
7861  var stringified;
7862  for (var i = 0, l = value.length; i < l; i++) {
7863    if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {
7864      if (res) res += ' ';
7865      res += stringified;
7866    }
7867  }
7868  return res;
7869}
7870function stringifyObject(value) {
7871  var res = '';
7872  for (var key in value) {
7873    if (value[key]) {
7874      if (res) res += ' ';
7875      res += key;
7876    }
7877  }
7878  return res;
7879}
7880var namespaceMap = {
7881  svg: 'http://www.w3.org/2000/svg',
7882  math: 'http://www.w3.org/1998/Math/MathML'
7883};
7884var isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' + 'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' + 'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' + 'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' + 's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' + 'embed,object,param,source,canvas,script,noscript,del,ins,' + 'caption,col,colgroup,table,thead,tbody,td,th,tr,' + 'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' + 'output,progress,select,textarea,' + 'details,dialog,menu,menuitem,summary,' + 'content,element,shadow,template,blockquote,iframe,tfoot');
7885// this map is intentionally selective, only covering SVG elements that may
7886// contain child elements.
7887var isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' + 'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' + 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true);
7888var isPreTag = function (tag) {
7889  return tag === 'pre';
7890};
7891var isReservedTag = function (tag) {
7892  return isHTMLTag(tag) || isSVG(tag);
7893};
7894function getTagNamespace(tag) {
7895  if (isSVG(tag)) {
7896    return 'svg';
7897  }
7898  // basic support for MathML
7899  // note it doesn't support other MathML elements being component roots
7900  if (tag === 'math') {
7901    return 'math';
7902  }
7903}
7904var unknownElementCache = Object.create(null);
7905function isUnknownElement(tag) {
7906  /* istanbul ignore if */
7907  if (!inBrowser) {
7908    return true;
7909  }
7910  if (isReservedTag(tag)) {
7911    return false;
7912  }
7913  tag = tag.toLowerCase();
7914  /* istanbul ignore if */
7915  if (unknownElementCache[tag] != null) {
7916    return unknownElementCache[tag];
7917  }
7918  var el = document.createElement(tag);
7919  if (tag.indexOf('-') > -1) {
7920    // http://stackoverflow.com/a/28210364/1070244
7921    return unknownElementCache[tag] = el.constructor === window.HTMLUnknownElement || el.constructor === window.HTMLElement;
7922  } else {
7923    return unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString());
7924  }
7925}
7926var isTextInputType = makeMap('text,number,password,search,email,tel,url');
7927
7928/**
7929 * Query an element selector if it's not an element already.
7930 */
7931function query(el) {
7932  if (typeof el === 'string') {
7933    var selected = document.querySelector(el);
7934    if (!selected) {
7935       true && warn$2('Cannot find element: ' + el);
7936      return document.createElement('div');
7937    }
7938    return selected;
7939  } else {
7940    return el;
7941  }
7942}
7943function createElement(tagName, vnode) {
7944  var elm = document.createElement(tagName);
7945  if (tagName !== 'select') {
7946    return elm;
7947  }
7948  // false or null will remove the attribute but undefined will not
7949  if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {
7950    elm.setAttribute('multiple', 'multiple');
7951  }
7952  return elm;
7953}
7954function createElementNS(namespace, tagName) {
7955  return document.createElementNS(namespaceMap[namespace], tagName);
7956}
7957function createTextNode(text) {
7958  return document.createTextNode(text);
7959}
7960function createComment(text) {
7961  return document.createComment(text);
7962}
7963function insertBefore(parentNode, newNode, referenceNode) {
7964  parentNode.insertBefore(newNode, referenceNode);
7965}
7966function removeChild(node, child) {
7967  node.removeChild(child);
7968}
7969function appendChild(node, child) {
7970  node.appendChild(child);
7971}
7972function parentNode(node) {
7973  return node.parentNode;
7974}
7975function nextSibling(node) {
7976  return node.nextSibling;
7977}
7978function tagName(node) {
7979  return node.tagName;
7980}
7981function setTextContent(node, text) {
7982  node.textContent = text;
7983}
7984function setStyleScope(node, scopeId) {
7985  node.setAttribute(scopeId, '');
7986}
7987var nodeOps = /*#__PURE__*/Object.freeze({
7988  __proto__: null,
7989  createElement: createElement,
7990  createElementNS: createElementNS,
7991  createTextNode: createTextNode,
7992  createComment: createComment,
7993  insertBefore: insertBefore,
7994  removeChild: removeChild,
7995  appendChild: appendChild,
7996  parentNode: parentNode,
7997  nextSibling: nextSibling,
7998  tagName: tagName,
7999  setTextContent: setTextContent,
8000  setStyleScope: setStyleScope
8001});
8002var ref = {
8003  create: function (_, vnode) {
8004    registerRef(vnode);
8005  },
8006  update: function (oldVnode, vnode) {
8007    if (oldVnode.data.ref !== vnode.data.ref) {
8008      registerRef(oldVnode, true);
8009      registerRef(vnode);
8010    }
8011  },
8012  destroy: function (vnode) {
8013    registerRef(vnode, true);
8014  }
8015};
8016function registerRef(vnode, isRemoval) {
8017  var ref = vnode.data.ref;
8018  if (!isDef(ref)) return;
8019  var vm = vnode.context;
8020  var refValue = vnode.componentInstance || vnode.elm;
8021  var value = isRemoval ? null : refValue;
8022  var $refsValue = isRemoval ? undefined : refValue;
8023  if (isFunction(ref)) {
8024    invokeWithErrorHandling(ref, vm, [value], vm, "template ref function");
8025    return;
8026  }
8027  var isFor = vnode.data.refInFor;
8028  var _isString = typeof ref === 'string' || typeof ref === 'number';
8029  var _isRef = isRef(ref);
8030  var refs = vm.$refs;
8031  if (_isString || _isRef) {
8032    if (isFor) {
8033      var existing = _isString ? refs[ref] : ref.value;
8034      if (isRemoval) {
8035        isArray(existing) && remove$2(existing, refValue);
8036      } else {
8037        if (!isArray(existing)) {
8038          if (_isString) {
8039            refs[ref] = [refValue];
8040            setSetupRef(vm, ref, refs[ref]);
8041          } else {
8042            ref.value = [refValue];
8043          }
8044        } else if (!existing.includes(refValue)) {
8045          existing.push(refValue);
8046        }
8047      }
8048    } else if (_isString) {
8049      if (isRemoval && refs[ref] !== refValue) {
8050        return;
8051      }
8052      refs[ref] = $refsValue;
8053      setSetupRef(vm, ref, value);
8054    } else if (_isRef) {
8055      if (isRemoval && ref.value !== refValue) {
8056        return;
8057      }
8058      ref.value = value;
8059    } else if (true) {
8060      warn$2("Invalid template ref type: ".concat(typeof ref));
8061    }
8062  }
8063}
8064function setSetupRef(_a, key, val) {
8065  var _setupState = _a._setupState;
8066  if (_setupState && hasOwn(_setupState, key)) {
8067    if (isRef(_setupState[key])) {
8068      _setupState[key].value = val;
8069    } else {
8070      _setupState[key] = val;
8071    }
8072  }
8073}
8074
8075/**
8076 * Virtual DOM patching algorithm based on Snabbdom by
8077 * Simon Friis Vindum (@paldepind)
8078 * Licensed under the MIT License
8079 * https://github.com/paldepind/snabbdom/blob/master/LICENSE
8080 *
8081 * modified by Evan You (@yyx990803)
8082 *
8083 * Not type-checking this because this file is perf-critical and the cost
8084 * of making flow understand it is not worth it.
8085 */
8086var emptyNode = new VNode('', {}, []);
8087var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];
8088function sameVnode(a, b) {
8089  return a.key === b.key && a.asyncFactory === b.asyncFactory && (a.tag === b.tag && a.isComment === b.isComment && isDef(a.data) === isDef(b.data) && sameInputType(a, b) || isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error));
8090}
8091function sameInputType(a, b) {
8092  if (a.tag !== 'input') return true;
8093  var i;
8094  var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;
8095  var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;
8096  return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB);
8097}
8098function createKeyToOldIdx(children, beginIdx, endIdx) {
8099  var i, key;
8100  var map = {};
8101  for (i = beginIdx; i <= endIdx; ++i) {
8102    key = children[i].key;
8103    if (isDef(key)) map[key] = i;
8104  }
8105  return map;
8106}
8107function createPatchFunction(backend) {
8108  var i, j;
8109  var cbs = {};
8110  var modules = backend.modules,
8111    nodeOps = backend.nodeOps;
8112  for (i = 0; i < hooks.length; ++i) {
8113    cbs[hooks[i]] = [];
8114    for (j = 0; j < modules.length; ++j) {
8115      if (isDef(modules[j][hooks[i]])) {
8116        cbs[hooks[i]].push(modules[j][hooks[i]]);
8117      }
8118    }
8119  }
8120  function emptyNodeAt(elm) {
8121    return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm);
8122  }
8123  function createRmCb(childElm, listeners) {
8124    function remove() {
8125      if (--remove.listeners === 0) {
8126        removeNode(childElm);
8127      }
8128    }
8129    remove.listeners = listeners;
8130    return remove;
8131  }
8132  function removeNode(el) {
8133    var parent = nodeOps.parentNode(el);
8134    // element may have already been removed due to v-html / v-text
8135    if (isDef(parent)) {
8136      nodeOps.removeChild(parent, el);
8137    }
8138  }
8139  function isUnknownElement(vnode, inVPre) {
8140    return !inVPre && !vnode.ns && !(config.ignoredElements.length && config.ignoredElements.some(function (ignore) {
8141      return isRegExp(ignore) ? ignore.test(vnode.tag) : ignore === vnode.tag;
8142    })) && config.isUnknownElement(vnode.tag);
8143  }
8144  var creatingElmInVPre = 0;
8145  function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) {
8146    if (isDef(vnode.elm) && isDef(ownerArray)) {
8147      // This vnode was used in a previous render!
8148      // now it's used as a new node, overwriting its elm would cause
8149      // potential patch errors down the road when it's used as an insertion
8150      // reference node. Instead, we clone the node on-demand before creating
8151      // associated DOM element for it.
8152      vnode = ownerArray[index] = cloneVNode(vnode);
8153    }
8154    vnode.isRootInsert = !nested; // for transition enter check
8155    if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {
8156      return;
8157    }
8158    var data = vnode.data;
8159    var children = vnode.children;
8160    var tag = vnode.tag;
8161    if (isDef(tag)) {
8162      if (true) {
8163        if (data && data.pre) {
8164          creatingElmInVPre++;
8165        }
8166        if (isUnknownElement(vnode, creatingElmInVPre)) {
8167          warn$2('Unknown custom element: <' + tag + '> - did you ' + 'register the component correctly? For recursive components, ' + 'make sure to provide the "name" option.', vnode.context);
8168        }
8169      }
8170      vnode.elm = vnode.ns ? nodeOps.createElementNS(vnode.ns, tag) : nodeOps.createElement(tag, vnode);
8171      setScope(vnode);
8172      createChildren(vnode, children, insertedVnodeQueue);
8173      if (isDef(data)) {
8174        invokeCreateHooks(vnode, insertedVnodeQueue);
8175      }
8176      insert(parentElm, vnode.elm, refElm);
8177      if ( true && data && data.pre) {
8178        creatingElmInVPre--;
8179      }
8180    } else if (isTrue(vnode.isComment)) {
8181      vnode.elm = nodeOps.createComment(vnode.text);
8182      insert(parentElm, vnode.elm, refElm);
8183    } else {
8184      vnode.elm = nodeOps.createTextNode(vnode.text);
8185      insert(parentElm, vnode.elm, refElm);
8186    }
8187  }
8188  function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
8189    var i = vnode.data;
8190    if (isDef(i)) {
8191      var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;
8192      if (isDef(i = i.hook) && isDef(i = i.init)) {
8193        i(vnode, false /* hydrating */);
8194      }
8195      // after calling the init hook, if the vnode is a child component
8196      // it should've created a child instance and mounted it. the child
8197      // component also has set the placeholder vnode's elm.
8198      // in that case we can just return the element and be done.
8199      if (isDef(vnode.componentInstance)) {
8200        initComponent(vnode, insertedVnodeQueue);
8201        insert(parentElm, vnode.elm, refElm);
8202        if (isTrue(isReactivated)) {
8203          reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
8204        }
8205        return true;
8206      }
8207    }
8208  }
8209  function initComponent(vnode, insertedVnodeQueue) {
8210    if (isDef(vnode.data.pendingInsert)) {
8211      insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);
8212      vnode.data.pendingInsert = null;
8213    }
8214    vnode.elm = vnode.componentInstance.$el;
8215    if (isPatchable(vnode)) {
8216      invokeCreateHooks(vnode, insertedVnodeQueue);
8217      setScope(vnode);
8218    } else {
8219      // empty component root.
8220      // skip all element-related modules except for ref (#3455)
8221      registerRef(vnode);
8222      // make sure to invoke the insert hook
8223      insertedVnodeQueue.push(vnode);
8224    }
8225  }
8226  function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
8227    var i;
8228    // hack for #4339: a reactivated component with inner transition
8229    // does not trigger because the inner node's created hooks are not called
8230    // again. It's not ideal to involve module-specific logic in here but
8231    // there doesn't seem to be a better way to do it.
8232    var innerNode = vnode;
8233    while (innerNode.componentInstance) {
8234      innerNode = innerNode.componentInstance._vnode;
8235      if (isDef(i = innerNode.data) && isDef(i = i.transition)) {
8236        for (i = 0; i < cbs.activate.length; ++i) {
8237          cbs.activate[i](emptyNode, innerNode);
8238        }
8239        insertedVnodeQueue.push(innerNode);
8240        break;
8241      }
8242    }
8243    // unlike a newly created component,
8244    // a reactivated keep-alive component doesn't insert itself
8245    insert(parentElm, vnode.elm, refElm);
8246  }
8247  function insert(parent, elm, ref) {
8248    if (isDef(parent)) {
8249      if (isDef(ref)) {
8250        if (nodeOps.parentNode(ref) === parent) {
8251          nodeOps.insertBefore(parent, elm, ref);
8252        }
8253      } else {
8254        nodeOps.appendChild(parent, elm);
8255      }
8256    }
8257  }
8258  function createChildren(vnode, children, insertedVnodeQueue) {
8259    if (isArray(children)) {
8260      if (true) {
8261        checkDuplicateKeys(children);
8262      }
8263      for (var i_1 = 0; i_1 < children.length; ++i_1) {
8264        createElm(children[i_1], insertedVnodeQueue, vnode.elm, null, true, children, i_1);
8265      }
8266    } else if (isPrimitive(vnode.text)) {
8267      nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));
8268    }
8269  }
8270  function isPatchable(vnode) {
8271    while (vnode.componentInstance) {
8272      vnode = vnode.componentInstance._vnode;
8273    }
8274    return isDef(vnode.tag);
8275  }
8276  function invokeCreateHooks(vnode, insertedVnodeQueue) {
8277    for (var i_2 = 0; i_2 < cbs.create.length; ++i_2) {
8278      cbs.create[i_2](emptyNode, vnode);
8279    }
8280    i = vnode.data.hook; // Reuse variable
8281    if (isDef(i)) {
8282      if (isDef(i.create)) i.create(emptyNode, vnode);
8283      if (isDef(i.insert)) insertedVnodeQueue.push(vnode);
8284    }
8285  }
8286  // set scope id attribute for scoped CSS.
8287  // this is implemented as a special case to avoid the overhead
8288  // of going through the normal attribute patching process.
8289  function setScope(vnode) {
8290    var i;
8291    if (isDef(i = vnode.fnScopeId)) {
8292      nodeOps.setStyleScope(vnode.elm, i);
8293    } else {
8294      var ancestor = vnode;
8295      while (ancestor) {
8296        if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {
8297          nodeOps.setStyleScope(vnode.elm, i);
8298        }
8299        ancestor = ancestor.parent;
8300      }
8301    }
8302    // for slot content they should also get the scopeId from the host instance.
8303    if (isDef(i = activeInstance) && i !== vnode.context && i !== vnode.fnContext && isDef(i = i.$options._scopeId)) {
8304      nodeOps.setStyleScope(vnode.elm, i);
8305    }
8306  }
8307  function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {
8308    for (; startIdx <= endIdx; ++startIdx) {
8309      createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);
8310    }
8311  }
8312  function invokeDestroyHook(vnode) {
8313    var i, j;
8314    var data = vnode.data;
8315    if (isDef(data)) {
8316      if (isDef(i = data.hook) && isDef(i = i.destroy)) i(vnode);
8317      for (i = 0; i < cbs.destroy.length; ++i) cbs.destroy[i](vnode);
8318    }
8319    if (isDef(i = vnode.children)) {
8320      for (j = 0; j < vnode.children.length; ++j) {
8321        invokeDestroyHook(vnode.children[j]);
8322      }
8323    }
8324  }
8325  function removeVnodes(vnodes, startIdx, endIdx) {
8326    for (; startIdx <= endIdx; ++startIdx) {
8327      var ch = vnodes[startIdx];
8328      if (isDef(ch)) {
8329        if (isDef(ch.tag)) {
8330          removeAndInvokeRemoveHook(ch);
8331          invokeDestroyHook(ch);
8332        } else {
8333          // Text node
8334          removeNode(ch.elm);
8335        }
8336      }
8337    }
8338  }
8339  function removeAndInvokeRemoveHook(vnode, rm) {
8340    if (isDef(rm) || isDef(vnode.data)) {
8341      var i_3;
8342      var listeners = cbs.remove.length + 1;
8343      if (isDef(rm)) {
8344        // we have a recursively passed down rm callback
8345        // increase the listeners count
8346        rm.listeners += listeners;
8347      } else {
8348        // directly removing
8349        rm = createRmCb(vnode.elm, listeners);
8350      }
8351      // recursively invoke hooks on child component root node
8352      if (isDef(i_3 = vnode.componentInstance) && isDef(i_3 = i_3._vnode) && isDef(i_3.data)) {
8353        removeAndInvokeRemoveHook(i_3, rm);
8354      }
8355      for (i_3 = 0; i_3 < cbs.remove.length; ++i_3) {
8356        cbs.remove[i_3](vnode, rm);
8357      }
8358      if (isDef(i_3 = vnode.data.hook) && isDef(i_3 = i_3.remove)) {
8359        i_3(vnode, rm);
8360      } else {
8361        rm();
8362      }
8363    } else {
8364      removeNode(vnode.elm);
8365    }
8366  }
8367  function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {
8368    var oldStartIdx = 0;
8369    var newStartIdx = 0;
8370    var oldEndIdx = oldCh.length - 1;
8371    var oldStartVnode = oldCh[0];
8372    var oldEndVnode = oldCh[oldEndIdx];
8373    var newEndIdx = newCh.length - 1;
8374    var newStartVnode = newCh[0];
8375    var newEndVnode = newCh[newEndIdx];
8376    var oldKeyToIdx, idxInOld, vnodeToMove, refElm;
8377    // removeOnly is a special flag used only by <transition-group>
8378    // to ensure removed elements stay in correct relative positions
8379    // during leaving transitions
8380    var canMove = !removeOnly;
8381    if (true) {
8382      checkDuplicateKeys(newCh);
8383    }
8384    while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
8385      if (isUndef(oldStartVnode)) {
8386        oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left
8387      } else if (isUndef(oldEndVnode)) {
8388        oldEndVnode = oldCh[--oldEndIdx];
8389      } else if (sameVnode(oldStartVnode, newStartVnode)) {
8390        patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
8391        oldStartVnode = oldCh[++oldStartIdx];
8392        newStartVnode = newCh[++newStartIdx];
8393      } else if (sameVnode(oldEndVnode, newEndVnode)) {
8394        patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
8395        oldEndVnode = oldCh[--oldEndIdx];
8396        newEndVnode = newCh[--newEndIdx];
8397      } else if (sameVnode(oldStartVnode, newEndVnode)) {
8398        // Vnode moved right
8399        patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
8400        canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));
8401        oldStartVnode = oldCh[++oldStartIdx];
8402        newEndVnode = newCh[--newEndIdx];
8403      } else if (sameVnode(oldEndVnode, newStartVnode)) {
8404        // Vnode moved left
8405        patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
8406        canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);
8407        oldEndVnode = oldCh[--oldEndIdx];
8408        newStartVnode = newCh[++newStartIdx];
8409      } else {
8410        if (isUndef(oldKeyToIdx)) oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);
8411        idxInOld = isDef(newStartVnode.key) ? oldKeyToIdx[newStartVnode.key] : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);
8412        if (isUndef(idxInOld)) {
8413          // New element
8414          createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
8415        } else {
8416          vnodeToMove = oldCh[idxInOld];
8417          if (sameVnode(vnodeToMove, newStartVnode)) {
8418            patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
8419            oldCh[idxInOld] = undefined;
8420            canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);
8421          } else {
8422            // same key but different element. treat as new element
8423            createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
8424          }
8425        }
8426        newStartVnode = newCh[++newStartIdx];
8427      }
8428    }
8429    if (oldStartIdx > oldEndIdx) {
8430      refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
8431      addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);
8432    } else if (newStartIdx > newEndIdx) {
8433      removeVnodes(oldCh, oldStartIdx, oldEndIdx);
8434    }
8435  }
8436  function checkDuplicateKeys(children) {
8437    var seenKeys = {};
8438    for (var i_4 = 0; i_4 < children.length; i_4++) {
8439      var vnode = children[i_4];
8440      var key = vnode.key;
8441      if (isDef(key)) {
8442        if (seenKeys[key]) {
8443          warn$2("Duplicate keys detected: '".concat(key, "'. This may cause an update error."), vnode.context);
8444        } else {
8445          seenKeys[key] = true;
8446        }
8447      }
8448    }
8449  }
8450  function findIdxInOld(node, oldCh, start, end) {
8451    for (var i_5 = start; i_5 < end; i_5++) {
8452      var c = oldCh[i_5];
8453      if (isDef(c) && sameVnode(node, c)) return i_5;
8454    }
8455  }
8456  function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) {
8457    if (oldVnode === vnode) {
8458      return;
8459    }
8460    if (isDef(vnode.elm) && isDef(ownerArray)) {
8461      // clone reused vnode
8462      vnode = ownerArray[index] = cloneVNode(vnode);
8463    }
8464    var elm = vnode.elm = oldVnode.elm;
8465    if (isTrue(oldVnode.isAsyncPlaceholder)) {
8466      if (isDef(vnode.asyncFactory.resolved)) {
8467        hydrate(oldVnode.elm, vnode, insertedVnodeQueue);
8468      } else {
8469        vnode.isAsyncPlaceholder = true;
8470      }
8471      return;
8472    }
8473    // reuse element for static trees.
8474    // note we only do this if the vnode is cloned -
8475    // if the new node is not cloned it means the render functions have been
8476    // reset by the hot-reload-api and we need to do a proper re-render.
8477    if (isTrue(vnode.isStatic) && isTrue(oldVnode.isStatic) && vnode.key === oldVnode.key && (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) {
8478      vnode.componentInstance = oldVnode.componentInstance;
8479      return;
8480    }
8481    var i;
8482    var data = vnode.data;
8483    if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {
8484      i(oldVnode, vnode);
8485    }
8486    var oldCh = oldVnode.children;
8487    var ch = vnode.children;
8488    if (isDef(data) && isPatchable(vnode)) {
8489      for (i = 0; i < cbs.update.length; ++i) cbs.update[i](oldVnode, vnode);
8490      if (isDef(i = data.hook) && isDef(i = i.update)) i(oldVnode, vnode);
8491    }
8492    if (isUndef(vnode.text)) {
8493      if (isDef(oldCh) && isDef(ch)) {
8494        if (oldCh !== ch) updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly);
8495      } else if (isDef(ch)) {
8496        if (true) {
8497          checkDuplicateKeys(ch);
8498        }
8499        if (isDef(oldVnode.text)) nodeOps.setTextContent(elm, '');
8500        addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);
8501      } else if (isDef(oldCh)) {
8502        removeVnodes(oldCh, 0, oldCh.length - 1);
8503      } else if (isDef(oldVnode.text)) {
8504        nodeOps.setTextContent(elm, '');
8505      }
8506    } else if (oldVnode.text !== vnode.text) {
8507      nodeOps.setTextContent(elm, vnode.text);
8508    }
8509    if (isDef(data)) {
8510      if (isDef(i = data.hook) && isDef(i = i.postpatch)) i(oldVnode, vnode);
8511    }
8512  }
8513  function invokeInsertHook(vnode, queue, initial) {
8514    // delay insert hooks for component root nodes, invoke them after the
8515    // element is really inserted
8516    if (isTrue(initial) && isDef(vnode.parent)) {
8517      vnode.parent.data.pendingInsert = queue;
8518    } else {
8519      for (var i_6 = 0; i_6 < queue.length; ++i_6) {
8520        queue[i_6].data.hook.insert(queue[i_6]);
8521      }
8522    }
8523  }
8524  var hydrationBailed = false;
8525  // list of modules that can skip create hook during hydration because they
8526  // are already rendered on the client or has no need for initialization
8527  // Note: style is excluded because it relies on initial clone for future
8528  // deep updates (#7063).
8529  var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');
8530  // Note: this is a browser-only function so we can assume elms are DOM nodes.
8531  function hydrate(elm, vnode, insertedVnodeQueue, inVPre) {
8532    var i;
8533    var tag = vnode.tag,
8534      data = vnode.data,
8535      children = vnode.children;
8536    inVPre = inVPre || data && data.pre;
8537    vnode.elm = elm;
8538    if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {
8539      vnode.isAsyncPlaceholder = true;
8540      return true;
8541    }
8542    // assert node match
8543    if (true) {
8544      if (!assertNodeMatch(elm, vnode, inVPre)) {
8545        return false;
8546      }
8547    }
8548    if (isDef(data)) {
8549      if (isDef(i = data.hook) && isDef(i = i.init)) i(vnode, true /* hydrating */);
8550      if (isDef(i = vnode.componentInstance)) {
8551        // child component. it should have hydrated its own tree.
8552        initComponent(vnode, insertedVnodeQueue);
8553        return true;
8554      }
8555    }
8556    if (isDef(tag)) {
8557      if (isDef(children)) {
8558        // empty element, allow client to pick up and populate children
8559        if (!elm.hasChildNodes()) {
8560          createChildren(vnode, children, insertedVnodeQueue);
8561        } else {
8562          // v-html and domProps: innerHTML
8563          if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {
8564            if (i !== elm.innerHTML) {
8565              /* istanbul ignore if */
8566              if ( true && typeof console !== 'undefined' && !hydrationBailed) {
8567                hydrationBailed = true;
8568                console.warn('Parent: ', elm);
8569                console.warn('server innerHTML: ', i);
8570                console.warn('client innerHTML: ', elm.innerHTML);
8571              }
8572              return false;
8573            }
8574          } else {
8575            // iterate and compare children lists
8576            var childrenMatch = true;
8577            var childNode = elm.firstChild;
8578            for (var i_7 = 0; i_7 < children.length; i_7++) {
8579              if (!childNode || !hydrate(childNode, children[i_7], insertedVnodeQueue, inVPre)) {
8580                childrenMatch = false;
8581                break;
8582              }
8583              childNode = childNode.nextSibling;
8584            }
8585            // if childNode is not null, it means the actual childNodes list is
8586            // longer than the virtual children list.
8587            if (!childrenMatch || childNode) {
8588              /* istanbul ignore if */
8589              if ( true && typeof console !== 'undefined' && !hydrationBailed) {
8590                hydrationBailed = true;
8591                console.warn('Parent: ', elm);
8592                console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);
8593              }
8594              return false;
8595            }
8596          }
8597        }
8598      }
8599      if (isDef(data)) {
8600        var fullInvoke = false;
8601        for (var key in data) {
8602          if (!isRenderedModule(key)) {
8603            fullInvoke = true;
8604            invokeCreateHooks(vnode, insertedVnodeQueue);
8605            break;
8606          }
8607        }
8608        if (!fullInvoke && data['class']) {
8609          // ensure collecting deps for deep class bindings for future updates
8610          traverse(data['class']);
8611        }
8612      }
8613    } else if (elm.data !== vnode.text) {
8614      elm.data = vnode.text;
8615    }
8616    return true;
8617  }
8618  function assertNodeMatch(node, vnode, inVPre) {
8619    if (isDef(vnode.tag)) {
8620      return vnode.tag.indexOf('vue-component') === 0 || !isUnknownElement(vnode, inVPre) && vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase());
8621    } else {
8622      return node.nodeType === (vnode.isComment ? 8 : 3);
8623    }
8624  }
8625  return function patch(oldVnode, vnode, hydrating, removeOnly) {
8626    if (isUndef(vnode)) {
8627      if (isDef(oldVnode)) invokeDestroyHook(oldVnode);
8628      return;
8629    }
8630    var isInitialPatch = false;
8631    var insertedVnodeQueue = [];
8632    if (isUndef(oldVnode)) {
8633      // empty mount (likely as component), create new root element
8634      isInitialPatch = true;
8635      createElm(vnode, insertedVnodeQueue);
8636    } else {
8637      var isRealElement = isDef(oldVnode.nodeType);
8638      if (!isRealElement && sameVnode(oldVnode, vnode)) {
8639        // patch existing root node
8640        patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);
8641      } else {
8642        if (isRealElement) {
8643          // mounting to a real element
8644          // check if this is server-rendered content and if we can perform
8645          // a successful hydration.
8646          if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {
8647            oldVnode.removeAttribute(SSR_ATTR);
8648            hydrating = true;
8649          }
8650          if (isTrue(hydrating)) {
8651            if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
8652              invokeInsertHook(vnode, insertedVnodeQueue, true);
8653              return oldVnode;
8654            } else if (true) {
8655              warn$2('The client-side rendered virtual DOM tree is not matching ' + 'server-rendered content. This is likely caused by incorrect ' + 'HTML markup, for example nesting block-level elements inside ' + '<p>, or missing <tbody>. Bailing hydration and performing ' + 'full client-side render.');
8656            }
8657          }
8658          // either not server-rendered, or hydration failed.
8659          // create an empty node and replace it
8660          oldVnode = emptyNodeAt(oldVnode);
8661        }
8662        // replacing existing element
8663        var oldElm = oldVnode.elm;
8664        var parentElm = nodeOps.parentNode(oldElm);
8665        // create new node
8666        createElm(vnode, insertedVnodeQueue,
8667        // extremely rare edge case: do not insert if old element is in a
8668        // leaving transition. Only happens when combining transition +
8669        // keep-alive + HOCs. (#4590)
8670        oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm));
8671        // update parent placeholder node element, recursively
8672        if (isDef(vnode.parent)) {
8673          var ancestor = vnode.parent;
8674          var patchable = isPatchable(vnode);
8675          while (ancestor) {
8676            for (var i_8 = 0; i_8 < cbs.destroy.length; ++i_8) {
8677              cbs.destroy[i_8](ancestor);
8678            }
8679            ancestor.elm = vnode.elm;
8680            if (patchable) {
8681              for (var i_9 = 0; i_9 < cbs.create.length; ++i_9) {
8682                cbs.create[i_9](emptyNode, ancestor);
8683              }
8684              // #6513
8685              // invoke insert hooks that may have been merged by create hooks.
8686              // e.g. for directives that uses the "inserted" hook.
8687              var insert_1 = ancestor.data.hook.insert;
8688              if (insert_1.merged) {
8689                // start at index 1 to avoid re-invoking component mounted hook
8690                for (var i_10 = 1; i_10 < insert_1.fns.length; i_10++) {
8691                  insert_1.fns[i_10]();
8692                }
8693              }
8694            } else {
8695              registerRef(ancestor);
8696            }
8697            ancestor = ancestor.parent;
8698          }
8699        }
8700        // destroy old node
8701        if (isDef(parentElm)) {
8702          removeVnodes([oldVnode], 0, 0);
8703        } else if (isDef(oldVnode.tag)) {
8704          invokeDestroyHook(oldVnode);
8705        }
8706      }
8707    }
8708    invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);
8709    return vnode.elm;
8710  };
8711}
8712var directives$1 = {
8713  create: updateDirectives,
8714  update: updateDirectives,
8715  destroy: function unbindDirectives(vnode) {
8716    // @ts-expect-error emptyNode is not VNodeWithData
8717    updateDirectives(vnode, emptyNode);
8718  }
8719};
8720function updateDirectives(oldVnode, vnode) {
8721  if (oldVnode.data.directives || vnode.data.directives) {
8722    _update(oldVnode, vnode);
8723  }
8724}
8725function _update(oldVnode, vnode) {
8726  var isCreate = oldVnode === emptyNode;
8727  var isDestroy = vnode === emptyNode;
8728  var oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context);
8729  var newDirs = normalizeDirectives(vnode.data.directives, vnode.context);
8730  var dirsWithInsert = [];
8731  var dirsWithPostpatch = [];
8732  var key, oldDir, dir;
8733  for (key in newDirs) {
8734    oldDir = oldDirs[key];
8735    dir = newDirs[key];
8736    if (!oldDir) {
8737      // new directive, bind
8738      callHook(dir, 'bind', vnode, oldVnode);
8739      if (dir.def && dir.def.inserted) {
8740        dirsWithInsert.push(dir);
8741      }
8742    } else {
8743      // existing directive, update
8744      dir.oldValue = oldDir.value;
8745      dir.oldArg = oldDir.arg;
8746      callHook(dir, 'update', vnode, oldVnode);
8747      if (dir.def && dir.def.componentUpdated) {
8748        dirsWithPostpatch.push(dir);
8749      }
8750    }
8751  }
8752  if (dirsWithInsert.length) {
8753    var callInsert = function () {
8754      for (var i = 0; i < dirsWithInsert.length; i++) {
8755        callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode);
8756      }
8757    };
8758    if (isCreate) {
8759      mergeVNodeHook(vnode, 'insert', callInsert);
8760    } else {
8761      callInsert();
8762    }
8763  }
8764  if (dirsWithPostpatch.length) {
8765    mergeVNodeHook(vnode, 'postpatch', function () {
8766      for (var i = 0; i < dirsWithPostpatch.length; i++) {
8767        callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);
8768      }
8769    });
8770  }
8771  if (!isCreate) {
8772    for (key in oldDirs) {
8773      if (!newDirs[key]) {
8774        // no longer present, unbind
8775        callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);
8776      }
8777    }
8778  }
8779}
8780var emptyModifiers = Object.create(null);
8781function normalizeDirectives(dirs, vm) {
8782  var res = Object.create(null);
8783  if (!dirs) {
8784    // $flow-disable-line
8785    return res;
8786  }
8787  var i, dir;
8788  for (i = 0; i < dirs.length; i++) {
8789    dir = dirs[i];
8790    if (!dir.modifiers) {
8791      // $flow-disable-line
8792      dir.modifiers = emptyModifiers;
8793    }
8794    res[getRawDirName(dir)] = dir;
8795    if (vm._setupState && vm._setupState.__sfc) {
8796      var setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name);
8797      if (typeof setupDef === 'function') {
8798        dir.def = {
8799          bind: setupDef,
8800          update: setupDef
8801        };
8802      } else {
8803        dir.def = setupDef;
8804      }
8805    }
8806    dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true);
8807  }
8808  // $flow-disable-line
8809  return res;
8810}
8811function getRawDirName(dir) {
8812  return dir.rawName || "".concat(dir.name, ".").concat(Object.keys(dir.modifiers || {}).join('.'));
8813}
8814function callHook(dir, hook, vnode, oldVnode, isDestroy) {
8815  var fn = dir.def && dir.def[hook];
8816  if (fn) {
8817    try {
8818      fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
8819    } catch (e) {
8820      handleError(e, vnode.context, "directive ".concat(dir.name, " ").concat(hook, " hook"));
8821    }
8822  }
8823}
8824var baseModules = [ref, directives$1];
8825function updateAttrs(oldVnode, vnode) {
8826  var opts = vnode.componentOptions;
8827  if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {
8828    return;
8829  }
8830  if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
8831    return;
8832  }
8833  var key, cur, old;
8834  var elm = vnode.elm;
8835  var oldAttrs = oldVnode.data.attrs || {};
8836  var attrs = vnode.data.attrs || {};
8837  // clone observed objects, as the user probably wants to mutate it
8838  if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) {
8839    attrs = vnode.data.attrs = extend({}, attrs);
8840  }
8841  for (key in attrs) {
8842    cur = attrs[key];
8843    old = oldAttrs[key];
8844    if (old !== cur) {
8845      setAttr(elm, key, cur, vnode.data.pre);
8846    }
8847  }
8848  // #4391: in IE9, setting type can reset value for input[type=radio]
8849  // #6666: IE/Edge forces progress value down to 1 before setting a max
8850  /* istanbul ignore if */
8851  if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {
8852    setAttr(elm, 'value', attrs.value);
8853  }
8854  for (key in oldAttrs) {
8855    if (isUndef(attrs[key])) {
8856      if (isXlink(key)) {
8857        elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
8858      } else if (!isEnumeratedAttr(key)) {
8859        elm.removeAttribute(key);
8860      }
8861    }
8862  }
8863}
8864function setAttr(el, key, value, isInPre) {
8865  if (isInPre || el.tagName.indexOf('-') > -1) {
8866    baseSetAttr(el, key, value);
8867  } else if (isBooleanAttr(key)) {
8868    // set attribute for blank value
8869    // e.g. <option disabled>Select one</option>
8870    if (isFalsyAttrValue(value)) {
8871      el.removeAttribute(key);
8872    } else {
8873      // technically allowfullscreen is a boolean attribute for <iframe>,
8874      // but Flash expects a value of "true" when used on <embed> tag
8875      value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key;
8876      el.setAttribute(key, value);
8877    }
8878  } else if (isEnumeratedAttr(key)) {
8879    el.setAttribute(key, convertEnumeratedValue(key, value));
8880  } else if (isXlink(key)) {
8881    if (isFalsyAttrValue(value)) {
8882      el.removeAttributeNS(xlinkNS, getXlinkProp(key));
8883    } else {
8884      el.setAttributeNS(xlinkNS, key, value);
8885    }
8886  } else {
8887    baseSetAttr(el, key, value);
8888  }
8889}
8890function baseSetAttr(el, key, value) {
8891  if (isFalsyAttrValue(value)) {
8892    el.removeAttribute(key);
8893  } else {
8894    // #7138: IE10 & 11 fires input event when setting placeholder on
8895    // <textarea>... block the first input event and remove the blocker
8896    // immediately.
8897    /* istanbul ignore if */
8898    if (isIE && !isIE9 && el.tagName === 'TEXTAREA' && key === 'placeholder' && value !== '' && !el.__ieph) {
8899      var blocker_1 = function (e) {
8900        e.stopImmediatePropagation();
8901        el.removeEventListener('input', blocker_1);
8902      };
8903      el.addEventListener('input', blocker_1);
8904      // $flow-disable-line
8905      el.__ieph = true; /* IE placeholder patched */
8906    }
8907    el.setAttribute(key, value);
8908  }
8909}
8910var attrs = {
8911  create: updateAttrs,
8912  update: updateAttrs
8913};
8914function updateClass(oldVnode, vnode) {
8915  var el = vnode.elm;
8916  var data = vnode.data;
8917  var oldData = oldVnode.data;
8918  if (isUndef(data.staticClass) && isUndef(data.class) && (isUndef(oldData) || isUndef(oldData.staticClass) && isUndef(oldData.class))) {
8919    return;
8920  }
8921  var cls = genClassForVnode(vnode);
8922  // handle transition classes
8923  var transitionClass = el._transitionClasses;
8924  if (isDef(transitionClass)) {
8925    cls = concat(cls, stringifyClass(transitionClass));
8926  }
8927  // set the class
8928  if (cls !== el._prevClass) {
8929    el.setAttribute('class', cls);
8930    el._prevClass = cls;
8931  }
8932}
8933var klass$1 = {
8934  create: updateClass,
8935  update: updateClass
8936};
8937var validDivisionCharRE = /[\w).+\-_$\]]/;
8938function parseFilters(exp) {
8939  var inSingle = false;
8940  var inDouble = false;
8941  var inTemplateString = false;
8942  var inRegex = false;
8943  var curly = 0;
8944  var square = 0;
8945  var paren = 0;
8946  var lastFilterIndex = 0;
8947  var c, prev, i, expression, filters;
8948  for (i = 0; i < exp.length; i++) {
8949    prev = c;
8950    c = exp.charCodeAt(i);
8951    if (inSingle) {
8952      if (c === 0x27 && prev !== 0x5c) inSingle = false;
8953    } else if (inDouble) {
8954      if (c === 0x22 && prev !== 0x5c) inDouble = false;
8955    } else if (inTemplateString) {
8956      if (c === 0x60 && prev !== 0x5c) inTemplateString = false;
8957    } else if (inRegex) {
8958      if (c === 0x2f && prev !== 0x5c) inRegex = false;
8959    } else if (c === 0x7c &&
8960    // pipe
8961    exp.charCodeAt(i + 1) !== 0x7c && exp.charCodeAt(i - 1) !== 0x7c && !curly && !square && !paren) {
8962      if (expression === undefined) {
8963        // first filter, end of expression
8964        lastFilterIndex = i + 1;
8965        expression = exp.slice(0, i).trim();
8966      } else {
8967        pushFilter();
8968      }
8969    } else {
8970      switch (c) {
8971        case 0x22:
8972          inDouble = true;
8973          break;
8974        // "
8975        case 0x27:
8976          inSingle = true;
8977          break;
8978        // '
8979        case 0x60:
8980          inTemplateString = true;
8981          break;
8982        // `
8983        case 0x28:
8984          paren++;
8985          break;
8986        // (
8987        case 0x29:
8988          paren--;
8989          break;
8990        // )
8991        case 0x5b:
8992          square++;
8993          break;
8994        // [
8995        case 0x5d:
8996          square--;
8997          break;
8998        // ]
8999        case 0x7b:
9000          curly++;
9001          break;
9002        // {
9003        case 0x7d:
9004          curly--;
9005          break;
9006        // }
9007      }
9008      if (c === 0x2f) {
9009        // /
9010        var j = i - 1;
9011        var p
9012        // find first non-whitespace prev char
9013        = void 0;
9014        // find first non-whitespace prev char
9015        for (; j >= 0; j--) {
9016          p = exp.charAt(j);
9017          if (p !== ' ') break;
9018        }
9019        if (!p || !validDivisionCharRE.test(p)) {
9020          inRegex = true;
9021        }
9022      }
9023    }
9024  }
9025  if (expression === undefined) {
9026    expression = exp.slice(0, i).trim();
9027  } else if (lastFilterIndex !== 0) {
9028    pushFilter();
9029  }
9030  function pushFilter() {
9031    (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());
9032    lastFilterIndex = i + 1;
9033  }
9034  if (filters) {
9035    for (i = 0; i < filters.length; i++) {
9036      expression = wrapFilter(expression, filters[i]);
9037    }
9038  }
9039  return expression;
9040}
9041function wrapFilter(exp, filter) {
9042  var i = filter.indexOf('(');
9043  if (i < 0) {
9044    // _f: resolveFilter
9045    return "_f(\"".concat(filter, "\")(").concat(exp, ")");
9046  } else {
9047    var name_1 = filter.slice(0, i);
9048    var args = filter.slice(i + 1);
9049    return "_f(\"".concat(name_1, "\")(").concat(exp).concat(args !== ')' ? ',' + args : args);
9050  }
9051}
9052
9053/* eslint-disable no-unused-vars */
9054function baseWarn(msg, range) {
9055  console.error("[Vue compiler]: ".concat(msg));
9056}
9057/* eslint-enable no-unused-vars */
9058function pluckModuleFunction(modules, key) {
9059  return modules ? modules.map(function (m) {
9060    return m[key];
9061  }).filter(function (_) {
9062    return _;
9063  }) : [];
9064}
9065function addProp(el, name, value, range, dynamic) {
9066  (el.props || (el.props = [])).push(rangeSetItem({
9067    name: name,
9068    value: value,
9069    dynamic: dynamic
9070  }, range));
9071  el.plain = false;
9072}
9073function addAttr(el, name, value, range, dynamic) {
9074  var attrs = dynamic ? el.dynamicAttrs || (el.dynamicAttrs = []) : el.attrs || (el.attrs = []);
9075  attrs.push(rangeSetItem({
9076    name: name,
9077    value: value,
9078    dynamic: dynamic
9079  }, range));
9080  el.plain = false;
9081}
9082// add a raw attr (use this in preTransforms)
9083function addRawAttr(el, name, value, range) {
9084  el.attrsMap[name] = value;
9085  el.attrsList.push(rangeSetItem({
9086    name: name,
9087    value: value
9088  }, range));
9089}
9090function addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) {
9091  (el.directives || (el.directives = [])).push(rangeSetItem({
9092    name: name,
9093    rawName: rawName,
9094    value: value,
9095    arg: arg,
9096    isDynamicArg: isDynamicArg,
9097    modifiers: modifiers
9098  }, range));
9099  el.plain = false;
9100}
9101function prependModifierMarker(symbol, name, dynamic) {
9102  return dynamic ? "_p(".concat(name, ",\"").concat(symbol, "\")") : symbol + name; // mark the event as captured
9103}
9104function addHandler(el, name, value, modifiers, important, warn, range, dynamic) {
9105  modifiers = modifiers || emptyObject;
9106  // warn prevent and passive modifier
9107  /* istanbul ignore if */
9108  if ( true && warn && modifiers.prevent && modifiers.passive) {
9109    warn("passive and prevent can't be used together. " + "Passive handler can't prevent default event.", range);
9110  }
9111  // normalize click.right and click.middle since they don't actually fire
9112  // this is technically browser-specific, but at least for now browsers are
9113  // the only target envs that have right/middle clicks.
9114  if (modifiers.right) {
9115    if (dynamic) {
9116      name = "(".concat(name, ")==='click'?'contextmenu':(").concat(name, ")");
9117    } else if (name === 'click') {
9118      name = 'contextmenu';
9119      delete modifiers.right;
9120    }
9121  } else if (modifiers.middle) {
9122    if (dynamic) {
9123      name = "(".concat(name, ")==='click'?'mouseup':(").concat(name, ")");
9124    } else if (name === 'click') {
9125      name = 'mouseup';
9126    }
9127  }
9128  // check capture modifier
9129  if (modifiers.capture) {
9130    delete modifiers.capture;
9131    name = prependModifierMarker('!', name, dynamic);
9132  }
9133  if (modifiers.once) {
9134    delete modifiers.once;
9135    name = prependModifierMarker('~', name, dynamic);
9136  }
9137  /* istanbul ignore if */
9138  if (modifiers.passive) {
9139    delete modifiers.passive;
9140    name = prependModifierMarker('&', name, dynamic);
9141  }
9142  var events;
9143  if (modifiers.native) {
9144    delete modifiers.native;
9145    events = el.nativeEvents || (el.nativeEvents = {});
9146  } else {
9147    events = el.events || (el.events = {});
9148  }
9149  var newHandler = rangeSetItem({
9150    value: value.trim(),
9151    dynamic: dynamic
9152  }, range);
9153  if (modifiers !== emptyObject) {
9154    newHandler.modifiers = modifiers;
9155  }
9156  var handlers = events[name];
9157  /* istanbul ignore if */
9158  if (Array.isArray(handlers)) {
9159    important ? handlers.unshift(newHandler) : handlers.push(newHandler);
9160  } else if (handlers) {
9161    events[name] = important ? [newHandler, handlers] : [handlers, newHandler];
9162  } else {
9163    events[name] = newHandler;
9164  }
9165  el.plain = false;
9166}
9167function getRawBindingAttr(el, name) {
9168  return el.rawAttrsMap[':' + name] || el.rawAttrsMap['v-bind:' + name] || el.rawAttrsMap[name];
9169}
9170function getBindingAttr(el, name, getStatic) {
9171  var dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name);
9172  if (dynamicValue != null) {
9173    return parseFilters(dynamicValue);
9174  } else if (getStatic !== false) {
9175    var staticValue = getAndRemoveAttr(el, name);
9176    if (staticValue != null) {
9177      return JSON.stringify(staticValue);
9178    }
9179  }
9180}
9181// note: this only removes the attr from the Array (attrsList) so that it
9182// doesn't get processed by processAttrs.
9183// By default it does NOT remove it from the map (attrsMap) because the map is
9184// needed during codegen.
9185function getAndRemoveAttr(el, name, removeFromMap) {
9186  var val;
9187  if ((val = el.attrsMap[name]) != null) {
9188    var list = el.attrsList;
9189    for (var i = 0, l = list.length; i < l; i++) {
9190      if (list[i].name === name) {
9191        list.splice(i, 1);
9192        break;
9193      }
9194    }
9195  }
9196  if (removeFromMap) {
9197    delete el.attrsMap[name];
9198  }
9199  return val;
9200}
9201function getAndRemoveAttrByRegex(el, name) {
9202  var list = el.attrsList;
9203  for (var i = 0, l = list.length; i < l; i++) {
9204    var attr = list[i];
9205    if (name.test(attr.name)) {
9206      list.splice(i, 1);
9207      return attr;
9208    }
9209  }
9210}
9211function rangeSetItem(item, range) {
9212  if (range) {
9213    if (range.start != null) {
9214      item.start = range.start;
9215    }
9216    if (range.end != null) {
9217      item.end = range.end;
9218    }
9219  }
9220  return item;
9221}
9222
9223/**
9224 * Cross-platform code generation for component v-model
9225 */
9226function genComponentModel(el, value, modifiers) {
9227  var _a = modifiers || {},
9228    number = _a.number,
9229    trim = _a.trim;
9230  var baseValueExpression = '$$v';
9231  var valueExpression = baseValueExpression;
9232  if (trim) {
9233    valueExpression = "(typeof ".concat(baseValueExpression, " === 'string'") + "? ".concat(baseValueExpression, ".trim()") + ": ".concat(baseValueExpression, ")");
9234  }
9235  if (number) {
9236    valueExpression = "_n(".concat(valueExpression, ")");
9237  }
9238  var assignment = genAssignmentCode(value, valueExpression);
9239  el.model = {
9240    value: "(".concat(value, ")"),
9241    expression: JSON.stringify(value),
9242    callback: "function (".concat(baseValueExpression, ") {").concat(assignment, "}")
9243  };
9244}
9245/**
9246 * Cross-platform codegen helper for generating v-model value assignment code.
9247 */
9248function genAssignmentCode(value, assignment) {
9249  var res = parseModel(value);
9250  if (res.key === null) {
9251    return "".concat(value, "=").concat(assignment);
9252  } else {
9253    return "$set(".concat(res.exp, ", ").concat(res.key, ", ").concat(assignment, ")");
9254  }
9255}
9256/**
9257 * Parse a v-model expression into a base path and a final key segment.
9258 * Handles both dot-path and possible square brackets.
9259 *
9260 * Possible cases:
9261 *
9262 * - test
9263 * - test[key]
9264 * - test[test1[key]]
9265 * - test["a"][key]
9266 * - xxx.test[a[a].test1[key]]
9267 * - test.xxx.a["asa"][test1[key]]
9268 *
9269 */
9270var len, str, chr, index, expressionPos, expressionEndPos;
9271function parseModel(val) {
9272  // Fix https://github.com/vuejs/vue/pull/7730
9273  // allow v-model="obj.val " (trailing whitespace)
9274  val = val.trim();
9275  len = val.length;
9276  if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {
9277    index = val.lastIndexOf('.');
9278    if (index > -1) {
9279      return {
9280        exp: val.slice(0, index),
9281        key: '"' + val.slice(index + 1) + '"'
9282      };
9283    } else {
9284      return {
9285        exp: val,
9286        key: null
9287      };
9288    }
9289  }
9290  str = val;
9291  index = expressionPos = expressionEndPos = 0;
9292  while (!eof()) {
9293    chr = next();
9294    /* istanbul ignore if */
9295    if (isStringStart(chr)) {
9296      parseString(chr);
9297    } else if (chr === 0x5b) {
9298      parseBracket(chr);
9299    }
9300  }
9301  return {
9302    exp: val.slice(0, expressionPos),
9303    key: val.slice(expressionPos + 1, expressionEndPos)
9304  };
9305}
9306function next() {
9307  return str.charCodeAt(++index);
9308}
9309function eof() {
9310  return index >= len;
9311}
9312function isStringStart(chr) {
9313  return chr === 0x22 || chr === 0x27;
9314}
9315function parseBracket(chr) {
9316  var inBracket = 1;
9317  expressionPos = index;
9318  while (!eof()) {
9319    chr = next();
9320    if (isStringStart(chr)) {
9321      parseString(chr);
9322      continue;
9323    }
9324    if (chr === 0x5b) inBracket++;
9325    if (chr === 0x5d) inBracket--;
9326    if (inBracket === 0) {
9327      expressionEndPos = index;
9328      break;
9329    }
9330  }
9331}
9332function parseString(chr) {
9333  var stringQuote = chr;
9334  while (!eof()) {
9335    chr = next();
9336    if (chr === stringQuote) {
9337      break;
9338    }
9339  }
9340}
9341var warn$1;
9342// in some cases, the event used has to be determined at runtime
9343// so we used some reserved tokens during compile.
9344var RANGE_TOKEN = '__r';
9345var CHECKBOX_RADIO_TOKEN = '__c';
9346function model$1(el, dir, _warn) {
9347  warn$1 = _warn;
9348  var value = dir.value;
9349  var modifiers = dir.modifiers;
9350  var tag = el.tag;
9351  var type = el.attrsMap.type;
9352  if (true) {
9353    // inputs with type="file" are read only and setting the input's
9354    // value will throw an error.
9355    if (tag === 'input' && type === 'file') {
9356      warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\" type=\"file\">:\n") + "File inputs are read only. Use a v-on:change listener instead.", el.rawAttrsMap['v-model']);
9357    }
9358  }
9359  if (el.component) {
9360    genComponentModel(el, value, modifiers);
9361    // component v-model doesn't need extra runtime
9362    return false;
9363  } else if (tag === 'select') {
9364    genSelect(el, value, modifiers);
9365  } else if (tag === 'input' && type === 'checkbox') {
9366    genCheckboxModel(el, value, modifiers);
9367  } else if (tag === 'input' && type === 'radio') {
9368    genRadioModel(el, value, modifiers);
9369  } else if (tag === 'input' || tag === 'textarea') {
9370    genDefaultModel(el, value, modifiers);
9371  } else if (!config.isReservedTag(tag)) {
9372    genComponentModel(el, value, modifiers);
9373    // component v-model doesn't need extra runtime
9374    return false;
9375  } else if (true) {
9376    warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") + "v-model is not supported on this element type. " + "If you are working with contenteditable, it's recommended to " + 'wrap a library dedicated for that purpose inside a custom component.', el.rawAttrsMap['v-model']);
9377  }
9378  // ensure runtime directive metadata
9379  return true;
9380}
9381function genCheckboxModel(el, value, modifiers) {
9382  var number = modifiers && modifiers.number;
9383  var valueBinding = getBindingAttr(el, 'value') || 'null';
9384  var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';
9385  var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';
9386  addProp(el, 'checked', "Array.isArray(".concat(value, ")") + "?_i(".concat(value, ",").concat(valueBinding, ")>-1") + (trueValueBinding === 'true' ? ":(".concat(value, ")") : ":_q(".concat(value, ",").concat(trueValueBinding, ")")));
9387  addHandler(el, 'change', "var $$a=".concat(value, ",") + '$$el=$event.target,' + "$$c=$$el.checked?(".concat(trueValueBinding, "):(").concat(falseValueBinding, ");") + 'if(Array.isArray($$a)){' + "var $$v=".concat(number ? '_n(' + valueBinding + ')' : valueBinding, ",") + '$$i=_i($$a,$$v);' + "if($$el.checked){$$i<0&&(".concat(genAssignmentCode(value, '$$a.concat([$$v])'), ")}") + "else{$$i>-1&&(".concat(genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))'), ")}") + "}else{".concat(genAssignmentCode(value, '$$c'), "}"), null, true);
9388}
9389function genRadioModel(el, value, modifiers) {
9390  var number = modifiers && modifiers.number;
9391  var valueBinding = getBindingAttr(el, 'value') || 'null';
9392  valueBinding = number ? "_n(".concat(valueBinding, ")") : valueBinding;
9393  addProp(el, 'checked', "_q(".concat(value, ",").concat(valueBinding, ")"));
9394  addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);
9395}
9396function genSelect(el, value, modifiers) {
9397  var number = modifiers && modifiers.number;
9398  var selectedVal = "Array.prototype.filter" + ".call($event.target.options,function(o){return o.selected})" + ".map(function(o){var val = \"_value\" in o ? o._value : o.value;" + "return ".concat(number ? '_n(val)' : 'val', "})");
9399  var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';
9400  var code = "var $$selectedVal = ".concat(selectedVal, ";");
9401  code = "".concat(code, " ").concat(genAssignmentCode(value, assignment));
9402  addHandler(el, 'change', code, null, true);
9403}
9404function genDefaultModel(el, value, modifiers) {
9405  var type = el.attrsMap.type;
9406  // warn if v-bind:value conflicts with v-model
9407  // except for inputs with v-bind:type
9408  if (true) {
9409    var value_1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];
9410    var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];
9411    if (value_1 && !typeBinding) {
9412      var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';
9413      warn$1("".concat(binding, "=\"").concat(value_1, "\" conflicts with v-model on the same element ") + 'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]);
9414    }
9415  }
9416  var _a = modifiers || {},
9417    lazy = _a.lazy,
9418    number = _a.number,
9419    trim = _a.trim;
9420  var needCompositionGuard = !lazy && type !== 'range';
9421  var event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input';
9422  var valueExpression = '$event.target.value';
9423  if (trim) {
9424    valueExpression = "$event.target.value.trim()";
9425  }
9426  if (number) {
9427    valueExpression = "_n(".concat(valueExpression, ")");
9428  }
9429  var code = genAssignmentCode(value, valueExpression);
9430  if (needCompositionGuard) {
9431    code = "if($event.target.composing)return;".concat(code);
9432  }
9433  addProp(el, 'value', "(".concat(value, ")"));
9434  addHandler(el, event, code, null, true);
9435  if (trim || number) {
9436    addHandler(el, 'blur', '$forceUpdate()');
9437  }
9438}
9439
9440// normalize v-model event tokens that can only be determined at runtime.
9441// it's important to place the event as the first in the array because
9442// the whole point is ensuring the v-model callback gets called before
9443// user-attached handlers.
9444function normalizeEvents(on) {
9445  /* istanbul ignore if */
9446  if (isDef(on[RANGE_TOKEN])) {
9447    // IE input[type=range] only supports `change` event
9448    var event_1 = isIE ? 'change' : 'input';
9449    on[event_1] = [].concat(on[RANGE_TOKEN], on[event_1] || []);
9450    delete on[RANGE_TOKEN];
9451  }
9452  // This was originally intended to fix #4521 but no longer necessary
9453  // after 2.5. Keeping it for backwards compat with generated code from < 2.4
9454  /* istanbul ignore if */
9455  if (isDef(on[CHECKBOX_RADIO_TOKEN])) {
9456    on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);
9457    delete on[CHECKBOX_RADIO_TOKEN];
9458  }
9459}
9460var target;
9461function createOnceHandler(event, handler, capture) {
9462  var _target = target; // save current target element in closure
9463  return function onceHandler() {
9464    var res = handler.apply(null, arguments);
9465    if (res !== null) {
9466      remove(event, onceHandler, capture, _target);
9467    }
9468  };
9469}
9470// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp
9471// implementation and does not fire microtasks in between event propagation, so
9472// safe to exclude.
9473var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);
9474function add(name, handler, capture, passive) {
9475  // async edge case #6566: inner click event triggers patch, event handler
9476  // attached to outer element during patch, and triggered again. This
9477  // happens because browsers fire microtask ticks between event propagation.
9478  // the solution is simple: we save the timestamp when a handler is attached,
9479  // and the handler would only fire if the event passed to it was fired
9480  // AFTER it was attached.
9481  if (useMicrotaskFix) {
9482    var attachedTimestamp_1 = currentFlushTimestamp;
9483    var original_1 = handler;
9484    //@ts-expect-error
9485    handler = original_1._wrapper = function (e) {
9486      if (
9487      // no bubbling, should always fire.
9488      // this is just a safety net in case event.timeStamp is unreliable in
9489      // certain weird environments...
9490      e.target === e.currentTarget ||
9491      // event is fired after handler attachment
9492      e.timeStamp >= attachedTimestamp_1 ||
9493      // bail for environments that have buggy event.timeStamp implementations
9494      // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState
9495      // #9681 QtWebEngine event.timeStamp is negative value
9496      e.timeStamp <= 0 ||
9497      // #9448 bail if event is fired in another document in a multi-page
9498      // electron/nw.js app, since event.timeStamp will be using a different
9499      // starting reference
9500      e.target.ownerDocument !== document) {
9501        return original_1.apply(this, arguments);
9502      }
9503    };
9504  }
9505  target.addEventListener(name, handler, supportsPassive ? {
9506    capture: capture,
9507    passive: passive
9508  } : capture);
9509}
9510function remove(name, handler, capture, _target) {
9511  (_target || target).removeEventListener(name,
9512  //@ts-expect-error
9513  handler._wrapper || handler, capture);
9514}
9515function updateDOMListeners(oldVnode, vnode) {
9516  if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {
9517    return;
9518  }
9519  var on = vnode.data.on || {};
9520  var oldOn = oldVnode.data.on || {};
9521  // vnode is empty when removing all listeners,
9522  // and use old vnode dom element
9523  target = vnode.elm || oldVnode.elm;
9524  normalizeEvents(on);
9525  updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context);
9526  target = undefined;
9527}
9528var events = {
9529  create: updateDOMListeners,
9530  update: updateDOMListeners,
9531  // @ts-expect-error emptyNode has actually data
9532  destroy: function (vnode) {
9533    return updateDOMListeners(vnode, emptyNode);
9534  }
9535};
9536var svgContainer;
9537function updateDOMProps(oldVnode, vnode) {
9538  if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {
9539    return;
9540  }
9541  var key, cur;
9542  var elm = vnode.elm;
9543  var oldProps = oldVnode.data.domProps || {};
9544  var props = vnode.data.domProps || {};
9545  // clone observed objects, as the user probably wants to mutate it
9546  if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) {
9547    props = vnode.data.domProps = extend({}, props);
9548  }
9549  for (key in oldProps) {
9550    if (!(key in props)) {
9551      elm[key] = '';
9552    }
9553  }
9554  for (key in props) {
9555    cur = props[key];
9556    // ignore children if the node has textContent or innerHTML,
9557    // as these will throw away existing DOM nodes and cause removal errors
9558    // on subsequent patches (#3360)
9559    if (key === 'textContent' || key === 'innerHTML') {
9560      if (vnode.children) vnode.children.length = 0;
9561      if (cur === oldProps[key]) continue;
9562      // #6601 work around Chrome version <= 55 bug where single textNode
9563      // replaced by innerHTML/textContent retains its parentNode property
9564      if (elm.childNodes.length === 1) {
9565        elm.removeChild(elm.childNodes[0]);
9566      }
9567    }
9568    if (key === 'value' && elm.tagName !== 'PROGRESS') {
9569      // store value as _value as well since
9570      // non-string values will be stringified
9571      elm._value = cur;
9572      // avoid resetting cursor position when value is the same
9573      var strCur = isUndef(cur) ? '' : String(cur);
9574      if (shouldUpdateValue(elm, strCur)) {
9575        elm.value = strCur;
9576      }
9577    } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {
9578      // IE doesn't support innerHTML for SVG elements
9579      svgContainer = svgContainer || document.createElement('div');
9580      svgContainer.innerHTML = "<svg>".concat(cur, "</svg>");
9581      var svg = svgContainer.firstChild;
9582      while (elm.firstChild) {
9583        elm.removeChild(elm.firstChild);
9584      }
9585      while (svg.firstChild) {
9586        elm.appendChild(svg.firstChild);
9587      }
9588    } else if (
9589    // skip the update if old and new VDOM state is the same.
9590    // `value` is handled separately because the DOM value may be temporarily
9591    // out of sync with VDOM state due to focus, composition and modifiers.
9592    // This  #4521 by skipping the unnecessary `checked` update.
9593    cur !== oldProps[key]) {
9594      // some property updates can throw
9595      // e.g. `value` on <progress> w/ non-finite value
9596      try {
9597        elm[key] = cur;
9598      } catch (e) {}
9599    }
9600  }
9601}
9602function shouldUpdateValue(elm, checkVal) {
9603  return (
9604    //@ts-expect-error
9605    !elm.composing && (elm.tagName === 'OPTION' || isNotInFocusAndDirty(elm, checkVal) || isDirtyWithModifiers(elm, checkVal))
9606  );
9607}
9608function isNotInFocusAndDirty(elm, checkVal) {
9609  // return true when textbox (.number and .trim) loses focus and its value is
9610  // not equal to the updated value
9611  var notInFocus = true;
9612  // #6157
9613  // work around IE bug when accessing document.activeElement in an iframe
9614  try {
9615    notInFocus = document.activeElement !== elm;
9616  } catch (e) {}
9617  return notInFocus && elm.value !== checkVal;
9618}
9619function isDirtyWithModifiers(elm, newVal) {
9620  var value = elm.value;
9621  var modifiers = elm._vModifiers; // injected by v-model runtime
9622  if (isDef(modifiers)) {
9623    if (modifiers.number) {
9624      return toNumber(value) !== toNumber(newVal);
9625    }
9626    if (modifiers.trim) {
9627      return value.trim() !== newVal.trim();
9628    }
9629  }
9630  return value !== newVal;
9631}
9632var domProps = {
9633  create: updateDOMProps,
9634  update: updateDOMProps
9635};
9636var parseStyleText = cached(function (cssText) {
9637  var res = {};
9638  var listDelimiter = /;(?![^(]*\))/g;
9639  var propertyDelimiter = /:(.+)/;
9640  cssText.split(listDelimiter).forEach(function (item) {
9641    if (item) {
9642      var tmp = item.split(propertyDelimiter);
9643      tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
9644    }
9645  });
9646  return res;
9647});
9648// merge static and dynamic style data on the same vnode
9649function normalizeStyleData(data) {
9650  var style = normalizeStyleBinding(data.style);
9651  // static style is pre-processed into an object during compilation
9652  // and is always a fresh object, so it's safe to merge into it
9653  return data.staticStyle ? extend(data.staticStyle, style) : style;
9654}
9655// normalize possible array / string values into Object
9656function normalizeStyleBinding(bindingStyle) {
9657  if (Array.isArray(bindingStyle)) {
9658    return toObject(bindingStyle);
9659  }
9660  if (typeof bindingStyle === 'string') {
9661    return parseStyleText(bindingStyle);
9662  }
9663  return bindingStyle;
9664}
9665/**
9666 * parent component style should be after child's
9667 * so that parent component's style could override it
9668 */
9669function getStyle(vnode, checkChild) {
9670  var res = {};
9671  var styleData;
9672  if (checkChild) {
9673    var childNode = vnode;
9674    while (childNode.componentInstance) {
9675      childNode = childNode.componentInstance._vnode;
9676      if (childNode && childNode.data && (styleData = normalizeStyleData(childNode.data))) {
9677        extend(res, styleData);
9678      }
9679    }
9680  }
9681  if (styleData = normalizeStyleData(vnode.data)) {
9682    extend(res, styleData);
9683  }
9684  var parentNode = vnode;
9685  // @ts-expect-error parentNode.parent not VNodeWithData
9686  while (parentNode = parentNode.parent) {
9687    if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {
9688      extend(res, styleData);
9689    }
9690  }
9691  return res;
9692}
9693var cssVarRE = /^--/;
9694var importantRE = /\s*!important$/;
9695var setProp = function (el, name, val) {
9696  /* istanbul ignore if */
9697  if (cssVarRE.test(name)) {
9698    el.style.setProperty(name, val);
9699  } else if (importantRE.test(val)) {
9700    el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');
9701  } else {
9702    var normalizedName = normalize(name);
9703    if (Array.isArray(val)) {
9704      // Support values array created by autoprefixer, e.g.
9705      // {display: ["-webkit-box", "-ms-flexbox", "flex"]}
9706      // Set them one by one, and the browser will only set those it can recognize
9707      for (var i = 0, len = val.length; i < len; i++) {
9708        el.style[normalizedName] = val[i];
9709      }
9710    } else {
9711      el.style[normalizedName] = val;
9712    }
9713  }
9714};
9715var vendorNames = ['Webkit', 'Moz', 'ms'];
9716var emptyStyle;
9717var normalize = cached(function (prop) {
9718  emptyStyle = emptyStyle || document.createElement('div').style;
9719  prop = camelize(prop);
9720  if (prop !== 'filter' && prop in emptyStyle) {
9721    return prop;
9722  }
9723  var capName = prop.charAt(0).toUpperCase() + prop.slice(1);
9724  for (var i = 0; i < vendorNames.length; i++) {
9725    var name_1 = vendorNames[i] + capName;
9726    if (name_1 in emptyStyle) {
9727      return name_1;
9728    }
9729  }
9730});
9731function updateStyle(oldVnode, vnode) {
9732  var data = vnode.data;
9733  var oldData = oldVnode.data;
9734  if (isUndef(data.staticStyle) && isUndef(data.style) && isUndef(oldData.staticStyle) && isUndef(oldData.style)) {
9735    return;
9736  }
9737  var cur, name;
9738  var el = vnode.elm;
9739  var oldStaticStyle = oldData.staticStyle;
9740  var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};
9741  // if static style exists, stylebinding already merged into it when doing normalizeStyleData
9742  var oldStyle = oldStaticStyle || oldStyleBinding;
9743  var style = normalizeStyleBinding(vnode.data.style) || {};
9744  // store normalized style under a different key for next diff
9745  // make sure to clone it if it's reactive, since the user likely wants
9746  // to mutate it.
9747  vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style;
9748  var newStyle = getStyle(vnode, true);
9749  for (name in oldStyle) {
9750    if (isUndef(newStyle[name])) {
9751      setProp(el, name, '');
9752    }
9753  }
9754  for (name in newStyle) {
9755    cur = newStyle[name];
9756    if (cur !== oldStyle[name]) {
9757      // ie9 setting to null has no effect, must use empty string
9758      setProp(el, name, cur == null ? '' : cur);
9759    }
9760  }
9761}
9762var style$1 = {
9763  create: updateStyle,
9764  update: updateStyle
9765};
9766var whitespaceRE$1 = /\s+/;
9767/**
9768 * Add class with compatibility for SVG since classList is not supported on
9769 * SVG elements in IE
9770 */
9771function addClass(el, cls) {
9772  /* istanbul ignore if */
9773  if (!cls || !(cls = cls.trim())) {
9774    return;
9775  }
9776  /* istanbul ignore else */
9777  if (el.classList) {
9778    if (cls.indexOf(' ') > -1) {
9779      cls.split(whitespaceRE$1).forEach(function (c) {
9780        return el.classList.add(c);
9781      });
9782    } else {
9783      el.classList.add(cls);
9784    }
9785  } else {
9786    var cur = " ".concat(el.getAttribute('class') || '', " ");
9787    if (cur.indexOf(' ' + cls + ' ') < 0) {
9788      el.setAttribute('class', (cur + cls).trim());
9789    }
9790  }
9791}
9792/**
9793 * Remove class with compatibility for SVG since classList is not supported on
9794 * SVG elements in IE
9795 */
9796function removeClass(el, cls) {
9797  /* istanbul ignore if */
9798  if (!cls || !(cls = cls.trim())) {
9799    return;
9800  }
9801  /* istanbul ignore else */
9802  if (el.classList) {
9803    if (cls.indexOf(' ') > -1) {
9804      cls.split(whitespaceRE$1).forEach(function (c) {
9805        return el.classList.remove(c);
9806      });
9807    } else {
9808      el.classList.remove(cls);
9809    }
9810    if (!el.classList.length) {
9811      el.removeAttribute('class');
9812    }
9813  } else {
9814    var cur = " ".concat(el.getAttribute('class') || '', " ");
9815    var tar = ' ' + cls + ' ';
9816    while (cur.indexOf(tar) >= 0) {
9817      cur = cur.replace(tar, ' ');
9818    }
9819    cur = cur.trim();
9820    if (cur) {
9821      el.setAttribute('class', cur);
9822    } else {
9823      el.removeAttribute('class');
9824    }
9825  }
9826}
9827function resolveTransition(def) {
9828  if (!def) {
9829    return;
9830  }
9831  /* istanbul ignore else */
9832  if (typeof def === 'object') {
9833    var res = {};
9834    if (def.css !== false) {
9835      extend(res, autoCssTransition(def.name || 'v'));
9836    }
9837    extend(res, def);
9838    return res;
9839  } else if (typeof def === 'string') {
9840    return autoCssTransition(def);
9841  }
9842}
9843var autoCssTransition = cached(function (name) {
9844  return {
9845    enterClass: "".concat(name, "-enter"),
9846    enterToClass: "".concat(name, "-enter-to"),
9847    enterActiveClass: "".concat(name, "-enter-active"),
9848    leaveClass: "".concat(name, "-leave"),
9849    leaveToClass: "".concat(name, "-leave-to"),
9850    leaveActiveClass: "".concat(name, "-leave-active")
9851  };
9852});
9853var hasTransition = inBrowser && !isIE9;
9854var TRANSITION = 'transition';
9855var ANIMATION = 'animation';
9856// Transition property/event sniffing
9857var transitionProp = 'transition';
9858var transitionEndEvent = 'transitionend';
9859var animationProp = 'animation';
9860var animationEndEvent = 'animationend';
9861if (hasTransition) {
9862  /* istanbul ignore if */
9863  if (window.ontransitionend === undefined && window.onwebkittransitionend !== undefined) {
9864    transitionProp = 'WebkitTransition';
9865    transitionEndEvent = 'webkitTransitionEnd';
9866  }
9867  if (window.onanimationend === undefined && window.onwebkitanimationend !== undefined) {
9868    animationProp = 'WebkitAnimation';
9869    animationEndEvent = 'webkitAnimationEnd';
9870  }
9871}
9872// binding to window is necessary to make hot reload work in IE in strict mode
9873var raf = inBrowser ? window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : setTimeout : /* istanbul ignore next */function ( /* istanbul ignore next */fn) {
9874  return fn();
9875};
9876function nextFrame(fn) {
9877  raf(function () {
9878    // @ts-expect-error
9879    raf(fn);
9880  });
9881}
9882function addTransitionClass(el, cls) {
9883  var transitionClasses = el._transitionClasses || (el._transitionClasses = []);
9884  if (transitionClasses.indexOf(cls) < 0) {
9885    transitionClasses.push(cls);
9886    addClass(el, cls);
9887  }
9888}
9889function removeTransitionClass(el, cls) {
9890  if (el._transitionClasses) {
9891    remove$2(el._transitionClasses, cls);
9892  }
9893  removeClass(el, cls);
9894}
9895function whenTransitionEnds(el, expectedType, cb) {
9896  var _a = getTransitionInfo(el, expectedType),
9897    type = _a.type,
9898    timeout = _a.timeout,
9899    propCount = _a.propCount;
9900  if (!type) return cb();
9901  var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;
9902  var ended = 0;
9903  var end = function () {
9904    el.removeEventListener(event, onEnd);
9905    cb();
9906  };
9907  var onEnd = function (e) {
9908    if (e.target === el) {
9909      if (++ended >= propCount) {
9910        end();
9911      }
9912    }
9913  };
9914  setTimeout(function () {
9915    if (ended < propCount) {
9916      end();
9917    }
9918  }, timeout + 1);
9919  el.addEventListener(event, onEnd);
9920}
9921var transformRE = /\b(transform|all)(,|$)/;
9922function getTransitionInfo(el, expectedType) {
9923  var styles = window.getComputedStyle(el);
9924  // JSDOM may return undefined for transition properties
9925  var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');
9926  var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');
9927  var transitionTimeout = getTimeout(transitionDelays, transitionDurations);
9928  var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');
9929  var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');
9930  var animationTimeout = getTimeout(animationDelays, animationDurations);
9931  var type;
9932  var timeout = 0;
9933  var propCount = 0;
9934  /* istanbul ignore if */
9935  if (expectedType === TRANSITION) {
9936    if (transitionTimeout > 0) {
9937      type = TRANSITION;
9938      timeout = transitionTimeout;
9939      propCount = transitionDurations.length;
9940    }
9941  } else if (expectedType === ANIMATION) {
9942    if (animationTimeout > 0) {
9943      type = ANIMATION;
9944      timeout = animationTimeout;
9945      propCount = animationDurations.length;
9946    }
9947  } else {
9948    timeout = Math.max(transitionTimeout, animationTimeout);
9949    type = timeout > 0 ? transitionTimeout > animationTimeout ? TRANSITION : ANIMATION : null;
9950    propCount = type ? type === TRANSITION ? transitionDurations.length : animationDurations.length : 0;
9951  }
9952  var hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']);
9953  return {
9954    type: type,
9955    timeout: timeout,
9956    propCount: propCount,
9957    hasTransform: hasTransform
9958  };
9959}
9960function getTimeout(delays, durations) {
9961  /* istanbul ignore next */
9962  while (delays.length < durations.length) {
9963    delays = delays.concat(delays);
9964  }
9965  return Math.max.apply(null, durations.map(function (d, i) {
9966    return toMs(d) + toMs(delays[i]);
9967  }));
9968}
9969// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers
9970// in a locale-dependent way, using a comma instead of a dot.
9971// If comma is not replaced with a dot, the input will be rounded down (i.e. acting
9972// as a floor function) causing unexpected behaviors
9973function toMs(s) {
9974  return Number(s.slice(0, -1).replace(',', '.')) * 1000;
9975}
9976function enter(vnode, toggleDisplay) {
9977  var el = vnode.elm;
9978  // call leave callback now
9979  if (isDef(el._leaveCb)) {
9980    el._leaveCb.cancelled = true;
9981    el._leaveCb();
9982  }
9983  var data = resolveTransition(vnode.data.transition);
9984  if (isUndef(data)) {
9985    return;
9986  }
9987  /* istanbul ignore if */
9988  if (isDef(el._enterCb) || el.nodeType !== 1) {
9989    return;
9990  }
9991  var css = data.css,
9992    type = data.type,
9993    enterClass = data.enterClass,
9994    enterToClass = data.enterToClass,
9995    enterActiveClass = data.enterActiveClass,
9996    appearClass = data.appearClass,
9997    appearToClass = data.appearToClass,
9998    appearActiveClass = data.appearActiveClass,
9999    beforeEnter = data.beforeEnter,
10000    enter = data.enter,
10001    afterEnter = data.afterEnter,
10002    enterCancelled = data.enterCancelled,
10003    beforeAppear = data.beforeAppear,
10004    appear = data.appear,
10005    afterAppear = data.afterAppear,
10006    appearCancelled = data.appearCancelled,
10007    duration = data.duration;
10008  // activeInstance will always be the <transition> component managing this
10009  // transition. One edge case to check is when the <transition> is placed
10010  // as the root node of a child component. In that case we need to check
10011  // <transition>'s parent for appear check.
10012  var context = activeInstance;
10013  var transitionNode = activeInstance.$vnode;
10014  while (transitionNode && transitionNode.parent) {
10015    context = transitionNode.context;
10016    transitionNode = transitionNode.parent;
10017  }
10018  var isAppear = !context._isMounted || !vnode.isRootInsert;
10019  if (isAppear && !appear && appear !== '') {
10020    return;
10021  }
10022  var startClass = isAppear && appearClass ? appearClass : enterClass;
10023  var activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass;
10024  var toClass = isAppear && appearToClass ? appearToClass : enterToClass;
10025  var beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter;
10026  var enterHook = isAppear ? isFunction(appear) ? appear : enter : enter;
10027  var afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter;
10028  var enterCancelledHook = isAppear ? appearCancelled || enterCancelled : enterCancelled;
10029  var explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration);
10030  if ( true && explicitEnterDuration != null) {
10031    checkDuration(explicitEnterDuration, 'enter', vnode);
10032  }
10033  var expectsCSS = css !== false && !isIE9;
10034  var userWantsControl = getHookArgumentsLength(enterHook);
10035  var cb = el._enterCb = once(function () {
10036    if (expectsCSS) {
10037      removeTransitionClass(el, toClass);
10038      removeTransitionClass(el, activeClass);
10039    }
10040    // @ts-expect-error
10041    if (cb.cancelled) {
10042      if (expectsCSS) {
10043        removeTransitionClass(el, startClass);
10044      }
10045      enterCancelledHook && enterCancelledHook(el);
10046    } else {
10047      afterEnterHook && afterEnterHook(el);
10048    }
10049    el._enterCb = null;
10050  });
10051  if (!vnode.data.show) {
10052    // remove pending leave element on enter by injecting an insert hook
10053    mergeVNodeHook(vnode, 'insert', function () {
10054      var parent = el.parentNode;
10055      var pendingNode = parent && parent._pending && parent._pending[vnode.key];
10056      if (pendingNode && pendingNode.tag === vnode.tag && pendingNode.elm._leaveCb) {
10057        pendingNode.elm._leaveCb();
10058      }
10059      enterHook && enterHook(el, cb);
10060    });
10061  }
10062  // start enter transition
10063  beforeEnterHook && beforeEnterHook(el);
10064  if (expectsCSS) {
10065    addTransitionClass(el, startClass);
10066    addTransitionClass(el, activeClass);
10067    nextFrame(function () {
10068      removeTransitionClass(el, startClass);
10069      // @ts-expect-error
10070      if (!cb.cancelled) {
10071        addTransitionClass(el, toClass);
10072        if (!userWantsControl) {
10073          if (isValidDuration(explicitEnterDuration)) {
10074            setTimeout(cb, explicitEnterDuration);
10075          } else {
10076            whenTransitionEnds(el, type, cb);
10077          }
10078        }
10079      }
10080    });
10081  }
10082  if (vnode.data.show) {
10083    toggleDisplay && toggleDisplay();
10084    enterHook && enterHook(el, cb);
10085  }
10086  if (!expectsCSS && !userWantsControl) {
10087    cb();
10088  }
10089}
10090function leave(vnode, rm) {
10091  var el = vnode.elm;
10092  // call enter callback now
10093  if (isDef(el._enterCb)) {
10094    el._enterCb.cancelled = true;
10095    el._enterCb();
10096  }
10097  var data = resolveTransition(vnode.data.transition);
10098  if (isUndef(data) || el.nodeType !== 1) {
10099    return rm();
10100  }
10101  /* istanbul ignore if */
10102  if (isDef(el._leaveCb)) {
10103    return;
10104  }
10105  var css = data.css,
10106    type = data.type,
10107    leaveClass = data.leaveClass,
10108    leaveToClass = data.leaveToClass,
10109    leaveActiveClass = data.leaveActiveClass,
10110    beforeLeave = data.beforeLeave,
10111    leave = data.leave,
10112    afterLeave = data.afterLeave,
10113    leaveCancelled = data.leaveCancelled,
10114    delayLeave = data.delayLeave,
10115    duration = data.duration;
10116  var expectsCSS = css !== false && !isIE9;
10117  var userWantsControl = getHookArgumentsLength(leave);
10118  var explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration);
10119  if ( true && isDef(explicitLeaveDuration)) {
10120    checkDuration(explicitLeaveDuration, 'leave', vnode);
10121  }
10122  var cb = el._leaveCb = once(function () {
10123    if (el.parentNode && el.parentNode._pending) {
10124      el.parentNode._pending[vnode.key] = null;
10125    }
10126    if (expectsCSS) {
10127      removeTransitionClass(el, leaveToClass);
10128      removeTransitionClass(el, leaveActiveClass);
10129    }
10130    // @ts-expect-error
10131    if (cb.cancelled) {
10132      if (expectsCSS) {
10133        removeTransitionClass(el, leaveClass);
10134      }
10135      leaveCancelled && leaveCancelled(el);
10136    } else {
10137      rm();
10138      afterLeave && afterLeave(el);
10139    }
10140    el._leaveCb = null;
10141  });
10142  if (delayLeave) {
10143    delayLeave(performLeave);
10144  } else {
10145    performLeave();
10146  }
10147  function performLeave() {
10148    // the delayed leave may have already been cancelled
10149    // @ts-expect-error
10150    if (cb.cancelled) {
10151      return;
10152    }
10153    // record leaving element
10154    if (!vnode.data.show && el.parentNode) {
10155      (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] = vnode;
10156    }
10157    beforeLeave && beforeLeave(el);
10158    if (expectsCSS) {
10159      addTransitionClass(el, leaveClass);
10160      addTransitionClass(el, leaveActiveClass);
10161      nextFrame(function () {
10162        removeTransitionClass(el, leaveClass);
10163        // @ts-expect-error
10164        if (!cb.cancelled) {
10165          addTransitionClass(el, leaveToClass);
10166          if (!userWantsControl) {
10167            if (isValidDuration(explicitLeaveDuration)) {
10168              setTimeout(cb, explicitLeaveDuration);
10169            } else {
10170              whenTransitionEnds(el, type, cb);
10171            }
10172          }
10173        }
10174      });
10175    }
10176    leave && leave(el, cb);
10177    if (!expectsCSS && !userWantsControl) {
10178      cb();
10179    }
10180  }
10181}
10182// only used in dev mode
10183function checkDuration(val, name, vnode) {
10184  if (typeof val !== 'number') {
10185    warn$2("<transition> explicit ".concat(name, " duration is not a valid number - ") + "got ".concat(JSON.stringify(val), "."), vnode.context);
10186  } else if (isNaN(val)) {
10187    warn$2("<transition> explicit ".concat(name, " duration is NaN - ") + 'the duration expression might be incorrect.', vnode.context);
10188  }
10189}
10190function isValidDuration(val) {
10191  return typeof val === 'number' && !isNaN(val);
10192}
10193/**
10194 * Normalize a transition hook's argument length. The hook may be:
10195 * - a merged hook (invoker) with the original in .fns
10196 * - a wrapped component method (check ._length)
10197 * - a plain function (.length)
10198 */
10199function getHookArgumentsLength(fn) {
10200  if (isUndef(fn)) {
10201    return false;
10202  }
10203  // @ts-expect-error
10204  var invokerFns = fn.fns;
10205  if (isDef(invokerFns)) {
10206    // invoker
10207    return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns);
10208  } else {
10209    // @ts-expect-error
10210    return (fn._length || fn.length) > 1;
10211  }
10212}
10213function _enter(_, vnode) {
10214  if (vnode.data.show !== true) {
10215    enter(vnode);
10216  }
10217}
10218var transition = inBrowser ? {
10219  create: _enter,
10220  activate: _enter,
10221  remove: function (vnode, rm) {
10222    /* istanbul ignore else */
10223    if (vnode.data.show !== true) {
10224      // @ts-expect-error
10225      leave(vnode, rm);
10226    } else {
10227      rm();
10228    }
10229  }
10230} : {};
10231var platformModules = [attrs, klass$1, events, domProps, style$1, transition];
10232
10233// the directive module should be applied last, after all
10234// built-in modules have been applied.
10235var modules$1 = platformModules.concat(baseModules);
10236var patch = createPatchFunction({
10237  nodeOps: nodeOps,
10238  modules: modules$1
10239});
10240
10241/**
10242 * Not type checking this file because flow doesn't like attaching
10243 * properties to Elements.
10244 */
10245/* istanbul ignore if */
10246if (isIE9) {
10247  // http://www.matts411.com/post/internet-explorer-9-oninput/
10248  document.addEventListener('selectionchange', function () {
10249    var el = document.activeElement;
10250    // @ts-expect-error
10251    if (el && el.vmodel) {
10252      trigger(el, 'input');
10253    }
10254  });
10255}
10256var directive = {
10257  inserted: function (el, binding, vnode, oldVnode) {
10258    if (vnode.tag === 'select') {
10259      // #6903
10260      if (oldVnode.elm && !oldVnode.elm._vOptions) {
10261        mergeVNodeHook(vnode, 'postpatch', function () {
10262          directive.componentUpdated(el, binding, vnode);
10263        });
10264      } else {
10265        setSelected(el, binding, vnode.context);
10266      }
10267      el._vOptions = [].map.call(el.options, getValue);
10268    } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {
10269      el._vModifiers = binding.modifiers;
10270      if (!binding.modifiers.lazy) {
10271        el.addEventListener('compositionstart', onCompositionStart);
10272        el.addEventListener('compositionend', onCompositionEnd);
10273        // Safari < 10.2 & UIWebView doesn't fire compositionend when
10274        // switching focus before confirming composition choice
10275        // this also fixes the issue where some browsers e.g. iOS Chrome
10276        // fires "change" instead of "input" on autocomplete.
10277        el.addEventListener('change', onCompositionEnd);
10278        /* istanbul ignore if */
10279        if (isIE9) {
10280          el.vmodel = true;
10281        }
10282      }
10283    }
10284  },
10285  componentUpdated: function (el, binding, vnode) {
10286    if (vnode.tag === 'select') {
10287      setSelected(el, binding, vnode.context);
10288      // in case the options rendered by v-for have changed,
10289      // it's possible that the value is out-of-sync with the rendered options.
10290      // detect such cases and filter out values that no longer has a matching
10291      // option in the DOM.
10292      var prevOptions_1 = el._vOptions;
10293      var curOptions_1 = el._vOptions = [].map.call(el.options, getValue);
10294      if (curOptions_1.some(function (o, i) {
10295        return !looseEqual(o, prevOptions_1[i]);
10296      })) {
10297        // trigger change event if
10298        // no matching option found for at least one value
10299        var needReset = el.multiple ? binding.value.some(function (v) {
10300          return hasNoMatchingOption(v, curOptions_1);
10301        }) : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions_1);
10302        if (needReset) {
10303          trigger(el, 'change');
10304        }
10305      }
10306    }
10307  }
10308};
10309function setSelected(el, binding, vm) {
10310  actuallySetSelected(el, binding, vm);
10311  /* istanbul ignore if */
10312  if (isIE || isEdge) {
10313    setTimeout(function () {
10314      actuallySetSelected(el, binding, vm);
10315    }, 0);
10316  }
10317}
10318function actuallySetSelected(el, binding, vm) {
10319  var value = binding.value;
10320  var isMultiple = el.multiple;
10321  if (isMultiple && !Array.isArray(value)) {
10322     true && warn$2("<select multiple v-model=\"".concat(binding.expression, "\"> ") + "expects an Array value for its binding, but got ".concat(Object.prototype.toString.call(value).slice(8, -1)), vm);
10323    return;
10324  }
10325  var selected, option;
10326  for (var i = 0, l = el.options.length; i < l; i++) {
10327    option = el.options[i];
10328    if (isMultiple) {
10329      selected = looseIndexOf(value, getValue(option)) > -1;
10330      if (option.selected !== selected) {
10331        option.selected = selected;
10332      }
10333    } else {
10334      if (looseEqual(getValue(option), value)) {
10335        if (el.selectedIndex !== i) {
10336          el.selectedIndex = i;
10337        }
10338        return;
10339      }
10340    }
10341  }
10342  if (!isMultiple) {
10343    el.selectedIndex = -1;
10344  }
10345}
10346function hasNoMatchingOption(value, options) {
10347  return options.every(function (o) {
10348    return !looseEqual(o, value);
10349  });
10350}
10351function getValue(option) {
10352  return '_value' in option ? option._value : option.value;
10353}
10354function onCompositionStart(e) {
10355  e.target.composing = true;
10356}
10357function onCompositionEnd(e) {
10358  // prevent triggering an input event for no reason
10359  if (!e.target.composing) return;
10360  e.target.composing = false;
10361  trigger(e.target, 'input');
10362}
10363function trigger(el, type) {
10364  var e = document.createEvent('HTMLEvents');
10365  e.initEvent(type, true, true);
10366  el.dispatchEvent(e);
10367}
10368
10369// recursively search for possible transition defined inside the component root
10370function locateNode(vnode) {
10371  // @ts-expect-error
10372  return vnode.componentInstance && (!vnode.data || !vnode.data.transition) ? locateNode(vnode.componentInstance._vnode) : vnode;
10373}
10374var show = {
10375  bind: function (el, _a, vnode) {
10376    var value = _a.value;
10377    vnode = locateNode(vnode);
10378    var transition = vnode.data && vnode.data.transition;
10379    var originalDisplay = el.__vOriginalDisplay = el.style.display === 'none' ? '' : el.style.display;
10380    if (value && transition) {
10381      vnode.data.show = true;
10382      enter(vnode, function () {
10383        el.style.display = originalDisplay;
10384      });
10385    } else {
10386      el.style.display = value ? originalDisplay : 'none';
10387    }
10388  },
10389  update: function (el, _a, vnode) {
10390    var value = _a.value,
10391      oldValue = _a.oldValue;
10392    /* istanbul ignore if */
10393    if (!value === !oldValue) return;
10394    vnode = locateNode(vnode);
10395    var transition = vnode.data && vnode.data.transition;
10396    if (transition) {
10397      vnode.data.show = true;
10398      if (value) {
10399        enter(vnode, function () {
10400          el.style.display = el.__vOriginalDisplay;
10401        });
10402      } else {
10403        leave(vnode, function () {
10404          el.style.display = 'none';
10405        });
10406      }
10407    } else {
10408      el.style.display = value ? el.__vOriginalDisplay : 'none';
10409    }
10410  },
10411  unbind: function (el, binding, vnode, oldVnode, isDestroy) {
10412    if (!isDestroy) {
10413      el.style.display = el.__vOriginalDisplay;
10414    }
10415  }
10416};
10417var platformDirectives = {
10418  model: directive,
10419  show: show
10420};
10421
10422// Provides transition support for a single element/component.
10423var transitionProps = {
10424  name: String,
10425  appear: Boolean,
10426  css: Boolean,
10427  mode: String,
10428  type: String,
10429  enterClass: String,
10430  leaveClass: String,
10431  enterToClass: String,
10432  leaveToClass: String,
10433  enterActiveClass: String,
10434  leaveActiveClass: String,
10435  appearClass: String,
10436  appearActiveClass: String,
10437  appearToClass: String,
10438  duration: [Number, String, Object]
10439};
10440// in case the child is also an abstract component, e.g. <keep-alive>
10441// we want to recursively retrieve the real component to be rendered
10442function getRealChild(vnode) {
10443  var compOptions = vnode && vnode.componentOptions;
10444  if (compOptions && compOptions.Ctor.options.abstract) {
10445    return getRealChild(getFirstComponentChild(compOptions.children));
10446  } else {
10447    return vnode;
10448  }
10449}
10450function extractTransitionData(comp) {
10451  var data = {};
10452  var options = comp.$options;
10453  // props
10454  for (var key in options.propsData) {
10455    data[key] = comp[key];
10456  }
10457  // events.
10458  // extract listeners and pass them directly to the transition methods
10459  var listeners = options._parentListeners;
10460  for (var key in listeners) {
10461    data[camelize(key)] = listeners[key];
10462  }
10463  return data;
10464}
10465function placeholder(h, rawChild) {
10466  // @ts-expect-error
10467  if (/\d-keep-alive$/.test(rawChild.tag)) {
10468    return h('keep-alive', {
10469      props: rawChild.componentOptions.propsData
10470    });
10471  }
10472}
10473function hasParentTransition(vnode) {
10474  while (vnode = vnode.parent) {
10475    if (vnode.data.transition) {
10476      return true;
10477    }
10478  }
10479}
10480function isSameChild(child, oldChild) {
10481  return oldChild.key === child.key && oldChild.tag === child.tag;
10482}
10483var isNotTextNode = function (c) {
10484  return c.tag || isAsyncPlaceholder(c);
10485};
10486var isVShowDirective = function (d) {
10487  return d.name === 'show';
10488};
10489var Transition = {
10490  name: 'transition',
10491  props: transitionProps,
10492  abstract: true,
10493  render: function (h) {
10494    var _this = this;
10495    var children = this.$slots.default;
10496    if (!children) {
10497      return;
10498    }
10499    // filter out text nodes (possible whitespaces)
10500    children = children.filter(isNotTextNode);
10501    /* istanbul ignore if */
10502    if (!children.length) {
10503      return;
10504    }
10505    // warn multiple elements
10506    if ( true && children.length > 1) {
10507      warn$2('<transition> can only be used on a single element. Use ' + '<transition-group> for lists.', this.$parent);
10508    }
10509    var mode = this.mode;
10510    // warn invalid mode
10511    if ( true && mode && mode !== 'in-out' && mode !== 'out-in') {
10512      warn$2('invalid <transition> mode: ' + mode, this.$parent);
10513    }
10514    var rawChild = children[0];
10515    // if this is a component root node and the component's
10516    // parent container node also has transition, skip.
10517    if (hasParentTransition(this.$vnode)) {
10518      return rawChild;
10519    }
10520    // apply transition data to child
10521    // use getRealChild() to ignore abstract components e.g. keep-alive
10522    var child = getRealChild(rawChild);
10523    /* istanbul ignore if */
10524    if (!child) {
10525      return rawChild;
10526    }
10527    if (this._leaving) {
10528      return placeholder(h, rawChild);
10529    }
10530    // ensure a key that is unique to the vnode type and to this transition
10531    // component instance. This key will be used to remove pending leaving nodes
10532    // during entering.
10533    var id = "__transition-".concat(this._uid, "-");
10534    child.key = child.key == null ? child.isComment ? id + 'comment' : id + child.tag : isPrimitive(child.key) ? String(child.key).indexOf(id) === 0 ? child.key : id + child.key : child.key;
10535    var data = (child.data || (child.data = {})).transition = extractTransitionData(this);
10536    var oldRawChild = this._vnode;
10537    var oldChild = getRealChild(oldRawChild);
10538    // mark v-show
10539    // so that the transition module can hand over the control to the directive
10540    if (child.data.directives && child.data.directives.some(isVShowDirective)) {
10541      child.data.show = true;
10542    }
10543    if (oldChild && oldChild.data && !isSameChild(child, oldChild) && !isAsyncPlaceholder(oldChild) &&
10544    // #6687 component root is a comment node
10545    !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)) {
10546      // replace old child transition data with fresh one
10547      // important for dynamic transitions!
10548      var oldData = oldChild.data.transition = extend({}, data);
10549      // handle transition mode
10550      if (mode === 'out-in') {
10551        // return placeholder node and queue update when leave finishes
10552        this._leaving = true;
10553        mergeVNodeHook(oldData, 'afterLeave', function () {
10554          _this._leaving = false;
10555          _this.$forceUpdate();
10556        });
10557        return placeholder(h, rawChild);
10558      } else if (mode === 'in-out') {
10559        if (isAsyncPlaceholder(child)) {
10560          return oldRawChild;
10561        }
10562        var delayedLeave_1;
10563        var performLeave = function () {
10564          delayedLeave_1();
10565        };
10566        mergeVNodeHook(data, 'afterEnter', performLeave);
10567        mergeVNodeHook(data, 'enterCancelled', performLeave);
10568        mergeVNodeHook(oldData, 'delayLeave', function (leave) {
10569          delayedLeave_1 = leave;
10570        });
10571      }
10572    }
10573    return rawChild;
10574  }
10575};
10576
10577// Provides transition support for list items.
10578var props = extend({
10579  tag: String,
10580  moveClass: String
10581}, transitionProps);
10582delete props.mode;
10583var TransitionGroup = {
10584  props: props,
10585  beforeMount: function () {
10586    var _this = this;
10587    var update = this._update;
10588    this._update = function (vnode, hydrating) {
10589      var restoreActiveInstance = setActiveInstance(_this);
10590      // force removing pass
10591      _this.__patch__(_this._vnode, _this.kept, false,
10592      // hydrating
10593      true // removeOnly (!important, avoids unnecessary moves)
10594      );
10595      _this._vnode = _this.kept;
10596      restoreActiveInstance();
10597      update.call(_this, vnode, hydrating);
10598    };
10599  },
10600  render: function (h) {
10601    var tag = this.tag || this.$vnode.data.tag || 'span';
10602    var map = Object.create(null);
10603    var prevChildren = this.prevChildren = this.children;
10604    var rawChildren = this.$slots.default || [];
10605    var children = this.children = [];
10606    var transitionData = extractTransitionData(this);
10607    for (var i = 0; i < rawChildren.length; i++) {
10608      var c = rawChildren[i];
10609      if (c.tag) {
10610        if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {
10611          children.push(c);
10612          map[c.key] = c;
10613          (c.data || (c.data = {})).transition = transitionData;
10614        } else if (true) {
10615          var opts = c.componentOptions;
10616          var name_1 = opts ? getComponentName(opts.Ctor.options) || opts.tag || '' : c.tag;
10617          warn$2("<transition-group> children must be keyed: <".concat(name_1, ">"));
10618        }
10619      }
10620    }
10621    if (prevChildren) {
10622      var kept = [];
10623      var removed = [];
10624      for (var i = 0; i < prevChildren.length; i++) {
10625        var c = prevChildren[i];
10626        c.data.transition = transitionData;
10627        // @ts-expect-error .getBoundingClientRect is not typed in Node
10628        c.data.pos = c.elm.getBoundingClientRect();
10629        if (map[c.key]) {
10630          kept.push(c);
10631        } else {
10632          removed.push(c);
10633        }
10634      }
10635      this.kept = h(tag, null, kept);
10636      this.removed = removed;
10637    }
10638    return h(tag, null, children);
10639  },
10640  updated: function () {
10641    var children = this.prevChildren;
10642    var moveClass = this.moveClass || (this.name || 'v') + '-move';
10643    if (!children.length || !this.hasMove(children[0].elm, moveClass)) {
10644      return;
10645    }
10646    // we divide the work into three loops to avoid mixing DOM reads and writes
10647    // in each iteration - which helps prevent layout thrashing.
10648    children.forEach(callPendingCbs);
10649    children.forEach(recordPosition);
10650    children.forEach(applyTranslation);
10651    // force reflow to put everything in position
10652    // assign to this to avoid being removed in tree-shaking
10653    // $flow-disable-line
10654    this._reflow = document.body.offsetHeight;
10655    children.forEach(function (c) {
10656      if (c.data.moved) {
10657        var el_1 = c.elm;
10658        var s = el_1.style;
10659        addTransitionClass(el_1, moveClass);
10660        s.transform = s.WebkitTransform = s.transitionDuration = '';
10661        el_1.addEventListener(transitionEndEvent, el_1._moveCb = function cb(e) {
10662          if (e && e.target !== el_1) {
10663            return;
10664          }
10665          if (!e || /transform$/.test(e.propertyName)) {
10666            el_1.removeEventListener(transitionEndEvent, cb);
10667            el_1._moveCb = null;
10668            removeTransitionClass(el_1, moveClass);
10669          }
10670        });
10671      }
10672    });
10673  },
10674  methods: {
10675    hasMove: function (el, moveClass) {
10676      /* istanbul ignore if */
10677      if (!hasTransition) {
10678        return false;
10679      }
10680      /* istanbul ignore if */
10681      if (this._hasMove) {
10682        return this._hasMove;
10683      }
10684      // Detect whether an element with the move class applied has
10685      // CSS transitions. Since the element may be inside an entering
10686      // transition at this very moment, we make a clone of it and remove
10687      // all other transition classes applied to ensure only the move class
10688      // is applied.
10689      var clone = el.cloneNode();
10690      if (el._transitionClasses) {
10691        el._transitionClasses.forEach(function (cls) {
10692          removeClass(clone, cls);
10693        });
10694      }
10695      addClass(clone, moveClass);
10696      clone.style.display = 'none';
10697      this.$el.appendChild(clone);
10698      var info = getTransitionInfo(clone);
10699      this.$el.removeChild(clone);
10700      return this._hasMove = info.hasTransform;
10701    }
10702  }
10703};
10704function callPendingCbs(c) {
10705  /* istanbul ignore if */
10706  if (c.elm._moveCb) {
10707    c.elm._moveCb();
10708  }
10709  /* istanbul ignore if */
10710  if (c.elm._enterCb) {
10711    c.elm._enterCb();
10712  }
10713}
10714function recordPosition(c) {
10715  c.data.newPos = c.elm.getBoundingClientRect();
10716}
10717function applyTranslation(c) {
10718  var oldPos = c.data.pos;
10719  var newPos = c.data.newPos;
10720  var dx = oldPos.left - newPos.left;
10721  var dy = oldPos.top - newPos.top;
10722  if (dx || dy) {
10723    c.data.moved = true;
10724    var s = c.elm.style;
10725    s.transform = s.WebkitTransform = "translate(".concat(dx, "px,").concat(dy, "px)");
10726    s.transitionDuration = '0s';
10727  }
10728}
10729var platformComponents = {
10730  Transition: Transition,
10731  TransitionGroup: TransitionGroup
10732};
10733
10734// install platform specific utils
10735Vue.config.mustUseProp = mustUseProp;
10736Vue.config.isReservedTag = isReservedTag;
10737Vue.config.isReservedAttr = isReservedAttr;
10738Vue.config.getTagNamespace = getTagNamespace;
10739Vue.config.isUnknownElement = isUnknownElement;
10740// install platform runtime directives & components
10741extend(Vue.options.directives, platformDirectives);
10742extend(Vue.options.components, platformComponents);
10743// install platform patch function
10744Vue.prototype.__patch__ = inBrowser ? patch : noop;
10745// public mount method
10746Vue.prototype.$mount = function (el, hydrating) {
10747  el = el && inBrowser ? query(el) : undefined;
10748  return mountComponent(this, el, hydrating);
10749};
10750// devtools global hook
10751/* istanbul ignore next */
10752if (inBrowser) {
10753  setTimeout(function () {
10754    if (config.devtools) {
10755      if (devtools) {
10756        devtools.emit('init', Vue);
10757      } else if (true) {
10758        // @ts-expect-error
10759        console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\n' + 'https://github.com/vuejs/vue-devtools');
10760      }
10761    }
10762    if ( true && config.productionTip !== false && typeof console !== 'undefined') {
10763      // @ts-expect-error
10764      console[console.info ? 'info' : 'log']("You are running Vue in development mode.\n" + "Make sure to turn on production mode when deploying for production.\n" + "See more tips at https://vuejs.org/guide/deployment.html");
10765    }
10766  }, 0);
10767}
10768var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g;
10769var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g;
10770var buildRegex = cached(function (delimiters) {
10771  var open = delimiters[0].replace(regexEscapeRE, '\\$&');
10772  var close = delimiters[1].replace(regexEscapeRE, '\\$&');
10773  return new RegExp(open + '((?:.|\\n)+?)' + close, 'g');
10774});
10775function parseText(text, delimiters) {
10776  //@ts-expect-error
10777  var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;
10778  if (!tagRE.test(text)) {
10779    return;
10780  }
10781  var tokens = [];
10782  var rawTokens = [];
10783  var lastIndex = tagRE.lastIndex = 0;
10784  var match, index, tokenValue;
10785  while (match = tagRE.exec(text)) {
10786    index = match.index;
10787    // push text token
10788    if (index > lastIndex) {
10789      rawTokens.push(tokenValue = text.slice(lastIndex, index));
10790      tokens.push(JSON.stringify(tokenValue));
10791    }
10792    // tag token
10793    var exp = parseFilters(match[1].trim());
10794    tokens.push("_s(".concat(exp, ")"));
10795    rawTokens.push({
10796      '@binding': exp
10797    });
10798    lastIndex = index + match[0].length;
10799  }
10800  if (lastIndex < text.length) {
10801    rawTokens.push(tokenValue = text.slice(lastIndex));
10802    tokens.push(JSON.stringify(tokenValue));
10803  }
10804  return {
10805    expression: tokens.join('+'),
10806    tokens: rawTokens
10807  };
10808}
10809function transformNode$1(el, options) {
10810  var warn = options.warn || baseWarn;
10811  var staticClass = getAndRemoveAttr(el, 'class');
10812  if ( true && staticClass) {
10813    var res = parseText(staticClass, options.delimiters);
10814    if (res) {
10815      warn("class=\"".concat(staticClass, "\": ") + 'Interpolation inside attributes has been removed. ' + 'Use v-bind or the colon shorthand instead. For example, ' + 'instead of <div class="{{ val }}">, use <div :class="val">.', el.rawAttrsMap['class']);
10816    }
10817  }
10818  if (staticClass) {
10819    el.staticClass = JSON.stringify(staticClass.replace(/\s+/g, ' ').trim());
10820  }
10821  var classBinding = getBindingAttr(el, 'class', false /* getStatic */);
10822  if (classBinding) {
10823    el.classBinding = classBinding;
10824  }
10825}
10826function genData$2(el) {
10827  var data = '';
10828  if (el.staticClass) {
10829    data += "staticClass:".concat(el.staticClass, ",");
10830  }
10831  if (el.classBinding) {
10832    data += "class:".concat(el.classBinding, ",");
10833  }
10834  return data;
10835}
10836var klass = {
10837  staticKeys: ['staticClass'],
10838  transformNode: transformNode$1,
10839  genData: genData$2
10840};
10841function transformNode(el, options) {
10842  var warn = options.warn || baseWarn;
10843  var staticStyle = getAndRemoveAttr(el, 'style');
10844  if (staticStyle) {
10845    /* istanbul ignore if */
10846    if (true) {
10847      var res = parseText(staticStyle, options.delimiters);
10848      if (res) {
10849        warn("style=\"".concat(staticStyle, "\": ") + 'Interpolation inside attributes has been removed. ' + 'Use v-bind or the colon shorthand instead. For example, ' + 'instead of <div style="{{ val }}">, use <div :style="val">.', el.rawAttrsMap['style']);
10850      }
10851    }
10852    el.staticStyle = JSON.stringify(parseStyleText(staticStyle));
10853  }
10854  var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);
10855  if (styleBinding) {
10856    el.styleBinding = styleBinding;
10857  }
10858}
10859function genData$1(el) {
10860  var data = '';
10861  if (el.staticStyle) {
10862    data += "staticStyle:".concat(el.staticStyle, ",");
10863  }
10864  if (el.styleBinding) {
10865    data += "style:(".concat(el.styleBinding, "),");
10866  }
10867  return data;
10868}
10869var style = {
10870  staticKeys: ['staticStyle'],
10871  transformNode: transformNode,
10872  genData: genData$1
10873};
10874var decoder;
10875var he = {
10876  decode: function (html) {
10877    decoder = decoder || document.createElement('div');
10878    decoder.innerHTML = html;
10879    return decoder.textContent;
10880  }
10881};
10882var isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' + 'link,meta,param,source,track,wbr');
10883// Elements that you can, intentionally, leave open
10884// (and which close themselves)
10885var canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source');
10886// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
10887// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
10888var isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' + 'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' + 'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' + 'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' + 'title,tr,track');
10889
10890/**
10891 * Not type-checking this file because it's mostly vendor code.
10892 */
10893// Regular Expressions for parsing tags and attributes
10894var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
10895var dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
10896var ncname = "[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat(unicodeRegExp.source, "]*");
10897var qnameCapture = "((?:".concat(ncname, "\\:)?").concat(ncname, ")");
10898var startTagOpen = new RegExp("^<".concat(qnameCapture));
10899var startTagClose = /^\s*(\/?)>/;
10900var endTag = new RegExp("^<\\/".concat(qnameCapture, "[^>]*>"));
10901var doctype = /^<!DOCTYPE [^>]+>/i;
10902// #7298: escape - to avoid being passed as HTML comment when inlined in page
10903var comment = /^<!\--/;
10904var conditionalComment = /^<!\[/;
10905// Special Elements (can contain anything)
10906var isPlainTextElement = makeMap('script,style,textarea', true);
10907var reCache = {};
10908var decodingMap = {
10909  '&lt;': '<',
10910  '&gt;': '>',
10911  '&quot;': '"',
10912  '&amp;': '&',
10913  '&#10;': '\n',
10914  '&#9;': '\t',
10915  '&#39;': "'"
10916};
10917var encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;
10918var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;
10919// #5992
10920var isIgnoreNewlineTag = makeMap('pre,textarea', true);
10921var shouldIgnoreFirstNewline = function (tag, html) {
10922  return tag && isIgnoreNewlineTag(tag) && html[0] === '\n';
10923};
10924function decodeAttr(value, shouldDecodeNewlines) {
10925  var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;
10926  return value.replace(re, function (match) {
10927    return decodingMap[match];
10928  });
10929}
10930function parseHTML(html, options) {
10931  var stack = [];
10932  var expectHTML = options.expectHTML;
10933  var isUnaryTag = options.isUnaryTag || no;
10934  var canBeLeftOpenTag = options.canBeLeftOpenTag || no;
10935  var index = 0;
10936  var last, lastTag;
10937  var _loop_1 = function () {
10938    last = html;
10939    // Make sure we're not in a plaintext content element like script/style
10940    if (!lastTag || !isPlainTextElement(lastTag)) {
10941      var textEnd = html.indexOf('<');
10942      if (textEnd === 0) {
10943        // Comment:
10944        if (comment.test(html)) {
10945          var commentEnd = html.indexOf('-->');
10946          if (commentEnd >= 0) {
10947            if (options.shouldKeepComment && options.comment) {
10948              options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);
10949            }
10950            advance(commentEnd + 3);
10951            return "continue";
10952          }
10953        }
10954        // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment
10955        if (conditionalComment.test(html)) {
10956          var conditionalEnd = html.indexOf(']>');
10957          if (conditionalEnd >= 0) {
10958            advance(conditionalEnd + 2);
10959            return "continue";
10960          }
10961        }
10962        // Doctype:
10963        var doctypeMatch = html.match(doctype);
10964        if (doctypeMatch) {
10965          advance(doctypeMatch[0].length);
10966          return "continue";
10967        }
10968        // End tag:
10969        var endTagMatch = html.match(endTag);
10970        if (endTagMatch) {
10971          var curIndex = index;
10972          advance(endTagMatch[0].length);
10973          parseEndTag(endTagMatch[1], curIndex, index);
10974          return "continue";
10975        }
10976        // Start tag:
10977        var startTagMatch = parseStartTag();
10978        if (startTagMatch) {
10979          handleStartTag(startTagMatch);
10980          if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {
10981            advance(1);
10982          }
10983          return "continue";
10984        }
10985      }
10986      var text = void 0,
10987        rest = void 0,
10988        next = void 0;
10989      if (textEnd >= 0) {
10990        rest = html.slice(textEnd);
10991        while (!endTag.test(rest) && !startTagOpen.test(rest) && !comment.test(rest) && !conditionalComment.test(rest)) {
10992          // < in plain text, be forgiving and treat it as text
10993          next = rest.indexOf('<', 1);
10994          if (next < 0) break;
10995          textEnd += next;
10996          rest = html.slice(textEnd);
10997        }
10998        text = html.substring(0, textEnd);
10999      }
11000      if (textEnd < 0) {
11001        text = html;
11002      }
11003      if (text) {
11004        advance(text.length);
11005      }
11006      if (options.chars && text) {
11007        options.chars(text, index - text.length, index);
11008      }
11009    } else {
11010      var endTagLength_1 = 0;
11011      var stackedTag_1 = lastTag.toLowerCase();
11012      var reStackedTag = reCache[stackedTag_1] || (reCache[stackedTag_1] = new RegExp('([\\s\\S]*?)(</' + stackedTag_1 + '[^>]*>)', 'i'));
11013      var rest = html.replace(reStackedTag, function (all, text, endTag) {
11014        endTagLength_1 = endTag.length;
11015        if (!isPlainTextElement(stackedTag_1) && stackedTag_1 !== 'noscript') {
11016          text = text.replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298
11017          .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1');
11018        }
11019        if (shouldIgnoreFirstNewline(stackedTag_1, text)) {
11020          text = text.slice(1);
11021        }
11022        if (options.chars) {
11023          options.chars(text);
11024        }
11025        return '';
11026      });
11027      index += html.length - rest.length;
11028      html = rest;
11029      parseEndTag(stackedTag_1, index - endTagLength_1, index);
11030    }
11031    if (html === last) {
11032      options.chars && options.chars(html);
11033      if ( true && !stack.length && options.warn) {
11034        options.warn("Mal-formatted tag at end of template: \"".concat(html, "\""), {
11035          start: index + html.length
11036        });
11037      }
11038      return "break";
11039    }
11040  };
11041  while (html) {
11042    var state_1 = _loop_1();
11043    if (state_1 === "break") break;
11044  }
11045  // Clean up any remaining tags
11046  parseEndTag();
11047  function advance(n) {
11048    index += n;
11049    html = html.substring(n);
11050  }
11051  function parseStartTag() {
11052    var start = html.match(startTagOpen);
11053    if (start) {
11054      var match = {
11055        tagName: start[1],
11056        attrs: [],
11057        start: index
11058      };
11059      advance(start[0].length);
11060      var end = void 0,
11061        attr = void 0;
11062      while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {
11063        attr.start = index;
11064        advance(attr[0].length);
11065        attr.end = index;
11066        match.attrs.push(attr);
11067      }
11068      if (end) {
11069        match.unarySlash = end[1];
11070        advance(end[0].length);
11071        match.end = index;
11072        return match;
11073      }
11074    }
11075  }
11076  function handleStartTag(match) {
11077    var tagName = match.tagName;
11078    var unarySlash = match.unarySlash;
11079    if (expectHTML) {
11080      if (lastTag === 'p' && isNonPhrasingTag(tagName)) {
11081        parseEndTag(lastTag);
11082      }
11083      if (canBeLeftOpenTag(tagName) && lastTag === tagName) {
11084        parseEndTag(tagName);
11085      }
11086    }
11087    var unary = isUnaryTag(tagName) || !!unarySlash;
11088    var l = match.attrs.length;
11089    var attrs = new Array(l);
11090    for (var i = 0; i < l; i++) {
11091      var args = match.attrs[i];
11092      var value = args[3] || args[4] || args[5] || '';
11093      var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href' ? options.shouldDecodeNewlinesForHref : options.shouldDecodeNewlines;
11094      attrs[i] = {
11095        name: args[1],
11096        value: decodeAttr(value, shouldDecodeNewlines)
11097      };
11098      if ( true && options.outputSourceRange) {
11099        attrs[i].start = args.start + args[0].match(/^\s*/).length;
11100        attrs[i].end = args.end;
11101      }
11102    }
11103    if (!unary) {
11104      stack.push({
11105        tag: tagName,
11106        lowerCasedTag: tagName.toLowerCase(),
11107        attrs: attrs,
11108        start: match.start,
11109        end: match.end
11110      });
11111      lastTag = tagName;
11112    }
11113    if (options.start) {
11114      options.start(tagName, attrs, unary, match.start, match.end);
11115    }
11116  }
11117  function parseEndTag(tagName, start, end) {
11118    var pos, lowerCasedTagName;
11119    if (start == null) start = index;
11120    if (end == null) end = index;
11121    // Find the closest opened tag of the same type
11122    if (tagName) {
11123      lowerCasedTagName = tagName.toLowerCase();
11124      for (pos = stack.length - 1; pos >= 0; pos--) {
11125        if (stack[pos].lowerCasedTag === lowerCasedTagName) {
11126          break;
11127        }
11128      }
11129    } else {
11130      // If no tag name is provided, clean shop
11131      pos = 0;
11132    }
11133    if (pos >= 0) {
11134      // Close all the open elements, up the stack
11135      for (var i = stack.length - 1; i >= pos; i--) {
11136        if ( true && (i > pos || !tagName) && options.warn) {
11137          options.warn("tag <".concat(stack[i].tag, "> has no matching end tag."), {
11138            start: stack[i].start,
11139            end: stack[i].end
11140          });
11141        }
11142        if (options.end) {
11143          options.end(stack[i].tag, start, end);
11144        }
11145      }
11146      // Remove the open elements from the stack
11147      stack.length = pos;
11148      lastTag = pos && stack[pos - 1].tag;
11149    } else if (lowerCasedTagName === 'br') {
11150      if (options.start) {
11151        options.start(tagName, [], true, start, end);
11152      }
11153    } else if (lowerCasedTagName === 'p') {
11154      if (options.start) {
11155        options.start(tagName, [], false, start, end);
11156      }
11157      if (options.end) {
11158        options.end(tagName, start, end);
11159      }
11160    }
11161  }
11162}
11163var onRE = /^@|^v-on:/;
11164var dirRE = /^v-|^@|^:|^#/;
11165var forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/;
11166var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
11167var stripParensRE = /^\(|\)$/g;
11168var dynamicArgRE = /^\[.*\]$/;
11169var argRE = /:(.*)$/;
11170var bindRE = /^:|^\.|^v-bind:/;
11171var modifierRE = /\.[^.\]]+(?=[^\]]*$)/g;
11172var slotRE = /^v-slot(:|$)|^#/;
11173var lineBreakRE = /[\r\n]/;
11174var whitespaceRE = /[ \f\t\r\n]+/g;
11175var invalidAttributeRE = /[\s"'<>\/=]/;
11176var decodeHTMLCached = cached(he.decode);
11177var emptySlotScopeToken = "_empty_";
11178// configurable state
11179var warn;
11180var delimiters;
11181var transforms;
11182var preTransforms;
11183var postTransforms;
11184var platformIsPreTag;
11185var platformMustUseProp;
11186var platformGetTagNamespace;
11187var maybeComponent;
11188function createASTElement(tag, attrs, parent) {
11189  return {
11190    type: 1,
11191    tag: tag,
11192    attrsList: attrs,
11193    attrsMap: makeAttrsMap(attrs),
11194    rawAttrsMap: {},
11195    parent: parent,
11196    children: []
11197  };
11198}
11199/**
11200 * Convert HTML string to AST.
11201 */
11202function parse(template, options) {
11203  warn = options.warn || baseWarn;
11204  platformIsPreTag = options.isPreTag || no;
11205  platformMustUseProp = options.mustUseProp || no;
11206  platformGetTagNamespace = options.getTagNamespace || no;
11207  var isReservedTag = options.isReservedTag || no;
11208  maybeComponent = function (el) {
11209    return !!(el.component || el.attrsMap[':is'] || el.attrsMap['v-bind:is'] || !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag)));
11210  };
11211  transforms = pluckModuleFunction(options.modules, 'transformNode');
11212  preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');
11213  postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');
11214  delimiters = options.delimiters;
11215  var stack = [];
11216  var preserveWhitespace = options.preserveWhitespace !== false;
11217  var whitespaceOption = options.whitespace;
11218  var root;
11219  var currentParent;
11220  var inVPre = false;
11221  var inPre = false;
11222  var warned = false;
11223  function warnOnce(msg, range) {
11224    if (!warned) {
11225      warned = true;
11226      warn(msg, range);
11227    }
11228  }
11229  function closeElement(element) {
11230    trimEndingWhitespace(element);
11231    if (!inVPre && !element.processed) {
11232      element = processElement(element, options);
11233    }
11234    // tree management
11235    if (!stack.length && element !== root) {
11236      // allow root elements with v-if, v-else-if and v-else
11237      if (root.if && (element.elseif || element.else)) {
11238        if (true) {
11239          checkRootConstraints(element);
11240        }
11241        addIfCondition(root, {
11242          exp: element.elseif,
11243          block: element
11244        });
11245      } else if (true) {
11246        warnOnce("Component template should contain exactly one root element. " + "If you are using v-if on multiple elements, " + "use v-else-if to chain them instead.", {
11247          start: element.start
11248        });
11249      }
11250    }
11251    if (currentParent && !element.forbidden) {
11252      if (element.elseif || element.else) {
11253        processIfConditions(element, currentParent);
11254      } else {
11255        if (element.slotScope) {
11256          // scoped slot
11257          // keep it in the children list so that v-else(-if) conditions can
11258          // find it as the prev node.
11259          var name_1 = element.slotTarget || '"default"';
11260          (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name_1] = element;
11261        }
11262        currentParent.children.push(element);
11263        element.parent = currentParent;
11264      }
11265    }
11266    // final children cleanup
11267    // filter out scoped slots
11268    element.children = element.children.filter(function (c) {
11269      return !c.slotScope;
11270    });
11271    // remove trailing whitespace node again
11272    trimEndingWhitespace(element);
11273    // check pre state
11274    if (element.pre) {
11275      inVPre = false;
11276    }
11277    if (platformIsPreTag(element.tag)) {
11278      inPre = false;
11279    }
11280    // apply post-transforms
11281    for (var i = 0; i < postTransforms.length; i++) {
11282      postTransforms[i](element, options);
11283    }
11284  }
11285  function trimEndingWhitespace(el) {
11286    // remove trailing whitespace node
11287    if (!inPre) {
11288      var lastNode = void 0;
11289      while ((lastNode = el.children[el.children.length - 1]) && lastNode.type === 3 && lastNode.text === ' ') {
11290        el.children.pop();
11291      }
11292    }
11293  }
11294  function checkRootConstraints(el) {
11295    if (el.tag === 'slot' || el.tag === 'template') {
11296      warnOnce("Cannot use <".concat(el.tag, "> as component root element because it may ") + 'contain multiple nodes.', {
11297        start: el.start
11298      });
11299    }
11300    if (el.attrsMap.hasOwnProperty('v-for')) {
11301      warnOnce('Cannot use v-for on stateful component root element because ' + 'it renders multiple elements.', el.rawAttrsMap['v-for']);
11302    }
11303  }
11304  parseHTML(template, {
11305    warn: warn,
11306    expectHTML: options.expectHTML,
11307    isUnaryTag: options.isUnaryTag,
11308    canBeLeftOpenTag: options.canBeLeftOpenTag,
11309    shouldDecodeNewlines: options.shouldDecodeNewlines,
11310    shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,
11311    shouldKeepComment: options.comments,
11312    outputSourceRange: options.outputSourceRange,
11313    start: function (tag, attrs, unary, start, end) {
11314      // check namespace.
11315      // inherit parent ns if there is one
11316      var ns = currentParent && currentParent.ns || platformGetTagNamespace(tag);
11317      // handle IE svg bug
11318      /* istanbul ignore if */
11319      if (isIE && ns === 'svg') {
11320        attrs = guardIESVGBug(attrs);
11321      }
11322      var element = createASTElement(tag, attrs, currentParent);
11323      if (ns) {
11324        element.ns = ns;
11325      }
11326      if (true) {
11327        if (options.outputSourceRange) {
11328          element.start = start;
11329          element.end = end;
11330          element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {
11331            cumulated[attr.name] = attr;
11332            return cumulated;
11333          }, {});
11334        }
11335        attrs.forEach(function (attr) {
11336          if (invalidAttributeRE.test(attr.name)) {
11337            warn("Invalid dynamic argument expression: attribute names cannot contain " + "spaces, quotes, <, >, / or =.", options.outputSourceRange ? {
11338              start: attr.start + attr.name.indexOf("["),
11339              end: attr.start + attr.name.length
11340            } : undefined);
11341          }
11342        });
11343      }
11344      if (isForbiddenTag(element) && !isServerRendering()) {
11345        element.forbidden = true;
11346         true && warn('Templates should only be responsible for mapping the state to the ' + 'UI. Avoid placing tags with side-effects in your templates, such as ' + "<".concat(tag, ">") + ', as they will not be parsed.', {
11347          start: element.start
11348        });
11349      }
11350      // apply pre-transforms
11351      for (var i = 0; i < preTransforms.length; i++) {
11352        element = preTransforms[i](element, options) || element;
11353      }
11354      if (!inVPre) {
11355        processPre(element);
11356        if (element.pre) {
11357          inVPre = true;
11358        }
11359      }
11360      if (platformIsPreTag(element.tag)) {
11361        inPre = true;
11362      }
11363      if (inVPre) {
11364        processRawAttrs(element);
11365      } else if (!element.processed) {
11366        // structural directives
11367        processFor(element);
11368        processIf(element);
11369        processOnce(element);
11370      }
11371      if (!root) {
11372        root = element;
11373        if (true) {
11374          checkRootConstraints(root);
11375        }
11376      }
11377      if (!unary) {
11378        currentParent = element;
11379        stack.push(element);
11380      } else {
11381        closeElement(element);
11382      }
11383    },
11384    end: function (tag, start, end) {
11385      var element = stack[stack.length - 1];
11386      // pop stack
11387      stack.length -= 1;
11388      currentParent = stack[stack.length - 1];
11389      if ( true && options.outputSourceRange) {
11390        element.end = end;
11391      }
11392      closeElement(element);
11393    },
11394    chars: function (text, start, end) {
11395      if (!currentParent) {
11396        if (true) {
11397          if (text === template) {
11398            warnOnce('Component template requires a root element, rather than just text.', {
11399              start: start
11400            });
11401          } else if (text = text.trim()) {
11402            warnOnce("text \"".concat(text, "\" outside root element will be ignored."), {
11403              start: start
11404            });
11405          }
11406        }
11407        return;
11408      }
11409      // IE textarea placeholder bug
11410      /* istanbul ignore if */
11411      if (isIE && currentParent.tag === 'textarea' && currentParent.attrsMap.placeholder === text) {
11412        return;
11413      }
11414      var children = currentParent.children;
11415      if (inPre || text.trim()) {
11416        text = isTextTag(currentParent) ? text : decodeHTMLCached(text);
11417      } else if (!children.length) {
11418        // remove the whitespace-only node right after an opening tag
11419        text = '';
11420      } else if (whitespaceOption) {
11421        if (whitespaceOption === 'condense') {
11422          // in condense mode, remove the whitespace node if it contains
11423          // line break, otherwise condense to a single space
11424          text = lineBreakRE.test(text) ? '' : ' ';
11425        } else {
11426          text = ' ';
11427        }
11428      } else {
11429        text = preserveWhitespace ? ' ' : '';
11430      }
11431      if (text) {
11432        if (!inPre && whitespaceOption === 'condense') {
11433          // condense consecutive whitespaces into single space
11434          text = text.replace(whitespaceRE, ' ');
11435        }
11436        var res = void 0;
11437        var child = void 0;
11438        if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {
11439          child = {
11440            type: 2,
11441            expression: res.expression,
11442            tokens: res.tokens,
11443            text: text
11444          };
11445        } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {
11446          child = {
11447            type: 3,
11448            text: text
11449          };
11450        }
11451        if (child) {
11452          if ( true && options.outputSourceRange) {
11453            child.start = start;
11454            child.end = end;
11455          }
11456          children.push(child);
11457        }
11458      }
11459    },
11460    comment: function (text, start, end) {
11461      // adding anything as a sibling to the root node is forbidden
11462      // comments should still be allowed, but ignored
11463      if (currentParent) {
11464        var child = {
11465          type: 3,
11466          text: text,
11467          isComment: true
11468        };
11469        if ( true && options.outputSourceRange) {
11470          child.start = start;
11471          child.end = end;
11472        }
11473        currentParent.children.push(child);
11474      }
11475    }
11476  });
11477  return root;
11478}
11479function processPre(el) {
11480  if (getAndRemoveAttr(el, 'v-pre') != null) {
11481    el.pre = true;
11482  }
11483}
11484function processRawAttrs(el) {
11485  var list = el.attrsList;
11486  var len = list.length;
11487  if (len) {
11488    var attrs = el.attrs = new Array(len);
11489    for (var i = 0; i < len; i++) {
11490      attrs[i] = {
11491        name: list[i].name,
11492        value: JSON.stringify(list[i].value)
11493      };
11494      if (list[i].start != null) {
11495        attrs[i].start = list[i].start;
11496        attrs[i].end = list[i].end;
11497      }
11498    }
11499  } else if (!el.pre) {
11500    // non root node in pre blocks with no attributes
11501    el.plain = true;
11502  }
11503}
11504function processElement(element, options) {
11505  processKey(element);
11506  // determine whether this is a plain element after
11507  // removing structural attributes
11508  element.plain = !element.key && !element.scopedSlots && !element.attrsList.length;
11509  processRef(element);
11510  processSlotContent(element);
11511  processSlotOutlet(element);
11512  processComponent(element);
11513  for (var i = 0; i < transforms.length; i++) {
11514    element = transforms[i](element, options) || element;
11515  }
11516  processAttrs(element);
11517  return element;
11518}
11519function processKey(el) {
11520  var exp = getBindingAttr(el, 'key');
11521  if (exp) {
11522    if (true) {
11523      if (el.tag === 'template') {
11524        warn("<template> cannot be keyed. Place the key on real elements instead.", getRawBindingAttr(el, 'key'));
11525      }
11526      if (el.for) {
11527        var iterator = el.iterator2 || el.iterator1;
11528        var parent_1 = el.parent;
11529        if (iterator && iterator === exp && parent_1 && parent_1.tag === 'transition-group') {
11530          warn("Do not use v-for index as key on <transition-group> children, " + "this is the same as not using keys.", getRawBindingAttr(el, 'key'), true /* tip */);
11531        }
11532      }
11533    }
11534    el.key = exp;
11535  }
11536}
11537function processRef(el) {
11538  var ref = getBindingAttr(el, 'ref');
11539  if (ref) {
11540    el.ref = ref;
11541    el.refInFor = checkInFor(el);
11542  }
11543}
11544function processFor(el) {
11545  var exp;
11546  if (exp = getAndRemoveAttr(el, 'v-for')) {
11547    var res = parseFor(exp);
11548    if (res) {
11549      extend(el, res);
11550    } else if (true) {
11551      warn("Invalid v-for expression: ".concat(exp), el.rawAttrsMap['v-for']);
11552    }
11553  }
11554}
11555function parseFor(exp) {
11556  var inMatch = exp.match(forAliasRE);
11557  if (!inMatch) return;
11558  var res = {};
11559  res.for = inMatch[2].trim();
11560  var alias = inMatch[1].trim().replace(stripParensRE, '');
11561  var iteratorMatch = alias.match(forIteratorRE);
11562  if (iteratorMatch) {
11563    res.alias = alias.replace(forIteratorRE, '').trim();
11564    res.iterator1 = iteratorMatch[1].trim();
11565    if (iteratorMatch[2]) {
11566      res.iterator2 = iteratorMatch[2].trim();
11567    }
11568  } else {
11569    res.alias = alias;
11570  }
11571  return res;
11572}
11573function processIf(el) {
11574  var exp = getAndRemoveAttr(el, 'v-if');
11575  if (exp) {
11576    el.if = exp;
11577    addIfCondition(el, {
11578      exp: exp,
11579      block: el
11580    });
11581  } else {
11582    if (getAndRemoveAttr(el, 'v-else') != null) {
11583      el.else = true;
11584    }
11585    var elseif = getAndRemoveAttr(el, 'v-else-if');
11586    if (elseif) {
11587      el.elseif = elseif;
11588    }
11589  }
11590}
11591function processIfConditions(el, parent) {
11592  var prev = findPrevElement(parent.children);
11593  if (prev && prev.if) {
11594    addIfCondition(prev, {
11595      exp: el.elseif,
11596      block: el
11597    });
11598  } else if (true) {
11599    warn("v-".concat(el.elseif ? 'else-if="' + el.elseif + '"' : 'else', " ") + "used on element <".concat(el.tag, "> without corresponding v-if."), el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']);
11600  }
11601}
11602function findPrevElement(children) {
11603  var i = children.length;
11604  while (i--) {
11605    if (children[i].type === 1) {
11606      return children[i];
11607    } else {
11608      if ( true && children[i].text !== ' ') {
11609        warn("text \"".concat(children[i].text.trim(), "\" between v-if and v-else(-if) ") + "will be ignored.", children[i]);
11610      }
11611      children.pop();
11612    }
11613  }
11614}
11615function addIfCondition(el, condition) {
11616  if (!el.ifConditions) {
11617    el.ifConditions = [];
11618  }
11619  el.ifConditions.push(condition);
11620}
11621function processOnce(el) {
11622  var once = getAndRemoveAttr(el, 'v-once');
11623  if (once != null) {
11624    el.once = true;
11625  }
11626}
11627// handle content being passed to a component as slot,
11628// e.g. <template slot="xxx">, <div slot-scope="xxx">
11629function processSlotContent(el) {
11630  var slotScope;
11631  if (el.tag === 'template') {
11632    slotScope = getAndRemoveAttr(el, 'scope');
11633    /* istanbul ignore if */
11634    if ( true && slotScope) {
11635      warn("the \"scope\" attribute for scoped slots have been deprecated and " + "replaced by \"slot-scope\" since 2.5. The new \"slot-scope\" attribute " + "can also be used on plain elements in addition to <template> to " + "denote scoped slots.", el.rawAttrsMap['scope'], true);
11636    }
11637    el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');
11638  } else if (slotScope = getAndRemoveAttr(el, 'slot-scope')) {
11639    /* istanbul ignore if */
11640    if ( true && el.attrsMap['v-for']) {
11641      warn("Ambiguous combined usage of slot-scope and v-for on <".concat(el.tag, "> ") + "(v-for takes higher priority). Use a wrapper <template> for the " + "scoped slot to make it clearer.", el.rawAttrsMap['slot-scope'], true);
11642    }
11643    el.slotScope = slotScope;
11644  }
11645  // slot="xxx"
11646  var slotTarget = getBindingAttr(el, 'slot');
11647  if (slotTarget) {
11648    el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget;
11649    el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);
11650    // preserve slot as an attribute for native shadow DOM compat
11651    // only for non-scoped slots.
11652    if (el.tag !== 'template' && !el.slotScope) {
11653      addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));
11654    }
11655  }
11656  // 2.6 v-slot syntax
11657  {
11658    if (el.tag === 'template') {
11659      // v-slot on <template>
11660      var slotBinding = getAndRemoveAttrByRegex(el, slotRE);
11661      if (slotBinding) {
11662        if (true) {
11663          if (el.slotTarget || el.slotScope) {
11664            warn("Unexpected mixed usage of different slot syntaxes.", el);
11665          }
11666          if (el.parent && !maybeComponent(el.parent)) {
11667            warn("<template v-slot> can only appear at the root level inside " + "the receiving component", el);
11668          }
11669        }
11670        var _a = getSlotName(slotBinding),
11671          name_2 = _a.name,
11672          dynamic = _a.dynamic;
11673        el.slotTarget = name_2;
11674        el.slotTargetDynamic = dynamic;
11675        el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf
11676      }
11677    } else {
11678      // v-slot on component, denotes default slot
11679      var slotBinding = getAndRemoveAttrByRegex(el, slotRE);
11680      if (slotBinding) {
11681        if (true) {
11682          if (!maybeComponent(el)) {
11683            warn("v-slot can only be used on components or <template>.", slotBinding);
11684          }
11685          if (el.slotScope || el.slotTarget) {
11686            warn("Unexpected mixed usage of different slot syntaxes.", el);
11687          }
11688          if (el.scopedSlots) {
11689            warn("To avoid scope ambiguity, the default slot should also use " + "<template> syntax when there are other named slots.", slotBinding);
11690          }
11691        }
11692        // add the component's children to its default slot
11693        var slots = el.scopedSlots || (el.scopedSlots = {});
11694        var _b = getSlotName(slotBinding),
11695          name_3 = _b.name,
11696          dynamic = _b.dynamic;
11697        var slotContainer_1 = slots[name_3] = createASTElement('template', [], el);
11698        slotContainer_1.slotTarget = name_3;
11699        slotContainer_1.slotTargetDynamic = dynamic;
11700        slotContainer_1.children = el.children.filter(function (c) {
11701          if (!c.slotScope) {
11702            c.parent = slotContainer_1;
11703            return true;
11704          }
11705        });
11706        slotContainer_1.slotScope = slotBinding.value || emptySlotScopeToken;
11707        // remove children as they are returned from scopedSlots now
11708        el.children = [];
11709        // mark el non-plain so data gets generated
11710        el.plain = false;
11711      }
11712    }
11713  }
11714}
11715function getSlotName(binding) {
11716  var name = binding.name.replace(slotRE, '');
11717  if (!name) {
11718    if (binding.name[0] !== '#') {
11719      name = 'default';
11720    } else if (true) {
11721      warn("v-slot shorthand syntax requires a slot name.", binding);
11722    }
11723  }
11724  return dynamicArgRE.test(name) ?
11725  // dynamic [name]
11726  {
11727    name: name.slice(1, -1),
11728    dynamic: true
11729  } :
11730  // static name
11731  {
11732    name: "\"".concat(name, "\""),
11733    dynamic: false
11734  };
11735}
11736// handle <slot/> outlets
11737function processSlotOutlet(el) {
11738  if (el.tag === 'slot') {
11739    el.slotName = getBindingAttr(el, 'name');
11740    if ( true && el.key) {
11741      warn("`key` does not work on <slot> because slots are abstract outlets " + "and can possibly expand into multiple elements. " + "Use the key on a wrapping element instead.", getRawBindingAttr(el, 'key'));
11742    }
11743  }
11744}
11745function processComponent(el) {
11746  var binding;
11747  if (binding = getBindingAttr(el, 'is')) {
11748    el.component = binding;
11749  }
11750  if (getAndRemoveAttr(el, 'inline-template') != null) {
11751    el.inlineTemplate = true;
11752  }
11753}
11754function processAttrs(el) {
11755  var list = el.attrsList;
11756  var i, l, name, rawName, value, modifiers, syncGen, isDynamic;
11757  for (i = 0, l = list.length; i < l; i++) {
11758    name = rawName = list[i].name;
11759    value = list[i].value;
11760    if (dirRE.test(name)) {
11761      // mark element as dynamic
11762      el.hasBindings = true;
11763      // modifiers
11764      modifiers = parseModifiers(name.replace(dirRE, ''));
11765      // support .foo shorthand syntax for the .prop modifier
11766      if (modifiers) {
11767        name = name.replace(modifierRE, '');
11768      }
11769      if (bindRE.test(name)) {
11770        // v-bind
11771        name = name.replace(bindRE, '');
11772        value = parseFilters(value);
11773        isDynamic = dynamicArgRE.test(name);
11774        if (isDynamic) {
11775          name = name.slice(1, -1);
11776        }
11777        if ( true && value.trim().length === 0) {
11778          warn("The value for a v-bind expression cannot be empty. Found in \"v-bind:".concat(name, "\""));
11779        }
11780        if (modifiers) {
11781          if (modifiers.prop && !isDynamic) {
11782            name = camelize(name);
11783            if (name === 'innerHtml') name = 'innerHTML';
11784          }
11785          if (modifiers.camel && !isDynamic) {
11786            name = camelize(name);
11787          }
11788          if (modifiers.sync) {
11789            syncGen = genAssignmentCode(value, "$event");
11790            if (!isDynamic) {
11791              addHandler(el, "update:".concat(camelize(name)), syncGen, null, false, warn, list[i]);
11792              if (hyphenate(name) !== camelize(name)) {
11793                addHandler(el, "update:".concat(hyphenate(name)), syncGen, null, false, warn, list[i]);
11794              }
11795            } else {
11796              // handler w/ dynamic event name
11797              addHandler(el, "\"update:\"+(".concat(name, ")"), syncGen, null, false, warn, list[i], true // dynamic
11798              );
11799            }
11800          }
11801        }
11802        if (modifiers && modifiers.prop || !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)) {
11803          addProp(el, name, value, list[i], isDynamic);
11804        } else {
11805          addAttr(el, name, value, list[i], isDynamic);
11806        }
11807      } else if (onRE.test(name)) {
11808        // v-on
11809        name = name.replace(onRE, '');
11810        isDynamic = dynamicArgRE.test(name);
11811        if (isDynamic) {
11812          name = name.slice(1, -1);
11813        }
11814        addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic);
11815      } else {
11816        // normal directives
11817        name = name.replace(dirRE, '');
11818        // parse arg
11819        var argMatch = name.match(argRE);
11820        var arg = argMatch && argMatch[1];
11821        isDynamic = false;
11822        if (arg) {
11823          name = name.slice(0, -(arg.length + 1));
11824          if (dynamicArgRE.test(arg)) {
11825            arg = arg.slice(1, -1);
11826            isDynamic = true;
11827          }
11828        }
11829        addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);
11830        if ( true && name === 'model') {
11831          checkForAliasModel(el, value);
11832        }
11833      }
11834    } else {
11835      // literal attribute
11836      if (true) {
11837        var res = parseText(value, delimiters);
11838        if (res) {
11839          warn("".concat(name, "=\"").concat(value, "\": ") + 'Interpolation inside attributes has been removed. ' + 'Use v-bind or the colon shorthand instead. For example, ' + 'instead of <div id="{{ val }}">, use <div :id="val">.', list[i]);
11840        }
11841      }
11842      addAttr(el, name, JSON.stringify(value), list[i]);
11843      // #6887 firefox doesn't update muted state if set via attribute
11844      // even immediately after element creation
11845      if (!el.component && name === 'muted' && platformMustUseProp(el.tag, el.attrsMap.type, name)) {
11846        addProp(el, name, 'true', list[i]);
11847      }
11848    }
11849  }
11850}
11851function checkInFor(el) {
11852  var parent = el;
11853  while (parent) {
11854    if (parent.for !== undefined) {
11855      return true;
11856    }
11857    parent = parent.parent;
11858  }
11859  return false;
11860}
11861function parseModifiers(name) {
11862  var match = name.match(modifierRE);
11863  if (match) {
11864    var ret_1 = {};
11865    match.forEach(function (m) {
11866      ret_1[m.slice(1)] = true;
11867    });
11868    return ret_1;
11869  }
11870}
11871function makeAttrsMap(attrs) {
11872  var map = {};
11873  for (var i = 0, l = attrs.length; i < l; i++) {
11874    if ( true && map[attrs[i].name] && !isIE && !isEdge) {
11875      warn('duplicate attribute: ' + attrs[i].name, attrs[i]);
11876    }
11877    map[attrs[i].name] = attrs[i].value;
11878  }
11879  return map;
11880}
11881// for script (e.g. type="x/template") or style, do not decode content
11882function isTextTag(el) {
11883  return el.tag === 'script' || el.tag === 'style';
11884}
11885function isForbiddenTag(el) {
11886  return el.tag === 'style' || el.tag === 'script' && (!el.attrsMap.type || el.attrsMap.type === 'text/javascript');
11887}
11888var ieNSBug = /^xmlns:NS\d+/;
11889var ieNSPrefix = /^NS\d+:/;
11890/* istanbul ignore next */
11891function guardIESVGBug(attrs) {
11892  var res = [];
11893  for (var i = 0; i < attrs.length; i++) {
11894    var attr = attrs[i];
11895    if (!ieNSBug.test(attr.name)) {
11896      attr.name = attr.name.replace(ieNSPrefix, '');
11897      res.push(attr);
11898    }
11899  }
11900  return res;
11901}
11902function checkForAliasModel(el, value) {
11903  var _el = el;
11904  while (_el) {
11905    if (_el.for && _el.alias === value) {
11906      warn("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") + "You are binding v-model directly to a v-for iteration alias. " + "This will not be able to modify the v-for source array because " + "writing to the alias is like modifying a function local variable. " + "Consider using an array of objects and use v-model on an object property instead.", el.rawAttrsMap['v-model']);
11907    }
11908    _el = _el.parent;
11909  }
11910}
11911
11912/**
11913 * Expand input[v-model] with dynamic type bindings into v-if-else chains
11914 * Turn this:
11915 *   <input v-model="data[type]" :type="type">
11916 * into this:
11917 *   <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]">
11918 *   <input v-else-if="type === 'radio'" type="radio" v-model="data[type]">
11919 *   <input v-else :type="type" v-model="data[type]">
11920 */
11921function preTransformNode(el, options) {
11922  if (el.tag === 'input') {
11923    var map = el.attrsMap;
11924    if (!map['v-model']) {
11925      return;
11926    }
11927    var typeBinding = void 0;
11928    if (map[':type'] || map['v-bind:type']) {
11929      typeBinding = getBindingAttr(el, 'type');
11930    }
11931    if (!map.type && !typeBinding && map['v-bind']) {
11932      typeBinding = "(".concat(map['v-bind'], ").type");
11933    }
11934    if (typeBinding) {
11935      var ifCondition = getAndRemoveAttr(el, 'v-if', true);
11936      var ifConditionExtra = ifCondition ? "&&(".concat(ifCondition, ")") : "";
11937      var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;
11938      var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);
11939      // 1. checkbox
11940      var branch0 = cloneASTElement(el);
11941      // process for on the main node
11942      processFor(branch0);
11943      addRawAttr(branch0, 'type', 'checkbox');
11944      processElement(branch0, options);
11945      branch0.processed = true; // prevent it from double-processed
11946      branch0.if = "(".concat(typeBinding, ")==='checkbox'") + ifConditionExtra;
11947      addIfCondition(branch0, {
11948        exp: branch0.if,
11949        block: branch0
11950      });
11951      // 2. add radio else-if condition
11952      var branch1 = cloneASTElement(el);
11953      getAndRemoveAttr(branch1, 'v-for', true);
11954      addRawAttr(branch1, 'type', 'radio');
11955      processElement(branch1, options);
11956      addIfCondition(branch0, {
11957        exp: "(".concat(typeBinding, ")==='radio'") + ifConditionExtra,
11958        block: branch1
11959      });
11960      // 3. other
11961      var branch2 = cloneASTElement(el);
11962      getAndRemoveAttr(branch2, 'v-for', true);
11963      addRawAttr(branch2, ':type', typeBinding);
11964      processElement(branch2, options);
11965      addIfCondition(branch0, {
11966        exp: ifCondition,
11967        block: branch2
11968      });
11969      if (hasElse) {
11970        branch0.else = true;
11971      } else if (elseIfCondition) {
11972        branch0.elseif = elseIfCondition;
11973      }
11974      return branch0;
11975    }
11976  }
11977}
11978function cloneASTElement(el) {
11979  return createASTElement(el.tag, el.attrsList.slice(), el.parent);
11980}
11981var model = {
11982  preTransformNode: preTransformNode
11983};
11984var modules = [klass, style, model];
11985function text(el, dir) {
11986  if (dir.value) {
11987    addProp(el, 'textContent', "_s(".concat(dir.value, ")"), dir);
11988  }
11989}
11990function html(el, dir) {
11991  if (dir.value) {
11992    addProp(el, 'innerHTML', "_s(".concat(dir.value, ")"), dir);
11993  }
11994}
11995var directives = {
11996  model: model$1,
11997  text: text,
11998  html: html
11999};
12000var baseOptions = {
12001  expectHTML: true,
12002  modules: modules,
12003  directives: directives,
12004  isPreTag: isPreTag,
12005  isUnaryTag: isUnaryTag,
12006  mustUseProp: mustUseProp,
12007  canBeLeftOpenTag: canBeLeftOpenTag,
12008  isReservedTag: isReservedTag,
12009  getTagNamespace: getTagNamespace,
12010  staticKeys: genStaticKeys$1(modules)
12011};
12012var isStaticKey;
12013var isPlatformReservedTag;
12014var genStaticKeysCached = cached(genStaticKeys);
12015/**
12016 * Goal of the optimizer: walk the generated template AST tree
12017 * and detect sub-trees that are purely static, i.e. parts of
12018 * the DOM that never needs to change.
12019 *
12020 * Once we detect these sub-trees, we can:
12021 *
12022 * 1. Hoist them into constants, so that we no longer need to
12023 *    create fresh nodes for them on each re-render;
12024 * 2. Completely skip them in the patching process.
12025 */
12026function optimize(root, options) {
12027  if (!root) return;
12028  isStaticKey = genStaticKeysCached(options.staticKeys || '');
12029  isPlatformReservedTag = options.isReservedTag || no;
12030  // first pass: mark all non-static nodes.
12031  markStatic(root);
12032  // second pass: mark static roots.
12033  markStaticRoots(root, false);
12034}
12035function genStaticKeys(keys) {
12036  return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' + (keys ? ',' + keys : ''));
12037}
12038function markStatic(node) {
12039  node.static = isStatic(node);
12040  if (node.type === 1) {
12041    // do not make component slot content static. this avoids
12042    // 1. components not able to mutate slot nodes
12043    // 2. static slot content fails for hot-reloading
12044    if (!isPlatformReservedTag(node.tag) && node.tag !== 'slot' && node.attrsMap['inline-template'] == null) {
12045      return;
12046    }
12047    for (var i = 0, l = node.children.length; i < l; i++) {
12048      var child = node.children[i];
12049      markStatic(child);
12050      if (!child.static) {
12051        node.static = false;
12052      }
12053    }
12054    if (node.ifConditions) {
12055      for (var i = 1, l = node.ifConditions.length; i < l; i++) {
12056        var block = node.ifConditions[i].block;
12057        markStatic(block);
12058        if (!block.static) {
12059          node.static = false;
12060        }
12061      }
12062    }
12063  }
12064}
12065function markStaticRoots(node, isInFor) {
12066  if (node.type === 1) {
12067    if (node.static || node.once) {
12068      node.staticInFor = isInFor;
12069    }
12070    // For a node to qualify as a static root, it should have children that
12071    // are not just static text. Otherwise the cost of hoisting out will
12072    // outweigh the benefits and it's better off to just always render it fresh.
12073    if (node.static && node.children.length && !(node.children.length === 1 && node.children[0].type === 3)) {
12074      node.staticRoot = true;
12075      return;
12076    } else {
12077      node.staticRoot = false;
12078    }
12079    if (node.children) {
12080      for (var i = 0, l = node.children.length; i < l; i++) {
12081        markStaticRoots(node.children[i], isInFor || !!node.for);
12082      }
12083    }
12084    if (node.ifConditions) {
12085      for (var i = 1, l = node.ifConditions.length; i < l; i++) {
12086        markStaticRoots(node.ifConditions[i].block, isInFor);
12087      }
12088    }
12089  }
12090}
12091function isStatic(node) {
12092  if (node.type === 2) {
12093    // expression
12094    return false;
12095  }
12096  if (node.type === 3) {
12097    // text
12098    return true;
12099  }
12100  return !!(node.pre || !node.hasBindings &&
12101  // no dynamic bindings
12102  !node.if && !node.for &&
12103  // not v-if or v-for or v-else
12104  !isBuiltInTag(node.tag) &&
12105  // not a built-in
12106  isPlatformReservedTag(node.tag) &&
12107  // not a component
12108  !isDirectChildOfTemplateFor(node) && Object.keys(node).every(isStaticKey));
12109}
12110function isDirectChildOfTemplateFor(node) {
12111  while (node.parent) {
12112    node = node.parent;
12113    if (node.tag !== 'template') {
12114      return false;
12115    }
12116    if (node.for) {
12117      return true;
12118    }
12119  }
12120  return false;
12121}
12122var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/;
12123var fnInvokeRE = /\([^)]*?\);*$/;
12124var simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/;
12125// KeyboardEvent.keyCode aliases
12126var keyCodes = {
12127  esc: 27,
12128  tab: 9,
12129  enter: 13,
12130  space: 32,
12131  up: 38,
12132  left: 37,
12133  right: 39,
12134  down: 40,
12135  delete: [8, 46]
12136};
12137// KeyboardEvent.key aliases
12138var keyNames = {
12139  // #7880: IE11 and Edge use `Esc` for Escape key name.
12140  esc: ['Esc', 'Escape'],
12141  tab: 'Tab',
12142  enter: 'Enter',
12143  // #9112: IE11 uses `Spacebar` for Space key name.
12144  space: [' ', 'Spacebar'],
12145  // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.
12146  up: ['Up', 'ArrowUp'],
12147  left: ['Left', 'ArrowLeft'],
12148  right: ['Right', 'ArrowRight'],
12149  down: ['Down', 'ArrowDown'],
12150  // #9112: IE11 uses `Del` for Delete key name.
12151  delete: ['Backspace', 'Delete', 'Del']
12152};
12153// #4868: modifiers that prevent the execution of the listener
12154// need to explicitly return null so that we can determine whether to remove
12155// the listener for .once
12156var genGuard = function (condition) {
12157  return "if(".concat(condition, ")return null;");
12158};
12159var modifierCode = {
12160  stop: '$event.stopPropagation();',
12161  prevent: '$event.preventDefault();',
12162  self: genGuard("$event.target !== $event.currentTarget"),
12163  ctrl: genGuard("!$event.ctrlKey"),
12164  shift: genGuard("!$event.shiftKey"),
12165  alt: genGuard("!$event.altKey"),
12166  meta: genGuard("!$event.metaKey"),
12167  left: genGuard("'button' in $event && $event.button !== 0"),
12168  middle: genGuard("'button' in $event && $event.button !== 1"),
12169  right: genGuard("'button' in $event && $event.button !== 2")
12170};
12171function genHandlers(events, isNative) {
12172  var prefix = isNative ? 'nativeOn:' : 'on:';
12173  var staticHandlers = "";
12174  var dynamicHandlers = "";
12175  for (var name_1 in events) {
12176    var handlerCode = genHandler(events[name_1]);
12177    //@ts-expect-error
12178    if (events[name_1] && events[name_1].dynamic) {
12179      dynamicHandlers += "".concat(name_1, ",").concat(handlerCode, ",");
12180    } else {
12181      staticHandlers += "\"".concat(name_1, "\":").concat(handlerCode, ",");
12182    }
12183  }
12184  staticHandlers = "{".concat(staticHandlers.slice(0, -1), "}");
12185  if (dynamicHandlers) {
12186    return prefix + "_d(".concat(staticHandlers, ",[").concat(dynamicHandlers.slice(0, -1), "])");
12187  } else {
12188    return prefix + staticHandlers;
12189  }
12190}
12191function genHandler(handler) {
12192  if (!handler) {
12193    return 'function(){}';
12194  }
12195  if (Array.isArray(handler)) {
12196    return "[".concat(handler.map(function (handler) {
12197      return genHandler(handler);
12198    }).join(','), "]");
12199  }
12200  var isMethodPath = simplePathRE.test(handler.value);
12201  var isFunctionExpression = fnExpRE.test(handler.value);
12202  var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));
12203  if (!handler.modifiers) {
12204    if (isMethodPath || isFunctionExpression) {
12205      return handler.value;
12206    }
12207    return "function($event){".concat(isFunctionInvocation ? "return ".concat(handler.value) : handler.value, "}"); // inline statement
12208  } else {
12209    var code = '';
12210    var genModifierCode = '';
12211    var keys = [];
12212    var _loop_1 = function (key) {
12213      if (modifierCode[key]) {
12214        genModifierCode += modifierCode[key];
12215        // left/right
12216        if (keyCodes[key]) {
12217          keys.push(key);
12218        }
12219      } else if (key === 'exact') {
12220        var modifiers_1 = handler.modifiers;
12221        genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta'].filter(function (keyModifier) {
12222          return !modifiers_1[keyModifier];
12223        }).map(function (keyModifier) {
12224          return "$event.".concat(keyModifier, "Key");
12225        }).join('||'));
12226      } else {
12227        keys.push(key);
12228      }
12229    };
12230    for (var key in handler.modifiers) {
12231      _loop_1(key);
12232    }
12233    if (keys.length) {
12234      code += genKeyFilter(keys);
12235    }
12236    // Make sure modifiers like prevent and stop get executed after key filtering
12237    if (genModifierCode) {
12238      code += genModifierCode;
12239    }
12240    var handlerCode = isMethodPath ? "return ".concat(handler.value, ".apply(null, arguments)") : isFunctionExpression ? "return (".concat(handler.value, ").apply(null, arguments)") : isFunctionInvocation ? "return ".concat(handler.value) : handler.value;
12241    return "function($event){".concat(code).concat(handlerCode, "}");
12242  }
12243}
12244function genKeyFilter(keys) {
12245  return (
12246    // make sure the key filters only apply to KeyboardEvents
12247    // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake
12248    // key events that do not have keyCode property...
12249    "if(!$event.type.indexOf('key')&&" + "".concat(keys.map(genFilterCode).join('&&'), ")return null;")
12250  );
12251}
12252function genFilterCode(key) {
12253  var keyVal = parseInt(key, 10);
12254  if (keyVal) {
12255    return "$event.keyCode!==".concat(keyVal);
12256  }
12257  var keyCode = keyCodes[key];
12258  var keyName = keyNames[key];
12259  return "_k($event.keyCode," + "".concat(JSON.stringify(key), ",") + "".concat(JSON.stringify(keyCode), ",") + "$event.key," + "".concat(JSON.stringify(keyName)) + ")";
12260}
12261function on(el, dir) {
12262  if ( true && dir.modifiers) {
12263    warn$2("v-on without argument does not support modifiers.");
12264  }
12265  el.wrapListeners = function (code) {
12266    return "_g(".concat(code, ",").concat(dir.value, ")");
12267  };
12268}
12269function bind(el, dir) {
12270  el.wrapData = function (code) {
12271    return "_b(".concat(code, ",'").concat(el.tag, "',").concat(dir.value, ",").concat(dir.modifiers && dir.modifiers.prop ? 'true' : 'false').concat(dir.modifiers && dir.modifiers.sync ? ',true' : '', ")");
12272  };
12273}
12274var baseDirectives = {
12275  on: on,
12276  bind: bind,
12277  cloak: noop
12278};
12279var CodegenState = /** @class */function () {
12280  function CodegenState(options) {
12281    this.options = options;
12282    this.warn = options.warn || baseWarn;
12283    this.transforms = pluckModuleFunction(options.modules, 'transformCode');
12284    this.dataGenFns = pluckModuleFunction(options.modules, 'genData');
12285    this.directives = extend(extend({}, baseDirectives), options.directives);
12286    var isReservedTag = options.isReservedTag || no;
12287    this.maybeComponent = function (el) {
12288      return !!el.component || !isReservedTag(el.tag);
12289    };
12290    this.onceId = 0;
12291    this.staticRenderFns = [];
12292    this.pre = false;
12293  }
12294  return CodegenState;
12295}();
12296function generate(ast, options) {
12297  var state = new CodegenState(options);
12298  // fix #11483, Root level <script> tags should not be rendered.
12299  var code = ast ? ast.tag === 'script' ? 'null' : genElement(ast, state) : '_c("div")';
12300  return {
12301    render: "with(this){return ".concat(code, "}"),
12302    staticRenderFns: state.staticRenderFns
12303  };
12304}
12305function genElement(el, state) {
12306  if (el.parent) {
12307    el.pre = el.pre || el.parent.pre;
12308  }
12309  if (el.staticRoot && !el.staticProcessed) {
12310    return genStatic(el, state);
12311  } else if (el.once && !el.onceProcessed) {
12312    return genOnce(el, state);
12313  } else if (el.for && !el.forProcessed) {
12314    return genFor(el, state);
12315  } else if (el.if && !el.ifProcessed) {
12316    return genIf(el, state);
12317  } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {
12318    return genChildren(el, state) || 'void 0';
12319  } else if (el.tag === 'slot') {
12320    return genSlot(el, state);
12321  } else {
12322    // component or element
12323    var code = void 0;
12324    if (el.component) {
12325      code = genComponent(el.component, el, state);
12326    } else {
12327      var data = void 0;
12328      var maybeComponent = state.maybeComponent(el);
12329      if (!el.plain || el.pre && maybeComponent) {
12330        data = genData(el, state);
12331      }
12332      var tag
12333      // check if this is a component in <script setup>
12334      = void 0;
12335      // check if this is a component in <script setup>
12336      var bindings = state.options.bindings;
12337      if (maybeComponent && bindings && bindings.__isScriptSetup !== false) {
12338        tag = checkBindingType(bindings, el.tag);
12339      }
12340      if (!tag) tag = "'".concat(el.tag, "'");
12341      var children = el.inlineTemplate ? null : genChildren(el, state, true);
12342      code = "_c(".concat(tag).concat(data ? ",".concat(data) : '' // data
12343      ).concat(children ? ",".concat(children) : '' // children
12344      , ")");
12345    }
12346    // module transforms
12347    for (var i = 0; i < state.transforms.length; i++) {
12348      code = state.transforms[i](el, code);
12349    }
12350    return code;
12351  }
12352}
12353function checkBindingType(bindings, key) {
12354  var camelName = camelize(key);
12355  var PascalName = capitalize(camelName);
12356  var checkType = function (type) {
12357    if (bindings[key] === type) {
12358      return key;
12359    }
12360    if (bindings[camelName] === type) {
12361      return camelName;
12362    }
12363    if (bindings[PascalName] === type) {
12364      return PascalName;
12365    }
12366  };
12367  var fromConst = checkType("setup-const" /* BindingTypes.SETUP_CONST */) || checkType("setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */);
12368  if (fromConst) {
12369    return fromConst;
12370  }
12371  var fromMaybeRef = checkType("setup-let" /* BindingTypes.SETUP_LET */) || checkType("setup-ref" /* BindingTypes.SETUP_REF */) || checkType("setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */);
12372  if (fromMaybeRef) {
12373    return fromMaybeRef;
12374  }
12375}
12376// hoist static sub-trees out
12377function genStatic(el, state) {
12378  el.staticProcessed = true;
12379  // Some elements (templates) need to behave differently inside of a v-pre
12380  // node.  All pre nodes are static roots, so we can use this as a location to
12381  // wrap a state change and reset it upon exiting the pre node.
12382  var originalPreState = state.pre;
12383  if (el.pre) {
12384    state.pre = el.pre;
12385  }
12386  state.staticRenderFns.push("with(this){return ".concat(genElement(el, state), "}"));
12387  state.pre = originalPreState;
12388  return "_m(".concat(state.staticRenderFns.length - 1).concat(el.staticInFor ? ',true' : '', ")");
12389}
12390// v-once
12391function genOnce(el, state) {
12392  el.onceProcessed = true;
12393  if (el.if && !el.ifProcessed) {
12394    return genIf(el, state);
12395  } else if (el.staticInFor) {
12396    var key = '';
12397    var parent_1 = el.parent;
12398    while (parent_1) {
12399      if (parent_1.for) {
12400        key = parent_1.key;
12401        break;
12402      }
12403      parent_1 = parent_1.parent;
12404    }
12405    if (!key) {
12406       true && state.warn("v-once can only be used inside v-for that is keyed. ", el.rawAttrsMap['v-once']);
12407      return genElement(el, state);
12408    }
12409    return "_o(".concat(genElement(el, state), ",").concat(state.onceId++, ",").concat(key, ")");
12410  } else {
12411    return genStatic(el, state);
12412  }
12413}
12414function genIf(el, state, altGen, altEmpty) {
12415  el.ifProcessed = true; // avoid recursion
12416  return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty);
12417}
12418function genIfConditions(conditions, state, altGen, altEmpty) {
12419  if (!conditions.length) {
12420    return altEmpty || '_e()';
12421  }
12422  var condition = conditions.shift();
12423  if (condition.exp) {
12424    return "(".concat(condition.exp, ")?").concat(genTernaryExp(condition.block), ":").concat(genIfConditions(conditions, state, altGen, altEmpty));
12425  } else {
12426    return "".concat(genTernaryExp(condition.block));
12427  }
12428  // v-if with v-once should generate code like (a)?_m(0):_m(1)
12429  function genTernaryExp(el) {
12430    return altGen ? altGen(el, state) : el.once ? genOnce(el, state) : genElement(el, state);
12431  }
12432}
12433function genFor(el, state, altGen, altHelper) {
12434  var exp = el.for;
12435  var alias = el.alias;
12436  var iterator1 = el.iterator1 ? ",".concat(el.iterator1) : '';
12437  var iterator2 = el.iterator2 ? ",".concat(el.iterator2) : '';
12438  if ( true && state.maybeComponent(el) && el.tag !== 'slot' && el.tag !== 'template' && !el.key) {
12439    state.warn("<".concat(el.tag, " v-for=\"").concat(alias, " in ").concat(exp, "\">: component lists rendered with ") + "v-for should have explicit keys. " + "See https://v2.vuejs.org/v2/guide/list.html#key for more info.", el.rawAttrsMap['v-for'], true /* tip */);
12440  }
12441  el.forProcessed = true; // avoid recursion
12442  return "".concat(altHelper || '_l', "((").concat(exp, "),") + "function(".concat(alias).concat(iterator1).concat(iterator2, "){") + "return ".concat((altGen || genElement)(el, state)) + '})';
12443}
12444function genData(el, state) {
12445  var data = '{';
12446  // directives first.
12447  // directives may mutate the el's other properties before they are generated.
12448  var dirs = genDirectives(el, state);
12449  if (dirs) data += dirs + ',';
12450  // key
12451  if (el.key) {
12452    data += "key:".concat(el.key, ",");
12453  }
12454  // ref
12455  if (el.ref) {
12456    data += "ref:".concat(el.ref, ",");
12457  }
12458  if (el.refInFor) {
12459    data += "refInFor:true,";
12460  }
12461  // pre
12462  if (el.pre) {
12463    data += "pre:true,";
12464  }
12465  // record original tag name for components using "is" attribute
12466  if (el.component) {
12467    data += "tag:\"".concat(el.tag, "\",");
12468  }
12469  // module data generation functions
12470  for (var i = 0; i < state.dataGenFns.length; i++) {
12471    data += state.dataGenFns[i](el);
12472  }
12473  // attributes
12474  if (el.attrs) {
12475    data += "attrs:".concat(genProps(el.attrs), ",");
12476  }
12477  // DOM props
12478  if (el.props) {
12479    data += "domProps:".concat(genProps(el.props), ",");
12480  }
12481  // event handlers
12482  if (el.events) {
12483    data += "".concat(genHandlers(el.events, false), ",");
12484  }
12485  if (el.nativeEvents) {
12486    data += "".concat(genHandlers(el.nativeEvents, true), ",");
12487  }
12488  // slot target
12489  // only for non-scoped slots
12490  if (el.slotTarget && !el.slotScope) {
12491    data += "slot:".concat(el.slotTarget, ",");
12492  }
12493  // scoped slots
12494  if (el.scopedSlots) {
12495    data += "".concat(genScopedSlots(el, el.scopedSlots, state), ",");
12496  }
12497  // component v-model
12498  if (el.model) {
12499    data += "model:{value:".concat(el.model.value, ",callback:").concat(el.model.callback, ",expression:").concat(el.model.expression, "},");
12500  }
12501  // inline-template
12502  if (el.inlineTemplate) {
12503    var inlineTemplate = genInlineTemplate(el, state);
12504    if (inlineTemplate) {
12505      data += "".concat(inlineTemplate, ",");
12506    }
12507  }
12508  data = data.replace(/,$/, '') + '}';
12509  // v-bind dynamic argument wrap
12510  // v-bind with dynamic arguments must be applied using the same v-bind object
12511  // merge helper so that class/style/mustUseProp attrs are handled correctly.
12512  if (el.dynamicAttrs) {
12513    data = "_b(".concat(data, ",\"").concat(el.tag, "\",").concat(genProps(el.dynamicAttrs), ")");
12514  }
12515  // v-bind data wrap
12516  if (el.wrapData) {
12517    data = el.wrapData(data);
12518  }
12519  // v-on data wrap
12520  if (el.wrapListeners) {
12521    data = el.wrapListeners(data);
12522  }
12523  return data;
12524}
12525function genDirectives(el, state) {
12526  var dirs = el.directives;
12527  if (!dirs) return;
12528  var res = 'directives:[';
12529  var hasRuntime = false;
12530  var i, l, dir, needRuntime;
12531  for (i = 0, l = dirs.length; i < l; i++) {
12532    dir = dirs[i];
12533    needRuntime = true;
12534    var gen = state.directives[dir.name];
12535    if (gen) {
12536      // compile-time directive that manipulates AST.
12537      // returns true if it also needs a runtime counterpart.
12538      needRuntime = !!gen(el, dir, state.warn);
12539    }
12540    if (needRuntime) {
12541      hasRuntime = true;
12542      res += "{name:\"".concat(dir.name, "\",rawName:\"").concat(dir.rawName, "\"").concat(dir.value ? ",value:(".concat(dir.value, "),expression:").concat(JSON.stringify(dir.value)) : '').concat(dir.arg ? ",arg:".concat(dir.isDynamicArg ? dir.arg : "\"".concat(dir.arg, "\"")) : '').concat(dir.modifiers ? ",modifiers:".concat(JSON.stringify(dir.modifiers)) : '', "},");
12543    }
12544  }
12545  if (hasRuntime) {
12546    return res.slice(0, -1) + ']';
12547  }
12548}
12549function genInlineTemplate(el, state) {
12550  var ast = el.children[0];
12551  if ( true && (el.children.length !== 1 || ast.type !== 1)) {
12552    state.warn('Inline-template components must have exactly one child element.', {
12553      start: el.start
12554    });
12555  }
12556  if (ast && ast.type === 1) {
12557    var inlineRenderFns = generate(ast, state.options);
12558    return "inlineTemplate:{render:function(){".concat(inlineRenderFns.render, "},staticRenderFns:[").concat(inlineRenderFns.staticRenderFns.map(function (code) {
12559      return "function(){".concat(code, "}");
12560    }).join(','), "]}");
12561  }
12562}
12563function genScopedSlots(el, slots, state) {
12564  // by default scoped slots are considered "stable", this allows child
12565  // components with only scoped slots to skip forced updates from parent.
12566  // but in some cases we have to bail-out of this optimization
12567  // for example if the slot contains dynamic names, has v-if or v-for on them...
12568  var needsForceUpdate = el.for || Object.keys(slots).some(function (key) {
12569    var slot = slots[key];
12570    return slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic
12571    ;
12572  });
12573  // #9534: if a component with scoped slots is inside a conditional branch,
12574  // it's possible for the same component to be reused but with different
12575  // compiled slot content. To avoid that, we generate a unique key based on
12576  // the generated code of all the slot contents.
12577  var needsKey = !!el.if;
12578  // OR when it is inside another scoped slot or v-for (the reactivity may be
12579  // disconnected due to the intermediate scope variable)
12580  // #9438, #9506
12581  // TODO: this can be further optimized by properly analyzing in-scope bindings
12582  // and skip force updating ones that do not actually use scope variables.
12583  if (!needsForceUpdate) {
12584    var parent_2 = el.parent;
12585    while (parent_2) {
12586      if (parent_2.slotScope && parent_2.slotScope !== emptySlotScopeToken || parent_2.for) {
12587        needsForceUpdate = true;
12588        break;
12589      }
12590      if (parent_2.if) {
12591        needsKey = true;
12592      }
12593      parent_2 = parent_2.parent;
12594    }
12595  }
12596  var generatedSlots = Object.keys(slots).map(function (key) {
12597    return genScopedSlot(slots[key], state);
12598  }).join(',');
12599  return "scopedSlots:_u([".concat(generatedSlots, "]").concat(needsForceUpdate ? ",null,true" : "").concat(!needsForceUpdate && needsKey ? ",null,false,".concat(hash(generatedSlots)) : "", ")");
12600}
12601function hash(str) {
12602  var hash = 5381;
12603  var i = str.length;
12604  while (i) {
12605    hash = hash * 33 ^ str.charCodeAt(--i);
12606  }
12607  return hash >>> 0;
12608}
12609function containsSlotChild(el) {
12610  if (el.type === 1) {
12611    if (el.tag === 'slot') {
12612      return true;
12613    }
12614    return el.children.some(containsSlotChild);
12615  }
12616  return false;
12617}
12618function genScopedSlot(el, state) {
12619  var isLegacySyntax = el.attrsMap['slot-scope'];
12620  if (el.if && !el.ifProcessed && !isLegacySyntax) {
12621    return genIf(el, state, genScopedSlot, "null");
12622  }
12623  if (el.for && !el.forProcessed) {
12624    return genFor(el, state, genScopedSlot);
12625  }
12626  var slotScope = el.slotScope === emptySlotScopeToken ? "" : String(el.slotScope);
12627  var fn = "function(".concat(slotScope, "){") + "return ".concat(el.tag === 'template' ? el.if && isLegacySyntax ? "(".concat(el.if, ")?").concat(genChildren(el, state) || 'undefined', ":undefined") : genChildren(el, state) || 'undefined' : genElement(el, state), "}");
12628  // reverse proxy v-slot without scope on this.$slots
12629  var reverseProxy = slotScope ? "" : ",proxy:true";
12630  return "{key:".concat(el.slotTarget || "\"default\"", ",fn:").concat(fn).concat(reverseProxy, "}");
12631}
12632function genChildren(el, state, checkSkip, altGenElement, altGenNode) {
12633  var children = el.children;
12634  if (children.length) {
12635    var el_1 = children[0];
12636    // optimize single v-for
12637    if (children.length === 1 && el_1.for && el_1.tag !== 'template' && el_1.tag !== 'slot') {
12638      var normalizationType_1 = checkSkip ? state.maybeComponent(el_1) ? ",1" : ",0" : "";
12639      return "".concat((altGenElement || genElement)(el_1, state)).concat(normalizationType_1);
12640    }
12641    var normalizationType = checkSkip ? getNormalizationType(children, state.maybeComponent) : 0;
12642    var gen_1 = altGenNode || genNode;
12643    return "[".concat(children.map(function (c) {
12644      return gen_1(c, state);
12645    }).join(','), "]").concat(normalizationType ? ",".concat(normalizationType) : '');
12646  }
12647}
12648// determine the normalization needed for the children array.
12649// 0: no normalization needed
12650// 1: simple normalization needed (possible 1-level deep nested array)
12651// 2: full normalization needed
12652function getNormalizationType(children, maybeComponent) {
12653  var res = 0;
12654  for (var i = 0; i < children.length; i++) {
12655    var el = children[i];
12656    if (el.type !== 1) {
12657      continue;
12658    }
12659    if (needsNormalization(el) || el.ifConditions && el.ifConditions.some(function (c) {
12660      return needsNormalization(c.block);
12661    })) {
12662      res = 2;
12663      break;
12664    }
12665    if (maybeComponent(el) || el.ifConditions && el.ifConditions.some(function (c) {
12666      return maybeComponent(c.block);
12667    })) {
12668      res = 1;
12669    }
12670  }
12671  return res;
12672}
12673function needsNormalization(el) {
12674  return el.for !== undefined || el.tag === 'template' || el.tag === 'slot';
12675}
12676function genNode(node, state) {
12677  if (node.type === 1) {
12678    return genElement(node, state);
12679  } else if (node.type === 3 && node.isComment) {
12680    return genComment(node);
12681  } else {
12682    return genText(node);
12683  }
12684}
12685function genText(text) {
12686  return "_v(".concat(text.type === 2 ? text.expression // no need for () because already wrapped in _s()
12687  : transformSpecialNewlines(JSON.stringify(text.text)), ")");
12688}
12689function genComment(comment) {
12690  return "_e(".concat(JSON.stringify(comment.text), ")");
12691}
12692function genSlot(el, state) {
12693  var slotName = el.slotName || '"default"';
12694  var children = genChildren(el, state);
12695  var res = "_t(".concat(slotName).concat(children ? ",function(){return ".concat(children, "}") : '');
12696  var attrs = el.attrs || el.dynamicAttrs ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) {
12697    return {
12698      // slot props are camelized
12699      name: camelize(attr.name),
12700      value: attr.value,
12701      dynamic: attr.dynamic
12702    };
12703  })) : null;
12704  var bind = el.attrsMap['v-bind'];
12705  if ((attrs || bind) && !children) {
12706    res += ",null";
12707  }
12708  if (attrs) {
12709    res += ",".concat(attrs);
12710  }
12711  if (bind) {
12712    res += "".concat(attrs ? '' : ',null', ",").concat(bind);
12713  }
12714  return res + ')';
12715}
12716// componentName is el.component, take it as argument to shun flow's pessimistic refinement
12717function genComponent(componentName, el, state) {
12718  var children = el.inlineTemplate ? null : genChildren(el, state, true);
12719  return "_c(".concat(componentName, ",").concat(genData(el, state)).concat(children ? ",".concat(children) : '', ")");
12720}
12721function genProps(props) {
12722  var staticProps = "";
12723  var dynamicProps = "";
12724  for (var i = 0; i < props.length; i++) {
12725    var prop = props[i];
12726    var value = transformSpecialNewlines(prop.value);
12727    if (prop.dynamic) {
12728      dynamicProps += "".concat(prop.name, ",").concat(value, ",");
12729    } else {
12730      staticProps += "\"".concat(prop.name, "\":").concat(value, ",");
12731    }
12732  }
12733  staticProps = "{".concat(staticProps.slice(0, -1), "}");
12734  if (dynamicProps) {
12735    return "_d(".concat(staticProps, ",[").concat(dynamicProps.slice(0, -1), "])");
12736  } else {
12737    return staticProps;
12738  }
12739}
12740// #3895, #4268
12741function transformSpecialNewlines(text) {
12742  return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029');
12743}
12744
12745// these keywords should not appear inside expressions, but operators like
12746// typeof, instanceof and in are allowed
12747var prohibitedKeywordRE = new RegExp('\\b' + ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' + 'super,throw,while,yield,delete,export,import,return,switch,default,' + 'extends,finally,continue,debugger,function,arguments').split(',').join('\\b|\\b') + '\\b');
12748// these unary operators should not be used as property/method names
12749var unaryOperatorsRE = new RegExp('\\b' + 'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') + '\\s*\\([^\\)]*\\)');
12750// strip strings in expressions
12751var stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;
12752// detect problematic expressions in a template
12753function detectErrors(ast, warn) {
12754  if (ast) {
12755    checkNode(ast, warn);
12756  }
12757}
12758function checkNode(node, warn) {
12759  if (node.type === 1) {
12760    for (var name_1 in node.attrsMap) {
12761      if (dirRE.test(name_1)) {
12762        var value = node.attrsMap[name_1];
12763        if (value) {
12764          var range = node.rawAttrsMap[name_1];
12765          if (name_1 === 'v-for') {
12766            checkFor(node, "v-for=\"".concat(value, "\""), warn, range);
12767          } else if (name_1 === 'v-slot' || name_1[0] === '#') {
12768            checkFunctionParameterExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
12769          } else if (onRE.test(name_1)) {
12770            checkEvent(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
12771          } else {
12772            checkExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
12773          }
12774        }
12775      }
12776    }
12777    if (node.children) {
12778      for (var i = 0; i < node.children.length; i++) {
12779        checkNode(node.children[i], warn);
12780      }
12781    }
12782  } else if (node.type === 2) {
12783    checkExpression(node.expression, node.text, warn, node);
12784  }
12785}
12786function checkEvent(exp, text, warn, range) {
12787  var stripped = exp.replace(stripStringRE, '');
12788  var keywordMatch = stripped.match(unaryOperatorsRE);
12789  if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {
12790    warn("avoid using JavaScript unary operator as property name: " + "\"".concat(keywordMatch[0], "\" in expression ").concat(text.trim()), range);
12791  }
12792  checkExpression(exp, text, warn, range);
12793}
12794function checkFor(node, text, warn, range) {
12795  checkExpression(node.for || '', text, warn, range);
12796  checkIdentifier(node.alias, 'v-for alias', text, warn, range);
12797  checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);
12798  checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);
12799}
12800function checkIdentifier(ident, type, text, warn, range) {
12801  if (typeof ident === 'string') {
12802    try {
12803      new Function("var ".concat(ident, "=_"));
12804    } catch (e) {
12805      warn("invalid ".concat(type, " \"").concat(ident, "\" in expression: ").concat(text.trim()), range);
12806    }
12807  }
12808}
12809function checkExpression(exp, text, warn, range) {
12810  try {
12811    new Function("return ".concat(exp));
12812  } catch (e) {
12813    var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);
12814    if (keywordMatch) {
12815      warn("avoid using JavaScript keyword as property name: " + "\"".concat(keywordMatch[0], "\"\n  Raw expression: ").concat(text.trim()), range);
12816    } else {
12817      warn("invalid expression: ".concat(e.message, " in\n\n") + "    ".concat(exp, "\n\n") + "  Raw expression: ".concat(text.trim(), "\n"), range);
12818    }
12819  }
12820}
12821function checkFunctionParameterExpression(exp, text, warn, range) {
12822  try {
12823    new Function(exp, '');
12824  } catch (e) {
12825    warn("invalid function parameter expression: ".concat(e.message, " in\n\n") + "    ".concat(exp, "\n\n") + "  Raw expression: ".concat(text.trim(), "\n"), range);
12826  }
12827}
12828var range = 2;
12829function generateCodeFrame(source, start, end) {
12830  if (start === void 0) {
12831    start = 0;
12832  }
12833  if (end === void 0) {
12834    end = source.length;
12835  }
12836  var lines = source.split(/\r?\n/);
12837  var count = 0;
12838  var res = [];
12839  for (var i = 0; i < lines.length; i++) {
12840    count += lines[i].length + 1;
12841    if (count >= start) {
12842      for (var j = i - range; j <= i + range || end > count; j++) {
12843        if (j < 0 || j >= lines.length) continue;
12844        res.push("".concat(j + 1).concat(repeat(" ", 3 - String(j + 1).length), "|  ").concat(lines[j]));
12845        var lineLength = lines[j].length;
12846        if (j === i) {
12847          // push underline
12848          var pad = start - (count - lineLength) + 1;
12849          var length_1 = end > count ? lineLength - pad : end - start;
12850          res.push("   |  " + repeat(" ", pad) + repeat("^", length_1));
12851        } else if (j > i) {
12852          if (end > count) {
12853            var length_2 = Math.min(end - count, lineLength);
12854            res.push("   |  " + repeat("^", length_2));
12855          }
12856          count += lineLength + 1;
12857        }
12858      }
12859      break;
12860    }
12861  }
12862  return res.join('\n');
12863}
12864function repeat(str, n) {
12865  var result = '';
12866  if (n > 0) {
12867    // eslint-disable-next-line no-constant-condition
12868    while (true) {
12869      // eslint-disable-line
12870      if (n & 1) result += str;
12871      n >>>= 1;
12872      if (n <= 0) break;
12873      str += str;
12874    }
12875  }
12876  return result;
12877}
12878function createFunction(code, errors) {
12879  try {
12880    return new Function(code);
12881  } catch (err) {
12882    errors.push({
12883      err: err,
12884      code: code
12885    });
12886    return noop;
12887  }
12888}
12889function createCompileToFunctionFn(compile) {
12890  var cache = Object.create(null);
12891  return function compileToFunctions(template, options, vm) {
12892    options = extend({}, options);
12893    var warn = options.warn || warn$2;
12894    delete options.warn;
12895    /* istanbul ignore if */
12896    if (true) {
12897      // detect possible CSP restriction
12898      try {
12899        new Function('return 1');
12900      } catch (e) {
12901        if (e.toString().match(/unsafe-eval|CSP/)) {
12902          warn('It seems you are using the standalone build of Vue.js in an ' + 'environment with Content Security Policy that prohibits unsafe-eval. ' + 'The template compiler cannot work in this environment. Consider ' + 'relaxing the policy to allow unsafe-eval or pre-compiling your ' + 'templates into render functions.');
12903        }
12904      }
12905    }
12906    // check cache
12907    var key = options.delimiters ? String(options.delimiters) + template : template;
12908    if (cache[key]) {
12909      return cache[key];
12910    }
12911    // compile
12912    var compiled = compile(template, options);
12913    // check compilation errors/tips
12914    if (true) {
12915      if (compiled.errors && compiled.errors.length) {
12916        if (options.outputSourceRange) {
12917          compiled.errors.forEach(function (e) {
12918            warn("Error compiling template:\n\n".concat(e.msg, "\n\n") + generateCodeFrame(template, e.start, e.end), vm);
12919          });
12920        } else {
12921          warn("Error compiling template:\n\n".concat(template, "\n\n") + compiled.errors.map(function (e) {
12922            return "- ".concat(e);
12923          }).join('\n') + '\n', vm);
12924        }
12925      }
12926      if (compiled.tips && compiled.tips.length) {
12927        if (options.outputSourceRange) {
12928          compiled.tips.forEach(function (e) {
12929            return tip(e.msg, vm);
12930          });
12931        } else {
12932          compiled.tips.forEach(function (msg) {
12933            return tip(msg, vm);
12934          });
12935        }
12936      }
12937    }
12938    // turn code into functions
12939    var res = {};
12940    var fnGenErrors = [];
12941    res.render = createFunction(compiled.render, fnGenErrors);
12942    res.staticRenderFns = compiled.staticRenderFns.map(function (code) {
12943      return createFunction(code, fnGenErrors);
12944    });
12945    // check function generation errors.
12946    // this should only happen if there is a bug in the compiler itself.
12947    // mostly for codegen development use
12948    /* istanbul ignore if */
12949    if (true) {
12950      if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {
12951        warn("Failed to generate render function:\n\n" + fnGenErrors.map(function (_a) {
12952          var err = _a.err,
12953            code = _a.code;
12954          return "".concat(err.toString(), " in\n\n").concat(code, "\n");
12955        }).join('\n'), vm);
12956      }
12957    }
12958    return cache[key] = res;
12959  };
12960}
12961function createCompilerCreator(baseCompile) {
12962  return function createCompiler(baseOptions) {
12963    function compile(template, options) {
12964      var finalOptions = Object.create(baseOptions);
12965      var errors = [];
12966      var tips = [];
12967      var warn = function (msg, range, tip) {
12968        (tip ? tips : errors).push(msg);
12969      };
12970      if (options) {
12971        if ( true && options.outputSourceRange) {
12972          // $flow-disable-line
12973          var leadingSpaceLength_1 = template.match(/^\s*/)[0].length;
12974          warn = function (msg, range, tip) {
12975            var data = typeof msg === 'string' ? {
12976              msg: msg
12977            } : msg;
12978            if (range) {
12979              if (range.start != null) {
12980                data.start = range.start + leadingSpaceLength_1;
12981              }
12982              if (range.end != null) {
12983                data.end = range.end + leadingSpaceLength_1;
12984              }
12985            }
12986            (tip ? tips : errors).push(data);
12987          };
12988        }
12989        // merge custom modules
12990        if (options.modules) {
12991          finalOptions.modules = (baseOptions.modules || []).concat(options.modules);
12992        }
12993        // merge custom directives
12994        if (options.directives) {
12995          finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives);
12996        }
12997        // copy other options
12998        for (var key in options) {
12999          if (key !== 'modules' && key !== 'directives') {
13000            finalOptions[key] = options[key];
13001          }
13002        }
13003      }
13004      finalOptions.warn = warn;
13005      var compiled = baseCompile(template.trim(), finalOptions);
13006      if (true) {
13007        detectErrors(compiled.ast, warn);
13008      }
13009      compiled.errors = errors;
13010      compiled.tips = tips;
13011      return compiled;
13012    }
13013    return {
13014      compile: compile,
13015      compileToFunctions: createCompileToFunctionFn(compile)
13016    };
13017  };
13018}
13019
13020// `createCompilerCreator` allows creating compilers that use alternative
13021// parser/optimizer/codegen, e.g the SSR optimizing compiler.
13022// Here we just export a default compiler using the default parts.
13023var createCompiler = createCompilerCreator(function baseCompile(template, options) {
13024  var ast = parse(template.trim(), options);
13025  if (options.optimize !== false) {
13026    optimize(ast, options);
13027  }
13028  var code = generate(ast, options);
13029  return {
13030    ast: ast,
13031    render: code.render,
13032    staticRenderFns: code.staticRenderFns
13033  };
13034});
13035var _a = createCompiler(baseOptions),
13036  compileToFunctions = _a.compileToFunctions;
13037
13038// check whether current browser encodes a char inside attribute values
13039var div;
13040function getShouldDecode(href) {
13041  div = div || document.createElement('div');
13042  div.innerHTML = href ? "<a href=\"\n\"/>" : "<div a=\"\n\"/>";
13043  return div.innerHTML.indexOf('&#10;') > 0;
13044}
13045// #3663: IE encodes newlines inside attribute values while other browsers don't
13046var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;
13047// #6828: chrome encodes content in a[href]
13048var shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;
13049var idToTemplate = cached(function (id) {
13050  var el = query(id);
13051  return el && el.innerHTML;
13052});
13053var mount = Vue.prototype.$mount;
13054Vue.prototype.$mount = function (el, hydrating) {
13055  el = el && query(el);
13056  /* istanbul ignore if */
13057  if (el === document.body || el === document.documentElement) {
13058     true && warn$2("Do not mount Vue to <html> or <body> - mount to normal elements instead.");
13059    return this;
13060  }
13061  var options = this.$options;
13062  // resolve template/el and convert to render function
13063  if (!options.render) {
13064    var template = options.template;
13065    if (template) {
13066      if (typeof template === 'string') {
13067        if (template.charAt(0) === '#') {
13068          template = idToTemplate(template);
13069          /* istanbul ignore if */
13070          if ( true && !template) {
13071            warn$2("Template element not found or is empty: ".concat(options.template), this);
13072          }
13073        }
13074      } else if (template.nodeType) {
13075        template = template.innerHTML;
13076      } else {
13077        if (true) {
13078          warn$2('invalid template option:' + template, this);
13079        }
13080        return this;
13081      }
13082    } else if (el) {
13083      // @ts-expect-error
13084      template = getOuterHTML(el);
13085    }
13086    if (template) {
13087      /* istanbul ignore if */
13088      if ( true && config.performance && mark) {
13089        mark('compile');
13090      }
13091      var _a = compileToFunctions(template, {
13092          outputSourceRange: "development" !== 'production',
13093          shouldDecodeNewlines: shouldDecodeNewlines,
13094          shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,
13095          delimiters: options.delimiters,
13096          comments: options.comments
13097        }, this),
13098        render = _a.render,
13099        staticRenderFns = _a.staticRenderFns;
13100      options.render = render;
13101      options.staticRenderFns = staticRenderFns;
13102      /* istanbul ignore if */
13103      if ( true && config.performance && mark) {
13104        mark('compile end');
13105        measure("vue ".concat(this._name, " compile"), 'compile', 'compile end');
13106      }
13107    }
13108  }
13109  return mount.call(this, el, hydrating);
13110};
13111/**
13112 * Get outerHTML of elements, taking care
13113 * of SVG elements in IE as well.
13114 */
13115function getOuterHTML(el) {
13116  if (el.outerHTML) {
13117    return el.outerHTML;
13118  } else {
13119    var container = document.createElement('div');
13120    container.appendChild(el.cloneNode(true));
13121    return container.innerHTML;
13122  }
13123}
13124Vue.compile = compileToFunctions;
13125
13126
13127/***/ }),
13128
13129/***/ "./app/components/OpeningHours/OpeningHoursStatus.vue":
13130/*!************************************************************!*\
13131  !*** ./app/components/OpeningHours/OpeningHoursStatus.vue ***!
13132  \************************************************************/
13133/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
13134
13135"use strict";
13136__webpack_require__.r(__webpack_exports__);
13137/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13138/* harmony export */   __esModule: () => (/* reexport safe */ _OpeningHoursStatus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__.__esModule),
13139/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
13140/* harmony export */ });
13141/* harmony import */ var _OpeningHoursStatus_vue_vue_type_template_id_79e290b8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./OpeningHoursStatus.vue?vue&type=template&id=79e290b8& */ "./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=template&id=79e290b8&");
13142/* harmony import */ var _OpeningHoursStatus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OpeningHoursStatus.vue?vue&type=script&lang=js& */ "./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=script&lang=js&");
13143/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
13144
13145
13146
13147
13148
13149/* normalize component */
13150;
13151var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
13152  _OpeningHoursStatus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
13153  _OpeningHoursStatus_vue_vue_type_template_id_79e290b8___WEBPACK_IMPORTED_MODULE_0__.render,
13154  _OpeningHoursStatus_vue_vue_type_template_id_79e290b8___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
13155  false,
13156  null,
13157  null,
13158  null
13159
13160)
13161
13162/* hot reload */
13163if (false) { var api; }
13164component.options.__file = "app/components/OpeningHours/OpeningHoursStatus.vue"
13165/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
13166
13167/***/ }),
13168
13169/***/ "./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=script&lang=js&":
13170/*!*************************************************************************************!*\
13171  !*** ./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=script&lang=js& ***!
13172  \*************************************************************************************/
13173/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
13174
13175"use strict";
13176__webpack_require__.r(__webpack_exports__);
13177/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13178/* harmony export */   __esModule: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursStatus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__.__esModule),
13179/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
13180/* harmony export */ });
13181/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursStatus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OpeningHoursStatus.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=script&lang=js&");
13182 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursStatus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
13183
13184/***/ }),
13185
13186/***/ "./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=template&id=79e290b8&":
13187/*!*******************************************************************************************!*\
13188  !*** ./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=template&id=79e290b8& ***!
13189  \*******************************************************************************************/
13190/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
13191
13192"use strict";
13193__webpack_require__.r(__webpack_exports__);
13194/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13195/* harmony export */   __esModule: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursStatus_vue_vue_type_template_id_79e290b8___WEBPACK_IMPORTED_MODULE_0__.__esMo
13195dule),
13196/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursStatus_vue_vue_type_template_id_79e290b8___WEBPACK_IMPORTED_MODULE_0__.render),
13197/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursStatus_vue_vue_type_template_id_79e290b8___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
13198/* harmony export */ });
13199/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursStatus_vue_vue_type_template_id_79e290b8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OpeningHoursStatus.vue?vue&type=template&id=79e290b8& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=template&id=79e290b8&");
13200
13201
13202/***/ }),
13203
vendor: 3,357 bytes, lines 13204-13314
13204/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
13205/*!********************************************************************!*\
13206  !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
13207  \********************************************************************/
13208/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
13209
13210"use strict";
13211__webpack_require__.r(__webpack_exports__);
13212/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13213/* harmony export */   "default": () => (/* binding */ normalizeComponent)
13214/* harmony export */ });
13215/* globals __VUE_SSR_CONTEXT__ */
13216
13217// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
13218// This module is a runtime utility for cleaner component module output and will
13219// be included in the final webpack user bundle.
13220
13221function normalizeComponent(
13222  scriptExports,
13223  render,
13224  staticRenderFns,
13225  functionalTemplate,
13226  injectStyles,
13227  scopeId,
13228  moduleIdentifier /* server only */,
13229  shadowMode /* vue-cli only */
13230) {
13231  // Vue.extend constructor export interop
13232  var options =
13233    typeof scriptExports === 'function' ? scriptExports.options : scriptExports
13234
13235  // render functions
13236  if (render) {
13237    options.render = render
13238    options.staticRenderFns = staticRenderFns
13239    options._compiled = true
13240  }
13241
13242  // functional template
13243  if (functionalTemplate) {
13244    options.functional = true
13245  }
13246
13247  // scopedId
13248  if (scopeId) {
13249    options._scopeId = 'data-v-' + scopeId
13250  }
13251
13252  var hook
13253  if (moduleIdentifier) {
13254    // server build
13255    hook = function (context) {
13256      // 2.3 injection
13257      context =
13258        context || // cached call
13259        (this.$vnode && this.$vnode.ssrContext) || // stateful
13260        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
13261      // 2.2 with runInNewContext: true
13262      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
13263        context = __VUE_SSR_CONTEXT__
13264      }
13265      // inject component styles
13266      if (injectStyles) {
13267        injectStyles.call(this, context)
13268      }
13269      // register component module identifier for async chunk inferrence
13270      if (context && context._registeredComponents) {
13271        context._registeredComponents.add(moduleIdentifier)
13272      }
13273    }
13274    // used by ssr in case component is cached and beforeCreate
13275    // never gets called
13276    options._ssrRegister = hook
13277  } else if (injectStyles) {
13278    hook = shadowMode
13279      ? function () {
13280          injectStyles.call(
13281            this,
13282            (options.functional ? this.parent : this).$root.$options.shadowRoot
13283          )
13284        }
13285      : injectStyles
13286  }
13287
13288  if (hook) {
13289    if (options.functional) {
13290      // for template-only hot-reload because in that case the render fn doesn't
13291      // go through the normalizer
13292      options._injectStyles = hook
13293      // register for functional component in vue file
13294      var originalRender = options.render
13295      options.render = function renderWithStyleInjection(h, context) {
13296        hook.call(context)
13297        return originalRender(h, context)
13298      }
13299    } else {
13300      // inject component registration as beforeCreate hook
13301      var existing = options.beforeCreate
13302      options.beforeCreate = existing ? [].concat(existing, hook) : [hook]
13303    }
13304  }
13305
13306  return {
13307    exports: scriptExports,
13308    options: options
13309  }
13310}
13311
13312
13313/***/ }),
13314
vendor: 1,193 bytes, lines 13315-13354
13315/***/ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js":
13316/*!*****************************************************************!*\
13317  !*** ./node_modules/@babel/runtime/helpers/asyncToGenerator.js ***!
13318  \*****************************************************************/
13319/***/ ((module) => {
13320
13321function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
13322  try {
13323    var info = gen[key](arg);
13324    var value = info.value;
13325  } catch (error) {
13326    reject(error);
13327    return;
13328  }
13329  if (info.done) {
13330    resolve(value);
13331  } else {
13332    Promise.resolve(value).then(_next, _throw);
13333  }
13334}
13335function _asyncToGenerator(fn) {
13336  return function () {
13337    var self = this,
13338      args = arguments;
13339    return new Promise(function (resolve, reject) {
13340      var gen = fn.apply(self, args);
13341      function _next(value) {
13342        asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
13343      }
13344      function _throw(err) {
13345        asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
13346      }
13347      _next(undefined);
13348    });
13349  };
13350}
13351module.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports["default"] = module.exports;
13352
13353/***/ }),
13354
vendor: 558 bytes, lines 13355-13369
13355/***/ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js":
13356/*!**********************************************************************!*\
13357  !*** ./node_modules/@babel/runtime/helpers/interopRequireDefault.js ***!
13358  \**********************************************************************/
13359/***/ ((module) => {
13360
13361function _interopRequireDefault(obj) {
13362  return obj && obj.__esModule ? obj : {
13363    "default": obj
13364  };
13365}
13366module.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports;
13367
13368/***/ }),
13369
vendor: 14,503 bytes, lines 13370-13684
13370/***/ "./node_modules/@babel/runtime/helpers/regeneratorRuntime.js":
13371/*!*******************************************************************!*\
13372  !*** ./node_modules/@babel/runtime/helpers/regeneratorRuntime.js ***!
13373  \*******************************************************************/
13374/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
13375
13376var _typeof = (__webpack_require__(/*! ./typeof.js */ "./node_modules/@babel/runtime/helpers/typeof.js")["default"]);
13377function _regeneratorRuntime() {
13378  "use strict";
13379
13380  /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
13381  module.exports = _regeneratorRuntime = function _regeneratorRuntime() {
13382    return exports;
13383  }, module.exports.__esModule = true, module.exports["default"] = module.exports;
13384  var exports = {},
13385    Op = Object.prototype,
13386    hasOwn = Op.hasOwnProperty,
13387    defineProperty = Object.defineProperty || function (obj, key, desc) {
13388      obj[key] = desc.value;
13389    },
13390    $Symbol = "function" == typeof Symbol ? Symbol : {},
13391    iteratorSymbol = $Symbol.iterator || "@@iterator",
13392    asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator",
13393    toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
13394  function define(obj, key, value) {
13395    return Object.defineProperty(obj, key, {
13396      value: value,
13397      enumerable: !0,
13398      configurable: !0,
13399      writable: !0
13400    }), obj[key];
13401  }
13402  try {
13403    define({}, "");
13404  } catch (err) {
13405    define = function define(obj, key, value) {
13406      return obj[key] = value;
13407    };
13408  }
13409  function wrap(innerFn, outerFn, self, tryLocsList) {
13410    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,
13411      generator = Object.create(protoGenerator.prototype),
13412      context = new Context(tryLocsList || []);
13413    return defineProperty(generator, "_invoke", {
13414      value: makeInvokeMethod(innerFn, self, context)
13415    }), generator;
13416  }
13417  function tryCatch(fn, obj, arg) {
13418    try {
13419      return {
13420        type: "normal",
13421        arg: fn.call(obj, arg)
13422      };
13423    } catch (err) {
13424      return {
13425        type: "throw",
13426        arg: err
13427      };
13428    }
13429  }
13430  exports.wrap = wrap;
13431  var ContinueSentinel = {};
13432  function Generator() {}
13433  function GeneratorFunction() {}
13434  function GeneratorFunctionPrototype() {}
13435  var IteratorPrototype = {};
13436  define(IteratorPrototype, iteratorSymbol, function () {
13437    return this;
13438  });
13439  var getProto = Object.getPrototypeOf,
13440    NativeIteratorPrototype = getProto && getProto(getProto(values([])));
13441  NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);
13442  var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
13443  function defineIteratorMethods(prototype) {
13444    ["next", "throw", "return"].forEach(function (method) {
13445      define(prototype, method, function (arg) {
13446        return this._invoke(method, arg);
13447      });
13448    });
13449  }
13450  function AsyncIterator(generator, PromiseImpl) {
13451    function invoke(method, arg, resolve, reject) {
13452      var record = tryCatch(generator[method], generator, arg);
13453      if ("throw" !== record.type) {
13454        var result = record.arg,
13455          value = result.value;
13456        return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) {
13457          invoke("next", value, resolve, reject);
13458        }, function (err) {
13459          invoke("throw", err, resolve, reject);
13460        }) : PromiseImpl.resolve(value).then(function (unwrapped) {
13461          result.value = unwrapped, resolve(result);
13462        }, function (error) {
13463          return invoke("throw", error, resolve, reject);
13464        });
13465      }
13466      reject(record.arg);
13467    }
13468    var previousPromise;
13469    defineProperty(this, "_invoke", {
13470      value: function value(method, arg) {
13471        function callInvokeWithMethodAndArg() {
13472          return new PromiseImpl(function (resolve, reject) {
13473            invoke(method, arg, resolve, reject);
13474          });
13475        }
13476        return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
13477      }
13478    });
13479  }
13480  function makeInvokeMethod(innerFn, self, context) {
13481    var state = "suspendedStart";
13482    return function (method, arg) {
13483      if ("executing" === state) throw new Error("Generator is already running");
13484      if ("completed" === state) {
13485        if ("throw" === method) throw arg;
13486        return doneResult();
13487      }
13488      for (context.method = method, context.arg = arg;;) {
13489        var delegate = context.delegate;
13490        if (delegate) {
13491          var delegateResult = maybeInvokeDelegate(delegate, context);
13492          if (delegateResult) {
13493            if (delegateResult === ContinueSentinel) continue;
13494            return delegateResult;
13495          }
13496        }
13497        if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) {
13498          if ("suspendedStart" === state) throw state = "completed", context.arg;
13499          context.dispatchException(context.arg);
13500        } else "return" === context.method && context.abrupt("return", context.arg);
13501        state = "executing";
13502        var record = tryCatch(innerFn, self, context);
13503        if ("normal" === record.type) {
13504          if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue;
13505          return {
13506            value: record.arg,
13507            done: context.done
13508          };
13509        }
13510        "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg);
13511      }
13512    };
13513  }
13514  function maybeInvokeDelegate(delegate, context) {
13515    var methodName = context.method,
13516      method = delegate.iterator[methodName];
13517    if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel;
13518    var record = tryCatch(method, delegate.iterator, context.arg);
13519    if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel;
13520    var info = record.arg;
13521    return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel);
13522  }
13523  function pushTryEntry(locs) {
13524    var entry = {
13525      tryLoc: locs[0]
13526    };
13527    1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);
13528  }
13529  function resetTryEntry(entry) {
13530    var record = entry.completion || {};
13531    record.type = "normal", delete record.arg, entry.completion = record;
13532  }
13533  function Context(tryLocsList) {
13534    this.tryEntries = [{
13535      tryLoc: "root"
13536    }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);
13537  }
13538  function values(iterable) {
13539    if (iterable) {
13540      var iteratorMethod = iterable[iteratorSymbol];
13541      if (iteratorMethod) return iteratorMethod.call(iterable);
13542      if ("function" == typeof iterable.next) return iterable;
13543      if (!isNaN(iterable.length)) {
13544        var i = -1,
13545          next = function next() {
13546            for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;
13547            return next.value = undefined, next.done = !0, next;
13548          };
13549        return next.next = next;
13550      }
13551    }
13552    return {
13553      next: doneResult
13554    };
13555  }
13556  function doneResult() {
13557    return {
13558      value: undefined,
13559      done: !0
13560    };
13561  }
13562  return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", {
13563    value: GeneratorFunctionPrototype,
13564    configurable: !0
13565  }), defineProperty(GeneratorFunctionPrototype, "constructor", {
13566    value: GeneratorFunction,
13567    configurable: !0
13568  }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) {
13569    var ctor = "function" == typeof genFun && genFun.constructor;
13570    return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name));
13571  }, exports.mark = function (genFun) {
13572    return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun;
13573  }, exports.awrap = function (arg) {
13574    return {
13575      __await: arg
13576    };
13577  }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {
13578    return this;
13579  }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {
13580    void 0 === PromiseImpl && (PromiseImpl = Promise);
13581    var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);
13582    return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {
13583      return result.done ? result.value : iter.next();
13584    });
13585  }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () {
13586    return this;
13587  }), define(Gp, "toString", function () {
13588    return "[object Generator]";
13589  }), exports.keys = function (val) {
13590    var object = Object(val),
13591      keys = [];
13592    for (var key in object) keys.push(key);
13593    return keys.reverse(), function next() {
13594      for (; keys.length;) {
13595        var key = keys.pop();
13596        if (key in object) return next.value = key, next.done = !1, next;
13597      }
13598      return next.done = !0, next;
13599    };
13600  }, exports.values = values, Context.prototype = {
13601    constructor: Context,
13602    reset: function reset(skipTempReset) {
13603      if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);
13604    },
13605    stop: function stop() {
13606      this.done = !0;
13607      var rootRecord = this.tryEntries[0].completion;
13608      if ("throw" === rootRecord.type) throw rootRecord.arg;
13609      return this.rval;
13610    },
13611    dispatchException: function dispatchException(exception) {
13612      if (this.done) throw exception;
13613      var context = this;
13614      function handle(loc, caught) {
13615        return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught;
13616      }
13617      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
13618        var entry = this.tryEntries[i],
13619          record = entry.completion;
13620        if ("root" === entry.tryLoc) return handle("end");
13621        if (entry.tryLoc <= this.prev) {
13622          var hasCatch = hasOwn.call(entry, "catchLoc"),
13623            hasFinally = hasOwn.call(entry, "finallyLoc");
13624          if (hasCatch && hasFinally) {
13625            if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
13626            if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
13627          } else if (hasCatch) {
13628            if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
13629          } else {
13630            if (!hasFinally) throw new Error("try statement without catch or finally");
13631            if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
13632          }
13633        }
13634      }
13635    },
13636    abrupt: function abrupt(type, arg) {
13637      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
13638        var entry = this.tryEntries[i];
13639        if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {
13640          var finallyEntry = entry;
13641          break;
13642        }
13643      }
13644      finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);
13645      var record = finallyEntry ? finallyEntry.completion : {};
13646      return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);
13647    },
13648    complete: function complete(record, afterLoc) {
13649      if ("throw" === record.type) throw record.arg;
13650      return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;
13651    },
13652    finish: function finish(finallyLoc) {
13653      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
13654        var entry = this.tryEntries[i];
13655        if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;
13656      }
13657    },
13658    "catch": function _catch(tryLoc) {
13659      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
13660        var entry = this.tryEntries[i];
13661        if (entry.tryLoc === tryLoc) {
13662          var record = entry.completion;
13663          if ("throw" === record.type) {
13664            var thrown = record.arg;
13665            resetTryEntry(entry);
13666          }
13667          return thrown;
13668        }
13669      }
13670      throw new Error("illegal catch attempt");
13671    },
13672    delegateYield: function delegateYield(iterable, resultName, nextLoc) {
13673      return this.delegate = {
13674        iterator: values(iterable),
13675        resultName: resultName,
13676        nextLoc: nextLoc
13677      }, "next" === this.method && (this.arg = undefined), ContinueSentinel;
13678    }
13679  }, exports;
13680}
13681module.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports["default"] = module.exports;
13682
13683/***/ }),
13684
vendor: 828 bytes, lines 13685-13703
13685/***/ "./node_modules/@babel/runtime/helpers/typeof.js":
13686/*!*******************************************************!*\
13687  !*** ./node_modules/@babel/runtime/helpers/typeof.js ***!
13688  \*******************************************************/
13689/***/ ((module) => {
13690
13691function _typeof(obj) {
13692  "@babel/helpers - typeof";
13693
13694  return (module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
13695    return typeof obj;
13696  } : function (obj) {
13697    return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
13698  }, module.exports.__esModule = true, module.exports["default"] = module.exports), _typeof(obj);
13699}
13700module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;
13701
13702/***/ }),
13703
vendor: 859 bytes, lines 13704-13727
13704/***/ "./node_modules/@babel/runtime/regenerator/index.js":
13705/*!**********************************************************!*\
13706  !*** ./node_modules/@babel/runtime/regenerator/index.js ***!
13707  \**********************************************************/
13708/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
13709
13710// TODO(Babel 8): Remove this file.
13711
13712var runtime = __webpack_require__(/*! ../helpers/regeneratorRuntime */ "./node_modules/@babel/runtime/helpers/regeneratorRuntime.js")();
13713module.exports = runtime;
13714
13715// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=
13716try {
13717  regeneratorRuntime = runtime;
13718} catch (accidentalStrictMode) {
13719  if (typeof globalThis === "object") {
13720    globalThis.regeneratorRuntime = runtime;
13721  } else {
13722    Function("r", "regeneratorRuntime = r")(runtime);
13723  }
13724}
13725
13726/***/ }),
13727
vendor: 2,220 bytes, lines 13728-13737
13728/***/ "./node_modules/axios/package.json":
13729/*!*****************************************!*\
13730  !*** ./node_modules/axios/package.json ***!
13731  \*****************************************/
13732/***/ ((module) => {
13733
13734"use strict";
13735module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"Promise based HTTP client for the browser and node.js","main":"index.js","scripts":{"test":"grunt test","start":"node ./sandbox/server.js","build":"NODE_ENV=production grunt build","preversion":"npm test","version":"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json","postversion":"git push && git push --tags","examples":"node ./examples/server.js","coveralls":"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","fix":"eslint --fix lib/**/*.js"},"repository":{"type":"git","url":"https://github.com/axios/axios.git"},"keywords":["xhr","http","ajax","promise","node"],"author":"Matt Zabriskie","license":"MIT","bugs":{"url":"https://github.com/axios/axios/issues"},"homepage":"https://axios-http.com","devDependencies":{"coveralls":"^3.0.0","es6-promise":"^4.2.4","grunt":"^1.3.0","grunt-banner":"^0.6.0","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-watch":"^1.0.0","grunt-eslint":"^23.0.0","grunt-karma":"^4.0.0","grunt-mocha-test":"^0.13.3","grunt-ts":"^6.0.0-beta.19","grunt-webpack":"^4.0.2","istanbul-instrumenter-loader":"^1.0.0","jasmine-core":"^2.4.1","karma":"^6.3.2","karma-chrome-launcher":"^3.1.0","karma-firefox-launcher":"^2.1.0","karma-jasmine":"^1.1.1","karma-jasmine-ajax":"^0.1.13","karma-safari-launcher":"^1.0.0","karma-sauce-launcher":"^4.3.6","karma-sinon":"^1.0.5","karma-sourcemap-loader":"^0.3.8","karma-webpack":"^4.0.2","load-grunt-tasks":"^3.5.2","minimist":"^1.2.0","mocha":"^8.2.1","sinon":"^4.5.0","terser-webpack-plugin":"^4.2.3","typescript":"^4.0.5","url-search-params":"^0.10.0","webpack":"^4.44.2","webpack-dev-server":"^3.11.0"},"browser":{"./lib/adapters/http.js":"./lib/adapters/xhr.js"},"jsdelivr":"dist/axios.min.js","unpkg":"dist/axios.min.js","typings":"./index.d.ts","dependencies":{"follow-redirects":"^1.14.0"},"bundlesize":[{"path":"./dist/axios.min.js","threshold":"5kB"}]}');
13736
13737/***/ })
vendor: 4,212 bytes, lines 13737-13835
13737
13738
13739/******/ 	});
13740/************************************************************************/
13741/******/ 	// The module cache
13742/******/ 	var __webpack_module_cache__ = {};
13743/******/
13744/******/ 	// The require function
13745/******/ 	function __webpack_require__(moduleId) {
13746/******/ 		// Check if module is in cache
13747/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
13748/******/ 		if (cachedModule !== undefined) {
13749/******/ 			return cachedModule.exports;
13750/******/ 		}
13751/******/ 		// Create a new module (and put it into the cache)
13752/******/ 		var module = __webpack_module_cache__[moduleId] = {
13753/******/ 			// no module.id needed
13754/******/ 			// no module.loaded needed
13755/******/ 			exports: {}
13756/******/ 		};
13757/******/
13758/******/ 		// Execute the module function
13759/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
13760/******/
13761/******/ 		// Return the exports of the module
13762/******/ 		return module.exports;
13763/******/ 	}
13764/******/
13765/************************************************************************/
13766/******/ 	/* webpack/runtime/define property getters */
13767/******/ 	(() => {
13768/******/ 		// define getter functions for harmony exports
13769/******/ 		__webpack_require__.d = (exports, definition) => {
13770/******/ 			for(var key in definition) {
13771/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
13772/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
13773/******/ 				}
13774/******/ 			}
13775/******/ 		};
13776/******/ 	})();
13777/******/
13778/******/ 	/* webpack/runtime/global */
13779/******/ 	(() => {
13780/******/ 		__webpack_require__.g = (function() {
13781/******/ 			if (typeof globalThis === 'object') return globalThis;
13782/******/ 			try {
13783/******/ 				return this || new Function('return this')();
13784/******/ 			} catch (e) {
13785/******/ 				if (typeof window === 'object') return window;
13786/******/ 			}
13787/******/ 		})();
13788/******/ 	})();
13789/******/
13790/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
13791/******/ 	(() => {
13792/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
13793/******/ 	})();
13794/******/
13795/******/ 	/* webpack/runtime/make namespace object */
13796/******/ 	(() => {
13797/******/ 		// define __esModule on exports
13798/******/ 		__webpack_require__.r = (exports) => {
13799/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
13800/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
13801/******/ 			}
13802/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
13803/******/ 		};
13804/******/ 	})();
13805/******/
13806/************************************************************************/
13807var __webpack_exports__ = {};
13808// This entry need to be wrapped in an IIFE because it need to be in strict mode.
13809(() => {
13810"use strict";
13811/*!*****************************************!*\
13812  !*** ./app/opening-hours-status-app.js ***!
13813  \*****************************************/
13814
13815
13816var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
13817var _vue = _interopRequireDefault(__webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm.js"));
13818var _OpeningHoursStatus = _interopRequireDefault(__webpack_require__(/*! ./components/OpeningHours/OpeningHoursStatus */ "./app/components/OpeningHours/OpeningHoursStatus.vue"));
13819// Support multiple vue contact cards on one page.
13820var vueElements = document.getElementsByClassName("vue-opening-hours-status");
13821var count = vueElements.length;
13822for (var i = 0; i < count; i++) {
13823  // Create a vue instance per opening hours component.
13824  new _vue.default({
13825    el: vueElements[i],
13826    components: {
13827      OpeningHoursStatus: _OpeningHoursStatus.default
13828    }
13829  });
13830}
13831})();
13832
13833/******/ })()
13834;
13835//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwL29wZW5pbmctaG91cnMtc3RhdHVzLWFwcC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsbUJBQUE7QUFFQSxJQUFBQyxlQUFBLEdBQStCQyxjQUFjO0VBQXJDQyxZQUFZLEdBQUFGLGVBQUEsQ0FBWkUsWUFBWTtFQUFFQyxJQUFJLEdBQUFILGVBQUEsQ0FBSkcsSUFBSTtBQUMxQixJQUFBQyxxQkFBQSxHQUE4QkYsWUFBWSxDQUFsQ0csVUFBVTtFQUFWQSxVQUFVLEdBQUFEL
13835HFCQUFBLGNBQUcsSUFBSSxHQUFBQSxxQkFBQTtBQUN6QixJQUFBRSxnQkFBQSxHQUE0QkgsSUFBSSxDQUF4QkksVUFBVTtFQUFWQSxVQUFVLEdBQUFELGdCQUFBLGNBQUcsRUFBRSxHQUFBQSxnQkFBQTtBQUFVLElBQUFFLFFBQUEsR0FBQUMsa0JBQUEsR0FFbkIsU0FBQUQsU0FBQSxFQUFNO0VBQ2xCLE9BQU9HLGNBQUssQ0FBQ0MsTUFBTSxDQUFDO0lBQ2xCQyxPQUFPLEtBQUFDLE1BQUEsQ0FBS1QsVUFBVSxJQUFJVSxNQUFNLENBQUNDLFFBQVEsQ0FBQ0MsTUFBTSxPQUFBSCxNQUFBLENBQUlQLFVBQVUsWUFBUztJQUN2RVcsT0FBTyxFQUFFO01BQ1AsUUFBUSxFQUFFLGtCQUFrQjtNQUM1QixjQUFjLEVBQUU7SUFDbEI7RUFDRixDQUFDLENBQUM7QUFDSixDQUFDOzs7Ozs7Ozs7O0FDZERDLDRGQUF1Qzs7Ozs7Ozs7Ozs7QUNBMUI7O0FBRWIsSUFBSUMsS0FBSyxHQUFHckIsbUJBQU8sQ0FBQyxxREFBWSxDQUFDO0FBQ2pDLElBQUlzQixNQUFNLEdBQUd0QixtQkFBTyxDQUFDLGlFQUFrQixDQUFDO0FBQ3hDLElBQUl1QixPQUFPLEdBQUd2QixtQkFBTyxDQUFDLHlFQUFzQixDQUFDO0FBQzdDLElBQUl3QixRQUFRLEdBQUd4QixtQkFBTyxDQUFDLDJFQUF1QixDQUFDO0FBQy9DLElBQUl5QixhQUFhLEdBQUd6QixtQkFBTyxDQUFDLDZFQUF1QixDQUFDO0FBQ3BELElBQUkwQixZQUFZLEdBQUcxQixtQkFBTyxDQUFDLG1GQUEyQixDQUFDO0FBQ3ZELElBQUkyQixlQUFlLEdBQUczQixtQkFBTyxDQUFDLHlGQUE4QixDQUFDO0FBQzdELElBQUk0QixXQUFXLEdBQUc1QixtQkFBTyxDQUFDLHlFQUFxQixDQUFDO0FBRWhEb0IsTUFBTSxDQUFDVixPQUFPLEdBQUcsU0FBU21CLFVBQVVBLENBQUNDLE1BQU0sRUFBRTtFQUMzQyxPQUFPLElBQUlDLE9BQU8sQ0FBQyxTQUFTQyxrQkFBa0JB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DFELEtBQUssRUFBRTkxRCxDQUFDLEVBQUUsRUFBRTtFQUM5QjtFQUNBLElBQUk0bkIsWUFBRyxDQUFDO0lBQ05pRixFQUFFLEVBQUV1d0MsV0FBVyxDQUFDcDlELENBQUMsQ0FBQztJQUNsQjY2QixVQUFVLEVBQUU7TUFBQ3lpQyxrQkFBa0IsRUFBbEJBO0lBQWtCO0VBQ2pDLENBQUMsQ0FBQztBQUNKLEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hcHAvdXRpbHMvYXBpLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvY3JlYXRlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZW5oYW5jZUVycm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy92YWxpZGF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIsIndlYnBhY2s6Ly8vYXBwL2NvbXBvbmVudHMvT3BlbmluZ0hvdXJzL09wZW5pbmdIb3Vyc1N0YXR1cy52dWUiLCJ3ZWJwYWNrOi8vLy4vYXBwL2NvbXBvbmVudHMvT3BlbmluZ0hvdXJzL09wZW5pbmdIb3Vyc1N0YXR1cy52dWUiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Z1ZS9kaXN0L3Z1ZS5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vYXBwL2NvbXBvbmVudHMvT3BlbmluZ0hvdXJzL09wZW5pbmdIb3Vyc1N0YXR1cy52dWU/M2FkZCIsIndlYnBhY2s6Ly8vLi9hcHAvY29tcG9uZW50cy9PcGVuaW5nSG91cnMvT3BlbmluZ0hvdXJzU3RhdHVzLnZ1ZT8zM2RlIiwid2VicGFjazovLy8uL2FwcC9jb21wb25lbnRzL09wZW5pbmdIb3Vycy9PcGVuaW5nSG91cnNTdGF0dXMudnVlPzAzYWUiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly8vLi9hcHAvb3BlbmluZy1ob3Vycy1zdGF0dXMtY
13835XBwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcblxuY29uc3QgeyBvcGVuaW5nSG91cnMsIHBhdGggfSA9IGRydXBhbFNldHRpbmdzO1xuY29uc3QgeyBhcGlCYXNlVXJsID0gbnVsbCB9ID0gb3BlbmluZ0hvdXJzO1xuY29uc3QgeyBwYXRoUHJlZml4ID0gXCJcIiB9ID0gcGF0aDtcblxuZXhwb3J0IGRlZmF1bHQoKSA9PiB7XG4gIHJldHVybiBheGlvcy5jcmVhdGUoe1xuICAgIGJhc2VVUkw6IGAke2FwaUJhc2VVcmwgfHwgd2luZG93LmxvY2F0aW9uLm9yaWdpbn0vJHtwYXRoUHJlZml4fWpzb25hcGlgLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgfVxuICB9KTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvYXhpb3MnKTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgY29va2llcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb29raWVzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBidWlsZEZ1bGxQYXRoID0gcmVxdWlyZSgnLi4vY29yZS9idWlsZEZ1bGxQYXRoJyk7XG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL3BhcnNlSGVhZGVycycpO1xudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4nKTtcbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvY3JlYXRlRXJyb3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuICAgIHZhciByZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEocmVxdWVzdERhdGEpKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfVxuXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIHZhciB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgdmFyIHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoY29uZmlnLmF1dGgucGFzc3dvcmQpKSA6ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ID8gcGFyc2VIZWFkZXJzKHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpIDogbnVsbDtcbiAgICAgIHZhciByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8ICByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1
13835ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignTmV0d29yayBFcnJvcicsIGNvbmZpZywgbnVsbCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICB2Y
13835XIgdGltZW91dEVycm9yTWVzc2FnZSA9ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCc7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGNvbmZpZy50cmFuc2l0aW9uYWwgJiYgY29uZmlnLnRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gJ0VUSU1FRE9VVCcgOiAnRUNPTk5BQk9SVEVEJyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAodXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4ucHJvbWlzZS50aGVuKGZ1bmN0aW9uIG9uQ2FuY2VsZWQoY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KGNhbmNlbCk7XG4gICAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3REYXRhKSB7XG4gICAgICByZXF1ZXN0RGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xudmFyIEF4aW9zID0gcmVxdWlyZSgnLi9jb3JlL0F4aW9zJyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL2NvcmUvbWVyZ2VDb25maWcnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgdmFyIGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIHZhciBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0KTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxudmFyIGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbmF4aW9zLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoYXhpb3MuZGVmYXVsdHMsIGluc3RhbmNlQ29uZmlnKSk7XG59O1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbCcpO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxUb2tlbicpO1xuYXhpb3MuaXNDYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9pc0NhbmNlbCcpO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybi
13835BQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuYXhpb3Muc3ByZWFkID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NwcmVhZCcpO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG5cbi8vIEFsbG93IHVzZSBvZiBkZWZhdWx0IGltcG9ydCBzeW50YXggaW4gVHlwZVNjcmlwdFxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEEgYENhbmNlbGAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBDYW5jZWwobWVzc2FnZSkge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xufVxuXG5DYW5jZWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnQ2FuY2VsJyArICh0aGlzLm1lc3NhZ2UgPyAnOiAnICsgdGhpcy5tZXNzYWdlIDogJycpO1xufTtcblxuQ2FuY2VsLnByb3RvdHlwZS5fX0NBTkNFTF9fID0gdHJ1ZTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWw7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBDYW5jZWwgPSByZXF1aXJlKCcuL0NhbmNlbCcpO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIENhbmNlbFRva2VuKGV4ZWN1dG9yKSB7XG4gIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gIH1cblxuICB2YXIgcmVzb2x2ZVByb21pc2U7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICB9KTtcblxuICB2YXIgdG9rZW4gPSB0aGlzO1xuICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSkge1xuICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgIC8vIENhbmNlbGxhdGlvbiB
13835oYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWwobWVzc2FnZSk7XG4gICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQgPSBmdW5jdGlvbiB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICovXG5DYW5jZWxUb2tlbi5zb3VyY2UgPSBmdW5jdGlvbiBzb3VyY2UoKSB7XG4gIHZhciBjYW5jZWw7XG4gIHZhciB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgY2FuY2VsID0gYztcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdG9rZW46IHRva2VuLFxuICAgIGNhbmNlbDogY2FuY2VsXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbFRva2VuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBJbnRlcmNlcHRvck1hbmFnZXIgPSByZXF1aXJlKCcuL0ludGVyY2VwdG9yTWFuYWdlcicpO1xudmFyIGRpc3BhdGNoUmVxdWVzdCA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hSZXF1ZXN0Jyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL21lcmdlQ29uZmlnJyk7XG52YXIgdmFsaWRhdG9yID0gcmVxdWlyZSgnLi4vaGVscGVycy92YWxpZGF0b3InKTtcblxudmFyIHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIEF4aW9zKGluc3RhbmNlQ29uZmlnKSB7XG4gIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgfTtcbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAqL1xuQXhpb3MucHJvdG90eXBlLnJlcXVlc3QgPSBmdW5jdGlvbiByZXF1ZXN0KGNvbmZpZykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25maWcgPSBhcmd1bWVudHNbMV0gfHwge307XG4gICAgY29uZmlnLnVybCA9IGFyZ3VtZW50c1swXTtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gIH1cblxuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gIC8vIFNldCBjb25maWcubWV0aG9kXG4gIGlmIChjb25maWcubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRzLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSB0aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZy5tZXRob2QgPSAnZ2V0JztcbiAgfVxuXG4gIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsO1xuXG4gIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiwgJzEuMC4wJyksXG4gICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuLCAnMS4wLjAnKSxcbiAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiwgJzEuMC4wJylcbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gIHZhciByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICB2YXIgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB2Y
13835XIgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciBwcm9taXNlO1xuXG4gIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgdmFyIGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdCwgdW5kZWZpbmVkXTtcblxuICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgY2hhaW4gPSBjaGFpbi5jb25jYXQocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcblxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluLnNoaWZ0KCksIGNoYWluLnNoaWZ0KCkpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cblxuICB2YXIgbmV3Q29uZmlnID0gY29uZmlnO1xuICB3aGlsZSAocmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgdmFyIG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB2YXIgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCk7XG4gICAgdHJ5IHtcbiAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uUmVqZWN0ZWQoZXJyb3IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0KG5ld0NvbmZpZyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgfVxuXG4gIHdoaWxlIChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCkpO1xuICB9XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5BeGlvcy5wcm90b3R5cGUuZ2V0VXJpID0gZnVuY3Rpb24gZ2V0VXJpKGNvbmZpZykge1xuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICByZXR1cm4gYnVpbGRVUkwoY29uZmlnLnVybCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cXD8vLCAnJyk7XG59O1xuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBJbnRlcmNlcHRvck1hbmFnZXIoKSB7XG4gIHRoaXMuaGFuZGxlcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCxcbiAgICByZWplY3RlZDogcmVqZWN0ZWQsXG4gICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgfSk7XG4gIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5lamVjdCA9IGZ1bmN0aW9uIGVqZWN0KGlkKSB7XG4gIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gKiBpbnRlcmNlcHRvcnMgdGhhdCBtY
13835XkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICBmbihoKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc0Fic29sdXRlVVJMID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMJyk7XG52YXIgY29tYmluZVVSTHMgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi9lbmhhbmNlRXJyb3InKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlRXJyb3IobWVzc2FnZSwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHRyYW5zZm9ybURhdGEgPSByZXF1aXJlKCcuL3RyYW5zZm9ybURhdGEnKTtcbnZhciBpc0NhbmNlbCA9IHJlcXVpcmUoJy4uL2NhbmNlbC9pc0NhbmNlbCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAvLyBFbnN1cmUgaGVhZGVycyBleGlzdFxuICBjb25maWcuaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzIHx8IHt9O1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy5kYXRhLFxuICAgIGNvbmZpZy5oZWFkZXJzLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gIGNvbmZpZy5oZWFkZXJzID0gdXRpbHMubWVyZ2UoXG4gICAgY29uZmlnLmhlYWRlcnMuY29tbW9uIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzW2NvbmZpZy5tZXRob2RdIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzXG4gICk7XG5cbiAgdXRpbHMuZm9yRWFjaChcbiAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICBmdW5jdGlvbiBjbGVhbkhlYWRlckNvbmZpZyhtZXRob2QpIHtcbiAgICAgIGRlbGV0ZSBjb25maWcuaGVhZGVyc1ttZXRob2RdO1xuICAgIH1cbiAgKTtcblxuICB2YXIgYWRhcHRlciA9IGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXI7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICBjb25maWcsXG4gICAgICByZXNwb25zZS5kYXRhLFxuICAgICAgcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICk7XG5cbiAgICByZXR1cm4gcmVz
13835cG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlnLCBlcnJvciBjb2RlLCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgVGhlIGVycm9yIHRvIHVwZGF0ZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZW5oYW5jZUVycm9yKGVycm9yLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIGVycm9yLmNvbmZpZyA9IGNvbmZpZztcbiAgaWYgKGNvZGUpIHtcbiAgICBlcnJvci5jb2RlID0gY29kZTtcbiAgfVxuXG4gIGVycm9yLnJlcXVlc3QgPSByZXF1ZXN0O1xuICBlcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICBlcnJvci5pc0F4aW9zRXJyb3IgPSB0cnVlO1xuXG4gIGVycm9yLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGNvZGU6IHRoaXMuY29kZVxuICAgIH07XG4gIH07XG4gIHJldHVybiBlcnJvcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICB2YXIgY29uZmlnID0ge307XG5cbiAgdmFyIHZhbHVlRnJvbUNvbmZpZzJLZXlzID0gWyd1cmwnLCAnbWV0aG9kJywgJ2RhdGEnXTtcbiAgdmFyIG1lcmdlRGVlcFByb3BlcnRpZXNLZXlzID0gWydoZWFkZXJzJywgJ2F1dGgnLCAncHJveHknLCAncGFyYW1zJ107XG4gIHZhciBkZWZhdWx0VG9Db25maWcyS2V5cyA9IFtcbiAgICAnYmFzZVVSTCcsICd0cmFuc2Zvcm1SZXF1ZXN0JywgJ3RyYW5zZm9ybVJlc3BvbnNlJywgJ3BhcmFtc1NlcmlhbGl6ZXInLFxuICAgICd0aW1lb3V0JywgJ3RpbWVvdXRNZXNzYWdlJywgJ3dpdGhDcmVkZW50aWFscycsICdhZGFwdGVyJywgJ3Jlc3BvbnNlVHlwZScsICd4c3JmQ29va2llTmFtZScsXG4gICAgJ3hzcmZIZWFkZXJOYW1lJywgJ29uVXBsb2FkUHJvZ3Jlc3MnLCAnb25Eb3dubG9hZFByb2dyZXNzJywgJ2RlY29tcHJlc3MnLFxuICAgICdtYXhDb250ZW50TGVuZ3RoJywgJ21heEJvZHlMZW5ndGgnLCAnbWF4UmVkaXJlY3RzJywgJ3RyYW5zcG9ydCcsICdodHRwQWdlbnQnLFxuICAgICdodHRwc0FnZW50JywgJ2NhbmNlbFRva2VuJywgJ3NvY2tldFBhdGgnLCAncmVzcG9uc2VFbmNvZGluZydcbiAgXTtcbiAgdmFyIGRpcmVjdE1lcmdlS2V5cyA9IFsndmFsaWRhdGVTdGF0dXMnXTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSkge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UodGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGdldE1lcmdlZ
13835FZhbHVlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIHV0aWxzLmZvckVhY2godmFsdWVGcm9tQ29uZmlnMktleXMsIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfVxuICB9KTtcblxuICB1dGlscy5mb3JFYWNoKG1lcmdlRGVlcFByb3BlcnRpZXNLZXlzLCBtZXJnZURlZXBQcm9wZXJ0aWVzKTtcblxuICB1dGlscy5mb3JFYWNoKGRlZmF1bHRUb0NvbmZpZzJLZXlzLCBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgdXRpbHMuZm9yRWFjaChkaXJlY3RNZXJnZUtleXMsIGZ1bmN0aW9uIG1lcmdlKHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBheGlvc0tleXMgPSB2YWx1ZUZyb21Db25maWcyS2V5c1xuICAgIC5jb25jYXQobWVyZ2VEZWVwUHJvcGVydGllc0tleXMpXG4gICAgLmNvbmNhdChkZWZhdWx0VG9Db25maWcyS2V5cylcbiAgICAuY29uY2F0KGRpcmVjdE1lcmdlS2V5cyk7XG5cbiAgdmFyIG90aGVyS2V5cyA9IE9iamVjdFxuICAgIC5rZXlzKGNvbmZpZzEpXG4gICAgLmNvbmNhdChPYmplY3Qua2V5cyhjb25maWcyKSlcbiAgICAuZmlsdGVyKGZ1bmN0aW9uIGZpbHRlckF4aW9zS2V5cyhrZXkpIHtcbiAgICAgIHJldHVybiBheGlvc0tleXMuaW5kZXhPZihrZXkpID09PSAtMTtcbiAgICB9KTtcblxuICB1dGlscy5mb3JFYWNoKG90aGVyS2V5cywgbWVyZ2VEZWVwUHJvcGVydGllcyk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4vY3JlYXRlRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi8uLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbnRleHQsIGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUnKTtcbnZhciBlbmhhbmNlRXJyb3IgPSByZXF1aXJlKCcuL2NvcmUvZW5oYW5jZUVycm9yJyk7XG5cbnZhciBERUZBVUxUX0NPTlRFTlRfVFlQRSA9IHtcbiAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG59O1xuXG5mdW5jdGlvbiBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZG
13835VycywgdmFsdWUpIHtcbiAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzKSAmJiB1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzWydDb250ZW50LVR5cGUnXSkpIHtcbiAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRBZGFwdGVyKCkge1xuICB2YXIgYWRhcHRlcjtcbiAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3IgYnJvd3NlcnMgdXNlIFhIUiBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMveGhyJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nKSB7XG4gICAgLy8gRm9yIG5vZGUgdXNlIEhUVFAgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuL2FkYXB0ZXJzL2h0dHAnKTtcbiAgfVxuICByZXR1cm4gYWRhcHRlcjtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscy50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbnZhciBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHtcbiAgICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxuICB9LFxuXG4gIGFkYXB0ZXI6IGdldERlZmF1bHRBZGFwdGVyKCksXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0FjY2VwdCcpO1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0NvbnRlbnQtVHlwZScpO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNPYmplY3QoZGF0YSkgfHwgKGhlYWRlcnMgJiYgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPT09ICdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIHZhciB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbDtcbiAgICB2YXIgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgIHZhciBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgdmFyIHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcgfHwgKGZvcmNlZEpTT05QYXJzaW5nICYmIHV0aWxzLmlzU3RyaW5nKGRhdGEpICYmIGRhdGEubGVuZ3RoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IGVuaGFuY2VFcnJvcihlLCB0aGlzLCAnRV9KU09OX1BBUlNFJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH1cbn07XG5cbmRlZmF1bHRzLmhlYWRlcnMgPSB7XG4gIGNvbW1vbjoge1xuICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJ1xuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHV0aWxzLm1lcmdlKERFRkFVTFRfQ09OVEVOVF9UWVBFKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2
13835ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBwYXJhbXNTZXJpYWxpemVyKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZFBhcmFtcztcbiAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zU2VyaWFsaXplcihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHBhcnRzID0gW107XG5cbiAgICB1dGlscy5mb3JFYWNoKHBhcmFtcywgZnVuY3Rpb24gc2VyaWFsaXplKHZhbCwga2V5KSB7XG4gICAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHV0aWxzLmlzQXJyYXkodmFsKSkge1xuICAgICAgICBrZXkgPSBrZXkgKyAnW10nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gW3ZhbF07XG4gICAgICB9XG5cbiAgICAgIHV0aWxzLmZvckVhY2godmFsLCBmdW5jdGlvbiBwYXJzZVZhbHVlKHYpIHtcbiAgICAgICAgaWYgKHV0aWxzLmlzRGF0ZSh2KSkge1xuICAgICAgICAgIHYgPSB2LnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QodikpIHtcbiAgICAgICAgICB2ID0gSlNPTi5zdHJpbmdpZnkodik7XG4gICAgICAgIH1cbiAgICAgICAgcGFydHMucHVzaChlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJ0cy5qb2luKCcmJyk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIHZhciBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG5cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgICAgICB2Y
13835XIgY29va2llID0gW107XG4gICAgICAgICAgY29va2llLnB1c2gobmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKHBhdGgpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKGRvbWFpbikpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlY3VyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQobmFtZSkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShuYW1lKSB7XG4gICAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZSgpIHt9LFxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKCkgeyByZXR1cm4gbnVsbDsgfSxcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGRcXCtcXC1cXC5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR
13835oZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gKHR5cGVvZiBwYXlsb2FkID09PSAnb2JqZWN0JykgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgdmFyIG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgdmFyIHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgdmFyIG9yaWdpblVSTDtcblxuICAgICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdCdzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgICB2Y
13835XIgaHJlZiA9IHVybDtcblxuICAgICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICAgIH1cblxuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICAgIHZhciBwYXJzZWQgPSAodXRpbHMuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgbm9ybWFsaXplZE5hbWUpIHtcbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbiBwcm9jZXNzSGVhZGVyKHZhbHVlLCBuYW1lKSB7XG4gICAgaWYgKG5hbWUgIT09IG5vcm1hbGl6ZWROYW1lICYmIG5hbWUudG9VcHBlckNhc2UoKSA9PT0gbm9ybWFsaXplZE5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgaGVhZGVyc1tub3JtYWxpemVkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW25hbWVdO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8vIEhlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG52YXIgaWdub3JlRHVwbGljYXRlT2YgPSBbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGhlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZUhlYWRlcnMoaGVhZGVycykge1xuICB2YXIgcGFyc2VkID0ge307XG4gIHZhciBrZXk7XG4gIHZhciB2YWw7XG4gIHZhciBpO1xuXG4gIGlmICghaGVhZGVycykgeyByZXR1cm4gcGFyc2VkOyB9XG5cbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLnNwbGl0KCdcXG4nKSwgZnVuY3Rpb24gcGFyc2VyKGxpbmUp
13835IHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cigwLCBpKSkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKGkgKyAxKSk7XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2YuaW5kZXhPZihrZXkpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gKHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gOiBbXSkuY29uY2F0KFt2YWxdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHBrZyA9IHJlcXVpcmUoJy4vLi4vLi4vcGFja2FnZS5qc29uJyk7XG5cbnZhciB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaChmdW5jdGlvbih0eXBlLCBpKSB7XG4gIHZhbGlkYXRvcnNbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG52YXIgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG52YXIgY3VycmVudFZlckFyciA9IHBrZy52ZXJzaW9uLnNwbGl0KCcuJyk7XG5cbi8qKlxuICogQ29tcGFyZSBwYWNrYWdlIHZlcnNpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSB0aGFuVmVyc2lvblxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzT2xkZXJWZXJzaW9uKHZlcnNpb24sIHRoYW5WZXJzaW9uKSB7XG4gIHZhciBwa2dWZXJzaW9uQXJyID0gdGhhblZlcnNpb24gPyB0aGFuVmVyc2lvbi5zcGxpdCgnLicpIDogY3VycmVudFZlckFycjtcbiAgdmFyIGRlc3RWZXIgPSB2ZXJzaW9uLnNwbGl0KCcuJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgaWYgKHBrZ1ZlcnNpb25BcnJbaV0gPiBkZXN0VmVyW2ldKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHBrZ1ZlcnNpb25BcnJbaV0gPCBkZXN0VmVyW2ldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICB2YXIgaXNEZXByZWNhdGVkID0gdmVyc2lvbiAmJiBpc09sZGVyVmVyc2lvbih2ZXJzaW9uKTtcblxuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgcGtnLnZlcnNpb24gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvcHQsIG9wdHMpIHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQgaW4gJyArIHZlcnNpb24pKTtcbiAgICB9XG5cbiAgICBpZiAoaXNEZXByZWNhdGVkICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICB2YXIgb3B0ID0ga2V5c1tpXTtcbiAgICB2YXIgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgdmFyIHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc09sZGVyVmVyc2lvbjogaXNPbGRlclZlcnNpb24sXG4gIGFzc2VydE9wdGlvbnM6IGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnM6IHZhbGlkYXRvcnNcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIH
13835Rlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgdHlwZW9mIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Zvcm1EYXRhKHZhbCkge1xuICByZXR1cm4gKHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcpICYmICh2YWwgaW5zdGFuY2VvZiBGb3JtRGF0YSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKHZhbC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbCkge1xuICBpZiAodG9TdHJpbmcuY2FsbCh2YWwpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGU7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNEYXRlKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGaWxlKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBGaWxlXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCbG9iKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBCbG9iXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIH
13835Rlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmVhbSh2YWwpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVUkxTZWFyY2hQYXJhbXModmFsKSB7XG4gIHJldHVybiB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXM7XG59XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuZnVuY3Rpb24gdHJpbShzdHIpIHtcbiAgcmV0dXJuIHN0ci50cmltID8gc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICovXG5mdW5jdGlvbiBpc1N0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIChuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTmF0aXZlU2NyaXB0JyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTlMnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuICApO1xufVxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbikge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09
13835iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFtrZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2UocmVzdWx0W2tleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChhLCBiLCB0aGlzQXJnKSB7XG4gIGZvckVhY2goYiwgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodGhpc0FyZyAmJiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICogQHJldHVybiB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmZ1bmN0aW9uIHN0cmlwQk9NKGNvbnRlbnQpIHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0FycmF5OiBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyOiBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcjogaXNCdWZmZXIsXG4gIGlzRm9ybURhdGE6IGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3OiBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmc6IGlzU3RyaW5nLFxuICBpc051bWJlcjogaXNOdW1iZXIsXG4gIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdDogaXNQbGFpbk9iamVjdCxcbiAgaXNVbmRlZmluZWQ6IGlzVW5kZWZpbmVkLFxuICBpc0RhdGU6IGlzRGF0ZSxcbiAgaXNGaWxlOiBpc0ZpbGUsXG4gIGlzQmxvYjogaXNCbG9iLFxuICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbTogaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zOiBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNTdGFuZGFyZEJyb3dzZXJFbnY6IGlzU3RhbmRhcmRCcm93c2VyRW52LFxuICBmb3JFYWNoOiBmb3JFYWNoLFxuICBtZXJnZTogbWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltLFxuICBzdHJpcEJPTTogc3RyaXBCT01cbn07XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJvcGVuaW5nLWhvdXJcIiB2LWlmPVwib3BlbmluZ0hvdXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cInRpbWVcIiA6Y2xhc3M9XCJvcGVuaW5nSG91ckNsYXNzXCIgdi1odG1sPVwib3BlbmluZ0hvdXJNZXNzYWdlXCI+PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwidGltZXN0YW1wXCIgdi1pZj1cImlzUGFya2luZ1BhZ2UgJiYgb3BlbmluZ0hvdXIuc3RhdHVzICE9PSAnY2xvc2VkJ1wiPlxuICAgICAge3sgb3BlbmluZ0hvdXIuc3RhcnQgfX0gLSB7eyBvcGVuaW5nSG91ci5lbmQgfX1cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cbjxzY3JpcHQ+XG4gIGltcG9ydCBBcGkgZnJvbSBcIi4uLy4uL3V0aWxzL2FwaVwiO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiBcIk9wZW5pbmdIb3Vyc1N0YXR1c1wiLFxuICAgIHByb3BzOiB7XG4gICAgICBuaWQ6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgfSxcbiAgICAgIGZpZWxkTmFtZToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICB9LFxuICAgIH0sXG4gICAgZGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIERydXBhbDogRHJ1cGFsLFxuICAgICAgICBvcGVuaW5nSG91cjogbnVsbCxcbiAgICAgIH07XG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgaXNQYXJraW5nUGFnZSgpIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdwYWdlLW5vZGUtdHlwZS1wYXJraW5nLXpvbmUnKTtcbiAgICAgIH0sXG4gICAgICBvcGVuaW5nSG91ck1lc3NhZ2UoKSB7XG4gICAgICAgIGlmICghdGhpcy5vcGVuaW5nSG91cikgcmV0dXJuICcnO1xuICAgICAgICBjb25zdCBzdGF0dXMgPSB0aGlzLm9wZW5pbmdIb3VyLnN0YXR1cztcbiAgICAgICAgaWYgKHRoaXMuaXNQYXJraW5nUGFnZSkge1xuICAgICAgICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICAgICAgICBjYXNlICdvcGVuJzpcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRHJ1cGFsLnQoJ1BhcmtpbmcgcG9zc2libGUnKTtcbiAgICAgICAgICAgIGNhc2UgJ29wZW5zX3Nvb24nOlxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5EcnVwYWwudCgnUGFya2luZyBvcGVucyBzb29uJyk7XG4gICAgICAgICAgICBjYXNlICdjbG9zZXNfc29vbic6XG4gICAgICAgICAgICAgI
13835HJldHVybiB0aGlzLkRydXBhbC50KCdQYXJraW5nIGNsb3NlcyBzb29uJyk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5EcnVwYWwudCgnUGFya2luZyBjbG9zZWQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgICAgICAgIGNhc2UgJ29wZW4nOlxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5EcnVwYWwudCgnT3BlbicsIHt9LCB7Y29udGV4dDogJ0N1cnJlbnRseSBvcGVuJ30pO1xuICAgICAgICAgICAgY2FzZSAnb3BlbnNfc29vbic6XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLkRydXBhbC50KCdPcGVucyBzb29uJyk7XG4gICAgICAgICAgICBjYXNlICdjbG9zZXNfc29vbic6XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLkRydXBhbC50KCdDbG9zZXMgc29vbicpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRHJ1cGFsLnQoJ0Nsb3NlZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9wZW5pbmdIb3VyQ2xhc3MoKSB7XG4gICAgICAgIGlmICghdGhpcy5vcGVuaW5nSG91cikgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9wZW46IHRoaXMub3BlbmluZ0hvdXIuc3RhdHVzID09PSAnb3BlbicsXG4gICAgICAgICAgb3BlbnNfc29vbjogdGhpcy5vcGVuaW5nSG91ci5zdGF0dXMgPT09ICdvcGVuc19zb29uJyxcbiAgICAgICAgICBjbG9zZXNfc29vbjogdGhpcy5vcGVuaW5nSG91ci5zdGF0dXMgPT09ICdjbG9zZXNfc29vbicsXG4gICAgICAgICAgY2xvc2VkOiB0aGlzLm9wZW5pbmdIb3VyLnN0YXR1cyAhPT0gJ29wZW4nICYmIHRoaXMub3BlbmluZ0hvdXIuc3RhdHVzICE9PSAnb3BlbnNfc29vbicgJiYgdGhpcy5vcGVuaW5nSG91ci5zdGF0dXMgIT09ICdjbG9zZXNfc29vbidcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGFzeW5jIGdldE9wZW5pbmdIb3VycygpIHtcbiAgICAgICAgdGhpcy5vcGVuaW5nSG91ciA9IGF3YWl0IEFwaSgpXG4gICAgICAgICAgLmdldChgb3BlbmluZy1ob3Vycy8ke3RoaXMubmlkfS8ke3RoaXMuZmllbGROYW1lfWApXG4gICAgICAgICAgLnRoZW4oKHsgZGF0YTogeyBkYXRhIH0gfSkgPT4gZGF0YSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGVkKCkge1xuICAgICAgdGhpcy5nZXRPcGVuaW5nSG91cnMoKTtcbiAgICB9XG4gIH1cbjwvc2NyaXB0PlxuIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgdmFyIF92bSA9IHRoaXMsXG4gICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgcmV0dXJuIF92bS5vcGVuaW5nSG91clxuICAgID8gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJvcGVuaW5nLWhvdXJcIiB9LCBbXG4gICAgICAgIF9jKFwic3BhblwiLCB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwidGltZVwiLFxuICAgICAgICAgIGNsYXNzOiBfdm0ub3BlbmluZ0hvdXJDbGFzcyxcbiAgICAgICAgICBkb21Qcm9wczogeyBpbm5lckhUTUw6IF92bS5fcyhfdm0ub3BlbmluZ0hvdXJNZXNzYWdlKSB9LFxuICAgICAgICB9KSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX3ZtLmlzUGFya2luZ1BhZ2UgJiYgX3ZtLm9wZW5pbmdIb3VyLnN0YXR1cyAhPT0gXCJjbG9zZWRcIlxuICAgICAgICAgID8gX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwidGltZXN0YW1wXCIgfSwgW1xuICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgXCJcXG4gICAgXCIgK1xuICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5vcGVuaW5nSG91ci5zdGFydCkgK1xuICAgICAgICAgICAgICAgICAgXCIgLSBcIiArXG4gICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLm9wZW5pbmdIb3VyLmVuZCkgK1xuICAgICAgICAgICAgICAgICAgXCJcXG4gIFwiXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBdKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCIvKiFcbiAqIFZ1ZS5qcyB2Mi43LjE0XG4gKiAoYykgMjAxNC0yMDIyIEV2YW4gWW91XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cbnZhciBlbXB0eU9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuLy8gVGhlc2UgaGVscGVycyBwcm9kdWNlIGJldHRlciBWTSBjb2RlIGluIEpTIGVuZ2luZXMgZHVlIHRvIHRoZWlyXG4vLyBleHBsaWNpdG5lc3MgYW5kIGZ1bmN0aW9uIGlubGluaW5nLlxuZnVuY3Rpb24gaXNVbmRlZih2KSB7XG4gICAgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsO1xufVxuZnVuY3Rpb24gaXNEZWYodikge1xuICAgIHJldHVybiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzVHJ1ZSh2KSB7XG4gICAgcmV0dXJuIHYgPT09IHRydWU7XG59XG5mdW5jdGlvbiBpc0ZhbHNlKHYpIHtcbiAgICByZXR1cm4gdiA9PT0gZmFsc2U7XG59XG4vKipcbiAqIENoZWNrIGlmIHZhbHVlIGlzIHByaW1pdGl2ZS5cbiAqL1xuZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcbiAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJyB8fFxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyk7XG59XG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cbi8qKlxuICogUXVpY2sgb2JqZWN0IGNoZWNrIC0gdGhpcyBpcyBwcmltYXJpbHkgdXNlZCB0byB0ZWxsXG4gKiBvYmplY3RzIGZyb20gcHJpbWl0aXZlIHZhbHVlcyB3aGVuIHdlIGtub3cgdGhlIHZhbHVlXG4gKiBpcyBhIEpTT04tY29tcGxpYW50IHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICAgIHJldHVybi
13835BvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCc7XG59XG4vKipcbiAqIEdldCB0aGUgcmF3IHR5cGUgc3RyaW5nIG9mIGEgdmFsdWUsIGUuZy4sIFtvYmplY3QgT2JqZWN0XS5cbiAqL1xudmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5mdW5jdGlvbiB0b1Jhd1R5cGUodmFsdWUpIHtcbiAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKTtcbn1cbi8qKlxuICogU3RyaWN0IG9iamVjdCB0eXBlIGNoZWNrLiBPbmx5IHJldHVybnMgdHJ1ZVxuICogZm9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcbiAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5mdW5jdGlvbiBpc1JlZ0V4cCh2KSB7XG4gICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKHYpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbi8qKlxuICogQ2hlY2sgaWYgdmFsIGlzIGEgdmFsaWQgYXJyYXkgaW5kZXguXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRBcnJheUluZGV4KHZhbCkge1xuICAgIHZhciBuID0gcGFyc2VGbG9hdChTdHJpbmcodmFsKSk7XG4gICAgcmV0dXJuIG4gPj0gMCAmJiBNYXRoLmZsb29yKG4pID09PSBuICYmIGlzRmluaXRlKHZhbCk7XG59XG5mdW5jdGlvbiBpc1Byb21pc2UodmFsKSB7XG4gICAgcmV0dXJuIChpc0RlZih2YWwpICYmXG4gICAgICAgIHR5cGVvZiB2YWwudGhlbiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICB0eXBlb2YgdmFsLmNhdGNoID09PSAnZnVuY3Rpb24nKTtcbn1cbi8qKlxuICogQ29udmVydCBhIHZhbHVlIHRvIGEgc3RyaW5nIHRoYXQgaXMgYWN0dWFsbHkgcmVuZGVyZWQuXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbCkge1xuICAgIHJldHVybiB2YWwgPT0gbnVsbFxuICAgICAgICA/ICcnXG4gICAgICAgIDogQXJyYXkuaXNBcnJheSh2YWwpIHx8IChpc1BsYWluT2JqZWN0KHZhbCkgJiYgdmFsLnRvU3RyaW5nID09PSBfdG9TdHJpbmcpXG4gICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHZhbCwgbnVsbCwgMilcbiAgICAgICAgICAgIDogU3RyaW5nKHZhbCk7XG59XG4vKipcbiAqIENvbnZlcnQgYW4gaW5wdXQgdmFsdWUgdG8gYSBudW1iZXIgZm9yIHBlcnNpc3RlbmNlLlxuICogSWYgdGhlIGNvbnZlcnNpb24gZmFpbHMsIHJldHVybiBvcmlnaW5hbCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbCkge1xuICAgIHZhciBuID0gcGFyc2VGbG9hdCh2YWwpO1xuICAgIHJldHVybiBpc05hTihuKSA/IHZhbCA6IG47XG59XG4vKipcbiAqIE1ha2UgYSBtYXAgYW5kIHJldHVybiBhIGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhIGtleVxuICogaXMgaW4gdGhhdCBtYXAuXG4gKi9cbmZ1bmN0aW9uIG1ha2VNYXAoc3RyLCBleHBlY3RzTG93ZXJDYXNlKSB7XG4gICAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdmFyIGxpc3QgPSBzdHIuc3BsaXQoJywnKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWFwW2xpc3RbaV1dID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGVjdHNMb3dlckNhc2UgPyBmdW5jdGlvbiAodmFsKSB7IHJldHVybiBtYXBbdmFsLnRvTG93ZXJDYXNlKCldOyB9IDogZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbWFwW3ZhbF07IH07XG59XG4vKipcbiAqIENoZWNrIGlmIGEgdGFnIGlzIGEgYnVpbHQtaW4gdGFnLlxuICovXG52YXIgaXNCdWlsdEluVGFnID0gbWFrZU1hcCgnc2xvdCxjb21wb25lbnQnLCB0cnVlKTtcbi8qKlxuICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIGlzIGEgcmVzZXJ2ZWQgYXR0cmlidXRlLlxuICovXG52YXIgaXNSZXNlcnZlZEF0dHJpYnV0ZSA9IG1ha2VNYXAoJ2tleSxyZWYsc2xvdCxzbG90LXNjb3BlLGlzJyk7XG4vKipcbiAqIFJlbW92ZSBhbiBpdGVtIGZyb20gYW4gYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZSQyKGFyciwgaXRlbSkge1xuICAgIHZhciBsZW4gPSBhcnIubGVuZ3RoO1xuICAgIGlmIChsZW4pIHtcbiAgICAgICAgLy8gZmFzdCBwYXRoIGZvciB0aGUgb25seSAvIGxhc3QgaXRlbVxuICAgICAgICBpZiAoaXRlbSA9PT0gYXJyW2xlbiAtIDFdKSB7XG4gICAgICAgICAgICBhcnIubGVuZ3RoID0gbGVuIC0gMTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2Y
13835XIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhbiBvYmplY3QgaGFzIHRoZSBwcm9wZXJ0eS5cbiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbmZ1bmN0aW9uIGhhc093bihvYmosIGtleSkge1xuICAgIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgY2FjaGVkIHZlcnNpb24gb2YgYSBwdXJlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjYWNoZWQoZm4pIHtcbiAgICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHJldHVybiBmdW5jdGlvbiBjYWNoZWRGbihzdHIpIHtcbiAgICAgICAgdmFyIGhpdCA9IGNhY2hlW3N0cl07XG4gICAgICAgIHJldHVybiBoaXQgfHwgKGNhY2hlW3N0cl0gPSBmbihzdHIpKTtcbiAgICB9O1xufVxuLyoqXG4gKiBDYW1lbGl6ZSBhIGh5cGhlbi1kZWxpbWl0ZWQgc3RyaW5nLlxuICovXG52YXIgY2FtZWxpemVSRSA9IC8tKFxcdykvZztcbnZhciBjYW1lbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKGNhbWVsaXplUkUsIGZ1bmN0aW9uIChfLCBjKSB7IHJldHVybiAoYyA/IGMudG9VcHBlckNhc2UoKSA6ICcnKTsgfSk7XG59KTtcbi8qKlxuICogQ2FwaXRhbGl6ZSBhIHN0cmluZy5cbiAqL1xudmFyIGNhcGl0YWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG59KTtcbi8qKlxuICogSHlwaGVuYXRlIGEgY2FtZWxDYXNlIHN0cmluZy5cbiAqL1xudmFyIGh5cGhlbmF0ZVJFID0gL1xcQihbQS1aXSkvZztcbnZhciBoeXBoZW5hdGUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZShoeXBoZW5hdGVSRSwgJy0kMScpLnRvTG93ZXJDYXNlKCk7XG59KTtcbi8qKlxuICogU2ltcGxlIGJpbmQgcG9seWZpbGwgZm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBzdXBwb3J0IGl0LFxuICogZS5nLiwgUGhhbnRvbUpTIDEueC4gVGVjaG5pY2FsbHksIHdlIGRvbid0IG5lZWQgdGhpcyBhbnltb3JlXG4gKiBzaW5jZSBuYXRpdmUgYmluZCBpcyBub3cgcGVyZm9ybWFudCBlbm91Z2ggaW4gbW9zdCBicm93c2Vycy5cbiAqIEJ1dCByZW1vdmluZyBpdCB3b3VsZCBtZWFuIGJyZWFraW5nIGNvZGUgdGhhdCB3YXMgYWJsZSB0byBydW4gaW5cbiAqIFBoYW50b21KUyAxLngsIHNvIHRoaXMgbXVzdCBiZSBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICovXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gcG9seWZpbGxCaW5kKGZuLCBjdHgpIHtcbiAgICBmdW5jdGlvbiBib3VuZEZuKGEpIHtcbiAgICAgICAgdmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICByZXR1cm4gbFxuICAgICAgICAgICAgPyBsID4gMVxuICAgICAgICAgICAgICAgID8gZm4uYXBwbHkoY3R4LCBhcmd1bWVudHMpXG4gICAgICAgICAgICAgICAgOiBmbi5jYWxsKGN0eCwgYSlcbiAgICAgICAgICAgIDogZm4uY2FsbChjdHgpO1xuICAgIH1cbiAgICBib3VuZEZuLl9sZW5ndGggPSBmbi5sZW5ndGg7XG4gICAgcmV0dXJuIGJvdW5kRm47XG59XG5mdW5jdGlvbiBuYXRpdmVCaW5kKGZuLCBjdHgpIHtcbiAgICByZXR1cm4gZm4uYmluZChjdHgpO1xufVxuLy8gQHRzLWV4cGVjdC1lcnJvciBiaW5kIGNhbm5vdCBiZSBgdW5kZWZpbmVkYFxudmFyIGJpbmQkMSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kID8gbmF0aXZlQmluZCA6IHBvbHlmaWxsQmluZDtcbi8qKlxuICogQ29udmVydCBhbiBBcnJheS1saWtlIG9iamVjdCB0byBhIHJlYWwgQXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkobGlzdCwgc3RhcnQpIHtcbiAgICBzdGFydCA9IHN0YXJ0IHx8IDA7XG4gICAgdmFyIGkgPSBsaXN0Lmxlbmd0aCAtIHN0YXJ0O1xuICAgIHZhciByZXQgPSBuZXcgQXJyYXkoaSk7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgICByZXRbaV0gPSBsaXN0W2kgKyBzdGFydF07XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG4vKipcbiAqIE1peCBwcm9wZXJ0aWVzIGludG8gdGFyZ2V0IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKHRvLCBfZnJvbSkge1xuICAgIGZvciAodmFyIGtleSBpbiBfZnJvbSkge1xuICAgICAgICB0b1trZXldID0gX2Zyb21ba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIHRvO1xufVxuLyoqXG4gKiBNZXJnZSBhbiBBcnJheSBvZiBPYmplY3RzIGludG8gYSBzaW5nbGUgT2JqZWN0LlxuICovXG5mdW5jdGlvbiB0b09iamVjdChhcnIpIHtcbiAgICB2YXIgcmVzID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGFycltpXSkge1xuICAgICAgICAgICAgZXh0ZW5kKHJlcywgYXJyW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qKlxuICogUGVyZm9ybSBubyBvcGVyYXRpb24uXG4gKiBTdHViYmluZyBhcmdzIHRvIG1ha2UgRmxvdyBoYXBweSB3aXRob3V0IGxlYXZpbmcgdXNlbGVzcyB0cmFuc3BpbGVkIGNvZGVcbiAqIHdpdGggLi4ucmVzdCAoaHR0cHM6Ly9mbG93Lm9yZy9ibG9nLzIwMTcvMDUvMDcvU3RyaWN0LUZ1bmN0aW9uLUNhbGwtQXJpdHkvKS5cbiAqL1xuZnVuY3Rpb24gbm9vcChhLCBiLCBjKSB7IH1cbi8qKlxuICogQWx3YXlzIHJldHVybiBmYWxzZS5cbiAqL1xudmFyIG5vID0gZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIGZhbHNlOyB9O1xuLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyoqXG4gKiBSZXR1cm4gdGhlIHNhbWUgdmFsdWUuXG4gKi9cbnZhciBpZGVudGl0eSA9IGZ1bmN0aW9uIChfKSB7IHJldHVybiBfOyB9O1xuLyoqXG4gKiBHZW5lcmF0ZSBhIHN0cmluZyBjb250YWluaW5nIHN0YXRpYyBrZXlzIGZyb20gY29tcGlsZXIgbW9kdWxlcy5cbiAqL1xuZnVuY3Rpb24gZ2VuU3RhdGljS2V5cyQxKG1vZHVsZXMpIHtcbiAgICByZXR1cm4gbW9kdWxlc1xuICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChrZXlzLCBtKSB7XG4gICAgICAgI
13835HJldHVybiBrZXlzLmNvbmNhdChtLnN0YXRpY0tleXMgfHwgW10pO1xuICAgIH0sIFtdKVxuICAgICAgICAuam9pbignLCcpO1xufVxuLyoqXG4gKiBDaGVjayBpZiB0d28gdmFsdWVzIGFyZSBsb29zZWx5IGVxdWFsIC0gdGhhdCBpcyxcbiAqIGlmIHRoZXkgYXJlIHBsYWluIG9iamVjdHMsIGRvIHRoZXkgaGF2ZSB0aGUgc2FtZSBzaGFwZT9cbiAqL1xuZnVuY3Rpb24gbG9vc2VFcXVhbChhLCBiKSB7XG4gICAgaWYgKGEgPT09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIHZhciBpc09iamVjdEEgPSBpc09iamVjdChhKTtcbiAgICB2YXIgaXNPYmplY3RCID0gaXNPYmplY3QoYik7XG4gICAgaWYgKGlzT2JqZWN0QSAmJiBpc09iamVjdEIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBpc0FycmF5QSA9IEFycmF5LmlzQXJyYXkoYSk7XG4gICAgICAgICAgICB2YXIgaXNBcnJheUIgPSBBcnJheS5pc0FycmF5KGIpO1xuICAgICAgICAgICAgaWYgKGlzQXJyYXlBICYmIGlzQXJyYXlCKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgYS5ldmVyeShmdW5jdGlvbiAoZSwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvb3NlRXF1YWwoZSwgYltpXSk7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFpc0FycmF5QSAmJiAhaXNBcnJheUIpIHtcbiAgICAgICAgICAgICAgICB2Y
13835XIga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgICAgICAgICAgICB2YXIga2V5c0IgPSBPYmplY3Qua2V5cyhiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGtleXNBLmxlbmd0aCA9PT0ga2V5c0IubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgIGtleXNBLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGFba2V5XSwgYltrZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoIWlzT2JqZWN0QSAmJiAhaXNPYmplY3RCKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4vKipcbiAqIFJldHVybiB0aGUgZmlyc3QgaW5kZXggYXQgd2hpY2ggYSBsb29zZWx5IGVxdWFsIHZhbHVlIGNhbiBiZVxuICogZm91bmQgaW4gdGhlIGFycmF5IChpZiB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCwgdGhlIGFycmF5IG11c3RcbiAqIGNvbnRhaW4gYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHNoYXBlKSwgb3IgLTEgaWYgaXQgaXMgbm90IHByZXNlbnQuXG4gKi9cbmZ1bmN0aW9uIGxvb3NlSW5kZXhPZihhcnIsIHZhbCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChsb29zZUVxdWFsKGFycltpXSwgdmFsKSlcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG4vKipcbiAqIEVuc3VyZSBhIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IG9uY2UuXG4gKi9cbmZ1bmN0aW9uIG9uY2UoZm4pIHtcbiAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pcyNwb2x5ZmlsbFxuZnVuY3Rpb24gaGFzQ2hhbmdlZCh4LCB5KSB7XG4gICAgaWYgKHggPT09IHkpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IDAgJiYgMSAvIHggIT09IDEgLyB5O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHggPT09IHggfHwgeSA9PT0geTtcbiAgICB9XG59XG5cbnZhciBTU1JfQVRUUiA9ICdkYXRhLXNlcnZlci1yZW5kZXJlZCc7XG52YXIgQVNTRVRfVFlQRVMgPSBbJ2NvbXBvbmVudCcsICdkaXJlY3RpdmUnLCAnZmlsdGVyJ107XG52YXIgTElGRUNZQ0xFX0hPT0tTID0gW1xuICAgICdiZWZvcmVDcmVhdGUnLFxuICAgICdjcmVhdGVkJyxcbiAgICAnYmVmb3JlTW91bnQnLFxuICAgICdtb3VudGVkJyxcbiAgICAnYmVmb3JlVXBkYXRlJyxcbiAgICAndXBkYXRlZCcsXG4gICAgJ2JlZm9yZURlc3Ryb3knLFxuICAgICdkZXN0cm95ZWQnLFxuICAgICdhY3RpdmF0ZWQnLFxuICAgICdkZWFjdGl2YXRlZCcsXG4gICAgJ2Vycm9yQ2FwdHVyZWQnLFxuICAgICdzZXJ2ZXJQcmVmZXRjaCcsXG4gICAgJ3JlbmRlclRyYWNrZWQnLFxuICAgICdyZW5kZXJUcmlnZ2VyZWQnXG5dO1xuXG52YXIgY29uZmlnID0ge1xuICAgIC8qKlxuICAgICAqIE9wdGlvbiBtZXJnZSBzdHJhdGVnaWVzICh1c2VkIGluIGNvcmUvdXRpbC9vcHRpb25zKVxuICAgICAqL1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIG9wdGlvbk1lcmdlU3RyYXRlZ2llczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHN1cHByZXNzIHdhcm5pbmdzLlxuICAgICAqL1xuICAgIHNpbGVudDogZmFsc2UsXG4gICAgLyoqXG4gICAgICogU2hvdyBwcm9kdWN0aW9uIG1vZGUgdGlwIG1lc3NhZ2Ugb24gYm9vdD9cbiAgICAgKi9cbiAgICBwcm9kdWN0aW9uVGlwOiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLFxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZW5hYmxlIGRldnRvb2xzXG4gICAgICovXG4gICAgZGV2dG9vbHM6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byByZWNvcmQgcGVyZlxuICAgICAqL1xuICAgIHBlcmZvcm1hbmNlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBFcnJvciBoYW5kbGVyIGZvciB3YXRjaGVyIGVycm9yc1xuICAgICAqL1xuICAgIGVycm9ySGFuZGxlcjogbnVsbCxcbiAgICAvKipcbiAgICAgKiBXYXJuIGhhbmRsZXIgZm9yIHdhdGNoZXIgd2FybnNcbiAgICAgKi9cbiAgICB3YXJuSGFuZGxlcjogbnVsbCxcbiAgICAvKipcbiAgICAgKiBJZ25vcmUgY2VydGFpbiBjdXN0b20gZWxlbWVudHNcbiAgICAgKi9cbiAgICBpZ25vcmVkRWxlbWVudHM6IFtdLFxuICAgIC8qKlxuICAgICAqIEN1c3RvbSB1c2VyIGtleSBhbGlhc2VzIGZvciB2LW9uXG4gICAgICovXG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAga2V5Q29kZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSB0YWcgaXMgcmVzZXJ2ZWQgc28gdGhhdCBpdCBjYW5ub3QgYmUgcmVnaXN0ZXJlZCBhcyBhXG4gICAgICogY29tcG9uZW50LiBUaGlzIGlzIHBsYXRmb3JtLWRlcGVuZGVudCBhbmQgbWF5IGJlIG92ZXJ3cml0dGVuLlxuICAgICAqL1xuICAgIGlzUmVzZXJ2ZWRUYWc6IG5vLFxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBpcyByZXNlcnZlZCBzbyB0aGF0IGl0IGNhbm5vdCBiZSB1c2VkIGFzIGEgY29tcG9uZW50XG4gICAgICogcHJvcC4gVGhpcyBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQgYW5kIG1heSBiZSBvdmVyd3JpdHRlbi5cbiAgICAgKi9cbiAgICBpc1Jlc2VydmVkQXR0cjogbm8sXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSB0YWcgaXMgYW4gdW5rbm93biBlbGVtZW50LlxuICAgICAqIFBsYXRmb3JtLWRlcGVuZGVudC5cbiAgICAgKi9cbiAgICBpc1Vua25vd25FbGVtZW50OiBubyxcbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIG5hbWVzcGFjZSBvZiBhbiBlbGVtZW50XG4gICAgICovXG4gICAgZ2V0VGFnTmFtZXNwYWNlOiBub29wLFxuICAgIC8qKlxuICAgICAqIFBhcnNlIHRoZSByZWFsIHRhZyBuYW1lIGZvciB0aGUgc3BlY2lmaWMgcGxhdGZvcm0uXG4gICAgICovXG4gICAgcGFyc2VQbGF0Zm9ybVRhZ05hbWU6IGlkZW50aXR5LFxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBtdXN0IGJlIGJvdW5kIHVzaW5nIHByb3BlcnR5LCBlLmcuIHZhbHVlXG4gICAgICogUGxhdGZvcm0tZGVwZW5kZW50LlxuICAgICAqL1xuICAgIG11c3RVc2VQcm9wOiBubyxcbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIHVwZGF0ZXMgYXN5bmNocm9ub3VzbHkuIEludGVuZGVkIHRvIGJlIHVzZWQgYnkgVnVlIFRlc3QgVXRpbHNcbiAgICAgKiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSByZWR1Y2UgcGVyZm9ybWFuY2UgaWYgc2V0IHRvIGZhbHNlLlxuICAgICAqL1xuICAgIGFzeW5jOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIEV4cG9zZWQgZm9yIGxlZ2FjeSByZWFzb25zXG4gICAgICovXG4gICAgX2xpZmVjeWNsZUhvb2tzOiBMSUZFQ1lDTEVfSE9PS1Ncbn07XG5cbi8qKlxuICogdW5pY29kZSBsZXR0ZXJzIHVzZWQgZm9yIHBhcnNpbmcgaHRtbCB0YWdzLCBjb21wb25lbnQgbmFtZXMgYW5kIHByb3BlcnR5IHBhdGhzLlxuICogdXNpbmcgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1My9zZW1hbnRpY3Mtc2NyaXB0aW5nLmh0bWwjcG90ZW50aWFsY3VzdG9tZWxlbWVudG5hbWVcbiAqIHNraXBwaW5nIFxcdTEwMDAwLVxcdUVGRkZGIGR1ZSB0byBpdCBmcmVlemluZyB1cCBQaGFudG9tSlNcbiAqL1xudmFyIHVuaWNvZGVSZWdFeHAgPSAvYS16QS1aXFx1MDBCN1xcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwM0YtXFx1MjA0MFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RD
13835dGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRC87XG4vKipcbiAqIENoZWNrIGlmIGEgc3RyaW5nIHN0YXJ0cyB3aXRoICQgb3IgX1xuICovXG5mdW5jdGlvbiBpc1Jlc2VydmVkKHN0cikge1xuICAgIHZhciBjID0gKHN0ciArICcnKS5jaGFyQ29kZUF0KDApO1xuICAgIHJldHVybiBjID09PSAweDI0IHx8IGMgPT09IDB4NWY7XG59XG4vKipcbiAqIERlZmluZSBhIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBkZWYob2JqLCBrZXksIHZhbCwgZW51bWVyYWJsZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICB2YWx1ZTogdmFsLFxuICAgICAgICBlbnVtZXJhYmxlOiAhIWVudW1lcmFibGUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbn1cbi8qKlxuICogUGFyc2Ugc2ltcGxlIHBhdGguXG4gKi9cbnZhciBiYWlsUkUgPSBuZXcgUmVnRXhwKFwiW15cIi5jb25jYXQodW5pY29kZVJlZ0V4cC5zb3VyY2UsIFwiLiRfXFxcXGRdXCIpKTtcbmZ1bmN0aW9uIHBhcnNlUGF0aChwYXRoKSB7XG4gICAgaWYgKGJhaWxSRS50ZXN0KHBhdGgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIHJldHVybiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghb2JqKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIG9iaiA9IG9ialtzZWdtZW50c1tpXV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xufVxuXG4vLyBjYW4gd2UgdXNlIF9fcHJvdG9fXz9cbnZhciBoYXNQcm90byA9ICdfX3Byb3RvX18nIGluIHt9O1xuLy8gQnJvd3NlciBlbnZpcm9ubWVudCBzbmlmZmluZ1xudmFyIGluQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xudmFyIFVBID0gaW5Ccm93c2VyICYmIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG52YXIgaXNJRSA9IFVBICYmIC9tc2llfHRyaWRlbnQvLnRlc3QoVUEpO1xudmFyIGlzSUU5ID0gVUEgJiYgVUEuaW5kZXhPZignbXNpZSA5LjAnKSA+IDA7XG52YXIgaXNFZGdlID0gVUEgJiYgVUEuaW5kZXhPZignZWRnZS8nKSA+IDA7XG5VQSAmJiBVQS5pbmRleE9mKCdhbmRyb2lkJykgPiAwO1xudmFyIGlzSU9TID0gVUEgJiYgL2lwaG9uZXxpcGFkfGlwb2R8aW9zLy50ZXN0KFVBKTtcblVBICYmIC9jaHJvbWVcXC9cXGQrLy50ZXN0KFVBKSAmJiAhaXNFZGdlO1xuVUEgJiYgL3BoYW50b21qcy8udGVzdChVQSk7XG52YXIgaXNGRiA9IFVBICYmIFVBLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLyk7XG4vLyBGaXJlZm94IGhhcyBhIFwid2F0Y2hcIiBmdW5jdGlvbiBvbiBPYmplY3QucHJvdG90eXBlLi4uXG4vLyBAdHMtZXhwZWN0LWVycm9yIGZpcmVib3ggc3VwcG9ydFxudmFyIG5hdGl2ZVdhdGNoID0ge30ud2F0Y2g7XG52YXIgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG5pZiAoaW5Ccm93c2VyKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIG9wdHMgPSB7fTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wdHMsICdwYXNzaXZlJywge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgICAgICBzdXBwb3J0c1Bhc3NpdmUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzI4NVxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdC1wYXNzaXZlJywgbnVsbCwgb3B0cyk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7IH1cbn1cbi8vIHRoaXMgbmVlZHMgdG8gYmUgbGF6eS1ldmFsZWQgYmVjYXVzZSB2dWUgbWF5IGJlIHJlcXVpcmVkIGJlZm9yZVxuLy8gdnVlLXNlcnZlci1yZW5kZXJlciBjYW4gc2V0IFZVRV9FTlZcbnZhciBfaXNTZXJ2ZXI7XG52YXIgaXNTZXJ2ZXJSZW5kZXJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKF9pc1NlcnZlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIWluQnJvd3NlciAmJiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gZGV0ZWN0IHByZXNlbmNlIG9mIHZ1ZS1zZXJ2ZXItcmVuZGVyZXIgYW5kIGF2b2lkXG4gICAgICAgICAgICAvLyBXZWJwYWNrIHNoaW1taW5nIHRoZSBwcm9jZXNzXG4gICAgICAgICAgICBfaXNTZXJ2ZXIgPVxuICAgICAgICAgICAgICAgIGdsb2JhbFsncHJvY2VzcyddICYmIGdsb2JhbFsncHJvY2VzcyddLmVudi5WVUVfRU5WID09PSAnc2VydmVyJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF9pc1NlcnZlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfaXNTZXJ2ZXI7XG59O1xuLy8gZGV0ZWN0IGRldnRvb2xzXG52YXIgZGV2dG9vbHMgPSBpbkJyb3dzZXIgJiYgd2luZG93Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gaXNOYXRpdmUoQ3Rvcikge1xuICAgIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoQ3Rvci50b1N0cmluZygpKTtcbn1cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIGlzTmF0aXZlKFN5bWJvbCkgJiZcbiAgICB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICBpc05hdGl2ZShSZWZsZWN0Lm93bktleXMpO1xudmFyIF9TZXQ7IC8vICRmbG93LWRpc2FibGUtbGluZVxuLyogaXN0YW5idWwgaWdub3JlIGlmICovIGlmICh0eXBlb2YgU2V0ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShTZXQpKSB7XG4gICAgLy8gdXNlIG5hdGl2ZSBTZXQgd2hlbiBhdmFpbGFibGUuXG4gICAgX1NldCA9IFNldDtcbn1cbmVsc2Uge1xuICAgIC8vIGEgbm9uLXN0YW5kYXJkIFNldCBwb2x5ZmlsbCB0aGF0IG9ubHkgd29ya3Mgd2l0aCBwcmltaXRpdmUga2V5cy5cbiAgICBfU2V0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgICAgICBmdW5jdGlvbiBTZXQoKSB7XG4gICAgICAgICAgICB0aGlzLnNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgI
13835H1cbiAgICAgICAgU2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRba2V5XSA9PT0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgU2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICB0aGlzLnNldFtrZXldID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFNldDtcbiAgICB9KCkpO1xufVxuXG52YXIgY3VycmVudEluc3RhbmNlID0gbnVsbDtcbi8qKlxuICogVGhpcyBpcyBleHBvc2VkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdjMgKGUuZy4gc29tZSBmdW5jdGlvbnMgaW4gVnVlVXNlXG4gKiByZWxpZXMgb24gaXQpLiBEbyBub3QgdXNlIHRoaXMgaW50ZXJuYWxseSwganVzdCB1c2UgYGN1cnJlbnRJbnN0YW5jZWAuXG4gKlxuICogQGludGVybmFsIHRoaXMgZnVuY3Rpb24gbmVlZHMgbWFudWFsIHR5cGUgZGVjbGFyYXRpb24gYmVjYXVzZSBpdCByZWxpZXNcbiAqIG9uIHByZXZpb3VzbHkgbWFudWFsbHkgYXV0aG9yZWQgdHlwZXMgZnJvbSBWdWUgMlxuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50SW5zdGFuY2UoKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRJbnN0YW5jZSAmJiB7IHByb3h5OiBjdXJyZW50SW5zdGFuY2UgfTtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHNldEN1cnJlbnRJbnN0YW5jZSh2bSkge1xuICAgIGlmICh2bSA9PT0gdm9pZCAwKSB7IHZtID0gbnVsbDsgfVxuICAgIGlmICghdm0pXG4gICAgICAgIGN1cnJlbnRJbnN0YW5jZSAmJiBjdXJyZW50SW5zdGFuY2UuX3Njb3BlLm9mZigpO1xuICAgIGN1cnJlbnRJbnN0YW5jZSA9IHZtO1xuICAgIHZtICYmIHZtLl9zY29wZS5vbigpO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgVk5vZGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVk5vZGUodGFnLCBkYXRhLCBjaGlsZHJlbiwgdGV4dCwgZWxtLCBjb250ZXh0LCBjb21wb25lbnRPcHRpb25zLCBhc3luY0ZhY3RvcnkpIHtcbiAgICAgICAgdGhpcy50YWcgPSB0YWc7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgdGhpcy5lbG0gPSBlbG07XG4gICAgICAgIHRoaXMubnMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIHRoaXMuZm5Db250ZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmZuT3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5mblNjb3BlSWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMua2V5ID0gZGF0YSAmJiBkYXRhLmtleTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRPcHRpb25zID0gY29tcG9uZW50T3B0aW9ucztcbiAgICAgICAgdGhpcy5jb21wb25lbnRJbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucmF3ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNTdGF0aWMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc1Jvb3RJbnNlcnQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzQ29tbWVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQ2xvbmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNPbmNlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYXN5bmNGYWN0b3J5ID0gYXN5bmNGYWN0b3J5O1xuICAgICAgICB0aGlzLmFzeW5jTWV0YSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5pc0FzeW5jUGxhY2Vob2xkZXIgPSBmYWxzZTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZOb2RlLnByb3RvdHlwZSwgXCJjaGlsZFwiLCB7XG4gICAgICAgIC8vIERFUFJFQ0FURUQ6IGFsaWFzIGZvciBjb21wb25lbnRJbnN0YW5jZSBmb3IgYmFja3dhcmRzIGNvbXBhdC5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBWTm9kZTtcbn0oKSk7XG52YXIgY3JlYXRlRW1wdHlWTm9kZSA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgaWYgKHRleHQgPT09IHZvaWQgMCkgeyB0ZXh0ID0gJyc7IH1cbiAgICB2YXIgbm9kZSA9IG5ldyBWTm9kZSgpO1xuICAgIG5vZGUudGV4dCA9IHRleHQ7XG4gICAgbm9kZS5pc0NvbW1lbnQgPSB0cnVlO1xuICAgIHJldHVybiBub2RlO1xufTtcbmZ1bmN0aW9uIGNyZWF0ZVRleHRWTm9kZSh2YWwpIHtcbiAgICByZXR1cm4gbmV3IFZOb2RlKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFN0cmluZyh2YWwpKTtcbn1cbi8vIG9wdGltaXplZCBzaGFsbG93IGNsb25lXG4vLyB1c2VkIGZvciBzdGF0aWMgbm9kZXMgYW5kIHNsb3Qgbm9kZXMgYmVjYXVzZSB0aGV5IG1heSBiZSByZXVzZWQgYWNyb3NzXG4vLyBtdWx0aXBsZSByZW5kZXJzLCBjbG9uaW5nIHRoZW0gYXZvaWRzIGVycm9ycyB3aGVuIERPTSBtYW5pcHVsYXRpb25zIHJlbHlcbi8vIG9uIHRoZWlyIGVsbSByZWZlcmVuY2UuXG5mdW5jdGlvbiBjbG9uZVZOb2RlKHZub2RlKSB7XG4gICAgdmFyIGNsb25lZCA9IG5ldyBWTm9kZSh2bm9kZS50YWcsIHZub2Rl
13835LmRhdGEsIFxuICAgIC8vICM3OTc1XG4gICAgLy8gY2xvbmUgY2hpbGRyZW4gYXJyYXkgdG8gYXZvaWQgbXV0YXRpbmcgb3JpZ2luYWwgaW4gY2FzZSBvZiBjbG9uaW5nXG4gICAgLy8gYSBjaGlsZC5cbiAgICB2bm9kZS5jaGlsZHJlbiAmJiB2bm9kZS5jaGlsZHJlbi5zbGljZSgpLCB2bm9kZS50ZXh0LCB2bm9kZS5lbG0sIHZub2RlLmNvbnRleHQsIHZub2RlLmNvbXBvbmVudE9wdGlvbnMsIHZub2RlLmFzeW5jRmFjdG9yeSk7XG4gICAgY2xvbmVkLm5zID0gdm5vZGUubnM7XG4gICAgY2xvbmVkLmlzU3RhdGljID0gdm5vZGUuaXNTdGF0aWM7XG4gICAgY2xvbmVkLmtleSA9IHZub2RlLmtleTtcbiAgICBjbG9uZWQuaXNDb21tZW50ID0gdm5vZGUuaXNDb21tZW50O1xuICAgIGNsb25lZC5mbkNvbnRleHQgPSB2bm9kZS5mbkNvbnRleHQ7XG4gICAgY2xvbmVkLmZuT3B0aW9ucyA9IHZub2RlLmZuT3B0aW9ucztcbiAgICBjbG9uZWQuZm5TY29wZUlkID0gdm5vZGUuZm5TY29wZUlkO1xuICAgIGNsb25lZC5hc3luY01ldGEgPSB2bm9kZS5hc3luY01ldGE7XG4gICAgY2xvbmVkLmlzQ2xvbmVkID0gdHJ1ZTtcbiAgICByZXR1cm4gY2xvbmVkO1xufVxuXG4vKiBub3QgdHlwZSBjaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGggUHJveHkgKi9cbnZhciBpbml0UHJveHk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhciBhbGxvd2VkR2xvYmFsc18xID0gbWFrZU1hcCgnSW5maW5pdHksdW5kZWZpbmVkLE5hTixpc0Zpbml0ZSxpc05hTiwnICtcbiAgICAgICAgJ3BhcnNlRmxvYXQscGFyc2VJbnQsZGVjb2RlVVJJLGRlY29kZVVSSUNvbXBvbmVudCxlbmNvZGVVUkksZW5jb2RlVVJJQ29tcG9uZW50LCcgK1xuICAgICAgICAnTWF0aCxOdW1iZXIsRGF0ZSxBcnJheSxPYmplY3QsQm9vbGVhbixTdHJpbmcsUmVnRXhwLE1hcCxTZXQsSlNPTixJbnRsLEJpZ0ludCwnICtcbiAgICAgICAgJ3JlcXVpcmUnIC8vIGZvciBXZWJwYWNrL0Jyb3dzZXJpZnlcbiAgICApO1xuICAgIHZhciB3YXJuTm9uUHJlc2VudF8xID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgICAgIHdhcm4kMihcIlByb3BlcnR5IG9yIG1ldGhvZCBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGlzIG5vdCBkZWZpbmVkIG9uIHRoZSBpbnN0YW5jZSBidXQgXCIpICtcbiAgICAgICAgICAgICdyZWZlcmVuY2VkIGR1cmluZyByZW5kZXIuIE1ha2Ugc3VyZSB0aGF0IHRoaXMgcHJvcGVydHkgaXMgcmVhY3RpdmUsICcgK1xuICAgICAgICAgICAgJ2VpdGhlciBpbiB0aGUgZGF0YSBvcHRpb24sIG9yIGZvciBjbGFzcy1iYXNlZCBjb21wb25lbnRzLCBieSAnICtcbiAgICAgICAgICAgICdpbml0aWFsaXppbmcgdGhlIHByb3BlcnR5LiAnICtcbiAgICAgICAgICAgICdTZWU6IGh0dHBzOi8vdjIudnVlanMub3JnL3YyL2d1aWRlL3JlYWN0aXZpdHkuaHRtbCNEZWNsYXJpbmctUmVhY3RpdmUtUHJvcGVydGllcy4nLCB0YXJnZXQpO1xuICAgIH07XG4gICAgdmFyIHdhcm5SZXNlcnZlZFByZWZpeF8xID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgICAgIHdhcm4kMihcIlByb3BlcnR5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgbXVzdCBiZSBhY2Nlc3NlZCB3aXRoIFxcXCIkZGF0YS5cIikuY29uY2F0KGtleSwgXCJcXFwiIGJlY2F1c2UgXCIpICtcbiAgICAgICAgICAgICdwcm9wZXJ0aWVzIHN0YXJ0aW5nIHdpdGggXCIkXCIgb3IgXCJfXCIgYXJlIG5vdCBwcm94aWVkIGluIHRoZSBWdWUgaW5zdGFuY2UgdG8gJyArXG4gICAgICAgICAgICAncHJldmVudCBjb25mbGljdHMgd2l0aCBWdWUgaW50ZXJuYWxzLiAnICtcbiAgICAgICAgICAgICdTZWU6IGh0dHBzOi8vdjIudnVlanMub3JnL3YyL2FwaS8jZGF0YScsIHRhcmdldCk7XG4gICAgfTtcbiAgICB2YXIgaGFzUHJveHlfMSA9IHR5cGVvZiBQcm94eSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUHJveHkpO1xuICAgIGlmIChoYXNQcm94eV8xKSB7XG4gICAgICAgIHZhciBpc0J1aWx0SW5Nb2RpZmllcl8xID0gbWFrZU1hcCgnc3RvcCxwcmV2ZW50LHNlbGYsY3RybCxzaGlmdCxhbHQsbWV0YSxleGFjdCcpO1xuICAgICAgICBjb25maWcua2V5Q29kZXMgPSBuZXcgUHJveHkoY29uZmlnLmtleUNvZGVzLCB7XG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNCdWlsdEluTW9kaWZpZXJfMShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4kMihcIkF2b2lkIG92ZXJ3cml0aW5nIGJ1aWx0LWluIG1vZGlmaWVyIGluIGNvbmZpZy5rZXlDb2RlczogLlwiLmNvbmNhdChrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdmFyIGhhc0hhbmRsZXJfMSA9IHtcbiAgICAgICAgaGFzOiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICAgICAgICAgIHZhciBoYXMgPSBrZXkgaW4gdGFyZ2V0O1xuICAgICAgICAgICAgdmFyIGlzQWxsb3dlZCA9IGFsbG93ZWRHbG9iYWxzXzEoa2V5KSB8fFxuICAgICAgICAgICAgICAgICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICBrZXkuY2hhckF0KDApID09PSAnXycgJiZcbiAgICAgICAgICAgICAgICAgICAgIShrZXkgaW4gdGFyZ2V0LiRkYXRhKSk7XG4gICAgICAgICAgICBpZiAoIWhhcyAmJiAhaXNBbGxvd2VkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSBpbiB0YXJnZXQuJGRhdGEpXG4gICAgICAgICAgICAgICAgICAgIHdhcm5SZXNlcnZlZFByZWZpeF8xKHRhcmdldCwga2V5KTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHdhcm5Ob25QcmVzZW50XzEodGFyZ2V0LCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhcyB8fCAhaXNBbGxvd2VkO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgZ2V0SGFuZGxlcl8xID0ge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmICEoa2V5IGluIHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5IGluIHRhcmdldC4kZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgd2FyblJlc2VydmVkUHJlZml4XzEodGFyZ2V0LCBrZXkpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgd2Fyb
13835k5vblByZXNlbnRfMSh0YXJnZXQsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0W2tleV07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGluaXRQcm94eSA9IGZ1bmN0aW9uIGluaXRQcm94eSh2bSkge1xuICAgICAgICBpZiAoaGFzUHJveHlfMSkge1xuICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHdoaWNoIHByb3h5IGhhbmRsZXIgdG8gdXNlXG4gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICAgICAgICAgICAgdmFyIGhhbmRsZXJzID0gb3B0aW9ucy5yZW5kZXIgJiYgb3B0aW9ucy5yZW5kZXIuX3dpdGhTdHJpcHBlZCA/IGdldEhhbmRsZXJfMSA6IGhhc0hhbmRsZXJfMTtcbiAgICAgICAgICAgIHZtLl9yZW5kZXJQcm94eSA9IG5ldyBQcm94eSh2bSwgaGFuZGxlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdm0uX3JlbmRlclByb3h5ID0gdm07XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuXHJcbnZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn07XG5cbnZhciB1aWQkMiA9IDA7XG52YXIgcGVuZGluZ0NsZWFudXBEZXBzID0gW107XG52YXIgY2xlYW51cERlcHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwZW5kaW5nQ2xlYW51cERlcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGRlcCA9IHBlbmRpbmdDbGVhbnVwRGVwc1tpXTtcbiAgICAgICAgZGVwLnN1YnMgPSBkZXAuc3Vicy5maWx0ZXIoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIHM7IH0pO1xuICAgICAgICBkZXAuX3BlbmRpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgcGVuZGluZ0NsZWFudXBEZXBzLmxlbmd0aCA9IDA7XG59O1xuLyoqXG4gKiBBIGRlcCBpcyBhbiBvYnNlcnZhYmxlIHRoYXQgY2FuIGhhdmUgbXVsdGlwbGVcbiAqIGRpcmVjdGl2ZXMgc3Vic2NyaWJpbmcgdG8gaXQuXG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIERlcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEZXAoKSB7XG4gICAgICAgIC8vIHBlbmRpbmcgc3VicyBjbGVhbnVwXG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pZCA9IHVpZCQyKys7XG4gICAgICAgIHRoaXMuc3VicyA9IFtdO1xuICAgIH1cbiAgICBEZXAucHJvdG90eXBlLmFkZFN1YiA9IGZ1bmN0aW9uIChzdWIpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goc3ViKTtcbiAgICB9O1xuICAgIERlcC5wcm90b3R5cGUucmVtb3ZlU3ViID0gZnVuY3Rpb24gKHN1Yikge1xuICAgICAgICAvLyAjMTI2OTYgZGVwcyB3aXRoIG1hc3NpdmUgYW1vdW50IG9mIHN1YnNjcmliZXJzIGFyZSBleHRyZW1lbHkgc2xvdyB0b1xuICAgICAgICAvLyBjbGVhbiB1cCBpbiBDaHJvbWl1bVxuICAgICAgICAvLyB0byB3b3JrYXJvdW5kIHRoaXMsIHdlIHVuc2V0IHRoZSBzdWIgZm9yIG5vdywgYW5kIGNsZWFyIHRoZW0gb25cbiAgICAgICAgLy8gbmV4dCBzY2hlZHVsZXIgZmx1c2guXG4gICAgICAgIHRoaXMuc3Vic1t0aGlzLnN1YnMuaW5kZXhPZihzdWIpXSA9IG51bGw7XG4gICAgICAgIGlmICghdGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgICAgICBwZW5kaW5nQ2xlYW51cERlcHMucHVzaCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRGVwLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiAoaW5mbykge1xuICAgICAgICBpZiAoRGVwLnRhcmdldCkge1xuICAgICAgICAgICAgRGVwLnRhcmdldC5hZGREZXAodGhpcyk7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbmZvICYmIERlcC50YXJnZXQub25UcmFjaykge1xuICAgICAgICAgICAgICAgIERlcC50YXJnZXQub25UcmFjayhfX2Fzc2lnbih7IGVmZmVjdDogRGVwLnRhcmdldCB9LCBpbmZvKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgI
13835H1cbiAgICB9O1xuICAgIERlcC5wcm90b3R5cGUubm90aWZ5ID0gZnVuY3Rpb24gKGluZm8pIHtcbiAgICAgICAgLy8gc3RhYmlsaXplIHRoZSBzdWJzY3JpYmVyIGxpc3QgZmlyc3RcbiAgICAgICAgdmFyIHN1YnMgPSB0aGlzLnN1YnMuZmlsdGVyKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzOyB9KTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbmZpZy5hc3luYykge1xuICAgICAgICAgICAgLy8gc3VicyBhcmVuJ3Qgc29ydGVkIGluIHNjaGVkdWxlciBpZiBub3QgcnVubmluZyBhc3luY1xuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBzb3J0IHRoZW0gbm93IHRvIG1ha2Ugc3VyZSB0aGV5IGZpcmUgaW4gY29ycmVjdFxuICAgICAgICAgICAgLy8gb3JkZXJcbiAgICAgICAgICAgIHN1YnMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5pZCAtIGIuaWQ7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc3Vicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzdWIgPSBzdWJzW2ldO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaW5mbykge1xuICAgICAgICAgICAgICAgIHN1Yi5vblRyaWdnZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgc3ViLm9uVHJpZ2dlcihfX2Fzc2lnbih7IGVmZmVjdDogc3Vic1tpXSB9LCBpbmZvKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWIudXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBEZXA7XG59KCkpO1xuLy8gVGhlIGN1cnJlbnQgdGFyZ2V0IHdhdGNoZXIgYmVpbmcgZXZhbHVhdGVkLlxuLy8gVGhpcyBpcyBnbG9iYWxseSB1bmlxdWUgYmVjYXVzZSBvbmx5IG9uZSB3YXRjaGVyXG4vLyBjYW4gYmUgZXZhbHVhdGVkIGF0IGEgdGltZS5cbkRlcC50YXJnZXQgPSBudWxsO1xudmFyIHRhcmdldFN0YWNrID0gW107XG5mdW5jdGlvbiBwdXNoVGFyZ2V0KHRhcmdldCkge1xuICAgIHRhcmdldFN0YWNrLnB1c2godGFyZ2V0KTtcbiAgICBEZXAudGFyZ2V0ID0gdGFyZ2V0O1xufVxuZnVuY3Rpb24gcG9wVGFyZ2V0KCkge1xuICAgIHRhcmdldFN0YWNrLnBvcCgpO1xuICAgIERlcC50YXJnZXQgPSB0YXJnZXRTdGFja1t0YXJnZXRTdGFjay5sZW5ndGggLSAxXTtcbn1cblxuLypcbiAqIG5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBwbGF5IHdlbGwgd2l0aFxuICogZHluYW1pY2FsbHkgYWNjZXNzaW5nIG1ldGhvZHMgb24gQXJyYXkgcHJvdG90eXBlXG4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xudmFyIGFycmF5TWV0aG9kcyA9IE9iamVjdC5jcmVhdGUoYXJyYXlQcm90byk7XG52YXIgbWV0aG9kc1RvUGF0Y2ggPSBbXG4gICAgJ3B1c2gnLFxuICAgICdwb3AnLFxuICAgICdzaGlmdCcsXG4gICAgJ3Vuc2hpZnQnLFxuICAgICdzcGxpY2UnLFxuICAgICdzb3J0JyxcbiAgICAncmV2ZXJzZSdcbl07XG4vKipcbiAqIEludGVyY2VwdCBtdXRhdGluZyBtZXRob2RzIGFuZCBlbWl0IGV2ZW50c1xuICovXG5tZXRob2RzVG9QYXRjaC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAvLyBjYWNoZSBvcmlnaW5hbCBtZXRob2RcbiAgICB2YXIgb3JpZ2luYWwgPSBhcnJheVByb3RvW21ldGhvZF07XG4gICAgZGVmKGFycmF5TWV0aG9kcywgbWV0aG9kLCBmdW5jdGlvbiBtdXRhdG9yKCkge1xuICAgICAgICB2Y
13835XIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHQgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgdmFyIG9iID0gdGhpcy5fX29iX187XG4gICAgICAgIHZhciBpbnNlcnRlZDtcbiAgICAgICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgICAgICAgIGNhc2UgJ3B1c2gnOlxuICAgICAgICAgICAgY2FzZSAndW5zaGlmdCc6XG4gICAgICAgICAgICAgICAgaW5zZXJ0ZWQgPSBhcmdzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3BsaWNlJzpcbiAgICAgICAgICAgICAgICBpbnNlcnRlZCA9IGFyZ3Muc2xpY2UoMik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluc2VydGVkKVxuICAgICAgICAgICAgb2Iub2JzZXJ2ZUFycmF5KGluc2VydGVkKTtcbiAgICAgICAgLy8gbm90aWZ5IGNoYW5nZVxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgb2IuZGVwLm5vdGlmeSh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheSBtdXRhdGlvblwiIC8qIFRyaWdnZXJPcFR5cGVzLkFSUkFZX01VVEFUSU9OICovLFxuICAgICAgICAgICAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgICAgICAgICAgICBrZXk6IG1ldGhvZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvYi5kZXAubm90aWZ5KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbn0pO1xuXG52YXIgYXJyYXlLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYXJyYXlNZXRob2RzKTtcbnZhciBOT19JTklJVElBTF9WQUxVRSA9IHt9O1xuLyoqXG4gKiBJbiBzb21lIGNhc2VzIHdlIG1heSB3YW50IHRvIGRpc2FibGUgb2JzZXJ2YXRpb24gaW5zaWRlIGEgY29tcG9uZW50J3NcbiAqIHVwZGF0ZSBjb21wdXRhdGlvbi5cbiAqL1xudmFyIHNob3VsZE9ic2VydmUgPSB0cnVlO1xuZnVuY3Rpb24gdG9nZ2xlT2JzZXJ2aW5nKHZhbHVlKSB7XG4gICAgc2hvdWxkT2JzZXJ2ZSA9IHZhbHVlO1xufVxuLy8gc3NyIG1vY2sgZGVwXG52YXIgbW9ja0RlcCA9IHtcbiAgICBub3RpZnk6IG5vb3AsXG4gICAgZGVwZW5kOiBub29wLFxuICAgIGFkZFN1Yjogbm9vcCxcbiAgICByZW1vdmVTdWI6IG5vb3Bcbn07XG4vKipcbiAqIE9ic2VydmVyIGNsYXNzIHRoYXQgaXMgYXR0YWNoZWQgdG8gZWFjaCBvYnNlcnZlZFxuICogb2JqZWN0LiBPbmNlIGF0dGFjaGVkLCB0aGUgb2JzZXJ2ZXIgY29udmVydHMgdGhlIHRhcmdldFxuICogb2JqZWN0J3MgcHJvcGVydHkga2V5cyBpbnRvIGdldHRlci9zZXR0ZXJzIHRoYXRcbiAqIGNvbGxlY3QgZGVwZW5kZW5jaWVzIGFuZCBkaXNwYXRjaCB1cGRhdGVzLlxuICovXG52YXIgT2JzZXJ2ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2ZXIodmFsdWUsIHNoYWxsb3csIG1vY2spIHtcbiAgICAgICAgaWYgKHNoYWxsb3cgPT09IHZvaWQgMCkgeyBzaGFsbG93ID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKG1vY2sgPT09IHZvaWQgMCkgeyBtb2NrID0gZmFsc2U7IH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNoYWxsb3cgPSBzaGFsbG93O1xuICAgICAgICB0aGlzLm1vY2sgPSBtb2NrO1xuICAgICAgICAvLyB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgdGhpcy5kZXAgPSBtb2NrID8gbW9ja0RlcCA6IG5ldyBEZXAoKTtcbiAgICAgICAgdGhpcy52bUNvdW50ID0gMDtcbiAgICAgICAgZGVmKHZhbHVlLCAnX19vYl9fJywgdGhpcyk7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKCFtb2NrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc1Byb3RvKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLl9fcHJvdG9fXyA9IGFycmF5TWV0aG9kcztcbiAgICAgICAgICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1wcm90byAqL1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcnJheUtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
13835XIga2V5ID0gYXJyYXlLZXlzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmKHZhbHVlLCBrZXksIGFycmF5TWV0aG9kc1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2hhbGxvdykge1xuICAgICAgICAgICAgICAgIHRoaXMub2JzZXJ2ZUFycmF5KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2FsayB0aHJvdWdoIGFsbCBwcm9wZXJ0aWVzIGFuZCBjb252ZXJ0IHRoZW0gaW50b1xuICAgICAgICAgICAgICogZ2V0dGVyL3NldHRlcnMuIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuXG4gICAgICAgICAgICAgKiB2YWx1ZSB0eXBlIGlzIE9iamVjdC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgICAgICBkZWZpbmVSZWFjdGl2ZSh2YWx1ZSwga2V5LCBOT19JTklJVElBTF9WQUxVRSwgdW5kZWZpbmVkLCBzaGFsbG93LCBtb2NrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBPYnNlcnZlIGEgbGlzdCBvZiBBcnJheSBpdGVtcy5cbiAgICAgKi9cbiAgICBPYnNlcnZlci5wcm90b3R5cGUub2JzZXJ2ZUFycmF5ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBvYnNlcnZlKHZhbHVlW2ldLCBmYWxzZSwgdGhpcy5tb2NrKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9ic2VydmVyO1xufSgpKTtcbi8vIGhlbHBlcnNcbi8qKlxuICogQXR0ZW1wdCB0byBjcmVhdGUgYW4gb2JzZXJ2ZXIgaW5zdGFuY2UgZm9yIGEgdmFsdWUsXG4gKiByZXR1cm5zIHRoZSBuZXcgb2JzZXJ2ZXIgaWYgc3VjY2Vzc2Z1bGx5IG9ic2VydmVkLFxuICogb3IgdGhlIGV4aXN0aW5nIG9ic2VydmVyIGlmIHRoZSB2YWx1ZSBhbHJlYWR5IGhhcyBvbmUuXG4gKi9cbmZ1bmN0aW9uIG9ic2VydmUodmFsdWUsIHNoYWxsb3csIHNzck1vY2tSZWFjdGl2aXR5KSB7XG4gICAgaWYgKHZhbHVlICYmIGhhc093bih2YWx1ZSwgJ19fb2JfXycpICYmIHZhbHVlLl9fb2JfXyBpbnN0YW5jZW9mIE9ic2VydmVyKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5fX29iX187XG4gICAgfVxuICAgIGlmIChzaG91bGRPYnNlcnZlICYmXG4gICAgICAgIChzc3JNb2NrUmVhY3Rpdml0eSB8fCAhaXNTZXJ2ZXJSZW5kZXJpbmcoKSkgJiZcbiAgICAgICAgKGlzQXJyYXkodmFsdWUpIHx8IGlzUGxhaW5PYmplY3QodmFsdWUpKSAmJlxuICAgICAgICBPYmplY3QuaXNFeHRlbnNpYmxlKHZhbHVlKSAmJlxuICAgICAgICAhdmFsdWUuX192X3NraXAgLyogUmVhY3RpdmVGbGFncy5TS0lQICovICYmXG4gICAgICAgICFpc1JlZih2YWx1ZSkgJiZcbiAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIFZOb2RlKSkge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmVyKHZhbHVlLCBzaGFsbG93LCBzc3JNb2NrUmVhY3Rpdml0eSk7XG4gICAgfVxufVxuLyoqXG4gKiBEZWZpbmUgYSByZWFjdGl2ZSBwcm9wZXJ0eSBvbiBhbiBPYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGRlZmluZVJlYWN0aXZlKG9iaiwga2V5LCB2YWwsIGN1c3RvbVNldHRlciwgc2hhbGxvdywgbW9jaykge1xuICAgIHZhciBkZXAgPSBuZXcgRGVwKCk7XG4gICAgdmFyIHByb3BlcnR5ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSk7XG4gICAgaWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LmNvbmZpZ3VyYWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBjYXRlciBmb3IgcHJlLWRlZmluZWQgZ2V0dGVyL3NldHRlcnNcbiAgICB2YXIgZ2V0dGVyID0gcHJvcGVydHkgJiYgcHJvcGVydHkuZ2V0O1xuICAgIHZhciBzZXR0ZXIgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQ7XG4gICAgaWYgKCghZ2V0dGVyIHx8IHNldHRlcikgJiZcbiAgICAgICAgKHZhbCA9PT0gTk9fSU5JSVRJQUxfVkFMVUUgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikpIHtcbiAgICAgICAgdmFsID0gb2JqW2tleV07XG4gICAgfVxuICAgIHZhciBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZSh2YWwsIGZhbHNlLCBtb2NrKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIHJlYWN0aXZlR2V0dGVyKCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IHZhbDtcbiAgICAgICAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwLmRlcGVuZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG9iaixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZ2V0XCIgLyogVHJhY2tPcFR5cGVzLkdFVCAqLyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwLmRlcGVuZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRPYikge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZE9iLmRlcC5kZXBlbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRBcnJheSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgI
13835H1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXNSZWYodmFsdWUpICYmICFzaGFsbG93ID8gdmFsdWUudmFsdWUgOiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiByZWFjdGl2ZVNldHRlcihuZXdWYWwpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGdldHRlciA/IGdldHRlci5jYWxsKG9iaikgOiB2YWw7XG4gICAgICAgICAgICBpZiAoIWhhc0NoYW5nZWQodmFsdWUsIG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjdXN0b21TZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICBjdXN0b21TZXR0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICBzZXR0ZXIuY2FsbChvYmosIG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChnZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAvLyAjNzk4MTogZm9yIGFjY2Vzc29yIHByb3BlcnRpZXMgd2l0aG91dCBzZXR0ZXJcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghc2hhbGxvdyAmJiBpc1JlZih2YWx1ZSkgJiYgIWlzUmVmKG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZSA9IG5ld1ZhbDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWwgPSBuZXdWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZShuZXdWYWwsIGZhbHNlLCBtb2NrKTtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgZGVwLm5vdGlmeSh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2V0XCIgLyogVHJpZ2dlck9wVHlwZXMuU0VUICovLFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG9iaixcbiAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiBuZXdWYWwsXG4gICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiB2YWx1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVwLm5vdGlmeSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRlcDtcbn1cbmZ1bmN0aW9uIHNldCh0YXJnZXQsIGtleSwgdmFsKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKSkge1xuICAgICAgICB3YXJuJDIoXCJDYW5ub3Qgc2V0IHJlYWN0aXZlIHByb3BlcnR5IG9uIHVuZGVmaW5lZCwgbnVsbCwgb3IgcHJpbWl0aXZlIHZhbHVlOiBcIi5jb25jYXQodGFyZ2V0KSk7XG4gICAgfVxuICAgIGlmIChpc1JlYWRvbmx5KHRhcmdldCkpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuJDIoXCJTZXQgb3BlcmF0aW9uIG9uIGtleSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGZhaWxlZDogdGFyZ2V0IGlzIHJlYWRvbmx5LlwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG9iID0gdGFyZ2V0Ll9fb2JfXztcbiAgICBpZiAoaXNBcnJheSh0YXJnZXQpICYmIGlzVmFsaWRBcnJheUluZGV4KGtleSkpIHtcbiAgICAgICAgdGFyZ2V0Lmxlbmd0aCA9IE1hdGgubWF4KHRhcmdldC5sZW5ndGgsIGtleSk7XG4gICAgICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxLCB2YWwpO1xuICAgICAgICAvLyB3aGVuIG1vY2tpbmcgZm9yIFNTUiwgYXJyYXkgbWV0aG9kcyBhcmUgbm90IGhpamFja2VkXG4gICAgICAgIGlmIChvYiAmJiAhb2Iuc2hhbGxvdyAmJiBvYi5tb2NrKSB7XG4gICAgICAgICAgICBvYnNlcnZlKHZhbCwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGlmIChrZXkgaW4gdGFyZ2V0ICYmICEoa2V5IGluIE9iamVjdC5wcm90b3R5cGUpKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBpZiAodGFyZ2V0Ll9pc1Z1ZSB8fCAob2IgJiYgb2Iudm1Db3VudCkpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgd2FybiQyKCdBdm9pZCBhZGRpbmcgcmVhY3RpdmUgcHJvcGVydGllcyB0byBhIFZ1ZSBpbnN0YW5jZSBvciBpdHMgcm9vdCAkZGF0YSAnICtcbiAgICAgICAgICAgICAgICAnYXQgcnVudGltZSAtIGRlY2xhcmUgaXQgdXBmcm9udCBpbiB0aGUgZGF0YSBvcHRpb24uJyk7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGlmICghb2IpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGRlZmluZVJlYWN0aXZlKG9iLnZhbHVlLCBrZXksIHZhbCwgdW5kZWZpbmVkLCBvYi5zaGFsbG93LCBvYi5tb2NrKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBvYi5kZXAubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6IFwiYWRkXCIgLyogVHJpZ2dlck9wVHlwZXMuQUREICovLFxuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIG5ld1ZhbHVlOiB2YWwsXG4gICAgICAgICAgICBvbGRWYWx1ZTogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgb2IuZGVwLm5vdGlmeSgpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufVxuZnVuY3Rpb24gZGVsKHRhcmdldCwga2V5KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKSkge1xuICAgICAgICB3YXJuJDIoXCJDYW5ub3QgZGVsZXRlIHJlYWN0aXZlIHByb3BlcnR5IG9uIHVuZGVmaW5lZCwgbnVsbCwgb3IgcHJpbWl0aXZlIHZhbHVlOiBcIi5jb25jYXQodGFyZ2V0KSk7XG4gICAgfVxuICAgIGlmIChpc0FycmF
138355KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgICAgICB0YXJnZXQuc3BsaWNlKGtleSwgMSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG9iID0gdGFyZ2V0Ll9fb2JfXztcbiAgICBpZiAodGFyZ2V0Ll9pc1Z1ZSB8fCAob2IgJiYgb2Iudm1Db3VudCkpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgd2FybiQyKCdBdm9pZCBkZWxldGluZyBwcm9wZXJ0aWVzIG9uIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRhICcgK1xuICAgICAgICAgICAgICAgICctIGp1c3Qgc2V0IGl0IHRvIG51bGwuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzUmVhZG9ubHkodGFyZ2V0KSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICB3YXJuJDIoXCJEZWxldGUgb3BlcmF0aW9uIG9uIGtleSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGZhaWxlZDogdGFyZ2V0IGlzIHJlYWRvbmx5LlwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGVsZXRlIHRhcmdldFtrZXldO1xuICAgIGlmICghb2IpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBvYi5kZXAubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6IFwiZGVsZXRlXCIgLyogVHJpZ2dlck9wVHlwZXMuREVMRVRFICovLFxuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICBrZXk6IGtleVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG9iLmRlcC5ub3RpZnkoKTtcbiAgICB9XG59XG4vKipcbiAqIENvbGxlY3QgZGVwZW5kZW5jaWVzIG9uIGFycmF5IGVsZW1lbnRzIHdoZW4gdGhlIGFycmF5IGlzIHRvdWNoZWQsIHNpbmNlXG4gKiB3ZSBjYW5ub3QgaW50ZXJjZXB0IGFycmF5IGVsZW1lbnQgYWNjZXNzIGxpa2UgcHJvcGVydHkgZ2V0dGVycy5cbiAqL1xuZnVuY3Rpb24gZGVwZW5kQXJyYXkodmFsdWUpIHtcbiAgICBmb3IgKHZhciBlID0gdm9pZCAwLCBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBlID0gdmFsdWVbaV07XG4gICAgICAgIGlmIChlICYmIGUuX19vYl9fKSB7XG4gICAgICAgICAgICBlLl9fb2JfXy5kZXAuZGVwZW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXkoZSkpIHtcbiAgICAgICAgICAgIGRlcGVuZEFycmF5KGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZWFjdGl2ZSh0YXJnZXQpIHtcbiAgICBtYWtlUmVhY3RpdmUodGFyZ2V0LCBmYWxzZSk7XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbi8qKlxuICogUmV0dXJuIGEgc2hhbGxvd2x5LXJlYWN0aXZlIGNvcHkgb2YgdGhlIG9yaWdpbmFsIG9iamVjdCwgd2hlcmUgb25seSB0aGUgcm9vdFxuICogbGV2ZWwgcHJv
13835cGVydGllcyBhcmUgcmVhY3RpdmUuIEl0IGFsc28gZG9lcyBub3QgYXV0by11bndyYXAgcmVmcyAoZXZlbiBhdCB0aGVcbiAqIHJvb3QgbGV2ZWwpLlxuICovXG5mdW5jdGlvbiBzaGFsbG93UmVhY3RpdmUodGFyZ2V0KSB7XG4gICAgbWFrZVJlYWN0aXZlKHRhcmdldCwgdHJ1ZSk7XG4gICAgZGVmKHRhcmdldCwgXCJfX3ZfaXNTaGFsbG93XCIgLyogUmVhY3RpdmVGbGFncy5JU19TSEFMTE9XICovLCB0cnVlKTtcbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuZnVuY3Rpb24gbWFrZVJlYWN0aXZlKHRhcmdldCwgc2hhbGxvdykge1xuICAgIC8vIGlmIHRyeWluZyB0byBvYnNlcnZlIGEgcmVhZG9ubHkgcHJveHksIHJldHVybiB0aGUgcmVhZG9ubHkgdmVyc2lvbi5cbiAgICBpZiAoIWlzUmVhZG9ubHkodGFyZ2V0KSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgaWYgKGlzQXJyYXkodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHdhcm4kMihcIkF2b2lkIHVzaW5nIEFycmF5IGFzIHJvb3QgdmFsdWUgZm9yIFwiLmNvbmNhdChzaGFsbG93ID8gXCJzaGFsbG93UmVhY3RpdmUoKVwiIDogXCJyZWFjdGl2ZSgpXCIsIFwiIGFzIGl0IGNhbm5vdCBiZSB0cmFja2VkIGluIHdhdGNoKCkgb3Igd2F0Y2hFZmZlY3QoKS4gVXNlIFwiKS5jb25jYXQoc2hhbGxvdyA/IFwic2hhbGxvd1JlZigpXCIgOiBcInJlZigpXCIsIFwiIGluc3RlYWQuIFRoaXMgaXMgYSBWdWUtMi1vbmx5IGxpbWl0YXRpb24uXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBleGlzdGluZ09iID0gdGFyZ2V0ICYmIHRhcmdldC5fX29iX187XG4gICAgICAgICAgICBpZiAoZXhpc3RpbmdPYiAmJiBleGlzdGluZ09iLnNoYWxsb3cgIT09IHNoYWxsb3cpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJUYXJnZXQgaXMgYWxyZWFkeSBhIFwiLmNvbmNhdChleGlzdGluZ09iLnNoYWxsb3cgPyBcIlwiIDogXCJub24tXCIsIFwic2hhbGxvdyByZWFjdGl2ZSBvYmplY3QsIGFuZCBjYW5ub3QgYmUgY29udmVydGVkIHRvIFwiKS5jb25jYXQoc2hhbGxvdyA/IFwiXCIgOiBcIm5vbi1cIiwgXCJzaGFsbG93LlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9iID0gb2JzZXJ2ZSh0YXJnZXQsIHNoYWxsb3csIGlzU2VydmVyUmVuZGVyaW5nKCkgLyogc3NyIG1vY2sgcmVhY3Rpdml0eSAqLyk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFvYikge1xuICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBudWxsIHx8IGlzUHJpbWl0aXZlKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJ2YWx1ZSBjYW5ub3QgYmUgbWFkZSByZWFjdGl2ZTogXCIuY29uY2F0KFN0cmluZyh0YXJnZXQpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNDb2xsZWN0aW9uVHlwZSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKFwiVnVlIDIgZG9lcyBub3Qgc3VwcG9ydCByZWFjdGl2ZSBjb2xsZWN0aW9uIHR5cGVzIHN1Y2ggYXMgTWFwIG9yIFNldC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBpc1JlYWN0aXZlKHZhbHVlKSB7XG4gICAgaWYgKGlzUmVhZG9ubHkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBpc1JlYWN0aXZlKHZhbHVlW1wiX192X3Jhd1wiIC8qIFJlYWN0aXZlRmxhZ3MuUkFXICovXSk7XG4gICAgfVxuICAgIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX29iX18pO1xufVxuZnVuY3Rpb24gaXNTaGFsbG93KHZhbHVlKSB7XG4gICAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fdl9pc1NoYWxsb3cpO1xufVxuZnVuY3Rpb24gaXNSZWFkb25seSh2YWx1ZSkge1xuICAgIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX3ZfaXNSZWFkb25seSk7XG59XG5mdW5jdGlvbiBpc1Byb3h5KHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzUmVhY3RpdmUodmFsdWUpIHx8IGlzUmVhZG9ubHkodmFsdWUpO1xufVxuZnVuY3Rpb24gdG9SYXcob2JzZXJ2ZWQpIHtcbiAgICB2YXIgcmF3ID0gb2JzZXJ2ZWQgJiYgb2JzZXJ2ZWRbXCJfX3ZfcmF3XCIgLyogUmVhY3RpdmVGbGFncy5SQVcgKi9dO1xuICAgIHJldHVybiByYXcgPyB0b1JhdyhyYXcpIDogb2JzZXJ2ZWQ7XG59XG5mdW5jdGlvbiBtYXJrUmF3KHZhbHVlKSB7XG4gICAgLy8gbm9uLWV4dGVuc2libGUgb2JqZWN0cyB3b24ndCBiZSBvYnNlcnZlZCBhbnl3YXlcbiAgICBpZiAoT2JqZWN0LmlzRXh0ZW5zaWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgZGVmKHZhbHVlLCBcIl9fdl9za2lwXCIgLyogUmVhY3RpdmVGbGFncy5TS0lQICovLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaXNDb2xsZWN0aW9uVHlwZSh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gdG9SYXdUeXBlKHZhbHVlKTtcbiAgICByZXR1cm4gKHR5cGUgPT09ICdNYXAnIHx8IHR5cGUgPT09ICdXZWFrTWFwJyB8fCB0eXBlID09PSAnU2V0JyB8fCB0eXBlID09PSAnV2Vha1NldCcpO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgUmVmRmxhZyA9IFwiX192X2lzUmVmXCI7XG5mdW5jdGlvbiBpc1JlZihyKSB7XG4gICAgcmV0dXJuICEhKHIgJiYgci5fX3ZfaXNSZWYgPT09IHRydWUpO1xufVxuZnVuY3Rpb24gcmVmJDEodmFsdWUpIHtcbiAgICByZXR1cm4gY3JlYXRlUmVmKHZhbHVlLCBmYWxzZSk7XG59XG5mdW5jdGlvbiBzaGFsbG93UmVmKHZhbHVlKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJlZih2YWx1ZSwgdHJ1ZSk7XG59XG5mdW5jdGlvbiBjcmVhdGVSZWYocmF3VmFsdWUsIHNoYWxsb3cpIHtcbiAgICBpZiAoaXNSZWYocmF3VmFsdWUpKSB7XG4gICAgICAgIHJldHVybiByYXdWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHJlZiA9IHt9O1xuICAgIGRlZihyZWYsIFJlZkZsYWcsIHRydWUpO1xuICAgIGRlZihyZWYsIFwiX192X2lzU2hhbGxvd1wiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfU0hBTExPVyAqLywgc2hhbGxvdyk7XG4gICAgZGVmKHJlZiwgJ2RlcCcsIGRlZmluZVJlYWN0aXZlKHJlZiwgJ3ZhbHVlJywgcmF3VmFsdWUsIG51bGwsIHNoYWxsb3csIGlzU2VydmVyUmVuZGVyaW5nKCkpKTtcbiAgICByZXR1cm4gcmVmO1xufVxuZnVuY3Rpb24gdHJpZ2dlclJlZihyZWYpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhcmVmLmRlcCkge1xuICAgICAgICB3YXJuJDIoXCJyZWNlaXZlZCBvYmplY3QgaXMgbm90IGEgdHJpZ2dlcmFibGUgcmVmLlwiKTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgcmVmLmRlcCAmJlxuICAgICAgICAgICAgcmVmLmRlcC5ub3RpZnkoe1xuICAgICAgICAgICAgICAgI
13835HR5cGU6IFwic2V0XCIgLyogVHJpZ2dlck9wVHlwZXMuU0VUICovLFxuICAgICAgICAgICAgICAgIHRhcmdldDogcmVmLFxuICAgICAgICAgICAgICAgIGtleTogJ3ZhbHVlJ1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZWYuZGVwICYmIHJlZi5kZXAubm90aWZ5KCk7XG4gICAgfVxufVxuZnVuY3Rpb24gdW5yZWYocmVmKSB7XG4gICAgcmV0dXJuIGlzUmVmKHJlZikgPyByZWYudmFsdWUgOiByZWY7XG59XG5mdW5jdGlvbiBwcm94eVJlZnMob2JqZWN0V2l0aFJlZnMpIHtcbiAgICBpZiAoaXNSZWFjdGl2ZShvYmplY3RXaXRoUmVmcykpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdFdpdGhSZWZzO1xuICAgIH1cbiAgICB2YXIgcHJveHkgPSB7fTtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdFdpdGhSZWZzKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcHJveHlXaXRoUmVmVW53cmFwKHByb3h5LCBvYmplY3RXaXRoUmVmcywga2V5c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiBwcm94eTtcbn1cbmZ1bmN0aW9uIHByb3h5V2l0aFJlZlVud3JhcCh0YXJnZXQsIHNvdXJjZSwga2V5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gc291cmNlW2tleV07XG4gICAgICAgICAgICBpZiAoaXNSZWYodmFsKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWwudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2Y
13835XIgb2IgPSB2YWwgJiYgdmFsLl9fb2JfXztcbiAgICAgICAgICAgICAgICBpZiAob2IpXG4gICAgICAgICAgICAgICAgICAgIG9iLmRlcC5kZXBlbmQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIG9sZFZhbHVlID0gc291cmNlW2tleV07XG4gICAgICAgICAgICBpZiAoaXNSZWYob2xkVmFsdWUpICYmICFpc1JlZih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBvbGRWYWx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc291cmNlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gY3VzdG9tUmVmKGZhY3RvcnkpIHtcbiAgICB2YXIgZGVwID0gbmV3IERlcCgpO1xuICAgIHZhciBfYSA9IGZhY3RvcnkoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgZGVwLmRlcGVuZCh7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiByZWYsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJnZXRcIiAvKiBUcmFja09wVHlwZXMuR0VUICovLFxuICAgICAgICAgICAgICAgIGtleTogJ3ZhbHVlJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZXAuZGVwZW5kKCk7XG4gICAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBkZXAubm90aWZ5KHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHJlZixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNldFwiIC8qIFRyaWdnZXJPcFR5cGVzLlNFVCAqLyxcbiAgICAgICAgICAgICAgICBrZXk6ICd2YWx1ZSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVwLm5vdGlmeSgpO1xuICAgICAgICB9XG4gICAgfSksIGdldCA9IF9hLmdldCwgc2V0ID0gX2Euc2V0O1xuICAgIHZhciByZWYgPSB7XG4gICAgICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0IHZhbHVlKG5ld1ZhbCkge1xuICAgICAgICAgICAgc2V0KG5ld1ZhbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGRlZihyZWYsIFJlZkZsYWcsIHRydWUpO1xuICAgIHJldHVybiByZWY7XG59XG5mdW5jdGlvbiB0b1JlZnMob2JqZWN0KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWlzUmVhY3RpdmUob2JqZWN0KSkge1xuICAgICAgICB3YXJuJDIoXCJ0b1JlZnMoKSBleHBlY3RzIGEgcmVhY3RpdmUgb2JqZWN0IGJ1dCByZWNlaXZlZCBhIHBsYWluIG9uZS5cIik7XG4gICAgfVxuICAgIHZhciByZXQgPSBpc0FycmF5KG9iamVjdCkgPyBuZXcgQXJyYXkob2JqZWN0Lmxlbmd0aCkgOiB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgIHJldFtrZXldID0gdG9SZWYob2JqZWN0LCBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuZnVuY3Rpb24gdG9SZWYob2JqZWN0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciB2YWwgPSBvYmplY3Rba2V5XTtcbiAgICBpZiAoaXNSZWYodmFsKSkge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICB2YXIgcmVmID0ge1xuICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICB2Y
13835XIgdmFsID0gb2JqZWN0W2tleV07XG4gICAgICAgICAgICByZXR1cm4gdmFsID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIHNldCB2YWx1ZShuZXdWYWwpIHtcbiAgICAgICAgICAgIG9iamVjdFtrZXldID0gbmV3VmFsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBkZWYocmVmLCBSZWZGbGFnLCB0cnVlKTtcbiAgICByZXR1cm4gcmVmO1xufVxuXG52YXIgcmF3VG9SZWFkb25seUZsYWcgPSBcIl9fdl9yYXdUb1JlYWRvbmx5XCI7XG52YXIgcmF3VG9TaGFsbG93UmVhZG9ubHlGbGFnID0gXCJfX3ZfcmF3VG9TaGFsbG93UmVhZG9ubHlcIjtcbmZ1bmN0aW9uIHJlYWRvbmx5KHRhcmdldCkge1xuICAgIHJldHVybiBjcmVhdGVSZWFkb25seSh0YXJnZXQsIGZhbHNlKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJlYWRvbmx5KHRhcmdldCwgc2hhbGxvdykge1xuICAgIGlmICghaXNQbGFpbk9iamVjdCh0YXJnZXQpKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKFwiVnVlIDIgZG9lcyBub3Qgc3VwcG9ydCByZWFkb25seSBhcnJheXMuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNDb2xsZWN0aW9uVHlwZSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKFwiVnVlIDIgZG9lcyBub3Qgc3VwcG9ydCByZWFkb25seSBjb2xsZWN0aW9uIHR5cGVzIHN1Y2ggYXMgTWFwIG9yIFNldC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJ2YWx1ZSBjYW5ub3QgYmUgbWFkZSByZWFkb25seTogXCIuY29uY2F0KHR5cGVvZiB0YXJnZXQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhT2JqZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpKSB7XG4gICAgICAgIHdhcm4kMihcIlZ1ZSAyIGRvZXMgbm90IHN1cHBvcnQgY3JlYXRpbmcgcmVhZG9ubHkgcHJveHkgZm9yIG5vbi1leHRlbnNpYmxlIG9iamVjdC5cIik7XG4gICAgfVxuICAgIC8vIGFscmVhZHkgYSByZWFkb25seSBvYmplY3RcbiAgICBpZiAoaXNSZWFkb25seSh0YXJnZXQpKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIC8vIGFscmVhZHkgaGFzIGEgcmVhZG9ubHkgcHJveHlcbiAgICB2YXIgZXhpc3RpbmdGbGFnID0gc2hhbGxvdyA/IHJhd1RvU2hhbGxvd1JlYWRvbmx5RmxhZyA6IHJhd1RvUmVhZG9ubHlGbGFnO1xuICAgIHZhciBleGlzdGluZ1Byb3h5ID0gdGFyZ2V0W2V4aXN0aW5nRmxhZ107XG4gICAgaWYgKGV4aXN0aW5nUHJveHkpIHtcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nUHJveHk7XG4gICAgfVxuICAgIHZhciBwcm94eSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCkpO1xuICAgIGRlZih0YXJnZXQsIGV4aXN0aW5nRmxhZywgcHJveHkpO1xuICAgIGRlZihwcm94eSwgXCJfX3ZfaXNSZWFkb25seVwiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfUkVBRE9OTFkgKi8sIHRydWUpO1xuICAgIGRlZihwcm94eSwgXCJfX3ZfcmF3XCIgLyogUmVhY3RpdmVGbGFncy5SQVcgKi8sIHRhcmdldCk7XG4gICAgaWYgKGlzUmVmKHRhcmdldCkpIHtcbiAgICAgICAgZGVmKHByb3h5LCBSZWZGbGFnLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKHNoYWxsb3cgfHwgaXNTaGFsbG93KHRhcmdldCkpIHtcbiAgICAgICAgZGVmKHByb3h5LCBcIl9fdl9pc1NoYWxsb3dcIiAvKiBSZWFjdGl2ZUZsYWdzLklTX1NIQUxMT1cgKi8sIHRydWUpO1xuICAgIH1cbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRhcmdldCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRlZmluZVJlYWRvbmx5UHJvcGVydHkocHJveHksIHRhcmdldCwga2V5c1tpXSwgc2hhbGxvdyk7XG4gICAgfVxuICAgIHJldHVybiBwcm94eTtcbn1cbmZ1bmN0aW9uIGRlZmluZVJlYWRvbmx5UHJvcGVydHkocHJveHksIHRhcmdldCwga2V5LCBzaGFsbG93KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBrZXksIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSB0YXJnZXRba2V5XTtcbiAgICAgICAgICAgIHJldHVybiBzaGFsbG93IHx8ICFpc1BsYWluT2JqZWN0KHZhbCkgPyB2YWwgOiByZWFkb25seSh2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJTZXQgb3BlcmF0aW9uIG9uIGtleSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGZhaWxlZDogdGFyZ2V0IGlzIHJlYWRvbmx5LlwiKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogUmV0dXJucyBhIHJlYWN0aXZlLWNvcHkgb2YgdGhlIG9yaWdpbmFsIG9iamVjdCwgd2hlcmUgb25seSB0aGUgcm9vdCBsZXZlbFxuICogcHJvcGVydGllcyBhcmUgcmVhZG9ubHksIGFuZCBkb2VzIE5PVCB1bndyYXAgcmVmcyBub3IgcmVjdXJzaXZlbHkgY29udmVydFxuICogcmV0dXJuZWQgcHJvcGVydGllcy5cbiAqIFRoaXMgaXMgdXNlZCBmb3IgY3JlYXRpbmcgdGhlIHByb3BzIHByb3h5IG9iamVjdCBmb3Igc3RhdGVmdWwgY29tcG9uZW50cy5cbiAqL1xuZnVuY3Rpb24gc2hhbGxvd1JlYWRvbmx5KHRhcmdldCkge1xuICAgIHJldHVybiBjcmVhdGVSZWFkb25seSh0YXJnZXQsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlZChnZXR0ZXJPck9wdGlvbnMsIGRlYnVnT3B0aW9ucykge1xuICAgIHZhciBnZXR0ZXI7XG4gICAgdmFyIHNldHRlcjtcbiAgICB2YXIgb25seUdldHRlciA9IGlzRnVuY3Rpb24oZ2V0dGVyT3JPcHRpb25zKTtcbiAgICBpZiAob25seUdldHRlcikge1xuICAgICAgICBnZXR0ZXIgPSBnZXR0ZXJPck9wdGlvbnM7XG4gICAgICAgI
13835HNldHRlciA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHdhcm4kMignV3JpdGUgb3BlcmF0aW9uIGZhaWxlZDogY29tcHV0ZWQgdmFsdWUgaXMgcmVhZG9ubHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbm9vcDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdldHRlciA9IGdldHRlck9yT3B0aW9ucy5nZXQ7XG4gICAgICAgIHNldHRlciA9IGdldHRlck9yT3B0aW9ucy5zZXQ7XG4gICAgfVxuICAgIHZhciB3YXRjaGVyID0gaXNTZXJ2ZXJSZW5kZXJpbmcoKVxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiBuZXcgV2F0Y2hlcihjdXJyZW50SW5zdGFuY2UsIGdldHRlciwgbm9vcCwgeyBsYXp5OiB0cnVlIH0pO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhdGNoZXIgJiYgZGVidWdPcHRpb25zKSB7XG4gICAgICAgIHdhdGNoZXIub25UcmFjayA9IGRlYnVnT3B0aW9ucy5vblRyYWNrO1xuICAgICAgICB3YXRjaGVyLm9uVHJpZ2dlciA9IGRlYnVnT3B0aW9ucy5vblRyaWdnZXI7XG4gICAgfVxuICAgIHZhciByZWYgPSB7XG4gICAgICAgIC8vIHNvbWUgbGlicyByZWx5IG9uIHRoZSBwcmVzZW5jZSBlZmZlY3QgZm9yIGNoZWNraW5nIGNvbXB1dGVkIHJlZnNcbiAgICAgICAgLy8gZnJvbSBub3JtYWwgcmVmcywgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IG1hdHRlclxuICAgICAgICBlZmZlY3Q6IHdhdGNoZXIsXG4gICAgICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgICAgIGlmICh3YXRjaGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdhdGNoZXIuZGlydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgd2F0Y2hlci5ldmFsdWF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoRGVwLnRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBEZXAudGFyZ2V0Lm9uVHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIERlcC50YXJnZXQub25UcmFjayh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0OiBEZXAudGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogcmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZ2V0XCIgLyogVHJhY2tPcFR5cGVzLkdFVCAqLyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICd2YWx1ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdhdGNoZXIuZGVwZW5kKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB3YXRjaGVyLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldHRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzZXQgdmFsdWUobmV3VmFsKSB7XG4gICAgICAgICAgICBzZXR0ZXIobmV3VmFsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZGVmKHJlZiwgUmVmRmxhZywgdHJ1ZSk7XG4gICAgZGVmKHJlZiwgXCJfX3ZfaXNSZWFkb25seVwiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfUkVBRE9OTFkgKi8sIG9ubHlHZXR0ZXIpO1xuICAgIHJldHVybiByZWY7XG59XG5cbnZhciBtYXJrO1xudmFyIG1lYXN1cmU7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhciBwZXJmXzEgPSBpbkJyb3dzZXIgJiYgd2luZG93LnBlcmZvcm1hbmNlO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChwZXJmXzEgJiZcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBwZXJmXzEubWFyayAmJlxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHBlcmZfMS5tZWFzdXJlICYmXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcGVyZl8xLmNsZWFyTWFya3MgJiZcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBwZXJmXzEuY2xlYXJNZWFzdXJlcykge1xuICAgICAgICBtYXJrID0gZnVuY3Rpb24gKHRhZykgeyByZXR1cm4gcGVyZl8xLm1hcmsodGFnKTsgfTtcbiAgICAgICAgbWVhc3VyZSA9IGZ1bmN0aW9uIChuYW1lLCBzdGFydFRhZywgZW5kVGFnKSB7XG4gICAgICAgICAgICBwZXJmXzEubWVhc3VyZShuYW1lLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICAgICAgICAgIHBlcmZfMS5jbGVhck1hcmtzKHN0YXJ0VGFnKTtcbiAgICAgICAgICAgIHBlcmZfMS5jbGVhck1hcmtzKGVuZFRhZyk7XG4gICAgICAgICAgICAvLyBwZXJmLmNsZWFyTWVhc3VyZXMobmFtZSlcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbnZhciBub3JtYWxpemVFdmVudCA9IGNhY2hlZChmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBwYXNzaXZlID0gbmFtZS5jaGFyQXQoMCkgPT09ICcmJztcbiAgICBuYW1lID0gcGFzc2l2ZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICAgIHZhciBvbmNlID0gbmFtZS5jaGFyQXQoMCkgPT09ICd+JzsgLy8gUHJlZml4ZWQgbGFzdCwgY2hlY2tlZCBmaXJzdFxuICAgIG5hbWUgPSBvbmNlID8gbmFtZS5zbGljZSgxKSA6IG5hbWU7XG4gICAgdmFyIGNhcHR1cmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyEnO1xuICAgIG5hbWUgPSBjYXB0dXJlID8gbmFtZS5zbGljZSgxKSA6IG5hbWU7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgb25jZTogb25jZSxcbiAgICAgICAgY2FwdHVyZTogY2FwdHVyZSxcbiAgICAgICAgcGFzc2l2ZTogcGFzc2l2ZVxuICAgIH07XG59KTtcbmZ1bmN0aW9uIGNyZWF0ZUZuSW52b2tlcihmbnMsIHZtKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlcigpIHtcbiAgICAgICAgdmFyIGZucyA9IGludm9rZXIuZm5zO1xuICAgICAgICBpZiAoaXNBcnJheShmbnMpKSB7XG4gICAgICAgICAgICB2Y
13835XIgY2xvbmVkID0gZm5zLnNsaWNlKCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsb25lZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGNsb25lZFtpXSwgbnVsbCwgYXJndW1lbnRzLCB2bSwgXCJ2LW9uIGhhbmRsZXJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gaGFuZGxlciByZXR1cm4gdmFsdWUgZm9yIHNpbmdsZSBoYW5kbGVyc1xuICAgICAgICAgICAgcmV0dXJuIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGZucywgbnVsbCwgYXJndW1lbnRzLCB2bSwgXCJ2LW9uIGhhbmRsZXJcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW52b2tlci5mbnMgPSBmbnM7XG4gICAgcmV0dXJuIGludm9rZXI7XG59XG5mdW5jdGlvbiB1cGRhdGVMaXN0ZW5lcnMob24sIG9sZE9uLCBhZGQsIHJlbW92ZSwgY3JlYXRlT25jZUhhbmRsZXIsIHZtKSB7XG4gICAgdmFyIG5hbWUsIGN1ciwgb2xkLCBldmVudDtcbiAgICBmb3IgKG5hbWUgaW4gb24pIHtcbiAgICAgICAgY3VyID0gb25bbmFtZV07XG4gICAgICAgIG9sZCA9IG9sZE9uW25hbWVdO1xuICAgICAgICBldmVudCA9IG5vcm1hbGl6ZUV2ZW50KG5hbWUpO1xuICAgICAgICBpZiAoaXNVbmRlZihjdXIpKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgd2FybiQyKFwiSW52YWxpZCBoYW5kbGVyIGZvciBldmVudCBcXFwiXCIuY29uY2F0KGV2ZW50Lm5hbWUsIFwiXFxcIjogZ290IFwiKSArIFN0cmluZyhjdXIpLCB2bSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNVbmRlZihvbGQpKSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZihjdXIuZm5zKSkge1xuICAgICAgICAgICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlRm5JbnZva2VyKGN1ciwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzVHJ1ZShldmVudC5vbmNlKSkge1xuICAgICAgICAgICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlT25jZUhhbmRsZXIoZXZlbnQubmFtZSwgY3VyLCBldmVudC5jYXB0dXJlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkZChldmVudC5uYW1lLCBjdXIsIGV2ZW50LmNhcHR1cmUsIGV2ZW50LnBhc3NpdmUsIGV2ZW50LnBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3VyICE9PSBvbGQpIHtcbiAgICAgICAgICAgIG9sZC5mbnMgPSBjdXI7XG4gICAgICAgICAgICBvbltuYW1lXSA9IG9sZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKG5hbWUgaW4gb2xkT24pIHtcbiAgICAgICAgaWYgKGlzVW5kZWYob25bbmFtZV0pKSB7XG4gICAgICAgICAgICBldmVudCA9IG5vcm1hbGl6ZUV2ZW50KG5hbWUpO1xuICAgICAgICAgICAgcmVtb3ZlKGV2ZW50Lm5hbWUsIG9sZE9uW25hbWVdLCBldmVudC5jYXB0dXJlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VWTm9kZUhvb2soZGVmLCBob29rS2V5LCBob29rKSB7XG4gICAgaWYgKGRlZiBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgICAgIGRlZiA9IGRlZi5kYXRhLmhvb2sgfHwgKGRlZi5kYXRhLmhvb2sgPSB7fSk7XG4gICAgfVxuICAgIHZhciBpbnZva2VyO1xuICAgIHZhciBvbGRIb29rID0gZGVmW2hvb2tLZXldO1xuICAgIGZ1bmN0aW9uIHdyYXBwZWRIb29rKCkge1xuICAgICAgICBob29rLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIC8vIGltcG9ydGFudDogcmVtb3ZlIG1lcmdlZCBob29rIHRvIGVuc3VyZSBpdCdzIGNhbGxlZCBvbmx5IG9uY2VcbiAgICAgICAgLy8gYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtcbiAgICAgICAgcmVtb3ZlJDIoaW52b2tlci5mbnMsIHdyYXBwZWRIb29rKTtcbiAgICB9XG4gICAgaWYgKGlzVW5kZWYob2xkSG9vaykpIHtcbiAgICAgICAgLy8gbm8gZXhpc3RpbmcgaG9va1xuICAgICAgICBpbnZva2VyID0gY3JlYXRlRm5JbnZva2VyKFt3cmFwcGVkSG9va10pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChpc0RlZihvbGRIb29rLmZucykgJiYgaXNUcnVlKG9sZEhvb2subWVyZ2VkKSkge1xuICAgICAgICAgICAgLy8gYWxyZWFkeSBhIG1lcmdlZCBpbnZva2VyXG4gICAgICAgICAgICBpbnZva2VyID0gb2xkSG9vaztcbiAgICAgICAgICAgIGludm9rZXIuZm5zLnB1c2god3JhcHBlZEhvb2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZXhpc3RpbmcgcGxhaW4gaG9va1xuICAgICAgICAgICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbb2xkSG9vaywgd3JhcHBlZEhvb2tdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbnZva2VyLm1lcmdlZCA9IHRydWU7XG4gICAgZGVmW2hvb2tLZXldID0gaW52b2tlcjtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFByb3BzRnJvbVZOb2RlRGF0YShkYXRhLCBDdG9yLCB0YWcpIHtcbiAgICAvLyB3ZSBhcmUgb25seSBleHRyYWN0aW5nIHJhdyB2YWx1ZXMgaGVyZS5cbiAgICAvLyB2YWxpZGF0aW9uIGFuZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFuZGxlZCBpbiB0aGUgY2hpbGRcbiAgICAvLyBjb21wb25lbnQgaXRzZWxmLlxuICAgIHZhciBwcm9wT3B0aW9ucyA9IEN0b3Iub3B0aW9ucy5wcm9wcztcbiAgICBpZiAoaXNVbmRlZihwcm9wT3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcmVzID0ge307XG4gICAgdmFyIGF0dHJzID0gZGF0YS5hdHRycywgcHJvcHMgPSBkYXRhLnByb3BzO1xuICAgIGlmIChpc0RlZihhdHRycykgfHwgaXNEZWYocHJvcHMpKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wT3B0aW9ucykge1xuICAgICAgICAgICAgdmFyIGFsdEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICB2Y
13835XIga2V5SW5Mb3dlckNhc2UgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSBrZXlJbkxvd2VyQ2FzZSAmJiBhdHRycyAmJiBoYXNPd24oYXR0cnMsIGtleUluTG93ZXJDYXNlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aXAoXCJQcm9wIFxcXCJcIi5jb25jYXQoa2V5SW5Mb3dlckNhc2UsIFwiXFxcIiBpcyBwYXNzZWQgdG8gY29tcG9uZW50IFwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlwiLmNvbmNhdChmb3JtYXRDb21wb25lbnROYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0YWcgaXMgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWcgfHwgQ3RvciksIFwiLCBidXQgdGhlIGRlY2xhcmVkIHByb3AgbmFtZSBpc1wiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiLiBcIikgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJOb3RlIHRoYXQgSFRNTCBhdHRyaWJ1dGVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGFuZCBjYW1lbENhc2VkIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvcHMgbmVlZCB0byB1c2UgdGhlaXIga2ViYWItY2FzZSBlcXVpdmFsZW50cyB3aGVuIHVzaW5nIGluLURPTSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRlbXBsYXRlcy4gWW91IHNob3VsZCBwcm9iYWJseSB1c2UgXFxcIlwiLmNvbmNhdChhbHRLZXksIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIikuY29uY2F0KGtleSwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hlY2tQcm9wKHJlcywgcHJvcHMsIGtleSwgYWx0S2V5LCB0cnVlKSB8fFxuICAgICAgICAgICAgICAgIGNoZWNrUHJvcChyZXMsIGF0dHJzLCBrZXksIGFsdEtleSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBjaGVja1Byb3AocmVzLCBoYXNoLCBrZXksIGFsdEtleSwgcHJlc2VydmUpIHtcbiAgICBpZiAoaXNEZWYoaGFzaCkpIHtcbiAgICAgICAgaWYgKGhhc093bihoYXNoLCBrZXkpKSB7XG4gICAgICAgICAgICByZXNba2V5XSA9IGhhc2hba2V5XTtcbiAgICAgICAgICAgIGlmICghcHJlc2VydmUpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgaGFzaFtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaGFzT3duKGhhc2gsIGFsdEtleSkpIHtcbiAgICAgICAgICAgIHJlc1trZXldID0gaGFzaFthbHRLZXldO1xuICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBoYXNoW2FsdEtleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIFRoZSB0ZW1wbGF0ZSBjb21waWxlciBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgbmVlZCBmb3Igbm9ybWFsaXphdGlvbiBieVxuLy8gc3RhdGljYWxseSBhbmFseXppbmcgdGhlIHRlbXBsYXRlIGF0IGNvbXBpbGUgdGltZS5cbi8vXG4vLyBGb3IgcGxhaW4gSFRNTCBtYXJrdXAsIG5vcm1hbGl6YXRpb24gY2FuIGJlIGNvbXBsZXRlbHkgc2tpcHBlZCBiZWNhdXNlIHRoZVxuLy8gZ2VuZXJhdGVkIHJlbmRlciBmdW5jdGlvbiBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBBcnJheTxWTm9kZT4uIFRoZXJlIGFyZVxuLy8gdHdvIGNhc2VzIHdoZXJlIGV4dHJhIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkOlxuLy8gMS4gV2hlbiB0aGUgY2hpbGRyZW4gY29udGFpbnMgY29tcG9uZW50cyAtIGJlY2F1c2UgYSBmdW5jdGlvbmFsIGNvbXBvbmVudFxuLy8gbWF5IHJldHVybiBhbiBBcnJheSBpbnN0ZWFkIG9mIGEgc2luZ2xlIHJvb3QuIEluIHRoaXMgY2FzZSwganVzdCBhIHNpbXBsZVxuLy8gbm9ybWFsaXphdGlvbiBpcyBuZWVkZWQgLSBpZiBhbnkgY2hpbGQgaXMgYW4gQXJyYXksIHdlIGZsYXR0ZW4gdGhlIHdob2xlXG4vLyB0aGluZyB3aXRoIEFycmF5LnByb3RvdHlwZS5jb25jYXQuIEl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgb25seSAxLWxldmVsIGRlZXBcbi8vIGJlY2F1c2UgZnVuY3Rpb25hbCBjb21wb25lbnRzIGFscmVhZHkgbm9ybWFsaXplIHRoZWlyIG93biBjaGlsZHJlbi5cbmZ1bmN0aW9uIHNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbltpXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBjaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xufVxuLy8gMi4gV2hlbiB0aGUgY2hpbGRyZW4gY29udGFpbnMgY29uc3RydWN0cyB0aGF0IGFsd2F5cyBnZW5lcmF0ZWQgbmVzdGVkIEFycmF5cyxcbi8vIGUuZy4gPHRlbXBsYXRlPiwgPHNsb3Q+LCB2LWZvciwgb3Igd2hlbiB0aGUgY2hpbGRyZW4gaXMgcHJvdmlkZWQgYnkgdXNlclxuLy8gd2l0aCBoYW5kLXdyaXR0ZW4gcmVuZGVyIGZ1bmN0aW9ucyAvIEpTWC4gSW4gc3VjaCBjYXNlcyBhIGZ1bGwgbm9ybWFsaXphdGlvblxuLy8gaXMgbmVlZGVkIHRvIGNhdGVyIHRvIGFsbCBwb3NzaWJsZSB0eXBlcyBvZiBjaGlsZHJlbiB2YWx1ZXMuXG5mdW5jdGlvbiBub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbikge1xuICAgIHJldHVybiBpc1ByaW1pdGl2ZShjaGlsZHJlbilcbiAgICAgICAgPyBbY3JlYXRlVGV4dFZOb2RlKGNoaWxkcmVuKV1cbiAgICAgICAgOiBpc0FycmF5KGNoaWxkcmVuKVxuICAgICAgICAgICAgPyBub3JtYWxpemVBcnJheUNoaWxkcmVuKGNoaWxkcmVuKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBpc1RleHROb2RlKG5vZGUpIHtcbiAgICByZXR1cm4gaXNEZWYobm9kZSkgJiYgaXNEZWYobm9kZS50ZXh0KSAmJiBpc0ZhbHNlKG5vZGUuaXNDb21tZW50KTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oY2hpbGRyZW4sIG5lc3RlZEluZGV4KSB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBpLCBjLCBsYXN0SW5kZXgsIGxhc3Q7XG4gICAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGMgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgaWYgKGlzVW5kZWYoYykgfHwgdHlwZW9mIGMgPT09ICdib29sZWFuJylcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBsYXN0SW5kZXggPSByZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgbGFzdCA9IHJlc1tsYXN0SW5kZXhdO1xuICAgICAgICAvLyAgbmVzdGVkXG4gICAgICAgIGlmIChpc0FycmF
138355KGMpKSB7XG4gICAgICAgICAgICBpZiAoYy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYyA9IG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oYywgXCJcIi5jb25jYXQobmVzdGVkSW5kZXggfHwgJycsIFwiX1wiKS5jb25jYXQoaSkpO1xuICAgICAgICAgICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgICAgICAgICBpZiAoaXNUZXh0Tm9kZShjWzBdKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1tsYXN0SW5kZXhdID0gY3JlYXRlVGV4dFZOb2RlKGxhc3QudGV4dCArIGNbMF0udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzLnB1c2guYXBwbHkocmVzLCBjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1ByaW1pdGl2ZShjKSkge1xuICAgICAgICAgICAgaWYgKGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgICAgICAgICAvLyBtZXJnZSBhZGphY2VudCB0ZXh0IG5vZGVzXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIFNTUiBoeWRyYXRpb24gYmVjYXVzZSB0ZXh0IG5vZGVzIGFyZVxuICAgICAgICAgICAgICAgIC8vIGVzc2VudGlhbGx5IG1lcmdlZCB3aGVuIHJlbmRlcmVkIHRvIEhUTUwgc3RyaW5nc1xuICAgICAgICAgICAgICAgIHJlc1tsYXN0SW5kZXhdID0gY3JlYXRlVGV4dFZOb2RlKGxhc3QudGV4dCArIGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYyAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IHByaW1pdGl2ZSB0byB2bm9kZVxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKGNyZWF0ZVRleHRWTm9kZShjKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNUZXh0Tm9kZShjKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgICAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICAgICAgICAgIHJlc1tsYXN0SW5kZXhdID0gY3JlYXRlVGV4dFZOb2RlKGxhc3QudGV4dCArIGMudGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IGtleSBmb3IgbmVzdGVkIGFycmF5IGNoaWxkcmVuIChsaWtlbHkgZ2VuZXJhdGVkIGJ5IHYtZm9yKVxuICAgICAgICAgICAgICAgIGlmIChpc1RydWUoY2hpbGRyZW4uX2lzVkxpc3QpICYmXG4gICAgICAgICAgICAgICAgICAgIGlzRGVmKGMudGFnKSAmJlxuICAgICAgICAgICAgICAgICAgICBpc1VuZGVmKGMua2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICBpc0RlZihuZXN0ZWRJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYy5rZXkgPSBcIl9fdmxpc3RcIi5jb25jYXQobmVzdGVkSW5kZXgsIFwiX1wiKS5jb25jYXQoaSwgXCJfX1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxudmFyIFNJTVBMRV9OT1JNQUxJWkUgPSAxO1xudmFyIEFMV0FZU19OT1JNQUxJWkUgPSAyO1xuLy8gd3JhcHBlciBmdW5jdGlvbiBmb3IgcHJvdmlkaW5nIGEgbW9yZSBmbGV4aWJsZSBpbnRlcmZhY2Vcbi8vIHdpdGhvdXQgZ2V0dGluZyB5ZWxsZWQgYXQgYnkgZmxvd1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCQxKGNvbnRleHQsIHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlLCBhbHdheXNOb3JtYWxpemUpIHtcbiAgICBpZiAoaXNBcnJheShkYXRhKSB8fCBpc1ByaW1pdGl2ZShkYXRhKSkge1xuICAgICAgICBub3JtYWxpemF0aW9uVHlwZSA9IGNoaWxkcmVuO1xuICAgICAgICBjaGlsZHJlbiA9IGRhdGE7XG4gICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChpc1RydWUoYWx3YXlzTm9ybWFsaXplKSkge1xuICAgICAgICBub3JtYWxpemF0aW9uVHlwZSA9IEFMV0FZU19OT1JNQUxJWkU7XG4gICAgfVxuICAgIHJldHVybiBfY3JlYXRlRWxlbWVudChjb250ZXh0LCB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSk7XG59XG5mdW5jdGlvbiBfY3JlYXRlRWxlbWVudChjb250ZXh0LCB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSkge1xuICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLl9fb2JfXykpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgd2FybiQyKFwiQXZvaWQgdXNpbmcgb2JzZXJ2ZWQgZGF0YSBvYmplY3QgYXMgdm5vZGUgZGF0YTogXCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGRhdGEpLCBcIlxcblwiKSArICdBbHdheXMgY3JlYXRlIGZyZXNoIHZub2RlIGRhdGEgb2JqZWN0cyBpbiBlYWNoIHJlbmRlciEnLCBjb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgICB9XG4gICAgLy8gb2JqZWN0IHN5bnRheCBpbiB2LWJpbmRcbiAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5pcykpIHtcbiAgICAgICAgdGFnID0gZGF0YS5pcztcbiAgICB9XG4gICAgaWYgKCF0YWcpIHtcbiAgICAgICAgLy8gaW4gY2FzZSBvZiBjb21wb25lbnQgOmlzIHNldCB0byBmYWxzeSB2YWx1ZVxuICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlWTm9kZSgpO1xuICAgIH1cbiAgICAvLyB3YXJuIGFnYWluc3Qgbm9uLXByaW1pdGl2ZSBrZXlcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmtleSkgJiYgIWlzUHJpbWl0aXZlKGRhdGEua2V5KSkge1xuICAgICAgICB3YXJuJDIoJ0F2b2lkIHVzaW5nIG5vbi1wcmltaXRpdmUgdmFsdWUgYXMga2V5LCAnICtcbiAgICAgICAgICAgICd1c2Ugc3RyaW5nL251bWJlciB2YWx1ZSBpbnN0ZWFkLicsIGNvbnRleHQpO1xuICAgIH1cbiAgICAvLyBzdXBwb3J0IHNpbmdsZSBmdW5jdGlvbiBjaGlsZHJlbiBhcyBkZWZhdWx0IHNjb3BlZCBzbG90XG4gICAgaWYgKGlzQXJyYXkoY2hpbGRyZW4pICYmIGlzRnVuY3Rpb24oY2hpbGRyZW5bMF0pKSB7XG4gICAgICAgIGRhdGEgPSBkYXRhIHx8IHt9O1xuICAgICAgICBkYXRhLnNjb3BlZFNsb3RzID0geyBkZWZhdWx0OiBjaGlsZHJlblswXSB9O1xuICAgICAgICBjaGlsZHJlbi5sZW5ndGggPSAwO1xuICAgIH1cbiAgICBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IEFMV0FZU19OT1JNQUxJWkUpIHtcbiAgICAgICAgY2hpbGRyZW4gPSBub3JtYWxpem
13835VDaGlsZHJlbihjaGlsZHJlbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vcm1hbGl6YXRpb25UeXBlID09PSBTSU1QTEVfTk9STUFMSVpFKSB7XG4gICAgICAgIGNoaWxkcmVuID0gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pO1xuICAgIH1cbiAgICB2YXIgdm5vZGUsIG5zO1xuICAgIGlmICh0eXBlb2YgdGFnID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgQ3RvciA9IHZvaWQgMDtcbiAgICAgICAgbnMgPSAoY29udGV4dC4kdm5vZGUgJiYgY29udGV4dC4kdm5vZGUubnMpIHx8IGNvbmZpZy5nZXRUYWdOYW1lc3BhY2UodGFnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5pc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICAgICAgICAgIC8vIHBsYXRmb3JtIGJ1aWx0LWluIGVsZW1lbnRzXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIGlzRGVmKGRhdGEpICYmXG4gICAgICAgICAgICAgICAgaXNEZWYoZGF0YS5uYXRpdmVPbikgJiZcbiAgICAgICAgICAgICAgICBkYXRhLnRhZyAhPT0gJ2NvbXBvbmVudCcpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJUaGUgLm5hdGl2ZSBtb2RpZmllciBmb3Igdi1vbiBpcyBvbmx5IHZhbGlkIG9uIGNvbXBvbmVudHMgYnV0IGl0IHdhcyB1c2VkIG9uIDxcIi5jb25jYXQodGFnLCBcIj4uXCIpLCBjb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZub2RlID0gbmV3IFZOb2RlKGNvbmZpZy5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0YWcpLCBkYXRhLCBjaGlsZHJlbiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCghZGF0YSB8fCAhZGF0YS5wcmUpICYmXG4gICAgICAgICAgICBpc0RlZigoQ3RvciA9IHJlc29sdmVBc3NldChjb250ZXh0LiRvcHRpb25zLCAnY29tcG9uZW50cycsIHRhZykpKSkge1xuICAgICAgICAgICAgLy8gY29tcG9uZW50XG4gICAgICAgICAgICB2bm9kZSA9IGNyZWF0ZUNvbXBvbmVudChDdG9yLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbiwgdGFnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVua25vd24gb3IgdW5saXN0ZWQgbmFtZXNwYWNlZCBlbGVtZW50c1xuICAgICAgICAgICAgLy8gY2hlY2sgYXQgcnVudGltZSBiZWNhdXNlIGl0IG1heSBnZXQgYXNzaWduZWQgYSBuYW1lc3BhY2Ugd2hlbiBpdHNcbiAgICAgICAgICAgIC8vIHBhcmVudCBub3JtYWxpemVzIGNoaWxkcmVuXG4gICAgICAgICAgICB2bm9kZSA9IG5ldyBWTm9kZSh0YWcsIGRhdGEsIGNoaWxkcmVuLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIGRpcmVjdCBjb21wb25lbnQgb3B0aW9ucyAvIGNvbnN0cnVjdG9yXG4gICAgICAgIHZub2RlID0gY3JlYXRlQ29tcG9uZW50KHRhZywgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4pO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHZub2RlO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0RlZih2bm9kZSkpIHtcbiAgICAgICAgaWYgKGlzRGVmKG5zKSlcbiAgICAgICAgICAgIGFwcGx5TlModm5vZGUsIG5zKTtcbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpKVxuICAgICAgICAgICAgcmVnaXN0ZXJEZWVwQmluZGluZ3MoZGF0YSk7XG4gICAgICAgIHJldHVybiB2bm9kZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYXBwbHlOUyh2bm9kZSwgbnMsIGZvcmNlKSB7XG4gICAgdm5vZGUubnMgPSBucztcbiAgICBpZiAodm5vZGUudGFnID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAgICAgLy8gdXNlIGRlZmF1bHQgbmFtZXNwYWNlIGluc2lkZSBmb3JlaWduT2JqZWN0XG4gICAgICAgIG5zID0gdW5kZWZpbmVkO1xuICAgICAgICBmb3JjZSA9IHRydWU7XG4gICAgfVxuICAgIGlmIChpc0RlZih2bm9kZS5jaGlsZHJlbikpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHZub2RlLmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgaWYgKGlzRGVmKGNoaWxkLnRhZykgJiZcbiAgICAgICAgICAgICAgICAoaXNVbmRlZihjaGlsZC5ucykgfHwgKGlzVHJ1ZShmb3JjZSkgJiYgY2hpbGQudGFnICE9PSAnc3ZnJykpKSB7XG4gICAgICAgICAgICAgICAgYXBwbHlOUyhjaGlsZCwgbnMsIGZvcmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIHJlZiAjNTMxOFxuLy8gbmVjZXNzYXJ5IHRvIGVuc3VyZSBwYXJlbnQgcmUtcmVuZGVyIHdoZW4gZGVlcCBiaW5kaW5ncyBsaWtlIDpzdHlsZSBhbmRcbi8vIDpjbGFzcyBhcmUgdXNlZCBvbiBzbG90IG5vZGVzXG5mdW5jdGlvbiByZWdpc3RlckRlZXBCaW5kaW5ncyhkYXRhKSB7XG4gICAgaWYgKGlzT2JqZWN0KGRhdGEuc3R5bGUpKSB7XG4gICAgICAgIHRyYXZlcnNlKGRhdGEuc3R5bGUpO1xuICAgIH1cbiAgICBpZiAoaXNPYmplY3QoZGF0YS5jbGFzcykpIHtcbiAgICAgICAgdHJhdmVyc2UoZGF0YS5jbGFzcyk7XG4gICAgfVxufVxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgdi1mb3IgbGlzdHMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlckxpc3QodmFsLCByZW5kZXIpIHtcbiAgICB2YXIgcmV0ID0gbnVsbCwgaSwgbCwga2V5cywga2V5O1xuICAgIGlmIChpc0FycmF5KHZhbCkgfHwgdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0ID0gbmV3IEFycmF5KHZhbC5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gdmFsLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgcmV0W2ldID0gcmVuZGVyKHZhbFtpXSwgaSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0ID0gbmV3IEFycmF5KHZhbCk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB2YWw7IGkrKykge1xuICAgICAgICAgICAgcmV0W2ldID0gcmVuZGVyKGkgKyAxLCBpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdCh2YWwpKSB7XG4gICAgICAgIGlmIChoYXNTeW1ib2wgJiYgdmFsW1N5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICAgICAgICAgI
13835HJldCA9IFtdO1xuICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gdmFsW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICB3aGlsZSAoIXJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgICAgICAgcmV0LnB1c2gocmVuZGVyKHJlc3VsdC52YWx1ZSwgcmV0Lmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgICAgICAgICAgcmV0ID0gbmV3IEFycmF5KGtleXMubGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICAgICAgcmV0W2ldID0gcmVuZGVyKHZhbFtrZXldLCBrZXksIGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghaXNEZWYocmV0KSkge1xuICAgICAgICByZXQgPSBbXTtcbiAgICB9XG4gICAgcmV0Ll9pc1ZMaXN0ID0gdHJ1ZTtcbiAgICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgPHNsb3Q+XG4gKi9cbmZ1bmN0aW9uIHJlbmRlclNsb3QobmFtZSwgZmFsbGJhY2tSZW5kZXIsIHByb3BzLCBiaW5kT2JqZWN0KSB7XG4gICAgdmFyIHNjb3BlZFNsb3RGbiA9IHRoaXMuJHNjb3BlZFNsb3RzW25hbWVdO1xuICAgIHZhciBub2RlcztcbiAgICBpZiAoc2NvcGVkU2xvdEZuKSB7XG4gICAgICAgIC8vIHNjb3BlZCBzbG90XG4gICAgICAgIHByb3BzID0gcHJvcHMgfHwge307XG4gICAgICAgIGlmIChiaW5kT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhaXNPYmplY3QoYmluZE9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoJ3Nsb3Qgdi1iaW5kIHdpdGhvdXQgYXJndW1lbnQgZXhwZWN0cyBhbiBPYmplY3QnLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb3BzID0gZXh0ZW5kKGV4dGVuZCh7fSwgYmluZE9iamVjdCksIHByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlcyA9XG4gICAgICAgICAgICBzY29wZWRTbG90Rm4ocHJvcHMpIHx8XG4gICAgICAgICAgICAgICAgKGlzRnVuY3Rpb24oZmFsbGJhY2tSZW5kZXIpID8gZmFsbGJhY2tSZW5kZXIoKSA6IGZhbGxiYWNrUmVuZGVyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG5vZGVzID1cbiAgICAgICAgICAgIHRoaXMuJHNsb3RzW25hbWVdIHx8XG4gICAgICAgICAgICAgICAgKGlzRnVuY3Rpb24oZmFsbGJhY2tSZW5kZXIpID8gZmFsbGJhY2tSZW5kZXIoKSA6IGZhbGxiYWNrUmVuZGVyKTtcbiAgICB9XG4gICAgdmFyIHRhcmdldCA9IHByb3BzICYmIHByb3BzLnNsb3Q7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnLCB7IHNsb3Q6IHRhcmdldCB9LCBub2Rlcyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgfVxufVxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZXNvbHZpbmcgZmlsdGVyc1xuICovXG5mdW5jdGlvbiByZXNvbHZlRmlsdGVyKGlkKSB7XG4gICAgcmV0dXJuIHJlc29sdmVBc3NldCh0aGlzLiRvcHRpb25zLCAnZmlsdGVycycsIGlkLCB0cnVlKSB8fCBpZGVudGl0eTtcbn1cblxuZnVuY3Rpb24gaXNLZXlOb3RNYXRjaChleHBlY3QsIGFjdHVhbCkge1xuICAgIGlmIChpc0FycmF5KGV4cGVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdC5pbmRleE9mKGFjdHVhbCkgPT09IC0xO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdCAhPT0gYWN0dWFsO1xuICAgIH1cbn1cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIGNoZWNraW5nIGtleUNvZGVzIGZyb20gY29uZmlnLlxuICogZXhwb3NlZCBhcyBWdWUucHJvdG90eXBlLl9rXG4gKiBwYXNzaW5nIGluIGV2ZW50S2V5TmFtZSBhcyBsYXN0IGFyZ3VtZW50IHNlcGFyYXRlbHkgZm9yIGJhY2t3YXJkcyBjb21wYXRcbiAqL1xuZnVuY3Rpb24gY2hlY2tLZXlDb2RlcyhldmVudEtleUNvZGUsIGtleSwgYnVpbHRJbktleUNvZGUsIGV2ZW50S2V5TmFtZSwgYnVpbHRJbktleU5hbWUpIHtcbiAgICB2YXIgbWFwcGVkS2V5Q29kZSA9IGNvbmZpZy5rZXlDb2Rlc1trZXldIHx8IGJ1aWx0SW5LZXlDb2RlO1xuICAgIGlmIChidWlsdEluS2V5TmFtZSAmJiBldmVudEtleU5hbWUgJiYgIWNvbmZpZy5rZXlDb2Rlc1trZXldKSB7XG4gICAgICAgIHJldHVybiBpc0tleU5vdE1hdGNoKGJ1aWx0SW5LZXlOYW1lLCBldmVudEtleU5hbWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChtYXBwZWRLZXlDb2RlKSB7XG4gICAgICAgIHJldHVybiBpc0tleU5vdE1hdGNoKG1hcHBlZEtleUNvZGUsIGV2ZW50S2V5Q29kZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGV2ZW50S2V5TmFtZSkge1xuICAgICAgICByZXR1cm4gaHlwaGVuYXRlKGV2ZW50S2V5TmFtZSkgIT09IGtleTtcbiAgICB9XG4gICAgcmV0dXJuIGV2ZW50S2V5Q29kZSA9PT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBtZXJnaW5nIHYtYmluZD1cIm9iamVjdFwiIGludG8gYSBWTm9kZSdzIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGJpbmRPYmplY3RQcm9wcyhkYXRhLCB0YWcsIHZhbHVlLCBhc1Byb3AsIGlzU3luYykge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIHdhcm4kMigndi1iaW5kIHdpdGhvdXQgYXJndW1lbnQgZXhwZWN0cyBhbiBPYmplY3Qgb3IgQXJyYXkgdmFsdWUnLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc0FycmF
138355KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9PYmplY3QodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGhhc2ggPSB2b2lkIDA7XG4gICAgICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnY2xhc3MnIHx8IGtleSA9PT0gJ3N0eWxlJyB8fCBpc1Jlc2VydmVkQXR0cmlidXRlKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzaCA9IGRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IGRhdGEuYXR0cnMgJiYgZGF0YS5hdHRycy50eXBlO1xuICAgICAgICAgICAgICAgICAgICBoYXNoID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzUHJvcCB8fCBjb25maWcubXVzdFVzZVByb3AodGFnLCB0eXBlLCBrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBkYXRhLmRvbVByb3BzIHx8IChkYXRhLmRvbVByb3BzID0ge30pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkYXRhLmF0dHJzIHx8IChkYXRhLmF0dHJzID0ge30pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgY2FtZWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgICAgICAgICB2YXIgaHlwaGVuYXRlZEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgICAgICAgICAgIGlmICghKGNhbWVsaXplZEtleSBpbiBoYXNoKSAmJiAhKGh5cGhlbmF0ZWRLZXkgaW4gaGFzaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzaFtrZXldID0gdmFsdWVba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uW1widXBkYXRlOlwiLmNvbmNhdChrZXkpXSA9IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtrZXldID0gJGV2ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfbG9vcF8xKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyBzdGF0aWMgdHJlZXMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclN0YXRpYyhpbmRleCwgaXNJbkZvcikge1xuICAgIHZhciBjYWNoZWQgPSB0aGlzLl9zdGF0aWNUcmVlcyB8fCAodGhpcy5fc3RhdGljVHJlZXMgPSBbXSk7XG4gICAgdmFyIHRyZWUgPSBjYWNoZWRbaW5kZXhdO1xuICAgIC8vIGlmIGhhcyBhbHJlYWR5LXJlbmRlcmVkIHN0YXRpYyB0cmVlIGFuZCBub3QgaW5zaWRlIHYtZm9yLFxuICAgIC8vIHdlIGNhbiByZXVzZSB0aGUgc2FtZSB0cmVlLlxuICAgIGlmICh0cmVlICYmICFpc0luRm9yKSB7XG4gICAgICAgIHJldHVybiB0cmVlO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UsIHJlbmRlciBhIGZyZXNoIHRyZWUuXG4gICAgdHJlZSA9IGNhY2hlZFtpbmRleF0gPSB0aGlzLiRvcHRpb25zLnN0YXRpY1JlbmRlckZuc1tpbmRleF0uY2FsbCh0aGlzLl9yZW5kZXJQcm94eSwgdGhpcy5fYywgdGhpcyAvLyBmb3IgcmVuZGVyIGZucyBnZW5lcmF0ZWQgZm9yIGZ1bmN0aW9uYWwgY29tcG9uZW50IHRlbXBsYXRlc1xuICAgICk7XG4gICAgbWFya1N0YXRpYyQxKHRyZWUsIFwiX19zdGF0aWNfX1wiLmNvbmNhdChpbmRleCksIGZhbHNlKTtcbiAgICByZXR1cm4gdHJlZTtcbn1cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHYtb25jZS5cbiAqIEVmZmVjdGl2ZWx5IGl0IG1lYW5zIG1hcmtpbmcgdGhlIG5vZGUgYXMgc3RhdGljIHdpdGggYSB1bmlxdWUga2V5LlxuICovXG5mdW5jdGlvbiBtYXJrT25jZSh0cmVlLCBpbmRleCwga2V5KSB7XG4gICAgbWFya1N0YXRpYyQxKHRyZWUsIFwiX19vbmNlX19cIi5jb25jYXQoaW5kZXgpLmNvbmNhdChrZXkgPyBcIl9cIi5jb25jYXQoa2V5KSA6IFwiXCIpLCB0cnVlKTtcbiAgICByZXR1cm4gdHJlZTtcbn1cbmZ1bmN0aW9uIG1hcmtTdGF0aWMkMSh0cmVlLCBrZXksIGlzT25jZSkge1xuICAgIGlmIChpc0FycmF5KHRyZWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJlZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRyZWVbaV0gJiYgdHlwZW9mIHRyZWVbaV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgbWFya1N0YXRpY05vZGUodHJlZVtpXSwgXCJcIi5jb25jYXQoa2V5LCBcIl9cIikuY29uY2F0KGkpLCBpc09uY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBtYXJrU3RhdGljTm9kZSh0cmVlLCBrZXksIGlzT25jZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gbWFya1N0YXRpY05vZGUobm9kZSwga2V5LCBpc09uY2UpIHtcbiAgICBub2RlLmlzU3RhdGljID0gdHJ1ZTtcbiAgICBub2RlLmtleSA9IGtleTtcbiAgICBub2RlLmlzT25jZSA9IGlzT25jZTtcbn1cblxuZnVuY3Rpb24gYmluZE9iamVjdExpc3RlbmVycyhkYXRhLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4kMigndi1vbiB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IHZhbHVlJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2Y
13835XIgb24gPSAoZGF0YS5vbiA9IGRhdGEub24gPyBleHRlbmQoe30sIGRhdGEub24pIDoge30pO1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nID0gb25ba2V5XTtcbiAgICAgICAgICAgICAgICB2YXIgb3VycyA9IHZhbHVlW2tleV07XG4gICAgICAgICAgICAgICAgb25ba2V5XSA9IGV4aXN0aW5nID8gW10uY29uY2F0KGV4aXN0aW5nLCBvdXJzKSA6IG91cnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVTY29wZWRTbG90cyhmbnMsIHJlcywgXG4vLyB0aGUgZm9sbG93aW5nIGFyZSBhZGRlZCBpbiAyLjZcbmhhc0R5bmFtaWNLZXlzLCBjb250ZW50SGFzaEtleSkge1xuICAgIHJlcyA9IHJlcyB8fCB7ICRzdGFibGU6ICFoYXNEeW5hbWljS2V5cyB9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzbG90ID0gZm5zW2ldO1xuICAgICAgICBpZiAoaXNBcnJheShzbG90KSkge1xuICAgICAgICAgICAgcmVzb2x2ZVNjb3BlZFNsb3RzKHNsb3QsIHJlcywgaGFzRHluYW1pY0tleXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNsb3QpIHtcbiAgICAgICAgICAgIC8vIG1hcmtlciBmb3IgcmV2ZXJzZSBwcm94eWluZyB2LXNsb3Qgd2l0aG91dCBzY29wZSBvbiB0aGlzLiRzbG90c1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgaWYgKHNsb3QucHJveHkpIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgc2xvdC5mbi5wcm94eSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNbc2xvdC5rZXldID0gc2xvdC5mbjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29udGVudEhhc2hLZXkpIHtcbiAgICAgICAgcmVzLiRrZXkgPSBjb250ZW50SGFzaEtleTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuLy8gaGVscGVyIHRvIHByb2Nlc3MgZHluYW1pYyBrZXlzIGZvciBkeW5hbWljIGFyZ3VtZW50cyBpbiB2LWJpbmQgYW5kIHYtb24uXG5mdW5jdGlvbiBiaW5kRHluYW1pY0tleXMoYmFzZU9iaiwgdmFsdWVzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgdmFyIGtleSA9IHZhbHVlc1tpXTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleSkge1xuICAgICAgICAgICAgYmFzZU9ialt2YWx1ZXNbaV1dID0gdmFsdWVzW2kgKyAxXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGtleSAhPT0gJycgJiYga2V5ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBudWxsIGlzIGEgc3BlY2lhbCB2YWx1ZSBmb3IgZXhwbGljaXRseSByZW1vdmluZyBhIGJpbmRpbmdcbiAgICAgICAgICAgIHdhcm4kMihcIkludmFsaWQgdmFsdWUgZm9yIGR5bmFtaWMgZGlyZWN0aXZlIGFyZ3VtZW50IChleHBlY3RlZCBzdHJpbmcgb3IgbnVsbCk6IFwiLmNvbmNhdChrZXkpLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZU9iajtcbn1cbi8vIGhlbHBlciB0byBkeW5hbWljYWxseSBhcHBlbmQgbW9kaWZpZXIgcnVudGltZSBtYXJrZXJzIHRvIGV2ZW50IG5hbWVzLlxuLy8gZW5zdXJlIG9ubHkgYXBwZW5kIHdoZW4gdmFsdWUgaXMgYWxyZWFkeSBzdHJpbmcsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGNhc3Rcbi8vIHRvIHN0cmluZyBhbmQgY2F1c2UgdGhlIHR5cGUgY2hlY2sgdG8gbWlzcy5cbmZ1bmN0aW9uIHByZXBlbmRNb2RpZmllcih2YWx1ZSwgc3ltYm9sKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBzeW1ib2wgKyB2YWx1ZSA6IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsUmVuZGVySGVscGVycyh0YXJnZXQpIHtcbiAgICB0YXJnZXQuX28gPSBtYXJrT25jZTtcbiAgICB0YXJnZXQuX24gPSB0b051bWJlcjtcbiAgICB0YXJnZXQuX3MgPSB0b1N0cmluZztcbiAgICB0YXJnZXQuX2wgPSByZW5kZXJMaXN0O1xuICAgIHRhcmdldC5fdCA9IHJlbmRlclNsb3Q7XG4gICAgdGFyZ2V0Ll9xID0gbG9vc2VFcXVhbDtcbiAgICB0YXJnZXQuX2kgPSBsb29zZUluZGV4T2Y7XG4gICAgdGFyZ2V0Ll9tID0gcmVuZGVyU3RhdGljO1xuICAgIHRhcmdldC5fZiA9IHJlc29sdmVGaWx0ZXI7XG4gICAgdGFyZ2V0Ll9rID0gY2hlY2tLZXlDb2RlcztcbiAgICB0YXJnZXQuX2IgPSBiaW5kT2JqZWN0UHJvcHM7XG4gICAgdGFyZ2V0Ll92ID0gY3JlYXRlVGV4dFZOb2RlO1xuICAgIHRhcmdldC5fZSA9IGNyZWF0ZUVtcHR5Vk5vZGU7XG4gICAgdGFyZ2V0Ll91ID0gcmVzb2x2ZVNjb3BlZFNsb3RzO1xuICAgIHRhcmdldC5fZyA9IGJpbmRPYmplY3RMaXN0ZW5lcnM7XG4gICAgdGFyZ2V0Ll9kID0gYmluZER5bmFtaWNLZXlzO1xuICAgIHRhcmdldC5fcCA9IHByZXBlbmRNb2RpZmllcjtcbn1cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIHJhdyBjaGlsZHJlbiBWTm9kZXMgaW50byBhIHNsb3Qgb2JqZWN0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlU2xvdHMoY2hpbGRyZW4sIGNvbnRleHQpIHtcbiAgICBpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICB2YXIgc2xvdHMgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2Y
13835XIgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgdmFyIGRhdGEgPSBjaGlsZC5kYXRhO1xuICAgICAgICAvLyByZW1vdmUgc2xvdCBhdHRyaWJ1dGUgaWYgdGhlIG5vZGUgaXMgcmVzb2x2ZWQgYXMgYSBWdWUgc2xvdCBub2RlXG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEuYXR0cnMgJiYgZGF0YS5hdHRycy5zbG90KSB7XG4gICAgICAgICAgICBkZWxldGUgZGF0YS5hdHRycy5zbG90O1xuICAgICAgICB9XG4gICAgICAgIC8vIG5hbWVkIHNsb3RzIHNob3VsZCBvbmx5IGJlIHJlc3BlY3RlZCBpZiB0aGUgdm5vZGUgd2FzIHJlbmRlcmVkIGluIHRoZVxuICAgICAgICAvLyBzYW1lIGNvbnRleHQuXG4gICAgICAgIGlmICgoY2hpbGQuY29udGV4dCA9PT0gY29udGV4dCB8fCBjaGlsZC5mbkNvbnRleHQgPT09IGNvbnRleHQpICYmXG4gICAgICAgICAgICBkYXRhICYmXG4gICAgICAgICAgICBkYXRhLnNsb3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIG5hbWVfMSA9IGRhdGEuc2xvdDtcbiAgICAgICAgICAgIHZhciBzbG90ID0gc2xvdHNbbmFtZV8xXSB8fCAoc2xvdHNbbmFtZV8xXSA9IFtdKTtcbiAgICAgICAgICAgIGlmIChjaGlsZC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgICAgICAgICBzbG90LnB1c2guYXBwbHkoc2xvdCwgY2hpbGQuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2xvdC5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIChzbG90cy5kZWZh
13835dWx0IHx8IChzbG90cy5kZWZhdWx0ID0gW10pKS5wdXNoKGNoaWxkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBpZ25vcmUgc2xvdHMgdGhhdCBjb250YWlucyBvbmx5IHdoaXRlc3BhY2VcbiAgICBmb3IgKHZhciBuYW1lXzIgaW4gc2xvdHMpIHtcbiAgICAgICAgaWYgKHNsb3RzW25hbWVfMl0uZXZlcnkoaXNXaGl0ZXNwYWNlKSkge1xuICAgICAgICAgICAgZGVsZXRlIHNsb3RzW25hbWVfMl07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNsb3RzO1xufVxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKG5vZGUpIHtcbiAgICByZXR1cm4gKG5vZGUuaXNDb21tZW50ICYmICFub2RlLmFzeW5jRmFjdG9yeSkgfHwgbm9kZS50ZXh0ID09PSAnICc7XG59XG5cbmZ1bmN0aW9uIGlzQXN5bmNQbGFjZWhvbGRlcihub2RlKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBub3QgcmVhbGx5IGJvb2xlYW4gdHlwZVxuICAgIHJldHVybiBub2RlLmlzQ29tbWVudCAmJiBub2RlLmFzeW5jRmFjdG9yeTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU2NvcGVkU2xvdHMob3duZXJWbSwgc2NvcGVkU2xvdHMsIG5vcm1hbFNsb3RzLCBwcmV2U2NvcGVkU2xvdHMpIHtcbiAgICB2YXIgcmVzO1xuICAgIHZhciBoYXNOb3JtYWxTbG90cyA9IE9iamVjdC5rZXlzKG5vcm1hbFNsb3RzKS5sZW5ndGggPiAwO1xuICAgIHZhciBpc1N0YWJsZSA9IHNjb3BlZFNsb3RzID8gISFzY29wZWRTbG90cy4kc3RhYmxlIDogIWhhc05vcm1hbFNsb3RzO1xuICAgIHZhciBrZXkgPSBzY29wZWRTbG90cyAmJiBzY29wZWRTbG90cy4ka2V5O1xuICAgIGlmICghc2NvcGVkU2xvdHMpIHtcbiAgICAgICAgcmVzID0ge307XG4gICAgfVxuICAgIGVsc2UgaWYgKHNjb3BlZFNsb3RzLl9ub3JtYWxpemVkKSB7XG4gICAgICAgIC8vIGZhc3QgcGF0aCAxOiBjaGlsZCBjb21wb25lbnQgcmUtcmVuZGVyIG9ubHksIHBhcmVudCBkaWQgbm90IGNoYW5nZVxuICAgICAgICByZXR1cm4gc2NvcGVkU2xvdHMuX25vcm1hbGl6ZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzU3RhYmxlICYmXG4gICAgICAgIHByZXZTY29wZWRTbG90cyAmJlxuICAgICAgICBwcmV2U2NvcGVkU2xvdHMgIT09IGVtcHR5T2JqZWN0ICYmXG4gICAgICAgIGtleSA9PT0gcHJldlNjb3BlZFNsb3RzLiRrZXkgJiZcbiAgICAgICAgIWhhc05vcm1hbFNsb3RzICYmXG4gICAgICAgICFwcmV2U2NvcGVkU2xvdHMuJGhhc05vcm1hbCkge1xuICAgICAgICAvLyBmYXN0IHBhdGggMjogc3RhYmxlIHNjb3BlZCBzbG90cyB3LyBubyBub3JtYWwgc2xvdHMgdG8gcHJveHksXG4gICAgICAgIC8vIG9ubHkgbmVlZCB0byBub3JtYWxpemUgb25jZVxuICAgICAgICByZXR1cm4gcHJldlNjb3BlZFNsb3RzO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzID0ge307XG4gICAgICAgIGZvciAodmFyIGtleV8xIGluIHNjb3BlZFNsb3RzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcGVkU2xvdHNba2V5XzFdICYmIGtleV8xWzBdICE9PSAnJCcpIHtcbiAgICAgICAgICAgICAgICByZXNba2V5XzFdID0gbm9ybWFsaXplU2NvcGVkU2xvdChvd25lclZtLCBub3JtYWxTbG90cywga2V5XzEsIHNjb3BlZFNsb3RzW2tleV8xXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gZXhwb3NlIG5vcm1hbCBzbG90cyBvbiBzY29wZWRTbG90c1xuICAgIGZvciAodmFyIGtleV8yIGluIG5vcm1hbFNsb3RzKSB7XG4gICAgICAgIGlmICghKGtleV8yIGluIHJlcykpIHtcbiAgICAgICAgICAgIHJlc1trZXlfMl0gPSBwcm94eU5vcm1hbFNsb3Qobm9ybWFsU2xvdHMsIGtleV8yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBhdm9yaWF6IHNlZW1zIHRvIG1vY2sgYSBub24tZXh0ZW5zaWJsZSAkc2NvcGVkU2xvdHMgb2JqZWN0XG4gICAgLy8gYW5kIHdoZW4gdGhhdCBpcyBwYXNzZWQgZG93biB0aGlzIHdvdWxkIGNhdXNlIGFuIGVycm9yXG4gICAgaWYgKHNjb3BlZFNsb3RzICYmIE9iamVjdC5pc0V4dGVuc2libGUoc2NvcGVkU2xvdHMpKSB7XG4gICAgICAgIHNjb3BlZFNsb3RzLl9ub3JtYWxpemVkID0gcmVzO1xuICAgIH1cbiAgICBkZWYocmVzLCAnJHN0YWJsZScsIGlzU3RhYmxlKTtcbiAgICBkZWYocmVzLCAnJGtleScsIGtleSk7XG4gICAgZGVmKHJlcywgJyRoYXNOb3JtYWwnLCBoYXNOb3JtYWxTbG90cyk7XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNjb3BlZFNsb3Qodm0sIG5vcm1hbFNsb3RzLCBrZXksIGZuKSB7XG4gICAgdmFyIG5vcm1hbGl6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjdXIgPSBjdXJyZW50SW5zdGFuY2U7XG4gICAgICAgIHNldEN1cnJlbnRJbnN0YW5jZSh2bSk7XG4gICAgICAgIHZhciByZXMgPSBhcmd1bWVudHMubGVuZ3RoID8gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKSA6IGZuKHt9KTtcbiAgICAgICAgcmVzID1cbiAgICAgICAgICAgIHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJiAhaXNBcnJheShyZXMpXG4gICAgICAgICAgICAgICAgPyBbcmVzXSAvLyBzaW5nbGUgdm5vZGVcbiAgICAgICAgICAgICAgICA6IG5vcm1hbGl6ZUNoaWxkcmVuKHJlcyk7XG4gICAgICAgIHZhciB2bm9kZSA9IHJlcyAmJiByZXNbMF07XG4gICAgICAgIHNldEN1cnJlbnRJbnN0YW5jZShjdXIpO1xuICAgICAgICByZXR1cm4gcmVzICYmXG4gICAgICAgICAgICAoIXZub2RlIHx8XG4gICAgICAgICAgICAgICAgKHJlcy5sZW5ndGggPT09IDEgJiYgdm5vZGUuaXNDb21tZW50ICYmICFpc0FzeW5jUGxhY2Vob2xkZXIodm5vZGUpKSkgLy8gIzk2NTgsICMxMDM5MVxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogcmVzO1xuICAgIH07XG4gICAgLy8gdGhpcyBpcyBhIHNsb3QgdXNpbmcgdGhlIG5ldyB2LXNsb3Qgc3ludGF4IHdpdGhvdXQgc2NvcGUuIGFsdGhvdWdoIGl0IGlzXG4gICAgLy8gY29tcGlsZWQgYXMgYSBzY29wZWQgc2xvdCwgcmVuZGVyIGZuIHVzZXJzIHdvdWxkIGV4cGVjdCBpdCB0byBiZSBwcmVzZW50XG4gICAgLy8gb24gdGhpcy4kc2xvdHMgYmVjYXVzZSB0aGUgdXNhZ2UgaXMgc2VtYW50aWNhbGx5IGEgbm9ybWFsIHNsb3QuXG4gICAgaWYgKGZuLnByb3h5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub3JtYWxTbG90cywga2V5LCB7XG4gICAgICAgICAgICBnZXQ6IG5vcm1hbGl6ZWQsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgI
13835H0pO1xuICAgIH1cbiAgICByZXR1cm4gbm9ybWFsaXplZDtcbn1cbmZ1bmN0aW9uIHByb3h5Tm9ybWFsU2xvdChzbG90cywga2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNsb3RzW2tleV07IH07XG59XG5cbmZ1bmN0aW9uIGluaXRTZXR1cCh2bSkge1xuICAgIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG4gICAgdmFyIHNldHVwID0gb3B0aW9ucy5zZXR1cDtcbiAgICBpZiAoc2V0dXApIHtcbiAgICAgICAgdmFyIGN0eCA9ICh2bS5fc2V0dXBDb250ZXh0ID0gY3JlYXRlU2V0dXBDb250ZXh0KHZtKSk7XG4gICAgICAgIHNldEN1cnJlbnRJbnN0YW5jZSh2bSk7XG4gICAgICAgIHB1c2hUYXJnZXQoKTtcbiAgICAgICAgdmFyIHNldHVwUmVzdWx0ID0gaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoc2V0dXAsIG51bGwsIFt2bS5fcHJvcHMgfHwgc2hhbGxvd1JlYWN0aXZlKHt9KSwgY3R4XSwgdm0sIFwic2V0dXBcIik7XG4gICAgICAgIHBvcFRhcmdldCgpO1xuICAgICAgICBzZXRDdXJyZW50SW5zdGFuY2UoKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oc2V0dXBSZXN1bHQpKSB7XG4gICAgICAgICAgICAvLyByZW5kZXIgZnVuY3Rpb25cbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIG9wdGlvbnMucmVuZGVyID0gc2V0dXBSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNPYmplY3Qoc2V0dXBSZXN1bHQpKSB7XG4gICAgICAgICAgICAvLyBiaW5kaW5nc1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2V0dXBSZXN1bHQgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgICAgICAgICAgICAgIHdhcm4kMihcInNldHVwKCkgc2hvdWxkIG5vdCByZXR1cm4gVk5vZGVzIGRpcmVjdGx5IC0gXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInJldHVybiBhIHJlbmRlciBmdW5jdGlvbiBpbnN0ZWFkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZtLl9zZXR1cFN0YXRlID0gc2V0dXBSZXN1bHQ7XG4gICAgICAgICAgICAvLyBfX3NmYyBpbmRpY2F0ZXMgY29tcGlsZWQgYmluZGluZ3MgZnJvbSA8c2NyaXB0IHNldHVwPlxuICAgICAgICAgICAgaWYgKCFzZXR1cFJlc3VsdC5fX3NmYykge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBzZXR1cFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJveHlXaXRoUmVmVW53cmFwKHZtLCBzZXR1cFJlc3VsdCwga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuJDIoXCJBdm9pZCB1c2luZyB2YXJpYWJsZXMgdGhhdCBzdGFydCB3aXRoIF8gb3IgJCBpbiBzZXR1cCgpLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGV4cG9zZWQgZm9yIGNvbXBpbGVkIHJlbmRlciBmblxuICAgICAgICAgICAgICAgIHZhciBwcm94eSA9ICh2bS5fc2V0dXBQcm94eSA9IHt9KTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gc2V0dXBSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ19fc2ZjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJveHlXaXRoUmVmVW53cmFwKHByb3h5LCBzZXR1cFJlc3VsdCwga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHNldHVwUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHdhcm4kMihcInNldHVwKCkgc2hvdWxkIHJldHVybiBhbiBvYmplY3QuIFJlY2VpdmVkOiBcIi5jb25jYXQoc2V0dXBSZXN1bHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygc2V0dXBSZXN1bHQpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVNldHVwQ29udGV4dCh2bSkge1xuICAgIHZhciBleHBvc2VDYWxsZWQgPSBmYWxzZTtcbiAgICByZXR1cm4ge1xuICAgICAgICBnZXQgYXR0cnMoKSB7XG4gICAgICAgICAgICBpZiAoIXZtLl9hdHRyc1Byb3h5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHByb3h5ID0gKHZtLl9hdHRyc1Byb3h5ID0ge30pO1xuICAgICAgICAgICAgICAgIGRlZihwcm94eSwgJ192X2F0dHJfcHJveHknLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBzeW5jU2V0dXBQcm94eShwcm94eSwgdm0uJGF0dHJzLCBlbXB0eU9iamVjdCwgdm0sICckYXR0cnMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2bS5fYXR0cnNQcm94eTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGxpc3RlbmVycygpIHtcbiAgICAgICAgICAgIGlmICghdm0uX2xpc3RlbmVyc1Byb3h5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHByb3h5ID0gKHZtLl9saXN0ZW5lcnNQcm94eSA9IHt9KTtcbiAgICAgICAgICAgICAgICBzeW5jU2V0dXBQcm94eShwcm94eSwgdm0uJGxpc3RlbmVycywgZW1wdHlPYmplY3QsIHZtLCAnJGxpc3RlbmVycycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZtLl9saXN0ZW5lcnNQcm94eTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IHNsb3RzKCkge1xuICAgICAgICAgICAgcmV0dXJuIGluaXRTbG90c1Byb3h5KHZtKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW1pdDogYmluZCQxKHZtLiRlbWl0LCB2bSksXG4gICAgICAgIGV4cG9zZTogZnVuY3Rpb24gKGV4cG9zZWQpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4cG9zZUNhbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICB3YXJuJDIoXCJleHBvc2UoKSBzaG91bGQgYmUgY2FsbGVkIG9ubHkgb25jZSBwZXIgc2V0dXAoKS5cIiwgdm0pO1xuICAgICAgICAgICAgICAgI
13835H1cbiAgICAgICAgICAgICAgICBleHBvc2VDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4cG9zZWQpIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhleHBvc2VkKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5V2l0aFJlZlVud3JhcCh2bSwgZXhwb3NlZCwga2V5KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59XG5mdW5jdGlvbiBzeW5jU2V0dXBQcm94eSh0bywgZnJvbSwgcHJldiwgaW5zdGFuY2UsIHR5cGUpIHtcbiAgICB2YXIgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG4gICAgICAgIGlmICghKGtleSBpbiB0bykpIHtcbiAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgZGVmaW5lUHJveHlBdHRyKHRvLCBrZXksIGluc3RhbmNlLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmcm9tW2tleV0gIT09IHByZXZba2V5XSkge1xuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIga2V5IGluIHRvKSB7XG4gICAgICAgIGlmICghKGtleSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICBkZWxldGUgdG9ba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hhbmdlZDtcbn1cbmZ1bmN0aW9uIGRlZmluZVByb3h5QXR0cihwcm94eSwga2V5LCBpbnN0YW5jZSwgdHlwZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwga2V5LCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2VbdHlwZV1ba2V5XTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gaW5pdFNsb3RzUHJveHkodm0pIHtcbiAgICBpZiAoIXZtLl9zbG90c1Byb3h5KSB7XG4gICAgICAgIHN5bmNTZXR1cFNsb3RzKCh2bS5fc2xvdHNQcm94eSA9IHt9KSwgdm0uJHNjb3BlZFNsb3RzKTtcbiAgICB9XG4gICAgcmV0dXJuIHZtLl9zbG90c1Byb3h5O1xufVxuZnVuY3Rpb24gc3luY1NldHVwU2xvdHModG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuICAgICAgICB0b1trZXldID0gZnJvbVtrZXldO1xuICAgIH1cbiAgICBmb3IgKHZhciBrZXkgaW4gdG8pIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIGZyb20pKSB7XG4gICAgICAgICAgICBkZWxldGUgdG9ba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogQGludGVybmFsIHVzZSBtYW51YWwgdHlwZSBkZWYgYmVjYXVzZSBwdWJsaWMgc2V0dXAgY29udGV4dCB0eXBlIHJlbGllcyBvblxuICogbGVnYWN5IFZOb2RlIHR5cGVzXG4gKi9cbmZ1bmN0aW9uIHVzZVNsb3RzKCkge1xuICAgIHJldHVybiBnZXRDb250ZXh0KCkuc2xvdHM7XG59XG4vKipcbiAqIEBpbnRlcm5hbCB1c2UgbWFudWFsIHR5cGUgZGVmIGJlY2F1c2UgcHVibGljIHNldHVwIGNvbnRleHQgdHlwZSByZWxpZXMgb25cbiAqIGxlZ2FjeSBWTm9kZSB0eXBlc1xuICovXG5mdW5jdGlvbiB1c2VBdHRycygpIHtcbiAgICByZXR1cm4gZ2V0Q29udGV4dCgpLmF0dHJzO1xufVxuLyoqXG4gKiBWdWUgMiBvbmx5XG4gKiBAaW50ZXJuYWwgdXNlIG1hbnVhbCB0eXBlIGRlZiBiZWNhdXNlIHB1YmxpYyBzZXR1cCBjb250ZXh0IHR5cGUgcmVsaWVzIG9uXG4gKiBsZWdhY3kgVk5vZGUgdHlwZXNcbiAqL1xuZnVuY3Rpb24gdXNlTGlzdGVuZXJzKCkge1xuICAgIHJldHVybiBnZXRDb250ZXh0KCkubGlzdGVuZXJzO1xufVxuZnVuY3Rpb24gZ2V0Q29udGV4dCgpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhY3VycmVudEluc3RhbmNlKSB7XG4gICAgICAgIHdhcm4kMihcInVzZUNvbnRleHQoKSBjYWxsZWQgd2l0aG91dCBhY3RpdmUgaW5zdGFuY2UuXCIpO1xuICAgIH1cbiAgICB2YXIgdm0gPSBjdXJyZW50SW5zdGFuY2U7XG4gICAgcmV0dXJuIHZtLl9zZXR1cENvbnRleHQgfHwgKHZtLl9zZXR1cENvbnRleHQgPSBjcmVhdGVTZXR1cENvbnRleHQodm0pKTtcbn1cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIG1lcmdpbmcgZGVmYXVsdCBkZWNsYXJhdGlvbnMuIEltcG9ydGVkIGJ5IGNvbXBpbGVkIGNvZGVcbiAqIG9ubHkuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gbWVyZ2VEZWZhdWx0cyhyYXcsIGRlZmF1bHRzKSB7XG4gICAgdmFyIHByb3BzID0gaXNBcnJheShyYXcpXG4gICAgICAgID8gcmF3LnJlZHVjZShmdW5jdGlvbiAobm9ybWFsaXplZCwgcCkgeyByZXR1cm4gKChub3JtYWxpemVkW3BdID0ge30pLCBub3JtYWxpemVkKTsgfSwge30pXG4gICAgICAgIDogcmF3O1xuICAgIGZvciAodmFyIGtleSBpbiBkZWZhdWx0cykge1xuICAgICAgICB2Y
13835XIgb3B0ID0gcHJvcHNba2V5XTtcbiAgICAgICAgaWYgKG9wdCkge1xuICAgICAgICAgICAgaWYgKGlzQXJyYXkob3B0KSB8fCBpc0Z1bmN0aW9uKG9wdCkpIHtcbiAgICAgICAgICAgICAgICBwcm9wc1trZXldID0geyB0eXBlOiBvcHQsIGRlZmF1bHQ6IGRlZmF1bHRzW2tleV0gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdC5kZWZhdWx0ID0gZGVmYXVsdHNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHByb3BzW2tleV0gPSB7IGRlZmF1bHQ6IGRlZmF1bHRzW2tleV0gfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB3YXJuJDIoXCJwcm9wcyBkZWZhdWx0IGtleSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGhhcyBubyBjb3JyZXNwb25kaW5nIGRlY2xhcmF0aW9uLlwiKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BzO1xufVxuXG5mdW5jdGlvbiBpbml0UmVuZGVyKHZtKSB7XG4gICAgdm0uX3Zub2RlID0gbnVsbDsgLy8gdGhlIHJvb3Qgb2YgdGhlIGNoaWxkIHRyZWVcbiAgICB2bS5fc3RhdGljVHJlZXMgPSBudWxsOyAvLyB2LW9uY2UgY2FjaGVkIHRyZWVzXG4gICAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcbiAgICB2YXIgcGFyZW50Vm5vZGUgPSAodm0uJHZub2RlID0gb3B0aW9ucy5fcGFyZW50Vm5vZGUpOyAvLyB0aGUgcGxhY2Vob2xkZXIgbm9kZSBpbiBwYXJlbnQgdHJlZVxuICAgIHZhciByZW5kZXJDb250ZXh0ID0gcGFyZW50Vm5vZGUgJiYgcGFyZW50Vm5vZGUuY29udGV4dDtcbiAgICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMob3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4sIHJlbmRlckNvbnRleHQpO1xuICAgIHZtLiRzY29wZWRTbG90cyA9IHBhcmVudFZub2RlXG4gICAgICAgID8gbm9ybWFsaXplU2NvcGVkU2xvdHModm0uJHBhcmVudCwgcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cywgdm0uJHNsb3RzKVxuICAgICAgICA6IGVtcHR5T2JqZWN0O1xuICAgIC8vIGJpbmQgdGhlIGNyZWF0ZUVsZW1lbnQgZm4gdG8gdGhpcyBpbnN0YW5jZVxuICAgIC8vIHNvIHRoYXQgd2UgZ2V0IHByb3BlciByZW5kZXIgY29udGV4dCBpbnNpZGUgaXQuXG4gICAgLy8gYXJncyBvcmRlcjogdGFnLCBkYXRhLCBjaGlsZHJlbiwgbm9ybWFsaXphdGlvblR5cGUsIGFsd2F5c05vcm1hbGl6ZVxuICAgIC8vIGludGVybmFsIHZlcnNpb24gaXMgdXNlZCBieSByZW5kZXIgZnVuY3Rpb25zIGNvbXBpbGVkIGZyb20gdGVtcGxhdGVzXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHZtLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQkMSh2bSwgYSwgYiwgYywgZCwgZmFsc2UpOyB9O1xuICAgIC8vIG5vcm1hbGl6YXRpb24gaXMgYWx3YXlzIGFwcGxpZWQgZm9yIHRoZSBwdWJsaWMgdmVyc2lvbiwgdXNlZCBpblxuICAgIC8vIHVzZXItd3JpdHRlbiByZW5kZXIgZnVuY3Rpb25zLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICB2bS4kY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50JDEodm0sIGEsIGIsIGMsIGQsIHRydWUpOyB9O1xuICAgIC8vICRhdHRycyAmICRsaXN0ZW5lcnMgYXJlIGV4cG9zZWQgZm9yIGVhc2llciBIT0MgY3JlYXRpb24uXG4gICAgLy8gdGhleSBuZWVkIHRvIGJlIHJlYWN0aXZlIHNvIHRoYXQgSE9DcyB1c2luZyB0aGVtIGFyZSBhbHdheXMgdXBkYXRlZFxuICAgIHZhciBwYXJlbnREYXRhID0gcGFyZW50Vm5vZGUgJiYgcGFyZW50Vm5vZGUuZGF0YTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGRlZmluZVJlYWN0aXZlKHZtLCAnJGF0dHJzJywgKHBhcmVudERhdGEgJiYgcGFyZW50RGF0YS5hdHRycykgfHwgZW1wdHlPYmplY3QsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybiQyKFwiJGF0dHJzIGlzIHJlYWRvbmx5LlwiLCB2bSk7XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICBkZWZpbmVSZWFjdGl2ZSh2bSwgJyRsaXN0ZW5lcnMnLCBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3QsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybiQyKFwiJGxpc3RlbmVycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRlZmluZVJlYWN0aXZlKHZtLCAnJGF0dHJzJywgKHBhcmVudERhdGEgJiYgcGFyZW50RGF0YS5hdHRycykgfHwgZW1wdHlPYmplY3QsIG51bGwsIHRydWUpO1xuICAgICAgICBkZWZpbmVSZWFjdGl2ZSh2bSwgJyRsaXN0ZW5lcnMnLCBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3QsIG51bGwsIHRydWUpO1xuICAgIH1cbn1cbnZhciBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBudWxsO1xuZnVuY3Rpb24gcmVuZGVyTWl4aW4oVnVlKSB7XG4gICAgLy8gaW5zdGFsbCBydW50aW1lIGNvbnZlbmllbmNlIGhlbHBlcnNcbiAgICBpbnN0YWxsUmVuZGVySGVscGVycyhWdWUucHJvdG90eXBlKTtcbiAgICBWdWUucHJvdG90eXBlLiRuZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gbmV4dFRpY2soZm4sIHRoaXMpO1xuICAgIH07XG4gICAgVnVlLnByb3RvdHlwZS5fcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2Y
13835XIgdm0gPSB0aGlzO1xuICAgICAgICB2YXIgX2EgPSB2bS4kb3B0aW9ucywgcmVuZGVyID0gX2EucmVuZGVyLCBfcGFyZW50Vm5vZGUgPSBfYS5fcGFyZW50Vm5vZGU7XG4gICAgICAgIGlmIChfcGFyZW50Vm5vZGUgJiYgdm0uX2lzTW91bnRlZCkge1xuICAgICAgICAgICAgdm0uJHNjb3BlZFNsb3RzID0gbm9ybWFsaXplU2NvcGVkU2xvdHModm0uJHBhcmVudCwgX3BhcmVudFZub2RlLmRhdGEuc2NvcGVkU2xvdHMsIHZtLiRzbG90cywgdm0uJHNjb3BlZFNsb3RzKTtcbiAgICAgICAgICAgIGlmICh2bS5fc2xvdHNQcm94eSkge1xuICAgICAgICAgICAgICAgIHN5bmNTZXR1cFNsb3RzKHZtLl9zbG90c1Byb3h5LCB2bS4kc2NvcGVkU2xvdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHNldCBwYXJlbnQgdm5vZGUuIHRoaXMgYWxsb3dzIHJlbmRlciBmdW5jdGlvbnMgdG8gaGF2ZSBhY2Nlc3NcbiAgICAgICAgLy8gdG8gdGhlIGRhdGEgb24gdGhlIHBsYWNlaG9sZGVyIG5vZGUuXG4gICAgICAgIHZtLiR2bm9kZSA9IF9wYXJlbnRWbm9kZTtcbiAgICAgICAgLy8gcmVuZGVyIHNlbGZcbiAgICAgICAgdmFyIHZub2RlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIG1haW50YWluIGEgc3RhY2sgYmVjYXVzZSBhbGwgcmVuZGVyIGZucyBhcmUgY2FsbGVkXG4gICAgICAgICAgICAvLyBzZXBhcmF0ZWx5IGZyb20gb25lIGFub3RoZXIuIE5lc3RlZCBjb21wb25lbnQncyByZW5kZXIgZm5zIGFyZSBjYWxsZWRcbiAgICAgICAgICAgIC8vIHdoZW4gcGFyZW50IGNvbXBvbmVudCBpcyBwYXRjaGVkLlxuICAgICAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKHZtKTtcbiAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9IHZtO1xuICAgICAgICAgICAgdm5vZGUgPSByZW5kZXIuY2FsbCh2bS5fcmVuZGVyUHJveHksIHZtLiRjcmVhdGVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwicmVuZGVyXCIpO1xuICAgICAgICAgICAgLy8gcmV0dXJuIGVycm9yIHJlbmRlciByZXN1bHQsXG4gICAgICAgICAgICAvLyBvciBwcmV2aW91cyB2bm9kZSB0byBwcmV2ZW50IHJlbmRlciBlcnJvciBjYXVzaW5nIGJsYW5rIGNvbXBvbmVudFxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHZtLiRvcHRpb25zLnJlbmRlckVycm9yKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdm5vZGUgPSB2bS4kb3B0aW9ucy5yZW5kZXJFcnJvci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQsIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJyZW5kZXJFcnJvclwiKTtcbiAgICAgICAgICAgICAgICAgICAgdm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBudWxsO1xuICAgICAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgdGhlIHJldHVybmVkIGFycmF5IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgbm9kZSwgYWxsb3cgaXRcbiAgICAgICAgaWYgKGlzQXJyYXkodm5vZGUpICYmIHZub2RlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdm5vZGUgPSB2bm9kZVswXTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXR1cm4gZW1wdHkgdm5vZGUgaW4gY2FzZSB0aGUgcmVuZGVyIGZ1bmN0aW9uIGVycm9yZWQgb3V0XG4gICAgICAgIGlmICghKHZub2RlIGluc3RhbmNlb2YgVk5vZGUpKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc0FycmF5KHZub2RlKSkge1xuICAgICAgICAgICAgICAgIHdhcm4kMignTXVsdGlwbGUgcm9vdCBub2RlcyByZXR1cm5lZCBmcm9tIHJlbmRlciBmdW5jdGlvbi4gUmVuZGVyIGZ1bmN0aW9uICcgK1xuICAgICAgICAgICAgICAgICAgICAnc2hvdWxkIHJldHVybiBhIHNpbmdsZSByb290IG5vZGUuJywgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdm5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2V0IHBhcmVudFxuICAgICAgICB2bm9kZS5wYXJlbnQgPSBfcGFyZW50Vm5vZGU7XG4gICAgICAgIHJldHVybiB2bm9kZTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBlbnN1cmVDdG9yKGNvbXAsIGJhc2UpIHtcbiAgICBpZiAoY29tcC5fX2VzTW9kdWxlIHx8IChoYXNTeW1ib2wgJiYgY29tcFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnTW9kdWxlJykpIHtcbiAgICAgICAgY29tcCA9IGNvbXAuZGVmYXVsdDtcbiAgICB9XG4gICAgcmV0dXJuIGlzT2JqZWN0KGNvbXApID8gYmFzZS5leHRlbmQoY29tcCkgOiBjb21wO1xufVxuZnVuY3Rpb24gY3JlYXRlQXN5bmNQbGFjZWhvbGRlcihmYWN0b3J5LCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbiwgdGFnKSB7XG4gICAgdmFyIG5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gICAgbm9kZS5hc3luY0ZhY3RvcnkgPSBmYWN0b3J5O1xuICAgIG5vZGUuYXN5bmNNZXRhID0geyBkYXRhOiBkYXRhLCBjb250ZXh0OiBjb250ZXh0LCBjaGlsZHJlbjogY2hpbGRyZW4sIHRhZzogdGFnIH07XG4gICAgcmV0dXJuIG5vZGU7XG59XG5mdW5jdGlvbiByZXNvbHZlQXN5bmNDb21wb25lbnQoZmFjdG9yeSwgYmFzZUN0b3IpIHtcbiAgICBpZiAoaXNUcnVlKGZhY3RvcnkuZXJyb3IpICYmIGlzRGVmKGZhY3RvcnkuZXJyb3JDb21wKSkge1xuICAgICAgICByZXR1cm4gZmFjdG9yeS5lcnJvckNvbXA7XG4gICAgfVxuICAgIGlmIChpc0RlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICByZXR1cm4gZmFjdG9yeS5yZXNvbHZlZDtcbiAgICB9XG4gICAgdmFyIG93bmVyID0gY3VycmVudFJlbmRlcmluZ0luc3RhbmNlO1xuICAgIGlmIChvd25lciAmJiBpc0RlZihmYWN0b3J5Lm93bmVycykgJiYgZmFjdG9yeS5vd25lcnMuaW5kZXhPZihvd25lcikgPT09IC0xKSB7XG4gICAgICAgIC8vIGFscmVhZHkgcGVuZGluZ1xuICAgICAgICBmYWN0b3J5Lm93bmVycy5wdXNoKG93bmVyKTtcbiAgICB9XG4gICAgaWYgKGlzVHJ1ZShmYWN0b3J5LmxvYWRpbmcpICYmIGlzRGVmKGZhY3RvcnkubG9hZGluZ0NvbXApKSB7XG4gICAgICAgI
13835HJldHVybiBmYWN0b3J5LmxvYWRpbmdDb21wO1xuICAgIH1cbiAgICBpZiAob3duZXIgJiYgIWlzRGVmKGZhY3Rvcnkub3duZXJzKSkge1xuICAgICAgICB2YXIgb3duZXJzXzEgPSAoZmFjdG9yeS5vd25lcnMgPSBbb3duZXJdKTtcbiAgICAgICAgdmFyIHN5bmNfMSA9IHRydWU7XG4gICAgICAgIHZhciB0aW1lckxvYWRpbmdfMSA9IG51bGw7XG4gICAgICAgIHZhciB0aW1lclRpbWVvdXRfMSA9IG51bGw7XG4gICAgICAgIG93bmVyLiRvbignaG9vazpkZXN0cm95ZWQnLCBmdW5jdGlvbiAoKSB7IHJldHVybiByZW1vdmUkMihvd25lcnNfMSwgb3duZXIpOyB9KTtcbiAgICAgICAgdmFyIGZvcmNlUmVuZGVyXzEgPSBmdW5jdGlvbiAocmVuZGVyQ29tcGxldGVkKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG93bmVyc18xLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIG93bmVyc18xW2ldLiRmb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlbmRlckNvbXBsZXRlZCkge1xuICAgICAgICAgICAgICAgIG93bmVyc18xLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVyTG9hZGluZ18xICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lckxvYWRpbmdfMSk7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyTG9hZGluZ18xID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVyVGltZW91dF8xICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lclRpbWVvdXRfMSk7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyVGltZW91dF8xID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZXNvbHZlID0gb25jZShmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAvLyBjYWNoZSByZXNvbHZlZFxuICAgICAgICAgICAgZmFjdG9yeS5yZXNvbHZlZCA9IGVuc3VyZUN0b3IocmVzLCBiYXNlQ3Rvcik7XG4gICAgICAgICAgICAvLyBpbnZva2UgY2FsbGJhY2tzIG9ubHkgaWYgdGhpcyBpcyBub3QgYSBzeW5jaHJvbm91cyByZXNvbHZlXG4gICAgICAgICAgICAvLyAoYXN5bmMgcmVzb2x2ZXMgYXJlIHNoaW1tZWQgYXMgc3luY2hyb25vdXMgZHVyaW5nIFNTUilcbiAgICAgICAgICAgIGlmICghc3luY18xKSB7XG4gICAgICAgICAgICAgICAgZm9yY2VSZW5kZXJfMSh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG93bmVyc18xLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB2Y
13835XIgcmVqZWN0XzEgPSBvbmNlKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJGYWlsZWQgdG8gcmVzb2x2ZSBhc3luYyBjb21wb25lbnQ6IFwiLmNvbmNhdChTdHJpbmcoZmFjdG9yeSkpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlYXNvbiA/IFwiXFxuUmVhc29uOiBcIi5jb25jYXQocmVhc29uKSA6ICcnKSk7XG4gICAgICAgICAgICBpZiAoaXNEZWYoZmFjdG9yeS5lcnJvckNvbXApKSB7XG4gICAgICAgICAgICAgICAgZmFjdG9yeS5lcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9yY2VSZW5kZXJfMSh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciByZXNfMSA9IGZhY3RvcnkocmVzb2x2ZSwgcmVqZWN0XzEpO1xuICAgICAgICBpZiAoaXNPYmplY3QocmVzXzEpKSB7XG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKHJlc18xKSkge1xuICAgICAgICAgICAgICAgIC8vICgpID0+IFByb21pc2VcbiAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNfMS50aGVuKHJlc29sdmUsIHJlamVjdF8xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc1Byb21pc2UocmVzXzEuY29tcG9uZW50KSkge1xuICAgICAgICAgICAgICAgIHJlc18xLmNvbXBvbmVudC50aGVuKHJlc29sdmUsIHJlamVjdF8xKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNEZWYocmVzXzEuZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuZXJyb3JDb21wID0gZW5zdXJlQ3RvcihyZXNfMS5lcnJvciwgYmFzZUN0b3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNEZWYocmVzXzEubG9hZGluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5sb2FkaW5nQ29tcCA9IGVuc3VyZUN0b3IocmVzXzEubG9hZGluZywgYmFzZUN0b3IpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzXzEuZGVsYXkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIE5vZGVKUyB0aW1lb3V0IHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyTG9hZGluZ18xID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJMb2FkaW5nXzEgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpICYmIGlzVW5kZWYoZmFjdG9yeS5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VSZW5kZXJfMShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVzXzEuZGVsYXkgfHwgMjAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNEZWYocmVzXzEudGltZW91dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBOb2RlSlMgdGltZW91dCB0eXBlXG4gICAgICAgICAgICAgICAgICAgIHRpbWVyVGltZW91dF8xID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lclRpbWVvdXRfMSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdF8xKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBcInRpbWVvdXQgKFwiLmNvbmNhdChyZXNfMS50aW1lb3V0LCBcIm1zKVwiKSA6IG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCByZXNfMS50aW1lb3V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3luY18xID0gZmFsc2U7XG4gICAgICAgIC8vIHJldHVybiBpbiBjYXNlIHJlc29sdmVkIHN5bmNocm9ub3VzbHlcbiAgICAgICAgcmV0dXJuIGZhY3RvcnkubG9hZGluZyA/IGZhY3RvcnkubG9hZGluZ0NvbXAgOiBmYWN0b3J5LnJlc29sdmVkO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0Rmlyc3RDb21wb25lbnRDaGlsZChjaGlsZHJlbikge1xuICAgIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2Y
13835XIgYyA9IGNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgaWYgKGlzRGVmKGMpICYmIChpc0RlZihjLmNvbXBvbmVudE9wdGlvbnMpIHx8IGlzQXN5bmNQbGFjZWhvbGRlcihjKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaW5pdEV2ZW50cyh2bSkge1xuICAgIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZtLl9oYXNIb29rRXZlbnQgPSBmYWxzZTtcbiAgICAvLyBpbml0IHBhcmVudCBhdHRhY2hlZCBldmVudHNcbiAgICB2YXIgbGlzdGVuZXJzID0gdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgICBpZiAobGlzdGVuZXJzKSB7XG4gICAgICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzKTtcbiAgICB9XG59XG52YXIgdGFyZ2V0JDE7XG5mdW5jdGlvbiBhZGQkMShldmVudCwgZm4pIHtcbiAgICB0YXJnZXQkMS4kb24oZXZlbnQsIGZuKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZSQxKGV2ZW50LCBmbikge1xuICAgIHRhcmdldCQxLiRvZmYoZXZlbnQsIGZuKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZU9uY2VIYW5kbGVyJDEoZXZlbnQsIGZuKSB7XG4gICAgdmFyIF90YXJnZXQgPSB0YXJnZXQkMTtcbiAgICByZXR1cm4gZnVuY3Rpb24gb25jZUhhbmRsZXIoKSB7XG4gICAgICAgIHZhciByZXMgPSBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICBpZiAocmVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBfdGFyZ2V0LiRvZmYoZXZlbnQsIG9uY2VIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5mdW5jdGlvbiB1cGRhdGVDb21wb25lbnRMaXN0ZW5lcnModm0sIGxpc3RlbmVycywgb2xkTGlzdGVuZXJzKSB7XG4gICAgdGFyZ2V0JDEgPSB2bTtcbiAgICB1cGRhdGVMaXN0ZW5lcnMobGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMgfHwge30sIGFkZCQxLCByZW1vdmUkMSwgY3JlYXRlT25jZUhhbmRsZXIkMSwgdm0pO1xuICAgIHRhcmdldCQxID0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZXZlbnRzTWl4aW4oVnVlKSB7XG4gICAgdmFyIGhvb2tSRSA9IC9eaG9vazovO1xuICAgIFZ1ZS5wcm90b3R5cGUuJG9uID0gZnVuY3Rpb24gKGV2ZW50LCBmbikge1xuICAgICAgICB2Y
13835XIgdm0gPSB0aGlzO1xuICAgICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdm0uJG9uKGV2ZW50W2ldLCBmbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAodm0uX2V2ZW50c1tldmVudF0gfHwgKHZtLl9ldmVudHNbZXZlbnRdID0gW10pKS5wdXNoKGZuKTtcbiAgICAgICAgICAgIC8vIG9wdGltaXplIGhvb2s6ZXZlbnQgY29zdCBieSB1c2luZyBhIGJvb2xlYW4gZmxhZyBtYXJrZWQgYXQgcmVnaXN0cmF0aW9uXG4gICAgICAgICAgICAvLyBpbnN0ZWFkIG9mIGEgaGFzaCBsb29rdXBcbiAgICAgICAgICAgIGlmIChob29rUkUudGVzdChldmVudCkpIHtcbiAgICAgICAgICAgICAgICB2bS5faGFzSG9va0V2ZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdm07XG4gICAgfTtcbiAgICBWdWUucHJvdG90eXBlLiRvbmNlID0gZnVuY3Rpb24gKGV2ZW50LCBmbikge1xuICAgICAgICB2YXIgdm0gPSB0aGlzO1xuICAgICAgICBmdW5jdGlvbiBvbigpIHtcbiAgICAgICAgICAgIHZtLiRvZmYoZXZlbnQsIG9uKTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHZtLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIG9uLmZuID0gZm47XG4gICAgICAgIHZtLiRvbihldmVudCwgb24pO1xuICAgICAgICByZXR1cm4gdm07XG4gICAgfTtcbiAgICBWdWUucHJvdG90eXBlLiRvZmYgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICAgIC8vIGFsbFxuICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuIHZtO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFycmF5IG9mIGV2ZW50c1xuICAgICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGlfMSA9IDAsIGwgPSBldmVudC5sZW5ndGg7IGlfMSA8IGw7IGlfMSsrKSB7XG4gICAgICAgICAgICAgICAgdm0uJG9mZihldmVudFtpXzFdLCBmbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdm07XG4gICAgICAgIH1cbiAgICAgICAgLy8gc3BlY2lmaWMgZXZlbnRcbiAgICAgICAgdmFyIGNicyA9IHZtLl9ldmVudHNbZXZlbnRdO1xuICAgICAgICBpZiAoIWNicykge1xuICAgICAgICAgICAgcmV0dXJuIHZtO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZm4pIHtcbiAgICAgICAgICAgIHZtLl9ldmVudHNbZXZlbnRdID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB2bTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzcGVjaWZpYyBoYW5kbGVyXG4gICAgICAgIHZhciBjYjtcbiAgICAgICAgdmFyIGkgPSBjYnMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBjYiA9IGNic1tpXTtcbiAgICAgICAgICAgIGlmIChjYiA9PT0gZm4gfHwgY2IuZm4gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgY2JzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdm07XG4gICAgfTtcbiAgICBWdWUucHJvdG90eXBlLiRlbWl0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB2Y
13835XIgbG93ZXJDYXNlRXZlbnQgPSBldmVudC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKGxvd2VyQ2FzZUV2ZW50ICE9PSBldmVudCAmJiB2bS5fZXZlbnRzW2xvd2VyQ2FzZUV2ZW50XSkge1xuICAgICAgICAgICAgICAgIHRpcChcIkV2ZW50IFxcXCJcIi5jb25jYXQobG93ZXJDYXNlRXZlbnQsIFwiXFxcIiBpcyBlbWl0dGVkIGluIGNvbXBvbmVudCBcIikgK1xuICAgICAgICAgICAgICAgICAgICBcIlwiLmNvbmNhdChmb3JtYXRDb21wb25lbnROYW1lKHZtKSwgXCIgYnV0IHRoZSBoYW5kbGVyIGlzIHJlZ2lzdGVyZWQgZm9yIFxcXCJcIikuY29uY2F0KGV2ZW50LCBcIlxcXCIuIFwiKSArXG4gICAgICAgICAgICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgeW91IGNhbm5vdCB1c2UgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInYtb24gdG8gbGlzdGVuIHRvIGNhbWVsQ2FzZSBldmVudHMgd2hlbiB1c2luZyBpbi1ET00gdGVtcGxhdGVzLiBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiWW91IHNob3VsZCBwcm9iYWJseSB1c2UgXFxcIlwiLmNvbmNhdChoeXBoZW5hdGUoZXZlbnQpLCBcIlxcXCIgaW5zdGVhZCBvZiBcXFwiXCIpLmNvbmNhdChldmVudCwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNicyA9IHZtLl9ldmVudHNbZXZlbnRdO1xuICAgICAgICBpZiAoY2JzKSB7XG4gICAgICAgICAgICBjYnMgPSBjYnMubGVuZ3RoID4gMSA/IHRvQXJyYXkoY2JzKSA6IGNicztcbiAgICAgICAgICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgdmFyIGluZm8gPSBcImV2ZW50IGhhbmRsZXIgZm9yIFxcXCJcIi5jb25jYXQoZXZlbnQsIFwiXFxcIlwiKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2JzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGNic1tpXSwgdm0sIGFyZ3MsIHZtLCBpbmZvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdm07XG4gICAgfTtcbn1cblxudmFyIGFjdGl2ZUluc3RhbmNlID0gbnVsbDtcbnZhciBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSBmYWxzZTtcbmZ1bmN0aW9uIHNldEFjdGl2ZUluc3RhbmNlKHZtKSB7XG4gICAgdmFyIHByZXZBY3RpdmVJbnN0YW5jZSA9IGFjdGl2ZUluc3RhbmNlO1xuICAgIGFjdGl2ZUluc3RhbmNlID0gdm07XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYWN0aXZlSW5zdGFuY2UgPSBwcmV2QWN0aXZlSW5zdGFuY2U7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGluaXRMaWZlY3ljbGUodm0pIHtcbiAgICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICAgIC8vIGxvY2F0ZSBmaXJzdCBub24tYWJzdHJhY3QgcGFyZW50XG4gICAgdmFyIHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICAgIGlmIChwYXJlbnQgJiYgIW9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgICAgd2hpbGUgKHBhcmVudC4kb3B0aW9ucy5hYnN0cmFjdCAmJiBwYXJlbnQuJHBhcmVudCkge1xuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50LiRjaGlsZHJlbi5wdXNoKHZtKTtcbiAgICB9XG4gICAgdm0uJHBhcmVudCA9IHBhcmVudDtcbiAgICB2bS4kcm9vdCA9IHBhcmVudCA/IHBhcmVudC4kcm9vdCA6IHZtO1xuICAgIHZtLiRjaGlsZHJlbiA9IFtdO1xuICAgIHZtLiRyZWZzID0ge307XG4gICAgdm0uX3Byb3ZpZGVkID0gcGFyZW50ID8gcGFyZW50Ll9wcm92aWRlZCA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdm0uX3dhdGNoZXIgPSBudWxsO1xuICAgIHZtLl9pbmFjdGl2ZSA9IG51bGw7XG4gICAgdm0uX2RpcmVjdEluYWN0aXZlID0gZmFsc2U7XG4gICAgdm0uX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgIHZtLl9pc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gZmFsc2U7XG59XG5mdW5jdGlvbiBsaWZlY3ljbGVNaXhpbihWdWUpIHtcbiAgICBWdWUucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgICAgICB2Y
13835XIgdm0gPSB0aGlzO1xuICAgICAgICB2YXIgcHJldkVsID0gdm0uJGVsO1xuICAgICAgICB2YXIgcHJldlZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgICB2YXIgcmVzdG9yZUFjdGl2ZUluc3RhbmNlID0gc2V0QWN0aXZlSW5zdGFuY2Uodm0pO1xuICAgICAgICB2bS5fdm5vZGUgPSB2bm9kZTtcbiAgICAgICAgLy8gVnVlLnByb3RvdHlwZS5fX3BhdGNoX18gaXMgaW5qZWN0ZWQgaW4gZW50cnkgcG9pbnRzXG4gICAgICAgIC8vIGJhc2VkIG9uIHRoZSByZW5kZXJpbmcgYmFja2VuZCB1c2VkLlxuICAgICAgICBpZiAoIXByZXZWbm9kZSkge1xuICAgICAgICAgICAgLy8gaW5pdGlhbCByZW5kZXJcbiAgICAgICAgICAgIHZtLiRlbCA9IHZtLl9fcGF0Y2hfXyh2bS4kZWwsIHZub2RlLCBoeWRyYXRpbmcsIGZhbHNlIC8qIHJlbW92ZU9ubHkgKi8pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gdXBkYXRlc1xuICAgICAgICAgICAgdm0uJGVsID0gdm0uX19wYXRjaF9fKHByZXZWbm9kZSwgdm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSgpO1xuICAgICAgICAvLyB1cGRhdGUgX192dWVfXyByZWZlcmVuY2VcbiAgICAgICAgaWYgKHByZXZFbCkge1xuICAgICAgICAgICAgcHJldkVsLl9fdnVlX18gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2bS4kZWwpIHtcbiAgICAgICAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gdm07XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgcGFyZW50IGlzIGFuIEhPQywgdXBkYXRlIGl0cyAkZWwgYXMgd2VsbFxuICAgICAgICB2Y
13835XIgd3JhcHBlciA9IHZtO1xuICAgICAgICB3aGlsZSAod3JhcHBlciAmJlxuICAgICAgICAgICAgd3JhcHBlci4kdm5vZGUgJiZcbiAgICAgICAgICAgIHdyYXBwZXIuJHBhcmVudCAmJlxuICAgICAgICAgICAgd3JhcHBlci4kdm5vZGUgPT09IHdyYXBwZXIuJHBhcmVudC5fdm5vZGUpIHtcbiAgICAgICAgICAgIHdyYXBwZXIuJHBhcmVudC4kZWwgPSB3cmFwcGVyLiRlbDtcbiAgICAgICAgICAgIHdyYXBwZXIgPSB3cmFwcGVyLiRwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdXBkYXRlZCBob29rIGlzIGNhbGxlZCBieSB0aGUgc2NoZWR1bGVyIHRvIGVuc3VyZSB0aGF0IGNoaWxkcmVuIGFyZVxuICAgICAgICAvLyB1cGRhdGVkIGluIGEgcGFyZW50J3MgdXBkYXRlZCBob29rLlxuICAgIH07XG4gICAgVnVlLnByb3RvdHlwZS4kZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICAgIGlmICh2bS5fd2F0Y2hlcikge1xuICAgICAgICAgICAgdm0uX3dhdGNoZXIudXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFZ1ZS5wcm90b3R5cGUuJGRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICAgIGlmICh2bS5faXNCZWluZ0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxIb29rJDEodm0sICdiZWZvcmVEZXN0cm95Jyk7XG4gICAgICAgIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgICAgLy8gcmVtb3ZlIHNlbGYgZnJvbSBwYXJlbnRcbiAgICAgICAgdmFyIHBhcmVudCA9IHZtLiRwYXJlbnQ7XG4gICAgICAgIGlmIChwYXJlbnQgJiYgIXBhcmVudC5faXNCZWluZ0Rlc3Ryb3llZCAmJiAhdm0uJG9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgICAgICAgIHJlbW92ZSQyKHBhcmVudC4kY2hpbGRyZW4sIHZtKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0ZWFyZG93biBzY29wZS4gdGhpcyBpbmNsdWRlcyBib3RoIHRoZSByZW5kZXIgd2F0Y2hlciBhbmQgb3RoZXJcbiAgICAgICAgLy8gd2F0Y2hlcnMgY3JlYXRlZFxuICAgICAgICB2bS5fc2NvcGUuc3RvcCgpO1xuICAgICAgICAvLyByZW1vdmUgcmVmZXJlbmNlIGZyb20gZGF0YSBvYlxuICAgICAgICAvLyBmcm96ZW4gb2JqZWN0IG1heSBub3QgaGF2ZSBvYnNlcnZlci5cbiAgICAgICAgaWYgKHZtLl9kYXRhLl9fb2JfXykge1xuICAgICAgICAgICAgdm0uX2RhdGEuX19vYl9fLnZtQ291bnQtLTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjYWxsIHRoZSBsYXN0IGhvb2suLi5cbiAgICAgICAgdm0uX2lzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgICAgLy8gaW52b2tlIGRlc3Ryb3kgaG9va3Mgb24gY3VycmVudCByZW5kZXJlZCB0cmVlXG4gICAgICAgIHZtLl9fcGF0Y2hfXyh2bS5fdm5vZGUsIG51bGwpO1xuICAgICAgICAvLyBmaXJlIGRlc3Ryb3llZCBob29rXG4gICAgICAgIGNhbGxIb29rJDEodm0sICdkZXN0cm95ZWQnKTtcbiAgICAgICAgLy8gdHVybiBvZmYgYWxsIGluc3RhbmNlIGxpc3RlbmVycy5cbiAgICAgICAgdm0uJG9mZigpO1xuICAgICAgICAvLyByZW1vdmUgX192dWVfXyByZWZlcmVuY2VcbiAgICAgICAgaWYgKHZtLiRlbCkge1xuICAgICAgICAgICAgdm0uJGVsLl9fdnVlX18gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlbGVhc2UgY2lyY3VsYXIgcmVmZXJlbmNlICgjNjc1OSlcbiAgICAgICAgaWYgKHZtLiR2bm9kZSkge1xuICAgICAgICAgICAgdm0uJHZub2RlLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gbW91bnRDb21wb25lbnQodm0sIGVsLCBoeWRyYXRpbmcpIHtcbiAgICB2bS4kZWwgPSBlbDtcbiAgICBpZiAoIXZtLiRvcHRpb25zLnJlbmRlcikge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGludmFsaWQgdHlwZVxuICAgICAgICB2bS4kb3B0aW9ucy5yZW5kZXIgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAoKHZtLiRvcHRpb25zLnRlbXBsYXRlICYmIHZtLiRvcHRpb25zLnRlbXBsYXRlLmNoYXJBdCgwKSAhPT0gJyMnKSB8fFxuICAgICAgICAgICAgICAgIHZtLiRvcHRpb25zLmVsIHx8XG4gICAgICAgICAgICAgICAgZWwpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoJ1lvdSBhcmUgdXNpbmcgdGhlIHJ1bnRpbWUtb25seSBidWlsZCBvZiBWdWUgd2hlcmUgdGhlIHRlbXBsYXRlICcgK1xuICAgICAgICAgICAgICAgICAgICAnY29tcGlsZXIgaXMgbm90IGF2YWlsYWJsZS4gRWl0aGVyIHByZS1jb21waWxlIHRoZSB0ZW1wbGF0ZXMgaW50byAnICtcbiAgICAgICAgICAgICAgICAgICAgJ3JlbmRlciBmdW5jdGlvbnMsIG9yIHVzZSB0aGUgY29tcGlsZXItaW5jbHVkZWQgYnVpbGQuJywgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKCdGYWlsZWQgdG8gbW91bnQgY29tcG9uZW50OiB0ZW1wbGF0ZSBvciByZW5kZXIgZnVuY3Rpb24gbm90IGRlZmluZWQuJywgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNhbGxIb29rJDEodm0sICdiZWZvcmVNb3VudCcpO1xuICAgIHZhciB1cGRhdGVDb21wb25lbnQ7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgdXBkYXRlQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSB2bS5fbmFtZTtcbiAgICAgICAgICAgIHZhciBpZCA9IHZtLl91aWQ7XG4gICAgICAgICAgICB2Y
13835XIgc3RhcnRUYWcgPSBcInZ1ZS1wZXJmLXN0YXJ0OlwiLmNvbmNhdChpZCk7XG4gICAgICAgICAgICB2YXIgZW5kVGFnID0gXCJ2dWUtcGVyZi1lbmQ6XCIuY29uY2F0KGlkKTtcbiAgICAgICAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgICAgICAgICAgdmFyIHZub2RlID0gdm0uX3JlbmRlcigpO1xuICAgICAgICAgICAgbWFyayhlbmRUYWcpO1xuICAgICAgICAgICAgbWVhc3VyZShcInZ1ZSBcIi5jb25jYXQobmFtZSwgXCIgcmVuZGVyXCIpLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICAgICAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgICAgICAgICAgdm0uX3VwZGF0ZSh2bm9kZSwgaHlkcmF0aW5nKTtcbiAgICAgICAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgICAgICAgIG1lYXN1cmUoXCJ2dWUgXCIuY29uY2F0KG5hbWUsIFwiIHBhdGNoXCIpLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHVwZGF0ZUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZtLl91cGRhdGUodm0uX3JlbmRlcigpLCBoeWRyYXRpbmcpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICB2YXIgd2F0Y2hlck9wdGlvbnMgPSB7XG4gICAgICAgIGJlZm9yZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHZtLl9pc01vdW50ZWQgJiYgIXZtLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgICAgIGNhbGxIb29rJDEodm0sICdiZWZvcmVVcGRhdGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2F0Y2hlck9wdGlvbnMub25UcmFjayA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBjYWxsSG9vayQxKHZtLCAncmVuZGVyVHJhY2tlZCcsIFtlXSk7IH07XG4gICAgICAgIHdhdGNoZXJPcHRpb25zLm9uVHJpZ2dlciA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBjYWxsSG9vayQxKHZtLCAncmVuZGVyVHJpZ2dlcmVkJywgW2VdKTsgfTtcbiAgICB9XG4gICAgLy8gd2Ugc2V0IHRoaXMgdG8gdm0uX3dhdGNoZXIgaW5zaWRlIHRoZSB3YXRjaGVyJ3MgY29uc3RydWN0b3JcbiAgICAvLyBzaW5jZSB0aGUgd2F0Y2hlcidzIGluaXRpYWwgcGF0Y2ggbWF5IGNhbGwgJGZvcmNlVXBkYXRlIChlLmcuIGluc2lkZSBjaGlsZFxuICAgIC8vIGNvbXBvbmVudCdzIG1vdW50ZWQgaG9vayksIHdoaWNoIHJlbGllcyBvbiB2bS5fd2F0Y2hlciBiZWluZyBhbHJlYWR5IGRlZmluZWRcbiAgICBuZXcgV2F0Y2hlcih2bSwgdXBkYXRlQ29tcG9uZW50LCBub29wLCB3YXRjaGVyT3B0aW9ucywgdHJ1ZSAvKiBpc1JlbmRlcldhdGNoZXIgKi8pO1xuICAgIGh5ZHJhdGluZyA9IGZhbHNlO1xuICAgIC8vIGZsdXNoIGJ1ZmZlciBmb3IgZmx1c2g6IFwicHJlXCIgd2F0Y2hlcnMgcXVldWVkIGluIHNldHVwKClcbiAgICB2YXIgcHJlV2F0Y2hlcnMgPSB2bS5fcHJlV2F0Y2hlcnM7XG4gICAgaWYgKHByZVdhdGNoZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlV2F0Y2hlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHByZVdhdGNoZXJzW2ldLnJ1bigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG1hbnVhbGx5IG1vdW50ZWQgaW5zdGFuY2UsIGNhbGwgbW91bnRlZCBvbiBzZWxmXG4gICAgLy8gbW91bnRlZCBpcyBjYWxsZWQgZm9yIHJlbmRlci1jcmVhdGVkIGNoaWxkIGNvbXBvbmVudHMgaW4gaXRzIGluc2VydGVkIGhvb2tcbiAgICBpZiAodm0uJHZub2RlID09IG51bGwpIHtcbiAgICAgICAgdm0uX2lzTW91bnRlZCA9IHRydWU7XG4gICAgICAgIGNhbGxIb29rJDEodm0sICdtb3VudGVkJyk7XG4gICAgfVxuICAgIHJldHVybiB2bTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUNoaWxkQ29tcG9uZW50KHZtLCBwcm9wc0RhdGEsIGxpc3RlbmVycywgcGFyZW50Vm5vZGUsIHJlbmRlckNoaWxkcmVuKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgY29tcG9uZW50IGhhcyBzbG90IGNoaWxkcmVuXG4gICAgLy8gd2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBvdmVyd3JpdGluZyAkb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4uXG4gICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIGR5bmFtaWMgc2NvcGVkU2xvdHMgKGhhbmQtd3JpdHRlbiBvciBjb21waWxlZCBidXQgd2l0aFxuICAgIC8vIGR5bmFtaWMgc2xvdCBuYW1lcykuIFN0YXRpYyBzY29wZWQgc2xvdHMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZSBoYXMgdGhlXG4gICAgLy8gXCIkc3RhYmxlXCIgbWFya2VyLlxuICAgIHZhciBuZXdTY29wZWRTbG90cyA9IHBhcmVudFZub2RlLmRhdGEuc2NvcGVkU2xvdHM7XG4gICAgdmFyIG9sZFNjb3BlZFNsb3RzID0gdm0uJHNjb3BlZFNsb3RzO1xuICAgIHZhciBoYXNEeW5hbWljU2NvcGVkU2xvdCA9ICEhKChuZXdTY29wZWRTbG90cyAmJiAhbmV3U2NvcGVkU2xvdHMuJHN0YWJsZSkgfHxcbiAgICAgICAgKG9sZFNjb3BlZFNsb3RzICE9PSBlbXB0eU9iamVjdCAmJiAhb2xkU2NvcGVkU2xvdHMuJHN0YWJsZSkgfHxcbiAgICAgICAgKG5ld1Njb3BlZFNsb3RzICYmIHZtLiRzY29wZWRTbG90cy4ka2V5ICE9PSBuZXdTY29wZWRTbG90cy4ka2V5KSB8fFxuICAgICAgICAoIW5ld1Njb3BlZFNsb3RzICYmIHZtLiRzY29wZWRTbG90cy4ka2V5KSk7XG4gICAgLy8gQW55IHN0YXRpYyBzbG90IGNoaWxkcmVuIGZyb20gdGhlIHBhcmVudCBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyBwYXJlbnQnc1xuICAgIC8vIHVwZGF0ZS4gRHluYW1pYyBzY29wZWQgc2xvdHMgbWF5IGFsc28gaGF2ZSBjaGFuZ2VkLiBJbiBzdWNoIGNhc2VzLCBhIGZvcmNlZFxuICAgIC8vIHVwZGF0ZSBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIGNvcnJlY3RuZXNzLlxuICAgIHZhciBuZWVkc0ZvcmNlVXBkYXRlID0gISEocmVuZGVyQ2hpbGRyZW4gfHwgLy8gaGFzIG5ldyBzdGF0aWMgc2xvdHNcbiAgICAgICAgdm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuIHx8IC8vIGhhcyBvbGQgc3Rh
13835dGljIHNsb3RzXG4gICAgICAgIGhhc0R5bmFtaWNTY29wZWRTbG90KTtcbiAgICB2YXIgcHJldlZOb2RlID0gdm0uJHZub2RlO1xuICAgIHZtLiRvcHRpb25zLl9wYXJlbnRWbm9kZSA9IHBhcmVudFZub2RlO1xuICAgIHZtLiR2bm9kZSA9IHBhcmVudFZub2RlOyAvLyB1cGRhdGUgdm0ncyBwbGFjZWhvbGRlciBub2RlIHdpdGhvdXQgcmUtcmVuZGVyXG4gICAgaWYgKHZtLl92bm9kZSkge1xuICAgICAgICAvLyB1cGRhdGUgY2hpbGQgdHJlZSdzIHBhcmVudFxuICAgICAgICB2bS5fdm5vZGUucGFyZW50ID0gcGFyZW50Vm5vZGU7XG4gICAgfVxuICAgIHZtLiRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbiA9IHJlbmRlckNoaWxkcmVuO1xuICAgIC8vIHVwZGF0ZSAkYXR0cnMgYW5kICRsaXN0ZW5lcnMgaGFzaFxuICAgIC8vIHRoZXNlIGFyZSBhbHNvIHJlYWN0aXZlIHNvIHRoZXkgbWF5IHRyaWdnZXIgY2hpbGQgdXBkYXRlIGlmIHRoZSBjaGlsZFxuICAgIC8vIHVzZWQgdGhlbSBkdXJpbmcgcmVuZGVyXG4gICAgdmFyIGF0dHJzID0gcGFyZW50Vm5vZGUuZGF0YS5hdHRycyB8fCBlbXB0eU9iamVjdDtcbiAgICBpZiAodm0uX2F0dHJzUHJveHkpIHtcbiAgICAgICAgLy8gZm9yY2UgdXBkYXRlIGlmIGF0dHJzIGFyZSBhY2Nlc3NlZCBhbmQgaGFzIGNoYW5nZWQgc2luY2UgaXQgbWF5IGJlXG4gICAgICAgIC8vIHBhc3NlZCB0byBhIGNoaWxkIGNvbXBvbmVudC5cbiAgICAgICAgaWYgKHN5bmNTZXR1cFByb3h5KHZtLl9hdHRyc1Byb3h5LCBhdHRycywgKHByZXZWTm9kZS5kYXRhICYmIHByZXZWTm9kZS5kYXRhLmF0dHJzKSB8fCBlbXB0eU9iamVjdCwgdm0sICckYXR0cnMnKSkge1xuICAgICAgICAgICAgbmVlZHNGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdm0uJGF0dHJzID0gYXR0cnM7XG4gICAgLy8gdXBkYXRlIGxpc3RlbmVyc1xuICAgIGxpc3RlbmVycyA9IGxpc3RlbmVycyB8fCBlbXB0eU9iamVjdDtcbiAgICB2YXIgcHJldkxpc3RlbmVycyA9IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gICAgaWYgKHZtLl9saXN0ZW5lcnNQcm94eSkge1xuICAgICAgICBzeW5jU2V0dXBQcm94eSh2bS5fbGlzdGVuZXJzUHJveHksIGxpc3RlbmVycywgcHJldkxpc3RlbmVycyB8fCBlbXB0eU9iamVjdCwgdm0sICckbGlzdGVuZXJzJyk7XG4gICAgfVxuICAgIHZtLiRsaXN0ZW5lcnMgPSB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzID0gbGlzdGVuZXJzO1xuICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzLCBwcmV2TGlzdGVuZXJzKTtcbiAgICAvLyB1cGRhdGUgcHJvcHNcbiAgICBpZiAocHJvcHNEYXRhICYmIHZtLiRvcHRpb25zLnByb3BzKSB7XG4gICAgICAgIHRvZ2dsZU9ic2VydmluZyhmYWxzZSk7XG4gICAgICAgIHZhciBwcm9wcyA9IHZtLl9wcm9wcztcbiAgICAgICAgdmFyIHByb3BLZXlzID0gdm0uJG9wdGlvbnMuX3Byb3BLZXlzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2Y
13835XIga2V5ID0gcHJvcEtleXNbaV07XG4gICAgICAgICAgICB2YXIgcHJvcE9wdGlvbnMgPSB2bS4kb3B0aW9ucy5wcm9wczsgLy8gd3RmIGZsb3c/XG4gICAgICAgICAgICBwcm9wc1trZXldID0gdmFsaWRhdGVQcm9wKGtleSwgcHJvcE9wdGlvbnMsIHByb3BzRGF0YSwgdm0pO1xuICAgICAgICB9XG4gICAgICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgICAgICAgLy8ga2VlcCBhIGNvcHkgb2YgcmF3IHByb3BzRGF0YVxuICAgICAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgPSBwcm9wc0RhdGE7XG4gICAgfVxuICAgIC8vIHJlc29sdmUgc2xvdHMgKyBmb3JjZSB1cGRhdGUgaWYgaGFzIGNoaWxkcmVuXG4gICAgaWYgKG5lZWRzRm9yY2VVcGRhdGUpIHtcbiAgICAgICAgdm0uJHNsb3RzID0gcmVzb2x2ZVNsb3RzKHJlbmRlckNoaWxkcmVuLCBwYXJlbnRWbm9kZS5jb250ZXh0KTtcbiAgICAgICAgdm0uJGZvcmNlVXBkYXRlKCk7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzSW5JbmFjdGl2ZVRyZWUodm0pIHtcbiAgICB3aGlsZSAodm0gJiYgKHZtID0gdm0uJHBhcmVudCkpIHtcbiAgICAgICAgaWYgKHZtLl9pbmFjdGl2ZSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLCBkaXJlY3QpIHtcbiAgICBpZiAoZGlyZWN0KSB7XG4gICAgICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoaXNJbkluYWN0aXZlVHJlZSh2bSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh2bS5fZGlyZWN0SW5hY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodm0uX2luYWN0aXZlIHx8IHZtLl9pbmFjdGl2ZSA9PT0gbnVsbCkge1xuICAgICAgICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsSG9vayQxKHZtLCAnYWN0aXZhdGVkJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLCBkaXJlY3QpIHtcbiAgICBpZiAoZGlyZWN0KSB7XG4gICAgICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIGlmIChpc0luSW5hY3RpdmVUcmVlKHZtKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghdm0uX2luYWN0aXZlKSB7XG4gICAgICAgIHZtLl9pbmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm0uJGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsSG9vayQxKHZtLCAnZGVhY3RpdmF0ZWQnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjYWxsSG9vayQxKHZtLCBob29rLCBhcmdzLCBzZXRDb250ZXh0KSB7XG4gICAgaWYgKHNldENvbnRleHQgPT09IHZvaWQgMCkgeyBzZXRDb250ZXh0ID0gdHJ1ZTsgfVxuICAgIC8vICM3NTczIGRpc2FibGUgZGVwIGNvbGxlY3Rpb24gd2hlbiBpbnZva2luZyBsaWZlY3ljbGUgaG9va3NcbiAgICBwdXNoVGFyZ2V0KCk7XG4gICAgdmFyIHByZXYgPSBjdXJyZW50SW5zdGFuY2U7XG4gICAgc2V0Q29udGV4dCAmJiBzZXRDdXJyZW50SW5zdGFuY2Uodm0pO1xuICAgIHZhciBoYW5kbGVycyA9IHZtLiRvcHRpb25zW2hvb2tdO1xuICAgIHZhciBpbmZvID0gXCJcIi5jb25jYXQoaG9vaywgXCIgaG9va1wiKTtcbiAgICBpZiAoaGFuZGxlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGhhbmRsZXJzW2ldLCB2bSwgYXJncyB8fCBudWxsLCB2bSwgaW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZtLl9oYXNIb29rRXZlbnQpIHtcbiAgICAgICAgdm0uJGVtaXQoJ2hvb2s6JyArIGhvb2spO1xuICAgIH1cbiAgICBzZXRDb250ZXh0ICYmIHNldEN1cnJlbnRJbnN0YW5jZShwcmV2KTtcbiAgICBwb3BUYXJnZXQoKTtcbn1cblxudmFyIE1BWF9VUERBVEVfQ09VTlQgPSAxMDA7XG52YXIgcXVldWUgPSBbXTtcbnZhciBhY3RpdmF0ZWRDaGlsZHJlbiA9IFtdO1xudmFyIGhhcyA9IHt9O1xudmFyIGNpcmN1bGFyID0ge307XG52YXIgd2FpdGluZyA9IGZhbHNlO1xudmFyIGZsdXNoaW5nID0gZmFsc2U7XG52YXIgaW5kZXgkMSA9IDA7XG4vKipcbiAqIFJlc2V0IHRoZSBzY2hlZHVsZXIncyBzdGF0ZS5cbiAqL1xuZnVuY3Rpb24gcmVzZXRTY2hlZHVsZXJTdGF0ZSgpIHtcbiAgICBpbmRleCQxID0gcXVldWUubGVuZ3RoID0gYWN0aXZhdGVkQ2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgICBoYXMgPSB7fTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjaXJjdWxhciA9IHt9O1xuICAgIH1cbiAgICB3YWl0aW5nID0gZmx1c2hpbmcgPSBmYWxzZTtcbn1cbi8vIEFzeW5jIGVkZ2UgY2FzZSAjNjU2NiByZXF1aXJlcyBzYXZpbmcgdGhlIHRpbWVzdGFtcCB3aGVuIGV2ZW50IGxpc3RlbmVycyBhcmVcbi8vIGF0dGFjaGVkLiBIb3dldmVyLCBjYWxsaW5nIHBlcmZvcm1hbmNlLm5vdygpIGhhcyBhIHBlcmYgb3ZlcmhlYWQgZXNwZWNpYWxseVxuLy8gaWYgdGhlIHBhZ2UgaGFzIHRob3VzYW5kcyBvZiBldmVudCBsaXN0ZW5lcnMuIEluc3RlYWQsIHdlIHRha2UgYSB0aW1lc3RhbXBcbi8vIGV2ZXJ5IHRpbWUgdGhlIHNjaGVkdWxlciBmbHVzaGVzIGFuZCB1c2UgdGhhdCBmb3IgYWxsIGV2ZW50IGxpc3RlbmVyc1xuLy8gYXR0YWNoZWQgZHVyaW5nIHRoYXQgZmx1c2guXG52YXIgY3VycmVudEZsdXNoVGltZXN0YW1wID0gMDtcbi8vIEFzeW5jIGVkZ2UgY2FzZSBmaXggcmVxdWlyZXMgc3RvcmluZyBhbiBldmVudCBsaXN0ZW5lcidzIGF0dGFjaCB0aW1lc3RhbXAuXG52YXIgZ2V0Tm93ID0gRGF0ZS5ub3c7XG4vLyBEZXRlcm1pbmUgd2hhdCBldmVudCB0aW1lc3RhbXAgdGhlIGJyb3dzZXIgaXMgdXNpbmcuIEFubm95aW5nbHksIHRoZVxuLy8gdGltZXN0YW1wIGNhbiBlaXRoZXIgYmUgaGktcmVzIChyZWxhdGl2ZSB0byBwYWdlIGxvYWQpIG9yIGxvdy1yZXNcbi8vIChyZWxhdGl2ZSB0byBVTklYIGVwb2NoKSwgc28gaW4gb3JkZXIgdG8gY29tcGFyZSB0aW1lIHdlIGhhdmUgdG8gdXNlIHRoZVxuLy8gc2FtZSB0aW1lc3RhbXAgdHlwZSB3aGVuIHNhdmluZyB0aGUgZmx1c2ggdGltZXN0YW1wLlxuLy8gQWxsIElFIHZlcnNpb25zIHVzZSBsb3ctcmVzIGV2ZW50IHRpbWVzdGFtcHMsIGFuZCBoYXZlIHByb2JsZW1hdGljIGNsb2NrXG4vLyBpbXBsZW1lbnRhdGlvbnMgKCM5NjMyKVxuaWYgKGluQnJvd3NlciAmJiAhaXNJRSkge1xuICAgIHZhciBwZXJmb3JtYW5jZV8xID0gd2luZG93LnBlcmZvcm1hbmNlO1xuICAgIGlmIChwZXJmb3JtYW5jZV8xICYmXG4gICAgICAgI
13835HR5cGVvZiBwZXJmb3JtYW5jZV8xLm5vdyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICBnZXROb3coKSA+IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpLnRpbWVTdGFtcCkge1xuICAgICAgICAvLyBpZiB0aGUgZXZlbnQgdGltZXN0YW1wLCBhbHRob3VnaCBldmFsdWF0ZWQgQUZURVIgdGhlIERhdGUubm93KCksIGlzXG4gICAgICAgIC8vIHNtYWxsZXIgdGhhbiBpdCwgaXQgbWVhbnMgdGhlIGV2ZW50IGlzIHVzaW5nIGEgaGktcmVzIHRpbWVzdGFtcCxcbiAgICAgICAgLy8gYW5kIHdlIG5lZWQgdG8gdXNlIHRoZSBoaS1yZXMgdmVyc2lvbiBmb3IgZXZlbnQgbGlzdGVuZXIgdGltZXN0YW1wcyBhc1xuICAgICAgICAvLyB3ZWxsLlxuICAgICAgICBnZXROb3cgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwZXJmb3JtYW5jZV8xLm5vdygpOyB9O1xuICAgIH1cbn1cbnZhciBzb3J0Q29tcGFyZUZuID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICBpZiAoYS5wb3N0KSB7XG4gICAgICAgIGlmICghYi5wb3N0KVxuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKGIucG9zdCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiBhLmlkIC0gYi5pZDtcbn07XG4vKipcbiAqIEZsdXNoIGJvdGggcXVldWVzIGFuZCBydW4gdGhlIHdhdGNoZXJzLlxuICovXG5mdW5jdGlvbiBmbHVzaFNjaGVkdWxlclF1ZXVlKCkge1xuICAgIGN1cnJlbnRGbHVzaFRpbWVzdGFtcCA9IGdldE5vdygpO1xuICAgIGZsdXNoaW5nID0gdHJ1ZTtcbiAgICB2YXIgd2F0Y2hlciwgaWQ7XG4gICAgLy8gU29ydCBxdWV1ZSBiZWZvcmUgZmx1c2guXG4gICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQ6XG4gICAgLy8gMS4gQ29tcG9uZW50cyBhcmUgdXBkYXRlZCBmcm9tIHBhcmVudCB0byBjaGlsZC4gKGJlY2F1c2UgcGFyZW50IGlzIGFsd2F5c1xuICAgIC8vICAgIGNyZWF0ZWQgYmVmb3JlIHRoZSBjaGlsZClcbiAgICAvLyAyLiBBIGNvbXBvbmVudCdzIHVzZXIgd2F0Y2hlcnMgYXJlIHJ1biBiZWZvcmUgaXRzIHJlbmRlciB3YXRjaGVyIChiZWNhdXNlXG4gICAgLy8gICAgdXNlciB3YXRjaGVycyBhcmUgY3JlYXRlZCBiZWZvcmUgdGhlIHJlbmRlciB3YXRjaGVyKVxuICAgIC8vIDMuIElmIGEgY29tcG9uZW50IGlzIGRlc3Ryb3llZCBkdXJpbmcgYSBwYXJlbnQgY29tcG9uZW50J3Mgd2F0Y2hlciBydW4sXG4gICAgLy8gICAgaXRzIHdhdGNoZXJzIGNhbiBiZSBza2lwcGVkLlxuICAgIHF1ZXVlLnNvcnQoc29ydENvbXBhcmVGbik7XG4gICAgLy8gZG8gbm90IGNhY2hlIGxlbmd0aCBiZWNhdXNlIG1vcmUgd2F0Y2hlcnMgbWlnaHQgYmUgcHVzaGVkXG4gICAgLy8gYXMgd2UgcnVuIGV4aXN0aW5nIHdhdGNoZXJzXG4gICAgZm9yIChpbmRleCQxID0gMDsgaW5kZXgkMSA8IHF1ZXVlLmxlbmd0aDsgaW5kZXgkMSsrKSB7XG4gICAgICAgIHdhdGNoZXIgPSBxdWV1ZVtpbmRleCQxXTtcbiAgICAgICAgaWYgKHdhdGNoZXIuYmVmb3JlKSB7XG4gICAgICAgICAgICB3YXRjaGVyLmJlZm9yZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlkID0gd2F0Y2hlci5pZDtcbiAgICAgICAgaGFzW2lkXSA9IG51bGw7XG4gICAgICAgIHdhdGNoZXIucnVuKCk7XG4gICAgICAgIC8vIGluIGRldiBidWlsZCwgY2hlY2sgYW5kIHN0b3AgY2lyY3VsYXIgdXBkYXRlcy5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaGFzW2lkXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjaXJjdWxhcltpZF0gPSAoY2lyY3VsYXJbaWRdIHx8IDApICsgMTtcbiAgICAgICAgICAgIGlmIChjaXJjdWxhcltpZF0gPiBNQVhfVVBEQVRFX0NPVU5UKSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKCdZb3UgbWF5IGhhdmUgYW4gaW5maW5pdGUgdXBkYXRlIGxvb3AgJyArXG4gICAgICAgICAgICAgICAgICAgICh3YXRjaGVyLnVzZXJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJpbiB3YXRjaGVyIHdpdGggZXhwcmVzc2lvbiBcXFwiXCIuY29uY2F0KHdhdGNoZXIuZXhwcmVzc2lvbiwgXCJcXFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiaW4gYSBjb21wb25lbnQgcmVuZGVyIGZ1bmN0aW9uLlwiKSwgd2F0Y2hlci52bSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8ga2VlcCBjb3BpZXMgb2YgcG9zdCBxdWV1ZXMgYmVmb3JlIHJlc2V0dGluZyBzdGF0ZVxuICAgIHZhciBhY3RpdmF0ZWRRdWV1ZSA9IGFjdGl2YXRlZENoaWxkcmVuLnNsaWNlKCk7XG4gICAgdmFyIHVwZGF0ZWRRdWV1ZSA9IHF1ZXVlLnNsaWNlKCk7XG4gICAgcmVzZXRTY2hlZHVsZXJTdGF0ZSgpO1xuICAgIC8vIGNhbGwgY29tcG9uZW50IHVwZGF0ZWQgYW5kIGFjdGl2YXRlZCBob29rc1xuICAgIGNhbGxBY3RpdmF0ZWRIb29rcyhhY3RpdmF0ZWRRdWV1ZSk7XG4gICAgY2FsbFVwZGF0ZWRIb29rcyh1cGRhdGVkUXVldWUpO1xuICAgIGNsZWFudXBEZXBzKCk7XG4gICAgLy8gZGV2dG9vbCBob29rXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGRldnRvb2xzICYmIGNvbmZpZy5kZXZ0b29scykge1xuICAgICAgICBkZXZ0b29scy5lbWl0KCdmbHVzaCcpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNhbGxVcGRhdGVkSG9va3MocXVldWUpIHtcbiAgICB2YXIgaSA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIHZhciB3YXRjaGVyID0gcXVldWVbaV07XG4gICAgICAgIHZhciB2bSA9IHdhdGNoZXIudm07XG4gICAgICAgIGlmICh2bSAmJiB2bS5fd2F0Y2hlciA9PT0gd2F0Y2hlciAmJiB2bS5faXNNb3VudGVkICYmICF2bS5faXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIGNhbGxIb29rJDEodm0sICd1cGRhdGVkJyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFF1ZXVlIGEga2VwdC1hbGl2ZSBjb21wb25lbnQgdGhhdCB3YXMgYWN0aXZhdGVkIGR1cmluZyBwYXRjaC5cbiAqIFRoZSBxdWV1ZSB3aWxsIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgZW50aXJlIHRyZWUgaGFzIGJlZW4gcGF0Y2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVBY3RpdmF0ZWRDb21wb25lbnQodm0pIHtcbiAgICAvLyBzZXR0aW5nIF9pbmFjdGl2ZSB0byBmYWxzZSBoZXJlIHNvIHRoYXQgYSByZW5kZXIgZnVuY3Rpb24gY2FuXG4gICAgLy8gcmVseSBvbiBjaGVja2luZyB3aGV0aGVyIGl0J3MgaW4gYW4gaW5hY3RpdmUgdHJlZSAoZS5nLiByb3V0ZXItdmlldylcbiAgICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcbiAgICBhY3RpdmF0ZWRDaGlsZHJlbi5wdXNoKHZtKTtcbn1cbmZ1bmN0aW9uIGNhbGxBY3RpdmF0ZWRIb29rcyhxdWV1ZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcXVldWVbaV0uX2luYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudChxdWV1ZVtpXSwgdHJ1ZSAvKiB0cnVlICovKTtcbiAgICB9XG59XG4vKipcbiAqIFB1c2ggYSB3YXRjaGVyIGludG8gdGhlIHdhdGNoZXIgcXVldWUuXG4gKiBKb2JzIHdpdGggZHVwbGljYXRlIElEcyB3aWxsIGJlIHNraXBwZWQgdW5sZXNzIGl0J3NcbiAqIHB1c2hlZCB3aGVuIHRoZSBxdWV1ZSBpcyBiZWluZyBmbHVzaGVkLlxuICovXG5mdW5jdGlvbiBxdWV1ZVdhdGNoZXIod2F0Y2hlcikge1xuICAgIHZhciBpZCA9IHdhdGNoZXIuaWQ7XG4gICAgaWYgKGhhc1tpZF0gIT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh3YXRjaGVyID09PSBEZXAudGFyZ2V0ICYmIHdhdGNoZXIubm9SZWN1cnNlKSB7XG4gICAgICAgI
13835HJldHVybjtcbiAgICB9XG4gICAgaGFzW2lkXSA9IHRydWU7XG4gICAgaWYgKCFmbHVzaGluZykge1xuICAgICAgICBxdWV1ZS5wdXNoKHdhdGNoZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gaWYgYWxyZWFkeSBmbHVzaGluZywgc3BsaWNlIHRoZSB3YXRjaGVyIGJhc2VkIG9uIGl0cyBpZFxuICAgICAgICAvLyBpZiBhbHJlYWR5IHBhc3QgaXRzIGlkLCBpdCB3aWxsIGJlIHJ1biBuZXh0IGltbWVkaWF0ZWx5LlxuICAgICAgICB2YXIgaSA9IHF1ZXVlLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlIChpID4gaW5kZXgkMSAmJiBxdWV1ZVtpXS5pZCA+IHdhdGNoZXIuaWQpIHtcbiAgICAgICAgICAgIGktLTtcbiAgICAgICAgfVxuICAgICAgICBxdWV1ZS5zcGxpY2UoaSArIDEsIDAsIHdhdGNoZXIpO1xuICAgIH1cbiAgICAvLyBxdWV1ZSB0aGUgZmx1c2hcbiAgICBpZiAoIXdhaXRpbmcpIHtcbiAgICAgICAgd2FpdGluZyA9IHRydWU7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFjb25maWcuYXN5bmMpIHtcbiAgICAgICAgICAgIGZsdXNoU2NoZWR1bGVyUXVldWUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBuZXh0VGljayhmbHVzaFNjaGVkdWxlclF1ZXVlKTtcbiAgICB9XG59XG5cbnZhciBXQVRDSEVSID0gXCJ3YXRjaGVyXCI7XG52YXIgV0FUQ0hFUl9DQiA9IFwiXCIuY29uY2F0KFdBVENIRVIsIFwiIGNhbGxiYWNrXCIpO1xudmFyIFdBVENIRVJfR0VUVEVSID0gXCJcIi5jb25jYXQoV0FUQ0hFUiwgXCIgZ2V0dGVyXCIpO1xudmFyIFdBVENIRVJfQ0xFQU5VUCA9IFwiXCIuY29uY2F0KFdBVENIRVIsIFwiIGNsZWFudXBcIik7XG4vLyBTaW1wbGUgZWZmZWN0LlxuZnVuY3Rpb24gd2F0Y2hFZmZlY3QoZWZmZWN0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGRvV2F0Y2goZWZmZWN0LCBudWxsLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHdhdGNoUG9zdEVmZmVjdChlZmZlY3QsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gZG9XYXRjaChlZmZlY3QsIG51bGwsIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgICAgID8gX19hc3NpZ24oX19hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGZsdXNoOiAncG9zdCcgfSkgOiB7IGZsdXNoOiAncG9zdCcgfSkpO1xufVxuZnVuY3Rpb24gd2F0Y2hTeW5jRWZmZWN0KGVmZmVjdCwgb3B0aW9ucykge1xuICAgIHJldHVybiBkb1dhdGNoKGVmZmVjdCwgbnVsbCwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICAgICAgPyBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb3B0aW9ucyksIHsgZmx1c2g6ICdzeW5jJyB9KSA6IHsgZmx1c2g6ICdzeW5jJyB9KSk7XG59XG4vLyBpbml0aWFsIHZhbHVlIGZvciB3YXRjaGVycyB0byB0cmlnZ2VyIG9uIHVuZGVmaW5lZCBpbml0aWFsIHZhbHVlc1xudmFyIElOSVRJQUxfV0FUQ0hFUl9WQUxVRSA9IHt9O1xuLy8gaW1wbGVtZW50YXRpb25cbmZ1bmN0aW9uIHdhdGNoKHNvdXJjZSwgY2IsIG9wdGlvbnMpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2FybiQyKFwiYHdhdGNoKGZuLCBvcHRpb25zPylgIHNpZ25hdHVyZSBoYXMgYmVlbiBtb3ZlZCB0byBhIHNlcGFyYXRlIEFQSS4gXCIgK1xuICAgICAgICAgICAgXCJVc2UgYHdhdGNoRWZmZWN0KGZuLCBvcHRpb25zPylgIGluc3RlYWQuIGB3YXRjaGAgbm93IG9ubHkgXCIgK1xuICAgICAgICAgICAgXCJzdXBwb3J0cyBgd2F0Y2goc291cmNlLCBjYiwgb3B0aW9ucz8pIHNpZ25hdHVyZS5cIik7XG4gICAgfVxuICAgIHJldHVybiBkb1dhdGNoKHNvdXJjZSwgY2IsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gZG9XYXRjaChzb3VyY2UsIGNiLCBfYSkge1xuICAgIHZhciBfYiA9IF9hID09PSB2b2lkIDAgPyBlbXB0eU9iamVjdCA6IF9hLCBpbW1lZGlhdGUgPSBfYi5pbW1lZGlhdGUsIGRlZXAgPSBfYi5kZWVwLCBfYyA9IF9iLmZsdXNoLCBmbHVzaCA9IF9jID09PSB2b2lkIDAgPyAncHJlJyA6IF9jLCBvblRyYWNrID0gX2Iub25UcmFjaywgb25UcmlnZ2VyID0gX2Iub25UcmlnZ2VyO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFjYikge1xuICAgICAgICBpZiAoaW1tZWRpYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHdhcm4kMihcIndhdGNoKCkgXFxcImltbWVkaWF0ZVxcXCIgb3B0aW9uIGlzIG9ubHkgcmVzcGVjdGVkIHdoZW4gdXNpbmcgdGhlIFwiICtcbiAgICAgICAgICAgICAgICBcIndhdGNoKHNvdXJjZSwgY2FsbGJhY2ssIG9wdGlvbnM/KSBzaWduYXR1cmUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWVwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHdhcm4kMihcIndhdGNoKCkgXFxcImRlZXBcXFwiIG9wdGlvbiBpcyBvbmx5IHJlc3BlY3RlZCB3aGVuIHVzaW5nIHRoZSBcIiArXG4gICAgICAgICAgICAgICAgXCJ3YXRjaChzb3VyY2UsIGNhbGxiYWNrLCBvcHRpb25zPykgc2lnbmF0dXJlLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgd2FybkludmFsaWRTb3VyY2UgPSBmdW5jdGlvbiAocykge1xuICAgICAgICB3YXJuJDIoXCJJbnZhbGlkIHdhdGNoIHNvdXJjZTogXCIuY29uY2F0KHMsIFwiLiBBIHdhdGNoIHNvdXJjZSBjYW4gb25seSBiZSBhIGdldHRlci9lZmZlY3QgXCIpICtcbiAgICAgICAgICAgIFwiZnVuY3Rpb24sIGEgcmVmLCBhIHJlYWN0aXZlIG9iamVjdCwgb3IgYW4gYXJyYXkgb2YgdGhlc2UgdHlwZXMuXCIpO1xuICAgIH07XG4gICAgdmFyIGluc3RhbmNlID0gY3VycmVudEluc3RhbmNlO1xuICAgIHZhciBjYWxsID0gZnVuY3Rpb24gKGZuLCB0eXBlLCBhcmdzKSB7XG4gICAgICAgIGlmIChhcmdzID09PSB2b2lkIDApIHsgYXJncyA9IG51bGw7IH1cbiAgICAgICAgcmV0dXJuIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGZuLCBudWxsLCBhcmdzLCBpbnN0YW5jZSwgdHlwZSk7XG4gICAgfTtcbiAgICB2YXIgZ2V0dGVyO1xuICAgIHZhciBmb3JjZVRyaWdnZXIgPSBmYWxzZTtcbiAgICB2YXIgaXNNdWx0aVNvdXJjZSA9IGZhbHNlO1xuICAgIGlmIChpc1JlZihzb3VyY2UpKSB7XG4gICAgICAgIGdldHRlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNvdXJjZS52YWx1ZTsgfTtcbiAgICAgICAgZm9yY2VUcmlnZ2VyID0gaXNTaGFsbG93KHNvdXJjZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUmVhY3RpdmUoc291cmNlKSkge1xuICAgICAgICBnZXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzb3VyY2UuX19vYl9fLmRlcC5kZXBlbmQoKTtcbiAgICAgICAgICAgI
13835HJldHVybiBzb3VyY2U7XG4gICAgICAgIH07XG4gICAgICAgIGRlZXAgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgaXNNdWx0aVNvdXJjZSA9IHRydWU7XG4gICAgICAgIGZvcmNlVHJpZ2dlciA9IHNvdXJjZS5zb21lKGZ1bmN0aW9uIChzKSB7IHJldHVybiBpc1JlYWN0aXZlKHMpIHx8IGlzU2hhbGxvdyhzKTsgfSk7XG4gICAgICAgIGdldHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVmKHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzLnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc1JlYWN0aXZlKHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZShzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNGdW5jdGlvbihzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbChzLCBXQVRDSEVSX0dFVFRFUik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm5JbnZhbGlkU291cmNlKHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHNvdXJjZSkpIHtcbiAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgICAvLyBnZXR0ZXIgd2l0aCBjYlxuICAgICAgICAgICAgZ2V0dGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FsbChzb3VyY2UsIFdBVENIRVJfR0VUVEVSKTsgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5vIGNiIC0+IHNpbXBsZSBlZmZlY3RcbiAgICAgICAgICAgIGdldHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuX2lzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNsZWFudXApIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbChzb3VyY2UsIFdBVENIRVIsIFtvbkNsZWFudXBdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdldHRlciA9IG5vb3A7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2Fyb
13835kludmFsaWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG4gICAgaWYgKGNiICYmIGRlZXApIHtcbiAgICAgICAgdmFyIGJhc2VHZXR0ZXJfMSA9IGdldHRlcjtcbiAgICAgICAgZ2V0dGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJhdmVyc2UoYmFzZUdldHRlcl8xKCkpOyB9O1xuICAgIH1cbiAgICB2YXIgY2xlYW51cDtcbiAgICB2YXIgb25DbGVhbnVwID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIGNsZWFudXAgPSB3YXRjaGVyLm9uU3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNhbGwoZm4sIFdBVENIRVJfQ0xFQU5VUCk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICAvLyBpbiBTU1IgdGhlcmUgaXMgbm8gbmVlZCB0byBzZXR1cCBhbiBhY3R1YWwgZWZmZWN0LCBhbmQgaXQgc2hvdWxkIGJlIG5vb3BcbiAgICAvLyB1bmxlc3MgaXQncyBlYWdlclxuICAgIGlmIChpc1NlcnZlclJlbmRlcmluZygpKSB7XG4gICAgICAgIC8vIHdlIHdpbGwgYWxzbyBub3QgY2FsbCB0aGUgaW52YWxpZGF0ZSBjYWxsYmFjayAoKyBydW5uZXIgaXMgbm90IHNldCB1cClcbiAgICAgICAgb25DbGVhbnVwID0gbm9vcDtcbiAgICAgICAgaWYgKCFjYikge1xuICAgICAgICAgICAgZ2V0dGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW1tZWRpYXRlKSB7XG4gICAgICAgICAgICBjYWxsKGNiLCBXQVRDSEVSX0NCLCBbXG4gICAgICAgICAgICAgICAgZ2V0dGVyKCksXG4gICAgICAgICAgICAgICAgaXNNdWx0aVNvdXJjZSA/IFtdIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG9uQ2xlYW51cFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vb3A7XG4gICAgfVxuICAgIHZhciB3YXRjaGVyID0gbmV3IFdhdGNoZXIoY3VycmVudEluc3RhbmNlLCBnZXR0ZXIsIG5vb3AsIHtcbiAgICAgICAgbGF6eTogdHJ1ZVxuICAgIH0pO1xuICAgIHdhdGNoZXIubm9SZWN1cnNlID0gIWNiO1xuICAgIHZhciBvbGRWYWx1ZSA9IGlzTXVsdGlTb3VyY2UgPyBbXSA6IElOSVRJQUxfV0FUQ0hFUl9WQUxVRTtcbiAgICAvLyBvdmVyd3JpdGUgZGVmYXVsdCBydW5cbiAgICB3YXRjaGVyLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF3YXRjaGVyLmFjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgLy8gd2F0Y2goc291cmNlLCBjYilcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHdhdGNoZXIuZ2V0KCk7XG4gICAgICAgICAgICBpZiAoZGVlcCB8fFxuICAgICAgICAgICAgICAgIGZvcmNlVHJpZ2dlciB8fFxuICAgICAgICAgICAgICAgIChpc011bHRpU291cmNlXG4gICAgICAgICAgICAgICAgICAgID8gbmV3VmFsdWUuc29tZShmdW5jdGlvbiAodiwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc0NoYW5nZWQodiwgb2xkVmFsdWVbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IGhhc0NoYW5nZWQobmV3VmFsdWUsIG9sZFZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIGJlZm9yZSBydW5uaW5nIGNiIGFnYWluXG4gICAgICAgICAgICAgICAgaWYgKGNsZWFudXApIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsKGNiLCBXQVRDSEVSX0NCLCBbXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAvLyBwYXNzIHVuZGVmaW5lZCBhcyB0aGUgb2xkIHZhbHVlIHdoZW4gaXQncyBjaGFuZ2VkIGZvciB0aGUgZmlyc3QgdGltZVxuICAgICAgICAgICAgICAgICAgICBvbGRWYWx1ZSA9PT0gSU5JVElBTF9XQVRDSEVSX1ZBTFVFID8gdW5kZWZpbmVkIDogb2xkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xlYW51cFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIG9sZFZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyB3YXRjaEVmZmVjdFxuICAgICAgICAgICAgd2F0Y2hlci5nZXQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgaWYgKGZsdXNoID09PSAnc3luYycpIHtcbiAgICAgICAgd2F0Y2hlci51cGRhdGUgPSB3YXRjaGVyLnJ1bjtcbiAgICB9XG4gICAgZWxzZSBpZiAoZmx1c2ggPT09ICdwb3N0Jykge1xuICAgICAgICB3YXRjaGVyLnBvc3QgPSB0cnVlO1xuICAgICAgICB3YXRjaGVyLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHF1ZXVlV2F0Y2hlcih3YXRjaGVyKTsgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIHByZVxuICAgICAgICB3YXRjaGVyLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZSA9PT0gY3VycmVudEluc3RhbmNlICYmICFpbnN0YW5jZS5faXNNb3VudGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gcHJlLXdhdGNoZXIgdHJpZ2dlcmVkIGJlZm9yZVxuICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBpbnN0YW5jZS5fcHJlV2F0Y2hlcnMgfHwgKGluc3RhbmNlLl9wcmVXYXRjaGVycyA9IFtdKTtcbiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLmluZGV4T2Yod2F0Y2hlcikgPCAwKVxuICAgICAgICAgICAgICAgICAgICBidWZmZXIucHVzaCh3YXRjaGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlV2F0Y2hlcih3YXRjaGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2F0Y2hlci5vblRyYWNrID0gb25UcmFjaztcbiAgICAgICAgd2F0Y2hlci5vblRyaWdnZXIgPSBvblRyaWdnZXI7XG4gICAgfVxuICAgIC8vIGluaXRpYWwgcnVuXG4gICAgaWYgKGNiKSB7XG4gICAgICAgIGlmIChpbW1lZGlhdGUpIHtcbiAgICAgICAgICAgIHdhdGNoZXIucnVuKCk7XG4gICAgICAgI
13835H1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IHdhdGNoZXIuZ2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoZmx1c2ggPT09ICdwb3N0JyAmJiBpbnN0YW5jZSkge1xuICAgICAgICBpbnN0YW5jZS4kb25jZSgnaG9vazptb3VudGVkJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gd2F0Y2hlci5nZXQoKTsgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB3YXRjaGVyLmdldCgpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB3YXRjaGVyLnRlYXJkb3duKCk7XG4gICAgfTtcbn1cblxudmFyIGFjdGl2ZUVmZmVjdFNjb3BlO1xudmFyIEVmZmVjdFNjb3BlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEVmZmVjdFNjb3BlKGRldGFjaGVkKSB7XG4gICAgICAgIGlmIChkZXRhY2hlZCA9PT0gdm9pZCAwKSB7IGRldGFjaGVkID0gZmFsc2U7IH1cbiAgICAgICAgdGhpcy5kZXRhY2hlZCA9IGRldGFjaGVkO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZWZmZWN0cyA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNsZWFudXBzID0gW107XG4gICAgICAgIHRoaXMucGFyZW50ID0gYWN0aXZlRWZmZWN0U2NvcGU7XG4gICAgICAgIGlmICghZGV0YWNoZWQgJiYgYWN0aXZlRWZmZWN0U2NvcGUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXggPVxuICAgICAgICAgICAgICAgIChhY3RpdmVFZmZlY3RTY29wZS5zY29wZXMgfHwgKGFjdGl2ZUVmZmVjdFNjb3BlLnNjb3BlcyA9IFtdKSkucHVzaCh0aGlzKSAtIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgRWZmZWN0U2NvcGUucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50RWZmZWN0U2NvcGUgPSBhY3RpdmVFZmZlY3RTY29wZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHJldHVybiBmbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgPSBjdXJyZW50RWZmZWN0U2NvcGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgd2FybiQyKFwiY2Fubm90IHJ1biBhbiBpbmFjdGl2ZSBlZmZlY3Qgc2NvcGUuXCIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBub24tZGV0YWNoZWQgc2NvcGVzXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgRWZmZWN0U2NvcGUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBhY3RpdmVFZmZlY3RTY29wZSA9IHRoaXM7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBub24tZGV0YWNoZWQgc2NvcGVzXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgRWZmZWN0U2NvcGUucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgPSB0aGlzLnBhcmVudDtcbiAgICB9O1xuICAgIEVmZmVjdFNjb3BlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKGZyb21QYXJlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgICAgICAgICB2Y
13835XIgaSA9IHZvaWQgMCwgbCA9IHZvaWQgMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSB0aGlzLmVmZmVjdHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RzW2ldLnRlYXJkb3duKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gdGhpcy5jbGVhbnVwcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFudXBzW2ldKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zY29wZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gdGhpcy5zY29wZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NvcGVzW2ldLnN0b3AodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gbmVzdGVkIHNjb3BlLCBkZXJlZmVyZW5jZSBmcm9tIHBhcmVudCB0byBhdm9pZCBtZW1vcnkgbGVha3NcbiAgICAgICAgICAgIGlmICghdGhpcy5kZXRhY2hlZCAmJiB0aGlzLnBhcmVudCAmJiAhZnJvbVBhcmVudCkge1xuICAgICAgICAgICAgICAgIC8vIG9wdGltaXplZCBPKDEpIHJlbW92YWxcbiAgICAgICAgICAgICAgICB2YXIgbGFzdCA9IHRoaXMucGFyZW50LnNjb3Blcy5wb3AoKTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdCAmJiBsYXN0ICE9PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnNjb3Blc1t0aGlzLmluZGV4XSA9IGxhc3Q7XG4gICAgICAgICAgICAgICAgICAgIGxhc3QuaW5kZXggPSB0aGlzLmluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEVmZmVjdFNjb3BlO1xufSgpKTtcbmZ1bmN0aW9uIGVmZmVjdFNjb3BlKGRldGFjaGVkKSB7XG4gICAgcmV0dXJuIG5ldyBFZmZlY3RTY29wZShkZXRhY2hlZCk7XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiByZWNvcmRFZmZlY3RTY29wZShlZmZlY3QsIHNjb3BlKSB7XG4gICAgaWYgKHNjb3BlID09PSB2b2lkIDApIHsgc2NvcGUgPSBhY3RpdmVFZmZlY3RTY29wZTsgfVxuICAgIGlmIChzY29wZSAmJiBzY29wZS5hY3RpdmUpIHtcbiAgICAgICAgc2NvcGUuZWZmZWN0cy5wdXNoKGVmZmVjdCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0Q3VycmVudFNjb3BlKCkge1xuICAgIHJldHVybiBhY3RpdmVFZmZlY3RTY29wZTtcbn1cbmZ1bmN0aW9uIG9uU2NvcGVEaXNwb3NlKGZuKSB7XG4gICAgaWYgKGFjdGl2ZUVmZmVjdFNjb3BlKSB7XG4gICAgICAgIGFjdGl2ZUVmZmVjdFNjb3BlLmNsZWFudXBzLnB1c2goZm4pO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4kMihcIm9uU2NvcGVEaXNwb3NlKCkgaXMgY2FsbGVkIHdoZW4gdGhlcmUgaXMgbm8gYWN0aXZlIGVmZmVjdCBzY29wZVwiICtcbiAgICAgICAgICAgIFwiIHRvIGJlIGFzc29jaWF0ZWQgd2l0aC5cIik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwcm92aWRlKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoIWN1cnJlbnRJbnN0YW5jZSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgd2FybiQyKFwicHJvdmlkZSgpIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIHNldHVwKCkuXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBUUyBkb2Vzbid0IGFsbG93IHN5bWJvbCBhcyBpbmRleCB0eXBlXG4gICAgICAgIHJlc29sdmVQcm92aWRlZChjdXJyZW50SW5zdGFuY2UpW2tleV0gPSB2YWx1ZTtcbiAgICB9XG59XG5mdW5jdGlvbiByZXNvbHZlUHJvdmlkZWQodm0pIHtcbiAgICAvLyBieSBkZWZhdWx0IGFuIGluc3RhbmNlIGluaGVyaXRzIGl0cyBwYXJlbnQncyBwcm92aWRlcyBvYmplY3RcbiAgICAvLyBidXQgd2hlbiBpdCBuZWVkcyB0byBwcm92aWRlIHZhbHVlcyBvZiBpdHMgb3duLCBpdCBjcmVhdGVzIGl0c1xuICAgIC8vIG93biBwcm92aWRlcyBvYmplY3QgdXNpbmcgcGFyZW50IHByb3ZpZGVzIG9iamVjdCBhcyBwcm90b3R5cGUuXG4gICAgLy8gdGhpcyB3YXkgaW4gYGluamVjdGAgd2UgY2FuIHNpbXBseSBsb29rIHVwIGluamVjdGlvbnMgZnJvbSBkaXJlY3RcbiAgICAvLyBwYXJlbnQgYW5kIGxldCB0aGUgcHJvdG90eXBlIGNoYWluIGRvIHRoZSB3b3JrLlxuICAgIHZhciBleGlzdGluZyA9IHZtLl9wcm92aWRlZDtcbiAgICB2YXIgcGFyZW50UHJvdmlkZXMgPSB2bS4kcGFyZW50ICYmIHZtLiRwYXJlbnQuX3Byb3ZpZGVkO1xuICAgIGlmIChwYXJlbnRQcm92aWRlcyA9PT0gZXhpc3RpbmcpIHtcbiAgICAgICAgcmV0dXJuICh2bS5fcHJvdmlkZWQgPSBPYmplY3QuY3JlYXRlKHBhcmVudFByb3ZpZGVzKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxufVxuZnVuY3Rpb24gaW5qZWN0KGtleSwgZGVmYXVsdFZhbHVlLCB0cmVhdERlZmF1bHRBc0ZhY3RvcnkpIHtcbiAgICBpZiAodHJlYXREZWZhdWx0QXNGYWN0b3J5ID09PSB2b2lkIDApIHsgdHJlYXREZWZhdWx0QXNGYWN0b3J5ID0gZmFsc2U7IH1cbiAgICAvLyBmYWxsYmFjayB0byBgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlYCBzbyB0aGF0IHRoaXMgY2FuIGJlIGNhbGxlZCBpblxuICAgIC8vIGEgZnVuY3Rpb25hbCBjb21wb25lbnRcbiAgICB2YXIgaW5zdGFuY2UgPSBjdXJyZW50SW5zdGFuY2U7XG4gICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgIC8vICMyNDAwXG4gICAgICAgIC8vIHRvIHN1cHBvcnQgYGFwcC51c2VgIHBsdWdpbnMsXG4gICAgICAgIC8vIGZhbGxiYWNrIHRvIGFwcENvbnRleHQncyBgcHJvdmlkZXNgIGlmIHRoZSBpbnN0YW5jZSBpcyBhdCByb290XG4gICAgICAgIHZhciBwcm92aWRlcyA9IGluc3RhbmNlLiRwYXJlbnQgJiYgaW5zdGFuY2UuJHBhcmVudC5fcHJvdmlkZWQ7XG4gICAgICAgIGlmIChwcm92aWRlcyAmJiBrZXkgaW4gcHJvdmlkZXMpIHtcbiAgICAgICAgICAgIC8vIFRTIGRvZXNuJ3QgYWxsb3cgc3ltYm9sIGFzIGluZGV4IHR5cGVcbiAgICAgICAgICAgI
13835HJldHVybiBwcm92aWRlc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJlYXREZWZhdWx0QXNGYWN0b3J5ICYmIGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKVxuICAgICAgICAgICAgICAgID8gZGVmYXVsdFZhbHVlLmNhbGwoaW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgOiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgd2FybiQyKFwiaW5qZWN0aW9uIFxcXCJcIi5jb25jYXQoU3RyaW5nKGtleSksIFwiXFxcIiBub3QgZm91bmQuXCIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4kMihcImluamVjdCgpIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIHNldHVwKCkgb3IgZnVuY3Rpb25hbCBjb21wb25lbnRzLlwiKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGludGVybmFsIHRoaXMgZnVuY3Rpb24gbmVlZHMgbWFudWFsIHB1YmxpYyB0eXBlIGRlY2xhcmF0aW9uIGJlY2F1c2UgaXQgcmVsaWVzXG4gKiBvbiBwcmV2aW91c2x5IG1hbnVhbGx5IGF1dGhvcmVkIHR5cGVzIGZyb20gVnVlIDJcbiAqL1xuZnVuY3Rpb24gaCh0eXBlLCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgICBpZiAoIWN1cnJlbnRJbnN0YW5jZSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICB3YXJuJDIoXCJnbG9iYWxseSBpbXBvcnRlZCBoKCkgY2FuIG9ubHkgYmUgaW52b2tlZCB3aGVuIHRoZXJlIGlzIGFuIGFjdGl2ZSBcIiArXG4gICAgICAgICAgICAgICAgXCJjb21wb25lbnQgaW5zdGFuY2UsIGUuZy4gc3luY2hyb25vdXNseSBpbiBhIGNvbXBvbmVudCdzIHJlbmRlciBvciBzZXR1cCBmdW5jdGlvbi5cIik7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVFbGVtZW50JDEoY3VycmVudEluc3RhbmNlLCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIDIsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVFcnJvcihlcnIsIHZtLCBpbmZvKSB7XG4gICAgLy8gRGVhY3RpdmF0ZSBkZXBzIHRyYWNraW5nIHdoaWxlIHByb2Nlc3NpbmcgZXJyb3IgaGFuZGxlciB0byBhdm9pZCBwb3NzaWJsZSBpbmZpbml0ZSByZW5kZXJpbmcuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVleC9pc3N1ZXMvMTUwNVxuICAgIHB1c2hUYXJnZXQoKTtcbiAgICB0cnkge1xuICAgICAgICBpZiAodm0pIHtcbiAgICAgICAgICAgIHZhciBjdXIgPSB2bTtcbiAgICAgICAgICAgIHdoaWxlICgoY3VyID0gY3VyLiRwYXJlbnQpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGhvb2tzID0gY3VyLiRvcHRpb25zLmVycm9yQ2FwdHVyZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhcHR1cmUgPSBob29rc1tpXS5jYWxsKGN1ciwgZXJyLCB2bSwgaW5mbykgPT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXB0dXJlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbEhhbmRsZUVycm9yKGUsIGN1ciwgJ2Vycm9yQ2FwdHVyZWQgaG9vaycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdsb2JhbEhhbmRsZUVycm9yKGVyciwgdm0sIGluZm8pO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgcG9wVGFyZ2V0KCk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoaGFuZGxlciwgY29udGV4dCwgYXJncywgdm0sIGluZm8pIHtcbiAgICB2YXIgcmVzO1xuICAgIHRyeSB7XG4gICAgICAgIHJlcyA9IGFyZ3MgPyBoYW5kbGVyLmFwcGx5KGNvbnRleHQsIGFyZ3MpIDogaGFuZGxlci5jYWxsKGNvbnRleHQpO1xuICAgICAgICBpZiAocmVzICYmICFyZXMuX2lzVnVlICYmIGlzUHJvbWlzZShyZXMpICYmICFyZXMuX2hhbmRsZWQpIHtcbiAgICAgICAgICAgIHJlcy5jYXRjaChmdW5jdGlvbiAoZSkgeyByZXR1cm4gaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8gKyBcIiAoUHJvbWlzZS9hc3luYylcIik7IH0pO1xuICAgICAgICAgICAgcmVzLl9oYW5kbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBoYW5kbGVFcnJvcihlLCB2bSwgaW5mbyk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBnbG9iYWxIYW5kbGVFcnJvcihlcnIsIHZtLCBpbmZvKSB7XG4gICAgaWYgKGNvbmZpZy5lcnJvckhhbmRsZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBjb25maWcuZXJyb3JIYW5kbGVyLmNhbGwobnVsbCwgZXJyLCB2bSwgaW5mbyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSB1c2VyIGludGVudGlvbmFsbHkgdGhyb3dzIHRoZSBvcmlnaW5hbCBlcnJvciBpbiB0aGUgaGFuZGxlcixcbiAgICAgICAgICAgIC8vIGRvIG5vdCBsb2cgaXQgdHdpY2VcbiAgICAgICAgICAgIGlmIChlICE9PSBlcnIpIHtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihlLCBudWxsLCAnY29uZmlnLmVycm9ySGFuZGxlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGxvZ0Vycm9yKGVyciwgdm0sIGluZm8pO1xufVxuZnVuY3Rpb24gbG9nRXJyb3IoZXJyLCB2bSwgaW5mbykge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgI
13835Hdhcm4kMihcIkVycm9yIGluIFwiLmNvbmNhdChpbmZvLCBcIjogXFxcIlwiKS5jb25jYXQoZXJyLnRvU3RyaW5nKCksIFwiXFxcIlwiKSwgdm0pO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpbkJyb3dzZXIgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9XG59XG5cbi8qIGdsb2JhbHMgTXV0YXRpb25PYnNlcnZlciAqL1xudmFyIGlzVXNpbmdNaWNyb1Rhc2sgPSBmYWxzZTtcbnZhciBjYWxsYmFja3MgPSBbXTtcbnZhciBwZW5kaW5nID0gZmFsc2U7XG5mdW5jdGlvbiBmbHVzaENhbGxiYWNrcygpIHtcbiAgICBwZW5kaW5nID0gZmFsc2U7XG4gICAgdmFyIGNvcGllcyA9IGNhbGxiYWNrcy5zbGljZSgwKTtcbiAgICBjYWxsYmFja3MubGVuZ3RoID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvcGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb3BpZXNbaV0oKTtcbiAgICB9XG59XG4vLyBIZXJlIHdlIGhhdmUgYXN5bmMgZGVmZXJyaW5nIHdyYXBwZXJzIHVzaW5nIG1pY3JvdGFza3MuXG4vLyBJbiAyLjUgd2UgdXNlZCAobWFjcm8pIHRhc2tzIChpbiBjb21iaW5hdGlvbiB3aXRoIG1pY3JvdGFza3MpLlxuLy8gSG93ZXZlciwgaXQgaGFzIHN1YnRsZSBwcm9ibGVtcyB3aGVuIHN0YXRlIGlzIGNoYW5nZWQgcmlnaHQgYmVmb3JlIHJlcGFpbnRcbi8vIChlLmcuICM2ODEzLCBvdXQtaW4gdHJhbnNpdGlvbnMpLlxuLy8gQWxzbywgdXNpbmcgKG1hY3JvKSB0YXNrcyBpbiBldmVudCBoYW5kbGVyIHdvdWxkIGNhdXNlIHNvbWUgd2VpcmQgYmVoYXZpb3JzXG4vLyB0aGF0IGNhbm5vdCBiZSBjaXJjdW12ZW50ZWQgKGUuZy4gIzcxMDksICM3MTUzLCAjNzU0NiwgIzc4MzQsICM4MTA5KS5cbi8vIFNvIHdlIG5vdyB1c2UgbWljcm90YXNrcyBldmVyeXdoZXJlLCBhZ2Fpbi5cbi8vIEEgbWFqb3IgZHJhd2JhY2sgb2YgdGhpcyB0cmFkZW9mZiBpcyB0aGF0IHRoZXJlIGFyZSBzb21lIHNjZW5hcmlvc1xuLy8gd2hlcmUgbWljcm90YXNrcyBoYXZlIHRvbyBoaWdoIGEgcHJpb3JpdHkgYW5kIGZpcmUgaW4gYmV0d2VlbiBzdXBwb3NlZGx5XG4vLyBzZXF1ZW50aWFsIGV2ZW50cyAoZS5nLiAjNDUyMSwgIzY2OTAsIHdoaWNoIGhhdmUgd29ya2Fyb3VuZHMpXG4vLyBvciBldmVuIGJldHdlZW4gYnViYmxpbmcgb2YgdGhlIHNhbWUgZXZlbnQgKCM2NTY2KS5cbnZhciB0aW1lckZ1bmM7XG4vLyBUaGUgbmV4dFRpY2sgYmVoYXZpb3IgbGV2ZXJhZ2VzIHRoZSBtaWNyb3Rhc2sgcXVldWUsIHdoaWNoIGNhbiBiZSBhY2Nlc3NlZFxuLy8gdmlhIGVpdGhlciBuYXRpdmUgUHJvbWlzZS50aGVuIG9yIE11dGF0aW9uT2JzZXJ2ZXIuXG4vLyBNdXRhdGlvbk9ic2VydmVyIGhhcyB3aWRlciBzdXBwb3J0LCBob3dldmVyIGl0IGlzIHNlcmlvdXNseSBidWdnZWQgaW5cbi8vIFVJV2ViVmlldyBpbiBpT1MgPj0gOS4zLjMgd2hlbiB0cmlnZ2VyZWQgaW4gdG91Y2ggZXZlbnQgaGFuZGxlcnMuIEl0XG4vLyBjb21wbGV0ZWx5IHN0b3BzIHdvcmtpbmcgYWZ0ZXIgdHJpZ2dlcmluZyBhIGZldyB0aW1lcy4uLiBzbywgaWYgbmF0aXZlXG4vLyBQcm9taXNlIGlzIGF2YWlsYWJsZSwgd2Ugd2lsbCB1c2UgaXQ6XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCwgJGZsb3ctZGlzYWJsZS1saW5lICovXG5pZiAodHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFByb21pc2UpKSB7XG4gICAgdmFyIHBfMSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcF8xLnRoZW4oZmx1c2hDYWxsYmFja3MpO1xuICAgICAgICAvLyBJbiBwcm9ibGVtYXRpYyBVSVdlYlZpZXdzLCBQcm9taXNlLnRoZW4gZG9lc24ndCBjb21wbGV0ZWx5IGJyZWFrLCBidXRcbiAgICAgICAgLy8gaXQgY2FuIGdldCBzdHVjayBpbiBhIHdlaXJkIHN0YXRlIHdoZXJlIGNhbGxiYWNrcyBhcmUgcHVzaGVkIGludG8gdGhlXG4gICAgICAgIC8vIG1pY3JvdGFzayBxdWV1ZSBidXQgdGhlIHF1ZXVlIGlzbid0IGJlaW5nIGZsdXNoZWQsIHVudGlsIHRoZSBicm93c2VyXG4gICAgICAgIC8vIG5lZWRzIHRvIGRvIHNvbWUgb3RoZXIgd29yaywgZS5nLiBoYW5kbGUgYSB0aW1lci4gVGhlcmVmb3JlIHdlIGNhblxuICAgICAgICAvLyBcImZvcmNlXCIgdGhlIG1pY3JvdGFzayBxdWV1ZSB0byBiZSBmbHVzaGVkIGJ5IGFkZGluZyBhbiBlbXB0eSB0aW1lci5cbiAgICAgICAgaWYgKGlzSU9TKVxuICAgICAgICAgICAgc2V0VGltZW91dChub29wKTtcbiAgICB9O1xuICAgIGlzVXNpbmdNaWNyb1Rhc2sgPSB0cnVlO1xufVxuZWxzZSBpZiAoIWlzSUUgJiZcbiAgICB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAoaXNOYXRpdmUoTXV0YXRpb25PYnNlcnZlcikgfHxcbiAgICAgICAgLy8gUGhhbnRvbUpTIGFuZCBpT1MgNy54XG4gICAgICAgIE11dGF0aW9uT2JzZXJ2ZXIudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yXScpKSB7XG4gICAgLy8gVXNlIE11dGF0aW9uT2JzZXJ2ZXIgd2hlcmUgbmF0aXZlIFByb21pc2UgaXMgbm90IGF2YWlsYWJsZSxcbiAgICAvLyBlLmcuIFBoYW50b21KUywgaU9TNywgQW5kcm9pZCA0LjRcbiAgICAvLyAoIzY0NjYgTXV0YXRpb25PYnNlcnZlciBpcyB1bnJlbGlhYmxlIGluIElFMTEpXG4gICAgdmFyIGNvdW50ZXJfMSA9IDE7XG4gICAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZmx1c2hDYWxsYmFja3MpO1xuICAgIHZhciB0ZXh0Tm9kZV8xID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKGNvdW50ZXJfMSkpO1xuICAgIG9ic2VydmVyLm9ic2VydmUodGV4dE5vZGVfMSwge1xuICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gICAgfSk7XG4gICAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjb3VudGVyXzEgPSAoY291bnRlcl8xICsgMSkgJSAyO1xuICAgICAgICB0ZXh0Tm9kZV8xLmRhdGEgPSBTdHJpbmcoY291bnRlcl8xKTtcbiAgICB9O1xuICAgIGlzVXNpbmdNaWNyb1Rhc2sgPSB0cnVlO1xufVxuZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoc2V0SW1tZWRpYXRlKSkge1xuICAgIC8vIEZhbGxiYWNrIHRvIHNldEltbWVkaWF0ZS5cbiAgICAvLyBUZWNobmljYWxseSBpdCBsZXZlcmFnZXMgdGhlIChtYWNybykgdGFzayBxdW
13835V1ZSxcbiAgICAvLyBidXQgaXQgaXMgc3RpbGwgYSBiZXR0ZXIgY2hvaWNlIHRoYW4gc2V0VGltZW91dC5cbiAgICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldEltbWVkaWF0ZShmbHVzaENhbGxiYWNrcyk7XG4gICAgfTtcbn1cbmVsc2Uge1xuICAgIC8vIEZhbGxiYWNrIHRvIHNldFRpbWVvdXQuXG4gICAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRUaW1lb3V0KGZsdXNoQ2FsbGJhY2tzLCAwKTtcbiAgICB9O1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gbmV4dFRpY2soY2IsIGN0eCkge1xuICAgIHZhciBfcmVzb2x2ZTtcbiAgICBjYWxsYmFja3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjYi5jYWxsKGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGUsIGN0eCwgJ25leHRUaWNrJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoX3Jlc29sdmUpIHtcbiAgICAgICAgICAgIF9yZXNvbHZlKGN0eCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgICAgcGVuZGluZyA9IHRydWU7XG4gICAgICAgIHRpbWVyRnVuYygpO1xuICAgIH1cbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICBpZiAoIWNiICYmIHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB1c2VDc3NNb2R1bGUobmFtZSkge1xuICAgIGlmIChuYW1lID09PSB2b2lkIDApIHsgbmFtZSA9ICckc3R5bGUnOyB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICB7XG4gICAgICAgIGlmICghY3VycmVudEluc3RhbmNlKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4kMihcInVzZUNzc01vZHVsZSBtdXN0IGJlIGNhbGxlZCBpbnNpZGUgc2V0dXAoKVwiKTtcbiAgICAgICAgICAgIHJldHVybiBlbXB0eU9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICB2Y
13835XIgbW9kID0gY3VycmVudEluc3RhbmNlW25hbWVdO1xuICAgICAgICBpZiAoIW1vZCkge1xuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIHdhcm4kMihcIkN1cnJlbnQgaW5zdGFuY2UgZG9lcyBub3QgaGF2ZSBDU1MgbW9kdWxlIG5hbWVkIFxcXCJcIi5jb25jYXQobmFtZSwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gZW1wdHlPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZDtcbiAgICB9XG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIFNGQydzIENTUyB2YXJpYWJsZSBpbmplY3Rpb24gZmVhdHVyZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHVzZUNzc1ZhcnMoZ2V0dGVyKSB7XG4gICAgaWYgKCFpbkJyb3dzZXIgJiYgIWZhbHNlKVxuICAgICAgICByZXR1cm47XG4gICAgdmFyIGluc3RhbmNlID0gY3VycmVudEluc3RhbmNlO1xuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgd2FybiQyKFwidXNlQ3NzVmFycyBpcyBjYWxsZWQgd2l0aG91dCBjdXJyZW50IGFjdGl2ZSBjb21wb25lbnQgaW5zdGFuY2UuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHdhdGNoUG9zdEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbCA9IGluc3RhbmNlLiRlbDtcbiAgICAgICAgdmFyIHZhcnMgPSBnZXR0ZXIoaW5zdGFuY2UsIGluc3RhbmNlLl9zZXR1cFByb3h5KTtcbiAgICAgICAgaWYgKGVsICYmIGVsLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgICB2Y
13835XIgc3R5bGUgPSBlbC5zdHlsZTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB2YXJzKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkoXCItLVwiLmNvbmNhdChrZXkpLCB2YXJzW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogdjMtY29tcGF0aWJsZSBhc3luYyBjb21wb25lbnQgQVBJLlxuICogQGludGVybmFsIHRoZSB0eXBlIGlzIG1hbnVhbGx5IGRlY2xhcmVkIGluIDxyb290Pi90eXBlcy92My1kZWZpbmUtYXN5bmMtY29tcG9uZW50LmQudHNcbiAqIGJlY2F1c2UgaXQgcmVsaWVzIG9uIGV4aXN0aW5nIG1hbnVhbCB0eXBlc1xuICovXG5mdW5jdGlvbiBkZWZpbmVBc3luY0NvbXBvbmVudChzb3VyY2UpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihzb3VyY2UpKSB7XG4gICAgICAgIHNvdXJjZSA9IHsgbG9hZGVyOiBzb3VyY2UgfTtcbiAgICB9XG4gICAgdmFyIGxvYWRlciA9IHNvdXJjZS5sb2FkZXIsIGxvYWRpbmdDb21wb25lbnQgPSBzb3VyY2UubG9hZGluZ0NvbXBvbmVudCwgZXJyb3JDb21wb25lbnQgPSBzb3VyY2UuZXJyb3JDb21wb25lbnQsIF9hID0gc291cmNlLmRlbGF5LCBkZWxheSA9IF9hID09PSB2b2lkIDAgPyAyMDAgOiBfYSwgdGltZW91dCA9IHNvdXJjZS50aW1lb3V0LCAvLyB1bmRlZmluZWQgPSBuZXZlciB0aW1lcyBvdXRcbiAgICBfYiA9IHNvdXJjZS5zdXNwZW5zaWJsZSwgLy8gdW5kZWZpbmVkID0gbmV2ZXIgdGltZXMgb3V0XG4gICAgc3VzcGVuc2libGUgPSBfYiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfYiwgLy8gaW4gVnVlIDMgZGVmYXVsdCBpcyB0cnVlXG4gICAgdXNlck9uRXJyb3IgPSBzb3VyY2Uub25FcnJvcjtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzdXNwZW5zaWJsZSkge1xuICAgICAgICB3YXJuJDIoXCJUaGUgc3VzcGVuc2libGJlIG9wdGlvbiBmb3IgYXN5bmMgY29tcG9uZW50cyBpcyBub3Qgc3VwcG9ydGVkIGluIFZ1ZTIuIEl0IGlzIGlnbm9yZWQuXCIpO1xuICAgIH1cbiAgICB2YXIgcGVuZGluZ1JlcXVlc3QgPSBudWxsO1xuICAgIHZhciByZXRyaWVzID0gMDtcbiAgICB2YXIgcmV0cnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHJpZXMrKztcbiAgICAgICAgcGVuZGluZ1JlcXVlc3QgPSBudWxsO1xuICAgICAgICByZXR1cm4gbG9hZCgpO1xuICAgIH07XG4gICAgdmFyIGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0aGlzUmVxdWVzdDtcbiAgICAgICAgcmV0dXJuIChwZW5kaW5nUmVxdWVzdCB8fFxuICAgICAgICAgICAgKHRoaXNSZXF1ZXN0ID0gcGVuZGluZ1JlcXVlc3QgPVxuICAgICAgICAgICAgICAgIGxvYWRlcigpXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKFN0cmluZyhlcnIpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJPbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VyUmV0cnkgPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlKHJldHJ5KCkpOyB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VyRmFpbCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlamVjdChlcnIpOyB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJPbkVycm9yKGVyciwgdXNlclJldHJ5LCB1c2VyRmFpbCwgcmV0cmllcyArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoY29tcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpc1JlcXVlc3QgIT09IHBlbmRpbmdSZXF1ZXN0ICYmIHBlbmRpbmdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGVuZGluZ1JlcXVlc3Q7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4kMihcIkFzeW5jIGNvbXBvbmVudCBsb2FkZXIgcmVzb2x2ZWQgdG8gdW5kZWZpbmVkLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJJZiB5b3UgYXJlIHVzaW5nIHJldHJ5KCksIG1ha2Ugc3VyZSB0byByZXR1cm4gaXRzIHJldHVybiB2YWx1ZS5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gaW50ZXJvcCBtb2R1bGUgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbXAuX19lc01vZHVsZSB8fCBjb21wW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcCA9IGNvbXAuZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb21wICYmICFpc09iamVjdChjb21wKSAmJiAhaXNGdW5jdGlvbihjb21wKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhc3luYyBjb21wb25lbnQgbG9hZCByZXN1bHQ6IFwiLmNvbmNhdChjb21wKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXA7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb21wb25lbnQgPSBsb2FkKCk7XG4gICAgICAgI
13835HJldHVybiB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcbiAgICAgICAgICAgIGRlbGF5OiBkZWxheSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IHRpbWVvdXQsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3JDb21wb25lbnQsXG4gICAgICAgICAgICBsb2FkaW5nOiBsb2FkaW5nQ29tcG9uZW50XG4gICAgICAgIH07XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlmZUN5Y2xlKGhvb2tOYW1lKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChmbiwgdGFyZ2V0KSB7XG4gICAgICAgIGlmICh0YXJnZXQgPT09IHZvaWQgMCkgeyB0YXJnZXQgPSBjdXJyZW50SW5zdGFuY2U7IH1cbiAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJcIi5jb25jYXQoZm9ybWF0TmFtZShob29rTmFtZSksIFwiIGlzIGNhbGxlZCB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gYmUgXCIpICtcbiAgICAgICAgICAgICAgICAgICAgXCJhc3NvY2lhdGVkIHdpdGguIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJMaWZlY3ljbGUgaW5qZWN0aW9uIEFQSXMgY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgZXhlY3V0aW9uIG9mIHNldHVwKCkuXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmplY3RIb29rKHRhcmdldCwgaG9va05hbWUsIGZuKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gZm9ybWF0TmFtZShuYW1lKSB7XG4gICAgaWYgKG5hbWUgPT09ICdiZWZvcmVEZXN0cm95Jykge1xuICAgICAgICBuYW1lID0gJ2JlZm9yZVVubW91bnQnO1xuICAgIH1cbiAgICBlbHNlIGlmIChuYW1lID09PSAnZGVzdHJveWVkJykge1xuICAgICAgICBuYW1lID0gJ3VubW91bnRlZCc7XG4gICAgfVxuICAgIHJldHVybiBcIm9uXCIuY29uY2F0KG5hbWVbMF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSkpO1xufVxuZnVuY3Rpb24gaW5qZWN0SG9vayhpbnN0YW5jZSwgaG9va05hbWUsIGZuKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBpbnN0YW5jZS4kb3B0aW9ucztcbiAgICBvcHRpb25zW2hvb2tOYW1lXSA9IG1lcmdlTGlmZWN5Y2xlSG9vayhvcHRpb25zW2hvb2tOYW1lXSwgZm4pO1xufVxudmFyIG9uQmVmb3JlTW91bnQgPSBjcmVhdGVMaWZlQ3ljbGUoJ2JlZm9yZU1vdW50Jyk7XG52YXIgb25Nb3VudGVkID0gY3JlYXRlTGlmZUN5Y2xlKCdtb3VudGVkJyk7XG52YXIgb25CZWZvcmVVcGRhdGUgPSBjcmVhdGVMaWZlQ3ljbGUoJ2JlZm9yZVVwZGF0ZScpO1xudmFyIG9uVXBkYXRlZCA9IGNyZWF0ZUxpZmVDeWNsZSgndXBkYXRlZCcpO1xudmFyIG9uQmVmb3JlVW5tb3VudCA9IGNyZWF0ZUxpZmVDeWNsZSgnYmVmb3JlRGVzdHJveScpO1xudmFyIG9uVW5tb3VudGVkID0gY3JlYXRlTGlmZUN5Y2xlKCdkZXN0cm95ZWQnKTtcbnZhciBvbkFjdGl2YXRlZCA9IGNyZWF0ZUxpZmVDeWNsZSgnYWN0aXZhdGVkJyk7XG52YXIgb25EZWFjdGl2YXRlZCA9IGNyZWF0ZUxpZmVDeWNsZSgnZGVhY3RpdmF0ZWQnKTtcbnZhciBvblNlcnZlclByZWZldGNoID0gY3JlYXRlTGlmZUN5Y2xlKCdzZXJ2ZXJQcmVmZXRjaCcpO1xudmFyIG9uUmVuZGVyVHJhY2tlZCA9IGNyZWF0ZUxpZmVDeWNsZSgncmVuZGVyVHJhY2tlZCcpO1xudmFyIG9uUmVuZGVyVHJpZ2dlcmVkID0gY3JlYXRlTGlmZUN5Y2xlKCdyZW5kZXJUcmlnZ2VyZWQnKTtcbnZhciBpbmplY3RFcnJvckNhcHR1cmVkSG9vayA9IGNyZWF0ZUxpZmVDeWNsZSgnZXJyb3JDYXB0dXJlZCcpO1xuZnVuY3Rpb24gb25FcnJvckNhcHR1cmVkKGhvb2ssIHRhcmdldCkge1xuICAgIGlmICh0YXJnZXQgPT09IHZvaWQgMCkgeyB0YXJnZXQgPSBjdXJyZW50SW5zdGFuY2U7IH1cbiAgICBpbmplY3RFcnJvckNhcHR1cmVkSG9vayhob29rLCB0YXJnZXQpO1xufVxuXG4vKipcbiAqIE5vdGU6IGFsc28gdXBkYXRlIGRpc3QvdnVlLnJ1bnRpbWUubWpzIHdoZW4gYWRkaW5nIG5ldyBleHBvcnRzIHRvIHRoaXMgZmlsZS5cbiAqL1xudmFyIHZlcnNpb24gPSAnMi43LjE0Jztcbi8qKlxuICogQGludGVybmFsIHR5cGUgaXMgbWFudWFsbHkgZGVjbGFyZWQgaW4gPHJvb3Q+L3R5cGVzL3YzLWRlZmluZS1jb21wb25lbnQuZC50c1xuICovXG5mdW5jdGlvbiBkZWZpbmVDb21wb25lbnQob3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zO1xufVxuXG52YXIgc2Vlbk9iamVjdHMgPSBuZXcgX1NldCgpO1xuLyoqXG4gKiBSZWN1cnNpdmVseSB0cmF2ZXJzZSBhbiBvYmplY3QgdG8gZXZva2UgYWxsIGNvbnZlcnRlZFxuICogZ2V0dGVycywgc28gdGhhdCBldmVyeSBuZXN0ZWQgcHJvcGVydHkgaW5zaWRlIHRoZSBvYmplY3RcbiAqIGlzIGNvbGxlY3RlZCBhcyBhIFwiZGVlcFwiIGRlcGVuZGVuY3kuXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlKHZhbCkge1xuICAgIF90cmF2ZXJzZSh2YWwsIHNlZW5PYmplY3RzKTtcbiAgICBzZWVuT2JqZWN0cy5jbGVhcigpO1xuICAgIHJldHVybiB2YWw7XG59XG5mdW5jdGlvbiBfdHJhdmVyc2UodmFsLCBzZWVuKSB7XG4gICAgdmFyIGksIGtleXM7XG4gICAgdmFyIGlzQSA9IGlzQXJyYXkodmFsKTtcbiAgICBpZiAoKCFpc0EgJiYgIWlzT2JqZWN0KHZhbCkpIHx8XG4gICAgICAgIHZhbC5fX3Zfc2tpcCAvKiBSZWFjdGl2ZUZsYWdzLlNLSVAgKi8gfHxcbiAgICAgICAgT2JqZWN0LmlzRnJvemVuKHZhbCkgfHxcbiAgICAgICAgdmFsIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodmFsLl9fb2JfXykge1xuICAgICAgICB2Y
13835XIgZGVwSWQgPSB2YWwuX19vYl9fLmRlcC5pZDtcbiAgICAgICAgaWYgKHNlZW4uaGFzKGRlcElkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNlZW4uYWRkKGRlcElkKTtcbiAgICB9XG4gICAgaWYgKGlzQSkge1xuICAgICAgICBpID0gdmFsLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSlcbiAgICAgICAgICAgIF90cmF2ZXJzZSh2YWxbaV0sIHNlZW4pO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1JlZih2YWwpKSB7XG4gICAgICAgIF90cmF2ZXJzZSh2YWwudmFsdWUsIHNlZW4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgICAgIGkgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSlcbiAgICAgICAgICAgIF90cmF2ZXJzZSh2YWxba2V5c1tpXV0sIHNlZW4pO1xuICAgIH1cbn1cblxudmFyIHVpZCQxID0gMDtcbi8qKlxuICogQSB3YXRjaGVyIHBhcnNlcyBhbiBleHByZXNzaW9uLCBjb2xsZWN0cyBkZXBlbmRlbmNpZXMsXG4gKiBhbmQgZmlyZXMgY2FsbGJhY2sgd2hlbiB0aGUgZXhwcmVzc2lvbiB2YWx1ZSBjaGFuZ2VzLlxuICogVGhpcyBpcyB1c2VkIGZvciBib3RoIHRoZSAkd2F0Y2goKSBhcGkgYW5kIGRpcmVjdGl2ZXMuXG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIFdhdGNoZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gV2F0Y2hlcih2bSwgZXhwT3JGbiwgY2IsIG9wdGlvbnMsIGlzUmVuZGVyV2F0Y2hlcikge1xuICAgICAgICByZWNvcmRFZmZlY3RTY29wZSh0aGlzLCBcbiAgICAgICAgLy8gaWYgdGhlIGFjdGl2ZSBlZmZlY3Qgc2NvcGUgaXMgbWFudWFsbHkgY3JlYXRlZCAobm90IGEgY29tcG9uZW50IHNjb3BlKSxcbiAgICAgICAgLy8gcHJpb3JpdGl6ZSBpdFxuICAgICAgICBhY3RpdmVFZmZlY3RTY29wZSAmJiAhYWN0aXZlRWZmZWN0U2NvcGUuX3ZtXG4gICAgICAgICAgICA/IGFjdGl2ZUVmZmVjdFNjb3BlXG4gICAgICAgICAgICA6IHZtXG4gICAgICAgICAgICAgICAgPyB2bS5fc2NvcGVcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCk7XG4gICAgICAgIGlmICgodGhpcy52bSA9IHZtKSAmJiBpc1JlbmRlcldhdGNoZXIpIHtcbiAgICAgICAgICAgIHZtLl93YXRjaGVyID0gdGhpcztcbiAgICAgICAgfVxuICAgICAgICAvLyBvcHRpb25zXG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmRlZXAgPSAhIW9wdGlvbnMuZGVlc
13835DtcbiAgICAgICAgICAgIHRoaXMudXNlciA9ICEhb3B0aW9ucy51c2VyO1xuICAgICAgICAgICAgdGhpcy5sYXp5ID0gISFvcHRpb25zLmxhenk7XG4gICAgICAgICAgICB0aGlzLnN5bmMgPSAhIW9wdGlvbnMuc3luYztcbiAgICAgICAgICAgIHRoaXMuYmVmb3JlID0gb3B0aW9ucy5iZWZvcmU7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMub25UcmFjayA9IG9wdGlvbnMub25UcmFjaztcbiAgICAgICAgICAgICAgICB0aGlzLm9uVHJpZ2dlciA9IG9wdGlvbnMub25UcmlnZ2VyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZWVwID0gdGhpcy51c2VyID0gdGhpcy5sYXp5ID0gdGhpcy5zeW5jID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYiA9IGNiO1xuICAgICAgICB0aGlzLmlkID0gKyt1aWQkMTsgLy8gdWlkIGZvciBiYXRjaGluZ1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMucG9zdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRpcnR5ID0gdGhpcy5sYXp5OyAvLyBmb3IgbGF6eSB3YXRjaGVyc1xuICAgICAgICB0aGlzLmRlcHMgPSBbXTtcbiAgICAgICAgdGhpcy5uZXdEZXBzID0gW107XG4gICAgICAgIHRoaXMuZGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgICAgICAgdGhpcy5uZXdEZXBJZHMgPSBuZXcgX1NldCgpO1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gZXhwT3JGbi50b1N0cmluZygpIDogJyc7XG4gICAgICAgIC8vIHBhcnNlIGV4cHJlc3Npb24gZm9yIGdldHRlclxuICAgICAgICBpZiAoaXNGdW5jdGlvbihleHBPckZuKSkge1xuICAgICAgICAgICAgdGhpcy5nZXR0ZXIgPSBleHBPckZuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZXR0ZXIgPSBwYXJzZVBhdGgoZXhwT3JGbik7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZ2V0dGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXR0ZXIgPSBub29wO1xuICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICAgICAgd2FybiQyKFwiRmFpbGVkIHdhdGNoaW5nIHBhdGg6IFxcXCJcIi5jb25jYXQoZXhwT3JGbiwgXCJcXFwiIFwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnV2F0Y2hlciBvbmx5IGFjY2VwdHMgc2ltcGxlIGRvdC1kZWxpbWl0ZWQgcGF0aHMuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0ZvciBmdWxsIGNvbnRyb2wsIHVzZSBhIGZ1bmN0aW9uIGluc3RlYWQuJywgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxhenkgPyB1bmRlZmluZWQgOiB0aGlzLmdldCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFdmFsdWF0ZSB0aGUgZ2V0dGVyLCBhbmQgcmUtY29sbGVjdCBkZXBlbmRlbmNpZXMuXG4gICAgICovXG4gICAgV2F0Y2hlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBwdXNoVGFyZ2V0KHRoaXMpO1xuICAgICAgICB2Y
13835XIgdmFsdWU7XG4gICAgICAgIHZhciB2bSA9IHRoaXMudm07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0dGVyLmNhbGwodm0sIHZtKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcImdldHRlciBmb3Igd2F0Y2hlciBcXFwiXCIuY29uY2F0KHRoaXMuZXhwcmVzc2lvbiwgXCJcXFwiXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAvLyBcInRvdWNoXCIgZXZlcnkgcHJvcGVydHkgc28gdGhleSBhcmUgYWxsIHRyYWNrZWQgYXNcbiAgICAgICAgICAgIC8vIGRlcGVuZGVuY2llcyBmb3IgZGVlcCB3YXRjaGluZ1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVlcCkge1xuICAgICAgICAgICAgICAgIHRyYXZlcnNlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBvcFRhcmdldCgpO1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwRGVwcygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEFkZCBhIGRlcGVuZGVuY3kgdG8gdGhpcyBkaXJlY3RpdmUuXG4gICAgICovXG4gICAgV2F0Y2hlci5wcm90b3R5cGUuYWRkRGVwID0gZnVuY3Rpb24gKGRlcCkge1xuICAgICAgICB2Y
13835XIgaWQgPSBkZXAuaWQ7XG4gICAgICAgIGlmICghdGhpcy5uZXdEZXBJZHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgdGhpcy5uZXdEZXBJZHMuYWRkKGlkKTtcbiAgICAgICAgICAgIHRoaXMubmV3RGVwcy5wdXNoKGRlcCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGVwSWRzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgICBkZXAuYWRkU3ViKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDbGVhbiB1cCBmb3IgZGVwZW5kZW5jeSBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIFdhdGNoZXIucHJvdG90eXBlLmNsZWFudXBEZXBzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIHZhciBkZXAgPSB0aGlzLmRlcHNbaV07XG4gICAgICAgICAgICBpZiAoIXRoaXMubmV3RGVwSWRzLmhhcyhkZXAuaWQpKSB7XG4gICAgICAgICAgICAgICAgZGVwLnJlbW92ZVN1Yih0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgdG1wID0gdGhpcy5kZXBJZHM7XG4gICAgICAgIHRoaXMuZGVwSWRzID0gdGhpcy5uZXdEZXBJZHM7XG4gICAgICAgIHRoaXMubmV3RGVwSWRzID0gdG1wO1xuICAgICAgICB0aGlzLm5ld0RlcElkcy5jbGVhcigpO1xuICAgICAgICB0bXAgPSB0aGlzLmRlcHM7XG4gICAgICAgIHRoaXMuZGVwcyA9IHRoaXMubmV3RGVwcztcbiAgICAgICAgdGhpcy5uZXdEZXBzID0gdG1wO1xuICAgICAgICB0aGlzLm5ld0RlcHMubGVuZ3RoID0gMDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFN1YnNjcmliZXIgaW50ZXJmYWNlLlxuICAgICAqIFdpbGwgYmUgY2FsbGVkIHdoZW4gYSBkZXBlbmRlbmN5IGNoYW5nZXMuXG4gICAgICovXG4gICAgV2F0Y2hlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAodGhpcy5sYXp5KSB7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnN5bmMpIHtcbiAgICAgICAgICAgIHRoaXMucnVuKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBxdWV1ZVdhdGNoZXIodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFNjaGVkdWxlciBqb2IgaW50ZXJmYWNlLlxuICAgICAqIFdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBzY2hlZHVsZXIuXG4gICAgICovXG4gICAgV2F0Y2hlci5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0KCk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUgfHxcbiAgICAgICAgICAgICAgICAvLyBEZWVwIHdhdGNoZXJzIGFuZCB3YXRjaGVycyBvbiBPYmplY3QvQXJyYXlzIHNob3VsZCBmaXJlIGV2ZW5cbiAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSB2YWx1ZSBpcyB0aGUgc2FtZSwgYmVjYXVzZSB0aGUgdmFsdWUgbWF5XG4gICAgICAgICAgICAgICAgLy8gaGF2ZSBtdXRhdGVkLlxuICAgICAgICAgICAgICAgIGlzT2JqZWN0KHZhbHVlKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuZGVlcCkge1xuICAgICAgICAgICAgICAgIC8vIHNldCBuZXcgdmFsdWVcbiAgICAgICAgICAgICAgICB2Y
13835XIgb2xkVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51c2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmZvID0gXCJjYWxsYmFjayBmb3Igd2F0Y2hlciBcXFwiXCIuY29uY2F0KHRoaXMuZXhwcmVzc2lvbiwgXCJcXFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyh0aGlzLmNiLCB0aGlzLnZtLCBbdmFsdWUsIG9sZFZhbHVlXSwgdGhpcy52bSwgaW5mbyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNiLmNhbGwodGhpcy52bSwgdmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEV2YWx1YXRlIHRoZSB2YWx1ZSBvZiB0aGUgd2F0Y2hlci5cbiAgICAgKiBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgZm9yIGxhenkgd2F0Y2hlcnMuXG4gICAgICovXG4gICAgV2F0Y2hlci5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmdldCgpO1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBEZXBlbmQgb24gYWxsIGRlcHMgY29sbGVjdGVkIGJ5IHRoaXMgd2F0Y2hlci5cbiAgICAgKi9cbiAgICBXYXRjaGVyLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgdGhpcy5kZXBzW2ldLmRlcGVuZCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgc2VsZiBmcm9tIGFsbCBkZXBlbmRlbmNpZXMnIHN1YnNjcmliZXIgbGlzdC5cbiAgICAgKi9cbiAgICBXYXRjaGVyLnByb3RvdHlwZS50ZWFyZG93biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMudm0gJiYgIXRoaXMudm0uX2lzQmVpbmdEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHJlbW92ZSQyKHRoaXMudm0uX3Njb3BlLmVmZmVjdHMsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVwc1tpXS5yZW1vdmVTdWIodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMub25TdG9wKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblN0b3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFdhdGNoZXI7XG59KCkpO1xuXG52YXIgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uID0ge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogbm9vcCxcbiAgICBzZXQ6IG5vb3Bcbn07XG5mdW5jdGlvbiBwcm94eSh0YXJnZXQsIHNvdXJjZUtleSwga2V5KSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IGZ1bmN0aW9uIHByb3h5R2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tzb3VyY2VLZXldW2tleV07XG4gICAgfTtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gZnVuY3Rpb24gcHJveHlTZXR0ZXIodmFsKSB7XG4gICAgICAgIHRoaXNbc291cmNlS2V5XVtrZXldID0gdmFsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24pO1xufVxuZnVuY3Rpb24gaW5pdFN0YXRlKHZtKSB7XG4gICAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucztcbiAgICBpZiAob3B0cy5wcm9wcylcbiAgICAgICAgaW5pdFByb3BzJDEodm0sIG9wdHMucHJvcHMpO1xuICAgIC8vIENvbXBvc2l0aW9uIEFQSVxuICAgIGluaXRTZXR1cCh2bSk7XG4gICAgaWYgKG9wdHMubWV0aG9kcylcbiAgICAgICAgaW5pdE1ldGhvZHModm0sIG9wdHMubWV0aG9kcyk7XG4gICAgaWYgKG9wdHMuZGF0YSkge1xuICAgICAgICBpbml0RGF0YSh2bSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2Y
13835XIgb2IgPSBvYnNlcnZlKCh2bS5fZGF0YSA9IHt9KSk7XG4gICAgICAgIG9iICYmIG9iLnZtQ291bnQrKztcbiAgICB9XG4gICAgaWYgKG9wdHMuY29tcHV0ZWQpXG4gICAgICAgIGluaXRDb21wdXRlZCQxKHZtLCBvcHRzLmNvbXB1dGVkKTtcbiAgICBpZiAob3B0cy53YXRjaCAmJiBvcHRzLndhdGNoICE9PSBuYXRpdmVXYXRjaCkge1xuICAgICAgICBpbml0V2F0Y2godm0sIG9wdHMud2F0Y2gpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGluaXRQcm9wcyQxKHZtLCBwcm9wc09wdGlvbnMpIHtcbiAgICB2YXIgcHJvcHNEYXRhID0gdm0uJG9wdGlvbnMucHJvcHNEYXRhIHx8IHt9O1xuICAgIHZhciBwcm9wcyA9ICh2bS5fcHJvcHMgPSBzaGFsbG93UmVhY3RpdmUoe30pKTtcbiAgICAvLyBjYWNoZSBwcm9wIGtleXMgc28gdGhhdCBmdXR1cmUgcHJvcHMgdXBkYXRlcyBjYW4gaXRlcmF0ZSB1c2luZyBBcnJheVxuICAgIC8vIGluc3RlYWQgb2YgZHluYW1pYyBvYmplY3Qga2V5IGVudW1lcmF0aW9uLlxuICAgIHZhciBrZXlzID0gKHZtLiRvcHRpb25zLl9wcm9wS2V5cyA9IFtdKTtcbiAgICB2YXIgaXNSb290ID0gIXZtLiRwYXJlbnQ7XG4gICAgLy8gcm9vdCBpbnN0YW5jZSBwcm9wcyBzaG91bGQgYmUgY29udmVydGVkXG4gICAgaWYgKCFpc1Jvb3QpIHtcbiAgICAgICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICB9XG4gICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICB2YXIgdmFsdWUgPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wc09wdGlvbnMsIHByb3BzRGF0YSwgdm0pO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGh5cGhlbmF0ZWRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChpc1Jlc2VydmVkQXR0cmlidXRlKGh5cGhlbmF0ZWRLZXkpIHx8XG4gICAgICAgICAgICAgICAgY29uZmlnLmlzUmVzZXJ2ZWRBdHRyKGh5cGhlbmF0ZWRLZXkpKSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKFwiXFxcIlwiLmNvbmNhdChoeXBoZW5hdGVkS2V5LCBcIlxcXCIgaXMgYSByZXNlcnZlZCBhdHRyaWJ1dGUgYW5kIGNhbm5vdCBiZSB1c2VkIGFzIGNvbXBvbmVudCBwcm9wLlwiKSwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmaW5lUmVhY3RpdmUocHJvcHMsIGtleSwgdmFsdWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzUm9vdCAmJiAhaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4kMihcIkF2b2lkIG11dGF0aW5nIGEgcHJvcCBkaXJlY3RseSBzaW5jZSB0aGUgdmFsdWUgd2lsbCBiZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm92ZXJ3cml0dGVuIHdoZW5ldmVyIHRoZSBwYXJlbnQgY29tcG9uZW50IHJlLXJlbmRlcnMuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiSW5zdGVhZCwgdXNlIGEgZGF0YSBvciBjb21wdXRlZCBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgcHJvcCdzIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsdWUuIFByb3AgYmVpbmcgbXV0YXRlZDogXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIlwiKSwgdm0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVmaW5lUmVhY3RpdmUocHJvcHMsIGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN0YXRpYyBwcm9wcyBhcmUgYWxyZWFkeSBwcm94aWVkIG9uIHRoZSBjb21wb25lbnQncyBwcm90b3R5cGVcbiAgICAgICAgLy8gZHVyaW5nIFZ1ZS5leHRlbmQoKS4gV2Ugb25seSBuZWVkIHRvIHByb3h5IHByb3BzIGRlZmluZWQgYXRcbiAgICAgICAgLy8gaW5zdGFudGlhdGlvbiBoZXJlLlxuICAgICAgICBpZiAoIShrZXkgaW4gdm0pKSB7XG4gICAgICAgICAgICBwcm94eSh2bSwgXCJfcHJvcHNcIiwga2V5KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzT3B0aW9ucykge1xuICAgICAgICBfbG9vcF8xKGtleSk7XG4gICAgfVxuICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbn1cbmZ1bmN0aW9uIGluaXREYXRhKHZtKSB7XG4gICAgdmFyIGRhdGEgPSB2bS4kb3B0aW9ucy5kYXRhO1xuICAgIGRhdGEgPSB2bS5fZGF0YSA9IGlzRnVuY3Rpb24oZGF0YSkgPyBnZXREYXRhKGRhdGEsIHZtKSA6IGRhdGEgfHwge307XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSB7fTtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgd2FybiQyKCdkYXRhIGZ1bmN0aW9ucyBzaG91bGQgcmV0dXJuIGFuIG9iamVjdDpcXG4nICtcbiAgICAgICAgICAgICAgICAnaHR0cHM6Ly92Mi52dWVqcy5vcmcvdjIvZ3VpZGUvY29tcG9uZW50cy5odG1sI2RhdGEtTXVzdC1CZS1hLUZ1bmN0aW9uJywgdm0pO1xuICAgIH1cbiAgICAvLyBwcm94eSBkYXRhIG9uIGluc3RhbmNlXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgICB2YXIgcHJvcHMgPSB2bS4kb3B0aW9ucy5wcm9wcztcbiAgICB2YXIgbWV0aG9kcyA9IHZtLiRvcHRpb25zLm1ldGhvZHM7XG4gICAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgaWYgKG1ldGhvZHMgJiYgaGFzT3duKG1ldGhvZHMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJNZXRob2QgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgYXMgYSBkYXRhIHByb3BlcnR5LlwiKSwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgICAgICAgI
13835HByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJUaGUgZGF0YSBwcm9wZXJ0eSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGlzIGFscmVhZHkgZGVjbGFyZWQgYXMgYSBwcm9wLiBcIikgK1xuICAgICAgICAgICAgICAgICAgICBcIlVzZSBwcm9wIGRlZmF1bHQgdmFsdWUgaW5zdGVhZC5cIiwgdm0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFpc1Jlc2VydmVkKGtleSkpIHtcbiAgICAgICAgICAgIHByb3h5KHZtLCBcIl9kYXRhXCIsIGtleSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gb2JzZXJ2ZSBkYXRhXG4gICAgdmFyIG9iID0gb2JzZXJ2ZShkYXRhKTtcbiAgICBvYiAmJiBvYi52bUNvdW50Kys7XG59XG5mdW5jdGlvbiBnZXREYXRhKGRhdGEsIHZtKSB7XG4gICAgLy8gIzc1NzMgZGlzYWJsZSBkZXAgY29sbGVjdGlvbiB3aGVuIGludm9raW5nIGRhdGEgZ2V0dGVyc1xuICAgIHB1c2hUYXJnZXQoKTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGF0YS5jYWxsKHZtLCB2bSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcImRhdGEoKVwiKTtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgcG9wVGFyZ2V0KCk7XG4gICAgfVxufVxudmFyIGNvbXB1dGVkV2F0Y2hlck9wdGlvbnMgPSB7IGxhenk6IHRydWUgfTtcbmZ1bmN0aW9uIGluaXRDb21wdXRlZCQxKHZtLCBjb21wdXRlZCkge1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHZhciB3YXRjaGVycyA9ICh2bS5fY29tcHV0ZWRXYXRjaGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICAgIC8vIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGp1c3QgZ2V0dGVycyBkdXJpbmcgU1NSXG4gICAgdmFyIGlzU1NSID0gaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHtcbiAgICAgICAgdmFyIHVzZXJEZWYgPSBjb21wdXRlZFtrZXldO1xuICAgICAgICB2Y
13835XIgZ2V0dGVyID0gaXNGdW5jdGlvbih1c2VyRGVmKSA/IHVzZXJEZWYgOiB1c2VyRGVmLmdldDtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZ2V0dGVyID09IG51bGwpIHtcbiAgICAgICAgICAgIHdhcm4kMihcIkdldHRlciBpcyBtaXNzaW5nIGZvciBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiLlwiKSwgdm0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNTU1IpIHtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBpbnRlcm5hbCB3YXRjaGVyIGZvciB0aGUgY29tcHV0ZWQgcHJvcGVydHkuXG4gICAgICAgICAgICB3YXRjaGVyc1trZXldID0gbmV3IFdhdGNoZXIodm0sIGdldHRlciB8fCBub29wLCBub29wLCBjb21wdXRlZFdhdGNoZXJPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb21wb25lbnQtZGVmaW5lZCBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBhbHJlYWR5IGRlZmluZWQgb24gdGhlXG4gICAgICAgIC8vIGNvbXBvbmVudCBwcm90b3R5cGUuIFdlIG9ubHkgbmVlZCB0byBkZWZpbmUgY29tcHV0ZWQgcHJvcGVydGllcyBkZWZpbmVkXG4gICAgICAgIC8vIGF0IGluc3RhbnRpYXRpb24gaGVyZS5cbiAgICAgICAgaWYgKCEoa2V5IGluIHZtKSkge1xuICAgICAgICAgICAgZGVmaW5lQ29tcHV0ZWQodm0sIGtleSwgdXNlckRlZik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgaWYgKGtleSBpbiB2bS4kZGF0YSkge1xuICAgICAgICAgICAgICAgIHdhcm4kMihcIlRoZSBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBkYXRhLlwiKSwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodm0uJG9wdGlvbnMucHJvcHMgJiYga2V5IGluIHZtLiRvcHRpb25zLnByb3BzKSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKFwiVGhlIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIGEgcHJvcC5cIiksIHZtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHZtLiRvcHRpb25zLm1ldGhvZHMgJiYga2V5IGluIHZtLiRvcHRpb25zLm1ldGhvZHMpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBtZXRob2QuXCIpLCB2bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBkZWZpbmVDb21wdXRlZCh0YXJnZXQsIGtleSwgdXNlckRlZikge1xuICAgIHZhciBzaG91bGRDYWNoZSA9ICFpc1NlcnZlclJlbmRlcmluZygpO1xuICAgIGlmIChpc0Z1bmN0aW9uKHVzZXJEZWYpKSB7XG4gICAgICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSBzaG91bGRDYWNoZVxuICAgICAgICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXG4gICAgICAgICAgICA6IGNyZWF0ZUdldHRlckludm9rZXIodXNlckRlZik7XG4gICAgICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBub29wO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IHVzZXJEZWYuZ2V0XG4gICAgICAgICAgICA/IHNob3VsZENhY2hlICYmIHVzZXJEZWYuY2FjaGUgIT09IGZhbHNlXG4gICAgICAgICAgICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXG4gICAgICAgICAgICAgICAgOiBjcmVhdGVHZXR0ZXJJbnZva2VyKHVzZXJEZWYuZ2V0KVxuICAgICAgICAgICAgOiBub29wO1xuICAgICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gdXNlckRlZi5zZXQgfHwgbm9vcDtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9PT0gbm9vcCkge1xuICAgICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2FybiQyKFwiQ29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiB3YXMgYXNzaWduZWQgdG8gYnV0IGl0IGhhcyBubyBzZXR0ZXIuXCIpLCB0aGlzKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24pO1xufVxuZnVuY3Rpb24gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIoa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNvbXB1dGVkR2V0dGVyKCkge1xuICAgICAgICB2Y
13835XIgd2F0Y2hlciA9IHRoaXMuX2NvbXB1dGVkV2F0Y2hlcnMgJiYgdGhpcy5fY29tcHV0ZWRXYXRjaGVyc1trZXldO1xuICAgICAgICBpZiAod2F0Y2hlcikge1xuICAgICAgICAgICAgaWYgKHdhdGNoZXIuZGlydHkpIHtcbiAgICAgICAgICAgICAgICB3YXRjaGVyLmV2YWx1YXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoRGVwLnRhcmdldCkge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIERlcC50YXJnZXQub25UcmFjaykge1xuICAgICAgICAgICAgICAgICAgICBEZXAudGFyZ2V0Lm9uVHJhY2soe1xuICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0OiBEZXAudGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJnZXRcIiAvKiBUcmFja09wVHlwZXMuR0VUICovLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhdGNoZXIuZGVwZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gd2F0Y2hlci52YWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG59XG5mdW5jdGlvbiBjcmVhdGVHZXR0ZXJJbnZva2VyKGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNvbXB1dGVkR2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCB0aGlzKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gaW5pdE1ldGhvZHModm0sIG1ldGhvZHMpIHtcbiAgICB2YXIgcHJvcHMgPSB2bS4kb3B0aW9ucy5wcm9wcztcbiAgICBmb3IgKHZhciBrZXkgaW4gbWV0aG9kcykge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXRob2RzW2tleV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJNZXRob2QgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBoYXMgdHlwZSBcXFwiXCIpLmNvbmNhdCh0eXBlb2YgbWV0aG9kc1trZXldLCBcIlxcXCIgaW4gdGhlIGNvbXBvbmVudCBkZWZpbml0aW9uLiBcIikgK1xuICAgICAgICAgICAgICAgICAgICBcIkRpZCB5b3UgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHk/XCIsIHZtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJNZXRob2QgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgYXMgYSBwcm9wLlwiKSwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleSBpbiB2bSAmJiBpc1Jlc2VydmVkKGtleSkpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJNZXRob2QgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBWdWUgaW5zdGFuY2UgbWV0aG9kLiBcIikgK1xuICAgICAgICAgICAgICAgICAgICBcIkF2b2lkIGRlZmluaW5nIGNvbXBvbmVudCBtZXRob2RzIHRoYXQgc3RhcnQgd2l0aCBfIG9yICQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZtW2tleV0gPSB0eXBlb2YgbWV0aG9kc1trZXldICE9PSAnZnVuY3Rpb24nID8gbm9vcCA6IGJpbmQkMShtZXRob2RzW2tleV0sIHZtKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbml0V2F0Y2godm0sIHdhdGNoKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHdhdGNoKSB7XG4gICAgICAgIHZhciBoYW5kbGVyID0gd2F0Y2hba2V5XTtcbiAgICAgICAgaWYgKGlzQXJyYXkoaGFuZGxlcikpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNyZWF0ZVdhdGNoZXIodm0sIGtleSwgaGFuZGxlcltpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlV2F0Y2hlcih2bSwgZXhwT3JGbiwgaGFuZGxlciwgb3B0aW9ucykge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGhhbmRsZXIpKSB7XG4gICAgICAgIG9wdGlvbnMgPSBoYW5kbGVyO1xuICAgICAgICBoYW5kbGVyID0gaGFuZGxlci5oYW5kbGVyO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGhhbmRsZXIgPSB2bVtoYW5kbGVyXTtcbiAgICB9XG4gICAgcmV0dXJuIHZtLiR3YXRjaChleHBPckZuLCBoYW5kbGVyLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHN0YXRlTWl4aW4oVnVlKSB7XG4gICAgLy8gZmxvdyBzb21laG93IGhhcyBwcm9ibGVtcyB3aXRoIGRpcmVjdGx5IGRlY2xhcmVkIGRlZmluaXRpb24gb2JqZWN0XG4gICAgLy8gd2hlbiB1c2luZyBPYmplY3QuZGVmaW5lUHJvcGVydHksIHNvIHdlIGhhdmUgdG8gcHJvY2VkdXJhbGx5IGJ1aWxkIHVwXG4gICAgLy8gdGhlIG9iamVjdCBoZXJlLlxuICAgIHZhciBkYXRhRGVmID0ge307XG4gICAgZGF0YURlZi5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH07XG4gICAgdmFyIHByb3BzRGVmID0ge307XG4gICAgcHJvcHNEZWYuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcHM7XG4gICAgfTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBkYXRhRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdhcm4kMignQXZvaWQgcmVwbGFjaW5nIGluc3RhbmNlIHJvb3QgJGRhdGEuICcgK1xuICAgICAgICAgICAgICAgICdVc2UgbmVzdGVkIGRhdGEgcHJvcGVydGllcyBpbnN0ZWFkLicsIHRoaXMpO1xuICAgICAgICB9O1xuICAgICAgICBwcm9wc0RlZi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3YXJuJDIoXCIkcHJvcHMgaXMgcmVhZG9ubHkuXCIsIHR
13835oaXMpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRkYXRhJywgZGF0YURlZik7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckcHJvcHMnLCBwcm9wc0RlZik7XG4gICAgVnVlLnByb3RvdHlwZS4kc2V0ID0gc2V0O1xuICAgIFZ1ZS5wcm90b3R5cGUuJGRlbGV0ZSA9IGRlbDtcbiAgICBWdWUucHJvdG90eXBlLiR3YXRjaCA9IGZ1bmN0aW9uIChleHBPckZuLCBjYiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgdm0gPSB0aGlzO1xuICAgICAgICBpZiAoaXNQbGFpbk9iamVjdChjYikpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIG9wdGlvbnMudXNlciA9IHRydWU7XG4gICAgICAgIHZhciB3YXRjaGVyID0gbmV3IFdhdGNoZXIodm0sIGV4cE9yRm4sIGNiLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW1tZWRpYXRlKSB7XG4gICAgICAgICAgICB2YXIgaW5mbyA9IFwiY2FsbGJhY2sgZm9yIGltbWVkaWF0ZSB3YXRjaGVyIFxcXCJcIi5jb25jYXQod2F0Y2hlci5leHByZXNzaW9uLCBcIlxcXCJcIik7XG4gICAgICAgICAgICBwdXNoVGFyZ2V0KCk7XG4gICAgICAgICAgICBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhjYiwgdm0sIFt3YXRjaGVyLnZhbHVlXSwgdm0sIGluZm8pO1xuICAgICAgICAgICAgcG9wVGFyZ2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVud2F0Y2hGbigpIHtcbiAgICAgICAgICAgIHdhdGNoZXIudGVhcmRvd24oKTtcbiAgICAgICAgfTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbml0UHJvdmlkZSh2bSkge1xuICAgIHZhciBwcm92aWRlT3B0aW9uID0gdm0uJG9wdGlvbnMucHJvdmlkZTtcbiAgICBpZiAocHJvdmlkZU9wdGlvbikge1xuICAgICAgICB2Y
13835XIgcHJvdmlkZWQgPSBpc0Z1bmN0aW9uKHByb3ZpZGVPcHRpb24pXG4gICAgICAgICAgICA/IHByb3ZpZGVPcHRpb24uY2FsbCh2bSlcbiAgICAgICAgICAgIDogcHJvdmlkZU9wdGlvbjtcbiAgICAgICAgaWYgKCFpc09iamVjdChwcm92aWRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc291cmNlID0gcmVzb2x2ZVByb3ZpZGVkKHZtKTtcbiAgICAgICAgLy8gSUU5IGRvZXNuJ3Qgc3VwcG9ydCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyBzbyB3ZSBoYXZlIHRvXG4gICAgICAgIC8vIGl0ZXJhdGUgdGhlIGtleXMgb3Vyc2VsdmVzLlxuICAgICAgICB2YXIga2V5cyA9IGhhc1N5bWJvbCA/IFJlZmxlY3Qub3duS2V5cyhwcm92aWRlZCkgOiBPYmplY3Qua2V5cyhwcm92aWRlZCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc291cmNlLCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdmlkZWQsIGtleSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaW5pdEluamVjdGlvbnModm0pIHtcbiAgICB2YXIgcmVzdWx0ID0gcmVzb2x2ZUluamVjdCh2bS4kb3B0aW9ucy5pbmplY3QsIHZtKTtcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRvZ2dsZU9ic2VydmluZyhmYWxzZSk7XG4gICAgICAgIE9iamVjdC5rZXlzKHJlc3VsdCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVSZWFjdGl2ZSh2bSwga2V5LCByZXN1bHRba2V5XSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3YXJuJDIoXCJBdm9pZCBtdXRhdGluZyBhbiBpbmplY3RlZCB2YWx1ZSBkaXJlY3RseSBzaW5jZSB0aGUgY2hhbmdlcyB3aWxsIGJlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHByb3ZpZGVkIGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcImluamVjdGlvbiBiZWluZyBtdXRhdGVkOiBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiXCIpLCB2bSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVSZWFjdGl2ZSh2bSwga2V5LCByZXN1bHRba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZUluamVjdChpbmplY3QsIHZtKSB7XG4gICAgaWYgKGluamVjdCkge1xuICAgICAgICAvLyBpbmplY3QgaXMgOmFueSBiZWNhdXNlIGZsb3cgaXMgbm90IHNtYXJ0IGVub3VnaCB0byBmaWd1cmUgb3V0IGNhY2hlZFxuICAgICAgICB2Y
13835XIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdmFyIGtleXMgPSBoYXNTeW1ib2wgPyBSZWZsZWN0Lm93bktleXMoaW5qZWN0KSA6IE9iamVjdC5rZXlzKGluamVjdCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICAvLyAjNjU3NCBpbiBjYXNlIHRoZSBpbmplY3Qgb2JqZWN0IGlzIG9ic2VydmVkLi4uXG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnX19vYl9fJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciBwcm92aWRlS2V5ID0gaW5qZWN0W2tleV0uZnJvbTtcbiAgICAgICAgICAgIGlmIChwcm92aWRlS2V5IGluIHZtLl9wcm92aWRlZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdm0uX3Byb3ZpZGVkW3Byb3ZpZGVLZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoJ2RlZmF1bHQnIGluIGluamVjdFtrZXldKSB7XG4gICAgICAgICAgICAgICAgdmFyIHByb3ZpZGVEZWZhdWx0ID0gaW5qZWN0W2tleV0uZGVmYXVsdDtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IGlzRnVuY3Rpb24ocHJvdmlkZURlZmF1bHQpXG4gICAgICAgICAgICAgICAgICAgID8gcHJvdmlkZURlZmF1bHQuY2FsbCh2bSlcbiAgICAgICAgICAgICAgICAgICAgOiBwcm92aWRlRGVmYXVsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJJbmplY3Rpb24gXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBub3QgZm91bmRcIiksIHZtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxudmFyIHVpZCA9IDA7XG5mdW5jdGlvbiBpbml0TWl4aW4kMShWdWUpIHtcbiAgICBWdWUucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgICAgLy8gYSB1aWRcbiAgICAgICAgdm0uX3VpZCA9IHVpZCsrO1xuICAgICAgICB2Y
13835XIgc3RhcnRUYWcsIGVuZFRhZztcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgICAgICAgICBzdGFydFRhZyA9IFwidnVlLXBlcmYtc3RhcnQ6XCIuY29uY2F0KHZtLl91aWQpO1xuICAgICAgICAgICAgZW5kVGFnID0gXCJ2dWUtcGVyZi1lbmQ6XCIuY29uY2F0KHZtLl91aWQpO1xuICAgICAgICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYSBmbGFnIHRvIG1hcmsgdGhpcyBhcyBhIFZ1ZSBpbnN0YW5jZSB3aXRob3V0IGhhdmluZyB0byBkbyBpbnN0YW5jZW9mXG4gICAgICAgIC8vIGNoZWNrXG4gICAgICAgIHZtLl9pc1Z1ZSA9IHRydWU7XG4gICAgICAgIC8vIGF2b2lkIGluc3RhbmNlcyBmcm9tIGJlaW5nIG9ic2VydmVkXG4gICAgICAgIHZtLl9fdl9za2lwID0gdHJ1ZTtcbiAgICAgICAgLy8gZWZmZWN0IHNjb3BlXG4gICAgICAgIHZtLl9zY29wZSA9IG5ldyBFZmZlY3RTY29wZSh0cnVlIC8qIGRldGFjaGVkICovKTtcbiAgICAgICAgdm0uX3Njb3BlLl92bSA9IHRydWU7XG4gICAgICAgIC8vIG1lcmdlIG9wdGlvbnNcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5faXNDb21wb25lbnQpIHtcbiAgICAgICAgICAgIC8vIG9wdGltaXplIGludGVybmFsIGNvbXBvbmVudCBpbnN0YW50aWF0aW9uXG4gICAgICAgICAgICAvLyBzaW5jZSBkeW5hbWljIG9wdGlvbnMgbWVyZ2luZyBpcyBwcmV0dHkgc2xvdywgYW5kIG5vbmUgb2YgdGhlXG4gICAgICAgICAgICAvLyBpbnRlcm5hbCBjb21wb25lbnQgb3B0aW9ucyBuZWVkcyBzcGVjaWFsIHRyZWF0bWVudC5cbiAgICAgICAgICAgIGluaXRJbnRlcm5hbENvbXBvbmVudCh2bSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2bS4kb3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhyZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKHZtLmNvbnN0cnVjdG9yKSwgb3B0aW9ucyB8fCB7fSwgdm0pO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBpbml0UHJveHkodm0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdm0uX3JlbmRlclByb3h5ID0gdm07XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXhwb3NlIHJlYWwgc2VsZlxuICAgICAgICB2bS5fc2VsZiA9IHZtO1xuICAgICAgICBpbml0TGlmZWN5Y2xlKHZtKTtcbiAgICAgICAgaW5pdEV2ZW50cyh2bSk7XG4gICAgICAgIGluaXRSZW5kZXIodm0pO1xuICAgICAgICBjYWxsSG9vayQxKHZtLCAnYmVmb3JlQ3JlYXRlJywgdW5kZWZpbmVkLCBmYWxzZSAvKiBzZXRDb250ZXh0ICovKTtcbiAgICAgICAgaW5pdEluamVjdGlvbnModm0pOyAvLyByZXNvbHZlIGluamVjdGlvbnMgYmVmb3JlIGRhdGEvcHJvcHNcbiAgICAgICAgaW5pdFN0YXRlKHZtKTtcbiAgICAgICAgaW5pdFByb3ZpZGUodm0pOyAvLyByZXNvbHZlIHByb3ZpZGUgYWZ0ZXIgZGF0YS9wcm9wc1xuICAgICAgICBjYWxsSG9vayQxKHZtLCAnY3JlYXRlZCcpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgICAgIHZtLl9uYW1lID0gZm9ybWF0Q29tcG9uZW50TmFtZSh2bSwgZmFsc2UpO1xuICAgICAgICAgICAgbWFyayhlbmRUYWcpO1xuICAgICAgICAgICAgbWVhc3VyZShcInZ1ZSBcIi5jb25jYXQodm0uX25hbWUsIFwiIGluaXRcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2bS4kb3B0aW9ucy5lbCkge1xuICAgICAgICAgICAgdm0uJG1vdW50KHZtLiRvcHRpb25zLmVsKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5mdW5jdGlvbiBpbml0SW50ZXJuYWxDb21wb25lbnQodm0sIG9wdGlvbnMpIHtcbiAgICB2YXIgb3B0cyA9ICh2bS4kb3B0aW9ucyA9IE9iamVjdC5jcmVhdGUodm0uY29uc3RydWN0b3Iub3B0aW9ucykpO1xuICAgIC8vIGRvaW5nIHRoaXMgYmVjYXVzZSBpdCdzIGZhc3RlciB0aGFuIGR5bmFtaWMgZW51bWVyYXRpb24uXG4gICAgdmFyIHBhcmVudFZub2RlID0gb3B0aW9ucy5fcGFyZW50Vm5vZGU7XG4gICAgb3B0cy5wYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcbiAgICBvcHRzLl9wYXJlbnRWbm9kZSA9IHBhcmVudFZub2RlO1xuICAgIHZhciB2bm9kZUNvbXBvbmVudE9wdGlvbnMgPSBwYXJlbnRWbm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgIG9wdHMucHJvcHNEYXRhID0gdm5vZGVDb21wb25lbnRPcHRpb25zLnByb3BzRGF0YTtcbiAgICBvcHRzLl9wYXJlbnRMaXN0ZW5lcnMgPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMubGlzdGVuZXJzO1xuICAgIG9wdHMuX3JlbmRlckNoaWxkcmVuID0gdm5vZGVDb21wb25lbnRPcHRpb25zLmNoaWxkcmVuO1xuICAgIG9wdHMuX2NvbXBvbmVudFRhZyA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy50YWc7XG4gICAgaWYgKG9wdGlvbnMucmVuZGVyKSB7XG4gICAgICAgIG9wdHMucmVuZGVyID0gb3B0aW9ucy5yZW5kZXI7XG4gICAgICAgIG9wdHMuc3RhdGljUmVuZGVyRm5zID0gb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnM7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyhDdG9yKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gICAgaWYgKEN0b3Iuc3VwZXIpIHtcbiAgICAgICAgdmFyIHN1cGVyT3B0aW9ucyA9IHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMoQ3Rvci5zdXBlcik7XG4gICAgICAgIHZhciBjYWNoZWRTdXBlck9wdGlvbnMgPSBDdG9yLnN1cGVyT3B0aW9ucztcbiAgICAgICAgaWYgKHN1cGVyT3B0aW9ucyAhPT0gY2FjaGVkU3VwZXJPcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBzdXBlciBvcHRpb24gY2hhbmdlZCxcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gcmVzb2x2ZSBuZXcgb3B0aW9ucy5cbiAgICAgICAgICAgIEN0b3Iuc3VwZXJPcHRpb25zID0gc3VwZXJPcHRpb25zO1xuICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBsYXRlLW1vZGlmaWVkL2F0dGFjaGVkIG9wdGlvbnMgKCM0OTc2KVxuICAgICAgICAgICAgdmFyIG1vZGlmaWVkT3B0aW9ucyA9IHJlc29sdmVNb2RpZmllZE9wdGlvbnMoQ3Rvcik7XG4gICAgICAgICAgICAvLyB1cGRhdGUgYmFzZSBleHRlbmQgb3B0aW9uc1xuICAgICAgICAgICAgaWYgKG1vZGlmaWVkT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGV4dGVuZChDdG9yLmV4dGVuZE9wdGlvbnMsIG1vZGlmaWVkT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zID0gQ3Rvci5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHN1cGVyT3B0aW9ucywgQ3Rvci5leHRlbmRPcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvbXBvbmVudHNbb3B0aW9ucy5uYW1lXSA9IEN0b3I7XG4gICAgICAgICAgICB9XG4gICAgICAgI
13835H1cbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG59XG5mdW5jdGlvbiByZXNvbHZlTW9kaWZpZWRPcHRpb25zKEN0b3IpIHtcbiAgICB2YXIgbW9kaWZpZWQ7XG4gICAgdmFyIGxhdGVzdCA9IEN0b3Iub3B0aW9ucztcbiAgICB2YXIgc2VhbGVkID0gQ3Rvci5zZWFsZWRPcHRpb25zO1xuICAgIGZvciAodmFyIGtleSBpbiBsYXRlc3QpIHtcbiAgICAgICAgaWYgKGxhdGVzdFtrZXldICE9PSBzZWFsZWRba2V5XSkge1xuICAgICAgICAgICAgaWYgKCFtb2RpZmllZClcbiAgICAgICAgICAgICAgICBtb2RpZmllZCA9IHt9O1xuICAgICAgICAgICAgbW9kaWZpZWRba2V5XSA9IGxhdGVzdFtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtb2RpZmllZDtcbn1cblxuZnVuY3Rpb24gRnVuY3Rpb25hbFJlbmRlckNvbnRleHQoZGF0YSwgcHJvcHMsIGNoaWxkcmVuLCBwYXJlbnQsIEN0b3IpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICAgIC8vIGVuc3VyZSB0aGUgY3JlYXRlRWxlbWVudCBmdW5jdGlvbiBpbiBmdW5jdGlvbmFsIGNvbXBvbmVudHNcbiAgICAvLyBnZXRzIGEgdW5pcXVlIGNvbnRleHQgLSB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgY29ycmVjdCBuYW1lZCBzbG90IGNoZWNrXG4gICAgdmFyIGNvbnRleHRWbTtcbiAgICBpZiAoaGFzT3duKHBhcmVudCwgJ191aWQnKSkge1xuICAgICAgICBjb250ZXh0Vm0gPSBPYmplY3QuY3JlYXRlKHBhcmVudCk7XG4gICAgICAgIGNvbnRleHRWbS5fb3JpZ2luYWwgPSBwYXJlbnQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyB0aGUgY29udGV4dCB2bSBwYXNzZWQgaW4gaXMgYSBmdW5jdGlvbmFsIGNvbnRleHQgYXMgd2VsbC5cbiAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGFyZSBhYmxlIHRvIGdldCBhIGhvbGQgdG8gdGhlXG4gICAgICAgIC8vIHJlYWwgY29udGV4dCBpbnN0YW5jZS5cbiAgICAgICAgY29udGV4dFZtID0gcGFyZW50O1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5fb3JpZ2luYWw7XG4gICAgfVxuICAgIHZhciBpc0NvbXBpbGVkID0gaXNUcnVlKG9wdGlvbnMuX2NvbXBpbGVkKTtcbiAgICB2YXIgbmVlZE5vcm1hbGl6YXRpb24gPSAhaXNDb21waWxlZDtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSBkYXRhLm9uIHx8IGVtcHR5T2JqZWN0O1xuICAgIHRoaXMuaW5qZWN0aW9ucyA9IHJlc29sdmVJbmplY3Qob3B0aW9ucy5pbmplY3QsIHBhcmVudCk7XG4gICAgdGhpcy5zbG90cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFfdGhpcy4kc2xvdHMpIHtcbiAgICAgICAgICAgIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKHBhcmVudCwgZGF0YS5zY29wZWRTbG90cywgKF90aGlzLiRzbG90cyA9IHJlc29sdmVTbG90cyhjaGlsZHJlbiwgcGFyZW50KSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcy4kc2xvdHM7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3Njb3BlZFNsb3RzJywge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVTY29wZWRTbG90cyhwYXJlbnQsIGRhdGEuc2NvcGVkU2xvdHMsIHRoaXMuc2xvdHMoKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBzdXBwb3J0IGZvciBjb21waWxlZCBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gICAgaWYgKGlzQ29tcGlsZWQpIHtcbiAgICAgICAgLy8gZXhwb3NpbmcgJG9wdGlvbnMgZm9yIHJlbmRlclN0YXRpYygpXG4gICAgICAgIHRoaXMuJG9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICAvLyBwcmUtcmVzb2x2ZSBzbG90cyBmb3IgcmVuZGVyU2xvdCgpXG4gICAgICAgIHRoaXMuJHNsb3RzID0gdGhpcy5zbG90cygpO1xuICAgICAgICB0aGlzLiRzY29wZWRTbG90cyA9IG5vcm1hbGl6ZVNjb3BlZFNsb3RzKHBhcmVudCwgZGF0YS5zY29wZWRTbG90cywgdGhpcy4kc2xvdHMpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5fc2NvcGVJZCkge1xuICAgICAgICB0aGlzLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgICAgIHZhciB2bm9kZSA9IGNyZWF0ZUVsZW1lbnQkMShjb250ZXh0Vm0sIGEsIGIsIGMsIGQsIG5lZWROb3JtYWxpemF0aW9uKTtcbiAgICAgICAgICAgIGlmICh2bm9kZSAmJiAhaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgICAgICAgICB2bm9kZS5mblNjb3BlSWQgPSBvcHRpb25zLl9zY29wZUlkO1xuICAgICAgICAgICAgICAgIHZub2RlLmZuQ29udGV4dCA9IHBhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2bm9kZTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQkMShjb250ZXh0Vm0sIGEsIGIsIGMsIGQsIG5lZWROb3JtYWxpemF0aW9uKTtcbiAgICAgICAgfTtcbiAgICB9XG59XG5pbnN0YWxsUmVuZGVySGVscGVycyhGdW5jdGlvbmFsUmVuZGVyQ29udGV4dC5wcm90b3R5cGUpO1xuZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudChDdG9yLCBwcm9wc0RhdGEsIGRhdGEsIGNvbnRleHRWbSwgY2hpbGRyZW4pIHtcbiAgICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgICB2YXIgcHJvcHMgPSB7fTtcbiAgICB2YXIgcHJvcE9wdGlvbnMgPSBvcHRpb25zLnByb3BzO1xuICAgIGlmIChpc0RlZihwcm9wT3B0aW9ucykpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHByb3BPcHRpb25zKSB7XG4gICAgICAgICAgICBwcm9wc1trZXldID0gdmFsaWRhdGVQcm9wKGtleSwgcHJvcE9wdGlvbnMsIHByb3BzRGF0YSB8fCBlbXB0eU9iamVjdCk7XG4gICAgICAgI
13835H1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChpc0RlZihkYXRhLmF0dHJzKSlcbiAgICAgICAgICAgIG1lcmdlUHJvcHMocHJvcHMsIGRhdGEuYXR0cnMpO1xuICAgICAgICBpZiAoaXNEZWYoZGF0YS5wcm9wcykpXG4gICAgICAgICAgICBtZXJnZVByb3BzKHByb3BzLCBkYXRhLnByb3BzKTtcbiAgICB9XG4gICAgdmFyIHJlbmRlckNvbnRleHQgPSBuZXcgRnVuY3Rpb25hbFJlbmRlckNvbnRleHQoZGF0YSwgcHJvcHMsIGNoaWxkcmVuLCBjb250ZXh0Vm0sIEN0b3IpO1xuICAgIHZhciB2bm9kZSA9IG9wdGlvbnMucmVuZGVyLmNhbGwobnVsbCwgcmVuZGVyQ29udGV4dC5fYywgcmVuZGVyQ29udGV4dCk7XG4gICAgaWYgKHZub2RlIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQodm5vZGUsIGRhdGEsIHJlbmRlckNvbnRleHQucGFyZW50LCBvcHRpb25zLCByZW5kZXJDb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgdmFyIHZub2RlcyA9IG5vcm1hbGl6ZUNoaWxkcmVuKHZub2RlKSB8fCBbXTtcbiAgICAgICAgdmFyIHJlcyA9IG5ldyBBcnJheSh2bm9kZXMubGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlc1tpXSA9IGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQodm5vZGVzW2ldLCBkYXRhLCByZW5kZXJDb250ZXh0LnBhcmVudCwgb3B0aW9ucywgcmVuZGVyQ29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG5mdW5jdGlvbiBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2RlLCBkYXRhLCBjb250ZXh0Vm0sIG9wdGlvbnMsIHJlbmRlckNvbnRleHQpIHtcbiAgICAvLyAjNzgxNyBjbG9uZSBub2RlIGJlZm9yZSBzZXR0aW5nIGZuQ29udGV4dCwgb3RoZXJ3aXNlIGlmIHRoZSBub2RlIGlzIHJldXNlZFxuICAgIC8vIChlLmcuIGl0IHdhcyBmcm9tIGEgY2FjaGVkIG5vcm1hbCBzbG90KSB0aGUgZm5Db250ZXh0IGNhdXNlcyBuYW1lZCBzbG90c1xuICAgIC8vIHRoYXQgc2hvdWxkIG5vdCBiZSBtYXRjaGVkIHRvIG1hdGNoLlxuICAgIHZhciBjbG9uZSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgIGNsb25lLmZuQ29udGV4dCA9IGNvbnRleHRWbTtcbiAgICBjbG9uZS5mbk9wdGlvbnMgPSBvcHRpb25zO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIChjbG9uZS5kZXZ0b29sc01ldGEgPSBjbG9uZS5kZXZ0b29sc01ldGEgfHwge30pLnJlbmRlckNvbnRleHQgPVxuICAgICAgICAgICAgcmVuZGVyQ29udGV4dDtcbiAgICB9XG4gICAgaWYgKGRhdGEuc2xvdCkge1xuICAgICAgICAoY2xvbmUuZGF0YSB8fCAoY2xvbmUuZGF0YSA9IHt9KSkuc2xvdCA9IGRhdGEuc2xvdDtcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lO1xufVxuZnVuY3Rpb24gbWVyZ2VQcm9wcyh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG4gICAgICAgIHRvW2NhbWVsaXplKGtleSldID0gZnJvbVtrZXldO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZShvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubmFtZSB8fCBvcHRpb25zLl9fbmFtZSB8fCBvcHRpb25zLl9jb21wb25lbnRUYWc7XG59XG4vLyBpbmxpbmUgaG9va3MgdG8gYmUgaW52b2tlZCBvbiBjb21wb25lbnQgVk5vZGVzIGR1cmluZyBwYXRjaFxudmFyIGNvbXBvbmVudFZOb2RlSG9va3MgPSB7XG4gICAgaW5pdDogZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICAgICAgaWYgKHZub2RlLmNvbXBvbmVudEluc3RhbmNlICYmXG4gICAgICAgICAgICAhdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX2lzRGVzdHJveWVkICYmXG4gICAgICAgICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xuICAgICAgICAgICAgLy8ga2VwdC1hbGl2ZSBjb21wb25lbnRzLCB0cmVhdCBhcyBh
13835IHBhdGNoXG4gICAgICAgICAgICB2YXIgbW91bnRlZE5vZGUgPSB2bm9kZTsgLy8gd29yayBhcm91bmQgZmxvd1xuICAgICAgICAgICAgY29tcG9uZW50Vk5vZGVIb29rcy5wcmVwYXRjaChtb3VudGVkTm9kZSwgbW91bnRlZE5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gKHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2VGb3JWbm9kZSh2bm9kZSwgYWN0aXZlSW5zdGFuY2UpKTtcbiAgICAgICAgICAgIGNoaWxkLiRtb3VudChoeWRyYXRpbmcgPyB2bm9kZS5lbG0gOiB1bmRlZmluZWQsIGh5ZHJhdGluZyk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHByZXBhdGNoOiBmdW5jdGlvbiAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICAgICAgdmFyIGNoaWxkID0gKHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gb2xkVm5vZGUuY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgICB1cGRhdGVDaGlsZENvbXBvbmVudChjaGlsZCwgb3B0aW9ucy5wcm9wc0RhdGEsIC8vIHVwZGF0ZWQgcHJvcHNcbiAgICAgICAgb3B0aW9ucy5saXN0ZW5lcnMsIC8vIHVwZGF0ZWQgbGlzdGVuZXJzXG4gICAgICAgIHZub2RlLCAvLyBuZXcgcGFyZW50IHZub2RlXG4gICAgICAgIG9wdGlvbnMuY2hpbGRyZW4gLy8gbmV3IGNoaWxkcmVuXG4gICAgICAgICk7XG4gICAgfSxcbiAgICBpbnNlcnQ6IGZ1bmN0aW9uICh2bm9kZSkge1xuICAgICAgICB2Y
13835XIgY29udGV4dCA9IHZub2RlLmNvbnRleHQsIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICAgIGlmICghY29tcG9uZW50SW5zdGFuY2UuX2lzTW91bnRlZCkge1xuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuX2lzTW91bnRlZCA9IHRydWU7XG4gICAgICAgICAgICBjYWxsSG9vayQxKGNvbXBvbmVudEluc3RhbmNlLCAnbW91bnRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xuICAgICAgICAgICAgaWYgKGNvbnRleHQuX2lzTW91bnRlZCkge1xuICAgICAgICAgICAgICAgIC8vIHZ1ZS1yb3V0ZXIjMTIxMlxuICAgICAgICAgICAgICAgIC8vIER1cmluZyB1cGRhdGVzLCBhIGtlcHQtYWxpdmUgY29tcG9uZW50J3MgY2hpbGQgY29tcG9uZW50cyBtYXlcbiAgICAgICAgICAgICAgICAvLyBjaGFuZ2UsIHNvIGRpcmVjdGx5IHdhbGtpbmcgdGhlIHRyZWUgaGVyZSBtYXkgY2FsbCBhY3RpdmF0ZWQgaG9va3NcbiAgICAgICAgICAgICAgICAvLyBvbiBpbmNvcnJlY3QgY2hpbGRyZW4uIEluc3RlYWQgd2UgcHVzaCB0aGVtIGludG8gYSBxdWV1ZSB3aGljaCB3aWxsXG4gICAgICAgICAgICAgICAgLy8gYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSB3aG9sZSBwYXRjaCBwcm9jZXNzIGVuZGVkLlxuICAgICAgICAgICAgICAgIHF1ZXVlQWN0aXZhdGVkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQoY29tcG9uZW50SW5zdGFuY2UsIHRydWUgLyogZGlyZWN0ICovKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKHZub2RlKSB7XG4gICAgICAgIHZhciBjb21wb25lbnRJbnN0YW5jZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICBpZiAoIWNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgaWYgKCF2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQoY29tcG9uZW50SW5zdGFuY2UsIHRydWUgLyogZGlyZWN0ICovKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG52YXIgaG9va3NUb01lcmdlID0gT2JqZWN0LmtleXMoY29tcG9uZW50Vk5vZGVIb29rcyk7XG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnQoQ3RvciwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4sIHRhZykge1xuICAgIGlmIChpc1VuZGVmKEN0b3IpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGJhc2VDdG9yID0gY29udGV4dC4kb3B0aW9ucy5fYmFzZTtcbiAgICAvLyBwbGFpbiBvcHRpb25zIG9iamVjdDogdHVybiBpdCBpbnRvIGEgY29uc3RydWN0b3JcbiAgICBpZiAoaXNPYmplY3QoQ3RvcikpIHtcbiAgICAgICAgQ3RvciA9IGJhc2VDdG9yLmV4dGVuZChDdG9yKTtcbiAgICB9XG4gICAgLy8gaWYgYXQgdGhpcyBzdGFnZSBpdCdzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIGFuIGFzeW5jIGNvbXBvbmVudCBmYWN0b3J5LFxuICAgIC8vIHJlamVjdC5cbiAgICBpZiAodHlwZW9mIEN0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm4kMihcIkludmFsaWQgQ29tcG9uZW50IGRlZmluaXRpb246IFwiLmNvbmNhdChTdHJpbmcoQ3RvcikpLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGFzeW5jIGNvbXBvbmVudFxuICAgIHZhciBhc3luY0ZhY3Rvcnk7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIGlmIChpc1VuZGVmKEN0b3IuY2lkKSkge1xuICAgICAgICBhc3luY0ZhY3RvcnkgPSBDdG9yO1xuICAgICAgICBDdG9yID0gcmVzb2x2ZUFzeW5jQ29tcG9uZW50KGFzeW5jRmFjdG9yeSwgYmFzZUN0b3IpO1xuICAgICAgICBpZiAoQ3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciBub2RlIGZvciBhc3luYyBjb21wb25lbnQsIHdoaWNoIGlzIHJlbmRlcmVkXG4gICAgICAgICAgICAvLyBhcyBhIGNvbW1lbnQgbm9kZSBidXQgcHJlc2VydmVzIGFsbCB0aGUgcmF3IGluZm9ybWF0aW9uIGZvciB0aGUgbm9kZS5cbiAgICAgICAgICAgIC8vIHRoZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgZm9yIGFzeW5jIHNlcnZlci1yZW5kZXJpbmcgYW5kIGh5ZHJhdGlvbi5cbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyKGFzeW5jRmFjdG9yeSwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4sIHRhZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGF0YSA9IGRhdGEgfHwge307XG4gICAgLy8gcmVzb2x2ZSBjb25zdHJ1Y3RvciBvcHRpb25zIGluIGNhc2UgZ2xvYmFsIG1peGlucyBhcmUgYXBwbGllZCBhZnRlclxuICAgIC8vIGNvbXBvbmVudCBjb25zdHJ1Y3RvciBjcmVhdGlvblxuICAgIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMoQ3Rvcik7XG4gICAgLy8gdHJhbnNmb3JtIGNvbXBvbmVudCB2LW1vZGVsIGRhdGEgaW50byBwcm9wcyAmIGV2ZW50c1xuICAgIGlmIChpc0RlZihkYXRhLm1vZGVsKSkge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHRyYW5zZm9ybU1vZGVsKEN0b3Iub3B0aW9ucywgZGF0YSk7XG4gICAgfVxuICAgIC8vIGV4dHJhY3QgcHJvcHNcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgdmFyIHByb3BzRGF0YSA9IGV4dHJhY3RQcm9wc0Zyb21WTm9kZURhdGEoZGF0YSwgQ3RvciwgdGFnKTtcbiAgICAvLyBmdW5jdGlvbmFsIGNvbXBvbmVudFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBpZiAoaXNUcnVlKEN0b3Iub3B0aW9ucy5mdW5jdGlvbmFsKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudChDdG9yLCBwcm9wc0RhdGEsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKTtcbiAgICB9XG4gICAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMsIHNpbmNlIHRoZXNlIG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXNcbiAgICAvLyBjaGlsZCBjb21wb25lbnQgbGlzdGVuZXJzIGluc3RlYWQgb2YgRE9NIGxpc3RlbmVyc1xuICAgIHZhciBsaXN0ZW5lcnMgPSBkYXRhLm9uO1xuICAgIC8vIHJlcGxhY2Ugd2l0aCBsaXN0ZW5lcnMgd2l0aCAubmF0aXZlIG1vZGlmaWVyXG4gICAgLy8gc28gaXQgZ2V0cyBwcm9jZXNzZWQgZHVyaW5nIHBhcmVudCBjb21wb25lbnQgcGF0Y2guXG4gICAgZGF0YS5vbiA9IGRhdGEubmF0aXZlT247XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIGlmIChpc1RydWUoQ3Rvci5vcHRpb25zLmFic3RyYWN0KSkge1xuICAgICAgICAvLyBhYnN0cmFjdCBjb21wb25lbnRzIGRvIG5vdCBrZWVwIGFueXRoaW5nXG4gICAgICAgIC8vIG90aGVyIHRoYW4gcHJvcHMgJiBsaXN0ZW5lcnMgJiBzbG90XG4gICAgICAgIC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICAgICAgdmFyIHNsb3QgPSBkYXRhLnNsb3Q7XG4gICAgICAgIGRhdGEgPSB7fTtcbiAgICAgICAgaWYgKHNsb3QpIHtcbiAgICAgICAgICAgIGRhdGEuc2xvdCA9IHNsb3Q7XG4gICAgICAgI
13835H1cbiAgICB9XG4gICAgLy8gaW5zdGFsbCBjb21wb25lbnQgbWFuYWdlbWVudCBob29rcyBvbnRvIHRoZSBwbGFjZWhvbGRlciBub2RlXG4gICAgaW5zdGFsbENvbXBvbmVudEhvb2tzKGRhdGEpO1xuICAgIC8vIHJldHVybiBhIHBsYWNlaG9sZGVyIHZub2RlXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShDdG9yLm9wdGlvbnMpIHx8IHRhZztcbiAgICB2YXIgdm5vZGUgPSBuZXcgVk5vZGUoXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIFwidnVlLWNvbXBvbmVudC1cIi5jb25jYXQoQ3Rvci5jaWQpLmNvbmNhdChuYW1lID8gXCItXCIuY29uY2F0KG5hbWUpIDogJycpLCBkYXRhLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjb250ZXh0LCBcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgeyBDdG9yOiBDdG9yLCBwcm9wc0RhdGE6IHByb3BzRGF0YSwgbGlzdGVuZXJzOiBsaXN0ZW5lcnMsIHRhZzogdGFnLCBjaGlsZHJlbjogY2hpbGRyZW4gfSwgYXN5bmNGYWN0b3J5KTtcbiAgICByZXR1cm4gdm5vZGU7XG59XG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlKFxuLy8gd2Uga25vdyBpdCdzIE1vdW50ZWRDb21wb25lbnRWTm9kZSBidXQgZmxvdyBkb2Vzbid0XG52bm9kZSwgXG4vLyBhY3RpdmVJbnN0YW5jZSBpbiBsaWZlY3ljbGUgc3RhdGVcbnBhcmVudCkge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBfaXNDb21wb25lbnQ6IHRydWUsXG4gICAgICAgIF9wYXJlbnRWbm9kZTogdm5vZGUsXG4gICAgICAgIHBhcmVudDogcGFyZW50XG4gICAgfTtcbiAgICAvLyBjaGVjayBpbmxpbmUtdGVtcGxhdGUgcmVuZGVyIGZ1bmN0aW9uc1xuICAgIHZhciBpbmxpbmVUZW1wbGF0ZSA9IHZub2RlLmRhdGEuaW5saW5lVGVtcGxhdGU7XG4gICAgaWYgKGlzRGVmKGlubGluZVRlbXBsYXRlKSkge1xuICAgICAgICBvcHRpb25zLnJlbmRlciA9IGlubGluZVRlbXBsYXRlLnJlbmRlcjtcbiAgICAgICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBpbmxpbmVUZW1wbGF0ZS5zdGF0aWNSZW5kZXJGbnM7XG4gICAgfVxuICAgIHJldHVybiBuZXcgdm5vZGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gaW5zdGFsbENvbXBvbmVudEhvb2tzKGRhdGEpIHtcbiAgICB2YXIgaG9va3MgPSBkYXRhLmhvb2sgfHwgKGRhdGEuaG9vayA9IHt9KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzVG9NZXJnZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2Y
13835XIga2V5ID0gaG9va3NUb01lcmdlW2ldO1xuICAgICAgICB2YXIgZXhpc3RpbmcgPSBob29rc1trZXldO1xuICAgICAgICB2YXIgdG9NZXJnZSA9IGNvbXBvbmVudFZOb2RlSG9va3Nba2V5XTtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBpZiAoZXhpc3RpbmcgIT09IHRvTWVyZ2UgJiYgIShleGlzdGluZyAmJiBleGlzdGluZy5fbWVyZ2VkKSkge1xuICAgICAgICAgICAgaG9va3Nba2V5XSA9IGV4aXN0aW5nID8gbWVyZ2VIb29rKHRvTWVyZ2UsIGV4aXN0aW5nKSA6IHRvTWVyZ2U7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBtZXJnZUhvb2soZjEsIGYyKSB7XG4gICAgdmFyIG1lcmdlZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIC8vIGZsb3cgY29tcGxhaW5zIGFib3V0IGV4dHJhIGFyZ3Mgd2hpY2ggaXMgd2h5IHdlIHVzZSBhbnlcbiAgICAgICAgZjEoYSwgYik7XG4gICAgICAgIGYyKGEsIGIpO1xuICAgIH07XG4gICAgbWVyZ2VkLl9tZXJnZWQgPSB0cnVlO1xuICAgIHJldHVybiBtZXJnZWQ7XG59XG4vLyB0cmFuc2Zvcm0gY29tcG9uZW50IHYtbW9kZWwgaW5mbyAodmFsdWUgYW5kIGNhbGxiYWNrKSBpbnRvXG4vLyBwcm9wIGFuZCBldmVudCBoYW5kbGVyIHJlc3BlY3RpdmVseS5cbmZ1bmN0aW9uIHRyYW5zZm9ybU1vZGVsKG9wdGlvbnMsIGRhdGEpIHtcbiAgICB2YXIgcHJvcCA9IChvcHRpb25zLm1vZGVsICYmIG9wdGlvbnMubW9kZWwucHJvcCkgfHwgJ3ZhbHVlJztcbiAgICB2YXIgZXZlbnQgPSAob3B0aW9ucy5tb2RlbCAmJiBvcHRpb25zLm1vZGVsLmV2ZW50KSB8fCAnaW5wdXQnO1xuICAgIChkYXRhLmF0dHJzIHx8IChkYXRhLmF0dHJzID0ge30pKVtwcm9wXSA9IGRhdGEubW9kZWwudmFsdWU7XG4gICAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgICB2YXIgZXhpc3RpbmcgPSBvbltldmVudF07XG4gICAgdmFyIGNhbGxiYWNrID0gZGF0YS5tb2RlbC5jYWxsYmFjaztcbiAgICBpZiAoaXNEZWYoZXhpc3RpbmcpKSB7XG4gICAgICAgIGlmIChpc0FycmF5KGV4aXN0aW5nKVxuICAgICAgICAgICAgPyBleGlzdGluZy5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTFcbiAgICAgICAgICAgIDogZXhpc3RpbmcgIT09IGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBvbltldmVudF0gPSBbY2FsbGJhY2tdLmNvbmNhdChleGlzdGluZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG9uW2V2ZW50XSA9IGNhbGxiYWNrO1xuICAgIH1cbn1cblxudmFyIHdhcm4kMiA9IG5vb3A7XG52YXIgdGlwID0gbm9vcDtcbnZhciBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlOyAvLyB3b3JrIGFyb3VuZCBmbG93IGNoZWNrXG52YXIgZm9ybWF0Q29tcG9uZW50TmFtZTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIGhhc0NvbnNvbGVfMSA9IHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJztcbiAgICB2YXIgY2xhc3NpZnlSRV8xID0gLyg/Ol58Wy1fXSkoXFx3KS9nO1xuICAgIHZhciBjbGFzc2lmeV8xID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoY2xhc3NpZnlSRV8xLCBmdW5jdGlvbiAoYykgeyByZXR1cm4gYy50b1VwcGVyQ2FzZSgpOyB9KS5yZXBsYWNlKC9bLV9dL2csICcnKTtcbiAgICB9O1xuICAgIHdhcm4kMiA9IGZ1bmN0aW9uIChtc2csIHZtKSB7XG4gICAgICAgIGlmICh2bSA9PT0gdm9pZCAwKSB7IHZtID0gY3VycmVudEluc3RhbmNlOyB9XG4gICAgICAgIHZhciB0cmFjZSA9IHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJztcbiAgICAgICAgaWYgKGNvbmZpZy53YXJuSGFuZGxlcikge1xuICAgICAgICAgICAgY29uZmlnLndhcm5IYW5kbGVyLmNhbGwobnVsbCwgbXNnLCB2bSwgdHJhY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhhc0NvbnNvbGVfMSAmJiAhY29uZmlnLnNpbGVudCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIltWdWUgd2Fybl06IFwiLmNvbmNhdChtc2cpLmNvbmNhdCh0cmFjZSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aXAgPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgICAgICBpZiAoaGFzQ29uc29sZV8xICYmICFjb25maWcuc2lsZW50KSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJbVnVlIHRpcF06IFwiLmNvbmNhdChtc2cpICsgKHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBmb3JtYXRDb21wb25lbnROYW1lID0gZnVuY3Rpb24gKHZtLCBpbmNsdWRlRmlsZSkge1xuICAgICAgICBpZiAodm0uJHJvb3QgPT09IHZtKSB7XG4gICAgICAgICAgICByZXR1cm4gJzxSb290Pic7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9wdGlvbnMgPSBpc0Z1bmN0aW9uKHZtKSAmJiB2bS5jaWQgIT0gbnVsbFxuICAgICAgICAgICAgPyB2bS5vcHRpb25zXG4gICAgICAgICAgICA6IHZtLl9pc1Z1ZVxuICAgICAgICAgICAgICAgID8gdm0uJG9wdGlvbnMgfHwgdm0uY29uc3RydWN0b3Iub3B0aW9uc1xuICAgICAgICAgICAgICAgIDogdm07XG4gICAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShvcHRpb25zKTtcbiAgICAgICAgdmFyIGZpbGUgPSBvcHRpb25zLl9fZmlsZTtcbiAgICAgICAgaWYgKCFuYW1lICYmIGZpbGUpIHtcbiAgICAgICAgICAgIHZhciBtYXRjaCA9IGZpbGUubWF0Y2goLyhbXi9cXFxcXSspXFwudnVlJC8pO1xuICAgICAgICAgICAgbmFtZSA9IG1hdGNoICYmIG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoKG5hbWUgPyBcIjxcIi5jb25jYXQoY2xhc3NpZnlfMShuYW1lKSwgXCI+XCIpIDogXCI8QW5vbnltb3VzPlwiKSArXG4gICAgICAgICAgICAoZmlsZSAmJiBpbmNsdWRlRmlsZSAhPT0gZmFsc2UgPyBcIiBhdCBcIi5jb25jYXQoZmlsZSkgOiAnJykpO1xuICAgIH07XG4gICAgdmFyIHJlcGVhdF8xID0gZnVuY3Rpb24gKHN0ciwgbikge1xuICAgICAgICB2Y
13835XIgcmVzID0gJyc7XG4gICAgICAgIHdoaWxlIChuKSB7XG4gICAgICAgICAgICBpZiAobiAlIDIgPT09IDEpXG4gICAgICAgICAgICAgICAgcmVzICs9IHN0cjtcbiAgICAgICAgICAgIGlmIChuID4gMSlcbiAgICAgICAgICAgICAgICBzdHIgKz0gc3RyO1xuICAgICAgICAgICAgbiA+Pj0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgZ2VuZXJhdGVDb21wb25lbnRUcmFjZSA9IGZ1bmN0aW9uICh2bSkge1xuICAgICAgICBpZiAodm0uX2lzVnVlICYmIHZtLiRwYXJlbnQpIHtcbiAgICAgICAgICAgIHZhciB0cmVlID0gW107XG4gICAgICAgICAgICB2YXIgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID0gMDtcbiAgICAgICAgICAgIHdoaWxlICh2bSkge1xuICAgICAgICAgICAgICAgIGlmICh0cmVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3QgPSB0cmVlW3RyZWUubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0LmNvbnN0cnVjdG9yID09PSB2bS5jb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlW3RyZWUubGVuZ3RoIC0gMV0gPSBbbGFzdCwgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJlZS5wdXNoKHZtKTtcbiAgICAgICAgICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKCdcXG5cXG5mb3VuZCBpblxcblxcbicgK1xuICAgICAgICAgICAgICAgIHRyZWVcbiAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodm0sIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KGkgPT09IDAgPyAnLS0tPiAnIDogcmVwZWF0XzEoJyAnLCA1ICsgaSAqIDIpKS5jb25jYXQoaXNBcnJheSh2bSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJcIi5jb25jYXQoZm9ybWF0Q29tcG9uZW50TmFtZSh2bVswXSksIFwiLi4uIChcIikuY29uY2F0KHZtWzFdLCBcIiByZWN1cnNpdmUgY2FsbHMpXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdENvbXBvbmVudE5hbWUodm0pKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuam9pbignXFxuJykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFwiXFxuXFxuKGZvdW5kIGluIFwiLmNvbmNhdChmb3JtYXRDb21wb25lbnROYW1lKHZtKSwgXCIpXCIpO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuLyoqXG4gKiBPcHRpb24gb3ZlcndyaXRpbmcgc3RyYXRlZ2llcyBhcmUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlXG4gKiBob3cgdG8gbWVyZ2UgYSBwYXJlbnQgb3B0aW9uIHZhbHVlIGFuZCBhIGNoaWxkIG9wdGlvblxuICogdmFsdWUgaW50byB0aGUgZmluYWwgdmFsdWUuXG4gKi9cbnZhciBzdHJhdHMgPSBjb25maWcub3B0aW9uTWVyZ2VTdHJhdGVnaWVzO1xuLyoqXG4gKiBPcHRpb25zIHdpdGggcmVzdHJpY3Rpb25zXG4gKi9cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgc3RyYXRzLmVsID0gc3RyYXRzLnByb3BzRGF0YSA9IGZ1bmN0aW9uIChwYXJlbnQsIGNoaWxkLCB2bSwga2V5KSB7XG4gICAgICAgIGlmICghdm0pIHtcbiAgICAgICAgICAgIHdhcm4kMihcIm9wdGlvbiBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGluc3RhbmNlIFwiKSArXG4gICAgICAgICAgICAgICAgJ2NyZWF0aW9uIHdpdGggdGhlIGBuZXdgIGtleXdvcmQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRTdHJhdChwYXJlbnQsIGNoaWxkKTtcbiAgICB9O1xufVxuLyoqXG4gKiBIZWxwZXIgdGhhdCByZWN1cnNpdmVseSBtZXJnZXMgdHdvIGRhdGEgb2JqZWN0cyB0b2dldGhlci5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhKHRvLCBmcm9tLCByZWN1cnNpdmUpIHtcbiAgICBpZiAocmVjdXJzaXZlID09PSB2b2lkIDApIHsgcmVjdXJzaXZlID0gdHJ1ZTsgfVxuICAgIGlmICghZnJvbSlcbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIHZhciBrZXksIHRvVmFsLCBmcm9tVmFsO1xuICAgIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgICAgID8gUmVmbGVjdC5vd25LZXlzKGZyb20pXG4gICAgICAgIDogT2JqZWN0LmtleXMoZnJvbSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgIC8vIGluIGNhc2UgdGhlIG9iamVjdCBpcyBhbHJlYWR5IG9ic2VydmVkLi4uXG4gICAgICAgIGlmIChrZXkgPT09ICdfX29iX18nKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIHRvVmFsID0gdG9ba2V5XTtcbiAgICAgICAgZnJvbVZhbCA9IGZyb21ba2V5XTtcbiAgICAgICAgaWYgKCFyZWN1cnNpdmUgfHwgIWhhc093bih0bywga2V5KSkge1xuICAgICAgICAgICAgc2V0KHRvLCBrZXksIGZyb21WYWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRvVmFsICE9PSBmcm9tVmFsICYmXG4gICAgICAgICAgICBpc1BsYWluT2JqZWN0KHRvVmFsKSAmJlxuICAgICAgICAgICAgaXNQbGFpbk9iamVjdChmcm9tVmFsKSkge1xuICAgICAgICAgICAgbWVyZ2VEYXRhKHRvVmFsLCBmcm9tVmFsKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG87XG59XG4vKipcbiAqIERhdGFcbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhT3JGbihwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSkge1xuICAgIGlmICghdm0pIHtcbiAgICAgICAgLy8gaW4gYSBWdWUuZXh0ZW5kIG1lcmdlLCBib3RoIHNob3VsZCBiZSBmdW5jdGlvbnNcbiAgICAgICAgaWYgKCFjaGlsZFZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudFZhbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBhcmVudFZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkVmFsO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdoZW4gcGFyZW50VmFsICYgY2hpbGRWYWwgYXJlIGJvdGggcHJlc2VudCxcbiAgICAgICAgLy8gd2UgbmVlZCB0byByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gICAgICAgIC8vIG1lcmdlZCByZXN1bHQgb2YgYm90aCBmdW5jdGlvbnMuLi4gbm8gbmVlZCB0b1xuICAgICAgICAvLyBjaGVjayBpZiBwYXJlbnRWYWwgaXMgYSBmdW5jdGlvbiBoZXJlIGJlY2F1c2VcbiAgICAgICAgLy8gaXQgaGFzIHRvIGJlIGEgZnVuY3Rpb24gdG8gcGFzcyBwcmV2aW91cyBtZXJnZXMuXG4gICAgICAgI
13835HJldHVybiBmdW5jdGlvbiBtZXJnZWREYXRhRm4oKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVyZ2VEYXRhKGlzRnVuY3Rpb24oY2hpbGRWYWwpID8gY2hpbGRWYWwuY2FsbCh0aGlzLCB0aGlzKSA6IGNoaWxkVmFsLCBpc0Z1bmN0aW9uKHBhcmVudFZhbCkgPyBwYXJlbnRWYWwuY2FsbCh0aGlzLCB0aGlzKSA6IHBhcmVudFZhbCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkSW5zdGFuY2VEYXRhRm4oKSB7XG4gICAgICAgICAgICAvLyBpbnN0YW5jZSBtZXJnZVxuICAgICAgICAgICAgdmFyIGluc3RhbmNlRGF0YSA9IGlzRnVuY3Rpb24oY2hpbGRWYWwpXG4gICAgICAgICAgICAgICAgPyBjaGlsZFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgICAgICAgICA6IGNoaWxkVmFsO1xuICAgICAgICAgICAgdmFyIGRlZmF1bHREYXRhID0gaXNGdW5jdGlvbihwYXJlbnRWYWwpXG4gICAgICAgICAgICAgICAgPyBwYXJlbnRWYWwuY2FsbCh2bSwgdm0pXG4gICAgICAgICAgICAgICAgOiBwYXJlbnRWYWw7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VEYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlRGF0YShpbnN0YW5jZURhdGEsIGRlZmF1bHREYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0RGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG5zdHJhdHMuZGF0YSA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSkge1xuICAgIGlmICghdm0pIHtcbiAgICAgICAgaWYgKGNoaWxkVmFsICYmIHR5cGVvZiBjaGlsZFZhbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIHdhcm4kMignVGhlIFwiZGF0YVwiIG9wdGlvbiBzaG91bGQgYmUgYSBmdW5jdGlvbiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ3RoYXQgcmV0dXJucyBhIHBlci1pbnN0YW5jZSB2YWx1ZSBpbiBjb21wb25lbnQgJyArXG4gICAgICAgICAgICAgICAgICAgICdkZWZpbml0aW9ucy4nLCB2bSk7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50VmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXJnZURhdGFPckZuKHBhcmVudFZhbCwgY2hpbGRWYWwpO1xuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VEYXRhT3JGbihwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSk7XG59O1xuLyoqXG4gKiBIb29rcyBhbmQgcHJvcHMgYXJlIG1lcmdlZCBhcyBhcnJheXMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlTGlmZWN5Y2xlSG9vayhwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gICAgdmFyIHJlcyA9IGNoaWxkVmFsXG4gICAgICAgID8gcGFyZW50VmFsXG4gICAgICAgICAgICA/IHBhcmVudFZhbC5jb25jYXQoY2hpbGRWYWwpXG4gICAgICAgICAgICA6IGlzQXJyYXkoY2hpbGRWYWwpXG4gICAgICAgICAgICAgICAgPyBjaGlsZFZhbFxuICAgICAgICAgICAgICAgIDogW2NoaWxkVmFsXVxuICAgICAgICA6IHBhcmVudFZhbDtcbiAgICByZXR1cm4gcmVzID8gZGVkdXBlSG9va3MocmVzKSA6IHJlcztcbn1cbmZ1bmN0aW9uIGRlZHVwZUhvb2tzKGhvb2tzKSB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJlcy5pbmRleE9mKGhvb2tzW2ldKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKGhvb2tzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuTElGRUNZQ0xFX0hPT0tTLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgICBzdHJhdHNbaG9va10gPSBtZXJnZUxpZmVjeWNsZUhvb2s7XG59KTtcbi8qKlxuICogQXNzZXRzXG4gKlxuICogV2hlbiBhIHZtIGlzIHByZXNlbnQgKGluc3RhbmNlIGNyZWF0aW9uKSwgd2UgbmVlZCB0byBkb1xuICogYSB0aHJlZS13YXkgbWVyZ2UgYmV0d2VlbiBjb25zdHJ1Y3RvciBvcHRpb25zLCBpbnN0YW5jZVxuICogb3B0aW9ucyBhbmQgcGFyZW50IG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQXNzZXRzKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtLCBrZXkpIHtcbiAgICB2YXIgcmVzID0gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCk7XG4gICAgaWYgKGNoaWxkVmFsKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgYXNzZXJ0T2JqZWN0VHlwZShrZXksIGNoaWxkVmFsLCB2bSk7XG4gICAgICAgIHJldHVybiBleHRlbmQocmVzLCBjaGlsZFZhbCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cbkFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzdHJhdHNbdHlwZSArICdzJ10gPSBtZXJnZUFzc2V0cztcbn0pO1xuLyoqXG4gKiBXYXRjaGVycy5cbiAqXG4gKiBXYXRjaGVycyBoYXNoZXMgc2hvdWxkIG5vdCBvdmVyd3JpdGUgb25lXG4gKiBhbm90aGVyLCBzbyB3ZSBtZXJnZSB0aGVtIGFzIGFycmF5cy5cbiAqL1xuc3RyYXRzLndhdGNoID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtLCBrZXkpIHtcbiAgICAvLyB3b3JrIGFyb3VuZCBGaXJlZm94J3MgT2JqZWN0LnByb3RvdHlwZS53YXRjaC4uLlxuICAgIC8vQHRzLWV4cGVjdC1lcnJvciB3b3JrIGFyb3VuZFxuICAgIGlmIChwYXJlbnRWYWwgPT09IG5hdGl2ZVdhdGNoKVxuICAgICAgICBwYXJlbnRWYWwgPSB1bmRlZmluZWQ7XG4gICAgLy9AdHMtZXhwZWN0LWVycm9yIHdvcmsgYXJvdW5kXG4gICAgaWYgKGNoaWxkVmFsID09PSBuYXRpdmVXYXRjaClcbiAgICAgICAgY2hpbGRWYWwgPSB1bmRlZmluZWQ7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjaGlsZFZhbClcbiAgICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICAgIH1cbiAgICBpZiAoIXBhcmVudFZhbClcbiAgICAgICAgcmV0dXJuIGNoaWxkVmFsO1xuICAgIHZhciByZXQgPSB7fTtcbiAgICBleHRlbmQocmV0LCBwYXJlbnRWYWwpO1xuICAgIGZvciAodmFyIGtleV8xIGluIGNoaWxkVmFsKSB7XG4gICAgICAgI
13835HZhciBwYXJlbnRfMSA9IHJldFtrZXlfMV07XG4gICAgICAgIHZhciBjaGlsZCA9IGNoaWxkVmFsW2tleV8xXTtcbiAgICAgICAgaWYgKHBhcmVudF8xICYmICFpc0FycmF5KHBhcmVudF8xKSkge1xuICAgICAgICAgICAgcGFyZW50XzEgPSBbcGFyZW50XzFdO1xuICAgICAgICB9XG4gICAgICAgIHJldFtrZXlfMV0gPSBwYXJlbnRfMSA/IHBhcmVudF8xLmNvbmNhdChjaGlsZCkgOiBpc0FycmF5KGNoaWxkKSA/IGNoaWxkIDogW2NoaWxkXTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn07XG4vKipcbiAqIE90aGVyIG9iamVjdCBoYXNoZXMuXG4gKi9cbnN0cmF0cy5wcm9wcyA9XG4gICAgc3RyYXRzLm1ldGhvZHMgPVxuICAgICAgICBzdHJhdHMuaW5qZWN0ID1cbiAgICAgICAgICAgIHN0cmF0cy5jb21wdXRlZCA9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtLCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkVmFsICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghcGFyZW50VmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkVmFsO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJldCwgcGFyZW50VmFsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkVmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJldCwgY2hpbGRWYWwpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgICAgIH07XG5zdHJhdHMucHJvdmlkZSA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gICAgaWYgKCFwYXJlbnRWYWwpXG4gICAgICAgIHJldHVybiBjaGlsZFZhbDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2Y
13835XIgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgbWVyZ2VEYXRhKHJldCwgaXNGdW5jdGlvbihwYXJlbnRWYWwpID8gcGFyZW50VmFsLmNhbGwodGhpcykgOiBwYXJlbnRWYWwpO1xuICAgICAgICBpZiAoY2hpbGRWYWwpIHtcbiAgICAgICAgICAgIG1lcmdlRGF0YShyZXQsIGlzRnVuY3Rpb24oY2hpbGRWYWwpID8gY2hpbGRWYWwuY2FsbCh0aGlzKSA6IGNoaWxkVmFsLCBmYWxzZSAvLyBub24tcmVjdXJzaXZlXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfTtcbn07XG4vKipcbiAqIERlZmF1bHQgc3RyYXRlZ3kuXG4gKi9cbnZhciBkZWZhdWx0U3RyYXQgPSBmdW5jdGlvbiAocGFyZW50VmFsLCBjaGlsZFZhbCkge1xuICAgIHJldHVybiBjaGlsZFZhbCA9PT0gdW5kZWZpbmVkID8gcGFyZW50VmFsIDogY2hpbGRWYWw7XG59O1xuLyoqXG4gKiBWYWxpZGF0ZSBjb21wb25lbnQgbmFtZXNcbiAqL1xuZnVuY3Rpb24gY2hlY2tDb21wb25lbnRzKG9wdGlvbnMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5jb21wb25lbnRzKSB7XG4gICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShrZXkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHZhbGlkYXRlQ29tcG9uZW50TmFtZShuYW1lKSB7XG4gICAgaWYgKCFuZXcgUmVnRXhwKFwiXlthLXpBLVpdW1xcXFwtXFxcXC4wLTlfXCIuY29uY2F0KHVuaWNvZGVSZWdFeHAuc291cmNlLCBcIl0qJFwiKSkudGVzdChuYW1lKSkge1xuICAgICAgICB3YXJuJDIoJ0ludmFsaWQgY29tcG9uZW50IG5hbWU6IFwiJyArXG4gICAgICAgICAgICBuYW1lICtcbiAgICAgICAgICAgICdcIi4gQ29tcG9uZW50IG5hbWVzICcgK1xuICAgICAgICAgICAgJ3Nob3VsZCBjb25mb3JtIHRvIHZhbGlkIGN1c3RvbSBlbGVtZW50IG5hbWUgaW4gaHRtbDUgc3BlY2lmaWNhdGlvbi4nKTtcbiAgICB9XG4gICAgaWYgKGlzQnVpbHRJblRhZyhuYW1lKSB8fCBjb25maWcuaXNSZXNlcnZlZFRhZyhuYW1lKSkge1xuICAgICAgICB3YXJuJDIoJ0RvIG5vdCB1c2UgYnVpbHQtaW4gb3IgcmVzZXJ2ZWQgSFRNTCBlbGVtZW50cyBhcyBjb21wb25lbnQgJyArXG4gICAgICAgICAgICAnaWQ6ICcgK1xuICAgICAgICAgICAgbmFtZSk7XG4gICAgfVxufVxuLyoqXG4gKiBFbnN1cmUgYWxsIHByb3BzIG9wdGlvbiBzeW50YXggYXJlIG5vcm1hbGl6ZWQgaW50byB0aGVcbiAqIE9iamVjdC1iYXNlZCBmb3JtYXQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzKG9wdGlvbnMsIHZtKSB7XG4gICAgdmFyIHByb3BzID0gb3B0aW9ucy5wcm9wcztcbiAgICBpZiAoIXByb3BzKVxuICAgICAgICByZXR1cm47XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIHZhciBpLCB2YWwsIG5hbWU7XG4gICAgaWYgKGlzQXJyYXkocHJvcHMpKSB7XG4gICAgICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIHZhbCA9IHByb3BzW2ldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IGNhbWVsaXplKHZhbCk7XG4gICAgICAgICAgICAgICAgcmVzW25hbWVdID0geyB0eXBlOiBudWxsIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKCdwcm9wcyBtdXN0IGJlIHN0cmluZ3Mgd2hlbiB1c2luZyBhcnJheSBzeW50YXguJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChwcm9wcykpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICAgICAgICB2YWwgPSBwcm9wc1trZXldO1xuICAgICAgICAgICAgbmFtZSA9IGNhbWVsaXplKGtleSk7XG4gICAgICAgICAgICByZXNbbmFtZV0gPSBpc1BsYWluT2JqZWN0KHZhbCkgPyB2YWwgOiB7IHR5cGU6IHZhbCB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybiQyKFwiSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uIFxcXCJwcm9wc1xcXCI6IGV4cGVjdGVkIGFuIEFycmF5IG9yIGFuIE9iamVjdCwgXCIgK1xuICAgICAgICAgICAgXCJidXQgZ290IFwiLmNvbmNhdCh0b1Jhd1R5cGUocHJvcHMpLCBcIi5cIiksIHZtKTtcbiAgICB9XG4gICAgb3B0aW9ucy5wcm9wcyA9IHJlcztcbn1cbi8qKlxuICogTm9ybWFsaXplIGFsbCBpbmplY3Rpb25zIGludG8gT2JqZWN0LWJhc2VkIGZvcm1hdFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVJbmplY3Qob3B0aW9ucywgdm0pIHtcbiAgICB2YXIgaW5qZWN0ID0gb3B0aW9ucy5pbmplY3Q7XG4gICAgaWYgKCFpbmplY3QpXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgbm9ybWFsaXplZCA9IChvcHRpb25zLmluamVjdCA9IHt9KTtcbiAgICBpZiAoaXNBcnJheShpbmplY3QpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5qZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBub3JtYWxpemVkW2luamVjdFtpXV0gPSB7IGZyb206IGluamVjdFtpXSB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoaW5qZWN0KSkge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gaW5qZWN0KSB7XG4gICAgICAgICAgICB2Y
13835XIgdmFsID0gaW5qZWN0W2tleV07XG4gICAgICAgICAgICBub3JtYWxpemVkW2tleV0gPSBpc1BsYWluT2JqZWN0KHZhbClcbiAgICAgICAgICAgICAgICA/IGV4dGVuZCh7IGZyb206IGtleSB9LCB2YWwpXG4gICAgICAgICAgICAgICAgOiB7IGZyb206IHZhbCB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybiQyKFwiSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uIFxcXCJpbmplY3RcXFwiOiBleHBlY3RlZCBhbiBBcnJheSBvciBhbiBPYmplY3QsIFwiICtcbiAgICAgICAgICAgIFwiYnV0IGdvdCBcIi5jb25jYXQodG9SYXdUeXBlKGluamVjdCksIFwiLlwiKSwgdm0pO1xuICAgIH1cbn1cbi8qKlxuICogTm9ybWFsaXplIHJhdyBmdW5jdGlvbiBkaXJlY3RpdmVzIGludG8gb2JqZWN0IGZvcm1hdC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyQxKG9wdGlvbnMpIHtcbiAgICB2YXIgZGlycyA9IG9wdGlvbnMuZGlyZWN0aXZlcztcbiAgICBpZiAoZGlycykge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGlycykge1xuICAgICAgICAgICAgdmFyIGRlZiA9IGRpcnNba2V5XTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGRlZikpIHtcbiAgICAgICAgICAgICAgICBkaXJzW2tleV0gPSB7IGJpbmQ6IGRlZiwgdXBkYXRlOiBkZWYgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGFzc2VydE9iamVjdFR5cGUobmFtZSwgdmFsdWUsIHZtKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICB3YXJuJDIoXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcIlwiLmNvbmNhdChuYW1lLCBcIlxcXCI6IGV4cGVjdGVkIGFuIE9iamVjdCwgXCIpICtcbiAgICAgICAgICAgIFwiYnV0IGdvdCBcIi5jb25jYXQodG9SYXdUeXBlKHZhbHVlKSwgXCIuXCIpLCB2bSk7XG4gICAgfVxufVxuLyoqXG4gKiBNZXJnZSB0d28gb3B0aW9uIG9iamVjdHMgaW50byBhIG5ldyBvbmUuXG4gKiBDb3JlIHV0aWxpdHkgdXNlZCBpbiBib3RoIGluc3RhbnRpYXRpb24gYW5kIGluaGVyaXRhbmNlLlxuICovXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZCwgdm0pIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjaGVja0NvbXBvbmVudHMoY2hpbGQpO1xuICAgIH1cbiAgICBpZiAoaXNGdW5jdGlvbihjaGlsZCkpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBjaGlsZCA9IGNoaWxkLm9wdGlvbnM7XG4gICAgfVxuICAgIG5vcm1hbGl6ZVByb3BzKGNoaWxkLCB2bSk7XG4gICAgbm9ybWFsaXplSW5qZWN0KGNoaWxkLCB2bSk7XG4gICAgbm9ybWFsaXplRGlyZWN0aXZlcyQxKGNoaWxkKTtcbiAgICAvLyBBcHBseSBleHRlbmRzIGFuZCBtaXhpbnMgb24gdGhlIGNoaWxkIG9wdGlvbnMsXG4gICAgLy8gYnV0IG9ubHkgaWYgaXQgaXMgYSByYXcgb3B0aW9ucyBvYmplY3QgdGhhdCBpc24ndFxuICAgIC8vIHRoZSByZXN1bHQgb2YgYW5vdGhlciBtZXJnZU9wdGlvbnMgY2FsbC5cbiAgICAvLyBPbmx5IG1lcmdlZCBvcHRpb25zIGhhcyB0aGUgX2Jhc2UgcHJvcGVydHkuXG4gICAgaWYgKCFjaGlsZC5fYmFzZSkge1xuICAgICAgICBpZiAoY2hpbGQuZXh0ZW5kcykge1xuICAgICAgICAgICAgcGFyZW50ID0gbWVyZ2VPcHRpb25zKHBhcmVudCwgY2hpbGQuZXh0ZW5kcywgdm0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZC5taXhpbnMpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGQubWl4aW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLm1peGluc1tpXSwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBvcHRpb25zID0ge307XG4gICAgdmFyIGtleTtcbiAgICBmb3IgKGtleSBpbiBwYXJlbnQpIHtcbiAgICAgICAgbWVyZ2VGaWVsZChrZXkpO1xuICAgIH1cbiAgICBmb3IgKGtleSBpbiBjaGlsZCkge1xuICAgICAgICBpZiAoIWhhc093bihwYXJlbnQsIGtleSkpIHtcbiAgICAgICAgICAgIG1lcmdlRmllbGQoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBtZXJnZUZpZWxkKGtleSkge1xuICAgICAgICB2Y
13835XIgc3RyYXQgPSBzdHJhdHNba2V5XSB8fCBkZWZhdWx0U3RyYXQ7XG4gICAgICAgIG9wdGlvbnNba2V5XSA9IHN0cmF0KHBhcmVudFtrZXldLCBjaGlsZFtrZXldLCB2bSwga2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG59XG4vKipcbiAqIFJlc29sdmUgYW4gYXNzZXQuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYmVjYXVzZSBjaGlsZCBpbnN0YW5jZXMgbmVlZCBhY2Nlc3NcbiAqIHRvIGFzc2V0cyBkZWZpbmVkIGluIGl0cyBhbmNlc3RvciBjaGFpbi5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFzc2V0KG9wdGlvbnMsIHR5cGUsIGlkLCB3YXJuTWlzc2luZykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGFzc2V0cyA9IG9wdGlvbnNbdHlwZV07XG4gICAgLy8gY2hlY2sgbG9jYWwgcmVnaXN0cmF0aW9uIHZhcmlhdGlvbnMgZmlyc3RcbiAgICBpZiAoaGFzT3duKGFzc2V0cywgaWQpKVxuICAgICAgICByZXR1cm4gYXNzZXRzW2lkXTtcbiAgICB2YXIgY2FtZWxpemVkSWQgPSBjYW1lbGl6ZShpZCk7XG4gICAgaWYgKGhhc093bihhc3NldHMsIGNhbWVsaXplZElkKSlcbiAgICAgICAgcmV0dXJuIGFzc2V0c1tjYW1lbGl6ZWRJZF07XG4gICAgdmFyIFBhc2NhbENhc2VJZCA9IGNhcGl0YWxpemUoY2FtZWxpemVkSWQpO1xuICAgIGlmIChoYXNPd24oYXNzZXRzLCBQYXNjYWxDYXNlSWQpKVxuICAgICAgICByZXR1cm4gYXNzZXRzW1Bhc2NhbENhc2VJZF07XG4gICAgLy8gZmFsbGJhY2sgdG8gcHJvdG90eXBlIGNoYWluXG4gICAgdmFyIHJlcyA9IGFzc2V0c1tpZF0gfHwgYXNzZXRzW2NhbWVsaXplZElkXSB8fCBhc3NldHNbUGFzY2FsQ2FzZUlkXTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuTWlzc2luZyAmJiAhcmVzKSB7XG4gICAgICAgIHdhcm4kMignRmFpbGVkIHRvIHJlc29sdmUgJyArIHR5cGUuc2xpY2UoMCwgLTEpICsgJzogJyArIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wKGtleSwgcHJvcE9wdGlvbnMsIHByb3BzRGF0YSwgdm0pIHtcbiAgICB2YXIgcHJvcCA9IHByb3BPcHRpb25zW2tleV07XG4gICAgdmFyIGFic2VudCA9ICFoYXNPd24ocHJvcHNEYXRhLCBrZXkpO1xuICAgIHZhciB2YWx1ZSA9IHByb3BzRGF0YVtrZXldO1xuICAgIC8vIGJvb2xlYW4gY2FzdGluZ1xuICAgIHZhciBib29sZWFuSW5kZXggPSBnZXRUeXBlSW5kZXgoQm9vbGVhbiwgcHJvcC50eXBlKTtcbiAgICBpZiAoYm9vbGVhbkluZGV4ID4gLTEpIHtcbiAgICAgICAgaWYgKGFic2VudCAmJiAhaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcbiAgICAgICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSBoeXBoZW5hdGUoa2V5KSkge1xuICAgICAgICAgICAgLy8gb25seSBjYXN0IGVtcHR5IHN0cmluZyAvIHNhbWUgbmFtZSB0byBib29sZWFuIGlmXG4gICAgICAgICAgICAvLyBib29sZWFuIGhhcyBoaWdoZXIgcHJpb3JpdHlcbiAgICAgICAgICAgIHZhciBzdHJpbmdJbmRleCA9IGdldFR5cGVJbmRleChTdHJpbmcsIHByb3AudHlwZSk7XG4gICAgICAgICAgICBpZiAoc3RyaW5nSW5kZXggPCAwIHx8IGJvb2xlYW5JbmRleCA8IHN0cmluZ0luZGV4KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGNoZWNrIGRlZmF1bHQgdmFsdWVcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9IGdldFByb3BEZWZhdWx0VmFsdWUodm0sIHByb3AsIGtleSk7XG4gICAgICAgIC8vIHNpbmNlIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGEgZnJlc2ggY29weSxcbiAgICAgICAgLy8gbWFrZSBzdXJlIHRvIG9ic2VydmUgaXQuXG4gICAgICAgIHZhciBwcmV2U2hvdWxkT2JzZXJ2ZSA9IHNob3VsZE9ic2VydmU7XG4gICAgICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgICAgICAgb2JzZXJ2ZSh2YWx1ZSk7XG4gICAgICAgIHRvZ2dsZU9ic2VydmluZyhwcmV2U2hvdWxkT2JzZXJ2ZSk7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGFzc2VydFByb3AocHJvcCwga2V5LCB2YWx1ZSwgdm0sIGFic2VudCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgcHJvcC5cbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcERlZmF1bHRWYWx1ZSh2bSwgcHJvcCwga2V5KSB7XG4gICAgLy8gbm8gZGVmYXVsdCwgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmICghaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIGRlZiA9IHByb3AuZGVmYXVsdDtcbiAgICAvLyB3YXJuIGFnYWluc3Qgbm9uLWZhY3RvcnkgZGVmYXVsdHMgZm9yIE9iamVjdCAmIEFycmF5XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNPYmplY3QoZGVmKSkge1xuICAgICAgICB3YXJuJDIoJ0ludmFsaWQgZGVmYXVsdCB2YWx1ZSBmb3IgcHJvcCBcIicgK1xuICAgICAgICAgICAga2V5ICtcbiAgICAgICAgICAgICdcIjogJyArXG4gICAgICAgICAgICAnUHJvcHMgd2l0aCB0eXBlIE9iamVjdC9BcnJheSBtdXN0IHVzZSBhIGZhY3RvcnkgZnVuY3Rpb24gJyArXG4gICAgICAgICAgICAndG8gcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlLicsIHZtKTtcbiAgICB9XG4gICAgLy8gdGhlIHJhdyBwcm9wIHZhbHVlIHdhcyBhbHNvIHVuZGVmaW5lZCBmcm9tIHByZXZpb3VzIHJlbmRlcixcbiAgICAvLyByZXR1cm4gcHJldmlvdXMgZGVmYXVsdCB2YWx1ZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB3YXRjaGVyIHRyaWdnZXJcbiAgICBpZiAodm0gJiZcbiAgICAgICAgdm0uJG9wdGlvbnMucHJvcHNEYXRhICYmXG4gICAgICAgI
13835HZtLiRvcHRpb25zLnByb3BzRGF0YVtrZXldID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdm0uX3Byb3BzW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdm0uX3Byb3BzW2tleV07XG4gICAgfVxuICAgIC8vIGNhbGwgZmFjdG9yeSBmdW5jdGlvbiBmb3Igbm9uLUZ1bmN0aW9uIHR5cGVzXG4gICAgLy8gYSB2YWx1ZSBpcyBGdW5jdGlvbiBpZiBpdHMgcHJvdG90eXBlIGlzIGZ1bmN0aW9uIGV2ZW4gYWNyb3NzIGRpZmZlcmVudCBleGVjdXRpb24gY29udGV4dFxuICAgIHJldHVybiBpc0Z1bmN0aW9uKGRlZikgJiYgZ2V0VHlwZShwcm9wLnR5cGUpICE9PSAnRnVuY3Rpb24nXG4gICAgICAgID8gZGVmLmNhbGwodm0pXG4gICAgICAgIDogZGVmO1xufVxuLyoqXG4gKiBBc3NlcnQgd2hldGhlciBhIHByb3AgaXMgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFByb3AocHJvcCwgbmFtZSwgdmFsdWUsIHZtLCBhYnNlbnQpIHtcbiAgICBpZiAocHJvcC5yZXF1aXJlZCAmJiBhYnNlbnQpIHtcbiAgICAgICAgd2FybiQyKCdNaXNzaW5nIHJlcXVpcmVkIHByb3A6IFwiJyArIG5hbWUgKyAnXCInLCB2bSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09IG51bGwgJiYgIXByb3AucmVxdWlyZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdHlwZSA9IHByb3AudHlwZTtcbiAgICB2YXIgdmFsaWQgPSAhdHlwZSB8fCB0eXBlID09PSB0cnVlO1xuICAgIHZhciBleHBlY3RlZFR5cGVzID0gW107XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgICAgaWYgKCFpc0FycmF5KHR5cGUpKSB7XG4gICAgICAgICAgICB0eXBlID0gW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZS5sZW5ndGggJiYgIXZhbGlkOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBhc3NlcnRlZFR5cGUgPSBhc3NlcnRUeXBlKHZhbHVlLCB0eXBlW2ldLCB2bSk7XG4gICAgICAgICAgICBleHBlY3RlZFR5cGVzLnB1c2goYXNzZXJ0ZWRUeXBlLmV4cGVjdGVkVHlwZSB8fCAnJyk7XG4gICAgICAgICAgICB2YWxpZCA9IGFzc2VydGVkVHlwZS52YWxpZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgaGF2ZUV4cGVjdGVkVHlwZXMgPSBleHBlY3RlZFR5cGVzLnNvbWUoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQ7IH0pO1xuICAgIGlmICghdmFsaWQgJiYgaGF2ZUV4cGVjdGVkVHlwZXMpIHtcbiAgICAgICAgd2FybiQyKGdldEludmFsaWRUeXBlTWVzc2FnZShuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcyksIHZtKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdmFsaWRhdG9yID0gcHJvcC52YWxpZGF0b3I7XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgICBpZiAoIXZhbGlkYXRvcih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHdhcm4kMignSW52YWxpZCBwcm9wOiBjdXN0b20gdmFsaWRhdG9yIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcIicgKyBuYW1lICsgJ1wiLicsIHZtKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbnZhciBzaW1wbGVDaGVja1JFID0gL14oU3RyaW5nfE51bWJlcnxCb29sZWFufEZ1bmN0aW9ufFN5bWJvbHxCaWdJbnQpJC87XG5mdW5jdGlvbiBhc3NlcnRUeXBlKHZhbHVlLCB0eXBlLCB2bSkge1xuICAgIHZhciB2YWxpZDtcbiAgICB2YXIgZXhwZWN0ZWRUeXBlID0gZ2V0VHlwZSh0eXBlKTtcbiAgICBpZiAoc2ltcGxlQ2hlY2tSRS50ZXN0KGV4cGVjdGVkVHlwZSkpIHtcbiAgICAgICAgdmFyIHQgPSB0eXBlb2YgdmFsdWU7XG4gICAgICAgIHZhbGlkID0gdCA9PT0gZXhwZWN0ZWRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIC8vIGZvciBwcmltaXRpdmUgd3JhcHBlciBvYmplY3RzXG4gICAgICAgIGlmICghdmFsaWQgJiYgdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHZhbGlkID0gdmFsdWUgaW5zdGFuY2VvZiB0eXBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ09iamVjdCcpIHtcbiAgICAgICAgdmFsaWQgPSBpc1BsYWluT2JqZWN0KHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnQXJyYXknKSB7XG4gICAgICAgIHZhbGlkID0gaXNBcnJheSh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHdhcm4kMignSW52YWxpZCBwcm9wIHR5cGU6IFwiJyArIFN0cmluZyh0eXBlKSArICdcIiBpcyBub3QgYSBjb25zdHJ1Y3RvcicsIHZtKTtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IHZhbGlkLFxuICAgICAgICBleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZVxuICAgIH07XG59XG52YXIgZnVuY3Rpb25UeXBlQ2hlY2tSRSA9IC9eXFxzKmZ1bmN0aW9uIChcXHcrKS87XG4vKipcbiAqIFVzZSBmdW5jdGlvbiBzdHJpbmcgbmFtZSB0byBjaGVjayBidWlsdC1pbiB0eXBlcyxcbiAqIGJlY2F1c2UgYSBzaW1wbGUgZXF1YWxpdHkgY2hlY2sgd2lsbCBmYWlsIHdoZW4gcnVubmluZ1xuICogYWNyb3NzIGRpZmZlcmVudCB2bXMgLyBpZnJhbWVzLlxuICovXG5mdW5jdGlvbiBnZXRUeXBlKGZuKSB7XG4gICAgdmFyIG1hdGNoID0gZm4gJiYgZm4udG9TdHJpbmcoKS5tYXRjaChmdW5jdGlvblR5cGVDaGVja1JFKTtcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6ICcnO1xufVxuZnVuY3Rpb24gaXNTYW1lVHlwZShhLCBiKSB7XG4gICAgcmV0dXJuIGdldFR5cGUoYSkgPT09IGdldFR5cGUoYik7XG59XG5mdW5jdGlvbiBnZXRUeXBlSW5kZXgodHlwZSwgZXhwZWN0ZWRUeXBlcykge1xuICAgIGlmICghaXNBcnJheShleHBlY3RlZFR5cGVzKSkge1xuICAgICAgICByZXR1cm4gaXNTYW1lVHlwZShleHBlY3RlZFR5cGVzLCB0eXBlKSA/IDAgOiAtMTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV4cGVjdGVkVHlwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGlzU2FtZVR5cGUoZXhwZWN0ZWRUeXBlc1tpXSwgdHlwZSkpIHtcbiAgICAgICAgICAgI
13835HJldHVybiBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbn1cbmZ1bmN0aW9uIGdldEludmFsaWRUeXBlTWVzc2FnZShuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcykge1xuICAgIHZhciBtZXNzYWdlID0gXCJJbnZhbGlkIHByb3A6IHR5cGUgY2hlY2sgZmFpbGVkIGZvciBwcm9wIFxcXCJcIi5jb25jYXQobmFtZSwgXCJcXFwiLlwiKSArXG4gICAgICAgIFwiIEV4cGVjdGVkIFwiLmNvbmNhdChleHBlY3RlZFR5cGVzLm1hcChjYXBpdGFsaXplKS5qb2luKCcsICcpKTtcbiAgICB2YXIgZXhwZWN0ZWRUeXBlID0gZXhwZWN0ZWRUeXBlc1swXTtcbiAgICB2YXIgcmVjZWl2ZWRUeXBlID0gdG9SYXdUeXBlKHZhbHVlKTtcbiAgICAvLyBjaGVjayBpZiB3ZSBuZWVkIHRvIHNwZWNpZnkgZXhwZWN0ZWQgdmFsdWVcbiAgICBpZiAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgaXNFeHBsaWNhYmxlKGV4cGVjdGVkVHlwZSkgJiZcbiAgICAgICAgaXNFeHBsaWNhYmxlKHR5cGVvZiB2YWx1ZSkgJiZcbiAgICAgICAgIWlzQm9vbGVhbihleHBlY3RlZFR5cGUsIHJlY2VpdmVkVHlwZSkpIHtcbiAgICAgICAgbWVzc2FnZSArPSBcIiB3aXRoIHZhbHVlIFwiLmNvbmNhdChzdHlsZVZhbHVlKHZhbHVlLCBleHBlY3RlZFR5cGUpKTtcbiAgICB9XG4gICAgbWVzc2FnZSArPSBcIiwgZ290IFwiLmNvbmNhdChyZWNlaXZlZFR5cGUsIFwiIFwiKTtcbiAgICAvLyBjaGVjayBpZiB3ZSBuZWVkIHRvIHNwZWNpZnkgcmVjZWl2ZWQgdmFsdWVcbiAgICBpZiAoaXNFeHBsaWNhYmxlKHJlY2VpdmVkVHlwZSkpIHtcbiAgICAgICAgbWVzc2FnZSArPSBcIndpdGggdmFsdWUgXCIuY29uY2F0KHN0eWxlVmFsdWUodmFsdWUsIHJlY2VpdmVkVHlwZSksIFwiLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG59XG5mdW5jdGlvbiBzdHlsZVZhbHVlKHZhbHVlLCB0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdTdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQodmFsdWUsIFwiXFxcIlwiKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ051bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KE51bWJlcih2YWx1ZSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHZhbHVlKTtcbiAgICB9XG59XG52YXIgRVhQTElDQUJMRV9UWVBFUyA9IFsnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJ107XG5mdW5jdGlvbiBpc0V4cGxpY2FibGUodmFsdWUpIHtcbiAgICByZXR1cm4gRVhQTElDQUJMRV9UWVBFUy5zb21lKGZ1bmN0aW9uIChlbGVtKSB7IHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBlbGVtOyB9KTtcbn1cbmZ1bmN0aW9uIGlzQm9vbGVhbigpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3Muc29tZShmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gZWxlbS50b0xvd2VyQ2FzZSgpID09PSAnYm9vbGVhbic7IH0pO1xufVxuXG5mdW5jdGlvbiBWdWUob3B0aW9ucykge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICEodGhpcyBpbnN0YW5jZW9mIFZ1ZSkpIHtcbiAgICAgICAgd2FybiQyKCdWdWUgaXMgYSBjb25zdHJ1Y3RvciBhbmQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBgbmV3YCBrZXl3b3JkJyk7XG4gICAgfVxuICAgIHRoaXMuX2luaXQob3B0aW9ucyk7XG59XG4vL0B0cy1leHBlY3QtZXJyb3IgVnVlIGhhcyBmdW5jdGlvbiB0eXBlXG5pbml0TWl4aW4kMShWdWUpO1xuLy9AdHMtZXhwZWN0LWVycm9yIFZ1ZSBoYXMgZnVuY3Rpb24gdHlwZVxuc3RhdGVNaXhpbihWdWUpO1xuLy9AdHMtZXhwZWN0LWVycm9yIFZ1ZSBoYXMgZnVuY3Rpb24gdHlwZVxuZXZlbnRzTWl4aW4oVnVlKTtcbi8vQHRzLWV4cGVjdC1lcnJvciBWdWUgaGFzIGZ1bmN0aW9uIHR5cGVcbmxpZmVjeWNsZU1peGluKFZ1ZSk7XG4vL0B0cy1leHBlY3QtZXJyb3IgVnVlIGhhcyBmdW5jdGlvbiB0eXBlXG5yZW5kZXJNaXhpbihWdWUpO1xuXG5mdW5jdGlvbiBpbml0VXNlKFZ1ZSkge1xuICAgIFZ1ZS51c2UgPSBmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgICAgIHZhciBpbnN0YWxsZWRQbHVnaW5zID0gdGhpcy5faW5zdGFsbGVkUGx1Z2lucyB8fCAodGhpcy5faW5zdGFsbGVkUGx1Z2lucyA9IFtdKTtcbiAgICAgICAgaWYgKGluc3RhbGxlZFBsdWdpbnMuaW5kZXhPZihwbHVnaW4pID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xuICAgICAgICB2Y
13835XIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgYXJncy51bnNoaWZ0KHRoaXMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihwbHVnaW4uaW5zdGFsbCkpIHtcbiAgICAgICAgICAgIHBsdWdpbi5pbnN0YWxsLmFwcGx5KHBsdWdpbiwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNGdW5jdGlvbihwbHVnaW4pKSB7XG4gICAgICAgICAgICBwbHVnaW4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKHBsdWdpbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGluaXRNaXhpbihWdWUpIHtcbiAgICBWdWUubWl4aW4gPSBmdW5jdGlvbiAobWl4aW4pIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHRoaXMub3B0aW9ucywgbWl4aW4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbml0RXh0ZW5kKFZ1ZSkge1xuICAgIC8qKlxuICAgICAqIEVhY2ggaW5zdGFuY2UgY29uc3RydWN0b3IsIGluY2x1ZGluZyBWdWUsIGhhcyBhIHVuaXF1ZVxuICAgICAqIGNpZC4gVGhpcyBlbmFibGVzIHVzIHRvIGNyZWF0ZSB3cmFwcGVkIFwiY2hpbGRcbiAgICAgKiBjb25zdHJ1Y3RvcnNcIiBmb3IgcHJvdG90eXBhbCBpbmhlcml0YW5jZSBhbmQgY2FjaGUgdGhlbS5cbiAgICAgKi9cbiAgICBWdWUuY2lkID0gMDtcbiAgICB2YXIgY2lkID0gMTtcbiAgICAvKipcbiAgICAgKiBDbGFzcyBpbmhlcml0YW5jZVxuICAgICAqL1xuICAgIFZ1ZS5leHRlbmQgPSBmdW5jdGlvbiAoZXh0ZW5kT3B0aW9ucykge1xuICAgICAgICBleHRlbmRPcHRpb25zID0gZXh0ZW5kT3B0aW9ucyB8fCB7fTtcbiAgICAgICAgdmFyIFN1cGVyID0gdGhpcztcbiAgICAgICAgdmFyIFN1cGVySWQgPSBTdXBlci5jaWQ7XG4gICAgICAgIHZhciBjYWNoZWRDdG9ycyA9IGV4dGVuZE9wdGlvbnMuX0N0b3IgfHwgKGV4dGVuZE9wdGlvbnMuX0N0b3IgPSB7fSk7XG4gICAgICAgIGlmIChjYWNoZWRDdG9yc1tTdXBlcklkXSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEN0b3JzW1N1cGVySWRdO1xuICAgICAgICB9XG4gICAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShleHRlbmRPcHRpb25zKSB8fCBnZXRDb21wb25lbnROYW1lKFN1cGVyLm9wdGlvbnMpO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBuYW1lKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUNvbXBvbmVudE5hbWUobmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIFN1YiA9IGZ1bmN0aW9uIFZ1ZUNvbXBvbmVudChvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0KG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgICAgICBTdWIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTdXBlci5wcm90b3R5cGUpO1xuICAgICAgICBTdWIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ViO1xuICAgICAgICBTdWIuY2lkID0gY2lkKys7XG4gICAgICAgIFN1Yi5vcHRpb25zID0gbWVyZ2VPcHRpb25zKFN1cGVyLm9wdGlvbnMsIGV4dGVuZE9wdGlvbnMpO1xuICAgICAgICBTdWJbJ3N1cGVyJ10gPSBTdXBlcjtcbiAgICAgICAgLy8gRm9yIHByb3BzIGFuZCBjb21wdXRlZCBwcm9wZXJ0aWVzLCB3ZSBkZWZpbmUgdGhlIHByb3h5IGdldHRlcnMgb25cbiAgICAgICAgLy8gdGhlIFZ1ZSBpbnN0YW5jZXMgYXQgZXh0ZW5zaW9uIHRpbWUsIG9uIHRoZSBleHRlbmRlZCBwcm90b3R5cGUuIFRoaXNcbiAgICAgICAgLy8gYXZvaWRzIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxscyBmb3IgZWFjaCBpbnN0YW5jZSBjcmVhdGVkLlxuICAgICAgICBpZiAoU3ViLm9wdGlvbnMucHJvcHMpIHtcbiAgICAgICAgICAgIGluaXRQcm9wcyhTdWIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChTdWIub3B0aW9ucy5jb21wdXRlZCkge1xuICAgICAgICAgICAgaW5pdENvbXB1dGVkKFN1Yik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWxsb3cgZnVydGhlciBleHRlbnNpb24vbWl4aW4vcGx1Z2luIHVzYWdlXG4gICAgICAgIFN1Yi5leHRlbmQgPSBTdXBlci5leHRlbmQ7XG4gICAgICAgIFN1Yi5taXhpbiA9IFN1cGVyLm1peGluO1xuICAgICAgICBTdWIudXNlID0gU3VwZXIudXNlO1xuICAgICAgICAvLyBjcmVhdGUgYXNzZXQgcmVnaXN0ZXJzLCBzbyBleHRlbmRlZCBjbGFzc2VzXG4gICAgICAgIC8vIGNhbiBoYXZlIHRoZWlyIHByaXZhdGUgYXNzZXRzIHRvby5cbiAgICAgICAgQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICAgICAgU3ViW3R5cGVdID0gU3VwZXJbdHlwZV07XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBlbmFibGUgcmVjdXJzaXZlIHNlbGYtbG9va3VwXG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBTdWIub3B0aW9ucy5jb21wb25lbnRzW25hbWVdID0gU3ViO1xuICAgICAgICB9XG4gICAgICAgIC8vIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHN1cGVyIG9wdGlvbnMgYXQgZXh0ZW5zaW9uIHRpbWUuXG4gICAgICAgIC8vIGxhdGVyIGF0IGluc3RhbnRpYXRpb24gd2UgY2FuIGNoZWNrIGlmIFN1cGVyJ3Mgb3B0aW9ucyBoYXZlXG4gICAgICAgIC8vIGJlZW4gdXBkYXRlZC5cbiAgICAgICAgU3ViLnN1cGVyT3B0aW9ucyA9IFN1cGVyLm9wdGlvbnM7XG4gICAgICAgIFN1Yi5leHRlbmRPcHRpb25zID0gZXh0ZW5kT3B0aW9ucztcbiAgICAgICAgU3ViLnNlYWxlZE9wdGlvbnMgPSBleHRlbmQoe30sIFN1Yi5vcHRpb25zKTtcbiAgICAgICAgLy8gY2FjaGUgY29uc3RydWN0b3JcbiAgICAgICAgY2FjaGVkQ3RvcnNbU3VwZXJJZF0gPSBTdWI7XG4gICAgICAgIHJldHVybiBTdWI7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGluaXRQcm9wcyhDb21wKSB7XG4gICAgdmFyIHByb3BzID0gQ29tcC5vcHRpb25zLnByb3BzO1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgICBwcm94eShDb21wLnByb3RvdHlwZSwgXCJfcHJvcHNcIiwga2V5KTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbml0Q29tcHV0ZWQoQ29tcCkge1xuICAgIHZhciBjb21wdXRlZCA9IENvbXAub3B0aW9ucy5jb21wdXRlZDtcbiAgICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHtcbiAgICAgICAgZGVmaW5lQ29tcHV0ZWQoQ29tcC5wcm90b3R5cGUsIGtleSwgY29tcHV0ZWRba2V5XSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpbml0QXNzZXRSZWdpc3RlcnMoVnVlKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFzc2V0IHJlZ2lzdHJhdGlvbiBtZXRob2RzLlxuICAgICAqL1xuICAgIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBmdW5jdGlvbiBpcyBub3QgZXhhY3Qgc2FtZSB0eXBlXG4gICAgICAgIFZ1ZVt0eXBlXSA9IGZ1bmN0aW9uIChpZCwgZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgaWYgKCFkZWZpbml0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1t0eXBlICsgJ3MnXVtp
13835ZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlID09PSAnY29tcG9uZW50Jykge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUNvbXBvbmVudE5hbWUoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2NvbXBvbmVudCcgJiYgaXNQbGFpbk9iamVjdChkZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb24ubmFtZSA9IGRlZmluaXRpb24ubmFtZSB8fCBpZDtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbiA9IHRoaXMub3B0aW9ucy5fYmFzZS5leHRlbmQoZGVmaW5pdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnZGlyZWN0aXZlJyAmJiBpc0Z1bmN0aW9uKGRlZmluaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb24gPSB7IGJpbmQ6IGRlZmluaXRpb24sIHVwZGF0ZTogZGVmaW5pdGlvbiB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNbdHlwZSArICdzJ11baWRdID0gZGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gX2dldENvbXBvbmVudE5hbWUob3B0cykge1xuICAgIHJldHVybiBvcHRzICYmIChnZXRDb21wb25lbnROYW1lKG9wdHMuQ3Rvci5vcHRpb25zKSB8fCBvcHRzLnRhZyk7XG59XG5mdW5jdGlvbiBtYXRjaGVzKHBhdHRlcm4sIG5hbWUpIHtcbiAgICBpZiAoaXNBcnJheShwYXR0ZXJuKSkge1xuICAgICAgICByZXR1cm4gcGF0dGVybi5pbmRleE9mKG5hbWUpID4gLTE7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gcGF0dGVybi5zcGxpdCgnLCcpLmluZGV4T2YobmFtZSkgPiAtMTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNSZWdFeHAocGF0dGVybikpIHtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChuYW1lKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBwcnVuZUNhY2hlKGtlZXBBbGl2ZUluc3RhbmNlLCBmaWx0ZXIpIHtcbiAgICB2YXIgY2FjaGUgPSBrZWVwQWxpdmVJbnN0YW5jZS5jYWNoZSwga2V5cyA9IGtlZXBBbGl2ZUluc3RhbmNlLmtleXMsIF92bm9kZSA9IGtlZXBBbGl2ZUluc3RhbmNlLl92bm9kZTtcbiAgICBmb3IgKHZhciBrZXkgaW4gY2FjaGUpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gY2FjaGVba2V5XTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICB2Y
13835XIgbmFtZV8xID0gZW50cnkubmFtZTtcbiAgICAgICAgICAgIGlmIChuYW1lXzEgJiYgIWZpbHRlcihuYW1lXzEpKSB7XG4gICAgICAgICAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXksIGtleXMsIF92bm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleSwga2V5cywgY3VycmVudCkge1xuICAgIHZhciBlbnRyeSA9IGNhY2hlW2tleV07XG4gICAgaWYgKGVudHJ5ICYmICghY3VycmVudCB8fCBlbnRyeS50YWcgIT09IGN1cnJlbnQudGFnKSkge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNhbiBiZSB1bmRlZmluZWRcbiAgICAgICAgZW50cnkuY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKTtcbiAgICB9XG4gICAgY2FjaGVba2V5XSA9IG51bGw7XG4gICAgcmVtb3ZlJDIoa2V5cywga2V5KTtcbn1cbnZhciBwYXR0ZXJuVHlwZXMgPSBbU3RyaW5nLCBSZWdFeHAsIEFycmF5XTtcbi8vIFRPRE8gZGVmaW5lQ29tcG9uZW50XG52YXIgS2VlcEFsaXZlID0ge1xuICAgIG5hbWU6ICdrZWVwLWFsaXZlJyxcbiAgICBhYnN0cmFjdDogdHJ1ZSxcbiAgICBwcm9wczoge1xuICAgICAgICBpbmNsdWRlOiBwYXR0ZXJuVHlwZXMsXG4gICAgICAgIGV4Y2x1ZGU6IHBhdHRlcm5UeXBlcyxcbiAgICAgICAgbWF4OiBbU3RyaW5nLCBOdW1iZXJdXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGNhY2hlVk5vZGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGNhY2hlID0gX2EuY2FjaGUsIGtleXMgPSBfYS5rZXlzLCB2bm9kZVRvQ2FjaGUgPSBfYS52bm9kZVRvQ2FjaGUsIGtleVRvQ2FjaGUgPSBfYS5rZXlUb0NhY2hlO1xuICAgICAgICAgICAgaWYgKHZub2RlVG9DYWNoZSkge1xuICAgICAgICAgICAgICAgIHZhciB0YWcgPSB2bm9kZVRvQ2FjaGUudGFnLCBjb21wb25lbnRJbnN0YW5jZSA9IHZub2RlVG9DYWNoZS5jb21wb25lbnRJbnN0YW5jZSwgY29tcG9uZW50T3B0aW9ucyA9IHZub2RlVG9DYWNoZS5jb21wb25lbnRPcHRpb25zO1xuICAgICAgICAgICAgICAgIGNhY2hlW2tleVRvQ2FjaGVdID0ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBfZ2V0Q29tcG9uZW50TmFtZShjb21wb25lbnRPcHRpb25zKSxcbiAgICAgICAgICAgICAgICAgICAgdGFnOiB0YWcsXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlOiBjb21wb25lbnRJbnN0YW5jZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleVRvQ2FjaGUpO1xuICAgICAgICAgICAgICAgIC8vIHBydW5lIG9sZGVzdCBlbnRyeVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1heCAmJiBrZXlzLmxlbmd0aCA+IHBhcnNlSW50KHRoaXMubWF4KSkge1xuICAgICAgICAgICAgICAgICAgICBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleXNbMF0sIGtleXMsIHRoaXMuX3Zub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy52bm9kZVRvQ2FjaGUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLmtleXMgPSBbXTtcbiAgICB9LFxuICAgIGRlc3Ryb3llZDogZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jYWNoZSkge1xuICAgICAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KHRoaXMuY2FjaGUsIGtleSwgdGhpcy5rZXlzKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2Y
13835XIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmNhY2hlVk5vZGUoKTtcbiAgICAgICAgdGhpcy4kd2F0Y2goJ2luY2x1ZGUnLCBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBwcnVuZUNhY2hlKF90aGlzLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuJHdhdGNoKCdleGNsdWRlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgcHJ1bmVDYWNoZShfdGhpcywgZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuICFtYXRjaGVzKHZhbCwgbmFtZSk7IH0pO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHVwZGF0ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jYWNoZVZOb2RlKCk7XG4gICAgfSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNsb3QgPSB0aGlzLiRzbG90cy5kZWZhdWx0O1xuICAgICAgICB2YXIgdm5vZGUgPSBnZXRGaXJzdENvbXBvbmVudENoaWxkKHNsb3QpO1xuICAgICAgICB2YXIgY29tcG9uZW50T3B0aW9ucyA9IHZub2RlICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgICAgIGlmIChjb21wb25lbnRPcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBjaGVjayBwYXR0ZXJuXG4gICAgICAgICAgICB2YXIgbmFtZV8yID0gX2dldENvbXBvbmVudE5hbWUoY29tcG9uZW50T3B0aW9ucyk7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCBpbmNsdWRlID0gX2EuaW5jbHVkZSwgZXhjbHVkZSA9IF9hLmV4Y2x1ZGU7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAvLyBub3QgaW5jbHVkZWRcbiAgICAgICAgICAgIChpbmNsdWRlICYmICghbmFtZV8yIHx8ICFtYXRjaGVzKGluY2x1ZGUsIG5hbWVfMikpKSB8fFxuICAgICAgICAgICAgICAgIC8vIGV4Y2x1ZGVkXG4gICAgICAgICAgICAgICAgKGV4Y2x1ZGUgJiYgbmFtZV8yICYmIG1hdGNoZXMoZXhjbHVkZSwgbmFtZV8yKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdm5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2Y
13835XIgX2IgPSB0aGlzLCBjYWNoZSA9IF9iLmNhY2hlLCBrZXlzID0gX2Iua2V5cztcbiAgICAgICAgICAgIHZhciBrZXkgPSB2bm9kZS5rZXkgPT0gbnVsbFxuICAgICAgICAgICAgICAgID8gLy8gc2FtZSBjb25zdHJ1Y3RvciBtYXkgZ2V0IHJlZ2lzdGVyZWQgYXMgZGlmZmVyZW50IGxvY2FsIGNvbXBvbmVudHNcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gY2lkIGFsb25lIGlzIG5vdCBlbm91Z2ggKCMzMjY5KVxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLkN0b3IuY2lkICtcbiAgICAgICAgICAgICAgICAgICAgICAgIChjb21wb25lbnRPcHRpb25zLnRhZyA/IFwiOjpcIi5jb25jYXQoY29tcG9uZW50T3B0aW9ucy50YWcpIDogJycpXG4gICAgICAgICAgICAgICAgOiB2bm9kZS5rZXk7XG4gICAgICAgICAgICBpZiAoY2FjaGVba2V5XSkge1xuICAgICAgICAgICAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gY2FjaGVba2V5XS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIGN1cnJlbnQga2V5IGZyZXNoZXN0XG4gICAgICAgICAgICAgICAgcmVtb3ZlJDIoa2V5cywga2V5KTtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlbGF5IHNldHRpbmcgdGhlIGNhY2hlIHVudGlsIHVwZGF0ZVxuICAgICAgICAgICAgICAgIHRoaXMudm5vZGVUb0NhY2hlID0gdm5vZGU7XG4gICAgICAgICAgICAgICAgdGhpcy5rZXlUb0NhY2hlID0ga2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjYW4gdm5vZGUuZGF0YSBjYW4gYmUgdW5kZWZpbmVkXG4gICAgICAgICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZub2RlIHx8IChzbG90ICYmIHNsb3RbMF0pO1xuICAgIH1cbn07XG5cbnZhciBidWlsdEluQ29tcG9uZW50cyA9IHtcbiAgICBLZWVwQWxpdmU6IEtlZXBBbGl2ZVxufTtcblxuZnVuY3Rpb24gaW5pdEdsb2JhbEFQSShWdWUpIHtcbiAgICAvLyBjb25maWdcbiAgICB2YXIgY29uZmlnRGVmID0ge307XG4gICAgY29uZmlnRGVmLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmZpZzsgfTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjb25maWdEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2FybiQyKCdEbyBub3QgcmVwbGFjZSB0aGUgVnVlLmNvbmZpZyBvYmplY3QsIHNldCBpbmRpdmlkdWFsIGZpZWxkcyBpbnN0ZWFkLicpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLCAnY29uZmlnJywgY29uZmlnRGVmKTtcbiAgICAvLyBleHBvc2VkIHV0aWwgbWV0aG9kcy5cbiAgICAvLyBOT1RFOiB0aGVzZSBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgcHVibGljIEFQSSAtIGF2b2lkIHJlbHlpbmcgb25cbiAgICAvLyB0aGVtIHVubGVzcyB5b3UgYXJlIGF3YXJlIG9mIHRoZSByaXNrLlxuICAgIFZ1ZS51dGlsID0ge1xuICAgICAgICB3YXJuOiB3YXJuJDIsXG4gICAgICAgIGV4dGVuZDogZXh0ZW5kLFxuICAgICAgICBtZXJnZU9wdGlvbnM6IG1lcmdlT3B0aW9ucyxcbiAgICAgICAgZGVmaW5lUmVhY3RpdmU6IGRlZmluZVJlYWN0aXZlXG4gICAgfTtcbiAgICBWdWUuc2V0ID0gc2V0O1xuICAgIFZ1ZS5kZWxldGUgPSBkZWw7XG4gICAgVnVlLm5leHRUaWNrID0gbmV4dFRpY2s7XG4gICAgLy8gMi42IGV4cGxpY2l0IG9ic2VydmFibGUgQVBJXG4gICAgVnVlLm9ic2VydmFibGUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIG9ic2VydmUob2JqKTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICAgIFZ1ZS5vcHRpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIFZ1ZS5vcHRpb25zW3R5cGUgKyAncyddID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9KTtcbiAgICAvLyB0aGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIFwiYmFzZVwiIGNvbnN0cnVjdG9yIHRvIGV4dGVuZCBhbGwgcGxhaW4tb2JqZWN0XG4gICAgLy8gY29tcG9uZW50cyB3aXRoIGluIFdlZXgncyBtdWx0aS1pbnN0YW5jZSBzY2VuYXJpb3MuXG4gICAgVnVlLm9wdGlvbnMuX2Jhc2UgPSBWdWU7XG4gICAgZXh0ZW5kKFZ1ZS5vcHRpb25zLmNvbXBvbmVudHMsIGJ1aWx0SW5Db21wb25lbnRzKTtcbiAgICBpbml0VXNlKFZ1ZSk7XG4gICAgaW5pdE1peGluKFZ1ZSk7XG4gICAgaW5pdEV4dGVuZChWdWUpO1xuICAgIGluaXRBc3NldFJlZ2lzdGVycyhWdWUpO1xufVxuXG5pbml0R2xvYmFsQVBJKFZ1ZSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRpc1NlcnZlcicsIHtcbiAgICBnZXQ6IGlzU2VydmVyUmVuZGVyaW5nXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHNzckNvbnRleHQnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHJldHVybiB0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0O1xuICAgIH1cbn0pO1xuLy8gZXhwb3NlIEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0IGZvciBzc3IgcnVudGltZSBoZWxwZXIgaW5zdGFsbGF0aW9uXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLCAnRnVuY3Rpb25hbFJlbmRlckNvbnRleHQnLCB7XG4gICAgdmFsdWU6IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0XG59KTtcblZ1ZS52ZXJzaW9uID0gdmVyc2lvbjtcblxuLy8gdGhlc2UgYXJlIHJlc2VydmVkIGZvciB3ZWIgYmVjYXVzZSB0aGV5IGFyZSBkaXJlY3RseSBjb21waWxlZCBhd2F5XG4vLyBkdXJpbmcgdGVtcGxhdGUgY29tcGlsYXRpb25cbnZhciBpc1Jlc2VydmVkQXR0ciA9IG1ha2VNYXAoJ3N0eWxlLGNsYXNzJyk7XG4vLyBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGJlIHVzaW5nIHByb3BzIGZvciBiaW5kaW5nXG52YXIgYWNjZXB0VmFsdWUgPSBtYWtlTWFwKCdpbnB1dCx0ZXh0YXJlYSxvcHRpb24sc2VsZWN0LHByb2dyZXNzJyk7XG52YXIgbXVzdFVzZVByb3AgPSBmdW5jdGlvbiAodGFnLCB0eXBlLCBhdHRyKSB7XG4gICAgcmV0dXJuICgoYXR0ciA9PT0gJ3ZhbHVlJyAmJiBhY2NlcHRWYWx1ZSh0YWcpICYmIHR5cGUgIT09ICdidXR0b24nKSB8fFxuICAgICAgICAoYXR0ciA9PT0gJ3NlbGVjdGVkJyAmJiB0YWcgPT09ICdvcHRpb24nKSB8fFxuICAgICAgICAoYXR0ciA9PT0gJ2NoZWNrZWQnICYmIHRhZyA9PT0gJ2lucHV0JykgfHxcbiAgICAgICAgKGF0dHIgPT09ICdtdXRlZCcgJiYgdGFnID09PSAndmlkZW8nKSk7XG59O1xudmFyIGlzRW51bWVyYXRlZEF0dHIgPSBtYWtlTWFwKCdjb250ZW50ZWRpdGFibGUsZHJhZ2dhYmxlLHNwZWxsY2hlY2snKTtcbnZhciBpc1ZhbGlkQ29udGVudEVkaXRhYmxlVmFsdWUgPSBtYWtlTWFwKCdldmVudHMsY2FyZXQsdHlwaW5nLHBsYWludGV4dC1vbmx
138355Jyk7XG52YXIgY29udmVydEVudW1lcmF0ZWRWYWx1ZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpIHx8IHZhbHVlID09PSAnZmFsc2UnXG4gICAgICAgID8gJ2ZhbHNlJ1xuICAgICAgICA6IC8vIGFsbG93IGFyYml0cmFyeSBzdHJpbmcgdmFsdWUgZm9yIGNvbnRlbnRlZGl0YWJsZVxuICAgICAgICAgICAga2V5ID09PSAnY29udGVudGVkaXRhYmxlJyAmJiBpc1ZhbGlkQ29udGVudEVkaXRhYmxlVmFsdWUodmFsdWUpXG4gICAgICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgICAgIDogJ3RydWUnO1xufTtcbnZhciBpc0Jvb2xlYW5BdHRyID0gbWFrZU1hcCgnYWxsb3dmdWxsc2NyZWVuLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjaGVja2VkLGNvbXBhY3QsY29udHJvbHMsZGVjbGFyZSwnICtcbiAgICAnZGVmYXVsdCxkZWZhdWx0Y2hlY2tlZCxkZWZhdWx0bXV0ZWQsZGVmYXVsdHNlbGVjdGVkLGRlZmVyLGRpc2FibGVkLCcgK1xuICAgICdlbmFibGVkLGZvcm1ub3ZhbGlkYXRlLGhpZGRlbixpbmRldGVybWluYXRlLGluZXJ0LGlzbWFwLGl0ZW1zY29wZSxsb29wLG11bHRpcGxlLCcgK1xuICAgICdtdXRlZCxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3ZhbGlkYXRlLG5vd3JhcCxvcGVuLHBhdXNlb25leGl0LHJlYWRvbmx5LCcgK1xuICAgICdyZXF1aXJlZCxyZXZlcnNlZCxzY29wZWQsc2VhbWxlc3Msc2VsZWN0ZWQsc29ydGFibGUsJyArXG4gICAgJ3RydWVzcGVlZCx0eXBlbXVzdG1hdGNoLHZpc2libGUnKTtcbnZhciB4bGlua05TID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnO1xudmFyIGlzWGxpbmsgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiBuYW1lLmNoYXJBdCg1KSA9PT0gJzonICYmIG5hbWUuc2xpY2UoMCwgNSkgPT09ICd4bGluayc7XG59O1xudmFyIGdldFhsaW5rUHJvcCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIGlzWGxpbmsobmFtZSkgPyBuYW1lLnNsaWNlKDYsIG5hbWUubGVuZ3RoKSA6ICcnO1xufTtcbnZhciBpc0ZhbHN5QXR0clZhbHVlID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHJldHVybiB2YWwgPT0gbnVsbCB8fCB2YWwgPT09IGZhbHNlO1xufTtcblxuZnVuY3Rpb24gZ2VuQ2xhc3NGb3JWbm9kZSh2bm9kZSkge1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgcGFyZW50Tm9kZSA9IHZub2RlO1xuICAgIHZhciBjaGlsZE5vZGUgPSB2bm9kZTtcbiAgICB3aGlsZSAoaXNEZWYoY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgICAgICBpZiAoY2hpbGROb2RlICYmIGNoaWxkTm9kZS5kYXRhKSB7XG4gICAgICAgICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoY2hpbGROb2RlLmRhdGEsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgcGFyZW50Tm9kZS5wYXJlbnQgbm90IFZOb2RlV2l0aERhdGFcbiAgICB3aGlsZSAoaXNEZWYoKHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudCkpKSB7XG4gICAgICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUuZGF0YSkge1xuICAgICAgICAgICAgZGF0YSA9IG1lcmdlQ2xhc3NEYXRhKGRhdGEsIHBhcmVudE5vZGUuZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlbmRlckNsYXNzKGRhdGEuc3RhdGljQ2xhc3MsIGRhdGEuY2xhc3MpO1xufVxuZnVuY3Rpb24gbWVyZ2VDbGFzc0RhdGEoY2hpbGQsIHBhcmVudCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXRpY0NsYXNzOiBjb25jYXQoY2hpbGQuc3RhdGljQ2xhc3MsIHBhcmVudC5zdGF0aWNDbGFzcyksXG4gICAgICAgIGNsYXNzOiBpc0RlZihjaGlsZC5jbGFzcykgPyBbY2hpbGQuY2xhc3MsIHBhcmVudC5jbGFzc10gOiBwYXJlbnQuY2xhc3NcbiAgICB9O1xufVxuZnVuY3Rpb24gcmVuZGVyQ2xhc3Moc3RhdGljQ2xhc3MsIGR5bmFtaWNDbGFzcykge1xuICAgIGlmIChpc0RlZihzdGF0aWNDbGFzcykgfHwgaXNEZWYoZHluYW1pY0NsYXNzKSkge1xuICAgICAgICByZXR1cm4gY29uY2F0KHN0YXRpY0NsYXNzLCBzdHJpbmdpZnlDbGFzcyhkeW5hbWljQ2xhc3MpKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gJyc7XG59XG5mdW5jdGlvbiBjb25jYXQoYSwgYikge1xuICAgIHJldHVybiBhID8gKGIgPyBhICsgJyAnICsgYiA6IGEpIDogYiB8fCAnJztcbn1cbmZ1bmN0aW9uIHN0cmluZ2lmeUNsYXNzKHZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdpZnlBcnJheSh2YWx1ZSk7XG4gICAgfVxuICAgIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeU9iamVjdCh2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gJyc7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnlBcnJheSh2YWx1ZSkge1xuICAgIHZhciByZXMgPSAnJztcbiAgICB2YXIgc3RyaW5naWZpZWQ7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGlzRGVmKChzdHJpbmdpZmllZCA9IHN0cmluZ2lmeUNsYXNzKHZhbHVlW2ldKSkpICYmIHN0cmluZ2lmaWVkICE9PSAnJykge1xuICAgICAgICAgICAgaWYgKHJlcylcbiAgICAgICAgICAgICAgICByZXMgKz0gJyAnO1xuICAgICAgICAgICAgcmVzICs9IHN0cmluZ2lmaWVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnlPYmplY3QodmFsdWUpIHtcbiAgICB2YXIgcmVzID0gJyc7XG4gICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZVtrZXldKSB7XG4gICAgICAgICAgICBpZiAocmVzKVxuICAgICAgICAgICAgICAgI
13835HJlcyArPSAnICc7XG4gICAgICAgICAgICByZXMgKz0ga2V5O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbnZhciBuYW1lc3BhY2VNYXAgPSB7XG4gICAgc3ZnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxuICAgIG1hdGg6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJ1xufTtcbnZhciBpc0hUTUxUYWcgPSBtYWtlTWFwKCdodG1sLGJvZHksYmFzZSxoZWFkLGxpbmssbWV0YSxzdHlsZSx0aXRsZSwnICtcbiAgICAnYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGZvb3RlcixoZWFkZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGdyb3VwLG5hdixzZWN0aW9uLCcgK1xuICAgICdkaXYsZGQsZGwsZHQsZmlnY2FwdGlvbixmaWd1cmUscGljdHVyZSxocixpbWcsbGksbWFpbixvbCxwLHByZSx1bCwnICtcbiAgICAnYSxiLGFiYnIsYmRpLGJkbyxicixjaXRlLGNvZGUsZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ0YyxydWJ5LCcgK1xuICAgICdzLHNhbXAsc21hbGwsc3BhbixzdHJvbmcsc3ViLHN1cCx0aW1lLHUsdmFyLHdicixhcmVhLGF1ZGlvLG1hcCx0cmFjayx2aWRlbywnICtcbiAgICAnZW1iZWQsb2JqZWN0LHBhcmFtLHNvdXJjZSxjYW52YXMsc2NyaXB0LG5vc2NyaXB0LGRlbCxpbnMsJyArXG4gICAgJ2NhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLCcgK1xuICAgICdidXR0b24sZGF0YWxpc3QsZmllbGRzZXQsZm9ybSxpbnB1dCxsYWJlbCxsZWdlbmQsbWV0ZXIsb3B0Z3JvdXAsb3B0aW9uLCcgK1xuICAgICdvdXRwdXQscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhLCcgK1xuICAgICdkZXRhaWxzLGRpYWxvZyxtZW51LG1lbnVpdGVtLHN1bW1hcnksJyArXG4gICAgJ2NvbnRlbnQsZWxlbWVudCxzaGFkb3csdGVtcGxhdGUsYmxvY2txdW90ZSxpZnJhbWUsdGZvb3QnKTtcbi8vIHRoaXMgbWFwIGlzIGludGVudGlvbmFsbHkgc2VsZWN0aXZlLCBvbmx5IGNvdmVyaW5nIFNWRyBlbGVtZW50cyB0aGF0IG1heVxuLy8gY29udGFpbiBjaGlsZCBlbGVtZW50cy5cbnZhciBpc1NWRyA9IG1ha2VNYXAoJ3N2ZyxhbmltYXRlLGNpcmNsZSxjbGlwcGF0aCxjdXJzb3IsZGVmcyxkZXNjLGVsbGlwc2UsZmlsdGVyLGZvbnQtZmFjZSwnICtcbiAgICAnZm9yZWlnbm9iamVjdCxnLGdseXBoLGltYWdlLGxpbmUsbWFya2VyLG1hc2ssbWlzc2luZy1nbHlwaCxwYXRoLHBhdHRlcm4sJyArXG4gICAgJ3BvbHlnb24scG9seWxpbmUscmVjdCxzd2l0Y2gsc3ltYm9sLHRleHQsdGV4dHBhdGgsdHNwYW4sdXNlLHZpZXcnLCB0cnVlKTtcbnZhciBpc1ByZVRhZyA9IGZ1bmN0aW9uICh0YWcpIHsgcmV0dXJuIHRhZyA9PT0gJ3ByZSc7IH07XG52YXIgaXNSZXNlcnZlZFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICByZXR1cm4gaXNIVE1MVGFnKHRhZykgfHwgaXNTVkcodGFnKTtcbn07XG5mdW5jdGlvbiBnZXRUYWdOYW1lc3BhY2UodGFnKSB7XG4gICAgaWYgKGlzU1ZHKHRhZykpIHtcbiAgICAgICAgcmV0dXJuICdzdmcnO1xuICAgIH1cbiAgICAvLyBiYXNpYyBzdXBwb3J0IGZvciBNYXRoTUxcbiAgICAvLyBub3RlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBvdGhlciBNYXRoTUwgZWxlbWVudHMgYmVpbmcgY29tcG9uZW50IHJvb3RzXG4gICAgaWYgKHRhZyA9PT0gJ21hdGgnKSB7XG4gICAgICAgIHJldHVybiAnbWF0aCc7XG4gICAgfVxufVxudmFyIHVua25vd25FbGVtZW50Q2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuZnVuY3Rpb24gaXNVbmtub3duRWxlbWVudCh0YWcpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWluQnJvd3Nlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGlzUmVzZXJ2ZWRUYWcodGFnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRhZyA9IHRhZy50b0xvd2VyQ2FzZSgpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdW5rbm93bkVsZW1lbnRDYWNoZVt0YWddO1xuICAgIH1cbiAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gICAgaWYgKHRhZy5pbmRleE9mKCctJykgPiAtMSkge1xuICAgICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yODIxMDM2NC8xMDcwMjQ0XG4gICAgICAgIHJldHVybiAodW5rbm93bkVsZW1lbnRDYWNoZVt0YWddID1cbiAgICAgICAgICAgIGVsLmNvbnN0cnVjdG9yID09PSB3aW5kb3cuSFRNTFVua25vd25FbGVtZW50IHx8XG4gICAgICAgICAgICAgICAgZWwuY29uc3RydWN0b3IgPT09IHdpbmRvdy5IVE1MRWxlbWVudCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSA9IC9IVE1MVW5rbm93bkVsZW1lbnQvLnRlc3QoZWwudG9TdHJpbmcoKSkpO1xuICAgIH1cbn1cbnZhciBpc1RleHRJbnB1dFR5cGUgPSBtYWtlTWFwKCd0ZXh0LG51bWJlcixwYXNzd29yZCxzZWFyY2gsZW1haWwsdGVsLHVybCcpO1xuXG4vKipcbiAqIFF1ZXJ5IGFuIGVsZW1lbnQgc2VsZWN0b3IgaWYgaXQncyBub3QgYW4gZWxlbWVudCBhbHJlYWR5LlxuICovXG5mdW5jdGlvbiBxdWVyeShlbCkge1xuICAgIGlmICh0eXBlb2YgZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhciBzZWxlY3RlZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpO1xuICAgICAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4kMignQ2Fubm90IGZpbmQgZWxlbWVudDogJyArIGVsKTtcbiAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZWw7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZ05hbWUsIHZub2RlKSB7XG4gICAgdmFyIGVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gICAgaWYgKHRhZ05hbWUgIT09ICdzZWxlY3QnKSB7XG4gICAgICAgI
13835HJldHVybiBlbG07XG4gICAgfVxuICAgIC8vIGZhbHNlIG9yIG51bGwgd2lsbCByZW1vdmUgdGhlIGF0dHJpYnV0ZSBidXQgdW5kZWZpbmVkIHdpbGwgbm90XG4gICAgaWYgKHZub2RlLmRhdGEgJiZcbiAgICAgICAgdm5vZGUuZGF0YS5hdHRycyAmJlxuICAgICAgICB2bm9kZS5kYXRhLmF0dHJzLm11bHRpcGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZWxtLnNldEF0dHJpYnV0ZSgnbXVsdGlwbGUnLCAnbXVsdGlwbGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsbTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2UsIHRhZ05hbWUpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZU1hcFtuYW1lc3BhY2VdLCB0YWdOYW1lKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRleHROb2RlKHRleHQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG59XG5mdW5jdGlvbiBjcmVhdGVDb21tZW50KHRleHQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0ZXh0KTtcbn1cbmZ1bmN0aW9uIGluc2VydEJlZm9yZShwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSk7XG59XG5mdW5jdGlvbiByZW1vdmVDaGlsZChub2RlLCBjaGlsZCkge1xuICAgIG5vZGUucmVtb3ZlQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGQobm9kZSwgY2hpbGQpIHtcbiAgICBub2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIHBhcmVudE5vZGUobm9kZSkge1xuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGU7XG59XG5mdW5jdGlvbiBuZXh0U2libGluZyhub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XG59XG5mdW5jdGlvbiB0YWdOYW1lKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50YWdOYW1lO1xufVxuZnVuY3Rpb24gc2V0VGV4dENvbnRlbnQobm9kZSwgdGV4dCkge1xuICAgIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xufVxuZnVuY3Rpb24gc2V0U3R5bGVTY29wZShub2RlLCBzY29wZUlkKSB7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoc2NvcGVJZCwgJycpO1xufVxuXG52YXIgbm9kZU9wcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBjcmVhdGVFbGVtZW50OiBjcmVhdGVFbGVtZW50LFxuICBjcmVhdGVFbGVtZW50TlM6IGNyZWF0ZUVsZW1lbnROUyxcbiAgY3JlYXRlVGV4dE5vZGU6IGNyZWF0ZVRleHROb2RlLFxuICBjcmVhdGVDb21tZW50OiBjcmVhdGVDb21tZW50LFxuICBpbnNlcnRCZWZvcmU6IGluc2VydEJlZm9yZSxcbiAgcmVtb3ZlQ2hpbGQ6IHJlbW92ZUNoaWxkLFxuICBhcHBlbmRDaGlsZDogYXBwZW5kQ2hpbGQsXG4gIHBhcmVudE5vZGU6IHBhcmVudE5vZGUsXG4gIG5leHRTaWJsaW5nOiBuZXh0U2libGluZyxcbiAgdGFnTmFtZTogdGFnTmFtZSxcbiAgc2V0VGV4dENvbnRlbnQ6IHNldFRleHRDb250ZW50LFxuICBzZXRTdHlsZVNjb3BlOiBzZXRTdHlsZVNjb3BlXG59KTtcblxudmFyIHJlZiA9IHtcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChfLCB2bm9kZSkge1xuICAgICAgICByZWdpc3RlclJlZih2bm9kZSk7XG4gICAgfSxcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICAgICAgaWYgKG9sZFZub2RlLmRhdGEucmVmICE9PSB2bm9kZS5kYXRhLnJlZikge1xuICAgICAgICAgICAgcmVnaXN0ZXJSZWYob2xkVm5vZGUsIHRydWUpO1xuICAgICAgICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAodm5vZGUpIHtcbiAgICAgICAgcmVnaXN0ZXJSZWYodm5vZGUsIHRydWUpO1xuICAgIH1cbn07XG5mdW5jdGlvbiByZWdpc3RlclJlZih2bm9kZSwgaXNSZW1vdmFsKSB7XG4gICAgdmFyIHJlZiA9IHZub2RlLmRhdGEucmVmO1xuICAgIGlmICghaXNEZWYocmVmKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIHZhciB2bSA9IHZub2RlLmNvbnRleHQ7XG4gICAgdmFyIHJlZlZhbHVlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgfHwgdm5vZGUuZWxtO1xuICAgIHZhciB2YWx1ZSA9IGlzUmVtb3ZhbCA/IG51bGwgOiByZWZWYWx1ZTtcbiAgICB2YXIgJHJlZnNWYWx1ZSA9IGlzUmVtb3ZhbCA/IHVuZGVmaW5lZCA6IHJlZlZhbHVlO1xuICAgIGlmIChpc0Z1bmN0aW9uKHJlZikpIHtcbiAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcocmVmLCB2bSwgW3ZhbHVlXSwgdm0sIFwidGVtcGxhdGUgcmVmIGZ1bmN0aW9uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBpc0ZvciA9IHZub2RlLmRhdGEucmVmSW5Gb3I7XG4gICAgdmFyIF9pc1N0cmluZyA9IHR5cGVvZiByZWYgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiByZWYgPT09ICdudW1iZXInO1xuICAgIHZhciBfaXNSZWYgPSBpc1JlZihyZWYpO1xuICAgIHZhciByZWZzID0gdm0uJHJlZnM7XG4gICAgaWYgKF9pc1N0cmluZyB8fCBfaXNSZWYpIHtcbiAgICAgICAgaWYgKGlzRm9yKSB7XG4gICAgICAgICAgICB2Y
13835XIgZXhpc3RpbmcgPSBfaXNTdHJpbmcgPyByZWZzW3JlZl0gOiByZWYudmFsdWU7XG4gICAgICAgICAgICBpZiAoaXNSZW1vdmFsKSB7XG4gICAgICAgICAgICAgICAgaXNBcnJheShleGlzdGluZykgJiYgcmVtb3ZlJDIoZXhpc3RpbmcsIHJlZlZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghaXNBcnJheShleGlzdGluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1N0cmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmc1tyZWZdID0gW3JlZlZhbHVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNldHVwUmVmKHZtLCByZWYsIHJlZnNbcmVmXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYudmFsdWUgPSBbcmVmVmFsdWVdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFleGlzdGluZy5pbmNsdWRlcyhyZWZWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcucHVzaChyZWZWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKF9pc1N0cmluZykge1xuICAgICAgICAgICAgaWYgKGlzUmVtb3ZhbCAmJiByZWZzW3JlZl0gIT09IHJlZlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVmc1tyZWZdID0gJHJlZnNWYWx1ZTtcbiAgICAgICAgICAgIHNldFNldHVwUmVmKHZtLCByZWYsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChfaXNSZWYpIHtcbiAgICAgICAgICAgIGlmIChpc1JlbW92YWwgJiYgcmVmLnZhbHVlICE9PSByZWZWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm4kMihcIkludmFsaWQgdGVtcGxhdGUgcmVmIHR5cGU6IFwiLmNvbmNhdCh0eXBlb2YgcmVmKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBzZXRTZXR1cFJlZihfYSwga2V5LCB2YWwpIHtcbiAgICB2YXIgX3NldHVwU3RhdGUgPSBfYS5fc2V0dXBTdGF0ZTtcbiAgICBpZiAoX3NldHVwU3RhdGUgJiYgaGFzT3duKF9zZXR1cFN0YXRlLCBrZXkpKSB7XG4gICAgICAgIGlmIChpc1JlZihfc2V0dXBTdGF0ZVtrZXldKSkge1xuICAgICAgICAgICAgX3NldHVwU3RhdGVba2V5XS52YWx1ZSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF9zZXR1cFN0YXRlW2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogVmlydHVhbCBET00gcGF0Y2hpbmcgYWxnb3JpdGhtIGJhc2VkIG9uIFNuYWJiZG9tIGJ5XG4gKiBTaW1vbiBGcmlpcyBWaW5kdW0gKEBwYWxkZXBpbmQpXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxkZXBpbmQvc25hYmJkb20vYmxvYi9tYXN0ZXIvTElDRU5TRVxuICpcbiAqIG1vZGlmaWVkIGJ5IEV2YW4gWW91IChAeXl4OTkwODAzKVxuICpcbiAqIE5vdCB0eXBlLWNoZWNraW5nIHRoaXMgYmVjYXVzZSB0aGlzIGZpbGUgaXMgcGVyZi1jcml0aWNhbCBhbmQgdGhlIGNvc3RcbiAqIG9mIG1ha2luZyBmbG93IHVuZGVyc3RhbmQgaXQgaXMgbm90IHdvcnRoIGl0LlxuICovXG52YXIgZW1wdHlOb2RlID0gbmV3IFZOb2RlKCcnLCB7fSwgW10pO1xudmFyIGhvb2tzID0gWydjcmVhdGUnLCAnYWN0aXZhdGUnLCAndXBkYXRlJywgJ3JlbW92ZScsICdkZXN0cm95J107XG5mdW5jdGlvbiBzYW1lVm5vZGUoYSwgYikge1xuICAgIHJldHVybiAoYS5rZXkgPT09IGIua2V5ICYmXG4gICAgICAgIGEuYXN5bmNGYWN0b3J5ID09PSBiLmFzeW5jRmFjdG9yeSAmJlxuICAgICAgICAoKGEudGFnID09PSBiLnRhZyAmJlxuICAgICAgICAgICAgYS5pc0NvbW1lbnQgPT09IGIuaXNDb21tZW50ICYmXG4gICAgICAgICAgICBpc0RlZihhLmRhdGEpID09PSBpc0RlZihiLmRhdGEpICYmXG4gICAgICAgICAgICBzYW1lSW5wdXRUeXBlKGEsIGIpKSB8fFxuICAgICAgICAgICAgKGlzVHJ1ZShhLmlzQXN5bmNQbGFjZWhvbGRlcikgJiYgaXNVbmRlZihiLmFzeW5jRmFjdG9yeS5lcnJvcikpKSk7XG59XG5mdW5jdGlvbiBzYW1lSW5wdXRUeXBlKGEsIGIpIHtcbiAgICBpZiAoYS50YWcgIT09ICdpbnB1dCcpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIHZhciBpO1xuICAgIHZhciB0eXBlQSA9IGlzRGVmKChpID0gYS5kYXRhKSkgJiYgaXNEZWYoKGkgPSBpLmF0dHJzKSkgJiYgaS50eXBlO1xuICAgIHZhciB0eXBlQiA9IGlzRGVmKChpID0gYi5kYXRhKSkgJiYgaXNEZWYoKGkgPSBpLmF0dHJzKSkgJiYgaS50eXBlO1xuICAgIHJldHVybiB0eXBlQSA9PT0gdHlwZUIgfHwgKGlzVGV4dElucHV0VHlwZSh0eXBlQSkgJiYgaXNUZXh0SW5wdXRUeXBlKHR5cGVCKSk7XG59XG5mdW5jdGlvbiBjcmVhdGVLZXlUb09sZElkeChjaGlsZHJlbiwgYmVnaW5JZHgsIGVuZElkeCkge1xuICAgIHZhciBpLCBrZXk7XG4gICAgdmFyIG1hcCA9IHt9O1xuICAgIGZvciAoaSA9IGJlZ2luSWR4OyBpIDw9IGVuZElkeDsgKytpKSB7XG4gICAgICAgIGtleSA9IGNoaWxkcmVuW2ldLmtleTtcbiAgICAgICAgaWYgKGlzRGVmKGtleSkpXG4gICAgICAgICAgICBtYXBba2V5XSA9IGk7XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG59XG5mdW5jdGlvbiBjcmVhdGVQYXRjaEZ1bmN0aW9uKGJhY2tlbmQpIHtcbiAgICB2YXIgaSwgajtcbiAgICB2YXIgY2JzID0ge307XG4gICAgdmFyIG1vZHVsZXMgPSBiYWNrZW5kLm1vZHVsZXMsIG5vZGVPcHMgPSBiYWNrZW5kLm5vZGVPcHM7XG4gICAgZm9yIChpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNic1tob29rc1tpXV0gPSBbXTtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IG1vZHVsZXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIGlmIChpc0RlZihtb2R1bGVzW2pdW2hvb2tzW2ldXSkpIHtcbiAgICAgICAgICAgICAgICBjYnNbaG9va3NbaV1dLnB1c2gobW9kdWxlc1tqXVtob29rc1tpXV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVtcHR5Tm9kZU
13835F0KGVsbSkge1xuICAgICAgICByZXR1cm4gbmV3IFZOb2RlKG5vZGVPcHMudGFnTmFtZShlbG0pLnRvTG93ZXJDYXNlKCksIHt9LCBbXSwgdW5kZWZpbmVkLCBlbG0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVSbUNiKGNoaWxkRWxtLCBsaXN0ZW5lcnMpIHtcbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgICAgICAgaWYgKC0tcmVtb3ZlLmxpc3RlbmVycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoY2hpbGRFbG0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlbW92ZS5saXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gICAgICAgIHJldHVybiByZW1vdmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZU5vZGUoZWwpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IG5vZGVPcHMucGFyZW50Tm9kZShlbCk7XG4gICAgICAgIC8vIGVsZW1lbnQgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQgZHVlIHRvIHYtaHRtbCAvIHYtdGV4dFxuICAgICAgICBpZiAoaXNEZWYocGFyZW50KSkge1xuICAgICAgICAgICAgbm9kZU9wcy5yZW1vdmVDaGlsZChwYXJlbnQsIGVsKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc1Vua25vd25FbGVtZW50KHZub2RlLCBpblZQcmUpIHtcbiAgICAgICAgcmV0dXJuICghaW5WUHJlICYmXG4gICAgICAgICAgICAhdm5vZGUubnMgJiZcbiAgICAgICAgICAgICEoY29uZmlnLmlnbm9yZWRFbGVtZW50cy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICBjb25maWcuaWdub3JlZEVsZW1lbnRzLnNvbWUoZnVuY3Rpb24gKGlnbm9yZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNSZWdFeHAoaWdub3JlKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpZ25vcmUudGVzdCh2bm9kZS50YWcpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGlnbm9yZSA9PT0gdm5vZGUudGFnO1xuICAgICAgICAgICAgICAgIH0pKSAmJlxuICAgICAgICAgICAgY29uZmlnLmlzVW5rbm93bkVsZW1lbnQodm5vZGUudGFnKSk7XG4gICAgfVxuICAgIHZhciBjcmVhdGluZ0VsbUluVlByZSA9IDA7XG4gICAgZnVuY3Rpb24gY3JlYXRlRWxtKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtLCBuZXN0ZWQsIG93bmVyQXJyYXksIGluZGV4KSB7XG4gICAgICAgIGlmIChpc0RlZih2bm9kZS5lbG0pICYmIGlzRGVmKG93bmVyQXJyYXkpKSB7XG4gICAgICAgICAgICAvLyBUaGlzIHZub2RlIHdhcyB1c2VkIGluIGEgcHJldmlvdXMgcmVuZGVyIVxuICAgICAgICAgICAgLy8gbm93IGl0J3MgdXNlZCBhcyBhIG5ldyBub2RlLCBvdmVyd3JpdGluZyBpdHMgZWxtIHdvdWxkIGNhdXNlXG4gICAgICAgICAgICAvLyBwb3RlbnRpYWwgcGF0Y2ggZXJyb3JzIGRvd24gdGhlIHJvYWQgd2hlbiBpdCdzIHVzZWQgYXMgYW4gaW5zZXJ0aW9uXG4gICAgICAgICAgICAvLyByZWZlcmVuY2Ugbm9kZS4gSW5zdGVhZCwgd2UgY2xvbmUgdGhlIG5vZGUgb24tZGVtYW5kIGJlZm9yZSBjcmVhdGluZ1xuICAgICAgICAgICAgLy8gYXNzb2NpYXRlZCBET00gZWxlbWVudCBmb3IgaXQuXG4gICAgICAgICAgICB2bm9kZSA9IG93bmVyQXJyYXlbaW5kZXhdID0gY2xvbmVWTm9kZSh2bm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdm5vZGUuaXNSb290SW5zZXJ0ID0gIW5lc3RlZDsgLy8gZm9yIHRyYW5zaXRpb24gZW50ZXIgY2hlY2tcbiAgICAgICAgaWYgKGNyZWF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2Y
13835XIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuO1xuICAgICAgICB2YXIgdGFnID0gdm5vZGUudGFnO1xuICAgICAgICBpZiAoaXNEZWYodGFnKSkge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnByZSkge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGluZ0VsbUluVlByZSsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNVbmtub3duRWxlbWVudCh2bm9kZSwgY3JlYXRpbmdFbG1JblZQcmUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4kMignVW5rbm93biBjdXN0b20gZWxlbWVudDogPCcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc+IC0gZGlkIHlvdSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdyZWdpc3RlciB0aGUgY29tcG9uZW50IGNvcnJlY3RseT8gRm9yIHJlY3Vyc2l2ZSBjb21wb25lbnRzLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdtYWtlIHN1cmUgdG8gcHJvdmlkZSB0aGUgXCJuYW1lXCIgb3B0aW9uLicsIHZub2RlLmNvbnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZub2RlLmVsbSA9IHZub2RlLm5zXG4gICAgICAgICAgICAgICAgPyBub2RlT3BzLmNyZWF0ZUVsZW1lbnROUyh2bm9kZS5ucywgdGFnKVxuICAgICAgICAgICAgICAgIDogbm9kZU9wcy5jcmVhdGVFbGVtZW50KHRhZywgdm5vZGUpO1xuICAgICAgICAgICAgc2V0U2NvcGUodm5vZGUpO1xuICAgICAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBkYXRhICYmIGRhdGEucHJlKSB7XG4gICAgICAgICAgICAgICAgY3JlYXRpbmdFbG1JblZQcmUtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1RydWUodm5vZGUuaXNDb21tZW50KSkge1xuICAgICAgICAgICAgdm5vZGUuZWxtID0gbm9kZU9wcy5jcmVhdGVDb21tZW50KHZub2RlLnRleHQpO1xuICAgICAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdm5vZGUuZWxtID0gbm9kZU9wcy5jcmVhdGVUZXh0Tm9kZSh2bm9kZS50ZXh0KTtcbiAgICAgICAgICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICAgICAgdmFyIGkgPSB2bm9kZS5kYXRhO1xuICAgICAgICBpZiAoaXNEZWYoaSkpIHtcbiAgICAgICAgICAgIHZhciBpc1JlYWN0aXZhdGVkID0gaXNEZWYodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpICYmIGkua2VlcEFsaXZlO1xuICAgICAgICAgICAgaWYgKGlzRGVmKChpID0gaS5ob29rKSkgJiYgaXNEZWYoKGkgPSBpLmluaXQpKSkge1xuICAgICAgICAgICAgICAgIGkodm5vZGUsIGZhbHNlIC8qIGh5ZHJhdGluZyAqLyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhZnRlciBjYWxsaW5nIHRoZSBpbml0IGhvb2ssIGlmIHRoZSB2bm9kZSBpcyBhIGNoaWxkIGNvbXBvbmVudFxuICAgICAgICAgICAgLy8gaXQgc2hvdWxkJ3ZlIGNyZWF0ZWQgYSBjaGlsZCBpbnN0YW5jZSBhbmQgbW91bnRlZCBpdC4gdGhlIGNoaWxkXG4gICAgICAgICAgICAvLyBjb21wb25lbnQgYWxzbyBoYXMgc2V0IHRoZSBwbGFjZWhvbGRlciB2bm9kZSdzIGVsbS5cbiAgICAgICAgICAgIC8vIGluIHRoYXQgY2FzZSB3ZSBjYW4ganVzdCByZXR1cm4gdGhlIGVsZW1lbnQgYW5kIGJlIGRvbmUuXG4gICAgICAgICAgICBpZiAoaXNEZWYodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgaW5pdENvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzVHJ1ZShpc1JlYWN0aXZhdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZWFjdGl2YXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdENvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgICAgIGlmIChpc0RlZih2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQpKSB7XG4gICAgICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaC5hcHBseShpbnNlcnRlZFZub2RlUXVldWUsIHZub2RlLmRhdGEucGVuZGluZ0luc2VydCk7XG4gICAgICAgICAgICB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZub2RlLmVsbSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlLiRlbDtcbiAgICAgICAgaWYgKGlzUGF0Y2hhYmxlKHZub2RlKSkge1xuICAgICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICBzZXRTY29wZSh2bm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBlbXB0eSBjb21wb25lbnQgcm9vdC5cbiAgICAgICAgICAgIC8vIHNraXAgYWxsIGVsZW1lbnQtcmVsYXRlZCBtb2R1bGVzIGV4Y2VwdCBmb3IgcmVmICgjMzQ1NSlcbiAgICAgICAgICAgI
13835HJlZ2lzdGVyUmVmKHZub2RlKTtcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0byBpbnZva2UgdGhlIGluc2VydCBob29rXG4gICAgICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhY3RpdmF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkge1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgLy8gaGFjayBmb3IgIzQzMzk6IGEgcmVhY3RpdmF0ZWQgY29tcG9uZW50IHdpdGggaW5uZXIgdHJhbnNpdGlvblxuICAgICAgICAvLyBkb2VzIG5vdCB0cmlnZ2VyIGJlY2F1c2UgdGhlIGlubmVyIG5vZGUncyBjcmVhdGVkIGhvb2tzIGFyZSBub3QgY2FsbGVkXG4gICAgICAgIC8vIGFnYWluLiBJdCdzIG5vdCBpZGVhbCB0byBpbnZvbHZlIG1vZHVsZS1zcGVjaWZpYyBsb2dpYyBpbiBoZXJlIGJ1dFxuICAgICAgICAvLyB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIGl0LlxuICAgICAgICB2YXIgaW5uZXJOb2RlID0gdm5vZGU7XG4gICAgICAgIHdoaWxlIChpbm5lck5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGlubmVyTm9kZSA9IGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgICAgICAgICBpZiAoaXNEZWYoKGkgPSBpbm5lck5vZGUuZGF0YSkpICYmIGlzRGVmKChpID0gaS50cmFuc2l0aW9uKSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmFjdGl2YXRlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNicy5hY3RpdmF0ZVtpXShlbXB0eU5vZGUsIGlubmVyTm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoKGlubmVyTm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdW5saWtlIGEgbmV3bHkgY3JlYXRlZCBjb21wb25lbnQsXG4gICAgICAgIC8vIGEgcmVhY3RpdmF0ZWQga2VlcC1hbGl2ZSBjb21wb25lbnQgZG9lc24ndCBpbnNlcnQgaXRzZWxmXG4gICAgICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5zZXJ0KHBhcmVudCwgZWxtLCByZWYpIHtcbiAgICAgICAgaWYgKGlzRGVmKHBhcmVudCkpIHtcbiAgICAgICAgICAgIGlmIChpc0RlZihyZWYpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVPcHMucGFyZW50Tm9kZShyZWYpID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50LCBlbG0sIHJlZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9kZU9wcy5hcHBlbmRDaGlsZChwYXJlbnQsIGVsbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhjaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpXzEgPSAwOyBpXzEgPCBjaGlsZHJlbi5sZW5ndGg7ICsraV8xKSB7XG4gICAgICAgICAgICAgICAgY3JlYXRlRWxtKGNoaWxkcmVuW2lfMV0sIGluc2VydGVkVm5vZGVRdWV1ZSwgdm5vZGUuZWxtLCBudWxsLCB0cnVlLCBjaGlsZHJlbiwgaV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1ByaW1pdGl2ZSh2bm9kZS50ZXh0KSkge1xuICAgICAgICAgICAgbm9kZU9wcy5hcHBlbmRDaGlsZCh2bm9kZS5lbG0sIG5vZGVPcHMuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKHZub2RlLnRleHQpKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaXNQYXRjaGFibGUodm5vZGUpIHtcbiAgICAgICAgd2hpbGUgKHZub2Rl
13835LmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgICAgICB2bm9kZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNEZWYodm5vZGUudGFnKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgICAgICBmb3IgKHZhciBpXzIgPSAwOyBpXzIgPCBjYnMuY3JlYXRlLmxlbmd0aDsgKytpXzIpIHtcbiAgICAgICAgICAgIGNicy5jcmVhdGVbaV8yXShlbXB0eU5vZGUsIHZub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpID0gdm5vZGUuZGF0YS5ob29rOyAvLyBSZXVzZSB2YXJpYWJsZVxuICAgICAgICBpZiAoaXNEZWYoaSkpIHtcbiAgICAgICAgICAgIGlmIChpc0RlZihpLmNyZWF0ZSkpXG4gICAgICAgICAgICAgICAgaS5jcmVhdGUoZW1wdHlOb2RlLCB2bm9kZSk7XG4gICAgICAgICAgICBpZiAoaXNEZWYoaS5pbnNlcnQpKVxuICAgICAgICAgICAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoKHZub2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzZXQgc2NvcGUgaWQgYXR0cmlidXRlIGZvciBzY29wZWQgQ1NTLlxuICAgIC8vIHRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYSBzcGVjaWFsIGNhc2UgdG8gYXZvaWQgdGhlIG92ZXJoZWFkXG4gICAgLy8gb2YgZ29pbmcgdGhyb3VnaCB0aGUgbm9ybWFsIGF0dHJpYnV0ZSBwYXRjaGluZyBwcm9jZXNzLlxuICAgIGZ1bmN0aW9uIHNldFNjb3BlKHZub2RlKSB7XG4gICAgICAgIHZhciBpO1xuICAgICAgICBpZiAoaXNEZWYoKGkgPSB2bm9kZS5mblNjb3BlSWQpKSkge1xuICAgICAgICAgICAgbm9kZU9wcy5zZXRTdHlsZVNjb3BlKHZub2RlLmVsbSwgaSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2Y
13835XIgYW5jZXN0b3IgPSB2bm9kZTtcbiAgICAgICAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IGFuY2VzdG9yLmNvbnRleHQpKSAmJiBpc0RlZigoaSA9IGkuJG9wdGlvbnMuX3Njb3BlSWQpKSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlT3BzLnNldFN0eWxlU2NvcGUodm5vZGUuZWxtLCBpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm9yIHNsb3QgY29udGVudCB0aGV5IHNob3VsZCBhbHNvIGdldCB0aGUgc2NvcGVJZCBmcm9tIHRoZSBob3N0IGluc3RhbmNlLlxuICAgICAgICBpZiAoaXNEZWYoKGkgPSBhY3RpdmVJbnN0YW5jZSkpICYmXG4gICAgICAgICAgICBpICE9PSB2bm9kZS5jb250ZXh0ICYmXG4gICAgICAgICAgICBpICE9PSB2bm9kZS5mbkNvbnRleHQgJiZcbiAgICAgICAgICAgIGlzRGVmKChpID0gaS4kb3B0aW9ucy5fc2NvcGVJZCkpKSB7XG4gICAgICAgICAgICBub2RlT3BzLnNldFN0eWxlU2NvcGUodm5vZGUuZWxtLCBpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRWbm9kZXMocGFyZW50RWxtLCByZWZFbG0sIHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgICAgICAgIGNyZWF0ZUVsbSh2bm9kZXNbc3RhcnRJZHhdLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtLCBmYWxzZSwgdm5vZGVzLCBzdGFydElkeCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaW52b2tlRGVzdHJveUhvb2sodm5vZGUpIHtcbiAgICAgICAgdmFyIGksIGo7XG4gICAgICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWYoKGkgPSBkYXRhLmhvb2spKSAmJiBpc0RlZigoaSA9IGkuZGVzdHJveSkpKVxuICAgICAgICAgICAgICAgIGkodm5vZGUpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNicy5kZXN0cm95Lmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgIGNicy5kZXN0cm95W2ldKHZub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNEZWYoKGkgPSB2bm9kZS5jaGlsZHJlbikpKSB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayh2bm9kZS5jaGlsZHJlbltqXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlVm5vZGVzKHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCkge1xuICAgICAgICBmb3IgKDsgc3RhcnRJZHggPD0gZW5kSWR4OyArK3N0YXJ0SWR4KSB7XG4gICAgICAgICAgICB2Y
13835XIgY2ggPSB2bm9kZXNbc3RhcnRJZHhdO1xuICAgICAgICAgICAgaWYgKGlzRGVmKGNoKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc0RlZihjaC50YWcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2soY2gpO1xuICAgICAgICAgICAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhjaCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBUZXh0IG5vZGVcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShjaC5lbG0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rKHZub2RlLCBybSkge1xuICAgICAgICBpZiAoaXNEZWYocm0pIHx8IGlzRGVmKHZub2RlLmRhdGEpKSB7XG4gICAgICAgICAgICB2YXIgaV8zO1xuICAgICAgICAgICAgdmFyIGxpc3RlbmVycyA9IGNicy5yZW1vdmUubGVuZ3RoICsgMTtcbiAgICAgICAgICAgIGlmIChpc0RlZihybSkpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGEgcmVjdXJzaXZlbHkgcGFzc2VkIGRvd24gcm0gY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGlzdGVuZXJzIGNvdW50XG4gICAgICAgICAgICAgICAgcm0ubGlzdGVuZXJzICs9IGxpc3RlbmVycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRpcmVjdGx5IHJlbW92aW5nXG4gICAgICAgICAgICAgICAgcm0gPSBjcmVhdGVSbUNiKHZub2RlLmVsbSwgbGlzdGVuZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHJlY3Vyc2l2ZWx5IGludm9rZSBob29rcyBvbiBjaGlsZCBjb21wb25lbnQgcm9vdCBub2RlXG4gICAgICAgICAgICBpZiAoaXNEZWYoKGlfMyA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkgJiZcbiAgICAgICAgICAgICAgICBpc0RlZigoaV8zID0gaV8zLl92bm9kZSkpICYmXG4gICAgICAgICAgICAgICAgaXNEZWYoaV8zLmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayhpXzMsIHJtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoaV8zID0gMDsgaV8zIDwgY2JzLnJlbW92ZS5sZW5ndGg7ICsraV8zKSB7XG4gICAgICAgICAgICAgICAgY2JzLnJlbW92ZVtpXzNdKHZub2RlLCBybSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNEZWYoKGlfMyA9IHZub2RlLmRhdGEuaG9vaykpICYmIGlzRGVmKChpXzMgPSBpXzMucmVtb3ZlKSkpIHtcbiAgICAgICAgICAgICAgICBpXzModm5vZGUsIHJtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJtKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHZub2RlLmVsbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlQ2hpbGRyZW4ocGFyZW50RWxtLCBvbGRDaCwgbmV3Q2gsIGluc2VydGVkVm5vZGVRdWV1ZSwgcmVtb3ZlT25seSkge1xuICAgICAgICB2Y
13835XIgb2xkU3RhcnRJZHggPSAwO1xuICAgICAgICB2YXIgbmV3U3RhcnRJZHggPSAwO1xuICAgICAgICB2YXIgb2xkRW5kSWR4ID0gb2xkQ2gubGVuZ3RoIC0gMTtcbiAgICAgICAgdmFyIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFswXTtcbiAgICAgICAgdmFyIG9sZEVuZFZub2RlID0gb2xkQ2hbb2xkRW5kSWR4XTtcbiAgICAgICAgdmFyIG5ld0VuZElkeCA9IG5ld0NoLmxlbmd0aCAtIDE7XG4gICAgICAgIHZhciBuZXdTdGFydFZub2RlID0gbmV3Q2hbMF07XG4gICAgICAgIHZhciBuZXdFbmRWbm9kZSA9IG5ld0NoW25ld0VuZElkeF07XG4gICAgICAgIHZhciBvbGRLZXlUb0lkeCwgaWR4SW5PbGQsIHZub2RlVG9Nb3ZlLCByZWZFbG07XG4gICAgICAgIC8vIHJlbW92ZU9ubHkgaXMgYSBzcGVjaWFsIGZsYWcgdXNlZCBvbmx5IGJ5IDx0cmFuc2l0aW9uLWdyb3VwPlxuICAgICAgICAvLyB0byBlbnN1cmUgcmVtb3ZlZCBlbGVtZW50cyBzdGF5IGluIGNvcnJlY3QgcmVsYXRpdmUgcG9zaXRpb25zXG4gICAgICAgIC8vIGR1cmluZyBsZWF2aW5nIHRyYW5zaXRpb25zXG4gICAgICAgIHZhciBjYW5Nb3ZlID0gIXJlbW92ZU9ubHk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBjaGVja0R1cGxpY2F0ZUtleXMobmV3Q2gpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChvbGRTdGFydElkeCA8PSBvbGRFbmRJZHggJiYgbmV3U3RhcnRJZHggPD0gbmV3RW5kSWR4KSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZihvbGRTdGFydFZub2RlKSkge1xuICAgICAgICAgICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTsgLy8gVm5vZGUgaGFzIGJlZW4gbW92ZWQgbGVmdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNVbmRlZihvbGRFbmRWbm9kZSkpIHtcbiAgICAgICAgICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNhbWVWbm9kZShvbGRTdGFydFZub2RlLCBuZXdTdGFydFZub2RlKSkge1xuICAgICAgICAgICAgICAgIHBhdGNoVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTtcbiAgICAgICAgICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzYW1lVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlKSkge1xuICAgICAgICAgICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdFbmRJZHgpO1xuICAgICAgICAgICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICAgICAgICAgIG5ld0VuZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2FtZVZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld0VuZFZub2RlKSkge1xuICAgICAgICAgICAgICAgIC8vIFZub2RlIG1vdmVkIHJpZ2h0XG4gICAgICAgICAgICAgICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdFbmRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3RW5kSWR4KTtcbiAgICAgICAgICAgICAgICBjYW5Nb3ZlICYmXG4gICAgICAgICAgICAgICAgICAgIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIG5vZGVPcHMubmV4dFNpYmxpbmcob2xkRW5kVm5vZGUuZWxtKSk7XG4gICAgICAgICAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xuICAgICAgICAgICAgICAgIG5ld0VuZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2FtZVZub2RlKG9sZEVuZFZub2RlLCBuZXdTdGFydFZub2RlKSkge1xuICAgICAgICAgICAgICAgIC8vIFZub2RlIG1vdmVkIGxlZnRcbiAgICAgICAgICAgICAgICBwYXRjaFZub2RlKG9sZEVuZFZub2RlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgICAgICAgICAgY2FuTW92ZSAmJlxuICAgICAgICAgICAgICAgICAgICBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZEVuZFZub2RlLmVsbSwgb2xkU3RhcnRWbm9kZS5lbG0pO1xuICAgICAgICAgICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICAgICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmKG9sZEtleVRvSWR4KSlcbiAgICAgICAgICAgICAgICAgICAgb2xkS2V5VG9JZHggPSBjcmVhdGVLZXlUb09sZElkeChvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgICAgICAgICAgICAgaWR4SW5PbGQgPSBpc0RlZihuZXdTdGFydFZub2RlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgPyBvbGRLZXlUb0lkeFtuZXdTdGFydFZub2RlLmtleV1cbiAgICAgICAgICAgICAgICAgICAgOiBmaW5kSWR4SW5PbGQobmV3U3RhcnRWbm9kZSwgb2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpO1xuICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmKGlkeEluT2xkKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBOZXcgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVFbG0obmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBmYWxzZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZub2RlVG9Nb3ZlID0gb2xkQ2hbaWR4SW5PbGRdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2FtZVZub2RlKHZub2RlVG9Nb3Zl
13835LCBuZXdTdGFydFZub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hWbm9kZSh2bm9kZVRvTW92ZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2xkQ2hbaWR4SW5PbGRdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuTW92ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgdm5vZGVUb01vdmUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW1lIGtleSBidXQgZGlmZmVyZW50IGVsZW1lbnQuIHRyZWF0IGFzIG5ldyBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVFbG0obmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBmYWxzZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9sZFN0YXJ0SWR4ID4gb2xkRW5kSWR4KSB7XG4gICAgICAgICAgICByZWZFbG0gPSBpc1VuZGVmKG5ld0NoW25ld0VuZElkeCArIDFdKSA/IG51bGwgOiBuZXdDaFtuZXdFbmRJZHggKyAxXS5lbG07XG4gICAgICAgICAgICBhZGRWbm9kZXMocGFyZW50RWxtLCByZWZFbG0sIG5ld0NoLCBuZXdTdGFydElkeCwgbmV3RW5kSWR4LCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5ld1N0YXJ0SWR4ID4gbmV3RW5kSWR4KSB7XG4gICAgICAgICAgICByZW1vdmVWbm9kZXMob2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrRHVwbGljYXRlS2V5cyhjaGlsZHJlbikge1xuICAgICAgICB2Y
13835XIgc2VlbktleXMgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaV80ID0gMDsgaV80IDwgY2hpbGRyZW4ubGVuZ3RoOyBpXzQrKykge1xuICAgICAgICAgICAgdmFyIHZub2RlID0gY2hpbGRyZW5baV80XTtcbiAgICAgICAgICAgIHZhciBrZXkgPSB2bm9kZS5rZXk7XG4gICAgICAgICAgICBpZiAoaXNEZWYoa2V5KSkge1xuICAgICAgICAgICAgICAgIGlmIChzZWVuS2V5c1trZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4kMihcIkR1cGxpY2F0ZSBrZXlzIGRldGVjdGVkOiAnXCIuY29uY2F0KGtleSwgXCInLiBUaGlzIG1heSBjYXVzZSBhbiB1cGRhdGUgZXJyb3IuXCIpLCB2bm9kZS5jb250ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5LZXlzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kSWR4SW5PbGQobm9kZSwgb2xkQ2gsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgZm9yICh2YXIgaV81ID0gc3RhcnQ7IGlfNSA8IGVuZDsgaV81KyspIHtcbiAgICAgICAgICAgIHZhciBjID0gb2xkQ2hbaV81XTtcbiAgICAgICAgICAgIGlmIChpc0RlZihjKSAmJiBzYW1lVm5vZGUobm9kZSwgYykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGlfNTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwYXRjaFZub2RlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBvd25lckFycmF5LCBpbmRleCwgcmVtb3ZlT25seSkge1xuICAgICAgICBpZiAob2xkVm5vZGUgPT09IHZub2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGVmKHZub2RlLmVsbSkgJiYgaXNEZWYob3duZXJBcnJheSkpIHtcbiAgICAgICAgICAgIC8vIGNsb25lIHJldXNlZCB2bm9kZVxuICAgICAgICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlbG0gPSAodm5vZGUuZWxtID0gb2xkVm5vZGUuZWxtKTtcbiAgICAgICAgaWYgKGlzVHJ1ZShvbGRWbm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIpKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWYodm5vZGUuYXN5bmNGYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICAgICAgICAgIGh5ZHJhdGUob2xkVm5vZGUuZWxtLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZub2RlLmlzQXN5bmNQbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmV1c2UgZWxlbWVudCBmb3Igc3RhdGljIHRyZWVzLlxuICAgICAgICAvLyBub3RlIHdlIG9ubHkgZG8gdGhpcyBpZiB0aGUgdm5vZGUgaXMgY2xvbmVkIC1cbiAgICAgICAgLy8gaWYgdGhlIG5ldyBub2RlIGlzIG5vdCBjbG9uZWQgaXQgbWVhbnMgdGhlIHJlbmRlciBmdW5jdGlvbnMgaGF2ZSBiZWVuXG4gICAgICAgIC8vIHJlc2V0IGJ5IHRoZSBob3QtcmVsb2FkLWFwaSBhbmQgd2UgbmVlZCB0byBkbyBhIHByb3BlciByZS1yZW5kZXIuXG4gICAgICAgIGlmIChpc1RydWUodm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICAgICAgICBpc1RydWUob2xkVm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICAgICAgICB2bm9kZS5rZXkgPT09IG9sZFZub2RlLmtleSAmJlxuICAgICAgICAgICAgKGlzVHJ1ZSh2bm9kZS5pc0Nsb25lZCkgfHwgaXNUcnVlKHZub2RlLmlzT25jZSkpKSB7XG4gICAgICAgICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IG9sZFZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpO1xuICAgICAgICB2Y
13835XIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZigoaSA9IGRhdGEuaG9vaykpICYmIGlzRGVmKChpID0gaS5wcmVwYXRjaCkpKSB7XG4gICAgICAgICAgICBpKG9sZFZub2RlLCB2bm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9sZENoID0gb2xkVm5vZGUuY2hpbGRyZW47XG4gICAgICAgIHZhciBjaCA9IHZub2RlLmNoaWxkcmVuO1xuICAgICAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNQYXRjaGFibGUodm5vZGUpKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnVwZGF0ZS5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICBjYnMudXBkYXRlW2ldKG9sZFZub2RlLCB2bm9kZSk7XG4gICAgICAgICAgICBpZiAoaXNEZWYoKGkgPSBkYXRhLmhvb2spKSAmJiBpc0RlZigoaSA9IGkudXBkYXRlKSkpXG4gICAgICAgICAgICAgICAgaShvbGRWbm9kZSwgdm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1VuZGVmKHZub2RlLnRleHQpKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWYob2xkQ2gpICYmIGlzRGVmKGNoKSkge1xuICAgICAgICAgICAgICAgIGlmIChvbGRDaCAhPT0gY2gpXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNoaWxkcmVuKGVsbSwgb2xkQ2gsIGNoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNEZWYoY2gpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKGNoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKVxuICAgICAgICAgICAgICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpO1xuICAgICAgICAgICAgICAgIGFkZFZub2RlcyhlbG0sIG51bGwsIGNoLCAwLCBjaC5sZW5ndGggLSAxLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNEZWYob2xkQ2gpKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlVm5vZGVzKG9sZENoLCAwLCBvbGRDaC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKSB7XG4gICAgICAgICAgICAgICAgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvbGRWbm9kZS50ZXh0ICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgdm5vZGUudGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWYoKGkgPSBkYXRhLmhvb2spKSAmJiBpc0RlZigoaSA9IGkucG9zdHBhdGNoKSkpXG4gICAgICAgICAgICAgICAgaShvbGRWbm9kZSwgdm5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGludm9rZUluc2VydEhvb2sodm5vZGUsIHF1ZXVlLCBpbml0aWFsKSB7XG4gICAgICAgIC8vIGRlbGF5IGluc2VydCBob29rcyBmb3IgY29tcG9uZW50IHJvb3Qgbm9kZXMsIGludm9rZSB0aGVtIGFmdGVyIHRoZVxuICAgICAgICAvLyBlbGVtZW50IGlzIHJlYWxseSBpbnNlcnRlZFxuICAgICAgICBpZiAoaXNUcnVlKGluaXRpYWwpICYmIGlzRGVmKHZub2RlLnBhcmVudCkpIHtcbiAgICAgICAgICAgIHZub2RlLnBhcmVudC5kYXRhLnBlbmRpbmdJbnNlcnQgPSBxdWV1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAodmFyIGlfNiA9IDA7IGlfNiA8IHF1ZXVlLmxlbmd0aDsgKytpXzYpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZVtpXzZdLmRhdGEuaG9vay5pbnNlcnQocXVldWVbaV82XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIGh5ZHJhdGlvbkJhaWxlZCA9IGZhbHNlO1xuICAgIC8vIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IGNhbiBza2lwIGNyZWF0ZSBob29rIGR1cmluZyBoeWRyYXRpb24gYmVjYXVzZSB0aGV5XG4gICAgLy8gYXJlIGFscmVhZHkgcmVuZGVyZWQgb24gdGhlIGNsaWVudCBvciBoYXMgbm8gbmVlZCBmb3IgaW5pdGlhbGl6YXRpb25cbiAgICAvLyBOb3RlOiBzdHlsZSBpcyBleGNsdWRlZCBiZWNhdXNlIGl0IHJlbGllcyBvbiBpbml0aWFsIGNsb25lIGZvciBmdXR1cmVcbiAgICAvLyBkZWVwIHVwZGF0ZXMgKCM3MDYzKS5cbiAgICB2YXIgaXNSZW5kZXJlZE1vZHVsZSA9IG1ha2VNYXAoJ2F0dHJzLGNsYXNzLHN0YXRpY0NsYXNzLHN0YXRpY1N0eWxlLGtleScpO1xuICAgIC8vIE5vdGU6IHRoaXMgaXMgYSBicm93c2VyLW9ubHkgZnVuY3Rpb24gc28gd2UgY2FuIGFzc3VtZSBlbG1zIGFyZSBET00gbm9kZXMuXG4gICAgZnVuY3Rpb24gaHlkcmF0ZShlbG0sIHZub2Rl
13835LCBpbnNlcnRlZFZub2RlUXVldWUsIGluVlByZSkge1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgdmFyIHRhZyA9IHZub2RlLnRhZywgZGF0YSA9IHZub2RlLmRhdGEsIGNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW47XG4gICAgICAgIGluVlByZSA9IGluVlByZSB8fCAoZGF0YSAmJiBkYXRhLnByZSk7XG4gICAgICAgIHZub2RlLmVsbSA9IGVsbTtcbiAgICAgICAgaWYgKGlzVHJ1ZSh2bm9kZS5pc0NvbW1lbnQpICYmIGlzRGVmKHZub2RlLmFzeW5jRmFjdG9yeSkpIHtcbiAgICAgICAgICAgIHZub2RlLmlzQXN5bmNQbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhc3NlcnQgbm9kZSBtYXRjaFxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgaWYgKCFhc3NlcnROb2RlTWF0Y2goZWxtLCB2bm9kZSwgaW5WUHJlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IGRhdGEuaG9vaykpICYmIGlzRGVmKChpID0gaS5pbml0KSkpXG4gICAgICAgICAgICAgICAgaSh2bm9kZSwgdHJ1ZSAvKiBoeWRyYXRpbmcgKi8pO1xuICAgICAgICAgICAgaWYgKGlzRGVmKChpID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSkge1xuICAgICAgICAgICAgICAgIC8vIGNoaWxkIGNvbXBvbmVudC4gaXQgc2hvdWxkIGhhdmUgaHlkcmF0ZWQgaXRzIG93biB0cmVlLlxuICAgICAgICAgICAgICAgIGluaXRDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGVmKHRhZykpIHtcbiAgICAgICAgICAgIGlmIChpc0RlZihjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICAvLyBlbXB0eSBlbGVtZW50LCBhbGxvdyBjbGllbnQgdG8gcGljayB1cCBhbmQgcG9wdWxhdGUgY2hpbGRyZW5cbiAgICAgICAgICAgICAgICBpZiAoIWVsbS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdi1odG1sIGFuZCBkb21Qcm9wczogaW5uZXJIVE1MXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IGRhdGEpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaXNEZWYoKGkgPSBpLmRvbVByb3BzKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRGVmKChpID0gaS5pbm5lckhUTUwpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IGVsbS5pbm5lckhUTUwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWh5ZHJhdGlvbkJhaWxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeWRyYXRpb25CYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BhcmVudDogJywgZWxtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdzZXJ2ZXIgaW5uZXJIVE1MOiAnLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdjbGllbnQgaW5uZXJIVE1MOiAnLCBlbG0uaW5uZXJIVE1MKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXRlcmF0ZSBhbmQgY29tcGFyZSBjaGlsZHJlbiBsaXN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkTm9kZSA9IGVsbS5maXJzdENoaWxkO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaV83ID0gMDsgaV83IDwgY2hpbGRyZW4ubGVuZ3RoOyBpXzcrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2hpbGROb2RlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoeWRyYXRlKGNoaWxkTm9kZSwgY2hpbGRyZW5baV83XSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGNoaWxkTm9kZSBpcyBub3QgbnVsbCwgaXQgbWVhbnMgdGhlIGFjdHVhbCBjaGlsZE5vZGVzIGxpc3QgaXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvbmdlciB0aGFuIHRoZSB2aXJ0dWFsIGNoaWxkcmVuIGxpc3QuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuTWF0Y2ggfHwgY2hpbGROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
13835FoeWRyYXRpb25CYWlsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHlkcmF0aW9uQmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYXJlbnQ6ICcsIGVsbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTWlzbWF0Y2hpbmcgY2hpbGROb2RlcyB2cy4gVk5vZGVzOiAnLCBlbG0uY2hpbGROb2RlcywgY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZnVsbEludm9rZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNSZW5kZXJlZE1vZHVsZShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdWxsSW52b2tlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFmdWxsSW52b2tlICYmIGRhdGFbJ2NsYXNzJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlIGNvbGxlY3RpbmcgZGVwcyBmb3IgZGVlcCBjbGFzcyBiaW5kaW5ncyBmb3IgZnV0dXJlIHVwZGF0ZXNcbiAgICAgICAgICAgICAgICAgICAgdHJhdmVyc2UoZGF0YVsnY2xhc3MnXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGVsbS5kYXRhICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICAgICAgICBlbG0uZGF0YSA9IHZub2RlLnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFzc2VydE5vZGVNYXRjaChub2RlLCB2bm9kZSwgaW5WUHJlKSB7XG4gICAgICAgIGlmIChpc0RlZih2bm9kZS50YWcpKSB7XG4gICAgICAgICAgICByZXR1cm4gKHZub2RlLnRhZy5pbmRleE9mKCd2dWUtY29tcG9uZW50JykgPT09IDAgfHxcbiAgICAgICAgICAgICAgICAoIWlzVW5rbm93bkVsZW1lbnQodm5vZGUsIGluVlByZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgdm5vZGUudGFnLnRvTG93ZXJDYXNlKCkgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAobm9kZS50YWdOYW1lICYmIG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09ICh2bm9kZS5pc0NvbW1lbnQgPyA4IDogMyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoKG9sZFZub2RlLCB2bm9kZSwgaHlkcmF0aW5nLCByZW1vdmVPbmx5KSB7XG4gICAgICAgIGlmIChpc1VuZGVmKHZub2RlKSkge1xuICAgICAgICAgICAgaWYgKGlzRGVmKG9sZFZub2RlKSlcbiAgICAgICAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhvbGRWbm9kZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlzSW5pdGlhbFBhdGNoID0gZmFsc2U7XG4gICAgICAgIHZhciBpbnNlcnRlZFZub2RlUXVldWUgPSBbXTtcbiAgICAgICAgaWYgKGlzVW5kZWYob2xkVm5vZGUpKSB7XG4gICAgICAgICAgICAvLyBlbXB0eSBtb3VudCAobGlrZWx5IGFzIGNvbXBvbmVudCksIGNyZWF0ZSBuZXcgcm9vdCBlbGVtZW50XG4gICAgICAgICAgICBpc0luaXRpYWxQYXRjaCA9IHRydWU7XG4gICAgICAgICAgICBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2Y
13835XIgaXNSZWFsRWxlbWVudCA9IGlzRGVmKG9sZFZub2RlLm5vZGVUeXBlKTtcbiAgICAgICAgICAgIGlmICghaXNSZWFsRWxlbWVudCAmJiBzYW1lVm5vZGUob2xkVm5vZGUsIHZub2RlKSkge1xuICAgICAgICAgICAgICAgIC8vIHBhdGNoIGV4aXN0aW5nIHJvb3Qgbm9kZVxuICAgICAgICAgICAgICAgIHBhdGNoVm5vZGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG51bGwsIG51bGwsIHJlbW92ZU9ubHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVhbEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbW91bnRpbmcgdG8gYSByZWFsIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhpcyBpcyBzZXJ2ZXItcmVuZGVyZWQgY29udGVudCBhbmQgaWYgd2UgY2FuIHBlcmZvcm1cbiAgICAgICAgICAgICAgICAgICAgLy8gYSBzdWNjZXNzZnVsIGh5ZHJhdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFZub2RlLm5vZGVUeXBlID09PSAxICYmIG9sZFZub2RlLmhhc0F0dHJpYnV0ZShTU1JfQVRUUikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9sZFZub2RlLnJlbW92ZUF0dHJpYnV0ZShTU1JfQVRUUik7XG4gICAgICAgICAgICAgICAgICAgICAgICBoeWRyYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1RydWUoaHlkcmF0aW5nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGh5ZHJhdGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlSW5zZXJ0SG9vayh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2xkVm5vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybiQyKCdUaGUgY2xpZW50LXNpZGUgcmVuZGVyZWQgdmlydHVhbCBET00gdHJlZSBpcyBub3QgbWF0Y2hpbmcgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZXJ2ZXItcmVuZGVyZWQgY29udGVudC4gVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IGluY29ycmVjdCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hUTUwgbWFya3VwLCBmb3IgZXhhbXBsZSBuZXN0aW5nIGJsb2NrLWxldmVsIGVsZW1lbnRzIGluc2lkZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxwPiwgb3IgbWlzc2luZyA8dGJvZHk+LiBCYWlsaW5nIGh5ZHJhdGlvbiBhbmQgcGVyZm9ybWluZyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Z1bGwgY2xpZW50LXNpZGUgcmVuZGVyLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGVpdGhlciBub3Qgc2VydmVyLXJlbmRlcmVkLCBvciBoeWRyYXRpb24gZmFpbGVkLlxuICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbm9kZSBhbmQgcmVwbGFjZSBpdFxuICAgICAgICAgICAgICAgICAgICBvbGRWbm9kZSA9IGVtcHR5Tm9kZUF0KG9sZFZub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcmVwbGFjaW5nIGV4aXN0aW5nIGVsZW1lbnRcbiAgICAgICAgICAgICAgICB2Y
13835XIgb2xkRWxtID0gb2xkVm5vZGUuZWxtO1xuICAgICAgICAgICAgICAgIHZhciBwYXJlbnRFbG0gPSBub2RlT3BzLnBhcmVudE5vZGUob2xkRWxtKTtcbiAgICAgICAgICAgICAgICAvLyBjcmVhdGUgbmV3IG5vZGVcbiAgICAgICAgICAgICAgICBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgXG4gICAgICAgICAgICAgICAgLy8gZXh0cmVtZWx5IHJhcmUgZWRnZSBjYXNlOiBkbyBub3QgaW5zZXJ0IGlmIG9sZCBlbGVtZW50IGlzIGluIGFcbiAgICAgICAgICAgICAgICAvLyBsZWF2aW5nIHRyYW5zaXRpb24uIE9ubHkgaGFwcGVucyB3aGVuIGNvbWJpbmluZyB0cmFuc2l0aW9uICtcbiAgICAgICAgICAgICAgICAvLyBrZWVwLWFsaXZlICsgSE9Dcy4gKCM0NTkwKVxuICAgICAgICAgICAgICAgIG9sZEVsbS5fbGVhdmVDYiA/IG51bGwgOiBwYXJlbnRFbG0sIG5vZGVPcHMubmV4dFNpYmxpbmcob2xkRWxtKSk7XG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHBhcmVudCBwbGFjZWhvbGRlciBub2RlIGVsZW1lbnQsIHJlY3Vyc2l2ZWx5XG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmKHZub2RlLnBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFuY2VzdG9yID0gdm5vZGUucGFyZW50O1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGF0Y2hhYmxlID0gaXNQYXRjaGFibGUodm5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYW5jZXN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGlfOCA9IDA7IGlfOCA8IGNicy5kZXN0cm95Lmxlbmd0aDsgKytpXzgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYnMuZGVzdHJveVtpXzhdKGFuY2VzdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLmVsbSA9IHZub2RlLmVsbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXRjaGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpXzkgPSAwOyBpXzkgPCBjYnMuY3JlYXRlLmxlbmd0aDsgKytpXzkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2JzLmNyZWF0ZVtpXzldKGVtcHR5Tm9kZSwgYW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAjNjUxM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludm9rZSBpbnNlcnQgaG9va3MgdGhhdCBtYXkgaGF2ZSBiZWVuIG1lcmdlZCBieSBjcmVhdGUgaG9va3MuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZS5nLiBmb3IgZGlyZWN0aXZlcyB0aGF0IHVzZXMgdGhlIFwiaW5zZXJ0ZWRcIiBob29rLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnNlcnRfMSA9IGFuY2VzdG9yLmRhdGEuaG9vay5pbnNlcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydF8xLm1lcmdlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGFydCBhdCBpbmRleCAxIHRvIGF2b2lkIHJlLWludm9raW5nIGNvbXBvbmVudCBtb3VudGVkIGhvb2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaV8xMCA9IDE7IGlfMTAgPCBpbnNlcnRfMS5mbnMubGVuZ3RoOyBpXzEwKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydF8xLmZuc1tpXzEwXSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJSZWYoYW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZGVzdHJveSBvbGQgbm9kZVxuICAgICAgICAgICAgICAgIGlmIChpc0RlZihwYXJlbnRFbG0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVZub2Rlcyhbb2xkVm5vZGVdLCAwLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNEZWYob2xkVm5vZGUudGFnKSkge1xuICAgICAgICAgICAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhvbGRWbm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGludm9rZUluc2VydEhvb2sodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgaXNJbml0aWFsUGF0Y2gpO1xuICAgICAgICByZXR1cm4gdm5vZGUuZWxtO1xuICAgIH07XG59XG5cbnZhciBkaXJlY3RpdmVzJDEgPSB7XG4gICAgY3JlYXRlOiB1cGRhdGVEaXJlY3RpdmVzLFxuICAgIHVwZGF0ZTogdXBkYXRlRGlyZWN0aXZlcyxcbiAgICBkZXN0cm95OiBmdW5jdGlvbiB1bmJpbmREaXJlY3RpdmVzKHZub2RlKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZW1wdHlOb2RlIGlzIG5vdCBWTm9kZVdpdGhEYXRhXG4gICAgICAgIHVwZGF0ZURpcmVjdGl2ZXModm5vZGUsIGVtcHR5Tm9kZSk7XG4gICAgfVxufTtcbmZ1bmN0aW9uIHVwZGF0ZURpcmVjdGl2ZXMob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKG9sZFZub2RlLmRhdGEuZGlyZWN0aXZlcyB8fCB2bm9kZS5kYXRhLmRpcmVjdGl2ZXMpIHtcbiAgICAgICAgX3VwZGF0ZShvbGRWbm9kZSwgdm5vZGUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF91cGRhdGUob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgdmFyIGlzQ3JlYXRlID0gb2xkVm5vZGUgPT09IGVtcHR5Tm9kZTtcbiAgICB2YXIgaXNEZXN0cm95ID0gdm5vZGUgPT09IGVtcHR5Tm9kZTtcbiAgICB2YXIgb2xkRGlycyA9IG5vcm1hbGl6ZURpcmVjdGl2ZXMob2xkVm5vZGUuZGF0YS5kaXJlY3RpdmVzLCBvbGRWbm9kZS5jb250ZXh0KTtcbiAgICB2YXIgbmV3RGlycyA9IG5vcm1hbGl6ZURpcmVjdGl2ZXModm5vZGUuZGF0YS5kaXJlY3RpdmVzLCB2bm9kZS5jb250ZXh0KTtcbiAgICB2YXIgZGlyc1dpdGhJbnNlcnQgP
13835SBbXTtcbiAgICB2YXIgZGlyc1dpdGhQb3N0cGF0Y2ggPSBbXTtcbiAgICB2YXIga2V5LCBvbGREaXIsIGRpcjtcbiAgICBmb3IgKGtleSBpbiBuZXdEaXJzKSB7XG4gICAgICAgIG9sZERpciA9IG9sZERpcnNba2V5XTtcbiAgICAgICAgZGlyID0gbmV3RGlyc1trZXldO1xuICAgICAgICBpZiAoIW9sZERpcikge1xuICAgICAgICAgICAgLy8gbmV3IGRpcmVjdGl2ZSwgYmluZFxuICAgICAgICAgICAgY2FsbEhvb2soZGlyLCAnYmluZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICAgICAgICBpZiAoZGlyLmRlZiAmJiBkaXIuZGVmLmluc2VydGVkKSB7XG4gICAgICAgICAgICAgICAgZGlyc1dpdGhJbnNlcnQucHVzaChkaXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZXhpc3RpbmcgZGlyZWN0aXZlLCB1cGRhdGVcbiAgICAgICAgICAgIGRpci5vbGRWYWx1ZSA9IG9sZERpci52YWx1ZTtcbiAgICAgICAgICAgIGRpci5vbGRBcmcgPSBvbGREaXIuYXJnO1xuICAgICAgICAgICAgY2FsbEhvb2soZGlyLCAndXBkYXRlJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgICAgICAgIGlmIChkaXIuZGVmICYmIGRpci5kZWYuY29tcG9uZW50VXBkYXRlZCkge1xuICAgICAgICAgICAgICAgIGRpcnNXaXRoUG9zdHBhdGNoLnB1c2goZGlyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGlyc1dpdGhJbnNlcnQubGVuZ3RoKSB7XG4gICAgICAgIHZhciBjYWxsSW5zZXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXJzV2l0aEluc2VydC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNhbGxIb29rKGRpcnNXaXRoSW5zZXJ0W2ldLCAnaW5zZXJ0ZWQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAoaXNDcmVhdGUpIHtcbiAgICAgICAgICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAnaW5zZXJ0JywgY2FsbEluc2VydCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsSW5zZXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRpcnNXaXRoUG9zdHBhdGNoLmxlbmd0aCkge1xuICAgICAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ3Bvc3RwYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhQb3N0cGF0Y2gubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjYWxsSG9vayhkaXJzV2l0aFBvc3RwYXRjaFtpXSwgJ2NvbXBvbmVudFVwZGF0ZWQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCFpc0NyZWF0ZSkge1xuICAgICAgICBmb3IgKGtleSBpbiBvbGREaXJzKSB7XG4gICAgICAgICAgICBpZiAoIW5ld0RpcnNba2V5XSkge1xuICAgICAgICAgICAgICAgIC8vIG5vIGxvbmdlciBwcmVzZW50LCB1bmJpbmRcbiAgICAgICAgICAgICAgICBjYWxsSG9vayhvbGREaXJzW2tleV0sICd1bmJpbmQnLCBvbGRWbm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG52YXIgZW1wdHlNb2RpZmllcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyhkaXJzLCB2bSkge1xuICAgIHZhciByZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGlmICghZGlycykge1xuICAgICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgdmFyIGksIGRpcjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgZGlycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBkaXIgPSBkaXJzW2ldO1xuICAgICAgICBpZiAoIWRpci5tb2RpZmllcnMpIHtcbiAgICAgICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICAgICAgZGlyLm1vZGlmaWVycyA9IGVtcHR5TW9kaWZpZXJzO1xuICAgICAgICB9XG4gICAgICAgIHJlc1tnZXRSYXdEaXJOYW1lKGRpcildID0gZGlyO1xuICAgICAgICBpZiAodm0uX3NldHVwU3RhdGUgJiYgdm0uX3NldHVwU3RhdGUuX19zZmMpIHtcbiAgICAgICAgICAgIHZhciBzZXR1cERlZiA9IGRpci5kZWYgfHwgcmVzb2x2ZUFzc2V0KHZtLCAnX3NldHVwU3RhdGUnLCAndi0nICsgZGlyLm5hbWUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzZXR1cERlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGRpci5kZWYgPSB7XG4gICAgICAgICAgICAgICAgICAgIGJpbmQ6IHNldHVwRGVmLFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGU6IHNldHVwRGVmLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXIuZGVmID0gc2V0dXBEZWY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGlyLmRlZiA9IGRpci5kZWYgfHwgcmVzb2x2ZUFzc2V0KHZtLiRvcHRpb25zLCAnZGlyZWN0aXZlcycsIGRpci5uYW1lLCB0cnVlKTtcbiAgICB9XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIGdldFJhd0Rpck5hbWUoZGlyKSB7XG4gICAgcmV0dXJuIChkaXIucmF3TmFtZSB8fCBcIlwiLmNvbmNhdChkaXIubmFtZSwgXCIuXCIpLmNvbmNhdChPYmplY3Qua2V5cyhkaXIubW9kaWZpZXJzIHx8IHt9KS5qb2luKCcuJykpKTtcbn1cbmZ1bmN0aW9uIGNhbGxIb29rKGRpciwgaG9vaywgdm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpIHtcbiAgICB2YXIgZm4gPSBkaXIuZGVmICYmIGRpci5kZWZbaG9va107XG4gICAgaWYgKGZuKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmbih2bm9kZS5lbG0sIGRpciwgdm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBoYW5kbGVFcnJvcihlLCB2bm9kZS5jb250ZXh0LCBcImRpcmVjdGl2ZSBcIi5jb25jYXQoZGlyLm5hbWUsIFwiIFwiKS5jb25jYXQoaG9vaywgXCIgaG9va1wiKSk7XG4gICAgICAgI
13835H1cbiAgICB9XG59XG5cbnZhciBiYXNlTW9kdWxlcyA9IFtyZWYsIGRpcmVjdGl2ZXMkMV07XG5cbmZ1bmN0aW9uIHVwZGF0ZUF0dHJzKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIHZhciBvcHRzID0gdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICBpZiAoaXNEZWYob3B0cykgJiYgb3B0cy5DdG9yLm9wdGlvbnMuaW5oZXJpdEF0dHJzID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEuYXR0cnMpICYmIGlzVW5kZWYodm5vZGUuZGF0YS5hdHRycykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIga2V5LCBjdXIsIG9sZDtcbiAgICB2YXIgZWxtID0gdm5vZGUuZWxtO1xuICAgIHZhciBvbGRBdHRycyA9IG9sZFZub2RlLmRhdGEuYXR0cnMgfHwge307XG4gICAgdmFyIGF0dHJzID0gdm5vZGUuZGF0YS5hdHRycyB8fCB7fTtcbiAgICAvLyBjbG9uZSBvYnNlcnZlZCBvYmplY3RzLCBhcyB0aGUgdXNlciBwcm9iYWJseSB3YW50cyB0byBtdXRhdGUgaXRcbiAgICBpZiAoaXNEZWYoYXR0cnMuX19vYl9fKSB8fCBpc1RydWUoYXR0cnMuX3ZfYXR0cl9wcm94eSkpIHtcbiAgICAgICAgYXR0cnMgPSB2bm9kZS5kYXRhLmF0dHJzID0gZXh0ZW5kKHt9LCBhdHRycyk7XG4gICAgfVxuICAgIGZvciAoa2V5IGluIGF0dHJzKSB7XG4gICAgICAgIGN1ciA9IGF0dHJzW2tleV07XG4gICAgICAgIG9sZCA9IG9sZEF0dHJzW2tleV07XG4gICAgICAgIGlmIChvbGQgIT09IGN1cikge1xuICAgICAgICAgICAgc2V0QXR0cihlbG0sIGtleSwgY3VyLCB2bm9kZS5kYXRhLnByZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gIzQzOTE6IGluIElFOSwgc2V0dGluZyB0eXBlIGNhbiByZXNldCB2YWx1ZSBmb3IgaW5wdXRbdHlwZT1yYWRpb11cbiAgICAvLyAjNjY2NjogSUUvRWRnZSBmb3JjZXMgcHJvZ3Jlc3MgdmFsdWUgZG93biB0byAxIGJlZm9yZSBzZXR0aW5nIGEgbWF4XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKChpc0lFIHx8IGlzRWRnZSkgJiYgYXR0cnMudmFsdWUgIT09IG9sZEF0dHJzLnZhbHVlKSB7XG4gICAgICAgIHNldEF0dHIoZWxtLCAndmFsdWUnLCBhdHRycy52YWx1ZSk7XG4gICAgfVxuICAgIGZvciAoa2V5IGluIG9sZEF0dHJzKSB7XG4gICAgICAgIGlmIChpc1VuZGVmKGF0dHJzW2tleV0pKSB7XG4gICAgICAgICAgICBpZiAoaXNYbGluayhrZXkpKSB7XG4gICAgICAgICAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZU5TKHhsaW5rTlMsIGdldFhsaW5rUHJvcChrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFpc0VudW1lcmF0ZWRBdHRyKGtleSkpIHtcbiAgICAgICAgICAgICAgICBlbG0ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBzZXRBdHRyKGVsLCBrZXksIHZhbHVlLCBpc0luUHJlKSB7XG4gICAgaWYgKGlzSW5QcmUgfHwgZWwudGFnTmFtZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgICAgICBiYXNlU2V0QXR0cihlbCwga2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQm9vbGVhbkF0dHIoa2V5KSkge1xuICAgICAgICAvLyBzZXQgYXR0cmlidXRlIGZvciBibGFuayB2YWx1ZVxuICAgICAgICAvLyBlLmcuIDxvcHRpb24gZGlzYWJsZWQ+U2VsZWN0IG9uZTwvb3B0aW9uPlxuICAgICAgICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gdGVjaG5pY2FsbHkgYWxsb3dmdWxsc2NyZWVuIGlzIGEgYm9vbGVhbiBhdHRyaWJ1dGUgZm9yIDxpZnJhbWU+LFxuICAgICAgICAgICAgLy8gYnV0IEZsYXNoIGV4cGVjdHMgYSB2YWx1ZSBvZiBcInRydWVcIiB3aGVuIHVzZWQgb24gPGVtYmVkPiB0YWdcbiAgICAgICAgICAgIHZhbHVlID0ga2V5ID09PSAnYWxsb3dmdWxsc2NyZWVuJyAmJiBlbC50YWdOYW1lID09PSAnRU1CRUQnID8gJ3RydWUnIDoga2V5O1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRW51bWVyYXRlZEF0dHIoa2V5KSkge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCBjb252ZXJ0RW51bWVyYXRlZFZhbHVlKGtleSwgdmFsdWUpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNYbGluayhrZXkpKSB7XG4gICAgICAgIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlTlMoeGxpbmtOUywgZ2V0WGxpbmtQcm9wKGtleSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlTlMoeGxpbmtOUywga2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGJhc2VTZXRBdHRyKGVsLCBrZXksIHZhbHVlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBiYXNlU2V0QXR0cihlbCwga2V5LCB2YWx1ZSkge1xuICAgIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xuICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vICM3MTM4OiBJRTEwICYgMTEgZmlyZXMgaW5wdXQgZXZlbnQgd2hlbiBzZXR0aW5nIHBsYWNlaG9sZGVyIG9uXG4gICAgICAgIC8vIDx0ZXh0YXJlYT4uLi4gYmxvY2sgdGhlIGZpcnN0IGlucHV0IGV2ZW50IGFuZCByZW1vdmUgdGhlIGJsb2NrZXJcbiAgICAgICAgLy8gaW1tZWRpYXRlbHkuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoaXNJRSAmJlxuICAgICAgICAgICAgIWlzSUU5ICYmXG4gICAgICAgICAgICBlbC50YWdOYW1lID09PSAnVEVYVEFSRUEnICYmXG4gICAgICAgICAgICBrZXkgPT09ICdwbGFjZWhvbGRlcicgJiZcbiAgICAgICAgICAgIHZhbHVlICE9PSAnJyAmJlxuICAgICAgICAgICAgIWVsLl9faWVwaCkge1xuICAgICAgICAgICAgdmFyIGJsb2NrZXJfMSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJv
13835cGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIGJsb2NrZXJfMSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBibG9ja2VyXzEpO1xuICAgICAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgICAgICBlbC5fX2llcGggPSB0cnVlOyAvKiBJRSBwbGFjZWhvbGRlciBwYXRjaGVkICovXG4gICAgICAgIH1cbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgIH1cbn1cbnZhciBhdHRycyA9IHtcbiAgICBjcmVhdGU6IHVwZGF0ZUF0dHJzLFxuICAgIHVwZGF0ZTogdXBkYXRlQXR0cnNcbn07XG5cbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgdmFyIG9sZERhdGEgPSBvbGRWbm9kZS5kYXRhO1xuICAgIGlmIChpc1VuZGVmKGRhdGEuc3RhdGljQ2xhc3MpICYmXG4gICAgICAgIGlzVW5kZWYoZGF0YS5jbGFzcykgJiZcbiAgICAgICAgKGlzVW5kZWYob2xkRGF0YSkgfHxcbiAgICAgICAgICAgIChpc1VuZGVmKG9sZERhdGEuc3RhdGljQ2xhc3MpICYmIGlzVW5kZWYob2xkRGF0YS5jbGFzcykpKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjbHMgPSBnZW5DbGFzc0ZvclZub2RlKHZub2RlKTtcbiAgICAvLyBoYW5kbGUgdHJhbnNpdGlvbiBjbGFzc2VzXG4gICAgdmFyIHRyYW5zaXRpb25DbGFzcyA9IGVsLl90cmFuc2l0aW9uQ2xhc3NlcztcbiAgICBpZiAoaXNEZWYodHJhbnNpdGlvbkNsYXNzKSkge1xuICAgICAgICBjbHMgPSBjb25jYXQoY2xzLCBzdHJpbmdpZnlDbGFzcyh0cmFuc2l0aW9uQ2xhc3MpKTtcbiAgICB9XG4gICAgLy8gc2V0IHRoZSBjbGFzc1xuICAgIGlmIChjbHMgIT09IGVsLl9wcmV2Q2xhc3MpIHtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIGNscyk7XG4gICAgICAgIGVsLl9wcmV2Q2xhc3MgPSBjbHM7XG4gICAgfVxufVxudmFyIGtsYXNzJDEgPSB7XG4gICAgY3JlYXRlOiB1cGRhdGVDbGFzcyxcbiAgICB1cGRhdGU6IHVwZGF0ZUNsYXNzXG59O1xuXG52YXIgdmFsaWREaXZpc2lvbkNoYXJSRSA9IC9bXFx3KS4rXFwtXyRcXF1dLztcbmZ1bmN0aW9uIHBhcnNlRmlsdGVycyhleHApIHtcbiAgICB2YXIgaW5TaW5nbGUgPSBmYWxzZTtcbiAgICB2YXIgaW5Eb3VibGUgPSBmYWxzZTtcbiAgICB2YXIgaW5UZW1wbGF0ZVN0cmluZyA9IGZhbHNlO1xuICAgIHZhciBpblJlZ2V4ID0gZmFsc2U7XG4gICAgdmFyIGN1cmx5ID0gMDtcbiAgICB2YXIgc3F1YXJlID0gMDtcbiAgICB2YXIgcGFyZW4gPSAwO1xuICAgIHZhciBsYXN0RmlsdGVySW5kZXggPSAwO1xuICAgIHZhciBjLCBwcmV2LCBpLCBleHByZXNzaW9uLCBmaWx0ZXJzO1xuICAgIGZvciAoaSA9IDA7IGkgPCBleHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcHJldiA9IGM7XG4gICAgICAgIGMgPSBleHAuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGluU2luZ2xlKSB7XG4gICAgICAgICAgICBpZiAoYyA9PT0gMHgyNyAmJiBwcmV2ICE9PSAweDVjKVxuICAgICAgICAgICAgICAgIGluU2luZ2xlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW5Eb3VibGUpIHtcbiAgICAgICAgICAgIGlmIChjID09PSAweDIyICYmIHByZXYgIT09IDB4NWMpXG4gICAgICAgICAgICAgICAgaW5Eb3VibGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpblRlbXBsYXRlU3RyaW5nKSB7XG4gICAgICAgICAgICBpZiAoYyA9PT0gMHg2MCAmJiBwcmV2ICE9PSAweDVjKVxuICAgICAgICAgICAgICAgIGluVGVtcGxhdGVTdHJpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpblJlZ2V4KSB7XG4gICAgICAgICAgICBpZiAoYyA9PT0gMHgyZiAmJiBwcmV2ICE9PSAweDVjKVxuICAgICAgICAgICAgICAgIGluUmVnZXggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjID09PSAweDdjICYmIC8vIHBpcGVcbiAgICAgICAgICAgIGV4cC5jaGFyQ29kZUF0KGkgKyAxKSAhPT0gMHg3YyAmJlxuICAgICAgICAgICAgZXhwLmNoYXJDb2RlQXQoaSAtIDEpICE9PSAweDdjICYmXG4gICAgICAgICAgICAhY3VybHkgJiZcbiAgICAgICAgICAgICFzcXVhcmUgJiZcbiAgICAgICAgICAgICFwYXJlbikge1xuICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIGZpcnN0IGZpbHRlciwgZW5kIG9mIGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICBsYXN0RmlsdGVySW5kZXggPSBpICsgMTtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gZXhwLnNsaWNlKDAsIGkpLnRyaW0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHB1c2hGaWx0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICAgICAgICAgIGNhc2UgMHgyMjpcbiAgICAgICAgICAgICAgICAgICAgaW5Eb3VibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gXCJcbiAgICAgICAgICAgICAgICBjYXNlIDB4Mjc6XG4gICAgICAgICAgICAgICAgICAgIGluU2luZ2xlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vICdcbiAgICAgICAgICAgICAgICBjYXNlIDB4NjA6XG4gICAgICAgICAgICAgICAgICAgIGluVGVtcGxhdGVTdHJpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gYFxuICAgICAgICAgICAgICAgIGNhc2UgMHgyODpcbiAgICAgICAgICAgICAgICAgICAgcGFyZW4rKztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIChcbiAgICAgICAgICAgICAgICBjYXNlIDB4Mjk6XG4gICAgICAgICAgICAgICAgICAgIHBhcmVuLS07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyApXG4gICAgICAgICAgICAgICAgY2FzZSAweDViOlxuICAgICAgICAgICAgICAgICAgICBzcXVhcmUrKztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIFtcbiAgICAgICAgICAgICAgICBjYXNlIDB4NWQ6XG4gICAgICAgICAgICAgICAgICAgI
13835HNxdWFyZS0tO1xuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gXVxuICAgICAgICAgICAgICAgIGNhc2UgMHg3YjpcbiAgICAgICAgICAgICAgICAgICAgY3VybHkrKztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIHtcbiAgICAgICAgICAgICAgICBjYXNlIDB4N2Q6XG4gICAgICAgICAgICAgICAgICAgIGN1cmx5LS07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gMHgyZikge1xuICAgICAgICAgICAgICAgIC8vIC9cbiAgICAgICAgICAgICAgICB2YXIgaiA9IGkgLSAxO1xuICAgICAgICAgICAgICAgIHZhciBwIFxuICAgICAgICAgICAgICAgIC8vIGZpbmQgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgcHJldiBjaGFyXG4gICAgICAgICAgICAgICAgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgLy8gZmluZCBmaXJzdCBub24td2hpdGVzcGFjZSBwcmV2IGNoYXJcbiAgICAgICAgICAgICAgICBmb3IgKDsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgcCA9IGV4cC5jaGFyQXQoaik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwICE9PSAnICcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFwIHx8ICF2YWxpZERpdmlzaW9uQ2hhclJFLnRlc3QocCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5SZWdleCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChleHByZXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cC5zbGljZSgwLCBpKS50cmltKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGxhc3RGaWx0ZXJJbmRleCAhPT0gMCkge1xuICAgICAgICBwdXNoRmlsdGVyKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hGaWx0ZXIoKSB7XG4gICAgICAgIChmaWx0ZXJzIHx8IChmaWx0ZXJzID0gW10pKS5wdXNoKGV4cC5zbGljZShsYXN0RmlsdGVySW5kZXgsIGkpLnRyaW0oKSk7XG4gICAgICAgIGxhc3RGaWx0ZXJJbmRleCA9IGkgKyAxO1xuICAgIH1cbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsdGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHdyYXBGaWx0ZXIoZXhwcmVzc2lvbiwgZmlsdGVyc1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5mdW5jdGlvbiB3cmFwRmlsdGVyKGV4cCwgZmlsdGVyKSB7XG4gICAgdmFyIGkgPSBmaWx0ZXIuaW5kZXhPZignKCcpO1xuICAgIGlmIChpIDwgMCkge1xuICAgICAgICAvLyBfZjogcmVzb2x2ZUZpbHRlclxuICAgICAgICByZXR1cm4gXCJfZihcXFwiXCIuY29uY2F0KGZpbHRlciwgXCJcXFwiKShcIikuY29uY2F0KGV4cCwgXCIpXCIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIG5hbWVfMSA9IGZpbHRlci5zbGljZSgwLCBpKTtcbiAgICAgICAgdmFyIGFyZ3MgPSBmaWx0ZXIuc2xpY2UoaSArIDEpO1xuICAgICAgICByZXR1cm4gXCJfZihcXFwiXCIuY29uY2F0KG5hbWVfMSwgXCJcXFwiKShcIikuY29uY2F0KGV4cCkuY29uY2F0KGFyZ3MgIT09ICcpJyA/ICcsJyArIGFyZ3MgOiBhcmdzKTtcbiAgICB9XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5mdW5jdGlvbiBiYXNlV2Fybihtc2csIHJhbmdlKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltWdWUgY29tcGlsZXJdOiBcIi5jb25jYXQobXNnKSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG5mdW5jdGlvbiBwbHVja01vZHVsZUZ1bmN0aW9uKG1vZHVsZXMsIGtleSkge1xuICAgIHJldHVybiBtb2R1bGVzID8gbW9kdWxlcy5tYXAoZnVuY3Rpb24gKG
138350pIHsgcmV0dXJuIG1ba2V5XTsgfSkuZmlsdGVyKGZ1bmN0aW9uIChfKSB7IHJldHVybiBfOyB9KSA6IFtdO1xufVxuZnVuY3Rpb24gYWRkUHJvcChlbCwgbmFtZSwgdmFsdWUsIHJhbmdlLCBkeW5hbWljKSB7XG4gICAgKGVsLnByb3BzIHx8IChlbC5wcm9wcyA9IFtdKSkucHVzaChyYW5nZVNldEl0ZW0oeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUsIGR5bmFtaWM6IGR5bmFtaWMgfSwgcmFuZ2UpKTtcbiAgICBlbC5wbGFpbiA9IGZhbHNlO1xufVxuZnVuY3Rpb24gYWRkQXR0cihlbCwgbmFtZSwgdmFsdWUsIHJhbmdlLCBkeW5hbWljKSB7XG4gICAgdmFyIGF0dHJzID0gZHluYW1pY1xuICAgICAgICA/IGVsLmR5bmFtaWNBdHRycyB8fCAoZWwuZHluYW1pY0F0dHJzID0gW10pXG4gICAgICAgIDogZWwuYXR0cnMgfHwgKGVsLmF0dHJzID0gW10pO1xuICAgIGF0dHJzLnB1c2gocmFuZ2VTZXRJdGVtKHsgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlLCBkeW5hbWljOiBkeW5hbWljIH0sIHJhbmdlKSk7XG4gICAgZWwucGxhaW4gPSBmYWxzZTtcbn1cbi8vIGFkZCBhIHJhdyBhdHRyICh1c2UgdGhpcyBpbiBwcmVUcmFuc2Zvcm1zKVxuZnVuY3Rpb24gYWRkUmF3QXR0cihlbCwgbmFtZSwgdmFsdWUsIHJhbmdlKSB7XG4gICAgZWwuYXR0cnNNYXBbbmFtZV0gPSB2YWx1ZTtcbiAgICBlbC5hdHRyc0xpc3QucHVzaChyYW5nZVNldEl0ZW0oeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSwgcmFuZ2UpKTtcbn1cbmZ1bmN0aW9uIGFkZERpcmVjdGl2ZShlbCwgbmFtZSwgcmF3TmFtZSwgdmFsdWUsIGFyZywgaXNEeW5hbWljQXJnLCBtb2RpZmllcnMsIHJhbmdlKSB7XG4gICAgKGVsLmRpcmVjdGl2ZXMgfHwgKGVsLmRpcmVjdGl2ZXMgPSBbXSkpLnB1c2gocmFuZ2VTZXRJdGVtKHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgcmF3TmFtZTogcmF3TmFtZSxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBhcmc6IGFyZyxcbiAgICAgICAgaXNEeW5hbWljQXJnOiBpc0R5bmFtaWNBcmcsXG4gICAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzXG4gICAgfSwgcmFuZ2UpKTtcbiAgICBlbC5wbGFpbiA9IGZhbHNlO1xufVxuZnVuY3Rpb24gcHJlcGVuZE1vZGlmaWVyTWFya2VyKHN5bWJvbCwgbmFtZSwgZHluYW1pYykge1xuICAgIHJldHVybiBkeW5hbWljID8gXCJfcChcIi5jb25jYXQobmFtZSwgXCIsXFxcIlwiKS5jb25jYXQoc3ltYm9sLCBcIlxcXCIpXCIpIDogc3ltYm9sICsgbmFtZTsgLy8gbWFyayB0aGUgZXZlbnQgYXMgY2FwdHVyZWRcbn1cbmZ1bmN0aW9uIGFkZEhhbmRsZXIoZWwsIG5hbWUsIHZhbHVlLCBtb2RpZmllcnMsIGltcG9ydGFudCwgd2FybiwgcmFuZ2UsIGR5bmFtaWMpIHtcbiAgICBtb2RpZmllcnMgPSBtb2RpZmllcnMgfHwgZW1wdHlPYmplY3Q7XG4gICAgLy8gd2FybiBwcmV2ZW50IGFuZCBwYXNzaXZlIG1vZGlmaWVyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybiAmJiBtb2RpZmllcnMucHJldmVudCAmJiBtb2RpZmllcnMucGFzc2l2ZSkge1xuICAgICAgICB3YXJuKFwicGFzc2l2ZSBhbmQgcHJldmVudCBjYW4ndCBiZSB1c2VkIHRvZ2V0aGVyLiBcIiArXG4gICAgICAgICAgICBcIlBhc3NpdmUgaGFuZGxlciBjYW4ndCBwcmV2ZW50IGRlZmF1bHQgZXZlbnQuXCIsIHJhbmdlKTtcbiAgICB9XG4gICAgLy8gbm9ybWFsaXplIGNsaWNrLnJpZ2h0IGFuZCBjbGljay5taWRkbGUgc2luY2UgdGhleSBkb24ndCBhY3R1YWxseSBmaXJlXG4gICAgLy8gdGhpcyBpcyB0ZWNobmljYWxseSBicm93c2VyLXNwZWNpZmljLCBidXQgYXQgbGVhc3QgZm9yIG5vdyBicm93c2VycyBhcmVcbiAgICAvLyB0aGUgb25seSB0YXJnZXQgZW52cyB0aGF0IGhhdmUgcmlnaHQvbWlkZGxlIGNsaWNrcy5cbiAgICBpZiAobW9kaWZpZXJzLnJpZ2h0KSB7XG4gICAgICAgIGlmIChkeW5hbWljKSB7XG4gICAgICAgICAgICBuYW1lID0gXCIoXCIuY29uY2F0KG5hbWUsIFwiKT09PSdjbGljayc/J2NvbnRleHRtZW51JzooXCIpLmNvbmNhdChuYW1lLCBcIilcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobmFtZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgICAgbmFtZSA9ICdjb250ZXh0bWVudSc7XG4gICAgICAgICAgICBkZWxldGUgbW9kaWZpZXJzLnJpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKG1vZGlmaWVycy5taWRkbGUpIHtcbiAgICAgICAgaWYgKGR5bmFtaWMpIHtcbiAgICAgICAgICAgIG5hbWUgPSBcIihcIi5jb25jYXQobmFtZSwgXCIpPT09J2NsaWNrJz8nbW91c2V1cCc6KFwiKS5jb25jYXQobmFtZSwgXCIpXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5hbWUgPT09ICdjbGljaycpIHtcbiAgICAgICAgICAgIG5hbWUgPSAnbW91c2V1cCc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gY2hlY2sgY2FwdHVyZSBtb2RpZmllclxuICAgIGlmIChtb2RpZmllcnMuY2FwdHVyZSkge1xuICAgICAgICBkZWxldGUgbW9kaWZpZXJzLmNhcHR1cmU7XG4gICAgICAgIG5hbWUgPSBwcmVwZW5kTW9kaWZpZXJNYXJrZXIoJyEnLCBuYW1lLCBkeW5hbWljKTtcbiAgICB9XG4gICAgaWYgKG1vZGlmaWVycy5vbmNlKSB7XG4gICAgICAgIGRlbGV0ZSBtb2RpZmllcnMub25jZTtcbiAgICAgICAgbmFtZSA9IHByZXBlbmRNb2RpZmllck1hcmtlcignficsIG5hbWUsIGR5bmFtaWMpO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAobW9kaWZpZXJzLnBhc3NpdmUpIHtcbiAgICAgICAgZGVsZXRlIG1vZGlmaWVycy5wYXNzaXZlO1xuICAgICAgICBuYW1lID0gcHJlcGVuZE1vZGlmaWVyTWFya2VyKCcmJywgbmFtZSwgZHluYW1pYyk7XG4gICAgfVxuICAgIHZhciBldmVudHM7XG4gICAgaWYgKG1vZGlmaWVycy5uYXRpdmUpIHtcbiAgICAgICAgZGVsZXRlIG1vZGlmaWVycy5uYXRpdmU7XG4gICAgICAgIGV2ZW50cyA9IGVsLm5hdGl2ZUV2ZW50cyB8fCAoZWwubmF0aXZlRXZlbnRzID0ge30pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZXZlbnRzID0gZWwuZXZlbnRzIHx8IChlbC5ldmVudHMgPSB7fSk7XG4gICAgfVxuICAgIHZhciBuZXdIYW5kbGVyID0gcmFuZ2VTZXRJdGVtKHsgdmFsdWU6IHZhbHVlLnRyaW0oKSwgZHluYW1pYzogZHluYW1pYyB9LCByYW5nZSk7XG4gICAgaWYgKG1vZGlmaWVycyAhPT0gZW1wdHlPYmplY3QpIHtcbiAgICAgICAgbmV3SGFuZGxlci5tb2RpZmllcnMgPSBtb2RpZmllcnM7XG4gICAgfVxuICAgIHZhciBoYW5kbGVycyA9IGV2ZW50c1tuYW1lXTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoQXJyYXkuaXNBcnJheShoYW5kbGVycykpIHtcbiAgICAgICAgaW1wb3J0YW50ID8gaGFuZGxlcnMudW5zaGlmdChuZXdIYW5kbGVyKSA6IGhhbmRsZXJzLnB1c2gobmV3SGFuZGxlcik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGhhbmRsZXJzKSB7XG4gICAgICAgIGV2ZW50c1tuYW1lXSA9IGltcG9ydGFudCA/IFtuZXdIYW5kbGVyLCBoYW5kbGVyc10gOiBbaGFuZGxlcnMsIG5ld0hhbmRsZXJdO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZXZlbnRzW25hbWVdID0gbmV3SGFuZGxlcjtcbiAgICB9XG4gICAgZWwucGxhaW4gPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldFJhd0JpbmRpbmdBdHRyKGVsLCBuYW1lKSB7XG4gICAgcmV0dXJuIChlbC5yYXdBdHRyc01hcFsnOicgKyBuYW1lXSB8fFxuICAgICAgICBlbC5yYXdBdHRyc01hcFsndi1iaW5kOicgKyBuYW1lXSB8fFxuICAgICAgICBlbC5yYXdBdHRyc01hcFtuYW1lXSk7XG59XG5mdW5jdGlvbiBnZXRCaW5kaW5nQXR0cihlbCwgbmFtZSwgZ2V0U3RhdGljKSB7XG4gICAgdmFyIGR5bmFtaWNWYWx1ZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICc6JyArIG5hbWUpIHx8IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWJpbmQ6JyArIG5hbWUpO1xuICAgIGlmIChkeW5hbWljVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcGFyc2VGaWx0ZXJzKGR5bmFtaWNWYWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGdldFN0YXRpYyAhPT0gZmFsc2UpIHtcbiAgICAgICAgdmFyIHN0YXRpY1ZhbHVlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgbmFtZSk7XG4gICAgICAgIGlmIChzdGF0aWNWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gSl
13835NPTi5zdHJpbmdpZnkoc3RhdGljVmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8gbm90ZTogdGhpcyBvbmx5IHJlbW92ZXMgdGhlIGF0dHIgZnJvbSB0aGUgQXJyYXkgKGF0dHJzTGlzdCkgc28gdGhhdCBpdFxuLy8gZG9lc24ndCBnZXQgcHJvY2Vzc2VkIGJ5IHByb2Nlc3NBdHRycy5cbi8vIEJ5IGRlZmF1bHQgaXQgZG9lcyBOT1QgcmVtb3ZlIGl0IGZyb20gdGhlIG1hcCAoYXR0cnNNYXApIGJlY2F1c2UgdGhlIG1hcCBpc1xuLy8gbmVlZGVkIGR1cmluZyBjb2RlZ2VuLlxuZnVuY3Rpb24gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgbmFtZSwgcmVtb3ZlRnJvbU1hcCkge1xuICAgIHZhciB2YWw7XG4gICAgaWYgKCh2YWwgPSBlbC5hdHRyc01hcFtuYW1lXSkgIT0gbnVsbCkge1xuICAgICAgICB2YXIgbGlzdCA9IGVsLmF0dHJzTGlzdDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgaWYgKGxpc3RbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgICAgIGxpc3Quc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChyZW1vdmVGcm9tTWFwKSB7XG4gICAgICAgIGRlbGV0ZSBlbC5hdHRyc01hcFtuYW1lXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn1cbmZ1bmN0aW9uIGdldEFuZFJlbW92ZUF0dHJCeVJlZ2V4KGVsLCBuYW1lKSB7XG4gICAgdmFyIGxpc3QgPSBlbC5hdHRyc0xpc3Q7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2Y
13835XIgYXR0ciA9IGxpc3RbaV07XG4gICAgICAgIGlmIChuYW1lLnRlc3QoYXR0ci5uYW1lKSkge1xuICAgICAgICAgICAgbGlzdC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICByZXR1cm4gYXR0cjtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHJhbmdlU2V0SXRlbShpdGVtLCByYW5nZSkge1xuICAgIGlmIChyYW5nZSkge1xuICAgICAgICBpZiAocmFuZ2Uuc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaXRlbS5zdGFydCA9IHJhbmdlLnN0YXJ0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChyYW5nZS5lbmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaXRlbS5lbmQgPSByYW5nZS5lbmQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW07XG59XG5cbi8qKlxuICogQ3Jvc3MtcGxhdGZvcm0gY29kZSBnZW5lcmF0aW9uIGZvciBjb21wb25lbnQgdi1tb2RlbFxuICovXG5mdW5jdGlvbiBnZW5Db21wb25lbnRNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycykge1xuICAgIHZhciBfYSA9IG1vZGlmaWVycyB8fCB7fSwgbnVtYmVyID0gX2EubnVtYmVyLCB0cmltID0gX2EudHJpbTtcbiAgICB2YXIgYmFzZVZhbHVlRXhwcmVzc2lvbiA9ICckJHYnO1xuICAgIHZhciB2YWx1ZUV4cHJlc3Npb24gPSBiYXNlVmFsdWVFeHByZXNzaW9uO1xuICAgIGlmICh0cmltKSB7XG4gICAgICAgIHZhbHVlRXhwcmVzc2lvbiA9XG4gICAgICAgICAgICBcIih0eXBlb2YgXCIuY29uY2F0KGJhc2VWYWx1ZUV4cHJlc3Npb24sIFwiID09PSAnc3RyaW5nJ1wiKSArXG4gICAgICAgICAgICAgICAgXCI/IFwiLmNvbmNhdChiYXNlVmFsdWVFeHByZXNzaW9uLCBcIi50cmltKClcIikgK1xuICAgICAgICAgICAgICAgIFwiOiBcIi5jb25jYXQoYmFzZVZhbHVlRXhwcmVzc2lvbiwgXCIpXCIpO1xuICAgIH1cbiAgICBpZiAobnVtYmVyKSB7XG4gICAgICAgIHZhbHVlRXhwcmVzc2lvbiA9IFwiX24oXCIuY29uY2F0KHZhbHVlRXhwcmVzc2lvbiwgXCIpXCIpO1xuICAgIH1cbiAgICB2YXIgYXNzaWdubWVudCA9IGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCB2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGVsLm1vZGVsID0ge1xuICAgICAgICB2YWx1ZTogXCIoXCIuY29uY2F0KHZhbHVlLCBcIilcIiksXG4gICAgICAgIGV4cHJlc3Npb246IEpTT04uc3RyaW5naWZ5KHZhbHVlKSxcbiAgICAgICAgY2FsbGJhY2s6IFwiZnVuY3Rpb24gKFwiLmNvbmNhdChiYXNlVmFsdWVFeHByZXNzaW9uLCBcIikge1wiKS5jb25jYXQoYXNzaWdubWVudCwgXCJ9XCIpXG4gICAgfTtcbn1cbi8qKlxuICogQ3Jvc3MtcGxhdGZvcm0gY29kZWdlbiBoZWxwZXIgZm9yIGdlbmVyYXRpbmcgdi1tb2RlbCB2YWx1ZSBhc3NpZ25tZW50IGNvZGUuXG4gKi9cbmZ1bmN0aW9uIGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCBhc3NpZ25tZW50KSB7XG4gICAgdmFyIHJlcyA9IHBhcnNlTW9kZWwodmFsdWUpO1xuICAgIGlmIChyZXMua2V5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIlwiLmNvbmNhdCh2YWx1ZSwgXCI9XCIpLmNvbmNhdChhc3NpZ25tZW50KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBcIiRzZXQoXCIuY29uY2F0KHJlcy5leHAsIFwiLCBcIikuY29uY2F0KHJlcy5rZXksIFwiLCBcIikuY29uY2F0KGFzc2lnbm1lbnQsIFwiKVwiKTtcbiAgICB9XG59XG4vKipcbiAqIFBhcnNlIGEgdi1tb2RlbCBleHByZXNzaW9uIGludG8gYSBiYXNlIHBhdGggYW5kIGEgZmluYWwga2V5IHNlZ21lbnQuXG4gKiBIYW5kbGVzIGJvdGggZG90LXBhdGggYW5kIHBvc3NpYmxlIHNxdWFyZSBicmFja2V0cy5cbiAqXG4gKiBQb3NzaWJsZSBjYXNlczpcbiAqXG4gKiAtIHRlc3RcbiAqIC0gdGVzdFtrZXldXG4gKiAtIHRlc3RbdGVzdDFba2V5XV1cbiAqIC0gdGVzdFtcImFcIl1ba2V5XVxuICogLSB4eHgudGVzdFthW2FdLnRlc3QxW2tleV1dXG4gKiAtIHRlc3QueHh4LmFbXCJhc2FcIl1bdGVzdDFba2V5XV1cbiAqXG4gKi9cbnZhciBsZW4sIHN0ciwgY2hyLCBpbmRleCwgZXhwcmVzc2lvblBvcywgZXhwcmVzc2lvbkVuZFBvcztcbmZ1bmN0aW9uIHBhcnNlTW9kZWwodmFsKSB7XG4gICAgLy8gRml4IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvcHVsbC83NzMwXG4gICAgLy8gYWxsb3cgdi1tb2RlbD1cIm9iai52YWwgXCIgKHRyYWlsaW5nIHdoaXRlc3BhY2UpXG4gICAgdmFsID0gdmFsLnRyaW0oKTtcbiAgICBsZW4gPSB2YWwubGVuZ3RoO1xuICAgIGlmICh2YWwuaW5kZXhPZignWycpIDwgMCB8fCB2YWwubGFzdEluZGV4T2YoJ10nKSA8IGxlbiAtIDEpIHtcbiAgICAgICAgaW5kZXggPSB2YWwubGFzdEluZGV4T2YoJy4nKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZXhwOiB2YWwuc2xpY2UoMCwgaW5kZXgpLFxuICAgICAgICAgICAgICAgIGtleTogJ1wiJyArIHZhbC5zbGljZShpbmRleCArIDEpICsgJ1wiJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZXhwOiB2YWwsXG4gICAgICAgICAgICAgICAga2V5OiBudWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0ciA9IHZhbDtcbiAgICBpbmRleCA9IGV4cHJlc3Npb25Qb3MgPSBleHByZXNzaW9uRW5kUG9zID0gMDtcbiAgICB3aGlsZSAoIWVvZigpKSB7XG4gICAgICAgIGNociA9IG5leHQoKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChpc1N0cmluZ1N0YXJ0KGNocikpIHtcbiAgICAgICAgICAgIHBhcnNlU3RyaW5nKGNocik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2hyID09PSAweDViKSB7XG4gICAgICAgICAgICBwYXJzZUJyYWNrZXQoY2hyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBleHA6IHZhbC5zbGljZSgwLCBleHByZXNzaW9uUG9zKSxcbiAgICAgICAga2V5OiB2YWwuc2xpY2UoZXhwcmVzc2lvblBvcyArIDEsIGV4cHJlc3Npb25FbmRQb3MpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIG5leHQoKSB7XG4gICAgcmV0dXJuIHN0ci5jaGFyQ29kZUF0KCsraW5kZXgpO1xufVxuZnVuY3Rpb24gZW9mKCkge1xuICAgIHJldHVybi
13835BpbmRleCA+PSBsZW47XG59XG5mdW5jdGlvbiBpc1N0cmluZ1N0YXJ0KGNocikge1xuICAgIHJldHVybiBjaHIgPT09IDB4MjIgfHwgY2hyID09PSAweDI3O1xufVxuZnVuY3Rpb24gcGFyc2VCcmFja2V0KGNocikge1xuICAgIHZhciBpbkJyYWNrZXQgPSAxO1xuICAgIGV4cHJlc3Npb25Qb3MgPSBpbmRleDtcbiAgICB3aGlsZSAoIWVvZigpKSB7XG4gICAgICAgIGNociA9IG5leHQoKTtcbiAgICAgICAgaWYgKGlzU3RyaW5nU3RhcnQoY2hyKSkge1xuICAgICAgICAgICAgcGFyc2VTdHJpbmcoY2hyKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaHIgPT09IDB4NWIpXG4gICAgICAgICAgICBpbkJyYWNrZXQrKztcbiAgICAgICAgaWYgKGNociA9PT0gMHg1ZClcbiAgICAgICAgICAgIGluQnJhY2tldC0tO1xuICAgICAgICBpZiAoaW5CcmFja2V0ID09PSAwKSB7XG4gICAgICAgICAgICBleHByZXNzaW9uRW5kUG9zID0gaW5kZXg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHBhcnNlU3RyaW5nKGNocikge1xuICAgIHZhciBzdHJpbmdRdW90ZSA9IGNocjtcbiAgICB3aGlsZSAoIWVvZigpKSB7XG4gICAgICAgIGNociA9IG5leHQoKTtcbiAgICAgICAgaWYgKGNociA9PT0gc3RyaW5nUXVvdGUpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG52YXIgd2FybiQxO1xuLy8gaW4gc29tZSBjYXNlcywgdGhlIGV2ZW50IHVzZWQgaGFzIHRvIGJlIGRldGVybWluZWQgYXQgcnVudGltZVxuLy8gc28gd2UgdXNlZCBzb21lIHJlc2VydmVkIHRva2VucyBkdXJpbmcgY29tcGlsZS5cbnZhciBSQU5HRV9UT0tFTiA9ICdfX3InO1xudmFyIENIRUNLQk9YX1JBRElPX1RPS0VOID0gJ19fYyc7XG5mdW5jdGlvbiBtb2RlbCQxKGVsLCBkaXIsIF93YXJuKSB7XG4gICAgd2FybiQxID0gX3dhcm47XG4gICAgdmFyIHZhbHVlID0gZGlyLnZhbHVlO1xuICAgIHZhciBtb2RpZmllcnMgPSBkaXIubW9kaWZpZXJzO1xuICAgIHZhciB0YWcgPSBlbC50YWc7XG4gICAgdmFyIHR5cGUgPSBlbC5hdHRyc01hcC50eXBlO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIC8vIGlucHV0cyB3aXRoIHR5cGU9XCJmaWxlXCIgYXJlIHJlYWQgb25seSBhbmQgc2V0dGluZyB0aGUgaW5wdXQnc1xuICAgICAgICAvLyB2YWx1ZSB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgICAgICBpZiAodGFnID09PSAnaW5wdXQnICYmIHR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgd2FybiQxKFwiPFwiLmNvbmNhdChlbC50YWcsIFwiIHYtbW9kZWw9XFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIiB0eXBlPVxcXCJmaWxlXFxcIj46XFxuXCIpICtcbiAgICAgICAgICAgICAgICBcIkZpbGUgaW5wdXRzIGFyZSByZWFkIG9ubHkuIFVzZSBhIHYtb246Y2hhbmdlIGxpc3RlbmVyIGluc3RlYWQuXCIsIGVsLnJhd0F0dHJzTWFwWyd2LW1vZGVsJ10pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChlbC5jb21wb25lbnQpIHtcbiAgICAgICAgZ2VuQ29tcG9uZW50TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICAgICAgICAvLyBjb21wb25lbnQgdi1tb2RlbCBkb2Vzbid0IG5lZWQgZXh0cmEgcnVudGltZVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgZ2VuU2VsZWN0KGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGFnID09PSAnaW5wdXQnICYmIHR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgZ2VuQ2hlY2tib3hNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiB0eXBlID09PSAncmFkaW8nKSB7XG4gICAgICAgIGdlblJhZGlvTW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAndGV4dGFyZWEnKSB7XG4gICAgICAgIGdlbkRlZmF1bHRNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFjb25maWcuaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgICAgIGdlbkNvbXBvbmVudE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICAgICAgLy8gY29tcG9uZW50IHYtbW9kZWwgZG9lc24ndCBuZWVkIGV4dHJhIHJ1bnRpbWVcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4kMShcIjxcIi5jb25jYXQoZWwudGFnLCBcIiB2LW1vZGVsPVxcXCJcIikuY29uY2F0KHZhbHVlLCBcIlxcXCI+OiBcIikgK1xuICAgICAgICAgICAgXCJ2LW1vZGVsIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBlbGVtZW50IHR5cGUuIFwiICtcbiAgICAgICAgICAgIFwiSWYgeW91IGFyZSB3b3JraW5nIHdpdGggY29udGVudGVkaXRhYmxlLCBpdCdzIHJlY29tbWVuZGVkIHRvIFwiICtcbiAgICAgICAgICAgICd3cmFwIGEgbGlicmFyeSBkZWRpY2F0ZWQgZm9yIHRoYXQgcHVycG9zZSBpbnNpZGUgYSBjdXN0b20gY29tcG9uZW50LicsIGVsLnJhd0F0dHJzTWFwWyd2LW1vZGVsJ10pO1xuICAgIH1cbiAgICAvLyBlbnN1cmUgcnVudGltZSBkaXJlY3RpdmUgbWV0YWRhdGFcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGdlbkNoZWNrYm94TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpIHtcbiAgICB2YXIgbnVtYmVyID0gbW9kaWZpZXJzICYmIG1vZGlmaWVycy5udW1iZXI7XG4gICAgdmFyIHZhbHVlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAndmFsdWUnKSB8fCAnbnVsbCc7XG4gICAgdmFyIHRydWVWYWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3RydWUtdmFsdWUnKSB8fCAndHJ1ZSc7XG4gICAgdmFyIGZhbHNlVmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdmYWxzZS12YWx1ZScpIHx8ICdmYWxzZSc7XG4gICAgYWRkUHJvcChlbCwgJ2NoZWNrZWQnLCBcIkFycmF5LmlzQXJyYXkoXCIuY29uY2F0KHZhbHVlLCBcIilcIikgK1xuICAgICAgICBcIj9faShcIi5jb25jYXQodmFsdWUsIFwiLFwiKS5jb25jYXQodmFsdWVCaW5kaW5nLCBcIik+LTFcIikgK1xuICAgICAgICAodHJ1ZVZhbHVlQmluZGluZyA9PT0gJ3RydWUnXG4gICAgICAgICAgICA/IFwiOihcIi5jb25jYXQodmFsdWUsIFwiKVwiKVxuICAgICAgICAgICAgOiBcIjpfcShcIi5jb25jYXQodmFsdWUsIFwiLFwiKS5jb25jYXQodHJ1ZVZhbHVlQmluZGluZywgXCIpXCIpKSk7XG4gICAgYWRkSGFuZGxlcihlbCwgJ2NoYW5nZScsIFwidmFyICQkYT1cIi5jb25jYXQodmFsdWUsIFwiLFwiKSArXG4gICAgICAgICckJGVsPSRldmVudC50YXJnZXQsJyArXG4gICAgICAgIFwiJCRjPSQkZWwuY2hlY2tlZD8oXCIuY29uY2F0KHRydWVWYWx1ZUJpbmRpbmcsIFwiKTooXCIpLmNvbmNhdChmYWxzZVZhbHVlQmluZGluZywgXCIpO1wiKSArXG4gICAgICAgICdpZihBcnJheS5pc0FycmF
138355KCQkYSkpeycgK1xuICAgICAgICBcInZhciAkJHY9XCIuY29uY2F0KG51bWJlciA/ICdfbignICsgdmFsdWVCaW5kaW5nICsgJyknIDogdmFsdWVCaW5kaW5nLCBcIixcIikgK1xuICAgICAgICAnJCRpPV9pKCQkYSwkJHYpOycgK1xuICAgICAgICBcImlmKCQkZWwuY2hlY2tlZCl7JCRpPDAmJihcIi5jb25jYXQoZ2VuQXNzaWdubWVudENvZGUodmFsdWUsICckJGEuY29uY2F0KFskJHZdKScpLCBcIil9XCIpICtcbiAgICAgICAgXCJlbHNleyQkaT4tMSYmKFwiLmNvbmNhdChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgJyQkYS5zbGljZSgwLCQkaSkuY29uY2F0KCQkYS5zbGljZSgkJGkrMSkpJyksIFwiKX1cIikgK1xuICAgICAgICBcIn1lbHNle1wiLmNvbmNhdChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgJyQkYycpLCBcIn1cIiksIG51bGwsIHRydWUpO1xufVxuZnVuY3Rpb24gZ2VuUmFkaW9Nb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycykge1xuICAgIHZhciBudW1iZXIgPSBtb2RpZmllcnMgJiYgbW9kaWZpZXJzLm51bWJlcjtcbiAgICB2YXIgdmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICd2YWx1ZScpIHx8ICdudWxsJztcbiAgICB2YWx1ZUJpbmRpbmcgPSBudW1iZXIgPyBcIl9uKFwiLmNvbmNhdCh2YWx1ZUJpbmRpbmcsIFwiKVwiKSA6IHZhbHVlQmluZGluZztcbiAgICBhZGRQcm9wKGVsLCAnY2hlY2tlZCcsIFwiX3EoXCIuY29uY2F0KHZhbHVlLCBcIixcIikuY29uY2F0KHZhbHVlQmluZGluZywgXCIpXCIpKTtcbiAgICBhZGRIYW5kbGVyKGVsLCAnY2hhbmdlJywgZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIHZhbHVlQmluZGluZyksIG51bGwsIHRydWUpO1xufVxuZnVuY3Rpb24gZ2VuU2VsZWN0KGVsLCB2YWx1ZSwgbW9kaWZpZXJzKSB7XG4gICAgdmFyIG51bWJlciA9IG1vZGlmaWVycyAmJiBtb2RpZmllcnMubnVtYmVyO1xuICAgIHZhciBzZWxlY3RlZFZhbCA9IFwiQXJyYXkucHJvdG90eXBlLmZpbHRlclwiICtcbiAgICAgICAgXCIuY2FsbCgkZXZlbnQudGFyZ2V0Lm9wdGlvbnMsZnVuY3Rpb24obyl7cmV0dXJuIG8uc2VsZWN0ZWR9KVwiICtcbiAgICAgICAgXCIubWFwKGZ1bmN0aW9uKG8pe3ZhciB2YWwgPSBcXFwiX3ZhbHVlXFxcIiBpbiBvID8gby5fdmFsdWUgOiBvLnZhbHVlO1wiICtcbiAgICAgICAgXCJyZXR1cm4gXCIuY29uY2F0KG51bWJlciA/ICdfbih2YWwpJyA6ICd2YWwnLCBcIn0pXCIpO1xuICAgIHZhciBhc3NpZ25tZW50ID0gJyRldmVudC50YXJnZXQubXVsdGlwbGUgPyAkJHNlbGVjdGVkVmFsIDogJCRzZWxlY3RlZFZhbFswXSc7XG4gICAgdmFyIGNvZGUgPSBcInZhciAkJHNlbGVjdGVkVmFsID0gXCIuY29uY2F0KHNlbGVjdGVkVmFsLCBcIjtcIik7XG4gICAgY29kZSA9IFwiXCIuY29uY2F0KGNvZGUsIFwiIFwiKS5jb25jYXQoZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIGFzc2lnbm1lbnQpKTtcbiAgICBhZGRIYW5kbGVyKGVsLCAnY2hhbmdlJywgY29kZSwgbnVsbCwgdHJ1ZSk7XG59XG5mdW5jdGlvbiBnZW5EZWZhdWx0TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpIHtcbiAgICB2YXIgdHlwZSA9IGVsLmF0dHJzTWFwLnR5cGU7XG4gICAgLy8gd2FybiBpZiB2LWJpbmQ6dmFsdWUgY29uZmxpY3RzIHdpdGggdi1tb2RlbFxuICAgIC8vIGV4Y2VwdCBmb3IgaW5wdXRzIHdpdGggdi1iaW5kOnR5cGVcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2Y
13835XIgdmFsdWVfMSA9IGVsLmF0dHJzTWFwWyd2LWJpbmQ6dmFsdWUnXSB8fCBlbC5hdHRyc01hcFsnOnZhbHVlJ107XG4gICAgICAgIHZhciB0eXBlQmluZGluZyA9IGVsLmF0dHJzTWFwWyd2LWJpbmQ6dHlwZSddIHx8IGVsLmF0dHJzTWFwWyc6dHlwZSddO1xuICAgICAgICBpZiAodmFsdWVfMSAmJiAhdHlwZUJpbmRpbmcpIHtcbiAgICAgICAgICAgIHZhciBiaW5kaW5nID0gZWwuYXR0cnNNYXBbJ3YtYmluZDp2YWx1ZSddID8gJ3YtYmluZDp2YWx1ZScgOiAnOnZhbHVlJztcbiAgICAgICAgICAgIHdhcm4kMShcIlwiLmNvbmNhdChiaW5kaW5nLCBcIj1cXFwiXCIpLmNvbmNhdCh2YWx1ZV8xLCBcIlxcXCIgY29uZmxpY3RzIHdpdGggdi1tb2RlbCBvbiB0aGUgc2FtZSBlbGVtZW50IFwiKSArXG4gICAgICAgICAgICAgICAgJ2JlY2F1c2UgdGhlIGxhdHRlciBhbHJlYWR5IGV4cGFuZHMgdG8gYSB2YWx1ZSBiaW5kaW5nIGludGVybmFsbHknLCBlbC5yYXdBdHRyc01hcFtiaW5kaW5nXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIF9hID0gbW9kaWZpZXJzIHx8IHt9LCBsYXp5ID0gX2EubGF6eSwgbnVtYmVyID0gX2EubnVtYmVyLCB0cmltID0gX2EudHJpbTtcbiAgICB2YXIgbmVlZENvbXBvc2l0aW9uR3VhcmQgPSAhbGF6eSAmJiB0eXBlICE9PSAncmFuZ2UnO1xuICAgIHZhciBldmVudCA9IGxhenkgPyAnY2hhbmdlJyA6IHR5cGUgPT09ICdyYW5nZScgPyBSQU5HRV9UT0tFTiA6ICdpbnB1dCc7XG4gICAgdmFyIHZhbHVlRXhwcmVzc2lvbiA9ICckZXZlbnQudGFyZ2V0LnZhbHVlJztcbiAgICBpZiAodHJpbSkge1xuICAgICAgICB2YWx1ZUV4cHJlc3Npb24gPSBcIiRldmVudC50YXJnZXQudmFsdWUudHJpbSgpXCI7XG4gICAgfVxuICAgIGlmIChudW1iZXIpIHtcbiAgICAgICAgdmFsdWVFeHByZXNzaW9uID0gXCJfbihcIi5jb25jYXQodmFsdWVFeHByZXNzaW9uLCBcIilcIik7XG4gICAgfVxuICAgIHZhciBjb2RlID0gZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIHZhbHVlRXhwcmVzc2lvbik7XG4gICAgaWYgKG5lZWRDb21wb3NpdGlvbkd1YXJkKSB7XG4gICAgICAgIGNvZGUgPSBcImlmKCRldmVudC50YXJnZXQuY29tcG9zaW5nKXJldHVybjtcIi5jb25jYXQoY29kZSk7XG4gICAgfVxuICAgIGFkZFByb3AoZWwsICd2YWx1ZScsIFwiKFwiLmNvbmNhdCh2YWx1ZSwgXCIpXCIpKTtcbiAgICBhZGRIYW5kbGVyKGVsLCBldmVudCwgY29kZSwgbnVsbCwgdHJ1ZSk7XG4gICAgaWYgKHRyaW0gfHwgbnVtYmVyKSB7XG4gICAgICAgIGFkZEhhbmRsZXIoZWwsICdibHVyJywgJyRmb3JjZVVwZGF0ZSgpJyk7XG4gICAgfVxufVxuXG4vLyBub3JtYWxpemUgdi1tb2RlbCBldmVudCB0b2tlbnMgdGhhdCBjYW4gb25seSBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUuXG4vLyBpdCdzIGltcG9ydGFudCB0byBwbGFjZSB0aGUgZXZlbnQgYXMgdGhlIGZpcnN0IGluIHRoZSBhcnJheSBiZWNhdXNlXG4vLyB0aGUgd2hvbGUgcG9pbnQgaXMgZW5zdXJpbmcgdGhlIHYtbW9kZWwgY2FsbGJhY2sgZ2V0cyBjYWxsZWQgYmVmb3JlXG4vLyB1c2VyLWF0dGFjaGVkIGhhbmRsZXJzLlxuZnVuY3Rpb24gbm9ybWFsaXplRXZlbnRzKG9uKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzRGVmKG9uW1JBTkdFX1RPS0VOXSkpIHtcbiAgICAgICAgLy8gSUUgaW5wdXRbdHlwZT1yYW5nZV0gb25seSBzdXBwb3J0cyBgY2hhbmdlYCBldmVudFxuICAgICAgICB2Y
13835XIgZXZlbnRfMSA9IGlzSUUgPyAnY2hhbmdlJyA6ICdpbnB1dCc7XG4gICAgICAgIG9uW2V2ZW50XzFdID0gW10uY29uY2F0KG9uW1JBTkdFX1RPS0VOXSwgb25bZXZlbnRfMV0gfHwgW10pO1xuICAgICAgICBkZWxldGUgb25bUkFOR0VfVE9LRU5dO1xuICAgIH1cbiAgICAvLyBUaGlzIHdhcyBvcmlnaW5hbGx5IGludGVuZGVkIHRvIGZpeCAjNDUyMSBidXQgbm8gbG9uZ2VyIG5lY2Vzc2FyeVxuICAgIC8vIGFmdGVyIDIuNS4gS2VlcGluZyBpdCBmb3IgYmFja3dhcmRzIGNvbXBhdCB3aXRoIGdlbmVyYXRlZCBjb2RlIGZyb20gPCAyLjRcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNEZWYob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dKSkge1xuICAgICAgICBvbi5jaGFuZ2UgPSBbXS5jb25jYXQob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dLCBvbi5jaGFuZ2UgfHwgW10pO1xuICAgICAgICBkZWxldGUgb25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dO1xuICAgIH1cbn1cbnZhciB0YXJnZXQ7XG5mdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlcihldmVudCwgaGFuZGxlciwgY2FwdHVyZSkge1xuICAgIHZhciBfdGFyZ2V0ID0gdGFyZ2V0OyAvLyBzYXZlIGN1cnJlbnQgdGFyZ2V0IGVsZW1lbnQgaW4gY2xvc3VyZVxuICAgIHJldHVybiBmdW5jdGlvbiBvbmNlSGFuZGxlcigpIHtcbiAgICAgICAgdmFyIHJlcyA9IGhhbmRsZXIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKHJlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVtb3ZlKGV2ZW50LCBvbmNlSGFuZGxlciwgY2FwdHVyZSwgX3RhcmdldCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuLy8gIzk0NDY6IEZpcmVmb3ggPD0gNTMgKGluIHBhcnRpY3VsYXIsIEVTUiA1MikgaGFzIGluY29ycmVjdCBFdmVudC50aW1lU3RhbXBcbi8vIGltcGxlbWVudGF0aW9uIGFuZCBkb2VzIG5vdCBmaXJlIG1pY3JvdGFza3MgaW4gYmV0d2VlbiBldmVudCBwcm9wYWdhdGlvbiwgc29cbi8vIHNhZmUgdG8gZXhjbHVkZS5cbnZhciB1c2VNaWNyb3Rhc2tGaXggPSBpc1VzaW5nTWljcm9UYXNrICYmICEoaXNGRiAmJiBOdW1iZXIoaXNGRlsxXSkgPD0gNTMpO1xuZnVuY3Rpb24gYWRkKG5hbWUsIGhhbmRsZXIsIGNhcHR1cmUsIHBhc3NpdmUpIHtcbiAgICAvLyBhc3luYyBlZGdlIGNhc2UgIzY1NjY6IGlubmVyIGNsaWNrIGV2ZW50IHRyaWdnZXJzIHBhdGNoLCBldmVudCBoYW5kbGVyXG4gICAgLy8gYXR0YWNoZWQgdG8gb3V0ZXIgZWxlbWVudCBkdXJpbmcgcGF0Y2gsIGFuZCB0cmlnZ2VyZWQgYWdhaW4uIFRoaXNcbiAgICAvLyBoYXBwZW5zIGJlY2F1c2UgYnJvd3NlcnMgZmlyZSBtaWNyb3Rhc2sgdGlja3MgYmV0d2VlbiBldmVudCBwcm9wYWdhdGlvbi5cbiAgICAvLyB0aGUgc29sdXRpb24gaXMgc2ltcGxlOiB3ZSBzYXZlIHRoZSB0aW1lc3RhbXAgd2hlbiBhIGhhbmRsZXIgaXMgYXR0YWNoZWQsXG4gICAgLy8gYW5kIHRoZSBoYW5kbGVyIHdvdWxkIG9ubHkgZmlyZSBpZiB0aGUgZXZlbnQgcGFzc2VkIHRvIGl0IHdhcyBmaXJlZFxuICAgIC8vIEFGVEVSIGl0IHdhcyBhdHRhY2hlZC5cbiAgICBpZiAodXNlTWljcm90YXNrRml4KSB7XG4gICAgICAgIHZhciBhdHRhY2hlZFRpbWVzdGFtcF8xID0gY3VycmVudEZsdXNoVGltZXN0YW1wO1xuICAgICAgICB2Y
13835XIgb3JpZ2luYWxfMSA9IGhhbmRsZXI7XG4gICAgICAgIC8vQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBoYW5kbGVyID0gb3JpZ2luYWxfMS5fd3JhcHBlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAvLyBubyBidWJibGluZywgc2hvdWxkIGFsd2F5cyBmaXJlLlxuICAgICAgICAgICAgLy8gdGhpcyBpcyBqdXN0IGEgc2FmZXR5IG5ldCBpbiBjYXNlIGV2ZW50LnRpbWVTdGFtcCBpcyB1bnJlbGlhYmxlIGluXG4gICAgICAgICAgICAvLyBjZXJ0YWluIHdlaXJkIGVudmlyb25tZW50cy4uLlxuICAgICAgICAgICAgZS50YXJnZXQgPT09IGUuY3VycmVudFRhcmdldCB8fFxuICAgICAgICAgICAgICAgIC8vIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGhhbmRsZXIgYXR0YWNobWVudFxuICAgICAgICAgICAgICAgIGUudGltZVN0YW1wID49IGF0dGFjaGVkVGltZXN0YW1wXzEgfHxcbiAgICAgICAgICAgICAgICAvLyBiYWlsIGZvciBlbnZpcm9ubWVudHMgdGhhdCBoYXZlIGJ1Z2d5IGV2ZW50LnRpbWVTdGFtcCBpbXBsZW1lbnRhdGlvbnNcbiAgICAgICAgICAgICAgICAvLyAjOTQ2MiBpT1MgOSBidWc6IGV2ZW50LnRpbWVTdGFtcCBpcyAwIGFmdGVyIGhpc3RvcnkucHVzaFN0YXRlXG4gICAgICAgICAgICAgICAgLy8gIzk2ODEgUXRXZWJFbmdpbmUgZXZlbnQudGltZVN0YW1wIGlzIG5lZ2F0aXZlIHZhbHVlXG4gICAgICAgICAgICAgICAgZS50aW1lU3RhbXAgPD0gMCB8fFxuICAgICAgICAgICAgICAgIC8vICM5NDQ4IGJhaWwgaWYgZXZlbnQgaXMgZmlyZWQgaW4gYW5vdGhlciBkb2N1bWVudCBpbiBhIG11bHRpLXBhZ2VcbiAgICAgICAgICAgICAgICAvLyBlbGVjdHJvbi9udy5qcyBhcHAsIHNpbmNlIGV2ZW50LnRpbWVTdGFtcCB3aWxsIGJlIHVzaW5nIGEgZGlmZmVyZW50XG4gICAgICAgICAgICAgICAgLy8gc3RhcnRpbmcgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgZS50YXJnZXQub3duZXJEb2N1bWVudCAhPT0gZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxfMS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBoYW5kbGVyLCBzdXBwb3J0c1Bhc3NpdmUgPyB7IGNhcHR1cmU6IGNhcHR1cmUsIHBhc3NpdmU6IHBhc3NpdmUgfSA6IGNhcHR1cmUpO1xufVxuZnVuY3Rpb24gcmVtb3ZlKG5hbWUsIGhhbmRsZXIsIGNhcHR1cmUsIF90YXJnZXQpIHtcbiAgICAoX3RhcmdldCB8fCB0YXJnZXQpLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgXG4gICAgLy9AdHMtZXhwZWN0LWVycm9yXG4gICAgaGFuZGxlci5fd3JhcHBlciB8fCBoYW5kbGVyLCBjYXB0dXJlKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZURPTUxpc3RlbmVycyhvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLm9uKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEub24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG9uID0gdm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgICB2YXIgb2xkT24gPSBvbGRWbm9kZS5kYXRhLm9uIHx8IHt9O1xuICAgIC8vIHZub2RlIGlzIGVtcHR5IHdoZW4gcmVtb3ZpbmcgYWxsIGxpc3RlbmVycyxcbiAgICAvLyBhbmQgdXNlIG9sZCB2bm9kZSBkb20gZWxlbWVudFxuICAgIHRhcmdldCA9IHZub2RlLmVsbSB8fCBvbGRWbm9kZS5lbG07XG4gICAgbm9ybWFsaXplRXZlbnRzKG9uKTtcbiAgICB1cGRhdGVMaXN0ZW5lcnMob24sIG9sZE9uLCBhZGQsIHJlbW92ZSwgY3JlYXRlT25jZUhhbmRsZXIsIHZub2RlLmNvbnRleHQpO1xuICAgIHRhcmdldCA9IHVuZGVmaW5lZDtcbn1cbnZhciBldmVudHMgPSB7XG4gICAgY3JlYXRlOiB1cGRhdGVET01MaXN0ZW5lcnMsXG4gICAgdXBkYXRlOiB1cGRhdGVET01MaXN0ZW5lcnMsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBlbXB0eU5vZGUgaGFzIGFjdHVhbGx5IGRhdGFcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAodm5vZGUpIHsgcmV0dXJuIHVwZGF0ZURPTUxpc3RlbmVycyh2bm9kZSwgZW1wdHlOb2RlKTsgfVxufTtcblxudmFyIHN2Z0NvbnRhaW5lcjtcbmZ1bmN0aW9uIHVwZGF0ZURPTVByb3BzKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEuZG9tUHJvcHMpICYmIGlzVW5kZWYodm5vZGUuZGF0YS5kb21Qcm9wcykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIga2V5LCBjdXI7XG4gICAgdmFyIGVsbSA9IHZub2RlLmVsbTtcbiAgICB2YXIgb2xkUHJvcHMgPSBvbGRWbm9kZS5kYXRhLmRvbVByb3BzIHx8IHt9O1xuICAgIHZhciBwcm9wcyA9IHZub2RlLmRhdGEuZG9tUHJvcHMgfHwge307XG4gICAgLy8gY2xvbmUgb2JzZXJ2ZWQgb2JqZWN0cywgYXMgdGhlIHVzZXIgcHJvYmFibHkgd2FudHMgdG8gbXV0YXRlIGl0XG4gICAgaWYgKGlzRGVmKHByb3BzLl9fb2JfXykgfHwgaXNUcnVlKHByb3BzLl92X2F0dHJfcHJveHkpKSB7XG4gICAgICAgIHByb3BzID0gdm5vZGUuZGF0YS5kb21Qcm9wcyA9IGV4dGVuZCh7fSwgcHJvcHMpO1xuICAgIH1cbiAgICBmb3IgKGtleSBpbiBvbGRQcm9wcykge1xuICAgICAgICBpZiAoIShrZXkgaW4gcHJvcHMpKSB7XG4gICAgICAgICAgICBlbG1ba2V5XSA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoa2V5IGluIHByb3BzKSB7XG4gICAgICAgIGN1ciA9IHByb3BzW2tleV07XG4gICAgICAgIC8vIGlnbm9yZSBjaGlsZHJlbiBpZiB0aGUgbm9kZSBoYXMgdGV4dENvbnRlbnQgb3IgaW5uZXJIVE1MLFxuICAgICAgICAvLyBhcyB0aGVzZSB3aWxsIHRocm93IGF3YXkgZXhpc3RpbmcgRE9NIG5vZGVzIGFuZCBjYXVzZSByZW1vdmFsIGVycm9yc1xuICAgICAgICAvLyBvbiBzdWJzZXF1ZW50IHBhdGNoZXMgKCMzMzYwKVxuICAgICAgICBpZiAoa2V5ID09PSAndGV4dENvbnRlbnQnIHx8IGtleSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgICAgICAgIGlmICh2bm9kZS5jaGlsZHJlbilcbiAgICAgICAgICAgICAgICB2bm9kZS5jaGlsZHJlbi5sZW5ndGggPSAwO1xuICAgICAgICAgICAgaWYgKGN1ciA9PT0gb2xkUHJvcHNba2V5XSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIC8vICM2NjAxIHdvcmsgYXJvdW5kIENocm9tZSB2ZXJzaW9uIDw9IDU1IGJ1ZyB3aGVyZSBzaW5nbGUgdGV4dE5vZGVcbiAgICAgICAgICAgIC8vIHJlcGxhY2VkIGJ5IGlubmVySFRNTC90ZXh0Q29udGVudCByZXRhaW5zIGl0cyBwYXJlbnROb2RlI
13835HByb3BlcnR5XG4gICAgICAgICAgICBpZiAoZWxtLmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWxtLnJlbW92ZUNoaWxkKGVsbS5jaGlsZE5vZGVzWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAndmFsdWUnICYmIGVsbS50YWdOYW1lICE9PSAnUFJPR1JFU1MnKSB7XG4gICAgICAgICAgICAvLyBzdG9yZSB2YWx1ZSBhcyBfdmFsdWUgYXMgd2VsbCBzaW5jZVxuICAgICAgICAgICAgLy8gbm9uLXN0cmluZyB2YWx1ZXMgd2lsbCBiZSBzdHJpbmdpZmllZFxuICAgICAgICAgICAgZWxtLl92YWx1ZSA9IGN1cjtcbiAgICAgICAgICAgIC8vIGF2b2lkIHJlc2V0dGluZyBjdXJzb3IgcG9zaXRpb24gd2hlbiB2YWx1ZSBpcyB0aGUgc2FtZVxuICAgICAgICAgICAgdmFyIHN0ckN1ciA9IGlzVW5kZWYoY3VyKSA/ICcnIDogU3RyaW5nKGN1cik7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlVmFsdWUoZWxtLCBzdHJDdXIpKSB7XG4gICAgICAgICAgICAgICAgZWxtLnZhbHVlID0gc3RyQ3VyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGtleSA9PT0gJ2lubmVySFRNTCcgJiZcbiAgICAgICAgICAgIGlzU1ZHKGVsbS50YWdOYW1lKSAmJlxuICAgICAgICAgICAgaXNVbmRlZihlbG0uaW5uZXJIVE1MKSkge1xuICAgICAgICAgICAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IGlubmVySFRNTCBmb3IgU1ZHIGVsZW1lbnRzXG4gICAgICAgICAgICBzdmdDb250YWluZXIgPSBzdmdDb250YWluZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBzdmdDb250YWluZXIuaW5uZXJIVE1MID0gXCI8c3ZnPlwiLmNvbmNhdChjdXIsIFwiPC9zdmc+XCIpO1xuICAgICAgICAgICAgdmFyIHN2ZyA9IHN2Z0NvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgICAgICAgd2hpbGUgKGVsbS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgZWxtLnJlbW92ZUNoaWxkKGVsbS5maXJzdENoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChzdmcuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgIGVsbS5hcHBlbmRDaGlsZChzdmcuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgIC8vIHNraXAgdGhlIHVwZGF0ZSBpZiBvbGQgYW5kIG5ldyBWRE9NIHN0YXRlIGlzIHRoZSBzYW1lLlxuICAgICAgICAvLyBgdmFsdWVgIGlzIGhhbmRsZWQgc2VwYXJhdGVseSBiZWNhdXNlIHRoZSBET00gdmFsdWUgbWF5IGJlIHRlbXBvcmFyaWx5XG4gICAgICAgIC8vIG91dCBvZiBzeW5jIHdpdGggVkRPTSBzdGF0ZSBkdWUgdG8gZm9jdXMsIGNvbXBvc2l0aW9uIGFuZCBtb2RpZmllcnMuXG4gICAgICAgIC8vIFRoaXMgICM0NTIxIGJ5IHNraXBwaW5nIHRoZSB1bm5lY2Vzc2FyeSBgY2hlY2tlZGAgdXBkYXRlLlxuICAgICAgICBjdXIgIT09IG9sZFByb3BzW2tleV0pIHtcbiAgICAgICAgICAgIC8vIHNvbWUgcHJvcGVydHkgdXBkYXRlcyBjYW4gdGhyb3dcbiAgICAgICAgICAgIC8vIGUuZy4gYHZhbHVlYCBvbiA8cHJvZ3Jlc3M+IHcvIG5vbi1maW5pdGUgdmFsdWVcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZWxtW2tleV0gPSBjdXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkgeyB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBzaG91bGRVcGRhdGVWYWx1ZShlbG0sIGNoZWNrVmFsKSB7XG4gICAgcmV0dXJuIChcbiAgICAvL0B0cy1leHBlY3QtZXJyb3JcbiAgICAhZWxtLmNvbXBvc2luZyAmJlxuICAgICAgICAoZWxtLnRhZ05hbWUgPT09ICdPUFRJT04nIHx8XG4gICAgICAgICAgICBpc05vdEluRm9jdXNBbmREaXJ0eShlbG0sIGNoZWNrVmFsKSB8fFxuICAgICAgICAgICAgaXNEaXJ0eVdpdGhNb2RpZmllcnMoZWxtLCBjaGVja1ZhbCkpKTtcbn1cbmZ1bmN0aW9uIGlzTm90SW5Gb2N1c0FuZERpcnR5KGVsbSwgY2hlY2tWYWwpIHtcbiAgICAvLyByZXR1cm4gdHJ1ZSB3aGVuIHRleHRib3ggKC5udW1iZXIgYW5kIC50cmltKSBsb3NlcyBmb2N1cyBhbmQgaXRzIHZhbHVlIGlzXG4gICAgLy8gbm90IGVxdWFsIHRvIHRoZSB1cGRhdGVkIHZhbHVlXG4gICAgdmFyIG5vdEluRm9jdXMgPSB0cnVlO1xuICAgIC8vICM2MTU3XG4gICAgLy8gd29yayBhcm91bmQgSUUgYnVnIHdoZW4gYWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW4gYW4gaWZyYW1lXG4gICAgdHJ5IHtcbiAgICAgICAgbm90SW5Gb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGVsbTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHsgfVxuICAgIHJldHVybiBub3RJbkZvY3VzICYmIGVsbS52YWx1ZSAhPT0gY2hlY2tWYWw7XG59XG5mdW5jdGlvbiBpc0RpcnR5V2l0aE1vZGlmaWVycyhlbG0sIG5ld1ZhbCkge1xuICAgIHZhciB2YWx1ZSA9IGVsbS52YWx1ZTtcbiAgICB2YXIgbW9kaWZpZXJzID0gZWxtLl92TW9kaWZpZXJzOyAvLyBpbmplY3RlZCBieSB2LW1vZGVsIHJ1bnRpbWVcbiAgICBpZiAoaXNEZWYobW9kaWZpZXJzKSkge1xuICAgICAgICBpZiAobW9kaWZpZXJzLm51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRvTnVtYmVyKHZhbHVlKSAhPT0gdG9OdW1iZXIobmV3VmFsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXJzLnRyaW0pIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS50cmltKCkgIT09IG5ld1ZhbC50cmltKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlICE9PSBuZXdWYWw7XG59XG52YXIgZG9tUHJvcHMgPSB7XG4gICAgY3JlYXRlOiB1cGRhdGVET01Qcm9wcyxcbiAgICB1cGRhdGU6IHVwZGF0ZURPTVByb3BzXG59O1xuXG52YXIgcGFyc2VTdHlsZVRleHQgPSBjYWNoZWQoZnVuY3Rpb24gKGNzc1RleHQpIHtcbiAgICB2YXIgcmVzID0ge307XG4gICAgdmFyIGxpc3REZWxpbWl0ZXIgPSAvOyg/IVteKF0qXFwpKS9nO1xuICAgIHZhciBwcm9wZXJ0eURlbGltaXRlciA9IC86KC4rKS87XG4gICAgY3NzVGV4dC5zcGxpdChsaXN0RGVsaW1pdGVyKS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICB2Y
13835XIgdG1wID0gaXRlbS5zcGxpdChwcm9wZXJ0eURlbGltaXRlcik7XG4gICAgICAgICAgICB0bXAubGVuZ3RoID4gMSAmJiAocmVzW3RtcFswXS50cmltKCldID0gdG1wWzFdLnRyaW0oKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzO1xufSk7XG4vLyBtZXJnZSBzdGF0aWMgYW5kIGR5bmFtaWMgc3R5bGUgZGF0YSBvbiB0aGUgc2FtZSB2bm9kZVxuZnVuY3Rpb24gbm9ybWFsaXplU3R5bGVEYXRhKGRhdGEpIHtcbiAgICB2YXIgc3R5bGUgPSBub3JtYWxpemVTdHlsZUJpbmRpbmcoZGF0YS5zdHlsZSk7XG4gICAgLy8gc3RhdGljIHN0eWxlIGlzIHByZS1wcm9jZXNzZWQgaW50byBhbiBvYmplY3QgZHVyaW5nIGNvbXBpbGF0aW9uXG4gICAgLy8gYW5kIGlzIGFsd2F5cyBhIGZyZXNoIG9iamVjdCwgc28gaXQncyBzYWZlIHRvIG1lcmdlIGludG8gaXRcbiAgICByZXR1cm4gZGF0YS5zdGF0aWNTdHlsZSA/IGV4dGVuZChkYXRhLnN0YXRpY1N0eWxlLCBzdHlsZSkgOiBzdHlsZTtcbn1cbi8vIG5vcm1hbGl6ZSBwb3NzaWJsZSBhcnJheSAvIHN0cmluZyB2YWx1ZXMgaW50byBPYmplY3RcbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0eWxlQmluZGluZyhiaW5kaW5nU3R5bGUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiaW5kaW5nU3R5bGUpKSB7XG4gICAgICAgIHJldHVybiB0b09iamVjdChiaW5kaW5nU3R5bGUpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGJpbmRpbmdTdHlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlU3R5bGVUZXh0KGJpbmRpbmdTdHlsZSk7XG4gICAgfVxuICAgIHJldHVybiBiaW5kaW5nU3R5bGU7XG59XG4vKipcbiAqIHBhcmVudCBjb21wb25lbnQgc3R5bGUgc2hvdWxkIGJlIGFmdGVyIGNoaWxkJ3NcbiAqIHNvIHRoYXQgcGFyZW50IGNvbXBvbmVudCdzIHN0eWxlIGNvdWxkIG92ZXJyaWRlIGl0XG4gKi9cbmZ1bmN0aW9uIGdldFN0eWxlKHZub2RlLCBjaGVja0NoaWxkKSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIHZhciBzdHlsZURhdGE7XG4gICAgaWYgKGNoZWNrQ2hpbGQpIHtcbiAgICAgICAgdmFyIGNoaWxkTm9kZSA9IHZub2RlO1xuICAgICAgICB3aGlsZSAoY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgICAgICAgICAgaWYgKGNoaWxkTm9kZSAmJlxuICAgICAgICAgICAgICAgIGNoaWxkTm9kZS5kYXRhICYmXG4gICAgICAgICAgICAgICAgKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YShjaGlsZE5vZGUuZGF0YSkpKSB7XG4gICAgICAgICAgICAgICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YSh2bm9kZS5kYXRhKSkpIHtcbiAgICAgICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgICB9XG4gICAgdmFyIHBhcmVudE5vZGUgPSB2bm9kZTtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHBhcmVudE5vZGUucGFyZW50IG5vdCBWTm9kZVdpdGhEYXRhXG4gICAgd2hpbGUgKChwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnQpKSB7XG4gICAgICAgIGlmIChwYXJlbnROb2RlLmRhdGEgJiYgKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YShwYXJlbnROb2RlLmRhdGEpKSkge1xuICAgICAgICAgICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG52YXIgY3NzVmFyUkUgPSAvXi0tLztcbnZhciBpbXBvcnRhbnRSRSA9IC9cXHMqIWltcG9ydGFudCQvO1xudmFyIHNldFByb3AgPSBmdW5jdGlvbiAoZWwsIG5hbWUsIHZhbCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChjc3NWYXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGltcG9ydGFudFJFLnRlc3QodmFsKSkge1xuICAgICAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShoeXBoZW5hdGUobmFtZSksIHZhbC5yZXBsYWNlKGltcG9ydGFudFJFLCAnJyksICdpbXBvcnRhbnQnKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZShuYW1lKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICAgICAgLy8gU3VwcG9ydCB2YWx1ZXMgYXJyYXkgY3JlYXRlZCBieSBhdXRvcHJlZml4ZXIsIGUuZy5cbiAgICAgICAgICAgIC8vIHtkaXNwbGF5OiBbXCItd2Via2l0LWJveFwiLCBcIi1tcy1mbGV4Ym94XCIsIFwiZmxleFwiXX1cbiAgICAgICAgICAgIC8vIFNldCB0aGVtIG9uZSBieSBvbmUsIGFuZCB0aGUgYnJvd3NlciB3aWxsIG9ubHkgc2V0IHRob3NlIGl0IGNhbiByZWNvZ25pemVcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB2YWwubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBlbC5zdHlsZVtub3JtYWxpemVkTmFtZV0gPSB2YWxbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbC5zdHlsZVtub3JtYWxpemVkTmFtZV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59O1xudmFyIHZlbmRvck5hbWVzID0gWydXZWJraXQnLCAnTW96JywgJ21zJ107XG52YXIgZW1wdHlTdHlsZTtcbnZhciBub3JtYWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHByb3ApIHtcbiAgICBlbXB0eVN0eWxlID0gZW1wdHlTdHlsZSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZTtcbiAgICBwcm9wID0gY2FtZWxpemUocHJvcCk7XG4gICAgaWYgKHByb3AgIT09ICdmaWx0ZXInICYmIHByb3AgaW4gZW1wdHlTdHlsZSkge1xuICAgICAgICByZXR1cm4gcHJvcDtcbiAgICB9XG4gICAgdmFyIGNhcE5hbWUgPSBwcm9wLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcHJvcC5zbGljZSgxKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlbmRvck5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgI
13835HZhciBuYW1lXzEgPSB2ZW5kb3JOYW1lc1tpXSArIGNhcE5hbWU7XG4gICAgICAgIGlmIChuYW1lXzEgaW4gZW1wdHlTdHlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVfMTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuZnVuY3Rpb24gdXBkYXRlU3R5bGUob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIHZhciBvbGREYXRhID0gb2xkVm5vZGUuZGF0YTtcbiAgICBpZiAoaXNVbmRlZihkYXRhLnN0YXRpY1N0eWxlKSAmJlxuICAgICAgICBpc1VuZGVmKGRhdGEuc3R5bGUpICYmXG4gICAgICAgIGlzVW5kZWYob2xkRGF0YS5zdGF0aWNTdHlsZSkgJiZcbiAgICAgICAgaXNVbmRlZihvbGREYXRhLnN0eWxlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjdXIsIG5hbWU7XG4gICAgdmFyIGVsID0gdm5vZGUuZWxtO1xuICAgIHZhciBvbGRTdGF0aWNTdHlsZSA9IG9sZERhdGEuc3RhdGljU3R5bGU7XG4gICAgdmFyIG9sZFN0eWxlQmluZGluZyA9IG9sZERhdGEubm9ybWFsaXplZFN0eWxlIHx8IG9sZERhdGEuc3R5bGUgfHwge307XG4gICAgLy8gaWYgc3RhdGljIHN0eWxlIGV4aXN0cywgc3R5bGViaW5kaW5nIGFscmVhZHkgbWVyZ2VkIGludG8gaXQgd2hlbiBkb2luZyBub3JtYWxpemVTdHlsZURhdGFcbiAgICB2YXIgb2xkU3R5bGUgPSBvbGRTdGF0aWNTdHlsZSB8fCBvbGRTdHlsZUJpbmRpbmc7XG4gICAgdmFyIHN0eWxlID0gbm9ybWFsaXplU3R5bGVCaW5kaW5nKHZub2RlLmRhdGEuc3R5bGUpIHx8IHt9O1xuICAgIC8vIHN0b3JlIG5vcm1hbGl6ZWQgc3R5bGUgdW5kZXIgYSBkaWZmZXJlbnQga2V5IGZvciBuZXh0IGRpZmZcbiAgICAvLyBtYWtlIHN1cmUgdG8gY2xvbmUgaXQgaWYgaXQncyByZWFjdGl2ZSwgc2luY2UgdGhlIHVzZXIgbGlrZWx5IHdhbnRzXG4gICAgLy8gdG8gbXV0YXRlIGl0LlxuICAgIHZub2RlLmRhdGEubm9ybWFsaXplZFN0eWxlID0gaXNEZWYoc3R5bGUuX19vYl9fKSA/IGV4dGVuZCh7fSwgc3R5bGUpIDogc3R5bGU7XG4gICAgdmFyIG5ld1N0eWxlID0gZ2V0U3R5bGUodm5vZGUsIHRydWUpO1xuICAgIGZvciAobmFtZSBpbiBvbGRTdHlsZSkge1xuICAgICAgICBpZiAoaXNVbmRlZihuZXdTdHlsZVtuYW1lXSkpIHtcbiAgICAgICAgICAgIHNldFByb3AoZWwsIG5hbWUsICcnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKG5hbWUgaW4gbmV3U3R5bGUpIHtcbiAgICAgICAgY3VyID0gbmV3U3R5bGVbbmFtZV07XG4gICAgICAgIGlmIChjdXIgIT09IG9sZFN0eWxlW25hbWVdKSB7XG4gICAgICAgICAgICAvLyBpZTkgc2V0dGluZyB0byBudWxsIGhhcyBubyBlZmZlY3QsIG11c3QgdXNlIGVtcHR5IHN0cmluZ1xuICAgICAgICAgICAgc2V0UHJvcChlbCwgbmFtZSwgY3VyID09IG51bGwgPyAnJyA6IGN1cik7XG4gICAgICAgIH1cbiAgICB9XG59XG52YXIgc3R5bGUkMSA9IHtcbiAgICBjcmVhdGU6IHVwZGF0ZVN0eWxlLFxuICAgIHVwZGF0ZTogdXBkYXRlU3R5bGVcbn07XG5cbnZhciB3aGl0ZXNwYWNlUkUkMSA9IC9cXHMrLztcbi8qKlxuICogQWRkIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAqL1xuZnVuY3Rpb24gYWRkQ2xhc3MoZWwsIGNscykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICAgICAgaWYgKGNscy5pbmRleE9mKCcgJykgPiAtMSkge1xuICAgICAgICAgICAgY2xzLnNwbGl0KHdoaXRlc3BhY2VSRSQxKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xpc3QuYWRkKGMpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoY2xzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIGN1ciA9IFwiIFwiLmNvbmNhdChlbC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycsIFwiIFwiKTtcbiAgICAgICAgaWYgKGN1ci5pbmRleE9mKCcgJyArIGNscyArICcgJykgPCAwKSB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgKGN1ciArIGNscykudHJpbSgpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogUmVtb3ZlIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWwsIGNscykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICAgICAgaWYgKGNscy5pbmRleE9mKCcgJykgPiAtMSkge1xuICAgICAgICAgICAgY2xzLnNwbGl0KHdoaXRlc3BhY2VSRSQxKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xpc3QucmVtb3ZlKGMpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoY2xzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVsLmNsYXNzTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIGN1ciA9IFwiIFwiLmNvbmNhdChlbC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycsIFwiIFwiKTtcbiAgICAgICAgdmFyIHRhciA9ICcgJyArIGNscyArICcgJztcbiAgICAgICAgd2hpbGUgKGN1ci5pbmRleE9mKHRhcikgPj0gMCkge1xuICAgICAgICAgICAgY3VyID0gY3VyLnJlcGxhY2UodGFyLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIGN1ciA9IGN1ci50cmltKCk7XG4gICAgICAgIGlmIChjdXIpIHtcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjdXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlVHJhbnNpdGlvbihkZWYpIHtcbiAgICBpZiAoIWRlZikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHR5cGVvZiBkZWYgPT09ICdvYmplY3QnKSB7XG4gICAgICAgI
13835HZhciByZXMgPSB7fTtcbiAgICAgICAgaWYgKGRlZi5jc3MgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBleHRlbmQocmVzLCBhdXRvQ3NzVHJhbnNpdGlvbihkZWYubmFtZSB8fCAndicpKTtcbiAgICAgICAgfVxuICAgICAgICBleHRlbmQocmVzLCBkZWYpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gYXV0b0Nzc1RyYW5zaXRpb24oZGVmKTtcbiAgICB9XG59XG52YXIgYXV0b0Nzc1RyYW5zaXRpb24gPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBlbnRlckNsYXNzOiBcIlwiLmNvbmNhdChuYW1lLCBcIi1lbnRlclwiKSxcbiAgICAgICAgZW50ZXJUb0NsYXNzOiBcIlwiLmNvbmNhdChuYW1lLCBcIi1lbnRlci10b1wiKSxcbiAgICAgICAgZW50ZXJBY3RpdmVDbGFzczogXCJcIi5jb25jYXQobmFtZSwgXCItZW50ZXItYWN0aXZlXCIpLFxuICAgICAgICBsZWF2ZUNsYXNzOiBcIlwiLmNvbmNhdChuYW1lLCBcIi1sZWF2ZVwiKSxcbiAgICAgICAgbGVhdmVUb0NsYXNzOiBcIlwiLmNvbmNhdChuYW1lLCBcIi1sZWF2ZS10b1wiKSxcbiAgICAgICAgbGVhdmVBY3RpdmVDbGFzczogXCJcIi5jb25jYXQobmFtZSwgXCItbGVhdmUtYWN0aXZlXCIpXG4gICAgfTtcbn0pO1xudmFyIGhhc1RyYW5zaXRpb24gPSBpbkJyb3dzZXIgJiYgIWlzSUU5O1xudmFyIFRSQU5TSVRJT04gPSAndHJhbnNpdGlvbic7XG52YXIgQU5JTUFUSU9OID0gJ2FuaW1hdGlvbic7XG4vLyBUcmFuc2l0aW9uIHByb3BlcnR5L2V2ZW50IHNuaWZmaW5nXG52YXIgdHJhbnNpdGlvblByb3AgPSAndHJhbnNpdGlvbic7XG52YXIgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3RyYW5zaXRpb25lbmQnO1xudmFyIGFuaW1hdGlvblByb3AgPSAnYW5pbWF0aW9uJztcbnZhciBhbmltYXRpb25FbmRFdmVudCA9ICdhbmltYXRpb25lbmQnO1xuaWYgKGhhc1RyYW5zaXRpb24pIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAod2luZG93Lm9udHJhbnNpdGlvbmVuZCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHdpbmRvdy5vbndlYmtpdHRyYW5zaXRpb25lbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0cmFuc2l0aW9uUHJvcCA9ICdXZWJraXRUcmFuc2l0aW9uJztcbiAgICAgICAgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3dlYmtpdFRyYW5zaXRpb25FbmQnO1xuICAgIH1cbiAgICBpZiAod2luZG93Lm9uYW5pbWF0aW9uZW5kID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgd2luZG93Lm9ud2Via2l0YW5pbWF0aW9uZW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYW5pbWF0aW9uUHJvcCA9ICdXZWJraXRBbmltYXRpb24nO1xuICAgICAgICBhbmltYXRpb25FbmRFdmVudCA9ICd3ZWJraXRBbmltYXRpb25FbmQnO1xuICAgIH1cbn1cbi8vIGJpbmRpbmcgdG8gd2luZG93IGlzIG5lY2Vzc2FyeSB0byBtYWtlIGhvdCByZWxvYWQgd29yayBpbiBJRSBpbiBzdHJpY3QgbW9kZVxudmFyIHJhZiA9IGluQnJvd3NlclxuICAgID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgICAgICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpXG4gICAgICAgIDogc2V0VGltZW91dFxuICAgIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZnVuY3Rpb24gKC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZuKSB7IHJldHVybiBmbigpOyB9O1xuZnVuY3Rpb24gbmV4dEZyYW1lKGZuKSB7XG4gICAgcmFmKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICByYWYoZm4pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBjbHMpIHtcbiAgICB2YXIgdHJhbnNpdGlvbkNsYXNzZXMgPSBlbC5fdHJhbnNpdGlvbkNsYXNzZXMgfHwgKGVsLl90cmFuc2l0aW9uQ2xhc3NlcyA9IFtdKTtcbiAgICBpZiAodHJhbnNpdGlvbkNsYXNzZXMuaW5kZXhPZihjbHMpIDwgMCkge1xuICAgICAgICB0cmFuc2l0aW9uQ2xhc3Nlcy5wdXNoKGNscyk7XG4gICAgICAgIGFkZENsYXNzKGVsLCBjbHMpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgY2xzKSB7XG4gICAgaWYgKGVsLl90cmFuc2l0aW9uQ2xhc3Nlcykge1xuICAgICAgICByZW1vdmUkMihlbC5fdHJhbnNpdGlvbkNsYXNzZXMsIGNscyk7XG4gICAgfVxuICAgIHJlbW92ZUNsYXNzKGVsLCBjbHMpO1xufVxuZnVuY3Rpb24gd2hlblRyYW5zaXRpb25FbmRzKGVsLCBleHBlY3RlZFR5cGUsIGNiKSB7XG4gICAgdmFyIF9hID0gZ2V0VHJhbnNpdGlvbkluZm8oZWwsIGV4cGVjdGVkVHlwZSksIHR5cGUgPSBfYS50eXBlLCB0aW1lb3V0ID0gX2EudGltZW91dCwgcHJvcENvdW50ID0gX2EucHJvcENvdW50O1xuICAgIGlmICghdHlwZSlcbiAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgdmFyIGV2ZW50ID0gdHlwZSA9PT0gVFJBTlNJVElPTiA/IHRyYW5zaXRpb25FbmRFdmVudCA6IGFuaW1hdGlvbkVuZEV2ZW50O1xuICAgIHZhciBlbmRlZCA9IDA7XG4gICAgdmFyIGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgb25FbmQpO1xuICAgICAgICBjYigpO1xuICAgIH07XG4gICAgdmFyIG9uRW5kID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBlbCkge1xuICAgICAgICAgICAgaWYgKCsrZW5kZWQgPj0gcHJvcENvdW50KSB7XG4gICAgICAgICAgICAgICAgZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoZW5kZWQgPCBwcm9wQ291bnQpIHtcbiAgICAgICAgICAgIGVuZCgpO1xuICAgICAgICB9XG4gICAgfSwgdGltZW91dCArIDEpO1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uRW5kKTtcbn1cbnZhciB0cmFuc2Zvcm1SRSA9IC9cXGIodHJhbnNmb3JtfGFsbCkoLHwkKS87XG5mdW5jdGlvbiBnZXRUcmFuc2l0aW9uSW5mbyhlbCwgZXhwZWN0ZWRUeXBlKSB7XG4gICAgdmFyIHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcbiAgICAvLyBKU0RPTSBtYXkgcmV0dXJuIHVuZGVmaW5lZCBmb3IgdHJhbnNpdGlvbiBwcm9wZXJ0aWVzXG4gICAgdmFyIHRyYW5zaXRpb25EZWxheXMgP
13835SAoc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ0RlbGF5J10gfHwgJycpLnNwbGl0KCcsICcpO1xuICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb25zID0gKHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdEdXJhdGlvbiddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgICB2YXIgdHJhbnNpdGlvblRpbWVvdXQgPSBnZXRUaW1lb3V0KHRyYW5zaXRpb25EZWxheXMsIHRyYW5zaXRpb25EdXJhdGlvbnMpO1xuICAgIHZhciBhbmltYXRpb25EZWxheXMgPSAoc3R5bGVzW2FuaW1hdGlvblByb3AgKyAnRGVsYXknXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gICAgdmFyIGFuaW1hdGlvbkR1cmF0aW9ucyA9IChzdHlsZXNbYW5pbWF0aW9uUHJvcCArICdEdXJhdGlvbiddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgICB2YXIgYW5pbWF0aW9uVGltZW91dCA9IGdldFRpbWVvdXQoYW5pbWF0aW9uRGVsYXlzLCBhbmltYXRpb25EdXJhdGlvbnMpO1xuICAgIHZhciB0eXBlO1xuICAgIHZhciB0aW1lb3V0ID0gMDtcbiAgICB2YXIgcHJvcENvdW50ID0gMDtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoZXhwZWN0ZWRUeXBlID09PSBUUkFOU0lUSU9OKSB7XG4gICAgICAgIGlmICh0cmFuc2l0aW9uVGltZW91dCA+IDApIHtcbiAgICAgICAgICAgIHR5cGUgPSBUUkFOU0lUSU9OO1xuICAgICAgICAgICAgdGltZW91dCA9IHRyYW5zaXRpb25UaW1lb3V0O1xuICAgICAgICAgICAgcHJvcENvdW50ID0gdHJhbnNpdGlvbkR1cmF0aW9ucy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSBBTklNQVRJT04pIHtcbiAgICAgICAgaWYgKGFuaW1hdGlvblRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgICB0eXBlID0gQU5JTUFUSU9OO1xuICAgICAgICAgICAgdGltZW91dCA9IGFuaW1hdGlvblRpbWVvdXQ7XG4gICAgICAgICAgICBwcm9wQ291bnQgPSBhbmltYXRpb25EdXJhdGlvbnMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aW1lb3V0ID0gTWF0aC5tYXgodHJhbnNpdGlvblRpbWVvdXQsIGFuaW1hdGlvblRpbWVvdXQpO1xuICAgICAgICB0eXBlID1cbiAgICAgICAgICAgIHRpbWVvdXQgPiAwXG4gICAgICAgICAgICAgICAgPyB0cmFuc2l0aW9uVGltZW91dCA+IGFuaW1hdGlvblRpbWVvdXRcbiAgICAgICAgICAgICAgICAgICAgPyBUUkFOU0lUSU9OXG4gICAgICAgICAgICAgICAgICAgIDogQU5JTUFUSU9OXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBwcm9wQ291bnQgPSB0eXBlXG4gICAgICAgICAgICA/IHR5cGUgPT09IFRSQU5TSVRJT05cbiAgICAgICAgICAgICAgICA/IHRyYW5zaXRpb25EdXJhdGlvbnMubGVuZ3RoXG4gICAgICAgICAgICAgICAgOiBhbmltYXRpb25EdXJhdGlvbnMubGVuZ3RoXG4gICAgICAgICAgICA6IDA7XG4gICAgfVxuICAgIHZhciBoYXNUcmFuc2Zvcm0gPSB0eXBlID09PSBUUkFOU0lUSU9OICYmIHRyYW5zZm9ybVJFLnRlc3Qoc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ1Byb3BlcnR5J10pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIHRpbWVvdXQ6IHRpbWVvdXQsXG4gICAgICAgIHByb3BDb3VudDogcHJvcENvdW50LFxuICAgICAgICBoYXNUcmFuc2Zvcm06IGhhc1RyYW5zZm9ybVxuICAgIH07XG59XG5mdW5jdGlvbiBnZXRUaW1lb3V0KGRlbGF5cywgZHVyYXRpb25zKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB3aGlsZSAoZGVsYXlzLmxlbmd0aCA8IGR1cmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgZGVsYXlzID0gZGVsYXlzLmNvbmNhdChkZWxheXMpO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCwgZHVyYXRpb25zLm1hcChmdW5jdGlvbiAoZCwgaSkge1xuICAgICAgICByZXR1cm4gdG9NcyhkKSArIHRvTXMoZGVsYXlzW2ldKTtcbiAgICB9KSk7XG59XG4vLyBPbGQgdmVyc2lvbnMgb2YgQ2hyb21pdW0gKGJlbG93IDYxLjAuMzE2My4xMDApIGZvcm1hdHMgZmxvYXRpbmcgcG9pbnRlciBudW1iZXJzXG4vLyBpbiBhIGxvY2FsZS1kZXBlbmRlbnQgd2F5LCB1c2luZyBhIGNvbW1hIGluc3RlYWQgb2YgYSBkb3QuXG4vLyBJZiBjb21tYSBpcyBub3QgcmVwbGFjZWQgd2l0aCBhIGRvdCwgdGhlIGlucHV0IHdpbGwgYmUgcm91bmRlZCBkb3duIChpLmUuIGFjdGluZ1xuLy8gYXMgYSBmbG9vciBmdW5jdGlvbikgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yc1xuZnVuY3Rpb24gdG9NcyhzKSB7XG4gICAgcmV0dXJuIE51bWJlcihzLnNsaWNlKDAsIC0xKS5yZXBsYWNlKCcsJywgJy4nKSkgKiAxMDAwO1xufVxuXG5mdW5jdGlvbiBlbnRlcih2bm9kZSwgdG9nZ2xlRGlzcGxheSkge1xuICAgIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgICAvLyBjYWxsIGxlYXZlIGNhbGxiYWNrIG5vd1xuICAgIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcbiAgICAgICAgZWwuX2xlYXZlQ2IuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgZWwuX2xlYXZlQ2IoKTtcbiAgICB9XG4gICAgdmFyIGRhdGEgPSByZXNvbHZlVHJhbnNpdGlvbih2bm9kZS5kYXRhLnRyYW5zaXRpb24pO1xuICAgIGlmIChpc1VuZGVmKGRhdGEpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSB8fCBlbC5ub2RlVHlwZSAhPT0gMSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjc3MgPSBkYXRhLmNzcywgdHlwZSA9IGRhdGEudHlwZSwgZW50ZXJDbGFzcyA9IGRhdGEuZW50ZXJDbGFzcywgZW50ZXJUb0NsYXNzID0gZGF0YS5lbnRlclRvQ2xhc3MsIGVudGVyQWN0aXZlQ2xhc3MgPSBkYXRhLmVudGVyQWN0aXZlQ2xhc3MsIGFwcGVhckNsYXNzID0gZGF0YS5hcHBlYXJDbGFzcywgYXBwZWFyVG9DbGFzcyA9IGRhdGEuYXBwZWFyVG9DbGFzcywgYXBwZWFyQWN0aXZlQ2xhc3MgPSBkYXRhLmFwcGVhckFjdGl2ZUNsYXNzLCBiZWZvcmVFbnRlciA9IGRhdGEuYmVmb3JlRW50ZXIsIGVudGVyID0gZGF0YS5lbnRlciwgYWZ0ZXJFbnRlciA9IGRhdGEuYWZ0ZXJFbnRlciwgZW50ZXJDYW5jZWxsZWQgPSBkYXRhLmVudGVyQ2FuY2VsbGVkLCBiZWZvcmVBcHBlYXIgPSBkYXRhLmJlZm9yZUFwcGVhciwgYXBwZWFyID0gZGF0YS5hcHBlYXIsIGFmdGVyQXBwZWFyID0gZGF0YS5hZnRlckFwcGVhciwgYXBwZWFyQ2FuY2VsbGVkID0gZGF0YS5hcHBlYXJDYW5jZWxsZWQsIGR1cmF0aW9uID0gZGF0YS5kdXJhdGlvbjtcbiAgICAvLyBhY3RpdmVJbnN0YW5jZSB3aWxsIGFsd2F5cyBiZSB0aGUgPHRyYW5zaXRpb24+IGNvbXBvbmVudCBtYW5hZ2luZyB0aGlzXG4gICAgLy8gdHJhbnNpdGlvbi4gT25lIGVkZ2UgY2FzZSB0byBjaGVjayBpcyB3aGVuIHRoZSA8dHJhbnNpdGlvbj4gaXMgcGxhY2VkXG4gICAgLy8gYXMgdGhlIHJvb3Qgbm9kZSBvZiBhIGNoaWxkIGNvbXBvbmVudC4gSW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gY2hlY2tcbiAgICAvLyA8dHJhbnNpdGlvbj4ncyBwYXJlbnQgZm9yIGFwcGVhciBjaGVjay5cbiAgICB2YXIgY29udGV4dCA9IGFjdGl2ZUluc3RhbmNlO1xuICAgIHZhciB0cmFuc2l0aW9uTm9kZSA9IGFjdGl2ZUluc3RhbmNlLiR2bm9kZTtcbiAgICB3aGlsZSAodHJhbnNpdGlvbk5vZGUgJiYgdHJhbnNpdGlvbk5vZGUucGFyZW50KSB7XG4gICAgICAgIGNvbnRleHQgPSB0cmFuc2l0aW9uTm9kZS5jb250ZXh0O1xuICAgICAgICB0cmFuc2l0aW9uTm9kZSA9IHRyYW5zaXRpb25Ob2RlLnBhcmVudDtcbiAgICB9XG4gICAgdmFyIGlzQXBwZWFyID0gIWNvbnRleHQuX2lzTW91bnRlZCB8fCAhdm5vZGUuaXNSb290SW5zZXJ0O1xuICAgIGlmIChpc0FwcGVhciAmJiAhYXBwZWFyICYmIGFwcGVhciAhPT0gJycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgc3RhcnRDbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhckNsYXNzID8gYXBwZWFyQ2xhc3MgOiBlbnRlckNsYXNzO1xuICAgIHZhciBhY3RpdmVDbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhckFjdGl2ZUNsYXNzID8gYXBwZWFyQWN0aXZlQ2xhc3MgOiBlbnRlckFjdGl2ZUNsYXNzO1xuICAgIHZhciB0b0NsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyVG9DbGFzcyA/IGFwcGVhclRvQ2xhc3MgOiBlbnRlclRvQ2xhc3M7XG4gICAgdmFyIGJlZm9yZUVudGVySG9vayA9IGlzQXBwZWFyID8gYmVmb3JlQXBwZWFyIHx8IGJlZm9yZUVudGVyIDogYmVmb3JlRW50ZXI7XG4gICAgdmFyIGVudGVySG9vayA9IGlzQXBwZWFyID8gKGlzRnVuY3Rpb24oYXBwZWFyKSA/IGFwcGVhciA6IGVudGVyKSA6IGVudGVyO1xuICAgIHZhciBhZnRlckVudGVySG9vayA9IGlzQXBwZWFyID8gYWZ0ZXJBcHBlYXIgfHwgYWZ0ZXJFbnRlciA6IGFmdGVyRW50ZXI7XG4gICAgdmFyIGVudGVyQ2FuY2VsbGVkSG9vayA9IGlzQXBwZWFyXG4gICAgICAgID8gYXBwZWFyQ2FuY2VsbGVkIHx8IGVudGVyQ2FuY2VsbGVkXG4gICAgICAgIDogZW50ZXJDYW5jZWxsZWQ7XG4gICAgdmFyIGV4cGxpY2l0RW50ZXJEdXJhdGlvbiA9IHRvTnVtYmVyKGlzT2JqZWN0KGR1cmF0aW9uKSA/IGR1cmF0aW9uLmVudGVyIDogZHVyYXRpb24pO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGV4cGxpY2l0RW50ZXJEdXJhdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIGNoZWNrRHVyYXRpb24oZXhwbGljaXRFbnRlckR1cmF0aW9uLCAnZW50ZXInLCB2bm9kZSk7XG4gICAgfVxuICAgIHZhciBleHBlY3RzQ1NTID0gY3NzICE9PSBmYWxzZSAmJiAhaXNJRTk7XG4gICAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGVudGVySG9vayk7XG4gICAgdmFyIGNiID0gKGVsLl9lbnRlckNiID0gb25jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHRvQ2xhc3MpO1xuICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBhY3RpdmVDbGFzcyk7XG4gICAgICAgI
13835H1cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbnRlckNhbmNlbGxlZEhvb2sgJiYgZW50ZXJDYW5jZWxsZWRIb29rKGVsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFmdGVyRW50ZXJIb29rICYmIGFmdGVyRW50ZXJIb29rKGVsKTtcbiAgICAgICAgfVxuICAgICAgICBlbC5fZW50ZXJDYiA9IG51bGw7XG4gICAgfSkpO1xuICAgIGlmICghdm5vZGUuZGF0YS5zaG93KSB7XG4gICAgICAgIC8vIHJlbW92ZSBwZW5kaW5nIGxlYXZlIGVsZW1lbnQgb24gZW50ZXIgYnkgaW5qZWN0aW5nIGFuIGluc2VydCBob29rXG4gICAgICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAnaW5zZXJ0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVsLnBhcmVudE5vZGU7XG4gICAgICAgICAgICB2YXIgcGVuZGluZ05vZGUgPSBwYXJlbnQgJiYgcGFyZW50Ll9wZW5kaW5nICYmIHBhcmVudC5fcGVuZGluZ1t2bm9kZS5rZXldO1xuICAgICAgICAgICAgaWYgKHBlbmRpbmdOb2RlICYmXG4gICAgICAgICAgICAgICAgcGVuZGluZ05vZGUudGFnID09PSB2bm9kZS50YWcgJiZcbiAgICAgICAgICAgICAgICBwZW5kaW5nTm9kZS5lbG0uX2xlYXZlQ2IpIHtcbiAgICAgICAgICAgICAgICBwZW5kaW5nTm9kZS5lbG0uX2xlYXZlQ2IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIHN0YXJ0IGVudGVyIHRyYW5zaXRpb25cbiAgICBiZWZvcmVFbnRlckhvb2sgJiYgYmVmb3JlRW50ZXJIb29rKGVsKTtcbiAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIHN0YXJ0Q2xhc3MpO1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGFjdGl2ZUNsYXNzKTtcbiAgICAgICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBpZiAoIWNiLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgdG9DbGFzcyk7XG4gICAgICAgICAgICAgICAgaWYgKCF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRHVyYXRpb24oZXhwbGljaXRFbnRlckR1cmF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChjYiwgZXhwbGljaXRFbnRlckR1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgY2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHZub2RlLmRhdGEuc2hvdykge1xuICAgICAgICB0b2dnbGVEaXNwbGF5ICYmIHRvZ2dsZURpc3BsYXkoKTtcbiAgICAgICAgZW50ZXJIb29rICYmIGVudGVySG9vayhlbCwgY2IpO1xuICAgIH1cbiAgICBpZiAoIWV4cGVjdHNDU1MgJiYgIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBsZWF2ZSh2bm9kZSwgcm0pIHtcbiAgICB2YXIgZWwgPSB2bm9kZS5lbG07XG4gICAgLy8gY2FsbCBlbnRlciBjYWxsYmFjayBub3dcbiAgICBpZiAoaXNEZWYoZWwuX2VudGVyQ2IpKSB7XG4gICAgICAgIGVsLl9lbnRlckNiLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIGVsLl9lbnRlckNiKCk7XG4gICAgfVxuICAgIHZhciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcbiAgICBpZiAoaXNVbmRlZihkYXRhKSB8fCBlbC5ub2RlVHlwZSAhPT0gMSkge1xuICAgICAgICByZXR1cm4gcm0oKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzRGVmKGVsLl9sZWF2ZUNiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjc3MgPSBkYXRhLmNzcywgdHlwZSA9IGRhdGEudHlwZSwgbGVhdmVDbGFzcyA9IGRhdGEubGVhdmVDbGFzcywgbGVhdmVUb0NsYXNzID0gZGF0YS5sZWF2ZVRvQ2xhc3MsIGxlYXZlQWN0aXZlQ2xhc3MgPSBkYXRhLmxlYXZlQWN0aXZlQ2xhc3MsIGJlZm9yZUxlYXZlID0gZGF0YS5iZWZvcmVMZWF2ZSwgbGVhdmUgP
13835SBkYXRhLmxlYXZlLCBhZnRlckxlYXZlID0gZGF0YS5hZnRlckxlYXZlLCBsZWF2ZUNhbmNlbGxlZCA9IGRhdGEubGVhdmVDYW5jZWxsZWQsIGRlbGF5TGVhdmUgPSBkYXRhLmRlbGF5TGVhdmUsIGR1cmF0aW9uID0gZGF0YS5kdXJhdGlvbjtcbiAgICB2YXIgZXhwZWN0c0NTUyA9IGNzcyAhPT0gZmFsc2UgJiYgIWlzSUU5O1xuICAgIHZhciB1c2VyV2FudHNDb250cm9sID0gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChsZWF2ZSk7XG4gICAgdmFyIGV4cGxpY2l0TGVhdmVEdXJhdGlvbiA9IHRvTnVtYmVyKGlzT2JqZWN0KGR1cmF0aW9uKSA/IGR1cmF0aW9uLmxlYXZlIDogZHVyYXRpb24pO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGlzRGVmKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcbiAgICAgICAgY2hlY2tEdXJhdGlvbihleHBsaWNpdExlYXZlRHVyYXRpb24sICdsZWF2ZScsIHZub2RlKTtcbiAgICB9XG4gICAgdmFyIGNiID0gKGVsLl9sZWF2ZUNiID0gb25jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChlbC5wYXJlbnROb2RlICYmIGVsLnBhcmVudE5vZGUuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIGVsLnBhcmVudE5vZGUuX3BlbmRpbmdbdm5vZGUua2V5XSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVUb0NsYXNzKTtcbiAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVBY3RpdmVDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZWF2ZUNhbmNlbGxlZCAmJiBsZWF2ZUNhbmNlbGxlZChlbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBybSgpO1xuICAgICAgICAgICAgYWZ0ZXJMZWF2ZSAmJiBhZnRlckxlYXZlKGVsKTtcbiAgICAgICAgfVxuICAgICAgICBlbC5fbGVhdmVDYiA9IG51bGw7XG4gICAgfSkpO1xuICAgIGlmIChkZWxheUxlYXZlKSB7XG4gICAgICAgIGRlbGF5TGVhdmUocGVyZm9ybUxlYXZlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHBlcmZvcm1MZWF2ZSgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZXJmb3JtTGVhdmUoKSB7XG4gICAgICAgIC8vIHRoZSBkZWxheWVkIGxlYXZlIG1heSBoYXZlIGFscmVhZHkgYmVlbiBjYW5jZWxsZWRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVjb3JkIGxlYXZpbmcgZWxlbWVudFxuICAgICAgICBpZiAoIXZub2RlLmRhdGEuc2hvdyAmJiBlbC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAoZWwucGFyZW50Tm9kZS5fcGVuZGluZyB8fCAoZWwucGFyZW50Tm9kZS5fcGVuZGluZyA9IHt9KSlbdm5vZGUua2V5XSA9XG4gICAgICAgICAgICAgICAgdm5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgYmVmb3JlTGVhdmUgJiYgYmVmb3JlTGVhdmUoZWwpO1xuICAgICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVBY3RpdmVDbGFzcyk7XG4gICAgICAgICAgICBuZXh0RnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICAgIGlmICghY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVUb0NsYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNiLCBleHBsaWNpdExlYXZlRHVyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlblRyYW5zaXRpb25FbmRzKGVsLCB0eXBlLCBjYik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZWF2ZSAmJiBsZWF2ZShlbCwgY2IpO1xuICAgICAgICBpZiAoIWV4cGVjdHNDU1MgJiYgIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyBvbmx5IHVzZWQgaW4gZGV2IG1vZGVcbmZ1bmN0aW9uIGNoZWNrRHVyYXRpb24odmFsLCBuYW1lLCB2bm9kZSkge1xuICAgIGlmICh0eXBlb2YgdmFsICE9PSAnbnVtYmVyJykge1xuICAgICAgICB3YXJuJDIoXCI8dHJhbnNpdGlvbj4gZXhwbGljaXQgXCIuY29uY2F0KG5hbWUsIFwiIGR1cmF0aW9uIGlzIG5vdCBhIHZhbGlkIG51bWJlciAtIFwiKSArXG4gICAgICAgICAgICBcImdvdCBcIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkodmFsKSwgXCIuXCIpLCB2bm9kZS5jb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNOYU4odmFsKSkge1xuICAgICAgICB3YXJuJDIoXCI8dHJhbnNpdGlvbj4gZXhwbGljaXQgXCIuY29uY2F0KG5hbWUsIFwiIGR1cmF0aW9uIGlzIE5hTiAtIFwiKSArXG4gICAgICAgICAgICAndGhlIGR1cmF0aW9uIGV4cHJlc3Npb24gbWlnaHQgYmUgaW5jb3JyZWN0LicsIHZub2RlLmNvbnRleHQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzVmFsaWREdXJhdGlvbih2YWwpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbCk7XG59XG4vKipcbiAqIE5vcm1hbGl6ZSBhIHRyYW5zaXRpb24gaG9vaydzIGFyZ3VtZW50IGxlbmd0aC4gVGhlIGhvb2sgbWF5IGJlOlxuICogLSBhIG1lcmdlZCBob29rIChpbnZva2VyKSB3aXRoIHRoZSBvcmlnaW5hbCBpbiAuZm5zXG4gKiAtIGEgd3JhcHBlZCBjb21wb25lbnQgbWV0aG9kIChjaGVjayAuX2xlbmd0aClcbiAqIC0gYSBwbGFpbiBmdW5jdGlvbiAoLmxlbmd0aClcbiAqL1xuZnVuY3Rpb24gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChmbikge1xuICAgIGlmIChpc1VuZGVmKGZuKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICB2YXIgaW52b2tlckZucyA9IGZuLmZucztcbiAgICBpZiAoaXNEZWYoaW52b2tlckZucykpIHtcbiAgICAgICAgLy8gaW52b2tlclxuICAgICAgICByZXR1cm4gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChBcnJheS5pc0FycmF
138355KGludm9rZXJGbnMpID8gaW52b2tlckZuc1swXSA6IGludm9rZXJGbnMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICByZXR1cm4gKGZuLl9sZW5ndGggfHwgZm4ubGVuZ3RoKSA+IDE7XG4gICAgfVxufVxuZnVuY3Rpb24gX2VudGVyKF8sIHZub2RlKSB7XG4gICAgaWYgKHZub2RlLmRhdGEuc2hvdyAhPT0gdHJ1ZSkge1xuICAgICAgICBlbnRlcih2bm9kZSk7XG4gICAgfVxufVxudmFyIHRyYW5zaXRpb24gPSBpbkJyb3dzZXJcbiAgICA/IHtcbiAgICAgICAgY3JlYXRlOiBfZW50ZXIsXG4gICAgICAgIGFjdGl2YXRlOiBfZW50ZXIsXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gKHZub2RlLCBybSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmICh2bm9kZS5kYXRhLnNob3cgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgbGVhdmUodm5vZGUsIHJtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJtKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgOiB7fTtcblxudmFyIHBsYXRmb3JtTW9kdWxlcyA9IFthdHRycywga2xhc3MkMSwgZXZlbnRzLCBkb21Qcm9wcywgc3R5bGUkMSwgdHJhbnNpdGlvbl07XG5cbi8vIHRoZSBkaXJlY3RpdmUgbW9kdWxlIHNob3VsZCBiZSBhcHBsaWVkIGxhc3QsIGFmdGVyIGFsbFxuLy8gYnVpbHQtaW4gbW9kdWxlcyBoYXZlIGJlZW4gYXBwbGllZC5cbnZhciBtb2R1bGVzJDEgPSBwbGF0Zm9ybU1vZHVsZXMuY29uY2F0KGJhc2VNb2R1bGVzKTtcbnZhciBwYXRjaCA9IGNyZWF0ZVBhdGNoRnVuY3Rpb24oeyBub2RlT3BzOiBub2RlT3BzLCBtb2R1bGVzOiBtb2R1bGVzJDEgfSk7XG5cbi8qKlxuICogTm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IGxpa2UgYXR0YWNoaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIEVsZW1lbnRzLlxuICovXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChpc0lFOSkge1xuICAgIC8vIGh0dHA6Ly93d3cubWF0dHM0MTEuY29tL3Bvc3QvaW50ZXJuZXQtZXhwbG9yZXItOS1vbmlucHV0L1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbmNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBpZiAoZWwgJiYgZWwudm1vZGVsKSB7XG4gICAgICAgICAgICB0cmlnZ2VyKGVsLCAnaW5wdXQnKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxudmFyIGRpcmVjdGl2ZSA9IHtcbiAgICBpbnNlcnRlZDogZnVuY3Rpb24gKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVm5vZGUpIHtcbiAgICAgICAgaWYgKHZub2RlLnRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgICAgIC8vICM2OTAzXG4gICAgICAgICAgICBpZiAob2xkVm5vZGUuZWxtICYmICFvbGRWbm9kZS5lbG0uX3ZPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdwb3N0cGF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZS5jb21wb25lbnRVcGRhdGVkKGVsLCBiaW5kaW5nLCB2bm9kZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbC5fdk9wdGlvbnMgPSBbXS5tYXAuY2FsbChlbC5vcHRpb25zLCBnZXRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodm5vZGUudGFnID09PSAndGV4dGFyZWEnIHx8IGlzVGV4dElucHV0VHlwZShlbC50eXBlKSkge1xuICAgICAgICAgICAgZWwuX3ZNb2RpZmllcnMgPSBiaW5kaW5nLm1vZGlmaWVycztcbiAgICAgICAgICAgIGlmICghYmluZGluZy5tb2RpZmllcnMubGF6eSkge1xuICAgICAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uc3RhcnQnLCBvbkNvbXBvc2l0aW9uU3RhcnQpO1xuICAgICAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uZW5kJywgb25Db21wb3NpdGlvbkVuZCk7XG4gICAgICAgICAgICAgICAgLy8gU2FmYXJpIDwgMTAuMiAmIFVJV2ViVmlldyBkb2Vzbid0IGZpcmUgY29tcG9zaXRpb25lbmQgd2hlblxuICAgICAgICAgICAgICAgIC8vIHN3aXRjaGluZyBmb2N1cyBiZWZvcmUgY29uZmlybWluZyBjb21wb3NpdGlvbiBjaG9pY2VcbiAgICAgICAgICAgICAgICAvLyB0aGlzIGFsc28gZml4ZXMgdGhlIGlzc3VlIHdoZXJlIHNvbWUgYnJvd3NlcnMgZS5nLiBpT1MgQ2hyb21lXG4gICAgICAgICAgICAgICAgLy8gZmlyZXMgXCJjaGFuZ2VcIiBpbnN0ZWFkIG9mIFwiaW5wdXRcIiBvbiBhdXRvY29tcGxldGUuXG4gICAgICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgb25Db21wb3NpdGlvbkVuZCk7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgaWYgKGlzSUU5KSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLnZtb2RlbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBjb21wb25lbnRVcGRhdGVkOiBmdW5jdGlvbiAoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG4gICAgICAgIGlmICh2bm9kZS50YWcgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XG4gICAgICAgICAgICAvLyBpbiBjYXNlIHRoZSBvcHRpb25zIHJlbmRlcmVkIGJ5IHYtZm9yIGhhdmUgY2hhbmdlZCxcbiAgICAgICAgICAgIC8vIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgdmFsdWUgaXMgb3V0LW9mLXN5bmMgd2l0aCB0aGUgcmVuZGVyZWQgb3B0aW9ucy5cbiAgICAgICAgICAgIC8vIGRldGVjdCBzdWNoIGNhc2VzIGFuZCBmaWx0ZXIgb3V0IHZhbHVlcyB0aGF0IG5vIGxvbmdlciBoYXMgYSBtYXRjaGluZ1xuICAgICAgICAgICAgLy8gb3B0aW9uIGluIHRoZSBET00uXG4gICAgICAgICAgICB2Y
13835XIgcHJldk9wdGlvbnNfMSA9IGVsLl92T3B0aW9ucztcbiAgICAgICAgICAgIHZhciBjdXJPcHRpb25zXzEgPSAoZWwuX3ZPcHRpb25zID0gW10ubWFwLmNhbGwoZWwub3B0aW9ucywgZ2V0VmFsdWUpKTtcbiAgICAgICAgICAgIGlmIChjdXJPcHRpb25zXzEuc29tZShmdW5jdGlvbiAobywgaSkgeyByZXR1cm4gIWxvb3NlRXF1YWwobywgcHJldk9wdGlvbnNfMVtpXSk7IH0pKSB7XG4gICAgICAgICAgICAgICAgLy8gdHJpZ2dlciBjaGFuZ2UgZXZlbnQgaWZcbiAgICAgICAgICAgICAgICAvLyBubyBtYXRjaGluZyBvcHRpb24gZm91bmQgZm9yIGF0IGxlYXN0IG9uZSB2YWx1ZVxuICAgICAgICAgICAgICAgIHZhciBuZWVkUmVzZXQgPSBlbC5tdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICA/IGJpbmRpbmcudmFsdWUuc29tZShmdW5jdGlvbiAodikgeyByZXR1cm4gaGFzTm9NYXRjaGluZ09wdGlvbih2LCBjdXJPcHRpb25zXzEpOyB9KVxuICAgICAgICAgICAgICAgICAgICA6IGJpbmRpbmcudmFsdWUgIT09IGJpbmRpbmcub2xkVmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc05vTWF0Y2hpbmdPcHRpb24oYmluZGluZy52YWx1ZSwgY3VyT3B0aW9uc18xKTtcbiAgICAgICAgICAgICAgICBpZiAobmVlZFJlc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoZWwsICdjaGFuZ2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuZnVuY3Rpb24gc2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZtKSB7XG4gICAgYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpc0lFIHx8IGlzRWRnZSkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFjdHVhbGx5U2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZtKTtcbiAgICAgICAgfSwgMCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pIHtcbiAgICB2YXIgdmFsdWUgPSBiaW5kaW5nLnZhbHVlO1xuICAgIHZhciBpc011bHRpcGxlID0gZWwubXVsdGlwbGU7XG4gICAgaWYgKGlzTXVsdGlwbGUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgIHdhcm4kMihcIjxzZWxlY3QgbXVsdGlwbGUgdi1tb2RlbD1cXFwiXCIuY29uY2F0KGJpbmRpbmcuZXhwcmVzc2lvbiwgXCJcXFwiPiBcIikgK1xuICAgICAgICAgICAgICAgIFwiZXhwZWN0cyBhbiBBcnJheSB2YWx1ZSBmb3IgaXRzIGJpbmRpbmcsIGJ1dCBnb3QgXCIuY29uY2F0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgLmNhbGwodmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIC5zbGljZSg4LCAtMSkpLCB2bSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHNlbGVjdGVkLCBvcHRpb247XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBlbC5vcHRpb25zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBvcHRpb24gPSBlbC5vcHRpb25zW2ldO1xuICAgICAgICBpZiAoaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgc2VsZWN0ZWQgPSBsb29zZUluZGV4T2YodmFsdWUsIGdldFZhbHVlKG9wdGlvbikpID4gLTE7XG4gICAgICAgICAgICBpZiAob3B0aW9uLnNlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGxvb3NlRXF1YWwoZ2V0VmFsdWUob3B0aW9uKSwgdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsLnNlbGVjdGVkSW5kZXggIT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuc2VsZWN0ZWRJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWlzTXVsdGlwbGUpIHtcbiAgICAgICAgZWwuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhc05vTWF0Y2hpbmdPcHRpb24odmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5ldmVyeShmdW5jdGlvbiAobykgeyByZXR1cm4gIWxvb3NlRXF1YWwobywgdmFsdWUpOyB9KTtcbn1cbmZ1bmN0aW9uIGdldFZhbHVlKG9wdGlvbikge1xuICAgIHJldHVybiAnX3ZhbHVlJyBpbiBvcHRpb24gPyBvcHRpb24uX3ZhbHVlIDogb3B0aW9uLnZhbHVlO1xufVxuZnVuY3Rpb24gb25Db21wb3NpdGlvblN0YXJ0KGUpIHtcbiAgICBlLnRhcmdldC5jb21wb3NpbmcgPSB0cnVlO1xufVxuZnVuY3Rpb24gb25Db21wb3NpdGlvbkVuZChlKSB7XG4gICAgLy8gcHJldmVudCB0cmlnZ2VyaW5nIGFuIGlucHV0IGV2ZW50IGZvciBubyByZWFzb25cbiAgICBpZiAoIWUudGFyZ2V0LmNvbXBvc2luZylcbiAgICAgICAgcmV0dXJuO1xuICAgIGUudGFyZ2V0LmNvbXBvc2luZyA9IGZhbHNlO1xuICAgIHRyaWdnZXIoZS50YXJnZXQsICdpbnB1dCcpO1xufVxuZnVuY3Rpb24gdHJpZ2dlcihlbCwgdHlwZSkge1xuICAgIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKTtcbiAgICBlLmluaXRFdmVudCh0eXBlLCB0cnVlLCB0cnVlKTtcbiAgICBlbC5kaXNwYXRjaEV2ZW50KGUpO1xufVxuXG4vLyByZWN1cnNpdmVseSBzZWFyY2ggZm9yIHBvc3NpYmxlIHRyYW5zaXRpb24gZGVmaW5lZCBpbnNpZGUgdGhlIGNvbXBvbmVudCByb290XG5mdW5jdGlvbiBsb2NhdGVOb2RlKHZub2RlKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHJldHVybiB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSAmJiAoIXZub2RlLmRhdGEgfHwgIXZub2RlLmRhdGEudHJhbnNpdGlvbilcbiAgICAgICAgPyBsb2NhdGVOb2RlKHZub2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSlcbiAgICAgICAgOiB2bm9kZTtcbn1cbnZhciBzaG93ID0ge1xuICAgIGJpbmQ6IGZ1bmN0aW9uIChlbCwgX2EsIHZub2RlKSB7XG4gICAgICAgI
13835HZhciB2YWx1ZSA9IF9hLnZhbHVlO1xuICAgICAgICB2bm9kZSA9IGxvY2F0ZU5vZGUodm5vZGUpO1xuICAgICAgICB2YXIgdHJhbnNpdGlvbiA9IHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS50cmFuc2l0aW9uO1xuICAgICAgICB2YXIgb3JpZ2luYWxEaXNwbGF5ID0gKGVsLl9fdk9yaWdpbmFsRGlzcGxheSA9XG4gICAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgPyAnJyA6IGVsLnN0eWxlLmRpc3BsYXkpO1xuICAgICAgICBpZiAodmFsdWUgJiYgdHJhbnNpdGlvbikge1xuICAgICAgICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIGVudGVyKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IG9yaWdpbmFsRGlzcGxheTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gb3JpZ2luYWxEaXNwbGF5IDogJ25vbmUnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChlbCwgX2EsIHZub2RlKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IF9hLnZhbHVlLCBvbGRWYWx1ZSA9IF9hLm9sZFZhbHVlO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCF2YWx1ZSA9PT0gIW9sZFZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2bm9kZSA9IGxvY2F0ZU5vZGUodm5vZGUpO1xuICAgICAgICB2YXIgdHJhbnNpdGlvbiA9IHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS50cmFuc2l0aW9uO1xuICAgICAgICBpZiAodHJhbnNpdGlvbikge1xuICAgICAgICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGVudGVyKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZWF2ZSh2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gZWwuX192T3JpZ2luYWxEaXNwbGF5IDogJ25vbmUnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB1bmJpbmQ6IGZ1bmN0aW9uIChlbCwgYmluZGluZywgdm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpIHtcbiAgICAgICAgaWYgKCFpc0Rlc3Ryb3kpIHtcbiAgICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgcGxhdGZvcm1EaXJlY3RpdmVzID0ge1xuICAgIG1vZGVsOiBkaXJlY3RpdmUsXG4gICAgc2hvdzogc2hvd1xufTtcblxuLy8gUHJvdmlkZXMgdHJhbnNpdGlvbiBzdXBwb3J0IGZvciBhIHNpbmdsZSBlbGVtZW50L2NvbXBvbmVudC5cbnZhciB0cmFuc2l0aW9uUHJvcHMgPSB7XG4gICAgbmFtZTogU3RyaW5nLFxuICAgIGFwcGVhcjogQm9vbGVhbixcbiAgICBjc3M6IEJvb2xlYW4sXG4gICAgbW9kZTogU3RyaW5nLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgICBlbnRlckNsYXNzOiBTdHJpbmcsXG4gICAgbGVhdmVDbGFzczogU3RyaW5nLFxuICAgIGVudGVyVG9DbGFzczogU3RyaW5nLFxuICAgIGxlYXZlVG9DbGFzczogU3RyaW5nLFxuICAgIGVudGVyQWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgICBsZWF2ZUFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gICAgYXBwZWFyQ2xhc3M6IFN0cmluZyxcbiAgICBhcHBlYXJBY3RpdmVDbGFzczogU3RyaW5nLFxuICAgIGFwcGVhclRvQ2xhc3M6IFN0cmluZyxcbiAgICBkdXJhdGlvbjogW051bWJlciwgU3RyaW5nLCBPYmplY3RdXG59O1xuLy8gaW4gY2FzZSB0aGUgY2hpbGQgaXMgYWxzbyBhbiBhYnN0cmFjdCBjb21wb25lbnQsIGUuZy4gPGtlZXAtYWxpdmU+XG4vLyB3ZSB3YW50IHRvIHJlY3Vyc2l2ZWx5IHJldHJpZXZlIHRoZSByZWFsIGNvbXBvbmVudCB0byBiZSByZW5kZXJlZFxuZnVuY3Rpb24gZ2V0UmVhbENoaWxkKHZub2RlKSB7XG4gICAgdmFyIGNvbXBPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICBpZiAoY29tcE9wdGlvbnMgJiYgY29tcE9wdGlvbnMuQ3Rvci5vcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICAgIHJldHVybiBnZXRSZWFsQ2hpbGQoZ2V0Rmlyc3RDb21wb25lbnRDaGlsZChjb21wT3B0aW9ucy5jaGlsZHJlbikpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZub2RlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGV4dHJhY3RUcmFuc2l0aW9uRGF0YShjb21wKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgb3B0aW9ucyA9IGNvbXAuJG9wdGlvbnM7XG4gICAgLy8gcHJvcHNcbiAgICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5wcm9wc0RhdGEpIHtcbiAgICAgICAgZGF0YVtrZXldID0gY29tcFtrZXldO1xuICAgIH1cbiAgICAvLyBldmVudHMuXG4gICAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMgYW5kIHBhc3MgdGhlbSBkaXJlY3RseSB0byB0aGUgdHJhbnNpdGlvbiBtZXRob2RzXG4gICAgdmFyIGxpc3RlbmVycyA9IG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgICBmb3IgKHZhciBrZXkgaW4gbGlzdGVuZXJzKSB7XG4gICAgICAgIGRhdGFbY2FtZWxpemUoa2V5KV0gPSBsaXN0ZW5lcnNba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG59XG5mdW5jdGlvbiBwbGFjZWhvbGRlcihoLCByYXdDaGlsZCkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBpZiAoL1xcZC1rZWVwLWFsaXZlJC8udGVzdChyYXdDaGlsZC50YWcpKSB7XG4gICAgICAgIHJldHVybiBoKCdrZWVwLWFsaXZlJywge1xuICAgICAgICAgICAgcHJvcHM6IHJhd0NoaWxkLmNvbXBvbmVudE9wdGlvbnMucHJvcHNEYXRhXG4gICAgICAgI
13835H0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhc1BhcmVudFRyYW5zaXRpb24odm5vZGUpIHtcbiAgICB3aGlsZSAoKHZub2RlID0gdm5vZGUucGFyZW50KSkge1xuICAgICAgICBpZiAodm5vZGUuZGF0YS50cmFuc2l0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGlzU2FtZUNoaWxkKGNoaWxkLCBvbGRDaGlsZCkge1xuICAgIHJldHVybiBvbGRDaGlsZC5rZXkgPT09IGNoaWxkLmtleSAmJiBvbGRDaGlsZC50YWcgPT09IGNoaWxkLnRhZztcbn1cbnZhciBpc05vdFRleHROb2RlID0gZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMudGFnIHx8IGlzQXN5bmNQbGFjZWhvbGRlcihjKTsgfTtcbnZhciBpc1ZTaG93RGlyZWN0aXZlID0gZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQubmFtZSA9PT0gJ3Nob3cnOyB9O1xudmFyIFRyYW5zaXRpb24gPSB7XG4gICAgbmFtZTogJ3RyYW5zaXRpb24nLFxuICAgIHByb3BzOiB0cmFuc2l0aW9uUHJvcHMsXG4gICAgYWJzdHJhY3Q6IHRydWUsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoaCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLiRzbG90cy5kZWZhdWx0O1xuICAgICAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmlsdGVyIG91dCB0ZXh0IG5vZGVzIChwb3NzaWJsZSB3aGl0ZXNwYWNlcylcbiAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoaXNOb3RUZXh0Tm9kZSk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdhcm4gbXVsdGlwbGUgZWxlbWVudHNcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgd2FybiQyKCc8dHJhbnNpdGlvbj4gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIHNpbmdsZSBlbGVtZW50LiBVc2UgJyArXG4gICAgICAgICAgICAgICAgJzx0cmFuc2l0aW9uLWdyb3VwPiBmb3IgbGlzdHMuJywgdGhpcy4kcGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICB2Y
13835XIgbW9kZSA9IHRoaXMubW9kZTtcbiAgICAgICAgLy8gd2FybiBpbnZhbGlkIG1vZGVcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgbW9kZSAmJiBtb2RlICE9PSAnaW4tb3V0JyAmJiBtb2RlICE9PSAnb3V0LWluJykge1xuICAgICAgICAgICAgd2FybiQyKCdpbnZhbGlkIDx0cmFuc2l0aW9uPiBtb2RlOiAnICsgbW9kZSwgdGhpcy4kcGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmF3Q2hpbGQgPSBjaGlsZHJlblswXTtcbiAgICAgICAgLy8gaWYgdGhpcyBpcyBhIGNvbXBvbmVudCByb290IG5vZGUgYW5kIHRoZSBjb21wb25lbnQnc1xuICAgICAgICAvLyBwYXJlbnQgY29udGFpbmVyIG5vZGUgYWxzbyBoYXMgdHJhbnNpdGlvbiwgc2tpcC5cbiAgICAgICAgaWYgKGhhc1BhcmVudFRyYW5zaXRpb24odGhpcy4kdm5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmF3Q2hpbGQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXBwbHkgdHJhbnNpdGlvbiBkYXRhIHRvIGNoaWxkXG4gICAgICAgIC8vIHVzZSBnZXRSZWFsQ2hpbGQoKSB0byBpZ25vcmUgYWJzdHJhY3QgY29tcG9uZW50cyBlLmcuIGtlZXAtYWxpdmVcbiAgICAgICAgdmFyIGNoaWxkID0gZ2V0UmVhbENoaWxkKHJhd0NoaWxkKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiByYXdDaGlsZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fbGVhdmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbnN1cmUgYSBrZXkgdGhhdCBpcyB1bmlxdWUgdG8gdGhlIHZub2RlIHR5cGUgYW5kIHRvIHRoaXMgdHJhbnNpdGlvblxuICAgICAgICAvLyBjb21wb25lbnQgaW5zdGFuY2UuIFRoaXMga2V5IHdpbGwgYmUgdXNlZCB0byByZW1vdmUgcGVuZGluZyBsZWF2aW5nIG5vZGVzXG4gICAgICAgIC8vIGR1cmluZyBlbnRlcmluZy5cbiAgICAgICAgdmFyIGlkID0gXCJfX3RyYW5zaXRpb24tXCIuY29uY2F0KHRoaXMuX3VpZCwgXCItXCIpO1xuICAgICAgICBjaGlsZC5rZXkgPVxuICAgICAgICAgICAgY2hpbGQua2V5ID09IG51bGxcbiAgICAgICAgICAgICAgICA/IGNoaWxkLmlzQ29tbWVudFxuICAgICAgICAgICAgICAgICAgICA/IGlkICsgJ2NvbW1lbnQnXG4gICAgICAgICAgICAgICAgICAgIDogaWQgKyBjaGlsZC50YWdcbiAgICAgICAgICAgICAgICA6IGlzUHJpbWl0aXZlKGNoaWxkLmtleSlcbiAgICAgICAgICAgICAgICAgICAgPyBTdHJpbmcoY2hpbGQua2V5KS5pbmRleE9mKGlkKSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjaGlsZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaWQgKyBjaGlsZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgOiBjaGlsZC5rZXk7XG4gICAgICAgIHZhciBkYXRhID0gKChjaGlsZC5kYXRhIHx8IChjaGlsZC5kYXRhID0ge30pKS50cmFuc2l0aW9uID1cbiAgICAgICAgICAgIGV4dHJhY3RUcmFuc2l0aW9uRGF0YSh0aGlzKSk7XG4gICAgICAgIHZhciBvbGRSYXdDaGlsZCA9IHRoaXMuX3Zub2RlO1xuICAgICAgICB2Y
13835XIgb2xkQ2hpbGQgPSBnZXRSZWFsQ2hpbGQob2xkUmF3Q2hpbGQpO1xuICAgICAgICAvLyBtYXJrIHYtc2hvd1xuICAgICAgICAvLyBzbyB0aGF0IHRoZSB0cmFuc2l0aW9uIG1vZHVsZSBjYW4gaGFuZCBvdmVyIHRoZSBjb250cm9sIHRvIHRoZSBkaXJlY3RpdmVcbiAgICAgICAgaWYgKGNoaWxkLmRhdGEuZGlyZWN0aXZlcyAmJiBjaGlsZC5kYXRhLmRpcmVjdGl2ZXMuc29tZShpc1ZTaG93RGlyZWN0aXZlKSkge1xuICAgICAgICAgICAgY2hpbGQuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2xkQ2hpbGQgJiZcbiAgICAgICAgICAgIG9sZENoaWxkLmRhdGEgJiZcbiAgICAgICAgICAgICFpc1NhbWVDaGlsZChjaGlsZCwgb2xkQ2hpbGQpICYmXG4gICAgICAgICAgICAhaXNBc3luY1BsYWNlaG9sZGVyKG9sZENoaWxkKSAmJlxuICAgICAgICAgICAgLy8gIzY2ODcgY29tcG9uZW50IHJvb3QgaXMgYSBjb21tZW50IG5vZGVcbiAgICAgICAgICAgICEob2xkQ2hpbGQuY29tcG9uZW50SW5zdGFuY2UgJiZcbiAgICAgICAgICAgICAgICBvbGRDaGlsZC5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUuaXNDb21tZW50KSkge1xuICAgICAgICAgICAgLy8gcmVwbGFjZSBvbGQgY2hpbGQgdHJhbnNpdGlvbiBkYXRhIHdpdGggZnJlc2ggb25lXG4gICAgICAgICAgICAvLyBpbXBvcnRhbnQgZm9yIGR5bmFtaWMgdHJhbnNpdGlvbnMhXG4gICAgICAgICAgICB2YXIgb2xkRGF0YSA9IChvbGRDaGlsZC5kYXRhLnRyYW5zaXRpb24gPSBleHRlbmQoe30sIGRhdGEpKTtcbiAgICAgICAgICAgIC8vIGhhbmRsZSB0cmFuc2l0aW9uIG1vZGVcbiAgICAgICAgICAgIGlmIChtb2RlID09PSAnb3V0LWluJykge1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiBwbGFjZWhvbGRlciBub2RlIGFuZCBxdWV1ZSB1cGRhdGUgd2hlbiBsZWF2ZSBmaW5pc2hlc1xuICAgICAgICAgICAgICAgIHRoaXMuX2xlYXZpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdhZnRlckxlYXZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5fbGVhdmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy4kZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGxhY2Vob2xkZXIoaCwgcmF3Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobW9kZSA9PT0gJ2luLW91dCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNBc3luY1BsYWNlaG9sZGVyKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2xkUmF3Q2hpbGQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBkZWxheWVkTGVhdmVfMTtcbiAgICAgICAgICAgICAgICB2Y
13835XIgcGVyZm9ybUxlYXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxheWVkTGVhdmVfMSgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbWVyZ2VWTm9kZUhvb2soZGF0YSwgJ2FmdGVyRW50ZXInLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICAgICAgICAgIG1lcmdlVk5vZGVIb29rKGRhdGEsICdlbnRlckNhbmNlbGxlZCcsIHBlcmZvcm1MZWF2ZSk7XG4gICAgICAgICAgICAgICAgbWVyZ2VWTm9kZUhvb2sob2xkRGF0YSwgJ2RlbGF5TGVhdmUnLCBmdW5jdGlvbiAobGVhdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsYXllZExlYXZlXzEgPSBsZWF2ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmF3Q2hpbGQ7XG4gICAgfVxufTtcblxuLy8gUHJvdmlkZXMgdHJhbnNpdGlvbiBzdXBwb3J0IGZvciBsaXN0IGl0ZW1zLlxudmFyIHByb3BzID0gZXh0ZW5kKHtcbiAgICB0YWc6IFN0cmluZyxcbiAgICBtb3ZlQ2xhc3M6IFN0cmluZ1xufSwgdHJhbnNpdGlvblByb3BzKTtcbmRlbGV0ZSBwcm9wcy5tb2RlO1xudmFyIFRyYW5zaXRpb25Hcm91cCA9IHtcbiAgICBwcm9wczogcHJvcHMsXG4gICAgYmVmb3JlTW91bnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHVwZGF0ZSA9IHRoaXMuX3VwZGF0ZTtcbiAgICAgICAgdGhpcy5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICAgICAgICAgIHZhciByZXN0b3JlQWN0aXZlSW5zdGFuY2UgPSBzZXRBY3RpdmVJbnN0YW5jZShfdGhpcyk7XG4gICAgICAgICAgICAvLyBmb3JjZSByZW1vdmluZyBwYXNzXG4gICAgICAgICAgICBfdGhpcy5fX3BhdGNoX18oX3RoaXMuX3Zub2RlLCBfdGhpcy5rZXB0LCBmYWxzZSwgLy8gaHlkcmF0aW5nXG4gICAgICAgICAgICB0cnVlIC8vIHJlbW92ZU9ubHkgKCFpbXBvcnRhbnQsIGF2b2lkcyB1bm5lY2Vzc2FyeSBtb3ZlcylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBfdGhpcy5fdm5vZGUgPSBfdGhpcy5rZXB0O1xuICAgICAgICAgICAgcmVzdG9yZUFjdGl2ZUluc3RhbmNlKCk7XG4gICAgICAgICAgICB1cGRhdGUuY2FsbChfdGhpcywgdm5vZGUsIGh5ZHJhdGluZyk7XG4gICAgICAgIH07XG4gICAgfSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChoKSB7XG4gICAgICAgIHZhciB0YWcgPSB0aGlzLnRhZyB8fCB0aGlzLiR2bm9kZS5kYXRhLnRhZyB8fCAnc3Bhbic7XG4gICAgICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB2Y
13835XIgcHJldkNoaWxkcmVuID0gKHRoaXMucHJldkNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbik7XG4gICAgICAgIHZhciByYXdDaGlsZHJlbiA9IHRoaXMuJHNsb3RzLmRlZmF1bHQgfHwgW107XG4gICAgICAgIHZhciBjaGlsZHJlbiA9ICh0aGlzLmNoaWxkcmVuID0gW10pO1xuICAgICAgICB2YXIgdHJhbnNpdGlvbkRhdGEgPSBleHRyYWN0VHJhbnNpdGlvbkRhdGEodGhpcyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjID0gcmF3Q2hpbGRyZW5baV07XG4gICAgICAgICAgICBpZiAoYy50YWcpIHtcbiAgICAgICAgICAgICAgICBpZiAoYy5rZXkgIT0gbnVsbCAmJiBTdHJpbmcoYy5rZXkpLmluZGV4T2YoJ19fdmxpc3QnKSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGMpO1xuICAgICAgICAgICAgICAgICAgICBtYXBbYy5rZXldID0gYztcbiAgICAgICAgICAgICAgICAgICAgKGMuZGF0YSB8fCAoYy5kYXRhID0ge30pKS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9wdHMgPSBjLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lXzEgPSBvcHRzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGdldENvbXBvbmVudE5hbWUob3B0cy5DdG9yLm9wdGlvbnMpIHx8IG9wdHMudGFnIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGMudGFnO1xuICAgICAgICAgICAgICAgICAgICB3YXJuJDIoXCI8dHJhbnNpdGlvbi1ncm91cD4gY2hpbGRyZW4gbXVzdCBiZSBrZXllZDogPFwiLmNvbmNhdChuYW1lXzEsIFwiPlwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2Q2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHZhciBrZXB0ID0gW107XG4gICAgICAgICAgICB2Y
13835XIgcmVtb3ZlZCA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmV2Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHByZXZDaGlsZHJlbltpXTtcbiAgICAgICAgICAgICAgICBjLmRhdGEudHJhbnNpdGlvbiA9IHRyYW5zaXRpb25EYXRhO1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLmdldEJvdW5kaW5nQ2xpZW50UmVjdCBpcyBub3QgdHlwZWQgaW4gTm9kZVxuICAgICAgICAgICAgICAgIGMuZGF0YS5wb3MgPSBjLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICBpZiAobWFwW2Mua2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBrZXB0LnB1c2goYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVkLnB1c2goYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5rZXB0ID0gaCh0YWcsIG51bGwsIGtlcHQpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVkID0gcmVtb3ZlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaCh0YWcsIG51bGwsIGNoaWxkcmVuKTtcbiAgICB9LFxuICAgIHVwZGF0ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcmV2Q2hpbGRyZW47XG4gICAgICAgIHZhciBtb3ZlQ2xhc3MgPSB0aGlzLm1vdmVDbGFzcyB8fCAodGhpcy5uYW1lIHx8ICd2JykgKyAnLW1vdmUnO1xuICAgICAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5oYXNNb3ZlKGNoaWxkcmVuWzBdLmVsbSwgbW92ZUNsYXNzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdlIGRpdmlkZSB0aGUgd29yayBpbnRvIHRocmVlIGxvb3BzIHRvIGF2b2lkIG1peGluZyBET00gcmVhZHMgYW5kIHdyaXRlc1xuICAgICAgICAvLyBpbiBlYWNoIGl0ZXJhdGlvbiAtIHdoaWNoIGhlbHBzIHByZXZlbnQgbGF5b3V0IHRocmFzaGluZy5cbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChjYWxsUGVuZGluZ0Nicyk7XG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2gocmVjb3JkUG9zaXRpb24pO1xuICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGFwcGx5VHJhbnNsYXRpb24pO1xuICAgICAgICAvLyBmb3JjZSByZWZsb3cgdG8gcHV0IGV2ZXJ5dGhpbmcgaW4gcG9zaXRpb25cbiAgICAgICAgLy8gYXNzaWduIHRvIHRoaXMgdG8gYXZvaWQgYmVpbmcgcmVtb3ZlZCBpbiB0cmVlLXNoYWtpbmdcbiAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgIHRoaXMuX3JlZmxvdyA9IGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgICBpZiAoYy5kYXRhLm1vdmVkKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVsXzEgPSBjLmVsbTtcbiAgICAgICAgICAgICAgICB2Y
13835XIgcyA9IGVsXzEuc3R5bGU7XG4gICAgICAgICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsXzEsIG1vdmVDbGFzcyk7XG4gICAgICAgICAgICAgICAgcy50cmFuc2Zvcm0gPSBzLldlYmtpdFRyYW5zZm9ybSA9IHMudHJhbnNpdGlvbkR1cmF0aW9uID0gJyc7XG4gICAgICAgICAgICAgICAgZWxfMS5hZGRFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmRFdmVudCwgKGVsXzEuX21vdmVDYiA9IGZ1bmN0aW9uIGNiKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgJiYgZS50YXJnZXQgIT09IGVsXzEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWUgfHwgL3RyYW5zZm9ybSQvLnRlc3QoZS5wcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbF8xLnJlbW92ZUV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZEV2ZW50LCBjYik7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbF8xLl9tb3ZlQ2IgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsXzEsIG1vdmVDbGFzcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgICBoYXNNb3ZlOiBmdW5jdGlvbiAoZWwsIG1vdmVDbGFzcykge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAoIWhhc1RyYW5zaXRpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLl9oYXNNb3ZlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hhc01vdmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBEZXRlY3Qgd2hldGhlciBhbiBlbGVtZW50IHdpdGggdGhlIG1vdmUgY2xhc3MgYXBwbGllZCBoYXNcbiAgICAgICAgICAgIC8vIENTUyB0cmFuc2l0aW9ucy4gU2luY2UgdGhlIGVsZW1lbnQgbWF5IGJlIGluc2lkZSBhbiBlbnRlcmluZ1xuICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBhdCB0aGlzIHZlcnkgbW9tZW50LCB3ZSBtYWtlIGEgY2xvbmUgb2YgaXQgYW5kIHJlbW92ZVxuICAgICAgICAgICAgLy8gYWxsIG90aGVyIHRyYW5zaXRpb24gY2xhc3NlcyBhcHBsaWVkIHRvIGVuc3VyZSBvbmx5IHRoZSBtb3ZlIGNsYXNzXG4gICAgICAgICAgICAvLyBpcyBhcHBsaWVkLlxuICAgICAgICAgICAgdmFyIGNsb25lID0gZWwuY2xvbmVOb2RlKCk7XG4gICAgICAgICAgICBpZiAoZWwuX3RyYW5zaXRpb25DbGFzc2VzKSB7XG4gICAgICAgICAgICAgICAgZWwuX3RyYW5zaXRpb25DbGFzc2VzLmZvckVhY2goZnVuY3Rpb24gKGNscykge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyhjbG9uZSwgY2xzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkZENsYXNzKGNsb25lLCBtb3ZlQ2xhc3MpO1xuICAgICAgICAgICAgY2xvbmUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIHRoaXMuJGVsLmFwcGVuZENoaWxkKGNsb25lKTtcbiAgICAgICAgICAgIHZhciBpbmZvID0gZ2V0VHJhbnNpdGlvbkluZm8oY2xvbmUpO1xuICAgICAgICAgICAgdGhpcy4kZWwucmVtb3ZlQ2hpbGQoY2xvbmUpO1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLl9oYXNNb3ZlID0gaW5mby5oYXNUcmFuc2Zvcm0pO1xuICAgICAgICB9XG4gICAgfVxufTtcbmZ1bmN0aW9uIGNhbGxQZW5kaW5nQ2JzKGMpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoYy5lbG0uX21vdmVDYikge1xuICAgICAgICBjLmVsbS5fbW92ZUNiKCk7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChjLmVsbS5fZW50ZXJDYikge1xuICAgICAgICBjLmVsbS5fZW50ZXJDYigpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlY29yZFBvc2l0aW9uKGMpIHtcbiAgICBjLmRhdGEubmV3UG9zID0gYy5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG59XG5mdW5jdGlvbiBhcHBseVRyYW5zbGF0aW9uKGMpIHtcbiAgICB2YXIgb2xkUG9zID0gYy5kYXRhLnBvcztcbiAgICB2YXIgbmV3UG9zID0gYy5kYXRhLm5ld1BvcztcbiAgICB2YXIgZHggPSBvbGRQb3MubGVmdCAtIG5ld1Bvcy5sZWZ0O1xuICAgIHZhciBkeSA9IG9sZFBvcy50b3AgLSBuZXdQb3MudG9wO1xuICAgIGlmIChkeCB8fCBkeSkge1xuICAgICAgICBjLmRhdGEubW92ZWQgPSB0cnVlO1xuICAgICAgICB2Y
13835XIgcyA9IGMuZWxtLnN0eWxlO1xuICAgICAgICBzLnRyYW5zZm9ybSA9IHMuV2Via2l0VHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUoXCIuY29uY2F0KGR4LCBcInB4LFwiKS5jb25jYXQoZHksIFwicHgpXCIpO1xuICAgICAgICBzLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcwcyc7XG4gICAgfVxufVxuXG52YXIgcGxhdGZvcm1Db21wb25lbnRzID0ge1xuICAgIFRyYW5zaXRpb246IFRyYW5zaXRpb24sXG4gICAgVHJhbnNpdGlvbkdyb3VwOiBUcmFuc2l0aW9uR3JvdXBcbn07XG5cbi8vIGluc3RhbGwgcGxhdGZvcm0gc3BlY2lmaWMgdXRpbHNcblZ1ZS5jb25maWcubXVzdFVzZVByb3AgPSBtdXN0VXNlUHJvcDtcblZ1ZS5jb25maWcuaXNSZXNlcnZlZFRhZyA9IGlzUmVzZXJ2ZWRUYWc7XG5WdWUuY29uZmlnLmlzUmVzZXJ2ZWRBdHRyID0gaXNSZXNlcnZlZEF0dHI7XG5WdWUuY29uZmlnLmdldFRhZ05hbWVzcGFjZSA9IGdldFRhZ05hbWVzcGFjZTtcblZ1ZS5jb25maWcuaXNVbmtub3duRWxlbWVudCA9IGlzVW5rbm93bkVsZW1lbnQ7XG4vLyBpbnN0YWxsIHBsYXRmb3JtIHJ1bnRpbWUgZGlyZWN0aXZlcyAmIGNvbXBvbmVudHNcbmV4dGVuZChWdWUub3B0aW9ucy5kaXJlY3RpdmVzLCBwbGF0Zm9ybURpcmVjdGl2ZXMpO1xuZXh0ZW5kKFZ1ZS5vcHRpb25zLmNvbXBvbmVudHMsIHBsYXRmb3JtQ29tcG9uZW50cyk7XG4vLyBpbnN0YWxsIHBsYXRmb3JtIHBhdGNoIGZ1bmN0aW9uXG5WdWUucHJvdG90eXBlLl9fcGF0Y2hfXyA9IGluQnJvd3NlciA/IHBhdGNoIDogbm9vcDtcbi8vIHB1YmxpYyBtb3VudCBtZXRob2RcblZ1ZS5wcm90b3R5cGUuJG1vdW50ID0gZnVuY3Rpb24gKGVsLCBoeWRyYXRpbmcpIHtcbiAgICBlbCA9IGVsICYmIGluQnJvd3NlciA/IHF1ZXJ5KGVsKSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbW91bnRDb21wb25lbnQodGhpcywgZWwsIGh5ZHJhdGluZyk7XG59O1xuLy8gZGV2dG9vbHMgZ2xvYmFsIGhvb2tcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5pZiAoaW5Ccm93c2VyKSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChjb25maWcuZGV2dG9vbHMpIHtcbiAgICAgICAgICAgIGlmIChkZXZ0b29scykge1xuICAgICAgICAgICAgICAgIGRldnRvb2xzLmVtaXQoJ2luaXQnLCBWdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnKSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICAgIGNvbnNvbGVbY29uc29sZS5pbmZvID8gJ2luZm8nIDogJ2xvZyddKCdEb3dubG9hZCB0aGUgVnVlIERldnRvb2xzIGV4dGVuc2lvbiBmb3IgYSBiZXR0ZXIgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZTpcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtZGV2dG9vbHMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJlxuICAgICAgICAgICAgY29uZmlnLnByb2R1Y3Rpb25UaXAgIT09IGZhbHNlICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGNvbnNvbGVbY29uc29sZS5pbmZvID8gJ2luZm8nIDogJ2xvZyddKFwiWW91IGFyZSBydW5uaW5nIFZ1ZSBpbiBkZXZlbG9wbWVudCBtb2RlLlxcblwiICtcbiAgICAgICAgICAgICAgICBcIk1ha2Ugc3VyZSB0byB0dXJuIG9uIHByb2R1Y3Rpb24gbW9kZSB3aGVuIGRlcGxveWluZyBmb3IgcHJvZHVjdGlvbi5cXG5cIiArXG4gICAgICAgICAgICAgICAgXCJTZWUgbW9yZSB0aXBzIGF0IGh0dHBzOi8vdnVlanMub3JnL2d1aWRlL2RlcGxveW1lbnQuaHRtbFwiKTtcbiAgICAgICAgfVxuICAgIH0sIDApO1xufVxuXG52YXIgZGVmYXVsdFRhZ1JFID0gL1xce1xceygoPzoufFxccj9cXG4pKz8pXFx9XFx9L2c7XG52YXIgcmVnZXhFc2NhcGVSRSA9IC9bLS4qKz9eJHt9KCl8W1xcXVxcL1xcXFxdL2c7XG52YXIgYnVpbGRSZWdleCA9IGNhY2hlZChmdW5jdGlvbiAoZGVsaW1pdGVycykge1xuICAgIHZhciBvcGVuID0gZGVsaW1pdGVyc1swXS5yZXBsYWNlKHJlZ2V4RXNjYXBlUkUsICdcXFxcJCYnKTtcbiAgICB2YXIgY2xvc2UgPSBkZWxpbWl0ZXJzWzFdLnJlcGxhY2UocmVnZXhFc2NhcGVSRSwgJ1xcXFwkJicpO1xuICAgIHJldHVybiBuZXcgUmVnRXhwKG9wZW4gKyAnKCg/Oi58XFxcXG4pKz8pJyArIGNsb3NlLCAnZycpO1xufSk7XG5mdW5jdGlvbiBwYXJzZVRleHQodGV4dCwgZGVsaW1pdGVycykge1xuICAgIC8vQHRzLWV4cGVjdC1lcnJvclxuICAgIHZhciB0YWdSRSA9IGRlbGltaXRlcnMgPyBidWlsZFJlZ2V4KGRlbGltaXRlcnMpIDogZGVmYXVsdFRhZ1JFO1xuICAgIGlmICghdGFnUkUudGVzdCh0ZXh0KSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0b2tlbnMgPSBbXTtcbiAgICB2YXIgcmF3VG9rZW5zID0gW107XG4gICAgdmFyIGxhc3RJbmRleCA9ICh0YWdSRS5sYXN0SW5kZXggPSAwKTtcbiAgICB2YXIgbWF0Y2gsIGluZGV4LCB0b2tlblZhbHVlO1xuICAgIHdoaWxlICgobWF0Y2ggPSB0YWdSRS5leGVjKHRleHQpKSkge1xuICAgICAgICBpbmRleCA9IG1hdGNoLmluZGV4O1xuICAgICAgICAvLyBwdXNoIHRleHQgdG9rZW5cbiAgICAgICAgaWYgKGluZGV4ID4gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICByYXdUb2tlbnMucHVzaCgodG9rZW5WYWx1ZSA9IHRleHQuc2xpY2UobGFzdEluZGV4LCBpbmRleCkpKTtcbiAgICAgICAgICAgIHRva2Vucy5wdXNoKEpTT04uc3RyaW5naWZ5KHRva2VuVmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0YWcgdG9rZW5cbiAgICAgICAgdmFyIGV4cCA9IHBhcnNlRmlsdGVycyhtYXRjaFsxXS50cmltKCkpO1xuICAgICAgICB0b2tlbnMucHVzaChcIl9zKFwiLmNvbmNhdChleHAsIFwiKVwiKSk7XG4gICAgICAgI
13835HJhd1Rva2Vucy5wdXNoKHsgJ0BiaW5kaW5nJzogZXhwIH0pO1xuICAgICAgICBsYXN0SW5kZXggPSBpbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGxhc3RJbmRleCA8IHRleHQubGVuZ3RoKSB7XG4gICAgICAgIHJhd1Rva2Vucy5wdXNoKCh0b2tlblZhbHVlID0gdGV4dC5zbGljZShsYXN0SW5kZXgpKSk7XG4gICAgICAgIHRva2Vucy5wdXNoKEpTT04uc3RyaW5naWZ5KHRva2VuVmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZXhwcmVzc2lvbjogdG9rZW5zLmpvaW4oJysnKSxcbiAgICAgICAgdG9rZW5zOiByYXdUb2tlbnNcbiAgICB9O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Ob2RlJDEoZWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2FybiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcbiAgICB2YXIgc3RhdGljQ2xhc3MgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnY2xhc3MnKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzdGF0aWNDbGFzcykge1xuICAgICAgICB2YXIgcmVzID0gcGFyc2VUZXh0KHN0YXRpY0NsYXNzLCBvcHRpb25zLmRlbGltaXRlcnMpO1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICB3YXJuKFwiY2xhc3M9XFxcIlwiLmNvbmNhdChzdGF0aWNDbGFzcywgXCJcXFwiOiBcIikgK1xuICAgICAgICAgICAgICAgICdJbnRlcnBvbGF0aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xuICAgICAgICAgICAgICAgICdVc2Ugdi1iaW5kIG9yIHRoZSBjb2xvbiBzaG9ydGhhbmQgaW5zdGVhZC4gRm9yIGV4YW1wbGUsICcgK1xuICAgICAgICAgICAgICAgICdpbnN0ZWFkIG9mIDxkaXYgY2xhc3M9XCJ7eyB2YWwgfX1cIj4sIHVzZSA8ZGl2IDpjbGFzcz1cInZhbFwiPi4nLCBlbC5yYXdBdHRyc01hcFsnY2xhc3MnXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0YXRpY0NsYXNzKSB7XG4gICAgICAgIGVsLnN0YXRpY0NsYXNzID0gSlNPTi5zdHJpbmdpZnkoc3RhdGljQ2xhc3MucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKSk7XG4gICAgfVxuICAgIHZhciBjbGFzc0JpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2NsYXNzJywgZmFsc2UgLyogZ2V0U3RhdGljICovKTtcbiAgICBpZiAoY2xhc3NCaW5kaW5nKSB7XG4gICAgICAgIGVsLmNsYXNzQmluZGluZyA9IGNsYXNzQmluZGluZztcbiAgICB9XG59XG5mdW5jdGlvbiBnZW5EYXRhJDIoZWwpIHtcbiAgICB2YXIgZGF0YSA9ICcnO1xuICAgIGlmIChlbC5zdGF0aWNDbGFzcykge1xuICAgICAgICBkYXRhICs9IFwic3RhdGljQ2xhc3M6XCIuY29uY2F0KGVsLnN0YXRpY0NsYXNzLCBcIixcIik7XG4gICAgfVxuICAgIGlmIChlbC5jbGFzc0JpbmRpbmcpIHtcbiAgICAgICAgZGF0YSArPSBcImNsYXNzOlwiLmNvbmNhdChlbC5jbGFzc0JpbmRpbmcsIFwiLFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG59XG52YXIga2xhc3MgPSB7XG4gICAgc3RhdGljS2V5czogWydzdGF0aWNDbGFzcyddLFxuICAgIHRyYW5zZm9ybU5vZGU6IHRyYW5zZm9ybU5vZGUkMSxcbiAgICBnZW5EYXRhOiBnZW5EYXRhJDJcbn07XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybU5vZGUoZWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2FybiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcbiAgICB2YXIgc3RhdGljU3R5bGUgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnc3R5bGUnKTtcbiAgICBpZiAoc3RhdGljU3R5bGUpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB2Y
13835XIgcmVzID0gcGFyc2VUZXh0KHN0YXRpY1N0eWxlLCBvcHRpb25zLmRlbGltaXRlcnMpO1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIHdhcm4oXCJzdHlsZT1cXFwiXCIuY29uY2F0KHN0YXRpY1N0eWxlLCBcIlxcXCI6IFwiKSArXG4gICAgICAgICAgICAgICAgICAgICdJbnRlcnBvbGF0aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAnVXNlIHYtYmluZCBvciB0aGUgY29sb24gc2hvcnRoYW5kIGluc3RlYWQuIEZvciBleGFtcGxlLCAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2luc3RlYWQgb2YgPGRpdiBzdHlsZT1cInt7IHZhbCB9fVwiPiwgdXNlIDxkaXYgOnN0eWxlPVwidmFsXCI+LicsIGVsLnJhd0F0dHJzTWFwWydzdHlsZSddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbC5zdGF0aWNTdHlsZSA9IEpTT04uc3RyaW5naWZ5KHBhcnNlU3R5bGVUZXh0KHN0YXRpY1N0eWxlKSk7XG4gICAgfVxuICAgIHZhciBzdHlsZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3N0eWxlJywgZmFsc2UgLyogZ2V0U3RhdGljICovKTtcbiAgICBpZiAoc3R5bGVCaW5kaW5nKSB7XG4gICAgICAgIGVsLnN0eWxlQmluZGluZyA9IHN0eWxlQmluZGluZztcbiAgICB9XG59XG5mdW5jdGlvbiBnZW5EYXRhJDEoZWwpIHtcbiAgICB2YXIgZGF0YSA9ICcnO1xuICAgIGlmIChlbC5zdGF0aWNTdHlsZSkge1xuICAgICAgICBkYXRhICs9IFwic3RhdGljU3R5bGU6XCIuY29uY2F0KGVsLnN0YXRpY1N0eWxlLCBcIixcIik7XG4gICAgfVxuICAgIGlmIChlbC5zdHlsZUJpbmRpbmcpIHtcbiAgICAgICAgZGF0YSArPSBcInN0eWxlOihcIi5jb25jYXQoZWwuc3R5bGVCaW5kaW5nLCBcIiksXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbn1cbnZhciBzdHlsZSA9IHtcbiAgICBzdGF0aWNLZXlzOiBbJ3N0YXRpY1N0eWxlJ10sXG4gICAgdHJhbnNmb3JtTm9kZTogdHJhbnNmb3JtTm9kZSxcbiAgICBnZW5EYXRhOiBnZW5EYXRhJDFcbn07XG5cbnZhciBkZWNvZGVyO1xudmFyIGhlID0ge1xuICAgIGRlY29kZTogZnVuY3Rpb24gKGh0bWwpIHtcbiAgICAgICAgZGVjb2RlciA9IGRlY29kZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGRlY29kZXIuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgICAgcmV0dXJuIGRlY29kZXIudGV4dENvbnRlbnQ7XG4gICAgfVxufTtcblxudmFyIGlzVW5hcnlUYWcgPSBtYWtlTWFwKCdhcmVhLGJhc2UsYnIsY29sLGVtYmVkLGZyYW1lLGhyLGltZyxpbnB1dCxpc2luZGV4LGtleWdlbiwnICtcbiAgICAnbGluayxtZXRhLHBhcmFtLHNvdXJjZSx0cmFjayx3YnInKTtcbi8vIEVsZW1lbnRzIHRoYXQgeW91IGNhbiwgaW50ZW50aW9uYWxseSwgbGVhdmUgb3BlblxuLy8gKGFuZCB3aGljaCBjbG9zZSB0aGVtc2VsdmVzKVxudmFyIGNhbkJlTGVmdE9wZW5UYWcgPSBtYWtlTWFwKCdjb2xncm91cCxkZCxkdCxsaSxvcHRpb25zLHAsdGQsdGZvb3QsdGgsdGhlYWQsdHIsc291cmNlJyk7XG4vLyBIVE1MNSB0YWdzIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZGljZXMuaHRtbCNlbGVtZW50cy0zXG4vLyBQaHJhc2luZyBDb250ZW50IGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2RvbS5odG1sI3BocmFzaW5nLWNvbnRlbnRcbnZhciBpc05vblBocmFzaW5nVGFnID0gbWFrZU1hcCgnYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJhc2UsYmxvY2txdW90ZSxib2R5LGNhcHRpb24sY29sLGNvbGdyb3VwLGRkLCcgK1xuICAgICdkZXRhaWxzLGRpYWxvZyxkaXYsZGwsZHQsZmllbGRzZXQsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGZvcm0sJyArXG4gICAgJ2gxLGgyLGgzLGg0LGg1LGg2LGhlYWQsaGVhZGVyLGhncm91cCxocixodG1sLGxlZ2VuZCxsaSxtZW51aXRlbSxtZXRhLCcgK1xuICAgICdvcHRncm91cCxvcHRpb24scGFyYW0scnAscnQsc291cmNlLHN0eWxlLHN1bW1hcnksdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsJyArXG4gICAgJ3RpdGxlLHRyLHRyYWNrJyk7XG5cbi8qKlxuICogTm90IHR5cGUtY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgaXQncyBtb3N0bHkgdmVuZG9yIGNvZGUuXG4gKi9cbi8vIFJlZ3VsYXIgRXhwcmVzc2lvbnMgZm9yIHBhcnNpbmcgdGFncyBhbmQgYXR0cmlidXRlc1xudmFyIGF0dHJpYnV0ZSA9IC9eXFxzKihbXlxcc1wiJzw+XFwvPV0rKSg/OlxccyooPSlcXHMqKD86XCIoW15cIl0qKVwiK3wnKFteJ10qKScrfChbXlxcc1wiJz08PmBdKykpKT8vO1xudmFyIGR5bmFtaWNBcmdBdHRyaWJ1dGUgPSAvXlxccyooKD86di1bXFx3LV0rOnxAfDp8IylcXFtbXj1dKz9cXF1bXlxcc1wiJzw+XFwvPV0qKSg/OlxccyooPSlcXHMqKD86XCIoW15cIl0qKVwiK3wnKFteJ10qKScrfChbXlxcc1wiJz08PmBdKykpKT8vO1xudmFyIG5jbmFtZSA9IFwiW2EtekEtWl9dW1xcXFwtXFxcXC4wLTlfYS16QS1aXCIuY29uY2F0KHVuaWNvZGVSZWdFeHAuc291cmNlLCBcIl0qXCIpO1xudmFyIHFuYW1lQ2FwdHVyZSA9IFwiKCg/OlwiLmNvbmNhdChuY25hbWUsIFwiXFxcXDopP1wiKS5jb25jYXQobmNuYW1lLCBcIilcIik7XG52YXIgc3RhcnRUYWdPcGVuID0gbmV3IFJlZ0V4cChcIl48XCIuY29uY2F0KHFuYW1lQ2FwdHVyZSkpO1xudmFyIHN0YXJ0VGFnQ2xvc2UgPSAvXlxccyooXFwvPyk+LztcbnZhciBlbmRUYWcgPSBuZXcgUmVnRXhwKFwiXjxcXFxcL1wiLmNvbmNhdChxbmFtZUNhcHR1cmUsIFwiW14+XSo+XCIpKTtcbnZhciBkb2N0eXBlID0gL148IURPQ1RZUEUgW14+XSs+L2k7XG4vLyAjNzI5ODogZXNjYXBlIC0gdG8gYXZvaWQgYmVpbmcgcGFzc2VkIGFzIEhUTUwgY29tbWVudCB3aGVuIGlubGluZWQgaW4gcGFnZVxudmFyIGNvbW1lbnQgPSAvXjwhXFwtLS87XG52YXIgY29uZGl0aW9uYWxDb21tZW50ID0gL148IVxcWy87XG4vLyBTcGVjaWFsIEVsZW1lbnRzIChjYW4gY29udGFpbiBhbnl0aGluZylcbnZhciBpc1BsYWluVGV4dEVsZW1lbnQgPSBtYWtlTWFwKCdzY3JpcHQsc3R5bGUsdGV4dGFyZWEnLCB0cnVlKTtcbnZhciByZUNhY2hlID0ge307XG52YXIgZGVjb2RpbmdNYXAgPSB7XG4gICAgJyZsdDsnOiAnPCcsXG4gICAgJyZnd
13835DsnOiAnPicsXG4gICAgJyZxdW90Oyc6ICdcIicsXG4gICAgJyZhbXA7JzogJyYnLFxuICAgICcmIzEwOyc6ICdcXG4nLFxuICAgICcmIzk7JzogJ1xcdCcsXG4gICAgJyYjMzk7JzogXCInXCJcbn07XG52YXIgZW5jb2RlZEF0dHIgPSAvJig/Omx0fGd0fHF1b3R8YW1wfCMzOSk7L2c7XG52YXIgZW5jb2RlZEF0dHJXaXRoTmV3TGluZXMgPSAvJig/Omx0fGd0fHF1b3R8YW1wfCMzOXwjMTB8IzkpOy9nO1xuLy8gIzU5OTJcbnZhciBpc0lnbm9yZU5ld2xpbmVUYWcgPSBtYWtlTWFwKCdwcmUsdGV4dGFyZWEnLCB0cnVlKTtcbnZhciBzaG91bGRJZ25vcmVGaXJzdE5ld2xpbmUgPSBmdW5jdGlvbiAodGFnLCBodG1sKSB7XG4gICAgcmV0dXJuIHRhZyAmJiBpc0lnbm9yZU5ld2xpbmVUYWcodGFnKSAmJiBodG1sWzBdID09PSAnXFxuJztcbn07XG5mdW5jdGlvbiBkZWNvZGVBdHRyKHZhbHVlLCBzaG91bGREZWNvZGVOZXdsaW5lcykge1xuICAgIHZhciByZSA9IHNob3VsZERlY29kZU5ld2xpbmVzID8gZW5jb2RlZEF0dHJXaXRoTmV3TGluZXMgOiBlbmNvZGVkQXR0cjtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZShyZSwgZnVuY3Rpb24gKG1hdGNoKSB7IHJldHVybiBkZWNvZGluZ01hcFttYXRjaF07IH0pO1xufVxuZnVuY3Rpb24gcGFyc2VIVE1MKGh0bWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgZXhwZWN0SFRNTCA9IG9wdGlvbnMuZXhwZWN0SFRNTDtcbiAgICB2YXIgaXNVbmFyeVRhZyA9IG9wdGlvbnMuaXNVbmFyeVRhZyB8fCBubztcbiAgICB2YXIgY2FuQmVMZWZ0T3BlblRhZyA9IG9wdGlvbnMuY2FuQmVMZWZ0T3BlblRhZyB8fCBubztcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBsYXN0LCBsYXN0VGFnO1xuICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBsYXN0ID0gaHRtbDtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHdlJ3JlIG5vdCBpbiBhIHBsYWludGV4dCBjb250ZW50IGVsZW1lbnQgbGlrZSBzY3JpcHQvc3R5bGVcbiAgICAgICAgaWYgKCFsYXN0VGFnIHx8ICFpc1BsYWluVGV4dEVsZW1lbnQobGFzdFRhZykpIHtcbiAgICAgICAgICAgIHZhciB0ZXh0RW5kID0gaHRtbC5pbmRleE9mKCc8Jyk7XG4gICAgICAgICAgICBpZiAodGV4dEVuZCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIENvbW1lbnQ6XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQudGVzdChodG1sKSkge1xuICAgICAgICAgICAgICAgICAgICB2Y
13835XIgY29tbWVudEVuZCA9IGh0bWwuaW5kZXhPZignLS0+Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21tZW50RW5kID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNob3VsZEtlZXBDb21tZW50ICYmIG9wdGlvbnMuY29tbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29tbWVudChodG1sLnN1YnN0cmluZyg0LCBjb21tZW50RW5kKSwgaW5kZXgsIGluZGV4ICsgY29tbWVudEVuZCArIDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZShjb21tZW50RW5kICsgMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29uZGl0aW9uYWxfY29tbWVudCNEb3dubGV2ZWwtcmV2ZWFsZWRfY29uZGl0aW9uYWxfY29tbWVudFxuICAgICAgICAgICAgICAgIGlmIChjb25kaXRpb25hbENvbW1lbnQudGVzdChodG1sKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29uZGl0aW9uYWxFbmQgPSBodG1sLmluZGV4T2YoJ10+Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25kaXRpb25hbEVuZCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKGNvbmRpdGlvbmFsRW5kICsgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIERvY3R5cGU6XG4gICAgICAgICAgICAgICAgdmFyIGRvY3R5cGVNYXRjaCA9IGh0bWwubWF0Y2goZG9jdHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKGRvY3R5cGVNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKGRvY3R5cGVNYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBFbmQgdGFnOlxuICAgICAgICAgICAgICAgIHZhciBlbmRUYWdNYXRjaCA9IGh0bWwubWF0Y2goZW5kVGFnKTtcbiAgICAgICAgICAgICAgICBpZiAoZW5kVGFnTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGN1ckluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoZW5kVGFnTWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VFbmRUYWcoZW5kVGFnTWF0Y2hbMV0sIGN1ckluZGV4LCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRhZzpcbiAgICAgICAgICAgICAgICB2Y
13835XIgc3RhcnRUYWdNYXRjaCA9IHBhcnNlU3RhcnRUYWcoKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRUYWdNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVTdGFydFRhZyhzdGFydFRhZ01hdGNoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZElnbm9yZUZpcnN0TmV3bGluZShzdGFydFRhZ01hdGNoLnRhZ05hbWUsIGh0bWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHRleHQgPSB2b2lkIDAsIHJlc3QgPSB2b2lkIDAsIG5leHQgPSB2b2lkIDA7XG4gICAgICAgICAgICBpZiAodGV4dEVuZCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdCA9IGh0bWwuc2xpY2UodGV4dEVuZCk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKCFlbmRUYWcudGVzdChyZXN0KSAmJlxuICAgICAgICAgICAgICAgICAgICAhc3RhcnRUYWdPcGVuLnRlc3QocmVzdCkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWNvbW1lbnQudGVzdChyZXN0KSAmJlxuICAgICAgICAgICAgICAgICAgICAhY29uZGl0aW9uYWxDb21tZW50LnRlc3QocmVzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gPCBpbiBwbGFpbiB0ZXh0LCBiZSBmb3JnaXZpbmcgYW5kIHRyZWF0IGl0IGFzIHRleHRcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHJlc3QuaW5kZXhPZignPCcsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgdGV4dEVuZCArPSBuZXh0O1xuICAgICAgICAgICAgICAgICAgICByZXN0ID0gaHRtbC5zbGljZSh0ZXh0RW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGV4dCA9IGh0bWwuc3Vic3RyaW5nKDAsIHRleHRFbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRleHRFbmQgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IGh0bWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgICAgIGFkdmFuY2UodGV4dC5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2hhcnMgJiYgdGV4dCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuY2hhcnModGV4dCwgaW5kZXggLSB0ZXh0Lmxlbmd0aCwgaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGVuZFRhZ0xlbmd0aF8xID0gMDtcbiAgICAgICAgICAgIHZhciBzdGFja2VkVGFnXzEgPSBsYXN0VGFnLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB2Y
13835XIgcmVTdGFja2VkVGFnID0gcmVDYWNoZVtzdGFja2VkVGFnXzFdIHx8XG4gICAgICAgICAgICAgICAgKHJlQ2FjaGVbc3RhY2tlZFRhZ18xXSA9IG5ldyBSZWdFeHAoJyhbXFxcXHNcXFxcU10qPykoPC8nICsgc3RhY2tlZFRhZ18xICsgJ1tePl0qPiknLCAnaScpKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gaHRtbC5yZXBsYWNlKHJlU3RhY2tlZFRhZywgZnVuY3Rpb24gKGFsbCwgdGV4dCwgZW5kVGFnKSB7XG4gICAgICAgICAgICAgICAgZW5kVGFnTGVuZ3RoXzEgPSBlbmRUYWcubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmICghaXNQbGFpblRleHRFbGVtZW50KHN0YWNrZWRUYWdfMSkgJiYgc3RhY2tlZFRhZ18xICE9PSAnbm9zY3JpcHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPCFcXC0tKFtcXHNcXFNdKj8pLS0+L2csICckMScpIC8vICM3Mjk4XG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPCFcXFtDREFUQVxcWyhbXFxzXFxTXSo/KV1dPi9nLCAnJDEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZElnbm9yZUZpcnN0TmV3bGluZShzdGFja2VkVGFnXzEsIHRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5jaGFycykge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNoYXJzKHRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGluZGV4ICs9IGh0bWwubGVuZ3RoIC0gcmVzdC5sZW5ndGg7XG4gICAgICAgICAgICBodG1sID0gcmVzdDtcbiAgICAgICAgICAgIHBhcnNlRW5kVGFnKHN0YWNrZWRUYWdfMSwgaW5kZXggLSBlbmRUYWdMZW5ndGhfMSwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChodG1sID09PSBsYXN0KSB7XG4gICAgICAgICAgICBvcHRpb25zLmNoYXJzICYmIG9wdGlvbnMuY2hhcnMoaHRtbCk7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhc3RhY2subGVuZ3RoICYmIG9wdGlvbnMud2Fybikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMud2FybihcIk1hbC1mb3JtYXR0ZWQgdGFnIGF0IGVuZCBvZiB0ZW1wbGF0ZTogXFxcIlwiLmNvbmNhdChodG1sLCBcIlxcXCJcIiksIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGluZGV4ICsgaHRtbC5sZW5ndGhcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHdoaWxlIChodG1sKSB7XG4gICAgICAgIHZhciBzdGF0ZV8xID0gX2xvb3BfMSgpO1xuICAgICAgICBpZiAoc3RhdGVfMSA9PT0gXCJicmVha1wiKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIENsZWFuIHVwIGFueSByZW1haW5pbmcgdGFnc1xuICAgIHBhcnNlRW5kVGFnKCk7XG4gICAgZnVuY3Rpb24gYWR2YW5jZShuKSB7XG4gICAgICAgIGluZGV4ICs9IG47XG4gICAgICAgIGh0bWwgPSBodG1sLnN1YnN0cmluZyhuKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VTdGFydFRhZygpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gaHRtbC5tYXRjaChzdGFydFRhZ09wZW4pO1xuICAgICAgICBpZiAoc3RhcnQpIHtcbiAgICAgICAgICAgIHZhciBtYXRjaCA9IHtcbiAgICAgICAgICAgICAgICB0YWdOYW1lOiBzdGFydFsxXSxcbiAgICAgICAgICAgICAgICBhdHRyczogW10sXG4gICAgICAgICAgICAgICAgc3RhcnQ6IGluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWR2YW5jZShzdGFydFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgdmFyIGVuZCA9IHZvaWQgMCwgYXR0ciA9IHZvaWQgMDtcbiAgICAgICAgICAgIHdoaWxlICghKGVuZCA9IGh0bWwubWF0Y2goc3RhcnRUYWdDbG9zZSkpICYmXG4gICAgICAgICAgICAgICAgKGF0dHIgPSBodG1sLm1hdGNoKGR5bmFtaWNBcmdBdHRyaWJ1dGUpIHx8IGh0bWwubWF0Y2goYXR0cmlidXRlKSkpIHtcbiAgICAgICAgICAgICAgICBhdHRyLnN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgYWR2YW5jZShhdHRyWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgYXR0ci5lbmQgPSBpbmRleDtcbiAgICAgICAgICAgICAgICBtYXRjaC5hdHRycy5wdXNoKGF0dHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVuZCkge1xuICAgICAgICAgICAgICAgIG1hdGNoLnVuYXJ5U2xhc2ggPSBlbmRbMV07XG4gICAgICAgICAgICAgICAgYWR2YW5jZShlbmRbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBtYXRjaC5lbmQgPSBpbmRleDtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlU3RhcnRUYWcobWF0Y2gpIHtcbiAgICAgICAgdmFyIHRhZ05hbWUgPSBtYXRjaC50YWdOYW1lO1xuICAgICAgICB2Y
13835XIgdW5hcnlTbGFzaCA9IG1hdGNoLnVuYXJ5U2xhc2g7XG4gICAgICAgIGlmIChleHBlY3RIVE1MKSB7XG4gICAgICAgICAgICBpZiAobGFzdFRhZyA9PT0gJ3AnICYmIGlzTm9uUGhyYXNpbmdUYWcodGFnTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBwYXJzZUVuZFRhZyhsYXN0VGFnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjYW5CZUxlZnRPcGVuVGFnKHRhZ05hbWUpICYmIGxhc3RUYWcgPT09IHRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgICBwYXJzZUVuZFRhZyh0YWdOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgdW5hcnkgPSBpc1VuYXJ5VGFnKHRhZ05hbWUpIHx8ICEhdW5hcnlTbGFzaDtcbiAgICAgICAgdmFyIGwgPSBtYXRjaC5hdHRycy5sZW5ndGg7XG4gICAgICAgIHZhciBhdHRycyA9IG5ldyBBcnJheShsKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gbWF0Y2guYXR0cnNbaV07XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBhcmdzWzNdIHx8IGFyZ3NbNF0gfHwgYXJnc1s1XSB8fCAnJztcbiAgICAgICAgICAgIHZhciBzaG91bGREZWNvZGVOZXdsaW5lcyA9IHRhZ05hbWUgPT09ICdhJyAmJiBhcmdzWzFdID09PSAnaHJlZidcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMuc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmXG4gICAgICAgICAgICAgICAgOiBvcHRpb25zLnNob3VsZERlY29kZU5ld2xpbmVzO1xuICAgICAgICAgICAgYXR0cnNbaV0gPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogYXJnc1sxXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZGVjb2RlQXR0cih2YWx1ZSwgc2hvdWxkRGVjb2RlTmV3bGluZXMpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgICAgIGF0dHJzW2ldLnN0YXJ0ID0gYXJncy5zdGFydCArIGFyZ3NbMF0ubWF0Y2goL15cXHMqLykubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGF0dHJzW2ldLmVuZCA9IGFyZ3MuZW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdW5hcnkpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICAgIHRhZzogdGFnTmFtZSxcbiAgICAgICAgICAgICAgICBsb3dlckNhc2VkVGFnOiB0YWdOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgYXR0cnM6IGF0dHJzLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiBtYXRjaC5zdGFydCxcbiAgICAgICAgICAgICAgICBlbmQ6IG1hdGNoLmVuZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsYXN0VGFnID0gdGFnTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5zdGFydCkge1xuICAgICAgICAgICAgb3B0aW9ucy5zdGFydCh0YWdOYW1lLCBhdHRycywgdW5hcnksIG1hdGNoLnN0YXJ0LCBtYXRjaC5lbmQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlRW5kVGFnKHRhZ05hbWUsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgdmFyIHBvcywgbG93ZXJDYXNlZFRhZ05hbWU7XG4gICAgICAgIGlmIChzdGFydCA9PSBudWxsKVxuICAgICAgICAgICAgc3RhcnQgPSBpbmRleDtcbiAgICAgICAgaWYgKGVuZCA9PSBudWxsKVxuICAgICAgICAgICAgZW5kID0gaW5kZXg7XG4gICAgICAgIC8vIEZpbmQgdGhlIGNsb3Nlc3Qgb3BlbmVkIHRhZyBvZiB0aGUgc2FtZSB0eXBlXG4gICAgICAgIGlmICh0YWdOYW1lKSB7XG4gICAgICAgICAgICBsb3dlckNhc2VkVGFnTmFtZSA9IHRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGZvciAocG9zID0gc3RhY2subGVuZ3RoIC0gMTsgcG9zID49IDA7IHBvcy0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YWNrW3Bvc10ubG93ZXJDYXNlZFRhZyA9PT0gbG93ZXJDYXNlZFRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgbm8gdGFnIG5hbWUgaXMgcHJvdmlkZWQsIGNsZWFuIHNob3BcbiAgICAgICAgICAgIHBvcyA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvcyA+PSAwKSB7XG4gICAgICAgICAgICAvLyBDbG9zZSBhbGwgdGhlIG9wZW4gZWxlbWVudHMsIHVwIHRoZSBzdGFja1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YWNrLmxlbmd0aCAtIDE7IGkgPj0gcG9zOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAoaSA+IHBvcyB8fCAhdGFnTmFtZSkgJiYgb3B0aW9ucy53YXJuKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMud2FybihcInRhZyA8XCIuY29uY2F0KHN0YWNrW2ldLnRhZywgXCI+IGhhcyBubyBtYXRjaGluZyBlbmQgdGFnLlwiKSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YWNrW2ldLnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBzdGFja1tpXS5lbmRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmVuZCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmVuZChzdGFja1tpXS50YWcsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgb3BlbiBlbGVtZW50cyBmcm9tIHRoZSBzdGFja1xuICAgICAgICAgICAgc3RhY2subGVuZ3RoID0gcG9zO1xuICAgICAgICAgICAgbGFzdFRhZyA9IHBvcyAmJiBzdGFja1twb3MgLSAxXS50YWc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobG93ZXJDYXNlZFRhZ05hbWUgPT09ICdicicpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zdGFydCh0YWdOYW1lLCBbXSwgdHJ1ZSwgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgI
13835H1cbiAgICAgICAgZWxzZSBpZiAobG93ZXJDYXNlZFRhZ05hbWUgPT09ICdwJykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXJ0KHRhZ05hbWUsIFtdLCBmYWxzZSwgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbmQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmVuZCh0YWdOYW1lLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxudmFyIG9uUkUgPSAvXkB8XnYtb246LztcbnZhciBkaXJSRSA9IC9edi18XkB8Xjp8XiMvO1xudmFyIGZvckFsaWFzUkUgPSAvKFtcXHNcXFNdKj8pXFxzKyg/OmlufG9mKVxccysoW1xcc1xcU10qKS87XG52YXIgZm9ySXRlcmF0b3JSRSA9IC8sKFteLFxcfVxcXV0qKSg/OiwoW14sXFx9XFxdXSopKT8kLztcbnZhciBzdHJpcFBhcmVuc1JFID0gL15cXCh8XFwpJC9nO1xudmFyIGR5bmFtaWNBcmdSRSA9IC9eXFxbLipcXF0kLztcbnZhciBhcmdSRSA9IC86KC4qKSQvO1xudmFyIGJpbmRSRSA9IC9eOnxeXFwufF52LWJpbmQ6LztcbnZhciBtb2RpZmllclJFID0gL1xcLlteLlxcXV0rKD89W15cXF1dKiQpL2c7XG52YXIgc2xvdFJFID0gL152LXNsb3QoOnwkKXxeIy87XG52YXIgbGluZUJyZWFrUkUgPSAvW1xcclxcbl0vO1xudmFyIHdoaXRlc3BhY2VSRSA9IC9bIFxcZlxcdFxcclxcbl0rL2c7XG52YXIgaW52YWxpZEF0dHJpYnV0ZVJFID0gL1tcXHNcIic8PlxcLz1dLztcbnZhciBkZWNvZGVIVE1MQ2FjaGVkID0gY2FjaGVkKGhlLmRlY29kZSk7XG52YXIgZW1wdHlTbG90U2NvcGVUb2tlbiA9IFwiX2VtcHR5X1wiO1xuLy8gY29uZmlndXJhYmxlIHN0YXRlXG52YXIgd2FybjtcbnZhciBkZWxpbWl0ZXJzO1xudmFyIHRyYW5zZm9ybXM7XG52YXIgcHJlVHJhbnNmb3JtcztcbnZhciBwb3N0VHJhbnNmb3JtcztcbnZhciBwbGF0Zm9ybUlzUHJlVGFnO1xudmFyIHBsYXRmb3JtTXVzdFVzZVByb3A7XG52YXIgcGxhdGZvcm1HZXRUYWdOYW1lc3BhY2U7XG52YXIgbWF5YmVDb21wb25lbnQ7XG5mdW5jdGlvbiBjcmVhdGVBU1RFbGVtZW50KHRhZywgYXR0cnMsIHBhcmVudCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IDEsXG4gICAgICAgIHRhZzogdGFnLFxuICAgICAgICBhdHRyc0xpc3Q6IGF0dHJzLFxuICAgICAgICBhdHRyc01hcDogbWFrZUF0dHJzTWFwKGF0dHJzKSxcbiAgICAgICAgcmF3QXR0cnNNYXA6IHt9LFxuICAgICAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgfTtcbn1cbi8qKlxuICogQ29udmVydCBIVE1MIHN0cmluZyB0byBBU1QuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlKHRlbXBsYXRlLCBvcHRpb25zKSB7XG4gICAgd2FybiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcbiAgICBwbGF0Zm9ybUlzUHJlVGFnID0gb3B0aW9ucy5pc1ByZVRhZyB8fCBubztcbiAgICBwbGF0Zm9ybU11c3RVc2VQcm9wID0gb3B0aW9ucy5tdXN0VXNlUHJvcCB8fCBubztcbiAgICBwbGF0Zm9ybUdldFRhZ05hbWVzcGFjZSA9IG9wdGlvbnMuZ2V0VGFnTmFtZXNwYWNlIHx8IG5vO1xuICAgIHZhciBpc1Jlc2VydmVkVGFnID0gb3B0aW9ucy5pc1Jlc2VydmVkVGFnIHx8IG5vO1xuICAgIG1heWJlQ29tcG9uZW50ID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgIHJldHVybiAhIShlbC5jb21wb25lbnQgfHxcbiAgICAgICAgICAgIGVsLmF0dHJzTWFwWyc6aXMnXSB8fFxuICAgICAgICAgICAgZWwuYXR0cnNNYXBbJ3YtYmluZDppcyddIHx8XG4gICAgICAgICAgICAhKGVsLmF0dHJzTWFwLmlzID8gaXNSZXNlcnZlZFRhZyhlbC5hdHRyc01hcC5pcykgOiBpc1Jlc2VydmVkVGFnKGVsLnRhZykpKTtcbiAgICB9O1xuICAgIHRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3RyYW5zZm9ybU5vZGUnKTtcbiAgICBwcmVUcmFuc2Zvcm1zID0gcGx1Y2tNb2R1bGVGdW5jdGlvbihvcHRpb25zLm1vZHVsZXMsICdwcmVUcmFuc2Zvcm1Ob2RlJyk7XG4gICAgcG9zdFRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3Bvc3RUcmFuc2Zvcm1Ob2RlJyk7XG4gICAgZGVsaW1pdGVycyA9IG9wdGlvbnMuZGVsaW1pdGVycztcbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgcHJlc2VydmVXaGl0ZXNwYWNlID0gb3B0aW9ucy5wcmVzZXJ2ZVdoaXRlc3BhY2UgIT09IGZhbHNlO1xuICAgIHZhciB3aGl0ZXNwYWNlT3B0aW9uID0gb3B0aW9ucy53aGl0ZXNwYWNlO1xuICAgIHZhciByb290O1xuICAgIHZhciBjdXJyZW50UGFyZW50O1xuICAgIHZhciBpblZQcmUgPSBmYWxzZTtcbiAgICB2YXIgaW5QcmUgPSBmYWxzZTtcbiAgICB2YXIgd2FybmVkID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gd2Fybk9uY2UobXNnLCByYW5nZSkge1xuICAgICAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHdhcm4obXNnLCByYW5nZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY2xvc2VFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgdHJpbUVuZGluZ1doaXRlc3BhY2UoZWxlbWVudCk7XG4gICAgICAgIGlmICghaW5WUHJlICYmICFlbGVtZW50LnByb2Nlc3NlZCkge1xuICAgICAgICAgICAgZWxlbWVudCA9IHByb2Nlc3NFbGVtZW50KGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRyZWUgbWFuYWdlbWVudFxuICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCAmJiBlbGVtZW50ICE9PSByb290KSB7XG4gICAgICAgICAgICAvLyBhbGxvdyByb290IGVsZW1lbnRzIHdpdGggdi1pZiwgdi1lbHNlLWlmIGFuZCB2LWVsc2VcbiAgICAgICAgICAgIGlmIChyb290LmlmICYmIChlbGVtZW50LmVsc2VpZiB8fCBlbGVtZW50LmVsc2UpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tSb290Q29uc3RyYWludHMoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZElmQ29uZGl0aW9uKHJvb3QsIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwOiBlbGVtZW50LmVsc2VpZixcbiAgICAgICAgICAgICAgICAgICAgYmxvY2s6IGVsZW1lbnRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgI
13835H1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZShcIkNvbXBvbmVudCB0ZW1wbGF0ZSBzaG91bGQgY29udGFpbiBleGFjdGx5IG9uZSByb290IGVsZW1lbnQuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJJZiB5b3UgYXJlIHVzaW5nIHYtaWYgb24gbXVsdGlwbGUgZWxlbWVudHMsIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJ1c2Ugdi1lbHNlLWlmIHRvIGNoYWluIHRoZW0gaW5zdGVhZC5cIiwgeyBzdGFydDogZWxlbWVudC5zdGFydCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFBhcmVudCAmJiAhZWxlbWVudC5mb3JiaWRkZW4pIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmVsc2VpZiB8fCBlbGVtZW50LmVsc2UpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzSWZDb25kaXRpb25zKGVsZW1lbnQsIGN1cnJlbnRQYXJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuc2xvdFNjb3BlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNjb3BlZCBzbG90XG4gICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgaXQgaW4gdGhlIGNoaWxkcmVuIGxpc3Qgc28gdGhhdCB2LWVsc2UoLWlmKSBjb25kaXRpb25zIGNhblxuICAgICAgICAgICAgICAgICAgICAvLyBmaW5kIGl0IGFzIHRoZSBwcmV2IG5vZGUuXG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lXzEgPSBlbGVtZW50LnNsb3RUYXJnZXQgfHwgJ1wiZGVmYXVsdFwiJztcbiAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRQYXJlbnQuc2NvcGVkU2xvdHMgfHwgKGN1cnJlbnRQYXJlbnQuc2NvcGVkU2xvdHMgPSB7fSkpW25hbWVfMV0gPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50UGFyZW50LmNoaWxkcmVuLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnQgPSBjdXJyZW50UGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmFsIGNoaWxkcmVuIGNsZWFudXBcbiAgICAgICAgLy8gZmlsdGVyIG91dCBzY29wZWQgc2xvdHNcbiAgICAgICAgZWxlbWVudC5jaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uIChjKSB7IHJldHVybiAhYy5zbG90U2NvcGU7IH0pO1xuICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSBub2RlIGFnYWluXG4gICAgICAgIHRyaW1FbmRpbmdXaGl0ZXNwYWNlKGVsZW1lbnQpO1xuICAgICAgICAvLyBjaGVjayBwcmUgc3RhdGVcbiAgICAgICAgaWYgKGVsZW1lbnQucHJlKSB7XG4gICAgICAgICAgICBpblZQcmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGxhdGZvcm1Jc1ByZVRhZyhlbGVtZW50LnRhZykpIHtcbiAgICAgICAgICAgIGluUHJlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXBwbHkgcG9zdC10cmFuc2Zvcm1zXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9zdFRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHBvc3RUcmFuc2Zvcm1zW2ldKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyaW1FbmRpbmdXaGl0ZXNwYWNlKGVsKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIG5vZGVcbiAgICAgICAgaWYgKCFpblByZSkge1xuICAgICAgICAgICAgdmFyIGxhc3ROb2RlID0gdm9pZCAwO1xuICAgICAgICAgICAgd2hpbGUgKChsYXN0Tm9kZSA9IGVsLmNoaWxkcmVuW2VsLmNoaWxkcmVuLmxlbmd0aCAtIDFdKSAmJlxuICAgICAgICAgICAgICAgIGxhc3ROb2RlLnR5cGUgPT09IDMgJiZcbiAgICAgICAgICAgICAgICBsYXN0Tm9kZS50ZXh0ID09PSAnICcpIHtcbiAgICAgICAgICAgICAgICBlbC5jaGlsZHJlbi5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja1Jvb3RDb25zdHJhaW50cyhlbCkge1xuICAgICAgICBpZiAoZWwudGFnID09PSAnc2xvdCcgfHwgZWwudGFnID09PSAndGVtcGxhdGUnKSB7XG4gICAgICAgICAgICB3YXJuT25jZShcIkNhbm5vdCB1c2UgPFwiLmNvbmNhdChlbC50YWcsIFwiPiBhcyBjb21wb25lbnQgcm9vdCBlbGVtZW50IGJlY2F1c2UgaXQgbWF5IFwiKSArXG4gICAgICAgICAgICAgICAgJ2NvbnRhaW4gbXVsdGlwbGUgbm9kZXMuJywgeyBzdGFydDogZWwuc3RhcnQgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsLmF0dHJzTWFwLmhhc093blByb3BlcnR5KCd2LWZvcicpKSB7XG4gICAgICAgICAgICB3YXJuT25jZSgnQ2Fubm90IHVzZSB2LWZvciBvbiBzdGF0ZWZ1bCBjb21wb25lbnQgcm9vdCBlbGVtZW50IGJlY2F1c2UgJyArXG4gICAgICAgICAgICAgICAgJ2l0IHJlbmRlcnMgbXVsdGlwbGUgZWxlbWVudHMuJywgZWwucmF3QXR0cnNNYXBbJ3YtZm9yJ10pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBhcnNlSFRNTCh0ZW1wbGF0ZSwge1xuICAgICAgICB3YXJuOiB3YXJuLFxuICAgICAgICBleHBlY3RIVE1MOiBvcHRpb25zLmV4cGVjdEhUTUwsXG4gICAgICAgIGlzVW5hcnlUYWc6IG9wdGlvbnMuaXNVbmFyeVRhZyxcbiAgICAgICAgY2FuQmVMZWZ0T3BlblRhZzogb3B0aW9ucy5jYW5CZUxlZnRPcGVuVGFnLFxuICAgICAgICBzaG91bGREZWNvZGVOZXdsaW5lczogb3B0aW9ucy5zaG91bGREZWNvZGVOZXdsaW5lcyxcbiAgICAgICAgc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOiBvcHRpb25zLnNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZixcbiAgICAgICAgc2hvdWxkS2VlcENvbW1lbnQ6IG9wdGlvbnMuY29tbWVudHMsXG4gICAgICAgIG91dHB1dFNvdXJjZVJhbmdlOiBvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlLFxuICAgICAgICBzdGFydDogZnVuY3Rpb24gKHRhZywgYXR0cnMsIHVuYXJ5LCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICAvLyBjaGVjayBuYW1lc3BhY2UuXG4gICAgICAgICAgICAvLyBpbmhlcml0IHBhcmVudCBucyBpZiB0aGVyZSBpcyBvbmVcbiAgICAgICAgICAgI
13835HZhciBucyA9IChjdXJyZW50UGFyZW50ICYmIGN1cnJlbnRQYXJlbnQubnMpIHx8IHBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlKHRhZyk7XG4gICAgICAgICAgICAvLyBoYW5kbGUgSUUgc3ZnIGJ1Z1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAoaXNJRSAmJiBucyA9PT0gJ3N2ZycpIHtcbiAgICAgICAgICAgICAgICBhdHRycyA9IGd1YXJkSUVTVkdCdWcoYXR0cnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBjcmVhdGVBU1RFbGVtZW50KHRhZywgYXR0cnMsIGN1cnJlbnRQYXJlbnQpO1xuICAgICAgICAgICAgaWYgKG5zKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5ucyA9IG5zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0YXJ0ID0gc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZW5kID0gZW5kO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnJhd0F0dHJzTWFwID0gZWxlbWVudC5hdHRyc0xpc3QucmVkdWNlKGZ1bmN0aW9uIChjdW11bGF0ZWQsIGF0dHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1bXVsYXRlZFthdHRyLm5hbWVdID0gYXR0cjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdW11bGF0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXR0cnMuZm9yRWFjaChmdW5jdGlvbiAoYXR0cikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW52YWxpZEF0dHJpYnV0ZVJFLnRlc3QoYXR0ci5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2FybihcIkludmFsaWQgZHluYW1pYyBhcmd1bWVudCBleHByZXNzaW9uOiBhdHRyaWJ1dGUgbmFtZXMgY2Fubm90IGNvbnRhaW4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhY2VzLCBxdW90ZXMsIDwsID4sIC8gb3IgPS5cIiwgb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogYXR0ci5zdGFydCArIGF0dHIubmFtZS5pbmRleE9mKFwiW1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBhdHRyLnN0YXJ0ICsgYXR0ci5uYW1lLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0ZvcmJpZGRlblRhZyhlbGVtZW50KSAmJiAhaXNTZXJ2ZXJSZW5kZXJpbmcoKSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuZm9yYmlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgICAgIHdhcm4oJ1RlbXBsYXRlcyBzaG91bGQgb25seSBiZSByZXNwb25zaWJsZSBmb3IgbWFwcGluZyB0aGUgc3RhdGUgdG8gdGhlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1VJLiBBdm9pZCBwbGFjaW5nIHRhZ3Mgd2l0aCBzaWRlLWVmZmVjdHMgaW4geW91ciB0ZW1wbGF0ZXMsIHN1Y2ggYXMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIjxcIi5jb25jYXQodGFnLCBcIj5cIikgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJywgYXMgdGhleSB3aWxsIG5vdCBiZSBwYXJzZWQuJywgeyBzdGFydDogZWxlbWVudC5zdGFydCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFwcGx5IHByZS10cmFuc2Zvcm1zXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZVRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gcHJlVHJhbnNmb3Jtc1tpXShlbGVtZW50LCBvcHRpb25zKSB8fCBlbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpblZQcmUpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzUHJlKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnByZSkge1xuICAgICAgICAgICAgICAgICAgICBpblZQcmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwbGF0Zm9ybUlzUHJlVGFnKGVsZW1lbnQudGFnKSkge1xuICAgICAgICAgICAgICAgIGluUHJlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpblZQcmUpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzUmF3QXR0cnMoZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghZWxlbWVudC5wcm9jZXNzZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZXNcbiAgICAgICAgICAgICAgICBwcm9jZXNzRm9yKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NJZihlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzT25jZShlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcm9vdCkge1xuICAgICAgICAgICAgICAgIHJvb3QgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrUm9vdENvbnN0cmFpbnRzKHJvb3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdW5hcnkpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2xvc2VFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbmQ6IGZ1bmN0aW9uICh0YWcsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgI
13835HZhciBlbGVtZW50ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAvLyBwb3Agc3RhY2tcbiAgICAgICAgICAgIHN0YWNrLmxlbmd0aCAtPSAxO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuZW5kID0gZW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2xvc2VFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICB9LFxuICAgICAgICBjaGFyczogZnVuY3Rpb24gKHRleHQsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgIGlmICghY3VycmVudFBhcmVudCkge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0ID09PSB0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2Fybk9uY2UoJ0NvbXBvbmVudCB0ZW1wbGF0ZSByZXF1aXJlcyBhIHJvb3QgZWxlbWVudCwgcmF0aGVyIHRoYW4ganVzdCB0ZXh0LicsIHsgc3RhcnQ6IHN0YXJ0IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCh0ZXh0ID0gdGV4dC50cmltKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuT25jZShcInRleHQgXFxcIlwiLmNvbmNhdCh0ZXh0LCBcIlxcXCIgb3V0c2lkZSByb290IGVsZW1lbnQgd2lsbCBiZSBpZ25vcmVkLlwiKSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSUUgdGV4dGFyZWEgcGxhY2Vob2xkZXIgYnVnXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmIChpc0lFICYmXG4gICAgICAgICAgICAgICAgY3VycmVudFBhcmVudC50YWcgPT09ICd0ZXh0YXJlYScgJiZcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFyZW50LmF0dHJzTWFwLnBsYWNlaG9sZGVyID09PSB0ZXh0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gY3VycmVudFBhcmVudC5jaGlsZHJlbjtcbiAgICAgICAgICAgIGlmIChpblByZSB8fCB0ZXh0LnRyaW0oKSkge1xuICAgICAgICAgICAgICAgIHRleHQgPSBpc1RleHRUYWcoY3VycmVudFBhcmVudClcbiAgICAgICAgICAgICAgICAgICAgPyB0ZXh0XG4gICAgICAgICAgICAgICAgICAgIDogZGVjb2RlSFRNTENhY2hlZCh0ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIHdoaXRlc3BhY2Utb25seSBub2RlIHJpZ2h0IGFmdGVyIGFuIG9wZW5pbmcgdGFnXG4gICAgICAgICAgICAgICAgdGV4dCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAod2hpdGVzcGFjZU9wdGlvbikge1xuICAgICAgICAgICAgICAgIGlmICh3aGl0ZXNwYWNlT3B0aW9uID09PSAnY29uZGVuc2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGluIGNvbmRlbnNlIG1vZGUsIHJlbW92ZSB0aGUgd2hpdGVzcGFjZSBub2RlIGlmIGl0IGNvbnRhaW5zXG4gICAgICAgICAgICAgICAgICAgIC8vIGxpbmUgYnJlYWssIG90aGVyd2lzZSBjb25kZW5zZSB0byBhIHNpbmdsZSBzcGFjZVxuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gbGluZUJyZWFrUkUudGVzdCh0ZXh0KSA/ICcnIDogJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9ICcgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gcHJlc2VydmVXaGl0ZXNwYWNlID8gJyAnIDogJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgICAgIGlmICghaW5QcmUgJiYgd2hpdGVzcGFjZU9wdGlvbiA9PT0gJ2NvbmRlbnNlJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25kZW5zZSBjb25zZWN1dGl2ZSB3aGl0ZXNwYWNlcyBpbnRvIHNpbmdsZSBzcGFjZVxuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHdoaXRlc3BhY2VSRSwgJyAnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHJlcyA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICB2Y
13835XIgY2hpbGQgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgaWYgKCFpblZQcmUgJiYgdGV4dCAhPT0gJyAnICYmIChyZXMgPSBwYXJzZVRleHQodGV4dCwgZGVsaW1pdGVycykpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHJlcy5leHByZXNzaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zOiByZXMudG9rZW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0ZXh0ICE9PSAnICcgfHxcbiAgICAgICAgICAgICAgICAgICAgIWNoaWxkcmVuLmxlbmd0aCB8fFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50ZXh0ICE9PSAnICcpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmVuZCA9IGVuZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbW1lbnQ6IGZ1bmN0aW9uICh0ZXh0LCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICAvLyBhZGRpbmcgYW55dGhpbmcgYXMgYSBzaWJsaW5nIHRvIHRoZSByb290IG5vZGUgaXMgZm9yYmlkZGVuXG4gICAgICAgICAgICAvLyBjb21tZW50cyBzaG91bGQgc3RpbGwgYmUgYWxsb3dlZCwgYnV0IGlnbm9yZWRcbiAgICAgICAgICAgIGlmIChjdXJyZW50UGFyZW50KSB7XG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAzLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgICAgICAgICAgICBpc0NvbW1lbnQ6IHRydWVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuZW5kID0gZW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50UGFyZW50LmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJvb3Q7XG59XG5mdW5jdGlvbiBwcm9jZXNzUHJlKGVsKSB7XG4gICAgaWYgKGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LXByZScpICE9IG51bGwpIHtcbiAgICAgICAgZWwucHJlID0gdHJ1ZTtcbiAgICB9XG59XG5mdW5jdGlvbiBwcm9jZXNzUmF3QXR0cnMoZWwpIHtcbiAgICB2YXIgbGlzdCA9IGVsLmF0dHJzTGlzdDtcbiAgICB2YXIgbGVuID0gbGlzdC5sZW5ndGg7XG4gICAgaWYgKGxlbikge1xuICAgICAgICB2Y
13835XIgYXR0cnMgPSAoZWwuYXR0cnMgPSBuZXcgQXJyYXkobGVuKSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGF0dHJzW2ldID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGxpc3RbaV0ubmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkobGlzdFtpXS52YWx1ZSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobGlzdFtpXS5zdGFydCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYXR0cnNbaV0uc3RhcnQgPSBsaXN0W2ldLnN0YXJ0O1xuICAgICAgICAgICAgICAgIGF0dHJzW2ldLmVuZCA9IGxpc3RbaV0uZW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKCFlbC5wcmUpIHtcbiAgICAgICAgLy8gbm9uIHJvb3Qgbm9kZSBpbiBwcmUgYmxvY2tzIHdpdGggbm8gYXR0cmlidXRlc1xuICAgICAgICBlbC5wbGFpbiA9IHRydWU7XG4gICAgfVxufVxuZnVuY3Rpb24gcHJvY2Vzc0VsZW1lbnQoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHByb2Nlc3NLZXkoZWxlbWVudCk7XG4gICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhIHBsYWluIGVsZW1lbnQgYWZ0ZXJcbiAgICAvLyByZW1vdmluZyBzdHJ1Y3R1cmFsIGF0dHJpYnV0ZXNcbiAgICBlbGVtZW50LnBsYWluID1cbiAgICAgICAgIWVsZW1lbnQua2V5ICYmICFlbGVtZW50LnNjb3BlZFNsb3RzICYmICFlbGVtZW50LmF0dHJzTGlzdC5sZW5ndGg7XG4gICAgcHJvY2Vzc1JlZihlbGVtZW50KTtcbiAgICBwcm9jZXNzU2xvdENvbnRlbnQoZWxlbWVudCk7XG4gICAgcHJvY2Vzc1Nsb3RPdXRsZXQoZWxlbWVudCk7XG4gICAgcHJvY2Vzc0NvbXBvbmVudChlbGVtZW50KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZWxlbWVudCA9IHRyYW5zZm9ybXNbaV0oZWxlbWVudCwgb3B0aW9ucykgfHwgZWxlbWVudDtcbiAgICB9XG4gICAgcHJvY2Vzc0F0dHJzKGVsZW1lbnQpO1xuICAgIHJldHVybiBlbGVtZW50O1xufVxuZnVuY3Rpb24gcHJvY2Vzc0tleShlbCkge1xuICAgIHZhciBleHAgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2tleScpO1xuICAgIGlmIChleHApIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgICAgICAgICB3YXJuKFwiPHRlbXBsYXRlPiBjYW5ub3QgYmUga2V5ZWQuIFBsYWNlIHRoZSBrZXkgb24gcmVhbCBlbGVtZW50cyBpbnN0ZWFkLlwiLCBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ2tleScpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbC5mb3IpIHtcbiAgICAgICAgICAgICAgICB2Y
13835XIgaXRlcmF0b3IgPSBlbC5pdGVyYXRvcjIgfHwgZWwuaXRlcmF0b3IxO1xuICAgICAgICAgICAgICAgIHZhciBwYXJlbnRfMSA9IGVsLnBhcmVudDtcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IgPT09IGV4cCAmJlxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRfMSAmJlxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRfMS50YWcgPT09ICd0cmFuc2l0aW9uLWdyb3VwJykge1xuICAgICAgICAgICAgICAgICAgICB3YXJuKFwiRG8gbm90IHVzZSB2LWZvciBpbmRleCBhcyBrZXkgb24gPHRyYW5zaXRpb24tZ3JvdXA+IGNoaWxkcmVuLCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRoaXMgaXMgdGhlIHNhbWUgYXMgbm90IHVzaW5nIGtleXMuXCIsIGdldFJhd0JpbmRpbmdBdHRyKGVsLCAna2V5JyksIHRydWUgLyogdGlwICovKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWwua2V5ID0gZXhwO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NSZWYoZWwpIHtcbiAgICB2YXIgcmVmID0gZ2V0QmluZGluZ0F0dHIoZWwsICdyZWYnKTtcbiAgICBpZiAocmVmKSB7XG4gICAgICAgIGVsLnJlZiA9IHJlZjtcbiAgICAgICAgZWwucmVmSW5Gb3IgPSBjaGVja0luRm9yKGVsKTtcbiAgICB9XG59XG5mdW5jdGlvbiBwcm9jZXNzRm9yKGVsKSB7XG4gICAgdmFyIGV4cDtcbiAgICBpZiAoKGV4cCA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWZvcicpKSkge1xuICAgICAgICB2Y
13835XIgcmVzID0gcGFyc2VGb3IoZXhwKTtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgZXh0ZW5kKGVsLCByZXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm4oXCJJbnZhbGlkIHYtZm9yIGV4cHJlc3Npb246IFwiLmNvbmNhdChleHApLCBlbC5yYXdBdHRyc01hcFsndi1mb3InXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZUZvcihleHApIHtcbiAgICB2YXIgaW5NYXRjaCA9IGV4cC5tYXRjaChmb3JBbGlhc1JFKTtcbiAgICBpZiAoIWluTWF0Y2gpXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgcmVzID0ge307XG4gICAgcmVzLmZvciA9IGluTWF0Y2hbMl0udHJpbSgpO1xuICAgIHZhciBhbGlhcyA9IGluTWF0Y2hbMV0udHJpbSgpLnJlcGxhY2Uoc3RyaXBQYXJlbnNSRSwgJycpO1xuICAgIHZhciBpdGVyYXRvck1hdGNoID0gYWxpYXMubWF0Y2goZm9ySXRlcmF0b3JSRSk7XG4gICAgaWYgKGl0ZXJhdG9yTWF0Y2gpIHtcbiAgICAgICAgcmVzLmFsaWFzID0gYWxpYXMucmVwbGFjZShmb3JJdGVyYXRvclJFLCAnJykudHJpbSgpO1xuICAgICAgICByZXMuaXRlcmF0b3IxID0gaXRlcmF0b3JNYXRjaFsxXS50cmltKCk7XG4gICAgICAgIGlmIChpdGVyYXRvck1hdGNoWzJdKSB7XG4gICAgICAgICAgICByZXMuaXRlcmF0b3IyID0gaXRlcmF0b3JNYXRjaFsyXS50cmltKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlcy5hbGlhcyA9IGFsaWFzO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gcHJvY2Vzc0lmKGVsKSB7XG4gICAgdmFyIGV4cCA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWlmJyk7XG4gICAgaWYgKGV4cCkge1xuICAgICAgICBlbC5pZiA9IGV4cDtcbiAgICAgICAgYWRkSWZDb25kaXRpb24oZWwsIHtcbiAgICAgICAgICAgIGV4cDogZXhwLFxuICAgICAgICAgICAgYmxvY2s6IGVsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWVsc2UnKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBlbC5lbHNlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2Y
13835XIgZWxzZWlmID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtZWxzZS1pZicpO1xuICAgICAgICBpZiAoZWxzZWlmKSB7XG4gICAgICAgICAgICBlbC5lbHNlaWYgPSBlbHNlaWY7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBwcm9jZXNzSWZDb25kaXRpb25zKGVsLCBwYXJlbnQpIHtcbiAgICB2YXIgcHJldiA9IGZpbmRQcmV2RWxlbWVudChwYXJlbnQuY2hpbGRyZW4pO1xuICAgIGlmIChwcmV2ICYmIHByZXYuaWYpIHtcbiAgICAgICAgYWRkSWZDb25kaXRpb24ocHJldiwge1xuICAgICAgICAgICAgZXhwOiBlbC5lbHNlaWYsXG4gICAgICAgICAgICBibG9jazogZWxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybihcInYtXCIuY29uY2F0KGVsLmVsc2VpZiA/ICdlbHNlLWlmPVwiJyArIGVsLmVsc2VpZiArICdcIicgOiAnZWxzZScsIFwiIFwiKSArXG4gICAgICAgICAgICBcInVzZWQgb24gZWxlbWVudCA8XCIuY29uY2F0KGVsLnRhZywgXCI+IHdpdGhvdXQgY29ycmVzcG9uZGluZyB2LWlmLlwiKSwgZWwucmF3QXR0cnNNYXBbZWwuZWxzZWlmID8gJ3YtZWxzZS1pZicgOiAndi1lbHNlJ10pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGZpbmRQcmV2RWxlbWVudChjaGlsZHJlbikge1xuICAgIHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgaWYgKGNoaWxkcmVuW2ldLnR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbltpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNoaWxkcmVuW2ldLnRleHQgIT09ICcgJykge1xuICAgICAgICAgICAgICAgIHdhcm4oXCJ0ZXh0IFxcXCJcIi5jb25jYXQoY2hpbGRyZW5baV0udGV4dC50cmltKCksIFwiXFxcIiBiZXR3ZWVuIHYtaWYgYW5kIHYtZWxzZSgtaWYpIFwiKSArXG4gICAgICAgICAgICAgICAgICAgIFwid2lsbCBiZSBpZ25vcmVkLlwiLCBjaGlsZHJlbltpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGlsZHJlbi5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZElmQ29uZGl0aW9uKGVsLCBjb25kaXRpb24pIHtcbiAgICBpZiAoIWVsLmlmQ29uZGl0aW9ucykge1xuICAgICAgICBlbC5pZkNvbmRpdGlvbnMgPSBbXTtcbiAgICB9XG4gICAgZWwuaWZDb25kaXRpb25zLnB1c2goY29uZGl0aW9uKTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NPbmNlKGVsKSB7XG4gICAgdmFyIG9uY2UgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1vbmNlJyk
138357XG4gICAgaWYgKG9uY2UgIT0gbnVsbCkge1xuICAgICAgICBlbC5vbmNlID0gdHJ1ZTtcbiAgICB9XG59XG4vLyBoYW5kbGUgY29udGVudCBiZWluZyBwYXNzZWQgdG8gYSBjb21wb25lbnQgYXMgc2xvdCxcbi8vIGUuZy4gPHRlbXBsYXRlIHNsb3Q9XCJ4eHhcIj4sIDxkaXYgc2xvdC1zY29wZT1cInh4eFwiPlxuZnVuY3Rpb24gcHJvY2Vzc1Nsb3RDb250ZW50KGVsKSB7XG4gICAgdmFyIHNsb3RTY29wZTtcbiAgICBpZiAoZWwudGFnID09PSAndGVtcGxhdGUnKSB7XG4gICAgICAgIHNsb3RTY29wZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzY29wZScpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2xvdFNjb3BlKSB7XG4gICAgICAgICAgICB3YXJuKFwidGhlIFxcXCJzY29wZVxcXCIgYXR0cmlidXRlIGZvciBzY29wZWQgc2xvdHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgYW5kIFwiICtcbiAgICAgICAgICAgICAgICBcInJlcGxhY2VkIGJ5IFxcXCJzbG90LXNjb3BlXFxcIiBzaW5jZSAyLjUuIFRoZSBuZXcgXFxcInNsb3Qtc2NvcGVcXFwiIGF0dHJpYnV0ZSBcIiArXG4gICAgICAgICAgICAgICAgXCJjYW4gYWxzbyBiZSB1c2VkIG9uIHBsYWluIGVsZW1lbnRzIGluIGFkZGl0aW9uIHRvIDx0ZW1wbGF0ZT4gdG8gXCIgK1xuICAgICAgICAgICAgICAgIFwiZGVub3RlIHNjb3BlZCBzbG90cy5cIiwgZWwucmF3QXR0cnNNYXBbJ3Njb3BlJ10sIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsLnNsb3RTY29wZSA9IHNsb3RTY29wZSB8fCBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnc2xvdC1zY29wZScpO1xuICAgIH1cbiAgICBlbHNlIGlmICgoc2xvdFNjb3BlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3Nsb3Qtc2NvcGUnKSkpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGVsLmF0dHJzTWFwWyd2LWZvciddKSB7XG4gICAgICAgICAgICB3YXJuKFwiQW1iaWd1b3VzIGNvbWJpbmVkIHVzYWdlIG9mIHNsb3Qtc2NvcGUgYW5kIHYtZm9yIG9uIDxcIi5jb25jYXQoZWwudGFnLCBcIj4gXCIpICtcbiAgICAgICAgICAgICAgICBcIih2LWZvciB0YWtlcyBoaWdoZXIgcHJpb3JpdHkpLiBVc2UgYSB3cmFwcGVyIDx0ZW1wbGF0ZT4gZm9yIHRoZSBcIiArXG4gICAgICAgICAgICAgICAgXCJzY29wZWQgc2xvdCB0byBtYWtlIGl0IGNsZWFyZXIuXCIsIGVsLnJhd0F0dHJzTWFwWydzbG90LXNjb3BlJ10sIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsLnNsb3RTY29wZSA9IHNsb3RTY29wZTtcbiAgICB9XG4gICAgLy8gc2xvdD1cInh4eFwiXG4gICAgdmFyIHNsb3RUYXJnZXQgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3Nsb3QnKTtcbiAgICBpZiAoc2xvdFRhcmdldCkge1xuICAgICAgICBlbC5zbG90VGFyZ2V0ID0gc2xvdFRhcmdldCA9PT0gJ1wiXCInID8gJ1wiZGVmYXVsdFwiJyA6IHNsb3RUYXJnZXQ7XG4gICAgICAgIGVsLnNsb3RUYXJnZXREeW5hbWljID0gISEoZWwuYXR0cnNNYXBbJzpzbG90J10gfHwgZWwuYXR0cnNNYXBbJ3YtYmluZDpzbG90J10pO1xuICAgICAgICAvLyBwcmVzZXJ2ZSBzbG90IGFzIGFuIGF0dHJpYnV0ZSBmb3IgbmF0aXZlIHNoYWRvdyBET00gY29tcGF0XG4gICAgICAgIC8vIG9ubHkgZm9yIG5vbi1zY29wZWQgc2xvdHMuXG4gICAgICAgIGlmIChlbC50YWcgIT09ICd0ZW1wbGF0ZScgJiYgIWVsLnNsb3RTY29wZSkge1xuICAgICAgICAgICAgYWRkQXR0cihlbCwgJ3Nsb3QnLCBzbG90VGFyZ2V0LCBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ3Nsb3QnKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gMi42IHYtc2xvdCBzeW50YXhcbiAgICB7XG4gICAgICAgIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgICAgIC8vIHYtc2xvdCBvbiA8dGVtcGxhdGU+XG4gICAgICAgICAgICB2Y
13835XIgc2xvdEJpbmRpbmcgPSBnZXRBbmRSZW1vdmVBdHRyQnlSZWdleChlbCwgc2xvdFJFKTtcbiAgICAgICAgICAgIGlmIChzbG90QmluZGluZykge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC5zbG90VGFyZ2V0IHx8IGVsLnNsb3RTY29wZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2FybihcIlVuZXhwZWN0ZWQgbWl4ZWQgdXNhZ2Ugb2YgZGlmZmVyZW50IHNsb3Qgc3ludGF4ZXMuXCIsIGVsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZWwucGFyZW50ICYmICFtYXliZUNvbXBvbmVudChlbC5wYXJlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuKFwiPHRlbXBsYXRlIHYtc2xvdD4gY2FuIG9ubHkgYXBwZWFyIGF0IHRoZSByb290IGxldmVsIGluc2lkZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aGUgcmVjZWl2aW5nIGNvbXBvbmVudFwiLCBlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIF9hID0gZ2V0U2xvdE5hbWUoc2xvdEJpbmRpbmcpLCBuYW1lXzIgPSBfYS5uYW1lLCBkeW5hbWljID0gX2EuZHluYW1pYztcbiAgICAgICAgICAgICAgICBlbC5zbG90VGFyZ2V0ID0gbmFtZV8yO1xuICAgICAgICAgICAgICAgIGVsLnNsb3RUYXJnZXREeW5hbWljID0gZHluYW1pYztcbiAgICAgICAgICAgICAgICBlbC5zbG90U2NvcGUgPSBzbG90QmluZGluZy52YWx1ZSB8fCBlbXB0eVNsb3RTY29wZVRva2VuOyAvLyBmb3JjZSBpdCBpbnRvIGEgc2NvcGVkIHNsb3QgZm9yIHBlcmZcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHYtc2xvdCBvbiBjb21wb25lbnQsIGRlbm90ZXMgZGVmYXVsdCBzbG90XG4gICAgICAgICAgICB2Y
13835XIgc2xvdEJpbmRpbmcgPSBnZXRBbmRSZW1vdmVBdHRyQnlSZWdleChlbCwgc2xvdFJFKTtcbiAgICAgICAgICAgIGlmIChzbG90QmluZGluZykge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbWF5YmVDb21wb25lbnQoZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuKFwidi1zbG90IGNhbiBvbmx5IGJlIHVzZWQgb24gY29tcG9uZW50cyBvciA8dGVtcGxhdGU+LlwiLCBzbG90QmluZGluZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnNsb3RTY29wZSB8fCBlbC5zbG90VGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuKFwiVW5leHBlY3RlZCBtaXhlZCB1c2FnZSBvZiBkaWZmZXJlbnQgc2xvdCBzeW50YXhlcy5cIiwgZWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC5zY29wZWRTbG90cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2FybihcIlRvIGF2b2lkIHNjb3BlIGFtYmlndWl0eSwgdGhlIGRlZmF1bHQgc2xvdCBzaG91bGQgYWxzbyB1c2UgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPHRlbXBsYXRlPiBzeW50YXggd2hlbiB0aGVyZSBhcmUgb3RoZXIgbmFtZWQgc2xvdHMuXCIsIHNsb3RCaW5kaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBhZGQgdGhlIGNvbXBvbmVudCdzIGNoaWxkcmVuIHRvIGl0cyBkZWZhdWx0IHNsb3RcbiAgICAgICAgICAgICAgICB2Y
13835XIgc2xvdHMgPSBlbC5zY29wZWRTbG90cyB8fCAoZWwuc2NvcGVkU2xvdHMgPSB7fSk7XG4gICAgICAgICAgICAgICAgdmFyIF9iID0gZ2V0U2xvdE5hbWUoc2xvdEJpbmRpbmcpLCBuYW1lXzMgPSBfYi5uYW1lLCBkeW5hbWljID0gX2IuZHluYW1pYztcbiAgICAgICAgICAgICAgICB2YXIgc2xvdENvbnRhaW5lcl8xID0gKHNsb3RzW25hbWVfM10gPSBjcmVhdGVBU1RFbGVtZW50KCd0ZW1wbGF0ZScsIFtdLCBlbCkpO1xuICAgICAgICAgICAgICAgIHNsb3RDb250YWluZXJfMS5zbG90VGFyZ2V0ID0gbmFtZV8zO1xuICAgICAgICAgICAgICAgIHNsb3RDb250YWluZXJfMS5zbG90VGFyZ2V0RHluYW1pYyA9IGR5bmFtaWM7XG4gICAgICAgICAgICAgICAgc2xvdENvbnRhaW5lcl8xLmNoaWxkcmVuID0gZWwuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYy5zbG90U2NvcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMucGFyZW50ID0gc2xvdENvbnRhaW5lcl8xO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzbG90Q29udGFpbmVyXzEuc2xvdFNjb3BlID0gc2xvdEJpbmRpbmcudmFsdWUgfHwgZW1wdHlTbG90U2NvcGVUb2tlbjtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgY2hpbGRyZW4gYXMgdGhleSBhcmUgcmV0dXJuZWQgZnJvbSBzY29wZWRTbG90cyBub3dcbiAgICAgICAgICAgICAgICBlbC5jaGlsZHJlbiA9IFtdO1xuICAgICAgICAgICAgICAgIC8vIG1hcmsgZWwgbm9uLXBsYWluIHNvIGRhdGEgZ2V0cyBnZW5lcmF0ZWRcbiAgICAgICAgICAgICAgICBlbC5wbGFpbiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0U2xvdE5hbWUoYmluZGluZykge1xuICAgIHZhciBuYW1lID0gYmluZGluZy5uYW1lLnJlcGxhY2Uoc2xvdFJFLCAnJyk7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIGlmIChiaW5kaW5nLm5hbWVbMF0gIT09ICcjJykge1xuICAgICAgICAgICAgbmFtZSA9ICdkZWZhdWx0JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB3YXJuKFwidi1zbG90IHNob3J0aGFuZCBzeW50YXggcmVxdWlyZXMgYSBzbG90IG5hbWUuXCIsIGJpbmRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkeW5hbWljQXJnUkUudGVzdChuYW1lKVxuICAgICAgICA/IC8vIGR5bmFtaWMgW25hbWVdXG4gICAgICAgICAgICB7IG5hbWU6IG5hbWUuc2xpY2UoMSwgLTEpLCBkeW5hbWljOiB0cnVlIH1cbiAgICAgICAgOiAvLyBzdGF0aWMgbmFtZVxuICAgICAgICAgICAgeyBuYW1lOiBcIlxcXCJcIi5jb25jYXQobmFtZSwgXCJcXFwiXCIpLCBkeW5hbWljOiBmYWxzZSB9O1xufVxuLy8gaGFuZGxlIDxzbG90Lz4gb3V0bGV0c1xuZnVuY3Rpb24gcHJvY2Vzc1Nsb3RPdXRsZXQoZWwpIHtcbiAgICBpZiAoZWwudGFnID09PSAnc2xvdCcpIHtcbiAgICAgICAgZWwuc2xvdE5hbWUgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ25hbWUnKTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZWwua2V5KSB7XG4gICAgICAgICAgICB3YXJuKFwiYGtleWAgZG9lcyBub3Qgd29yayBvbiA8c2xvdD4gYmVjYXVzZSBzbG90cyBhcmUgYWJzdHJhY3Qgb3V0bGV0cyBcIiArXG4gICAgICAgICAgICAgICAgXCJhbmQgY2FuIHBvc3NpYmx5IGV4cGFuZCBpbnRvIG11bHRpcGxlIGVsZW1lbnRzLiBcIiArXG4gICAgICAgICAgICAgICAgXCJVc2UgdGhlIGtleSBvbiBhIHdyYXBwaW5nIGVsZW1lbnQgaW5zdGVhZC5cIiwgZ2V0UmF3QmluZGluZ0F0dHIoZWwsICdrZXknKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBwcm9jZXNzQ29tcG9uZW50KGVsKSB7XG4gICAgdmFyIGJpbmRpbmc7XG4gICAgaWYgKChiaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdpcycpKSkge1xuICAgICAgICBlbC5jb21wb25lbnQgPSBiaW5kaW5nO1xuICAgIH1cbiAgICBpZiAoZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ2lubGluZS10ZW1wbGF0ZScpICE9IG51bGwpIHtcbiAgICAgICAgZWwuaW5saW5lVGVtcGxhdGUgPSB0cnVlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NBdHRycyhlbCkge1xuICAgIHZhciBsaXN0ID0gZWwuYXR0cnNMaXN0O1xuICAgIHZhciBpLCBsLCBuYW1lLCByYXdOYW1lLCB2YWx1ZSwgbW9kaWZpZXJzLCBzeW5jR2VuLCBpc0R5bmFtaWM7XG4gICAgZm9yIChpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIG5hbWUgPSByYXdOYW1lID0gbGlzdFtpXS5uYW1lO1xuICAgICAgICB2YWx1ZSA9IGxpc3RbaV0udmFsdWU7XG4gICAgICAgIGlmIChkaXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICAvLyBtYXJrIGVsZW1lbnQgYXMgZHluYW1pY1xuICAgICAgICAgICAgZWwuaGFzQmluZGluZ3MgPSB0cnVlO1xuICAgICAgICAgICAgLy8gbW9kaWZpZXJzXG4gICAgICAgICAgICBtb2RpZmllcnMgPSBwYXJzZU1vZGlmaWVycyhuYW1lLnJlcGxhY2UoZGlyUkUsICcnKSk7XG4gICAgICAgICAgICAvLyBzdXBwb3J0IC5mb28gc2hvcnRoYW5kIHN5bnRheCBmb3IgdGhlIC5wcm9wIG1vZGlmaWVyXG4gICAgICAgICAgICBpZiAobW9kaWZpZXJzKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShtb2RpZmllclJFLCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYmluZFJFLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAvLyB2LWJpbmRcbiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKGJpbmRSRSwgJycpO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VGaWx0ZXJzKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpc0R5bmFtaWMgPSBkeW5hbWljQXJnUkUudGVzdChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNEeW5hbWljKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdmFsdWUud
13835HJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB3YXJuKFwiVGhlIHZhbHVlIGZvciBhIHYtYmluZCBleHByZXNzaW9uIGNhbm5vdCBiZSBlbXB0eS4gRm91bmQgaW4gXFxcInYtYmluZDpcIi5jb25jYXQobmFtZSwgXCJcXFwiXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVycykge1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJzLnByb3AgJiYgIWlzRHluYW1pYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGNhbWVsaXplKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdpbm5lckh0bWwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAnaW5uZXJIVE1MJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJzLmNhbWVsICYmICFpc0R5bmFtaWMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBjYW1lbGl6ZShuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJzLnN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNHZW4gPSBnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgXCIkZXZlbnRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRHluYW1pYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEhhbmRsZXIoZWwsIFwidXBkYXRlOlwiLmNvbmNhdChjYW1lbGl6ZShuYW1lKSksIHN5bmNHZW4sIG51bGwsIGZhbHNlLCB3YXJuLCBsaXN0W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaHlwaGVuYXRlKG5hbWUpICE9PSBjYW1lbGl6ZShuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRIYW5kbGVyKGVsLCBcInVwZGF0ZTpcIi5jb25jYXQoaHlwaGVuYXRlKG5hbWUpKSwgc3luY0dlbiwgbnVsbCwgZmFsc2UsIHdhcm4sIGxpc3RbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZXIgdy8gZHluYW1pYyBldmVudCBuYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSGFuZGxlcihlbCwgXCJcXFwidXBkYXRlOlxcXCIrKFwiLmNvbmNhdChuYW1lLCBcIilcIiksIHN5bmNHZW4sIG51bGwsIGZhbHNlLCB3YXJuLCBsaXN0W2ldLCB0cnVlIC8vIGR5bmFtaWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgobW9kaWZpZXJzICYmIG1vZGlmaWVycy5wcm9wKSB8fFxuICAgICAgICAgICAgICAgICAgICAoIWVsLmNvbXBvbmVudCAmJiBwbGF0Zm9ybU11c3RVc2VQcm9wKGVsLnRhZywgZWwuYXR0cnNNYXAudHlwZSwgbmFtZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFByb3AoZWwsIG5hbWUsIHZhbHVlLCBsaXN0W2ldLCBpc0R5bmFtaWMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkQXR0cihlbCwgbmFtZSwgdmFsdWUsIGxpc3RbaV0sIGlzRHluYW1pYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAob25SRS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgLy8gdi1vblxuICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2Uob25SRSwgJycpO1xuICAgICAgICAgICAgICAgIGlzRHluYW1pYyA9IGR5bmFtaWNBcmdSRS50ZXN0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChpc0R5bmFtaWMpIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhZGRIYW5kbGVyKGVsLCBuYW1lLCB2YWx1ZSwgbW9kaWZpZXJzLCBmYWxzZSwgd2FybiwgbGlzdFtpXSwgaXNEeW5hbWljKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIG5vcm1hbCBkaXJlY3RpdmVzXG4gICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShkaXJSRSwgJycpO1xuICAgICAgICAgICAgICAgIC8vIHBhcnNlIGFyZ1xuICAgICAgICAgICAgICAgIHZhciBhcmdNYXRjaCA9IG5hbWUubWF0Y2goYXJnUkUpO1xuICAgICAgICAgICAgICAgIHZhciBhcmcgPSBhcmdNYXRjaCAmJiBhcmdNYXRjaFsxXTtcbiAgICAgICAgICAgICAgICBpc0R5bmFtaWMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDAsIC0oYXJnLmxlbmd0aCArIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGR5bmFtaWNBcmdSRS50ZXN0KGFyZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0R5bmFtaWMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZERpcmVjdGl2ZShlbCwgbmFtZSwgcmF3TmFtZSwgdmFsdWUsIGFyZywgaXNEeW5hbWljLCBtb2RpZmllcnMsIGxpc3RbaV0pO1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG5hbWUgPT09ICdtb2RlbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tGb3JBbGlhc01vZGVsKGVsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gbGl0ZXJhbCBhdHRyaWJ1dGVcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcyA9IHBhcnNlVGV4dCh2YWx1ZSwgZGVsaW1pdGVycyk7XG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICB3YXJuKFwiXCIuY29uY2F0KG5hbWUsIFwiPVxcXCJcIikuY29uY2F0KHZhbHVlLCBcIlxcXCI6IFwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnSW50ZXJwb2xhdGlvbiBpbnNpZGUgYXR0cmlidXRlcyBoYXMgYmVlbiByZW1vdmVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdVc2Ugdi1iaW5kIG9yIHRoZSBjb2xvbiBzaG9ydGhhbmQgaW5zdGVhZC4gRm9yIGV4YW1wbGUsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2luc3RlYWQgb2YgPGRpdiBpZD1cInt7IHZhbCB9fVwiPiwgdXNlIDxkaXYgOmlkPVwidmFsXCI+LicsIGxpc3RbaV0pO1xuICAgICAgICAgICAgICAgI
13835H1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkZEF0dHIoZWwsIG5hbWUsIEpTT04uc3RyaW5naWZ5KHZhbHVlKSwgbGlzdFtpXSk7XG4gICAgICAgICAgICAvLyAjNjg4NyBmaXJlZm94IGRvZXNuJ3QgdXBkYXRlIG11dGVkIHN0YXRlIGlmIHNldCB2aWEgYXR0cmlidXRlXG4gICAgICAgICAgICAvLyBldmVuIGltbWVkaWF0ZWx5IGFmdGVyIGVsZW1lbnQgY3JlYXRpb25cbiAgICAgICAgICAgIGlmICghZWwuY29tcG9uZW50ICYmXG4gICAgICAgICAgICAgICAgbmFtZSA9PT0gJ211dGVkJyAmJlxuICAgICAgICAgICAgICAgIHBsYXRmb3JtTXVzdFVzZVByb3AoZWwudGFnLCBlbC5hdHRyc01hcC50eXBlLCBuYW1lKSkge1xuICAgICAgICAgICAgICAgIGFkZFByb3AoZWwsIG5hbWUsICd0cnVlJywgbGlzdFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBjaGVja0luRm9yKGVsKSB7XG4gICAgdmFyIHBhcmVudCA9IGVsO1xuICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgaWYgKHBhcmVudC5mb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gcGFyc2VNb2RpZmllcnMobmFtZSkge1xuICAgIHZhciBtYXRjaCA9IG5hbWUubWF0Y2gobW9kaWZpZXJSRSk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIHZhciByZXRfMSA9IHt9O1xuICAgICAgICBtYXRjaC5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgICByZXRfMVttLnNsaWNlKDEpXSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmV0XzE7XG4gICAgfVxufVxuZnVuY3Rpb24gbWFrZUF0dHJzTWFwKGF0dHJzKSB7XG4gICAgdmFyIG1hcCA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXR0cnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG1hcFthdHRyc1tpXS5uYW1lXSAmJiAhaXNJRSAmJiAhaXNFZGdlKSB7XG4gICAgICAgICAgICB3YXJuKCdkdXBsaWNhdGUgYXR0cmlidXRlOiAnICsgYXR0cnNbaV0ubmFtZSwgYXR0cnNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIG1hcFthdHRyc1tpXS5uYW1lXSA9IGF0dHJzW2ldLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xufVxuLy8gZm9yIHNjcmlwdCAoZS5nLiB0eXBlPVwieC90ZW1wbGF0ZVwiKSBvciBzdHlsZSwgZG8gbm90IGRlY29kZSBjb250ZW50XG5mdW5jdGlvbiBpc1RleHRUYWcoZWwpIHtcbiAgICByZXR1cm4gZWwudGFnID09PSAnc2NyaXB0JyB8fCBlbC50YWcgPT09ICdzdHlsZSc7XG59XG5mdW5jdGlvbiBpc0ZvcmJpZGRlblRhZyhlbCkge1xuICAgIHJldHVybiAoZWwudGFnID09PSAnc3R5bGUnIHx8XG4gICAgICAgIChlbC50YWcgPT09ICdzY3JpcHQnICYmXG4gICAgICAgICAgICAoIWVsLmF0dHJzTWFwLnR5cGUgfHwgZWwuYXR0cnNNYXAudHlwZSA9PT0gJ3RleHQvamF2YXNjcmlwdCcpKSk7XG59XG52YXIgaWVOU0J1ZyA9IC9eeG1sbnM6TlNcXGQrLztcbnZhciBpZU5TUHJlZml4ID0gL15OU1xcZCs6Lztcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBndWFyZElFU1ZHQnVnKGF0dHJzKSB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGF0dHIgPSBhdHRyc1tpXTtcbiAgICAgICAgaWYgKCFpZU5TQnVnLnRlc3QoYXR0ci5uYW1lKSkge1xuICAgICAgICAgICAgYXR0ci5uYW1lID0gYXR0ci5uYW1lLnJlcGxhY2UoaWVOU1ByZWZpeCwgJycpO1xuICAgICAgICAgICAgcmVzLnB1c2goYXR0cik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIGNoZWNrRm9yQWxpYXNNb2RlbChlbCwgdmFsdWUpIHtcbiAgICB2YXIgX2VsID0gZWw7XG4gICAgd2hpbGUgKF9lbCkge1xuICAgICAgICBpZiAoX2VsLmZvciAmJiBfZWwuYWxpYXMgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICB3YXJuKFwiPFwiLmNvbmNhdChlbC50YWcsIFwiIHYtbW9kZWw9XFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIj46IFwiKSArXG4gICAgICAgICAgICAgICAgXCJZb3UgYXJlIGJpbmRpbmcgdi1tb2RlbCBkaXJlY3RseSB0byBhIHYtZm9yIGl0ZXJhdGlvbiBhbGlhcy4gXCIgK1xuICAgICAgICAgICAgICAgIFwiVGhpcyB3aWxsIG5vdCBiZSBhYmxlIHRvIG1vZGlmeSB0aGUgdi1mb3Igc291cmNlIGFycmF5IGJlY2F1c2UgXCIgK1xuICAgICAgICAgICAgICAgIFwid3JpdGluZyB0byB0aGUgYWxpYXMgaXMgbGlrZSBtb2RpZnlpbmcgYSBmdW5jdGlvbiBsb2NhbCB2YXJpYWJsZS4gXCIgK1xuICAgICAgICAgICAgICAgIFwiQ29uc2lkZXIgdXNpbmcgYW4gYXJyYXkgb2Ygb2JqZWN0cyBhbmQgdXNlIHYtbW9kZWwgb24gYW4gb2JqZWN0IHByb3BlcnR5IGluc3RlYWQuXCIsIGVsLnJhd0F0dHJzTWFwWyd2LW1vZGVsJ10pO1xuICAgICAgICB9XG4gICAgICAgIF9lbCA9IF9lbC5wYXJlbnQ7XG4gICAgfVxufVxuXG4vKipcbiAqIEV4cGFuZCBpbnB1dFt2LW1vZGVsXSB3aXRoIGR5bmFtaWMgdHlwZSBiaW5kaW5ncyBpbnRvIHYtaWYtZWxzZSBjaGFpbnNcbiAqIFR1cm4gdGhpczpcbiAqICAgPGlucHV0IHYtbW9kZWw9XCJkYXRhW3R5cGVdXCIgOnR5cGU9XCJ0eXBlXCI+XG4gKiBpbnRvIHRoaXM6XG4gKiAgIDxpbnB1dCB2LWlmPVwidHlwZSA9PT0gJ2NoZWNrYm94J1wiIHR5cGU9XCJjaGVja2JveFwiIHYtbW9kZWw9XCJkYXRhW3R5cGVdXCI+XG4gKiAgIDxpbnB1dCB2LWVsc2UtaWY9XCJ0eXBlID09PSAncmFkaW8nXCIgdHlwZT1cInJhZGlvXCIgdi1tb2RlbD1cImRhdGFbdHlwZV1cIj5cbiAqICAgPGlucHV0IHYtZWxzZSA6dHlwZT1cInR5cGVcIiB2LW1vZGVsPVwiZGF0YVt0eXBlXVwiPlxuICovXG5mdW5jdGlvbiBwcmVUcmFuc2Zvcm1Ob2RlKGVsLCBvcHRpb25zKSB7XG4gICAgaWYgKGVsLnRhZyA9PT0gJ2lucHV0Jykge1xuICAgICAgICB2Y
13835XIgbWFwID0gZWwuYXR0cnNNYXA7XG4gICAgICAgIGlmICghbWFwWyd2LW1vZGVsJ10pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdHlwZUJpbmRpbmcgPSB2b2lkIDA7XG4gICAgICAgIGlmIChtYXBbJzp0eXBlJ10gfHwgbWFwWyd2LWJpbmQ6dHlwZSddKSB7XG4gICAgICAgICAgICB0eXBlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAndHlwZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWFwLnR5cGUgJiYgIXR5cGVCaW5kaW5nICYmIG1hcFsndi1iaW5kJ10pIHtcbiAgICAgICAgICAgIHR5cGVCaW5kaW5nID0gXCIoXCIuY29uY2F0KG1hcFsndi1iaW5kJ10sIFwiKS50eXBlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlQmluZGluZykge1xuICAgICAgICAgICAgdmFyIGlmQ29uZGl0aW9uID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtaWYnLCB0cnVlKTtcbiAgICAgICAgICAgIHZhciBpZkNvbmRpdGlvbkV4dHJhID0gaWZDb25kaXRpb24gPyBcIiYmKFwiLmNvbmNhdChpZkNvbmRpdGlvbiwgXCIpXCIpIDogXCJcIjtcbiAgICAgICAgICAgIHZhciBoYXNFbHNlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtZWxzZScsIHRydWUpICE9IG51bGw7XG4gICAgICAgICAgICB2YXIgZWxzZUlmQ29uZGl0aW9uID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtZWxzZS1pZicsIHRydWUpO1xuICAgICAgICAgICAgLy8gMS4gY2hlY2tib3hcbiAgICAgICAgICAgIHZhciBicmFuY2gwID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcbiAgICAgICAgICAgIC8vIHByb2Nlc3MgZm9yIG9uIHRoZSBtYWluIG5vZGVcbiAgICAgICAgICAgIHByb2Nlc3NGb3IoYnJhbmNoMCk7XG4gICAgICAgICAgICBhZGRSYXdBdHRyKGJyYW5jaDAsICd0eXBlJywgJ2NoZWNrYm94Jyk7XG4gICAgICAgICAgICBwcm9jZXNzRWxlbWVudChicmFuY2gwLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGJyYW5jaDAucHJvY2Vzc2VkID0gdHJ1ZTsgLy8gcHJldmVudCBpdCBmcm9tIGRvdWJsZS1wcm9jZXNzZWRcbiAgICAgICAgICAgIGJyYW5jaDAuaWYgPSBcIihcIi5jb25jYXQodHlwZUJpbmRpbmcsIFwiKT09PSdjaGVja2JveCdcIikgKyBpZkNvbmRpdGlvbkV4dHJhO1xuICAgICAgICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xuICAgICAgICAgICAgICAgIGV4cDogYnJhbmNoMC5pZixcbiAgICAgICAgICAgICAgICBibG9jazogYnJhbmNoMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAyLiBhZGQgcmFkaW8gZWxzZS1pZiBjb25kaXRpb25cbiAgICAgICAgICAgIHZhciBicmFuY2gxID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcbiAgICAgICAgICAgIGdldEFuZFJlbW92ZUF0dHIoYnJhbmNoMSwgJ3YtZm9yJywgdHJ1ZSk7XG4gICAgICAgICAgICBhZGRSYXdBdHRyKGJyYW5jaDEsICd0eXBlJywgJ3JhZGlvJyk7XG4gICAgICAgICAgICBwcm9jZXNzRWxlbWVudChicmFuY2gxLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGFkZElmQ29uZGl0aW9uKGJyYW5jaDAsIHtcbiAgICAgICAgICAgICAgICBleHA6IFwiKFwiLmNvbmNhdCh0eXBlQmluZGluZywgXCIpPT09J3JhZGlvJ1wiKSArIGlmQ29uZGl0aW9uRXh0cmEsXG4gICAgICAgICAgICAgICAgYmxvY2s6IGJyYW5jaDFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gMy4gb3RoZXJcbiAgICAgICAgICAgIHZhciBicmFuY2gyID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcbiAgICAgICAgICAgIGdldEFuZFJlbW92ZUF0dHIoYnJhbmNoMiwgJ3YtZm9yJywgdHJ1ZSk7XG4gICAgICAgICAgICBhZGRSYXdBdHRyKGJyYW5jaDIsICc6dHlwZScsIHR5cGVCaW5kaW5nKTtcbiAgICAgICAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xuICAgICAgICAgICAgICAgIGV4cDogaWZDb25kaXRpb24sXG4gICAgICAgICAgICAgICAgYmxvY2s6IGJyYW5jaDJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGhhc0Vsc2UpIHtcbiAgICAgICAgICAgICAgICBicmFuY2gwLmVsc2UgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZWxzZUlmQ29uZGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgYnJhbmNoMC5lbHNlaWYgPSBlbHNlSWZDb25kaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYnJhbmNoMDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGNsb25lQVNURWxlbWVudChlbCkge1xuICAgIHJldHVybiBjcmVhdGVBU1RFbGVtZW50KGVsLnRhZywgZWwuYXR0cnNMaXN0LnNsaWNlKCksIGVsLnBhcmVudCk7XG59XG52YXIgbW9kZWwgPSB7XG4gICAgcHJlVHJhbnNmb3JtTm9kZTogcHJlVHJhbnNmb3JtTm9kZVxufTtcblxudmFyIG1vZHVsZXMgPSBba2xhc3MsIHN0eWxlLCBtb2RlbF07XG5cbmZ1bmN0aW9uIHRleHQoZWwsIGRpcikge1xuICAgIGlmIChkaXIudmFsdWUpIHtcbiAgICAgICAgYWRkUHJvcChlbCwgJ3RleHRDb250ZW50JywgXCJfcyhcIi5jb25jYXQoZGlyLnZhbHVlLCBcIilcIiksIGRpcik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBodG1sKGVsLCBkaXIpIHtcbiAgICBpZiAoZGlyLnZhbHVlKSB7XG4gICAgICAgIGFkZFByb3AoZWwsICdpbm5lckhUTUwnLCBcIl9zKFwiLmNvbmNhdChkaXIudmFsdWUsIFwiKVwiKSwgZGlyKTtcbiAgICB9XG59XG5cbnZhciBkaXJlY3RpdmVzID0ge1xuICAgIG1vZGVsOiBtb2RlbCQxLFxuICAgIHRleHQ6IHRleHQsXG4gICAgaHRtbDogaHRtbFxufTtcblxudmFyIGJhc2VPcHRpb25zID0ge1xuICAgIGV4cGVjdEhUTUw6IHRydWUsXG4gICAgbW9kdWxlczogbW9k
13835dWxlcyxcbiAgICBkaXJlY3RpdmVzOiBkaXJlY3RpdmVzLFxuICAgIGlzUHJlVGFnOiBpc1ByZVRhZyxcbiAgICBpc1VuYXJ5VGFnOiBpc1VuYXJ5VGFnLFxuICAgIG11c3RVc2VQcm9wOiBtdXN0VXNlUHJvcCxcbiAgICBjYW5CZUxlZnRPcGVuVGFnOiBjYW5CZUxlZnRPcGVuVGFnLFxuICAgIGlzUmVzZXJ2ZWRUYWc6IGlzUmVzZXJ2ZWRUYWcsXG4gICAgZ2V0VGFnTmFtZXNwYWNlOiBnZXRUYWdOYW1lc3BhY2UsXG4gICAgc3RhdGljS2V5czogZ2VuU3RhdGljS2V5cyQxKG1vZHVsZXMpXG59O1xuXG52YXIgaXNTdGF0aWNLZXk7XG52YXIgaXNQbGF0Zm9ybVJlc2VydmVkVGFnO1xudmFyIGdlblN0YXRpY0tleXNDYWNoZWQgPSBjYWNoZWQoZ2VuU3RhdGljS2V5cyk7XG4vKipcbiAqIEdvYWwgb2YgdGhlIG9wdGltaXplcjogd2FsayB0aGUgZ2VuZXJhdGVkIHRlbXBsYXRlIEFTVCB0cmVlXG4gKiBhbmQgZGV0ZWN0IHN1Yi10cmVlcyB0aGF0IGFyZSBwdXJlbHkgc3RhdGljLCBpLmUuIHBhcnRzIG9mXG4gKiB0aGUgRE9NIHRoYXQgbmV2ZXIgbmVlZHMgdG8gY2hhbmdlLlxuICpcbiAqIE9uY2Ugd2UgZGV0ZWN0IHRoZXNlIHN1Yi10cmVlcywgd2UgY2FuOlxuICpcbiAqIDEuIEhvaXN0IHRoZW0gaW50byBjb25zdGFudHMsIHNvIHRoYXQgd2Ugbm8gbG9uZ2VyIG5lZWQgdG9cbiAqICAgIGNyZWF0ZSBmcmVzaCBub2RlcyBmb3IgdGhlbSBvbiBlYWNoIHJlLXJlbmRlcjtcbiAqIDIuIENvbXBsZXRlbHkgc2tpcCB0aGVtIGluIHRoZSBwYXRjaGluZyBwcm9jZXNzLlxuICovXG5mdW5jdGlvbiBvcHRpbWl6ZShyb290LCBvcHRpb25zKSB7XG4gICAgaWYgKCFyb290KVxuICAgICAgICByZXR1cm47XG4gICAgaXNTdGF0aWNLZXkgPSBnZW5TdGF0aWNLZXlzQ2FjaGVkKG9wdGlvbnMuc3RhdGljS2V5cyB8fCAnJyk7XG4gICAgaXNQbGF0Zm9ybVJlc2VydmVkVGFnID0gb3B0aW9ucy5pc1Jlc2VydmVkVGFnIHx8IG5vO1xuICAgIC8vIGZpcnN0IHBhc3M6IG1hcmsgYWxsIG5vbi1zdGF0aWMgbm9kZXMuXG4gICAgbWFya1N0YXRpYyhyb290KTtcbiAgICAvLyBzZWNvbmQgcGFzczogbWFyayBzdGF0aWMgcm9vdHMuXG4gICAgbWFya1N0YXRpY1Jvb3RzKHJvb3QsIGZhbHNlKTtcbn1cbmZ1bmN0aW9uIGdlblN0YXRpY0tleXMoa2V5cykge1xuICAgIHJldHVybiBtYWtlTWFwKCd0eXBlLHRhZyxhdHRyc0xpc3QsYXR0cnNNYXAscGxhaW4scGFyZW50LGNoaWxkcmVuLGF0dHJzLHN0YXJ0LGVuZCxyYXdBdHRyc01hcCcgK1xuICAgICAgICAoa2V5cyA/ICcsJyArIGtleXMgOiAnJykpO1xufVxuZnVuY3Rpb24gbWFya1N0YXRpYyhub2RlKSB7XG4gICAgbm9kZS5zdGF0aWMgPSBpc1N0YXRpYyhub2RlKTtcbiAgICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgICAgIC8vIGRvIG5vdCBtYWtlIGNvbXBvbmVudCBzbG90IGNvbnRlbnQgc3RhdGljLiB0aGlzIGF2b2lkc1xuICAgICAgICAvLyAxLiBjb21wb25lbnRzIG5vdCBhYmxlIHRvIG11dGF0ZSBzbG90IG5vZGVzXG4gICAgICAgIC8vIDIuIHN0YXRpYyBzbG90IGNvbnRlbnQgZmFpbHMgZm9yIGhvdC1yZWxvYWRpbmdcbiAgICAgICAgaWYgKCFpc1BsYXRmb3JtUmVzZXJ2ZWRUYWcobm9kZS50YWcpICYmXG4gICAgICAgICAgICBub2RlLnRhZyAhPT0gJ3Nsb3QnICYmXG4gICAgICAgICAgICBub2RlLmF0dHJzTWFwWydpbmxpbmUtdGVtcGxhdGUnXSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgIG1hcmtTdGF0aWMoY2hpbGQpO1xuICAgICAgICAgICAgaWYgKCFjaGlsZC5zdGF0aWMpIHtcbiAgICAgICAgICAgICAgICBub2RlLnN0YXRpYyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmlmQ29uZGl0aW9ucykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDEsIGwgPSBub2RlLmlmQ29uZGl0aW9ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2Y
13835XIgYmxvY2sgPSBub2RlLmlmQ29uZGl0aW9uc1tpXS5ibG9jaztcbiAgICAgICAgICAgICAgICBtYXJrU3RhdGljKGJsb2NrKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrLnN0YXRpYykge1xuICAgICAgICAgICAgICAgICAgICBub2RlLnN0YXRpYyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIG1hcmtTdGF0aWNSb290cyhub2RlLCBpc0luRm9yKSB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xuICAgICAgICBpZiAobm9kZS5zdGF0aWMgfHwgbm9kZS5vbmNlKSB7XG4gICAgICAgICAgICBub2RlLnN0YXRpY0luRm9yID0gaXNJbkZvcjtcbiAgICAgICAgfVxuICAgICAgICAvLyBGb3IgYSBub2RlIHRvIHF1YWxpZnkgYXMgYSBzdGF0aWMgcm9vdCwgaXQgc2hvdWxkIGhhdmUgY2hpbGRyZW4gdGhhdFxuICAgICAgICAvLyBhcmUgbm90IGp1c3Qgc3RhdGljIHRleHQuIE90aGVyd2lzZSB0aGUgY29zdCBvZiBob2lzdGluZyBvdXQgd2lsbFxuICAgICAgICAvLyBvdXR3ZWlnaCB0aGUgYmVuZWZpdHMgYW5kIGl0J3MgYmV0dGVyIG9mZiB0byBqdXN0IGFsd2F5cyByZW5kZXIgaXQgZnJlc2guXG4gICAgICAgIGlmIChub2RlLnN0YXRpYyAmJlxuICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5sZW5ndGggJiZcbiAgICAgICAgICAgICEobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgbm9kZS5jaGlsZHJlblswXS50eXBlID09PSAzKSkge1xuICAgICAgICAgICAgbm9kZS5zdGF0aWNSb290ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5vZGUuc3RhdGljUm9vdCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbWFya1N0YXRpY1Jvb3RzKG5vZGUuY2hpbGRyZW5baV0sIGlzSW5Gb3IgfHwgISFub2RlLmZvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuaWZDb25kaXRpb25zKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMSwgbCA9IG5vZGUuaWZDb25kaXRpb25zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIG1hcmtTdGF0aWNSb290cyhub2RlLmlmQ29uZGl0aW9uc1tpXS5ibG9jaywgaXNJbkZvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBpc1N0YXRpYyhub2RlKSB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMikge1xuICAgICAgICAvLyBleHByZXNzaW9uXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMykge1xuICAgICAgICAvLyB0ZXh0XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gISEobm9kZS5wcmUgfHxcbiAgICAgICAgKCFub2RlLmhhc0JpbmRpbmdzICYmIC8vIG5vIGR5bmFtaWMgYmluZGluZ3NcbiAgICAgICAgICAgICFub2RlLmlmICYmXG4gICAgICAgICAgICAhbm9kZS5mb3IgJiYgLy8gbm90IHYtaWYgb3Igdi1mb3Igb3Igdi1lbHNlXG4gICAgICAgICAgICAhaXNCdWlsdEluVGFnKG5vZGUudGFnKSAmJiAvLyBub3QgYSBidWlsdC1pblxuICAgICAgICAgICAgaXNQbGF0Zm9ybVJlc2VydmVkVGFnKG5vZGUudGFnKSAmJiAvLyBub3QgYSBjb21wb25lbnRcbiAgICAgICAgICAgICFpc0RpcmVjdENoaWxkT2ZUZW1wbGF0ZUZvcihub2RlKSAmJlxuICAgICAgICAgICAgT2JqZWN0LmtleXMobm9kZSkuZXZlcnkoaXNTdGF0aWNLZXkpKSk7XG59XG5mdW5jdGlvbiBpc0RpcmVjdENoaWxkT2ZUZW1wbGF0ZUZvcihub2RlKSB7XG4gICAgd2hpbGUgKG5vZGUucGFyZW50KSB7XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudDtcbiAgICAgICAgaWYgKG5vZGUudGFnICE9PSAndGVtcGxhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBmbkV4cFJFID0gL14oW1xcdyRfXSt8XFwoW14pXSo/XFwpKVxccyo9PnxeZnVuY3Rpb24oPzpcXHMrW1xcdyRdKyk/XFxzKlxcKC87XG52YXIgZm5JbnZva2VSRSA9IC9cXChbXildKj9cXCk7KiQvO1xudmFyIHNpbXBsZVBhdGhSRSA9IC9eW0EtWmEtel8kXVtcXHckXSooPzpcXC5bQS1aYS16XyRdW1xcdyRdKnxcXFsnW14nXSo/J118XFxbXCJbXlwiXSo/XCJdfFxcW1xcZCtdfFxcW1tBLVphLXpfJF1bXFx3JF0qXSkqJC87XG4vLyBLZXlib2FyZEV2ZW50LmtleUNvZGUgYWxpYXNlc1xudmFyIGtleUNvZGVzID0ge1xuICAgIGVzYzogMjcsXG4gICAgdGFiOiA5LFxuICAgIGVudGVyOiAxMyxcbiAgICBzcGFjZTogMzIsXG4gICAgdXA6IDM4LFxuICAgIGxlZnQ6IDM3LFxuICAgIHJpZ2h0OiAzOSxcbiAgICBkb3duOiA0MCxcbiAgICBkZWxldGU6IFs4LCA0Nl1cbn07XG4vLyBLZXlib2FyZEV2ZW50LmtleSBhbGlhc2VzXG52YXIga2V5TmFtZXMgPSB7XG4gICAgLy8gIzc4ODA6IElFMTEgYW5kIEVkZ2UgdXNlIGBFc2NgIGZvciBFc2NhcGUga2V5IG5hbWUuXG4gICAgZXNjOiBbJ0VzYycsICdFc2NhcGUnXSxcbiAgICB0YWI6ICdUYWInLFxuICAgIGVudGVyOiAnRW50ZXInLFxuICAgIC8vICM5MTEyOiBJRTExIHVzZXMgYFNwYWNlYmFyYCBmb3IgU3BhY2Uga2V5IG5hbWUuXG4gICAgc3BhY2U6IFsnICcsICdTcGFjZWJhciddLFxuICAgIC8vICM3ODA2OiBJRTExIHVzZXMga2V5IG5hbWVzIHdpdGhvdXQgYEFycm93YCBwcmVmaXggZm9yIGFycm93IGtleXMuXG4gICAgdXA6IFsnVXAnLCAnQXJyb3dVcCddLFxuICAgIGxlZnQ6IFsnTGVmdCcsICdBcnJvd0xlZnQnXSxcbiAgICByaWdodDogWydSaWdodCcsICdBcnJvd1JpZ2h0J10sXG4gICAgZG93bjogWydEb3duJywgJ0Fycm93RG93biddLFxuICAgIC8vICM5MTEyOiBJRTExIHVzZXMgYERlbGAgZm9yIERlbGV0ZSBrZXkgbmFtZS5cbiAgICBkZWxldGU6IFsnQmFja3NwYWNlJywgJ0RlbGV0ZScsICdEZWwnXVxufTtcbi8vICM0ODY4OiBtb2RpZmllcnMgdGhhdCBwcmV2ZW50IHRoZSBleGVjdXRpb24gb2YgdGhlIGxpc3RlbmVyXG4vLyBuZWVkIHRvIGV4cGxpY2l0bHkgcmV0dXJuIG51bGwgc28gdGhhdCB3ZSBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gcmVtb3ZlXG4vLyB0aGUgbGlzdGVuZXIgZm9yIC5vbmNlXG52YXIgZ2VuR3VhcmQgPSBmdW5jdGlvbiAoY29uZGl0
13835aW9uKSB7IHJldHVybiBcImlmKFwiLmNvbmNhdChjb25kaXRpb24sIFwiKXJldHVybiBudWxsO1wiKTsgfTtcbnZhciBtb2RpZmllckNvZGUgPSB7XG4gICAgc3RvcDogJyRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsnLFxuICAgIHByZXZlbnQ6ICckZXZlbnQucHJldmVudERlZmF1bHQoKTsnLFxuICAgIHNlbGY6IGdlbkd1YXJkKFwiJGV2ZW50LnRhcmdldCAhPT0gJGV2ZW50LmN1cnJlbnRUYXJnZXRcIiksXG4gICAgY3RybDogZ2VuR3VhcmQoXCIhJGV2ZW50LmN0cmxLZXlcIiksXG4gICAgc2hpZnQ6IGdlbkd1YXJkKFwiISRldmVudC5zaGlmdEtleVwiKSxcbiAgICBhbHQ6IGdlbkd1YXJkKFwiISRldmVudC5hbHRLZXlcIiksXG4gICAgbWV0YTogZ2VuR3VhcmQoXCIhJGV2ZW50Lm1ldGFLZXlcIiksXG4gICAgbGVmdDogZ2VuR3VhcmQoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMFwiKSxcbiAgICBtaWRkbGU6IGdlbkd1YXJkKFwiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDFcIiksXG4gICAgcmlnaHQ6IGdlbkd1YXJkKFwiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDJcIilcbn07XG5mdW5jdGlvbiBnZW5IYW5kbGVycyhldmVudHMsIGlzTmF0aXZlKSB7XG4gICAgdmFyIHByZWZpeCA9IGlzTmF0aXZlID8gJ25hdGl2ZU9uOicgOiAnb246JztcbiAgICB2YXIgc3RhdGljSGFuZGxlcnMgPSBcIlwiO1xuICAgIHZhciBkeW5hbWljSGFuZGxlcnMgPSBcIlwiO1xuICAgIGZvciAodmFyIG5hbWVfMSBpbiBldmVudHMpIHtcbiAgICAgICAgdmFyIGhhbmRsZXJDb2RlID0gZ2VuSGFuZGxlcihldmVudHNbbmFtZV8xXSk7XG4gICAgICAgIC8vQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBpZiAoZXZlbnRzW25hbWVfMV0gJiYgZXZlbnRzW25hbWVfMV0uZHluYW1pYykge1xuICAgICAgICAgICAgZHluYW1pY0hhbmRsZXJzICs9IFwiXCIuY29uY2F0KG5hbWVfMSwgXCIsXCIpLmNvbmNhdChoYW5kbGVyQ29kZSwgXCIsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3RhdGljSGFuZGxlcnMgKz0gXCJcXFwiXCIuY29uY2F0KG5hbWVfMSwgXCJcXFwiOlwiKS5jb25jYXQoaGFuZGxlckNvZGUsIFwiLFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWNIYW5kbGVycyA9IFwie1wiLmNvbmNhdChzdGF0aWNIYW5kbGVycy5zbGljZSgwLCAtMSksIFwifVwiKTtcbiAgICBpZiAoZHluYW1pY0hhbmRsZXJzKSB7XG4gICAgICAgIHJldHVybiBwcmVmaXggKyBcIl9kKFwiLmNvbmNhdChzdGF0aWNIYW5kbGVycywgXCIsW1wiKS5jb25jYXQoZHluYW1pY0hhbmRsZXJzLnNsaWNlKDAsIC0xKSwgXCJdKVwiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBwcmVmaXggKyBzdGF0aWNIYW5kbGVycztcbiAgICB9XG59XG5mdW5jdGlvbiBnZW5IYW5kbGVyKGhhbmRsZXIpIHtcbiAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuICdmdW5jdGlvbigpe30nO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShoYW5kbGVyKSkge1xuICAgICAgICByZXR1cm4gXCJbXCIuY29uY2F0KGhhbmRsZXIubWFwKGZ1bmN0aW9uIChoYW5kbGVyKSB7IHJldHVybiBnZW5IYW5kbGVyKGhhbmRsZXIpOyB9KS5qb2luKCcsJyksIFwiXVwiKTtcbiAgICB9XG4gICAgdmFyIGlzTWV0aG9kUGF0aCA9IHNpbXBsZVBhdGhSRS50ZXN0KGhhbmRsZXIudmFsdWUpO1xuICAgIHZhciBpc0Z1bmN0aW9uRXhwcmVzc2lvbiA9IGZuRXhwUkUudGVzdChoYW5kbGVyLnZhbHVlKTtcbiAgICB2YXIgaXNGdW5jdGlvbkludm9jYXRpb24gPSBzaW1wbGVQYXRoUkUudGVzdChoYW5kbGVyLnZhbHVlLnJlcGxhY2UoZm5JbnZva2VSRSwgJycpKTtcbiAgICBpZiAoIWhhbmRsZXIubW9kaWZpZXJzKSB7XG4gICAgICAgIGlmIChpc01ldGhvZFBhdGggfHwgaXNGdW5jdGlvbkV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVyLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcImZ1bmN0aW9uKCRldmVudCl7XCIuY29uY2F0KGlzRnVuY3Rpb25JbnZvY2F0aW9uID8gXCJyZXR1cm4gXCIuY29uY2F0KGhhbmRsZXIudmFsdWUpIDogaGFuZGxlci52YWx1ZSwgXCJ9XCIpOyAvLyBpbmxpbmUgc3RhdGVtZW50XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2Y
13835XIgY29kZSA9ICcnO1xuICAgICAgICB2YXIgZ2VuTW9kaWZpZXJDb2RlID0gJyc7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKG1vZGlmaWVyQ29kZVtrZXldKSB7XG4gICAgICAgICAgICAgICAgZ2VuTW9kaWZpZXJDb2RlICs9IG1vZGlmaWVyQ29kZVtrZXldO1xuICAgICAgICAgICAgICAgIC8vIGxlZnQvcmlnaHRcbiAgICAgICAgICAgICAgICBpZiAoa2V5Q29kZXNba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09ICdleGFjdCcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbW9kaWZpZXJzXzEgPSBoYW5kbGVyLm1vZGlmaWVycztcbiAgICAgICAgICAgICAgICBnZW5Nb2RpZmllckNvZGUgKz0gZ2VuR3VhcmQoWydjdHJsJywgJ3NoaWZ0JywgJ2FsdCcsICdtZXRhJ11cbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoa2V5TW9kaWZpZXIpIHsgcmV0dXJuICFtb2RpZmllcnNfMVtrZXlNb2RpZmllcl07IH0pXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGtleU1vZGlmaWVyKSB7IHJldHVybiBcIiRldmVudC5cIi5jb25jYXQoa2V5TW9kaWZpZXIsIFwiS2V5XCIpOyB9KVxuICAgICAgICAgICAgICAgICAgICAuam9pbignfHwnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGhhbmRsZXIubW9kaWZpZXJzKSB7XG4gICAgICAgICAgICBfbG9vcF8xKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb2RlICs9IGdlbktleUZpbHRlcihrZXlzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBNYWtlIHN1cmUgbW9kaWZpZXJzIGxpa2UgcHJldmVudCBhbmQgc3RvcCBnZXQgZXhlY3V0ZWQgYWZ0ZXIga2V5IGZpbHRlcmluZ1xuICAgICAgICBpZiAoZ2VuTW9kaWZpZXJDb2RlKSB7XG4gICAgICAgICAgICBjb2RlICs9IGdlbk1vZGlmaWVyQ29kZTtcbiAgICAgICAgfVxuICAgICAgICB2Y
13835XIgaGFuZGxlckNvZGUgPSBpc01ldGhvZFBhdGhcbiAgICAgICAgICAgID8gXCJyZXR1cm4gXCIuY29uY2F0KGhhbmRsZXIudmFsdWUsIFwiLmFwcGx5KG51bGwsIGFyZ3VtZW50cylcIilcbiAgICAgICAgICAgIDogaXNGdW5jdGlvbkV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICA/IFwicmV0dXJuIChcIi5jb25jYXQoaGFuZGxlci52YWx1ZSwgXCIpLmFwcGx5KG51bGwsIGFyZ3VtZW50cylcIilcbiAgICAgICAgICAgICAgICA6IGlzRnVuY3Rpb25JbnZvY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgID8gXCJyZXR1cm4gXCIuY29uY2F0KGhhbmRsZXIudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIDogaGFuZGxlci52YWx1ZTtcbiAgICAgICAgcmV0dXJuIFwiZnVuY3Rpb24oJGV2ZW50KXtcIi5jb25jYXQoY29kZSkuY29uY2F0KGhhbmRsZXJDb2RlLCBcIn1cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2VuS2V5RmlsdGVyKGtleXMpIHtcbiAgICByZXR1cm4gKFxuICAgIC8vIG1ha2Ugc3VyZSB0aGUga2V5IGZpbHRlcnMgb25seSBhcHBseSB0byBLZXlib2FyZEV2ZW50c1xuICAgIC8vICM5NDQxOiBjYW4ndCB1c2UgJ2tleUNvZGUnIGluICRldmVudCBiZWNhdXNlIENocm9tZSBhdXRvZmlsbCBmaXJlcyBmYWtlXG4gICAgLy8ga2V5IGV2ZW50cyB0aGF0IGRvIG5vdCBoYXZlIGtleUNvZGUgcHJvcGVydHkuLi5cbiAgICBcImlmKCEkZXZlbnQudHlwZS5pbmRleE9mKCdrZXknKSYmXCIgK1xuICAgICAgICBcIlwiLmNvbmNhdChrZXlzLm1hcChnZW5GaWx0ZXJDb2RlKS5qb2luKCcmJicpLCBcIilyZXR1cm4gbnVsbDtcIikpO1xufVxuZnVuY3Rpb24gZ2VuRmlsdGVyQ29kZShrZXkpIHtcbiAgICB2YXIga2V5VmFsID0gcGFyc2VJbnQoa2V5LCAxMCk7XG4gICAgaWYgKGtleVZhbCkge1xuICAgICAgICByZXR1cm4gXCIkZXZlbnQua2V5Q29kZSE9PVwiLmNvbmNhdChrZXlWYWwpO1xuICAgIH1cbiAgICB2YXIga2V5Q29kZSA9IGtleUNvZGVzW2tleV07XG4gICAgdmFyIGtleU5hbWUgPSBrZXlOYW1lc1trZXldO1xuICAgIHJldHVybiAoXCJfaygkZXZlbnQua2V5Q29kZSxcIiArXG4gICAgICAgIFwiXCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGtleSksIFwiLFwiKSArXG4gICAgICAgIFwiXCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGtleUNvZGUpLCBcIixcIikgK1xuICAgICAgICBcIiRldmVudC5rZXksXCIgK1xuICAgICAgICBcIlwiLmNvbmNhdChKU09OLnN0cmluZ2lmeShrZXlOYW1lKSkgK1xuICAgICAgICBcIilcIik7XG59XG5cbmZ1bmN0aW9uIG9uKGVsLCBkaXIpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBkaXIubW9kaWZpZXJzKSB7XG4gICAgICAgIHdhcm4kMihcInYtb24gd2l0aG91dCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IG1vZGlmaWVycy5cIik7XG4gICAgfVxuICAgIGVsLndyYXBMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoY29kZSkgeyByZXR1cm4gXCJfZyhcIi5jb25jYXQoY29kZSwgXCIsXCIpLmNvbmNhdChkaXIudmFsdWUsIFwiKVwiKTsgfTtcbn1cblxuZnVuY3Rpb24gYmluZChlbCwgZGlyKSB7XG4gICAgZWwud3JhcERhdGEgPSBmdW5jdGlvbiAoY29kZSkge1xuICAgICAgICByZXR1cm4gXCJfYihcIi5jb25jYXQoY29kZSwgXCIsJ1wiKS5jb25jYXQoZWwudGFnLCBcIicsXCIpLmNvbmNhdChkaXIudmFsdWUsIFwiLFwiKS5jb25jYXQoZGlyLm1vZGlmaWVycyAmJiBkaXIubW9kaWZpZXJzLnByb3AgPyAndHJ1ZScgOiAnZmFsc2UnKS5jb25jYXQoZGlyLm1vZGlmaWVycyAmJiBkaXIubW9kaWZpZXJzLnN5bmMgPyAnLHRydWUnIDogJycsIFwiKVwiKTtcbiAgICB9O1xufVxuXG52YXIgYmFzZURpcmVjdGl2ZXMgPSB7XG4gICAgb246IG9uLFxuICAgIGJpbmQ6IGJpbmQsXG4gICAgY2xvYWs6IG5vb3Bcbn07XG5cbnZhciBDb2RlZ2VuU3RhdGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29kZWdlblN0YXRlKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy53YXJuID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xuICAgICAgICB0aGlzLnRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3RyYW5zZm9ybUNvZGUnKTtcbiAgICAgICAgdGhpcy5kYXRhR2VuRm5zID0gcGx1Y2tNb2R1bGVGdW5jdGlvbihvcHRpb25zLm1vZHVsZXMsICdnZW5EYXRhJyk7XG4gICAgICAgIHRoaXMuZGlyZWN0aXZlcyA9IGV4dGVuZChleHRlbmQoe30sIGJhc2VEaXJlY3RpdmVzKSwgb3B0aW9ucy5kaXJlY3RpdmVzKTtcbiAgICAgICAgdmFyIGlzUmVzZXJ2ZWRUYWcgPSBvcHRpb25zLmlzUmVzZXJ2ZWRUYWcgfHwgbm87XG4gICAgICAgIHRoaXMubWF5YmVDb21wb25lbnQgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgIHJldHVybiAhIWVsLmNvbXBvbmVudCB8fCAhaXNSZXNlcnZlZFRhZyhlbC50YWcpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uY2VJZCA9IDA7XG4gICAgICAgIHRoaXMuc3RhdGljUmVuZGVyRm5zID0gW107XG4gICAgICAgIHRoaXMucHJlID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBDb2RlZ2VuU3RhdGU7XG59KCkpO1xuZnVuY3Rpb24gZ2VuZXJhdGUoYXN0LCBvcHRpb25zKSB7XG4gICAgdmFyIHN0YXRlID0gbmV3IENvZGVnZW5TdGF0ZShvcHRpb25zKTtcbiAgICAvLyBmaXggIzExNDgzLCBSb290IGxldmVsIDxzY3JpcHQ+IHRhZ3Mgc2hvdWxkIG5vdCBiZSByZW5kZXJlZC5cbiAgICB2YXIgY29kZSA9IGFzdFxuICAgICAgICA/IGFzdC50YWcgPT09ICdzY3JpcHQnXG4gICAgICAgICAgICA/ICdudWxsJ1xuICAgICAgICAgICAgOiBnZW5FbGVtZW50KGFzdCwgc3RhdGUpXG4gICAgICAgIDogJ19jKFwiZGl2XCIpJztcbiAgICByZXR1cm4ge1xuICAgICAgICByZW5kZXI6IFwid2l0aCh0aGlzKXtyZXR1cm4gXCIuY29uY2F0KGNvZGUsIFwifVwiKSxcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0ZS5zdGF0aWNSZW5kZXJGbnNcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2VuRWxlbWVudChlbCwgc3Rh
13835dGUpIHtcbiAgICBpZiAoZWwucGFyZW50KSB7XG4gICAgICAgIGVsLnByZSA9IGVsLnByZSB8fCBlbC5wYXJlbnQucHJlO1xuICAgIH1cbiAgICBpZiAoZWwuc3RhdGljUm9vdCAmJiAhZWwuc3RhdGljUHJvY2Vzc2VkKSB7XG4gICAgICAgIHJldHVybiBnZW5TdGF0aWMoZWwsIHN0YXRlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZWwub25jZSAmJiAhZWwub25jZVByb2Nlc3NlZCkge1xuICAgICAgICByZXR1cm4gZ2VuT25jZShlbCwgc3RhdGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChlbC5mb3IgJiYgIWVsLmZvclByb2Nlc3NlZCkge1xuICAgICAgICByZXR1cm4gZ2VuRm9yKGVsLCBzdGF0ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCkge1xuICAgICAgICByZXR1cm4gZ2VuSWYoZWwsIHN0YXRlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZWwudGFnID09PSAndGVtcGxhdGUnICYmICFlbC5zbG90VGFyZ2V0ICYmICFzdGF0ZS5wcmUpIHtcbiAgICAgICAgcmV0dXJuIGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSkgfHwgJ3ZvaWQgMCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKGVsLnRhZyA9PT0gJ3Nsb3QnKSB7XG4gICAgICAgIHJldHVybiBnZW5TbG90KGVsLCBzdGF0ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBjb21wb25lbnQgb3IgZWxlbWVudFxuICAgICAgICB2YXIgY29kZSA9IHZvaWQgMDtcbiAgICAgICAgaWYgKGVsLmNvbXBvbmVudCkge1xuICAgICAgICAgICAgY29kZSA9IGdlbkNvbXBvbmVudChlbC5jb21wb25lbnQsIGVsLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2Y
13835XIgZGF0YSA9IHZvaWQgMDtcbiAgICAgICAgICAgIHZhciBtYXliZUNvbXBvbmVudCA9IHN0YXRlLm1heWJlQ29tcG9uZW50KGVsKTtcbiAgICAgICAgICAgIGlmICghZWwucGxhaW4gfHwgKGVsLnByZSAmJiBtYXliZUNvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZ2VuRGF0YShlbCwgc3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHRhZyBcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoaXMgaXMgYSBjb21wb25lbnQgaW4gPHNjcmlwdCBzZXR1cD5cbiAgICAgICAgICAgID0gdm9pZCAwO1xuICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhpcyBpcyBhIGNvbXBvbmVudCBpbiA8c2NyaXB0IHNldHVwPlxuICAgICAgICAgICAgdmFyIGJpbmRpbmdzID0gc3RhdGUub3B0aW9ucy5iaW5kaW5ncztcbiAgICAgICAgICAgIGlmIChtYXliZUNvbXBvbmVudCAmJiBiaW5kaW5ncyAmJiBiaW5kaW5ncy5fX2lzU2NyaXB0U2V0dXAgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdGFnID0gY2hlY2tCaW5kaW5nVHlwZShiaW5kaW5ncywgZWwudGFnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGFnKVxuICAgICAgICAgICAgICAgIHRhZyA9IFwiJ1wiLmNvbmNhdChlbC50YWcsIFwiJ1wiKTtcbiAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IGVsLmlubGluZVRlbXBsYXRlID8gbnVsbCA6IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICBjb2RlID0gXCJfYyhcIi5jb25jYXQodGFnKS5jb25jYXQoZGF0YSA/IFwiLFwiLmNvbmNhdChkYXRhKSA6ICcnIC8vIGRhdGFcbiAgICAgICAgICAgICkuY29uY2F0KGNoaWxkcmVuID8gXCIsXCIuY29uY2F0KGNoaWxkcmVuKSA6ICcnIC8vIGNoaWxkcmVuXG4gICAgICAgICAgICAsIFwiKVwiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtb2R1bGUgdHJhbnNmb3Jtc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLnRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvZGUgPSBzdGF0ZS50cmFuc2Zvcm1zW2ldKGVsLCBjb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29kZTtcbiAgICB9XG59XG5mdW5jdGlvbiBjaGVja0JpbmRpbmdUeXBlKGJpbmRpbmdzLCBrZXkpIHtcbiAgICB2YXIgY2FtZWxOYW1lID0gY2FtZWxpemUoa2V5KTtcbiAgICB2YXIgUGFzY2FsTmFtZSA9IGNhcGl0YWxpemUoY2FtZWxOYW1lKTtcbiAgICB2YXIgY2hlY2tUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgaWYgKGJpbmRpbmdzW2tleV0gPT09IHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJpbmRpbmdzW2NhbWVsTmFtZV0gPT09IHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjYW1lbE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJpbmRpbmdzW1Bhc2NhbE5hbWVdID09PSB0eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gUGFzY2FsTmFtZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIGZyb21Db25zdCA9IGNoZWNrVHlwZShcInNldHVwLWNvbnN0XCIgLyogQmluZGluZ1R5cGVzLlNFVFVQX0NPTlNUICovKSB8fFxuICAgICAgICBjaGVja1R5cGUoXCJzZXR1cC1yZWFjdGl2ZS1jb25zdFwiIC8qIEJpbmRpbmdUeXBlcy5TRVRVUF9SRUFDVElWRV9DT05TVCAqLyk7XG4gICAgaWYgKGZyb21Db25zdCkge1xuICAgICAgICByZXR1cm4gZnJvbUNvbnN0O1xuICAgIH1cbiAgICB2YXIgZnJvbU1heWJlUmVmID0gY2hlY2tUeXBlKFwic2V0dXAtbGV0XCIgLyogQmluZGluZ1R5cGVzLlNFVFVQX0xFVCAqLykgfHxcbiAgICAgICAgY2hlY2tUeXBlKFwic2V0dXAtcmVmXCIgLyogQmluZGluZ1R5cGVzLlNFVFVQX1JFRiAqLykgfHxcbiAgICAgICAgY2hlY2tUeXBlKFwic2V0dXAtbWF5YmUtcmVmXCIgLyogQmluZGluZ1R5cGVzLlNFVFVQX01BWUJFX1JFRiAqLyk7XG4gICAgaWYgKGZyb21NYXliZVJlZikge1xuICAgICAgICByZXR1cm4gZnJvbU1heWJlUmVmO1xuICAgIH1cbn1cbi8vIGhvaXN0IHN0YXRpYyBzdWItdHJlZXMgb3V0XG5mdW5jdGlvbiBnZW5TdGF0aWMoZWwsIHN0YXRlKSB7XG4gICAgZWwuc3RhdGljUHJvY2Vzc2VkID0gdHJ1ZTtcbiAgICAvLyBTb21lIGVsZW1lbnRzICh0ZW1wbGF0ZXMpIG5lZWQgdG8gYmVoYXZlIGRpZmZlcmVudGx5IGluc2lkZSBvZiBhIHYtcHJlXG4gICAgLy8gbm9kZS4gIEFsbCBwcmUgbm9kZXMgYXJlIHN0YXRpYyByb290cywgc28gd2UgY2FuIHVzZSB0aGlzIGFzIGEgbG9jYXRpb24gdG9cbiAgICAvLyB3cmFwIGEgc3RhdGUgY2hhbmdlIGFuZCByZXNldCBpdCB1cG9uIGV4aXRpbmcgdGhlIHByZSBub2RlLlxuICAgIHZhciBvcmlnaW5hbFByZVN0YXRlID0gc3RhdGUucHJlO1xuICAgIGlmIChlbC5wcmUpIHtcbiAgICAgICAgc3RhdGUucHJlID0gZWwucHJlO1xuICAgIH1cbiAgICBzdGF0ZS5zdGF0aWNSZW5kZXJGbnMucHVzaChcIndpdGgodGhpcyl7cmV0dXJuIFwiLmNvbmNhdChnZW5FbGVtZW50KGVsLCBzdGF0ZSksIFwifVwiKSk7XG4gICAgc3RhdGUucHJlID0gb3JpZ2luYWxQcmVTdGF0ZTtcbiAgICByZXR1cm4gXCJfbShcIi5jb25jYXQoc3RhdGUuc3RhdGljUmVuZGVyRm5zLmxlbmd0aCAtIDEpLmNvbmNhdChlbC5zdGF0aWNJbkZvciA/ICcsdHJ1ZScgOiAnJywgXCIpXCIpO1xufVxuLy8gdi1vbmNlXG5mdW5jdGlvbiBnZW5PbmNlKGVsLCBzdGF0ZSkge1xuICAgIGVsLm9uY2VQcm9jZXNzZWQgPSB0cnVlO1xuICAgIGlmIChlbC5pZiAmJiAhZWwuaWZQcm9jZXNzZWQpIHtcbiAgICAgICAgcmV0dXJuIGdlbklmKGVsLCBzdGF0ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGVsLnN0YXRpY0luRm9yKSB7XG4gICAgICAgIHZhciBrZXkgPSAnJztcbiAgICAgICAgdmFyIHBhcmVudF8xID0gZWwucGFyZW50O1xuICAgICAgICB3aGlsZSAocGFyZW50XzEpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRfMS5mb3IpIHtcbiAgICAgICAgICAgICAgICBrZXkgPSBwYXJlbnRfMS5rZXk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJlbnRfMSA9IHBhcmVudF8xLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgI
13835HN0YXRlLndhcm4oXCJ2LW9uY2UgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgdi1mb3IgdGhhdCBpcyBrZXllZC4gXCIsIGVsLnJhd0F0dHJzTWFwWyd2LW9uY2UnXSk7XG4gICAgICAgICAgICByZXR1cm4gZ2VuRWxlbWVudChlbCwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIl9vKFwiLmNvbmNhdChnZW5FbGVtZW50KGVsLCBzdGF0ZSksIFwiLFwiKS5jb25jYXQoc3RhdGUub25jZUlkKyssIFwiLFwiKS5jb25jYXQoa2V5LCBcIilcIik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZ2VuU3RhdGljKGVsLCBzdGF0ZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2VuSWYoZWwsIHN0YXRlLCBhbHRHZW4sIGFsdEVtcHR5KSB7XG4gICAgZWwuaWZQcm9jZXNzZWQgPSB0cnVlOyAvLyBhdm9pZCByZWN1cnNpb25cbiAgICByZXR1cm4gZ2VuSWZDb25kaXRpb25zKGVsLmlmQ29uZGl0aW9ucy5zbGljZSgpLCBzdGF0ZSwgYWx0R2VuLCBhbHRFbXB0eSk7XG59XG5mdW5jdGlvbiBnZW5JZkNvbmRpdGlvbnMoY29uZGl0aW9ucywgc3RhdGUsIGFsdEdlbiwgYWx0RW1wdHkpIHtcbiAgICBpZiAoIWNvbmRpdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBhbHRFbXB0eSB8fCAnX2UoKSc7XG4gICAgfVxuICAgIHZhciBjb25kaXRpb24gPSBjb25kaXRpb25zLnNoaWZ0KCk7XG4gICAgaWYgKGNvbmRpdGlvbi5leHApIHtcbiAgICAgICAgcmV0dXJuIFwiKFwiLmNvbmNhdChjb25kaXRpb24uZXhwLCBcIik/XCIpLmNvbmNhdChnZW5UZXJuYXJ5RXhwKGNvbmRpdGlvbi5ibG9jayksIFwiOlwiKS5jb25jYXQoZ2VuSWZDb25kaXRpb25zKGNvbmRpdGlvbnMsIHN0YXRlLCBhbHRHZW4sIGFsdEVtcHR5KSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQoZ2VuVGVybmFyeUV4cChjb25kaXRpb24uYmxvY2spKTtcbiAgICB9XG4gICAgLy8gdi1pZiB3aXRoIHYtb25jZSBzaG91bGQgZ2VuZXJhdGUgY29kZSBsaWtlIChhKT9fbSgwKTpfbSgxKVxuICAgIGZ1bmN0aW9uIGdlblRlcm5hcnlFeHAoZWwpIHtcbiAgICAgICAgcmV0dXJuIGFsdEdlblxuICAgICAgICAgICAgPyBhbHRHZW4oZWwsIHN0YXRlKVxuICAgICAgICAgICAgOiBlbC5vbmNlXG4gICAgICAgICAgICAgICAgPyBnZW5PbmNlKGVsLCBzdGF0ZSlcbiAgICAgICAgICAgICAgICA6IGdlbkVsZW1lbnQoZWwsIHN0YXRlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZW5Gb3IoZWwsIHN0YXRlLCBhbHRHZW4sIGFsdEhlbHBlcikge1xuICAgIHZhciBleHAgPSBlbC5mb3I7XG4gICAgdmFyIGFsaWFzID0gZWwuYWxpYXM7XG4gICAgdmFyIGl0ZXJhdG9yMSA9IGVsLml0ZXJhdG9yMSA/IFwiLFwiLmNvbmNhdChlbC5pdGVyYXRvcjEpIDogJyc7XG4gICAgdmFyIGl0ZXJhdG9yMiA9IGVsLml0ZXJhdG9yMiA/IFwiLFwiLmNvbmNhdChlbC5pdGVyYXRvcjIpIDogJyc7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgc3RhdGUubWF5YmVDb21wb25lbnQoZWwpICYmXG4gICAgICAgIGVsLnRhZyAhPT0gJ3Nsb3QnICYmXG4gICAgICAgIGVsLnRhZyAhPT0gJ3RlbXBsYXRlJyAmJlxuICAgICAgICAhZWwua2V5KSB7XG4gICAgICAgIHN0YXRlLndhcm4oXCI8XCIuY29uY2F0KGVsLnRhZywgXCIgdi1mb3I9XFxcIlwiKS5jb25jYXQoYWxpYXMsIFwiIGluIFwiKS5jb25jYXQoZXhwLCBcIlxcXCI+OiBjb21wb25lbnQgbGlzdHMgcmVuZGVyZWQgd2l0aCBcIikgK1xuICAgICAgICAgICAgXCJ2LWZvciBzaG91bGQgaGF2ZSBleHBsaWNpdCBrZXlzLiBcIiArXG4gICAgICAgICAgICBcIlNlZSBodHRwczovL3YyLnZ1ZWpzLm9yZy92Mi9ndWlkZS9saXN0Lmh0bWwja2V5IGZvciBtb3JlIGluZm8uXCIsIGVsLnJhd0F0dHJzTWFwWyd2LWZvciddLCB0cnVlIC8qIHRpcCAqLyk7XG4gICAgfVxuICAgIGVsLmZvclByb2Nlc3NlZCA9IHRydWU7IC8vIGF2b2lkIHJlY3Vyc2lvblxuICAgIHJldHVybiAoXCJcIi5jb25jYXQoYWx0SGVscGVyIHx8ICdfbCcsIFwiKChcIikuY29uY2F0KGV4cCwgXCIpLFwiKSArXG4gICAgICAgIFwiZnVuY3Rpb24oXCIuY29uY2F0KGFsaWFzKS5jb25jYXQoaXRlcmF0b3IxKS5jb25jYXQoaXRlcmF0b3IyLCBcIil7XCIpICtcbiAgICAgICAgXCJyZXR1cm4gXCIuY29uY2F0KChhbHRHZW4gfHwgZ2VuRWxlbWVudCkoZWwsIHN0YXRlKSkgK1xuICAgICAgICAnfSknKTtcbn1cbmZ1bmN0aW9uIGdlbkRhdGEoZWwsIHN0YXRlKSB7XG4gICAgdmFyIGRhdGEgPSAneyc7XG4gICAgLy8gZGlyZWN0aXZlcyBmaXJzdC5cbiAgICAvLyBkaXJlY3RpdmVzIG1heSBtdXRhdGUgdGhlIGVsJ3Mgb3RoZXIgcHJvcGVydGllcyBiZWZvcmUgdGhleSBhcmUgZ2VuZXJhdGVkLlxuICAgIHZhciBkaXJzID0gZ2VuRGlyZWN0aXZlcyhlbCwgc3RhdGUpO1xuICAgIGlmIChkaXJzKVxuICAgICAgICBkYXRhICs9IGRpcnMgKyAnLCc7XG4gICAgLy8ga2V5XG4gICAgaWYgKGVsLmtleSkge1xuICAgICAgICBkYXRhICs9IFwia2V5OlwiLmNvbmNhdChlbC5rZXksIFwiLFwiKTtcbiAgICB9XG4gICAgLy8gcmVmXG4gICAgaWYgKGVsLnJlZikge1xuICAgICAgICBkYXRhICs9IFwicmVmOlwiLmNvbmNhdChlbC5yZWYsIFwiLFwiKTtcbiAgICB9XG4gICAgaWYgKGVsLnJlZkluRm9yKSB7XG4gICAgICAgIGRhdGEgKz0gXCJyZWZJbkZvcjp0cnVlLFwiO1xuICAgIH1cbiAgICAvLyBwcmVcbiAgICBpZiAoZWwucHJlKSB7XG4gICAgICAgIGRhdGEgKz0gXCJwcmU6dHJ1ZSxcIjtcbiAgICB9XG4gICAgLy8gcmVjb3JkIG9yaWdpbmFsIHRhZyBuYW1lIGZvciBjb21wb25lbnRzIHVzaW5nIFwiaXNcIiBhdHRyaWJ1dGVcbiAgICBpZiAoZWwuY29tcG9uZW50KSB7XG4gICAgICAgIGRhdGEgKz0gXCJ0YWc6XFxcIlwiLmNvbmNhdChlbC50YWcsIFwiXFxcIixcIik7XG4gICAgfVxuICAgIC8vIG1vZHVsZSBkYXRhIGdlbmVyYXRpb24gZnVuY3Rpb25zXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5kYXRhR2VuRm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRhdGEgKz0gc3RhdGUuZGF0YUdlbkZuc1tpXShlbCk7XG4gICAgfVxuICAgIC8vIGF0dHJpYnV0ZXNcbiAgICBpZiAoZWwuYXR0cnMpIHtcbiAgICAgICAgZGF0YSArPSBcImF0dHJzOlwiLmNvbmNhdChnZW5Qcm9wcyhlbC5hdHRycyksIFwiLFwiKTtcbiAgICB9XG4gICAgLy8gRE9NIHByb3BzXG4gICAgaWYgKGVsLnByb3BzKSB7XG4gICAgICAgIGRhdGEgKz0gXCJkb21Qcm9wczpcIi5jb25jYXQoZ2VuUHJvcHMoZWwucHJvcHMpLCBcIixcIik7XG4gICAgfVxuICAgIC8vIGV2ZW50IGhhbmRsZXJzXG4gICAgaWYgKGVsLmV2ZW50cykge1xuICAgICAgICBkYXRhICs9IFwiXCIuY29uY2F0KGdlbkhhbmRsZXJzKGVsLmV2ZW50cywgZmFsc2UpLCBcIixcIik7XG4gICAgfVxuICAgIGlmIChlbC5uYXRpdmVFdmVudHMpIHtcbiAgICAgICAgZGF0YSArPSBcIlwiLmNvbmNhdChnZW5IYW5kbGVycyhlbC5uYXRpdmVFdmVudHMsIHRydWUpLCBcIixcIik7XG4gICAgfVxuICAgIC8vIHNsb3QgdGFyZ2V0XG4gICAgLy8gb25seSBmb3Igbm9uLXNjb3BlZCBzbG90c1xuICAgIGlmIChlbC5zbG90VGFyZ2V0ICYmICFlbC5zbG90U2NvcGUpIHtcbiAgICAgICAgZGF0YSArPSBcInNsb3Q6XCIuY29uY2F0KGVsLnNsb3RUYXJnZXQsIFwiLFwiKTtcbiAgICB9XG4gICAgLy8gc2NvcGVkIHNsb3RzXG4gICAgaWYgKGVsLnNjb3BlZFNsb3RzKSB7XG4gICAgICAgIGRhdGEgKz0gXCJcIi5jb25jYXQoZ2VuU2NvcGVkU2xvdHMoZWwsIGVsLnNjb3BlZFNsb3RzLCBzdGF0ZSksIFwiLFwiKTtcbiAgICB9XG4gICAgLy8gY29tcG9uZW50IHYtbW9kZWxcbiAgICBpZiAoZWwubW9kZWwpIHtcbiAgICAgICAgZGF0YSArPSBcIm1vZGVsOnt2YWx1ZTpcIi5jb25jYXQoZWwubW9kZWwudmFsdWUsIFwiLGNhbGxiYWNrOlwiKS5jb25jYXQoZWwubW9kZWwuY2FsbGJhY2ssIFwiLGV4cHJlc3Npb246XCIpLmNvbmNhdChlbC5tb2RlbC5leHByZXNzaW9uLCBcIn0sXCIpO1xuICAgIH1cbiAgICAvLyBpbmxpbmUtdGVtcGxhdGVcbiAgICBpZiAoZWwuaW5saW5lVGVtcGxhdGUpIHtcbiAgICAgICAgdmFyIGlubGluZVRlbXBsYXRlID0gZ2VuSW5saW5lVGVtcGxhdGUoZWwsIHN0YXRl
13835KTtcbiAgICAgICAgaWYgKGlubGluZVRlbXBsYXRlKSB7XG4gICAgICAgICAgICBkYXRhICs9IFwiXCIuY29uY2F0KGlubGluZVRlbXBsYXRlLCBcIixcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvLCQvLCAnJykgKyAnfSc7XG4gICAgLy8gdi1iaW5kIGR5bmFtaWMgYXJndW1lbnQgd3JhcFxuICAgIC8vIHYtYmluZCB3aXRoIGR5bmFtaWMgYXJndW1lbnRzIG11c3QgYmUgYXBwbGllZCB1c2luZyB0aGUgc2FtZSB2LWJpbmQgb2JqZWN0XG4gICAgLy8gbWVyZ2UgaGVscGVyIHNvIHRoYXQgY2xhc3Mvc3R5bGUvbXVzdFVzZVByb3AgYXR0cnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LlxuICAgIGlmIChlbC5keW5hbWljQXR0cnMpIHtcbiAgICAgICAgZGF0YSA9IFwiX2IoXCIuY29uY2F0KGRhdGEsIFwiLFxcXCJcIikuY29uY2F0KGVsLnRhZywgXCJcXFwiLFwiKS5jb25jYXQoZ2VuUHJvcHMoZWwuZHluYW1pY0F0dHJzKSwgXCIpXCIpO1xuICAgIH1cbiAgICAvLyB2LWJpbmQgZGF0YSB3cmFwXG4gICAgaWYgKGVsLndyYXBEYXRhKSB7XG4gICAgICAgIGRhdGEgPSBlbC53cmFwRGF0YShkYXRhKTtcbiAgICB9XG4gICAgLy8gdi1vbiBkYXRhIHdyYXBcbiAgICBpZiAoZWwud3JhcExpc3RlbmVycykge1xuICAgICAgICBkYXRhID0gZWwud3JhcExpc3RlbmVycyhkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG59XG5mdW5jdGlvbiBnZW5EaXJlY3RpdmVzKGVsLCBzdGF0ZSkge1xuICAgIHZhciBkaXJzID0gZWwuZGlyZWN0aXZlcztcbiAgICBpZiAoIWRpcnMpXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgcmVzID0gJ2RpcmVjdGl2ZXM6Wyc7XG4gICAgdmFyIGhhc1J1bnRpbWUgPSBmYWxzZTtcbiAgICB2YXIgaSwgbCwgZGlyLCBuZWVkUnVudGltZTtcbiAgICBmb3IgKGkgPSAwLCBsID0gZGlycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgZGlyID0gZGlyc1tpXTtcbiAgICAgICAgbmVlZFJ1bnRpbWUgPSB0cnVlO1xuICAgICAgICB2Y
13835XIgZ2VuID0gc3RhdGUuZGlyZWN0aXZlc1tkaXIubmFtZV07XG4gICAgICAgIGlmIChnZW4pIHtcbiAgICAgICAgICAgIC8vIGNvbXBpbGUtdGltZSBkaXJlY3RpdmUgdGhhdCBtYW5pcHVsYXRlcyBBU1QuXG4gICAgICAgICAgICAvLyByZXR1cm5zIHRydWUgaWYgaXQgYWxzbyBuZWVkcyBhIHJ1bnRpbWUgY291bnRlcnBhcnQuXG4gICAgICAgICAgICBuZWVkUnVudGltZSA9ICEhZ2VuKGVsLCBkaXIsIHN0YXRlLndhcm4pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZWVkUnVudGltZSkge1xuICAgICAgICAgICAgaGFzUnVudGltZSA9IHRydWU7XG4gICAgICAgICAgICByZXMgKz0gXCJ7bmFtZTpcXFwiXCIuY29uY2F0KGRpci5uYW1lLCBcIlxcXCIscmF3TmFtZTpcXFwiXCIpLmNvbmNhdChkaXIucmF3TmFtZSwgXCJcXFwiXCIpLmNvbmNhdChkaXIudmFsdWVcbiAgICAgICAgICAgICAgICA/IFwiLHZhbHVlOihcIi5jb25jYXQoZGlyLnZhbHVlLCBcIiksZXhwcmVzc2lvbjpcIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KGRpci52YWx1ZSkpXG4gICAgICAgICAgICAgICAgOiAnJykuY29uY2F0KGRpci5hcmcgPyBcIixhcmc6XCIuY29uY2F0KGRpci5pc0R5bmFtaWNBcmcgPyBkaXIuYXJnIDogXCJcXFwiXCIuY29uY2F0KGRpci5hcmcsIFwiXFxcIlwiKSkgOiAnJykuY29uY2F0KGRpci5tb2RpZmllcnMgPyBcIixtb2RpZmllcnM6XCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGRpci5tb2RpZmllcnMpKSA6ICcnLCBcIn0sXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChoYXNSdW50aW1lKSB7XG4gICAgICAgIHJldHVybiByZXMuc2xpY2UoMCwgLTEpICsgJ10nO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdlbklubGluZVRlbXBsYXRlKGVsLCBzdGF0ZSkge1xuICAgIHZhciBhc3QgPSBlbC5jaGlsZHJlblswXTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAoZWwuY2hpbGRyZW4ubGVuZ3RoICE9PSAxIHx8IGFzdC50eXBlICE9PSAxKSkge1xuICAgICAgICBzdGF0ZS53YXJuKCdJbmxpbmUtdGVtcGxhdGUgY29tcG9uZW50cyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgY2hpbGQgZWxlbWVudC4nLCB7IHN0YXJ0OiBlbC5zdGFydCB9KTtcbiAgICB9XG4gICAgaWYgKGFzdCAmJiBhc3QudHlwZSA9PT0gMSkge1xuICAgICAgICB2Y
13835XIgaW5saW5lUmVuZGVyRm5zID0gZ2VuZXJhdGUoYXN0LCBzdGF0ZS5vcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIFwiaW5saW5lVGVtcGxhdGU6e3JlbmRlcjpmdW5jdGlvbigpe1wiLmNvbmNhdChpbmxpbmVSZW5kZXJGbnMucmVuZGVyLCBcIn0sc3RhdGljUmVuZGVyRm5zOltcIikuY29uY2F0KGlubGluZVJlbmRlckZucy5zdGF0aWNSZW5kZXJGbnNcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGNvZGUpIHsgcmV0dXJuIFwiZnVuY3Rpb24oKXtcIi5jb25jYXQoY29kZSwgXCJ9XCIpOyB9KVxuICAgICAgICAgICAgLmpvaW4oJywnKSwgXCJdfVwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZW5TY29wZWRTbG90cyhlbCwgc2xvdHMsIHN0YXRlKSB7XG4gICAgLy8gYnkgZGVmYXVsdCBzY29wZWQgc2xvdHMgYXJlIGNvbnNpZGVyZWQgXCJzdGFibGVcIiwgdGhpcyBhbGxvd3MgY2hpbGRcbiAgICAvLyBjb21wb25lbnRzIHdpdGggb25seSBzY29wZWQgc2xvdHMgdG8gc2tpcCBmb3JjZWQgdXBkYXRlcyBmcm9tIHBhcmVudC5cbiAgICAvLyBidXQgaW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGJhaWwtb3V0IG9mIHRoaXMgb3B0aW1pemF0aW9uXG4gICAgLy8gZm9yIGV4YW1wbGUgaWYgdGhlIHNsb3QgY29udGFpbnMgZHluYW1pYyBuYW1lcywgaGFzIHYtaWYgb3Igdi1mb3Igb24gdGhlbS4uLlxuICAgIHZhciBuZWVkc0ZvcmNlVXBkYXRlID0gZWwuZm9yIHx8XG4gICAgICAgIE9iamVjdC5rZXlzKHNsb3RzKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHZhciBzbG90ID0gc2xvdHNba2V5XTtcbiAgICAgICAgICAgIHJldHVybiAoc2xvdC5zbG90VGFyZ2V0RHluYW1pYyB8fCBzbG90LmlmIHx8IHNsb3QuZm9yIHx8IGNvbnRhaW5zU2xvdENoaWxkKHNsb3QpIC8vIGlzIHBhc3NpbmcgZG93biBzbG90IGZyb20gcGFyZW50IHdoaWNoIG1heSBiZSBkeW5hbWljXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAvLyAjOTUzNDogaWYgYSBjb21wb25lbnQgd2l0aCBzY29wZWQgc2xvdHMgaXMgaW5zaWRlIGEgY29uZGl0aW9uYWwgYnJhbmNoLFxuICAgIC8vIGl0J3MgcG9zc2libGUgZm9yIHRoZSBzYW1lIGNvbXBvbmVudCB0byBiZSByZXVzZWQgYnV0IHdpdGggZGlmZmVyZW50XG4gICAgLy8gY29tcGlsZWQgc2xvdCBjb250ZW50LiBUbyBhdm9pZCB0aGF0LCB3ZSBnZW5lcmF0ZSBhIHVuaXF1ZSBrZXkgYmFzZWQgb25cbiAgICAvLyB0aGUgZ2VuZXJhdGVkIGNvZGUgb2YgYWxsIHRoZSBzbG90IGNvbnRlbnRzLlxuICAgIHZhciBuZWVkc0tleSA9ICEhZWwuaWY7XG4gICAgLy8gT1Igd2hlbiBpdCBpcyBpbnNpZGUgYW5vdGhlciBzY29wZWQgc2xvdCBvciB2LWZvciAodGhlIHJlYWN0aXZpdHkgbWF5IGJlXG4gICAgLy8gZGlzY29ubmVjdGVkIGR1ZSB0byB0aGUgaW50ZXJtZWRpYXRlIHNjb3BlIHZhcmlhYmxlKVxuICAgIC8vICM5NDM4LCAjOTUwNlxuICAgIC8vIFRPRE86IHRoaXMgY2FuIGJlIGZ1cnRoZXIgb3B0aW1pemVkIGJ5IHByb3Blcmx5IGFuYWx5emluZyBpbi1zY29wZSBiaW5kaW5nc1xuICAgIC8vIGFuZCBza2lwIGZvcmNlIHVwZGF0aW5nIG9uZXMgdGhhdCBkbyBub3QgYWN0dWFsbHkgdXNlIHNjb3BlIHZhcmlhYmxlcy5cbiAgICBpZiAoIW5lZWRzRm9yY2VVcGRhdGUpIHtcbiAgICAgICAgdmFyIHBhcmVudF8yID0gZWwucGFyZW50O1xuICAgICAgICB3aGlsZSAocGFyZW50XzIpIHtcbiAgICAgICAgICAgIGlmICgocGFyZW50XzIuc2xvdFNjb3BlICYmIHBhcmVudF8yLnNsb3RTY29wZSAhPT0gZW1wdHlTbG90U2NvcGVUb2tlbikgfHxcbiAgICAgICAgICAgICAgICBwYXJlbnRfMi5mb3IpIHtcbiAgICAgICAgICAgICAgICBuZWVkc0ZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJlbnRfMi5pZikge1xuICAgICAgICAgICAgICAgIG5lZWRzS2V5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmVudF8yID0gcGFyZW50XzIucGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBnZW5lcmF0ZWRTbG90cyA9IE9iamVjdC5rZXlzKHNsb3RzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGdlblNjb3BlZFNsb3Qoc2xvdHNba2V5XSwgc3RhdGUpOyB9KVxuICAgICAgICAuam9pbignLCcpO1xuICAgIHJldHVybiBcInNjb3BlZFNsb3RzOl91KFtcIi5jb25jYXQoZ2VuZXJhdGVkU2xvdHMsIFwiXVwiKS5jb25jYXQobmVlZHNGb3JjZVVwZGF0ZSA/IFwiLG51bGwsdHJ1ZVwiIDogXCJcIikuY29uY2F0KCFuZWVkc0ZvcmNlVXBkYXRlICYmIG5lZWRzS2V5ID8gXCIsbnVsbCxmYWxzZSxcIi5jb25jYXQoaGFzaChnZW5lcmF0ZWRTbG90cykpIDogXCJcIiwgXCIpXCIpO1xufVxuZnVuY3Rpb24gaGFzaChzdHIpIHtcbiAgICB2YXIgaGFzaCA9IDUzODE7XG4gICAgdmFyIGkgPSBzdHIubGVuZ3RoO1xuICAgIHdoaWxlIChpKSB7XG4gICAgICAgIGhhc2ggPSAoaGFzaCAqIDMzKSBeIHN0ci5jaGFyQ29kZUF0KC0taSk7XG4gICAgfVxuICAgIHJldHVybiBoYXNoID4+PiAwO1xufVxuZnVuY3Rpb24gY29udGFpbnNTbG90Q2hpbGQoZWwpIHtcbiAgICBpZiAoZWwudHlwZSA9PT0gMSkge1xuICAgICAgICBpZiAoZWwudGFnID09PSAnc2xvdCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbC5jaGlsZHJlbi5zb21lKGNvbnRhaW5zU2xvdENoaWxkKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2VuU2NvcGVkU2xvdChlbCwgc3RhdGUpIHtcbiAgICB2YXIgaXNMZWdhY3lTeW50YXggPSBlbC5hdHRyc01hcFsnc2xvdC1zY29wZSddO1xuICAgIGlmIChlbC5pZiAmJiAhZWwuaWZQcm9jZXNzZWQgJiYgIWlzTGVnYWN5U3ludGF4KSB7XG4gICAgICAgIHJldHVybiBnZW5JZihlbCwgc3RhdGUsIGdlblNjb3BlZFNsb3QsIFwibnVsbFwiKTtcbiAgICB9XG4gICAgaWYgKGVsLmZvciAmJiAhZWwuZm9yUHJvY2Vzc2VkKSB7XG4gICAgICAgIHJldHVybiBnZW5Gb3IoZWwsIHN0YXRlLCBnZW5TY29wZWRTbG90KTtcbiAgICB9XG4gICAgdmFyIHNsb3RTY29wZSA9IGVsLnNsb3RTY29wZSA9PT0gZW1wdHlTbG90U2NvcGVUb2tlbiA/IFwiXCIgOiBTdHJpbmcoZWwuc2xvdFNjb3BlKTtcbiAgICB2YXIgZm4gPSBcImZ1bmN0aW9uKFwiLmNvbmNhdChzbG90U2NvcGUsIFwiKXtcIikgK1xuICAgICAgICBcInJldHVybi
13835BcIi5jb25jYXQoZWwudGFnID09PSAndGVtcGxhdGUnXG4gICAgICAgICAgICA/IGVsLmlmICYmIGlzTGVnYWN5U3ludGF4XG4gICAgICAgICAgICAgICAgPyBcIihcIi5jb25jYXQoZWwuaWYsIFwiKT9cIikuY29uY2F0KGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSkgfHwgJ3VuZGVmaW5lZCcsIFwiOnVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgIDogZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlKSB8fCAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgOiBnZW5FbGVtZW50KGVsLCBzdGF0ZSksIFwifVwiKTtcbiAgICAvLyByZXZlcnNlIHByb3h5IHYtc2xvdCB3aXRob3V0IHNjb3BlIG9uIHRoaXMuJHNsb3RzXG4gICAgdmFyIHJldmVyc2VQcm94eSA9IHNsb3RTY29wZSA/IFwiXCIgOiBcIixwcm94eTp0cnVlXCI7XG4gICAgcmV0dXJuIFwie2tleTpcIi5jb25jYXQoZWwuc2xvdFRhcmdldCB8fCBcIlxcXCJkZWZhdWx0XFxcIlwiLCBcIixmbjpcIikuY29uY2F0KGZuKS5jb25jYXQocmV2ZXJzZVByb3h5LCBcIn1cIik7XG59XG5mdW5jdGlvbiBnZW5DaGlsZHJlbihlbCwgc3RhdGUsIGNoZWNrU2tpcCwgYWx0R2VuRWxlbWVudCwgYWx0R2VuTm9kZSkge1xuICAgIHZhciBjaGlsZHJlbiA9IGVsLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGVsXzEgPSBjaGlsZHJlblswXTtcbiAgICAgICAgLy8gb3B0aW1pemUgc2luZ2xlIHYtZm9yXG4gICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgIGVsXzEuZm9yICYmXG4gICAgICAgICAgICBlbF8xLnRhZyAhPT0gJ3RlbXBsYXRlJyAmJlxuICAgICAgICAgICAgZWxfMS50YWcgIT09ICdzbG90Jykge1xuICAgICAgICAgICAgdmFyIG5vcm1hbGl6YXRpb25UeXBlXzEgPSBjaGVja1NraXBcbiAgICAgICAgICAgICAgICA/IHN0YXRlLm1heWJlQ29tcG9uZW50KGVsXzEpXG4gICAgICAgICAgICAgICAgICAgID8gXCIsMVwiXG4gICAgICAgICAgICAgICAgICAgIDogXCIsMFwiXG4gICAgICAgICAgICAgICAgOiBcIlwiO1xuICAgICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KChhbHRHZW5FbGVtZW50IHx8IGdlbkVsZW1lbnQpKGVsXzEsIHN0YXRlKSkuY29uY2F0KG5vcm1hbGl6YXRpb25UeXBlXzEpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBub3JtYWxpemF0aW9uVHlwZSA9IGNoZWNrU2tpcFxuICAgICAgICAgICAgPyBnZXROb3JtYWxpemF0aW9uVHlwZShjaGlsZHJlbiwgc3RhdGUubWF5YmVDb21wb25lbnQpXG4gICAgICAgICAgICA6IDA7XG4gICAgICAgIHZhciBnZW5fMSA9IGFsdEdlbk5vZGUgfHwgZ2VuTm9kZTtcbiAgICAgICAgcmV0dXJuIFwiW1wiLmNvbmNhdChjaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGdlbl8xKGMsIHN0YXRlKTsgfSkuam9pbignLCcpLCBcIl1cIikuY29uY2F0KG5vcm1hbGl6YXRpb25UeXBlID8gXCIsXCIuY29uY2F0KG5vcm1hbGl6YXRpb25UeXBlKSA6ICcnKTtcbiAgICB9XG59XG4vLyBkZXRlcm1pbmUgdGhlIG5vcm1hbGl6YXRpb24gbmVlZGVkIGZvciB0aGUgY2hpbGRyZW4gYXJyYXkuXG4vLyAwOiBubyBub3JtYWxpemF0aW9uIG5lZWRlZFxuLy8gMTogc2ltcGxlIG5vcm1hbGl6YXRpb24gbmVlZGVkIChwb3NzaWJsZSAxLWxldmVsIGRlZXAgbmVzdGVkIGFycmF5KVxuLy8gMjogZnVsbCBub3JtYWxpemF0aW9uIG5lZWRlZFxuZnVuY3Rpb24gZ2V0Tm9ybWFsaXphdGlvblR5cGUoY2hpbGRyZW4sIG1heWJlQ29tcG9uZW50KSB7XG4gICAgdmFyIHJlcyA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2Y
13835XIgZWwgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgaWYgKGVsLnR5cGUgIT09IDEpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZWVkc05vcm1hbGl6YXRpb24oZWwpIHx8XG4gICAgICAgICAgICAoZWwuaWZDb25kaXRpb25zICYmXG4gICAgICAgICAgICAgICAgZWwuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIG5lZWRzTm9ybWFsaXphdGlvbihjLmJsb2NrKTsgfSkpKSB7XG4gICAgICAgICAgICByZXMgPSAyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heWJlQ29tcG9uZW50KGVsKSB8fFxuICAgICAgICAgICAgKGVsLmlmQ29uZGl0aW9ucyAmJiBlbC5pZkNvbmRpdGlvbnMuc29tZShmdW5jdGlvbiAoYykgeyByZXR1cm4gbWF5YmVDb21wb25lbnQoYy5ibG9jayk7IH0pKSkge1xuICAgICAgICAgICAgcmVzID0gMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gbmVlZHNOb3JtYWxpemF0aW9uKGVsKSB7XG4gICAgcmV0dXJuIGVsLmZvciAhPT0gdW5kZWZpbmVkIHx8IGVsLnRhZyA9PT0gJ3RlbXBsYXRlJyB8fCBlbC50YWcgPT09ICdzbG90Jztcbn1cbmZ1bmN0aW9uIGdlbk5vZGUobm9kZSwgc3RhdGUpIHtcbiAgICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgICAgIHJldHVybiBnZW5FbGVtZW50KG5vZGUsIHN0YXRlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9kZS50eXBlID09PSAzICYmIG5vZGUuaXNDb21tZW50KSB7XG4gICAgICAgIHJldHVybiBnZW5Db21tZW50KG5vZGUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdlblRleHQobm9kZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2VuVGV4dCh0ZXh0KSB7XG4gICAgcmV0dXJuIFwiX3YoXCIuY29uY2F0KHRleHQudHlwZSA9PT0gMlxuICAgICAgICA/IHRleHQuZXhwcmVzc2lvbiAvLyBubyBuZWVkIGZvciAoKSBiZWNhdXNlIGFscmVhZHkgd3JhcHBlZCBpbiBfcygpXG4gICAgICAgIDogdHJhbnNmb3JtU3BlY2lhbE5ld2xpbmVzKEpTT04uc3RyaW5naWZ5KHRleHQudGV4dCkpLCBcIilcIik7XG59XG5mdW5jdGlvbiBnZW5Db21tZW50KGNvbW1lbnQpIHtcbiAgICByZXR1cm4gXCJfZShcIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoY29tbWVudC50ZXh0KSwgXCIpXCIpO1xufVxuZnVuY3Rpb24gZ2VuU2xvdChlbCwgc3RhdGUpIHtcbiAgICB2YXIgc2xvdE5hbWUgPSBlbC5zbG90TmFtZSB8fCAnXCJkZWZhdWx0XCInO1xuICAgIHZhciBjaGlsZHJlbiA9IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSk7XG4gICAgdmFyIHJlcyA9IFwiX3QoXCIuY29uY2F0KHNsb3ROYW1lKS5jb25jYXQoY2hpbGRyZW4gPyBcIixmdW5jdGlvbigpe3JldHVybiBcIi5jb25jYXQoY2hpbGRyZW4sIFwifVwiKSA6ICcnKTtcbiAgICB2YXIgYXR0cnMgPSBlbC5hdHRycyB8fCBlbC5keW5hbWljQXR0cnNcbiAgICAgICAgPyBnZW5Qcm9wcygoZWwuYXR0cnMgfHwgW10pLmNvbmNhdChlbC5keW5hbWljQXR0cnMgfHwgW10pLm1hcChmdW5jdGlvbiAoYXR0cikgeyByZXR1cm4gKHtcbiAgICAgICAgICAgIC8vIHNsb3QgcHJvcHMgYXJlIGNhbWVsaXplZFxuICAgICAgICAgICAgbmFtZTogY2FtZWxpemUoYXR0ci5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlOiBhdHRyLnZhbHVlLFxuICAgICAgICAgICAgZHluYW1pYzogYXR0ci5keW5hbWljXG4gICAgICAgIH0pOyB9KSlcbiAgICAgICAgOiBudWxsO1xuICAgIHZhciBiaW5kID0gZWwuYXR0cnNNYXBbJ3YtYmluZCddO1xuICAgIGlmICgoYXR0cnMgfHwgYmluZCkgJiYgIWNoaWxkcmVuKSB7XG4gICAgICAgIHJlcyArPSBcIixudWxsXCI7XG4gICAgfVxuICAgIGlmIChhdHRycykge1xuICAgICAgICByZXMgKz0gXCIsXCIuY29uY2F0KGF0dHJzKTtcbiAgICB9XG4gICAgaWYgKGJpbmQpIHtcbiAgICAgICAgcmVzICs9IFwiXCIuY29uY2F0KGF0dHJzID8gJycgOiAnLG51bGwnLCBcIixcIikuY29uY2F0KGJpbmQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzICsgJyknO1xufVxuLy8gY29tcG9uZW50TmFtZSBpcyBlbC5jb21wb25lbnQsIHRha2UgaXQgYXMgYXJndW1lbnQgdG8gc2h1biBmbG93J3MgcGVzc2ltaXN0aWMgcmVmaW5lbWVudFxuZnVuY3Rpb24gZ2VuQ29tcG9uZW50KGNvbXBvbmVudE5hbWUsIGVsLCBzdGF0ZSkge1xuICAgIHZhciBjaGlsZHJlbiA9IGVsLmlubGluZVRlbXBsYXRlID8gbnVsbCA6IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSwgdHJ1ZSk7XG4gICAgcmV0dXJuIFwiX2MoXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiLFwiKS5jb25jYXQoZ2VuRGF0YShlbCwgc3RhdGUpKS5jb25jYXQoY2hpbGRyZW4gPyBcIixcIi5jb25jYXQoY2hpbGRyZW4pIDogJycsIFwiKVwiKTtcbn1cbmZ1bmN0aW9uIGdlblByb3BzKHByb3BzKSB7XG4gICAgdmFyIHN0YXRpY1Byb3BzID0gXCJcIjtcbiAgICB2YXIgZHluYW1pY1Byb3BzID0gXCJcIjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wID0gcHJvcHNbaV07XG4gICAgICAgIHZhciB2YWx1ZSA9IHRyYW5zZm9ybVNwZWNpYWxOZXdsaW5lcyhwcm9wLnZhbHVlKTtcbiAgICAgICAgaWYgKHByb3AuZHluYW1pYykge1xuICAgICAgICAgICAgZHluYW1pY1Byb3BzICs9IFwiXCIuY29uY2F0KHByb3AubmFtZSwgXCIsXCIpLmNvbmNhdCh2YWx1ZSwgXCIsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3RhdGljUHJvcHMgKz0gXCJcXFwiXCIuY29uY2F0KHByb3AubmFtZSwgXCJcXFwiOlwiKS5jb25jYXQodmFsdWUsIFwiLFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWNQcm9wcyA9IFwie1wiLmNvbmNhdChzdGF0aWNQcm9wcy5zbGljZSgwLCAtMSksIFwifVwiKTtcbiAgICBpZiAoZHluYW1pY1Byb3BzKSB7XG4gICAgICAgIHJldHVybiBcIl9kKFwiLmNvbmNhdChzdGF0aWNQcm9wcywgXCIsW1wiKS5jb25jYXQoZHluYW1pY1Byb3BzLnNsaWNlKDAsIC0xKSwgXCJdKVwiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgI
13835HJldHVybiBzdGF0aWNQcm9wcztcbiAgICB9XG59XG4vLyAjMzg5NSwgIzQyNjhcbmZ1bmN0aW9uIHRyYW5zZm9ybVNwZWNpYWxOZXdsaW5lcyh0ZXh0KSB7XG4gICAgcmV0dXJuIHRleHQucmVwbGFjZSgvXFx1MjAyOC9nLCAnXFxcXHUyMDI4JykucmVwbGFjZSgvXFx1MjAyOS9nLCAnXFxcXHUyMDI5Jyk7XG59XG5cbi8vIHRoZXNlIGtleXdvcmRzIHNob3VsZCBub3QgYXBwZWFyIGluc2lkZSBleHByZXNzaW9ucywgYnV0IG9wZXJhdG9ycyBsaWtlXG4vLyB0eXBlb2YsIGluc3RhbmNlb2YgYW5kIGluIGFyZSBhbGxvd2VkXG52YXIgcHJvaGliaXRlZEtleXdvcmRSRSA9IG5ldyBSZWdFeHAoJ1xcXFxiJyArXG4gICAgKCdkbyxpZixmb3IsbGV0LG5ldyx0cnksdmFyLGNhc2UsZWxzZSx3aXRoLGF3YWl0LGJyZWFrLGNhdGNoLGNsYXNzLGNvbnN0LCcgK1xuICAgICAgICAnc3VwZXIsdGhyb3csd2hpbGUseWllbGQsZGVsZXRlLGV4cG9ydCxpbXBvcnQscmV0dXJuLHN3aXRjaCxkZWZhdWx0LCcgK1xuICAgICAgICAnZXh0ZW5kcyxmaW5hbGx5LGNvbnRpbnVlLGRlYnVnZ2VyLGZ1bmN0aW9uLGFyZ3VtZW50cycpXG4gICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgIC5qb2luKCdcXFxcYnxcXFxcYicpICtcbiAgICAnXFxcXGInKTtcbi8vIHRoZXNlIHVuYXJ5IG9wZXJhdG9ycyBzaG91bGQgbm90IGJlIHVzZWQgYXMgcHJvcGVydHkvbWV0aG9kIG5hbWVzXG52YXIgdW5hcnlPcGVyYXRvcnNSRSA9IG5ldyBSZWdFeHAoJ1xcXFxiJyArXG4gICAgJ2RlbGV0ZSx0eXBlb2Ysdm9pZCcuc3BsaXQoJywnKS5qb2luKCdcXFxccypcXFxcKFteXFxcXCldKlxcXFwpfFxcXFxiJykgK1xuICAgICdcXFxccypcXFxcKFteXFxcXCldKlxcXFwpJyk7XG4vLyBzdHJpcCBzdHJpbmdzIGluIGV4cHJlc3Npb25zXG52YXIgc3RyaXBTdHJpbmdSRSA9IC8nKD86W14nXFxcXF18XFxcXC4pKid8XCIoPzpbXlwiXFxcXF18XFxcXC4pKlwifGAoPzpbXmBcXFxcXXxcXFxcLikqXFwkXFx7fFxcfSg/OlteYFxcXFxdfFxcXFwuKSpgfGAoPzpbXmBcXFxcXXxcXFxcLikqYC9nO1xuLy8gZGV0ZWN0IHByb2JsZW1hdGljIGV4cHJlc3Npb25zIGluIGEgdGVtcGxhdGVcbmZ1bmN0aW9uIGRldGVjdEVycm9ycyhhc3QsIHdhcm4pIHtcbiAgICBpZiAoYXN0KSB7XG4gICAgICAgIGNoZWNrTm9kZShhc3QsIHdhcm4pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrTm9kZShub2RlLCB3YXJuKSB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xuICAgICAgICBmb3IgKHZhciBuYW1lXzEgaW4gbm9kZS5hdHRyc01hcCkge1xuICAgICAgICAgICAgaWYgKGRpclJFLnRlc3QobmFtZV8xKSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IG5vZGUuYXR0cnNNYXBbbmFtZV8xXTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gbm9kZS5yYXdBdHRyc01hcFtuYW1lXzFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZV8xID09PSAndi1mb3InKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0Zvcihub2RlLCBcInYtZm9yPVxcXCJcIi5jb25jYXQodmFsdWUsIFwiXFxcIlwiKSwgd2FybiwgcmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWVfMSA9PT0gJ3Ytc2xvdCcgfHwgbmFtZV8xWzBdID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRnVuY3Rpb25QYXJhbWV0ZXJFeHByZXNzaW9uKHZhbHVlLCBcIlwiLmNvbmNhdChuYW1lXzEsIFwiPVxcXCJcIikuY29uY2F0KHZhbHVlLCBcIlxcXCJcIiksIHdhcm4sIHJhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvblJFLnRlc3QobmFtZV8xKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tFdmVudCh2YWx1ZSwgXCJcIi5jb25jYXQobmFtZV8xLCBcIj1cXFwiXCIpLmNvbmNhdCh2YWx1ZSwgXCJcXFwiXCIpLCB3YXJuLCByYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0V4cHJlc3Npb24odmFsdWUsIFwiXCIuY29uY2F0KG5hbWVfMSwgXCI9XFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIlwiKSwgd2FybiwgcmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjaGVja05vZGUobm9kZS5jaGlsZHJlbltpXSwgd2Fybik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAobm9kZS50eXBlID09PSAyKSB7XG4gICAgICAgIGNoZWNrRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24sIG5vZGUudGV4dCwgd2Fybiwgbm9kZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gY2hlY2tFdmVudChleHAsIHRleHQsIHdhcm4sIHJhbmdlKSB7XG4gICAgdmFyIHN0cmlwcGVkID0gZXhwLnJlcGxhY2Uoc3RyaXBTdHJpbmdSRSwgJycpO1xuICAgIHZhciBrZXl3b3JkTWF0Y2ggPSBzdHJpcHBlZC5tYXRjaCh1bmFyeU9wZXJhdG9yc1JFKTtcbiAgICBpZiAoa2V5d29yZE1hdGNoICYmIHN0cmlwcGVkLmNoYXJBdChrZXl3b3JkTWF0Y2guaW5kZXggLSAxKSAhPT0gJyQnKSB7XG4gICAgICAgIHdhcm4oXCJhdm9pZCB1c2luZyBKYXZhU2NyaXB0IHVuYXJ5IG9wZXJhdG9yIGFzIHByb3BlcnR5IG5hbWU6IFwiICtcbiAgICAgICAgICAgIFwiXFxcIlwiLmNvbmNhdChrZXl3b3JkTWF0Y2hbMF0sIFwiXFxcIiBpbiBleHByZXNzaW9uIFwiKS5jb25jYXQodGV4dC50cmltKCkpLCByYW5nZSk7XG4gICAgfVxuICAgIGNoZWNrRXhwcmVzc2lvbihleHAsIHRleHQsIHdhcm4sIHJhbmdlKTtcbn1cbmZ1bmN0aW9uIGNoZWNrRm9yKG5vZGUsIHRleHQsIHdhcm4sIHJhbmdlKSB7XG4gICAgY2hlY2tFeHByZXNzaW9uKG5vZGUuZm9yIHx8ICcnLCB0ZXh0LCB3YXJuLCByYW5nZSk7XG4gICAgY2hlY2tJZGVudGlmaWVyKG5vZGUuYWxpYXMsICd2LWZvciBhbGlhcycsIHRleHQsIHdhcm4sIHJhbmdlKTtcbiAgICBjaGVja0lkZW50aWZpZXIobm9kZS5pdGVyYXRvcjEsICd2LWZvciBpdGVyYXRvcicsIHRleHQsIHdhcm4sIHJhbmdlKTtcbiAgICBjaGVja0lkZW50aWZpZXIobm9kZS5pdGVyYXRvcjIsICd2LWZvciBpdGVyYXRvcicsIHRleHQsIHdhcm4sIHJhbmdlKTtcbn1cbmZ1bmN0aW9uIGNoZWNrSWRlbnRpZmllcihpZGVudCwgdHlwZSwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcbiAgICBpZiAodHlwZW9mIGlkZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IEZ1bmN0aW9uKFwidmFyIFwiLmNvbmNhdChpZGVudCwgXCI9X1wiKSk7XG4gICAgICAgI
13835H1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHdhcm4oXCJpbnZhbGlkIFwiLmNvbmNhdCh0eXBlLCBcIiBcXFwiXCIpLmNvbmNhdChpZGVudCwgXCJcXFwiIGluIGV4cHJlc3Npb246IFwiKS5jb25jYXQodGV4dC50cmltKCkpLCByYW5nZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBjaGVja0V4cHJlc3Npb24oZXhwLCB0ZXh0LCB3YXJuLCByYW5nZSkge1xuICAgIHRyeSB7XG4gICAgICAgIG5ldyBGdW5jdGlvbihcInJldHVybiBcIi5jb25jYXQoZXhwKSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHZhciBrZXl3b3JkTWF0Y2ggPSBleHBcbiAgICAgICAgICAgIC5yZXBsYWNlKHN0cmlwU3RyaW5nUkUsICcnKVxuICAgICAgICAgICAgLm1hdGNoKHByb2hpYml0ZWRLZXl3b3JkUkUpO1xuICAgICAgICBpZiAoa2V5d29yZE1hdGNoKSB7XG4gICAgICAgICAgICB3YXJuKFwiYXZvaWQgdXNpbmcgSmF2YVNjcmlwdCBrZXl3b3JkIGFzIHByb3BlcnR5IG5hbWU6IFwiICtcbiAgICAgICAgICAgICAgICBcIlxcXCJcIi5jb25jYXQoa2V5d29yZE1hdGNoWzBdLCBcIlxcXCJcXG4gIFJhdyBleHByZXNzaW9uOiBcIikuY29uY2F0KHRleHQudHJpbSgpKSwgcmFuZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd2FybihcImludmFsaWQgZXhwcmVzc2lvbjogXCIuY29uY2F0KGUubWVzc2FnZSwgXCIgaW5cXG5cXG5cIikgK1xuICAgICAgICAgICAgICAgIFwiICAgIFwiLmNvbmNhdChleHAsIFwiXFxuXFxuXCIpICtcbiAgICAgICAgICAgICAgICBcIiAgUmF3IGV4cHJlc3Npb246IFwiLmNvbmNhdCh0ZXh0LnRyaW0oKSwgXCJcXG5cIiksIHJhbmdlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrRnVuY3Rpb25QYXJhbWV0ZXJFeHByZXNzaW9uKGV4cCwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcbiAgICB0cnkge1xuICAgICAgICBuZXcgRnVuY3Rpb24oZXhwLCAnJyk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHdhcm4oXCJpbnZhbGlkIGZ1bmN0aW9uIHBhcmFtZXRlciBleHByZXNzaW9uOiBcIi5jb25jYXQoZS5tZXNzYWdlLCBcIiBpblxcblxcblwiKSArXG4gICAgICAgICAgICBcIiAgICBcIi5jb25jYXQoZXhwLCBcIlxcblxcblwiKSArXG4gICAgICAgICAgICBcIiAgUmF3IGV4cHJlc3Npb246IFwiLmNvbmNhdCh0ZXh0LnRyaW0oKSwgXCJcXG5cIiksIHJhbmdlKTtcbiAgICB9XG59XG5cbnZhciByYW5nZSA9IDI7XG5mdW5jdGlvbiBnZW5lcmF0ZUNvZGVGcmFtZShzb3VyY2UsIHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoc3RhcnQgPT09IHZvaWQgMCkgeyBzdGFydCA9IDA7IH1cbiAgICBpZiAoZW5kID09PSB2b2lkIDApIHsgZW5kID0gc291cmNlLmxlbmd0aDsgfVxuICAgIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgvXFxyP1xcbi8pO1xuICAgIHZhciBjb3VudCA9IDA7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY291bnQgKz0gbGluZXNbaV0ubGVuZ3RoICsgMTtcbiAgICAgICAgaWYgKGNvdW50ID49IHN0YXJ0KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gaSAtIHJhbmdlOyBqIDw9IGkgKyByYW5nZSB8fCBlbmQgPiBjb3VudDsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGogPCAwIHx8IGogPj0gbGluZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICByZXMucHVzaChcIlwiLmNvbmNhdChqICsgMSkuY29uY2F0KHJlcGVhdChcIiBcIiwgMyAtIFN0cmluZyhqICsgMSkubGVuZ3RoKSwgXCJ8ICBcIikuY29uY2F0KGxpbmVzW2pdKSk7XG4gICAgICAgICAgICAgICAgdmFyIGxpbmVMZW5ndGggPSBsaW5lc1tqXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGogPT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcHVzaCB1bmRlcmxpbmVcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhZCA9IHN0YXJ0IC0gKGNvdW50IC0gbGluZUxlbmd0aCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICB2Y
13835XIgbGVuZ3RoXzEgPSBlbmQgPiBjb3VudCA/IGxpbmVMZW5ndGggLSBwYWQgOiBlbmQgLSBzdGFydDtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goXCIgICB8ICBcIiArIHJlcGVhdChcIiBcIiwgcGFkKSArIHJlcGVhdChcIl5cIiwgbGVuZ3RoXzEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaiA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuZCA+IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoXzIgPSBNYXRoLm1pbihlbmQgLSBjb3VudCwgbGluZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXMucHVzaChcIiAgIHwgIFwiICsgcmVwZWF0KFwiXlwiLCBsZW5ndGhfMikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IGxpbmVMZW5ndGggKyAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXMuam9pbignXFxuJyk7XG59XG5mdW5jdGlvbiByZXBlYXQoc3RyLCBuKSB7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIGlmIChuID4gMCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgICAgICBpZiAobiAmIDEpXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cjtcbiAgICAgICAgICAgIG4gPj4+PSAxO1xuICAgICAgICAgICAgaWYgKG4gPD0gMClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIHN0ciArPSBzdHI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb24oY29kZSwgZXJyb3JzKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihjb2RlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJvcnMucHVzaCh7IGVycjogZXJyLCBjb2RlOiBjb2RlIH0pO1xuICAgICAgICByZXR1cm4gbm9vcDtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVDb21waWxlVG9GdW5jdGlvbkZuKGNvbXBpbGUpIHtcbiAgICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHJldHVybiBmdW5jdGlvbiBjb21waWxlVG9GdW5jdGlvbnModGVtcGxhdGUsIG9wdGlvbnMsIHZtKSB7XG4gICAgICAgIG9wdGlvbnMgPSBleHRlbmQoe30sIG9wdGlvbnMpO1xuICAgICAgICB2Y
13835XIgd2FybiA9IG9wdGlvbnMud2FybiB8fCB3YXJuJDI7XG4gICAgICAgIGRlbGV0ZSBvcHRpb25zLndhcm47XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgLy8gZGV0ZWN0IHBvc3NpYmxlIENTUCByZXN0cmljdGlvblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBuZXcgRnVuY3Rpb24oJ3JldHVybiAxJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChlLnRvU3RyaW5nKCkubWF0Y2goL3Vuc2FmZS1ldmFsfENTUC8pKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4oJ0l0IHNlZW1zIHlvdSBhcmUgdXNpbmcgdGhlIHN0YW5kYWxvbmUgYnVpbGQgb2YgVnVlLmpzIGluIGFuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2Vudmlyb25tZW50IHdpdGggQ29udGVudCBTZWN1cml0eSBQb2xpY3kgdGhhdCBwcm9oaWJpdHMgdW5zYWZlLWV2YWwuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSB0ZW1wbGF0ZSBjb21waWxlciBjYW5ub3Qgd29yayBpbiB0aGlzIGVudmlyb25tZW50LiBDb25zaWRlciAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdyZWxheGluZyB0aGUgcG9saWN5IHRvIGFsbG93IHVuc2FmZS1ldmFsIG9yIHByZS1jb21waWxpbmcgeW91ciAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICd0ZW1wbGF0ZXMgaW50byByZW5kZXIgZnVuY3Rpb25zLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayBjYWNoZVxuICAgICAgICB2Y
13835XIga2V5ID0gb3B0aW9ucy5kZWxpbWl0ZXJzXG4gICAgICAgICAgICA/IFN0cmluZyhvcHRpb25zLmRlbGltaXRlcnMpICsgdGVtcGxhdGVcbiAgICAgICAgICAgIDogdGVtcGxhdGU7XG4gICAgICAgIGlmIChjYWNoZVtrZXldKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVba2V5XTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb21waWxlXG4gICAgICAgIHZhciBjb21waWxlZCA9IGNvbXBpbGUodGVtcGxhdGUsIG9wdGlvbnMpO1xuICAgICAgICAvLyBjaGVjayBjb21waWxhdGlvbiBlcnJvcnMvdGlwc1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgaWYgKGNvbXBpbGVkLmVycm9ycyAmJiBjb21waWxlZC5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGlsZWQuZXJyb3JzLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oXCJFcnJvciBjb21waWxpbmcgdGVtcGxhdGU6XFxuXFxuXCIuY29uY2F0KGUubXNnLCBcIlxcblxcblwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb2RlRnJhbWUodGVtcGxhdGUsIGUuc3RhcnQsIGUuZW5kKSwgdm0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4oXCJFcnJvciBjb21waWxpbmcgdGVtcGxhdGU6XFxuXFxuXCIuY29uY2F0KHRlbXBsYXRlLCBcIlxcblxcblwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlZC5lcnJvcnMubWFwKGZ1bmN0aW9uIChlKSB7IHJldHVybiBcIi0gXCIuY29uY2F0KGUpOyB9KS5qb2luKCdcXG4nKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuJywgdm0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb21waWxlZC50aXBzICYmIGNvbXBpbGVkLnRpcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGlsZWQudGlwcy5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7IHJldHVybiB0aXAoZS5tc2csIHZtKTsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21waWxlZC50aXBzLmZvckVhY2goZnVuY3Rpb24gKG1zZykgeyByZXR1cm4gdGlwKG1zZywgdm0pOyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHVybiBjb2RlIGludG8gZnVuY3Rpb25zXG4gICAgICAgIHZhciByZXMgPSB7fTtcbiAgICAgICAgdmFyIGZuR2VuRXJyb3JzID0gW107XG4gICAgICAgIHJlcy5yZW5kZXIgPSBjcmVhdGVGdW5jdGlvbihjb21waWxlZC5yZW5kZXIsIGZuR2VuRXJyb3JzKTtcbiAgICAgICAgcmVzLnN0YXRpY1JlbmRlckZucyA9IGNvbXBpbGVkLnN0YXRpY1JlbmRlckZucy5tYXAoZnVuY3Rpb24gKGNvZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVGdW5jdGlvbihjb2RlLCBmbkdlbkVycm9ycyk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBjaGVjayBmdW5jdGlvbiBnZW5lcmF0aW9uIGVycm9ycy5cbiAgICAgICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlcmUgaXMgYSBidWcgaW4gdGhlIGNvbXBpbGVyIGl0c2VsZi5cbiAgICAgICAgLy8gbW9zdGx5IGZvciBjb2RlZ2VuIGRldmVsb3BtZW50IHVzZVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGlmICgoIWNvbXBpbGVkLmVycm9ycyB8fCAhY29tcGlsZWQuZXJyb3JzLmxlbmd0aCkgJiYgZm5HZW5FcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgd2FybihcIkZhaWxlZCB0byBnZW5lcmF0ZSByZW5kZXIgZnVuY3Rpb246XFxuXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICBmbkdlbkVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBfYS5lcnIsIGNvZGUgPSBfYS5jb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KGVyci50b1N0cmluZygpLCBcIiBpblxcblxcblwiKS5jb25jYXQoY29kZSwgXCJcXG5cIik7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbignXFxuJyksIHZtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGNhY2hlW2tleV0gPSByZXMpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBpbGVyQ3JlYXRvcihiYXNlQ29tcGlsZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBjcmVhdGVDb21waWxlcihiYXNlT3B0aW9ucykge1xuICAgICAgICBmdW5jdGlvbiBjb21waWxlKHRlbXBsYXRlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICB2Y
13835XIgZmluYWxPcHRpb25zID0gT2JqZWN0LmNyZWF0ZShiYXNlT3B0aW9ucyk7XG4gICAgICAgICAgICB2YXIgZXJyb3JzID0gW107XG4gICAgICAgICAgICB2YXIgdGlwcyA9IFtdO1xuICAgICAgICAgICAgdmFyIHdhcm4gPSBmdW5jdGlvbiAobXNnLCByYW5nZSwgdGlwKSB7XG4gICAgICAgICAgICAgICAgKHRpcCA/IHRpcHMgOiBlcnJvcnMpLnB1c2gobXNnKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgICAgICAgICAgICAgIHZhciBsZWFkaW5nU3BhY2VMZW5ndGhfMSA9IHRlbXBsYXRlLm1hdGNoKC9eXFxzKi8pWzBdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgd2FybiA9IGZ1bmN0aW9uIChtc2csIHJhbmdlLCB0aXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdHlwZW9mIG1zZyA9PT0gJ3N0cmluZycgPyB7IG1zZzogbXNnIH0gOiBtc2c7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnN0YXJ0ID0gcmFuZ2Uuc3RhcnQgKyBsZWFkaW5nU3BhY2VMZW5ndGhfMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlLmVuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZW5kID0gcmFuZ2UuZW5kICsgbGVhZGluZ1NwYWNlTGVuZ3RoXzE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKHRpcCA/IHRpcHMgOiBlcnJvcnMpLnB1c2goZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG1lcmdlIGN1c3RvbSBtb2R1bGVzXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubW9kdWxlcykge1xuICAgICAgICAgICAgICAgICAgICBmaW5hbE9wdGlvbnMubW9kdWxlcyA9IChiYXNlT3B0aW9ucy5tb2R1bGVzIHx8IFtdKS5jb25jYXQob3B0aW9ucy5tb2R1bGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbWVyZ2UgY3VzdG9tIGRpcmVjdGl2ZXNcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kaXJlY3RpdmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsT3B0aW9ucy5kaXJlY3RpdmVzID0gZXh0ZW5kKE9iamVjdC5jcmVhdGUoYmFzZU9wdGlvbnMuZGlyZWN0aXZlcyB8fCBudWxsKSwgb3B0aW9ucy5kaXJlY3RpdmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gY29weSBvdGhlciBvcHRpb25zXG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ21vZHVsZXMnICYmIGtleSAhPT0gJ2RpcmVjdGl2ZXMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbE9wdGlvbnNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsT3B0aW9ucy53YXJuID0gd2FybjtcbiAgICAgICAgICAgIHZhciBjb21waWxlZCA9IGJhc2VDb21waWxlKHRlbXBsYXRlLnRyaW0oKSwgZmluYWxPcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgZGV0ZWN0RXJyb3JzKGNvbXBpbGVkLmFzdCwgd2Fybik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21waWxlZC5lcnJvcnMgPSBlcnJvcnM7XG4gICAgICAgICAgICBjb21waWxlZC50aXBzID0gdGlwcztcbiAgICAgICAgICAgIHJldHVybiBjb21waWxlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29tcGlsZTogY29tcGlsZSxcbiAgICAgICAgICAgIGNvbXBpbGVUb0Z1bmN0aW9uczogY3JlYXRlQ29tcGlsZVRvRnVuY3Rpb25Gbihjb21waWxlKVxuICAgICAgICB9O1xuICAgIH07XG59XG5cbi8vIGBjcmVhdGVDb21waWxlckNyZWF0b3JgIGFsbG93cyBjcmVhdGluZyBjb21waWxlcnMgdGhhdCB1c2UgYWx0ZXJuYXRpdmVcbi8vIHBhcnNlci9vcHRpbWl6ZXIvY29kZWdlbiwgZS5nIHRoZSBTU1Igb3B0aW1pemluZyBjb21waWxlci5cbi8vIEhlcmUgd2UganVzdCBleHBvcnQgYSBkZWZhdWx0IGNvbXBpbGVyIHVzaW5nIHRoZSBkZWZhdWx0IHBhcnRzLlxudmFyIGNyZWF0ZUNvbXBpbGVyID0gY3JlYXRlQ29tcGlsZXJDcmVhdG9yKGZ1bmN0aW9uIGJhc2VDb21waWxlKHRlbXBsYXRlLCBvcHRpb25zKSB7XG4gICAgdmFyIGFzdCA9IHBhcnNlKHRlbXBsYXRlLnRyaW0oKSwgb3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbnMub3B0aW1pemUgIT09IGZhbHNlKSB7XG4gICAgICAgIG9wdGltaXplKGFzdCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHZhciBjb2RlID0gZ2VuZXJhdGUoYXN0LCBvcHRpb25zKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBhc3Q6IGFzdCxcbiAgICAgICAgcmVuZGVyOiBjb2RlLnJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBjb2RlLnN0YXRpY1JlbmRlckZuc1xuICAgIH07XG59KTtcblxudmFyIF9hID0gY3JlYXRlQ29tcGlsZXIoYmFzZU9wdGlvbnMpLCBjb21waWxlVG9GdW5jdGlvbnMgPSBfYS5jb21waWxlVG9GdW5jdGlvbnM7XG5cbi8vIGNoZWNrIHdoZXRoZXIgY3VycmVudCBicm93c2VyIGVuY29kZXMgYSBjaGFyIGluc2lkZSBhdHRyaWJ1dGUgdmFsdWVzXG52YXIgZGl2O1xuZnVuY3Rpb24gZ2V0U2hvdWxkRGVjb2RlKGhyZWYpIHtcbiAgICBkaXYgPSBkaXYgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGl2LmlubmVySFRNTCA9IGhyZWYgPyBcIjxhIGhyZWY9XFxcIlxcblxcXCIvPlwiIDogXCI8ZGl2IGE9XFxcIlxcblxcXCIvPlwiO1xuICAgIHJldHVybi
13835BkaXYuaW5uZXJIVE1MLmluZGV4T2YoJyYjMTA7JykgPiAwO1xufVxuLy8gIzM2NjM6IElFIGVuY29kZXMgbmV3bGluZXMgaW5zaWRlIGF0dHJpYnV0ZSB2YWx1ZXMgd2hpbGUgb3RoZXIgYnJvd3NlcnMgZG9uJ3RcbnZhciBzaG91bGREZWNvZGVOZXdsaW5lcyA9IGluQnJvd3NlciA/IGdldFNob3VsZERlY29kZShmYWxzZSkgOiBmYWxzZTtcbi8vICM2ODI4OiBjaHJvbWUgZW5jb2RlcyBjb250ZW50IGluIGFbaHJlZl1cbnZhciBzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYgPSBpbkJyb3dzZXJcbiAgICA/IGdldFNob3VsZERlY29kZSh0cnVlKVxuICAgIDogZmFsc2U7XG5cbnZhciBpZFRvVGVtcGxhdGUgPSBjYWNoZWQoZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGVsID0gcXVlcnkoaWQpO1xuICAgIHJldHVybiBlbCAmJiBlbC5pbm5lckhUTUw7XG59KTtcbnZhciBtb3VudCA9IFZ1ZS5wcm90b3R5cGUuJG1vdW50O1xuVnVlLnByb3RvdHlwZS4kbW91bnQgPSBmdW5jdGlvbiAoZWwsIGh5ZHJhdGluZykge1xuICAgIGVsID0gZWwgJiYgcXVlcnkoZWwpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChlbCA9PT0gZG9jdW1lbnQuYm9keSB8fCBlbCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgIHdhcm4kMihcIkRvIG5vdCBtb3VudCBWdWUgdG8gPGh0bWw+IG9yIDxib2R5PiAtIG1vdW50IHRvIG5vcm1hbCBlbGVtZW50cyBpbnN0ZWFkLlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHZhciBvcHRpb25zID0gdGhpcy4kb3B0aW9ucztcbiAgICAvLyByZXNvbHZlIHRlbXBsYXRlL2VsIGFuZCBjb252ZXJ0IHRvIHJlbmRlciBmdW5jdGlvblxuICAgIGlmICghb3B0aW9ucy5yZW5kZXIpIHtcbiAgICAgICAgdmFyIHRlbXBsYXRlID0gb3B0aW9ucy50ZW1wbGF0ZTtcbiAgICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRlbXBsYXRlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZS5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IGlkVG9UZW1wbGF0ZSh0ZW1wbGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4kMihcIlRlbXBsYXRlIGVsZW1lbnQgbm90IGZvdW5kIG9yIGlzIGVtcHR5OiBcIi5jb25jYXQob3B0aW9ucy50ZW1wbGF0ZSksIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGVtcGxhdGUubm9kZVR5cGUpIHtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLmlubmVySFRNTDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4kMignaW52YWxpZCB0ZW1wbGF0ZSBvcHRpb246JyArIHRlbXBsYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZWwpIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIHRlbXBsYXRlID0gZ2V0T3V0ZXJIVE1MKGVsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgICAgICAgICBtYXJrKCdjb21waWxlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2Y
13835XIgX2EgPSBjb21waWxlVG9GdW5jdGlvbnModGVtcGxhdGUsIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRTb3VyY2VSYW5nZTogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyxcbiAgICAgICAgICAgICAgICBzaG91bGREZWNvZGVOZXdsaW5lczogc2hvdWxkRGVjb2RlTmV3bGluZXMsXG4gICAgICAgICAgICAgICAgc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOiBzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYsXG4gICAgICAgICAgICAgICAgZGVsaW1pdGVyczogb3B0aW9ucy5kZWxpbWl0ZXJzLFxuICAgICAgICAgICAgICAgIGNvbW1lbnRzOiBvcHRpb25zLmNvbW1lbnRzXG4gICAgICAgICAgICB9LCB0aGlzKSwgcmVuZGVyID0gX2EucmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgPSBfYS5zdGF0aWNSZW5kZXJGbnM7XG4gICAgICAgICAgICBvcHRpb25zLnJlbmRlciA9IHJlbmRlcjtcbiAgICAgICAgICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zO1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25maWcucGVyZm9ybWFuY2UgJiYgbWFyaykge1xuICAgICAgICAgICAgICAgIG1hcmsoJ2NvbXBpbGUgZW5kJyk7XG4gICAgICAgICAgICAgICAgbWVhc3VyZShcInZ1ZSBcIi5jb25jYXQodGhpcy5fbmFtZSwgXCIgY29tcGlsZVwiKSwgJ2NvbXBpbGUnLCAnY29tcGlsZSBlbmQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW91bnQuY2FsbCh0aGlzLCBlbCwgaHlkcmF0aW5nKTtcbn07XG4vKipcbiAqIEdldCBvdXRlckhUTUwgb2YgZWxlbWVudHMsIHRha2luZyBjYXJlXG4gKiBvZiBTVkcgZWxlbWVudHMgaW4gSUUgYXMgd2VsbC5cbiAqL1xuZnVuY3Rpb24gZ2V0T3V0ZXJIVE1MKGVsKSB7XG4gICAgaWYgKGVsLm91dGVySFRNTCkge1xuICAgICAgICByZXR1cm4gZWwub3V0ZXJIVE1MO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWwuY2xvbmVOb2RlKHRydWUpKTtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5pbm5lckhUTUw7XG4gICAgfVxufVxuVnVlLmNvbXBpbGUgPSBjb21waWxlVG9GdW5jdGlvbnM7XG5cbmV4cG9ydCB7IEVmZmVjdFNjb3BlLCBjb21wdXRlZCwgY3VzdG9tUmVmLCBWdWUgYXMgZGVmYXVsdCwgZGVmaW5lQXN5bmNDb21wb25lbnQsIGRlZmluZUNvbXBvbmVudCwgZGVsLCBlZmZlY3RTY29wZSwgZ2V0Q3VycmVudEluc3RhbmNlLCBnZXRDdXJyZW50U2NvcGUsIGgsIGluamVjdCwgaXNQcm94eSwgaXNSZWFjdGl2ZSwgaXNSZWFkb25seSwgaXNSZWYsIGlzU2hhbGxvdywgbWFya1JhdywgbWVyZ2VEZWZhdWx0cywgbmV4dFRpY2ssIG9uQWN0aXZhdGVkLCBvbkJlZm9yZU1vdW50LCBvbkJlZm9yZVVubW91bnQsIG9uQmVmb3JlVXBkYXRlLCBvbkRlYWN0aXZhdGVkLCBvbkVycm9yQ2FwdHVyZWQsIG9uTW91bnRlZCwgb25SZW5kZXJUcmFja2VkLCBvblJlbmRlclRyaWdnZXJlZCwgb25TY29wZURpc3Bvc2UsIG9uU2VydmVyUHJlZmV0Y2gsIG9uVW5tb3VudGVkLCBvblVwZGF0ZWQsIHByb3ZpZGUsIHByb3h5UmVmcywgcmVhY3RpdmUsIHJlYWRvbmx5LCByZWYkMSBhcyByZWYsIHNldCwgc2hhbGxvd1JlYWN0aXZlLCBzaGFsbG93UmVhZG9ubHksIHNoYWxsb3dSZWYsIHRvUmF3LCB0b1JlZiwgdG9SZWZzLCB0cmlnZ2VyUmVmLCB1bnJlZiwgdXNlQXR0cnMsIHVzZUNzc01vZHVsZSwgdXNlQ3NzVmFycywgdXNlTGlzdGVuZXJzLCB1c2VTbG90cywgdmVyc2lvbiwgd2F0Y2gsIHdhdGNoRWZmZWN0LCB3YXRjaFBvc3RFZmZlY3QsIHdhdGNoU3luY0VmZmVjdCB9O1xuIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9PcGVuaW5nSG91cnNTdGF0dXMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc5ZTI5MGI4JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL09wZW5pbmdIb3Vyc1N0YXR1cy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL09wZW5pbmdIb3Vyc1N0YXR1cy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi92YXIvd3d3L3Z1ZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc3OWUyOTBiOCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc3OWUyOTBiOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc3OWUyOTBiOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vT3BlbmluZ0hvdXJzU3RhdHVzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03OWUyOTBiOCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc3OWUyOTBiOCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwiYXBwL2NvbXBvbmVudHMvT3BlbmluZ0hvdXJzL09wZW5pbmdIb3Vyc1N0YXR1cy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vT3BlbmluZ0hvdXJzU3RhdHVzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL09wZW5pbmdIb3Vyc1N0YXR1cy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/cnVsZVNldFsxXS5ydWxlc1syXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL09wZW5pbmdIb3Vyc1N0YXR1cy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzllMjkwYjgmXCIiLCIvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyIC8qIHNlcnZlciBvbmx5ICovLFxuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPVxuICAgIHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7XG4gICAgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpbmplY3RTdHlsZXMuY2FsbChcbiAgICAgICAgICAgI
13835HRoaXMsXG4gICAgICAgICAgICAob3B0aW9ucy5mdW5jdGlvbmFsID8gdGhpcy5wYXJlbnQgOiB0aGlzKS4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9uYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24oaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZyA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaykgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG4iLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZS
13835hmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfdGhyb3coZXJyKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpO1xuICAgICAgfVxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FzeW5jVG9HZW5lcmF0b3IsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgIFwiZGVmYXVsdFwiOiBvYmpcbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGV4cG9ydHM7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIGV4cG9ydHMgPSB7fSxcbiAgICBPcCA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHksXG4gICAgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKG9iaiwga2V5LCBkZXNjKSB7XG4gICAgICBvYmpba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgfSxcbiAgICAkU3ltYm9sID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgPyBTeW1ib2wgOiB7fSxcbiAgICBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcbiAgZnVuY3Rpb24gZGVmaW5lKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgIHdyaXRhYmxlOiAhMFxuICAgIH0pLCBvYmpba2V5XTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uIGRlZmluZShvYmosIGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yLFxuICAgICAgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpLFxuICAgICAgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcbiAgICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZ2VuZXJhdG9yLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dClcbiAgICB9KSwgZ2VuZXJhdG9yO1xuICB9XG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgICAgICBhcmc6IGZuLmNhbGwob2JqLCBhcmcpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ0aHJvd1wiLFxuICAgICAgICBhcmc6IGVyclxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZXhwb3J0cy53cmFwID0gd3JhcDtcbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBkZWZpbmUoSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG4gICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJiBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpICYmIChJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgZGVmaW5lKHByb3RvdHlwZSwgbWV0aG9kLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgI
13835HJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IsIFByb21pc2VJbXBsKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmcsXG4gICAgICAgICAgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiBcIm9iamVjdFwiID09IF90eXBlb2YodmFsdWUpICYmIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikgPyBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkgOiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uICh1bndyYXBwZWQpIHtcbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQsIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICB9XG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUltcGwoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPSBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICAgICAgaWYgKFwiZXhlY3V0aW5nXCIgPT09IHN0YXRlKSB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgaWYgKFwiY29tcGxldGVkXCIgPT09IHN0YXRlKSB7XG4gICAgICAgIGlmIChcInRocm93XCIgPT09IG1ldGhvZCkgdGhyb3cgYXJnO1xuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuICAgICAgZm9yIChjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZCwgY29udGV4dC5hcmcgPSBhcmc7Oykge1xuICAgICAgICB2Y
13835XIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gY29udGV4dC5tZXRob2QpIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKFwic3VzcGVuZGVkU3RhcnRcIiA9PT0gc3RhdGUpIHRocm93IHN0YXRlID0gXCJjb21wbGV0ZWRcIiwgY29udGV4dC5hcmc7XG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG4gICAgICAgIH0gZWxzZSBcInJldHVyblwiID09PSBjb250ZXh0Lm1ldGhvZCAmJiBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIHN0YXRlID0gXCJleGVjdXRpbmdcIjtcbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAoXCJub3JtYWxcIiA9PT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPSBjb250ZXh0LmRvbmUgPyBcImNvbXBsZXRlZFwiIDogXCJzdXNwZW5kZWRZaWVsZFwiLCByZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUgJiYgKHN0YXRlID0gXCJjb21wbGV0ZWRcIiwgY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZE5hbWUgPSBjb250ZXh0Lm1ldGhvZCxcbiAgICAgIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW21ldGhvZE5hbWVdO1xuICAgIGlmICh1bmRlZmluZWQgPT09IG1ldGhvZCkgcmV0dXJuIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBcInRocm93XCIgPT09IG1ldGhvZE5hbWUgJiYgZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQsIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpLCBcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBtZXRob2ROYW1lICYmIChjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBtZXRob2ROYW1lICsgXCInIG1ldGhvZFwiKSksIENvbnRpbnVlU2VudGluZWw7XG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcbiAgICBpZiAoXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSkgcmV0dXJuIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmcsIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcbiAgICByZXR1cm4gaW5mbyA/IGluZm8uZG9uZSA/IChjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZSwgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYywgXCJyZXR1cm5cIiAhPT0gY29udGV4dC5tZXRob2QgJiYgKGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCIsIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkKSwgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWwpIDogaW5mbyA6IChjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsKTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHtcbiAgICAgIHRyeUxvYzogbG9jc1swXVxuICAgIH07XG4gICAgMSBpbiBsb2NzICYmIChlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV0pLCAyIGluIGxvY3MgJiYgKGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdLCBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM10pLCB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIiwgZGVsZXRlIHJlY29yZC5hcmcsIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7XG4gICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgfV0sIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2Y
13835XIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGl0ZXJhYmxlLm5leHQpIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLFxuICAgICAgICAgIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsraSA8IGl0ZXJhYmxlLmxlbmd0aDspIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHJldHVybiBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV0sIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgICAgICAgcmV0dXJuIG5leHQudmFsdWUgPSB1bmRlZmluZWQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbmV4dDogZG9uZVJlc3VsdFxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIGRvbmU6ICEwXG4gICAgfTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZVByb3BlcnR5KEdwLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgZGVmaW5lUHJvcGVydHkoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZ2VuRnVuICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFjdG9yICYmIChjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkpO1xuICB9LCBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbiAoZ2VuRnVuKSB7XG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKSA6IChnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZShnZW5GdW4sIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSwgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApLCBnZW5GdW47XG4gIH0sIGV4cG9ydHMuYXdyYXAgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fYXdhaXQ6IGFyZ1xuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYXN5bmNJdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uIChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCwgUHJvbWlzZUltcGwpIHtcbiAgICB2b2lkIDAgPT09IFByb21pc2VJbXBsICYmIChQcm9taXNlSW1wbCA9IFByb21pc2UpO1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCksIFByb21pc2VJbXBsKTtcbiAgICByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pID8gaXRlciA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgfSk7XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCksIGRlZmluZShHcCwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoR3AsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoR3AsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KSwgZXhwb3J0cy5rZXlzID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHZhciBvYmplY3QgPSBPYmplY3QodmFsKSxcbiAgICAgIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBrZXlzLnB1c2goa2V5KTtcbiAgICByZXR1cm4ga2V5cy5yZXZlcnNlKCksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsga2V5cy5sZW5ndGg7KSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkgcmV0dXJuIG5leHQudmFsdWUgPSBrZXksIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGV4cG9ydHMudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoc2tpcFRlbXBSZXNldCkge1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQsIHRoaXMuZG9uZSA9ICExLCB0aGlzLmRlbGVnYXRlID0gbnVsbCwgdGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5hcmcgPSB1bmRlZmluZWQsIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpLCAhc2tpcFRlbXBSZXNldCkgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSBcInRcIiA9PT0gbmFtZS5jaGFyQXQoMCkgJiYgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiYgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSAmJiAodGhpc1tuYW1lXSA9IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzdG9wOi
13835BmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5kb25lID0gITA7XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcm9vdFJlY29yZC50eXBlKSB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBleGNlcHRpb247XG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmV0dXJuIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiLCByZWNvcmQuYXJnID0gZXhjZXB0aW9uLCBjb250ZXh0Lm5leHQgPSBsb2MsIGNhdWdodCAmJiAoY29udGV4dC5tZXRob2QgPSBcIm5leHRcIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQpLCAhIWNhdWdodDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldLFxuICAgICAgICAgIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgIGlmIChcInJvb3RcIiA9PT0gZW50cnkudHJ5TG9jKSByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpLFxuICAgICAgICAgICAgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgITApO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzRmluYWxseSkgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2Y
13835XIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiYgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZmluYWxseUVudHJ5ICYmIChcImJyZWFrXCIgPT09IHR5cGUgfHwgXCJjb250aW51ZVwiID09PSB0eXBlKSAmJiBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJiBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MgJiYgKGZpbmFsbHlFbnRyeSA9IG51bGwpO1xuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPSB0eXBlLCByZWNvcmQuYXJnID0gYXJnLCBmaW5hbGx5RW50cnkgPyAodGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MsIENvbnRpbnVlU2VudGluZWwpIDogdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHJlY29yZC50eXBlKSB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gcmVjb3JkLnR5cGUgfHwgXCJjb250aW51ZVwiID09PSByZWNvcmQudHlwZSA/IHRoaXMubmV4dCA9IHJlY29yZC5hcmcgOiBcInJldHVyblwiID09PSByZWNvcmQudHlwZSA/ICh0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmcsIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIiwgdGhpcy5uZXh0ID0gXCJlbmRcIikgOiBcIm5vcm1hbFwiID09PSByZWNvcmQudHlwZSAmJiBhZnRlckxvYyAmJiAodGhpcy5uZXh0ID0gYWZ0ZXJMb2MpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG4gICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2goZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2Y
13835XIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSByZXR1cm4gdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkoZW50cnkpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uIGRlbGVnYXRlWWllbGQoaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHVuZGVmaW5lZCksIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9LCBleHBvcnRzO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yob2JqKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsIi8vIFRPRE8oQmFiZWwgOCk6IFJlbW92ZSB0aGlzIGZpbGUuXG5cbnZhciBydW50aW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lXCIpKCk7XG5tb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG5cbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vcGFja2FnZXMvcnVudGltZS9ydW50aW1lLmpzI0w3MzY9XG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZ2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xuICB9IGVsc2Uge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG4gIH1cbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYn
13835BhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJpbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCBPcGVuaW5nSG91cnNTdGF0dXMgZnJvbSBcIi4vY29tcG9uZW50cy9PcGVuaW5nSG91cnMvT3BlbmluZ0hvdXJzU3RhdHVzXCI7XG5cbi8vIFN1cHBvcnQgbXVsdGlwbGUgdnVlIGNvbnRhY3QgY2FyZHMgb24gb25lIHBhZ2UuXG5jb25zdCB2dWVFbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJ2dWUtb3BlbmluZy1ob3Vycy1zdGF0dXNcIik7XG5jb25zdCBjb3VudCA9IHZ1ZUVsZW1lbnRzLmxlbmd0aDtcbmZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAvLyBDcmVhdGUgYSB2dWUgaW5zdGFuY2UgcGVyIG9wZW5pbmcgaG91cnMgY29tcG9uZW50LlxuICBuZXcgVnVlKHtcbiAgICBlbDogdnVlRWxlbWVudHNbaV0sXG4gICAgY29tcG9uZW50czoge09wZW5pbmdIb3Vyc1N0YXR1c31cbiAgfSk7XG59XG4iXSwibmFtZXMiOlsiX2F4aW9zIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZHJ1cGFsU2V0dGluZ3MiLCJkcnVwYWxTZXR0aW5ncyIsIm9wZW5pbmdIb3VycyIsInBhdGgiLCJfb3BlbmluZ0hvdXJzJGFwaUJhc2UiLCJhcGlCYXNlVXJsIiwiX3BhdGgkcGF0aFByZWZpeCIsInBhdGhQcmVmaXgiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0IiwiYXhpb3MiLCJjcmVhdGUiLCJiYXNlVVJMIiwiY29uY2F0Iiwid2luZG93IiwibG9jYXRpb24iLCJvcmlnaW4iLCJoZWFkZXJzIiwibW9kdWxlIiwidXRpbHMiLCJzZXR0bGUiLCJjb29raWVzIiwiYnVpbGRVUkwiLCJidWlsZEZ1bGxQYXRoIiwicGFyc2VIZWFkZXJzIiwiaXNVUkxTYW1lT3JpZ2luIiwiY3JlYXRlRXJyb3IiLCJ4aHJBZGFwdGVyIiwiY29uZmlnIiwiUHJvbWlzZSIsImRpc3BhdGNoWGhyUmVxdWVzdCIsInJlc29sdmUiLCJyZWplY3QiLCJyZXF1ZXN0RGF0YSIsImRhdGEiLCJyZXF1ZXN0SGVhZGVycyIsInJlc3BvbnNlVHlwZSIsImlzRm9ybURhdGEiLCJyZXF1ZXN0IiwiWE1MSHR0cFJlcXVlc3QiLCJhdXRoIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiQXV0aG9yaXphdGlvbiIsImJ0b2EiLCJmdWxsUGF0aCIsInVybCIsIm9wZW4iLCJtZXRob2QiLCJ0b1VwcGVyQ2FzZSIsInBhcmFtcyIsInBhcmFtc1NlcmlhbGl6ZXIiLCJ0aW1lb3V0Iiwib25sb2FkZW5kIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2VEYXRhIiwicmVzcG9uc2VUZXh0IiwicmVzcG9uc2UiLCJzdGF0dXMiLCJzdGF0dXNUZXh0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwiaGFuZGxlTG9hZCIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsImluZGV4T2YiLCJzZXRUaW1lb3V0Iiwib25hYm9ydCIsImhhbmRsZUFib3J0Iiwib25lcnJvciIsImhhbmRsZUVycm9yIiwib250aW1lb3V0IiwiaGFuZGxlVGltZW91dCIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJ0cmFuc2l0aW9uYWwiLCJjbGFyaWZ5VGltZW91dEVycm9yIiwiaXNTdGFuZGFyZEJyb3dzZXJFbnYiLCJ4c3JmVmFsdWUiLCJ3aXRoQ3JlZGVudGlhbHMiLCJ4c3JmQ29va2llTmFtZSIsInJlYWQiLCJ1bmRlZmluZWQiLCJ4c3JmSGVhZGVyTmFtZSIsImZvckVhY2giLCJzZXRSZXF1ZXN0SGVhZGVyIiwidmFsIiwia2V5IiwidG9Mb3dlckNhc2UiLCJpc1VuZGVmaW5lZCIsIm9uRG93bmxvYWRQcm9ncmVzcyIsImFkZEV2ZW50TGlzdGVuZXIiLCJvblVwbG9hZFByb2dyZXNzIiwidXBsb2FkIiwiY2FuY2VsVG9rZW4iLCJwcm9taXNlIiwidGhlbiIsIm9uQ2FuY2VsZWQiLCJjYW5jZWwiLCJhYm9ydCIsInNlbmQiLCJiaW5kIiwiQXhpb3MiLCJtZXJnZUNvbmZpZyIsImRlZmF1bHRzIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0Q29uZmlnIiwiY29udGV4dCIsImluc3RhbmNlIiwicHJvdG90eXBlIiwiZXh0ZW5kIiwiaW5zdGFuY2VDb25maWciLCJDYW5jZWwiLCJDYW5jZWxUb2tlbiIsImlzQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJzcHJlYWQiLCJpc0F4aW9zRXJyb3IiLCJtZXNzYWdlIiwidG9TdHJpbmciLCJfX0NBTkNFTF9fIiwiZXhlY3V0b3IiLCJUeXBlRXJyb3IiLCJyZXNvbHZlUHJvbWlzZSIsInByb21pc2VFeGVjdXRvciIsInRva2VuIiwicmVhc29uIiwidGhyb3dJZlJlcXVlc3RlZCIsInNvdXJjZSIsImMiLCJ2YWx1ZSIsIkludGVyY2VwdG9yTWFuYWdlciIsImRpc3BhdGNoUmVxdWVzdCIsInZhbGlkYXRvciIsInZhbGlkYXRvcnMiLCJpbnRlcmNlcHRvcnMiLCJhcmd1bWVudHMiLCJhc3NlcnRPcHRpb25zIiwic2lsZW50SlNPTlBhcnNpbmciLCJib29sZWFuIiwiZm9yY2VkSlNPTlBhcnNpbmciLCJyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiIsInN5bmNocm9ub3VzUmVx
13835dWVzdEludGVyY2VwdG9ycyIsInVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzIiwiaW50ZXJjZXB0b3IiLCJydW5XaGVuIiwic3luY2hyb25vdXMiLCJ1bnNoaWZ0IiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMiLCJwdXNoIiwiY2hhaW4iLCJBcnJheSIsImFwcGx5IiwibGVuZ3RoIiwic2hpZnQiLCJuZXdDb25maWciLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJlcnJvciIsImdldFVyaSIsInJlcGxhY2UiLCJmb3JFYWNoTWV0aG9kTm9EYXRhIiwiZm9yRWFjaE1ldGhvZFdpdGhEYXRhIiwiaGFuZGxlcnMiLCJ1c2UiLCJvcHRpb25zIiwiZWplY3QiLCJpZCIsImZuIiwiZm9yRWFjaEhhbmRsZXIiLCJoIiwiaXNBYnNvbHV0ZVVSTCIsImNvbWJpbmVVUkxzIiwicmVxdWVzdGVkVVJMIiwiZW5oYW5jZUVycm9yIiwiY29kZSIsIkVycm9yIiwidHJhbnNmb3JtRGF0YSIsInRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQiLCJjYWxsIiwidHJhbnNmb3JtUmVxdWVzdCIsIm1lcmdlIiwiY29tbW9uIiwiY2xlYW5IZWFkZXJDb25maWciLCJhZGFwdGVyIiwib25BZGFwdGVyUmVzb2x1dGlvbiIsInRyYW5zZm9ybVJlc3BvbnNlIiwib25BZGFwdGVyUmVqZWN0aW9uIiwidG9KU09OIiwibmFtZSIsImRlc2NyaXB0aW9uIiwibnVtYmVyIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwic3RhY2siLCJjb25maWcxIiwiY29uZmlnMiIsInZhbHVlRnJvbUNvbmZpZzJLZXlzIiwibWVyZ2VEZWVwUHJvcGVydGllc0tleXMiLCJkZWZhdWx0VG9Db25maWcyS2V5cyIsImRpcmVjdE1lcmdlS2V5cyIsImdldE1lcmdlZFZhbHVlIiwidGFyZ2V0IiwiaXNQbGFpbk9iamVjdCIsImlzQXJyYXkiLCJzbGljZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJwcm9wIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJheGlvc0tleXMiLCJvdGhlcktleXMiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiZmlsdGVyQXhpb3NLZXlzIiwidmFsaWRhdGVTdGF0dXMiLCJmbnMiLCJ0cmFuc2Zvcm0iLCJub3JtYWxpemVIZWFkZXJOYW1lIiwiREVGQVVMVF9DT05URU5UX1RZUEUiLCJzZXRDb250ZW50VHlwZUlmVW5zZXQiLCJnZXREZWZhdWx0QWRhcHRlciIsInByb2Nlc3MiLCJzdHJpbmdpZnlTYWZlbHkiLCJyYXdWYWx1ZSIsInBhcnNlciIsImVuY29kZXIiLCJpc1N0cmluZyIsIkpTT04iLCJwYXJzZSIsInRyaW0iLCJlIiwic3RyaW5naWZ5IiwiaXNBcnJheUJ1ZmZlciIsImlzQnVmZmVyIiwiaXNTdHJlYW0iLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0FycmF5QnVmZmVyVmlldyIsImJ1ZmZlciIsImlzVVJMU2VhcmNoUGFyYW1zIiwiaXNPYmplY3QiLCJzdHJpY3RKU09OUGFyc2luZyIsIm1heENvbnRlbnRMZW5ndGgiLCJtYXhCb2R5TGVuZ3RoIiwidGhpc0FyZyIsIndyYXAiLCJhcmdzIiwiaSIsImVuY29kZSIsInNlcmlhbGl6ZWRQYXJhbXMiLCJwYXJ0cyIsInNlcmlhbGl6ZSIsInBhcnNlVmFsdWUiLCJ2IiwiaXNEYXRlIiwidG9JU09TdHJpbmciLCJqb2luIiwiaGFzaG1hcmtJbmRleCIsInJlbGF0aXZlVVJMIiwic3RhbmRhcmRCcm93c2VyRW52Iiwid3JpdGUiLCJleHBpcmVzIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwiaXNOdW1iZXIiLCJEYXRlIiwidG9HTVRTdHJpbmciLCJkb2N1bWVudCIsIm1hdGNoIiwiUmVnRXhwIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVtb3ZlIiwibm93Iiwibm9uU3RhbmRhcmRCcm93c2VyRW52IiwidGVzdCIsInBheWxvYWQiLCJtc2llIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidXJsUGFyc2luZ05vZGUiLCJjcmVhdGVFbGVtZW50Iiwib3JpZ2luVVJMIiwicmVzb2x2ZVVSTCIsImhyZWYiLCJzZXRBdHRyaWJ1dGUiLCJwcm90b2NvbCIsImhvc3QiLCJzZWFyY2giLCJoYXNoIiwiaG9zdG5hbWUiLCJwb3J0IiwicGF0aG5hbWUiLCJjaGFyQXQiLCJyZXF1ZXN0VVJMIiwicGFyc2VkIiwibm9ybWFsaXplZE5hbWUiLCJwcm9jZXNzSGVhZGVyIiwiaWdub3JlRHVwbGljYXRlT2YiLCJzcGxpdCIsImxpbmUiLCJzdWJzdHIiLCJjYWxsYmFjayIsImFyciIsInBrZyIsInR5cGUiLCJ0aGluZyIsImRlcHJlY2F0ZWRXYXJuaW5ncyIsImN1cnJlbnRWZXJBcnIiLCJ2ZXJzaW9uIiwiaXNPbGRlclZlcnNpb24iLCJ0aGFuVmVyc2lvbiIsInBrZ1ZlcnNpb25BcnIiLCJkZXN0VmVyIiwiaXNEZXByZWNhdGVkIiwiZm9ybWF0TWVzc2FnZSIsIm9wdCIsImRlc2MiLCJvcHRzIiwiY29uc29sZSIsIndhcm4iLCJzY2hlbWEiLCJhbGxvd1Vua25vd24iLCJyZXN1bHQiLCJjb25zdHJ1Y3RvciIsIkZvcm1EYXRhIiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJnZXRQcm90b3R5cGVPZiIsImlzRnVuY3Rpb24iLCJwaXBlIiwiVVJMU2VhcmNoUGFyYW1zIiwic3RyIiwicHJvZHVjdCIsIm9iaiIsImwiLCJoYXNPd25Qcm9wZXJ0eSIsImFzc2lnblZhbHVlIiwiYSIsImIiLCJzdHJpcEJPTSIsImNvbnRlbnQiLCJjaGFyQ29kZUF0IiwiX2FwaSIsInByb3BzIiwibmlkIiwiU3RyaW5nIiwiZmllbGROYW1lIiwiRHJ1cGFsIiwib3BlbmluZ0hvdXIiLCJjb21wdXRlZCIsImlzUGFya2luZ1BhZ2UiLCJib2R5IiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJvcGVuaW5nSG91ck1lc3NhZ2UiLCJ0Iiwib3BlbmluZ0hvdXJDbGFzcyIsIm9wZW5zX3Nvb24iLCJjbG9zZXNfc29vbiIsImNsb3NlZCIsIm1ldGhvZHMiLCJnZXRPcGVuaW5nSG91cnMiLCJfdGhpcyIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiQXBpIiwiZ2V0IiwiX3JlZiIsInNlbnQiLCJzdG9wIiwiY3JlYXRlZCIsInJlbmRlciIsIl92bSIsIl9jIiwiX3NlbGYiLCJzdGF0aWNDbGFzcyIsImNsYXNzIiwiZG9tUHJvcHMiLCJpbm5lckhUTUwiLCJfcyIsIl92Iiwic3RhcnQiLCJlbmQiLCJfZSIsInN0YXRpY1JlbmRlckZucyIsIl93aXRoU3RyaXBwZWQiLCJlbXB0eU9iamVjdCIsImZyZWV6ZSIsImlzVW5kZWYiLCJpc0RlZiIsImlzVHJ1ZSIsImlzRmFsc2UiLCJpc1ByaW1pdGl2ZSIsIl90b1N0cmluZyIsInRvUmF3VHlwZSIsImlzUmVnRXhwIiwiaXNWYWxpZEFycmF
138355SW5kZXgiLCJuIiwicGFyc2VGbG9hdCIsIk1hdGgiLCJmbG9vciIsImlzRmluaXRlIiwiaXNQcm9taXNlIiwiY2F0Y2giLCJ0b051bWJlciIsImlzTmFOIiwibWFrZU1hcCIsImV4cGVjdHNMb3dlckNhc2UiLCJtYXAiLCJsaXN0IiwiaXNCdWlsdEluVGFnIiwiaXNSZXNlcnZlZEF0dHJpYnV0ZSIsInJlbW92ZSQyIiwiaXRlbSIsImxlbiIsImluZGV4Iiwic3BsaWNlIiwiaGFzT3duIiwiY2FjaGVkIiwiY2FjaGUiLCJjYWNoZWRGbiIsImhpdCIsImNhbWVsaXplUkUiLCJjYW1lbGl6ZSIsIl8iLCJjYXBpdGFsaXplIiwiaHlwaGVuYXRlUkUiLCJoeXBoZW5hdGUiLCJwb2x5ZmlsbEJpbmQiLCJjdHgiLCJib3VuZEZuIiwiX2xlbmd0aCIsIm5hdGl2ZUJpbmQiLCJiaW5kJDEiLCJGdW5jdGlvbiIsInRvQXJyYXkiLCJyZXQiLCJ0byIsIl9mcm9tIiwidG9PYmplY3QiLCJyZXMiLCJub29wIiwibm8iLCJpZGVudGl0eSIsImdlblN0YXRpY0tleXMkMSIsIm1vZHVsZXMiLCJyZWR1Y2UiLCJtIiwic3RhdGljS2V5cyIsImxvb3NlRXF1YWwiLCJpc09iamVjdEEiLCJpc09iamVjdEIiLCJpc0FycmF5QSIsImlzQXJyYXlCIiwiZXZlcnkiLCJnZXRUaW1lIiwia2V5c0EiLCJrZXlzQiIsImxvb3NlSW5kZXhPZiIsIm9uY2UiLCJjYWxsZWQiLCJoYXNDaGFuZ2VkIiwieCIsInkiLCJTU1JfQVRUUiIsIkFTU0VUX1RZUEVTIiwiTElGRUNZQ0xFX0hPT0tTIiwib3B0aW9uTWVyZ2VTdHJhdGVnaWVzIiwic2lsZW50IiwicHJvZHVjdGlvblRpcCIsImVudiIsIk5PREVfRU5WIiwiZGV2dG9vbHMiLCJwZXJmb3JtYW5jZSIsImVycm9ySGFuZGxlciIsIndhcm5IYW5kbGVyIiwiaWdub3JlZEVsZW1lbnRzIiwia2V5Q29kZXMiLCJpc1Jlc2VydmVkVGFnIiwiaXNSZXNlcnZlZEF0dHIiLCJpc1Vua25vd25FbGVtZW50IiwiZ2V0VGFnTmFtZXNwYWNlIiwicGFyc2VQbGF0Zm9ybVRhZ05hbWUiLCJtdXN0VXNlUHJvcCIsImFzeW5jIiwiX2xpZmVjeWNsZUhvb2tzIiwidW5pY29kZVJlZ0V4cCIsImlzUmVzZXJ2ZWQiLCJkZWYiLCJlbnVtZXJhYmxlIiwiZGVmaW5lUHJvcGVydHkiLCJ3cml0YWJsZSIsImNvbmZpZ3VyYWJsZSIsImJhaWxSRSIsInBhcnNlUGF0aCIsInNlZ21lbnRzIiwiaGFzUHJvdG8iLCJpbkJyb3dzZXIiLCJVQSIsImlzSUUiLCJpc0lFOSIsImlzRWRnZSIsImlzSU9TIiwiaXNGRiIsIm5hdGl2ZVdhdGNoIiwid2F0Y2giLCJzdXBwb3J0c1Bhc3NpdmUiLCJfaXNTZXJ2ZXIiLCJpc1NlcnZlclJlbmRlcmluZyIsImdsb2JhbCIsIlZVRV9FTlYiLCJfX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fIiwiaXNOYXRpdmUiLCJDdG9yIiwiaGFzU3ltYm9sIiwiU3ltYm9sIiwiUmVmbGVjdCIsIm93bktleXMiLCJfU2V0IiwiU2V0Iiwic2V0IiwiaGFzIiwiYWRkIiwiY2xlYXIiLCJjdXJyZW50SW5zdGFuY2UiLCJnZXRDdXJyZW50SW5zdGFuY2UiLCJwcm94eSIsInNldEN1cnJlbnRJbnN0YW5jZSIsInZtIiwiX3Njb3BlIiwib2ZmIiwib24iLCJWTm9kZSIsInRhZyIsImNoaWxkcmVuIiwidGV4dCIsImVsbSIsImNvbXBvbmVudE9wdGlvbnMiLCJhc3luY0ZhY3RvcnkiLCJucyIsImZuQ29udGV4dCIsImZuT3B0aW9ucyIsImZuU2NvcGVJZCIsImNvbXBvbmVudEluc3RhbmNlIiwicGFyZW50IiwicmF3IiwiaXNTdGF0aWMiLCJpc1Jvb3RJbnNlcnQiLCJpc0NvbW1lbnQiLCJpc0Nsb25lZCIsImlzT25jZSIsImFzeW5jTWV0YSIsImlzQXN5bmNQbGFjZWhvbGRlciIsImNyZWF0ZUVtcHR5Vk5vZGUiLCJub2RlIiwiY3JlYXRlVGV4dFZOb2RlIiwiY2xvbmVWTm9kZSIsInZub2RlIiwiY2xvbmVkIiwiaW5pdFByb3h5IiwiYWxsb3dlZEdsb2JhbHNfMSIsIndhcm5Ob25QcmVzZW50XzEiLCJ3YXJuJDIiLCJ3YXJuUmVzZXJ2ZWRQcmVmaXhfMSIsImhhc1Byb3h5XzEiLCJQcm94eSIsImlzQnVpbHRJbk1vZGlmaWVyXzEiLCJoYXNIYW5kbGVyXzEiLCJpc0FsbG93ZWQiLCIkZGF0YSIsImdldEhhbmRsZXJfMSIsIiRvcHRpb25zIiwiX3JlbmRlclByb3h5IiwiX19hc3NpZ24iLCJhc3NpZ24iLCJzIiwicCIsInVpZCQyIiwicGVuZGluZ0NsZWFudXBEZXBzIiwiY2xlYW51cERlcHMiLCJkZXAiLCJzdWJzIiwiX3BlbmRpbmciLCJEZXAiLCJhZGRTdWIiLCJzdWIiLCJyZW1vdmVTdWIiLCJkZXBlbmQiLCJpbmZvIiwiYWRkRGVwIiwib25UcmFjayIsImVmZmVjdCIsIm5vdGlmeSIsInNvcnQiLCJvblRyaWdnZXIiLCJ1cGRhdGUiLCJ0YXJnZXRTdGFjayIsInB1c2hUYXJnZXQiLCJwb3BUYXJnZXQiLCJwb3AiLCJhcnJheVByb3RvIiwiYXJyYXlNZXRob2RzIiwibWV0aG9kc1RvUGF0Y2giLCJvcmlnaW5hbCIsIm11dGF0b3IiLCJfaSIsIm9iIiwiX19vYl9fIiwiaW5zZXJ0ZWQiLCJvYnNlcnZlQXJyYXkiLCJhcnJheUtleXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiTk9fSU5JSVRJQUxfVkFMVUUiLCJzaG91bGRPYnNlcnZlIiwidG9nZ2xlT2JzZXJ2aW5nIiwibW9ja0RlcCIsIk9ic2VydmVyIiwic2hhbGxvdyIsIm1vY2siLCJ2bUNvdW50IiwiX19wcm90b19fIiwiZGVmaW5lUmVhY3RpdmUiLCJvYnNlcnZlIiwic3NyTW9ja1JlYWN0aXZpdHkiLCJpc0V4dGVuc2libGUiLCJfX3Zfc2tpcCIsImlzUmVmIiwiY3VzdG9tU2V0dGVyIiwicHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJnZXR0ZXIiLCJzZXR0ZXIiLCJjaGlsZE9iIiwicmVhY3RpdmVHZXR0ZXIiLCJkZXBlbmRBcnJheSIsInJlYWN0aXZlU2V0dGVyIiwibmV3VmFsIiwibmV3VmFsdWUiLCJvbGRWYWx1ZSIsImlzUmVhZG9ubHkiLCJtYXgiLCJfaXNWdWUiLCJkZWwiLCJyZWFjdGl2ZSIsIm1ha2VSZWFjdGl2ZSIsInNoYWxsb3dSZWFjdGl2ZSIsImV4aXN0aW5nT2IiLCJpc0NvbGxlY3Rpb25UeXBlIiwiaXNSZWFjdGl2ZSIsImlzU2hhbGxvdyIsIl9fdl9pc1NoYWxsb3ciLCJfX3ZfaXNSZWFkb25seSIsImlzUHJveHkiLCJ0b1JhdyIsIm9ic2VydmVkIiwibWFya1JhdyIsIlJlZkZsYWciLCJyIiwiX192X2lzUmVmIiwicmVmJDEiLCJjcmVhdGVSZWYiLCJzaGFsbG93UmVmIiwicmVmIiwidHJpZ2dlclJlZiIsInVucmVmIiwicHJveHlSZWZzIiwib2JqZWN0V2l0aFJlZnMiLCJwcm94eVdpdGhSZWZVbndyYXAiLCJjdXN0b21SZWYiLCJmYWN0b3J5IiwiX2EiLCJ0b1JlZnMiLCJvYmplY3QiLCJ0b1JlZiIsImRlZmF1bHRWYWx1ZSIsInJhd1RvUmVhZG9ubHlGbGFnIiwicmF3VG9TaGFsbG93UmVhZG9ubHlGbGFnIiwicmVhZG9ubHkiLCJjcmVhdGVSZWFkb25seSIsImV4aXN0aW5nRmxhZyIsImV4aXN0aW5nUHJveHkiLCJkZWZpbmVSZWFkb25seVByb3BlcnR5Iiwic2hhbGxvd1JlYWRvbmx5IiwiZ2V0dGVyT3JPcHRpb25zIiwiZGVidWdPcHRpb25zIiwib25seUdldHRlciIsIndhdGNoZXIiLCJXYXRjaGVyIiwibGF6eSIsImRpcnR5IiwiZXZhbHVhdGUiLCJtZWFzdXJlIiwicGVyZl8xIiwiY2xlYXJNYXJrcyIsImNsZWFyTWVhc3VyZXMiLCJzdGFydFRhZyIsImVuZF
13835RhZyIsIm5vcm1hbGl6ZUV2ZW50IiwicGFzc2l2ZSIsImNhcHR1cmUiLCJjcmVhdGVGbkludm9rZXIiLCJpbnZva2VyIiwiaW52b2tlV2l0aEVycm9ySGFuZGxpbmciLCJ1cGRhdGVMaXN0ZW5lcnMiLCJvbGRPbiIsImNyZWF0ZU9uY2VIYW5kbGVyIiwiY3VyIiwib2xkIiwiZXZlbnQiLCJtZXJnZVZOb2RlSG9vayIsImhvb2tLZXkiLCJob29rIiwib2xkSG9vayIsIndyYXBwZWRIb29rIiwibWVyZ2VkIiwiZXh0cmFjdFByb3BzRnJvbVZOb2RlRGF0YSIsInByb3BPcHRpb25zIiwiYXR0cnMiLCJhbHRLZXkiLCJrZXlJbkxvd2VyQ2FzZSIsInRpcCIsImZvcm1hdENvbXBvbmVudE5hbWUiLCJjaGVja1Byb3AiLCJwcmVzZXJ2ZSIsInNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuIiwibm9ybWFsaXplQ2hpbGRyZW4iLCJub3JtYWxpemVBcnJheUNoaWxkcmVuIiwiaXNUZXh0Tm9kZSIsIm5lc3RlZEluZGV4IiwibGFzdEluZGV4IiwibGFzdCIsIl9pc1ZMaXN0IiwiU0lNUExFX05PUk1BTElaRSIsIkFMV0FZU19OT1JNQUxJWkUiLCJjcmVhdGVFbGVtZW50JDEiLCJub3JtYWxpemF0aW9uVHlwZSIsImFsd2F5c05vcm1hbGl6ZSIsIl9jcmVhdGVFbGVtZW50IiwiaXMiLCJzY29wZWRTbG90cyIsIiR2bm9kZSIsIm5hdGl2ZU9uIiwicHJlIiwicmVzb2x2ZUFzc2V0IiwiY3JlYXRlQ29tcG9uZW50IiwiYXBwbHlOUyIsInJlZ2lzdGVyRGVlcEJpbmRpbmdzIiwiZm9yY2UiLCJjaGlsZCIsInN0eWxlIiwidHJhdmVyc2UiLCJyZW5kZXJMaXN0IiwiaXRlcmF0b3IiLCJkb25lIiwicmVuZGVyU2xvdCIsImZhbGxiYWNrUmVuZGVyIiwiYmluZE9iamVjdCIsInNjb3BlZFNsb3RGbiIsIiRzY29wZWRTbG90cyIsIm5vZGVzIiwiJHNsb3RzIiwic2xvdCIsIiRjcmVhdGVFbGVtZW50IiwicmVzb2x2ZUZpbHRlciIsImlzS2V5Tm90TWF0Y2giLCJleHBlY3QiLCJhY3R1YWwiLCJjaGVja0tleUNvZGVzIiwiZXZlbnRLZXlDb2RlIiwiYnVpbHRJbktleUNvZGUiLCJldmVudEtleU5hbWUiLCJidWlsdEluS2V5TmFtZSIsIm1hcHBlZEtleUNvZGUiLCJiaW5kT2JqZWN0UHJvcHMiLCJhc1Byb3AiLCJpc1N5bmMiLCJfbG9vcF8xIiwiY2FtZWxpemVkS2V5IiwiaHlwaGVuYXRlZEtleSIsIiRldmVudCIsInJlbmRlclN0YXRpYyIsImlzSW5Gb3IiLCJfc3RhdGljVHJlZXMiLCJ0cmVlIiwibWFya1N0YXRpYyQxIiwibWFya09uY2UiLCJtYXJrU3RhdGljTm9kZSIsImJpbmRPYmplY3RMaXN0ZW5lcnMiLCJleGlzdGluZyIsIm91cnMiLCJyZXNvbHZlU2NvcGVkU2xvdHMiLCJoYXNEeW5hbWljS2V5cyIsImNvbnRlbnRIYXNoS2V5IiwiJHN0YWJsZSIsIiRrZXkiLCJiaW5kRHluYW1pY0tleXMiLCJiYXNlT2JqIiwidmFsdWVzIiwicHJlcGVuZE1vZGlmaWVyIiwic3ltYm9sIiwiaW5zdGFsbFJlbmRlckhlbHBlcnMiLCJfbyIsIl9uIiwiX2wiLCJfdCIsIl9xIiwiX20iLCJfZiIsIl9rIiwiX2IiLCJfdSIsIl9nIiwiX2QiLCJfcCIsInJlc29sdmVTbG90cyIsInNsb3RzIiwibmFtZV8xIiwibmFtZV8yIiwiaXNXaGl0ZXNwYWNlIiwibm9ybWFsaXplU2NvcGVkU2xvdHMiLCJvd25lclZtIiwibm9ybWFsU2xvdHMiLCJwcmV2U2NvcGVkU2xvdHMiLCJoYXNOb3JtYWxTbG90cyIsImlzU3RhYmxlIiwiX25vcm1hbGl6ZWQiLCIkaGFzTm9ybWFsIiwia2V5XzEiLCJub3JtYWxpemVTY29wZWRTbG90Iiwia2V5XzIiLCJwcm94eU5vcm1hbFNsb3QiLCJub3JtYWxpemVkIiwiaW5pdFNldHVwIiwic2V0dXAiLCJfc2V0dXBDb250ZXh0IiwiY3JlYXRlU2V0dXBDb250ZXh0Iiwic2V0dXBSZXN1bHQiLCJfcHJvcHMiLCJfc2V0dXBTdGF0ZSIsIl9fc2ZjIiwiX3NldHVwUHJveHkiLCJleHBvc2VDYWxsZWQiLCJfYXR0cnNQcm94eSIsInN5bmNTZXR1cFByb3h5IiwiJGF0dHJzIiwibGlzdGVuZXJzIiwiX2xpc3RlbmVyc1Byb3h5IiwiJGxpc3RlbmVycyIsImluaXRTbG90c1Byb3h5IiwiZW1pdCIsIiRlbWl0IiwiZXhwb3NlIiwiZXhwb3NlZCIsImZyb20iLCJjaGFuZ2VkIiwiZGVmaW5lUHJveHlBdHRyIiwiX3Nsb3RzUHJveHkiLCJzeW5jU2V0dXBTbG90cyIsInVzZVNsb3RzIiwiZ2V0Q29udGV4dCIsInVzZUF0dHJzIiwidXNlTGlzdGVuZXJzIiwibWVyZ2VEZWZhdWx0cyIsImluaXRSZW5kZXIiLCJfdm5vZGUiLCJwYXJlbnRWbm9kZSIsIl9wYXJlbnRWbm9kZSIsInJlbmRlckNvbnRleHQiLCJfcmVuZGVyQ2hpbGRyZW4iLCIkcGFyZW50IiwiZCIsInBhcmVudERhdGEiLCJpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQiLCJfcGFyZW50TGlzdGVuZXJzIiwiY3VycmVudFJlbmRlcmluZ0luc3RhbmNlIiwicmVuZGVyTWl4aW4iLCJWdWUiLCIkbmV4dFRpY2siLCJuZXh0VGljayIsIl9yZW5kZXIiLCJfaXNNb3VudGVkIiwicmVuZGVyRXJyb3IiLCJlbnN1cmVDdG9yIiwiY29tcCIsImJhc2UiLCJfX2VzTW9kdWxlIiwidG9TdHJpbmdUYWciLCJjcmVhdGVBc3luY1BsYWNlaG9sZGVyIiwicmVzb2x2ZUFzeW5jQ29tcG9uZW50IiwiYmFzZUN0b3IiLCJlcnJvckNvbXAiLCJyZXNvbHZlZCIsIm93bmVyIiwib3duZXJzIiwibG9hZGluZyIsImxvYWRpbmdDb21wIiwib3duZXJzXzEiLCJzeW5jXzEiLCJ0aW1lckxvYWRpbmdfMSIsInRpbWVyVGltZW91dF8xIiwiJG9uIiwiZm9yY2VSZW5kZXJfMSIsInJlbmRlckNvbXBsZXRlZCIsIiRmb3JjZVVwZGF0ZSIsImNsZWFyVGltZW91dCIsInJlamVjdF8xIiwicmVzXzEiLCJjb21wb25lbnQiLCJkZWxheSIsImdldEZpcnN0Q29tcG9uZW50Q2hpbGQiLCJpbml0RXZlbnRzIiwiX2V2ZW50cyIsIl9oYXNIb29rRXZlbnQiLCJ1cGRhdGVDb21wb25lbnRMaXN0ZW5lcnMiLCJ0YXJnZXQkMSIsImFkZCQxIiwicmVtb3ZlJDEiLCIkb2ZmIiwiY3JlYXRlT25jZUhhbmRsZXIkMSIsIl90YXJnZXQiLCJvbmNlSGFuZGxlciIsIm9sZExpc3RlbmVycyIsImV2ZW50c01peGluIiwiaG9va1JFIiwiJG9uY2UiLCJpXzEiLCJjYnMiLCJjYiIsImxvd2VyQ2FzZUV2ZW50IiwiYWN0aXZlSW5zdGFuY2UiLCJzZXRBY3RpdmVJbnN0YW5jZSIsInByZXZBY3RpdmVJbnN0YW5jZSIsImluaXRMaWZlY3ljbGUiLCJhYnN0cmFjdCIsIiRjaGlsZHJlbiIsIiRyb290IiwiJHJlZnMiLCJfcHJvdmlkZWQiLCJfd2F0Y2hlciIsIl9pbmFjdGl2ZSIsIl9kaXJlY3RJbmFjdGl2ZSIsIl9pc0Rlc3Ryb3llZCIsIl9pc0JlaW5nRGVzdHJveWVkIiwibGlmZWN5Y2xlTWl4aW4iLCJfdXBkYXRlIiwiaHlkcmF0aW5nIiwicHJldkVsIiwiJGVsIiwicHJldlZub2RlIiwicmVzdG9yZUFjdGl2ZUluc3RhbmNlIiwiX19wYXRjaF9fIiwiX192dWVfXyIsIndyYXBwZXIiLCIkZGVzdHJveSIsImNhbGxIb29rJDEiLCJfZGF0YSIsIm1vdW50Q29tcG9uZW50IiwiZWwiLCJ0ZW1wbGF0ZSIsInVwZGF0ZUNvbXBvbmVudCIsIl9uYW1lIiwiX3VpZCIsIndhdGNoZXJPcHRpb25zIiwiYmVmb3JlIiwicHJlV2F0Y2hlcnMiLCJfcHJlV2F0Y2hlcnMiLCJydW4iLCJ1cGRhdGVDaGlsZENvbXBvbmVudCIsInByb3BzRGF0YSIsInJlbmRlckNoaWxkcmVuIiwibmV3U2NvcGVkU2xvdHMiLCJvbGRTY29wZWRTbG90cyIsImhhc0R5bmFtaWNTY29wZWRTbG90IiwibmVlZHNGb3JjZVVwZGF0ZSIsInByZXZWTm9kZSIsInByZXZMaXN0ZW5lcnMiLCJwcm9wS2V5cyIsIl9wcm9wS2V5cyIsInZhbGlkYXRlUHJv
13835cCIsImlzSW5JbmFjdGl2ZVRyZWUiLCJhY3RpdmF0ZUNoaWxkQ29tcG9uZW50IiwiZGlyZWN0IiwiZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50Iiwic2V0Q29udGV4dCIsImoiLCJNQVhfVVBEQVRFX0NPVU5UIiwicXVldWUiLCJhY3RpdmF0ZWRDaGlsZHJlbiIsImNpcmN1bGFyIiwid2FpdGluZyIsImZsdXNoaW5nIiwiaW5kZXgkMSIsInJlc2V0U2NoZWR1bGVyU3RhdGUiLCJjdXJyZW50Rmx1c2hUaW1lc3RhbXAiLCJnZXROb3ciLCJwZXJmb3JtYW5jZV8xIiwiY3JlYXRlRXZlbnQiLCJ0aW1lU3RhbXAiLCJzb3J0Q29tcGFyZUZuIiwicG9zdCIsImZsdXNoU2NoZWR1bGVyUXVldWUiLCJ1c2VyIiwiZXhwcmVzc2lvbiIsImFjdGl2YXRlZFF1ZXVlIiwidXBkYXRlZFF1ZXVlIiwiY2FsbEFjdGl2YXRlZEhvb2tzIiwiY2FsbFVwZGF0ZWRIb29rcyIsInF1ZXVlQWN0aXZhdGVkQ29tcG9uZW50IiwicXVldWVXYXRjaGVyIiwibm9SZWN1cnNlIiwiV0FUQ0hFUiIsIldBVENIRVJfQ0IiLCJXQVRDSEVSX0dFVFRFUiIsIldBVENIRVJfQ0xFQU5VUCIsIndhdGNoRWZmZWN0IiwiZG9XYXRjaCIsIndhdGNoUG9zdEVmZmVjdCIsImZsdXNoIiwid2F0Y2hTeW5jRWZmZWN0IiwiSU5JVElBTF9XQVRDSEVSX1ZBTFVFIiwiaW1tZWRpYXRlIiwiZGVlcCIsIndhcm5JbnZhbGlkU291cmNlIiwiZm9yY2VUcmlnZ2VyIiwiaXNNdWx0aVNvdXJjZSIsInNvbWUiLCJjbGVhbnVwIiwib25DbGVhbnVwIiwiYmFzZUdldHRlcl8xIiwib25TdG9wIiwiYWN0aXZlIiwidGVhcmRvd24iLCJhY3RpdmVFZmZlY3RTY29wZSIsIkVmZmVjdFNjb3BlIiwiZGV0YWNoZWQiLCJlZmZlY3RzIiwiY2xlYW51cHMiLCJzY29wZXMiLCJjdXJyZW50RWZmZWN0U2NvcGUiLCJmcm9tUGFyZW50IiwiZWZmZWN0U2NvcGUiLCJyZWNvcmRFZmZlY3RTY29wZSIsInNjb3BlIiwiZ2V0Q3VycmVudFNjb3BlIiwib25TY29wZURpc3Bvc2UiLCJwcm92aWRlIiwicmVzb2x2ZVByb3ZpZGVkIiwicGFyZW50UHJvdmlkZXMiLCJpbmplY3QiLCJ0cmVhdERlZmF1bHRBc0ZhY3RvcnkiLCJwcm92aWRlcyIsImVyciIsImhvb2tzIiwiZXJyb3JDYXB0dXJlZCIsImdsb2JhbEhhbmRsZUVycm9yIiwiaGFuZGxlciIsIl9oYW5kbGVkIiwibG9nRXJyb3IiLCJpc1VzaW5nTWljcm9UYXNrIiwiY2FsbGJhY2tzIiwicGVuZGluZyIsImZsdXNoQ2FsbGJhY2tzIiwiY29waWVzIiwidGltZXJGdW5jIiwicF8xIiwiTXV0YXRpb25PYnNlcnZlciIsImNvdW50ZXJfMSIsIm9ic2VydmVyIiwidGV4dE5vZGVfMSIsImNyZWF0ZVRleHROb2RlIiwiY2hhcmFjdGVyRGF0YSIsInNldEltbWVkaWF0ZSIsIl9yZXNvbHZlIiwidXNlQ3NzTW9kdWxlIiwibW9kIiwidXNlQ3NzVmFycyIsInZhcnMiLCJub2RlVHlwZSIsInNldFByb3BlcnR5IiwiZGVmaW5lQXN5bmNDb21wb25lbnQiLCJsb2FkZXIiLCJsb2FkaW5nQ29tcG9uZW50IiwiZXJyb3JDb21wb25lbnQiLCJzdXNwZW5zaWJsZSIsInVzZXJPbkVycm9yIiwib25FcnJvciIsInBlbmRpbmdSZXF1ZXN0IiwicmV0cmllcyIsInJldHJ5IiwibG9hZCIsInRoaXNSZXF1ZXN0IiwidXNlclJldHJ5IiwidXNlckZhaWwiLCJjcmVhdGVMaWZlQ3ljbGUiLCJob29rTmFtZSIsImZvcm1hdE5hbWUiLCJpbmplY3RIb29rIiwibWVyZ2VMaWZlY3ljbGVIb29rIiwib25CZWZvcmVNb3VudCIsIm9uTW91bnRlZCIsIm9uQmVmb3JlVXBkYXRlIiwib25VcGRhdGVkIiwib25CZWZvcmVVbm1vdW50Iiwib25Vbm1vdW50ZWQiLCJvbkFjdGl2YXRlZCIsIm9uRGVhY3RpdmF0ZWQiLCJvblNlcnZlclByZWZldGNoIiwib25SZW5kZXJUcmFja2VkIiwib25SZW5kZXJUcmlnZ2VyZWQiLCJpbmplY3RFcnJvckNhcHR1cmVkSG9vayIsIm9uRXJyb3JDYXB0dXJlZCIsImRlZmluZUNvbXBvbmVudCIsInNlZW5PYmplY3RzIiwiX3RyYXZlcnNlIiwic2VlbiIsImlzQSIsImlzRnJvemVuIiwiZGVwSWQiLCJ1aWQkMSIsImV4cE9yRm4iLCJpc1JlbmRlcldhdGNoZXIiLCJzeW5jIiwiZGVwcyIsIm5ld0RlcHMiLCJkZXBJZHMiLCJuZXdEZXBJZHMiLCJ0bXAiLCJzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24iLCJzb3VyY2VLZXkiLCJwcm94eUdldHRlciIsInByb3h5U2V0dGVyIiwiaW5pdFN0YXRlIiwiaW5pdFByb3BzJDEiLCJpbml0TWV0aG9kcyIsImluaXREYXRhIiwiaW5pdENvbXB1dGVkJDEiLCJpbml0V2F0Y2giLCJwcm9wc09wdGlvbnMiLCJpc1Jvb3QiLCJnZXREYXRhIiwiY29tcHV0ZWRXYXRjaGVyT3B0aW9ucyIsIndhdGNoZXJzIiwiX2NvbXB1dGVkV2F0Y2hlcnMiLCJpc1NTUiIsInVzZXJEZWYiLCJkZWZpbmVDb21wdXRlZCIsInNob3VsZENhY2hlIiwiY3JlYXRlQ29tcHV0ZWRHZXR0ZXIiLCJjcmVhdGVHZXR0ZXJJbnZva2VyIiwiY29tcHV0ZWRHZXR0ZXIiLCJjcmVhdGVXYXRjaGVyIiwiJHdhdGNoIiwic3RhdGVNaXhpbiIsImRhdGFEZWYiLCJwcm9wc0RlZiIsIiRzZXQiLCIkZGVsZXRlIiwidW53YXRjaEZuIiwiaW5pdFByb3ZpZGUiLCJwcm92aWRlT3B0aW9uIiwicHJvdmlkZWQiLCJpbml0SW5qZWN0aW9ucyIsInJlc29sdmVJbmplY3QiLCJwcm92aWRlS2V5IiwicHJvdmlkZURlZmF1bHQiLCJ1aWQiLCJpbml0TWl4aW4kMSIsIl9pbml0IiwiX2lzQ29tcG9uZW50IiwiaW5pdEludGVybmFsQ29tcG9uZW50IiwibWVyZ2VPcHRpb25zIiwicmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyIsIiRtb3VudCIsInZub2RlQ29tcG9uZW50T3B0aW9ucyIsIl9jb21wb25lbnRUYWciLCJzdXBlciIsInN1cGVyT3B0aW9ucyIsImNhY2hlZFN1cGVyT3B0aW9ucyIsIm1vZGlmaWVkT3B0aW9ucyIsInJlc29sdmVNb2RpZmllZE9wdGlvbnMiLCJleHRlbmRPcHRpb25zIiwiY29tcG9uZW50cyIsIm1vZGlmaWVkIiwibGF0ZXN0Iiwic2VhbGVkIiwic2VhbGVkT3B0aW9ucyIsIkZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0IiwiY29udGV4dFZtIiwiX29yaWdpbmFsIiwiaXNDb21waWxlZCIsIl9jb21waWxlZCIsIm5lZWROb3JtYWxpemF0aW9uIiwiaW5qZWN0aW9ucyIsIl9zY29wZUlkIiwiY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudCIsIm1lcmdlUHJvcHMiLCJjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0Iiwidm5vZGVzIiwiY2xvbmUiLCJkZXZ0b29sc01ldGEiLCJnZXRDb21wb25lbnROYW1lIiwiX19uYW1lIiwiY29tcG9uZW50Vk5vZGVIb29rcyIsImluaXQiLCJrZWVwQWxpdmUiLCJtb3VudGVkTm9kZSIsInByZXBhdGNoIiwiY3JlYXRlQ29tcG9uZW50SW5zdGFuY2VGb3JWbm9kZSIsIm9sZFZub2RlIiwiaW5zZXJ0IiwiZGVzdHJveSIsImhvb2tzVG9NZXJnZSIsIl9iYXNlIiwiY2lkIiwibW9kZWwiLCJ0cmFuc2Zvcm1Nb2RlbCIsImZ1bmN0aW9uYWwiLCJpbnN0YWxsQ29tcG9uZW50SG9va3MiLCJpbmxpbmVUZW1wbGF0ZSIsInRvTWVyZ2UiLCJfbWVyZ2VkIiwibWVyZ2VIb29rIiwiZjEiLCJmMiIsImdlbmVyYXRlQ29tcG9uZW50VHJhY2UiLCJoYXNDb25zb2xlXzEiLCJjbGFzc2lmeVJFXzEiLCJjbGFzc2lmeV8xIiwibXNnIiwidHJhY2UiLCJpbmNsdWRlRmlsZSIsImZpbGUiLCJfX2ZpbGUiLCJyZXBlYXRfMSIsIm
13835N1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSIsInN0cmF0cyIsImRlZmF1bHRTdHJhdCIsIm1lcmdlRGF0YSIsInJlY3Vyc2l2ZSIsInRvVmFsIiwiZnJvbVZhbCIsIm1lcmdlRGF0YU9yRm4iLCJwYXJlbnRWYWwiLCJjaGlsZFZhbCIsIm1lcmdlZERhdGFGbiIsIm1lcmdlZEluc3RhbmNlRGF0YUZuIiwiaW5zdGFuY2VEYXRhIiwiZGVmYXVsdERhdGEiLCJkZWR1cGVIb29rcyIsIm1lcmdlQXNzZXRzIiwiYXNzZXJ0T2JqZWN0VHlwZSIsInBhcmVudF8xIiwiY2hlY2tDb21wb25lbnRzIiwidmFsaWRhdGVDb21wb25lbnROYW1lIiwibm9ybWFsaXplUHJvcHMiLCJub3JtYWxpemVJbmplY3QiLCJub3JtYWxpemVEaXJlY3RpdmVzJDEiLCJkaXJzIiwiZGlyZWN0aXZlcyIsImV4dGVuZHMiLCJtaXhpbnMiLCJtZXJnZUZpZWxkIiwic3RyYXQiLCJ3YXJuTWlzc2luZyIsImFzc2V0cyIsImNhbWVsaXplZElkIiwiUGFzY2FsQ2FzZUlkIiwiYWJzZW50IiwiYm9vbGVhbkluZGV4IiwiZ2V0VHlwZUluZGV4IiwiQm9vbGVhbiIsInN0cmluZ0luZGV4IiwiZ2V0UHJvcERlZmF1bHRWYWx1ZSIsInByZXZTaG91bGRPYnNlcnZlIiwiYXNzZXJ0UHJvcCIsImdldFR5cGUiLCJyZXF1aXJlZCIsInZhbGlkIiwiZXhwZWN0ZWRUeXBlcyIsImFzc2VydGVkVHlwZSIsImFzc2VydFR5cGUiLCJleHBlY3RlZFR5cGUiLCJoYXZlRXhwZWN0ZWRUeXBlcyIsImdldEludmFsaWRUeXBlTWVzc2FnZSIsInNpbXBsZUNoZWNrUkUiLCJmdW5jdGlvblR5cGVDaGVja1JFIiwiaXNTYW1lVHlwZSIsInJlY2VpdmVkVHlwZSIsImlzRXhwbGljYWJsZSIsImlzQm9vbGVhbiIsInN0eWxlVmFsdWUiLCJOdW1iZXIiLCJFWFBMSUNBQkxFX1RZUEVTIiwiZWxlbSIsImluaXRVc2UiLCJwbHVnaW4iLCJpbnN0YWxsZWRQbHVnaW5zIiwiX2luc3RhbGxlZFBsdWdpbnMiLCJpbnN0YWxsIiwiaW5pdE1peGluIiwibWl4aW4iLCJpbml0RXh0ZW5kIiwiU3VwZXIiLCJTdXBlcklkIiwiY2FjaGVkQ3RvcnMiLCJfQ3RvciIsIlN1YiIsIlZ1ZUNvbXBvbmVudCIsImluaXRQcm9wcyIsImluaXRDb21wdXRlZCIsIkNvbXAiLCJpbml0QXNzZXRSZWdpc3RlcnMiLCJkZWZpbml0aW9uIiwiX2dldENvbXBvbmVudE5hbWUiLCJtYXRjaGVzIiwicGF0dGVybiIsInBydW5lQ2FjaGUiLCJrZWVwQWxpdmVJbnN0YW5jZSIsImVudHJ5IiwicHJ1bmVDYWNoZUVudHJ5IiwiY3VycmVudCIsInBhdHRlcm5UeXBlcyIsIktlZXBBbGl2ZSIsImluY2x1ZGUiLCJleGNsdWRlIiwiY2FjaGVWTm9kZSIsInZub2RlVG9DYWNoZSIsImtleVRvQ2FjaGUiLCJwYXJzZUludCIsImRlc3Ryb3llZCIsIm1vdW50ZWQiLCJ1cGRhdGVkIiwiYnVpbHRJbkNvbXBvbmVudHMiLCJpbml0R2xvYmFsQVBJIiwiY29uZmlnRGVmIiwidXRpbCIsImRlbGV0ZSIsIm9ic2VydmFibGUiLCJzc3JDb250ZXh0IiwiYWNjZXB0VmFsdWUiLCJhdHRyIiwiaXNFbnVtZXJhdGVkQXR0ciIsImlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSIsImNvbnZlcnRFbnVtZXJhdGVkVmFsdWUiLCJpc0ZhbHN5QXR0clZhbHVlIiwiaXNCb29sZWFuQXR0ciIsInhsaW5rTlMiLCJpc1hsaW5rIiwiZ2V0WGxpbmtQcm9wIiwiZ2VuQ2xhc3NGb3JWbm9kZSIsInBhcmVudE5vZGUiLCJjaGlsZE5vZGUiLCJtZXJnZUNsYXNzRGF0YSIsInJlbmRlckNsYXNzIiwiZHluYW1pY0NsYXNzIiwic3RyaW5naWZ5Q2xhc3MiLCJzdHJpbmdpZnlBcnJheSIsInN0cmluZ2lmeU9iamVjdCIsInN0cmluZ2lmaWVkIiwibmFtZXNwYWNlTWFwIiwic3ZnIiwibWF0aCIsImlzSFRNTFRhZyIsImlzU1ZHIiwiaXNQcmVUYWciLCJ1bmtub3duRWxlbWVudENhY2hlIiwiSFRNTFVua25vd25FbGVtZW50IiwiSFRNTEVsZW1lbnQiLCJpc1RleHRJbnB1dFR5cGUiLCJxdWVyeSIsInNlbGVjdGVkIiwicXVlcnlTZWxlY3RvciIsInRhZ05hbWUiLCJtdWx0aXBsZSIsImNyZWF0ZUVsZW1lbnROUyIsIm5hbWVzcGFjZSIsImNyZWF0ZUNvbW1lbnQiLCJpbnNlcnRCZWZvcmUiLCJuZXdOb2RlIiwicmVmZXJlbmNlTm9kZSIsInJlbW92ZUNoaWxkIiwiYXBwZW5kQ2hpbGQiLCJuZXh0U2libGluZyIsInNldFRleHRDb250ZW50IiwidGV4dENvbnRlbnQiLCJzZXRTdHlsZVNjb3BlIiwic2NvcGVJZCIsIm5vZGVPcHMiLCJyZWdpc3RlclJlZiIsImlzUmVtb3ZhbCIsInJlZlZhbHVlIiwiJHJlZnNWYWx1ZSIsImlzRm9yIiwicmVmSW5Gb3IiLCJfaXNTdHJpbmciLCJfaXNSZWYiLCJyZWZzIiwic2V0U2V0dXBSZWYiLCJpbmNsdWRlcyIsImVtcHR5Tm9kZSIsInNhbWVWbm9kZSIsInNhbWVJbnB1dFR5cGUiLCJ0eXBlQSIsInR5cGVCIiwiY3JlYXRlS2V5VG9PbGRJZHgiLCJiZWdpbklkeCIsImVuZElkeCIsImNyZWF0ZVBhdGNoRnVuY3Rpb24iLCJiYWNrZW5kIiwiZW1wdHlOb2RlQXQiLCJjcmVhdGVSbUNiIiwiY2hpbGRFbG0iLCJyZW1vdmVOb2RlIiwiaW5WUHJlIiwiaWdub3JlIiwiY3JlYXRpbmdFbG1JblZQcmUiLCJjcmVhdGVFbG0iLCJpbnNlcnRlZFZub2RlUXVldWUiLCJwYXJlbnRFbG0iLCJyZWZFbG0iLCJuZXN0ZWQiLCJvd25lckFycmF5Iiwic2V0U2NvcGUiLCJjcmVhdGVDaGlsZHJlbiIsImludm9rZUNyZWF0ZUhvb2tzIiwiaXNSZWFjdGl2YXRlZCIsImluaXRDb21wb25lbnQiLCJyZWFjdGl2YXRlQ29tcG9uZW50IiwicGVuZGluZ0luc2VydCIsImlzUGF0Y2hhYmxlIiwiaW5uZXJOb2RlIiwidHJhbnNpdGlvbiIsImFjdGl2YXRlIiwiY2hlY2tEdXBsaWNhdGVLZXlzIiwiaV8yIiwiYW5jZXN0b3IiLCJhZGRWbm9kZXMiLCJzdGFydElkeCIsImludm9rZURlc3Ryb3lIb29rIiwicmVtb3ZlVm5vZGVzIiwiY2giLCJyZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rIiwicm0iLCJpXzMiLCJ1cGRhdGVDaGlsZHJlbiIsIm9sZENoIiwibmV3Q2giLCJyZW1vdmVPbmx5Iiwib2xkU3RhcnRJZHgiLCJuZXdTdGFydElkeCIsIm9sZEVuZElkeCIsIm9sZFN0YXJ0Vm5vZGUiLCJvbGRFbmRWbm9kZSIsIm5ld0VuZElkeCIsIm5ld1N0YXJ0Vm5vZGUiLCJuZXdFbmRWbm9kZSIsIm9sZEtleVRvSWR4IiwiaWR4SW5PbGQiLCJ2bm9kZVRvTW92ZSIsImNhbk1vdmUiLCJwYXRjaFZub2RlIiwiZmluZElkeEluT2xkIiwic2VlbktleXMiLCJpXzQiLCJpXzUiLCJoeWRyYXRlIiwicG9zdHBhdGNoIiwiaW52b2tlSW5zZXJ0SG9vayIsImluaXRpYWwiLCJpXzYiLCJoeWRyYXRpb25CYWlsZWQiLCJpc1JlbmRlcmVkTW9kdWxlIiwiYXNzZXJ0Tm9kZU1hdGNoIiwiaGFzQ2hpbGROb2RlcyIsImNoaWxkcmVuTWF0Y2giLCJmaXJzdENoaWxkIiwiaV83IiwiY2hpbGROb2RlcyIsImZ1bGxJbnZva2UiLCJwYXRjaCIsImlzSW5pdGlhbFBhdGNoIiwiaXNSZWFsRWxlbWVudCIsImhhc0F0dHJpYnV0ZSIsInJlbW92ZUF0dHJpYnV0ZSIsIm9sZEVsbSIsIl9sZWF2ZUNiIiwicGF0Y2hhYmxlIiwiaV84IiwiaV85IiwiaW5zZXJ0XzEiLCJpXzEwIiwi
13835ZGlyZWN0aXZlcyQxIiwidXBkYXRlRGlyZWN0aXZlcyIsInVuYmluZERpcmVjdGl2ZXMiLCJpc0NyZWF0ZSIsImlzRGVzdHJveSIsIm9sZERpcnMiLCJub3JtYWxpemVEaXJlY3RpdmVzIiwibmV3RGlycyIsImRpcnNXaXRoSW5zZXJ0IiwiZGlyc1dpdGhQb3N0cGF0Y2giLCJvbGREaXIiLCJkaXIiLCJjYWxsSG9vayIsIm9sZEFyZyIsImFyZyIsImNvbXBvbmVudFVwZGF0ZWQiLCJjYWxsSW5zZXJ0IiwiZW1wdHlNb2RpZmllcnMiLCJtb2RpZmllcnMiLCJnZXRSYXdEaXJOYW1lIiwic2V0dXBEZWYiLCJyYXdOYW1lIiwiYmFzZU1vZHVsZXMiLCJ1cGRhdGVBdHRycyIsImluaGVyaXRBdHRycyIsIm9sZEF0dHJzIiwiX3ZfYXR0cl9wcm94eSIsInNldEF0dHIiLCJyZW1vdmVBdHRyaWJ1dGVOUyIsImlzSW5QcmUiLCJiYXNlU2V0QXR0ciIsInNldEF0dHJpYnV0ZU5TIiwiX19pZXBoIiwiYmxvY2tlcl8xIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInVwZGF0ZUNsYXNzIiwib2xkRGF0YSIsImNscyIsInRyYW5zaXRpb25DbGFzcyIsIl90cmFuc2l0aW9uQ2xhc3NlcyIsIl9wcmV2Q2xhc3MiLCJrbGFzcyQxIiwidmFsaWREaXZpc2lvbkNoYXJSRSIsInBhcnNlRmlsdGVycyIsImV4cCIsImluU2luZ2xlIiwiaW5Eb3VibGUiLCJpblRlbXBsYXRlU3RyaW5nIiwiaW5SZWdleCIsImN1cmx5Iiwic3F1YXJlIiwicGFyZW4iLCJsYXN0RmlsdGVySW5kZXgiLCJmaWx0ZXJzIiwicHVzaEZpbHRlciIsIndyYXBGaWx0ZXIiLCJiYXNlV2FybiIsInJhbmdlIiwicGx1Y2tNb2R1bGVGdW5jdGlvbiIsImFkZFByb3AiLCJkeW5hbWljIiwicmFuZ2VTZXRJdGVtIiwicGxhaW4iLCJhZGRBdHRyIiwiZHluYW1pY0F0dHJzIiwiYWRkUmF3QXR0ciIsImF0dHJzTWFwIiwiYXR0cnNMaXN0IiwiYWRkRGlyZWN0aXZlIiwiaXNEeW5hbWljQXJnIiwicHJlcGVuZE1vZGlmaWVyTWFya2VyIiwiYWRkSGFuZGxlciIsImltcG9ydGFudCIsInByZXZlbnQiLCJyaWdodCIsIm1pZGRsZSIsImV2ZW50cyIsIm5hdGl2ZSIsIm5hdGl2ZUV2ZW50cyIsIm5ld0hhbmRsZXIiLCJnZXRSYXdCaW5kaW5nQXR0ciIsInJhd0F0dHJzTWFwIiwiZ2V0QmluZGluZ0F0dHIiLCJnZXRTdGF0aWMiLCJkeW5hbWljVmFsdWUiLCJnZXRBbmRSZW1vdmVBdHRyIiwic3RhdGljVmFsdWUiLCJyZW1vdmVGcm9tTWFwIiwiZ2V0QW5kUmVtb3ZlQXR0ckJ5UmVnZXgiLCJnZW5Db21wb25lbnRNb2RlbCIsImJhc2VWYWx1ZUV4cHJlc3Npb24iLCJ2YWx1ZUV4cHJlc3Npb24iLCJhc3NpZ25tZW50IiwiZ2VuQXNzaWdubWVudENvZGUiLCJwYXJzZU1vZGVsIiwiY2hyIiwiZXhwcmVzc2lvblBvcyIsImV4cHJlc3Npb25FbmRQb3MiLCJsYXN0SW5kZXhPZiIsImVvZiIsImlzU3RyaW5nU3RhcnQiLCJwYXJzZVN0cmluZyIsInBhcnNlQnJhY2tldCIsImluQnJhY2tldCIsInN0cmluZ1F1b3RlIiwid2FybiQxIiwiUkFOR0VfVE9LRU4iLCJDSEVDS0JPWF9SQURJT19UT0tFTiIsIm1vZGVsJDEiLCJfd2FybiIsImdlblNlbGVjdCIsImdlbkNoZWNrYm94TW9kZWwiLCJnZW5SYWRpb01vZGVsIiwiZ2VuRGVmYXVsdE1vZGVsIiwidmFsdWVCaW5kaW5nIiwidHJ1ZVZhbHVlQmluZGluZyIsImZhbHNlVmFsdWVCaW5kaW5nIiwic2VsZWN0ZWRWYWwiLCJ2YWx1ZV8xIiwidHlwZUJpbmRpbmciLCJiaW5kaW5nIiwibmVlZENvbXBvc2l0aW9uR3VhcmQiLCJub3JtYWxpemVFdmVudHMiLCJldmVudF8xIiwiY2hhbmdlIiwidXNlTWljcm90YXNrRml4IiwiYXR0YWNoZWRUaW1lc3RhbXBfMSIsIm9yaWdpbmFsXzEiLCJfd3JhcHBlciIsImN1cnJlbnRUYXJnZXQiLCJvd25lckRvY3VtZW50IiwidXBkYXRlRE9NTGlzdGVuZXJzIiwic3ZnQ29udGFpbmVyIiwidXBkYXRlRE9NUHJvcHMiLCJvbGRQcm9wcyIsIl92YWx1ZSIsInN0ckN1ciIsInNob3VsZFVwZGF0ZVZhbHVlIiwiY2hlY2tWYWwiLCJ
13835jb21wb3NpbmciLCJpc05vdEluRm9jdXNBbmREaXJ0eSIsImlzRGlydHlXaXRoTW9kaWZpZXJzIiwibm90SW5Gb2N1cyIsImFjdGl2ZUVsZW1lbnQiLCJfdk1vZGlmaWVycyIsInBhcnNlU3R5bGVUZXh0IiwiY3NzVGV4dCIsImxpc3REZWxpbWl0ZXIiLCJwcm9wZXJ0eURlbGltaXRlciIsIm5vcm1hbGl6ZVN0eWxlRGF0YSIsIm5vcm1hbGl6ZVN0eWxlQmluZGluZyIsInN0YXRpY1N0eWxlIiwiYmluZGluZ1N0eWxlIiwiZ2V0U3R5bGUiLCJjaGVja0NoaWxkIiwic3R5bGVEYXRhIiwiY3NzVmFyUkUiLCJpbXBvcnRhbnRSRSIsInNldFByb3AiLCJub3JtYWxpemUiLCJ2ZW5kb3JOYW1lcyIsImVtcHR5U3R5bGUiLCJjYXBOYW1lIiwidXBkYXRlU3R5bGUiLCJvbGRTdGF0aWNTdHlsZSIsIm9sZFN0eWxlQmluZGluZyIsIm5vcm1hbGl6ZWRTdHlsZSIsIm9sZFN0eWxlIiwibmV3U3R5bGUiLCJzdHlsZSQxIiwid2hpdGVzcGFjZVJFJDEiLCJhZGRDbGFzcyIsImdldEF0dHJpYnV0ZSIsInJlbW92ZUNsYXNzIiwidGFyIiwicmVzb2x2ZVRyYW5zaXRpb24iLCJjc3MiLCJhdXRvQ3NzVHJhbnNpdGlvbiIsImVudGVyQ2xhc3MiLCJlbnRlclRvQ2xhc3MiLCJlbnRlckFjdGl2ZUNsYXNzIiwibGVhdmVDbGFzcyIsImxlYXZlVG9DbGFzcyIsImxlYXZlQWN0aXZlQ2xhc3MiLCJoYXNUcmFuc2l0aW9uIiwiVFJBTlNJVElPTiIsIkFOSU1BVElPTiIsInRyYW5zaXRpb25Qcm9wIiwidHJhbnNpdGlvbkVuZEV2ZW50IiwiYW5pbWF0aW9uUHJvcCIsImFuaW1hdGlvbkVuZEV2ZW50Iiwib250cmFuc2l0aW9uZW5kIiwib253ZWJraXR0cmFuc2l0aW9uZW5kIiwib25hbmltYXRpb25lbmQiLCJvbndlYmtpdGFuaW1hdGlvbmVuZCIsInJhZiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm5leHRGcmFtZSIsImFkZFRyYW5zaXRpb25DbGFzcyIsInRyYW5zaXRpb25DbGFzc2VzIiwicmVtb3ZlVHJhbnNpdGlvbkNsYXNzIiwid2hlblRyYW5zaXRpb25FbmRzIiwiZ2V0VHJhbnNpdGlvbkluZm8iLCJwcm9wQ291bnQiLCJlbmRlZCIsIm9uRW5kIiwidHJhbnNmb3JtUkUiLCJzdHlsZXMiLCJnZXRDb21wdXRlZFN0eWxlIiwidHJhbnNpdGlvbkRlbGF5cyIsInRyYW5zaXRpb25EdXJhdGlvbnMiLCJ0cmFuc2l0aW9uVGltZW91dCIsImdldFRpbWVvdXQiLCJhbmltYXRpb25EZWxheXMiLCJhbmltYXRpb25EdXJhdGlvbnMiLCJhbmltYXRpb25UaW1lb3V0IiwiaGFzVHJhbnNmb3JtIiwiZGVsYXlzIiwiZHVyYXRpb25zIiwidG9NcyIsImVudGVyIiwidG9nZ2xlRGlzcGxheSIsImNhbmNlbGxlZCIsIl9lbnRlckNiIiwiYXBwZWFyQ2xhc3MiLCJhcHBlYXJUb0NsYXNzIiwiYXBwZWFyQWN0aXZlQ2xhc3MiLCJiZWZvcmVFbnRlciIsImFmdGVyRW50ZXIiLCJlbnRlckNhbmNlbGxlZCIsImJlZm9yZUFwcGVhciIsImFwcGVhciIsImFmdGVyQXBwZWFyIiwiYXBwZWFyQ2FuY2VsbGVkIiwiZHVyYXRpb24iLCJ0cmFuc2l0aW9uTm9kZSIsImlzQXBwZWFyIiwic3RhcnRDbGFzcyIsImFjdGl2ZUNsYXNzIiwidG9DbGFzcyIsImJlZm9yZUVudGVySG9vayIsImVudGVySG9vayIsImFmdGVyRW50ZXJIb29rIiwiZW50ZXJDYW5jZWxsZWRIb29rIiwiZXhwbGljaXRFbnRlckR1cmF0aW9uIiwiY2hlY2tEdXJhdGlvbiIsImV4cGVjdHNDU1MiLCJ1c2VyV2FudHNDb250cm9sIiwiZ2V0SG9va0FyZ3VtZW50c0xlbmd0aCIsInNob3ciLCJwZW5kaW5nTm9kZSIsImlzVmFsaWREdXJhdGlvbiIsImxlYXZlIiwiYmVmb3JlTGVhdmUiLCJhZnRlckxlYXZlIiwibGVhdmVDYW5jZWxsZWQiLCJkZWxheUxlYXZlIiwiZXhwbGljaXRMZWF2ZUR1cmF0aW9uIiwicGVyZm9ybUxlYXZlIiwiaW52b2tlckZucyIsIl9lbnRlciIsInBsYXRmb3JtTW9kdWxlcyIsIm1vZHVsZXMkMSIsInZtb2RlbCIsInRyaWdnZXIiLCJkaXJlY3RpdmUiLCJfdk9wdGlvbnMiLCJzZXRTZWxlY3RlZCIsImdldFZhbHVlIiwib25Db21wb3NpdGlvblN0YXJ0Iiwib25Db21wb3NpdGlvbkVuZCIsInByZXZPcHRpb25zXzEiLCJjdXJPcHRpb25zXzEiLCJvIiwibmVlZFJlc2V0IiwiaGFzTm9NYXRjaGluZ09wdGlvbiIsImFjdHVhbGx5U2V0U2VsZWN0ZWQiLCJpc011bHRpcGxlIiwib3B0aW9uIiwic2VsZWN0ZWRJbmRleCIsImluaXRFdmVudCIsImRpc3BhdGNoRXZlbnQiLCJsb2NhdGVOb2RlIiwib3JpZ2luYWxEaXNwbGF5IiwiX192T3JpZ2luYWxEaXNwbGF5IiwiZGlzcGxheSIsInVuYmluZCIsInBsYXRmb3JtRGlyZWN0aXZlcyIsInRyYW5zaXRpb25Qcm9wcyIsIm1vZGUiLCJnZXRSZWFsQ2hpbGQiLCJjb21wT3B0aW9ucyIsImV4dHJhY3RUcmFuc2l0aW9uRGF0YSIsInBsYWNlaG9sZGVyIiwicmF3Q2hpbGQiLCJoYXNQYXJlbnRUcmFuc2l0aW9uIiwiaXNTYW1lQ2hpbGQiLCJvbGRDaGlsZCIsImlzTm90VGV4dE5vZGUiLCJpc1ZTaG93RGlyZWN0aXZlIiwiVHJhbnNpdGlvbiIsIl9sZWF2aW5nIiwib2xkUmF3Q2hpbGQiLCJkZWxheWVkTGVhdmVfMSIsIm1vdmVDbGFzcyIsIlRyYW5zaXRpb25Hcm91cCIsImJlZm9yZU1vdW50Iiwia2VwdCIsInByZXZDaGlsZHJlbiIsInJhd0NoaWxkcmVuIiwidHJhbnNpdGlvbkRhdGEiLCJyZW1vdmVkIiwicG9zIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaGFzTW92ZSIsImNhbGxQZW5kaW5nQ2JzIiwicmVjb3JkUG9zaXRpb24iLCJhcHBseVRyYW5zbGF0aW9uIiwiX3JlZmxvdyIsIm9mZnNldEhlaWdodCIsIm1vdmVkIiwiZWxfMSIsIldlYmtpdFRyYW5zZm9ybSIsInRyYW5zaXRpb25EdXJhdGlvbiIsIl9tb3ZlQ2IiLCJwcm9wZXJ0eU5hbWUiLCJfaGFzTW92ZSIsImNsb25lTm9kZSIsIm5ld1BvcyIsIm9sZFBvcyIsImR4IiwibGVmdCIsImR5IiwidG9wIiwicGxhdGZvcm1Db21wb25lbnRzIiwiZGVmYXVsdFRhZ1JFIiwicmVnZXhFc2NhcGVSRSIsImJ1aWxkUmVnZXgiLCJkZWxpbWl0ZXJzIiwiY2xvc2UiLCJwYXJzZVRleHQiLCJ0YWdSRSIsInRva2VucyIsInJhd1Rva2VucyIsInRva2VuVmFsdWUiLCJleGVjIiwidHJhbnNmb3JtTm9kZSQxIiwiY2xhc3NCaW5kaW5nIiwiZ2VuRGF0YSQyIiwia2xhc3MiLCJ0cmFuc2Zvcm1Ob2RlIiwiZ2VuRGF0YSIsInN0eWxlQmluZGluZyIsImdlbkRhdGEkMSIsImRlY29kZXIiLCJoZSIsImRlY29kZSIsImh0bWwiLCJpc1VuYXJ5VGFnIiwiY2FuQmVMZWZ0T3BlblRhZyIsImlzTm9uUGhyYXNpbmdUYWciLCJhdHRyaWJ1dGUiLCJkeW5hbWljQXJnQXR0cmlidXRlIiwibmNuYW1lIiwicW5hbWVDYXB0dXJlIiwic3RhcnRUYWdPcGVuIiwic3RhcnRUYWdDbG9zZSIsImRvY3R5cGUiLCJjb21tZW50IiwiY29uZGl0
13835aW9uYWxDb21tZW50IiwiaXNQbGFpblRleHRFbGVtZW50IiwicmVDYWNoZSIsImRlY29kaW5nTWFwIiwiZW5jb2RlZEF0dHIiLCJlbmNvZGVkQXR0cldpdGhOZXdMaW5lcyIsImlzSWdub3JlTmV3bGluZVRhZyIsInNob3VsZElnbm9yZUZpcnN0TmV3bGluZSIsImRlY29kZUF0dHIiLCJzaG91bGREZWNvZGVOZXdsaW5lcyIsInJlIiwicGFyc2VIVE1MIiwiZXhwZWN0SFRNTCIsImxhc3RUYWciLCJ0ZXh0RW5kIiwiY29tbWVudEVuZCIsInNob3VsZEtlZXBDb21tZW50Iiwic3Vic3RyaW5nIiwiYWR2YW5jZSIsImNvbmRpdGlvbmFsRW5kIiwiZG9jdHlwZU1hdGNoIiwiZW5kVGFnTWF0Y2giLCJjdXJJbmRleCIsInBhcnNlRW5kVGFnIiwic3RhcnRUYWdNYXRjaCIsInBhcnNlU3RhcnRUYWciLCJoYW5kbGVTdGFydFRhZyIsInJlc3QiLCJjaGFycyIsImVuZFRhZ0xlbmd0aF8xIiwic3RhY2tlZFRhZ18xIiwicmVTdGFja2VkVGFnIiwic3RhdGVfMSIsInVuYXJ5U2xhc2giLCJ1bmFyeSIsInNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZiIsIm91dHB1dFNvdXJjZVJhbmdlIiwibG93ZXJDYXNlZFRhZyIsImxvd2VyQ2FzZWRUYWdOYW1lIiwib25SRSIsImRpclJFIiwiZm9yQWxpYXNSRSIsImZvckl0ZXJhdG9yUkUiLCJzdHJpcFBhcmVuc1JFIiwiZHluYW1pY0FyZ1JFIiwiYXJnUkUiLCJiaW5kUkUiLCJtb2RpZmllclJFIiwic2xvdFJFIiwibGluZUJyZWFrUkUiLCJ3aGl0ZXNwYWNlUkUiLCJpbnZhbGlkQXR0cmlidXRlUkUiLCJkZWNvZGVIVE1MQ2FjaGVkIiwiZW1wdHlTbG90U2NvcGVUb2tlbiIsInRyYW5zZm9ybXMiLCJwcmVUcmFuc2Zvcm1zIiwicG9zdFRyYW5zZm9ybXMiLCJwbGF0Zm9ybUlzUHJlVGFnIiwicGxhdGZvcm1NdXN0VXNlUHJvcCIsInBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlIiwibWF5YmVDb21wb25lbnQiLCJjcmVhdGVBU1RFbGVtZW50IiwibWFrZUF0dHJzTWFwIiwicHJlc2VydmVXaGl0ZXNwYWNlIiwid2hpdGVzcGFjZU9wdGlvbiIsIndoaXRlc3BhY2UiLCJyb290IiwiY3VycmVudFBhcmVudCIsImluUHJlIiwid2FybmVkIiwid2Fybk9uY2UiLCJjbG9zZUVsZW1lbnQiLCJlbGVtZW50IiwidHJpbUVuZGluZ1doaXRlc3BhY2UiLCJwcm9jZXNzZWQiLCJwcm9jZXNzRWxlbWVudCIsImlmIiwiZWxzZWlmIiwiZWxzZSIsImNoZWNrUm9vdENvbnN0cmFpbnRzIiwiYWRkSWZDb25kaXRpb24iLCJibG9jayIsImZvcmJpZGRlbiIsInByb2Nlc3NJZkNvbmRpdGlvbnMiLCJzbG90U2NvcGUiLCJzbG90VGFyZ2V0IiwibGFzdE5vZGUiLCJjb21tZW50cyIsImd1YXJkSUVTVkdCdWciLCJjdW11bGF0ZWQiLCJpc0ZvcmJpZGRlblRhZyIsInByb2Nlc3NQcmUiLCJwcm9jZXNzUmF3QXR0cnMiLCJwcm9jZXNzRm9yIiwicHJvY2Vzc0lmIiwicHJvY2Vzc09uY2UiLCJpc1RleHRUYWciLCJwcm9jZXNzS2V5IiwicHJvY2Vzc1JlZiIsInByb2Nlc3NTbG90Q29udGVudCIsInByb2Nlc3NTbG90T3V0bGV0IiwicHJvY2Vzc0NvbXBvbmVudCIsInByb2Nlc3NBdHRycyIsImZvciIsIml0ZXJhdG9yMiIsIml0ZXJhdG9yMSIsImNoZWNrSW5Gb3IiLCJwYXJzZUZvciIsImluTWF0Y2giLCJhbGlhcyIsIml0ZXJhdG9yTWF0Y2giLCJmaW5kUHJldkVsZW1lbnQiLCJjb25kaXRpb24iLCJpZkNvbmRpdGlvbnMiLCJzbG90VGFyZ2V0RHluYW1pYyIsInNsb3RCaW5kaW5nIiwiZ2V0U2xvdE5hbWUiLCJuYW1lXzMiLCJzbG90Q29udGFpbmVyXzEiLCJzbG90TmFtZSIsInN5bmNHZW4iLCJpc0R5bmFtaWMiLCJoYXNCaW5kaW5ncyIsInBhcnNlTW9kaWZpZXJzIiwiY2FtZWwiLCJhcmdNYXRjaCIsImNoZWNrRm9yQWxpYXNNb2RlbCIsInJldF8xIiwiaWVOU0J1ZyIsImllTlNQcmVmaXgiLCJfZWwiLCJwcmVUcmFuc2Zvcm1Ob2RlIiwiaWZDb25kaXRpb24iLCJpZkNvbmRpdGlvbkV4dHJhIiwiaGFzRWxzZSIsImVsc2VJZkNvbmRpdGlvbiIsImJyYW5jaDAiLCJjbG9uZUFTVEVsZW1lbnQiLCJicmFuY2gxIiwiYnJhbmNoMiIsImJhc2VPcHRpb25zIiwiaXNTdGF0aWNLZXkiLCJpc1BsYXRmb3JtUmVzZXJ2ZWRUYWciLCJnZW5TdGF0aWNLZXlzQ2FjaGVkIiwiZ2VuU3RhdGljS2V5cyIsIm9wdGltaXplIiwibWFya1N0YXRpYyIsIm1hcmtTdGF0aWNSb290cyIsInN0YXRpYyIsInN0YXRpY0luRm9yIiwic3RhdGljUm9vdCIsImlzRGlyZWN0Q2hpbGRPZlRlbXBsYXRlRm9yIiwiZm5FeHBSRSIsImZuSW52b2tlUkUiLCJzaW1wbGVQYXRoUkUiLCJlc2MiLCJ0YWIiLCJzcGFjZSIsInVwIiwiZG93biIsImtleU5hbWVzIiwiZ2VuR3VhcmQiLCJtb2RpZmllckNvZGUiLCJzZWxmIiwiY3RybCIsImFsdCIsIm1ldGEiLCJnZW5IYW5kbGVycyIsInByZWZpeCIsInN0YXRpY0hhbmRsZXJzIiwiZHluYW1pY0hhbmRsZXJzIiwiaGFuZGxlckNvZGUiLCJnZW5IYW5kbGVyIiwiaXNNZXRob2RQYXRoIiwiaXNGdW5jdGlvbkV4cHJlc3Npb24iLCJpc0Z1bmN0aW9uSW52b2NhdGlvbiIsImdlbk1vZGlmaWVyQ29kZSIsIm1vZGlmaWVyc18xIiwia2V5TW9kaWZpZXIiLCJnZW5LZXlGaWx0ZXIiLCJnZW5GaWx0ZXJDb2RlIiwia2V5VmFsIiwia2V5Q29kZSIsImtleU5hbWUiLCJ3cmFwTGlzdGVuZXJzIiwid3JhcERhdGEiLCJiYXNlRGlyZWN0aXZlcyIsImNsb2FrIiwiQ29kZWdlblN0YXRlIiwiZGF0YUdlbkZucyIsIm9uY2VJZCIsImdlbmVyYXRlIiwiYXN0Iiwic3RhdGUiLCJnZW5FbGVtZW50Iiwic3RhdGljUHJvY2Vzc2VkIiwiZ2VuU3RhdGljIiwib25jZVByb2Nlc3NlZCIsImdlbk9uY2UiLCJmb3JQcm9jZXNzZWQiLCJnZW5Gb3IiLCJpZlByb2Nlc3NlZCIsImdlbklmIiwiZ2VuQ2hpbGRyZW4iLCJnZW5TbG90IiwiZ2VuQ29tcG9uZW50IiwiYmluZGluZ3MiLCJfX2lzU2NyaXB0U2V0dXAiLCJjaGVja0JpbmRpbmdUeXBlIiwiY2FtZWxOYW1lIiwiUGFzY2FsTmFtZSIsImNoZWNrVHlwZSIsImZyb21Db25zdCIsImZyb21NYXliZVJlZiIsIm9yaWdpbmFsUHJlU3RhdGUiLCJhbHRHZW4iLCJhbHRFbXB0eSIsImdlbklmQ29uZGl0aW9ucyIsImNvbmRpdGlvbnMiLCJnZW5UZXJuYXJ5RXhwIiwiYWx0SGVscGVyIiwiZ2VuRGlyZWN0aXZlcyIsImdlblByb3BzIiwiZ2VuU2NvcGVkU2xvdHMiLCJ
13835nZW5JbmxpbmVUZW1wbGF0ZSIsImhhc1J1bnRpbWUiLCJuZWVkUnVudGltZSIsImdlbiIsImlubGluZVJlbmRlckZucyIsImNvbnRhaW5zU2xvdENoaWxkIiwibmVlZHNLZXkiLCJwYXJlbnRfMiIsImdlbmVyYXRlZFNsb3RzIiwiZ2VuU2NvcGVkU2xvdCIsImlzTGVnYWN5U3ludGF4IiwicmV2ZXJzZVByb3h5IiwiY2hlY2tTa2lwIiwiYWx0R2VuRWxlbWVudCIsImFsdEdlbk5vZGUiLCJub3JtYWxpemF0aW9uVHlwZV8xIiwiZ2V0Tm9ybWFsaXphdGlvblR5cGUiLCJnZW5fMSIsImdlbk5vZGUiLCJuZWVkc05vcm1hbGl6YXRpb24iLCJnZW5Db21tZW50IiwiZ2VuVGV4dCIsInRyYW5zZm9ybVNwZWNpYWxOZXdsaW5lcyIsImNvbXBvbmVudE5hbWUiLCJzdGF0aWNQcm9wcyIsImR5bmFtaWNQcm9wcyIsInByb2hpYml0ZWRLZXl3b3JkUkUiLCJ1bmFyeU9wZXJhdG9yc1JFIiwic3RyaXBTdHJpbmdSRSIsImRldGVjdEVycm9ycyIsImNoZWNrTm9kZSIsImNoZWNrRm9yIiwiY2hlY2tGdW5jdGlvblBhcmFtZXRlckV4cHJlc3Npb24iLCJjaGVja0V2ZW50IiwiY2hlY2tFeHByZXNzaW9uIiwic3RyaXBwZWQiLCJrZXl3b3JkTWF0Y2giLCJjaGVja0lkZW50aWZpZXIiLCJpZGVudCIsImdlbmVyYXRlQ29kZUZyYW1lIiwibGluZXMiLCJjb3VudCIsInJlcGVhdCIsImxpbmVMZW5ndGgiLCJwYWQiLCJsZW5ndGhfMSIsImxlbmd0aF8yIiwibWluIiwiY3JlYXRlRnVuY3Rpb24iLCJlcnJvcnMiLCJjcmVhdGVDb21waWxlVG9GdW5jdGlvbkZuIiwiY29tcGlsZSIsImNvbXBpbGVUb0Z1bmN0aW9ucyIsImNvbXBpbGVkIiwidGlwcyIsImZuR2VuRXJyb3JzIiwiY3JlYXRlQ29tcGlsZXJDcmVhdG9yIiwiYmFzZUNvbXBpbGUiLCJjcmVhdGVDb21waWxlciIsImZpbmFsT3B0aW9ucyIsImxlYWRpbmdTcGFjZUxlbmd0aF8xIiwiZGl2IiwiZ2V0U2hvdWxkRGVjb2RlIiwiaWRUb1RlbXBsYXRlIiwibW91bnQiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRPdXRlckhUTUwiLCJvdXRlckhUTUwiLCJjb250YWluZXIiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJfbmV4dCIsIl90aHJvdyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3R5cGVvZiIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJPcCIsIiRTeW1ib2wiLCJpdGVyYXRvclN5bWJvbCIsImFzeW5jSXRlcmF0b3JTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwidG9TdHJpbmdUYWdTeW1ib2wiLCJkZWZpbmUiLCJpbm5lckZuIiwib3V0ZXJGbiIsInRyeUxvY3NMaXN0IiwicHJvdG9HZW5lcmF0b3IiLCJHZW5lcmF0b3IiLCJnZW5lcmF0b3IiLCJDb250ZXh0IiwibWFrZUludm9rZU1ldGhvZCIsInRyeUNhdGNoIiwiQ29udGludWVTZW50aW5lbCIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJJdGVyYXRvclByb3RvdHlwZSIsImdldFByb3RvIiwiTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUiLCJHcCIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiUHJvbWlzZUltcGwiLCJpbnZva2UiLCJyZWNvcmQiLCJfX2F3YWl0IiwidW53cmFwcGVkIiwicHJldmlvdXNQcm9taXNlIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJkb25lUmVzdWx0IiwiZGVsZWdhdGUiLCJkZWxlZ2F0ZVJlc3VsdCIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwibWV0aG9kTmFtZSIsInJlc3VsdE5hbWUiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwibG9jcyIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwicmVzZXQiLCJpdGVyYWJsZSIsIml0ZXJhdG9yTWV0aG9kIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiZ2VuRnVuIiwiY3RvciIsInNldFByb3RvdHlwZU9mIiwiYXdyYXAiLCJpdGVyIiwicmV2ZXJzZSIsInNraXBUZW1wUmVzZXQiLCJyb290UmVjb3JkIiwicnZhbCIsImV4Y2VwdGlvbiIsImhhbmRsZSIsImxvYyIsImNhdWdodCIsImhhc0NhdGNoIiwiaGFzRmluYWxseSIsImZpbmFsbHlFbnRyeSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwidGhyb3duIiwiZGVsZWdhdGVZaWVsZCIsInJ1bnRpbWUiLCJyZWdlbmVyYXRvclJ1bnRpbWUiLCJhY2NpZGVudGFsU3RyaWN0TW9kZSIsImdsb2JhbFRoaXMiLCJfdnVlIiwiX09wZW5pbmdIb3Vyc1N0YXR1cyIsInZ1ZUVsZW1lbnRzIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsIk9wZW5pbmdIb3Vyc1N0YXR1cyJdLCJzb3VyY2VSb290IjoiIn0=

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.