Eldarya Enhancements

Enhances the user experience of Eldarya.

目前为 2021-12-18 提交的版本。查看 最新版本

// ==UserScript==
// @name            Eldarya Enhancements
// @namespace       https://gitlab.com/NatoBoram/eldarya-enhancements
// @license         GPL-3.0-or-later
// @version         1.2.12
// @author          Nato Boram
// @description     Enhances the user experience of Eldarya.
// @description:pt  Aprimora a experiência do usuário de Eldarya.
// @description:de  Verbessert die Benutzererfahrung von Eldarya.
// @description:es  Mejora la experiencia del usuario de Eldarya.
// @description:hu  Javítja az Eldarya felhasználói élményét.
// @description:it  Migliora l'esperienza utente di Eldarya.
// @description:pl  Zwiększa wrażenia użytkownika Eldaryi.
// @description:ru  Повышает удобство использования Эльдарьи.
// @description:en  Enhances the user experience of Eldarya.
// @description:fr  Améliore l'expérience utilisateur d'Eldarya.
// @icon            https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/avatar.png
// @supportURL      https://gitlab.com/NatoBoram/Eldarya-Face-Downloader/issues
// @contributionURL https://paypal.me/NatoBoram/5
//
// @match https://www.eldarya.com.br/*
// @match https://www.eldarya.de/*
// @match https://www.eldarya.es/*
// @match https://www.eldarya.hu/*
// @match https://www.eldarya.it/*
// @match https://www.eldarya.pl/*
// @match https://www.eldarya.ru/*
// @match https://www.eldarya.com/*
// @match https://www.eldarya.fr/*
//
// @grant none
// ==/UserScript==

/******/ (() => { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ "./node_modules/.pnpm/[email protected]/node_modules/blob-util/dist/blob-util.es.js":
/*!****************************************************************************************!*\
  !*** ./node_modules/.pnpm/[email protected]/node_modules/blob-util/dist/blob-util.es.js ***!
  \****************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "createBlob": () => (/* binding */ createBlob),
/* harmony export */   "createObjectURL": () => (/* binding */ createObjectURL),
/* harmony export */   "revokeObjectURL": () => (/* binding */ revokeObjectURL),
/* harmony export */   "blobToBinaryString": () => (/* binding */ blobToBinaryString),
/* harmony export */   "base64StringToBlob": () => (/* binding */ base64StringToBlob),
/* harmony export */   "binaryStringToBlob": () => (/* binding */ binaryStringToBlob),
/* harmony export */   "blobToBase64String": () => (/* binding */ blobToBase64String),
/* harmony export */   "dataURLToBlob": () => (/* binding */ dataURLToBlob),
/* harmony export */   "blobToDataURL": () => (/* binding */ blobToDataURL),
/* harmony export */   "imgSrcToDataURL": () => (/* binding */ imgSrcToDataURL),
/* harmony export */   "canvasToBlob": () => (/* binding */ canvasToBlob),
/* harmony export */   "imgSrcToBlob": () => (/* binding */ imgSrcToBlob),
/* harmony export */   "arrayBufferToBlob": () => (/* binding */ arrayBufferToBlob),
/* harmony export */   "blobToArrayBuffer": () => (/* binding */ blobToArrayBuffer),
/* harmony export */   "arrayBufferToBinaryString": () => (/* binding */ arrayBufferToBinaryString),
/* harmony export */   "binaryStringToArrayBuffer": () => (/* binding */ binaryStringToArrayBuffer)
/* harmony export */ });
// TODO: including these in blob-util.ts causes typedoc to generate docs for them,
// even with --excludePrivate ¯\_(ツ)_/¯
/** @private */
function loadImage(src, crossOrigin) {
    return new Promise(function (resolve, reject) {
        var img = new Image();
        if (crossOrigin) {
            img.crossOrigin = crossOrigin;
        }
        img.onload = function () {
            resolve(img);
        };
        img.onerror = reject;
        img.src = src;
    });
}
/** @private */
function imgToCanvas(img) {
    var canvas = document.createElement('canvas');
    canvas.width = img.width;
    canvas.height = img.height;
    // copy the image contents to the canvas
    var context = canvas.getContext('2d');
    context.drawImage(img, 0, 0, img.width, img.height, 0, 0, img.width, img.height);
    return canvas;
}

/* global Promise, Image, Blob, FileReader, atob, btoa,
   BlobBuilder, MSBlobBuilder, MozBlobBuilder, WebKitBlobBuilder, webkitURL */
/**
 * Shim for
 * [`new Blob()`](https://developer.mozilla.org/en-US/docs/Web/API/Blob.Blob)
 * to support
 * [older browsers that use the deprecated `BlobBuilder` API](http://caniuse.com/blob).
 *
 * Example:
 *
 * ```js
 * var myBlob = blobUtil.createBlob(['hello world'], {type: 'text/plain'});
 * ```
 *
 * @param parts - content of the Blob
 * @param properties - usually `{type: myContentType}`,
 *                           you can also pass a string for the content type
 * @returns Blob
 */
function createBlob(parts, properties) {
    parts = parts || [];
    properties = properties || {};
    if (typeof properties === 'string') {
        properties = { type: properties }; // infer content type
    }
    try {
        return new Blob(parts, properties);
    }
    catch (e) {
        if (e.name !== 'TypeError') {
            throw e;
        }
        var Builder = typeof BlobBuilder !== 'undefined'
            ? BlobBuilder : typeof MSBlobBuilder !== 'undefined'
            ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined'
            ? MozBlobBuilder : WebKitBlobBuilder;
        var builder = new Builder();
        for (var i = 0; i < parts.length; i += 1) {
            builder.append(parts[i]);
        }
        return builder.getBlob(properties.type);
    }
}
/**
 * Shim for
 * [`URL.createObjectURL()`](https://developer.mozilla.org/en-US/docs/Web/API/URL.createObjectURL)
 * to support browsers that only have the prefixed
 * `webkitURL` (e.g. Android <4.4).
 *
 * Example:
 *
 * ```js
 * var myUrl = blobUtil.createObjectURL(blob);
 * ```
 *
 * @param blob
 * @returns url
 */
function createObjectURL(blob) {
    return (typeof URL !== 'undefined' ? URL : webkitURL).createObjectURL(blob);
}
/**
 * Shim for
 * [`URL.revokeObjectURL()`](https://developer.mozilla.org/en-US/docs/Web/API/URL.revokeObjectURL)
 * to support browsers that only have the prefixed
 * `webkitURL` (e.g. Android <4.4).
 *
 * Example:
 *
 * ```js
 * blobUtil.revokeObjectURL(myUrl);
 * ```
 *
 * @param url
 */
function revokeObjectURL(url) {
    return (typeof URL !== 'undefined' ? URL : webkitURL).revokeObjectURL(url);
}
/**
 * Convert a `Blob` to a binary string.
 *
 * Example:
 *
 * ```js
 * blobUtil.blobToBinaryString(blob).then(function (binaryString) {
 *   // success
 * }).catch(function (err) {
 *   // error
 * });
 * ```
 *
 * @param blob
 * @returns Promise that resolves with the binary string
 */
function blobToBinaryString(blob) {
    return new Promise(function (resolve, reject) {
        var reader = new FileReader();
        var hasBinaryString = typeof reader.readAsBinaryString === 'function';
        reader.onloadend = function () {
            var result = reader.result || '';
            if (hasBinaryString) {
                return resolve(result);
            }
            resolve(arrayBufferToBinaryString(result));
        };
        reader.onerror = reject;
        if (hasBinaryString) {
            reader.readAsBinaryString(blob);
        }
        else {
            reader.readAsArrayBuffer(blob);
        }
    });
}
/**
 * Convert a base64-encoded string to a `Blob`.
 *
 * Example:
 *
 * ```js
 * var blob = blobUtil.base64StringToBlob(base64String);
 * ```
 * @param base64 - base64-encoded string
 * @param type - the content type (optional)
 * @returns Blob
 */
function base64StringToBlob(base64, type) {
    var parts = [binaryStringToArrayBuffer(atob(base64))];
    return type ? createBlob(parts, { type: type }) : createBlob(parts);
}
/**
 * Convert a binary string to a `Blob`.
 *
 * Example:
 *
 * ```js
 * var blob = blobUtil.binaryStringToBlob(binaryString);
 * ```
 *
 * @param binary - binary string
 * @param type - the content type (optional)
 * @returns Blob
 */
function binaryStringToBlob(binary, type) {
    return base64StringToBlob(btoa(binary), type);
}
/**
 * Convert a `Blob` to a binary string.
 *
 * Example:
 *
 * ```js
 * blobUtil.blobToBase64String(blob).then(function (base64String) {
 *   // success
 * }).catch(function (err) {
 *   // error
 * });
 * ```
 *
 * @param blob
 * @returns Promise that resolves with the binary string
 */
function blobToBase64String(blob) {
    return blobToBinaryString(blob).then(btoa);
}
/**
 * Convert a data URL string
 * (e.g. `'data:image/png;base64,iVBORw0KG...'`)
 * to a `Blob`.
 *
 * Example:
 *
 * ```js
 * var blob = blobUtil.dataURLToBlob(dataURL);
 * ```
 *
 * @param dataURL - dataURL-encoded string
 * @returns Blob
 */
function dataURLToBlob(dataURL) {
    var type = dataURL.match(/data:([^;]+)/)[1];
    var base64 = dataURL.replace(/^[^,]+,/, '');
    var buff = binaryStringToArrayBuffer(atob(base64));
    return createBlob([buff], { type: type });
}
/**
 * Convert a `Blob` to a data URL string
 * (e.g. `'data:image/png;base64,iVBORw0KG...'`).
 *
 * Example:
 *
 * ```js
 * var dataURL = blobUtil.blobToDataURL(blob);
 * ```
 *
 * @param blob
 * @returns Promise that resolves with the data URL string
 */
function blobToDataURL(blob) {
    return blobToBase64String(blob).then(function (base64String) {
        return 'data:' + blob.type + ';base64,' + base64String;
    });
}
/**
 * Convert an image's `src` URL to a data URL by loading the image and painting
 * it to a `canvas`.
 *
 * Note: this will coerce the image to the desired content type, and it
 * will only paint the first frame of an animated GIF.
 *
 * Examples:
 *
 * ```js
 * blobUtil.imgSrcToDataURL('http://mysite.com/img.png').then(function (dataURL) {
 *   // success
 * }).catch(function (err) {
 *   // error
 * });
 * ```
 *
 * ```js
 * blobUtil.imgSrcToDataURL('http://some-other-site.com/img.jpg', 'image/jpeg',
 *                          'Anonymous', 1.0).then(function (dataURL) {
 *   // success
 * }).catch(function (err) {
 *   // error
 * });
 * ```
 *
 * @param src - image src
 * @param type - the content type (optional, defaults to 'image/png')
 * @param crossOrigin - for CORS-enabled images, set this to
 *                                         'Anonymous' to avoid "tainted canvas" errors
 * @param quality - a number between 0 and 1 indicating image quality
 *                                     if the requested type is 'image/jpeg' or 'image/webp'
 * @returns Promise that resolves with the data URL string
 */
function imgSrcToDataURL(src, type, crossOrigin, quality) {
    type = type || 'image/png';
    return loadImage(src, crossOrigin).then(imgToCanvas).then(function (canvas) {
        return canvas.toDataURL(type, quality);
    });
}
/**
 * Convert a `canvas` to a `Blob`.
 *
 * Examples:
 *
 * ```js
 * blobUtil.canvasToBlob(canvas).then(function (blob) {
 *   // success
 * }).catch(function (err) {
 *   // error
 * });
 * ```
 *
 * Most browsers support converting a canvas to both `'image/png'` and `'image/jpeg'`. You may
 * also want to try `'image/webp'`, which will work in some browsers like Chrome (and in other browsers, will just fall back to `'image/png'`):
 *
 * ```js
 * blobUtil.canvasToBlob(canvas, 'image/webp').then(function (blob) {
 *   // success
 * }).catch(function (err) {
 *   // error
 * });
 * ```
 *
 * @param canvas - HTMLCanvasElement
 * @param type - the content type (optional, defaults to 'image/png')
 * @param quality - a number between 0 and 1 indicating image quality
 *                                     if the requested type is 'image/jpeg' or 'image/webp'
 * @returns Promise that resolves with the `Blob`
 */
function canvasToBlob(canvas, type, quality) {
    if (typeof canvas.toBlob === 'function') {
        return new Promise(function (resolve) {
            canvas.toBlob(resolve, type, quality);
        });
    }
    return Promise.resolve(dataURLToBlob(canvas.toDataURL(type, quality)));
}
/**
 * Convert an image's `src` URL to a `Blob` by loading the image and painting
 * it to a `canvas`.
 *
 * Note: this will coerce the image to the desired content type, and it
 * will only paint the first frame of an animated GIF.
 *
 * Examples:
 *
 * ```js
 * blobUtil.imgSrcToBlob('http://mysite.com/img.png').then(function (blob) {
 *   // success
 * }).catch(function (err) {
 *   // error
 * });
 * ```
 *
 * ```js
 * blobUtil.imgSrcToBlob('http://some-other-site.com/img.jpg', 'image/jpeg',
 *                          'Anonymous', 1.0).then(function (blob) {
 *   // success
 * }).catch(function (err) {
 *   // error
 * });
 * ```
 *
 * @param src - image src
 * @param type - the content type (optional, defaults to 'image/png')
 * @param crossOrigin - for CORS-enabled images, set this to
 *                                         'Anonymous' to avoid "tainted canvas" errors
 * @param quality - a number between 0 and 1 indicating image quality
 *                                     if the requested type is 'image/jpeg' or 'image/webp'
 * @returns Promise that resolves with the `Blob`
 */
function imgSrcToBlob(src, type, crossOrigin, quality) {
    type = type || 'image/png';
    return loadImage(src, crossOrigin).then(imgToCanvas).then(function (canvas) {
        return canvasToBlob(canvas, type, quality);
    });
}
/**
 * Convert an `ArrayBuffer` to a `Blob`.
 *
 * Example:
 *
 * ```js
 * var blob = blobUtil.arrayBufferToBlob(arrayBuff, 'audio/mpeg');
 * ```
 *
 * @param buffer
 * @param type - the content type (optional)
 * @returns Blob
 */
function arrayBufferToBlob(buffer, type) {
    return createBlob([buffer], type);
}
/**
 * Convert a `Blob` to an `ArrayBuffer`.
 *
 * Example:
 *
 * ```js
 * blobUtil.blobToArrayBuffer(blob).then(function (arrayBuff) {
 *   // success
 * }).catch(function (err) {
 *   // error
 * });
 * ```
 *
 * @param blob
 * @returns Promise that resolves with the `ArrayBuffer`
 */
function blobToArrayBuffer(blob) {
    return new Promise(function (resolve, reject) {
        var reader = new FileReader();
        reader.onloadend = function () {
            var result = reader.result || new ArrayBuffer(0);
            resolve(result);
        };
        reader.onerror = reject;
        reader.readAsArrayBuffer(blob);
    });
}
/**
 * Convert an `ArrayBuffer` to a binary string.
 *
 * Example:
 *
 * ```js
 * var myString = blobUtil.arrayBufferToBinaryString(arrayBuff)
 * ```
 *
 * @param buffer - array buffer
 * @returns binary string
 */
function arrayBufferToBinaryString(buffer) {
    var binary = '';
    var bytes = new Uint8Array(buffer);
    var length = bytes.byteLength;
    var i = -1;
    while (++i < length) {
        binary += String.fromCharCode(bytes[i]);
    }
    return binary;
}
/**
 * Convert a binary string to an `ArrayBuffer`.
 *
 * ```js
 * var myBuffer = blobUtil.binaryStringToArrayBuffer(binaryString)
 * ```
 *
 * @param binary - binary string
 * @returns array buffer
 */
function binaryStringToArrayBuffer(binary) {
    var length = binary.length;
    var buf = new ArrayBuffer(length);
    var arr = new Uint8Array(buf);
    var i = -1;
    while (++i < length) {
        arr[i] = binary.charCodeAt(i);
    }
    return buf;
}




/***/ }),

/***/ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/compiler.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/compiler.js ***!
  \*********************************************************************************/
/***/ ((__unused_webpack_module, exports) => {

/*
 *  Copyright 2011 Twitter, Inc.
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

(function (Hogan) {
  // Setup regex  assignments
  // remove whitespace according to Mustache spec
  var rIsWhitespace = /\S/,
      rQuot = /\"/g,
      rNewline =  /\n/g,
      rCr = /\r/g,
      rSlash = /\\/g,
      rLineSep = /\u2028/,
      rParagraphSep = /\u2029/;

  Hogan.tags = {
    '#': 1, '^': 2, '<': 3, '$': 4,
    '/': 5, '!': 6, '>': 7, '=': 8, '_v': 9,
    '{': 10, '&': 11, '_t': 12
  };

  Hogan.scan = function scan(text, delimiters) {
    var len = text.length,
        IN_TEXT = 0,
        IN_TAG_TYPE = 1,
        IN_TAG = 2,
        state = IN_TEXT,
        tagType = null,
        tag = null,
        buf = '',
        tokens = [],
        seenTag = false,
        i = 0,
        lineStart = 0,
        otag = '{{',
        ctag = '}}';

    function addBuf() {
      if (buf.length > 0) {
        tokens.push({tag: '_t', text: new String(buf)});
        buf = '';
      }
    }

    function lineIsWhitespace() {
      var isAllWhitespace = true;
      for (var j = lineStart; j < tokens.length; j++) {
        isAllWhitespace =
          (Hogan.tags[tokens[j].tag] < Hogan.tags['_v']) ||
          (tokens[j].tag == '_t' && tokens[j].text.match(rIsWhitespace) === null);
        if (!isAllWhitespace) {
          return false;
        }
      }

      return isAllWhitespace;
    }

    function filterLine(haveSeenTag, noNewLine) {
      addBuf();

      if (haveSeenTag && lineIsWhitespace()) {
        for (var j = lineStart, next; j < tokens.length; j++) {
          if (tokens[j].text) {
            if ((next = tokens[j+1]) && next.tag == '>') {
              // set indent to token value
              next.indent = tokens[j].text.toString()
            }
            tokens.splice(j, 1);
          }
        }
      } else if (!noNewLine) {
        tokens.push({tag:'\n'});
      }

      seenTag = false;
      lineStart = tokens.length;
    }

    function changeDelimiters(text, index) {
      var close = '=' + ctag,
          closeIndex = text.indexOf(close, index),
          delimiters = trim(
            text.substring(text.indexOf('=', index) + 1, closeIndex)
          ).split(' ');

      otag = delimiters[0];
      ctag = delimiters[delimiters.length - 1];

      return closeIndex + close.length - 1;
    }

    if (delimiters) {
      delimiters = delimiters.split(' ');
      otag = delimiters[0];
      ctag = delimiters[1];
    }

    for (i = 0; i < len; i++) {
      if (state == IN_TEXT) {
        if (tagChange(otag, text, i)) {
          --i;
          addBuf();
          state = IN_TAG_TYPE;
        } else {
          if (text.charAt(i) == '\n') {
            filterLine(seenTag);
          } else {
            buf += text.charAt(i);
          }
        }
      } else if (state == IN_TAG_TYPE) {
        i += otag.length - 1;
        tag = Hogan.tags[text.charAt(i + 1)];
        tagType = tag ? text.charAt(i + 1) : '_v';
        if (tagType == '=') {
          i = changeDelimiters(text, i);
          state = IN_TEXT;
        } else {
          if (tag) {
            i++;
          }
          state = IN_TAG;
        }
        seenTag = i;
      } else {
        if (tagChange(ctag, text, i)) {
          tokens.push({tag: tagType, n: trim(buf), otag: otag, ctag: ctag,
                       i: (tagType == '/') ? seenTag - otag.length : i + ctag.length});
          buf = '';
          i += ctag.length - 1;
          state = IN_TEXT;
          if (tagType == '{') {
            if (ctag == '}}') {
              i++;
            } else {
              cleanTripleStache(tokens[tokens.length - 1]);
            }
          }
        } else {
          buf += text.charAt(i);
        }
      }
    }

    filterLine(seenTag, true);

    return tokens;
  }

  function cleanTripleStache(token) {
    if (token.n.substr(token.n.length - 1) === '}') {
      token.n = token.n.substring(0, token.n.length - 1);
    }
  }

  function trim(s) {
    if (s.trim) {
      return s.trim();
    }

    return s.replace(/^\s*|\s*$/g, '');
  }

  function tagChange(tag, text, index) {
    if (text.charAt(index) != tag.charAt(0)) {
      return false;
    }

    for (var i = 1, l = tag.length; i < l; i++) {
      if (text.charAt(index + i) != tag.charAt(i)) {
        return false;
      }
    }

    return true;
  }

  // the tags allowed inside super templates
  var allowedInSuper = {'_t': true, '\n': true, '$': true, '/': true};

  function buildTree(tokens, kind, stack, customTags) {
    var instructions = [],
        opener = null,
        tail = null,
        token = null;

    tail = stack[stack.length - 1];

    while (tokens.length > 0) {
      token = tokens.shift();

      if (tail && tail.tag == '<' && !(token.tag in allowedInSuper)) {
        throw new Error('Illegal content in < super tag.');
      }

      if (Hogan.tags[token.tag] <= Hogan.tags['$'] || isOpener(token, customTags)) {
        stack.push(token);
        token.nodes = buildTree(tokens, token.tag, stack, customTags);
      } else if (token.tag == '/') {
        if (stack.length === 0) {
          throw new Error('Closing tag without opener: /' + token.n);
        }
        opener = stack.pop();
        if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) {
          throw new Error('Nesting error: ' + opener.n + ' vs. ' + token.n);
        }
        opener.end = token.i;
        return instructions;
      } else if (token.tag == '\n') {
        token.last = (tokens.length == 0) || (tokens[0].tag == '\n');
      }

      instructions.push(token);
    }

    if (stack.length > 0) {
      throw new Error('missing closing tag: ' + stack.pop().n);
    }

    return instructions;
  }

  function isOpener(token, tags) {
    for (var i = 0, l = tags.length; i < l; i++) {
      if (tags[i].o == token.n) {
        token.tag = '#';
        return true;
      }
    }
  }

  function isCloser(close, open, tags) {
    for (var i = 0, l = tags.length; i < l; i++) {
      if (tags[i].c == close && tags[i].o == open) {
        return true;
      }
    }
  }

  function stringifySubstitutions(obj) {
    var items = [];
    for (var key in obj) {
      items.push('"' + esc(key) + '": function(c,p,t,i) {' + obj[key] + '}');
    }
    return "{ " + items.join(",") + " }";
  }

  function stringifyPartials(codeObj) {
    var partials = [];
    for (var key in codeObj.partials) {
      partials.push('"' + esc(key) + '":{name:"' + esc(codeObj.partials[key].name) + '", ' + stringifyPartials(codeObj.partials[key]) + "}");
    }
    return "partials: {" + partials.join(",") + "}, subs: " + stringifySubstitutions(codeObj.subs);
  }

  Hogan.stringify = function(codeObj, text, options) {
    return "{code: function (c,p,i) { " + Hogan.wrapMain(codeObj.code) + " }," + stringifyPartials(codeObj) +  "}";
  }

  var serialNo = 0;
  Hogan.generate = function(tree, text, options) {
    serialNo = 0;
    var context = { code: '', subs: {}, partials: {} };
    Hogan.walk(tree, context);

    if (options.asString) {
      return this.stringify(context, text, options);
    }

    return this.makeTemplate(context, text, options);
  }

  Hogan.wrapMain = function(code) {
    return 'var t=this;t.b(i=i||"");' + code + 'return t.fl();';
  }

  Hogan.template = Hogan.Template;

  Hogan.makeTemplate = function(codeObj, text, options) {
    var template = this.makePartials(codeObj);
    template.code = new Function('c', 'p', 'i', this.wrapMain(codeObj.code));
    return new this.template(template, text, this, options);
  }

  Hogan.makePartials = function(codeObj) {
    var key, template = {subs: {}, partials: codeObj.partials, name: codeObj.name};
    for (key in template.partials) {
      template.partials[key] = this.makePartials(template.partials[key]);
    }
    for (key in codeObj.subs) {
      template.subs[key] = new Function('c', 'p', 't', 'i', codeObj.subs[key]);
    }
    return template;
  }

  function esc(s) {
    return s.replace(rSlash, '\\\\')
            .replace(rQuot, '\\\"')
            .replace(rNewline, '\\n')
            .replace(rCr, '\\r')
            .replace(rLineSep, '\\u2028')
            .replace(rParagraphSep, '\\u2029');
  }

  function chooseMethod(s) {
    return (~s.indexOf('.')) ? 'd' : 'f';
  }

  function createPartial(node, context) {
    var prefix = "<" + (context.prefix || "");
    var sym = prefix + node.n + serialNo++;
    context.partials[sym] = {name: node.n, partials: {}};
    context.code += 't.b(t.rp("' +  esc(sym) + '",c,p,"' + (node.indent || '') + '"));';
    return sym;
  }

  Hogan.codegen = {
    '#': function(node, context) {
      context.code += 'if(t.s(t.' + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,1),' +
                      'c,p,0,' + node.i + ',' + node.end + ',"' + node.otag + " " + node.ctag + '")){' +
                      't.rs(c,p,' + 'function(c,p,t){';
      Hogan.walk(node.nodes, context);
      context.code += '});c.pop();}';
    },

    '^': function(node, context) {
      context.code += 'if(!t.s(t.' + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,1),c,p,1,0,0,"")){';
      Hogan.walk(node.nodes, context);
      context.code += '};';
    },

    '>': createPartial,
    '<': function(node, context) {
      var ctx = {partials: {}, code: '', subs: {}, inPartial: true};
      Hogan.walk(node.nodes, ctx);
      var template = context.partials[createPartial(node, context)];
      template.subs = ctx.subs;
      template.partials = ctx.partials;
    },

    '$': function(node, context) {
      var ctx = {subs: {}, code: '', partials: context.partials, prefix: node.n};
      Hogan.walk(node.nodes, ctx);
      context.subs[node.n] = ctx.code;
      if (!context.inPartial) {
        context.code += 't.sub("' + esc(node.n) + '",c,p,i);';
      }
    },

    '\n': function(node, context) {
      context.code += write('"\\n"' + (node.last ? '' : ' + i'));
    },

    '_v': function(node, context) {
      context.code += 't.b(t.v(t.' + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,0)));';
    },

    '_t': function(node, context) {
      context.code += write('"' + esc(node.text) + '"');
    },

    '{': tripleStache,

    '&': tripleStache
  }

  function tripleStache(node, context) {
    context.code += 't.b(t.t(t.' + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,0)));';
  }

  function write(s) {
    return 't.b(' + s + ');';
  }

  Hogan.walk = function(nodelist, context) {
    var func;
    for (var i = 0, l = nodelist.length; i < l; i++) {
      func = Hogan.codegen[nodelist[i].tag];
      func && func(nodelist[i], context);
    }
    return context;
  }

  Hogan.parse = function(tokens, text, options) {
    options = options || {};
    return buildTree(tokens, '', [], options.sectionTags || []);
  }

  Hogan.cache = {};

  Hogan.cacheKey = function(text, options) {
    return [text, !!options.asString, !!options.disableLambda, options.delimiters, !!options.modelGet].join('||');
  }

  Hogan.compile = function(text, options) {
    options = options || {};
    var key = Hogan.cacheKey(text, options);
    var template = this.cache[key];

    if (template) {
      var partials = template.partials;
      for (var name in partials) {
        delete partials[name].instance;
      }
      return template;
    }

    template = this.generate(this.parse(this.scan(text, options.delimiters), text, options), text, options);
    return this.cache[key] = template;
  }
})( true ? exports : 0);


/***/ }),

/***/ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js":
/*!******************************************************************************!*\
  !*** ./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js ***!
  \******************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

/*
 *  Copyright 2011 Twitter, Inc.
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

// This file is for use with Node.js. See dist/ for browser files.

var Hogan = __webpack_require__(/*! ./compiler */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/compiler.js");
Hogan.Template = (__webpack_require__(/*! ./template */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/template.js").Template);
Hogan.template = Hogan.Template;
module.exports = Hogan;


/***/ }),

/***/ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/template.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/template.js ***!
  \*********************************************************************************/
/***/ ((__unused_webpack_module, exports) => {

/*
 *  Copyright 2011 Twitter, Inc.
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

var Hogan = {};

(function (Hogan) {
  Hogan.Template = function (codeObj, text, compiler, options) {
    codeObj = codeObj || {};
    this.r = codeObj.code || this.r;
    this.c = compiler;
    this.options = options || {};
    this.text = text || '';
    this.partials = codeObj.partials || {};
    this.subs = codeObj.subs || {};
    this.buf = '';
  }

  Hogan.Template.prototype = {
    // render: replaced by generated code.
    r: function (context, partials, indent) { return ''; },

    // variable escaping
    v: hoganEscape,

    // triple stache
    t: coerceToString,

    render: function render(context, partials, indent) {
      return this.ri([context], partials || {}, indent);
    },

    // render internal -- a hook for overrides that catches partials too
    ri: function (context, partials, indent) {
      return this.r(context, partials, indent);
    },

    // ensurePartial
    ep: function(symbol, partials) {
      var partial = this.partials[symbol];

      // check to see that if we've instantiated this partial before
      var template = partials[partial.name];
      if (partial.instance && partial.base == template) {
        return partial.instance;
      }

      if (typeof template == 'string') {
        if (!this.c) {
          throw new Error("No compiler available.");
        }
        template = this.c.compile(template, this.options);
      }

      if (!template) {
        return null;
      }

      // We use this to check whether the partials dictionary has changed
      this.partials[symbol].base = template;

      if (partial.subs) {
        // Make sure we consider parent template now
        if (!partials.stackText) partials.stackText = {};
        for (key in partial.subs) {
          if (!partials.stackText[key]) {
            partials.stackText[key] = (this.activeSub !== undefined && partials.stackText[this.activeSub]) ? partials.stackText[this.activeSub] : this.text;
          }
        }
        template = createSpecializedPartial(template, partial.subs, partial.partials,
          this.stackSubs, this.stackPartials, partials.stackText);
      }
      this.partials[symbol].instance = template;

      return template;
    },

    // tries to find a partial in the current scope and render it
    rp: function(symbol, context, partials, indent) {
      var partial = this.ep(symbol, partials);
      if (!partial) {
        return '';
      }

      return partial.ri(context, partials, indent);
    },

    // render a section
    rs: function(context, partials, section) {
      var tail = context[context.length - 1];

      if (!isArray(tail)) {
        section(context, partials, this);
        return;
      }

      for (var i = 0; i < tail.length; i++) {
        context.push(tail[i]);
        section(context, partials, this);
        context.pop();
      }
    },

    // maybe start a section
    s: function(val, ctx, partials, inverted, start, end, tags) {
      var pass;

      if (isArray(val) && val.length === 0) {
        return false;
      }

      if (typeof val == 'function') {
        val = this.ms(val, ctx, partials, inverted, start, end, tags);
      }

      pass = !!val;

      if (!inverted && pass && ctx) {
        ctx.push((typeof val == 'object') ? val : ctx[ctx.length - 1]);
      }

      return pass;
    },

    // find values with dotted names
    d: function(key, ctx, partials, returnFound) {
      var found,
          names = key.split('.'),
          val = this.f(names[0], ctx, partials, returnFound),
          doModelGet = this.options.modelGet,
          cx = null;

      if (key === '.' && isArray(ctx[ctx.length - 2])) {
        val = ctx[ctx.length - 1];
      } else {
        for (var i = 1; i < names.length; i++) {
          found = findInScope(names[i], val, doModelGet);
          if (found !== undefined) {
            cx = val;
            val = found;
          } else {
            val = '';
          }
        }
      }

      if (returnFound && !val) {
        return false;
      }

      if (!returnFound && typeof val == 'function') {
        ctx.push(cx);
        val = this.mv(val, ctx, partials);
        ctx.pop();
      }

      return val;
    },

    // find values with normal names
    f: function(key, ctx, partials, returnFound) {
      var val = false,
          v = null,
          found = false,
          doModelGet = this.options.modelGet;

      for (var i = ctx.length - 1; i >= 0; i--) {
        v = ctx[i];
        val = findInScope(key, v, doModelGet);
        if (val !== undefined) {
          found = true;
          break;
        }
      }

      if (!found) {
        return (returnFound) ? false : "";
      }

      if (!returnFound && typeof val == 'function') {
        val = this.mv(val, ctx, partials);
      }

      return val;
    },

    // higher order templates
    ls: function(func, cx, partials, text, tags) {
      var oldTags = this.options.delimiters;

      this.options.delimiters = tags;
      this.b(this.ct(coerceToString(func.call(cx, text)), cx, partials));
      this.options.delimiters = oldTags;

      return false;
    },

    // compile text
    ct: function(text, cx, partials) {
      if (this.options.disableLambda) {
        throw new Error('Lambda features disabled.');
      }
      return this.c.compile(text, this.options).render(cx, partials);
    },

    // template result buffering
    b: function(s) { this.buf += s; },

    fl: function() { var r = this.buf; this.buf = ''; return r; },

    // method replace section
    ms: function(func, ctx, partials, inverted, start, end, tags) {
      var textSource,
          cx = ctx[ctx.length - 1],
          result = func.call(cx);

      if (typeof result == 'function') {
        if (inverted) {
          return true;
        } else {
          textSource = (this.activeSub && this.subsText && this.subsText[this.activeSub]) ? this.subsText[this.activeSub] : this.text;
          return this.ls(result, cx, partials, textSource.substring(start, end), tags);
        }
      }

      return result;
    },

    // method replace variable
    mv: function(func, ctx, partials) {
      var cx = ctx[ctx.length - 1];
      var result = func.call(cx);

      if (typeof result == 'function') {
        return this.ct(coerceToString(result.call(cx)), cx, partials);
      }

      return result;
    },

    sub: function(name, context, partials, indent) {
      var f = this.subs[name];
      if (f) {
        this.activeSub = name;
        f(context, partials, this, indent);
        this.activeSub = false;
      }
    }

  };

  //Find a key in an object
  function findInScope(key, scope, doModelGet) {
    var val;

    if (scope && typeof scope == 'object') {

      if (scope[key] !== undefined) {
        val = scope[key];

      // try lookup with get for backbone or similar model data
      } else if (doModelGet && scope.get && typeof scope.get == 'function') {
        val = scope.get(key);
      }
    }

    return val;
  }

  function createSpecializedPartial(instance, subs, partials, stackSubs, stackPartials, stackText) {
    function PartialTemplate() {};
    PartialTemplate.prototype = instance;
    function Substitutions() {};
    Substitutions.prototype = instance.subs;
    var key;
    var partial = new PartialTemplate();
    partial.subs = new Substitutions();
    partial.subsText = {};  //hehe. substext.
    partial.buf = '';

    stackSubs = stackSubs || {};
    partial.stackSubs = stackSubs;
    partial.subsText = stackText;
    for (key in subs) {
      if (!stackSubs[key]) stackSubs[key] = subs[key];
    }
    for (key in stackSubs) {
      partial.subs[key] = stackSubs[key];
    }

    stackPartials = stackPartials || {};
    partial.stackPartials = stackPartials;
    for (key in partials) {
      if (!stackPartials[key]) stackPartials[key] = partials[key];
    }
    for (key in stackPartials) {
      partial.partials[key] = stackPartials[key];
    }

    return partial;
  }

  var rAmp = /&/g,
      rLt = /</g,
      rGt = />/g,
      rApos = /\'/g,
      rQuot = /\"/g,
      hChars = /[&<>\"\']/;

  function coerceToString(val) {
    return String((val === null || val === undefined) ? '' : val);
  }

  function hoganEscape(str) {
    str = coerceToString(str);
    return hChars.test(str) ?
      str
        .replace(rAmp, '&amp;')
        .replace(rLt, '&lt;')
        .replace(rGt, '&gt;')
        .replace(rApos, '&#39;')
        .replace(rQuot, '&quot;') :
      str;
  }

  var isArray = Array.isArray || function(a) {
    return Object.prototype.toString.call(a) === '[object Array]';
  };

})( true ? exports : 0);


/***/ }),

/***/ "./src/templates/html/appearance_item.html":
/*!*************************************************!*\
  !*** ./src/templates/html/appearance_item.html ***!
  \*************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<li");t.b("\n" + i);t.b("  id=\"appearance-item-");t.b(t.v(t.f("itemid",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  class=\"appearance-item group-");t.b(t.v(t.f("group",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  data-itemid=\"");t.b(t.v(t.f("itemid",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  data-name=\"");t.b(t.v(t.f("name",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  data-rarity=\"");t.b(t.v(t.f("rarity",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  data-rarityname=\"");t.b(t.v(t.f("rarityname",c,p,0)));t.b("\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b("  <div class=\"rarity-marker-");t.b(t.v(t.f("rarity",c,p,0)));t.b("\"></div>");t.b("\n" + i);t.b("  <img class=\"appearance-item-icon\" src=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\" />");t.b("\n" + i);t.b("</li>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<li\n  id=\"appearance-item-{{itemid}}\"\n  class=\"appearance-item group-{{group}}\"\n  data-itemid=\"{{itemid}}\"\n  data-name=\"{{name}}\"\n  data-rarity=\"{{rarity}}\"\n  data-rarityname=\"{{rarityname}}\"\n>\n  <div class=\"rarity-marker-{{rarity}}\"></div>\n  <img class=\"appearance-item-icon\" src=\"{{icon}}\" />\n</li>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/appearance_items_category.html":
/*!***********************************************************!*\
  !*** ./src/templates/html/appearance_items_category.html ***!
  \***********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<div");t.b("\n" + i);t.b("  id=\"ee-category\"");t.b("\n" + i);t.b("  class=\"appearance-items-category active\"");t.b("\n" + i);t.b("  data-category=\"");t.b(t.v(t.f("category",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  data-categoryid=\"");t.b(t.v(t.f("categoryid",c,p,0)));t.b("\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b("  <style>");t.b("\n" + i);t.b("    #ee-items {");t.b("\n" + i);t.b("      scrollbar-color: dark;");t.b("\n" + i);t.b("      scrollbar-width: thin;");t.b("\n" + i);t.b("    }");t.b("\n" + i);t.b("  </style>");t.b("\n" + i);t.b("  <ul");t.b("\n" + i);t.b("    class=\"appearance-items-list\"");t.b("\n" + i);t.b("    id=\"ee-items\"");t.b("\n" + i);t.b("    style=\"max-height: calc(100vh - 565px)\"");t.b("\n" + i);t.b("  >");t.b("\n" + i);t.b("    ");t.b(t.t(t.f("items",c,p,0)));t.b("\n" + i);t.b("  </ul>");t.b("\n");t.b("\n" + i);t.b("  <!-- Info -->");t.b("\n" + i);t.b("  <div id=\"ee-info\" class=\"appearance-items-info\">");t.b("\n" + i);t.b("    <div class=\"appearance-info-tips\"></div>");t.b("\n");t.b("\n" + i);t.b("    <h3 class=\"appearance-item-info-name\"></h3>");t.b("\n");t.b("\n" + i);t.b("    <div class=\"appearance-item-info-guard\"></div>");t.b("\n" + i);t.b("    <div class=\"appearance-item-info-rarity\"></div>");t.b("\n" + i);t.b("    <div class=\"appearance-item-info-buttons\">");t.b("\n" + i);t.b("      <div class=\"appearance-forward nl-button\">");t.b("\n" + i);t.b("        ");t.b(t.v(t.d("translate.appearance.buttons.forward",c,p,0)));t.b("\n" + i);t.b("      </div>");t.b("\n" + i);t.b("      <div class=\"appearance-backward nl-button\">");t.b("\n" + i);t.b("        ");t.b(t.v(t.d("translate.appearance.buttons.backward",c,p,0)));t.b("\n" + i);t.b("      </div>");t.b("\n" + i);t.b("    </div>");t.b("\n" + i);t.b("  </div>");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<div\n  id=\"ee-category\"\n  class=\"appearance-items-category active\"\n  data-category=\"{{category}}\"\n  data-categoryid=\"{{categoryid}}\"\n>\n  <style>\n    #ee-items {\n      scrollbar-color: dark;\n      scrollbar-width: thin;\n    }\n  </style>\n  <ul\n    class=\"appearance-items-list\"\n    id=\"ee-items\"\n    style=\"max-height: calc(100vh - 565px)\"\n  >\n    {{{items}}}\n  </ul>\n\n  <!-- Info -->\n  <div id=\"ee-info\" class=\"appearance-items-info\">\n    <div class=\"appearance-info-tips\"></div>\n\n    <h3 class=\"appearance-item-info-name\"></h3>\n\n    <div class=\"appearance-item-info-guard\"></div>\n    <div class=\"appearance-item-info-rarity\"></div>\n    <div class=\"appearance-item-info-buttons\">\n      <div class=\"appearance-forward nl-button\">\n        {{translate.appearance.buttons.forward}}\n      </div>\n      <div class=\"appearance-backward nl-button\">\n        {{translate.appearance.buttons.backward}}\n      </div>\n    </div>\n  </div>\n</div>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/appearance_items_group.html":
/*!********************************************************!*\
  !*** ./src/templates/html/appearance_items_group.html ***!
  \********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<div");t.b("\n" + i);t.b("  id=\"appearance-items-group-");t.b(t.v(t.f("group",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  class=\"appearance-items-category\"");t.b("\n" + i);t.b("  data-categoryid=\"");t.b(t.v(t.f("categoryid",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  data-category=\"");t.b(t.v(t.f("category",c,p,0)));t.b("\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b("  <ul class=\"appearance-items-list\">");t.b("\n" + i);t.b("    ");t.b(t.t(t.f("items",c,p,0)));t.b("\n" + i);t.b("  </ul>");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<div\n  id=\"appearance-items-group-{{group}}\"\n  class=\"appearance-items-category\"\n  data-categoryid=\"{{categoryid}}\"\n  data-category=\"{{category}}\"\n>\n  <ul class=\"appearance-items-list\">\n    {{{items}}}\n  </ul>\n</div>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/auto_buy_button.html":
/*!*************************************************!*\
  !*** ./src/templates/html/auto_buy_button.html ***!
  \*************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<div");t.b("\n" + i);t.b("  id=\"marketplace-itemDetail-info-autobuy\"");t.b("\n" + i);t.b("  style=\"text-align: center; margin: 20px auto\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b("  <div class=\"nl-button\">");t.b(t.v(t.d("translate.market.add_to_wishlist.title",c,p,0)));t.b("</div>");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<div\n  id=\"marketplace-itemDetail-info-autobuy\"\n  style=\"text-align: center; margin: 20px auto\"\n>\n  <div class=\"nl-button\">{{translate.market.add_to_wishlist.title}}</div>\n</div>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/auto_buy_flavr.html":
/*!************************************************!*\
  !*** ./src/templates/html/auto_buy_flavr.html ***!
  \************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<h1>");t.b(t.v(t.d("translate.market.add_to_wishlist.title",c,p,0)));t.b("</h1>");t.b("\n" + i);t.b("<p>");t.b(t.v(t.d("translate.market.add_to_wishlist.text",c,p,0)));t.b("</p>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<h1>{{translate.market.add_to_wishlist.title}}</h1>\n<p>{{translate.market.add_to_wishlist.text}}</p>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/auto_buy_flavr_mall.html":
/*!*****************************************************!*\
  !*** ./src/templates/html/auto_buy_flavr_mall.html ***!
  \*****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<h1>");t.b(t.v(t.d("translate.mall.add_to_wishlist.title",c,p,0)));t.b("</h1>");t.b("\n" + i);t.b("<p>");t.b(t.v(t.d("translate.mall.add_to_wishlist.text",c,p,0)));t.b("</p>");t.b("\n" + i);t.b("<p style=\"font-size: 14px\"><em>");t.b(t.v(t.d("translate.mall.add_to_wishlist.note",c,p,0)));t.b("</em></p>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<h1>{{translate.mall.add_to_wishlist.title}}</h1>\n<p>{{translate.mall.add_to_wishlist.text}}</p>\n<p style=\"font-size: 14px\"><em>{{translate.mall.add_to_wishlist.note}}</em></p>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/auto_explore_button.html":
/*!*****************************************************!*\
  !*** ./src/templates/html/auto_explore_button.html ***!
  \*****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<button");t.b("\n" + i);t.b("  id=\"auto-explore-button\"");t.b("\n" + i);t.b("  class=\"nl-button ");if(t.s(t.f("active",c,p,1),c,p,0,65,71,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("active");});c.pop();}t.b("\"");t.b("\n" + i);t.b("  data-id=\"");t.b(t.v(t.f("locationId",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  data-mapid=\"");t.b(t.v(t.f("regionId",c,p,0)));t.b("\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b("  ");t.b(t.v(t.d("translate.pet.auto_explore",c,p,0)));t.b("\n" + i);t.b("</button>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<button\n  id=\"auto-explore-button\"\n  class=\"nl-button {{#active}}active{{/active}}\"\n  data-id=\"{{locationId}}\"\n  data-mapid=\"{{regionId}}\"\n>\n  {{translate.pet.auto_explore}}\n</button>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/carousel_news.html":
/*!***********************************************!*\
  !*** ./src/templates/html/carousel_news.html ***!
  \***********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<a");t.b("\n" + i);t.b("  id=\"");t.b(t.v(t.f("id",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  class=\"carousel-news carousel-ee\"");t.b("\n" + i);t.b("  href=\"\"");t.b("\n" + i);t.b("  style=\"background-image: url(");t.b(t.v(t.f("backgroundImage",c,p,0)));t.b(")\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b("  <div>");t.b("\n" + i);t.b("    <h4>");t.b(t.v(t.f("h4",c,p,0)));t.b("</h4>");t.b("\n" + i);t.b("    <h5>");t.b(t.v(t.f("h5",c,p,0)));t.b("</h5>");t.b("\n" + i);t.b("    <p>");t.b(t.v(t.f("p",c,p,0)));t.b("</p>");t.b("\n" + i);t.b("  </div>");t.b("\n" + i);t.b("</a>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<a\n  id=\"{{id}}\"\n  class=\"carousel-news carousel-ee\"\n  href=\"\"\n  style=\"background-image: url({{backgroundImage}})\"\n>\n  <div>\n    <h4>{{h4}}</h4>\n    <h5>{{h5}}</h5>\n    <p>{{p}}</p>\n  </div>\n</a>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/change_price_flavr.html":
/*!****************************************************!*\
  !*** ./src/templates/html/change_price_flavr.html ***!
  \****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<h1>");t.b(t.v(t.d("translate.market.change_price.title",c,p,0)));t.b("</h1>");t.b("\n" + i);t.b("<p>");t.b(t.v(t.d("translate.market.change_price.text",c,p,0)));t.b("</p>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<h1>{{translate.market.change_price.title}}</h1>\n<p>{{translate.market.change_price.text}}</p>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/created_outfit_flavr.html":
/*!******************************************************!*\
  !*** ./src/templates/html/created_outfit_flavr.html ***!
  \******************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<h1>");t.b(t.v(t.d("translate.appearance.favourites.save_outfit.title",c,p,0)));t.b("</h1>");t.b("\n");t.b("\n" + i);t.b("<p>");t.b(t.t(t.d("translate.appearance.favourites.save_outfit.saved_locally",c,p,0)));t.b("</p>");t.b("\n");t.b("\n" + i);t.b("<br />");t.b("\n");t.b("\n" + i);t.b("<p>");t.b(t.t(t.d("translate.appearance.favourites.save_outfit.goto_account",c,p,0)));t.b("</p>");t.b("\n");t.b("\n" + i);t.b("<input");t.b("\n" + i);t.b("  id=\"choose-name\"");t.b("\n" + i);t.b("  maxlength=\"30\"");t.b("\n" + i);t.b("  minlength=\"1\"");t.b("\n" + i);t.b("  placeholder=\"");t.b(t.v(t.d("translate.appearance.favourites.save_outfit.placeholder",c,p,0)));t.b("\"");t.b("\n" + i);t.b("/>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<h1>{{translate.appearance.favourites.save_outfit.title}}</h1>\n\n<p>{{{translate.appearance.favourites.save_outfit.saved_locally}}}</p>\n\n<br />\n\n<p>{{{translate.appearance.favourites.save_outfit.goto_account}}}</p>\n\n<input\n  id=\"choose-name\"\n  maxlength=\"30\"\n  minlength=\"1\"\n  placeholder=\"{{translate.appearance.favourites.save_outfit.placeholder}}\"\n/>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/exploration_history.html":
/*!*****************************************************!*\
  !*** ./src/templates/html/exploration_history.html ***!
  \*****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<div id=\"history-container\" style=\"width: 100%\">");t.b("\n" + i);t.b("  <style>");t.b("\n" + i);t.b("    .history-actions {");t.b("\n" + i);t.b("      margin-bottom: 1em;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    #delete-history {");t.b("\n" + i);t.b("      margin-right: 1em;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    .help-icon {");t.b("\n" + i);t.b("      background-color: #0291f6;");t.b("\n" + i);t.b("      border-radius: 50%;");t.b("\n" + i);t.b("      box-shadow: none;");t.b("\n" + i);t.b("      color: #fff;");t.b("\n" + i);t.b("      font-size: 26px;");t.b("\n" + i);t.b("      font-weight: bold;");t.b("\n" + i);t.b("      height: 23px;");t.b("\n" + i);t.b("      line-height: 20px;");t.b("\n" + i);t.b("      padding: 0;");t.b("\n" + i);t.b("      text-align: center;");t.b("\n" + i);t.b("      width: 23px;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    .history-message {");t.b("\n" + i);t.b("      background-color: rgba(255, 255, 255, 0.7);");t.b("\n" + i);t.b("      border-radius: 1em;");t.b("\n" + i);t.b("      margin: 1em;");t.b("\n" + i);t.b("      padding: 1em;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    .history-row {");t.b("\n" + i);t.b("      display: flex;");t.b("\n" + i);t.b("      flex-wrap: wrap;");t.b("\n" + i);t.b("      height: 465px;");t.b("\n" + i);t.b("      margin-right: 1em;");t.b("\n" + i);t.b("      overflow-y: auto;");t.b("\n" + i);t.b("      scrollbar-color: dark;");t.b("\n" + i);t.b("      scrollbar-width: thin;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    .result-card {");t.b("\n" + i);t.b("      background-color: white;");t.b("\n" + i);t.b("      border-radius: 1em;");t.b("\n" + i);t.b("      box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.3);");t.b("\n" + i);t.b("      height: 205px;");t.b("\n" + i);t.b("      margin: 0.5em;");t.b("\n" + i);t.b("      padding: 0.5em;");t.b("\n" + i);t.b("      text-align: center;");t.b("\n" + i);t.b("      width: 128px;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    .result-image {");t.b("\n" + i);t.b("      background-color: white;");t.b("\n" + i);t.b("      border-radius: 1em;");t.b("\n" + i);t.b("      box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.12),");t.b("\n" + i);t.b("        0 2px 4px 2px rgba(0, 0, 0, 0.08);");t.b("\n" + i);t.b("      position: relative;");t.b("\n" + i);t.b("      top: -0.8em;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    .result-content-column {");t.b("\n" + i);t.b("      display: flex;");t.b("\n" + i);t.b("      flex-direction: column;");t.b("\n" + i);t.b("      height: 103px;");t.b("\n" + i);t.b("      justify-content: space-between;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    .result-name {");t.b("\n" + i);t.b("      -webkit-box-orient: vertical;");t.b("\n" + i);t.b("      -webkit-line-clamp: 3;");t.b("\n" + i);t.b("      color: rgb(52, 56, 111);");t.b("\n" + i);t.b("      display: -webkit-box;");t.b("\n" + i);t.b("      flex-grow: 1;");t.b("\n" + i);t.b("      font-size: 16px;");t.b("\n" + i);t.b("      font-weight: bold;");t.b("\n" + i);t.b("      margin-top: -0.2em;");t.b("\n" + i);t.b("      overflow: hidden;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    .result-location {");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    .result-date {");t.b("\n" + i);t.b("      color: #fb8900;");t.b("\n" + i);t.b("      font-size: 13px;");t.b("\n" + i);t.b("      font-weight: bold;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    .result-icons {");t.b("\n" + i);t.b("      margin-top: 0.5em;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    .result-count {");t.b("\n" + i);t.b("      background: #ffffff;");t.b("\n" + i);t.b("      border-radius: 100%;");t.b("\n" + i);t.b("      border: 1px solid #00cdfb;");t.b("\n" + i);t.b("      box-sizing: border-box;");t.b("\n" + i);t.b("      color: #3ec0d7;");t.b("\n" + i);t.b("      display: inline-block;");t.b("\n" + i);t.b("      font-family: \"Alegreya Sans SC\", sans-serif;");t.b("\n" + i);t.b("      font-size: 18px;");t.b("\n" + i);t.b("      font-weight: 800;");t.b("\n" + i);t.b("      height: 29px;");t.b("\n" + i);t.b("      line-height: 27px;");t.b("\n" + i);t.b("      text-align: center;");t.b("\n" + i);t.b("      user-select: none;");t.b("\n" + i);t.b("      width: 29px;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    .history-tradable {");t.b("\n" + i);t.b("      background-color: #666;");t.b("\n" + i);t.b("      border-radius: 25px;");t.b("\n" + i);t.b("      border: 1px solid #b9b9b9;");t.b("\n" + i);t.b("      color: #ffffff;");t.b("\n" + i);t.b("      display: inline-block;");t.b("\n" + i);t.b("      font-family: \"Temp Menu\", serif;");t.b("\n" + i);t.b("      font-size: 13px;");t.b("\n" + i);t.b("      height: 15px;");t.b("\n" + i);t.b("      line-height: 15px;");t.b("\n" + i);t.b("      text-align: center;");t.b("\n" + i);t.b("      width: 15px;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    .icon-spacer {");t.b("\n" + i);t.b("      display: inline-block;");t.b("\n" + i);t.b("      width: 0.1em;");t.b("\n" + i);t.b("    }");t.b("\n" + i);t.b("  </style>");t.b("\n");t.b("\n" + i);t.b("  <div class=\"history-actions\">");t.b("\n" + i);t.b("    <button id=\"delete-history\" class=\"nl-button\">");t.b("\n" + i);t.b("      ");t.b(t.v(t.d("translate.pet.delete_history",c,p,0)));t.b("\n" + i);t.b("    </button>");t.b("\n");t.b("\n" + i);t.b("    <span class=\"tooltip\">");t.b("\n" + i);t.b("      <span class=\"nl-button help-icon\">?</span>");t.b("\n" + i);t.b("      <div class=\"tooltip-content\">");t.b("\n" + i);t.b("        <p>");t.b(t.t(t.d("translate.pet.saved_locally",c,p,0)));t.b("</p>");t.b("\n" + i);t.b("        <p>");t.b(t.t(t.d("translate.pet.goto_account",c,p,0)));t.b("</p>");t.b("\n" + i);t.b("      </div>");t.b("\n" + i);t.b("    </span>");t.b("\n" + i);t.b("  </div>");t.b("\n");t.b("\n" + i);if(!t.s(t.f("history",c,p,1),c,p,1,0,0,"")){t.b("  <p class=\"history-message\">");t.b(t.v(t.d("translate.pet.empty_history",c,p,0)));t.b("</p>");t.b("\n" + i);};t.b("\n" + i);t.b("  <div class=\"history-row\">");t.b("\n" + i);if(t.s(t.f("history",c,p,1),c,p,0,3189,3822,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("    <div class=\"result-card\">");t.b("\n" + i);t.b("      <img class=\"result-image\" src=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\" />");t.b("\n");t.b("\n" + i);t.b("      <div class=\"result-content-column\">");t.b("\n" + i);t.b("        <div class=\"result-name\">");t.b(t.v(t.f("name",c,p,0)));t.b("</div>");t.b("\n" + i);t.b("        <div class=\"result-location\">");t.b(t.v(t.f("locationName",c,p,0)));t.b("</div>");t.b("\n" + i);t.b("        <div class=\"result-date\">");t.b(t.v(t.f("date",c,p,0)));t.b("</div>");t.b("\n");t.b("\n" + i);t.b("        <div class=\"result-icons\">");t.b("\n" + i);t.b("          ");if(t.s(t.f("count",c,p,1),c,p,0,3525,3568,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("<span class=\"result-count\">");t.b(t.v(t.f("count",c,p,0)));t.b("</span>");});c.pop();}t.b("\n" + i);if(t.s(t.f("count",c,p,1),c,p,0,3599,3678,"{{ }}")){t.rs(c,p,function(c,p,t){if(t.s(t.f("tradable",c,p,1),c,p,0,3612,3665,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("          <div class=\"icon-spacer\"></div>");t.b("\n" + i);t.b("          ");});c.pop();}});c.pop();}t.b(" ");if(t.s(t.f("tradable",c,p,1),c,p,0,3702,3765,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("<span class=\"history-tradable\"");t.b("\n" + i);t.b("            ></span");t.b("\n" + i);t.b("          >");});c.pop();}t.b("\n" + i);t.b("        </div>");t.b("\n" + i);t.b("      </div>");t.b("\n" + i);t.b("    </div>");t.b("\n" + i);});c.pop();}t.b("  </div>");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<div id=\"history-container\" style=\"width: 100%\">\n  <style>\n    .history-actions {\n      margin-bottom: 1em;\n    }\n\n    #delete-history {\n      margin-right: 1em;\n    }\n\n    .help-icon {\n      background-color: #0291f6;\n      border-radius: 50%;\n      box-shadow: none;\n      color: #fff;\n      font-size: 26px;\n      font-weight: bold;\n      height: 23px;\n      line-height: 20px;\n      padding: 0;\n      text-align: center;\n      width: 23px;\n    }\n\n    .history-message {\n      background-color: rgba(255, 255, 255, 0.7);\n      border-radius: 1em;\n      margin: 1em;\n      padding: 1em;\n    }\n\n    .history-row {\n      display: flex;\n      flex-wrap: wrap;\n      height: 465px;\n      margin-right: 1em;\n      overflow-y: auto;\n      scrollbar-color: dark;\n      scrollbar-width: thin;\n    }\n\n    .result-card {\n      background-color: white;\n      border-radius: 1em;\n      box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.3);\n      height: 205px;\n      margin: 0.5em;\n      padding: 0.5em;\n      text-align: center;\n      width: 128px;\n    }\n\n    .result-image {\n      background-color: white;\n      border-radius: 1em;\n      box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.12),\n        0 2px 4px 2px rgba(0, 0, 0, 0.08);\n      position: relative;\n      top: -0.8em;\n    }\n\n    .result-content-column {\n      display: flex;\n      flex-direction: column;\n      height: 103px;\n      justify-content: space-between;\n    }\n\n    .result-name {\n      -webkit-box-orient: vertical;\n      -webkit-line-clamp: 3;\n      color: rgb(52, 56, 111);\n      display: -webkit-box;\n      flex-grow: 1;\n      font-size: 16px;\n      font-weight: bold;\n      margin-top: -0.2em;\n      overflow: hidden;\n    }\n\n    .result-location {\n    }\n\n    .result-date {\n      color: #fb8900;\n      font-size: 13px;\n      font-weight: bold;\n    }\n\n    .result-icons {\n      margin-top: 0.5em;\n    }\n\n    .result-count {\n      background: #ffffff;\n      border-radius: 100%;\n      border: 1px solid #00cdfb;\n      box-sizing: border-box;\n      color: #3ec0d7;\n      display: inline-block;\n      font-family: \"Alegreya Sans SC\", sans-serif;\n      font-size: 18px;\n      font-weight: 800;\n      height: 29px;\n      line-height: 27px;\n      text-align: center;\n      user-select: none;\n      width: 29px;\n    }\n\n    .history-tradable {\n      background-color: #666;\n      border-radius: 25px;\n      border: 1px solid #b9b9b9;\n      color: #ffffff;\n      display: inline-block;\n      font-family: \"Temp Menu\", serif;\n      font-size: 13px;\n      height: 15px;\n      line-height: 15px;\n      text-align: center;\n      width: 15px;\n    }\n\n    .icon-spacer {\n      display: inline-block;\n      width: 0.1em;\n    }\n  </style>\n\n  <div class=\"history-actions\">\n    <button id=\"delete-history\" class=\"nl-button\">\n      {{translate.pet.delete_history}}\n    </button>\n\n    <span class=\"tooltip\">\n      <span class=\"nl-button help-icon\">?</span>\n      <div class=\"tooltip-content\">\n        <p>{{{translate.pet.saved_locally}}}</p>\n        <p>{{{translate.pet.goto_account}}}</p>\n      </div>\n    </span>\n  </div>\n\n  {{^history}}\n  <p class=\"history-message\">{{translate.pet.empty_history}}</p>\n  {{/history}}\n\n  <div class=\"history-row\">\n    {{#history}}\n    <div class=\"result-card\">\n      <img class=\"result-image\" src=\"{{icon}}\" />\n\n      <div class=\"result-content-column\">\n        <div class=\"result-name\">{{name}}</div>\n        <div class=\"result-location\">{{locationName}}</div>\n        <div class=\"result-date\">{{date}}</div>\n\n        <div class=\"result-icons\">\n          {{#count}}<span class=\"result-count\">{{count}}</span>{{/count}}\n          {{#count}}{{#tradable}}\n          <div class=\"icon-spacer\"></div>\n          {{/tradable}}{{/count}} {{#tradable}}<span class=\"history-tradable\"\n            ></span\n          >{{/tradable}}\n        </div>\n      </div>\n    </div>\n    {{/history}}\n  </div>\n</div>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/favourite_outfit_flavr.html":
/*!********************************************************!*\
  !*** ./src/templates/html/favourite_outfit_flavr.html ***!
  \********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<style>");t.b("\n" + i);t.b("  .created-outfit-popup .flavr-outer .flavr-message::after {");t.b("\n" + i);t.b("    background-image: url(");t.b(t.v(t.f("url",c,p,0)));t.b(");");t.b("\n" + i);t.b("    background-size: contain;");t.b("\n" + i);t.b("  }");t.b("\n" + i);t.b("</style>");t.b("\n");t.b("\n" + i);t.b("<h1>");t.b(t.v(t.f("name",c,p,0)));t.b("</h1>");t.b("\n");t.b("\n" + i);t.b("<p>");t.b(t.t(t.d("translate.appearance.favourites.click_outfit.saved_locally",c,p,0)));t.b("</p>");t.b("\n");t.b("\n" + i);t.b("<br />");t.b("\n");t.b("\n" + i);t.b("<p>");t.b(t.t(t.d("translate.appearance.favourites.click_outfit.goto_account",c,p,0)));t.b("</p>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<style>\n  .created-outfit-popup .flavr-outer .flavr-message::after {\n    background-image: url({{url}});\n    background-size: contain;\n  }\n</style>\n\n<h1>{{name}}</h1>\n\n<p>{{{translate.appearance.favourites.click_outfit.saved_locally}}}</p>\n\n<br />\n\n<p>{{{translate.appearance.favourites.click_outfit.goto_account}}}</p>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/favourites_action.html":
/*!***************************************************!*\
  !*** ./src/templates/html/favourites_action.html ***!
  \***************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<button id=\"");t.b(t.v(t.f("id",c,p,0)));t.b("\" class=\"nl-button favorites-action-ee\">");t.b(t.v(t.f("text",c,p,0)));t.b("</button>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<button id=\"{{id}}\" class=\"nl-button favorites-action-ee\">{{text}}</button>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/flavr_notif/icon_message.html":
/*!**********************************************************!*\
  !*** ./src/templates/html/flavr_notif/icon_message.html ***!
  \**********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<img");t.b("\n" + i);t.b("  src=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  alt=\"");t.b(t.v(t.f("name",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  height=\"21\"");t.b("\n" + i);t.b("  style=\"display: inline-block; margin: -2px auto\"");t.b("\n" + i);t.b("/>");t.b("\n" + i);t.b(t.t(t.f("message",c,p,0)));t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<img\n  src=\"{{icon}}\"\n  alt=\"{{name}}\"\n  height=\"21\"\n  style=\"display: inline-block; margin: -2px auto\"\n/>\n{{{message}}}\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/header_takeover.html":
/*!*************************************************!*\
  !*** ./src/templates/html/header_takeover.html ***!
  \*************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<li");t.b("\n" + i);t.b("  id=\"header-takeover\"");t.b("\n" + i);t.b("  title=\"");t.b(t.v(t.d("translate.home.takeover",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  style=\"transition: transform ease-in-out 200ms; cursor: pointer\"");t.b("\n" + i);t.b("  onMouseOver=\"this.style.transform='scale(1.3)'\"");t.b("\n" + i);t.b("  onMouseOut=\"this.style.transform='scale(1)'\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b("  <a>");t.b("\n" + i);t.b("    <img");t.b("\n" + i);t.b("      src=\"/static/img/new-layout/home/connected/lock.png\"");t.b("\n" + i);t.b("      alt=\"");t.b(t.v(t.d("translate.home.takeover",c,p,0)));t.b("\"");t.b("\n" + i);t.b("      style=\"filter: contrast(0%) brightness(200%) ");if(!t.s(t.f("takeover",c,p,1),c,p,1,0,0,"")){t.b("opacity(0)");};t.b("\"");t.b("\n" + i);t.b("      height=\"21\"");t.b("\n" + i);t.b("    />");t.b("\n" + i);t.b("  </a>");t.b("\n" + i);t.b("</li>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<li\n  id=\"header-takeover\"\n  title=\"{{translate.home.takeover}}\"\n  style=\"transition: transform ease-in-out 200ms; cursor: pointer\"\n  onMouseOver=\"this.style.transform='scale(1.3)'\"\n  onMouseOut=\"this.style.transform='scale(1)'\"\n>\n  <a>\n    <img\n      src=\"/static/img/new-layout/home/connected/lock.png\"\n      alt=\"{{translate.home.takeover}}\"\n      style=\"filter: contrast(0%) brightness(200%) {{^takeover}}opacity(0){{/takeover}}\"\n      height=\"21\"\n    />\n  </a>\n</li>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/home_content_small.html":
/*!****************************************************!*\
  !*** ./src/templates/html/home_content_small.html ***!
  \****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<a");t.b("\n" + i);t.b("  id=\"home-");t.b(t.v(t.f("id",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  class=\"home-content-tile home-content-small home-content-small-ee\"");t.b("\n" + i);t.b("  href=\"");t.b(t.v(t.f("href",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  style=\"background-image: url(");t.b(t.v(t.f("backgroundImage",c,p,0)));t.b(");\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b("  <h4>");t.b(t.v(t.f("h4",c,p,0)));t.b("</h4>");t.b("\n" + i);t.b("</a>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<a\n  id=\"home-{{id}}\"\n  class=\"home-content-tile home-content-small home-content-small-ee\"\n  href=\"{{href}}\"\n  style=\"background-image: url({{backgroundImage}});\"\n>\n  <h4>{{h4}}</h4>\n</a>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/main_menu.html":
/*!*******************************************!*\
  !*** ./src/templates/html/main_menu.html ***!
  \*******************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<li class=\"main-menu-");t.b(t.v(t.f("class",c,p,0)));t.b(" main-menu-ee\">");t.b("\n" + i);t.b("  <a href=\"");t.b(t.v(t.f("href",c,p,0)));t.b("\">");t.b(t.v(t.f("text",c,p,0)));t.b("</a>");t.b("\n" + i);t.b("</li>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<li class=\"main-menu-{{class}} main-menu-ee\">\n  <a href=\"{{href}}\">{{text}}</a>\n</li>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/main_menu_purroshop.html":
/*!*****************************************************!*\
  !*** ./src/templates/html/main_menu_purroshop.html ***!
  \*****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<li class=\"main-menu-purroshop\">");t.b("\n" + i);t.b("  <a href=\"/mall/purroshop\">");t.b("\n" + i);t.b("    <img");t.b("\n" + i);t.b("      height=\"20\"");t.b("\n" + i);t.b("      src=\"/assets/img/item/consumable/b647d54afd6b04353e129219810512f5.png\"");t.b("\n" + i);t.b("      style=\"vertical-align: middle\"");t.b("\n" + i);t.b("    />");t.b("\n" + i);t.b("    Purro'Shop");t.b("\n" + i);t.b("  </a>");t.b("\n" + i);t.b("</li>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<li class=\"main-menu-purroshop\">\n  <a href=\"/mall/purroshop\">\n    <img\n      height=\"20\"\n      src=\"/assets/img/item/consumable/b647d54afd6b04353e129219810512f5.png\"\n      style=\"vertical-align: middle\"\n    />\n    Purro'Shop\n  </a>\n</li>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/market_history.html":
/*!************************************************!*\
  !*** ./src/templates/html/market_history.html ***!
  \************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<style>");t.b("\n" + i);t.b("  /* #marketplace-abstract-purchases and #marketplace-abstract-sales were");t.b("\n" + i);t.b("  re-written to target #purchase-history and #sale-history. */");t.b("\n");t.b("\n" + i);t.b("  #purchase-history,");t.b("\n" + i);t.b("  #sale-history {");t.b("\n" + i);t.b("    height: 600px;");t.b("\n" + i);t.b("    position: relative;");t.b("\n" + i);t.b("    width: 360px;");t.b("\n" + i);t.b("    display: inline-block;");t.b("\n" + i);t.b("    vertical-align: top;");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  #sale-history .abstract-actions,");t.b("\n" + i);t.b("  #purchase-history .abstract-actions {");t.b("\n" + i);t.b("    position: relative;");t.b("\n" + i);t.b("    top: -40px;");t.b("\n" + i);t.b("    display: flex;");t.b("\n" + i);t.b("    flex-direction: column;");t.b("\n" + i);t.b("    justify-content: space-evenly;");t.b("\n" + i);t.b("    height: 80px;");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  #sale-history .abstract-time,");t.b("\n" + i);t.b("  #purchase-history .abstract-time {");t.b("\n" + i);t.b("    position: static;");t.b("\n" + i);t.b("    display: inline;");t.b("\n" + i);t.b("    height: auto;");t.b("\n" + i);t.b("    color: #fb8900;");t.b("\n" + i);t.b("    font-weight: bold;");t.b("\n" + i);t.b("    font-size: 13px;");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  #purchase-history {");t.b("\n" + i);t.b("    margin-right: 80px;");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  #purchase-history:before {");t.b("\n" + i);t.b("    content: \"\";");t.b("\n" + i);t.b("    position: absolute;");t.b("\n" + i);t.b("    top: 120px;");t.b("\n" + i);t.b("    right: -42px;");t.b("\n" + i);t.b("    border-right: solid 2px #aaa;");t.b("\n" + i);t.b("    height: 320px;");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  /* Custom fixes to the layout */");t.b("\n");t.b("\n" + i);t.b("  #purchase-history li {");t.b("\n" + i);t.b("    margin-left: 4px;");t.b("\n" + i);t.b("    margin-right: 4px;");t.b("\n" + i);t.b("  }");t.b("\n" + i);t.b("</style>");t.b("\n");t.b("\n" + i);t.b("<!-- Purchases -->");t.b("\n" + i);t.b("<div class=\"marketplace-abstract\" id=\"purchase-history\">");t.b("\n" + i);t.b("  <h2 class=\"section-subtitle\">");t.b("\n" + i);t.b("    ");t.b(t.v(t.d("translate.market.auctions.purchase_history",c,p,0)));t.b("\n" + i);t.b("  </h2>");t.b("\n");t.b("\n" + i);t.b("  <ul class=\"marketplace-purchases-items\">");t.b("\n" + i);if(t.s(t.f("purchases",c,p,1),c,p,0,1284,2545,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("    <li");t.b("\n" + i);t.b("      data-itemid=\"");t.b(t.v(t.f("itemid",c,p,0)));t.b("\"");t.b("\n" + i);t.b("      class=\"marketplace-abstract marketplace-auctions-item marketplace-sales-item\"");t.b("\n" + i);t.b("    >");t.b("\n" + i);t.b("      <!-- Icon -->");t.b("\n" + i);t.b("      <div class=\"abstract-icon\">");t.b("\n" + i);t.b("        <img src=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\" />");t.b("\n" + i);t.b("      </div>");t.b("\n");t.b("\n" + i);t.b("      <!-- Prices -->");t.b("\n" + i);t.b("      <div class=\"abstract-container\">");t.b("\n" + i);t.b("        <div class=\"abstract-name\">");t.b(t.v(t.f("name",c,p,0)));t.b("</div>");t.b("\n" + i);t.b("        <div class=\"abstract-content\">");t.b("\n" + i);t.b("          <div class=\"abstract-currentPrice\">");t.b("\n" + i);t.b("            ");if(t.s(t.f("currentPrice",c,p,1),c,p,0,1738,1907,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" ");t.b(t.v(t.d("translate.market.auctions.current_price",c,p,0)));t.b("\n" + i);t.b("            <span class=\"price-item\">");t.b(t.v(t.d("currentPrice.price",c,p,0)));t.b("</span>");t.b("\n" + i);t.b("            <span class=\"maana-icon\"></span>");t.b("\n" + i);});c.pop();}t.b("            <br />");t.b("\n" + i);t.b("            ");if(t.s(t.f("buyNowPrice",c,p,1),c,p,0,1972,2140,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" ");t.b(t.v(t.d("translate.market.auctions.buy_now_price",c,p,0)));t.b("\n" + i);t.b("            <span class=\"price-item\">");t.b(t.v(t.d("buyNowPrice.price",c,p,0)));t.b("</span>");t.b("\n" + i);t.b("            <span class=\"maana-icon\"></span>");t.b("\n" + i);});c.pop();}t.b("          </div>");t.b("\n" + i);t.b("        </div>");t.b("\n" + i);t.b("      </div>");t.b("\n");t.b("\n" + i);t.b("      <!-- Actions -->");t.b("\n" + i);t.b("      <div class=\"abstract-actions\">");t.b("\n" + i);t.b("        <div class=\"abstract-time\">");t.b(t.v(t.f("date",c,p,0)));t.b("</div>");t.b("\n" + i);t.b("        <div");t.b("\n" + i);t.b("          class=\"nl-button nl-button-sm marketplace-itemDetail-cancel delete-button\"");t.b("\n" + i);t.b("          data-itemid=\"");t.b(t.v(t.f("itemid",c,p,0)));t.b("\"");t.b("\n" + i);t.b("        >");t.b("\n" + i);t.b("          ");t.b(t.v(t.d("translate.market.auctions.delete",c,p,0)));t.b("\n" + i);t.b("        </div>");t.b("\n" + i);t.b("      </div>");t.b("\n" + i);t.b("    </li>");t.b("\n" + i);});c.pop();}t.b("  </ul>");t.b("\n" + i);t.b("</div>");t.b("\n");t.b("\n" + i);t.b("<!-- Sales -->");t.b("\n" + i);t.b("<div class=\"marketplace-abstract\" id=\"sale-history\">");t.b("\n" + i);t.b("  <h2 class=\"section-subtitle\">");t.b(t.v(t.d("translate.market.auctions.sales_history",c,p,0)));t.b("</h2>");t.b("\n");t.b("\n" + i);t.b("  <ul class=\"marketplace-sales-items\">");t.b("\n" + i);if(t.s(t.f("sales",c,p,1),c,p,0,2778,3924,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("    <li class=\"marketplace-abstract marketplace-sales-item\">");t.b("\n" + i);t.b("      <!-- Icon -->");t.b("\n" + i);t.b("      <div class=\"abstract-icon\">");t.b("\n" + i);t.b("        <img src=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\" />");t.b("\n" + i);t.b("      </div>");t.b("\n");t.b("\n" + i);t.b("      <!-- Prices -->");t.b("\n" + i);t.b("      <div class=\"abstract-container\">");t.b("\n" + i);t.b("        <div class=\"abstract-name\">");t.b(t.v(t.f("name",c,p,0)));t.b("</div>");t.b("\n" + i);t.b("        <div class=\"abstract-content\">");t.b("\n" + i);t.b("          <div class=\"abstract-currentPrice\">");t.b("\n" + i);t.b("            ");if(t.s(t.f("currentPrice",c,p,1),c,p,0,3164,3327,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" ");t.b(t.v(t.d("translate.market.auctions.current_price",c,p,0)));t.b("\n" + i);t.b("            <span class=\"price-item\">");t.b(t.v(t.f("currentPrice",c,p,0)));t.b("</span>");t.b("\n" + i);t.b("            <span class=\"maana-icon\"></span>");t.b("\n" + i);});c.pop();}t.b("            <br />");t.b("\n" + i);t.b("            ");if(t.s(t.f("buyNowPrice",c,p,1),c,p,0,3392,3554,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" ");t.b(t.v(t.d("translate.market.auctions.buy_now_price",c,p,0)));t.b("\n" + i);t.b("            <span class=\"price-item\">");t.b(t.v(t.f("buyNowPrice",c,p,0)));t.b("</span>");t.b("\n" + i);t.b("            <span class=\"maana-icon\"></span>");t.b("\n" + i);});c.pop();}t.b("          </div>");t.b("\n" + i);t.b("        </div>");t.b("\n" + i);t.b("      </div>");t.b("\n");t.b("\n" + i);t.b("      <!-- Actions -->");t.b("\n" + i);t.b("      <div class=\"abstract-actions\">");t.b("\n" + i);t.b("        <div class=\"abstract-time\">");t.b(t.v(t.f("date",c,p,0)));t.b("</div>");t.b("\n" + i);t.b("        <div");t.b("\n" + i);t.b("          class=\"nl-button nl-button-sm marketplace-itemDetail-cancel delete-button\"");t.b("\n" + i);t.b("        >");t.b("\n" + i);t.b("          ");t.b(t.v(t.d("translate.market.auctions.delete",c,p,0)));t.b("\n" + i);t.b("        </div>");t.b("\n" + i);t.b("      </div>");t.b("\n" + i);t.b("    </li>");t.b("\n" + i);});c.pop();}t.b("  </ul>");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<style>\n  /* #marketplace-abstract-purchases and #marketplace-abstract-sales were\n  re-written to target #purchase-history and #sale-history. */\n\n  #purchase-history,\n  #sale-history {\n    height: 600px;\n    position: relative;\n    width: 360px;\n    display: inline-block;\n    vertical-align: top;\n  }\n\n  #sale-history .abstract-actions,\n  #purchase-history .abstract-actions {\n    position: relative;\n    top: -40px;\n    display: flex;\n    flex-direction: column;\n    justify-content: space-evenly;\n    height: 80px;\n  }\n\n  #sale-history .abstract-time,\n  #purchase-history .abstract-time {\n    position: static;\n    display: inline;\n    height: auto;\n    color: #fb8900;\n    font-weight: bold;\n    font-size: 13px;\n  }\n\n  #purchase-history {\n    margin-right: 80px;\n  }\n\n  #purchase-history:before {\n    content: \"\";\n    position: absolute;\n    top: 120px;\n    right: -42px;\n    border-right: solid 2px #aaa;\n    height: 320px;\n  }\n\n  /* Custom fixes to the layout */\n\n  #purchase-history li {\n    margin-left: 4px;\n    margin-right: 4px;\n  }\n</style>\n\n<!-- Purchases -->\n<div class=\"marketplace-abstract\" id=\"purchase-history\">\n  <h2 class=\"section-subtitle\">\n    {{translate.market.auctions.purchase_history}}\n  </h2>\n\n  <ul class=\"marketplace-purchases-items\">\n    {{#purchases}}\n    <li\n      data-itemid=\"{{itemid}}\"\n      class=\"marketplace-abstract marketplace-auctions-item marketplace-sales-item\"\n    >\n      <!-- Icon -->\n      <div class=\"abstract-icon\">\n        <img src=\"{{icon}}\" />\n      </div>\n\n      <!-- Prices -->\n      <div class=\"abstract-container\">\n        <div class=\"abstract-name\">{{name}}</div>\n        <div class=\"abstract-content\">\n          <div class=\"abstract-currentPrice\">\n            {{#currentPrice}} {{translate.market.auctions.current_price}}\n            <span class=\"price-item\">{{currentPrice.price}}</span>\n            <span class=\"maana-icon\"></span>\n            {{/currentPrice}}\n            <br />\n            {{#buyNowPrice}} {{translate.market.auctions.buy_now_price}}\n            <span class=\"price-item\">{{buyNowPrice.price}}</span>\n            <span class=\"maana-icon\"></span>\n            {{/buyNowPrice}}\n          </div>\n        </div>\n      </div>\n\n      <!-- Actions -->\n      <div class=\"abstract-actions\">\n        <div class=\"abstract-time\">{{date}}</div>\n        <div\n          class=\"nl-button nl-button-sm marketplace-itemDetail-cancel delete-button\"\n          data-itemid=\"{{itemid}}\"\n        >\n          {{translate.market.auctions.delete}}\n        </div>\n      </div>\n    </li>\n    {{/purchases}}\n  </ul>\n</div>\n\n<!-- Sales -->\n<div class=\"marketplace-abstract\" id=\"sale-history\">\n  <h2 class=\"section-subtitle\">{{translate.market.auctions.sales_history}}</h2>\n\n  <ul class=\"marketplace-sales-items\">\n    {{#sales}}\n    <li class=\"marketplace-abstract marketplace-sales-item\">\n      <!-- Icon -->\n      <div class=\"abstract-icon\">\n        <img src=\"{{icon}}\" />\n      </div>\n\n      <!-- Prices -->\n      <div class=\"abstract-container\">\n        <div class=\"abstract-name\">{{name}}</div>\n        <div class=\"abstract-content\">\n          <div class=\"abstract-currentPrice\">\n            {{#currentPrice}} {{translate.market.auctions.current_price}}\n            <span class=\"price-item\">{{currentPrice}}</span>\n            <span class=\"maana-icon\"></span>\n            {{/currentPrice}}\n            <br />\n            {{#buyNowPrice}} {{translate.market.auctions.buy_now_price}}\n            <span class=\"price-item\">{{buyNowPrice}}</span>\n            <span class=\"maana-icon\"></span>\n            {{/buyNowPrice}}\n          </div>\n        </div>\n      </div>\n\n      <!-- Actions -->\n      <div class=\"abstract-actions\">\n        <div class=\"abstract-time\">{{date}}</div>\n        <div\n          class=\"nl-button nl-button-sm marketplace-itemDetail-cancel delete-button\"\n        >\n          {{translate.market.auctions.delete}}\n        </div>\n      </div>\n    </li>\n    {{/sales}}\n  </ul>\n</div>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/outfit_thumbs.html":
/*!***********************************************!*\
  !*** ./src/templates/html/outfit_thumbs.html ***!
  \***********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<div id=\"ee-outfit-thumbs\">");t.b("\n" + i);t.b("  <style>");t.b("\n" + i);t.b("    #appearance-items-category-favorites .slot.ee-available-slot {");t.b("\n" + i);t.b("      background-image: url(https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/available-favorite.png);");t.b("\n" + i);t.b("      background-position: -14px -11px;");t.b("\n" + i);t.b("      background-size: 171px 244px;");t.b("\n" + i);t.b("      border-radius: 44px;");t.b("\n" + i);t.b("      box-shadow: 0 0 4px 4px rgba(255, 255, 255, 0.8);");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    #appearance-items-category-favorites .slot.ee-available-slot::after {");t.b("\n" + i);t.b("      background: url(/static/img/new-layout/wardrobe/icon-plus.png);");t.b("\n" + i);t.b("      content: \" \";");t.b("\n" + i);t.b("      filter: drop-shadow(0 0 6px rgba(237, 12, 245, 0.9));");t.b("\n" + i);t.b("      height: 71px;");t.b("\n" + i);t.b("      left: 50%;");t.b("\n" + i);t.b("      opacity: 0;");t.b("\n" + i);t.b("      position: absolute;");t.b("\n" + i);t.b("      top: 50%;");t.b("\n" + i);t.b("      transform: translate(-50%, -50%);");t.b("\n" + i);t.b("      transition: opacity ease-in-out 100ms;");t.b("\n" + i);t.b("      width: 66px;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    #appearance-items-category-favorites .slot.ee-available-slot:hover::after,");t.b("\n" + i);t.b("    #appearance-items-category-favorites .slot.ee-outfit-thumb:hover p {");t.b("\n" + i);t.b("      opacity: 1;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    #appearance-items-category-favorites .slot.ee-outfit-thumb img {");t.b("\n" + i);t.b("      border-radius: 44px;");t.b("\n" + i);t.b("      height: 100%;");t.b("\n" + i);t.b("      width: 100%;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    #appearance-items-category-favorites .slot.ee-outfit-thumb p {");t.b("\n" + i);t.b("      background: rgba(0, 0, 0, 0.5);");t.b("\n" + i);t.b("      color: #fff;");t.b("\n" + i);t.b("      font-family: \"Alegreya Sans SC\", sans-serif;");t.b("\n" + i);t.b("      font-size: 22px;");t.b("\n" + i);t.b("      font-weight: 700;");t.b("\n" + i);t.b("      left: 50%;");t.b("\n" + i);t.b("      line-height: 22px;");t.b("\n" + i);t.b("      opacity: 0;");t.b("\n" + i);t.b("      padding: 12px 0;");t.b("\n" + i);t.b("      position: absolute;");t.b("\n" + i);t.b("      text-align: center;");t.b("\n" + i);t.b("      top: 50%;");t.b("\n" + i);t.b("      transform: translate(-50%, -50%);");t.b("\n" + i);t.b("      transition: opacity ease-in-out 400ms;");t.b("\n" + i);t.b("      width: 100%;");t.b("\n" + i);t.b("    }");t.b("\n" + i);t.b("  </style>");t.b("\n");t.b("\n" + i);if(t.s(t.f("outfits",c,p,1),c,p,0,1654,1790,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("  <div class=\"slot ee-outfit-thumb\" data-array-index=\"");t.b(t.v(t.f("id",c,p,0)));t.b("\">");t.b("\n" + i);t.b("    <img alt=\"");t.b(t.v(t.f("name",c,p,0)));t.b("\" src=\"");t.b(t.v(t.f("url",c,p,0)));t.b("\" />");t.b("\n" + i);t.b("    <p>");t.b(t.v(t.f("name",c,p,0)));t.b("</p>");t.b("\n" + i);t.b("  </div>");t.b("\n" + i);});c.pop();}t.b("\n" + i);t.b("  <div class=\"slot ee-available-slot\"></div>");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<div id=\"ee-outfit-thumbs\">\n  <style>\n    #appearance-items-category-favorites .slot.ee-available-slot {\n      background-image: url(https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/available-favorite.png);\n      background-position: -14px -11px;\n      background-size: 171px 244px;\n      border-radius: 44px;\n      box-shadow: 0 0 4px 4px rgba(255, 255, 255, 0.8);\n    }\n\n    #appearance-items-category-favorites .slot.ee-available-slot::after {\n      background: url(/static/img/new-layout/wardrobe/icon-plus.png);\n      content: \" \";\n      filter: drop-shadow(0 0 6px rgba(237, 12, 245, 0.9));\n      height: 71px;\n      left: 50%;\n      opacity: 0;\n      position: absolute;\n      top: 50%;\n      transform: translate(-50%, -50%);\n      transition: opacity ease-in-out 100ms;\n      width: 66px;\n    }\n\n    #appearance-items-category-favorites .slot.ee-available-slot:hover::after,\n    #appearance-items-category-favorites .slot.ee-outfit-thumb:hover p {\n      opacity: 1;\n    }\n\n    #appearance-items-category-favorites .slot.ee-outfit-thumb img {\n      border-radius: 44px;\n      height: 100%;\n      width: 100%;\n    }\n\n    #appearance-items-category-favorites .slot.ee-outfit-thumb p {\n      background: rgba(0, 0, 0, 0.5);\n      color: #fff;\n      font-family: \"Alegreya Sans SC\", sans-serif;\n      font-size: 22px;\n      font-weight: 700;\n      left: 50%;\n      line-height: 22px;\n      opacity: 0;\n      padding: 12px 0;\n      position: absolute;\n      text-align: center;\n      top: 50%;\n      transform: translate(-50%, -50%);\n      transition: opacity ease-in-out 400ms;\n      width: 100%;\n    }\n  </style>\n\n  {{#outfits}}\n  <div class=\"slot ee-outfit-thumb\" data-array-index=\"{{id}}\">\n    <img alt=\"{{name}}\" src=\"{{url}}\" />\n    <p>{{name}}</p>\n  </div>\n  {{/outfits}}\n\n  <div class=\"slot ee-available-slot\"></div>\n</div>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/profile_contact_action.html":
/*!********************************************************!*\
  !*** ./src/templates/html/profile_contact_action.html ***!
  \********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<li id=\"");t.b(t.v(t.f("id",c,p,0)));t.b("\" class=\"profile-contact-action-ee\">");t.b("\n" + i);t.b("  <span class=\"nl-button nl-button-sm\">");t.b("\n" + i);t.b("    <div class=\"action-description\">");t.b(t.v(t.f("actionDescription",c,p,0)));t.b("</div>");t.b("\n" + i);t.b("  </span>");t.b("\n" + i);t.b("</li>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<li id=\"{{id}}\" class=\"profile-contact-action-ee\">\n  <span class=\"nl-button nl-button-sm\">\n    <div class=\"action-description\">{{actionDescription}}</div>\n  </span>\n</li>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/settings.html":
/*!******************************************!*\
  !*** ./src/templates/html/settings.html ***!
  \******************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<div class=\"account-misc-bloc account-ee-bloc bloc\">");t.b("\n" + i);t.b("  <!--");t.b("\n" + i);t.b("  <style>");t.b("\n" + i);t.b("    table {");t.b("\n" + i);t.b("      width: 100%;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    th {");t.b("\n" + i);t.b("      text-align: start;");t.b("\n" + i);t.b("      padding: 1em;");t.b("\n" + i);t.b("    }");t.b("\n" + i);t.b("  </style>");t.b("\n" + i);t.b("  -->");t.b("\n");t.b("\n" + i);t.b("  <!-- Settings -->");t.b("\n" + i);t.b("  <h2 class=\"section-title\">");t.b(t.v(t.d("translate.account.enhancements",c,p,0)));t.b("</h2>");t.b("\n" + i);t.b("  <ul class=\"account-misc-actions\">");t.b("\n" + i);t.b("    <li");t.b("\n" + i);t.b("      id=\"ee-debug-enabled\"");t.b("\n" + i);t.b("      class=\"nl-button nl-button-sm ");if(t.s(t.f("debug",c,p,1),c,p,0,392,398,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("active");});c.pop();}t.b("\"");t.b("\n" + i);t.b("      title=\"");t.b(t.v(t.d("translate.account.debug_tooltip",c,p,0)));t.b("\"");t.b("\n" + i);t.b("    >");t.b("\n" + i);t.b("      ");t.b(t.v(t.d("translate.account.debug",c,p,0)));t.b("\n" + i);t.b("    </li>");t.b("\n" + i);t.b("    <li");t.b("\n" + i);t.b("      id=\"ee-minigames-enabled\"");t.b("\n" + i);t.b("      class=\"nl-button nl-button-sm ");if(t.s(t.f("minigames",c,p,1),c,p,0,600,606,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("active");});c.pop();}t.b("\"");t.b("\n" + i);t.b("    >");t.b("\n" + i);t.b("      ");t.b(t.v(t.d("translate.account.minigames",c,p,0)));t.b("\n" + i);t.b("    </li>");t.b("\n" + i);t.b("    <li");t.b("\n" + i);t.b("      id=\"ee-explorations-enabled\"");t.b("\n" + i);t.b("      class=\"nl-button nl-button-sm ");if(t.s(t.f("explorations",c,p,1),c,p,0,772,778,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("active");});c.pop();}t.b("\"");t.b("\n" + i);t.b("    >");t.b("\n" + i);t.b("      ");t.b(t.v(t.d("translate.account.explorations",c,p,0)));t.b("\n" + i);t.b("    </li>");t.b("\n" + i);t.b("    <li");t.b("\n" + i);t.b("      id=\"ee-market-enabled\"");t.b("\n" + i);t.b("      class=\"nl-button nl-button-sm ");if(t.s(t.f("market",c,p,1),c,p,0,938,944,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("active");});c.pop();}t.b("\"");t.b("\n" + i);t.b("    >");t.b("\n" + i);t.b("      ");t.b(t.v(t.d("translate.account.market",c,p,0)));t.b("\n" + i);t.b("    </li>");t.b("\n" + i);t.b("    <li id=\"ee-import\" class=\"nl-button nl-button-sm\">");t.b("\n" + i);t.b("      ");t.b(t.v(t.d("translate.account.import",c,p,0)));t.b("\n" + i);t.b("    </li>");t.b("\n" + i);t.b("    <li id=\"ee-export\" class=\"nl-button nl-button-sm\">");t.b("\n" + i);t.b("      ");t.b(t.v(t.d("translate.account.export",c,p,0)));t.b("\n" + i);t.b("    </li>");t.b("\n" + i);t.b("  </ul>");t.b("\n");t.b("\n" + i);t.b("  <!-- Explorations");t.b("\n" + i);t.b("  <h3 class=\"section-title\">Explorations</h3>");t.b("\n" + i);t.b("  <table>");t.b("\n" + i);t.b("    <thead>");t.b("\n" + i);t.b("      <th>Location</th>");t.b("\n" + i);t.b("      <th>Delete</th>");t.b("\n" + i);t.b("    </thead>");t.b("\n" + i);t.b("    <tbody>");t.b("\n" + i);t.b("      <td>Rock</td>");t.b("\n" + i);t.b("      <td>");t.b("\n" + i);t.b("        <div class=\"nl-button nl-button-sm\">Delete</div>");t.b("\n" + i);t.b("      </td>");t.b("\n" + i);t.b("    </tbody>");t.b("\n" + i);t.b("  </table>");t.b("\n" + i);t.b("  -->");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<div class=\"account-misc-bloc account-ee-bloc bloc\">\n  <!--\n  <style>\n    table {\n      width: 100%;\n    }\n\n    th {\n      text-align: start;\n      padding: 1em;\n    }\n  </style>\n  -->\n\n  <!-- Settings -->\n  <h2 class=\"section-title\">{{translate.account.enhancements}}</h2>\n  <ul class=\"account-misc-actions\">\n    <li\n      id=\"ee-debug-enabled\"\n      class=\"nl-button nl-button-sm {{#debug}}active{{/debug}}\"\n      title=\"{{translate.account.debug_tooltip}}\"\n    >\n      {{translate.account.debug}}\n    </li>\n    <li\n      id=\"ee-minigames-enabled\"\n      class=\"nl-button nl-button-sm {{#minigames}}active{{/minigames}}\"\n    >\n      {{translate.account.minigames}}\n    </li>\n    <li\n      id=\"ee-explorations-enabled\"\n      class=\"nl-button nl-button-sm {{#explorations}}active{{/explorations}}\"\n    >\n      {{translate.account.explorations}}\n    </li>\n    <li\n      id=\"ee-market-enabled\"\n      class=\"nl-button nl-button-sm {{#market}}active{{/market}}\"\n    >\n      {{translate.account.market}}\n    </li>\n    <li id=\"ee-import\" class=\"nl-button nl-button-sm\">\n      {{translate.account.import}}\n    </li>\n    <li id=\"ee-export\" class=\"nl-button nl-button-sm\">\n      {{translate.account.export}}\n    </li>\n  </ul>\n\n  <!-- Explorations\n  <h3 class=\"section-title\">Explorations</h3>\n  <table>\n    <thead>\n      <th>Location</th>\n      <th>Delete</th>\n    </thead>\n    <tbody>\n      <td>Rock</td>\n      <td>\n        <div class=\"nl-button nl-button-sm\">Delete</div>\n      </td>\n    </tbody>\n  </table>\n  -->\n</div>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/wishlist_button.html":
/*!*************************************************!*\
  !*** ./src/templates/html/wishlist_button.html ***!
  \*************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<a id=\"wishlist-button\" class=\"nl-button\">");t.b("\n" + i);t.b("  ");t.b(t.v(t.d("translate.market.wishlist.title",c,p,0)));t.b("\n" + i);t.b("</a>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<a id=\"wishlist-button\" class=\"nl-button\">\n  {{translate.market.wishlist.title}}\n</a>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/wishlist_settings.html":
/*!***************************************************!*\
  !*** ./src/templates/html/wishlist_settings.html ***!
  \***************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<style>");t.b("\n" + i);t.b("  table {");t.b("\n" + i);t.b("    text-align: center;");t.b("\n" + i);t.b("    width: 100%;");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  .action-picto {");t.b("\n" + i);t.b("    height: 50px;");t.b("\n" + i);t.b("    width: 50px;");t.b("\n" + i);t.b("    cursor: pointer;");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  .action-picto:hover:not(.disabled),");t.b("\n" + i);t.b("  .edit-price:hover {");t.b("\n" + i);t.b("    animation: button-bounce 300ms linear forwards;");t.b("\n" + i);t.b("    filter: brightness(1.05) contrast(1.1);");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  .edit-price {");t.b("\n" + i);t.b("    cursor: pointer;");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  img.disabled {");t.b("\n" + i);t.b("    filter: grayscale(1);");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  .item-icon-container {");t.b("\n" + i);t.b("    display: inline-block;");t.b("\n" + i);t.b("    position: relative;");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  .item-icon {");t.b("\n" + i);t.b("    width: 100px;");t.b("\n" + i);t.b("    height: 100px;");t.b("\n" + i);t.b("  }");t.b("\n" + i);t.b("</style>");t.b("\n");t.b("\n" + i);t.b("<table>");t.b("\n" + i);t.b("  <thead>");t.b("\n" + i);t.b("    <tr>");t.b("\n" + i);t.b("      <th>");t.b(t.v(t.d("translate.market.wishlist.icon",c,p,0)));t.b("</th>");t.b("\n" + i);t.b("      <th>");t.b(t.v(t.d("translate.market.wishlist.name",c,p,0)));t.b("</th>");t.b("\n" + i);t.b("      <th>");t.b(t.v(t.d("translate.market.wishlist.price",c,p,0)));t.b("</th>");t.b("\n" + i);t.b("      <th>");t.b(t.v(t.d("translate.market.wishlist.status",c,p,0)));t.b("</th>");t.b("\n" + i);t.b("      <th>");t.b(t.v(t.d("translate.market.wishlist.actions",c,p,0)));t.b("</th>");t.b("\n" + i);t.b("    </tr>");t.b("\n" + i);t.b("  </thead>");t.b("\n" + i);t.b("  <tbody>");t.b("\n" + i);if(t.s(t.f("wishlist",c,p,1),c,p,0,872,2260,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("    <tr class=\"marketplace-abstract\" data-icon=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\">");t.b("\n" + i);t.b("      <!-- Icon -->");t.b("\n" + i);t.b("      <td>");t.b("\n" + i);t.b("        <div class=\"item-icon-container\">");t.b("\n" + i);t.b("          <img class=\"item-icon\" src=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\" alt=\"");t.b(t.v(t.f("name",c,p,0)));t.b("\" />");t.b("\n" + i);t.b("          <div class=\"rarity-marker-");t.b(t.v(t.f("rarity",c,p,0)));t.b("\"></div>");t.b("\n" + i);t.b("        </div>");t.b("\n" + i);t.b("      </td>");t.b("\n");t.b("\n" + i);t.b("      <!-- Name -->");t.b("\n" + i);t.b("      <td>");t.b("\n" + i);t.b("        <div class=\"abstract-name\">");t.b(t.v(t.f("name",c,p,0)));t.b("</div>");t.b("\n" + i);t.b("        <div class=\"abstract-type\">");t.b(t.v(t.f("abstractType",c,p,0)));t.b("</div>");t.b("\n" + i);t.b("      </td>");t.b("\n");t.b("\n" + i);t.b("      <!-- Price -->");t.b("\n" + i);t.b("      <td>");t.b("\n" + i);t.b("        <div");t.b("\n" + i);t.b("          class=\"edit-price\"");t.b("\n" + i);t.b("          title=\"");t.b(t.v(t.d("translate.market.wishlist.change_price",c,p,0)));t.b("\"");t.b("\n" + i);t.b("        >");t.b("\n" + i);t.b("          <span class=\"price-item\">");t.b(t.v(t.f("price",c,p,0)));t.b("</span>");t.b("\n" + i);t.b("          <span class=\"maana-icon\" alt=\"maanas\"></span>");t.b("\n" + i);t.b("        </div>");t.b("\n" + i);t.b("      </td>");t.b("\n");t.b("\n" + i);t.b("      <!-- Error -->");t.b("\n" + i);t.b("      <td>");t.b("\n" + i);t.b("        <p class=\"error\">");t.b(t.v(t.f("error",c,p,0)));t.b("</p>");t.b("\n" + i);t.b("      </td>");t.b("\n");t.b("\n" + i);t.b("      <!-- Actions -->");t.b("\n" + i);t.b("      <td>");t.b("\n" + i);t.b("        <img");t.b("\n" + i);t.b("          class=\"action-picto reset-item-status ");if(!t.s(t.f("error",c,p,1),c,p,1,0,0,"")){t.b("disabled");};t.b("\"");t.b("\n" + i);t.b("          src=\"/static/img/new-layout/wardrobe/reset-btn.png\"");t.b("\n" + i);t.b("          title=\"");t.b(t.v(t.d("translate.market.wishlist.reset_tooltip",c,p,0)));t.b("\"");t.b("\n" + i);t.b("          alt=\"");t.b(t.v(t.d("translate.market.wishlist.reset",c,p,0)));t.b("\"");t.b("\n" + i);t.b("        />");t.b("\n" + i);t.b("        <img");t.b("\n" + i);t.b("          class=\"action-picto delete-wishlist-item\"");t.b("\n" + i);t.b("          src=\"/static/img/new-layout/wardrobe/delete.png\"");t.b("\n" + i);t.b("          title=\"");t.b(t.v(t.d("translate.market.wishlist.delete_tooltip",c,p,0)));t.b("\"");t.b("\n" + i);t.b("          alt=\"");t.b(t.v(t.d("translate.market.wishlist.delete",c,p,0)));t.b("\"");t.b("\n" + i);t.b("        />");t.b("\n" + i);t.b("      </td>");t.b("\n" + i);t.b("    </tr>");t.b("\n" + i);});c.pop();}t.b("  </tbody>");t.b("\n" + i);t.b("</table>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<style>\n  table {\n    text-align: center;\n    width: 100%;\n  }\n\n  .action-picto {\n    height: 50px;\n    width: 50px;\n    cursor: pointer;\n  }\n\n  .action-picto:hover:not(.disabled),\n  .edit-price:hover {\n    animation: button-bounce 300ms linear forwards;\n    filter: brightness(1.05) contrast(1.1);\n  }\n\n  .edit-price {\n    cursor: pointer;\n  }\n\n  img.disabled {\n    filter: grayscale(1);\n  }\n\n  .item-icon-container {\n    display: inline-block;\n    position: relative;\n  }\n\n  .item-icon {\n    width: 100px;\n    height: 100px;\n  }\n</style>\n\n<table>\n  <thead>\n    <tr>\n      <th>{{translate.market.wishlist.icon}}</th>\n      <th>{{translate.market.wishlist.name}}</th>\n      <th>{{translate.market.wishlist.price}}</th>\n      <th>{{translate.market.wishlist.status}}</th>\n      <th>{{translate.market.wishlist.actions}}</th>\n    </tr>\n  </thead>\n  <tbody>\n    {{#wishlist}}\n    <tr class=\"marketplace-abstract\" data-icon=\"{{icon}}\">\n      <!-- Icon -->\n      <td>\n        <div class=\"item-icon-container\">\n          <img class=\"item-icon\" src=\"{{icon}}\" alt=\"{{name}}\" />\n          <div class=\"rarity-marker-{{rarity}}\"></div>\n        </div>\n      </td>\n\n      <!-- Name -->\n      <td>\n        <div class=\"abstract-name\">{{name}}</div>\n        <div class=\"abstract-type\">{{abstractType}}</div>\n      </td>\n\n      <!-- Price -->\n      <td>\n        <div\n          class=\"edit-price\"\n          title=\"{{translate.market.wishlist.change_price}}\"\n        >\n          <span class=\"price-item\">{{price}}</span>\n          <span class=\"maana-icon\" alt=\"maanas\"></span>\n        </div>\n      </td>\n\n      <!-- Error -->\n      <td>\n        <p class=\"error\">{{error}}</p>\n      </td>\n\n      <!-- Actions -->\n      <td>\n        <img\n          class=\"action-picto reset-item-status {{^error}}disabled{{/error}}\"\n          src=\"/static/img/new-layout/wardrobe/reset-btn.png\"\n          title=\"{{translate.market.wishlist.reset_tooltip}}\"\n          alt=\"{{translate.market.wishlist.reset}}\"\n        />\n        <img\n          class=\"action-picto delete-wishlist-item\"\n          src=\"/static/img/new-layout/wardrobe/delete.png\"\n          title=\"{{translate.market.wishlist.delete_tooltip}}\"\n          alt=\"{{translate.market.wishlist.delete}}\"\n        />\n      </td>\n    </tr>\n    {{/wishlist}}\n  </tbody>\n</table>\n", H);return T; }();

/***/ }),

/***/ "./src/ajax/ajax_search.ts":
/*!*********************************!*\
  !*** ./src/ajax/ajax_search.ts ***!
  \*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "ajaxSearch": () => (/* binding */ ajaxSearch)
/* harmony export */ });
/* harmony import */ var _marketplace_enums_body_location_enum__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../marketplace/enums/body_location.enum */ "./src/marketplace/enums/body_location.enum.ts");
/* harmony import */ var _marketplace_enums_category_enum__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../marketplace/enums/category.enum */ "./src/marketplace/enums/category.enum.ts");
/* harmony import */ var _marketplace_enums_guard_enum__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../marketplace/enums/guard.enum */ "./src/marketplace/enums/guard.enum.ts");
/* harmony import */ var _marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../marketplace/enums/rarity.enum */ "./src/marketplace/enums/rarity.enum.ts");
/* harmony import */ var _marketplace_enums_type_enum__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../marketplace/enums/type.enum */ "./src/marketplace/enums/type.enum.ts");





async function ajaxSearch(data) {
    data = {
        ...{
            type: _marketplace_enums_type_enum__WEBPACK_IMPORTED_MODULE_4__.Type.All,
            bodyLocation: _marketplace_enums_body_location_enum__WEBPACK_IMPORTED_MODULE_0__.BodyLocation.All,
            category: _marketplace_enums_category_enum__WEBPACK_IMPORTED_MODULE_1__.CategoryNumber.all,
            rarity: _marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_3__.Rarity.all,
            price: "",
            guard: _marketplace_enums_guard_enum__WEBPACK_IMPORTED_MODULE_2__.Guard.any,
            page: 1,
            name: "",
        },
        ...data,
    };
    const ITEMS_PER_PAGE = 8;
    return (await $.get("/marketplace/ajax_search", {
        ...data,
        from: (data.page - 1) * ITEMS_PER_PAGE,
        to: ITEMS_PER_PAGE,
    }));
}


/***/ }),

/***/ "./src/ajax/buy.ts":
/*!*************************!*\
  !*** ./src/ajax/buy.ts ***!
  \*************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "buy": () => (/* binding */ buy)
/* harmony export */ });
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");

async function buy(itemId) {
    return new Promise(resolve => {
        void $.post("/marketplace/buy", { id: itemId }, (json) => {
            _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.meta = json.meta;
            resolve(json);
            if (json.result !== "success") {
                $.flavrNotif(json.data);
                return;
            }
        }, "json");
    });
}


/***/ }),

/***/ "./src/ajax/capture_end.ts":
/*!*********************************!*\
  !*** ./src/ajax/capture_end.ts ***!
  \*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "captureEnd": () => (/* binding */ captureEnd)
/* harmony export */ });
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");

async function captureEnd() {
    return new Promise(resolve => {
        void $.post("/pet/capture/end", (json) => {
            _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.meta = json.meta;
            resolve(json);
            if (json.result !== "success") {
                $.flavrNotif(json.data);
                return;
            }
        });
    });
}


/***/ }),

/***/ "./src/ajax/change_region.ts":
/*!***********************************!*\
  !*** ./src/ajax/change_region.ts ***!
  \***********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "changeRegion": () => (/* binding */ changeRegion)
/* harmony export */ });
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");

async function changeRegion(newRegionId) {
    return new Promise((resolve) => {
        void $.post("/pet/changeRegion", { newRegionId }, (json) => {
            _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.meta = json.meta;
            resolve(json);
            if (json.result !== "success") {
                $.flavrNotif(json.data);
                return;
            }
            currentRegion = json.data.currentRegion;
            pendingTreasureHuntLocation =
                typeof json.data.pendingTreasureHuntLocation === "undefined"
                    ? null
                    : json.data.pendingTreasureHuntLocation;
            timeLeftExploration =
                typeof json.data.timeLeftExploration === "undefined"
                    ? null
                    : json.data.timeLeftExploration;
        });
    });
}


/***/ }),

/***/ "./src/ajax/exploration_results.ts":
/*!*****************************************!*\
  !*** ./src/ajax/exploration_results.ts ***!
  \*****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "explorationResults": () => (/* binding */ explorationResults)
/* harmony export */ });
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");

async function explorationResults() {
    return new Promise((resolve) => {
        void $.post("/pet/explorationResults", (json) => {
            _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.meta = json.meta;
            resolve(json);
            if (json.result !== "success") {
                $.flavrNotif(json.data);
                return;
            }
        });
    });
}


/***/ }),

/***/ "./src/api/meta.ts":
/*!*************************!*\
  !*** ./src/api/meta.ts ***!
  \*************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "PurroshopStatus": () => (/* binding */ PurroshopStatus)
/* harmony export */ });
var PurroshopStatus;
(function (PurroshopStatus) {
    PurroshopStatus["disabled"] = "disabled";
    PurroshopStatus["enabled"] = "enabled";
})(PurroshopStatus || (PurroshopStatus = {}));


/***/ }),

/***/ "./src/api/result.enum.ts":
/*!********************************!*\
  !*** ./src/api/result.enum.ts ***!
  \********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Result": () => (/* binding */ Result)
/* harmony export */ });
var Result;
(function (Result) {
    Result["error"] = "error";
    Result["success"] = "success";
})(Result || (Result = {}));


/***/ }),

/***/ "./src/appearance/appearance_ui.ts":
/*!*****************************************!*\
  !*** ./src/appearance/appearance_ui.ts ***!
  \*****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadAppearanceUI": () => (/* binding */ loadAppearanceUI)
/* harmony export */ });
/* harmony import */ var _wardrobe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./wardrobe */ "./src/appearance/wardrobe.ts");

function loadAppearanceUI() {
    setupBackground();
    setupLeftPanel();
    setupRightPanel();
    if (_wardrobe__WEBPACK_IMPORTED_MODULE_0__["default"].availableItems)
        availableItems = _wardrobe__WEBPACK_IMPORTED_MODULE_0__["default"].availableItems;
    else
        _wardrobe__WEBPACK_IMPORTED_MODULE_0__["default"].availableItems = availableItems;
}
function setupBackground() {
    const background = document.querySelector("#avatar-background img");
    if (background) {
        background.style.filter = "unset";
        background.style.height = "unset";
        background.style.mask =
            "linear-gradient(to right, black 50%, transparent 100%)";
        background.style.minHeight = "100vh";
        background.style.minWidth = "50vw";
        background.style.position = "fixed";
        background.style.transform = "unset";
        background.style.width = "unset";
    }
}
function setupRightPanel() {
    const rightPanel = document.getElementById("appearance-right");
    if (rightPanel)
        rightPanel.style.paddingTop = "80px";
}
function setupLeftPanel() {
    const previewOuter = document.getElementById("appearance-preview-outer");
    if (previewOuter) {
        previewOuter.style.padding = "0px";
    }
    const preview = document.getElementById("appearance-preview");
    if (preview) {
        preview.style.left = "0";
        preview.style.position = "fixed";
        preview.style.top = "calc(50% - var(--topbar-height))";
        preview.style.transform = "translateY(-50%)";
    }
    const canvas = document.querySelector("#appearance-preview canvas");
    if (canvas) {
        canvas.style.maxHeight = "100vh";
        canvas.style.maxWidth = "50vw";
    }
}


/***/ }),

/***/ "./src/appearance/data_set.ts":
/*!************************************!*\
  !*** ./src/appearance/data_set.ts ***!
  \************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "categoryContainerDataSet": () => (/* binding */ categoryContainerDataSet),
/* harmony export */   "categoryGroupDataSet": () => (/* binding */ categoryGroupDataSet),
/* harmony export */   "itemDataSet": () => (/* binding */ itemDataSet)
/* harmony export */ });
/* harmony import */ var _eldarya_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../eldarya_util */ "./src/eldarya_util.ts");

function categoryContainerDataSet(categoryContainer) {
    const { categoryid, category, categoryname } = categoryContainer.dataset;
    if (!categoryid || !category || !categoryname)
        return;
    return {
        categoryid: Number(categoryid),
        category: category,
        categoryname,
    };
}
function categoryGroupDataSet(groupItem, appearanceCategory) {
    const { itemid, group, name, rarity, rarityname } = groupItem.dataset;
    if (!itemid || !group || !name || !rarity || !rarityname)
        return;
    return {
        ...appearanceCategory,
        itemid: Number(itemid),
        group: Number(group),
        name,
        rarity,
        rarityname,
    };
}
function itemDataSet(li, appearanceGroup) {
    const { itemid, name, rarity, rarityname } = li.dataset;
    const icon = li.querySelector("img")?.src;
    if (!itemid || !name || !rarity || !rarityname || !icon)
        return;
    return {
        ...appearanceGroup,
        itemid: Number(itemid),
        name,
        rarity,
        rarityname,
        icon: (0,_eldarya_util__WEBPACK_IMPORTED_MODULE_0__.trimIcon)(icon),
    };
}


/***/ }),

/***/ "./src/appearance/dressing_experience.ts":
/*!***********************************************!*\
  !*** ./src/appearance/dressing_experience.ts ***!
  \***********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadDressingExperience": () => (/* binding */ loadDressingExperience),
/* harmony export */   "loadBackground": () => (/* binding */ loadBackground)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _ts_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ts_util */ "./src/ts_util.ts");
/* harmony import */ var _ui_favourites__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../ui/favourites */ "./src/ui/favourites.ts");
/* harmony import */ var _appearance_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./appearance_ui */ "./src/appearance/appearance_ui.ts");
/* harmony import */ var _data_set__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./data_set */ "./src/appearance/data_set.ts");
/* harmony import */ var _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./enums/appearance_category_code.enum */ "./src/appearance/enums/appearance_category_code.enum.ts");
/* harmony import */ var _favourites_actions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./favourites_actions */ "./src/appearance/favourites_actions.ts");
/* harmony import */ var _hidden__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./hidden */ "./src/appearance/hidden.ts");
/* harmony import */ var _wardrobe__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./wardrobe */ "./src/appearance/wardrobe.ts");









async function loadDressingExperience() {
    if (!location.pathname.startsWith("/player/appearance"))
        return;
    handledCategories.clear();
    loading = false;
    (0,_appearance_ui__WEBPACK_IMPORTED_MODULE_3__.loadAppearanceUI)();
    // Setup categories
    for (const li of document.querySelectorAll("#wardrobe-menu>li, #appearance-items-categories li")) {
        const { category } = li.dataset;
        if (!(0,_ts_util__WEBPACK_IMPORTED_MODULE_1__.isEnum)(category, _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode))
            continue;
        switch (category) {
            case _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.background:
                li.addEventListener("click", () => document.getElementById("ee-category")?.remove());
                continue;
            case _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.favorites:
                li.addEventListener("click", () => {
                    document.getElementById("ee-category")?.remove();
                    void handleCategory(category);
                });
                continue;
            case _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.attic:
                continue;
            default:
                li.addEventListener("click", () => {
                    document
                        .getElementById("appearance-items-category-favorites")
                        ?.remove();
                    void handleCategory(category);
                });
        }
    }
    await new Promise(resolve => setTimeout(resolve, 1000));
    await loadBackground();
}
/**
 * Get the category container for the clicked category and load its groups
 * @returns Category container
 */
async function handleCategory(category) {
    const appearanceItems = document.querySelector("#appearance-items");
    if (!appearanceItems)
        return null;
    const oldCatContainer = document.querySelector(`#appearance-items-category-${category}`);
    if (oldCatContainer) {
        await onAppearanceItemsCategory(category, appearanceItems, oldCatContainer);
        return oldCatContainer;
    }
    return new Promise(resolve => {
        new MutationObserver((_, observer) => {
            const newCatContainer = document.querySelector(`#appearance-items-category-${category}`);
            if (!newCatContainer)
                return;
            observer.disconnect();
            void (async () => {
                await onAppearanceItemsCategory(category, appearanceItems, newCatContainer);
                resolve(newCatContainer);
            })();
        }).observe(appearanceItems, { childList: true });
    });
}
async function onAppearanceItemsCategory(category, appearanceItems, categoryContainer) {
    if (category === _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.favorites)
        (0,_ui_favourites__WEBPACK_IMPORTED_MODULE_2__.loadFavourites)();
    else {
        await new Promise(resolve => setTimeout(resolve, 220));
        loadEeItems(appearanceItems, categoryContainer);
        await handleGroups(categoryContainer);
    }
}
function loadEeItems(appearanceItems, categoryContainer) {
    // Get information about the current category
    const appearanceCategory = (0,_data_set__WEBPACK_IMPORTED_MODULE_4__.categoryContainerDataSet)(categoryContainer);
    if (!appearanceCategory)
        return null;
    _wardrobe__WEBPACK_IMPORTED_MODULE_8__["default"].setCategory(appearanceCategory);
    categoryContainer.classList.remove("active");
    categoryContainer.style.display = "none";
    // Setup appearance_items_category
    const template = __webpack_require__(/*! ../templates/html/appearance_items_category.html */ "./src/templates/html/appearance_items_category.html");
    document.getElementById("ee-category")?.remove();
    appearanceItems.insertAdjacentHTML("beforeend", template.render({ ...appearanceCategory, translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }));
    const eeItems = document.querySelector("#ee-items");
    if (!eeItems)
        return null;
    eeItems.dataset.categoryid = appearanceCategory.categoryid.toString();
    eeItems.dataset.category = appearanceCategory.category;
    eeItems.dataset.categoryname = appearanceCategory.categoryname;
    return eeItems;
}
const handledCategories = new Set();
/** Load each groups synchronously and add them to a custom container. */
async function handleGroups(categoryContainer) {
    const appearanceCategory = (0,_data_set__WEBPACK_IMPORTED_MODULE_4__.categoryContainerDataSet)(categoryContainer);
    if (!appearanceCategory)
        return;
    _wardrobe__WEBPACK_IMPORTED_MODULE_8__["default"].setCategory(appearanceCategory);
    categoryContainer.classList.remove("active");
    categoryContainer.style.display = "none";
    const handled = handledCategories.has(appearanceCategory.category);
    handledCategories.add(appearanceCategory.category);
    (0,_hidden__WEBPACK_IMPORTED_MODULE_7__.loadHiddenCategory)(appearanceCategory.category);
    for (const li of categoryContainer.querySelectorAll("li.appearance-item-group")) {
        const appearanceGroup = (0,_data_set__WEBPACK_IMPORTED_MODULE_4__.categoryGroupDataSet)(li, appearanceCategory);
        if (!appearanceGroup?.group)
            break;
        _wardrobe__WEBPACK_IMPORTED_MODULE_8__["default"].setGroup(appearanceGroup);
        if (!document.querySelector(`#appearance-items-group-${appearanceGroup.group}`) &&
            !handled
        // && !loadHiddenGroup(appearanceGroup.group)
        )
            await (0,_favourites_actions__WEBPACK_IMPORTED_MODULE_6__.openGroup)(appearanceGroup.group);
        const div = document.querySelector(`#appearance-items-group-${appearanceGroup.group}`);
        if (!div)
            break;
        div.classList.remove("active");
        const script = div.querySelector("script"); // eslint-disable-next-line @typescript-eslint/no-implied-eval
        if (script)
            setTimeout(script.innerHTML, 0);
        const outerHTML = Array.from(div.querySelectorAll("li.appearance-item"))
            .map(li => {
            const appearanceItem = (0,_data_set__WEBPACK_IMPORTED_MODULE_4__.itemDataSet)(li, appearanceGroup);
            if (!appearanceItem?.icon)
                return li.outerHTML;
            li.dataset.categoryid = appearanceItem.categoryid.toString();
            li.dataset.category = appearanceItem.category;
            li.dataset.categoryname = appearanceItem.categoryname;
            li.dataset.group = appearanceItem.group.toString();
            _wardrobe__WEBPACK_IMPORTED_MODULE_8__["default"].setItem(appearanceItem);
            return li.outerHTML;
        })
            .join("\n");
        _wardrobe__WEBPACK_IMPORTED_MODULE_8__["default"].availableItems = availableItems;
        div.remove();
        const active = document.querySelector(`#wardrobe-menu li[data-category="${appearanceGroup.category}"].active`);
        if (active) {
            document
                .querySelector("#ee-items")
                ?.insertAdjacentHTML("beforeend", outerHTML);
            initializeSelectedItems();
            initializeHiddenCategories();
        }
        else if (handled)
            break;
    }
    if (!handled)
        handledCategories.delete(appearanceCategory.category);
    (0,_hidden__WEBPACK_IMPORTED_MODULE_7__.unloadHiddenCategories)();
}
let loading = false;
async function loadBackground() {
    if (loading)
        return;
    loading = true;
    let success = true;
    const categories = [
        _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.underwear,
        _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.skin,
        _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.tatoo,
        _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.mouth,
        _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.eye,
        _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.hair,
        _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.sock,
        _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.shoe,
        _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.pants,
        _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.handAccessory,
        _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.top,
        _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.coat,
        _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.glove,
        _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.necklace,
        _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.dress,
        _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.hat,
        _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.faceAccessory,
        _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.belt,
        _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.ambient,
    ];
    const template = __webpack_require__(/*! ../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
    for (const category of categories) {
        if (!location.pathname.startsWith("/player/appearance")) {
            success = false;
            break;
        }
        const active = document.querySelector(`#wardrobe-menu li[data-category="${category}"].active`);
        if (active)
            continue;
        const categoryContainer = await (0,_favourites_actions__WEBPACK_IMPORTED_MODULE_6__.openCategory)(category);
        if (!categoryContainer) {
            success = false;
            break;
        }
        let finished = false;
        setTimeout(() => {
            if (!finished)
                $.flavrNotif(template.render({
                    icon: `/static/img/mall/categories/${category}.png`,
                    message: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.loading(document.querySelector(`#wardrobe-menu li[data-category="${category}"]`)?.dataset.categoryname ?? category),
                }));
        }, 1000);
        await handleGroups(categoryContainer);
        finished = true;
    }
    if (success)
        $.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.loaded);
    loading = false;
}


/***/ }),

/***/ "./src/appearance/enums/appearance_category_code.enum.ts":
/*!***************************************************************!*\
  !*** ./src/appearance/enums/appearance_category_code.enum.ts ***!
  \***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "AppearanceCategoryCode": () => (/* binding */ AppearanceCategoryCode)
/* harmony export */ });
var AppearanceCategoryCode;
(function (AppearanceCategoryCode) {
    AppearanceCategoryCode["attic"] = "attic";
    AppearanceCategoryCode["favorites"] = "favorites";
    AppearanceCategoryCode["underwear"] = "underwear";
    AppearanceCategoryCode["skin"] = "skin";
    AppearanceCategoryCode["tatoo"] = "tatoo";
    AppearanceCategoryCode["mouth"] = "mouth";
    AppearanceCategoryCode["eye"] = "eye";
    AppearanceCategoryCode["hair"] = "hair";
    AppearanceCategoryCode["sock"] = "sock";
    AppearanceCategoryCode["shoe"] = "shoe";
    AppearanceCategoryCode["pants"] = "pants";
    AppearanceCategoryCode["handAccessory"] = "handAccessory";
    AppearanceCategoryCode["top"] = "top";
    AppearanceCategoryCode["coat"] = "coat";
    AppearanceCategoryCode["glove"] = "glove";
    AppearanceCategoryCode["necklace"] = "necklace";
    AppearanceCategoryCode["dress"] = "dress";
    AppearanceCategoryCode["hat"] = "hat";
    AppearanceCategoryCode["faceAccessory"] = "faceAccessory";
    AppearanceCategoryCode["background"] = "background";
    AppearanceCategoryCode["belt"] = "belt";
    AppearanceCategoryCode["ambient"] = "ambient";
})(AppearanceCategoryCode || (AppearanceCategoryCode = {}));


/***/ }),

/***/ "./src/appearance/fake_favourites.ts":
/*!*******************************************!*\
  !*** ./src/appearance/fake_favourites.ts ***!
  \*******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "saveFavourite": () => (/* binding */ saveFavourite),
/* harmony export */   "showFavourite": () => (/* binding */ showFavourite)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../indexed_db/indexed_db */ "./src/indexed_db/indexed_db.ts");
/* harmony import */ var _outfit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../outfit */ "./src/outfit.ts");
/* harmony import */ var _ui_favourites__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ui/favourites */ "./src/ui/favourites.ts");
/* harmony import */ var _favourites_actions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./favourites_actions */ "./src/appearance/favourites_actions.ts");





async function saveFavourite() {
    const favourite = await showOutfit();
    if (favourite)
        await (0,_ui_favourites__WEBPACK_IMPORTED_MODULE_3__.loadFakeFavourites)();
    return favourite;
}
async function deleteFavourite(favourite) {
    await _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__["default"].deleteFavouriteOutfit(favourite);
    await (0,_ui_favourites__WEBPACK_IMPORTED_MODULE_3__.loadFakeFavourites)();
}
async function showOutfit() {
    const template = __webpack_require__(/*! ../templates/html/created_outfit_flavr.html */ "./src/templates/html/created_outfit_flavr.html");
    return new Promise(resolve => $.flavr({
        content: template.render({ translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }),
        onBuild: $container => {
            $container.addClass("new-layout-popup");
            $container.addClass("created-outfit-popup");
            const saveButton = document.querySelector('[rel="btn-save"]');
            if (!saveButton)
                return;
            document
                .querySelector("#choose-name")
                ?.addEventListener("keyup", event => {
                if (event.key === "Enter")
                    saveButton.click();
                if (document.querySelector("#choose-name")?.value)
                    saveButton.classList.remove("disabled");
                else
                    saveButton.classList.add("disabled");
            });
            saveButton.classList.add("nl-button", "nl-button-lg", "disabled");
        },
        buttons: {
            close: {
                text: "",
                style: "close",
                action: () => {
                    resolve(null);
                    return true;
                },
            },
            save: {
                text: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.favourites.save_outfit.save,
                style: "default",
                action: () => {
                    const name = document.querySelector("#choose-name")?.value;
                    if (!name)
                        return false;
                    const avatar = Sacha.Avatar.avatars["#appearance-preview"];
                    if (!avatar)
                        return false;
                    const items = (0,_outfit__WEBPACK_IMPORTED_MODULE_2__.parseAvatar)(avatar);
                    void saveAction(name, items, resolve);
                    return true;
                },
            },
        },
    }));
}
function showFavourite(favourite) {
    const template = __webpack_require__(/*! ../templates/html/favourite_outfit_flavr.html */ "./src/templates/html/favourite_outfit_flavr.html");
    $.flavr({
        content: template.render({ ...favourite, translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }),
        onBuild: $container => {
            $container.addClass("new-layout-popup");
            $container.addClass("created-outfit-popup");
        },
        buttons: {
            close: {
                text: "",
                style: "close",
                action: () => true,
            },
            delete: {
                text: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.favourites.click_outfit["delete"],
                style: "default",
                action: () => {
                    void deleteFavourite(favourite);
                    return true;
                },
            },
            wear: {
                text: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.favourites.click_outfit.wear,
                style: "default",
                action: () => {
                    const avatar = Sacha.Avatar.avatars["#appearance-preview"];
                    if (!avatar)
                        return false;
                    void (async () => (0,_favourites_actions__WEBPACK_IMPORTED_MODULE_4__.wearOutfit)(avatar, favourite.items))();
                    return true;
                },
            },
        },
    });
}
async function saveAction(name, items, resolve) {
    const blob = await new Promise(resolve => {
        document
            .querySelector("#appearance-preview canvas")
            ?.toBlob(blob => resolve(blob), "image/png", 1);
    });
    resolve({
        ...(await _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__["default"].addFavouriteOutfit({
            items,
            name,
            blob,
        })),
        url: URL.createObjectURL(blob),
    });
}


/***/ }),

/***/ "./src/appearance/favourites_actions.ts":
/*!**********************************************!*\
  !*** ./src/appearance/favourites_actions.ts ***!
  \**********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "exportPreview": () => (/* binding */ exportPreview),
/* harmony export */   "importOutfit": () => (/* binding */ importOutfit),
/* harmony export */   "openGroup": () => (/* binding */ openGroup),
/* harmony export */   "openCategory": () => (/* binding */ openCategory),
/* harmony export */   "wearOutfit": () => (/* binding */ wearOutfit)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _outfit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../outfit */ "./src/outfit.ts");


function exportPreview() {
    (0,_outfit__WEBPACK_IMPORTED_MODULE_1__.exportOutfit)("#appearance-preview");
}
function importOutfit() {
    const input = document.createElement("input");
    input.setAttribute("type", "file");
    input.setAttribute("accept", "application/json");
    input.click();
    input.addEventListener("input", event => {
        if (!event.target)
            return;
        const files = event.target.files;
        if (!files)
            return;
        const file = files[0];
        if (!file)
            return;
        void file.text().then(async (value) => {
            if (!value)
                return;
            const outfit = JSON.parse(value);
            const avatar = Sacha.Avatar.avatars["#appearance-preview"];
            if (!avatar)
                return;
            await wearOutfit(avatar, outfit);
        });
    });
}
function removeClothes() {
    const avatar = Sacha.Avatar.avatars["#appearance-preview"];
    if (!avatar)
        return;
    for (let i = avatar.children.length - 1; i >= 0; i--) {
        const itemRender = avatar.children[i];
        if (!itemRender)
            continue;
        const item = itemRender.getItem();
        if (Sacha.Avatar.removeItemFromAllAvatars(item)) {
            $(`#appearance-item-${item._id}`).removeClass("selected");
        }
    }
}
async function openGroup(group) {
    return new Promise((resolve) => {
        const groupContainer = document.querySelector(`#appearance-items-group-${group}`);
        if (groupContainer)
            return void resolve(groupContainer);
        void $.get(`/player/openGroup/${group}`, (view) => {
            $(view).hide().appendTo("#appearance-items");
            resolve(document.querySelector(`#appearance-items-group-${group}`));
        });
    });
}
async function openCategory(category) {
    return new Promise((resolve) => {
        const categoryContainer = document.querySelector(`#appearance-items-category-${category}`);
        if (categoryContainer)
            return void resolve(categoryContainer);
        void $.post(`/player/openCategory/${category}`, (view) => {
            $(view).hide().appendTo("#appearance-items");
            resolve(document.querySelector(`#appearance-items-category-${category}`));
        });
    });
}
async function wearOutfit(avatar, outfit) {
    $.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.favourites.importing);
    // Get all categories
    const categories = new Set();
    for (const clothing of outfit)
        if (!availableItems[clothing.id])
            categories.add(clothing.type);
    // Open all categories
    await Promise.all(Array.from(categories.values()).map(async (category) => openCategory(category)));
    // Get all groups
    const groups = new Set();
    for (const clothing of outfit)
        if (document.querySelector(`[data-group="${clothing.group}"]`) &&
            !availableItems[clothing.id])
            groups.add(clothing.group);
    // Open all groups
    await Promise.all(Array.from(groups.values()).map(async (group) => openGroup(group)));
    // Get the items from `availableItems`
    const wornItems = [];
    for (const clothing of outfit) {
        const item = availableItems[clothing.id];
        if (item)
            wornItems.push(item);
    }
    removeClothes();
    avatar.addItems(wornItems);
    initializeSelectedItems();
    initializeHiddenCategories();
    const avatarActions = document.getElementById("avatar-actions");
    if (avatarActions)
        avatarActions.style.display = "initial";
    $.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.favourites.imported);
}


/***/ }),

/***/ "./src/appearance/hidden.ts":
/*!**********************************!*\
  !*** ./src/appearance/hidden.ts ***!
  \**********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "unloadHiddenCategories": () => (/* binding */ unloadHiddenCategories),
/* harmony export */   "loadHiddenCategory": () => (/* binding */ loadHiddenCategory),
/* harmony export */   "loadHiddenGroup": () => (/* binding */ loadHiddenGroup)
/* harmony export */ });
/* harmony import */ var _wardrobe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./wardrobe */ "./src/appearance/wardrobe.ts");

function unloadHiddenCategories() {
    const hidden = document.querySelectorAll("#appearance-items .appearance-items-category:not(.active):not([data-categoryname]), #appearance-items script, body>script");
    for (const div of hidden) {
        div.remove();
    }
}
/**
 * Place the saved groups on the DOM as if it was Eldarya doing it.
 * @returns the associated `AppearanceCategory` if it's found in the wardrobe.
 */
function loadHiddenCategory(code) {
    const category = _wardrobe__WEBPACK_IMPORTED_MODULE_0__["default"].getCategories().find(c => c.category === code);
    if (!category)
        return null;
    const groups = _wardrobe__WEBPACK_IMPORTED_MODULE_0__["default"].getCategoryGroups(category.categoryid);
    const itemTemplate = __webpack_require__(/*! ../templates/html/appearance_item.html */ "./src/templates/html/appearance_item.html");
    const groupTemplate = __webpack_require__(/*! ../templates/html/appearance_items_group.html */ "./src/templates/html/appearance_items_group.html");
    document
        .querySelector("#appearance-items")
        ?.insertAdjacentHTML("beforeend", groups
        .map(group => groupTemplate.render({
        ...group,
        items: _wardrobe__WEBPACK_IMPORTED_MODULE_0__["default"].getItems(group.group)
            .map(item => itemTemplate.render(item))
            .join("\n"),
    }))
        .join("\n"));
    return category;
}
/**
 * Load the saved group on the DOM as if it was Eldarya doing it.
 * @returns the associated `AppearanceGroup` if it's found in the wardrobe.
 */
function loadHiddenGroup(id) {
    const group = _wardrobe__WEBPACK_IMPORTED_MODULE_0__["default"].getGroup(id);
    if (!group)
        return null;
    const itemTemplate = __webpack_require__(/*! ../templates/html/appearance_item.html */ "./src/templates/html/appearance_item.html");
    const groupTemplate = __webpack_require__(/*! ../templates/html/appearance_items_group.html */ "./src/templates/html/appearance_items_group.html");
    document
        .querySelector("#appearance-items")
        ?.insertAdjacentHTML("beforeend", groupTemplate.render({
        ...group,
        items: _wardrobe__WEBPACK_IMPORTED_MODULE_0__["default"].getItems(group.group)
            .map(item => itemTemplate.render(item))
            .join("\n"),
    }));
    return group;
}


/***/ }),

/***/ "./src/appearance/wardrobe.ts":
/*!************************************!*\
  !*** ./src/appearance/wardrobe.ts ***!
  \************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
class Wardrobe {
    categories = {};
    groups = {};
    items = {};
    availableItems;
    getCategories() {
        return Object.values(this.categories);
    }
    getCategory(id) {
        return this.categories[id];
    }
    getCategoryGroups(categoryid) {
        return Object.values(this.groups).filter(group => group.categoryid === categoryid);
    }
    getGroup(id) {
        return this.groups[id];
    }
    getGroups() {
        return Object.values(this.groups);
    }
    getItem(id) {
        return this.items[id];
    }
    getItems(group) {
        return Object.values(this.items).filter(item => item.group === group);
    }
    setCategory(category) {
        this.categories[category.categoryid] = category;
    }
    setGroup(group) {
        this.groups[group.group] = group;
    }
    setItem(item) {
        this.items[item.itemid] = item;
    }
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new Wardrobe());


/***/ }),

/***/ "./src/carousel/carousel_beemoov_annoyances.ts":
/*!*****************************************************!*\
  !*** ./src/carousel/carousel_beemoov_annoyances.ts ***!
  \*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "carouselBeemoovAnnoyances": () => (/* binding */ carouselBeemoovAnnoyances)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");

const carouselBeemoovAnnoyances = {
    backgroundImage: "https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_beemoov_annoyances.png",
    h4: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.beemoov_annoyances.title,
    href: "https://gitlab.com/NatoBoram/Beemoov-Annoyances",
    id: "carousel-beemoov-annoyances",
    p: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.beemoov_annoyances.subtitle,
};


/***/ }),

/***/ "./src/carousel/carousel_download_face.ts":
/*!************************************************!*\
  !*** ./src/carousel/carousel_download_face.ts ***!
  \************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "carouselDownloadFace": () => (/* binding */ carouselDownloadFace)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");

const carouselDownloadFace = {
    backgroundImage: "https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_download_face.png",
    id: "carousel-download-face",
    h4: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.download_face.title,
    p: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.download_face.subtitle,
};


/***/ }),

/***/ "./src/carousel/carousel_download_guardian.ts":
/*!****************************************************!*\
  !*** ./src/carousel/carousel_download_guardian.ts ***!
  \****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "carouselDownloadGuardian": () => (/* binding */ carouselDownloadGuardian)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");

const carouselDownloadGuardian = {
    backgroundImage: "https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_download_guardian.png",
    id: "carousel-download-guardian",
    h4: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.download_guardian.title,
    p: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.download_guardian.subtitle,
};


/***/ }),

/***/ "./src/carousel/carousel_eldarya_enhancements.ts":
/*!*******************************************************!*\
  !*** ./src/carousel/carousel_eldarya_enhancements.ts ***!
  \*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "carouselEE": () => (/* binding */ carouselEE)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");

const carouselEE = {
    backgroundImage: "https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_eldarya_enhancements.png",
    h4: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.eldarya_enhancements.title,
    href: GM.info.script.namespace,
    id: "carousel-eldarya-enhancements",
    p: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.eldarya_enhancements.subtitle,
};


/***/ }),

/***/ "./src/carousel/carousel_takeover.ts":
/*!*******************************************!*\
  !*** ./src/carousel/carousel_takeover.ts ***!
  \*******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "carouselTakeover": () => (/* binding */ carouselTakeover)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");

const carouselTakeover = {
    backgroundImage: "https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_takeover.png",
    id: "carousel-takeover",
    h4: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.takeover.title,
    p: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.takeover.subtitle,
};


/***/ }),

/***/ "./src/console.ts":
/*!************************!*\
  !*** ./src/console.ts ***!
  \************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Console": () => (/* binding */ Console)
/* harmony export */ });
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./local_storage/local_storage */ "./src/local_storage/local_storage.ts");

class Console {
    static console = console;
    constructor() { }
    static get debugging() {
        return _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.debug;
    }
    static get time() {
        return new Date().toLocaleTimeString();
    }
    static assert(value, message, ...optionalParams) {
        if (!this.debugging)
            return;
        this.console.assert(value, ...this.format(message), ...optionalParams);
    }
    static debug(message, ...optionalParams) {
        if (!this.debugging)
            return;
        this.console.debug(...this.format(message), ...optionalParams);
    }
    static error(message, ...optionalParams) {
        if (!this.debugging)
            return;
        this.console.error(...this.format(message), ...optionalParams);
    }
    static info(message, ...optionalParams) {
        if (!this.debugging)
            return;
        this.console.info(...this.format(message), ...optionalParams);
    }
    static log(message, ...optionalParams) {
        if (!this.debugging)
            return;
        this.console.log(...this.format(message), ...optionalParams);
    }
    static warn(message, ...optionalParams) {
        if (!this.debugging)
            return;
        this.console.warn(...this.format(message), ...optionalParams);
    }
    static format(message) {
        return [
            `%c[%c${this.time}%c]`,
            "color:#9742c2",
            "color:none",
            "color:#9742c2",
            message,
        ];
    }
}


/***/ }),

/***/ "./src/download-canvas.ts":
/*!********************************!*\
  !*** ./src/download-canvas.ts ***!
  \********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "downloadFace": () => (/* binding */ downloadFace),
/* harmony export */   "downloadGuardian": () => (/* binding */ downloadGuardian),
/* harmony export */   "downloadAppearance": () => (/* binding */ downloadAppearance),
/* harmony export */   "downloadProfile": () => (/* binding */ downloadProfile),
/* harmony export */   "getName": () => (/* binding */ getName)
/* harmony export */ });
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./console */ "./src/console.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./i18n/translate */ "./src/i18n/translate.ts");


function downloadCanvas(canvas, name) {
    canvas.toBlob(blob => {
        if (!blob) {
            _console__WEBPACK_IMPORTED_MODULE_0__.Console.error("Canvas is empty");
            $.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.error.downloadCanvas);
            return;
        }
        const url = URL.createObjectURL(blob);
        const a = document.createElement("a");
        a.setAttribute("href", url);
        a.setAttribute("download", `${name}.png`);
        a.style.display = "none";
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
        URL.revokeObjectURL(url);
    }, "image/png", 1);
}
function downloadFace() {
    const canvas = document.querySelector("#avatar-menu-container canvas");
    if (!canvas) {
        console.warn("Couldn't find the guardian's face.");
        return;
    }
    downloadCanvas(canvas, "face");
}
function downloadGuardian() {
    const canvas = document.querySelector("#home-avatar-player canvas");
    if (!canvas) {
        console.warn("Couldn't find the guardian.");
        return;
    }
    downloadCanvas(canvas, getName() ?? "guardian");
}
function downloadAppearance() {
    const canvas = document.querySelector("#appearance-preview canvas");
    if (!canvas) {
        console.warn("Couldn't find the guardian.");
        return;
    }
    downloadCanvas(canvas, getName() ?? "guardian");
}
function downloadProfile() {
    const canvas = document.querySelector(".playerProfileAvatar canvas");
    const title = document.querySelector("#main-section .section-title");
    if (!canvas || !title)
        return;
    downloadCanvas(canvas, title.textContent?.trim() ?? "guardian");
}
function getName() {
    return (document.querySelector("#avatar-menu-container-outer>p")?.textContent ??
        null);
}


/***/ }),

/***/ "./src/duration.ts":
/*!*************************!*\
  !*** ./src/duration.ts ***!
  \*************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "DurationUnit": () => (/* binding */ DurationUnit),
/* harmony export */   "Duration": () => (/* binding */ Duration)
/* harmony export */ });
var DurationUnit;
(function (DurationUnit) {
    DurationUnit[DurationUnit["millisecond"] = 1] = "millisecond";
    DurationUnit[DurationUnit["second"] = 1000] = "second";
    DurationUnit[DurationUnit["minute"] = 60000] = "minute";
    DurationUnit[DurationUnit["hour"] = 3600000] = "hour";
    DurationUnit[DurationUnit["day"] = 86400000] = "day";
    DurationUnit[DurationUnit["week"] = 604800000] = "week";
})(DurationUnit || (DurationUnit = {}));
class Duration {
    value;
    unit;
    constructor(value, unit) {
        this.value = value;
        this.unit = unit;
    }
    divide(duration) {
        return new Duration(this.value / duration.to(this.unit).value, this.unit);
    }
    minus(duration) {
        return new Duration(this.value - duration.to(this.unit).value, this.unit);
    }
    multiply(duration) {
        return new Duration(this.value * duration.to(this.unit).value, this.unit);
    }
    plus(duration) {
        return new Duration(this.value + duration.to(this.unit).value, this.unit);
    }
    to(unit) {
        return new Duration((this.value * this.unit) / unit, unit);
    }
}


/***/ }),

/***/ "./src/eldarya/jquery.ts":
/*!*******************************!*\
  !*** ./src/eldarya/jquery.ts ***!
  \*******************************/
/***/ (() => {

"use strict";



/***/ }),

/***/ "./src/eldarya_util.ts":
/*!*****************************!*\
  !*** ./src/eldarya_util.ts ***!
  \*****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "trimIcon": () => (/* binding */ trimIcon)
/* harmony export */ });
function trimIcon(icon) {
    const tilde = icon.lastIndexOf("~");
    const dot = icon.lastIndexOf(".");
    if (tilde === -1 || dot === -1)
        return icon;
    return icon.substring(0, tilde) + icon.substring(dot);
}


/***/ }),

/***/ "./src/i18n/en.ts":
/*!************************!*\
  !*** ./src/i18n/en.ts ***!
  \************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "en": () => (/* binding */ en)
/* harmony export */ });
const en = {
    home: {
        forum: "Forum",
        takeover: "Takeover",
    },
    takeover: {
        bought: (name, price) => `Bought <strong>${name}</strong> for <strong class="price-item">${price}</strong> <span class="maana-icon" alt="maanas"></span>.`,
        disabled: "Takeover mode disabled.",
        enabled: "Takeover mode enabled. Please do not interact with this tab.",
    },
    carousel: {
        beemoov_annoyances: {
            title: "Beemoov Annoyances",
            subtitle: "Block some of Eldarya's annoyances.",
        },
        download_face: {
            title: "Download your guardian's face!",
            subtitle: "Click here to download your guardian's face.",
        },
        download_guardian: {
            title: "Download your guardian!",
            subtitle: "Click here to download your guardian.",
        },
        eldarya_enhancements: {
            title: `${GM.info.script.name} v${GM.info.script.version}`,
            subtitle: GM.info.script.description,
        },
        takeover: {
            disable_takeover: "Disable Takeover",
            enable_takeover: "Enable Takeover",
            subtitle: "Give up this tab to perform automated actions.",
            title: "Takeover",
        },
    },
    minigames: {
        played_for: (name, maanas) => `Played <strong>${name}</strong> for <strong class="price-item">${maanas}</strong> <span class="maana-icon" alt="maanas"></span> earned.`,
        played: name => `Played <strong>${name}</strong>.`,
        playing: name => `Playing <strong>${name}</strong>...`,
    },
    appearance: {
        buttons: {
            backward: "Move back",
            forward: "Bring forward",
        },
        favourites: {
            imported: "Imported outfit!",
            importing: "Importing outfit. Please wait...",
            click_outfit: {
                delete: "Delete",
                goto_account: `To transfer your <strong>${GM.info.script.name}</strong> favourites to another browser, export them in the <a href="/user/account" style="text-decoration: underline;">my&nbsp;account</a> page.`,
                saved_locally: `Take note that this outfit was saved in <strong>${GM.info.script.name}</strong>' settings and was not sent to Eldarya's servers.`,
                wear: "Wear",
            },
            save_outfit: {
                goto_account: `To transfer your <strong>${GM.info.script.name}</strong> favourites to another browser, export them in the <a href="/user/account" style="text-decoration: underline;">my&nbsp;account</a> page.`,
                placeholder: "Name...",
                save: "Save",
                saved_locally: `Take note that this outfit will only be saved within <strong>${GM.info.script.name}</strong>' settings and will not be sent to Eldarya's servers.`,
                title: "Save outfit",
            },
            buttons: {
                download: "Download PNG",
                export: "Export",
                import: "Import",
            },
        },
        loaded: "The wardrobe is loaded.",
        loading: (categoryname) => `Loading <strong>${categoryname}</strong>...`,
    },
    market: {
        add_to_wishlist: {
            added_to_wishlist: (name, price) => `Added <strong>${name}</strong> for <strong class="price-item">${price}</strong> <span class="maana-icon" alt="maanas"></span> to the wishlist.`,
            invalid_price: "This is not a valid price.",
            save: "Save",
            text: "How many maanas do you wish to offer to acquire this item?",
            title: "Add to wishlist",
        },
        auctions: {
            buy_now_price: "Buy now price :",
            current_price: "Current price :",
            delete: "Delete",
            purchase_history: "Purchase history",
            sales_history: "Sales history",
            date_time_format: new Intl.DateTimeFormat("en-GB", {
                minute: "2-digit",
                hour: "2-digit",
                day: "numeric",
                month: "long",
                year: "numeric",
            }),
        },
        change_price: {
            changed_price: (name, price) => `Changed <strong>${name}</strong>'s price for <strong class="price-item">${price}</strong> <span class="maana-icon" alt="maanas"></span>.`,
            invalid_price: "This is not a valid price.",
            save: "Save",
            text: "How many maanas do you wish to offer to acquire this item?",
            title: "Change price",
        },
        wishlist: {
            assistance: `On this page, you can organize your wishlist and check the status of your wished items. Please note that your wishlist is saved locally in <strong>${GM.info.script.name}</strong>' settings and is not sent to Eldarya's servers. To transfer your wishlist to another browser, export your settings in the <a href="/user/account" style="text-decoration: underline;">my&nbsp;account</a> page.`,
            actions: "Actions",
            change_price: "Change price",
            delete_tooltip: "Remove from wishlist",
            delete: "Delete",
            icon: "Icon",
            name: "Name",
            price: "Price",
            reset_tooltip: "Reset the error status",
            reset: "Reset",
            status: "Status",
            title: "Wishlist",
        },
    },
    account: {
        debug_tooltip: "Enables or disables logging.",
        debug: "Debug",
        enhancements: "Enhancements",
        explorations: "Explorations",
        export: "Export settings",
        import: "Import settings",
        imported: "Imported settings!",
        market: "Market",
        minigames: "Minigames",
    },
    pet: {
        auto_explore: "Highlight",
        date_time_format: new Intl.DateTimeFormat("en-GB", {
            minute: "2-digit",
            hour: "2-digit",
            day: "numeric",
            month: "long",
            year: "numeric",
        }),
        delete_history: "Delete history",
        empty_history: "Your exploration history is empty. It will automatically fill up as your familiar finds items while exploring.",
        goto_account: `To transfer your exploration history to another browser, export your settings from the <em>my&nbsp;account</em> page.`,
        history: "History",
        saved_locally: `Please note that your exploration history was saved locally in <strong>${GM.info.script.name}</strong>' settings and was not sent to Eldarya's servers.`,
    },
    profile: {
        export_outfit: "Export outfit",
        download_outfit: "Download PNG",
    },
    error: {
        downloadCanvas: "There was an error while creating the image.",
    },
    mall: {
        add_to_wishlist: {
            title: "Add to market wishlist",
            text: "How many maanas do you wish to offer to acquire this item?",
            note: "Please note that the items added from the mall are not necessarily available at the market.",
        },
    },
};
Object.freeze(en);


/***/ }),

/***/ "./src/i18n/fr.ts":
/*!************************!*\
  !*** ./src/i18n/fr.ts ***!
  \************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "fr": () => (/* binding */ fr)
/* harmony export */ });
const fr = {
    home: {
        forum: "Forum",
        takeover: "Takeover",
    },
    takeover: {
        bought: (name, price) => `Acheté <strong>${name}</strong> pour <strong class="price-item">${price}</strong> <span class="maana-icon" alt="maanas"></span>.`,
        disabled: "Takeover désactivé.",
        enabled: "Takeover activé. Évite d'intéragir avec cet onglet.",
    },
    carousel: {
        beemoov_annoyances: {
            title: "Beemoov Annoyances",
            subtitle: "Bloque certains irritants d'Eldarya.",
        },
        download_face: {
            title: "Télécharge le visage de ta gardienne!",
            subtitle: "Clique ici pour télécharger le visage de ta gardienne.",
        },
        download_guardian: {
            title: "Télécharge ta gardienne!",
            subtitle: "Clique ici pour télécharger ta gardienne.",
        },
        eldarya_enhancements: {
            title: `${GM.info.script.name} v${GM.info.script.version}`,
            subtitle: "Améliore l'expérience utilisateur d'Eldarya.",
        },
        takeover: {
            disable_takeover: "Désactive le takeover",
            enable_takeover: "Active le takeover",
            subtitle: "Laisse cet onglet performer des actions automatiques.",
            title: "Takeover",
        },
    },
    minigames: {
        played_for: (name, maanas) => `A joué à <strong>${name}</strong> pour <strong class="price-item">${maanas}</strong> <span class="maana-icon" alt="maanas"></span> gagnés.`,
        played: (name) => `A joué à <strong>${name}</strong>.`,
        playing: (name) => `Joue à <strong>${name}</strong>...`,
    },
    appearance: {
        buttons: {
            backward: "Vers l'arrière",
            forward: "Vers l'avant",
        },
        favourites: {
            imported: "Importation réussie!",
            importing: "Importation en cours...",
            click_outfit: {
                delete: "Supprimer",
                goto_account: `Pour transférer tes favoris d'<strong>${GM.info.script.name}</strong> vers un autre navigateur, exporte-les à partir de la page <a href="/user/account" style="text-decoration: underline;">mon&nbsp;compte</a>.`,
                saved_locally: `Prends note que cette tenue a été sauvegardée localement dans les paramètres d'<strong>${GM.info.script.name}</strong> et n'a pas été envoyée aux serveurs d'Eldarya.`,
                wear: "Porter",
            },
            save_outfit: {
                goto_account: `Pour transférer tes favoris d'<strong>${GM.info.script.name}</strong> vers un autre navigateur, exporte-les à partir de la page <a href="/user/account" style="text-decoration: underline;">mon&nbsp;compte</a>.`,
                placeholder: "Nom...",
                save: "Sauvegarder",
                saved_locally: `Prends note que cette tenue sera sauvegardée localement dans les paramètres d'<strong>${GM.info.script.name}</strong> et ne sera pas envoyée aux serveurs d'Eldarya.`,
                title: "Sauvegarder cette tenue",
            },
            buttons: {
                download: "Télécharger le PNG",
                export: "Exporter",
                import: "Importer",
            },
        },
        loaded: "Le chargement de la garde-robe est terminé.",
        loading: (categoryname) => `Chargement de <strong>${categoryname}</strong>...`,
    },
    market: {
        add_to_wishlist: {
            added_to_wishlist: (name, price) => `Ajouté <strong>${name}</strong> pour <strong class="price-item">${price}</strong> <span class="maana-icon" alt="maanas"></span> à la liste de souhaits.`,
            invalid_price: "Ce prix n'est pas valide.",
            save: "Sauvegarder",
            text: "Combien de maanas souhaites-tu offrir pour acquérir cet item?",
            title: "Ajouter à la liste de souhait",
        },
        auctions: {
            buy_now_price: "Achat immédiat :",
            current_price: "Mise actuelle :",
            delete: "Supprimer",
            purchase_history: "Historique d'achat",
            sales_history: "Historique de vente",
            date_time_format: new Intl.DateTimeFormat("fr-CA", {
                minute: "2-digit",
                hour: "2-digit",
                day: "numeric",
                month: "long",
                year: "numeric",
            }),
        },
        change_price: {
            changed_price: (name, price) => `Changé le prix de <strong>${name}</strong> pour <strong class="price-item">${price}</strong> <span class="maana-icon" alt="maanas"></span>.`,
            invalid_price: "Ce prix n'est pas valide.",
            save: "Sauvegarder",
            text: "Combien de maanas souhaites-tu offrir pour acquérir cet item?",
            title: "Changer le prix",
        },
        wishlist: {
            assistance: `Sur cette page, tu peux organiser ta liste de souhaits et vérifier le statut de tes articles souhaités. Prends note que ta liste de souhaits est sauvegardée localement dans les paramètres d'<strong>${GM.info.script.name}</strong> et n'est pas envoyée aux serveurs d'Eldarya. Pour transférer ta liste de souhaits vers un autre navigateur, exporte-la à partir de la page <a href="/user/account" style="text-decoration: underline;">mon&nbsp;compte</a>.`,
            actions: "Actions",
            change_price: "Changer le prix",
            delete_tooltip: "Retirer de la liste de souhaits",
            delete: "Supprimer",
            icon: "Icône",
            name: "Nom",
            price: "Prix",
            reset_tooltip: "Réinitialiser l'état d'erreur",
            reset: "Réinitialiser",
            status: "Statut",
            title: "Liste de souhaits",
        },
    },
    account: {
        debug_tooltip: "Active ou désactive la journalisation.",
        debug: "Débogage",
        enhancements: "Améliorations",
        explorations: "Explorations",
        export: "Exporter les paramètres",
        import: "Importer les paramètres",
        imported: "Paramètres importés",
        market: "Marché",
        minigames: "Mini-jeux",
    },
    pet: {
        auto_explore: "Marquer",
        date_time_format: new Intl.DateTimeFormat("fr-CA", {
            minute: "2-digit",
            hour: "2-digit",
            day: "numeric",
            month: "long",
            year: "numeric",
        }),
        delete_history: "Nettoyer l'historique",
        empty_history: "Ton historique d'exploration est vide. Il se remplira automatiquement à mesure que ton familier trouvera des items en exploration.",
        goto_account: "Pour transférer ton historique d'explorations vers un autre navigateur, exporte tes paramètres à partir de la page <em>mon compte</em>.",
        history: "Historique",
        saved_locally: `Prends note que ton historique d'explorations a été sauvegardé localement dans les paramètres d'<strong>${GM.info.script.name}</strong> et n'a pas été envoyé aux serveurs d'Eldarya.`,
    },
    profile: {
        export_outfit: "Exporter la tenue",
        download_outfit: "Télécharger le PNG",
    },
    error: {
        downloadCanvas: "Une erreur est survenue lors du téléchargement de l'image.",
    },
    mall: {
        add_to_wishlist: {
            title: "Ajouter à la liste de souhait du marché",
            text: "Combien de maanas souhaites-tu offrir pour acquérir cet item?",
            note: "Prends note que les items ajoutés à partir de la boutique ne sont pas nécessairement disponibles au marché.",
        },
    },
};
Object.freeze(fr);


/***/ }),

/***/ "./src/i18n/translate.ts":
/*!*******************************!*\
  !*** ./src/i18n/translate.ts ***!
  \*******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "translate": () => (/* binding */ translate)
/* harmony export */ });
/* harmony import */ var _en__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./en */ "./src/i18n/en.ts");
/* harmony import */ var _fr__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fr */ "./src/i18n/fr.ts");


function translation() {
    if (location.hostname.endsWith(".com.br"))
        return _en__WEBPACK_IMPORTED_MODULE_0__.en;
    if (location.hostname.endsWith(".de"))
        return _en__WEBPACK_IMPORTED_MODULE_0__.en;
    if (location.hostname.endsWith(".es"))
        return _en__WEBPACK_IMPORTED_MODULE_0__.en;
    if (location.hostname.endsWith(".hu"))
        return _en__WEBPACK_IMPORTED_MODULE_0__.en;
    if (location.hostname.endsWith(".it"))
        return _en__WEBPACK_IMPORTED_MODULE_0__.en;
    if (location.hostname.endsWith(".pl"))
        return _en__WEBPACK_IMPORTED_MODULE_0__.en;
    if (location.hostname.endsWith(".ru"))
        return _en__WEBPACK_IMPORTED_MODULE_0__.en;
    if (location.hostname.endsWith(".com"))
        return _en__WEBPACK_IMPORTED_MODULE_0__.en;
    if (location.hostname.endsWith(".fr"))
        return _fr__WEBPACK_IMPORTED_MODULE_1__.fr;
    else
        return _en__WEBPACK_IMPORTED_MODULE_0__.en;
}
const translate = translation();


/***/ }),

/***/ "./src/indexed_db/databases.enum.ts":
/*!******************************************!*\
  !*** ./src/indexed_db/databases.enum.ts ***!
  \******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Databases": () => (/* binding */ Databases)
/* harmony export */ });
var Databases;
(function (Databases) {
    Databases["eldarya_enhancements"] = "eldarya_enhancements";
})(Databases || (Databases = {}));


/***/ }),

/***/ "./src/indexed_db/fields.enum.ts":
/*!***************************************!*\
  !*** ./src/indexed_db/fields.enum.ts ***!
  \***************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Fields": () => (/* binding */ Fields)
/* harmony export */ });
var Fields;
(function (Fields) {
    Fields["blob"] = "blob";
    Fields["id"] = "id";
    Fields["items"] = "items";
    Fields["name"] = "name";
})(Fields || (Fields = {}));


/***/ }),

/***/ "./src/indexed_db/indexed_db.ts":
/*!**************************************!*\
  !*** ./src/indexed_db/indexed_db.ts ***!
  \**************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _databases_enum__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./databases.enum */ "./src/indexed_db/databases.enum.ts");
/* harmony import */ var _fields_enum__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fields.enum */ "./src/indexed_db/fields.enum.ts");
/* harmony import */ var _tables_enum__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables.enum */ "./src/indexed_db/tables.enum.ts");



class IndexedDB {
    db;
    constructor() {
        const request = indexedDB.open(_databases_enum__WEBPACK_IMPORTED_MODULE_0__.Databases.eldarya_enhancements, 1);
        request.onsuccess = () => (this.db = request.result);
        request.onupgradeneeded = function () {
            const db = this.result;
            const objectStore = db.createObjectStore(_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits, {
                keyPath: "id",
                autoIncrement: true,
            });
            objectStore.createIndex(_fields_enum__WEBPACK_IMPORTED_MODULE_1__.Fields.blob, "blob", { unique: false });
            objectStore.createIndex(_fields_enum__WEBPACK_IMPORTED_MODULE_1__.Fields.items, "items", { unique: false });
            objectStore.createIndex(_fields_enum__WEBPACK_IMPORTED_MODULE_1__.Fields.name, "name", { unique: false });
        };
    }
    /** @returns a new `FavouriteOutfit` with the `key` property set. */
    async addFavouriteOutfit(favourite) {
        return new Promise((resolve, reject) => {
            if (!this.db)
                return void reject();
            const request = this.db
                .transaction([_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits], "readwrite")
                .objectStore(_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits)
                .add(favourite);
            request.onsuccess = () => resolve({
                ...favourite,
                url: favourite.url ?? URL.createObjectURL(favourite.blob),
                id: Number(request.result),
            });
        });
    }
    async clearFavouriteOutfits() {
        return new Promise((resolve, reject) => {
            if (!this.db)
                return void reject();
            const request = this.db
                .transaction([_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits], "readwrite")
                .objectStore(_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits)
                .clear();
            request.onsuccess = () => resolve();
        });
    }
    async deleteFavouriteOutfit(favourite) {
        return new Promise((resolve, reject) => {
            if (!this.db)
                return void reject();
            const request = this.db
                .transaction([_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits], "readwrite")
                .objectStore(_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits)
                .delete(favourite.id);
            request.onsuccess = () => {
                resolve();
                if (favourite.url)
                    URL.revokeObjectURL(favourite.url);
            };
        });
    }
    async getFavouriteOutfit(id) {
        return new Promise((resolve, reject) => {
            if (!this.db)
                return void reject();
            const request = this.db
                .transaction([_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits], "readonly")
                .objectStore(_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits)
                .get(id);
            const favourite = request.result;
            request.onsuccess = () => resolve({ ...favourite, url: URL.createObjectURL(favourite.blob) });
        });
    }
    async getFavouriteOutfits() {
        return new Promise((resolve, reject) => {
            if (!this.db)
                return void reject();
            const request = this.db
                .transaction([_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits], "readonly")
                .objectStore(_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits)
                .getAll();
            request.onsuccess = () => resolve(request.result.map((favourite) => ({
                ...favourite,
                url: URL.createObjectURL(favourite.blob),
            })));
        });
    }
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new IndexedDB());


/***/ }),

/***/ "./src/indexed_db/tables.enum.ts":
/*!***************************************!*\
  !*** ./src/indexed_db/tables.enum.ts ***!
  \***************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Tables": () => (/* binding */ Tables)
/* harmony export */ });
var Tables;
(function (Tables) {
    Tables["favourite_outfits"] = "favourite_outfits";
})(Tables || (Tables = {}));


/***/ }),

/***/ "./src/local_storage/local_storage.enum.ts":
/*!*************************************************!*\
  !*** ./src/local_storage/local_storage.enum.ts ***!
  \*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "LocalStorageKey": () => (/* binding */ LocalStorageKey)
/* harmony export */ });
var LocalStorageKey;
(function (LocalStorageKey) {
    LocalStorageKey["autoExploreLocations"] = "autoExploreLocations";
    LocalStorageKey["debug"] = "debug";
    LocalStorageKey["explorationHistory"] = "explorationHistory";
    LocalStorageKey["explorations"] = "explorations";
    LocalStorageKey["market"] = "market";
    LocalStorageKey["meta"] = "meta";
    LocalStorageKey["minigames"] = "minigames";
    LocalStorageKey["purchases"] = "purchases";
    LocalStorageKey["sales"] = "sales";
    LocalStorageKey["version"] = "version";
    LocalStorageKey["wishlist"] = "wishlist";
})(LocalStorageKey || (LocalStorageKey = {}));


/***/ }),

/***/ "./src/local_storage/local_storage.ts":
/*!********************************************!*\
  !*** ./src/local_storage/local_storage.ts ***!
  \********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "LocalStorage": () => (/* binding */ LocalStorage)
/* harmony export */ });
/* harmony import */ var blob_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blob-util */ "./node_modules/.pnpm/[email protected]/node_modules/blob-util/dist/blob-util.es.js");
/* harmony import */ var _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../indexed_db/indexed_db */ "./src/indexed_db/indexed_db.ts");
/* harmony import */ var _local_storage_enum__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./local_storage.enum */ "./src/local_storage/local_storage.enum.ts");



class LocalStorage {
    static localStorage = localStorage;
    constructor() { }
    static get autoExploreLocations() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.autoExploreLocations, []);
    }
    static set autoExploreLocations(locations) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.autoExploreLocations, locations);
    }
    static get debug() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.debug, false);
    }
    static set debug(enabled) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.debug, enabled);
    }
    static get explorationHistory() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.explorationHistory, []);
    }
    static set explorationHistory(explorationHistory) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.explorationHistory, explorationHistory);
    }
    static get explorations() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.explorations, false);
    }
    static set explorations(enabled) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.explorations, enabled);
    }
    static get market() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.market, false);
    }
    static set market(enabled) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.market, enabled);
    }
    static get meta() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.meta, null);
    }
    static set meta(meta) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.meta, meta);
    }
    static get minigames() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.minigames, false);
    }
    static set minigames(enabled) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.minigames, enabled);
    }
    static get purchases() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.purchases, []);
    }
    static set purchases(entry) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.purchases, entry);
    }
    static get sales() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.sales, []);
    }
    static set sales(sale) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.sales, sale);
    }
    static get version() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.version, "");
    }
    static set version(version) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.version, version);
    }
    static get wishlist() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.wishlist, []);
    }
    static set wishlist(locations) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.wishlist, locations);
    }
    static async getSettings() {
        return {
            autoExploreLocations: this.autoExploreLocations,
            debug: this.debug,
            explorationHistory: this.explorationHistory,
            explorations: this.explorations,
            favourites: await Promise.all((await _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__["default"].getFavouriteOutfits()).map(async (favourite) => ({
                name: favourite.name,
                items: favourite.items,
                base64: await (0,blob_util__WEBPACK_IMPORTED_MODULE_0__.blobToBase64String)(favourite.blob),
            }))),
            market: this.market,
            minigames: this.minigames,
            version: this.version,
            wishlist: this.wishlist,
        };
    }
    static async setSettings(settings) {
        this.autoExploreLocations = settings.autoExploreLocations;
        this.debug = settings.debug;
        this.explorationHistory = settings.explorationHistory;
        this.explorations = settings.explorations;
        this.market = settings.market;
        this.minigames = settings.minigames;
        this.version = settings.version;
        this.wishlist = settings.wishlist;
        await _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__["default"].clearFavouriteOutfits();
        for (const favourite of settings.favourites.map(favourite => ({
            blob: (0,blob_util__WEBPACK_IMPORTED_MODULE_0__.base64StringToBlob)(favourite.base64),
            items: favourite.items,
            name: favourite.name,
        }))) {
            void _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__["default"].addFavouriteOutfit(favourite);
        }
    }
    static getItem(key, fallback) {
        return (JSON.parse(this.localStorage.getItem(key) ?? JSON.stringify(fallback)) ?? fallback);
    }
    static setItem(key, value) {
        this.localStorage.setItem(key, JSON.stringify(value));
    }
}


/***/ }),

/***/ "./src/marketplace/enums/body_location.enum.ts":
/*!*****************************************************!*\
  !*** ./src/marketplace/enums/body_location.enum.ts ***!
  \*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "BodyLocation": () => (/* binding */ BodyLocation)
/* harmony export */ });
var BodyLocation;
(function (BodyLocation) {
    BodyLocation["All"] = "";
    BodyLocation[BodyLocation["Underwear"] = 1] = "Underwear";
    BodyLocation[BodyLocation["Skins"] = 2] = "Skins";
    BodyLocation[BodyLocation["Tattoos"] = 20] = "Tattoos";
    BodyLocation[BodyLocation["Mouths"] = 21] = "Mouths";
    BodyLocation[BodyLocation["Eyes"] = 3] = "Eyes";
    BodyLocation[BodyLocation["Hair"] = 4] = "Hair";
    BodyLocation[BodyLocation["Socks"] = 5] = "Socks";
    BodyLocation[BodyLocation["Shoes"] = 6] = "Shoes";
    BodyLocation[BodyLocation["Pants"] = 7] = "Pants";
    BodyLocation[BodyLocation["HandAccessories"] = 8] = "HandAccessories";
    BodyLocation[BodyLocation["Tops"] = 9] = "Tops";
    BodyLocation[BodyLocation["Coats"] = 10] = "Coats";
    BodyLocation[BodyLocation["Gloves"] = 11] = "Gloves";
    BodyLocation[BodyLocation["Necklaces"] = 12] = "Necklaces";
    BodyLocation[BodyLocation["Dresses"] = 13] = "Dresses";
    BodyLocation[BodyLocation["Hats"] = 14] = "Hats";
    BodyLocation[BodyLocation["FaceAccessories"] = 15] = "FaceAccessories";
    BodyLocation[BodyLocation["Funds"] = 16] = "Funds";
    BodyLocation[BodyLocation["Belts"] = 18] = "Belts";
    BodyLocation[BodyLocation["Atmospheres"] = 19] = "Atmospheres";
})(BodyLocation || (BodyLocation = {}));


/***/ }),

/***/ "./src/marketplace/enums/category.enum.ts":
/*!************************************************!*\
  !*** ./src/marketplace/enums/category.enum.ts ***!
  \************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "CategoryString": () => (/* binding */ CategoryString),
/* harmony export */   "CategoryNumber": () => (/* binding */ CategoryNumber)
/* harmony export */ });
var CategoryString;
(function (CategoryString) {
    CategoryString["all"] = "";
    CategoryString["food"] = "food";
    CategoryString["alchemy"] = "alchemy";
    CategoryString["utility"] = "utility";
    CategoryString["tame"] = "tame";
})(CategoryString || (CategoryString = {}));
var CategoryNumber;
(function (CategoryNumber) {
    CategoryNumber["all"] = "";
    CategoryNumber[CategoryNumber["food"] = 1] = "food";
    CategoryNumber["alchemy"] = "Consumable";
    CategoryNumber[CategoryNumber["utility"] = 3] = "utility";
    CategoryNumber[CategoryNumber["tame"] = 4] = "tame";
})(CategoryNumber || (CategoryNumber = {}));


/***/ }),

/***/ "./src/marketplace/enums/guard.enum.ts":
/*!*********************************************!*\
  !*** ./src/marketplace/enums/guard.enum.ts ***!
  \*********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Guard": () => (/* binding */ Guard)
/* harmony export */ });
var Guard;
(function (Guard) {
    Guard["any"] = "";
    Guard[Guard["light"] = 1] = "light";
    Guard[Guard["obsidian"] = 2] = "obsidian";
    Guard[Guard["absynthe"] = 3] = "absynthe";
    Guard[Guard["shadow"] = 4] = "shadow";
})(Guard || (Guard = {}));


/***/ }),

/***/ "./src/marketplace/enums/rarity.enum.ts":
/*!**********************************************!*\
  !*** ./src/marketplace/enums/rarity.enum.ts ***!
  \**********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Rarity": () => (/* binding */ Rarity)
/* harmony export */ });
var Rarity;
(function (Rarity) {
    Rarity["all"] = "";
    Rarity["common"] = "common";
    Rarity["rare"] = "rare";
    Rarity["epic"] = "epic";
    Rarity["legendary"] = "legendary";
    Rarity["event"] = "event";
})(Rarity || (Rarity = {}));


/***/ }),

/***/ "./src/marketplace/enums/type.enum.ts":
/*!********************************************!*\
  !*** ./src/marketplace/enums/type.enum.ts ***!
  \********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Type": () => (/* binding */ Type)
/* harmony export */ });
var Type;
(function (Type) {
    Type["All"] = "";
    Type["Bag"] = "Bag";
    Type["Consumable"] = "Consumable";
    Type["EggItem"] = "EggItem";
    Type["PlayerWearableItem"] = "PlayerWearableItem";
    Type["QuestItem"] = "QuestItem";
})(Type || (Type = {}));


/***/ }),

/***/ "./src/marketplace/marketplace_handlers.ts":
/*!*************************************************!*\
  !*** ./src/marketplace/marketplace_handlers.ts ***!
  \*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "getItemDetails": () => (/* binding */ getItemDetails)
/* harmony export */ });
/* harmony import */ var _eldarya_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../eldarya_util */ "./src/eldarya_util.ts");
/* harmony import */ var _enums_rarity_enum__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./enums/rarity.enum */ "./src/marketplace/enums/rarity.enum.ts");


function getItemDetails(li) {
    const name = li.querySelector(".abstract-name")?.innerText;
    const abstractType = li.querySelector(".abstract-type")?.innerText;
    const src = li.querySelector(".abstract-icon img")?.src;
    const rarity = _enums_rarity_enum__WEBPACK_IMPORTED_MODULE_1__.Rarity[(li
        .querySelector(".rarity-marker-common, .rarity-marker-rare, .rarity-marker-epic, .rarity-marker-legendary, .rarity-marker-event")
        ?.className.split("rarity-marker-")[1] ?? "")];
    const currentPrice = li.querySelector(".price-item[data-bids]")?.dataset;
    const buyNowPrice = li.querySelector(".price-item:not([data-bids])")?.dataset;
    if (!src || !name || !abstractType)
        return null;
    return {
        ...li.dataset,
        icon: (0,_eldarya_util__WEBPACK_IMPORTED_MODULE_0__.trimIcon)(src),
        rarity,
        name,
        abstractType,
        buyNowPrice,
        currentPrice,
        date: new Date(),
    };
}


/***/ }),

/***/ "./src/math_util.ts":
/*!**************************!*\
  !*** ./src/math_util.ts ***!
  \**************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "MathUtil": () => (/* binding */ MathUtil)
/* harmony export */ });
class MathUtil {
    static phi = (1 + Math.sqrt(5)) / 2;
    static randomBetween(min, max) {
        return Math.random() * (max - min) + min;
    }
}


/***/ }),

/***/ "./src/migrate.ts":
/*!************************!*\
  !*** ./src/migrate.ts ***!
  \************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "migrate": () => (/* binding */ migrate)
/* harmony export */ });
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./local_storage/local_storage */ "./src/local_storage/local_storage.ts");

function migrate() {
    switch (_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.version) {
        case GM.info.script.version:
            return;
        case "":
            installed();
            break;
        default:
            switch (GM.info.script.version) {
                case "1.2.0":
                    v1_2_0();
                    break;
                case "1.2.9":
                    v1_2_9();
                    break;
                case "1.2.10":
                    v1_2_10();
                    break;
                default:
                    installed();
                    break;
            }
    }
    _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.version = GM.info.script.version;
}
function installed() {
    $.flavrNotif(`${name()} ${version()} installed!`);
}
function name() {
    return `<strong>${GM.info.script.name}</strong>`;
}
function version() {
    return `v<strong>${GM.info.script.version}</strong>`;
}
function v1_2_0() {
    _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.sales = [];
    $.flavrNotif(`Updated to ${version()}. Your sales history was erased.`);
}
function v1_2_9() {
    $.flavrNotif(`Updated to ${version()}. The wishlist has been improved to sort by category/type/name, but your wished items do not have a type. You can add types by re-adding the items via the market.`);
}
function v1_2_10() {
    $.flavrNotif(`Updated to ${version()}. The wishlist has been improved to sort by category/type/rarity/name, but your wished items do not have a rarity. You can add rarities by re-adding the items via the market.`);
}


/***/ }),

/***/ "./src/minigames/emile.ts":
/*!********************************!*\
  !*** ./src/minigames/emile.ts ***!
  \********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "playPeggle": () => (/* binding */ playPeggle),
/* harmony export */   "playFlappy": () => (/* binding */ playFlappy),
/* harmony export */   "playHatchlings": () => (/* binding */ playHatchlings)
/* harmony export */ });
/* harmony import */ var _eldarya_jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../eldarya/jquery */ "./src/eldarya/jquery.ts");
/* harmony import */ var _eldarya_jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_eldarya_jquery__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _flappy__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./flappy */ "./src/minigames/flappy.ts");
/* harmony import */ var _hatchlings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hatchlings */ "./src/minigames/hatchlings.ts");
/* harmony import */ var _peggle__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./peggle */ "./src/minigames/peggle.ts");





async function playPeggle() {
    return play(_peggle__WEBPACK_IMPORTED_MODULE_4__.peggle);
}
async function playFlappy() {
    return play(_flappy__WEBPACK_IMPORTED_MODULE_2__.flappy);
}
async function playHatchlings() {
    return play(_hatchlings__WEBPACK_IMPORTED_MODULE_3__.hatchlings);
}
async function play(minigame) {
    // Disable buttons
    await new Promise(resolve => {
        const interval = setInterval(() => {
            const buttons = document.querySelectorAll(".minigames-rules .flavr-button");
            if (buttons.length) {
                clearInterval(interval);
                for (const button of buttons) {
                    button.classList.add("disabled");
                }
                resolve(true);
            }
        }, 250);
    });
    const json = await execute(minigame);
    const template = __webpack_require__(/*! ../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
    $.flavrNotif(template.render({
        ...minigame,
        message: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.minigames.playing(minigame.name),
    }));
    const gameToken = json.data;
    const score = randomInt(minigame.scoreMin, minigame.scoreMax);
    const enc_token = xorEncode(gameToken, score.toString());
    await new Promise(resolve => setTimeout(resolve, randomInt(minigame.delayMin, minigame.delayMax)));
    await getPrizes(minigame, gameToken, score);
    await new Promise(resolve => setTimeout(resolve, randomInt(1000, 3000)));
    await send(enc_token, score, minigame.name.toLowerCase());
    await new Promise(resolve => setTimeout(resolve, randomInt(1000, 3000)));
}
function randomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
}
async function execute(minigame) {
    return new Promise((resolve, reject) => {
        if (typeof Recaptcha !== "undefined") {
            Recaptcha.execute(`minigameStart${minigame.name}`, (token) => void startGame(minigame, token).then(resolve).catch(reject));
        }
        else {
            void startGame(minigame).then(resolve).catch(reject);
        }
    });
}
async function startGame(minigame, recaptchaToken) {
    return new Promise((resolve, reject) => void $.ajax({
        url: "/minigames/ajax_startGame",
        type: "post",
        dataType: "json",
        data: recaptchaToken
            ? {
                game: minigame.name.toLowerCase(),
                recaptchaToken: recaptchaToken,
            }
            : {
                game: minigame.name.toLowerCase(),
            },
        success: (json) => {
            resolve(json);
        },
        error: () => {
            reject();
        },
    }));
}
async function getPrizes(minigame, gameToken, score) {
    return new Promise((resolve) => void $.post("/minigames/ajax_getPrizes", { game: minigame.name.toLowerCase(), score: score }, (json) => {
        resolve(json);
        if (json.result === "success") {
            const template = __webpack_require__(/*! ../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
            $.flavrNotif(template.render({
                ...minigame,
                message: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.minigames.played_for(minigame.name, json.data.maana),
            }));
        }
        else
            $.flavrNotif(json.data);
    }, "json").fail(() => setTimeout(() => {
        resolve(getPrizes(minigame, gameToken, score));
    }, randomInt(1000, 3000))));
}
/**
 * Sécurisation de l'envoi du score
 * Basé sur l'encodage XOR : http://en.wikipedia.org/wiki/XOR_cipher
 * Effectue un XOR bit à bit entre une chaine et une clé
 */
function xorEncode(str, key) {
    // Assure que les deux paramètres soient des chaines de caractère
    str = str.toString();
    key = key.toString();
    /** Encodage XOR */
    let xor = "";
    // eslint-disable-next-line @typescript-eslint/prefer-for-of
    for (let i = 0; i < str.length; ++i) {
        let tmp = str[i];
        for (let j = 0; j < key.length; ++j) {
            tmp = String.fromCharCode(tmp.charCodeAt(0) ^ key.charCodeAt(j));
        }
        xor += tmp;
    }
    // Renvoie le résultat en encodant les caractères spéciaux pouvant poser problème (\n par exemple)
    return encodeURIComponent(xor);
}
async function send(enc_token, score, game) {
    return new Promise(resolve => {
        if (typeof Recaptcha !== "undefined") {
            Recaptcha.execute("minigameSave" + game, (recaptchaToken) => void saveScore(enc_token, score, game, recaptchaToken).then(resolve));
        }
        else {
            void saveScore(enc_token, score, game).then(resolve);
        }
    });
}
async function saveScore(enc_token, score, game, recaptchaToken) {
    return new Promise(resolve => {
        const token = decodeURIComponent(enc_token);
        void $.ajax({
            type: "post",
            url: "/minigames/ajax_saveScore",
            data: recaptchaToken
                ? {
                    token: token,
                    score: score,
                    game: game,
                    recaptchaToken: recaptchaToken,
                }
                : {
                    token: token,
                    score: score,
                    game: game,
                },
            success: () => {
                resolve();
            },
            error: () => setTimeout(() => {
                resolve(saveScore(enc_token, score, game));
            }, randomInt(1000, 3000)),
        });
    });
}


/***/ }),

/***/ "./src/minigames/flappy.ts":
/*!*********************************!*\
  !*** ./src/minigames/flappy.ts ***!
  \*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "flappy": () => (/* binding */ flappy)
/* harmony export */ });
const flappy = {
    name: "Flappy",
    scoreMin: 180,
    scoreMax: 200,
    delayMin: 60_000,
    delayMax: 70_000,
    buttonSelector: '.minigame-start [href="/minigames/bubbltemple"] .nl-button',
    icon: "/static/img/new-layout/minigames/icon_bubbletemple.png",
};


/***/ }),

/***/ "./src/minigames/hatchlings.ts":
/*!*************************************!*\
  !*** ./src/minigames/hatchlings.ts ***!
  \*************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "hatchlings": () => (/* binding */ hatchlings)
/* harmony export */ });
const hatchlings = {
    name: "Hatchlings",
    scoreMin: 18,
    scoreMax: 20,
    delayMin: 30_000,
    delayMax: 30_000,
    buttonSelector: '.minigame-start [href="/minigames/cocooninpick"] .nl-button',
    icon: "/static/img/new-layout/minigames/icon_coconinpick.png",
};


/***/ }),

/***/ "./src/minigames/peggle.ts":
/*!*********************************!*\
  !*** ./src/minigames/peggle.ts ***!
  \*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "peggle": () => (/* binding */ peggle)
/* harmony export */ });
const peggle = {
    name: "Peggle",
    scoreMin: 9,
    scoreMax: 10,
    delayMin: 10_000,
    delayMax: 20_000,
    buttonSelector: '.minigame-start [href="/minigames/gembomb"] .nl-button',
    icon: "/static/img/new-layout/minigames/icon_gembomb.png",
};


/***/ }),

/***/ "./src/outfit.ts":
/*!***********************!*\
  !*** ./src/outfit.ts ***!
  \***********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "exportOutfit": () => (/* binding */ exportOutfit),
/* harmony export */   "parseAvatar": () => (/* binding */ parseAvatar)
/* harmony export */ });
function exportOutfit(selector, name = "outfit") {
    const avatar = Sacha.Avatar.avatars[selector];
    if (!avatar)
        return;
    const outfit = parseAvatar(avatar);
    const href = "data:text/json;charset=utf-8," +
        encodeURIComponent(JSON.stringify(outfit, undefined, 2));
    const a = document.createElement("a");
    a.setAttribute("href", href);
    a.setAttribute("download", `${name}.json`);
    a.click();
}
function parseAvatar(avatar) {
    return avatar.children.map(child => {
        const item = child.getItem();
        return {
            id: item._id,
            group: item._group,
            name: item._name,
            image: item._image,
            type: item._type,
            categoryId: item._categoryId,
            hiddenCategories: Object.values(item._hiddenCategories),
            animationData: item._animationData,
            locked: item._locked,
        };
    });
}


/***/ }),

/***/ "./src/pet/exploration-history.ts":
/*!****************************************!*\
  !*** ./src/pet/exploration-history.ts ***!
  \****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadExplorationHistory": () => (/* binding */ loadExplorationHistory)
/* harmony export */ });
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../console */ "./src/console.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _exploration_watcher__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./exploration-watcher */ "./src/pet/exploration-watcher.ts");




function loadExplorationHistory() {
    loadHistoryButton();
    (0,_exploration_watcher__WEBPACK_IMPORTED_MODULE_3__.listenTreasureHunt)();
}
function loadHistoryButton() {
    const closeExplorationButton = document.querySelector("#close-treasure-hunt-interface");
    if (!closeExplorationButton)
        return void _console__WEBPACK_IMPORTED_MODULE_0__.Console.error("Couldn't find #close-treasure-hunt-interface.");
    closeExplorationButton.style.display = "inline-block";
    closeExplorationButton.style.position = "relative";
    closeExplorationButton.style.right = "0";
    closeExplorationButton.style.top = "0";
    closeExplorationButton.addEventListener("click", onClickPet);
    const historyButton = document.createElement("a");
    historyButton.classList.add("nl-button", "nl-button-back");
    historyButton.style.marginRight = "0.6em";
    historyButton.textContent = _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.pet.history;
    historyButton.addEventListener("click", onClickHistory);
    const row = document.createElement("div");
    row.insertAdjacentElement("beforeend", historyButton);
    row.insertAdjacentElement("beforeend", closeExplorationButton);
    document
        .querySelector("#right-container-inner")
        ?.insertAdjacentElement("afterbegin", row);
}
function onClickHistory() {
    hidePet();
    hideExploration();
    makeHistory();
    showHistory();
}
function onClickPet() {
    hideHistory();
    showPet();
}
function hidePet() {
    const nameContainer = document.getElementById("name-container");
    const infoContainer = document.getElementById("infos-container");
    const petImageContainer = document.getElementById("pet-image-container");
    if (!nameContainer || !infoContainer || !petImageContainer)
        return void _console__WEBPACK_IMPORTED_MODULE_0__.Console.error("The pet display was damaged.", {
            nameContainer,
            infoContainer,
            petImageContainer,
        });
    nameContainer.style.display = "none";
    infoContainer.style.display = "none";
    petImageContainer.style.display = "none";
}
function showPet() {
    const nameContainer = document.getElementById("name-container");
    const infoContainer = document.getElementById("infos-container");
    const petImageContainer = document.getElementById("pet-image-container");
    if (!nameContainer || !infoContainer || !petImageContainer)
        return void _console__WEBPACK_IMPORTED_MODULE_0__.Console.error("The pet display was damaged.", {
            nameContainer,
            infoContainer,
            petImageContainer,
        });
    nameContainer.style.display = "";
    infoContainer.style.display = "";
    petImageContainer.style.display = "";
}
function showHistory() {
    const history = document.getElementById("history-container");
    if (!history)
        return;
    history.style.display = "";
}
function hideHistory() {
    const history = document.getElementById("history-container");
    if (!history)
        return;
    history.style.display = "none";
}
function hideExploration() {
    document
        .getElementById("main-section")
        ?.classList.remove("treasure-hunt-interface-open");
}
function makeHistory() {
    document.getElementById("history-container")?.remove();
    const template = __webpack_require__(/*! ../templates/html/exploration_history.html */ "./src/templates/html/exploration_history.html");
    document.getElementById("left-container")?.insertAdjacentHTML("beforeend", template.render({
        translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate,
        history: _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.explorationHistory.map(history => ({
            ...history,
            date: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.pet.date_time_format.format(new Date(history.date)),
        })),
    }));
    document.getElementById("delete-history")?.addEventListener("click", () => {
        _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.explorationHistory = [];
        makeHistory();
    });
}


/***/ }),

/***/ "./src/pet/exploration-watcher.ts":
/*!****************************************!*\
  !*** ./src/pet/exploration-watcher.ts ***!
  \****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "listenTreasureHunt": () => (/* binding */ listenTreasureHunt)
/* harmony export */ });
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../console */ "./src/console.ts");
/* harmony import */ var _eldarya_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../eldarya_util */ "./src/eldarya_util.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");



function listenTreasureHunt() {
    const resultOverlay = document.querySelector("#treasure-hunt-result-overlay");
    if (!resultOverlay)
        return void _console__WEBPACK_IMPORTED_MODULE_0__.Console.error("There is no result overlay.", resultOverlay);
    new MutationObserver(() => {
        _console__WEBPACK_IMPORTED_MODULE_0__.Console.log("Mutation in", resultOverlay);
        if (!resultOverlay.classList.contains("active"))
            return;
        const results = getResults();
        if (results.length === 0)
            return;
        _console__WEBPACK_IMPORTED_MODULE_0__.Console.log("Results:", results);
        _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.explorationHistory = [
            ...results,
            ..._local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.explorationHistory,
        ];
    }).observe(resultOverlay, {
        attributeFilter: ["class"],
    });
}
function getResults() {
    const locationName = document
        .querySelector("#th-again strong")
        ?.textContent?.trim();
    const now = new Date();
    return Array.from(document.querySelectorAll(".th-result")).map(result => {
        const img = result.querySelector("img.th-result-img");
        return {
            count: result.querySelector(".resource-count")?.textContent?.trim(),
            date: now,
            icon: img ? (0,_eldarya_util__WEBPACK_IMPORTED_MODULE_1__.trimIcon)(img.src) : undefined,
            locationName,
            name: result.querySelector(".tooltip-content h3")?.textContent?.trim(),
            tradable: Boolean(result.querySelector(".tradable")),
        };
    });
}


/***/ }),

/***/ "./src/pet/exploration.ts":
/*!********************************!*\
  !*** ./src/pet/exploration.ts ***!
  \********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadMarkers": () => (/* binding */ loadMarkers)
/* harmony export */ });
/* harmony import */ var _ajax_change_region__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../ajax/change_region */ "./src/ajax/change_region.ts");
/* harmony import */ var _api_result_enum__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../api/result.enum */ "./src/api/result.enum.ts");
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../console */ "./src/console.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");





function loadMarkers() {
    const autoExploreLocations = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.autoExploreLocations;
    for (const div of document.querySelectorAll(".map-location[data-id]")) {
        const locationId = Number(div.getAttribute("data-id"));
        if (!locationId)
            continue;
        loadPictoMap(autoExploreLocations, div);
        div.addEventListener("click", () => new MutationObserver((_, observer) => {
            addAutoExploreButton(locationId, observer);
        }).observe(document.getElementById("map-location-preview"), {
            attributes: true,
        }));
    }
}
function addAutoExploreButton(locationId, observer) {
    const buttonsContainer = document.querySelector("#buttons-container");
    if (!buttonsContainer)
        return;
    observer?.disconnect();
    // Parameters to be injected into the template
    const context = {
        locationId,
        active: _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.autoExploreLocations.some(saved => saved.location.id === locationId),
        regionId: Number(document
            .querySelector(".minimap.current[data-mapid]")
            ?.getAttribute("data-mapid")),
    };
    // Add the auto explore button
    buttonsContainer.querySelector("#auto-explore-button")?.remove();
    const autoExploreTemplate = __webpack_require__(/*! ../templates/html/auto_explore_button.html */ "./src/templates/html/auto_explore_button.html");
    buttonsContainer.insertAdjacentHTML("beforeend", autoExploreTemplate.render({ ...context, translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_3__.translate }));
    // Bind `autoExplore` and `loadPictoMaps`
    buttonsContainer
        .querySelector("#auto-explore-button")
        ?.addEventListener("click", () => {
        _console__WEBPACK_IMPORTED_MODULE_2__.Console.debug("Clicked on #auto-explore-button.", context);
        void markLocation(context).then(loadPictoMaps);
    });
    void disableExplore(context);
}
async function disableExplore(context) {
    const entry = await getAutoExploreEntry(context.regionId, context.locationId);
    if (!entry)
        return;
    if (petEnergy < Number(entry.location.energyRequired))
        document.getElementById("explore-button")?.classList.add("disabled");
}
async function markLocation(context) {
    if (context.active) {
        const filteredLocations = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.autoExploreLocations.filter(saved => saved.location.id !== context.locationId);
        _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.autoExploreLocations = filteredLocations;
        addAutoExploreButton(context.locationId);
        return;
    }
    const newAutoExplore = await getAutoExploreEntry(context.regionId, context.locationId);
    if (!newAutoExplore) {
        _console__WEBPACK_IMPORTED_MODULE_2__.Console.error(`Could not generate an auto explore entry for location #${context.locationId}.`, context);
        return;
    }
    const newLocations = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.autoExploreLocations;
    newLocations.push(newAutoExplore);
    _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.autoExploreLocations = newLocations;
    addAutoExploreButton(context.locationId);
}
async function getAutoExploreEntry(regionId, locationId) {
    const region = await getRegion(regionId);
    if (!region) {
        _console__WEBPACK_IMPORTED_MODULE_2__.Console.error(`Could not get region #${regionId}.`);
        return null;
    }
    const location = region.locations.find(location => location.id === locationId);
    if (!location) {
        _console__WEBPACK_IMPORTED_MODULE_2__.Console.error(`Could not get location #${locationId} in ${region.name}.`, region);
        return null;
    }
    return {
        location,
        region,
    };
}
async function getRegion(id) {
    if (id.toString() === currentRegion.id)
        return currentRegion;
    const json = await (0,_ajax_change_region__WEBPACK_IMPORTED_MODULE_0__.changeRegion)(id);
    if (json.result === _api_result_enum__WEBPACK_IMPORTED_MODULE_1__.Result.success)
        return json.data.currentRegion;
    return null;
}
// Picto map
function loadPictoMaps() {
    const autoExploreLocations = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.autoExploreLocations;
    for (const div of document.querySelectorAll(".map-location[data-id]")) {
        loadPictoMap(autoExploreLocations, div);
    }
}
function loadPictoMap(autoExploreLocations, div) {
    const mapLocation = div.getAttribute("data-id");
    if (!mapLocation)
        return;
    div.style.backgroundImage = autoExploreLocations.some(saved => saved.location.id === Number(mapLocation))
        ? "url(/static/img/new-layout/pet/icons/picto_map_explo.png)"
        : "url(/static/img/new-layout/pet/icons/picto_map.png)";
}


/***/ }),

/***/ "./src/session_storage/session_storage.enum.ts":
/*!*****************************************************!*\
  !*** ./src/session_storage/session_storage.enum.ts ***!
  \*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "SessionStorageKey": () => (/* binding */ SessionStorageKey)
/* harmony export */ });
var SessionStorageKey;
(function (SessionStorageKey) {
    SessionStorageKey["action"] = "action";
    SessionStorageKey["explorationsDone"] = "explorationsDone";
    SessionStorageKey["minigamesDone"] = "minigamesDone";
    SessionStorageKey["selectedLocation"] = "selectedLocation";
    SessionStorageKey["takeover"] = "takeover";
    SessionStorageKey["wishlist"] = "wishlist";
    SessionStorageKey["summerGameDone"] = "summerGameDone";
})(SessionStorageKey || (SessionStorageKey = {}));


/***/ }),

/***/ "./src/session_storage/session_storage.ts":
/*!************************************************!*\
  !*** ./src/session_storage/session_storage.ts ***!
  \************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "SessionStorage": () => (/* binding */ SessionStorage)
/* harmony export */ });
/* harmony import */ var _session_storage_enum__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./session_storage.enum */ "./src/session_storage/session_storage.enum.ts");

class SessionStorage {
    static sessionStorage = sessionStorage;
    constructor() { }
    static get action() {
        return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.action, null);
    }
    static set action(action) {
        this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.action, action);
    }
    static get explorationsDone() {
        return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.explorationsDone, false);
    }
    static set explorationsDone(done) {
        this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.explorationsDone, done);
    }
    static get minigamesDone() {
        return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.minigamesDone, false);
    }
    static set minigamesDone(done) {
        this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.minigamesDone, done);
    }
    static get summerGameDone() {
        return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.summerGameDone, false);
    }
    static set summerGameDone(done) {
        this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.summerGameDone, done);
    }
    static get selectedLocation() {
        return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.selectedLocation, null);
    }
    static set selectedLocation(selected) {
        this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.selectedLocation, selected);
    }
    static get takeover() {
        return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.takeover, false);
    }
    static set takeover(enabled) {
        this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.takeover, enabled);
    }
    static get wishlist() {
        return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.wishlist, []);
    }
    static set wishlist(wishlist) {
        this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.wishlist, wishlist);
    }
    static getItem(key, fallback) {
        return (JSON.parse(this.sessionStorage.getItem(key) ?? JSON.stringify(fallback)) ?? fallback);
    }
    static setItem(key, value) {
        this.sessionStorage.setItem(key, JSON.stringify(value));
    }
}


/***/ }),

/***/ "./src/session_storage/takeover_action.enum.ts":
/*!*****************************************************!*\
  !*** ./src/session_storage/takeover_action.enum.ts ***!
  \*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "TakeoverAction": () => (/* binding */ TakeoverAction)
/* harmony export */ });
var TakeoverAction;
(function (TakeoverAction) {
    TakeoverAction["daily"] = "daily";
    TakeoverAction["minigames"] = "minigames";
    TakeoverAction["explorations"] = "explorations";
    TakeoverAction["auctions"] = "auctions";
    TakeoverAction["buy"] = "buy";
    // sell,
    TakeoverAction["summerGame"] = "summerGame";
    TakeoverAction["wait"] = "wait";
})(TakeoverAction || (TakeoverAction = {}));


/***/ }),

/***/ "./src/takeover/brain.ts":
/*!*******************************!*\
  !*** ./src/takeover/brain.ts ***!
  \*******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadTakeover": () => (/* binding */ loadTakeover),
/* harmony export */   "toggleTakeover": () => (/* binding */ toggleTakeover),
/* harmony export */   "resetTakeover": () => (/* binding */ resetTakeover)
/* harmony export */ });
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../console */ "./src/console.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../session_storage/session_storage */ "./src/session_storage/session_storage.ts");
/* harmony import */ var _ui_top_bar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ui/top_bar */ "./src/ui/top_bar.ts");
/* harmony import */ var _classes_buy_action__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./classes/buy_action */ "./src/takeover/classes/buy_action.ts");
/* harmony import */ var _classes_daily_action__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./classes/daily_action */ "./src/takeover/classes/daily_action.ts");
/* harmony import */ var _classes_exploration_action__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./classes/exploration_action */ "./src/takeover/classes/exploration_action.ts");
/* harmony import */ var _classes_minigame_action__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./classes/minigame_action */ "./src/takeover/classes/minigame_action.ts");
/* harmony import */ var _classes_summer_game_action__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./classes/summer_game_action */ "./src/takeover/classes/summer_game_action.ts");
/* harmony import */ var _classes_wait_action__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./classes/wait_action */ "./src/takeover/classes/wait_action.ts");










/** Automated entry point of the takeover. */
function loadTakeover() {
    if (_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.takeover)
        void takeover();
}
/** Manual entry point of the takeover. */
function toggleTakeover() {
    resetTakeover();
    _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.takeover = !_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.takeover;
    (0,_ui_top_bar__WEBPACK_IMPORTED_MODULE_3__.loadTopBar)();
    if (_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.takeover)
        $.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.takeover.enabled);
    else
        $.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.takeover.disabled);
    void takeover();
}
function resetTakeover() {
    _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.action = null;
    _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.explorationsDone = false;
    _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.minigamesDone = false;
    _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.selectedLocation = null;
    _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.summerGameDone = false;
    _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.wishlist = [];
}
async function takeover() {
    if (!_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.takeover)
        return;
    if (_classes_daily_action__WEBPACK_IMPORTED_MODULE_5__["default"].condition())
        await _classes_daily_action__WEBPACK_IMPORTED_MODULE_5__["default"].perform();
    const action = actions.find(action => action.key === _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.action);
    if (action?.condition()) {
        _console__WEBPACK_IMPORTED_MODULE_0__.Console.info("Action:", action.key);
        if (await action.perform())
            return;
    }
    changeAction();
    void takeover();
}
const actions = [
    _classes_exploration_action__WEBPACK_IMPORTED_MODULE_6__["default"],
    _classes_buy_action__WEBPACK_IMPORTED_MODULE_4__["default"],
    _classes_minigame_action__WEBPACK_IMPORTED_MODULE_7__["default"],
    _classes_summer_game_action__WEBPACK_IMPORTED_MODULE_8__.summerGameAction,
    _classes_wait_action__WEBPACK_IMPORTED_MODULE_9__["default"],
];
function changeAction() {
    const next = actions.findIndex(action => action.key === _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.action) + 1;
    return (_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.action =
        actions[next >= actions.length ? 0 : next].key);
}


/***/ }),

/***/ "./src/takeover/classes/action.ts":
/*!****************************************!*\
  !*** ./src/takeover/classes/action.ts ***!
  \****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Action": () => (/* binding */ Action)
/* harmony export */ });
class Action {
}


/***/ }),

/***/ "./src/takeover/classes/buy_action.ts":
/*!********************************************!*\
  !*** ./src/takeover/classes/buy_action.ts ***!
  \********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _ajax_ajax_search__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../ajax/ajax_search */ "./src/ajax/ajax_search.ts");
/* harmony import */ var _ajax_buy__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../ajax/buy */ "./src/ajax/buy.ts");
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../console */ "./src/console.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _marketplace_marketplace_handlers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../marketplace/marketplace_handlers */ "./src/marketplace/marketplace_handlers.ts");
/* harmony import */ var _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../session_storage/takeover_action.enum */ "./src/session_storage/takeover_action.enum.ts");
/* harmony import */ var _action__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./action */ "./src/takeover/classes/action.ts");








class BuyAction extends _action__WEBPACK_IMPORTED_MODULE_7__.Action {
    key = _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_6__.TakeoverAction.buy;
    get currentMaana() {
        return Number(document.querySelector("#currency-maana")?.dataset
            .maana);
    }
    condition() {
        return _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.market && Boolean(_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.wishlist.length);
    }
    async perform() {
        if (location.pathname !== "/marketplace") {
            pageLoad("/marketplace");
            return true;
        }
        const iconMessage = __webpack_require__(/*! ../../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
        for (const wished of _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.wishlist) {
            // Clothes might be a special exception. If they are, then check for
            // `wished.type === Type.PlayerWearableItem`.
            if (wished.error) {
                _console__WEBPACK_IMPORTED_MODULE_2__.Console.warn(`Skipped "${wished.name}"`, wished);
                continue;
            }
            _console__WEBPACK_IMPORTED_MODULE_2__.Console.info(`Searching for "${wished.name}"`, wished);
            /** Search in each pages until the amount of items is less than 8 */
            let amount = 8;
            forpage: for (let page = 1; amount === 8; page++) {
                let results = [];
                try {
                    results = await this.search(wished, page);
                }
                catch (e) {
                    const error = e;
                    _console__WEBPACK_IMPORTED_MODULE_2__.Console.error(`Failed to search for "${wished.name}"`, error);
                    this.setError(wished.icon, `${error.statusText}`);
                    break forpage;
                }
                amount = results.length;
                _console__WEBPACK_IMPORTED_MODULE_2__.Console.log(`Found ${amount} results`, results);
                const wanted = results.filter(result => result.icon === wished.icon &&
                    result.buyNowPrice &&
                    Number(result.buyNowPrice.price) <= wished.price &&
                    Number(result.buyNowPrice.price) <= this.currentMaana);
                for (const result of wanted) {
                    if (!(await this.buy(result)))
                        break forpage;
                    _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.purchases = [
                        result,
                        ..._local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.purchases.filter(purchase => purchase.itemid !== result.itemid),
                    ];
                    _console__WEBPACK_IMPORTED_MODULE_2__.Console.info(`Bought "${result.name}" for ${Number(result.buyNowPrice?.price)} maanas.`, result);
                    $.flavrNotif(iconMessage.render({
                        ...result,
                        message: _i18n_translate__WEBPACK_IMPORTED_MODULE_3__.translate.takeover.bought(result.name, Number(result.buyNowPrice?.price)),
                    }));
                }
            }
        }
        return false;
    }
    /**
     * Purchase an item from the market.
     * @returns whether the item was successfully purchased.
     */
    async buy(result) {
        const json = await (0,_ajax_buy__WEBPACK_IMPORTED_MODULE_1__.buy)(Number(result.itemid));
        if (json.result !== "success")
            this.setError(result.icon, json.data);
        return json.result === "success";
    }
    /** Search for a wished item on a specific page using the item's name. */
    async search(wished, page = 1) {
        // Put the name of the item in the filter
        const filterItemName = document.querySelector("#filter-itemName");
        if (filterItemName)
            filterItemName.value = wished.name;
        // Show the results of the search
        const marketplaceSearchItems = document.querySelector(".marketplace-search-items");
        if (!marketplaceSearchItems)
            return [];
        marketplaceSearchItems.innerHTML = await (0,_ajax_ajax_search__WEBPACK_IMPORTED_MODULE_0__.ajaxSearch)({
            name: wished.name,
            page,
        });
        return Array.from(marketplaceSearchItems.querySelectorAll(".marketplace-search-item"))
            .map(_marketplace_marketplace_handlers__WEBPACK_IMPORTED_MODULE_5__.getItemDetails)
            .filter((item) => item !== null);
    }
    /** Set the `WishedItem.error` property without reordering the wishlist. */
    setError(icon, error) {
        const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.wishlist;
        const index = wishlist.findIndex(item => item.icon === icon);
        const entry = wishlist[index];
        if (!entry)
            return;
        entry.error = error;
        _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.wishlist = [
            ...wishlist.slice(undefined, index),
            entry,
            ...wishlist.slice(index + 1, undefined),
        ];
    }
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new BuyAction());


/***/ }),

/***/ "./src/takeover/classes/daily_action.ts":
/*!**********************************************!*\
  !*** ./src/takeover/classes/daily_action.ts ***!
  \**********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../session_storage/takeover_action.enum */ "./src/session_storage/takeover_action.enum.ts");
/* harmony import */ var _brain__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../brain */ "./src/takeover/brain.ts");
/* harmony import */ var _click__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../click */ "./src/takeover/click.ts");



class DailyAction {
    key = _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_0__.TakeoverAction.daily;
    /** Checks if the daily maana gift if there. */
    condition() {
        const dailyGiftContainer = document.getElementById("daily-gift-container");
        return (!!dailyGiftContainer &&
            getComputedStyle(dailyGiftContainer).display !== "none");
    }
    /**
     * Click on the daily maana gift.
     * @returns `false`. This action does not perform meaningful actions on the
     * page.
     */
    async perform() {
        const dailyGiftContainer = document.getElementById("daily-gift-container");
        if (!dailyGiftContainer ||
            getComputedStyle(dailyGiftContainer).display === "none") {
            return false;
        }
        dailyGiftContainer.click();
        await (0,_click__WEBPACK_IMPORTED_MODULE_2__.click)(".first-connexion .flavr-button.default");
        (0,_brain__WEBPACK_IMPORTED_MODULE_1__.resetTakeover)();
        return false;
    }
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new DailyAction());


/***/ }),

/***/ "./src/takeover/classes/exploration_action.ts":
/*!****************************************************!*\
  !*** ./src/takeover/classes/exploration_action.ts ***!
  \****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _ajax_capture_end__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../ajax/capture_end */ "./src/ajax/capture_end.ts");
/* harmony import */ var _ajax_change_region__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../ajax/change_region */ "./src/ajax/change_region.ts");
/* harmony import */ var _ajax_exploration_results__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../ajax/exploration_results */ "./src/ajax/exploration_results.ts");
/* harmony import */ var _api_result_enum__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../api/result.enum */ "./src/api/result.enum.ts");
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../console */ "./src/console.ts");
/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../duration */ "./src/duration.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../session_storage/session_storage */ "./src/session_storage/session_storage.ts");
/* harmony import */ var _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../session_storage/takeover_action.enum */ "./src/session_storage/takeover_action.enum.ts");
/* harmony import */ var _click__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../click */ "./src/takeover/click.ts");
/* harmony import */ var _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../exploration_status.enum */ "./src/takeover/exploration_status.enum.ts");
/* harmony import */ var _action__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./action */ "./src/takeover/classes/action.ts");












class ExplorationAction extends _action__WEBPACK_IMPORTED_MODULE_11__.Action {
    key = _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_8__.TakeoverAction.explorations;
    get globals() {
        return { currentRegion, pendingTreasureHuntLocation, timeLeftExploration };
    }
    condition() {
        return (_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__.LocalStorage.explorations &&
            !_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__.SessionStorage.explorationsDone &&
            !!_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__.LocalStorage.autoExploreLocations.length);
    }
    async perform() {
        if (location.pathname !== "/pet") {
            pageLoad("/pet");
            return true;
        }
        const status = this.getExplorationStatus();
        _console__WEBPACK_IMPORTED_MODULE_4__.Console.log("Exploration status:", _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus[status]);
        switch (status) {
            case _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.idle:
                if (!(await this.startExploration()).selected)
                    _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__.SessionStorage.explorationsDone = true;
                return false;
            case _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.pending:
                return (await this.waitExploration()) && this.perform();
            case _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.result:
                await this.endExploration();
                return this.perform();
            case _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.capture:
                await this.endCapture();
                return this.perform();
            default:
                return false;
        }
    }
    async clickExplore() {
        return (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)("#explore-button");
    }
    async clickLocation(selected) {
        return (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)(`.map-location[data-id="${selected.location.id}"]`);
    }
    clickRegion(selected) {
        const div = document.querySelector(`.minimap[data-mapid="${selected.region.id}"]`);
        if (!div) {
            // Clearing invalid regions is useful to remove finished events.
            _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__.LocalStorage.autoExploreLocations =
                _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__.LocalStorage.autoExploreLocations.filter(saved => saved.region.id !== selected.region.id);
            _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__.SessionStorage.selectedLocation = null;
            pageLoad("/pet");
            return null;
        }
        div.click();
        return div;
    }
    async clickSeason() {
        return (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)("#crystal-images-container");
    }
    async endCapture() {
        try {
            void new Audio("/static/event/2021/music/sounds/mission-complete.mp3").play();
        }
        catch (e) {
            // eslint-disable-next-line no-empty
        }
        await (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)("#open-capture-interface");
        await (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)("#capture-button");
        await (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)("#close-result");
    }
    async endExploration() {
        return (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)("#close-result");
    }
    getCurrentSeason() {
        return (Array.from(document.querySelector("body")?.classList ?? [])
            .find(c => c.startsWith("season-"))
            ?.replace("season-", "") ?? null);
    }
    getExplorationStatus() {
        if (document.querySelector("#treasure-hunt-result-overlay.active #open-capture-interface") ||
            document.querySelector("#capture-interface-outer.active")) {
            return _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.capture;
        }
        else if (document.querySelector("#pending-map-location-data-outer.active") ||
            document.querySelector("#map-container.pending")) {
            return _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.pending;
        }
        else if (document.querySelector("#treasure-hunt-result-overlay.active"))
            return _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.result;
        return _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.idle;
    }
    getLowestEnergyLocation() {
        return _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__.LocalStorage.autoExploreLocations.reduce((lowest, place) => Number(place.location.energyRequired) <
            Number(lowest.location.energyRequired)
            ? place
            : lowest);
    }
    getSelectedLocation() {
        let selected = _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__.SessionStorage.selectedLocation;
        if (!selected) {
            selected = this.selectLocation();
            _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__.SessionStorage.selectedLocation = selected;
        }
        return selected;
    }
    selectLocation() {
        const affordable = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__.LocalStorage.autoExploreLocations.filter(saved => Number(saved.location.energyRequired) <= petEnergy);
        const minimumEnergy = this.getLowestEnergyLocation();
        const notDeadEnd = affordable.filter(place => petEnergy - Number(place.location.energyRequired) >=
            Number(minimumEnergy.location.energyRequired));
        if (notDeadEnd.length)
            return notDeadEnd[Math.floor(Math.random() * notDeadEnd.length)] ?? null;
        const sameEnergy = affordable.filter(place => Number(place.location.energyRequired) === petEnergy);
        if (sameEnergy.length)
            return sameEnergy[Math.floor(Math.random() * sameEnergy.length)] ?? null;
        return affordable[Math.floor(Math.random() * affordable.length)] ?? null;
    }
    async startExploration() {
        const selected = this.getSelectedLocation();
        if (!selected)
            return { exploring: false, selected };
        _console__WEBPACK_IMPORTED_MODULE_4__.Console.info("Exploring", selected);
        // Go to season
        if (selected.region.season &&
            this.getCurrentSeason() !== selected.region.season) {
            await this.clickSeason();
            return { exploring: false, selected };
        }
        // Go to region
        this.clickRegion(selected);
        // Go to location
        await this.clickLocation(selected);
        await this.clickExplore();
        _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__.SessionStorage.selectedLocation = null;
        return { exploring: true, selected };
    }
    /**
     * Wait for up to 10 minutes.
     * @returns whether the exploration is finished.
     */
    async waitExploration(selected) {
        document
            .querySelector(`.minimap[data-mapid="${selected?.region.id ?? currentRegion.id}"]`)
            ?.click();
        let ms = 3 * _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.second;
        if (selected)
            ms += selected.location.timeToExplore * _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.minute;
        else if (timeLeftExploration && timeLeftExploration > 0)
            ms += timeLeftExploration * _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.second;
        else if (!pendingTreasureHuntLocation &&
            document.querySelector("#map-container.pending")) {
            const json = await (0,_ajax_exploration_results__WEBPACK_IMPORTED_MODULE_2__.explorationResults)();
            if (json.result !== _api_result_enum__WEBPACK_IMPORTED_MODULE_3__.Result.success)
                return false;
            const capture = json.data.results.find(result => result.type === "capture");
            if (!capture)
                return false;
            await (0,_ajax_capture_end__WEBPACK_IMPORTED_MODULE_0__.captureEnd)();
            // Reloading is the only possible action if the exploration finished in a
            // different region.
            _console__WEBPACK_IMPORTED_MODULE_4__.Console.error("Reloading because the exploration is in another region.", this.globals);
            await new Promise(resolve => setTimeout(resolve, _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.minute));
            pageLoad("/pet");
            return true;
        }
        if (ms > 10 * _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.minute)
            return false;
        _console__WEBPACK_IMPORTED_MODULE_4__.Console.log(`Waiting for the exploration to end in ${Math.ceil(ms / _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.second)} seconds...`, this.globals);
        await new Promise(resolve => setTimeout(resolve, ms));
        await (0,_ajax_change_region__WEBPACK_IMPORTED_MODULE_1__.changeRegion)(Number(selected?.region.id ?? currentRegion.id));
        if (this.getExplorationStatus() === _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.pending &&
            timeLeftExploration &&
            timeLeftExploration < 0) {
            _console__WEBPACK_IMPORTED_MODULE_4__.Console.info("Reloading because the timer is desynchronised.", this.globals);
            await new Promise(resolve => setTimeout(resolve, _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.second));
            pageLoad("/pet");
        }
        return true;
    }
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new ExplorationAction());


/***/ }),

/***/ "./src/takeover/classes/minigame_action.ts":
/*!*************************************************!*\
  !*** ./src/takeover/classes/minigame_action.ts ***!
  \*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _minigames_emile__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../minigames/emile */ "./src/minigames/emile.ts");
/* harmony import */ var _minigames_flappy__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../minigames/flappy */ "./src/minigames/flappy.ts");
/* harmony import */ var _minigames_hatchlings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../minigames/hatchlings */ "./src/minigames/hatchlings.ts");
/* harmony import */ var _minigames_peggle__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../minigames/peggle */ "./src/minigames/peggle.ts");
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../session_storage/session_storage */ "./src/session_storage/session_storage.ts");
/* harmony import */ var _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../session_storage/takeover_action.enum */ "./src/session_storage/takeover_action.enum.ts");







class MinigameAction {
    key = _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_6__.TakeoverAction.minigames;
    condition() {
        return _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.minigames && !_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_5__.SessionStorage.minigamesDone;
    }
    /** Determines if the minigames should be played right now.
     * @returns whether the minigames are currently being played.
     */
    async perform() {
        switch (location.pathname) {
            case "/minigames": {
                const playing = this.openMinigame(_minigames_peggle__WEBPACK_IMPORTED_MODULE_4__.peggle) ||
                    this.openMinigame(_minigames_flappy__WEBPACK_IMPORTED_MODULE_2__.flappy) ||
                    this.openMinigame(_minigames_hatchlings__WEBPACK_IMPORTED_MODULE_3__.hatchlings);
                if (!playing) {
                    _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_5__.SessionStorage.minigamesDone = true;
                    document
                        .querySelector('.minigames-rules [rel="btn-cancel"]')
                        ?.click();
                }
                return playing;
            }
            case "/minigames/gembomb":
                await (0,_minigames_emile__WEBPACK_IMPORTED_MODULE_1__.playPeggle)();
                break;
            case "/minigames/bubbltemple":
                await (0,_minigames_emile__WEBPACK_IMPORTED_MODULE_1__.playFlappy)();
                break;
            case "/minigames/cocooninpick":
                await (0,_minigames_emile__WEBPACK_IMPORTED_MODULE_1__.playHatchlings)();
                break;
            default:
                pageLoad("/minigames");
                return true;
        }
        pageLoad("/minigames");
        return true;
    }
    /** Click on a minigame's link. @returns whether the minigame was opened. */
    openMinigame(minigame) {
        const start = document.querySelector(minigame.buttonSelector);
        if (!start) {
            return false;
        }
        start.click();
        return true;
    }
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new MinigameAction());


/***/ }),

/***/ "./src/takeover/classes/summer_game_action.ts":
/*!****************************************************!*\
  !*** ./src/takeover/classes/summer_game_action.ts ***!
  \****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "summerGameAction": () => (/* binding */ summerGameAction)
/* harmony export */ });
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../console */ "./src/console.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _math_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../math_util */ "./src/math_util.ts");
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../session_storage/session_storage */ "./src/session_storage/session_storage.ts");
/* harmony import */ var _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../session_storage/takeover_action.enum */ "./src/session_storage/takeover_action.enum.ts");
/* harmony import */ var _action__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./action */ "./src/takeover/classes/action.ts");







class SummerGameAction extends _action__WEBPACK_IMPORTED_MODULE_6__.Action {
    key = _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_5__.TakeoverAction.summerGame;
    condition() {
        return (_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.minigames &&
            !_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_4__.SessionStorage.summerGameDone &&
            !!document.querySelector('a[href="/event/summer"]'));
    }
    async perform() {
        if (location.pathname !== "/event/summer/game") {
            pageLoad("/event/summer/game");
            return true;
        }
        await new Promise(resolve => setTimeout(resolve, 3000));
        const play = document.querySelector('button.summer2021-button.event-coin-button.active[data-currency="token"]');
        _console__WEBPACK_IMPORTED_MODULE_0__.Console.log("Looking for play button:", play);
        if (!play) {
            _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_4__.SessionStorage.summerGameDone = true;
            return false;
        }
        const started = await summerGameStart();
        if (started.result !== "success") {
            _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_4__.SessionStorage.summerGameDone = true;
            return false;
        }
        play.classList.remove("active");
        play.classList.add("inactive");
        const template = __webpack_require__(/*! ../../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
        $.flavrNotif(template.render({
            icon: "/static/event/minigames/snake/img/head.png",
            message: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.minigames.playing("Snake"),
        }));
        await new Promise(resolve => setTimeout(() => resolve(true), _math_util__WEBPACK_IMPORTED_MODULE_3__.MathUtil.randomBetween(60_000 * 0.8, 60_000)));
        const saved = await summerGameSave();
        if (saved.result !== "success") {
            _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_4__.SessionStorage.summerGameDone = true;
            return false;
        }
        $.flavrNotif(template.render({
            icon: "/static/event/minigames/snake/img/head.png",
            message: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.minigames.played("Snake"),
        }));
        pageLoad("/event/summer/game");
        return true;
    }
}
async function summerGameStart() {
    const currency = "token";
    return new Promise(resolve => {
        void $.post("/event/summer/game/start", { currency: currency }, function (json) {
            if (json.result !== "success")
                $.flavrNotif(json.data);
            resolve(json);
        });
    });
}
async function summerGameSave() {
    const win = true;
    return new Promise(resolve => {
        void $.post("/event/summer/game/save", { win: win }, function (json) {
            if (json.result !== "success")
                $.flavrNotif(json.data);
            resolve(json);
        });
    });
}
const summerGameAction = new SummerGameAction();


/***/ }),

/***/ "./src/takeover/classes/wait_action.ts":
/*!*********************************************!*\
  !*** ./src/takeover/classes/wait_action.ts ***!
  \*********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../console */ "./src/console.ts");
/* harmony import */ var _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../session_storage/takeover_action.enum */ "./src/session_storage/takeover_action.enum.ts");
/* harmony import */ var _action__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./action */ "./src/takeover/classes/action.ts");



class WaitAction extends _action__WEBPACK_IMPORTED_MODULE_2__.Action {
    key = _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_1__.TakeoverAction.wait;
    condition() {
        return true;
    }
    async perform() {
        _console__WEBPACK_IMPORTED_MODULE_0__.Console.log(`Waiting for 10 minutes...`);
        return new Promise(resolve => setTimeout(() => resolve(false), 10 * 60 * 1000));
    }
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new WaitAction());


/***/ }),

/***/ "./src/takeover/click.ts":
/*!*******************************!*\
  !*** ./src/takeover/click.ts ***!
  \*******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "click": () => (/* binding */ click),
/* harmony export */   "wait": () => (/* binding */ wait)
/* harmony export */ });
async function click(selector) {
    return new Promise(resolve => {
        const interval = setInterval(() => {
            const element = document.querySelector(selector);
            if (!element)
                return;
            clearInterval(interval);
            // Some elements don't have their click handlers ready until they're
            // hovered.
            const mouseEvent = document.createEvent("MouseEvent");
            mouseEvent.initEvent("mouseover");
            element.dispatchEvent(mouseEvent);
            setTimeout(() => {
                element.click();
                resolve(element);
            }, 800);
        }, 800);
    });
}
async function wait(selector) {
    return new Promise(resolve => {
        const interval = setInterval(() => {
            const element = document.querySelector(selector);
            if (!element)
                return;
            clearInterval(interval);
            resolve(element);
        }, 800);
    });
}


/***/ }),

/***/ "./src/takeover/exploration_status.enum.ts":
/*!*************************************************!*\
  !*** ./src/takeover/exploration_status.enum.ts ***!
  \*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "ExplorationStatus": () => (/* binding */ ExplorationStatus)
/* harmony export */ });
var ExplorationStatus;
(function (ExplorationStatus) {
    ExplorationStatus[ExplorationStatus["idle"] = 0] = "idle";
    ExplorationStatus[ExplorationStatus["result"] = 1] = "result";
    ExplorationStatus[ExplorationStatus["capture"] = 2] = "capture";
    ExplorationStatus[ExplorationStatus["pending"] = 3] = "pending";
})(ExplorationStatus || (ExplorationStatus = {}));


/***/ }),

/***/ "./src/ts_util.ts":
/*!************************!*\
  !*** ./src/ts_util.ts ***!
  \************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "isEnum": () => (/* binding */ isEnum)
/* harmony export */ });
function isEnum(value, enumeration) {
    return Object.values(enumeration).includes(value);
}


/***/ }),

/***/ "./src/ui/auctions.ts":
/*!****************************!*\
  !*** ./src/ui/auctions.ts ***!
  \****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadAuctions": () => (/* binding */ loadAuctions)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");


function loadAuctions() {
    if (location.pathname !== "/marketplace/auctions")
        return;
    const marketplaceActiveAuctions = document.querySelector("#marketplace-active-auctions");
    if (!marketplaceActiveAuctions)
        return;
    const layout2col = document.querySelector(".marketplace-main-container #layout-2col");
    if (layout2col)
        layout2col.style.overflowX = "visible";
    loadHistory(marketplaceActiveAuctions);
}
function loadHistory(marketplaceActiveAuctions) {
    marketplaceActiveAuctions.querySelector("style")?.remove();
    marketplaceActiveAuctions.querySelector("#purchase-history")?.remove();
    marketplaceActiveAuctions.querySelector("#sale-history")?.remove();
    const template = __webpack_require__(/*! ../templates/html/market_history.html */ "./src/templates/html/market_history.html");
    const history = {
        purchases: _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.purchases.map(purchase => ({
            ...purchase,
            date: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.auctions.date_time_format.format(new Date(purchase.date)),
        })),
        sales: _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.sales.map(sale => ({
            ...sale,
            date: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.auctions.date_time_format.format(new Date(sale.date)),
        })),
    };
    marketplaceActiveAuctions.insertAdjacentHTML("beforeend", template.render({ ...history, translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }));
    for (const purchase of document.querySelectorAll("#purchase-history .marketplace-auctions-item")) {
        const itemid = purchase.dataset.itemid;
        purchase.querySelector(".delete-button")?.addEventListener("click", () => {
            _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.purchases = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.purchases.filter(purchase => purchase.itemid !== itemid);
            loadHistory(marketplaceActiveAuctions);
        });
    }
    for (const sale of document.querySelectorAll("#sale-history .marketplace-sales-item")) {
        const icon = sale.querySelector(".abstract-icon img")?.src;
        sale.querySelector(".delete-button")?.addEventListener("click", () => {
            _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.sales = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.sales.filter(sale => sale.icon !== icon);
            loadHistory(marketplaceActiveAuctions);
        });
    }
}


/***/ }),

/***/ "./src/ui/carousel.ts":
/*!****************************!*\
  !*** ./src/ui/carousel.ts ***!
  \****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadCarousel": () => (/* binding */ loadCarousel)
/* harmony export */ });
/* harmony import */ var _carousel_carousel_beemoov_annoyances__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../carousel/carousel_beemoov_annoyances */ "./src/carousel/carousel_beemoov_annoyances.ts");
/* harmony import */ var _carousel_carousel_download_face__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../carousel/carousel_download_face */ "./src/carousel/carousel_download_face.ts");
/* harmony import */ var _carousel_carousel_download_guardian__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../carousel/carousel_download_guardian */ "./src/carousel/carousel_download_guardian.ts");
/* harmony import */ var _carousel_carousel_eldarya_enhancements__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../carousel/carousel_eldarya_enhancements */ "./src/carousel/carousel_eldarya_enhancements.ts");
/* harmony import */ var _carousel_carousel_takeover__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../carousel/carousel_takeover */ "./src/carousel/carousel_takeover.ts");
/* harmony import */ var _download_canvas__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../download-canvas */ "./src/download-canvas.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../session_storage/session_storage */ "./src/session_storage/session_storage.ts");
/* harmony import */ var _takeover_brain__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../takeover/brain */ "./src/takeover/brain.ts");










function loadCarousel() {
    const carouselInner = document.querySelector("#carousel-inner");
    if (!carouselInner || document.querySelector(".carousel-ee")) {
        return;
    }
    // Import carousel template
    const template = __webpack_require__(/*! ../templates/html/carousel_news.html */ "./src/templates/html/carousel_news.html");
    const contexts = [
        // Intro
        _carousel_carousel_eldarya_enhancements__WEBPACK_IMPORTED_MODULE_3__.carouselEE,
        // Features
        ...(_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_7__.LocalStorage.minigames ||
            _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_7__.LocalStorage.explorations ||
            _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_7__.LocalStorage.market
            ? [_carousel_carousel_takeover__WEBPACK_IMPORTED_MODULE_4__.carouselTakeover]
            : []),
        _carousel_carousel_download_guardian__WEBPACK_IMPORTED_MODULE_2__.carouselDownloadGuardian,
        _carousel_carousel_download_face__WEBPACK_IMPORTED_MODULE_1__.carouselDownloadFace,
        // Ads
        _carousel_carousel_beemoov_annoyances__WEBPACK_IMPORTED_MODULE_0__.carouselBeemoovAnnoyances,
    ];
    // Add entries to the carousel
    carouselInner.insertAdjacentHTML("beforeend", contexts.map(banner => template.render(banner)).join("\n"));
    // Add links
    for (const carousel of contexts) {
        if (!carousel.href)
            continue;
        const element = carouselInner.querySelector(`#${carousel.id}`);
        if (!element)
            continue;
        element.addEventListener("click", () => {
            if (element.classList.contains("active"))
                open(carousel.href, "_blank");
        });
    }
    // Add click events
    document
        .getElementById(_carousel_carousel_download_face__WEBPACK_IMPORTED_MODULE_1__.carouselDownloadFace.id)
        ?.addEventListener("click", _download_canvas__WEBPACK_IMPORTED_MODULE_5__.downloadFace);
    document
        .getElementById(_carousel_carousel_download_guardian__WEBPACK_IMPORTED_MODULE_2__.carouselDownloadGuardian.id)
        ?.addEventListener("click", _download_canvas__WEBPACK_IMPORTED_MODULE_5__.downloadGuardian);
    const takeoverAnchor = document.getElementById(_carousel_carousel_takeover__WEBPACK_IMPORTED_MODULE_4__.carouselTakeover.id);
    takeoverAnchor?.addEventListener("click", () => {
        (0,_takeover_brain__WEBPACK_IMPORTED_MODULE_9__.toggleTakeover)();
        takeoverTitle(takeoverAnchor);
    });
    if (takeoverAnchor)
        takeoverTitle(takeoverAnchor);
}
function takeoverTitle(takeoverAnchor) {
    const takeoverH4 = takeoverAnchor.querySelector("h4");
    if (takeoverH4) {
        takeoverH4.innerText = _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_8__.SessionStorage.takeover
            ? _i18n_translate__WEBPACK_IMPORTED_MODULE_6__.translate.carousel.takeover.disable_takeover
            : _i18n_translate__WEBPACK_IMPORTED_MODULE_6__.translate.carousel.takeover.enable_takeover;
    }
}


/***/ }),

/***/ "./src/ui/favourites.ts":
/*!******************************!*\
  !*** ./src/ui/favourites.ts ***!
  \******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadFavourites": () => (/* binding */ loadFavourites),
/* harmony export */   "loadFakeFavourites": () => (/* binding */ loadFakeFavourites)
/* harmony export */ });
/* harmony import */ var _appearance_fake_favourites__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../appearance/fake_favourites */ "./src/appearance/fake_favourites.ts");
/* harmony import */ var _appearance_favourites_actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../appearance/favourites_actions */ "./src/appearance/favourites_actions.ts");
/* harmony import */ var _download_canvas__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../download-canvas */ "./src/download-canvas.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../indexed_db/indexed_db */ "./src/indexed_db/indexed_db.ts");





function loadFavourites() {
    loadFavouritesActions();
    void loadFakeFavourites();
}
function loadFavouritesActions() {
    const actions = document.getElementById("favorites-actions");
    if (!actions || document.querySelector(".favorites-action-ee"))
        return;
    const actionTemplate = __webpack_require__(/*! ../templates/html/favourites_action.html */ "./src/templates/html/favourites_action.html");
    const importAction = {
        id: "import-outfit",
        text: _i18n_translate__WEBPACK_IMPORTED_MODULE_3__.translate.appearance.favourites.buttons["import"],
    };
    const exportAction = {
        id: "export-outfit",
        text: _i18n_translate__WEBPACK_IMPORTED_MODULE_3__.translate.appearance.favourites.buttons["export"],
    };
    const downloadAction = {
        id: "download-outfit",
        text: _i18n_translate__WEBPACK_IMPORTED_MODULE_3__.translate.appearance.favourites.buttons.download,
    };
    actions.insertAdjacentHTML("beforeend", actionTemplate.render(importAction) +
        actionTemplate.render(exportAction) +
        actionTemplate.render(downloadAction));
    document
        .getElementById(importAction.id)
        ?.addEventListener("click", _appearance_favourites_actions__WEBPACK_IMPORTED_MODULE_1__.importOutfit);
    document
        .getElementById(exportAction.id)
        ?.addEventListener("click", _appearance_favourites_actions__WEBPACK_IMPORTED_MODULE_1__.exportPreview);
    document
        .getElementById(downloadAction.id)
        ?.addEventListener("click", _download_canvas__WEBPACK_IMPORTED_MODULE_2__.downloadAppearance);
}
async function loadFakeFavourites() {
    const thumbs = document.querySelector("#all-outfit-thumbs .mCSB_container");
    if (!thumbs)
        return;
    const template = __webpack_require__(/*! ../templates/html/outfit_thumbs.html */ "./src/templates/html/outfit_thumbs.html");
    const favourites = await _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_4__["default"].getFavouriteOutfits();
    document.querySelector("#ee-outfit-thumbs")?.remove();
    thumbs.insertAdjacentHTML("beforeend", template.render({
        outfits: favourites,
    }));
    document
        .querySelector(".ee-available-slot")
        ?.addEventListener("click", () => void (0,_appearance_fake_favourites__WEBPACK_IMPORTED_MODULE_0__.saveFavourite)());
    for (const div of document.querySelectorAll(".ee-outfit-thumb")) {
        div.addEventListener("click", () => {
            const favourite = favourites.find(favourite => favourite.id === Number(div.dataset.arrayIndex));
            if (!favourite)
                return;
            (0,_appearance_fake_favourites__WEBPACK_IMPORTED_MODULE_0__.showFavourite)(favourite);
        });
    }
}


/***/ }),

/***/ "./src/ui/home_content.ts":
/*!********************************!*\
  !*** ./src/ui/home_content.ts ***!
  \********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadHomeContent": () => (/* binding */ loadHomeContent)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");

function loadHomeContent() {
    const homeContentSmalls = document.getElementById("home-content-smalls");
    if (!homeContentSmalls ||
        homeContentSmalls.querySelector(".home-content-small-ee"))
        return;
    // Remove bank
    document.getElementById("home-bank")?.remove();
    // Add forum
    const smallTemplate = __webpack_require__(/*! ../templates/html/home_content_small.html */ "./src/templates/html/home_content_small.html");
    const smallContent = {
        backgroundImage: "/assets/img/minigames/treasurehunt/a48bbc4e4849745ebe6dbcf5313eb3f0.jpg",
        h4: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.home.forum,
        href: "/forum",
        id: "forum",
    };
    homeContentSmalls.insertAdjacentHTML("beforeend", smallTemplate.render(smallContent));
}


/***/ }),

/***/ "./src/ui/mall.ts":
/*!************************!*\
  !*** ./src/ui/mall.ts ***!
  \************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadMall": () => (/* binding */ loadMall),
/* harmony export */   "addToWishlistFlavr": () => (/* binding */ addToWishlistFlavr)
/* harmony export */ });
/* harmony import */ var _eldarya_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../eldarya_util */ "./src/eldarya_util.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../marketplace/enums/rarity.enum */ "./src/marketplace/enums/rarity.enum.ts");




function loadMall() {
    if (!location.pathname.startsWith("/mall"))
        return;
    for (const li of document.querySelectorAll("[data-product]"))
        li.addEventListener("click", () => addWishlistButton(li));
}
function addWishlistButton(li) {
    document.querySelector("#add-to-wishlist")?.remove();
    document
        .querySelector("#mall-productDetail-info")
        ?.insertAdjacentHTML("beforeend", "<button id='add-to-wishlist' class='nl-button' style='margin: 20px auto 0; min-width: 200px;'>Add to market wishlist</button>");
    const maxQuantity = li.querySelector(".item-maxQuantity");
    const mallEntry = {
        product: JSON.parse(li.dataset.product),
        icon: (0,_eldarya_util__WEBPACK_IMPORTED_MODULE_0__.trimIcon)(li.querySelector("img.mall-product-icon").src),
        rarity: _marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_3__.Rarity[(li
            .querySelector(".rarity-marker-common, .rarity-marker-rare, .rarity-marker-epic, .rarity-marker-legendary, .rarity-marker-event")
            ?.className.split("rarity-marker-")[1] ?? "")],
        maxQuantity: maxQuantity ? Number(maxQuantity.innerText) : undefined,
        abstractType: document.querySelector("#mall-menu .tooltip.active .tooltip-content")?.innerText ?? "",
    };
    document
        .querySelector("#add-to-wishlist")
        ?.addEventListener("click", () => addToWishlistFlavr(mallEntry));
}
function addToWishlistFlavr(mallEntry) {
    const template = __webpack_require__(/*! ../templates/html/auto_buy_flavr_mall.html */ "./src/templates/html/auto_buy_flavr_mall.html");
    $.flavr({
        content: template.render({ translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate }),
        buttons: {
            close: { style: "close" },
            save: {
                action: () => save(mallEntry),
            },
        },
        dialog: "prompt",
        prompt: {
            value: "",
        },
        onBuild: $container => {
            $container.addClass("new-layout-popup");
            document
                .querySelector(".flavr-prompt")
                ?.addEventListener("keyup", ({ key }) => {
                if (key !== "Enter")
                    return;
                save(mallEntry);
            });
        },
    });
}
function save(mallEntry) {
    const price = Number(document.querySelector(".flavr-prompt")?.value.trim());
    if (!price || price <= 0) {
        $.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.market.add_to_wishlist.invalid_price);
        return false;
    }
    const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.wishlist.filter(wishlistEntry => wishlistEntry.icon !== mallEntry.icon);
    const wished = {
        ...mallEntry,
        ...mallEntry.product,
        price,
    };
    wishlist.push(wished);
    wishlist.sort((a, b) => {
        const typeCompare = a.type.localeCompare(b.type);
        if (typeCompare !== 0)
            return typeCompare;
        const abstractTypeCompare = (a.abstractType ?? "").localeCompare(b.abstractType ?? "");
        if (abstractTypeCompare !== 0)
            return abstractTypeCompare;
        const rarityCompare = Object.keys(_marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_3__.Rarity).indexOf(a.rarity ?? "") -
            Object.keys(_marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_3__.Rarity).indexOf(b.rarity ?? "");
        if (rarityCompare !== 0)
            return rarityCompare;
        return a.name.localeCompare(b.name);
    });
    _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.wishlist = wishlist;
    const template = __webpack_require__(/*! ../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
    $.flavrNotif(template.render({
        ...wished,
        message: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.market.add_to_wishlist.added_to_wishlist(wished.name, wished.price),
    }));
    return true;
}


/***/ }),

/***/ "./src/ui/market.ts":
/*!**************************!*\
  !*** ./src/ui/market.ts ***!
  \**************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadMarket": () => (/* binding */ loadMarket)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../marketplace/enums/rarity.enum */ "./src/marketplace/enums/rarity.enum.ts");
/* harmony import */ var _marketplace_marketplace_handlers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../marketplace/marketplace_handlers */ "./src/marketplace/marketplace_handlers.ts");




let marketObserver;
function loadMarket() {
    marketObserver?.disconnect();
    marketObserver = null;
    if (location.pathname !== "/marketplace")
        return;
    // `.marketplace-search-items` is the container whose HTML content is being
    // replaced on every action.
    const searchItems = document.querySelector(".marketplace-search-items");
    if (!searchItems)
        return;
    marketObserver = new MutationObserver(loadWishlist);
    marketObserver.observe(searchItems, {
        childList: true,
    });
    loadWishlist();
}
function loadWishlist() {
    for (const li of document.querySelectorAll(".marketplace-abstract")) {
        li.addEventListener("click", () => new MutationObserver((_, observer) => {
            const marketEntry = (0,_marketplace_marketplace_handlers__WEBPACK_IMPORTED_MODULE_3__.getItemDetails)(li);
            if (!marketEntry)
                return;
            addWishistButton(marketEntry, observer);
        }).observe(document.getElementById("marketplace-zoom"), {
            childList: true,
        }));
    }
}
function addWishistButton(marketEntry, observer) {
    const buttonsContainer = document.querySelector("#marketplace-itemDetail");
    if (!buttonsContainer)
        return;
    observer?.disconnect();
    hijackBuyButtons(marketEntry);
    document.getElementById("marketplace-itemDetail-info-autobuy")?.remove();
    const buttonTemplate = __webpack_require__(/*! ../templates/html/auto_buy_button.html */ "./src/templates/html/auto_buy_button.html");
    buttonsContainer.insertAdjacentHTML("beforeend", buttonTemplate.render({ translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }));
    buttonsContainer
        .querySelector("#marketplace-itemDetail-info-autobuy")
        ?.addEventListener("click", () => addToWishlistFlavr(marketEntry));
}
function addToWishlistFlavr(marketEntry) {
    const template = __webpack_require__(/*! ../templates/html/auto_buy_flavr.html */ "./src/templates/html/auto_buy_flavr.html");
    $.flavr({
        content: template.render({ translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }),
        buttons: {
            close: { style: "close" },
            save: {
                action: () => save(marketEntry),
            },
        },
        dialog: "prompt",
        prompt: {
            value: "",
        },
        onBuild: $container => {
            $container.addClass("new-layout-popup");
            document
                .querySelector(".flavr-prompt")
                ?.addEventListener("keyup", ({ key }) => {
                if (key !== "Enter")
                    return;
                save(marketEntry);
            });
        },
    });
}
function save(marketEntry) {
    const price = Number(document.querySelector(".flavr-prompt")?.value.trim());
    if (!price || price <= 0) {
        $.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.add_to_wishlist.invalid_price);
        return false;
    }
    const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist.filter(wishlistEntry => wishlistEntry.icon !== marketEntry.icon);
    const wished = { ...marketEntry, price };
    wishlist.push(wished);
    wishlist.sort((a, b) => {
        const typeCompare = a.type.localeCompare(b.type);
        if (typeCompare !== 0)
            return typeCompare;
        const abstractTypeCompare = (a.abstractType ?? "").localeCompare(b.abstractType ?? "");
        if (abstractTypeCompare !== 0)
            return abstractTypeCompare;
        const rarityCompare = Object.keys(_marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_2__.Rarity).indexOf(a.rarity ?? "") -
            Object.keys(_marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_2__.Rarity).indexOf(b.rarity ?? "");
        if (rarityCompare !== 0)
            return rarityCompare;
        return a.name.localeCompare(b.name);
    });
    _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist = wishlist;
    const template = __webpack_require__(/*! ../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
    $.flavrNotif(template.render({
        ...wished,
        message: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.add_to_wishlist.added_to_wishlist(wished.name, wished.price),
    }));
    return true;
}
function hijackBuyButtons(marketEntry) {
    document
        .querySelector(".marketplace-itemDetail-buy")
        ?.addEventListener("click", () => {
        addPurchase(marketEntry);
    });
}
function addPurchase(marketEntry) {
    _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.purchases = [
        marketEntry,
        ..._local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.purchases.filter(purchase => purchase.itemid !== marketEntry.itemid),
    ];
}


/***/ }),

/***/ "./src/ui/menu.ts":
/*!************************!*\
  !*** ./src/ui/menu.ts ***!
  \************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadMenu": () => (/* binding */ loadMenu)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");

function loadMenu() {
    const menuInnerRight = document.getElementById("menu-inner-right");
    if (!menuInnerRight || menuInnerRight.querySelector(".main-menu-ee"))
        return;
    // Remove bank
    menuInnerRight.querySelector(".main-menu-bank")?.remove();
    // Add Forum
    const menuTemplate = __webpack_require__(/*! ../templates/html/main_menu.html */ "./src/templates/html/main_menu.html");
    const mainMenuForum = {
        class: "forum",
        href: "/forum",
        text: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.home.forum,
    };
    menuInnerRight.insertAdjacentHTML("beforeend", menuTemplate.render(mainMenuForum));
}


/***/ }),

/***/ "./src/ui/pet.ts":
/*!***********************!*\
  !*** ./src/ui/pet.ts ***!
  \***********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadPet": () => (/* binding */ loadPet)
/* harmony export */ });
/* harmony import */ var _pet_exploration__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../pet/exploration */ "./src/pet/exploration.ts");
/* harmony import */ var _pet_exploration_history__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../pet/exploration-history */ "./src/pet/exploration-history.ts");


let petObserver;
function loadExplorations() {
    petObserver?.disconnect();
    petObserver = null;
    /** `.page-main-container` changes background depending on the currently selected region. */
    const mainContainer = document.querySelector(".page-main-container");
    if (!mainContainer)
        return;
    petObserver = new MutationObserver(loadExplorations);
    petObserver.observe(mainContainer, {
        attributes: true,
    });
    (0,_pet_exploration__WEBPACK_IMPORTED_MODULE_0__.loadMarkers)();
}
function loadPet() {
    if (location.pathname !== "/pet")
        return;
    loadExplorations();
    (0,_pet_exploration_history__WEBPACK_IMPORTED_MODULE_1__.loadExplorationHistory)();
}


/***/ }),

/***/ "./src/ui/profile.ts":
/*!***************************!*\
  !*** ./src/ui/profile.ts ***!
  \***************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadProfile": () => (/* binding */ loadProfile)
/* harmony export */ });
/* harmony import */ var _download_canvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../download-canvas */ "./src/download-canvas.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _outfit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../outfit */ "./src/outfit.ts");



function loadProfile() {
    const profileContactActions = document.getElementById("profile-contact-actions");
    if (!profileContactActions ||
        document.querySelector(".profile-contact-action-ee")) {
        return;
    }
    const template = __webpack_require__(/*! ../templates/html/profile_contact_action.html */ "./src/templates/html/profile_contact_action.html");
    const profileActionExport = {
        id: "profile-contact-action-export",
        actionDescription: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.profile.export_outfit,
    };
    const profileActionDownload = {
        id: "profile-contact-action-download",
        actionDescription: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.profile.download_outfit,
    };
    // Add entries
    profileContactActions.insertAdjacentHTML("beforeend", template.render(profileActionExport));
    profileContactActions.insertAdjacentHTML("beforeend", template.render(profileActionDownload));
    // Add click events
    document
        .getElementById(profileActionExport.id)
        ?.addEventListener("click", exportProfile);
    document
        .getElementById(profileActionDownload.id)
        ?.addEventListener("click", _download_canvas__WEBPACK_IMPORTED_MODULE_0__.downloadProfile);
}
function exportProfile() {
    const title = document.querySelector("#main-section .section-title");
    const keys = Object.keys(Sacha.Avatar.avatars).filter(key => key.startsWith("#playerProfileAvatar"));
    for (const key of keys) {
        (0,_outfit__WEBPACK_IMPORTED_MODULE_2__.exportOutfit)(key, title?.textContent?.trim());
    }
}


/***/ }),

/***/ "./src/ui/purro_shop.ts":
/*!******************************!*\
  !*** ./src/ui/purro_shop.ts ***!
  \******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadPurroShop": () => (/* binding */ loadPurroShop)
/* harmony export */ });
/* harmony import */ var _api_meta__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../api/meta */ "./src/api/meta.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");


/** Shows a Purro'Shop button in the main menu when it's available. */
function loadPurroShop() {
    document.querySelector(".main-menu-purroshop")?.remove();
    // A bug in WebPack prevents using `LocalStorage.meta?.purroshop.status`.
    if (_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.meta === null ||
        _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.meta.purroshop.status !== _api_meta__WEBPACK_IMPORTED_MODULE_0__.PurroshopStatus.enabled)
        return;
    const template = __webpack_require__(/*! ../templates/html/main_menu_purroshop.html */ "./src/templates/html/main_menu_purroshop.html");
    document
        .getElementById("menu-inner-left")
        ?.insertAdjacentHTML("afterbegin", template.render({}));
}


/***/ }),

/***/ "./src/ui/settings.ts":
/*!****************************!*\
  !*** ./src/ui/settings.ts ***!
  \****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadSettings": () => (/* binding */ loadSettings)
/* harmony export */ });
/* harmony import */ var _download_canvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../download-canvas */ "./src/download-canvas.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");



async function loadSettings() {
    const accountRight = document.querySelector("#account-right div");
    if (!accountRight || accountRight.querySelector(".account-ee-bloc"))
        return;
    const settingsTemplate = __webpack_require__(/*! ../templates/html/settings.html */ "./src/templates/html/settings.html");
    accountRight.insertAdjacentHTML("beforeend", settingsTemplate.render({
        ...(await _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.getSettings()),
        translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate,
    }));
    document.getElementById("ee-debug-enabled")?.addEventListener("click", () => {
        _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.debug = !_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.debug;
        reloadSettings();
    });
    document
        .getElementById("ee-minigames-enabled")
        ?.addEventListener("click", () => {
        _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.minigames = !_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.minigames;
        reloadSettings();
    });
    document
        .getElementById("ee-explorations-enabled")
        ?.addEventListener("click", () => {
        _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.explorations = !_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.explorations;
        reloadSettings();
    });
    document
        .getElementById("ee-market-enabled")
        ?.addEventListener("click", () => {
        _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.market = !_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.market;
        reloadSettings();
    });
    document
        .getElementById("ee-import")
        ?.addEventListener("click", importSettings);
    document
        .getElementById("ee-export")
        ?.addEventListener("click", () => void exportSettings());
}
function reloadSettings() {
    document.querySelector(".account-ee-bloc")?.remove();
    void loadSettings();
}
function importSettings() {
    const input = document.createElement("input");
    input.setAttribute("type", "file");
    input.setAttribute("accept", "application/json");
    input.click();
    input.addEventListener("input", event => {
        if (!event.target)
            return;
        const files = event.target.files;
        if (!files)
            return;
        const file = files[0];
        if (!file)
            return;
        void file.text().then(async (value) => {
            if (!value)
                return;
            const parsed = JSON.parse(value);
            await _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.setSettings(parsed);
            reloadSettings();
            $.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.account.imported);
        });
    });
}
async function exportSettings() {
    const href = "data:text/json;charset=utf-8," +
        encodeURIComponent(JSON.stringify(await _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.getSettings(), null, 2));
    const a = document.createElement("a");
    a.setAttribute("href", href);
    a.setAttribute("download", `${(0,_download_canvas__WEBPACK_IMPORTED_MODULE_0__.getName)() ?? "eldarya-enhancements"}-settings.json`);
    a.click();
}


/***/ }),

/***/ "./src/ui/top_bar.ts":
/*!***************************!*\
  !*** ./src/ui/top_bar.ts ***!
  \***************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadTopBar": () => (/* binding */ loadTopBar)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../session_storage/session_storage */ "./src/session_storage/session_storage.ts");
/* harmony import */ var _takeover_brain__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../takeover/brain */ "./src/takeover/brain.ts");



function loadTopBar() {
    const headerRight = document.getElementById("header-right");
    if (!headerRight)
        return;
    const headerTakeover = headerRight.querySelector("#header-takeover");
    if (headerTakeover)
        headerTakeover.remove();
    else
        loadLinks();
    const template = __webpack_require__(/*! ../templates/html/header_takeover.html */ "./src/templates/html/header_takeover.html");
    headerRight.insertAdjacentHTML("afterbegin", template.render({ takeover: _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_1__.SessionStorage.takeover, translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }));
    headerRight
        .querySelector("#header-takeover")
        ?.addEventListener("click", _takeover_brain__WEBPACK_IMPORTED_MODULE_2__.toggleTakeover);
}
function loadLinks() {
    const headerProfile = document.getElementById("header-profile")?.firstChild;
    if (headerProfile?.textContent) {
        const a = document.createElement("a");
        a.href = "/player/profile";
        a.style.color = "var(--text-color)";
        a.style.fontFamily = '"Alegreya Sans", sans-serif';
        a.style.fontWeight = "unset";
        a.textContent = headerProfile.textContent.trim();
        const p = document.createElement("p");
        p.insertAdjacentElement("beforeend", a);
        headerProfile.replaceWith(p);
    }
    const avatarTitle = document.querySelector("#avatar-menu-container-outer>p");
    if (avatarTitle?.textContent)
        avatarTitle.innerHTML = `<a href="/player/profile" style="color: #FFFFFF; font-size: 23px; font-weight: 900; text-transform: uppercase;">${avatarTitle.textContent.trim()}</a>`;
    document
        .querySelector("#avatar-menu-container>canvas")
        ?.addEventListener("click", () => pageLoad("/player/appearance"));
}


/***/ }),

/***/ "./src/ui/wishlist.ts":
/*!****************************!*\
  !*** ./src/ui/wishlist.ts ***!
  \****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadWishlist": () => (/* binding */ loadWishlist)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");


function loadWishlist() {
    const marketplaceMenu = document.getElementById("marketplace-menu");
    if (!marketplaceMenu)
        return;
    if (!marketplaceMenu.querySelector("#wishlist-button")) {
        for (const a of marketplaceMenu.querySelectorAll("a")) {
            a.addEventListener("click", () => pageLoad(a.href, undefined, undefined, undefined, true));
        }
    }
    marketplaceMenu.querySelector("#wishlist-button")?.remove();
    const wishlistButtonTemplate = __webpack_require__(/*! ../templates/html/wishlist_button.html */ "./src/templates/html/wishlist_button.html");
    marketplaceMenu.insertAdjacentHTML("beforeend", wishlistButtonTemplate.render({ translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }));
    const wishlistButton = marketplaceMenu.querySelector("#wishlist-button");
    wishlistButton?.addEventListener("click", () => insertWishlist(wishlistButton));
}
function insertWishlist(button) {
    // Assistance
    const assistance = document.querySelector(".marketplace-assistance");
    if (assistance)
        assistance.innerHTML = _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.wishlist.assistance;
    // Menu
    document
        .querySelector("#marketplace-menu .active")
        ?.classList.remove("active");
    button.classList.add("active");
    // Filters
    const filters = document.getElementById("marketplace-filters");
    if (filters)
        filters.innerHTML = "";
    // Content
    const wishlistTemplate = __webpack_require__(/*! ../templates/html/wishlist_settings.html */ "./src/templates/html/wishlist_settings.html");
    const container = document.querySelector(".marketplace-container") ??
        document.getElementById("marketplace-active-auctions") ??
        document.getElementById("marketplace-itemsForSale");
    if (!container)
        return;
    const wishlistContext = {
        wishlist: _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist,
    };
    container.innerHTML = wishlistTemplate.render({
        ...wishlistContext,
        translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate,
    });
    // Buttons
    for (const tr of container.querySelectorAll("tr")) {
        const icon = tr.dataset.icon;
        if (!icon)
            continue;
        // Reset status
        const reset = tr.querySelector(".reset-item-status");
        if (reset)
            reset.addEventListener("click", () => {
                resetStatus(icon);
                insertWishlist(button);
            });
        // Delete item from wishlist
        const deleteButton = tr.querySelector(".delete-wishlist-item");
        if (deleteButton)
            deleteButton.addEventListener("click", () => {
                deleteItem(icon);
                insertWishlist(button);
            });
        // Change price
        const editPrice = tr.querySelector(".edit-price");
        if (editPrice)
            editPrice.addEventListener("click", () => void changePrice(icon).then(() => insertWishlist(button)));
    }
}
function resetStatus(icon) {
    const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist;
    const index = wishlist.findIndex(item => item.icon === icon);
    const entry = wishlist[index];
    if (!entry)
        return;
    delete entry.error;
    _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist = [
        ...wishlist.slice(undefined, index),
        entry,
        ...wishlist.slice(index + 1, undefined),
    ];
}
function deleteItem(icon) {
    _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist.filter(item => item.icon !== icon);
}
async function changePrice(icon) {
    const template = __webpack_require__(/*! ../templates/html/change_price_flavr.html */ "./src/templates/html/change_price_flavr.html");
    const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist;
    const index = wishlist.findIndex(item => item.icon === icon);
    const entry = wishlist[index];
    if (!entry)
        return;
    return new Promise(resolve => {
        $.flavr({
            content: template.render({ translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }),
            dialog: "prompt",
            prompt: {
                value: entry.price.toString(),
            },
            buttons: {
                close: {
                    style: "close",
                    action: () => {
                        resolve();
                        return true;
                    },
                },
                save: {
                    action: () => save(icon, resolve),
                },
            },
            onBuild: $container => {
                $container.addClass("new-layout-popup");
                document
                    .querySelector(".flavr-prompt")
                    ?.addEventListener("keyup", ({ key }) => {
                    if (key !== "Enter")
                        return;
                    save(icon, resolve);
                });
            },
        });
    });
}
function save(icon, resolve) {
    const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist;
    const index = wishlist.findIndex(item => item.icon === icon);
    const entry = wishlist[index];
    if (!entry)
        return false;
    const price = Number(document.querySelector(".flavr-prompt")?.value.trim());
    if (!price || price <= 0) {
        $.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.change_price.invalid_price);
        return false;
    }
    entry.price = price;
    _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist = [
        ...wishlist.slice(undefined, index),
        entry,
        ...wishlist.slice(index + 1, undefined),
    ];
    const template = __webpack_require__(/*! ../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
    $.flavrNotif(template.render({
        ...entry,
        message: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.change_price.changed_price(entry.name, entry.price),
    }));
    resolve();
    return true;
}


/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
(() => {
"use strict";
/*!*********************!*\
  !*** ./src/main.ts ***!
  \*********************/
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _appearance_dressing_experience__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./appearance/dressing_experience */ "./src/appearance/dressing_experience.ts");
/* harmony import */ var _migrate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./migrate */ "./src/migrate.ts");
/* harmony import */ var _takeover_brain__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./takeover/brain */ "./src/takeover/brain.ts");
/* harmony import */ var _ui_auctions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ui/auctions */ "./src/ui/auctions.ts");
/* harmony import */ var _ui_carousel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ui/carousel */ "./src/ui/carousel.ts");
/* harmony import */ var _ui_favourites__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ui/favourites */ "./src/ui/favourites.ts");
/* harmony import */ var _ui_home_content__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ui/home_content */ "./src/ui/home_content.ts");
/* harmony import */ var _ui_mall__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ui/mall */ "./src/ui/mall.ts");
/* harmony import */ var _ui_market__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ui/market */ "./src/ui/market.ts");
/* harmony import */ var _ui_menu__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ui/menu */ "./src/ui/menu.ts");
/* harmony import */ var _ui_pet__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./ui/pet */ "./src/ui/pet.ts");
/* harmony import */ var _ui_profile__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./ui/profile */ "./src/ui/profile.ts");
/* harmony import */ var _ui_purro_shop__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ui/purro_shop */ "./src/ui/purro_shop.ts");
/* harmony import */ var _ui_settings__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./ui/settings */ "./src/ui/settings.ts");
/* harmony import */ var _ui_top_bar__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./ui/top_bar */ "./src/ui/top_bar.ts");
/* harmony import */ var _ui_wishlist__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./ui/wishlist */ "./src/ui/wishlist.ts");
















// loadJS("https://unpkg.com/hogan.js/dist/template-3.0.2.min.js", true);
function load() {
    loadUI();
    (0,_takeover_brain__WEBPACK_IMPORTED_MODULE_2__.loadTakeover)();
}
function loadUI() {
    (0,_ui_menu__WEBPACK_IMPORTED_MODULE_9__.loadMenu)();
    (0,_ui_carousel__WEBPACK_IMPORTED_MODULE_4__.loadCarousel)();
    (0,_ui_home_content__WEBPACK_IMPORTED_MODULE_6__.loadHomeContent)();
    (0,_ui_favourites__WEBPACK_IMPORTED_MODULE_5__.loadFavourites)();
    (0,_ui_profile__WEBPACK_IMPORTED_MODULE_11__.loadProfile)();
    (0,_ui_pet__WEBPACK_IMPORTED_MODULE_10__.loadPet)();
    (0,_ui_market__WEBPACK_IMPORTED_MODULE_8__.loadMarket)();
    (0,_ui_wishlist__WEBPACK_IMPORTED_MODULE_15__.loadWishlist)();
    (0,_ui_top_bar__WEBPACK_IMPORTED_MODULE_14__.loadTopBar)();
    (0,_ui_auctions__WEBPACK_IMPORTED_MODULE_3__.loadAuctions)();
    (0,_ui_purro_shop__WEBPACK_IMPORTED_MODULE_12__.loadPurroShop)();
    (0,_ui_mall__WEBPACK_IMPORTED_MODULE_7__.loadMall)();
    void (0,_appearance_dressing_experience__WEBPACK_IMPORTED_MODULE_0__.loadDressingExperience)();
    if (document.readyState === "complete")
        void loadIndexedDb();
    else
        window.addEventListener("load", () => loadIndexedDb());
}
function loadIndexedDb() {
    void (0,_ui_settings__WEBPACK_IMPORTED_MODULE_13__.loadSettings)();
}
new MutationObserver(load).observe(document.getElementById("container"), {
    childList: true,
});
(0,_migrate__WEBPACK_IMPORTED_MODULE_1__.migrate)();
loadUI();
console.log(`${GM.info.script.name} v${GM.info.script.version} loaded.`);
(0,_takeover_brain__WEBPACK_IMPORTED_MODULE_2__.loadTakeover)();

})();

/******/ })()
;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkYXJ5YS1lbmhhbmNlbWVudHMudXNlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0QsbUJBQW1CO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxvQkFBb0I7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsb0JBQW9CO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsWUFBWTtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBLGdDQUFnQyxZQUFZO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkMsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFK1M7Ozs7Ozs7Ozs7O0FDbGIvUztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFD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RUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFlLEVBQUUsR0FBRyxjQUF5QjtRQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFNO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLGNBQWMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFlLEVBQUUsR0FBRyxjQUF5QjtRQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFNO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLGNBQWMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFlLEVBQUUsR0FBRyxjQUF5QjtRQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFNO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLGNBQWMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFlLEVBQUUsR0FBRyxjQUF5QjtRQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFNO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLGNBQWMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFlLEVBQUUsR0FBRyxjQUF5QjtRQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFNO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FB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SUFBSSxRQUFRLENBQUMsVUFBVSxLQUFLLFVBQVU7UUFBRSxLQUFLLGFBQWEsRUFBRTs7UUFDdkQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUM3RCxDQUFDO0FBRUQsU0FBUyxhQUFhO0lBQ3BCLEtBQUssMkRBQVksRUFBRTtBQUNyQixDQUFDO0FBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQ2hDLFFBQVEsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFTLEVBQzVDO0lBQ0UsU0FBUyxFQUFFLElBQUk7Q0FDaEIsQ0FDRjtBQUVELGlEQUFPLEVBQUU7QUFFVCxNQUFNLEVBQUU7QUFDUixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sVUFBVSxDQUFDO0FBQ3hFLDZEQUFZLEVBQUUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL25vZGVfbW9kdWxlcy8ucG5wbS9ibG9iLXV0aWxAMi4wLjIvbm9kZV9tb2R1bGVzL2Jsb2ItdXRpbC9kaXN0L2Jsb2ItdXRpbC5lcy5qcyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL25vZGVfbW9kdWxlcy8ucG5wbS9ob2dhbi5qc0AzLjAuMi9ub2RlX21vZHVsZXMvaG9nYW4uanMvbGliL2NvbXBpbGVyLmpzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hvZ2FuLmpzQDMuMC4yL25vZGVfbW9kdWxlcy9ob2dhbi5qcy9saWIvaG9nYW4uanMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9ub2RlX21vZHVsZXMvLnBucG0vaG9nYW4uanNAMy4wLjIvbm9kZV9tb2R1bGVzL2hvZ2FuLmpzL2xpYi90ZW1wbGF0ZS5qcyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9hcHBlYXJhbmNlX2l0ZW0uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9hcHBlYXJhbmNlX2l0ZW1zX2NhdGVnb3J5Lmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvYXBwZWFyYW5jZV9pdGVtc19ncm91cC5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2F1dG9fYnV5X2J1dHRvbi5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2F1dG9fYnV5X2ZsYXZyLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvYXV0b19idXlfZmxhdnJfbWFsbC5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2F1dG9fZXhwbG9yZV9idXR0b24uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9jYXJvdXNlbF9uZXdzLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvY2hhbmdlX3ByaWNlX2ZsYXZyLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvY3JlYXRlZF9vdXRmaXRfZmxhdnIuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9leHBsb3JhdGlvbl9oaXN0b3J5Lmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvZmF2b3VyaXRlX291dGZpdF9mbGF2ci5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2Zhdm91cml0ZXNfYWN0aW9uLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvZmxhdnJfbm90aWYvaWNvbl9tZXNzYWdlLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvaGVhZGVyX3Rha2VvdmVyLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvaG9tZV9jb250ZW50X3NtYWxsLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvbWFpbl9tZW51Lmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvbWFpbl9tZW51X3B1cnJvc2hvcC5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL21hcmtldF9oaXN0b3J5Lmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvb3V0Zml0X3RodW1icy5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL3Byb2ZpbGVfY29udGFjdF9hY3Rpb24uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9zZXR0aW5ncy5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL3dpc2hsaXN0X2J1dHRvbi5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL3dpc2hsaXN0X3NldHRpbmdzLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYWpheC9hamF4X3NlYXJjaC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hamF4L2J1eS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hamF4L2NhcHR1cmVfZW5kLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FqYXgvY2hhbmdlX3JlZ2lvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hamF4L2V4cGxvcmF0aW9uX3Jlc3VsdHMudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYXBpL21ldGEudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYXBpL3Jlc3VsdC5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FwcGVhcmFuY2UvYXBwZWFyYW5jZV91aS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hcHBlYXJhbmNlL2RhdGFfc2V0LnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FwcGVhcmFuY2UvZHJlc3NpbmdfZXhwZXJpZW5jZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hcHBlYXJhbmNlL2VudW1zL2FwcGVhcmFuY2VfY2F0ZWdvcnlfY29kZS5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FwcGVhcmFuY2UvZmFrZV9mYXZvdXJpdGVzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FwcGVhcmFuY2UvZmF2b3VyaXRlc19hY3Rpb25zLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FwcGVhcmFuY2UvaGlkZGVuLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FwcGVhcmFuY2Uvd2FyZHJvYmUudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvY2Fyb3VzZWwvY2Fyb3VzZWxfYmVlbW9vdl9hbm5veWFuY2VzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Nhcm91c2VsL2Nhcm91c2VsX2Rvd25sb2FkX2ZhY2UudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvY2Fyb3VzZWwvY2Fyb3VzZWxfZG93bmxvYWRfZ3VhcmRpYW4udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvY2Fyb3VzZWwvY2Fyb3VzZWxfZWxkYXJ5YV9lbmhhbmNlbWVudHMudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvY2Fyb3VzZWwvY2Fyb3VzZWxfdGFrZW92ZXIudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvY29uc29sZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9kb3dubG9hZC1jYW52YXMudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvZHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvZWxkYXJ5YS9qcXVlcnkudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvZWxkYXJ5YV91dGlsLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2kxOG4vZW4udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvaTE4bi9mci50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9pMThuL3RyYW5zbGF0ZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9pbmRleGVkX2RiL2RhdGFiYXNlcy5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2luZGV4ZWRfZGIvZmllbGRzLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvaW5kZXhlZF9kYi9pbmRleGVkX2RiLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2luZGV4ZWRfZGIvdGFibGVzLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hcmtldHBsYWNlL2VudW1zL2JvZHlfbG9jYXRpb24uZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYXJrZXRwbGFjZS9lbnVtcy9jYXRlZ29yeS5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hcmtldHBsYWNlL2VudW1zL2d1YXJkLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWFya2V0cGxhY2UvZW51bXMvcmFyaXR5LmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWFya2V0cGxhY2UvZW51bXMvdHlwZS5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hcmtldHBsYWNlL21hcmtldHBsYWNlX2hhbmRsZXJzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hdGhfdXRpbC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9taWdyYXRlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21pbmlnYW1lcy9lbWlsZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9taW5pZ2FtZXMvZmxhcHB5LnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21pbmlnYW1lcy9oYXRjaGxpbmdzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21pbmlnYW1lcy9wZWdnbGUudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvb3V0Zml0LnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3BldC9leHBsb3JhdGlvbi1oaXN0b3J5LnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3BldC9leHBsb3JhdGlvbi13YXRjaGVyLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3BldC9leHBsb3JhdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvYnJhaW4udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvY2xhc3Nlcy9hY3Rpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvY2xhc3Nlcy9idXlfYWN0aW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsYXNzZXMvZGFpbHlfYWN0aW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsYXNzZXMvZXhwbG9yYXRpb25fYWN0aW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsYXNzZXMvbWluaWdhbWVfYWN0aW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsYXNzZXMvc3VtbWVyX2dhbWVfYWN0aW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsYXNzZXMvd2FpdF9hY3Rpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvY2xpY2sudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvZXhwbG9yYXRpb25fc3RhdHVzLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdHNfdXRpbC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9hdWN0aW9ucy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9jYXJvdXNlbC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9mYXZvdXJpdGVzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL2hvbWVfY29udGVudC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9tYWxsLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL21hcmtldC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9tZW51LnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL3BldC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9wcm9maWxlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL3B1cnJvX3Nob3AudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvc2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvdG9wX2Jhci50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS93aXNobGlzdC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21haW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVE9ETzogaW5jbHVkaW5nIHRoZXNlIGluIGJsb2ItdXRpbC50cyBjYXVzZXMgdHlwZWRvYyB0byBnZW5lcmF0ZSBkb2NzIGZvciB0aGVtLFxuLy8gZXZlbiB3aXRoIC0tZXhjbHVkZVByaXZhdGUgwq9cXF8o44OEKV8vwq9cbi8qKiBAcHJpdmF0ZSAqL1xuZnVuY3Rpb24gbG9hZEltYWdlKHNyYywgY3Jvc3NPcmlnaW4pIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICAgIGlmIChjcm9zc09yaWdpbikge1xuICAgICAgICAgICAgaW1nLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47XG4gICAgICAgIH1cbiAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJlc29sdmUoaW1nKTtcbiAgICAgICAgfTtcbiAgICAgICAgaW1nLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgIGltZy5zcmMgPSBzcmM7XG4gICAgfSk7XG59XG4vKiogQHByaXZhdGUgKi9cbmZ1bmN0aW9uIGltZ1RvQ2FudmFzKGltZykge1xuICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQ7XG4gICAgLy8gY29weSB0aGUgaW1hZ2UgY29udGVudHMgdG8gdGhlIGNhbnZhc1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCBpbWcud2lkdGgsIGltZy5oZWlnaHQsIDAsIDAsIGltZy53aWR0aCwgaW1nLmhlaWdodCk7XG4gICAgcmV0dXJuIGNhbnZhcztcbn1cblxuLyogZ2xvYmFsIFByb21pc2UsIEltYWdlLCBCbG9iLCBGaWxlUmVhZGVyLCBhdG9iLCBidG9hLFxuICAgQmxvYkJ1aWxkZXIsIE1TQmxvYkJ1aWxkZXIsIE1vekJsb2JCdWlsZGVyLCBXZWJLaXRCbG9iQnVpbGRlciwgd2Via2l0VVJMICovXG4vKipcbiAqIFNoaW0gZm9yXG4gKiBbYG5ldyBCbG9iKClgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQmxvYi5CbG9iKVxuICogdG8gc3VwcG9ydFxuICogW29sZGVyIGJyb3dzZXJzIHRoYXQgdXNlIHRoZSBkZXByZWNhdGVkIGBCbG9iQnVpbGRlcmAgQVBJXShodHRwOi8vY2FuaXVzZS5jb20vYmxvYikuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIG15QmxvYiA9IGJsb2JVdGlsLmNyZWF0ZUJsb2IoWydoZWxsbyB3b3JsZCddLCB7dHlwZTogJ3RleHQvcGxhaW4nfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcGFydHMgLSBjb250ZW50IG9mIHRoZSBCbG9iXG4gKiBAcGFyYW0gcHJvcGVydGllcyAtIHVzdWFsbHkgYHt0eXBlOiBteUNvbnRlbnRUeXBlfWAsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gYWxzbyBwYXNzIGEgc3RyaW5nIGZvciB0aGUgY29udGVudCB0eXBlXG4gKiBAcmV0dXJucyBCbG9iXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJsb2IocGFydHMsIHByb3BlcnRpZXMpIHtcbiAgICBwYXJ0cyA9IHBhcnRzIHx8IFtdO1xuICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IHt9O1xuICAgIGlmICh0eXBlb2YgcHJvcGVydGllcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHsgdHlwZTogcHJvcGVydGllcyB9OyAvLyBpbmZlciBjb250ZW50IHR5cGVcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iKHBhcnRzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUubmFtZSAhPT0gJ1R5cGVFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIEJ1aWxkZXIgPSB0eXBlb2YgQmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IEJsb2JCdWlsZGVyIDogdHlwZW9mIE1TQmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IE1TQmxvYkJ1aWxkZXIgOiB0eXBlb2YgTW96QmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IE1vekJsb2JCdWlsZGVyIDogV2ViS2l0QmxvYkJ1aWxkZXI7XG4gICAgICAgIHZhciBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocGFydHNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IocHJvcGVydGllcy50eXBlKTtcbiAgICB9XG59XG4vKipcbiAqIFNoaW0gZm9yXG4gKiBbYFVSTC5jcmVhdGVPYmplY3RVUkwoKWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9VUkwuY3JlYXRlT2JqZWN0VVJMKVxuICogdG8gc3VwcG9ydCBicm93c2VycyB0aGF0IG9ubHkgaGF2ZSB0aGUgcHJlZml4ZWRcbiAqIGB3ZWJraXRVUkxgIChlLmcuIEFuZHJvaWQgPDQuNCkuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIG15VXJsID0gYmxvYlV0aWwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGJsb2JcbiAqIEByZXR1cm5zIHVybFxuICovXG5mdW5jdGlvbiBjcmVhdGVPYmplY3RVUkwoYmxvYikge1xuICAgIHJldHVybiAodHlwZW9mIFVSTCAhPT0gJ3VuZGVmaW5lZCcgPyBVUkwgOiB3ZWJraXRVUkwpLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbn1cbi8qKlxuICogU2hpbSBmb3JcbiAqIFtgVVJMLnJldm9rZU9iamVjdFVSTCgpYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC5yZXZva2VPYmplY3RVUkwpXG4gKiB0byBzdXBwb3J0IGJyb3dzZXJzIHRoYXQgb25seSBoYXZlIHRoZSBwcmVmaXhlZFxuICogYHdlYmtpdFVSTGAgKGUuZy4gQW5kcm9pZCA8NC40KS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiBibG9iVXRpbC5yZXZva2VPYmplY3RVUkwobXlVcmwpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHVybFxuICovXG5mdW5jdGlvbiByZXZva2VPYmplY3RVUkwodXJsKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgVVJMICE9PSAndW5kZWZpbmVkJyA/IFVSTCA6IHdlYmtpdFVSTCkucmV2b2tlT2JqZWN0VVJMKHVybCk7XG59XG4vKipcbiAqIENvbnZlcnQgYSBgQmxvYmAgdG8gYSBiaW5hcnkgc3RyaW5nLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIGJsb2JVdGlsLmJsb2JUb0JpbmFyeVN0cmluZyhibG9iKS50aGVuKGZ1bmN0aW9uIChiaW5hcnlTdHJpbmcpIHtcbiAqICAgLy8gc3VjY2Vzc1xuICogfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICogICAvLyBlcnJvclxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYmxvYlxuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGJpbmFyeSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gYmxvYlRvQmluYXJ5U3RyaW5nKGJsb2IpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgdmFyIGhhc0JpbmFyeVN0cmluZyA9IHR5cGVvZiByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nID09PSAnZnVuY3Rpb24nO1xuICAgICAgICByZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJlYWRlci5yZXN1bHQgfHwgJyc7XG4gICAgICAgICAgICBpZiAoaGFzQmluYXJ5U3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUoYXJyYXlCdWZmZXJUb0JpbmFyeVN0cmluZyhyZXN1bHQpKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgIGlmIChoYXNCaW5hcnlTdHJpbmcpIHtcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoYmxvYik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYik7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogQ29udmVydCBhIGJhc2U2NC1lbmNvZGVkIHN0cmluZyB0byBhIGBCbG9iYC5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgYmxvYiA9IGJsb2JVdGlsLmJhc2U2NFN0cmluZ1RvQmxvYihiYXNlNjRTdHJpbmcpO1xuICogYGBgXG4gKiBAcGFyYW0gYmFzZTY0IC0gYmFzZTY0LWVuY29kZWQgc3RyaW5nXG4gKiBAcGFyYW0gdHlwZSAtIHRoZSBjb250ZW50IHR5cGUgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQmxvYlxuICovXG5mdW5jdGlvbiBiYXNlNjRTdHJpbmdUb0Jsb2IoYmFzZTY0LCB0eXBlKSB7XG4gICAgdmFyIHBhcnRzID0gW2JpbmFyeVN0cmluZ1RvQXJyYXlCdWZmZXIoYXRvYihiYXNlNjQpKV07XG4gICAgcmV0dXJuIHR5cGUgPyBjcmVhdGVCbG9iKHBhcnRzLCB7IHR5cGU6IHR5cGUgfSkgOiBjcmVhdGVCbG9iKHBhcnRzKTtcbn1cbi8qKlxuICogQ29udmVydCBhIGJpbmFyeSBzdHJpbmcgdG8gYSBgQmxvYmAuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGJsb2IgPSBibG9iVXRpbC5iaW5hcnlTdHJpbmdUb0Jsb2IoYmluYXJ5U3RyaW5nKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBiaW5hcnkgLSBiaW5hcnkgc3RyaW5nXG4gKiBAcGFyYW0gdHlwZSAtIHRoZSBjb250ZW50IHR5cGUgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQmxvYlxuICovXG5mdW5jdGlvbiBiaW5hcnlTdHJpbmdUb0Jsb2IoYmluYXJ5LCB0eXBlKSB7XG4gICAgcmV0dXJuIGJhc2U2NFN0cmluZ1RvQmxvYihidG9hKGJpbmFyeSksIHR5cGUpO1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgYEJsb2JgIHRvIGEgYmluYXJ5IHN0cmluZy5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiBibG9iVXRpbC5ibG9iVG9CYXNlNjRTdHJpbmcoYmxvYikudGhlbihmdW5jdGlvbiAoYmFzZTY0U3RyaW5nKSB7XG4gKiAgIC8vIHN1Y2Nlc3NcbiAqIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgLy8gZXJyb3JcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGJsb2JcbiAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBiaW5hcnkgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGJsb2JUb0Jhc2U2NFN0cmluZyhibG9iKSB7XG4gICAgcmV0dXJuIGJsb2JUb0JpbmFyeVN0cmluZyhibG9iKS50aGVuKGJ0b2EpO1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBVUkwgc3RyaW5nXG4gKiAoZS5nLiBgJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0cuLi4nYClcbiAqIHRvIGEgYEJsb2JgLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciBibG9iID0gYmxvYlV0aWwuZGF0YVVSTFRvQmxvYihkYXRhVVJMKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBkYXRhVVJMIC0gZGF0YVVSTC1lbmNvZGVkIHN0cmluZ1xuICogQHJldHVybnMgQmxvYlxuICovXG5mdW5jdGlvbiBkYXRhVVJMVG9CbG9iKGRhdGFVUkwpIHtcbiAgICB2YXIgdHlwZSA9IGRhdGFVUkwubWF0Y2goL2RhdGE6KFteO10rKS8pWzFdO1xuICAgIHZhciBiYXNlNjQgPSBkYXRhVVJMLnJlcGxhY2UoL15bXixdKywvLCAnJyk7XG4gICAgdmFyIGJ1ZmYgPSBiaW5hcnlTdHJpbmdUb0FycmF5QnVmZmVyKGF0b2IoYmFzZTY0KSk7XG4gICAgcmV0dXJuIGNyZWF0ZUJsb2IoW2J1ZmZdLCB7IHR5cGU6IHR5cGUgfSk7XG59XG4vKipcbiAqIENvbnZlcnQgYSBgQmxvYmAgdG8gYSBkYXRhIFVSTCBzdHJpbmdcbiAqIChlLmcuIGAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLRy4uLidgKS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZGF0YVVSTCA9IGJsb2JVdGlsLmJsb2JUb0RhdGFVUkwoYmxvYik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYmxvYlxuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRhdGEgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBibG9iVG9EYXRhVVJMKGJsb2IpIHtcbiAgICByZXR1cm4gYmxvYlRvQmFzZTY0U3RyaW5nKGJsb2IpLnRoZW4oZnVuY3Rpb24gKGJhc2U2NFN0cmluZykge1xuICAgICAgICByZXR1cm4gJ2RhdGE6JyArIGJsb2IudHlwZSArICc7YmFzZTY0LCcgKyBiYXNlNjRTdHJpbmc7XG4gICAgfSk7XG59XG4vKipcbiAqIENvbnZlcnQgYW4gaW1hZ2UncyBgc3JjYCBVUkwgdG8gYSBkYXRhIFVSTCBieSBsb2FkaW5nIHRoZSBpbWFnZSBhbmQgcGFpbnRpbmdcbiAqIGl0IHRvIGEgYGNhbnZhc2AuXG4gKlxuICogTm90ZTogdGhpcyB3aWxsIGNvZXJjZSB0aGUgaW1hZ2UgdG8gdGhlIGRlc2lyZWQgY29udGVudCB0eXBlLCBhbmQgaXRcbiAqIHdpbGwgb25seSBwYWludCB0aGUgZmlyc3QgZnJhbWUgb2YgYW4gYW5pbWF0ZWQgR0lGLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqIGBgYGpzXG4gKiBibG9iVXRpbC5pbWdTcmNUb0RhdGFVUkwoJ2h0dHA6Ly9teXNpdGUuY29tL2ltZy5wbmcnKS50aGVuKGZ1bmN0aW9uIChkYXRhVVJMKSB7XG4gKiAgIC8vIHN1Y2Nlc3NcbiAqIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgLy8gZXJyb3JcbiAqIH0pO1xuICogYGBgXG4gKlxuICogYGBganNcbiAqIGJsb2JVdGlsLmltZ1NyY1RvRGF0YVVSTCgnaHR0cDovL3NvbWUtb3RoZXItc2l0ZS5jb20vaW1nLmpwZycsICdpbWFnZS9qcGVnJyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAnQW5vbnltb3VzJywgMS4wKS50aGVuKGZ1bmN0aW9uIChkYXRhVVJMKSB7XG4gKiAgIC8vIHN1Y2Nlc3NcbiAqIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgLy8gZXJyb3JcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHNyYyAtIGltYWdlIHNyY1xuICogQHBhcmFtIHR5cGUgLSB0aGUgY29udGVudCB0eXBlIChvcHRpb25hbCwgZGVmYXVsdHMgdG8gJ2ltYWdlL3BuZycpXG4gKiBAcGFyYW0gY3Jvc3NPcmlnaW4gLSBmb3IgQ09SUy1lbmFibGVkIGltYWdlcywgc2V0IHRoaXMgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQW5vbnltb3VzJyB0byBhdm9pZCBcInRhaW50ZWQgY2FudmFzXCIgZXJyb3JzXG4gKiBAcGFyYW0gcXVhbGl0eSAtIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSBpbmRpY2F0aW5nIGltYWdlIHF1YWxpdHlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSByZXF1ZXN0ZWQgdHlwZSBpcyAnaW1hZ2UvanBlZycgb3IgJ2ltYWdlL3dlYnAnXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZGF0YSBVUkwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGltZ1NyY1RvRGF0YVVSTChzcmMsIHR5cGUsIGNyb3NzT3JpZ2luLCBxdWFsaXR5KSB7XG4gICAgdHlwZSA9IHR5cGUgfHwgJ2ltYWdlL3BuZyc7XG4gICAgcmV0dXJuIGxvYWRJbWFnZShzcmMsIGNyb3NzT3JpZ2luKS50aGVuKGltZ1RvQ2FudmFzKS50aGVuKGZ1bmN0aW9uIChjYW52YXMpIHtcbiAgICAgICAgcmV0dXJuIGNhbnZhcy50b0RhdGFVUkwodHlwZSwgcXVhbGl0eSk7XG4gICAgfSk7XG59XG4vKipcbiAqIENvbnZlcnQgYSBgY2FudmFzYCB0byBhIGBCbG9iYC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiBgYGBqc1xuICogYmxvYlV0aWwuY2FudmFzVG9CbG9iKGNhbnZhcykudGhlbihmdW5jdGlvbiAoYmxvYikge1xuICogICAvLyBzdWNjZXNzXG4gKiB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gKiAgIC8vIGVycm9yXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIE1vc3QgYnJvd3NlcnMgc3VwcG9ydCBjb252ZXJ0aW5nIGEgY2FudmFzIHRvIGJvdGggYCdpbWFnZS9wbmcnYCBhbmQgYCdpbWFnZS9qcGVnJ2AuIFlvdSBtYXlcbiAqIGFsc28gd2FudCB0byB0cnkgYCdpbWFnZS93ZWJwJ2AsIHdoaWNoIHdpbGwgd29yayBpbiBzb21lIGJyb3dzZXJzIGxpa2UgQ2hyb21lIChhbmQgaW4gb3RoZXIgYnJvd3NlcnMsIHdpbGwganVzdCBmYWxsIGJhY2sgdG8gYCdpbWFnZS9wbmcnYCk6XG4gKlxuICogYGBganNcbiAqIGJsb2JVdGlsLmNhbnZhc1RvQmxvYihjYW52YXMsICdpbWFnZS93ZWJwJykudGhlbihmdW5jdGlvbiAoYmxvYikge1xuICogICAvLyBzdWNjZXNzXG4gKiB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gKiAgIC8vIGVycm9yXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBjYW52YXMgLSBIVE1MQ2FudmFzRWxlbWVudFxuICogQHBhcmFtIHR5cGUgLSB0aGUgY29udGVudCB0eXBlIChvcHRpb25hbCwgZGVmYXVsdHMgdG8gJ2ltYWdlL3BuZycpXG4gKiBAcGFyYW0gcXVhbGl0eSAtIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSBpbmRpY2F0aW5nIGltYWdlIHF1YWxpdHlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSByZXF1ZXN0ZWQgdHlwZSBpcyAnaW1hZ2UvanBlZycgb3IgJ2ltYWdlL3dlYnAnXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYEJsb2JgXG4gKi9cbmZ1bmN0aW9uIGNhbnZhc1RvQmxvYihjYW52YXMsIHR5cGUsIHF1YWxpdHkpIHtcbiAgICBpZiAodHlwZW9mIGNhbnZhcy50b0Jsb2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICBjYW52YXMudG9CbG9iKHJlc29sdmUsIHR5cGUsIHF1YWxpdHkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShkYXRhVVJMVG9CbG9iKGNhbnZhcy50b0RhdGFVUkwodHlwZSwgcXVhbGl0eSkpKTtcbn1cbi8qKlxuICogQ29udmVydCBhbiBpbWFnZSdzIGBzcmNgIFVSTCB0byBhIGBCbG9iYCBieSBsb2FkaW5nIHRoZSBpbWFnZSBhbmQgcGFpbnRpbmdcbiAqIGl0IHRvIGEgYGNhbnZhc2AuXG4gKlxuICogTm90ZTogdGhpcyB3aWxsIGNvZXJjZSB0aGUgaW1hZ2UgdG8gdGhlIGRlc2lyZWQgY29udGVudCB0eXBlLCBhbmQgaXRcbiAqIHdpbGwgb25seSBwYWludCB0aGUgZmlyc3QgZnJhbWUgb2YgYW4gYW5pbWF0ZWQgR0lGLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqIGBgYGpzXG4gKiBibG9iVXRpbC5pbWdTcmNUb0Jsb2IoJ2h0dHA6Ly9teXNpdGUuY29tL2ltZy5wbmcnKS50aGVuKGZ1bmN0aW9uIChibG9iKSB7XG4gKiAgIC8vIHN1Y2Nlc3NcbiAqIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgLy8gZXJyb3JcbiAqIH0pO1xuICogYGBgXG4gKlxuICogYGBganNcbiAqIGJsb2JVdGlsLmltZ1NyY1RvQmxvYignaHR0cDovL3NvbWUtb3RoZXItc2l0ZS5jb20vaW1nLmpwZycsICdpbWFnZS9qcGVnJyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAnQW5vbnltb3VzJywgMS4wKS50aGVuKGZ1bmN0aW9uIChibG9iKSB7XG4gKiAgIC8vIHN1Y2Nlc3NcbiAqIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgLy8gZXJyb3JcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHNyYyAtIGltYWdlIHNyY1xuICogQHBhcmFtIHR5cGUgLSB0aGUgY29udGVudCB0eXBlIChvcHRpb25hbCwgZGVmYXVsdHMgdG8gJ2ltYWdlL3BuZycpXG4gKiBAcGFyYW0gY3Jvc3NPcmlnaW4gLSBmb3IgQ09SUy1lbmFibGVkIGltYWdlcywgc2V0IHRoaXMgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQW5vbnltb3VzJyB0byBhdm9pZCBcInRhaW50ZWQgY2FudmFzXCIgZXJyb3JzXG4gKiBAcGFyYW0gcXVhbGl0eSAtIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSBpbmRpY2F0aW5nIGltYWdlIHF1YWxpdHlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSByZXF1ZXN0ZWQgdHlwZSBpcyAnaW1hZ2UvanBlZycgb3IgJ2ltYWdlL3dlYnAnXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYEJsb2JgXG4gKi9cbmZ1bmN0aW9uIGltZ1NyY1RvQmxvYihzcmMsIHR5cGUsIGNyb3NzT3JpZ2luLCBxdWFsaXR5KSB7XG4gICAgdHlwZSA9IHR5cGUgfHwgJ2ltYWdlL3BuZyc7XG4gICAgcmV0dXJuIGxvYWRJbWFnZShzcmMsIGNyb3NzT3JpZ2luKS50aGVuKGltZ1RvQ2FudmFzKS50aGVuKGZ1bmN0aW9uIChjYW52YXMpIHtcbiAgICAgICAgcmV0dXJuIGNhbnZhc1RvQmxvYihjYW52YXMsIHR5cGUsIHF1YWxpdHkpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBDb252ZXJ0IGFuIGBBcnJheUJ1ZmZlcmAgdG8gYSBgQmxvYmAuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGJsb2IgPSBibG9iVXRpbC5hcnJheUJ1ZmZlclRvQmxvYihhcnJheUJ1ZmYsICdhdWRpby9tcGVnJyk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYnVmZmVyXG4gKiBAcGFyYW0gdHlwZSAtIHRoZSBjb250ZW50IHR5cGUgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQmxvYlxuICovXG5mdW5jdGlvbiBhcnJheUJ1ZmZlclRvQmxvYihidWZmZXIsIHR5cGUpIHtcbiAgICByZXR1cm4gY3JlYXRlQmxvYihbYnVmZmVyXSwgdHlwZSk7XG59XG4vKipcbiAqIENvbnZlcnQgYSBgQmxvYmAgdG8gYW4gYEFycmF5QnVmZmVyYC5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiBibG9iVXRpbC5ibG9iVG9BcnJheUJ1ZmZlcihibG9iKS50aGVuKGZ1bmN0aW9uIChhcnJheUJ1ZmYpIHtcbiAqICAgLy8gc3VjY2Vzc1xuICogfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICogICAvLyBlcnJvclxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYmxvYlxuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGBBcnJheUJ1ZmZlcmBcbiAqL1xuZnVuY3Rpb24gYmxvYlRvQXJyYXlCdWZmZXIoYmxvYikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJlYWRlci5yZXN1bHQgfHwgbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9O1xuICAgICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBDb252ZXJ0IGFuIGBBcnJheUJ1ZmZlcmAgdG8gYSBiaW5hcnkgc3RyaW5nLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciBteVN0cmluZyA9IGJsb2JVdGlsLmFycmF5QnVmZmVyVG9CaW5hcnlTdHJpbmcoYXJyYXlCdWZmKVxuICogYGBgXG4gKlxuICogQHBhcmFtIGJ1ZmZlciAtIGFycmF5IGJ1ZmZlclxuICogQHJldHVybnMgYmluYXJ5IHN0cmluZ1xuICovXG5mdW5jdGlvbiBhcnJheUJ1ZmZlclRvQmluYXJ5U3RyaW5nKGJ1ZmZlcikge1xuICAgIHZhciBiaW5hcnkgPSAnJztcbiAgICB2YXIgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgIHZhciBsZW5ndGggPSBieXRlcy5ieXRlTGVuZ3RoO1xuICAgIHZhciBpID0gLTE7XG4gICAgd2hpbGUgKCsraSA8IGxlbmd0aCkge1xuICAgICAgICBiaW5hcnkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiBiaW5hcnk7XG59XG4vKipcbiAqIENvbnZlcnQgYSBiaW5hcnkgc3RyaW5nIHRvIGFuIGBBcnJheUJ1ZmZlcmAuXG4gKlxuICogYGBganNcbiAqIHZhciBteUJ1ZmZlciA9IGJsb2JVdGlsLmJpbmFyeVN0cmluZ1RvQXJyYXlCdWZmZXIoYmluYXJ5U3RyaW5nKVxuICogYGBgXG4gKlxuICogQHBhcmFtIGJpbmFyeSAtIGJpbmFyeSBzdHJpbmdcbiAqIEByZXR1cm5zIGFycmF5IGJ1ZmZlclxuICovXG5mdW5jdGlvbiBiaW5hcnlTdHJpbmdUb0FycmF5QnVmZmVyKGJpbmFyeSkge1xuICAgIHZhciBsZW5ndGggPSBiaW5hcnkubGVuZ3RoO1xuICAgIHZhciBidWYgPSBuZXcgQXJyYXlCdWZmZXIobGVuZ3RoKTtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoYnVmKTtcbiAgICB2YXIgaSA9IC0xO1xuICAgIHdoaWxlICgrK2kgPCBsZW5ndGgpIHtcbiAgICAgICAgYXJyW2ldID0gYmluYXJ5LmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIHJldHVybiBidWY7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZUJsb2IsIGNyZWF0ZU9iamVjdFVSTCwgcmV2b2tlT2JqZWN0VVJMLCBibG9iVG9CaW5hcnlTdHJpbmcsIGJhc2U2NFN0cmluZ1RvQmxvYiwgYmluYXJ5U3RyaW5nVG9CbG9iLCBibG9iVG9CYXNlNjRTdHJpbmcsIGRhdGFVUkxUb0Jsb2IsIGJsb2JUb0RhdGFVUkwsIGltZ1NyY1RvRGF0YVVSTCwgY2FudmFzVG9CbG9iLCBpbWdTcmNUb0Jsb2IsIGFycmF5QnVmZmVyVG9CbG9iLCBibG9iVG9BcnJheUJ1ZmZlciwgYXJyYXlCdWZmZXJUb0JpbmFyeVN0cmluZywgYmluYXJ5U3RyaW5nVG9BcnJheUJ1ZmZlciB9O1xuIiwiLypcbiAqICBDb3B5cmlnaHQgMjAxMSBUd2l0dGVyLCBJbmMuXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4oZnVuY3Rpb24gKEhvZ2FuKSB7XG4gIC8vIFNldHVwIHJlZ2V4ICBhc3NpZ25tZW50c1xuICAvLyByZW1vdmUgd2hpdGVzcGFjZSBhY2NvcmRpbmcgdG8gTXVzdGFjaGUgc3BlY1xuICB2YXIgcklzV2hpdGVzcGFjZSA9IC9cXFMvLFxuICAgICAgclF1b3QgPSAvXFxcIi9nLFxuICAgICAgck5ld2xpbmUgPSAgL1xcbi9nLFxuICAgICAgckNyID0gL1xcci9nLFxuICAgICAgclNsYXNoID0gL1xcXFwvZyxcbiAgICAgIHJMaW5lU2VwID0gL1xcdTIwMjgvLFxuICAgICAgclBhcmFncmFwaFNlcCA9IC9cXHUyMDI5LztcblxuICBIb2dhbi50YWdzID0ge1xuICAgICcjJzogMSwgJ14nOiAyLCAnPCc6IDMsICckJzogNCxcbiAgICAnLyc6IDUsICchJzogNiwgJz4nOiA3LCAnPSc6IDgsICdfdic6IDksXG4gICAgJ3snOiAxMCwgJyYnOiAxMSwgJ190JzogMTJcbiAgfTtcblxuICBIb2dhbi5zY2FuID0gZnVuY3Rpb24gc2Nhbih0ZXh0LCBkZWxpbWl0ZXJzKSB7XG4gICAgdmFyIGxlbiA9IHRleHQubGVuZ3RoLFxuICAgICAgICBJTl9URVhUID0gMCxcbiAgICAgICAgSU5fVEFHX1RZUEUgPSAxLFxuICAgICAgICBJTl9UQUcgPSAyLFxuICAgICAgICBzdGF0ZSA9IElOX1RFWFQsXG4gICAgICAgIHRhZ1R5cGUgPSBudWxsLFxuICAgICAgICB0YWcgPSBudWxsLFxuICAgICAgICBidWYgPSAnJyxcbiAgICAgICAgdG9rZW5zID0gW10sXG4gICAgICAgIHNlZW5UYWcgPSBmYWxzZSxcbiAgICAgICAgaSA9IDAsXG4gICAgICAgIGxpbmVTdGFydCA9IDAsXG4gICAgICAgIG90YWcgPSAne3snLFxuICAgICAgICBjdGFnID0gJ319JztcblxuICAgIGZ1bmN0aW9uIGFkZEJ1ZigpIHtcbiAgICAgIGlmIChidWYubGVuZ3RoID4gMCkge1xuICAgICAgICB0b2tlbnMucHVzaCh7dGFnOiAnX3QnLCB0ZXh0OiBuZXcgU3RyaW5nKGJ1Zil9KTtcbiAgICAgICAgYnVmID0gJyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZUlzV2hpdGVzcGFjZSgpIHtcbiAgICAgIHZhciBpc0FsbFdoaXRlc3BhY2UgPSB0cnVlO1xuICAgICAgZm9yICh2YXIgaiA9IGxpbmVTdGFydDsgaiA8IHRva2Vucy5sZW5ndGg7IGorKykge1xuICAgICAgICBpc0FsbFdoaXRlc3BhY2UgPVxuICAgICAgICAgIChIb2dhbi50YWdzW3Rva2Vuc1tqXS50YWddIDwgSG9nYW4udGFnc1snX3YnXSkgfHxcbiAgICAgICAgICAodG9rZW5zW2pdLnRhZyA9PSAnX3QnICYmIHRva2Vuc1tqXS50ZXh0Lm1hdGNoKHJJc1doaXRlc3BhY2UpID09PSBudWxsKTtcbiAgICAgICAgaWYgKCFpc0FsbFdoaXRlc3BhY2UpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGlzQWxsV2hpdGVzcGFjZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaWx0ZXJMaW5lKGhhdmVTZWVuVGFnLCBub05ld0xpbmUpIHtcbiAgICAgIGFkZEJ1ZigpO1xuXG4gICAgICBpZiAoaGF2ZVNlZW5UYWcgJiYgbGluZUlzV2hpdGVzcGFjZSgpKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBsaW5lU3RhcnQsIG5leHQ7IGogPCB0b2tlbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBpZiAodG9rZW5zW2pdLnRleHQpIHtcbiAgICAgICAgICAgIGlmICgobmV4dCA9IHRva2Vuc1tqKzFdKSAmJiBuZXh0LnRhZyA9PSAnPicpIHtcbiAgICAgICAgICAgICAgLy8gc2V0IGluZGVudCB0byB0b2tlbiB2YWx1ZVxuICAgICAgICAgICAgICBuZXh0LmluZGVudCA9IHRva2Vuc1tqXS50ZXh0LnRvU3RyaW5nKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRva2Vucy5zcGxpY2UoaiwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFub05ld0xpbmUpIHtcbiAgICAgICAgdG9rZW5zLnB1c2goe3RhZzonXFxuJ30pO1xuICAgICAgfVxuXG4gICAgICBzZWVuVGFnID0gZmFsc2U7XG4gICAgICBsaW5lU3RhcnQgPSB0b2tlbnMubGVuZ3RoO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoYW5nZURlbGltaXRlcnModGV4dCwgaW5kZXgpIHtcbiAgICAgIHZhciBjbG9zZSA9ICc9JyArIGN0YWcsXG4gICAgICAgICAgY2xvc2VJbmRleCA9IHRleHQuaW5kZXhPZihjbG9zZSwgaW5kZXgpLFxuICAgICAgICAgIGRlbGltaXRlcnMgPSB0cmltKFxuICAgICAgICAgICAgdGV4dC5zdWJzdHJpbmcodGV4dC5pbmRleE9mKCc9JywgaW5kZXgpICsgMSwgY2xvc2VJbmRleClcbiAgICAgICAgICApLnNwbGl0KCcgJyk7XG5cbiAgICAgIG90YWcgPSBkZWxpbWl0ZXJzWzBdO1xuICAgICAgY3RhZyA9IGRlbGltaXRlcnNbZGVsaW1pdGVycy5sZW5ndGggLSAxXTtcblxuICAgICAgcmV0dXJuIGNsb3NlSW5kZXggKyBjbG9zZS5sZW5ndGggLSAxO1xuICAgIH1cblxuICAgIGlmIChkZWxpbWl0ZXJzKSB7XG4gICAgICBkZWxpbWl0ZXJzID0gZGVsaW1pdGVycy5zcGxpdCgnICcpO1xuICAgICAgb3RhZyA9IGRlbGltaXRlcnNbMF07XG4gICAgICBjdGFnID0gZGVsaW1pdGVyc1sxXTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChzdGF0ZSA9PSBJTl9URVhUKSB7XG4gICAgICAgIGlmICh0YWdDaGFuZ2Uob3RhZywgdGV4dCwgaSkpIHtcbiAgICAgICAgICAtLWk7XG4gICAgICAgICAgYWRkQnVmKCk7XG4gICAgICAgICAgc3RhdGUgPSBJTl9UQUdfVFlQRTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGV4dC5jaGFyQXQoaSkgPT0gJ1xcbicpIHtcbiAgICAgICAgICAgIGZpbHRlckxpbmUoc2VlblRhZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZiArPSB0ZXh0LmNoYXJBdChpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gSU5fVEFHX1RZUEUpIHtcbiAgICAgICAgaSArPSBvdGFnLmxlbmd0aCAtIDE7XG4gICAgICAgIHRhZyA9IEhvZ2FuLnRhZ3NbdGV4dC5jaGFyQXQoaSArIDEpXTtcbiAgICAgICAgdGFnVHlwZSA9IHRhZyA/IHRleHQuY2hhckF0KGkgKyAxKSA6ICdfdic7XG4gICAgICAgIGlmICh0YWdUeXBlID09ICc9Jykge1xuICAgICAgICAgIGkgPSBjaGFuZ2VEZWxpbWl0ZXJzKHRleHQsIGkpO1xuICAgICAgICAgIHN0YXRlID0gSU5fVEVYVDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGFnKSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YXRlID0gSU5fVEFHO1xuICAgICAgICB9XG4gICAgICAgIHNlZW5UYWcgPSBpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRhZ0NoYW5nZShjdGFnLCB0ZXh0LCBpKSkge1xuICAgICAgICAgIHRva2Vucy5wdXNoKHt0YWc6IHRhZ1R5cGUsIG46IHRyaW0oYnVmKSwgb3RhZzogb3RhZywgY3RhZzogY3RhZyxcbiAgICAgICAgICAgICAgICAgICAgICAgaTogKHRhZ1R5cGUgPT0gJy8nKSA/IHNlZW5UYWcgLSBvdGFnLmxlbmd0aCA6IGkgKyBjdGFnLmxlbmd0aH0pO1xuICAgICAgICAgIGJ1ZiA9ICcnO1xuICAgICAgICAgIGkgKz0gY3RhZy5sZW5ndGggLSAxO1xuICAgICAgICAgIHN0YXRlID0gSU5fVEVYVDtcbiAgICAgICAgICBpZiAodGFnVHlwZSA9PSAneycpIHtcbiAgICAgICAgICAgIGlmIChjdGFnID09ICd9fScpIHtcbiAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2xlYW5UcmlwbGVTdGFjaGUodG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZiArPSB0ZXh0LmNoYXJBdChpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZpbHRlckxpbmUoc2VlblRhZywgdHJ1ZSk7XG5cbiAgICByZXR1cm4gdG9rZW5zO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYW5UcmlwbGVTdGFjaGUodG9rZW4pIHtcbiAgICBpZiAodG9rZW4ubi5zdWJzdHIodG9rZW4ubi5sZW5ndGggLSAxKSA9PT0gJ30nKSB7XG4gICAgICB0b2tlbi5uID0gdG9rZW4ubi5zdWJzdHJpbmcoMCwgdG9rZW4ubi5sZW5ndGggLSAxKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0cmltKHMpIHtcbiAgICBpZiAocy50cmltKSB7XG4gICAgICByZXR1cm4gcy50cmltKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMucmVwbGFjZSgvXlxccyp8XFxzKiQvZywgJycpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGFnQ2hhbmdlKHRhZywgdGV4dCwgaW5kZXgpIHtcbiAgICBpZiAodGV4dC5jaGFyQXQoaW5kZXgpICE9IHRhZy5jaGFyQXQoMCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMSwgbCA9IHRhZy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmICh0ZXh0LmNoYXJBdChpbmRleCArIGkpICE9IHRhZy5jaGFyQXQoaSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gdGhlIHRhZ3MgYWxsb3dlZCBpbnNpZGUgc3VwZXIgdGVtcGxhdGVzXG4gIHZhciBhbGxvd2VkSW5TdXBlciA9IHsnX3QnOiB0cnVlLCAnXFxuJzogdHJ1ZSwgJyQnOiB0cnVlLCAnLyc6IHRydWV9O1xuXG4gIGZ1bmN0aW9uIGJ1aWxkVHJlZSh0b2tlbnMsIGtpbmQsIHN0YWNrLCBjdXN0b21UYWdzKSB7XG4gICAgdmFyIGluc3RydWN0aW9ucyA9IFtdLFxuICAgICAgICBvcGVuZXIgPSBudWxsLFxuICAgICAgICB0YWlsID0gbnVsbCxcbiAgICAgICAgdG9rZW4gPSBudWxsO1xuXG4gICAgdGFpbCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgd2hpbGUgKHRva2Vucy5sZW5ndGggPiAwKSB7XG4gICAgICB0b2tlbiA9IHRva2Vucy5zaGlmdCgpO1xuXG4gICAgICBpZiAodGFpbCAmJiB0YWlsLnRhZyA9PSAnPCcgJiYgISh0b2tlbi50YWcgaW4gYWxsb3dlZEluU3VwZXIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSWxsZWdhbCBjb250ZW50IGluIDwgc3VwZXIgdGFnLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoSG9nYW4udGFnc1t0b2tlbi50YWddIDw9IEhvZ2FuLnRhZ3NbJyQnXSB8fCBpc09wZW5lcih0b2tlbiwgY3VzdG9tVGFncykpIHtcbiAgICAgICAgc3RhY2sucHVzaCh0b2tlbik7XG4gICAgICAgIHRva2VuLm5vZGVzID0gYnVpbGRUcmVlKHRva2VucywgdG9rZW4udGFnLCBzdGFjaywgY3VzdG9tVGFncyk7XG4gICAgICB9IGVsc2UgaWYgKHRva2VuLnRhZyA9PSAnLycpIHtcbiAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2xvc2luZyB0YWcgd2l0aG91dCBvcGVuZXI6IC8nICsgdG9rZW4ubik7XG4gICAgICAgIH1cbiAgICAgICAgb3BlbmVyID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGlmICh0b2tlbi5uICE9IG9wZW5lci5uICYmICFpc0Nsb3Nlcih0b2tlbi5uLCBvcGVuZXIubiwgY3VzdG9tVGFncykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05lc3RpbmcgZXJyb3I6ICcgKyBvcGVuZXIubiArICcgdnMuICcgKyB0b2tlbi5uKTtcbiAgICAgICAgfVxuICAgICAgICBvcGVuZXIuZW5kID0gdG9rZW4uaTtcbiAgICAgICAgcmV0dXJuIGluc3RydWN0aW9ucztcbiAgICAgIH0gZWxzZSBpZiAodG9rZW4udGFnID09ICdcXG4nKSB7XG4gICAgICAgIHRva2VuLmxhc3QgPSAodG9rZW5zLmxlbmd0aCA9PSAwKSB8fCAodG9rZW5zWzBdLnRhZyA9PSAnXFxuJyk7XG4gICAgICB9XG5cbiAgICAgIGluc3RydWN0aW9ucy5wdXNoKHRva2VuKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGNsb3NpbmcgdGFnOiAnICsgc3RhY2sucG9wKCkubik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RydWN0aW9ucztcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzT3BlbmVyKHRva2VuLCB0YWdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0YWdzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKHRhZ3NbaV0ubyA9PSB0b2tlbi5uKSB7XG4gICAgICAgIHRva2VuLnRhZyA9ICcjJztcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNDbG9zZXIoY2xvc2UsIG9wZW4sIHRhZ3MpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRhZ3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAodGFnc1tpXS5jID09IGNsb3NlICYmIHRhZ3NbaV0ubyA9PSBvcGVuKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0cmluZ2lmeVN1YnN0aXR1dGlvbnMob2JqKSB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaXRlbXMucHVzaCgnXCInICsgZXNjKGtleSkgKyAnXCI6IGZ1bmN0aW9uKGMscCx0LGkpIHsnICsgb2JqW2tleV0gKyAnfScpO1xuICAgIH1cbiAgICByZXR1cm4gXCJ7IFwiICsgaXRlbXMuam9pbihcIixcIikgKyBcIiB9XCI7XG4gIH1cblxuICBmdW5jdGlvbiBzdHJpbmdpZnlQYXJ0aWFscyhjb2RlT2JqKSB7XG4gICAgdmFyIHBhcnRpYWxzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIGNvZGVPYmoucGFydGlhbHMpIHtcbiAgICAgIHBhcnRpYWxzLnB1c2goJ1wiJyArIGVzYyhrZXkpICsgJ1wiOntuYW1lOlwiJyArIGVzYyhjb2RlT2JqLnBhcnRpYWxzW2tleV0ubmFtZSkgKyAnXCIsICcgKyBzdHJpbmdpZnlQYXJ0aWFscyhjb2RlT2JqLnBhcnRpYWxzW2tleV0pICsgXCJ9XCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJwYXJ0aWFsczoge1wiICsgcGFydGlhbHMuam9pbihcIixcIikgKyBcIn0sIHN1YnM6IFwiICsgc3RyaW5naWZ5U3Vic3RpdHV0aW9ucyhjb2RlT2JqLnN1YnMpO1xuICB9XG5cbiAgSG9nYW4uc3RyaW5naWZ5ID0gZnVuY3Rpb24oY29kZU9iaiwgdGV4dCwgb3B0aW9ucykge1xuICAgIHJldHVybiBcIntjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgXCIgKyBIb2dhbi53cmFwTWFpbihjb2RlT2JqLmNvZGUpICsgXCIgfSxcIiArIHN0cmluZ2lmeVBhcnRpYWxzKGNvZGVPYmopICsgIFwifVwiO1xuICB9XG5cbiAgdmFyIHNlcmlhbE5vID0gMDtcbiAgSG9nYW4uZ2VuZXJhdGUgPSBmdW5jdGlvbih0cmVlLCB0ZXh0LCBvcHRpb25zKSB7XG4gICAgc2VyaWFsTm8gPSAwO1xuICAgIHZhciBjb250ZXh0ID0geyBjb2RlOiAnJywgc3Viczoge30sIHBhcnRpYWxzOiB7fSB9O1xuICAgIEhvZ2FuLndhbGsodHJlZSwgY29udGV4dCk7XG5cbiAgICBpZiAob3B0aW9ucy5hc1N0cmluZykge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaW5naWZ5KGNvbnRleHQsIHRleHQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm1ha2VUZW1wbGF0ZShjb250ZXh0LCB0ZXh0LCBvcHRpb25zKTtcbiAgfVxuXG4gIEhvZ2FuLndyYXBNYWluID0gZnVuY3Rpb24oY29kZSkge1xuICAgIHJldHVybiAndmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTsnICsgY29kZSArICdyZXR1cm4gdC5mbCgpOyc7XG4gIH1cblxuICBIb2dhbi50ZW1wbGF0ZSA9IEhvZ2FuLlRlbXBsYXRlO1xuXG4gIEhvZ2FuLm1ha2VUZW1wbGF0ZSA9IGZ1bmN0aW9uKGNvZGVPYmosIHRleHQsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGVtcGxhdGUgPSB0aGlzLm1ha2VQYXJ0aWFscyhjb2RlT2JqKTtcbiAgICB0ZW1wbGF0ZS5jb2RlID0gbmV3IEZ1bmN0aW9uKCdjJywgJ3AnLCAnaScsIHRoaXMud3JhcE1haW4oY29kZU9iai5jb2RlKSk7XG4gICAgcmV0dXJuIG5ldyB0aGlzLnRlbXBsYXRlKHRlbXBsYXRlLCB0ZXh0LCB0aGlzLCBvcHRpb25zKTtcbiAgfVxuXG4gIEhvZ2FuLm1ha2VQYXJ0aWFscyA9IGZ1bmN0aW9uKGNvZGVPYmopIHtcbiAgICB2YXIga2V5LCB0ZW1wbGF0ZSA9IHtzdWJzOiB7fSwgcGFydGlhbHM6IGNvZGVPYmoucGFydGlhbHMsIG5hbWU6IGNvZGVPYmoubmFtZX07XG4gICAgZm9yIChrZXkgaW4gdGVtcGxhdGUucGFydGlhbHMpIHtcbiAgICAgIHRlbXBsYXRlLnBhcnRpYWxzW2tleV0gPSB0aGlzLm1ha2VQYXJ0aWFscyh0ZW1wbGF0ZS5wYXJ0aWFsc1trZXldKTtcbiAgICB9XG4gICAgZm9yIChrZXkgaW4gY29kZU9iai5zdWJzKSB7XG4gICAgICB0ZW1wbGF0ZS5zdWJzW2tleV0gPSBuZXcgRnVuY3Rpb24oJ2MnLCAncCcsICd0JywgJ2knLCBjb2RlT2JqLnN1YnNba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzYyhzKSB7XG4gICAgcmV0dXJuIHMucmVwbGFjZShyU2xhc2gsICdcXFxcXFxcXCcpXG4gICAgICAgICAgICAucmVwbGFjZShyUXVvdCwgJ1xcXFxcXFwiJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHJOZXdsaW5lLCAnXFxcXG4nKVxuICAgICAgICAgICAgLnJlcGxhY2UockNyLCAnXFxcXHInKVxuICAgICAgICAgICAgLnJlcGxhY2UockxpbmVTZXAsICdcXFxcdTIwMjgnKVxuICAgICAgICAgICAgLnJlcGxhY2UoclBhcmFncmFwaFNlcCwgJ1xcXFx1MjAyOScpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hvb3NlTWV0aG9kKHMpIHtcbiAgICByZXR1cm4gKH5zLmluZGV4T2YoJy4nKSkgPyAnZCcgOiAnZic7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQYXJ0aWFsKG5vZGUsIGNvbnRleHQpIHtcbiAgICB2YXIgcHJlZml4ID0gXCI8XCIgKyAoY29udGV4dC5wcmVmaXggfHwgXCJcIik7XG4gICAgdmFyIHN5bSA9IHByZWZpeCArIG5vZGUubiArIHNlcmlhbE5vKys7XG4gICAgY29udGV4dC5wYXJ0aWFsc1tzeW1dID0ge25hbWU6IG5vZGUubiwgcGFydGlhbHM6IHt9fTtcbiAgICBjb250ZXh0LmNvZGUgKz0gJ3QuYih0LnJwKFwiJyArICBlc2Moc3ltKSArICdcIixjLHAsXCInICsgKG5vZGUuaW5kZW50IHx8ICcnKSArICdcIikpOyc7XG4gICAgcmV0dXJuIHN5bTtcbiAgfVxuXG4gIEhvZ2FuLmNvZGVnZW4gPSB7XG4gICAgJyMnOiBmdW5jdGlvbihub2RlLCBjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmNvZGUgKz0gJ2lmKHQucyh0LicgKyBjaG9vc2VNZXRob2Qobm9kZS5uKSArICcoXCInICsgZXNjKG5vZGUubikgKyAnXCIsYyxwLDEpLCcgK1xuICAgICAgICAgICAgICAgICAgICAgICdjLHAsMCwnICsgbm9kZS5pICsgJywnICsgbm9kZS5lbmQgKyAnLFwiJyArIG5vZGUub3RhZyArIFwiIFwiICsgbm9kZS5jdGFnICsgJ1wiKSl7JyArXG4gICAgICAgICAgICAgICAgICAgICAgJ3QucnMoYyxwLCcgKyAnZnVuY3Rpb24oYyxwLHQpeyc7XG4gICAgICBIb2dhbi53YWxrKG5vZGUubm9kZXMsIGNvbnRleHQpO1xuICAgICAgY29udGV4dC5jb2RlICs9ICd9KTtjLnBvcCgpO30nO1xuICAgIH0sXG5cbiAgICAnXic6IGZ1bmN0aW9uKG5vZGUsIGNvbnRleHQpIHtcbiAgICAgIGNvbnRleHQuY29kZSArPSAnaWYoIXQucyh0LicgKyBjaG9vc2VNZXRob2Qobm9kZS5uKSArICcoXCInICsgZXNjKG5vZGUubikgKyAnXCIsYyxwLDEpLGMscCwxLDAsMCxcIlwiKSl7JztcbiAgICAgIEhvZ2FuLndhbGsobm9kZS5ub2RlcywgY29udGV4dCk7XG4gICAgICBjb250ZXh0LmNvZGUgKz0gJ307JztcbiAgICB9LFxuXG4gICAgJz4nOiBjcmVhdGVQYXJ0aWFsLFxuICAgICc8JzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgdmFyIGN0eCA9IHtwYXJ0aWFsczoge30sIGNvZGU6ICcnLCBzdWJzOiB7fSwgaW5QYXJ0aWFsOiB0cnVlfTtcbiAgICAgIEhvZ2FuLndhbGsobm9kZS5ub2RlcywgY3R4KTtcbiAgICAgIHZhciB0ZW1wbGF0ZSA9IGNvbnRleHQucGFydGlhbHNbY3JlYXRlUGFydGlhbChub2RlLCBjb250ZXh0KV07XG4gICAgICB0ZW1wbGF0ZS5zdWJzID0gY3R4LnN1YnM7XG4gICAgICB0ZW1wbGF0ZS5wYXJ0aWFscyA9IGN0eC5wYXJ0aWFscztcbiAgICB9LFxuXG4gICAgJyQnOiBmdW5jdGlvbihub2RlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgY3R4ID0ge3N1YnM6IHt9LCBjb2RlOiAnJywgcGFydGlhbHM6IGNvbnRleHQucGFydGlhbHMsIHByZWZpeDogbm9kZS5ufTtcbiAgICAgIEhvZ2FuLndhbGsobm9kZS5ub2RlcywgY3R4KTtcbiAgICAgIGNvbnRleHQuc3Vic1tub2RlLm5dID0gY3R4LmNvZGU7XG4gICAgICBpZiAoIWNvbnRleHQuaW5QYXJ0aWFsKSB7XG4gICAgICAgIGNvbnRleHQuY29kZSArPSAndC5zdWIoXCInICsgZXNjKG5vZGUubikgKyAnXCIsYyxwLGkpOyc7XG4gICAgICB9XG4gICAgfSxcblxuICAgICdcXG4nOiBmdW5jdGlvbihub2RlLCBjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmNvZGUgKz0gd3JpdGUoJ1wiXFxcXG5cIicgKyAobm9kZS5sYXN0ID8gJycgOiAnICsgaScpKTtcbiAgICB9LFxuXG4gICAgJ192JzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgY29udGV4dC5jb2RlICs9ICd0LmIodC52KHQuJyArIGNob29zZU1ldGhvZChub2RlLm4pICsgJyhcIicgKyBlc2Mobm9kZS5uKSArICdcIixjLHAsMCkpKTsnO1xuICAgIH0sXG5cbiAgICAnX3QnOiBmdW5jdGlvbihub2RlLCBjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmNvZGUgKz0gd3JpdGUoJ1wiJyArIGVzYyhub2RlLnRleHQpICsgJ1wiJyk7XG4gICAgfSxcblxuICAgICd7JzogdHJpcGxlU3RhY2hlLFxuXG4gICAgJyYnOiB0cmlwbGVTdGFjaGVcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyaXBsZVN0YWNoZShub2RlLCBjb250ZXh0KSB7XG4gICAgY29udGV4dC5jb2RlICs9ICd0LmIodC50KHQuJyArIGNob29zZU1ldGhvZChub2RlLm4pICsgJyhcIicgKyBlc2Mobm9kZS5uKSArICdcIixjLHAsMCkpKTsnO1xuICB9XG5cbiAgZnVuY3Rpb24gd3JpdGUocykge1xuICAgIHJldHVybiAndC5iKCcgKyBzICsgJyk7JztcbiAgfVxuXG4gIEhvZ2FuLndhbGsgPSBmdW5jdGlvbihub2RlbGlzdCwgY29udGV4dCkge1xuICAgIHZhciBmdW5jO1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gbm9kZWxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmdW5jID0gSG9nYW4uY29kZWdlbltub2RlbGlzdFtpXS50YWddO1xuICAgICAgZnVuYyAmJiBmdW5jKG5vZGVsaXN0W2ldLCBjb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cblxuICBIb2dhbi5wYXJzZSA9IGZ1bmN0aW9uKHRva2VucywgdGV4dCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHJldHVybiBidWlsZFRyZWUodG9rZW5zLCAnJywgW10sIG9wdGlvbnMuc2VjdGlvblRhZ3MgfHwgW10pO1xuICB9XG5cbiAgSG9nYW4uY2FjaGUgPSB7fTtcblxuICBIb2dhbi5jYWNoZUtleSA9IGZ1bmN0aW9uKHRleHQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gW3RleHQsICEhb3B0aW9ucy5hc1N0cmluZywgISFvcHRpb25zLmRpc2FibGVMYW1iZGEsIG9wdGlvbnMuZGVsaW1pdGVycywgISFvcHRpb25zLm1vZGVsR2V0XS5qb2luKCd8fCcpO1xuICB9XG5cbiAgSG9nYW4uY29tcGlsZSA9IGZ1bmN0aW9uKHRleHQsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB2YXIga2V5ID0gSG9nYW4uY2FjaGVLZXkodGV4dCwgb3B0aW9ucyk7XG4gICAgdmFyIHRlbXBsYXRlID0gdGhpcy5jYWNoZVtrZXldO1xuXG4gICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICB2YXIgcGFydGlhbHMgPSB0ZW1wbGF0ZS5wYXJ0aWFscztcbiAgICAgIGZvciAodmFyIG5hbWUgaW4gcGFydGlhbHMpIHtcbiAgICAgICAgZGVsZXRlIHBhcnRpYWxzW25hbWVdLmluc3RhbmNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgIH1cblxuICAgIHRlbXBsYXRlID0gdGhpcy5nZW5lcmF0ZSh0aGlzLnBhcnNlKHRoaXMuc2Nhbih0ZXh0LCBvcHRpb25zLmRlbGltaXRlcnMpLCB0ZXh0LCBvcHRpb25zKSwgdGV4dCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVba2V5XSA9IHRlbXBsYXRlO1xuICB9XG59KSh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcgPyBleHBvcnRzIDogSG9nYW4pO1xuIiwiLypcbiAqICBDb3B5cmlnaHQgMjAxMSBUd2l0dGVyLCBJbmMuXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBUaGlzIGZpbGUgaXMgZm9yIHVzZSB3aXRoIE5vZGUuanMuIFNlZSBkaXN0LyBmb3IgYnJvd3NlciBmaWxlcy5cblxudmFyIEhvZ2FuID0gcmVxdWlyZSgnLi9jb21waWxlcicpO1xuSG9nYW4uVGVtcGxhdGUgPSByZXF1aXJlKCcuL3RlbXBsYXRlJykuVGVtcGxhdGU7XG5Ib2dhbi50ZW1wbGF0ZSA9IEhvZ2FuLlRlbXBsYXRlO1xubW9kdWxlLmV4cG9ydHMgPSBIb2dhbjtcbiIsIi8qXG4gKiAgQ29weXJpZ2h0IDIwMTEgVHdpdHRlciwgSW5jLlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxudmFyIEhvZ2FuID0ge307XG5cbihmdW5jdGlvbiAoSG9nYW4pIHtcbiAgSG9nYW4uVGVtcGxhdGUgPSBmdW5jdGlvbiAoY29kZU9iaiwgdGV4dCwgY29tcGlsZXIsIG9wdGlvbnMpIHtcbiAgICBjb2RlT2JqID0gY29kZU9iaiB8fCB7fTtcbiAgICB0aGlzLnIgPSBjb2RlT2JqLmNvZGUgfHwgdGhpcy5yO1xuICAgIHRoaXMuYyA9IGNvbXBpbGVyO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy50ZXh0ID0gdGV4dCB8fCAnJztcbiAgICB0aGlzLnBhcnRpYWxzID0gY29kZU9iai5wYXJ0aWFscyB8fCB7fTtcbiAgICB0aGlzLnN1YnMgPSBjb2RlT2JqLnN1YnMgfHwge307XG4gICAgdGhpcy5idWYgPSAnJztcbiAgfVxuXG4gIEhvZ2FuLlRlbXBsYXRlLnByb3RvdHlwZSA9IHtcbiAgICAvLyByZW5kZXI6IHJlcGxhY2VkIGJ5IGdlbmVyYXRlZCBjb2RlLlxuICAgIHI6IGZ1bmN0aW9uIChjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KSB7IHJldHVybiAnJzsgfSxcblxuICAgIC8vIHZhcmlhYmxlIGVzY2FwaW5nXG4gICAgdjogaG9nYW5Fc2NhcGUsXG5cbiAgICAvLyB0cmlwbGUgc3RhY2hlXG4gICAgdDogY29lcmNlVG9TdHJpbmcsXG5cbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5yaShbY29udGV4dF0sIHBhcnRpYWxzIHx8IHt9LCBpbmRlbnQpO1xuICAgIH0sXG5cbiAgICAvLyByZW5kZXIgaW50ZXJuYWwgLS0gYSBob29rIGZvciBvdmVycmlkZXMgdGhhdCBjYXRjaGVzIHBhcnRpYWxzIHRvb1xuICAgIHJpOiBmdW5jdGlvbiAoY29udGV4dCwgcGFydGlhbHMsIGluZGVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucihjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KTtcbiAgICB9LFxuXG4gICAgLy8gZW5zdXJlUGFydGlhbFxuICAgIGVwOiBmdW5jdGlvbihzeW1ib2wsIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgcGFydGlhbCA9IHRoaXMucGFydGlhbHNbc3ltYm9sXTtcblxuICAgICAgLy8gY2hlY2sgdG8gc2VlIHRoYXQgaWYgd2UndmUgaW5zdGFudGlhdGVkIHRoaXMgcGFydGlhbCBiZWZvcmVcbiAgICAgIHZhciB0ZW1wbGF0ZSA9IHBhcnRpYWxzW3BhcnRpYWwubmFtZV07XG4gICAgICBpZiAocGFydGlhbC5pbnN0YW5jZSAmJiBwYXJ0aWFsLmJhc2UgPT0gdGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuIHBhcnRpYWwuaW5zdGFuY2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGVtcGxhdGUgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKCF0aGlzLmMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21waWxlciBhdmFpbGFibGUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRlbXBsYXRlID0gdGhpcy5jLmNvbXBpbGUodGVtcGxhdGUsIHRoaXMub3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIHVzZSB0aGlzIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHBhcnRpYWxzIGRpY3Rpb25hcnkgaGFzIGNoYW5nZWRcbiAgICAgIHRoaXMucGFydGlhbHNbc3ltYm9sXS5iYXNlID0gdGVtcGxhdGU7XG5cbiAgICAgIGlmIChwYXJ0aWFsLnN1YnMpIHtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGNvbnNpZGVyIHBhcmVudCB0ZW1wbGF0ZSBub3dcbiAgICAgICAgaWYgKCFwYXJ0aWFscy5zdGFja1RleHQpIHBhcnRpYWxzLnN0YWNrVGV4dCA9IHt9O1xuICAgICAgICBmb3IgKGtleSBpbiBwYXJ0aWFsLnN1YnMpIHtcbiAgICAgICAgICBpZiAoIXBhcnRpYWxzLnN0YWNrVGV4dFtrZXldKSB7XG4gICAgICAgICAgICBwYXJ0aWFscy5zdGFja1RleHRba2V5XSA9ICh0aGlzLmFjdGl2ZVN1YiAhPT0gdW5kZWZpbmVkICYmIHBhcnRpYWxzLnN0YWNrVGV4dFt0aGlzLmFjdGl2ZVN1Yl0pID8gcGFydGlhbHMuc3RhY2tUZXh0W3RoaXMuYWN0aXZlU3ViXSA6IHRoaXMudGV4dDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGVtcGxhdGUgPSBjcmVhdGVTcGVjaWFsaXplZFBhcnRpYWwodGVtcGxhdGUsIHBhcnRpYWwuc3VicywgcGFydGlhbC5wYXJ0aWFscyxcbiAgICAgICAgICB0aGlzLnN0YWNrU3VicywgdGhpcy5zdGFja1BhcnRpYWxzLCBwYXJ0aWFscy5zdGFja1RleHQpO1xuICAgICAgfVxuICAgICAgdGhpcy5wYXJ0aWFsc1tzeW1ib2xdLmluc3RhbmNlID0gdGVtcGxhdGU7XG5cbiAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICB9LFxuXG4gICAgLy8gdHJpZXMgdG8gZmluZCBhIHBhcnRpYWwgaW4gdGhlIGN1cnJlbnQgc2NvcGUgYW5kIHJlbmRlciBpdFxuICAgIHJwOiBmdW5jdGlvbihzeW1ib2wsIGNvbnRleHQsIHBhcnRpYWxzLCBpbmRlbnQpIHtcbiAgICAgIHZhciBwYXJ0aWFsID0gdGhpcy5lcChzeW1ib2wsIHBhcnRpYWxzKTtcbiAgICAgIGlmICghcGFydGlhbCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJ0aWFsLnJpKGNvbnRleHQsIHBhcnRpYWxzLCBpbmRlbnQpO1xuICAgIH0sXG5cbiAgICAvLyByZW5kZXIgYSBzZWN0aW9uXG4gICAgcnM6IGZ1bmN0aW9uKGNvbnRleHQsIHBhcnRpYWxzLCBzZWN0aW9uKSB7XG4gICAgICB2YXIgdGFpbCA9IGNvbnRleHRbY29udGV4dC5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKCFpc0FycmF5KHRhaWwpKSB7XG4gICAgICAgIHNlY3Rpb24oY29udGV4dCwgcGFydGlhbHMsIHRoaXMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFpbC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb250ZXh0LnB1c2godGFpbFtpXSk7XG4gICAgICAgIHNlY3Rpb24oY29udGV4dCwgcGFydGlhbHMsIHRoaXMpO1xuICAgICAgICBjb250ZXh0LnBvcCgpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBtYXliZSBzdGFydCBhIHNlY3Rpb25cbiAgICBzOiBmdW5jdGlvbih2YWwsIGN0eCwgcGFydGlhbHMsIGludmVydGVkLCBzdGFydCwgZW5kLCB0YWdzKSB7XG4gICAgICB2YXIgcGFzcztcblxuICAgICAgaWYgKGlzQXJyYXkodmFsKSAmJiB2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWwgPSB0aGlzLm1zKHZhbCwgY3R4LCBwYXJ0aWFscywgaW52ZXJ0ZWQsIHN0YXJ0LCBlbmQsIHRhZ3MpO1xuICAgICAgfVxuXG4gICAgICBwYXNzID0gISF2YWw7XG5cbiAgICAgIGlmICghaW52ZXJ0ZWQgJiYgcGFzcyAmJiBjdHgpIHtcbiAgICAgICAgY3R4LnB1c2goKHR5cGVvZiB2YWwgPT0gJ29iamVjdCcpID8gdmFsIDogY3R4W2N0eC5sZW5ndGggLSAxXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXNzO1xuICAgIH0sXG5cbiAgICAvLyBmaW5kIHZhbHVlcyB3aXRoIGRvdHRlZCBuYW1lc1xuICAgIGQ6IGZ1bmN0aW9uKGtleSwgY3R4LCBwYXJ0aWFscywgcmV0dXJuRm91bmQpIHtcbiAgICAgIHZhciBmb3VuZCxcbiAgICAgICAgICBuYW1lcyA9IGtleS5zcGxpdCgnLicpLFxuICAgICAgICAgIHZhbCA9IHRoaXMuZihuYW1lc1swXSwgY3R4LCBwYXJ0aWFscywgcmV0dXJuRm91bmQpLFxuICAgICAgICAgIGRvTW9kZWxHZXQgPSB0aGlzLm9wdGlvbnMubW9kZWxHZXQsXG4gICAgICAgICAgY3ggPSBudWxsO1xuXG4gICAgICBpZiAoa2V5ID09PSAnLicgJiYgaXNBcnJheShjdHhbY3R4Lmxlbmd0aCAtIDJdKSkge1xuICAgICAgICB2YWwgPSBjdHhbY3R4Lmxlbmd0aCAtIDFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGZvdW5kID0gZmluZEluU2NvcGUobmFtZXNbaV0sIHZhbCwgZG9Nb2RlbEdldCk7XG4gICAgICAgICAgaWYgKGZvdW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGN4ID0gdmFsO1xuICAgICAgICAgICAgdmFsID0gZm91bmQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbCA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmV0dXJuRm91bmQgJiYgIXZhbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghcmV0dXJuRm91bmQgJiYgdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGN0eC5wdXNoKGN4KTtcbiAgICAgICAgdmFsID0gdGhpcy5tdih2YWwsIGN0eCwgcGFydGlhbHMpO1xuICAgICAgICBjdHgucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIC8vIGZpbmQgdmFsdWVzIHdpdGggbm9ybWFsIG5hbWVzXG4gICAgZjogZnVuY3Rpb24oa2V5LCBjdHgsIHBhcnRpYWxzLCByZXR1cm5Gb3VuZCkge1xuICAgICAgdmFyIHZhbCA9IGZhbHNlLFxuICAgICAgICAgIHYgPSBudWxsLFxuICAgICAgICAgIGZvdW5kID0gZmFsc2UsXG4gICAgICAgICAgZG9Nb2RlbEdldCA9IHRoaXMub3B0aW9ucy5tb2RlbEdldDtcblxuICAgICAgZm9yICh2YXIgaSA9IGN0eC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICB2ID0gY3R4W2ldO1xuICAgICAgICB2YWwgPSBmaW5kSW5TY29wZShrZXksIHYsIGRvTW9kZWxHZXQpO1xuICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICByZXR1cm4gKHJldHVybkZvdW5kKSA/IGZhbHNlIDogXCJcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXR1cm5Gb3VuZCAmJiB0eXBlb2YgdmFsID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFsID0gdGhpcy5tdih2YWwsIGN0eCwgcGFydGlhbHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICAvLyBoaWdoZXIgb3JkZXIgdGVtcGxhdGVzXG4gICAgbHM6IGZ1bmN0aW9uKGZ1bmMsIGN4LCBwYXJ0aWFscywgdGV4dCwgdGFncykge1xuICAgICAgdmFyIG9sZFRhZ3MgPSB0aGlzLm9wdGlvbnMuZGVsaW1pdGVycztcblxuICAgICAgdGhpcy5vcHRpb25zLmRlbGltaXRlcnMgPSB0YWdzO1xuICAgICAgdGhpcy5iKHRoaXMuY3QoY29lcmNlVG9TdHJpbmcoZnVuYy5jYWxsKGN4LCB0ZXh0KSksIGN4LCBwYXJ0aWFscykpO1xuICAgICAgdGhpcy5vcHRpb25zLmRlbGltaXRlcnMgPSBvbGRUYWdzO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIC8vIGNvbXBpbGUgdGV4dFxuICAgIGN0OiBmdW5jdGlvbih0ZXh0LCBjeCwgcGFydGlhbHMpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZUxhbWJkYSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xhbWJkYSBmZWF0dXJlcyBkaXNhYmxlZC4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmMuY29tcGlsZSh0ZXh0LCB0aGlzLm9wdGlvbnMpLnJlbmRlcihjeCwgcGFydGlhbHMpO1xuICAgIH0sXG5cbiAgICAvLyB0ZW1wbGF0ZSByZXN1bHQgYnVmZmVyaW5nXG4gICAgYjogZnVuY3Rpb24ocykgeyB0aGlzLmJ1ZiArPSBzOyB9LFxuXG4gICAgZmw6IGZ1bmN0aW9uKCkgeyB2YXIgciA9IHRoaXMuYnVmOyB0aGlzLmJ1ZiA9ICcnOyByZXR1cm4gcjsgfSxcblxuICAgIC8vIG1ldGhvZCByZXBsYWNlIHNlY3Rpb25cbiAgICBtczogZnVuY3Rpb24oZnVuYywgY3R4LCBwYXJ0aWFscywgaW52ZXJ0ZWQsIHN0YXJ0LCBlbmQsIHRhZ3MpIHtcbiAgICAgIHZhciB0ZXh0U291cmNlLFxuICAgICAgICAgIGN4ID0gY3R4W2N0eC5sZW5ndGggLSAxXSxcbiAgICAgICAgICByZXN1bHQgPSBmdW5jLmNhbGwoY3gpO1xuXG4gICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChpbnZlcnRlZCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRleHRTb3VyY2UgPSAodGhpcy5hY3RpdmVTdWIgJiYgdGhpcy5zdWJzVGV4dCAmJiB0aGlzLnN1YnNUZXh0W3RoaXMuYWN0aXZlU3ViXSkgPyB0aGlzLnN1YnNUZXh0W3RoaXMuYWN0aXZlU3ViXSA6IHRoaXMudGV4dDtcbiAgICAgICAgICByZXR1cm4gdGhpcy5scyhyZXN1bHQsIGN4LCBwYXJ0aWFscywgdGV4dFNvdXJjZS5zdWJzdHJpbmcoc3RhcnQsIGVuZCksIHRhZ3MpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIC8vIG1ldGhvZCByZXBsYWNlIHZhcmlhYmxlXG4gICAgbXY6IGZ1bmN0aW9uKGZ1bmMsIGN0eCwgcGFydGlhbHMpIHtcbiAgICAgIHZhciBjeCA9IGN0eFtjdHgubGVuZ3RoIC0gMV07XG4gICAgICB2YXIgcmVzdWx0ID0gZnVuYy5jYWxsKGN4KTtcblxuICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdGhpcy5jdChjb2VyY2VUb1N0cmluZyhyZXN1bHQuY2FsbChjeCkpLCBjeCwgcGFydGlhbHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBzdWI6IGZ1bmN0aW9uKG5hbWUsIGNvbnRleHQsIHBhcnRpYWxzLCBpbmRlbnQpIHtcbiAgICAgIHZhciBmID0gdGhpcy5zdWJzW25hbWVdO1xuICAgICAgaWYgKGYpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVTdWIgPSBuYW1lO1xuICAgICAgICBmKGNvbnRleHQsIHBhcnRpYWxzLCB0aGlzLCBpbmRlbnQpO1xuICAgICAgICB0aGlzLmFjdGl2ZVN1YiA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICB9O1xuXG4gIC8vRmluZCBhIGtleSBpbiBhbiBvYmplY3RcbiAgZnVuY3Rpb24gZmluZEluU2NvcGUoa2V5LCBzY29wZSwgZG9Nb2RlbEdldCkge1xuICAgIHZhciB2YWw7XG5cbiAgICBpZiAoc2NvcGUgJiYgdHlwZW9mIHNjb3BlID09ICdvYmplY3QnKSB7XG5cbiAgICAgIGlmIChzY29wZVtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsID0gc2NvcGVba2V5XTtcblxuICAgICAgLy8gdHJ5IGxvb2t1cCB3aXRoIGdldCBmb3IgYmFja2JvbmUgb3Igc2ltaWxhciBtb2RlbCBkYXRhXG4gICAgICB9IGVsc2UgaWYgKGRvTW9kZWxHZXQgJiYgc2NvcGUuZ2V0ICYmIHR5cGVvZiBzY29wZS5nZXQgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWwgPSBzY29wZS5nZXQoa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3BlY2lhbGl6ZWRQYXJ0aWFsKGluc3RhbmNlLCBzdWJzLCBwYXJ0aWFscywgc3RhY2tTdWJzLCBzdGFja1BhcnRpYWxzLCBzdGFja1RleHQpIHtcbiAgICBmdW5jdGlvbiBQYXJ0aWFsVGVtcGxhdGUoKSB7fTtcbiAgICBQYXJ0aWFsVGVtcGxhdGUucHJvdG90eXBlID0gaW5zdGFuY2U7XG4gICAgZnVuY3Rpb24gU3Vic3RpdHV0aW9ucygpIHt9O1xuICAgIFN1YnN0aXR1dGlvbnMucHJvdG90eXBlID0gaW5zdGFuY2Uuc3VicztcbiAgICB2YXIga2V5O1xuICAgIHZhciBwYXJ0aWFsID0gbmV3IFBhcnRpYWxUZW1wbGF0ZSgpO1xuICAgIHBhcnRpYWwuc3VicyA9IG5ldyBTdWJzdGl0dXRpb25zKCk7XG4gICAgcGFydGlhbC5zdWJzVGV4dCA9IHt9OyAgLy9oZWhlLiBzdWJzdGV4dC5cbiAgICBwYXJ0aWFsLmJ1ZiA9ICcnO1xuXG4gICAgc3RhY2tTdWJzID0gc3RhY2tTdWJzIHx8IHt9O1xuICAgIHBhcnRpYWwuc3RhY2tTdWJzID0gc3RhY2tTdWJzO1xuICAgIHBhcnRpYWwuc3Vic1RleHQgPSBzdGFja1RleHQ7XG4gICAgZm9yIChrZXkgaW4gc3Vicykge1xuICAgICAgaWYgKCFzdGFja1N1YnNba2V5XSkgc3RhY2tTdWJzW2tleV0gPSBzdWJzW2tleV07XG4gICAgfVxuICAgIGZvciAoa2V5IGluIHN0YWNrU3Vicykge1xuICAgICAgcGFydGlhbC5zdWJzW2tleV0gPSBzdGFja1N1YnNba2V5XTtcbiAgICB9XG5cbiAgICBzdGFja1BhcnRpYWxzID0gc3RhY2tQYXJ0aWFscyB8fCB7fTtcbiAgICBwYXJ0aWFsLnN0YWNrUGFydGlhbHMgPSBzdGFja1BhcnRpYWxzO1xuICAgIGZvciAoa2V5IGluIHBhcnRpYWxzKSB7XG4gICAgICBpZiAoIXN0YWNrUGFydGlhbHNba2V5XSkgc3RhY2tQYXJ0aWFsc1trZXldID0gcGFydGlhbHNba2V5XTtcbiAgICB9XG4gICAgZm9yIChrZXkgaW4gc3RhY2tQYXJ0aWFscykge1xuICAgICAgcGFydGlhbC5wYXJ0aWFsc1trZXldID0gc3RhY2tQYXJ0aWFsc1trZXldO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0aWFsO1xuICB9XG5cbiAgdmFyIHJBbXAgPSAvJi9nLFxuICAgICAgckx0ID0gLzwvZyxcbiAgICAgIHJHdCA9IC8+L2csXG4gICAgICByQXBvcyA9IC9cXCcvZyxcbiAgICAgIHJRdW90ID0gL1xcXCIvZyxcbiAgICAgIGhDaGFycyA9IC9bJjw+XFxcIlxcJ10vO1xuXG4gIGZ1bmN0aW9uIGNvZXJjZVRvU3RyaW5nKHZhbCkge1xuICAgIHJldHVybiBTdHJpbmcoKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgPyAnJyA6IHZhbCk7XG4gIH1cblxuICBmdW5jdGlvbiBob2dhbkVzY2FwZShzdHIpIHtcbiAgICBzdHIgPSBjb2VyY2VUb1N0cmluZyhzdHIpO1xuICAgIHJldHVybiBoQ2hhcnMudGVzdChzdHIpID9cbiAgICAgIHN0clxuICAgICAgICAucmVwbGFjZShyQW1wLCAnJmFtcDsnKVxuICAgICAgICAucmVwbGFjZShyTHQsICcmbHQ7JylcbiAgICAgICAgLnJlcGxhY2Uockd0LCAnJmd0OycpXG4gICAgICAgIC5yZXBsYWNlKHJBcG9zLCAnJiMzOTsnKVxuICAgICAgICAucmVwbGFjZShyUXVvdCwgJyZxdW90OycpIDpcbiAgICAgIHN0cjtcbiAgfVxuXG4gIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbihhKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxufSkodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnID8gZXhwb3J0cyA6IEhvZ2FuKTtcbiIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGxpXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBpZD1cXFwiYXBwZWFyYW5jZS1pdGVtLVwiKTt0LmIodC52KHQuZihcIml0ZW1pZFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW0gZ3JvdXAtXCIpO3QuYih0LnYodC5mKFwiZ3JvdXBcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBkYXRhLWl0ZW1pZD1cXFwiXCIpO3QuYih0LnYodC5mKFwiaXRlbWlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgZGF0YS1uYW1lPVxcXCJcIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgZGF0YS1yYXJpdHk9XFxcIlwiKTt0LmIodC52KHQuZihcInJhcml0eVwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGRhdGEtcmFyaXR5bmFtZT1cXFwiXCIpO3QuYih0LnYodC5mKFwicmFyaXR5bmFtZVwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8ZGl2IGNsYXNzPVxcXCJyYXJpdHktbWFya2VyLVwiKTt0LmIodC52KHQuZihcInJhcml0eVwiLGMscCwwKSkpO3QuYihcIlxcXCI+PC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8aW1nIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW0taWNvblxcXCIgc3JjPVxcXCJcIik7dC5iKHQudih0LmYoXCJpY29uXCIsYyxwLDApKSk7dC5iKFwiXFxcIiAvPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvbGk+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGxpXFxuICBpZD1cXFwiYXBwZWFyYW5jZS1pdGVtLXt7aXRlbWlkfX1cXFwiXFxuICBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtIGdyb3VwLXt7Z3JvdXB9fVxcXCJcXG4gIGRhdGEtaXRlbWlkPVxcXCJ7e2l0ZW1pZH19XFxcIlxcbiAgZGF0YS1uYW1lPVxcXCJ7e25hbWV9fVxcXCJcXG4gIGRhdGEtcmFyaXR5PVxcXCJ7e3Jhcml0eX19XFxcIlxcbiAgZGF0YS1yYXJpdHluYW1lPVxcXCJ7e3Jhcml0eW5hbWV9fVxcXCJcXG4+XFxuICA8ZGl2IGNsYXNzPVxcXCJyYXJpdHktbWFya2VyLXt7cmFyaXR5fX1cXFwiPjwvZGl2PlxcbiAgPGltZyBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtLWljb25cXFwiIHNyYz1cXFwie3tpY29ufX1cXFwiIC8+XFxuPC9saT5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxkaXZcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGlkPVxcXCJlZS1jYXRlZ29yeVxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5IGFjdGl2ZVxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGRhdGEtY2F0ZWdvcnk9XFxcIlwiKTt0LmIodC52KHQuZihcImNhdGVnb3J5XCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgZGF0YS1jYXRlZ29yeWlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJjYXRlZ29yeWlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxzdHlsZT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgI2VlLWl0ZW1zIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBzY3JvbGxiYXItY29sb3I6IGRhcms7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L3N0eWxlPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPHVsXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWxpc3RcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGlkPVxcXCJlZS1pdGVtc1xcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgc3R5bGU9XFxcIm1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA1NjVweClcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIFwiKTt0LmIodC50KHQuZihcIml0ZW1zXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvdWw+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPCEtLSBJbmZvIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGRpdiBpZD1cXFwiZWUtaW5mb1xcXCIgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbXMtaW5mb1xcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtaW5mby10aXBzXFxcIj48L2Rpdj5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxoMyBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtLWluZm8tbmFtZVxcXCI+PC9oMz5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbS1pbmZvLWd1YXJkXFxcIj48L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGRpdiBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtLWluZm8tcmFyaXR5XFxcIj48L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGRpdiBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtLWluZm8tYnV0dG9uc1xcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPGRpdiBjbGFzcz1cXFwiYXBwZWFyYW5jZS1mb3J3YXJkIG5sLWJ1dHRvblxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuYXBwZWFyYW5jZS5idXR0b25zLmZvcndhcmRcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtYmFja3dhcmQgbmwtYnV0dG9uXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hcHBlYXJhbmNlLmJ1dHRvbnMuYmFja3dhcmRcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxkaXZcXG4gIGlkPVxcXCJlZS1jYXRlZ29yeVxcXCJcXG4gIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5IGFjdGl2ZVxcXCJcXG4gIGRhdGEtY2F0ZWdvcnk9XFxcInt7Y2F0ZWdvcnl9fVxcXCJcXG4gIGRhdGEtY2F0ZWdvcnlpZD1cXFwie3tjYXRlZ29yeWlkfX1cXFwiXFxuPlxcbiAgPHN0eWxlPlxcbiAgICAjZWUtaXRlbXMge1xcbiAgICAgIHNjcm9sbGJhci1jb2xvcjogZGFyaztcXG4gICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XFxuICAgIH1cXG4gIDwvc3R5bGU+XFxuICA8dWxcXG4gICAgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbXMtbGlzdFxcXCJcXG4gICAgaWQ9XFxcImVlLWl0ZW1zXFxcIlxcbiAgICBzdHlsZT1cXFwibWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDU2NXB4KVxcXCJcXG4gID5cXG4gICAge3t7aXRlbXN9fX1cXG4gIDwvdWw+XFxuXFxuICA8IS0tIEluZm8gLS0+XFxuICA8ZGl2IGlkPVxcXCJlZS1pbmZvXFxcIiBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtcy1pbmZvXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pbmZvLXRpcHNcXFwiPjwvZGl2PlxcblxcbiAgICA8aDMgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbS1pbmZvLW5hbWVcXFwiPjwvaDM+XFxuXFxuICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbS1pbmZvLWd1YXJkXFxcIj48L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtLWluZm8tcmFyaXR5XFxcIj48L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtLWluZm8tYnV0dG9uc1xcXCI+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiYXBwZWFyYW5jZS1mb3J3YXJkIG5sLWJ1dHRvblxcXCI+XFxuICAgICAgICB7e3RyYW5zbGF0ZS5hcHBlYXJhbmNlLmJ1dHRvbnMuZm9yd2FyZH19XFxuICAgICAgPC9kaXY+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiYXBwZWFyYW5jZS1iYWNrd2FyZCBubC1idXR0b25cXFwiPlxcbiAgICAgICAge3t0cmFuc2xhdGUuYXBwZWFyYW5jZS5idXR0b25zLmJhY2t3YXJkfX1cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICA8L2Rpdj5cXG48L2Rpdj5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxkaXZcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGlkPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWdyb3VwLVwiKTt0LmIodC52KHQuZihcImdyb3VwXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnlcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBkYXRhLWNhdGVnb3J5aWQ9XFxcIlwiKTt0LmIodC52KHQuZihcImNhdGVnb3J5aWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBkYXRhLWNhdGVnb3J5PVxcXCJcIik7dC5iKHQudih0LmYoXCJjYXRlZ29yeVwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8dWwgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbXMtbGlzdFxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIFwiKTt0LmIodC50KHQuZihcIml0ZW1zXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvdWw+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGRpdlxcbiAgaWQ9XFxcImFwcGVhcmFuY2UtaXRlbXMtZ3JvdXAte3tncm91cH19XFxcIlxcbiAgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnlcXFwiXFxuICBkYXRhLWNhdGVnb3J5aWQ9XFxcInt7Y2F0ZWdvcnlpZH19XFxcIlxcbiAgZGF0YS1jYXRlZ29yeT1cXFwie3tjYXRlZ29yeX19XFxcIlxcbj5cXG4gIDx1bCBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtcy1saXN0XFxcIj5cXG4gICAge3t7aXRlbXN9fX1cXG4gIDwvdWw+XFxuPC9kaXY+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8ZGl2XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBpZD1cXFwibWFya2V0cGxhY2UtaXRlbURldGFpbC1pbmZvLWF1dG9idXlcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW46IDIwcHggYXV0b1xcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8ZGl2IGNsYXNzPVxcXCJubC1idXR0b25cXFwiPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYWRkX3RvX3dpc2hsaXN0LnRpdGxlXCIsYyxwLDApKSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGRpdlxcbiAgaWQ9XFxcIm1hcmtldHBsYWNlLWl0ZW1EZXRhaWwtaW5mby1hdXRvYnV5XFxcIlxcbiAgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luOiAyMHB4IGF1dG9cXFwiXFxuPlxcbiAgPGRpdiBjbGFzcz1cXFwibmwtYnV0dG9uXFxcIj57e3RyYW5zbGF0ZS5tYXJrZXQuYWRkX3RvX3dpc2hsaXN0LnRpdGxlfX08L2Rpdj5cXG48L2Rpdj5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxoMT5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0LmFkZF90b193aXNobGlzdC50aXRsZVwiLGMscCwwKSkpO3QuYihcIjwvaDE+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPHA+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5hZGRfdG9fd2lzaGxpc3QudGV4dFwiLGMscCwwKSkpO3QuYihcIjwvcD5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8aDE+e3t0cmFuc2xhdGUubWFya2V0LmFkZF90b193aXNobGlzdC50aXRsZX19PC9oMT5cXG48cD57e3RyYW5zbGF0ZS5tYXJrZXQuYWRkX3RvX3dpc2hsaXN0LnRleHR9fTwvcD5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxoMT5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFsbC5hZGRfdG9fd2lzaGxpc3QudGl0bGVcIixjLHAsMCkpKTt0LmIoXCI8L2gxPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjxwPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYWxsLmFkZF90b193aXNobGlzdC50ZXh0XCIsYyxwLDApKSk7dC5iKFwiPC9wPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjxwIHN0eWxlPVxcXCJmb250LXNpemU6IDE0cHhcXFwiPjxlbT5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFsbC5hZGRfdG9fd2lzaGxpc3Qubm90ZVwiLGMscCwwKSkpO3QuYihcIjwvZW0+PC9wPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxoMT57e3RyYW5zbGF0ZS5tYWxsLmFkZF90b193aXNobGlzdC50aXRsZX19PC9oMT5cXG48cD57e3RyYW5zbGF0ZS5tYWxsLmFkZF90b193aXNobGlzdC50ZXh0fX08L3A+XFxuPHAgc3R5bGU9XFxcImZvbnQtc2l6ZTogMTRweFxcXCI+PGVtPnt7dHJhbnNsYXRlLm1hbGwuYWRkX3RvX3dpc2hsaXN0Lm5vdGV9fTwvZW0+PC9wPlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGJ1dHRvblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgaWQ9XFxcImF1dG8tZXhwbG9yZS1idXR0b25cXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBjbGFzcz1cXFwibmwtYnV0dG9uIFwiKTtpZih0LnModC5mKFwiYWN0aXZlXCIsYyxwLDEpLGMscCwwLDY1LDcxLFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCJhY3RpdmVcIik7fSk7Yy5wb3AoKTt9dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgZGF0YS1pZD1cXFwiXCIpO3QuYih0LnYodC5mKFwibG9jYXRpb25JZFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGRhdGEtbWFwaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcInJlZ2lvbklkXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5wZXQuYXV0b19leHBsb3JlXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2J1dHRvbj5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8YnV0dG9uXFxuICBpZD1cXFwiYXV0by1leHBsb3JlLWJ1dHRvblxcXCJcXG4gIGNsYXNzPVxcXCJubC1idXR0b24ge3sjYWN0aXZlfX1hY3RpdmV7ey9hY3RpdmV9fVxcXCJcXG4gIGRhdGEtaWQ9XFxcInt7bG9jYXRpb25JZH19XFxcIlxcbiAgZGF0YS1tYXBpZD1cXFwie3tyZWdpb25JZH19XFxcIlxcbj5cXG4gIHt7dHJhbnNsYXRlLnBldC5hdXRvX2V4cGxvcmV9fVxcbjwvYnV0dG9uPlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGFcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJpZFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGNsYXNzPVxcXCJjYXJvdXNlbC1uZXdzIGNhcm91c2VsLWVlXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgaHJlZj1cXFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgc3R5bGU9XFxcImJhY2tncm91bmQtaW1hZ2U6IHVybChcIik7dC5iKHQudih0LmYoXCJiYWNrZ3JvdW5kSW1hZ2VcIixjLHAsMCkpKTt0LmIoXCIpXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxkaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxoND5cIik7dC5iKHQudih0LmYoXCJoNFwiLGMscCwwKSkpO3QuYihcIjwvaDQ+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxoNT5cIik7dC5iKHQudih0LmYoXCJoNVwiLGMscCwwKSkpO3QuYihcIjwvaDU+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxwPlwiKTt0LmIodC52KHQuZihcInBcIixjLHAsMCkpKTt0LmIoXCI8L3A+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2E+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGFcXG4gIGlkPVxcXCJ7e2lkfX1cXFwiXFxuICBjbGFzcz1cXFwiY2Fyb3VzZWwtbmV3cyBjYXJvdXNlbC1lZVxcXCJcXG4gIGhyZWY9XFxcIlxcXCJcXG4gIHN0eWxlPVxcXCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoe3tiYWNrZ3JvdW5kSW1hZ2V9fSlcXFwiXFxuPlxcbiAgPGRpdj5cXG4gICAgPGg0Pnt7aDR9fTwvaDQ+XFxuICAgIDxoNT57e2g1fX08L2g1PlxcbiAgICA8cD57e3B9fTwvcD5cXG4gIDwvZGl2PlxcbjwvYT5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxoMT5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0LmNoYW5nZV9wcmljZS50aXRsZVwiLGMscCwwKSkpO3QuYihcIjwvaDE+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPHA+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5jaGFuZ2VfcHJpY2UudGV4dFwiLGMscCwwKSkpO3QuYihcIjwvcD5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8aDE+e3t0cmFuc2xhdGUubWFya2V0LmNoYW5nZV9wcmljZS50aXRsZX19PC9oMT5cXG48cD57e3RyYW5zbGF0ZS5tYXJrZXQuY2hhbmdlX3ByaWNlLnRleHR9fTwvcD5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxoMT5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLnNhdmVfb3V0Zml0LnRpdGxlXCIsYyxwLDApKSk7dC5iKFwiPC9oMT5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPHA+XCIpO3QuYih0LnQodC5kKFwidHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5zYXZlX291dGZpdC5zYXZlZF9sb2NhbGx5XCIsYyxwLDApKSk7dC5iKFwiPC9wPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8YnIgLz5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPHA+XCIpO3QuYih0LnQodC5kKFwidHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5zYXZlX291dGZpdC5nb3RvX2FjY291bnRcIixjLHAsMCkpKTt0LmIoXCI8L3A+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjxpbnB1dFwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgaWQ9XFxcImNob29zZS1uYW1lXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgbWF4bGVuZ3RoPVxcXCIzMFxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIG1pbmxlbmd0aD1cXFwiMVxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIHBsYWNlaG9sZGVyPVxcXCJcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLnNhdmVfb3V0Zml0LnBsYWNlaG9sZGVyXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIi8+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGgxPnt7dHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5zYXZlX291dGZpdC50aXRsZX19PC9oMT5cXG5cXG48cD57e3t0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLnNhdmVfb3V0Zml0LnNhdmVkX2xvY2FsbHl9fX08L3A+XFxuXFxuPGJyIC8+XFxuXFxuPHA+e3t7dHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5zYXZlX291dGZpdC5nb3RvX2FjY291bnR9fX08L3A+XFxuXFxuPGlucHV0XFxuICBpZD1cXFwiY2hvb3NlLW5hbWVcXFwiXFxuICBtYXhsZW5ndGg9XFxcIjMwXFxcIlxcbiAgbWlubGVuZ3RoPVxcXCIxXFxcIlxcbiAgcGxhY2Vob2xkZXI9XFxcInt7dHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5zYXZlX291dGZpdC5wbGFjZWhvbGRlcn19XFxcIlxcbi8+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8ZGl2IGlkPVxcXCJoaXN0b3J5LWNvbnRhaW5lclxcXCIgc3R5bGU9XFxcIndpZHRoOiAxMDAlXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxzdHlsZT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgLmhpc3RvcnktYWN0aW9ucyB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgbWFyZ2luLWJvdHRvbTogMWVtO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAjZGVsZXRlLWhpc3Rvcnkge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIG1hcmdpbi1yaWdodDogMWVtO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAuaGVscC1pY29uIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDI5MWY2O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBib3gtc2hhZG93OiBub25lO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGNvbG9yOiAjZmZmO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZvbnQtc2l6ZTogMjZweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmb250LXdlaWdodDogYm9sZDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBoZWlnaHQ6IDIzcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgcGFkZGluZzogMDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgd2lkdGg6IDIzcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIC5oaXN0b3J5LW1lc3NhZ2Uge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBib3JkZXItcmFkaXVzOiAxZW07XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgbWFyZ2luOiAxZW07XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgcGFkZGluZzogMWVtO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAuaGlzdG9yeS1yb3cge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGRpc3BsYXk6IGZsZXg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZmxleC13cmFwOiB3cmFwO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGhlaWdodDogNDY1cHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgbWFyZ2luLXJpZ2h0OiAxZW07XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgb3ZlcmZsb3cteTogYXV0bztcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBzY3JvbGxiYXItY29sb3I6IGRhcms7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAucmVzdWx0LWNhcmQge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBib3gtc2hhZG93OiAwIDAgNXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgaGVpZ2h0OiAyMDVweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBtYXJnaW46IDAuNWVtO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHBhZGRpbmc6IDAuNWVtO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB3aWR0aDogMTI4cHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIC5yZXN1bHQtaW1hZ2Uge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBib3gtc2hhZG93OiAwIDAgNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSxcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDAgMnB4IDRweCAycHggcmdiYSgwLCAwLCAwLCAwLjA4KTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgdG9wOiAtMC44ZW07XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIC5yZXN1bHQtY29udGVudC1jb2x1bW4ge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGRpc3BsYXk6IGZsZXg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBoZWlnaHQ6IDEwM3B4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgLnJlc3VsdC1uYW1lIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIC13ZWJraXQtbGluZS1jbGFtcDogMztcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBjb2xvcjogcmdiKDUyLCA1NiwgMTExKTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmbGV4LWdyb3c6IDE7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZm9udC1zaXplOiAxNnB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIG1hcmdpbi10b3A6IC0wLjJlbTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBvdmVyZmxvdzogaGlkZGVuO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAucmVzdWx0LWxvY2F0aW9uIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgLnJlc3VsdC1kYXRlIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBjb2xvcjogI2ZiODkwMDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmb250LXNpemU6IDEzcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIC5yZXN1bHQtaWNvbnMge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIG1hcmdpbi10b3A6IDAuNWVtO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAucmVzdWx0LWNvdW50IHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYm9yZGVyOiAxcHggc29saWQgIzAwY2RmYjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGNvbG9yOiAjM2VjMGQ3O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmb250LWZhbWlseTogXFxcIkFsZWdyZXlhIFNhbnMgU0NcXFwiLCBzYW5zLXNlcmlmO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZvbnQtc2l6ZTogMThweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmb250LXdlaWdodDogODAwO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGhlaWdodDogMjlweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBsaW5lLWhlaWdodDogMjdweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgd2lkdGg6IDI5cHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIC5oaXN0b3J5LXRyYWRhYmxlIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjY2O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJvcmRlci1yYWRpdXM6IDI1cHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYm9yZGVyOiAxcHggc29saWQgI2I5YjliOTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBjb2xvcjogI2ZmZmZmZjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZm9udC1mYW1pbHk6IFxcXCJUZW1wIE1lbnVcXFwiLCBzZXJpZjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmb250LXNpemU6IDEzcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgaGVpZ2h0OiAxNXB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGxpbmUtaGVpZ2h0OiAxNXB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB3aWR0aDogMTVweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgLmljb24tc3BhY2VyIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgd2lkdGg6IDAuMWVtO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L3N0eWxlPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxkaXYgY2xhc3M9XFxcImhpc3RvcnktYWN0aW9uc1xcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxidXR0b24gaWQ9XFxcImRlbGV0ZS1oaXN0b3J5XFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUucGV0LmRlbGV0ZV9oaXN0b3J5XCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC9idXR0b24+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8c3BhbiBjbGFzcz1cXFwidG9vbHRpcFxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPHNwYW4gY2xhc3M9XFxcIm5sLWJ1dHRvbiBoZWxwLWljb25cXFwiPj88L3NwYW4+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPGRpdiBjbGFzcz1cXFwidG9vbHRpcC1jb250ZW50XFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxwPlwiKTt0LmIodC50KHQuZChcInRyYW5zbGF0ZS5wZXQuc2F2ZWRfbG9jYWxseVwiLGMscCwwKSkpO3QuYihcIjwvcD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxwPlwiKTt0LmIodC50KHQuZChcInRyYW5zbGF0ZS5wZXQuZ290b19hY2NvdW50XCIsYyxwLDApKSk7dC5iKFwiPC9wPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L3NwYW4+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7aWYoIXQucyh0LmYoXCJoaXN0b3J5XCIsYyxwLDEpLGMscCwxLDAsMCxcIlwiKSl7dC5iKFwiICA8cCBjbGFzcz1cXFwiaGlzdG9yeS1tZXNzYWdlXFxcIj5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUucGV0LmVtcHR5X2hpc3RvcnlcIixjLHAsMCkpKTt0LmIoXCI8L3A+XCIpO3QuYihcIlxcblwiICsgaSk7fTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGRpdiBjbGFzcz1cXFwiaGlzdG9yeS1yb3dcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO2lmKHQucyh0LmYoXCJoaXN0b3J5XCIsYyxwLDEpLGMscCwwLDMxODksMzgyMixcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiICAgIDxkaXYgY2xhc3M9XFxcInJlc3VsdC1jYXJkXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8aW1nIGNsYXNzPVxcXCJyZXN1bHQtaW1hZ2VcXFwiIHNyYz1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWNvblwiLGMscCwwKSkpO3QuYihcIlxcXCIgLz5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPGRpdiBjbGFzcz1cXFwicmVzdWx0LWNvbnRlbnQtY29sdW1uXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXYgY2xhc3M9XFxcInJlc3VsdC1uYW1lXFxcIj5cIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyZXN1bHQtbG9jYXRpb25cXFwiPlwiKTt0LmIodC52KHQuZihcImxvY2F0aW9uTmFtZVwiLGMscCwwKSkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGRpdiBjbGFzcz1cXFwicmVzdWx0LWRhdGVcXFwiPlwiKTt0LmIodC52KHQuZihcImRhdGVcIixjLHAsMCkpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyZXN1bHQtaWNvbnNcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBcIik7aWYodC5zKHQuZihcImNvdW50XCIsYyxwLDEpLGMscCwwLDM1MjUsMzU2OCxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiPHNwYW4gY2xhc3M9XFxcInJlc3VsdC1jb3VudFxcXCI+XCIpO3QuYih0LnYodC5mKFwiY291bnRcIixjLHAsMCkpKTt0LmIoXCI8L3NwYW4+XCIpO30pO2MucG9wKCk7fXQuYihcIlxcblwiICsgaSk7aWYodC5zKHQuZihcImNvdW50XCIsYyxwLDEpLGMscCwwLDM1OTksMzY3OCxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7aWYodC5zKHQuZihcInRyYWRhYmxlXCIsYyxwLDEpLGMscCwwLDM2MTIsMzY2NSxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImljb24tc3BhY2VyXFxcIj48L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgXCIpO30pO2MucG9wKCk7fX0pO2MucG9wKCk7fXQuYihcIiBcIik7aWYodC5zKHQuZihcInRyYWRhYmxlXCIsYyxwLDEpLGMscCwwLDM3MDIsMzc2NSxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiPHNwYW4gY2xhc3M9XFxcImhpc3RvcnktdHJhZGFibGVcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgICAgPu6ggjwvc3BhblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICA+XCIpO30pO2MucG9wKCk7fXQuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7fSk7Yy5wb3AoKTt9dC5iKFwiICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8ZGl2IGlkPVxcXCJoaXN0b3J5LWNvbnRhaW5lclxcXCIgc3R5bGU9XFxcIndpZHRoOiAxMDAlXFxcIj5cXG4gIDxzdHlsZT5cXG4gICAgLmhpc3RvcnktYWN0aW9ucyB7XFxuICAgICAgbWFyZ2luLWJvdHRvbTogMWVtO1xcbiAgICB9XFxuXFxuICAgICNkZWxldGUtaGlzdG9yeSB7XFxuICAgICAgbWFyZ2luLXJpZ2h0OiAxZW07XFxuICAgIH1cXG5cXG4gICAgLmhlbHAtaWNvbiB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAyOTFmNjtcXG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAgICAgYm94LXNoYWRvdzogbm9uZTtcXG4gICAgICBjb2xvcjogI2ZmZjtcXG4gICAgICBmb250LXNpemU6IDI2cHg7XFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICAgICAgaGVpZ2h0OiAyM3B4O1xcbiAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xcbiAgICAgIHBhZGRpbmc6IDA7XFxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICAgIHdpZHRoOiAyM3B4O1xcbiAgICB9XFxuXFxuICAgIC5oaXN0b3J5LW1lc3NhZ2Uge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW07XFxuICAgICAgbWFyZ2luOiAxZW07XFxuICAgICAgcGFkZGluZzogMWVtO1xcbiAgICB9XFxuXFxuICAgIC5oaXN0b3J5LXJvdyB7XFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XFxuICAgICAgaGVpZ2h0OiA0NjVweDtcXG4gICAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcXG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgICAgIHNjcm9sbGJhci1jb2xvcjogZGFyaztcXG4gICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XFxuICAgIH1cXG5cXG4gICAgLnJlc3VsdC1jYXJkIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW07XFxuICAgICAgYm94LXNoYWRvdzogMCAwIDVweCAycHggcmdiYSgwLCAwLCAwLCAwLjMpO1xcbiAgICAgIGhlaWdodDogMjA1cHg7XFxuICAgICAgbWFyZ2luOiAwLjVlbTtcXG4gICAgICBwYWRkaW5nOiAwLjVlbTtcXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgICAgd2lkdGg6IDEyOHB4O1xcbiAgICB9XFxuXFxuICAgIC5yZXN1bHQtaW1hZ2Uge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcXG4gICAgICBib3gtc2hhZG93OiAwIDAgNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSxcXG4gICAgICAgIDAgMnB4IDRweCAycHggcmdiYSgwLCAwLCAwLCAwLjA4KTtcXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgICAgdG9wOiAtMC44ZW07XFxuICAgIH1cXG5cXG4gICAgLnJlc3VsdC1jb250ZW50LWNvbHVtbiB7XFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICAgIGhlaWdodDogMTAzcHg7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgICB9XFxuXFxuICAgIC5yZXN1bHQtbmFtZSB7XFxuICAgICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcXG4gICAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDM7XFxuICAgICAgY29sb3I6IHJnYig1MiwgNTYsIDExMSk7XFxuICAgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICAgICAgZmxleC1ncm93OiAxO1xcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcXG4gICAgICBmb250LXdlaWdodDogYm9sZDtcXG4gICAgICBtYXJnaW4tdG9wOiAtMC4yZW07XFxuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgfVxcblxcbiAgICAucmVzdWx0LWxvY2F0aW9uIHtcXG4gICAgfVxcblxcbiAgICAucmVzdWx0LWRhdGUge1xcbiAgICAgIGNvbG9yOiAjZmI4OTAwO1xcbiAgICAgIGZvbnQtc2l6ZTogMTNweDtcXG4gICAgICBmb250LXdlaWdodDogYm9sZDtcXG4gICAgfVxcblxcbiAgICAucmVzdWx0LWljb25zIHtcXG4gICAgICBtYXJnaW4tdG9wOiAwLjVlbTtcXG4gICAgfVxcblxcbiAgICAucmVzdWx0LWNvdW50IHtcXG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XFxuICAgICAgYm9yZGVyOiAxcHggc29saWQgIzAwY2RmYjtcXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgIGNvbG9yOiAjM2VjMGQ3O1xcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgICBmb250LWZhbWlseTogXFxcIkFsZWdyZXlhIFNhbnMgU0NcXFwiLCBzYW5zLXNlcmlmO1xcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcXG4gICAgICBmb250LXdlaWdodDogODAwO1xcbiAgICAgIGhlaWdodDogMjlweDtcXG4gICAgICBsaW5lLWhlaWdodDogMjdweDtcXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgd2lkdGg6IDI5cHg7XFxuICAgIH1cXG5cXG4gICAgLmhpc3RvcnktdHJhZGFibGUge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM2NjY7XFxuICAgICAgYm9yZGVyLXJhZGl1czogMjVweDtcXG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjYjliOWI5O1xcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgICBmb250LWZhbWlseTogXFxcIlRlbXAgTWVudVxcXCIsIHNlcmlmO1xcbiAgICAgIGZvbnQtc2l6ZTogMTNweDtcXG4gICAgICBoZWlnaHQ6IDE1cHg7XFxuICAgICAgbGluZS1oZWlnaHQ6IDE1cHg7XFxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICAgIHdpZHRoOiAxNXB4O1xcbiAgICB9XFxuXFxuICAgIC5pY29uLXNwYWNlciB7XFxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICAgIHdpZHRoOiAwLjFlbTtcXG4gICAgfVxcbiAgPC9zdHlsZT5cXG5cXG4gIDxkaXYgY2xhc3M9XFxcImhpc3RvcnktYWN0aW9uc1xcXCI+XFxuICAgIDxidXR0b24gaWQ9XFxcImRlbGV0ZS1oaXN0b3J5XFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uXFxcIj5cXG4gICAgICB7e3RyYW5zbGF0ZS5wZXQuZGVsZXRlX2hpc3Rvcnl9fVxcbiAgICA8L2J1dHRvbj5cXG5cXG4gICAgPHNwYW4gY2xhc3M9XFxcInRvb2x0aXBcXFwiPlxcbiAgICAgIDxzcGFuIGNsYXNzPVxcXCJubC1idXR0b24gaGVscC1pY29uXFxcIj4/PC9zcGFuPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcInRvb2x0aXAtY29udGVudFxcXCI+XFxuICAgICAgICA8cD57e3t0cmFuc2xhdGUucGV0LnNhdmVkX2xvY2FsbHl9fX08L3A+XFxuICAgICAgICA8cD57e3t0cmFuc2xhdGUucGV0LmdvdG9fYWNjb3VudH19fTwvcD5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9zcGFuPlxcbiAgPC9kaXY+XFxuXFxuICB7e15oaXN0b3J5fX1cXG4gIDxwIGNsYXNzPVxcXCJoaXN0b3J5LW1lc3NhZ2VcXFwiPnt7dHJhbnNsYXRlLnBldC5lbXB0eV9oaXN0b3J5fX08L3A+XFxuICB7ey9oaXN0b3J5fX1cXG5cXG4gIDxkaXYgY2xhc3M9XFxcImhpc3Rvcnktcm93XFxcIj5cXG4gICAge3sjaGlzdG9yeX19XFxuICAgIDxkaXYgY2xhc3M9XFxcInJlc3VsdC1jYXJkXFxcIj5cXG4gICAgICA8aW1nIGNsYXNzPVxcXCJyZXN1bHQtaW1hZ2VcXFwiIHNyYz1cXFwie3tpY29ufX1cXFwiIC8+XFxuXFxuICAgICAgPGRpdiBjbGFzcz1cXFwicmVzdWx0LWNvbnRlbnQtY29sdW1uXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInJlc3VsdC1uYW1lXFxcIj57e25hbWV9fTwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwicmVzdWx0LWxvY2F0aW9uXFxcIj57e2xvY2F0aW9uTmFtZX19PC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyZXN1bHQtZGF0ZVxcXCI+e3tkYXRlfX08L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInJlc3VsdC1pY29uc1xcXCI+XFxuICAgICAgICAgIHt7I2NvdW50fX08c3BhbiBjbGFzcz1cXFwicmVzdWx0LWNvdW50XFxcIj57e2NvdW50fX08L3NwYW4+e3svY291bnR9fVxcbiAgICAgICAgICB7eyNjb3VudH19e3sjdHJhZGFibGV9fVxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpY29uLXNwYWNlclxcXCI+PC9kaXY+XFxuICAgICAgICAgIHt7L3RyYWRhYmxlfX17ey9jb3VudH19IHt7I3RyYWRhYmxlfX08c3BhbiBjbGFzcz1cXFwiaGlzdG9yeS10cmFkYWJsZVxcXCJcXG4gICAgICAgICAgICA+7qCCPC9zcGFuXFxuICAgICAgICAgID57ey90cmFkYWJsZX19XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIHt7L2hpc3Rvcnl9fVxcbiAgPC9kaXY+XFxuPC9kaXY+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8c3R5bGU+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAuY3JlYXRlZC1vdXRmaXQtcG9wdXAgLmZsYXZyLW91dGVyIC5mbGF2ci1tZXNzYWdlOjphZnRlciB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIik7dC5iKHQudih0LmYoXCJ1cmxcIixjLHAsMCkpKTt0LmIoXCIpO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9zdHlsZT5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPGgxPlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCI8L2gxPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8cD5cIik7dC5iKHQudCh0LmQoXCJ0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLmNsaWNrX291dGZpdC5zYXZlZF9sb2NhbGx5XCIsYyxwLDApKSk7dC5iKFwiPC9wPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8YnIgLz5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPHA+XCIpO3QuYih0LnQodC5kKFwidHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5jbGlja19vdXRmaXQuZ290b19hY2NvdW50XCIsYyxwLDApKSk7dC5iKFwiPC9wPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxzdHlsZT5cXG4gIC5jcmVhdGVkLW91dGZpdC1wb3B1cCAuZmxhdnItb3V0ZXIgLmZsYXZyLW1lc3NhZ2U6OmFmdGVyIHtcXG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKHt7dXJsfX0pO1xcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XFxuICB9XFxuPC9zdHlsZT5cXG5cXG48aDE+e3tuYW1lfX08L2gxPlxcblxcbjxwPnt7e3RyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuY2xpY2tfb3V0Zml0LnNhdmVkX2xvY2FsbHl9fX08L3A+XFxuXFxuPGJyIC8+XFxuXFxuPHA+e3t7dHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5jbGlja19vdXRmaXQuZ290b19hY2NvdW50fX19PC9wPlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGJ1dHRvbiBpZD1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiIGNsYXNzPVxcXCJubC1idXR0b24gZmF2b3JpdGVzLWFjdGlvbi1lZVxcXCI+XCIpO3QuYih0LnYodC5mKFwidGV4dFwiLGMscCwwKSkpO3QuYihcIjwvYnV0dG9uPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxidXR0b24gaWQ9XFxcInt7aWR9fVxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvbiBmYXZvcml0ZXMtYWN0aW9uLWVlXFxcIj57e3RleHR9fTwvYnV0dG9uPlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGltZ1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgc3JjPVxcXCJcIik7dC5iKHQudih0LmYoXCJpY29uXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgYWx0PVxcXCJcIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgaGVpZ2h0PVxcXCIyMVxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIHN0eWxlPVxcXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IG1hcmdpbjogLTJweCBhdXRvXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIi8+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKHQudCh0LmYoXCJtZXNzYWdlXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8aW1nXFxuICBzcmM9XFxcInt7aWNvbn19XFxcIlxcbiAgYWx0PVxcXCJ7e25hbWV9fVxcXCJcXG4gIGhlaWdodD1cXFwiMjFcXFwiXFxuICBzdHlsZT1cXFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyBtYXJnaW46IC0ycHggYXV0b1xcXCJcXG4vPlxcbnt7e21lc3NhZ2V9fX1cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxsaVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgaWQ9XFxcImhlYWRlci10YWtlb3ZlclxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIHRpdGxlPVxcXCJcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuaG9tZS50YWtlb3ZlclwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIHN0eWxlPVxcXCJ0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gZWFzZS1pbi1vdXQgMjAwbXM7IGN1cnNvcjogcG9pbnRlclxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIG9uTW91c2VPdmVyPVxcXCJ0aGlzLnN0eWxlLnRyYW5zZm9ybT0nc2NhbGUoMS4zKSdcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBvbk1vdXNlT3V0PVxcXCJ0aGlzLnN0eWxlLnRyYW5zZm9ybT0nc2NhbGUoMSknXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxhPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8aW1nXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgc3JjPVxcXCIvc3RhdGljL2ltZy9uZXctbGF5b3V0L2hvbWUvY29ubmVjdGVkL2xvY2sucG5nXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGFsdD1cXFwiXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmhvbWUudGFrZW92ZXJcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgc3R5bGU9XFxcImZpbHRlcjogY29udHJhc3QoMCUpIGJyaWdodG5lc3MoMjAwJSkgXCIpO2lmKCF0LnModC5mKFwidGFrZW92ZXJcIixjLHAsMSksYyxwLDEsMCwwLFwiXCIpKXt0LmIoXCJvcGFjaXR5KDApXCIpO307dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGhlaWdodD1cXFwiMjFcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIC8+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L2E+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9saT5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8bGlcXG4gIGlkPVxcXCJoZWFkZXItdGFrZW92ZXJcXFwiXFxuICB0aXRsZT1cXFwie3t0cmFuc2xhdGUuaG9tZS50YWtlb3Zlcn19XFxcIlxcbiAgc3R5bGU9XFxcInRyYW5zaXRpb246IHRyYW5zZm9ybSBlYXNlLWluLW91dCAyMDBtczsgY3Vyc29yOiBwb2ludGVyXFxcIlxcbiAgb25Nb3VzZU92ZXI9XFxcInRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxLjMpJ1xcXCJcXG4gIG9uTW91c2VPdXQ9XFxcInRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxKSdcXFwiXFxuPlxcbiAgPGE+XFxuICAgIDxpbWdcXG4gICAgICBzcmM9XFxcIi9zdGF0aWMvaW1nL25ldy1sYXlvdXQvaG9tZS9jb25uZWN0ZWQvbG9jay5wbmdcXFwiXFxuICAgICAgYWx0PVxcXCJ7e3RyYW5zbGF0ZS5ob21lLnRha2VvdmVyfX1cXFwiXFxuICAgICAgc3R5bGU9XFxcImZpbHRlcjogY29udHJhc3QoMCUpIGJyaWdodG5lc3MoMjAwJSkge3tedGFrZW92ZXJ9fW9wYWNpdHkoMCl7ey90YWtlb3Zlcn19XFxcIlxcbiAgICAgIGhlaWdodD1cXFwiMjFcXFwiXFxuICAgIC8+XFxuICA8L2E+XFxuPC9saT5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxhXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBpZD1cXFwiaG9tZS1cIik7dC5iKHQudih0LmYoXCJpZFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGNsYXNzPVxcXCJob21lLWNvbnRlbnQtdGlsZSBob21lLWNvbnRlbnQtc21hbGwgaG9tZS1jb250ZW50LXNtYWxsLWVlXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgaHJlZj1cXFwiXCIpO3QuYih0LnYodC5mKFwiaHJlZlwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIHN0eWxlPVxcXCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIpO3QuYih0LnYodC5mKFwiYmFja2dyb3VuZEltYWdlXCIsYyxwLDApKSk7dC5iKFwiKTtcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGg0PlwiKTt0LmIodC52KHQuZihcImg0XCIsYyxwLDApKSk7dC5iKFwiPC9oND5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2E+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGFcXG4gIGlkPVxcXCJob21lLXt7aWR9fVxcXCJcXG4gIGNsYXNzPVxcXCJob21lLWNvbnRlbnQtdGlsZSBob21lLWNvbnRlbnQtc21hbGwgaG9tZS1jb250ZW50LXNtYWxsLWVlXFxcIlxcbiAgaHJlZj1cXFwie3tocmVmfX1cXFwiXFxuICBzdHlsZT1cXFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKHt7YmFja2dyb3VuZEltYWdlfX0pO1xcXCJcXG4+XFxuICA8aDQ+e3toNH19PC9oND5cXG48L2E+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8bGkgY2xhc3M9XFxcIm1haW4tbWVudS1cIik7dC5iKHQudih0LmYoXCJjbGFzc1wiLGMscCwwKSkpO3QuYihcIiBtYWluLW1lbnUtZWVcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGEgaHJlZj1cXFwiXCIpO3QuYih0LnYodC5mKFwiaHJlZlwiLGMscCwwKSkpO3QuYihcIlxcXCI+XCIpO3QuYih0LnYodC5mKFwidGV4dFwiLGMscCwwKSkpO3QuYihcIjwvYT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2xpPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxsaSBjbGFzcz1cXFwibWFpbi1tZW51LXt7Y2xhc3N9fSBtYWluLW1lbnUtZWVcXFwiPlxcbiAgPGEgaHJlZj1cXFwie3tocmVmfX1cXFwiPnt7dGV4dH19PC9hPlxcbjwvbGk+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8bGkgY2xhc3M9XFxcIm1haW4tbWVudS1wdXJyb3Nob3BcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGEgaHJlZj1cXFwiL21hbGwvcHVycm9zaG9wXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGltZ1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGhlaWdodD1cXFwiMjBcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgc3JjPVxcXCIvYXNzZXRzL2ltZy9pdGVtL2NvbnN1bWFibGUvYjY0N2Q1NGFmZDZiMDQzNTNlMTI5MjE5ODEwNTEyZjUucG5nXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHN0eWxlPVxcXCJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAvPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBQdXJybydTaG9wXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L2E+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9saT5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8bGkgY2xhc3M9XFxcIm1haW4tbWVudS1wdXJyb3Nob3BcXFwiPlxcbiAgPGEgaHJlZj1cXFwiL21hbGwvcHVycm9zaG9wXFxcIj5cXG4gICAgPGltZ1xcbiAgICAgIGhlaWdodD1cXFwiMjBcXFwiXFxuICAgICAgc3JjPVxcXCIvYXNzZXRzL2ltZy9pdGVtL2NvbnN1bWFibGUvYjY0N2Q1NGFmZDZiMDQzNTNlMTI5MjE5ODEwNTEyZjUucG5nXFxcIlxcbiAgICAgIHN0eWxlPVxcXCJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlXFxcIlxcbiAgICAvPlxcbiAgICBQdXJybydTaG9wXFxuICA8L2E+XFxuPC9saT5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxzdHlsZT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC8qICNtYXJrZXRwbGFjZS1hYnN0cmFjdC1wdXJjaGFzZXMgYW5kICNtYXJrZXRwbGFjZS1hYnN0cmFjdC1zYWxlcyB3ZXJlXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICByZS13cml0dGVuIHRvIHRhcmdldCAjcHVyY2hhc2UtaGlzdG9yeSBhbmQgI3NhbGUtaGlzdG9yeS4gKi9cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAjcHVyY2hhc2UtaGlzdG9yeSxcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICNzYWxlLWhpc3Rvcnkge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBoZWlnaHQ6IDYwMHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHdpZHRoOiAzNjBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICNzYWxlLWhpc3RvcnkgLmFic3RyYWN0LWFjdGlvbnMsXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAjcHVyY2hhc2UtaGlzdG9yeSAuYWJzdHJhY3QtYWN0aW9ucyB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgdG9wOiAtNDBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgZGlzcGxheTogZmxleDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGhlaWdodDogODBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAjc2FsZS1oaXN0b3J5IC5hYnN0cmFjdC10aW1lLFwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgI3B1cmNoYXNlLWhpc3RvcnkgLmFic3RyYWN0LXRpbWUge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBwb3NpdGlvbjogc3RhdGljO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBkaXNwbGF5OiBpbmxpbmU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGhlaWdodDogYXV0bztcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgY29sb3I6ICNmYjg5MDA7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGZvbnQtd2VpZ2h0OiBib2xkO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBmb250LXNpemU6IDEzcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgI3B1cmNoYXNlLWhpc3Rvcnkge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBtYXJnaW4tcmlnaHQ6IDgwcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgI3B1cmNoYXNlLWhpc3Rvcnk6YmVmb3JlIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgY29udGVudDogXFxcIlxcXCI7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgdG9wOiAxMjBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgcmlnaHQ6IC00MnB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBib3JkZXItcmlnaHQ6IHNvbGlkIDJweCAjYWFhO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBoZWlnaHQ6IDMyMHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC8qIEN1c3RvbSBmaXhlcyB0byB0aGUgbGF5b3V0ICovXCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgI3B1cmNoYXNlLWhpc3RvcnkgbGkge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBtYXJnaW4tbGVmdDogNHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBtYXJnaW4tcmlnaHQ6IDRweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L3N0eWxlPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8IS0tIFB1cmNoYXNlcyAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8ZGl2IGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1hYnN0cmFjdFxcXCIgaWQ9XFxcInB1cmNoYXNlLWhpc3RvcnlcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGgyIGNsYXNzPVxcXCJzZWN0aW9uLXN1YnRpdGxlXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5wdXJjaGFzZV9oaXN0b3J5XCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvaDI+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPHVsIGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1wdXJjaGFzZXMtaXRlbXNcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO2lmKHQucyh0LmYoXCJwdXJjaGFzZXNcIixjLHAsMSksYyxwLDAsMTI4NCwyNTQ1LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCIgICAgPGxpXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZGF0YS1pdGVtaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcIml0ZW1pZFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBjbGFzcz1cXFwibWFya2V0cGxhY2UtYWJzdHJhY3QgbWFya2V0cGxhY2UtYXVjdGlvbnMtaXRlbSBtYXJrZXRwbGFjZS1zYWxlcy1pdGVtXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPCEtLSBJY29uIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWljb25cXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGltZyBzcmM9XFxcIlwiKTt0LmIodC52KHQuZihcImljb25cIixjLHAsMCkpKTt0LmIoXCJcXFwiIC8+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwhLS0gUHJpY2VzIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWNvbnRhaW5lclxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1uYW1lXFxcIj5cIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1jb250ZW50XFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtY3VycmVudFByaWNlXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgICBcIik7aWYodC5zKHQuZihcImN1cnJlbnRQcmljZVwiLGMscCwxKSxjLHAsMCwxNzM4LDE5MDcsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcIiBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmN1cnJlbnRfcHJpY2VcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJwcmljZS1pdGVtXFxcIj5cIik7dC5iKHQudih0LmQoXCJjdXJyZW50UHJpY2UucHJpY2VcIixjLHAsMCkpKTt0LmIoXCI8L3NwYW4+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcIm1hYW5hLWljb25cXFwiPjwvc3Bhbj5cIik7dC5iKFwiXFxuXCIgKyBpKTt9KTtjLnBvcCgpO310LmIoXCIgICAgICAgICAgICA8YnIgLz5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgICBcIik7aWYodC5zKHQuZihcImJ1eU5vd1ByaWNlXCIsYyxwLDEpLGMscCwwLDE5NzIsMjE0MCxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuYnV5X25vd19wcmljZVwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInByaWNlLWl0ZW1cXFwiPlwiKTt0LmIodC52KHQuZChcImJ1eU5vd1ByaWNlLnByaWNlXCIsYyxwLDApKSk7dC5iKFwiPC9zcGFuPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtYWFuYS1pY29uXFxcIj48L3NwYW4+XCIpO3QuYihcIlxcblwiICsgaSk7fSk7Yy5wb3AoKTt9dC5iKFwiICAgICAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwhLS0gQWN0aW9ucyAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1hY3Rpb25zXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LXRpbWVcXFwiPlwiKTt0LmIodC52KHQuZihcImRhdGVcIixjLHAsMCkpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXZcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc20gbWFya2V0cGxhY2UtaXRlbURldGFpbC1jYW5jZWwgZGVsZXRlLWJ1dHRvblxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgZGF0YS1pdGVtaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcIml0ZW1pZFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgID5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5kZWxldGVcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDwvbGk+XCIpO3QuYihcIlxcblwiICsgaSk7fSk7Yy5wb3AoKTt9dC5iKFwiICA8L3VsPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8IS0tIFNhbGVzIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjxkaXYgY2xhc3M9XFxcIm1hcmtldHBsYWNlLWFic3RyYWN0XFxcIiBpZD1cXFwic2FsZS1oaXN0b3J5XFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxoMiBjbGFzcz1cXFwic2VjdGlvbi1zdWJ0aXRsZVxcXCI+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5zYWxlc19oaXN0b3J5XCIsYyxwLDApKSk7dC5iKFwiPC9oMj5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8dWwgY2xhc3M9XFxcIm1hcmtldHBsYWNlLXNhbGVzLWl0ZW1zXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTtpZih0LnModC5mKFwic2FsZXNcIixjLHAsMSksYyxwLDAsMjc3OCwzOTI0LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCIgICAgPGxpIGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1hYnN0cmFjdCBtYXJrZXRwbGFjZS1zYWxlcy1pdGVtXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8IS0tIEljb24gLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtaWNvblxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8aW1nIHNyYz1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWNvblwiLGMscCwwKSkpO3QuYihcIlxcXCIgLz5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPCEtLSBQcmljZXMgLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtY29udGFpbmVyXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LW5hbWVcXFwiPlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWNvbnRlbnRcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1jdXJyZW50UHJpY2VcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgIFwiKTtpZih0LnModC5mKFwiY3VycmVudFByaWNlXCIsYyxwLDEpLGMscCwwLDMxNjQsMzMyNyxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuY3VycmVudF9wcmljZVwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInByaWNlLWl0ZW1cXFwiPlwiKTt0LmIodC52KHQuZihcImN1cnJlbnRQcmljZVwiLGMscCwwKSkpO3QuYihcIjwvc3Bhbj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwibWFhbmEtaWNvblxcXCI+PC9zcGFuPlwiKTt0LmIoXCJcXG5cIiArIGkpO30pO2MucG9wKCk7fXQuYihcIiAgICAgICAgICAgIDxiciAvPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgIFwiKTtpZih0LnModC5mKFwiYnV5Tm93UHJpY2VcIixjLHAsMSksYyxwLDAsMzM5MiwzNTU0LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCIgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5idXlfbm93X3ByaWNlXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicHJpY2UtaXRlbVxcXCI+XCIpO3QuYih0LnYodC5mKFwiYnV5Tm93UHJpY2VcIixjLHAsMCkpKTt0LmIoXCI8L3NwYW4+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcIm1hYW5hLWljb25cXFwiPjwvc3Bhbj5cIik7dC5iKFwiXFxuXCIgKyBpKTt9KTtjLnBvcCgpO310LmIoXCIgICAgICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPCEtLSBBY3Rpb25zIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWFjdGlvbnNcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtdGltZVxcXCI+XCIpO3QuYih0LnYodC5mKFwiZGF0ZVwiLGMscCwwKSkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGRpdlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSBtYXJrZXRwbGFjZS1pdGVtRGV0YWlsLWNhbmNlbCBkZWxldGUtYnV0dG9uXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmRlbGV0ZVwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC9saT5cIik7dC5iKFwiXFxuXCIgKyBpKTt9KTtjLnBvcCgpO310LmIoXCIgIDwvdWw+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPHN0eWxlPlxcbiAgLyogI21hcmtldHBsYWNlLWFic3RyYWN0LXB1cmNoYXNlcyBhbmQgI21hcmtldHBsYWNlLWFic3RyYWN0LXNhbGVzIHdlcmVcXG4gIHJlLXdyaXR0ZW4gdG8gdGFyZ2V0ICNwdXJjaGFzZS1oaXN0b3J5IGFuZCAjc2FsZS1oaXN0b3J5LiAqL1xcblxcbiAgI3B1cmNoYXNlLWhpc3RvcnksXFxuICAjc2FsZS1oaXN0b3J5IHtcXG4gICAgaGVpZ2h0OiA2MDBweDtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICB3aWR0aDogMzYwcHg7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcXG4gIH1cXG5cXG4gICNzYWxlLWhpc3RvcnkgLmFic3RyYWN0LWFjdGlvbnMsXFxuICAjcHVyY2hhc2UtaGlzdG9yeSAuYWJzdHJhY3QtYWN0aW9ucyB7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgdG9wOiAtNDBweDtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7XFxuICAgIGhlaWdodDogODBweDtcXG4gIH1cXG5cXG4gICNzYWxlLWhpc3RvcnkgLmFic3RyYWN0LXRpbWUsXFxuICAjcHVyY2hhc2UtaGlzdG9yeSAuYWJzdHJhY3QtdGltZSB7XFxuICAgIHBvc2l0aW9uOiBzdGF0aWM7XFxuICAgIGRpc3BsYXk6IGlubGluZTtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICBjb2xvcjogI2ZiODkwMDtcXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICAgIGZvbnQtc2l6ZTogMTNweDtcXG4gIH1cXG5cXG4gICNwdXJjaGFzZS1oaXN0b3J5IHtcXG4gICAgbWFyZ2luLXJpZ2h0OiA4MHB4O1xcbiAgfVxcblxcbiAgI3B1cmNoYXNlLWhpc3Rvcnk6YmVmb3JlIHtcXG4gICAgY29udGVudDogXFxcIlxcXCI7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgdG9wOiAxMjBweDtcXG4gICAgcmlnaHQ6IC00MnB4O1xcbiAgICBib3JkZXItcmlnaHQ6IHNvbGlkIDJweCAjYWFhO1xcbiAgICBoZWlnaHQ6IDMyMHB4O1xcbiAgfVxcblxcbiAgLyogQ3VzdG9tIGZpeGVzIHRvIHRoZSBsYXlvdXQgKi9cXG5cXG4gICNwdXJjaGFzZS1oaXN0b3J5IGxpIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDRweDtcXG4gICAgbWFyZ2luLXJpZ2h0OiA0cHg7XFxuICB9XFxuPC9zdHlsZT5cXG5cXG48IS0tIFB1cmNoYXNlcyAtLT5cXG48ZGl2IGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1hYnN0cmFjdFxcXCIgaWQ9XFxcInB1cmNoYXNlLWhpc3RvcnlcXFwiPlxcbiAgPGgyIGNsYXNzPVxcXCJzZWN0aW9uLXN1YnRpdGxlXFxcIj5cXG4gICAge3t0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLnB1cmNoYXNlX2hpc3Rvcnl9fVxcbiAgPC9oMj5cXG5cXG4gIDx1bCBjbGFzcz1cXFwibWFya2V0cGxhY2UtcHVyY2hhc2VzLWl0ZW1zXFxcIj5cXG4gICAge3sjcHVyY2hhc2VzfX1cXG4gICAgPGxpXFxuICAgICAgZGF0YS1pdGVtaWQ9XFxcInt7aXRlbWlkfX1cXFwiXFxuICAgICAgY2xhc3M9XFxcIm1hcmtldHBsYWNlLWFic3RyYWN0IG1hcmtldHBsYWNlLWF1Y3Rpb25zLWl0ZW0gbWFya2V0cGxhY2Utc2FsZXMtaXRlbVxcXCJcXG4gICAgPlxcbiAgICAgIDwhLS0gSWNvbiAtLT5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1pY29uXFxcIj5cXG4gICAgICAgIDxpbWcgc3JjPVxcXCJ7e2ljb259fVxcXCIgLz5cXG4gICAgICA8L2Rpdj5cXG5cXG4gICAgICA8IS0tIFByaWNlcyAtLT5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1jb250YWluZXJcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtbmFtZVxcXCI+e3tuYW1lfX08L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWNvbnRlbnRcXFwiPlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1jdXJyZW50UHJpY2VcXFwiPlxcbiAgICAgICAgICAgIHt7I2N1cnJlbnRQcmljZX19IHt7dHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5jdXJyZW50X3ByaWNlfX1cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicHJpY2UtaXRlbVxcXCI+e3tjdXJyZW50UHJpY2UucHJpY2V9fTwvc3Bhbj5cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwibWFhbmEtaWNvblxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgIHt7L2N1cnJlbnRQcmljZX19XFxuICAgICAgICAgICAgPGJyIC8+XFxuICAgICAgICAgICAge3sjYnV5Tm93UHJpY2V9fSB7e3RyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuYnV5X25vd19wcmljZX19XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInByaWNlLWl0ZW1cXFwiPnt7YnV5Tm93UHJpY2UucHJpY2V9fTwvc3Bhbj5cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwibWFhbmEtaWNvblxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgIHt7L2J1eU5vd1ByaWNlfX1cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG5cXG4gICAgICA8IS0tIEFjdGlvbnMgLS0+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtYWN0aW9uc1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC10aW1lXFxcIj57e2RhdGV9fTwvZGl2PlxcbiAgICAgICAgPGRpdlxcbiAgICAgICAgICBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSBtYXJrZXRwbGFjZS1pdGVtRGV0YWlsLWNhbmNlbCBkZWxldGUtYnV0dG9uXFxcIlxcbiAgICAgICAgICBkYXRhLWl0ZW1pZD1cXFwie3tpdGVtaWR9fVxcXCJcXG4gICAgICAgID5cXG4gICAgICAgICAge3t0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmRlbGV0ZX19XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9saT5cXG4gICAge3svcHVyY2hhc2VzfX1cXG4gIDwvdWw+XFxuPC9kaXY+XFxuXFxuPCEtLSBTYWxlcyAtLT5cXG48ZGl2IGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1hYnN0cmFjdFxcXCIgaWQ9XFxcInNhbGUtaGlzdG9yeVxcXCI+XFxuICA8aDIgY2xhc3M9XFxcInNlY3Rpb24tc3VidGl0bGVcXFwiPnt7dHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5zYWxlc19oaXN0b3J5fX08L2gyPlxcblxcbiAgPHVsIGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1zYWxlcy1pdGVtc1xcXCI+XFxuICAgIHt7I3NhbGVzfX1cXG4gICAgPGxpIGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1hYnN0cmFjdCBtYXJrZXRwbGFjZS1zYWxlcy1pdGVtXFxcIj5cXG4gICAgICA8IS0tIEljb24gLS0+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtaWNvblxcXCI+XFxuICAgICAgICA8aW1nIHNyYz1cXFwie3tpY29ufX1cXFwiIC8+XFxuICAgICAgPC9kaXY+XFxuXFxuICAgICAgPCEtLSBQcmljZXMgLS0+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtY29udGFpbmVyXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LW5hbWVcXFwiPnt7bmFtZX19PC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1jb250ZW50XFxcIj5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtY3VycmVudFByaWNlXFxcIj5cXG4gICAgICAgICAgICB7eyNjdXJyZW50UHJpY2V9fSB7e3RyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuY3VycmVudF9wcmljZX19XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInByaWNlLWl0ZW1cXFwiPnt7Y3VycmVudFByaWNlfX08L3NwYW4+XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcIm1hYW5hLWljb25cXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICB7ey9jdXJyZW50UHJpY2V9fVxcbiAgICAgICAgICAgIDxiciAvPlxcbiAgICAgICAgICAgIHt7I2J1eU5vd1ByaWNlfX0ge3t0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmJ1eV9ub3dfcHJpY2V9fVxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJwcmljZS1pdGVtXFxcIj57e2J1eU5vd1ByaWNlfX08L3NwYW4+XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcIm1hYW5hLWljb25cXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICB7ey9idXlOb3dQcmljZX19XFxuICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+XFxuXFxuICAgICAgPCEtLSBBY3Rpb25zIC0tPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWFjdGlvbnNcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtdGltZVxcXCI+e3tkYXRlfX08L2Rpdj5cXG4gICAgICAgIDxkaXZcXG4gICAgICAgICAgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc20gbWFya2V0cGxhY2UtaXRlbURldGFpbC1jYW5jZWwgZGVsZXRlLWJ1dHRvblxcXCJcXG4gICAgICAgID5cXG4gICAgICAgICAge3t0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmRlbGV0ZX19XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9saT5cXG4gICAge3svc2FsZXN9fVxcbiAgPC91bD5cXG48L2Rpdj5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxkaXYgaWQ9XFxcImVlLW91dGZpdC10aHVtYnNcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPHN0eWxlPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtYXZhaWxhYmxlLXNsb3Qge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvYXZhaWxhYmxlLWZhdm9yaXRlLnBuZyk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0cHggLTExcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYmFja2dyb3VuZC1zaXplOiAxNzFweCAyNDRweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBib3JkZXItcmFkaXVzOiA0NHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJveC1zaGFkb3c6IDAgMCA0cHggNHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzIC5zbG90LmVlLWF2YWlsYWJsZS1zbG90OjphZnRlciB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYmFja2dyb3VuZDogdXJsKC9zdGF0aWMvaW1nL25ldy1sYXlvdXQvd2FyZHJvYmUvaWNvbi1wbHVzLnBuZyk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgY29udGVudDogXFxcIiBcXFwiO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDZweCByZ2JhKDIzNywgMTIsIDI0NSwgMC45KSk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgaGVpZ2h0OiA3MXB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGxlZnQ6IDUwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBvcGFjaXR5OiAwO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0b3A6IDUwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IGVhc2UtaW4tb3V0IDEwMG1zO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHdpZHRoOiA2NnB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtYXZhaWxhYmxlLXNsb3Q6aG92ZXI6OmFmdGVyLFwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtb3V0Zml0LXRodW1iOmhvdmVyIHAge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIG9wYWNpdHk6IDE7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LWZhdm9yaXRlcyAuc2xvdC5lZS1vdXRmaXQtdGh1bWIgaW1nIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBib3JkZXItcmFkaXVzOiA0NHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGhlaWdodDogMTAwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB3aWR0aDogMTAwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzIC5zbG90LmVlLW91dGZpdC10aHVtYiBwIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNSk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgY29sb3I6ICNmZmY7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZm9udC1mYW1pbHk6IFxcXCJBbGVncmV5YSBTYW5zIFNDXFxcIiwgc2Fucy1zZXJpZjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmb250LXNpemU6IDIycHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBsZWZ0OiA1MCU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgb3BhY2l0eTogMDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBwYWRkaW5nOiAxMnB4IDA7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgcG9zaXRpb246IGFic29sdXRlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0b3A6IDUwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IGVhc2UtaW4tb3V0IDQwMG1zO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHdpZHRoOiAxMDAlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L3N0eWxlPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTtpZih0LnModC5mKFwib3V0Zml0c1wiLGMscCwxKSxjLHAsMCwxNjU0LDE3OTAsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcIiAgPGRpdiBjbGFzcz1cXFwic2xvdCBlZS1vdXRmaXQtdGh1bWJcXFwiIGRhdGEtYXJyYXktaW5kZXg9XFxcIlwiKTt0LmIodC52KHQuZihcImlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGltZyBhbHQ9XFxcIlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCJcXFwiIHNyYz1cXFwiXCIpO3QuYih0LnYodC5mKFwidXJsXCIsYyxwLDApKSk7dC5iKFwiXFxcIiAvPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8cD5cIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiPC9wPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7fSk7Yy5wb3AoKTt9dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxkaXYgY2xhc3M9XFxcInNsb3QgZWUtYXZhaWxhYmxlLXNsb3RcXFwiPjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxkaXYgaWQ9XFxcImVlLW91dGZpdC10aHVtYnNcXFwiPlxcbiAgPHN0eWxlPlxcbiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtYXZhaWxhYmxlLXNsb3Qge1xcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvYXZhaWxhYmxlLWZhdm9yaXRlLnBuZyk7XFxuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0cHggLTExcHg7XFxuICAgICAgYmFja2dyb3VuZC1zaXplOiAxNzFweCAyNDRweDtcXG4gICAgICBib3JkZXItcmFkaXVzOiA0NHB4O1xcbiAgICAgIGJveC1zaGFkb3c6IDAgMCA0cHggNHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcXG4gICAgfVxcblxcbiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtYXZhaWxhYmxlLXNsb3Q6OmFmdGVyIHtcXG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoL3N0YXRpYy9pbWcvbmV3LWxheW91dC93YXJkcm9iZS9pY29uLXBsdXMucG5nKTtcXG4gICAgICBjb250ZW50OiBcXFwiIFxcXCI7XFxuICAgICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgNnB4IHJnYmEoMjM3LCAxMiwgMjQ1LCAwLjkpKTtcXG4gICAgICBoZWlnaHQ6IDcxcHg7XFxuICAgICAgbGVmdDogNTAlO1xcbiAgICAgIG9wYWNpdHk6IDA7XFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgIHRvcDogNTAlO1xcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xcbiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgZWFzZS1pbi1vdXQgMTAwbXM7XFxuICAgICAgd2lkdGg6IDY2cHg7XFxuICAgIH1cXG5cXG4gICAgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzIC5zbG90LmVlLWF2YWlsYWJsZS1zbG90OmhvdmVyOjphZnRlcixcXG4gICAgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzIC5zbG90LmVlLW91dGZpdC10aHVtYjpob3ZlciBwIHtcXG4gICAgICBvcGFjaXR5OiAxO1xcbiAgICB9XFxuXFxuICAgICNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LWZhdm9yaXRlcyAuc2xvdC5lZS1vdXRmaXQtdGh1bWIgaW1nIHtcXG4gICAgICBib3JkZXItcmFkaXVzOiA0NHB4O1xcbiAgICAgIGhlaWdodDogMTAwJTtcXG4gICAgICB3aWR0aDogMTAwJTtcXG4gICAgfVxcblxcbiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtb3V0Zml0LXRodW1iIHAge1xcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41KTtcXG4gICAgICBjb2xvcjogI2ZmZjtcXG4gICAgICBmb250LWZhbWlseTogXFxcIkFsZWdyZXlhIFNhbnMgU0NcXFwiLCBzYW5zLXNlcmlmO1xcbiAgICAgIGZvbnQtc2l6ZTogMjJweDtcXG4gICAgICBmb250LXdlaWdodDogNzAwO1xcbiAgICAgIGxlZnQ6IDUwJTtcXG4gICAgICBsaW5lLWhlaWdodDogMjJweDtcXG4gICAgICBvcGFjaXR5OiAwO1xcbiAgICAgIHBhZGRpbmc6IDEycHggMDtcXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICAgIHRvcDogNTAlO1xcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xcbiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgZWFzZS1pbi1vdXQgNDAwbXM7XFxuICAgICAgd2lkdGg6IDEwMCU7XFxuICAgIH1cXG4gIDwvc3R5bGU+XFxuXFxuICB7eyNvdXRmaXRzfX1cXG4gIDxkaXYgY2xhc3M9XFxcInNsb3QgZWUtb3V0Zml0LXRodW1iXFxcIiBkYXRhLWFycmF5LWluZGV4PVxcXCJ7e2lkfX1cXFwiPlxcbiAgICA8aW1nIGFsdD1cXFwie3tuYW1lfX1cXFwiIHNyYz1cXFwie3t1cmx9fVxcXCIgLz5cXG4gICAgPHA+e3tuYW1lfX08L3A+XFxuICA8L2Rpdj5cXG4gIHt7L291dGZpdHN9fVxcblxcbiAgPGRpdiBjbGFzcz1cXFwic2xvdCBlZS1hdmFpbGFibGUtc2xvdFxcXCI+PC9kaXY+XFxuPC9kaXY+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8bGkgaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcImlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBjbGFzcz1cXFwicHJvZmlsZS1jb250YWN0LWFjdGlvbi1lZVxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8c3BhbiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbVxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxkaXYgY2xhc3M9XFxcImFjdGlvbi1kZXNjcmlwdGlvblxcXCI+XCIpO3QuYih0LnYodC5mKFwiYWN0aW9uRGVzY3JpcHRpb25cIixjLHAsMCkpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvc3Bhbj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2xpPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxsaSBpZD1cXFwie3tpZH19XFxcIiBjbGFzcz1cXFwicHJvZmlsZS1jb250YWN0LWFjdGlvbi1lZVxcXCI+XFxuICA8c3BhbiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbVxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcImFjdGlvbi1kZXNjcmlwdGlvblxcXCI+e3thY3Rpb25EZXNjcmlwdGlvbn19PC9kaXY+XFxuICA8L3NwYW4+XFxuPC9saT5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxkaXYgY2xhc3M9XFxcImFjY291bnQtbWlzYy1ibG9jIGFjY291bnQtZWUtYmxvYyBibG9jXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwhLS1cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxzdHlsZT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgdGFibGUge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHdpZHRoOiAxMDAlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB0aCB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgdGV4dC1hbGlnbjogc3RhcnQ7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgcGFkZGluZzogMWVtO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L3N0eWxlPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLS0+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPCEtLSBTZXR0aW5ncyAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxoMiBjbGFzcz1cXFwic2VjdGlvbi10aXRsZVxcXCI+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmFjY291bnQuZW5oYW5jZW1lbnRzXCIsYyxwLDApKSk7dC5iKFwiPC9oMj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDx1bCBjbGFzcz1cXFwiYWNjb3VudC1taXNjLWFjdGlvbnNcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8bGlcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBpZD1cXFwiZWUtZGVidWctZW5hYmxlZFxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSBcIik7aWYodC5zKHQuZihcImRlYnVnXCIsYyxwLDEpLGMscCwwLDM5MiwzOTgsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcImFjdGl2ZVwiKTt9KTtjLnBvcCgpO310LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgdGl0bGU9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hY2NvdW50LmRlYnVnX3Rvb2x0aXBcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgID5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuYWNjb3VudC5kZWJ1Z1wiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDwvbGk+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxsaVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGlkPVxcXCJlZS1taW5pZ2FtZXMtZW5hYmxlZFxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSBcIik7aWYodC5zKHQuZihcIm1pbmlnYW1lc1wiLGMscCwxKSxjLHAsMCw2MDAsNjA2LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCJhY3RpdmVcIik7fSk7Yy5wb3AoKTt9dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmFjY291bnQubWluaWdhbWVzXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC9saT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGxpXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgaWQ9XFxcImVlLWV4cGxvcmF0aW9ucy1lbmFibGVkXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIFwiKTtpZih0LnModC5mKFwiZXhwbG9yYXRpb25zXCIsYyxwLDEpLGMscCwwLDc3Miw3NzgsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcImFjdGl2ZVwiKTt9KTtjLnBvcCgpO310LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgID5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuYWNjb3VudC5leHBsb3JhdGlvbnNcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L2xpPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8bGlcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBpZD1cXFwiZWUtbWFya2V0LWVuYWJsZWRcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc20gXCIpO2lmKHQucyh0LmYoXCJtYXJrZXRcIixjLHAsMSksYyxwLDAsOTM4LDk0NCxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiYWN0aXZlXCIpO30pO2MucG9wKCk7fXQuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hY2NvdW50Lm1hcmtldFwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDwvbGk+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxsaSBpZD1cXFwiZWUtaW1wb3J0XFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbVxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmFjY291bnQuaW1wb3J0XCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC9saT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGxpIGlkPVxcXCJlZS1leHBvcnRcXFwiIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuYWNjb3VudC5leHBvcnRcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L2xpPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC91bD5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8IS0tIEV4cGxvcmF0aW9uc1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGgzIGNsYXNzPVxcXCJzZWN0aW9uLXRpdGxlXFxcIj5FeHBsb3JhdGlvbnM8L2gzPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPHRhYmxlPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8dGhlYWQ+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPHRoPkxvY2F0aW9uPC90aD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8dGg+RGVsZXRlPC90aD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC90aGVhZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPHRib2R5PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0ZD5Sb2NrPC90ZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8dGQ+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2IGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtXFxcIj5EZWxldGU8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L3RkPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L3Rib2R5PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC90YWJsZT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxkaXYgY2xhc3M9XFxcImFjY291bnQtbWlzYy1ibG9jIGFjY291bnQtZWUtYmxvYyBibG9jXFxcIj5cXG4gIDwhLS1cXG4gIDxzdHlsZT5cXG4gICAgdGFibGUge1xcbiAgICAgIHdpZHRoOiAxMDAlO1xcbiAgICB9XFxuXFxuICAgIHRoIHtcXG4gICAgICB0ZXh0LWFsaWduOiBzdGFydDtcXG4gICAgICBwYWRkaW5nOiAxZW07XFxuICAgIH1cXG4gIDwvc3R5bGU+XFxuICAtLT5cXG5cXG4gIDwhLS0gU2V0dGluZ3MgLS0+XFxuICA8aDIgY2xhc3M9XFxcInNlY3Rpb24tdGl0bGVcXFwiPnt7dHJhbnNsYXRlLmFjY291bnQuZW5oYW5jZW1lbnRzfX08L2gyPlxcbiAgPHVsIGNsYXNzPVxcXCJhY2NvdW50LW1pc2MtYWN0aW9uc1xcXCI+XFxuICAgIDxsaVxcbiAgICAgIGlkPVxcXCJlZS1kZWJ1Zy1lbmFibGVkXFxcIlxcbiAgICAgIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIHt7I2RlYnVnfX1hY3RpdmV7ey9kZWJ1Z319XFxcIlxcbiAgICAgIHRpdGxlPVxcXCJ7e3RyYW5zbGF0ZS5hY2NvdW50LmRlYnVnX3Rvb2x0aXB9fVxcXCJcXG4gICAgPlxcbiAgICAgIHt7dHJhbnNsYXRlLmFjY291bnQuZGVidWd9fVxcbiAgICA8L2xpPlxcbiAgICA8bGlcXG4gICAgICBpZD1cXFwiZWUtbWluaWdhbWVzLWVuYWJsZWRcXFwiXFxuICAgICAgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc20ge3sjbWluaWdhbWVzfX1hY3RpdmV7ey9taW5pZ2FtZXN9fVxcXCJcXG4gICAgPlxcbiAgICAgIHt7dHJhbnNsYXRlLmFjY291bnQubWluaWdhbWVzfX1cXG4gICAgPC9saT5cXG4gICAgPGxpXFxuICAgICAgaWQ9XFxcImVlLWV4cGxvcmF0aW9ucy1lbmFibGVkXFxcIlxcbiAgICAgIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIHt7I2V4cGxvcmF0aW9uc319YWN0aXZle3svZXhwbG9yYXRpb25zfX1cXFwiXFxuICAgID5cXG4gICAgICB7e3RyYW5zbGF0ZS5hY2NvdW50LmV4cGxvcmF0aW9uc319XFxuICAgIDwvbGk+XFxuICAgIDxsaVxcbiAgICAgIGlkPVxcXCJlZS1tYXJrZXQtZW5hYmxlZFxcXCJcXG4gICAgICBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSB7eyNtYXJrZXR9fWFjdGl2ZXt7L21hcmtldH19XFxcIlxcbiAgICA+XFxuICAgICAge3t0cmFuc2xhdGUuYWNjb3VudC5tYXJrZXR9fVxcbiAgICA8L2xpPlxcbiAgICA8bGkgaWQ9XFxcImVlLWltcG9ydFxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc21cXFwiPlxcbiAgICAgIHt7dHJhbnNsYXRlLmFjY291bnQuaW1wb3J0fX1cXG4gICAgPC9saT5cXG4gICAgPGxpIGlkPVxcXCJlZS1leHBvcnRcXFwiIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtXFxcIj5cXG4gICAgICB7e3RyYW5zbGF0ZS5hY2NvdW50LmV4cG9ydH19XFxuICAgIDwvbGk+XFxuICA8L3VsPlxcblxcbiAgPCEtLSBFeHBsb3JhdGlvbnNcXG4gIDxoMyBjbGFzcz1cXFwic2VjdGlvbi10aXRsZVxcXCI+RXhwbG9yYXRpb25zPC9oMz5cXG4gIDx0YWJsZT5cXG4gICAgPHRoZWFkPlxcbiAgICAgIDx0aD5Mb2NhdGlvbjwvdGg+XFxuICAgICAgPHRoPkRlbGV0ZTwvdGg+XFxuICAgIDwvdGhlYWQ+XFxuICAgIDx0Ym9keT5cXG4gICAgICA8dGQ+Um9jazwvdGQ+XFxuICAgICAgPHRkPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbVxcXCI+RGVsZXRlPC9kaXY+XFxuICAgICAgPC90ZD5cXG4gICAgPC90Ym9keT5cXG4gIDwvdGFibGU+XFxuICAtLT5cXG48L2Rpdj5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxhIGlkPVxcXCJ3aXNobGlzdC1idXR0b25cXFwiIGNsYXNzPVxcXCJubC1idXR0b25cXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC50aXRsZVwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9hPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxhIGlkPVxcXCJ3aXNobGlzdC1idXR0b25cXFwiIGNsYXNzPVxcXCJubC1idXR0b25cXFwiPlxcbiAge3t0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LnRpdGxlfX1cXG48L2E+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8c3R5bGU+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB0YWJsZSB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHRleHQtYWxpZ246IGNlbnRlcjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgd2lkdGg6IDEwMCU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLmFjdGlvbi1waWN0byB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGhlaWdodDogNTBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgd2lkdGg6IDUwcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGN1cnNvcjogcG9pbnRlcjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAuYWN0aW9uLXBpY3RvOmhvdmVyOm5vdCguZGlzYWJsZWQpLFwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLmVkaXQtcHJpY2U6aG92ZXIge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBhbmltYXRpb246IGJ1dHRvbi1ib3VuY2UgMzAwbXMgbGluZWFyIGZvcndhcmRzO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4wNSkgY29udHJhc3QoMS4xKTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAuZWRpdC1wcmljZSB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGN1cnNvcjogcG9pbnRlcjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBpbWcuZGlzYWJsZWQge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBmaWx0ZXI6IGdyYXlzY2FsZSgxKTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAuaXRlbS1pY29uLWNvbnRhaW5lciB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgcG9zaXRpb246IHJlbGF0aXZlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC5pdGVtLWljb24ge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB3aWR0aDogMTAwcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGhlaWdodDogMTAwcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9zdHlsZT5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPHRhYmxlPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPHRoZWFkPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8dHI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPHRoPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QuaWNvblwiLGMscCwwKSkpO3QuYihcIjwvdGg+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPHRoPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QubmFtZVwiLGMscCwwKSkpO3QuYihcIjwvdGg+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPHRoPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QucHJpY2VcIixjLHAsMCkpKTt0LmIoXCI8L3RoPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0aD5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LnN0YXR1c1wiLGMscCwwKSkpO3QuYihcIjwvdGg+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPHRoPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QuYWN0aW9uc1wiLGMscCwwKSkpO3QuYihcIjwvdGg+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDwvdHI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L3RoZWFkPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPHRib2R5PlwiKTt0LmIoXCJcXG5cIiArIGkpO2lmKHQucyh0LmYoXCJ3aXNobGlzdFwiLGMscCwxKSxjLHAsMCw4NzIsMjI2MCxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiICAgIDx0ciBjbGFzcz1cXFwibWFya2V0cGxhY2UtYWJzdHJhY3RcXFwiIGRhdGEtaWNvbj1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWNvblwiLGMscCwwKSkpO3QuYihcIlxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPCEtLSBJY29uIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0ZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXYgY2xhc3M9XFxcIml0ZW0taWNvbi1jb250YWluZXJcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICA8aW1nIGNsYXNzPVxcXCJpdGVtLWljb25cXFwiIHNyYz1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWNvblwiLGMscCwwKSkpO3QuYihcIlxcXCIgYWx0PVxcXCJcIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiXFxcIiAvPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyYXJpdHktbWFya2VyLVwiKTt0LmIodC52KHQuZihcInJhcml0eVwiLGMscCwwKSkpO3QuYihcIlxcXCI+PC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L3RkPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8IS0tIE5hbWUgLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPHRkPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtbmFtZVxcXCI+XCIpO3QuYih0LnYodC5mKFwibmFtZVwiLGMscCwwKSkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtdHlwZVxcXCI+XCIpO3QuYih0LnYodC5mKFwiYWJzdHJhY3RUeXBlXCIsYyxwLDApKSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPC90ZD5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPCEtLSBQcmljZSAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8dGQ+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIGNsYXNzPVxcXCJlZGl0LXByaWNlXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICB0aXRsZT1cXFwiXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5jaGFuZ2VfcHJpY2VcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJwcmljZS1pdGVtXFxcIj5cIik7dC5iKHQudih0LmYoXCJwcmljZVwiLGMscCwwKSkpO3QuYihcIjwvc3Bhbj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcIm1hYW5hLWljb25cXFwiIGFsdD1cXFwibWFhbmFzXFxcIj48L3NwYW4+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L3RkPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8IS0tIEVycm9yIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0ZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxwIGNsYXNzPVxcXCJlcnJvclxcXCI+XCIpO3QuYih0LnYodC5mKFwiZXJyb3JcIixjLHAsMCkpKTt0LmIoXCI8L3A+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPC90ZD5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPCEtLSBBY3Rpb25zIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0ZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxpbWdcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgY2xhc3M9XFxcImFjdGlvbi1waWN0byByZXNldC1pdGVtLXN0YXR1cyBcIik7aWYoIXQucyh0LmYoXCJlcnJvclwiLGMscCwxKSxjLHAsMSwwLDAsXCJcIikpe3QuYihcImRpc2FibGVkXCIpO307dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBzcmM9XFxcIi9zdGF0aWMvaW1nL25ldy1sYXlvdXQvd2FyZHJvYmUvcmVzZXQtYnRuLnBuZ1xcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgdGl0bGU9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QucmVzZXRfdG9vbHRpcFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgYWx0PVxcXCJcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LnJlc2V0XCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgLz5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxpbWdcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgY2xhc3M9XFxcImFjdGlvbi1waWN0byBkZWxldGUtd2lzaGxpc3QtaXRlbVxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgc3JjPVxcXCIvc3RhdGljL2ltZy9uZXctbGF5b3V0L3dhcmRyb2JlL2RlbGV0ZS5wbmdcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIHRpdGxlPVxcXCJcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LmRlbGV0ZV90b29sdGlwXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBhbHQ9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QuZGVsZXRlXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgLz5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L3RkPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L3RyPlwiKTt0LmIoXCJcXG5cIiArIGkpO30pO2MucG9wKCk7fXQuYihcIiAgPC90Ym9keT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L3RhYmxlPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxzdHlsZT5cXG4gIHRhYmxlIHtcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG5cXG4gIC5hY3Rpb24tcGljdG8ge1xcbiAgICBoZWlnaHQ6IDUwcHg7XFxuICAgIHdpZHRoOiA1MHB4O1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICB9XFxuXFxuICAuYWN0aW9uLXBpY3RvOmhvdmVyOm5vdCguZGlzYWJsZWQpLFxcbiAgLmVkaXQtcHJpY2U6aG92ZXIge1xcbiAgICBhbmltYXRpb246IGJ1dHRvbi1ib3VuY2UgMzAwbXMgbGluZWFyIGZvcndhcmRzO1xcbiAgICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4wNSkgY29udHJhc3QoMS4xKTtcXG4gIH1cXG5cXG4gIC5lZGl0LXByaWNlIHtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgfVxcblxcbiAgaW1nLmRpc2FibGVkIHtcXG4gICAgZmlsdGVyOiBncmF5c2NhbGUoMSk7XFxuICB9XFxuXFxuICAuaXRlbS1pY29uLWNvbnRhaW5lciB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgfVxcblxcbiAgLml0ZW0taWNvbiB7XFxuICAgIHdpZHRoOiAxMDBweDtcXG4gICAgaGVpZ2h0OiAxMDBweDtcXG4gIH1cXG48L3N0eWxlPlxcblxcbjx0YWJsZT5cXG4gIDx0aGVhZD5cXG4gICAgPHRyPlxcbiAgICAgIDx0aD57e3RyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QuaWNvbn19PC90aD5cXG4gICAgICA8dGg+e3t0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0Lm5hbWV9fTwvdGg+XFxuICAgICAgPHRoPnt7dHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5wcmljZX19PC90aD5cXG4gICAgICA8dGg+e3t0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LnN0YXR1c319PC90aD5cXG4gICAgICA8dGg+e3t0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LmFjdGlvbnN9fTwvdGg+XFxuICAgIDwvdHI+XFxuICA8L3RoZWFkPlxcbiAgPHRib2R5PlxcbiAgICB7eyN3aXNobGlzdH19XFxuICAgIDx0ciBjbGFzcz1cXFwibWFya2V0cGxhY2UtYWJzdHJhY3RcXFwiIGRhdGEtaWNvbj1cXFwie3tpY29ufX1cXFwiPlxcbiAgICAgIDwhLS0gSWNvbiAtLT5cXG4gICAgICA8dGQ+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpdGVtLWljb24tY29udGFpbmVyXFxcIj5cXG4gICAgICAgICAgPGltZyBjbGFzcz1cXFwiaXRlbS1pY29uXFxcIiBzcmM9XFxcInt7aWNvbn19XFxcIiBhbHQ9XFxcInt7bmFtZX19XFxcIiAvPlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyYXJpdHktbWFya2VyLXt7cmFyaXR5fX1cXFwiPjwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgPC90ZD5cXG5cXG4gICAgICA8IS0tIE5hbWUgLS0+XFxuICAgICAgPHRkPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtbmFtZVxcXCI+e3tuYW1lfX08L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LXR5cGVcXFwiPnt7YWJzdHJhY3RUeXBlfX08L2Rpdj5cXG4gICAgICA8L3RkPlxcblxcbiAgICAgIDwhLS0gUHJpY2UgLS0+XFxuICAgICAgPHRkPlxcbiAgICAgICAgPGRpdlxcbiAgICAgICAgICBjbGFzcz1cXFwiZWRpdC1wcmljZVxcXCJcXG4gICAgICAgICAgdGl0bGU9XFxcInt7dHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5jaGFuZ2VfcHJpY2V9fVxcXCJcXG4gICAgICAgID5cXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInByaWNlLWl0ZW1cXFwiPnt7cHJpY2V9fTwvc3Bhbj5cXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XFxcIm1hYW5hLWljb25cXFwiIGFsdD1cXFwibWFhbmFzXFxcIj48L3NwYW4+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICA8L3RkPlxcblxcbiAgICAgIDwhLS0gRXJyb3IgLS0+XFxuICAgICAgPHRkPlxcbiAgICAgICAgPHAgY2xhc3M9XFxcImVycm9yXFxcIj57e2Vycm9yfX08L3A+XFxuICAgICAgPC90ZD5cXG5cXG4gICAgICA8IS0tIEFjdGlvbnMgLS0+XFxuICAgICAgPHRkPlxcbiAgICAgICAgPGltZ1xcbiAgICAgICAgICBjbGFzcz1cXFwiYWN0aW9uLXBpY3RvIHJlc2V0LWl0ZW0tc3RhdHVzIHt7XmVycm9yfX1kaXNhYmxlZHt7L2Vycm9yfX1cXFwiXFxuICAgICAgICAgIHNyYz1cXFwiL3N0YXRpYy9pbWcvbmV3LWxheW91dC93YXJkcm9iZS9yZXNldC1idG4ucG5nXFxcIlxcbiAgICAgICAgICB0aXRsZT1cXFwie3t0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LnJlc2V0X3Rvb2x0aXB9fVxcXCJcXG4gICAgICAgICAgYWx0PVxcXCJ7e3RyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QucmVzZXR9fVxcXCJcXG4gICAgICAgIC8+XFxuICAgICAgICA8aW1nXFxuICAgICAgICAgIGNsYXNzPVxcXCJhY3Rpb24tcGljdG8gZGVsZXRlLXdpc2hsaXN0LWl0ZW1cXFwiXFxuICAgICAgICAgIHNyYz1cXFwiL3N0YXRpYy9pbWcvbmV3LWxheW91dC93YXJkcm9iZS9kZWxldGUucG5nXFxcIlxcbiAgICAgICAgICB0aXRsZT1cXFwie3t0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LmRlbGV0ZV90b29sdGlwfX1cXFwiXFxuICAgICAgICAgIGFsdD1cXFwie3t0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LmRlbGV0ZX19XFxcIlxcbiAgICAgICAgLz5cXG4gICAgICA8L3RkPlxcbiAgICA8L3RyPlxcbiAgICB7ey93aXNobGlzdH19XFxuICA8L3Rib2R5PlxcbjwvdGFibGU+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwiaW1wb3J0IHsgQm9keUxvY2F0aW9uIH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2VudW1zL2JvZHlfbG9jYXRpb24uZW51bVwiXG5pbXBvcnQgeyBDYXRlZ29yeU51bWJlciB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9lbnVtcy9jYXRlZ29yeS5lbnVtXCJcbmltcG9ydCB7IEd1YXJkIH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2VudW1zL2d1YXJkLmVudW1cIlxuaW1wb3J0IHsgUmFyaXR5IH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2VudW1zL3Jhcml0eS5lbnVtXCJcbmltcG9ydCB7IFR5cGUgfSBmcm9tIFwiLi4vbWFya2V0cGxhY2UvZW51bXMvdHlwZS5lbnVtXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFqYXhTZWFyY2goZGF0YToge1xuICB0eXBlPzogVHlwZVxuICBib2R5TG9jYXRpb24/OiBCb2R5TG9jYXRpb25cbiAgY2F0ZWdvcnk/OiBDYXRlZ29yeU51bWJlclxuICByYXJpdHk/OiBSYXJpdHlcbiAgcHJpY2U/OiBudW1iZXIgfCBcIlwiXG4gIGd1YXJkPzogR3VhcmRcbiAgLyoqIFBhZ2UgbnVtYmVyLCBpbmRleGVkIGJ5IDEgKi9cbiAgcGFnZTogbnVtYmVyXG4gIG5hbWU/OiBzdHJpbmdcbn0pOiBQcm9taXNlPHN0cmluZz4ge1xuICBkYXRhID0ge1xuICAgIC4uLntcbiAgICAgIHR5cGU6IFR5cGUuQWxsLFxuICAgICAgYm9keUxvY2F0aW9uOiBCb2R5TG9jYXRpb24uQWxsLFxuICAgICAgY2F0ZWdvcnk6IENhdGVnb3J5TnVtYmVyLmFsbCxcbiAgICAgIHJhcml0eTogUmFyaXR5LmFsbCxcbiAgICAgIHByaWNlOiBcIlwiLFxuICAgICAgZ3VhcmQ6IEd1YXJkLmFueSxcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBuYW1lOiBcIlwiLFxuICAgIH0sXG4gICAgLi4uZGF0YSxcbiAgfVxuXG4gIGNvbnN0IElURU1TX1BFUl9QQUdFID0gOFxuICByZXR1cm4gKGF3YWl0ICQuZ2V0KFwiL21hcmtldHBsYWNlL2FqYXhfc2VhcmNoXCIsIHtcbiAgICAuLi5kYXRhLFxuICAgIGZyb206IChkYXRhLnBhZ2UgLSAxKSAqIElURU1TX1BFUl9QQUdFLFxuICAgIHRvOiBJVEVNU19QRVJfUEFHRSxcbiAgfSkpIGFzIHN0cmluZ1xufVxuIiwiaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vYXBpL3BhY2tldFwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1eShpdGVtSWQ6IG51bWJlcik6IFByb21pc2U8UGFja2V0PFwiXCI+PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICB2b2lkICQucG9zdChcbiAgICAgIFwiL21hcmtldHBsYWNlL2J1eVwiLFxuICAgICAgeyBpZDogaXRlbUlkIH0sXG4gICAgICAoanNvbjogUGFja2V0PFwiXCI+KTogdm9pZCA9PiB7XG4gICAgICAgIExvY2FsU3RvcmFnZS5tZXRhID0ganNvbi5tZXRhXG4gICAgICAgIHJlc29sdmUoanNvbilcblxuICAgICAgICBpZiAoanNvbi5yZXN1bHQgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgJC5mbGF2ck5vdGlmKGpzb24uZGF0YSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwianNvblwiXG4gICAgKVxuICB9KVxufVxuIiwiaW1wb3J0IHR5cGUgeyBFeHBsb3JhdGlvblJlc3VsdHNEYXRhIH0gZnJvbSBcIi4uL2FwaS9leHBsb3JhdGlvbl9yZXN1bHRzX2RhdGFcIlxuaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vYXBpL3BhY2tldFwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVFbmQoKTogUHJvbWlzZTxQYWNrZXQ8RXhwbG9yYXRpb25SZXN1bHRzRGF0YT4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHZvaWQgJC5wb3N0KFxuICAgICAgXCIvcGV0L2NhcHR1cmUvZW5kXCIsXG4gICAgICAoanNvbjogUGFja2V0PEV4cGxvcmF0aW9uUmVzdWx0c0RhdGE+KTogdm9pZCA9PiB7XG4gICAgICAgIExvY2FsU3RvcmFnZS5tZXRhID0ganNvbi5tZXRhXG4gICAgICAgIHJlc29sdmUoanNvbilcblxuICAgICAgICBpZiAoanNvbi5yZXN1bHQgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgJC5mbGF2ck5vdGlmKGpzb24uZGF0YSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgfSlcbn1cbiIsImltcG9ydCB0eXBlIHsgQ2hhbmdlUmVnaW9uRGF0YSB9IGZyb20gXCIuLi9hcGkvY2hhbmdlX3JlZ2lvbl9kYXRhXCJcbmltcG9ydCB0eXBlIHsgUGFja2V0IH0gZnJvbSBcIi4uL2FwaS9wYWNrZXRcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGFuZ2VSZWdpb24oXG4gIG5ld1JlZ2lvbklkOiBudW1iZXJcbik6IFByb21pc2U8UGFja2V0PENoYW5nZVJlZ2lvbkRhdGE+PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxQYWNrZXQ8Q2hhbmdlUmVnaW9uRGF0YT4+KChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgdm9pZCAkLnBvc3QoXG4gICAgICBcIi9wZXQvY2hhbmdlUmVnaW9uXCIsXG4gICAgICB7IG5ld1JlZ2lvbklkIH0sXG4gICAgICAoanNvbjogUGFja2V0PENoYW5nZVJlZ2lvbkRhdGE+KTogdm9pZCA9PiB7XG4gICAgICAgIExvY2FsU3RvcmFnZS5tZXRhID0ganNvbi5tZXRhXG4gICAgICAgIHJlc29sdmUoanNvbilcblxuICAgICAgICBpZiAoanNvbi5yZXN1bHQgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgJC5mbGF2ck5vdGlmKGpzb24uZGF0YSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRSZWdpb24gPSBqc29uLmRhdGEuY3VycmVudFJlZ2lvblxuXG4gICAgICAgIHBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbiA9XG4gICAgICAgICAgdHlwZW9mIGpzb24uZGF0YS5wZW5kaW5nVHJlYXN1cmVIdW50TG9jYXRpb24gPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBqc29uLmRhdGEucGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uXG5cbiAgICAgICAgdGltZUxlZnRFeHBsb3JhdGlvbiA9XG4gICAgICAgICAgdHlwZW9mIGpzb24uZGF0YS50aW1lTGVmdEV4cGxvcmF0aW9uID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDoganNvbi5kYXRhLnRpbWVMZWZ0RXhwbG9yYXRpb25cbiAgICAgIH1cbiAgICApXG4gIH0pXG59XG4iLCJpbXBvcnQgdHlwZSB7IEV4cGxvcmF0aW9uUmVzdWx0c0RhdGEgfSBmcm9tIFwiLi4vYXBpL2V4cGxvcmF0aW9uX3Jlc3VsdHNfZGF0YVwiXG5pbXBvcnQgdHlwZSB7IFBhY2tldCB9IGZyb20gXCIuLi9hcGkvcGFja2V0XCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwbG9yYXRpb25SZXN1bHRzKCk6IFByb21pc2U8XG4gIFBhY2tldDxFeHBsb3JhdGlvblJlc3VsdHNEYXRhPlxuPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxQYWNrZXQ8RXhwbG9yYXRpb25SZXN1bHRzRGF0YT4+KChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgdm9pZCAkLnBvc3QoXG4gICAgICBcIi9wZXQvZXhwbG9yYXRpb25SZXN1bHRzXCIsXG4gICAgICAoanNvbjogUGFja2V0PEV4cGxvcmF0aW9uUmVzdWx0c0RhdGE+KTogdm9pZCA9PiB7XG4gICAgICAgIExvY2FsU3RvcmFnZS5tZXRhID0ganNvbi5tZXRhXG4gICAgICAgIHJlc29sdmUoanNvbilcblxuICAgICAgICBpZiAoanNvbi5yZXN1bHQgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgJC5mbGF2ck5vdGlmKGpzb24uZGF0YSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgfSlcbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgTWV0YSB7XG4gIGV2ZW50OiBNZXRhRXZlbnRcbiAgbWVzc2FnZTogTWVzc2FnZVxuICBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25zXG4gIHBldDogUGV0XG4gIHBsYXllcjogUGxheWVyXG4gIHB1cnJvc2hvcDogUHVycm9zaG9wXG59XG5cbnR5cGUgTWV0YUV2ZW50ID0gXCJlYXN0ZXJcIiB8IG51bGxcblxuaW50ZXJmYWNlIE1lc3NhZ2Uge1xuICB1bnJlYWQ6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgUGV0IHtcbiAgLyoqIEV4cGxvcmF0aW9uIGlzIGZpbmlzaGVkICovXG4gIGV4cGxvcmF0aW9uOiBib29sZWFuXG4gIHBvcnRyYWl0OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIFBsYXllciB7XG4gIGRhaWx5TWFhbmE6IGJvb2xlYW5cbiAgZ29sZDogQ3VycmVuY3lcbiAgbGVnYWN5Q3VycmVuY3k6IEN1cnJlbmN5XG4gIG1hYW5hOiBDdXJyZW5jeVxuICBwdXJyb3Bhc3M6IFB1cnJvcGFzc1xuICB1bnJlYWROZXdzOiBudWxsXG4gIHhwOiBYUFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1cnJlbmN5IHtcbiAgY2hhbmdlOiBDaGFuZ2VcbiAgdGV4dDogc3RyaW5nXG4gIHZhbHVlOiBudW1iZXJcbn1cblxuaW50ZXJmYWNlIENoYW5nZSB7XG4gIHRleHQ6IHN0cmluZ1xuICB2YWx1ZTogbnVtYmVyXG59XG5cbmludGVyZmFjZSBQdXJyb3Bhc3Mge1xuICBjaGFuZ2U6IENoYW5nZVxuICB0ZXh0OiBzdHJpbmdcbiAgdmFsdWU6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgWFAge1xuICBnb2FsOiBudW1iZXJcbiAgbGV2ZWw6IG51bWJlclxuICB2YWx1ZTogbnVtYmVyXG59XG5cbmludGVyZmFjZSBQdXJyb3Nob3Age1xuICBzdGF0dXM6IFB1cnJvc2hvcFN0YXR1c1xufVxuXG5pbnRlcmZhY2UgTm90aWZpY2F0aW9ucyB7XG4gIGRpc3BsYXlUaW1lOiBudW1iZXJcbiAgbWVzc2FnZTogc3RyaW5nXG4gIHR5cGU6IHN0cmluZ1xufVxuXG5leHBvcnQgZW51bSBQdXJyb3Nob3BTdGF0dXMge1xuICBkaXNhYmxlZCA9IFwiZGlzYWJsZWRcIixcbiAgZW5hYmxlZCA9IFwiZW5hYmxlZFwiLFxufVxuIiwiZXhwb3J0IGVudW0gUmVzdWx0IHtcbiAgZXJyb3IgPSBcImVycm9yXCIsXG4gIHN1Y2Nlc3MgPSBcInN1Y2Nlc3NcIixcbn1cbiIsImltcG9ydCB3YXJkcm9iZSBmcm9tIFwiLi93YXJkcm9iZVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXBwZWFyYW5jZVVJKCk6IHZvaWQge1xuICBzZXR1cEJhY2tncm91bmQoKVxuICBzZXR1cExlZnRQYW5lbCgpXG4gIHNldHVwUmlnaHRQYW5lbCgpXG5cbiAgaWYgKHdhcmRyb2JlLmF2YWlsYWJsZUl0ZW1zKSBhdmFpbGFibGVJdGVtcyA9IHdhcmRyb2JlLmF2YWlsYWJsZUl0ZW1zXG4gIGVsc2Ugd2FyZHJvYmUuYXZhaWxhYmxlSXRlbXMgPSBhdmFpbGFibGVJdGVtc1xufVxuXG5mdW5jdGlvbiBzZXR1cEJhY2tncm91bmQoKTogdm9pZCB7XG4gIGNvbnN0IGJhY2tncm91bmQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxJbWFnZUVsZW1lbnQ+KFxuICAgIFwiI2F2YXRhci1iYWNrZ3JvdW5kIGltZ1wiXG4gIClcbiAgaWYgKGJhY2tncm91bmQpIHtcbiAgICBiYWNrZ3JvdW5kLnN0eWxlLmZpbHRlciA9IFwidW5zZXRcIlxuICAgIGJhY2tncm91bmQuc3R5bGUuaGVpZ2h0ID0gXCJ1bnNldFwiXG4gICAgYmFja2dyb3VuZC5zdHlsZS5tYXNrID1cbiAgICAgIFwibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBibGFjayA1MCUsIHRyYW5zcGFyZW50IDEwMCUpXCJcbiAgICBiYWNrZ3JvdW5kLnN0eWxlLm1pbkhlaWdodCA9IFwiMTAwdmhcIlxuICAgIGJhY2tncm91bmQuc3R5bGUubWluV2lkdGggPSBcIjUwdndcIlxuICAgIGJhY2tncm91bmQuc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCJcbiAgICBiYWNrZ3JvdW5kLnN0eWxlLnRyYW5zZm9ybSA9IFwidW5zZXRcIlxuICAgIGJhY2tncm91bmQuc3R5bGUud2lkdGggPSBcInVuc2V0XCJcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXR1cFJpZ2h0UGFuZWwoKTogdm9pZCB7XG4gIGNvbnN0IHJpZ2h0UGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFwcGVhcmFuY2UtcmlnaHRcIilcbiAgaWYgKHJpZ2h0UGFuZWwpIHJpZ2h0UGFuZWwuc3R5bGUucGFkZGluZ1RvcCA9IFwiODBweFwiXG59XG5cbmZ1bmN0aW9uIHNldHVwTGVmdFBhbmVsKCk6IHZvaWQge1xuICBjb25zdCBwcmV2aWV3T3V0ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFwcGVhcmFuY2UtcHJldmlldy1vdXRlclwiKVxuICBpZiAocHJldmlld091dGVyKSB7XG4gICAgcHJldmlld091dGVyLnN0eWxlLnBhZGRpbmcgPSBcIjBweFwiXG4gIH1cblxuICBjb25zdCBwcmV2aWV3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhcHBlYXJhbmNlLXByZXZpZXdcIilcbiAgaWYgKHByZXZpZXcpIHtcbiAgICBwcmV2aWV3LnN0eWxlLmxlZnQgPSBcIjBcIlxuICAgIHByZXZpZXcuc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCJcbiAgICBwcmV2aWV3LnN0eWxlLnRvcCA9IFwiY2FsYyg1MCUgLSB2YXIoLS10b3BiYXItaGVpZ2h0KSlcIlxuICAgIHByZXZpZXcuc3R5bGUudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGVZKC01MCUpXCJcbiAgfVxuXG4gIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTENhbnZhc0VsZW1lbnQ+KFxuICAgIFwiI2FwcGVhcmFuY2UtcHJldmlldyBjYW52YXNcIlxuICApXG4gIGlmIChjYW52YXMpIHtcbiAgICBjYW52YXMuc3R5bGUubWF4SGVpZ2h0ID0gXCIxMDB2aFwiXG4gICAgY2FudmFzLnN0eWxlLm1heFdpZHRoID0gXCI1MHZ3XCJcbiAgfVxufVxuIiwiaW1wb3J0IHsgdHJpbUljb24gfSBmcm9tIFwiLi4vZWxkYXJ5YV91dGlsXCJcbmltcG9ydCB0eXBlIHsgQXBwZWFyYW5jZUNhdGVnb3J5IH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2FwcGVhcmFuY2VfY2F0ZWdvcnlcIlxuaW1wb3J0IHR5cGUgeyBBcHBlYXJhbmNlR3JvdXAgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvYXBwZWFyYW5jZV9ncm91cFwiXG5pbXBvcnQgdHlwZSB7IEFwcGVhcmFuY2VJdGVtIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2FwcGVhcmFuY2VfaXRlbVwiXG5pbXBvcnQgdHlwZSB7IEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUgfSBmcm9tIFwiLi9lbnVtcy9hcHBlYXJhbmNlX2NhdGVnb3J5X2NvZGUuZW51bVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBjYXRlZ29yeUNvbnRhaW5lckRhdGFTZXQoXG4gIGNhdGVnb3J5Q29udGFpbmVyOiBIVE1MRGl2RWxlbWVudFxuKTogQXBwZWFyYW5jZUNhdGVnb3J5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyBjYXRlZ29yeWlkLCBjYXRlZ29yeSwgY2F0ZWdvcnluYW1lIH0gPSBjYXRlZ29yeUNvbnRhaW5lci5kYXRhc2V0XG4gIGlmICghY2F0ZWdvcnlpZCB8fCAhY2F0ZWdvcnkgfHwgIWNhdGVnb3J5bmFtZSkgcmV0dXJuXG4gIHJldHVybiB7XG4gICAgY2F0ZWdvcnlpZDogTnVtYmVyKGNhdGVnb3J5aWQpLFxuICAgIGNhdGVnb3J5OiBjYXRlZ29yeSBhcyBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLFxuICAgIGNhdGVnb3J5bmFtZSxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2F0ZWdvcnlHcm91cERhdGFTZXQoXG4gIGdyb3VwSXRlbTogSFRNTExJRWxlbWVudCxcbiAgYXBwZWFyYW5jZUNhdGVnb3J5OiBBcHBlYXJhbmNlQ2F0ZWdvcnlcbik6IEFwcGVhcmFuY2VHcm91cCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHsgaXRlbWlkLCBncm91cCwgbmFtZSwgcmFyaXR5LCByYXJpdHluYW1lIH0gPSBncm91cEl0ZW0uZGF0YXNldFxuICBpZiAoIWl0ZW1pZCB8fCAhZ3JvdXAgfHwgIW5hbWUgfHwgIXJhcml0eSB8fCAhcmFyaXR5bmFtZSkgcmV0dXJuXG4gIHJldHVybiB7XG4gICAgLi4uYXBwZWFyYW5jZUNhdGVnb3J5LFxuICAgIGl0ZW1pZDogTnVtYmVyKGl0ZW1pZCksXG4gICAgZ3JvdXA6IE51bWJlcihncm91cCksXG4gICAgbmFtZSxcbiAgICByYXJpdHksXG4gICAgcmFyaXR5bmFtZSxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXRlbURhdGFTZXQoXG4gIGxpOiBIVE1MTElFbGVtZW50LFxuICBhcHBlYXJhbmNlR3JvdXA6IEFwcGVhcmFuY2VHcm91cFxuKTogQXBwZWFyYW5jZUl0ZW0gfCB1bmRlZmluZWQge1xuICBjb25zdCB7IGl0ZW1pZCwgbmFtZSwgcmFyaXR5LCByYXJpdHluYW1lIH0gPSBsaS5kYXRhc2V0XG4gIGNvbnN0IGljb24gPSBsaS5xdWVyeVNlbGVjdG9yKFwiaW1nXCIpPy5zcmNcbiAgaWYgKCFpdGVtaWQgfHwgIW5hbWUgfHwgIXJhcml0eSB8fCAhcmFyaXR5bmFtZSB8fCAhaWNvbikgcmV0dXJuXG5cbiAgcmV0dXJuIHtcbiAgICAuLi5hcHBlYXJhbmNlR3JvdXAsXG4gICAgaXRlbWlkOiBOdW1iZXIoaXRlbWlkKSxcbiAgICBuYW1lLFxuICAgIHJhcml0eSxcbiAgICByYXJpdHluYW1lLFxuICAgIGljb246IHRyaW1JY29uKGljb24pLFxuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBpc0VudW0gfSBmcm9tIFwiLi4vdHNfdXRpbFwiXG5pbXBvcnQgeyBsb2FkRmF2b3VyaXRlcyB9IGZyb20gXCIuLi91aS9mYXZvdXJpdGVzXCJcbmltcG9ydCB7IGxvYWRBcHBlYXJhbmNlVUkgfSBmcm9tIFwiLi9hcHBlYXJhbmNlX3VpXCJcbmltcG9ydCB7XG4gIGNhdGVnb3J5Q29udGFpbmVyRGF0YVNldCxcbiAgY2F0ZWdvcnlHcm91cERhdGFTZXQsXG4gIGl0ZW1EYXRhU2V0LFxufSBmcm9tIFwiLi9kYXRhX3NldFwiXG5pbXBvcnQgeyBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlIH0gZnJvbSBcIi4vZW51bXMvYXBwZWFyYW5jZV9jYXRlZ29yeV9jb2RlLmVudW1cIlxuaW1wb3J0IHsgb3BlbkNhdGVnb3J5LCBvcGVuR3JvdXAgfSBmcm9tIFwiLi9mYXZvdXJpdGVzX2FjdGlvbnNcIlxuaW1wb3J0IHsgbG9hZEhpZGRlbkNhdGVnb3J5LCB1bmxvYWRIaWRkZW5DYXRlZ29yaWVzIH0gZnJvbSBcIi4vaGlkZGVuXCJcbmltcG9ydCB3YXJkcm9iZSBmcm9tIFwiLi93YXJkcm9iZVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkRHJlc3NpbmdFeHBlcmllbmNlKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWxvY2F0aW9uLnBhdGhuYW1lLnN0YXJ0c1dpdGgoXCIvcGxheWVyL2FwcGVhcmFuY2VcIikpIHJldHVyblxuXG4gIGhhbmRsZWRDYXRlZ29yaWVzLmNsZWFyKClcbiAgbG9hZGluZyA9IGZhbHNlXG5cbiAgbG9hZEFwcGVhcmFuY2VVSSgpXG5cbiAgLy8gU2V0dXAgY2F0ZWdvcmllc1xuICBmb3IgKGNvbnN0IGxpIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTExJRWxlbWVudD4oXG4gICAgXCIjd2FyZHJvYmUtbWVudT5saSwgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcmllcyBsaVwiXG4gICkpIHtcbiAgICBjb25zdCB7IGNhdGVnb3J5IH0gPSBsaS5kYXRhc2V0XG4gICAgaWYgKCFpc0VudW0oY2F0ZWdvcnksIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUpKSBjb250aW51ZVxuXG4gICAgc3dpdGNoIChjYXRlZ29yeSkge1xuICAgICAgY2FzZSBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLmJhY2tncm91bmQ6XG4gICAgICAgIGxpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PlxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZWUtY2F0ZWdvcnlcIik/LnJlbW92ZSgpXG4gICAgICAgIClcbiAgICAgICAgY29udGludWVcbiAgICAgIGNhc2UgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5mYXZvcml0ZXM6XG4gICAgICAgIGxpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlZS1jYXRlZ29yeVwiKT8ucmVtb3ZlKClcbiAgICAgICAgICB2b2lkIGhhbmRsZUNhdGVnb3J5KGNhdGVnb3J5KVxuICAgICAgICB9KVxuICAgICAgICBjb250aW51ZVxuICAgICAgY2FzZSBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLmF0dGljOlxuICAgICAgICBjb250aW51ZVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbGkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICBkb2N1bWVudFxuICAgICAgICAgICAgLmdldEVsZW1lbnRCeUlkKFwiYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXNcIilcbiAgICAgICAgICAgID8ucmVtb3ZlKClcbiAgICAgICAgICB2b2lkIGhhbmRsZUNhdGVnb3J5KGNhdGVnb3J5KVxuICAgICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDAwKSlcbiAgYXdhaXQgbG9hZEJhY2tncm91bmQoKVxufVxuXG4vKipcbiAqIEdldCB0aGUgY2F0ZWdvcnkgY29udGFpbmVyIGZvciB0aGUgY2xpY2tlZCBjYXRlZ29yeSBhbmQgbG9hZCBpdHMgZ3JvdXBzXG4gKiBAcmV0dXJucyBDYXRlZ29yeSBjb250YWluZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQ2F0ZWdvcnkoXG4gIGNhdGVnb3J5OiBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlXG4pOiBQcm9taXNlPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4ge1xuICBjb25zdCBhcHBlYXJhbmNlSXRlbXMgPVxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiI2FwcGVhcmFuY2UtaXRlbXNcIilcbiAgaWYgKCFhcHBlYXJhbmNlSXRlbXMpIHJldHVybiBudWxsXG5cbiAgY29uc3Qgb2xkQ2F0Q29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgYCNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LSR7Y2F0ZWdvcnl9YFxuICApXG5cbiAgaWYgKG9sZENhdENvbnRhaW5lcikge1xuICAgIGF3YWl0IG9uQXBwZWFyYW5jZUl0ZW1zQ2F0ZWdvcnkoY2F0ZWdvcnksIGFwcGVhcmFuY2VJdGVtcywgb2xkQ2F0Q29udGFpbmVyKVxuICAgIHJldHVybiBvbGRDYXRDb250YWluZXJcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcigoXywgb2JzZXJ2ZXIpID0+IHtcbiAgICAgIGNvbnN0IG5ld0NhdENvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgICAgICBgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktJHtjYXRlZ29yeX1gXG4gICAgICApXG4gICAgICBpZiAoIW5ld0NhdENvbnRhaW5lcikgcmV0dXJuXG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KClcblxuICAgICAgdm9pZCAoYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBhd2FpdCBvbkFwcGVhcmFuY2VJdGVtc0NhdGVnb3J5KFxuICAgICAgICAgIGNhdGVnb3J5LFxuICAgICAgICAgIGFwcGVhcmFuY2VJdGVtcyxcbiAgICAgICAgICBuZXdDYXRDb250YWluZXJcbiAgICAgICAgKVxuICAgICAgICByZXNvbHZlKG5ld0NhdENvbnRhaW5lcilcbiAgICAgIH0pKClcbiAgICB9KS5vYnNlcnZlKGFwcGVhcmFuY2VJdGVtcywgeyBjaGlsZExpc3Q6IHRydWUgfSlcbiAgfSlcbn1cblxuYXN5bmMgZnVuY3Rpb24gb25BcHBlYXJhbmNlSXRlbXNDYXRlZ29yeShcbiAgY2F0ZWdvcnk6IEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUsXG4gIGFwcGVhcmFuY2VJdGVtczogSFRNTERpdkVsZW1lbnQsXG4gIGNhdGVnb3J5Q29udGFpbmVyOiBIVE1MRGl2RWxlbWVudFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChjYXRlZ29yeSA9PT0gQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5mYXZvcml0ZXMpIGxvYWRGYXZvdXJpdGVzKClcbiAgZWxzZSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDIyMCkpXG4gICAgbG9hZEVlSXRlbXMoYXBwZWFyYW5jZUl0ZW1zLCBjYXRlZ29yeUNvbnRhaW5lcilcbiAgICBhd2FpdCBoYW5kbGVHcm91cHMoY2F0ZWdvcnlDb250YWluZXIpXG4gIH1cbn1cblxuZnVuY3Rpb24gbG9hZEVlSXRlbXMoXG4gIGFwcGVhcmFuY2VJdGVtczogSFRNTERpdkVsZW1lbnQsXG4gIGNhdGVnb3J5Q29udGFpbmVyOiBIVE1MRGl2RWxlbWVudFxuKTogSFRNTERpdkVsZW1lbnQgfCBudWxsIHtcbiAgLy8gR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGNhdGVnb3J5XG4gIGNvbnN0IGFwcGVhcmFuY2VDYXRlZ29yeSA9IGNhdGVnb3J5Q29udGFpbmVyRGF0YVNldChjYXRlZ29yeUNvbnRhaW5lcilcbiAgaWYgKCFhcHBlYXJhbmNlQ2F0ZWdvcnkpIHJldHVybiBudWxsXG4gIHdhcmRyb2JlLnNldENhdGVnb3J5KGFwcGVhcmFuY2VDYXRlZ29yeSlcbiAgY2F0ZWdvcnlDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKVxuICBjYXRlZ29yeUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcblxuICAvLyBTZXR1cCBhcHBlYXJhbmNlX2l0ZW1zX2NhdGVnb3J5XG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hcHBlYXJhbmNlX2l0ZW1zX2NhdGVnb3J5Lmh0bWxcIilcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlZS1jYXRlZ29yeVwiKT8ucmVtb3ZlKClcbiAgYXBwZWFyYW5jZUl0ZW1zLmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIHRlbXBsYXRlLnJlbmRlcih7IC4uLmFwcGVhcmFuY2VDYXRlZ29yeSwgdHJhbnNsYXRlIH0pXG4gIClcblxuICBjb25zdCBlZUl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIjZWUtaXRlbXNcIilcbiAgaWYgKCFlZUl0ZW1zKSByZXR1cm4gbnVsbFxuICBlZUl0ZW1zLmRhdGFzZXQuY2F0ZWdvcnlpZCA9IGFwcGVhcmFuY2VDYXRlZ29yeS5jYXRlZ29yeWlkLnRvU3RyaW5nKClcbiAgZWVJdGVtcy5kYXRhc2V0LmNhdGVnb3J5ID0gYXBwZWFyYW5jZUNhdGVnb3J5LmNhdGVnb3J5XG4gIGVlSXRlbXMuZGF0YXNldC5jYXRlZ29yeW5hbWUgPSBhcHBlYXJhbmNlQ2F0ZWdvcnkuY2F0ZWdvcnluYW1lXG4gIHJldHVybiBlZUl0ZW1zXG59XG5cbmNvbnN0IGhhbmRsZWRDYXRlZ29yaWVzID0gbmV3IFNldDxBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlPigpXG5cbi8qKiBMb2FkIGVhY2ggZ3JvdXBzIHN5bmNocm9ub3VzbHkgYW5kIGFkZCB0aGVtIHRvIGEgY3VzdG9tIGNvbnRhaW5lci4gKi9cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUdyb3VwcyhjYXRlZ29yeUNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYXBwZWFyYW5jZUNhdGVnb3J5ID0gY2F0ZWdvcnlDb250YWluZXJEYXRhU2V0KGNhdGVnb3J5Q29udGFpbmVyKVxuICBpZiAoIWFwcGVhcmFuY2VDYXRlZ29yeSkgcmV0dXJuXG4gIHdhcmRyb2JlLnNldENhdGVnb3J5KGFwcGVhcmFuY2VDYXRlZ29yeSlcbiAgY2F0ZWdvcnlDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKVxuICBjYXRlZ29yeUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcblxuICBjb25zdCBoYW5kbGVkID0gaGFuZGxlZENhdGVnb3JpZXMuaGFzKGFwcGVhcmFuY2VDYXRlZ29yeS5jYXRlZ29yeSlcbiAgaGFuZGxlZENhdGVnb3JpZXMuYWRkKGFwcGVhcmFuY2VDYXRlZ29yeS5jYXRlZ29yeSlcblxuICBsb2FkSGlkZGVuQ2F0ZWdvcnkoYXBwZWFyYW5jZUNhdGVnb3J5LmNhdGVnb3J5KVxuICBmb3IgKGNvbnN0IGxpIG9mIGNhdGVnb3J5Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTExJRWxlbWVudD4oXG4gICAgXCJsaS5hcHBlYXJhbmNlLWl0ZW0tZ3JvdXBcIlxuICApKSB7XG4gICAgY29uc3QgYXBwZWFyYW5jZUdyb3VwID0gY2F0ZWdvcnlHcm91cERhdGFTZXQobGksIGFwcGVhcmFuY2VDYXRlZ29yeSlcbiAgICBpZiAoIWFwcGVhcmFuY2VHcm91cD8uZ3JvdXApIGJyZWFrXG4gICAgd2FyZHJvYmUuc2V0R3JvdXAoYXBwZWFyYW5jZUdyb3VwKVxuXG4gICAgaWYgKFxuICAgICAgIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAjYXBwZWFyYW5jZS1pdGVtcy1ncm91cC0ke2FwcGVhcmFuY2VHcm91cC5ncm91cH1gXG4gICAgICApICYmXG4gICAgICAhaGFuZGxlZFxuICAgICAgLy8gJiYgIWxvYWRIaWRkZW5Hcm91cChhcHBlYXJhbmNlR3JvdXAuZ3JvdXApXG4gICAgKVxuICAgICAgYXdhaXQgb3Blbkdyb3VwKGFwcGVhcmFuY2VHcm91cC5ncm91cClcblxuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgICAgYCNhcHBlYXJhbmNlLWl0ZW1zLWdyb3VwLSR7YXBwZWFyYW5jZUdyb3VwLmdyb3VwfWBcbiAgICApXG4gICAgaWYgKCFkaXYpIGJyZWFrXG4gICAgZGl2LmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIilcblxuICAgIGNvbnN0IHNjcmlwdCA9IGRpdi5xdWVyeVNlbGVjdG9yKFwic2NyaXB0XCIpIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW1wbGllZC1ldmFsXG4gICAgaWYgKHNjcmlwdCkgc2V0VGltZW91dChzY3JpcHQuaW5uZXJIVE1MLCAwKVxuXG4gICAgY29uc3Qgb3V0ZXJIVE1MID0gQXJyYXkuZnJvbShcbiAgICAgIGRpdi5xdWVyeVNlbGVjdG9yQWxsPEhUTUxMSUVsZW1lbnQ+KFwibGkuYXBwZWFyYW5jZS1pdGVtXCIpXG4gICAgKVxuICAgICAgLm1hcChsaSA9PiB7XG4gICAgICAgIGNvbnN0IGFwcGVhcmFuY2VJdGVtID0gaXRlbURhdGFTZXQobGksIGFwcGVhcmFuY2VHcm91cClcbiAgICAgICAgaWYgKCFhcHBlYXJhbmNlSXRlbT8uaWNvbikgcmV0dXJuIGxpLm91dGVySFRNTFxuXG4gICAgICAgIGxpLmRhdGFzZXQuY2F0ZWdvcnlpZCA9IGFwcGVhcmFuY2VJdGVtLmNhdGVnb3J5aWQudG9TdHJpbmcoKVxuICAgICAgICBsaS5kYXRhc2V0LmNhdGVnb3J5ID0gYXBwZWFyYW5jZUl0ZW0uY2F0ZWdvcnlcbiAgICAgICAgbGkuZGF0YXNldC5jYXRlZ29yeW5hbWUgPSBhcHBlYXJhbmNlSXRlbS5jYXRlZ29yeW5hbWVcbiAgICAgICAgbGkuZGF0YXNldC5ncm91cCA9IGFwcGVhcmFuY2VJdGVtLmdyb3VwLnRvU3RyaW5nKClcbiAgICAgICAgd2FyZHJvYmUuc2V0SXRlbShhcHBlYXJhbmNlSXRlbSlcblxuICAgICAgICByZXR1cm4gbGkub3V0ZXJIVE1MXG4gICAgICB9KVxuICAgICAgLmpvaW4oXCJcXG5cIilcbiAgICB3YXJkcm9iZS5hdmFpbGFibGVJdGVtcyA9IGF2YWlsYWJsZUl0ZW1zXG5cbiAgICBkaXYucmVtb3ZlKClcblxuICAgIGNvbnN0IGFjdGl2ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBgI3dhcmRyb2JlLW1lbnUgbGlbZGF0YS1jYXRlZ29yeT1cIiR7YXBwZWFyYW5jZUdyb3VwLmNhdGVnb3J5fVwiXS5hY3RpdmVgXG4gICAgKVxuXG4gICAgaWYgKGFjdGl2ZSkge1xuICAgICAgZG9jdW1lbnRcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiI2VlLWl0ZW1zXCIpXG4gICAgICAgID8uaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYmVmb3JlZW5kXCIsIG91dGVySFRNTClcblxuICAgICAgaW5pdGlhbGl6ZVNlbGVjdGVkSXRlbXMoKVxuICAgICAgaW5pdGlhbGl6ZUhpZGRlbkNhdGVnb3JpZXMoKVxuICAgIH0gZWxzZSBpZiAoaGFuZGxlZCkgYnJlYWtcbiAgfVxuXG4gIGlmICghaGFuZGxlZCkgaGFuZGxlZENhdGVnb3JpZXMuZGVsZXRlKGFwcGVhcmFuY2VDYXRlZ29yeS5jYXRlZ29yeSlcbiAgdW5sb2FkSGlkZGVuQ2F0ZWdvcmllcygpXG59XG5cbmxldCBsb2FkaW5nID0gZmFsc2VcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRCYWNrZ3JvdW5kKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAobG9hZGluZykgcmV0dXJuXG4gIGxvYWRpbmcgPSB0cnVlXG4gIGxldCBzdWNjZXNzID0gdHJ1ZVxuXG4gIGNvbnN0IGNhdGVnb3JpZXMgPSBbXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS51bmRlcndlYXIsXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5za2luLFxuICAgIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUudGF0b28sXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5tb3V0aCxcbiAgICBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLmV5ZSxcbiAgICBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLmhhaXIsXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5zb2NrLFxuICAgIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUuc2hvZSxcbiAgICBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLnBhbnRzLFxuICAgIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUuaGFuZEFjY2Vzc29yeSxcbiAgICBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLnRvcCxcbiAgICBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLmNvYXQsXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5nbG92ZSxcbiAgICBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLm5lY2tsYWNlLFxuICAgIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUuZHJlc3MsXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5oYXQsXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5mYWNlQWNjZXNzb3J5LFxuICAgIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUuYmVsdCxcbiAgICBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLmFtYmllbnQsXG4gIF1cblxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvZmxhdnJfbm90aWYvaWNvbl9tZXNzYWdlLmh0bWxcIilcblxuICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMpIHtcbiAgICBpZiAoIWxvY2F0aW9uLnBhdGhuYW1lLnN0YXJ0c1dpdGgoXCIvcGxheWVyL2FwcGVhcmFuY2VcIikpIHtcbiAgICAgIHN1Y2Nlc3MgPSBmYWxzZVxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgYCN3YXJkcm9iZS1tZW51IGxpW2RhdGEtY2F0ZWdvcnk9XCIke2NhdGVnb3J5fVwiXS5hY3RpdmVgXG4gICAgKVxuICAgIGlmIChhY3RpdmUpIGNvbnRpbnVlXG5cbiAgICBjb25zdCBjYXRlZ29yeUNvbnRhaW5lciA9IGF3YWl0IG9wZW5DYXRlZ29yeShjYXRlZ29yeSlcbiAgICBpZiAoIWNhdGVnb3J5Q29udGFpbmVyKSB7XG4gICAgICBzdWNjZXNzID0gZmFsc2VcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgbGV0IGZpbmlzaGVkID0gZmFsc2VcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghZmluaXNoZWQpXG4gICAgICAgICQuZmxhdnJOb3RpZihcbiAgICAgICAgICB0ZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgICAgICAgaWNvbjogYC9zdGF0aWMvaW1nL21hbGwvY2F0ZWdvcmllcy8ke2NhdGVnb3J5fS5wbmdgLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJhbnNsYXRlLmFwcGVhcmFuY2UubG9hZGluZyhcbiAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MTElFbGVtZW50PihcbiAgICAgICAgICAgICAgICBgI3dhcmRyb2JlLW1lbnUgbGlbZGF0YS1jYXRlZ29yeT1cIiR7Y2F0ZWdvcnl9XCJdYFxuICAgICAgICAgICAgICApPy5kYXRhc2V0LmNhdGVnb3J5bmFtZSA/PyBjYXRlZ29yeVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgfSwgMTAwMClcblxuICAgIGF3YWl0IGhhbmRsZUdyb3VwcyhjYXRlZ29yeUNvbnRhaW5lcilcbiAgICBmaW5pc2hlZCA9IHRydWVcbiAgfVxuXG4gIGlmIChzdWNjZXNzKSAkLmZsYXZyTm90aWYodHJhbnNsYXRlLmFwcGVhcmFuY2UubG9hZGVkKVxuICBsb2FkaW5nID0gZmFsc2Vcbn1cbiIsImV4cG9ydCBlbnVtIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUge1xuICBhdHRpYyA9IFwiYXR0aWNcIixcbiAgZmF2b3JpdGVzID0gXCJmYXZvcml0ZXNcIixcbiAgdW5kZXJ3ZWFyID0gXCJ1bmRlcndlYXJcIixcbiAgc2tpbiA9IFwic2tpblwiLFxuICB0YXRvbyA9IFwidGF0b29cIixcbiAgbW91dGggPSBcIm1vdXRoXCIsXG4gIGV5ZSA9IFwiZXllXCIsXG4gIGhhaXIgPSBcImhhaXJcIixcbiAgc29jayA9IFwic29ja1wiLFxuICBzaG9lID0gXCJzaG9lXCIsXG4gIHBhbnRzID0gXCJwYW50c1wiLFxuICBoYW5kQWNjZXNzb3J5ID0gXCJoYW5kQWNjZXNzb3J5XCIsXG4gIHRvcCA9IFwidG9wXCIsXG4gIGNvYXQgPSBcImNvYXRcIixcbiAgZ2xvdmUgPSBcImdsb3ZlXCIsXG4gIG5lY2tsYWNlID0gXCJuZWNrbGFjZVwiLFxuICBkcmVzcyA9IFwiZHJlc3NcIixcbiAgaGF0ID0gXCJoYXRcIixcbiAgZmFjZUFjY2Vzc29yeSA9IFwiZmFjZUFjY2Vzc29yeVwiLFxuICBiYWNrZ3JvdW5kID0gXCJiYWNrZ3JvdW5kXCIsXG4gIGJlbHQgPSBcImJlbHRcIixcbiAgYW1iaWVudCA9IFwiYW1iaWVudFwiLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IGluZGV4ZWRfZGIgZnJvbSBcIi4uL2luZGV4ZWRfZGIvaW5kZXhlZF9kYlwiXG5pbXBvcnQgeyBwYXJzZUF2YXRhciB9IGZyb20gXCIuLi9vdXRmaXRcIlxuaW1wb3J0IHsgbG9hZEZha2VGYXZvdXJpdGVzIH0gZnJvbSBcIi4uL3VpL2Zhdm91cml0ZXNcIlxuaW1wb3J0IHsgd2Vhck91dGZpdCB9IGZyb20gXCIuL2Zhdm91cml0ZXNfYWN0aW9uc1wiXG5pbXBvcnQgdHlwZSB7IEZhdm91cml0ZU91dGZpdCB9IGZyb20gXCIuL2ludGVyZmFjZXMvZmF2b3VyaXRlX291dGZpdFwiXG5pbXBvcnQgdHlwZSB7IFBhcnNhYmxlSXRlbSB9IGZyb20gXCIuL2ludGVyZmFjZXMvcGFyc2FibGVfaXRlbVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYXZlRmF2b3VyaXRlKCk6IFByb21pc2U8RmF2b3VyaXRlT3V0Zml0IHwgbnVsbD4ge1xuICBjb25zdCBmYXZvdXJpdGUgPSBhd2FpdCBzaG93T3V0Zml0KClcbiAgaWYgKGZhdm91cml0ZSkgYXdhaXQgbG9hZEZha2VGYXZvdXJpdGVzKClcbiAgcmV0dXJuIGZhdm91cml0ZVxufVxuXG5hc3luYyBmdW5jdGlvbiBkZWxldGVGYXZvdXJpdGUoZmF2b3VyaXRlOiBGYXZvdXJpdGVPdXRmaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgaW5kZXhlZF9kYi5kZWxldGVGYXZvdXJpdGVPdXRmaXQoZmF2b3VyaXRlKVxuICBhd2FpdCBsb2FkRmFrZUZhdm91cml0ZXMoKVxufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93T3V0Zml0KCk6IFByb21pc2U8RmF2b3VyaXRlT3V0Zml0IHwgbnVsbD4ge1xuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvY3JlYXRlZF9vdXRmaXRfZmxhdnIuaHRtbFwiKVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+XG4gICAgJC5mbGF2cih7XG4gICAgICBjb250ZW50OiB0ZW1wbGF0ZS5yZW5kZXIoeyB0cmFuc2xhdGUgfSksXG4gICAgICBvbkJ1aWxkOiAkY29udGFpbmVyID0+IHtcbiAgICAgICAgJGNvbnRhaW5lci5hZGRDbGFzcyhcIm5ldy1sYXlvdXQtcG9wdXBcIilcbiAgICAgICAgJGNvbnRhaW5lci5hZGRDbGFzcyhcImNyZWF0ZWQtb3V0Zml0LXBvcHVwXCIpXG5cbiAgICAgICAgY29uc3Qgc2F2ZUJ1dHRvbiA9XG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MQnV0dG9uRWxlbWVudD4oJ1tyZWw9XCJidG4tc2F2ZVwiXScpXG4gICAgICAgIGlmICghc2F2ZUJ1dHRvbikgcmV0dXJuXG5cbiAgICAgICAgZG9jdW1lbnRcbiAgICAgICAgICAucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIiNjaG9vc2UtbmFtZVwiKVxuICAgICAgICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIikgc2F2ZUJ1dHRvbi5jbGljaygpXG5cbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiI2Nob29zZS1uYW1lXCIpPy52YWx1ZSlcbiAgICAgICAgICAgICAgc2F2ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwiZGlzYWJsZWRcIilcbiAgICAgICAgICAgIGVsc2Ugc2F2ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwiZGlzYWJsZWRcIilcbiAgICAgICAgICB9KVxuXG4gICAgICAgIHNhdmVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm5sLWJ1dHRvblwiLCBcIm5sLWJ1dHRvbi1sZ1wiLCBcImRpc2FibGVkXCIpXG4gICAgICB9LFxuICAgICAgYnV0dG9uczoge1xuICAgICAgICBjbG9zZToge1xuICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgc3R5bGU6IFwiY2xvc2VcIixcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2F2ZToge1xuICAgICAgICAgIHRleHQ6IHRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuc2F2ZV9vdXRmaXQuc2F2ZSxcbiAgICAgICAgICBzdHlsZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID1cbiAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIiNjaG9vc2UtbmFtZVwiKT8udmFsdWVcbiAgICAgICAgICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlXG5cbiAgICAgICAgICAgIGNvbnN0IGF2YXRhciA9IFNhY2hhLkF2YXRhci5hdmF0YXJzW1wiI2FwcGVhcmFuY2UtcHJldmlld1wiXVxuICAgICAgICAgICAgaWYgKCFhdmF0YXIpIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBwYXJzZUF2YXRhcihhdmF0YXIpXG5cbiAgICAgICAgICAgIHZvaWQgc2F2ZUFjdGlvbihuYW1lLCBpdGVtcywgcmVzb2x2ZSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvd0Zhdm91cml0ZShmYXZvdXJpdGU6IEZhdm91cml0ZU91dGZpdCk6IHZvaWQge1xuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvZmF2b3VyaXRlX291dGZpdF9mbGF2ci5odG1sXCIpXG5cbiAgJC5mbGF2cih7XG4gICAgY29udGVudDogdGVtcGxhdGUucmVuZGVyKHsgLi4uZmF2b3VyaXRlLCB0cmFuc2xhdGUgfSksXG4gICAgb25CdWlsZDogJGNvbnRhaW5lciA9PiB7XG4gICAgICAkY29udGFpbmVyLmFkZENsYXNzKFwibmV3LWxheW91dC1wb3B1cFwiKVxuICAgICAgJGNvbnRhaW5lci5hZGRDbGFzcyhcImNyZWF0ZWQtb3V0Zml0LXBvcHVwXCIpXG4gICAgfSxcbiAgICBidXR0b25zOiB7XG4gICAgICBjbG9zZToge1xuICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICBzdHlsZTogXCJjbG9zZVwiLFxuICAgICAgICBhY3Rpb246ICgpID0+IHRydWUsXG4gICAgICB9LFxuICAgICAgZGVsZXRlOiB7XG4gICAgICAgIHRleHQ6IHRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuY2xpY2tfb3V0Zml0LmRlbGV0ZSxcbiAgICAgICAgc3R5bGU6IFwiZGVmYXVsdFwiLFxuICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICB2b2lkIGRlbGV0ZUZhdm91cml0ZShmYXZvdXJpdGUpXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB3ZWFyOiB7XG4gICAgICAgIHRleHQ6IHRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuY2xpY2tfb3V0Zml0LndlYXIsXG4gICAgICAgIHN0eWxlOiBcImRlZmF1bHRcIixcbiAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXZhdGFyID0gU2FjaGEuQXZhdGFyLmF2YXRhcnNbXCIjYXBwZWFyYW5jZS1wcmV2aWV3XCJdXG4gICAgICAgICAgaWYgKCFhdmF0YXIpIHJldHVybiBmYWxzZVxuXG4gICAgICAgICAgdm9pZCAoYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT5cbiAgICAgICAgICAgIHdlYXJPdXRmaXQoYXZhdGFyLCBmYXZvdXJpdGUuaXRlbXMpKSgpXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KVxufVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlQWN0aW9uKFxuICBuYW1lOiBzdHJpbmcsXG4gIGl0ZW1zOiBQYXJzYWJsZUl0ZW1bXSxcbiAgcmVzb2x2ZTogKHZhbHVlOiBGYXZvdXJpdGVPdXRmaXQpID0+IHZvaWRcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBibG9iID0gYXdhaXQgbmV3IFByb21pc2U8QmxvYj4ocmVzb2x2ZSA9PiB7XG4gICAgZG9jdW1lbnRcbiAgICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxDYW52YXNFbGVtZW50PihcIiNhcHBlYXJhbmNlLXByZXZpZXcgY2FudmFzXCIpXG4gICAgICA/LnRvQmxvYihibG9iID0+IHJlc29sdmUoYmxvYiEpLCBcImltYWdlL3BuZ1wiLCAxKVxuICB9KVxuXG4gIHJlc29sdmUoe1xuICAgIC4uLihhd2FpdCBpbmRleGVkX2RiLmFkZEZhdm91cml0ZU91dGZpdCh7XG4gICAgICBpdGVtcyxcbiAgICAgIG5hbWUsXG4gICAgICBibG9iLFxuICAgIH0pKSxcbiAgICB1cmw6IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYiksXG4gIH0pXG59XG4iLCJpbXBvcnQgdHlwZSB7IEF2YXRhciB9IGZyb20gXCIuLi9lbGRhcnlhL2F2YXRhclwiXG5pbXBvcnQgdHlwZSB7IEl0ZW0gfSBmcm9tIFwiLi4vZWxkYXJ5YS9pdGVtXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBleHBvcnRPdXRmaXQgfSBmcm9tIFwiLi4vb3V0Zml0XCJcbmltcG9ydCB0eXBlIHsgUGFyc2FibGVJdGVtIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9wYXJzYWJsZV9pdGVtXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydFByZXZpZXcoKTogdm9pZCB7XG4gIGV4cG9ydE91dGZpdChcIiNhcHBlYXJhbmNlLXByZXZpZXdcIilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGltcG9ydE91dGZpdCgpOiB2b2lkIHtcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIilcbiAgaW5wdXQuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcImZpbGVcIilcbiAgaW5wdXQuc2V0QXR0cmlidXRlKFwiYWNjZXB0XCIsIFwiYXBwbGljYXRpb24vanNvblwiKVxuICBpbnB1dC5jbGljaygpXG5cbiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIGV2ZW50ID0+IHtcbiAgICBpZiAoIWV2ZW50LnRhcmdldCkgcmV0dXJuXG4gICAgY29uc3QgZmlsZXMgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzXG4gICAgaWYgKCFmaWxlcykgcmV0dXJuXG4gICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdXG4gICAgaWYgKCFmaWxlKSByZXR1cm5cbiAgICB2b2lkIGZpbGUudGV4dCgpLnRoZW4oYXN5bmMgdmFsdWUgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IG91dGZpdDogUGFyc2FibGVJdGVtW10gPSBKU09OLnBhcnNlKHZhbHVlKVxuICAgICAgY29uc3QgYXZhdGFyID0gU2FjaGEuQXZhdGFyLmF2YXRhcnNbXCIjYXBwZWFyYW5jZS1wcmV2aWV3XCJdXG4gICAgICBpZiAoIWF2YXRhcikgcmV0dXJuXG5cbiAgICAgIGF3YWl0IHdlYXJPdXRmaXQoYXZhdGFyLCBvdXRmaXQpXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2xvdGhlcygpOiB2b2lkIHtcbiAgY29uc3QgYXZhdGFyID0gU2FjaGEuQXZhdGFyLmF2YXRhcnNbXCIjYXBwZWFyYW5jZS1wcmV2aWV3XCJdXG4gIGlmICghYXZhdGFyKSByZXR1cm5cblxuICBmb3IgKGxldCBpID0gYXZhdGFyLmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaXRlbVJlbmRlciA9IGF2YXRhci5jaGlsZHJlbltpXVxuICAgIGlmICghaXRlbVJlbmRlcikgY29udGludWVcblxuICAgIGNvbnN0IGl0ZW0gPSBpdGVtUmVuZGVyLmdldEl0ZW0oKVxuICAgIGlmIChTYWNoYS5BdmF0YXIucmVtb3ZlSXRlbUZyb21BbGxBdmF0YXJzKGl0ZW0pKSB7XG4gICAgICAkKGAjYXBwZWFyYW5jZS1pdGVtLSR7aXRlbS5faWR9YCkucmVtb3ZlQ2xhc3MoXCJzZWxlY3RlZFwiKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3Blbkdyb3VwKGdyb3VwOiBudW1iZXIpOiBQcm9taXNlPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8SFRNTERpdkVsZW1lbnQgfCBudWxsPigocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGdyb3VwQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgICBgI2FwcGVhcmFuY2UtaXRlbXMtZ3JvdXAtJHtncm91cH1gXG4gICAgKVxuICAgIGlmIChncm91cENvbnRhaW5lcikgcmV0dXJuIHZvaWQgcmVzb2x2ZShncm91cENvbnRhaW5lcilcblxuICAgIHZvaWQgJC5nZXQoYC9wbGF5ZXIvb3Blbkdyb3VwLyR7Z3JvdXB9YCwgKHZpZXc6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgICAgJCh2aWV3KS5oaWRlKCkuYXBwZW5kVG8oXCIjYXBwZWFyYW5jZS1pdGVtc1wiKVxuICAgICAgcmVzb2x2ZShcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgICAgICAgYCNhcHBlYXJhbmNlLWl0ZW1zLWdyb3VwLSR7Z3JvdXB9YFxuICAgICAgICApXG4gICAgICApXG4gICAgfSlcbiAgfSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5DYXRlZ29yeShcbiAgY2F0ZWdvcnk6IHN0cmluZ1xuKTogUHJvbWlzZTxIVE1MRGl2RWxlbWVudCB8IG51bGw+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4oKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICBjb25zdCBjYXRlZ29yeUNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgICAgYCNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LSR7Y2F0ZWdvcnl9YFxuICAgIClcbiAgICBpZiAoY2F0ZWdvcnlDb250YWluZXIpIHJldHVybiB2b2lkIHJlc29sdmUoY2F0ZWdvcnlDb250YWluZXIpXG5cbiAgICB2b2lkICQucG9zdChgL3BsYXllci9vcGVuQ2F0ZWdvcnkvJHtjYXRlZ29yeX1gLCAodmlldzogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAkKHZpZXcpLmhpZGUoKS5hcHBlbmRUbyhcIiNhcHBlYXJhbmNlLWl0ZW1zXCIpXG4gICAgICByZXNvbHZlKFxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICAgICAgICBgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktJHtjYXRlZ29yeX1gXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9KVxuICB9KVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2Vhck91dGZpdChcbiAgYXZhdGFyOiBBdmF0YXIsXG4gIG91dGZpdDogUGFyc2FibGVJdGVtW11cbik6IFByb21pc2U8dm9pZD4ge1xuICAkLmZsYXZyTm90aWYodHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5pbXBvcnRpbmcpXG5cbiAgLy8gR2V0IGFsbCBjYXRlZ29yaWVzXG4gIGNvbnN0IGNhdGVnb3JpZXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGNsb3RoaW5nIG9mIG91dGZpdClcbiAgICBpZiAoIWF2YWlsYWJsZUl0ZW1zW2Nsb3RoaW5nLmlkXSkgY2F0ZWdvcmllcy5hZGQoY2xvdGhpbmcudHlwZSlcblxuICAvLyBPcGVuIGFsbCBjYXRlZ29yaWVzXG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20oY2F0ZWdvcmllcy52YWx1ZXMoKSkubWFwKGFzeW5jIGNhdGVnb3J5ID0+XG4gICAgICBvcGVuQ2F0ZWdvcnkoY2F0ZWdvcnkpXG4gICAgKVxuICApXG5cbiAgLy8gR2V0IGFsbCBncm91cHNcbiAgY29uc3QgZ3JvdXBzID0gbmV3IFNldDxudW1iZXI+KClcbiAgZm9yIChjb25zdCBjbG90aGluZyBvZiBvdXRmaXQpXG4gICAgaWYgKFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtZ3JvdXA9XCIke2Nsb3RoaW5nLmdyb3VwfVwiXWApICYmXG4gICAgICAhYXZhaWxhYmxlSXRlbXNbY2xvdGhpbmcuaWRdXG4gICAgKVxuICAgICAgZ3JvdXBzLmFkZChjbG90aGluZy5ncm91cClcblxuICAvLyBPcGVuIGFsbCBncm91cHNcbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShncm91cHMudmFsdWVzKCkpLm1hcChhc3luYyBncm91cCA9PiBvcGVuR3JvdXAoZ3JvdXApKVxuICApXG5cbiAgLy8gR2V0IHRoZSBpdGVtcyBmcm9tIGBhdmFpbGFibGVJdGVtc2BcbiAgY29uc3Qgd29ybkl0ZW1zOiBJdGVtW10gPSBbXVxuICBmb3IgKGNvbnN0IGNsb3RoaW5nIG9mIG91dGZpdCkge1xuICAgIGNvbnN0IGl0ZW0gPSBhdmFpbGFibGVJdGVtc1tjbG90aGluZy5pZF1cbiAgICBpZiAoaXRlbSkgd29ybkl0ZW1zLnB1c2goaXRlbSlcbiAgfVxuXG4gIHJlbW92ZUNsb3RoZXMoKVxuICBhdmF0YXIuYWRkSXRlbXMod29ybkl0ZW1zKVxuICBpbml0aWFsaXplU2VsZWN0ZWRJdGVtcygpXG4gIGluaXRpYWxpemVIaWRkZW5DYXRlZ29yaWVzKClcblxuICBjb25zdCBhdmF0YXJBY3Rpb25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhdmF0YXItYWN0aW9uc1wiKVxuICBpZiAoYXZhdGFyQWN0aW9ucykgYXZhdGFyQWN0aW9ucy5zdHlsZS5kaXNwbGF5ID0gXCJpbml0aWFsXCJcblxuICAkLmZsYXZyTm90aWYodHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5pbXBvcnRlZClcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHR5cGUgeyBBcHBlYXJhbmNlQ2F0ZWdvcnkgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvYXBwZWFyYW5jZV9jYXRlZ29yeVwiXG5pbXBvcnQgdHlwZSB7IEFwcGVhcmFuY2VHcm91cCB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9hcHBlYXJhbmNlX2dyb3VwXCJcbmltcG9ydCB3YXJkcm9iZSBmcm9tIFwiLi93YXJkcm9iZVwiXG5cbmV4cG9ydCBmdW5jdGlvbiB1bmxvYWRIaWRkZW5DYXRlZ29yaWVzKCk6IHZvaWQge1xuICBjb25zdCBoaWRkZW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxEaXZFbGVtZW50PihcbiAgICBcIiNhcHBlYXJhbmNlLWl0ZW1zIC5hcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5Om5vdCguYWN0aXZlKTpub3QoW2RhdGEtY2F0ZWdvcnluYW1lXSksICNhcHBlYXJhbmNlLWl0ZW1zIHNjcmlwdCwgYm9keT5zY3JpcHRcIlxuICApXG4gIGZvciAoY29uc3QgZGl2IG9mIGhpZGRlbikge1xuICAgIGRpdi5yZW1vdmUoKVxuICB9XG59XG5cbi8qKlxuICogUGxhY2UgdGhlIHNhdmVkIGdyb3VwcyBvbiB0aGUgRE9NIGFzIGlmIGl0IHdhcyBFbGRhcnlhIGRvaW5nIGl0LlxuICogQHJldHVybnMgdGhlIGFzc29jaWF0ZWQgYEFwcGVhcmFuY2VDYXRlZ29yeWAgaWYgaXQncyBmb3VuZCBpbiB0aGUgd2FyZHJvYmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkSGlkZGVuQ2F0ZWdvcnkoY29kZTogc3RyaW5nKTogQXBwZWFyYW5jZUNhdGVnb3J5IHwgbnVsbCB7XG4gIGNvbnN0IGNhdGVnb3J5ID0gd2FyZHJvYmUuZ2V0Q2F0ZWdvcmllcygpLmZpbmQoYyA9PiBjLmNhdGVnb3J5ID09PSBjb2RlKVxuICBpZiAoIWNhdGVnb3J5KSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGdyb3VwcyA9IHdhcmRyb2JlLmdldENhdGVnb3J5R3JvdXBzKGNhdGVnb3J5LmNhdGVnb3J5aWQpXG4gIGNvbnN0IGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXBwZWFyYW5jZV9pdGVtLmh0bWxcIilcbiAgY29uc3QgZ3JvdXBUZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXBwZWFyYW5jZV9pdGVtc19ncm91cC5odG1sXCIpXG4gIGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiI2FwcGVhcmFuY2UtaXRlbXNcIilcbiAgICA/Lmluc2VydEFkamFjZW50SFRNTChcbiAgICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgICBncm91cHNcbiAgICAgICAgLm1hcChncm91cCA9PlxuICAgICAgICAgIGdyb3VwVGVtcGxhdGUucmVuZGVyKHtcbiAgICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgICAgaXRlbXM6IHdhcmRyb2JlXG4gICAgICAgICAgICAgIC5nZXRJdGVtcyhncm91cC5ncm91cClcbiAgICAgICAgICAgICAgLm1hcChpdGVtID0+IGl0ZW1UZW1wbGF0ZS5yZW5kZXIoaXRlbSkpXG4gICAgICAgICAgICAgIC5qb2luKFwiXFxuXCIpLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLmpvaW4oXCJcXG5cIilcbiAgICApXG4gIHJldHVybiBjYXRlZ29yeVxufVxuXG4vKipcbiAqIExvYWQgdGhlIHNhdmVkIGdyb3VwIG9uIHRoZSBET00gYXMgaWYgaXQgd2FzIEVsZGFyeWEgZG9pbmcgaXQuXG4gKiBAcmV0dXJucyB0aGUgYXNzb2NpYXRlZCBgQXBwZWFyYW5jZUdyb3VwYCBpZiBpdCdzIGZvdW5kIGluIHRoZSB3YXJkcm9iZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRIaWRkZW5Hcm91cChpZDogbnVtYmVyKTogQXBwZWFyYW5jZUdyb3VwIHwgbnVsbCB7XG4gIGNvbnN0IGdyb3VwID0gd2FyZHJvYmUuZ2V0R3JvdXAoaWQpXG4gIGlmICghZ3JvdXApIHJldHVybiBudWxsXG5cbiAgY29uc3QgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hcHBlYXJhbmNlX2l0ZW0uaHRtbFwiKVxuICBjb25zdCBncm91cFRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hcHBlYXJhbmNlX2l0ZW1zX2dyb3VwLmh0bWxcIilcbiAgZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIjYXBwZWFyYW5jZS1pdGVtc1wiKVxuICAgID8uaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgICAgXCJiZWZvcmVlbmRcIixcbiAgICAgIGdyb3VwVGVtcGxhdGUucmVuZGVyKHtcbiAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgIGl0ZW1zOiB3YXJkcm9iZVxuICAgICAgICAgIC5nZXRJdGVtcyhncm91cC5ncm91cClcbiAgICAgICAgICAubWFwKGl0ZW0gPT4gaXRlbVRlbXBsYXRlLnJlbmRlcihpdGVtKSlcbiAgICAgICAgICAuam9pbihcIlxcblwiKSxcbiAgICAgIH0pXG4gICAgKVxuICByZXR1cm4gZ3JvdXBcbn1cbiIsImltcG9ydCB0eXBlIHsgSXRlbSB9IGZyb20gXCIuLi9lbGRhcnlhL2l0ZW1cIlxuaW1wb3J0IHR5cGUgeyBBcHBlYXJhbmNlQ2F0ZWdvcnkgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvYXBwZWFyYW5jZV9jYXRlZ29yeVwiXG5pbXBvcnQgdHlwZSB7IEFwcGVhcmFuY2VHcm91cCB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9hcHBlYXJhbmNlX2dyb3VwXCJcbmltcG9ydCB0eXBlIHsgQXBwZWFyYW5jZUl0ZW0gfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvYXBwZWFyYW5jZV9pdGVtXCJcblxuY2xhc3MgV2FyZHJvYmUge1xuICBwcml2YXRlIHJlYWRvbmx5IGNhdGVnb3JpZXM6IFJlY29yZDxudW1iZXIsIEFwcGVhcmFuY2VDYXRlZ29yeT4gPSB7fVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZ3JvdXBzOiBSZWNvcmQ8bnVtYmVyLCBBcHBlYXJhbmNlR3JvdXA+ID0ge31cblxuICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zOiBSZWNvcmQ8bnVtYmVyLCBBcHBlYXJhbmNlSXRlbT4gPSB7fVxuXG4gIGF2YWlsYWJsZUl0ZW1zPzogUmVjb3JkPG51bWJlciwgSXRlbT5cblxuICBnZXRDYXRlZ29yaWVzKCk6IEFwcGVhcmFuY2VDYXRlZ29yeVtdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmNhdGVnb3JpZXMpXG4gIH1cblxuICBnZXRDYXRlZ29yeShpZDogbnVtYmVyKTogQXBwZWFyYW5jZUNhdGVnb3J5IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzW2lkXVxuICB9XG5cbiAgZ2V0Q2F0ZWdvcnlHcm91cHMoY2F0ZWdvcnlpZDogbnVtYmVyKTogQXBwZWFyYW5jZUdyb3VwW10ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuZ3JvdXBzKS5maWx0ZXIoXG4gICAgICBncm91cCA9PiBncm91cC5jYXRlZ29yeWlkID09PSBjYXRlZ29yeWlkXG4gICAgKVxuICB9XG5cbiAgZ2V0R3JvdXAoaWQ6IG51bWJlcik6IEFwcGVhcmFuY2VHcm91cCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBzW2lkXVxuICB9XG5cbiAgZ2V0R3JvdXBzKCk6IEFwcGVhcmFuY2VHcm91cFtdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmdyb3VwcylcbiAgfVxuXG4gIGdldEl0ZW0oaWQ6IG51bWJlcik6IEFwcGVhcmFuY2VJdGVtIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1tpZF1cbiAgfVxuXG4gIGdldEl0ZW1zKGdyb3VwOiBudW1iZXIpOiBBcHBlYXJhbmNlSXRlbVtdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLml0ZW1zKS5maWx0ZXIoaXRlbSA9PiBpdGVtLmdyb3VwID09PSBncm91cClcbiAgfVxuXG4gIHNldENhdGVnb3J5KGNhdGVnb3J5OiBBcHBlYXJhbmNlQ2F0ZWdvcnkpOiB2b2lkIHtcbiAgICB0aGlzLmNhdGVnb3JpZXNbY2F0ZWdvcnkuY2F0ZWdvcnlpZF0gPSBjYXRlZ29yeVxuICB9XG5cbiAgc2V0R3JvdXAoZ3JvdXA6IEFwcGVhcmFuY2VHcm91cCk6IHZvaWQge1xuICAgIHRoaXMuZ3JvdXBzW2dyb3VwLmdyb3VwXSA9IGdyb3VwXG4gIH1cblxuICBzZXRJdGVtKGl0ZW06IEFwcGVhcmFuY2VJdGVtKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtc1tpdGVtLml0ZW1pZF0gPSBpdGVtXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFdhcmRyb2JlKClcbiIsImltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgdHlwZSB7IENhcm91c2VsTmV3cyB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9jYXJvdXNlbF9uZXdzXCJcblxuZXhwb3J0IGNvbnN0IGNhcm91c2VsQmVlbW9vdkFubm95YW5jZXM6IENhcm91c2VsTmV3cyA9IHtcbiAgYmFja2dyb3VuZEltYWdlOlxuICAgIFwiaHR0cHM6Ly9naXRsYWIuY29tL05hdG9Cb3JhbS9lbGRhcnlhLWVuaGFuY2VtZW50cy8tL3Jhdy9tYXN0ZXIvaW1hZ2VzL2Nhcm91c2VsX2JlZW1vb3ZfYW5ub3lhbmNlcy5wbmdcIixcbiAgaDQ6IHRyYW5zbGF0ZS5jYXJvdXNlbC5iZWVtb292X2Fubm95YW5jZXMudGl0bGUsXG4gIGhyZWY6IFwiaHR0cHM6Ly9naXRsYWIuY29tL05hdG9Cb3JhbS9CZWVtb292LUFubm95YW5jZXNcIixcbiAgaWQ6IFwiY2Fyb3VzZWwtYmVlbW9vdi1hbm5veWFuY2VzXCIsXG4gIHA6IHRyYW5zbGF0ZS5jYXJvdXNlbC5iZWVtb292X2Fubm95YW5jZXMuc3VidGl0bGUsXG59XG4iLCJpbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHR5cGUgeyBDYXJvdXNlbE5ld3MgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvY2Fyb3VzZWxfbmV3c1wiXG5cbmV4cG9ydCBjb25zdCBjYXJvdXNlbERvd25sb2FkRmFjZTogQ2Fyb3VzZWxOZXdzID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvY2Fyb3VzZWxfZG93bmxvYWRfZmFjZS5wbmdcIixcbiAgaWQ6IFwiY2Fyb3VzZWwtZG93bmxvYWQtZmFjZVwiLFxuICBoNDogdHJhbnNsYXRlLmNhcm91c2VsLmRvd25sb2FkX2ZhY2UudGl0bGUsXG4gIHA6IHRyYW5zbGF0ZS5jYXJvdXNlbC5kb3dubG9hZF9mYWNlLnN1YnRpdGxlLFxufVxuIiwiaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB0eXBlIHsgQ2Fyb3VzZWxOZXdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Nhcm91c2VsX25ld3NcIlxuXG5leHBvcnQgY29uc3QgY2Fyb3VzZWxEb3dubG9hZEd1YXJkaWFuOiBDYXJvdXNlbE5ld3MgPSB7XG4gIGJhY2tncm91bmRJbWFnZTpcbiAgICBcImh0dHBzOi8vZ2l0bGFiLmNvbS9OYXRvQm9yYW0vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLS9yYXcvbWFzdGVyL2ltYWdlcy9jYXJvdXNlbF9kb3dubG9hZF9ndWFyZGlhbi5wbmdcIixcbiAgaWQ6IFwiY2Fyb3VzZWwtZG93bmxvYWQtZ3VhcmRpYW5cIixcbiAgaDQ6IHRyYW5zbGF0ZS5jYXJvdXNlbC5kb3dubG9hZF9ndWFyZGlhbi50aXRsZSxcbiAgcDogdHJhbnNsYXRlLmNhcm91c2VsLmRvd25sb2FkX2d1YXJkaWFuLnN1YnRpdGxlLFxufVxuIiwiaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB0eXBlIHsgQ2Fyb3VzZWxOZXdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Nhcm91c2VsX25ld3NcIlxuXG5leHBvcnQgY29uc3QgY2Fyb3VzZWxFRTogQ2Fyb3VzZWxOZXdzID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvY2Fyb3VzZWxfZWxkYXJ5YV9lbmhhbmNlbWVudHMucG5nXCIsXG4gIGg0OiB0cmFuc2xhdGUuY2Fyb3VzZWwuZWxkYXJ5YV9lbmhhbmNlbWVudHMudGl0bGUsXG4gIGhyZWY6IEdNLmluZm8uc2NyaXB0Lm5hbWVzcGFjZSxcbiAgaWQ6IFwiY2Fyb3VzZWwtZWxkYXJ5YS1lbmhhbmNlbWVudHNcIixcbiAgcDogdHJhbnNsYXRlLmNhcm91c2VsLmVsZGFyeWFfZW5oYW5jZW1lbnRzLnN1YnRpdGxlLFxufVxuIiwiaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB0eXBlIHsgQ2Fyb3VzZWxOZXdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Nhcm91c2VsX25ld3NcIlxuXG5leHBvcnQgY29uc3QgY2Fyb3VzZWxUYWtlb3ZlcjogQ2Fyb3VzZWxOZXdzID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvY2Fyb3VzZWxfdGFrZW92ZXIucG5nXCIsXG4gIGlkOiBcImNhcm91c2VsLXRha2VvdmVyXCIsXG4gIGg0OiB0cmFuc2xhdGUuY2Fyb3VzZWwudGFrZW92ZXIudGl0bGUsXG4gIHA6IHRyYW5zbGF0ZS5jYXJvdXNlbC50YWtlb3Zlci5zdWJ0aXRsZSxcbn1cbiIsImltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5cbmV4cG9ydCBjbGFzcyBDb25zb2xlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgY29uc29sZSA9IGNvbnNvbGVcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICBwcml2YXRlIHN0YXRpYyBnZXQgZGVidWdnaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBMb2NhbFN0b3JhZ2UuZGVidWdcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldCB0aW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkudG9Mb2NhbGVUaW1lU3RyaW5nKClcbiAgfVxuXG4gIHN0YXRpYyBhc3NlcnQoXG4gICAgdmFsdWU6IHVua25vd24sXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIC4uLm9wdGlvbmFsUGFyYW1zOiB1bmtub3duW11cbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRlYnVnZ2luZykgcmV0dXJuXG4gICAgdGhpcy5jb25zb2xlLmFzc2VydCh2YWx1ZSwgLi4udGhpcy5mb3JtYXQobWVzc2FnZSksIC4uLm9wdGlvbmFsUGFyYW1zKVxuICB9XG5cbiAgc3RhdGljIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kZWJ1Z2dpbmcpIHJldHVyblxuICAgIHRoaXMuY29uc29sZS5kZWJ1ZyguLi50aGlzLmZvcm1hdChtZXNzYWdlKSwgLi4ub3B0aW9uYWxQYXJhbXMpXG4gIH1cblxuICBzdGF0aWMgZXJyb3IobWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRlYnVnZ2luZykgcmV0dXJuXG4gICAgdGhpcy5jb25zb2xlLmVycm9yKC4uLnRoaXMuZm9ybWF0KG1lc3NhZ2UpLCAuLi5vcHRpb25hbFBhcmFtcylcbiAgfVxuXG4gIHN0YXRpYyBpbmZvKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kZWJ1Z2dpbmcpIHJldHVyblxuICAgIHRoaXMuY29uc29sZS5pbmZvKC4uLnRoaXMuZm9ybWF0KG1lc3NhZ2UpLCAuLi5vcHRpb25hbFBhcmFtcylcbiAgfVxuXG4gIHN0YXRpYyBsb2cobWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRlYnVnZ2luZykgcmV0dXJuXG4gICAgdGhpcy5jb25zb2xlLmxvZyguLi50aGlzLmZvcm1hdChtZXNzYWdlKSwgLi4ub3B0aW9uYWxQYXJhbXMpXG4gIH1cblxuICBzdGF0aWMgd2FybihtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGVidWdnaW5nKSByZXR1cm5cbiAgICB0aGlzLmNvbnNvbGUud2FybiguLi50aGlzLmZvcm1hdChtZXNzYWdlKSwgLi4ub3B0aW9uYWxQYXJhbXMpXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBmb3JtYXQobWVzc2FnZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICBgJWNbJWMke3RoaXMudGltZX0lY11gLFxuICAgICAgXCJjb2xvcjojOTc0MmMyXCIsXG4gICAgICBcImNvbG9yOm5vbmVcIixcbiAgICAgIFwiY29sb3I6Izk3NDJjMlwiLFxuICAgICAgbWVzc2FnZSxcbiAgICBdXG4gIH1cbn1cbiIsImltcG9ydCB7IENvbnNvbGUgfSBmcm9tIFwiLi9jb25zb2xlXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuL2kxOG4vdHJhbnNsYXRlXCJcblxuZnVuY3Rpb24gZG93bmxvYWRDYW52YXMoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIGNhbnZhcy50b0Jsb2IoXG4gICAgYmxvYiA9PiB7XG4gICAgICBpZiAoIWJsb2IpIHtcbiAgICAgICAgQ29uc29sZS5lcnJvcihcIkNhbnZhcyBpcyBlbXB0eVwiKVxuICAgICAgICAkLmZsYXZyTm90aWYodHJhbnNsYXRlLmVycm9yLmRvd25sb2FkQ2FudmFzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKVxuXG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIilcbiAgICAgIGEuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmwpXG4gICAgICBhLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIGAke25hbWV9LnBuZ2ApXG4gICAgICBhLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxuXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpXG4gICAgICBhLmNsaWNrKClcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSlcblxuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpXG4gICAgfSxcbiAgICBcImltYWdlL3BuZ1wiLFxuICAgIDFcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRGYWNlKCk6IHZvaWQge1xuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxDYW52YXNFbGVtZW50PihcbiAgICBcIiNhdmF0YXItbWVudS1jb250YWluZXIgY2FudmFzXCJcbiAgKVxuICBpZiAoIWNhbnZhcykge1xuICAgIGNvbnNvbGUud2FybihcIkNvdWxkbid0IGZpbmQgdGhlIGd1YXJkaWFuJ3MgZmFjZS5cIilcbiAgICByZXR1cm5cbiAgfVxuXG4gIGRvd25sb2FkQ2FudmFzKGNhbnZhcywgXCJmYWNlXCIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZEd1YXJkaWFuKCk6IHZvaWQge1xuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxDYW52YXNFbGVtZW50PihcbiAgICBcIiNob21lLWF2YXRhci1wbGF5ZXIgY2FudmFzXCJcbiAgKVxuICBpZiAoIWNhbnZhcykge1xuICAgIGNvbnNvbGUud2FybihcIkNvdWxkbid0IGZpbmQgdGhlIGd1YXJkaWFuLlwiKVxuICAgIHJldHVyblxuICB9XG5cbiAgZG93bmxvYWRDYW52YXMoY2FudmFzLCBnZXROYW1lKCkgPz8gXCJndWFyZGlhblwiKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRBcHBlYXJhbmNlKCk6IHZvaWQge1xuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxDYW52YXNFbGVtZW50PihcbiAgICBcIiNhcHBlYXJhbmNlLXByZXZpZXcgY2FudmFzXCJcbiAgKVxuICBpZiAoIWNhbnZhcykge1xuICAgIGNvbnNvbGUud2FybihcIkNvdWxkbid0IGZpbmQgdGhlIGd1YXJkaWFuLlwiKVxuICAgIHJldHVyblxuICB9XG5cbiAgZG93bmxvYWRDYW52YXMoY2FudmFzLCBnZXROYW1lKCkgPz8gXCJndWFyZGlhblwiKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRQcm9maWxlKCk6IHZvaWQge1xuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxDYW52YXNFbGVtZW50PihcbiAgICBcIi5wbGF5ZXJQcm9maWxlQXZhdGFyIGNhbnZhc1wiXG4gIClcbiAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxIZWFkaW5nRWxlbWVudD4oXG4gICAgXCIjbWFpbi1zZWN0aW9uIC5zZWN0aW9uLXRpdGxlXCJcbiAgKVxuICBpZiAoIWNhbnZhcyB8fCAhdGl0bGUpIHJldHVyblxuXG4gIGRvd25sb2FkQ2FudmFzKGNhbnZhcywgdGl0bGUudGV4dENvbnRlbnQ/LnRyaW0oKSA/PyBcImd1YXJkaWFuXCIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lKCk6IHN0cmluZyB8IG51bGwge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXZhdGFyLW1lbnUtY29udGFpbmVyLW91dGVyPnBcIik/LnRleHRDb250ZW50ID8/XG4gICAgbnVsbFxuICApXG59XG4iLCJleHBvcnQgZW51bSBEdXJhdGlvblVuaXQge1xuICBtaWxsaXNlY29uZCA9IDEsXG4gIHNlY29uZCA9IDEwMDAgKiBtaWxsaXNlY29uZCxcbiAgbWludXRlID0gNjAgKiBzZWNvbmQsXG4gIGhvdXIgPSA2MCAqIG1pbnV0ZSxcbiAgZGF5ID0gMjQgKiBob3VyLFxuICB3ZWVrID0gNyAqIGRheSxcbn1cblxuZXhwb3J0IGNsYXNzIER1cmF0aW9uIHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgdmFsdWU6IG51bWJlciwgcmVhZG9ubHkgdW5pdDogRHVyYXRpb25Vbml0KSB7fVxuXG4gIGRpdmlkZShkdXJhdGlvbjogRHVyYXRpb24pOiBEdXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbih0aGlzLnZhbHVlIC8gZHVyYXRpb24udG8odGhpcy51bml0KS52YWx1ZSwgdGhpcy51bml0KVxuICB9XG5cbiAgbWludXMoZHVyYXRpb246IER1cmF0aW9uKTogRHVyYXRpb24ge1xuICAgIHJldHVybiBuZXcgRHVyYXRpb24odGhpcy52YWx1ZSAtIGR1cmF0aW9uLnRvKHRoaXMudW5pdCkudmFsdWUsIHRoaXMudW5pdClcbiAgfVxuXG4gIG11bHRpcGx5KGR1cmF0aW9uOiBEdXJhdGlvbik6IER1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKHRoaXMudmFsdWUgKiBkdXJhdGlvbi50byh0aGlzLnVuaXQpLnZhbHVlLCB0aGlzLnVuaXQpXG4gIH1cblxuICBwbHVzKGR1cmF0aW9uOiBEdXJhdGlvbik6IER1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKHRoaXMudmFsdWUgKyBkdXJhdGlvbi50byh0aGlzLnVuaXQpLnZhbHVlLCB0aGlzLnVuaXQpXG4gIH1cblxuICB0byh1bml0OiBEdXJhdGlvblVuaXQpOiBEdXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbigodGhpcy52YWx1ZSAqIHRoaXMudW5pdCkgLyB1bml0LCB1bml0KVxuICB9XG59XG4iLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5pbnRlcmZhY2UgSlF1ZXJ5U3RhdGljIHtcbiAgZmxhdnI6IChkYXRhOiBmbGF2clBhcmFtcykgPT4gdm9pZFxuICBmbGF2ck5vdGlmOiAoXG4gICAgY29udGVudDogc3RyaW5nIHwgdW5rbm93bixcbiAgICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgaWQ/OiBudW1iZXIsXG4gICAgZm9yY2U/OiBib29sZWFuXG4gICkgPT4gdm9pZFxufVxuXG5pbnRlcmZhY2UgZmxhdnJQYXJhbXMge1xuICAvKiogQW5pbWF0ZS5jc3MgKi9cbiAgYW5pbWF0ZUNsb3Npbmc/OiBcImZhZGVPdXRcIiB8IFwiZmFkZU91dFVwXCJcbiAgLyoqIEFuaW1hdGUuY3NzICovXG4gIGFuaW1hdGVFbnRyYW5jZT86IFwiZmFkZUluXCIgfCBcImZhZGVJbkRvd25cIlxuICAvKiogQnV0dG9ucyBhcmUga2V5LXZhbHVlIHBhaXJzIHdoZXJlIHRoZSBrZXkgaXMgdGhlICAqL1xuICBidXR0b25zPzogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBzdHlsZT86IFwiY2xvc2VcIiB8IFwiZGVmYXVsdFwiXG4gICAgICB0ZXh0Pzogc3RyaW5nXG4gICAgICBhZGRDbGFzcz86IHN0cmluZ1xuICAgICAgLyoqIEByZXR1cm5zIHdoZXRoZXIgdGhlIHBvcHVwIHNob3VsZCBjbG9zZSAqL1xuICAgICAgYWN0aW9uPzogKCRjb250YWluZXI6IEpRdWVyeSkgPT4gYm9vbGVhblxuICAgIH1cbiAgPlxuICAvKiogSFRNTCBjb250ZW50IG9mIHRoZSBmbGF2ciAqL1xuICBjb250ZW50Pzogc3RyaW5nXG4gIC8qKiBUeXBlIG9mIGRpYWxvZy4gKi9cbiAgZGlhbG9nPzogXCJhbGVydFwiIHwgXCJjb25maXJtXCIgfCBcImZvcm1cIiB8IFwicHJvbXB0XCJcbiAgb25CdWlsZD86ICgkY29udGFpbmVyOiBKUXVlcnkpID0+IHZvaWRcbiAgb25DYW5jZWw/OiAoKSA9PiB2b2lkXG4gIG9uQ29uZmlybT86ICgpID0+IHZvaWRcbiAgb25TaG93PzogKCkgPT4gdm9pZFxuICBwcm9tcHQ/OiB7XG4gICAgLyoqIERlZmF1bHQgdmFsdWUgKi9cbiAgICB2YWx1ZTogc3RyaW5nXG4gIH1cblxuICB0aXRsZT86IHN0cmluZ1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHRyaW1JY29uKGljb246IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHRpbGRlID0gaWNvbi5sYXN0SW5kZXhPZihcIn5cIilcbiAgY29uc3QgZG90ID0gaWNvbi5sYXN0SW5kZXhPZihcIi5cIilcbiAgaWYgKHRpbGRlID09PSAtMSB8fCBkb3QgPT09IC0xKSByZXR1cm4gaWNvblxuXG4gIHJldHVybiBpY29uLnN1YnN0cmluZygwLCB0aWxkZSkgKyBpY29uLnN1YnN0cmluZyhkb3QpXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9uIH0gZnJvbSBcIi4vdHJhbnNsYXRpb25cIlxuXG5leHBvcnQgY29uc3QgZW46IFRyYW5zbGF0aW9uID0ge1xuICBob21lOiB7XG4gICAgZm9ydW06IFwiRm9ydW1cIixcbiAgICB0YWtlb3ZlcjogXCJUYWtlb3ZlclwiLFxuICB9LFxuICB0YWtlb3Zlcjoge1xuICAgIGJvdWdodDogKG5hbWUsIHByaWNlKSA9PlxuICAgICAgYEJvdWdodCA8c3Ryb25nPiR7bmFtZX08L3N0cm9uZz4gZm9yIDxzdHJvbmcgY2xhc3M9XCJwcmljZS1pdGVtXCI+JHtwcmljZX08L3N0cm9uZz4gPHNwYW4gY2xhc3M9XCJtYWFuYS1pY29uXCIgYWx0PVwibWFhbmFzXCI+PC9zcGFuPi5gLFxuICAgIGRpc2FibGVkOiBcIlRha2VvdmVyIG1vZGUgZGlzYWJsZWQuXCIsXG4gICAgZW5hYmxlZDogXCJUYWtlb3ZlciBtb2RlIGVuYWJsZWQuIFBsZWFzZSBkbyBub3QgaW50ZXJhY3Qgd2l0aCB0aGlzIHRhYi5cIixcbiAgfSxcbiAgY2Fyb3VzZWw6IHtcbiAgICBiZWVtb292X2Fubm95YW5jZXM6IHtcbiAgICAgIHRpdGxlOiBcIkJlZW1vb3YgQW5ub3lhbmNlc1wiLFxuICAgICAgc3VidGl0bGU6IFwiQmxvY2sgc29tZSBvZiBFbGRhcnlhJ3MgYW5ub3lhbmNlcy5cIixcbiAgICB9LFxuICAgIGRvd25sb2FkX2ZhY2U6IHtcbiAgICAgIHRpdGxlOiBcIkRvd25sb2FkIHlvdXIgZ3VhcmRpYW4ncyBmYWNlIVwiLFxuICAgICAgc3VidGl0bGU6IFwiQ2xpY2sgaGVyZSB0byBkb3dubG9hZCB5b3VyIGd1YXJkaWFuJ3MgZmFjZS5cIixcbiAgICB9LFxuICAgIGRvd25sb2FkX2d1YXJkaWFuOiB7XG4gICAgICB0aXRsZTogXCJEb3dubG9hZCB5b3VyIGd1YXJkaWFuIVwiLFxuICAgICAgc3VidGl0bGU6IFwiQ2xpY2sgaGVyZSB0byBkb3dubG9hZCB5b3VyIGd1YXJkaWFuLlwiLFxuICAgIH0sXG4gICAgZWxkYXJ5YV9lbmhhbmNlbWVudHM6IHtcbiAgICAgIHRpdGxlOiBgJHtHTS5pbmZvLnNjcmlwdC5uYW1lfSB2JHtHTS5pbmZvLnNjcmlwdC52ZXJzaW9ufWAsXG4gICAgICBzdWJ0aXRsZTogR00uaW5mby5zY3JpcHQuZGVzY3JpcHRpb24sXG4gICAgfSxcbiAgICB0YWtlb3Zlcjoge1xuICAgICAgZGlzYWJsZV90YWtlb3ZlcjogXCJEaXNhYmxlIFRha2VvdmVyXCIsXG4gICAgICBlbmFibGVfdGFrZW92ZXI6IFwiRW5hYmxlIFRha2VvdmVyXCIsXG4gICAgICBzdWJ0aXRsZTogXCJHaXZlIHVwIHRoaXMgdGFiIHRvIHBlcmZvcm0gYXV0b21hdGVkIGFjdGlvbnMuXCIsXG4gICAgICB0aXRsZTogXCJUYWtlb3ZlclwiLFxuICAgIH0sXG4gIH0sXG4gIG1pbmlnYW1lczoge1xuICAgIHBsYXllZF9mb3I6IChuYW1lLCBtYWFuYXMpID0+XG4gICAgICBgUGxheWVkIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPiBmb3IgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke21hYW5hc308L3N0cm9uZz4gPHNwYW4gY2xhc3M9XCJtYWFuYS1pY29uXCIgYWx0PVwibWFhbmFzXCI+PC9zcGFuPiBlYXJuZWQuYCxcbiAgICBwbGF5ZWQ6IG5hbWUgPT4gYFBsYXllZCA8c3Ryb25nPiR7bmFtZX08L3N0cm9uZz4uYCxcbiAgICBwbGF5aW5nOiBuYW1lID0+IGBQbGF5aW5nIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPi4uLmAsXG4gIH0sXG4gIGFwcGVhcmFuY2U6IHtcbiAgICBidXR0b25zOiB7XG4gICAgICBiYWNrd2FyZDogXCJNb3ZlIGJhY2tcIixcbiAgICAgIGZvcndhcmQ6IFwiQnJpbmcgZm9yd2FyZFwiLFxuICAgIH0sXG4gICAgZmF2b3VyaXRlczoge1xuICAgICAgaW1wb3J0ZWQ6IFwiSW1wb3J0ZWQgb3V0Zml0IVwiLFxuICAgICAgaW1wb3J0aW5nOiBcIkltcG9ydGluZyBvdXRmaXQuIFBsZWFzZSB3YWl0Li4uXCIsXG4gICAgICBjbGlja19vdXRmaXQ6IHtcbiAgICAgICAgZGVsZXRlOiBcIkRlbGV0ZVwiLFxuICAgICAgICBnb3RvX2FjY291bnQ6IGBUbyB0cmFuc2ZlciB5b3VyIDxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC5uYW1lfTwvc3Ryb25nPiBmYXZvdXJpdGVzIHRvIGFub3RoZXIgYnJvd3NlciwgZXhwb3J0IHRoZW0gaW4gdGhlIDxhIGhyZWY9XCIvdXNlci9hY2NvdW50XCIgc3R5bGU9XCJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcIj5teSZuYnNwO2FjY291bnQ8L2E+IHBhZ2UuYCxcbiAgICAgICAgc2F2ZWRfbG9jYWxseTogYFRha2Ugbm90ZSB0aGF0IHRoaXMgb3V0Zml0IHdhcyBzYXZlZCBpbiA8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQubmFtZX08L3N0cm9uZz4nIHNldHRpbmdzIGFuZCB3YXMgbm90IHNlbnQgdG8gRWxkYXJ5YSdzIHNlcnZlcnMuYCxcbiAgICAgICAgd2VhcjogXCJXZWFyXCIsXG4gICAgICB9LFxuICAgICAgc2F2ZV9vdXRmaXQ6IHtcbiAgICAgICAgZ290b19hY2NvdW50OiBgVG8gdHJhbnNmZXIgeW91ciA8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQubmFtZX08L3N0cm9uZz4gZmF2b3VyaXRlcyB0byBhbm90aGVyIGJyb3dzZXIsIGV4cG9ydCB0aGVtIGluIHRoZSA8YSBocmVmPVwiL3VzZXIvYWNjb3VudFwiIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XCI+bXkmbmJzcDthY2NvdW50PC9hPiBwYWdlLmAsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIk5hbWUuLi5cIixcbiAgICAgICAgc2F2ZTogXCJTYXZlXCIsXG4gICAgICAgIHNhdmVkX2xvY2FsbHk6IGBUYWtlIG5vdGUgdGhhdCB0aGlzIG91dGZpdCB3aWxsIG9ubHkgYmUgc2F2ZWQgd2l0aGluIDxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC5uYW1lfTwvc3Ryb25nPicgc2V0dGluZ3MgYW5kIHdpbGwgbm90IGJlIHNlbnQgdG8gRWxkYXJ5YSdzIHNlcnZlcnMuYCxcbiAgICAgICAgdGl0bGU6IFwiU2F2ZSBvdXRmaXRcIixcbiAgICAgIH0sXG4gICAgICBidXR0b25zOiB7XG4gICAgICAgIGRvd25sb2FkOiBcIkRvd25sb2FkIFBOR1wiLFxuICAgICAgICBleHBvcnQ6IFwiRXhwb3J0XCIsXG4gICAgICAgIGltcG9ydDogXCJJbXBvcnRcIixcbiAgICAgIH0sXG4gICAgfSxcbiAgICBsb2FkZWQ6IFwiVGhlIHdhcmRyb2JlIGlzIGxvYWRlZC5cIixcbiAgICBsb2FkaW5nOiAoY2F0ZWdvcnluYW1lOiBzdHJpbmcpID0+XG4gICAgICBgTG9hZGluZyA8c3Ryb25nPiR7Y2F0ZWdvcnluYW1lfTwvc3Ryb25nPi4uLmAsXG4gIH0sXG4gIG1hcmtldDoge1xuICAgIGFkZF90b193aXNobGlzdDoge1xuICAgICAgYWRkZWRfdG9fd2lzaGxpc3Q6IChuYW1lLCBwcmljZSkgPT5cbiAgICAgICAgYEFkZGVkIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPiBmb3IgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke3ByaWNlfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+IHRvIHRoZSB3aXNobGlzdC5gLFxuICAgICAgaW52YWxpZF9wcmljZTogXCJUaGlzIGlzIG5vdCBhIHZhbGlkIHByaWNlLlwiLFxuICAgICAgc2F2ZTogXCJTYXZlXCIsXG4gICAgICB0ZXh0OiBcIkhvdyBtYW55IG1hYW5hcyBkbyB5b3Ugd2lzaCB0byBvZmZlciB0byBhY3F1aXJlIHRoaXMgaXRlbT9cIixcbiAgICAgIHRpdGxlOiBcIkFkZCB0byB3aXNobGlzdFwiLFxuICAgIH0sXG4gICAgYXVjdGlvbnM6IHtcbiAgICAgIGJ1eV9ub3dfcHJpY2U6IFwiQnV5IG5vdyBwcmljZSA6XCIsXG4gICAgICBjdXJyZW50X3ByaWNlOiBcIkN1cnJlbnQgcHJpY2UgOlwiLFxuICAgICAgZGVsZXRlOiBcIkRlbGV0ZVwiLFxuICAgICAgcHVyY2hhc2VfaGlzdG9yeTogXCJQdXJjaGFzZSBoaXN0b3J5XCIsXG4gICAgICBzYWxlc19oaXN0b3J5OiBcIlNhbGVzIGhpc3RvcnlcIixcbiAgICAgIGRhdGVfdGltZV9mb3JtYXQ6IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFwiZW4tR0JcIiwge1xuICAgICAgICBtaW51dGU6IFwiMi1kaWdpdFwiLFxuICAgICAgICBob3VyOiBcIjItZGlnaXRcIixcbiAgICAgICAgZGF5OiBcIm51bWVyaWNcIixcbiAgICAgICAgbW9udGg6IFwibG9uZ1wiLFxuICAgICAgICB5ZWFyOiBcIm51bWVyaWNcIixcbiAgICAgIH0pLFxuICAgIH0sXG4gICAgY2hhbmdlX3ByaWNlOiB7XG4gICAgICBjaGFuZ2VkX3ByaWNlOiAobmFtZSwgcHJpY2UpID0+XG4gICAgICAgIGBDaGFuZ2VkIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPidzIHByaWNlIGZvciA8c3Ryb25nIGNsYXNzPVwicHJpY2UtaXRlbVwiPiR7cHJpY2V9PC9zdHJvbmc+IDxzcGFuIGNsYXNzPVwibWFhbmEtaWNvblwiIGFsdD1cIm1hYW5hc1wiPjwvc3Bhbj4uYCxcbiAgICAgIGludmFsaWRfcHJpY2U6IFwiVGhpcyBpcyBub3QgYSB2YWxpZCBwcmljZS5cIixcbiAgICAgIHNhdmU6IFwiU2F2ZVwiLFxuICAgICAgdGV4dDogXCJIb3cgbWFueSBtYWFuYXMgZG8geW91IHdpc2ggdG8gb2ZmZXIgdG8gYWNxdWlyZSB0aGlzIGl0ZW0/XCIsXG4gICAgICB0aXRsZTogXCJDaGFuZ2UgcHJpY2VcIixcbiAgICB9LFxuICAgIHdpc2hsaXN0OiB7XG4gICAgICBhc3Npc3RhbmNlOiBgT24gdGhpcyBwYWdlLCB5b3UgY2FuIG9yZ2FuaXplIHlvdXIgd2lzaGxpc3QgYW5kIGNoZWNrIHRoZSBzdGF0dXMgb2YgeW91ciB3aXNoZWQgaXRlbXMuIFBsZWFzZSBub3RlIHRoYXQgeW91ciB3aXNobGlzdCBpcyBzYXZlZCBsb2NhbGx5IGluIDxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC5uYW1lfTwvc3Ryb25nPicgc2V0dGluZ3MgYW5kIGlzIG5vdCBzZW50IHRvIEVsZGFyeWEncyBzZXJ2ZXJzLiBUbyB0cmFuc2ZlciB5b3VyIHdpc2hsaXN0IHRvIGFub3RoZXIgYnJvd3NlciwgZXhwb3J0IHlvdXIgc2V0dGluZ3MgaW4gdGhlIDxhIGhyZWY9XCIvdXNlci9hY2NvdW50XCIgc3R5bGU9XCJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcIj5teSZuYnNwO2FjY291bnQ8L2E+IHBhZ2UuYCxcbiAgICAgIGFjdGlvbnM6IFwiQWN0aW9uc1wiLFxuICAgICAgY2hhbmdlX3ByaWNlOiBcIkNoYW5nZSBwcmljZVwiLFxuICAgICAgZGVsZXRlX3Rvb2x0aXA6IFwiUmVtb3ZlIGZyb20gd2lzaGxpc3RcIixcbiAgICAgIGRlbGV0ZTogXCJEZWxldGVcIixcbiAgICAgIGljb246IFwiSWNvblwiLFxuICAgICAgbmFtZTogXCJOYW1lXCIsXG4gICAgICBwcmljZTogXCJQcmljZVwiLFxuICAgICAgcmVzZXRfdG9vbHRpcDogXCJSZXNldCB0aGUgZXJyb3Igc3RhdHVzXCIsXG4gICAgICByZXNldDogXCJSZXNldFwiLFxuICAgICAgc3RhdHVzOiBcIlN0YXR1c1wiLFxuICAgICAgdGl0bGU6IFwiV2lzaGxpc3RcIixcbiAgICB9LFxuICB9LFxuICBhY2NvdW50OiB7XG4gICAgZGVidWdfdG9vbHRpcDogXCJFbmFibGVzIG9yIGRpc2FibGVzIGxvZ2dpbmcuXCIsXG4gICAgZGVidWc6IFwiRGVidWdcIixcbiAgICBlbmhhbmNlbWVudHM6IFwiRW5oYW5jZW1lbnRzXCIsXG4gICAgZXhwbG9yYXRpb25zOiBcIkV4cGxvcmF0aW9uc1wiLFxuICAgIGV4cG9ydDogXCJFeHBvcnQgc2V0dGluZ3NcIixcbiAgICBpbXBvcnQ6IFwiSW1wb3J0IHNldHRpbmdzXCIsXG4gICAgaW1wb3J0ZWQ6IFwiSW1wb3J0ZWQgc2V0dGluZ3MhXCIsXG4gICAgbWFya2V0OiBcIk1hcmtldFwiLFxuICAgIG1pbmlnYW1lczogXCJNaW5pZ2FtZXNcIixcbiAgfSxcbiAgcGV0OiB7XG4gICAgYXV0b19leHBsb3JlOiBcIkhpZ2hsaWdodFwiLFxuICAgIGRhdGVfdGltZV9mb3JtYXQ6IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFwiZW4tR0JcIiwge1xuICAgICAgbWludXRlOiBcIjItZGlnaXRcIixcbiAgICAgIGhvdXI6IFwiMi1kaWdpdFwiLFxuICAgICAgZGF5OiBcIm51bWVyaWNcIixcbiAgICAgIG1vbnRoOiBcImxvbmdcIixcbiAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxuICAgIH0pLFxuICAgIGRlbGV0ZV9oaXN0b3J5OiBcIkRlbGV0ZSBoaXN0b3J5XCIsXG4gICAgZW1wdHlfaGlzdG9yeTpcbiAgICAgIFwiWW91ciBleHBsb3JhdGlvbiBoaXN0b3J5IGlzIGVtcHR5LiBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgZmlsbCB1cCBhcyB5b3VyIGZhbWlsaWFyIGZpbmRzIGl0ZW1zIHdoaWxlIGV4cGxvcmluZy5cIixcbiAgICBnb3RvX2FjY291bnQ6IGBUbyB0cmFuc2ZlciB5b3VyIGV4cGxvcmF0aW9uIGhpc3RvcnkgdG8gYW5vdGhlciBicm93c2VyLCBleHBvcnQgeW91ciBzZXR0aW5ncyBmcm9tIHRoZSA8ZW0+bXkmbmJzcDthY2NvdW50PC9lbT4gcGFnZS5gLFxuICAgIGhpc3Rvcnk6IFwiSGlzdG9yeVwiLFxuICAgIHNhdmVkX2xvY2FsbHk6IGBQbGVhc2Ugbm90ZSB0aGF0IHlvdXIgZXhwbG9yYXRpb24gaGlzdG9yeSB3YXMgc2F2ZWQgbG9jYWxseSBpbiA8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQubmFtZX08L3N0cm9uZz4nIHNldHRpbmdzIGFuZCB3YXMgbm90IHNlbnQgdG8gRWxkYXJ5YSdzIHNlcnZlcnMuYCxcbiAgfSxcbiAgcHJvZmlsZToge1xuICAgIGV4cG9ydF9vdXRmaXQ6IFwiRXhwb3J0IG91dGZpdFwiLFxuICAgIGRvd25sb2FkX291dGZpdDogXCJEb3dubG9hZCBQTkdcIixcbiAgfSxcbiAgZXJyb3I6IHtcbiAgICBkb3dubG9hZENhbnZhczogXCJUaGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIGltYWdlLlwiLFxuICB9LFxuICBtYWxsOiB7XG4gICAgYWRkX3RvX3dpc2hsaXN0OiB7XG4gICAgICB0aXRsZTogXCJBZGQgdG8gbWFya2V0IHdpc2hsaXN0XCIsXG4gICAgICB0ZXh0OiBcIkhvdyBtYW55IG1hYW5hcyBkbyB5b3Ugd2lzaCB0byBvZmZlciB0byBhY3F1aXJlIHRoaXMgaXRlbT9cIixcbiAgICAgIG5vdGU6IFwiUGxlYXNlIG5vdGUgdGhhdCB0aGUgaXRlbXMgYWRkZWQgZnJvbSB0aGUgbWFsbCBhcmUgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBhdCB0aGUgbWFya2V0LlwiLFxuICAgIH0sXG4gIH0sXG59XG5cbk9iamVjdC5mcmVlemUoZW4pXG4iLCJpbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9uIH0gZnJvbSBcIi4vdHJhbnNsYXRpb25cIlxuXG5leHBvcnQgY29uc3QgZnI6IFRyYW5zbGF0aW9uID0ge1xuICBob21lOiB7XG4gICAgZm9ydW06IFwiRm9ydW1cIixcbiAgICB0YWtlb3ZlcjogXCJUYWtlb3ZlclwiLFxuICB9LFxuICB0YWtlb3Zlcjoge1xuICAgIGJvdWdodDogKG5hbWUsIHByaWNlKSA9PlxuICAgICAgYEFjaGV0w6kgPHN0cm9uZz4ke25hbWV9PC9zdHJvbmc+IHBvdXIgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke3ByaWNlfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+LmAsXG4gICAgZGlzYWJsZWQ6IFwiVGFrZW92ZXIgZMOpc2FjdGl2w6kuXCIsXG4gICAgZW5hYmxlZDogXCJUYWtlb3ZlciBhY3RpdsOpLiDDiXZpdGUgZCdpbnTDqXJhZ2lyIGF2ZWMgY2V0IG9uZ2xldC5cIixcbiAgfSxcbiAgY2Fyb3VzZWw6IHtcbiAgICBiZWVtb292X2Fubm95YW5jZXM6IHtcbiAgICAgIHRpdGxlOiBcIkJlZW1vb3YgQW5ub3lhbmNlc1wiLFxuICAgICAgc3VidGl0bGU6IFwiQmxvcXVlIGNlcnRhaW5zIGlycml0YW50cyBkJ0VsZGFyeWEuXCIsXG4gICAgfSxcbiAgICBkb3dubG9hZF9mYWNlOiB7XG4gICAgICB0aXRsZTogXCJUw6lsw6ljaGFyZ2UgbGUgdmlzYWdlIGRlIHRhIGdhcmRpZW5uZSFcIixcbiAgICAgIHN1YnRpdGxlOiBcIkNsaXF1ZSBpY2kgcG91ciB0w6lsw6ljaGFyZ2VyIGxlIHZpc2FnZSBkZSB0YSBnYXJkaWVubmUuXCIsXG4gICAgfSxcbiAgICBkb3dubG9hZF9ndWFyZGlhbjoge1xuICAgICAgdGl0bGU6IFwiVMOpbMOpY2hhcmdlIHRhIGdhcmRpZW5uZSFcIixcbiAgICAgIHN1YnRpdGxlOiBcIkNsaXF1ZSBpY2kgcG91ciB0w6lsw6ljaGFyZ2VyIHRhIGdhcmRpZW5uZS5cIixcbiAgICB9LFxuICAgIGVsZGFyeWFfZW5oYW5jZW1lbnRzOiB7XG4gICAgICB0aXRsZTogYCR7R00uaW5mby5zY3JpcHQubmFtZX0gdiR7R00uaW5mby5zY3JpcHQudmVyc2lvbn1gLFxuICAgICAgc3VidGl0bGU6IFwiQW3DqWxpb3JlIGwnZXhww6lyaWVuY2UgdXRpbGlzYXRldXIgZCdFbGRhcnlhLlwiLFxuICAgIH0sXG4gICAgdGFrZW92ZXI6IHtcbiAgICAgIGRpc2FibGVfdGFrZW92ZXI6IFwiRMOpc2FjdGl2ZSBsZSB0YWtlb3ZlclwiLFxuICAgICAgZW5hYmxlX3Rha2VvdmVyOiBcIkFjdGl2ZSBsZSB0YWtlb3ZlclwiLFxuICAgICAgc3VidGl0bGU6IFwiTGFpc3NlIGNldCBvbmdsZXQgcGVyZm9ybWVyIGRlcyBhY3Rpb25zIGF1dG9tYXRpcXVlcy5cIixcbiAgICAgIHRpdGxlOiBcIlRha2VvdmVyXCIsXG4gICAgfSxcbiAgfSxcbiAgbWluaWdhbWVzOiB7XG4gICAgcGxheWVkX2ZvcjogKG5hbWU6IHN0cmluZywgbWFhbmFzOiBudW1iZXIpID0+XG4gICAgICBgQSBqb3XDqSDDoCA8c3Ryb25nPiR7bmFtZX08L3N0cm9uZz4gcG91ciA8c3Ryb25nIGNsYXNzPVwicHJpY2UtaXRlbVwiPiR7bWFhbmFzfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+IGdhZ27DqXMuYCxcbiAgICBwbGF5ZWQ6IChuYW1lOiBzdHJpbmcpID0+IGBBIGpvdcOpIMOgIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPi5gLFxuICAgIHBsYXlpbmc6IChuYW1lOiBzdHJpbmcpID0+IGBKb3VlIMOgIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPi4uLmAsXG4gIH0sXG4gIGFwcGVhcmFuY2U6IHtcbiAgICBidXR0b25zOiB7XG4gICAgICBiYWNrd2FyZDogXCJWZXJzIGwnYXJyacOocmVcIixcbiAgICAgIGZvcndhcmQ6IFwiVmVycyBsJ2F2YW50XCIsXG4gICAgfSxcbiAgICBmYXZvdXJpdGVzOiB7XG4gICAgICBpbXBvcnRlZDogXCJJbXBvcnRhdGlvbiByw6l1c3NpZSFcIixcbiAgICAgIGltcG9ydGluZzogXCJJbXBvcnRhdGlvbiBlbiBjb3Vycy4uLlwiLFxuICAgICAgY2xpY2tfb3V0Zml0OiB7XG4gICAgICAgIGRlbGV0ZTogXCJTdXBwcmltZXJcIixcbiAgICAgICAgZ290b19hY2NvdW50OiBgUG91ciB0cmFuc2bDqXJlciB0ZXMgZmF2b3JpcyBkJzxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC5uYW1lfTwvc3Ryb25nPiB2ZXJzIHVuIGF1dHJlIG5hdmlnYXRldXIsIGV4cG9ydGUtbGVzIMOgIHBhcnRpciBkZSBsYSBwYWdlIDxhIGhyZWY9XCIvdXNlci9hY2NvdW50XCIgc3R5bGU9XCJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcIj5tb24mbmJzcDtjb21wdGU8L2E+LmAsXG4gICAgICAgIHNhdmVkX2xvY2FsbHk6IGBQcmVuZHMgbm90ZSBxdWUgY2V0dGUgdGVudWUgYSDDqXTDqSBzYXV2ZWdhcmTDqWUgbG9jYWxlbWVudCBkYW5zIGxlcyBwYXJhbcOodHJlcyBkJzxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC5uYW1lfTwvc3Ryb25nPiBldCBuJ2EgcGFzIMOpdMOpIGVudm95w6llIGF1eCBzZXJ2ZXVycyBkJ0VsZGFyeWEuYCxcbiAgICAgICAgd2VhcjogXCJQb3J0ZXJcIixcbiAgICAgIH0sXG4gICAgICBzYXZlX291dGZpdDoge1xuICAgICAgICBnb3RvX2FjY291bnQ6IGBQb3VyIHRyYW5zZsOpcmVyIHRlcyBmYXZvcmlzIGQnPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+IHZlcnMgdW4gYXV0cmUgbmF2aWdhdGV1ciwgZXhwb3J0ZS1sZXMgw6AgcGFydGlyIGRlIGxhIHBhZ2UgPGEgaHJlZj1cIi91c2VyL2FjY291bnRcIiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wiPm1vbiZuYnNwO2NvbXB0ZTwvYT4uYCxcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiTm9tLi4uXCIsXG4gICAgICAgIHNhdmU6IFwiU2F1dmVnYXJkZXJcIixcbiAgICAgICAgc2F2ZWRfbG9jYWxseTogYFByZW5kcyBub3RlIHF1ZSBjZXR0ZSB0ZW51ZSBzZXJhIHNhdXZlZ2FyZMOpZSBsb2NhbGVtZW50IGRhbnMgbGVzIHBhcmFtw6h0cmVzIGQnPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+IGV0IG5lIHNlcmEgcGFzIGVudm95w6llIGF1eCBzZXJ2ZXVycyBkJ0VsZGFyeWEuYCxcbiAgICAgICAgdGl0bGU6IFwiU2F1dmVnYXJkZXIgY2V0dGUgdGVudWVcIixcbiAgICAgIH0sXG4gICAgICBidXR0b25zOiB7XG4gICAgICAgIGRvd25sb2FkOiBcIlTDqWzDqWNoYXJnZXIgbGUgUE5HXCIsXG4gICAgICAgIGV4cG9ydDogXCJFeHBvcnRlclwiLFxuICAgICAgICBpbXBvcnQ6IFwiSW1wb3J0ZXJcIixcbiAgICAgIH0sXG4gICAgfSxcbiAgICBsb2FkZWQ6IFwiTGUgY2hhcmdlbWVudCBkZSBsYSBnYXJkZS1yb2JlIGVzdCB0ZXJtaW7DqS5cIixcbiAgICBsb2FkaW5nOiAoY2F0ZWdvcnluYW1lOiBzdHJpbmcpID0+XG4gICAgICBgQ2hhcmdlbWVudCBkZSA8c3Ryb25nPiR7Y2F0ZWdvcnluYW1lfTwvc3Ryb25nPi4uLmAsXG4gIH0sXG4gIG1hcmtldDoge1xuICAgIGFkZF90b193aXNobGlzdDoge1xuICAgICAgYWRkZWRfdG9fd2lzaGxpc3Q6IChuYW1lOiBzdHJpbmcsIHByaWNlOiBudW1iZXIpID0+XG4gICAgICAgIGBBam91dMOpIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPiBwb3VyIDxzdHJvbmcgY2xhc3M9XCJwcmljZS1pdGVtXCI+JHtwcmljZX08L3N0cm9uZz4gPHNwYW4gY2xhc3M9XCJtYWFuYS1pY29uXCIgYWx0PVwibWFhbmFzXCI+PC9zcGFuPiDDoCBsYSBsaXN0ZSBkZSBzb3VoYWl0cy5gLFxuICAgICAgaW52YWxpZF9wcmljZTogXCJDZSBwcml4IG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgICBzYXZlOiBcIlNhdXZlZ2FyZGVyXCIsXG4gICAgICB0ZXh0OiBcIkNvbWJpZW4gZGUgbWFhbmFzIHNvdWhhaXRlcy10dSBvZmZyaXIgcG91ciBhY3F1w6lyaXIgY2V0IGl0ZW0/XCIsXG4gICAgICB0aXRsZTogXCJBam91dGVyIMOgIGxhIGxpc3RlIGRlIHNvdWhhaXRcIixcbiAgICB9LFxuICAgIGF1Y3Rpb25zOiB7XG4gICAgICBidXlfbm93X3ByaWNlOiBcIkFjaGF0IGltbcOpZGlhdCA6XCIsXG4gICAgICBjdXJyZW50X3ByaWNlOiBcIk1pc2UgYWN0dWVsbGUgOlwiLFxuICAgICAgZGVsZXRlOiBcIlN1cHByaW1lclwiLFxuICAgICAgcHVyY2hhc2VfaGlzdG9yeTogXCJIaXN0b3JpcXVlIGQnYWNoYXRcIixcbiAgICAgIHNhbGVzX2hpc3Rvcnk6IFwiSGlzdG9yaXF1ZSBkZSB2ZW50ZVwiLFxuICAgICAgZGF0ZV90aW1lX2Zvcm1hdDogbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJmci1DQVwiLCB7XG4gICAgICAgIG1pbnV0ZTogXCIyLWRpZ2l0XCIsXG4gICAgICAgIGhvdXI6IFwiMi1kaWdpdFwiLFxuICAgICAgICBkYXk6IFwibnVtZXJpY1wiLFxuICAgICAgICBtb250aDogXCJsb25nXCIsXG4gICAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxuICAgICAgfSksXG4gICAgfSxcbiAgICBjaGFuZ2VfcHJpY2U6IHtcbiAgICAgIGNoYW5nZWRfcHJpY2U6IChuYW1lOiBzdHJpbmcsIHByaWNlOiBudW1iZXIpID0+XG4gICAgICAgIGBDaGFuZ8OpIGxlIHByaXggZGUgPHN0cm9uZz4ke25hbWV9PC9zdHJvbmc+IHBvdXIgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke3ByaWNlfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+LmAsXG4gICAgICBpbnZhbGlkX3ByaWNlOiBcIkNlIHByaXggbidlc3QgcGFzIHZhbGlkZS5cIixcbiAgICAgIHNhdmU6IFwiU2F1dmVnYXJkZXJcIixcbiAgICAgIHRleHQ6IFwiQ29tYmllbiBkZSBtYWFuYXMgc291aGFpdGVzLXR1IG9mZnJpciBwb3VyIGFjcXXDqXJpciBjZXQgaXRlbT9cIixcbiAgICAgIHRpdGxlOiBcIkNoYW5nZXIgbGUgcHJpeFwiLFxuICAgIH0sXG4gICAgd2lzaGxpc3Q6IHtcbiAgICAgIGFzc2lzdGFuY2U6IGBTdXIgY2V0dGUgcGFnZSwgdHUgcGV1eCBvcmdhbmlzZXIgdGEgbGlzdGUgZGUgc291aGFpdHMgZXQgdsOpcmlmaWVyIGxlIHN0YXR1dCBkZSB0ZXMgYXJ0aWNsZXMgc291aGFpdMOpcy4gUHJlbmRzIG5vdGUgcXVlIHRhIGxpc3RlIGRlIHNvdWhhaXRzIGVzdCBzYXV2ZWdhcmTDqWUgbG9jYWxlbWVudCBkYW5zIGxlcyBwYXJhbcOodHJlcyBkJzxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC5uYW1lfTwvc3Ryb25nPiBldCBuJ2VzdCBwYXMgZW52b3nDqWUgYXV4IHNlcnZldXJzIGQnRWxkYXJ5YS4gUG91ciB0cmFuc2bDqXJlciB0YSBsaXN0ZSBkZSBzb3VoYWl0cyB2ZXJzIHVuIGF1dHJlIG5hdmlnYXRldXIsIGV4cG9ydGUtbGEgw6AgcGFydGlyIGRlIGxhIHBhZ2UgPGEgaHJlZj1cIi91c2VyL2FjY291bnRcIiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wiPm1vbiZuYnNwO2NvbXB0ZTwvYT4uYCxcbiAgICAgIGFjdGlvbnM6IFwiQWN0aW9uc1wiLFxuICAgICAgY2hhbmdlX3ByaWNlOiBcIkNoYW5nZXIgbGUgcHJpeFwiLFxuICAgICAgZGVsZXRlX3Rvb2x0aXA6IFwiUmV0aXJlciBkZSBsYSBsaXN0ZSBkZSBzb3VoYWl0c1wiLFxuICAgICAgZGVsZXRlOiBcIlN1cHByaW1lclwiLFxuICAgICAgaWNvbjogXCJJY8O0bmVcIixcbiAgICAgIG5hbWU6IFwiTm9tXCIsXG4gICAgICBwcmljZTogXCJQcml4XCIsXG4gICAgICByZXNldF90b29sdGlwOiBcIlLDqWluaXRpYWxpc2VyIGwnw6l0YXQgZCdlcnJldXJcIixcbiAgICAgIHJlc2V0OiBcIlLDqWluaXRpYWxpc2VyXCIsXG4gICAgICBzdGF0dXM6IFwiU3RhdHV0XCIsXG4gICAgICB0aXRsZTogXCJMaXN0ZSBkZSBzb3VoYWl0c1wiLFxuICAgIH0sXG4gIH0sXG4gIGFjY291bnQ6IHtcbiAgICBkZWJ1Z190b29sdGlwOiBcIkFjdGl2ZSBvdSBkw6lzYWN0aXZlIGxhIGpvdXJuYWxpc2F0aW9uLlwiLFxuICAgIGRlYnVnOiBcIkTDqWJvZ2FnZVwiLFxuICAgIGVuaGFuY2VtZW50czogXCJBbcOpbGlvcmF0aW9uc1wiLFxuICAgIGV4cGxvcmF0aW9uczogXCJFeHBsb3JhdGlvbnNcIixcbiAgICBleHBvcnQ6IFwiRXhwb3J0ZXIgbGVzIHBhcmFtw6h0cmVzXCIsXG4gICAgaW1wb3J0OiBcIkltcG9ydGVyIGxlcyBwYXJhbcOodHJlc1wiLFxuICAgIGltcG9ydGVkOiBcIlBhcmFtw6h0cmVzIGltcG9ydMOpc1wiLFxuICAgIG1hcmtldDogXCJNYXJjaMOpXCIsXG4gICAgbWluaWdhbWVzOiBcIk1pbmktamV1eFwiLFxuICB9LFxuICBwZXQ6IHtcbiAgICBhdXRvX2V4cGxvcmU6IFwiTWFycXVlclwiLFxuICAgIGRhdGVfdGltZV9mb3JtYXQ6IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFwiZnItQ0FcIiwge1xuICAgICAgbWludXRlOiBcIjItZGlnaXRcIixcbiAgICAgIGhvdXI6IFwiMi1kaWdpdFwiLFxuICAgICAgZGF5OiBcIm51bWVyaWNcIixcbiAgICAgIG1vbnRoOiBcImxvbmdcIixcbiAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxuICAgIH0pLFxuICAgIGRlbGV0ZV9oaXN0b3J5OiBcIk5ldHRveWVyIGwnaGlzdG9yaXF1ZVwiLFxuICAgIGVtcHR5X2hpc3Rvcnk6XG4gICAgICBcIlRvbiBoaXN0b3JpcXVlIGQnZXhwbG9yYXRpb24gZXN0IHZpZGUuIElsIHNlIHJlbXBsaXJhIGF1dG9tYXRpcXVlbWVudCDDoCBtZXN1cmUgcXVlIHRvbiBmYW1pbGllciB0cm91dmVyYSBkZXMgaXRlbXMgZW4gZXhwbG9yYXRpb24uXCIsXG4gICAgZ290b19hY2NvdW50OlxuICAgICAgXCJQb3VyIHRyYW5zZsOpcmVyIHRvbiBoaXN0b3JpcXVlIGQnZXhwbG9yYXRpb25zIHZlcnMgdW4gYXV0cmUgbmF2aWdhdGV1ciwgZXhwb3J0ZSB0ZXMgcGFyYW3DqHRyZXMgw6AgcGFydGlyIGRlIGxhIHBhZ2UgPGVtPm1vbiBjb21wdGU8L2VtPi5cIixcbiAgICBoaXN0b3J5OiBcIkhpc3RvcmlxdWVcIixcbiAgICBzYXZlZF9sb2NhbGx5OiBgUHJlbmRzIG5vdGUgcXVlIHRvbiBoaXN0b3JpcXVlIGQnZXhwbG9yYXRpb25zIGEgw6l0w6kgc2F1dmVnYXJkw6kgbG9jYWxlbWVudCBkYW5zIGxlcyBwYXJhbcOodHJlcyBkJzxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC5uYW1lfTwvc3Ryb25nPiBldCBuJ2EgcGFzIMOpdMOpIGVudm95w6kgYXV4IHNlcnZldXJzIGQnRWxkYXJ5YS5gLFxuICB9LFxuICBwcm9maWxlOiB7XG4gICAgZXhwb3J0X291dGZpdDogXCJFeHBvcnRlciBsYSB0ZW51ZVwiLFxuICAgIGRvd25sb2FkX291dGZpdDogXCJUw6lsw6ljaGFyZ2VyIGxlIFBOR1wiLFxuICB9LFxuICBlcnJvcjoge1xuICAgIGRvd25sb2FkQ2FudmFzOlxuICAgICAgXCJVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZSBsb3JzIGR1IHTDqWzDqWNoYXJnZW1lbnQgZGUgbCdpbWFnZS5cIixcbiAgfSxcbiAgbWFsbDoge1xuICAgIGFkZF90b193aXNobGlzdDoge1xuICAgICAgdGl0bGU6IFwiQWpvdXRlciDDoCBsYSBsaXN0ZSBkZSBzb3VoYWl0IGR1IG1hcmNow6lcIixcbiAgICAgIHRleHQ6IFwiQ29tYmllbiBkZSBtYWFuYXMgc291aGFpdGVzLXR1IG9mZnJpciBwb3VyIGFjcXXDqXJpciBjZXQgaXRlbT9cIixcbiAgICAgIG5vdGU6IFwiUHJlbmRzIG5vdGUgcXVlIGxlcyBpdGVtcyBham91dMOpcyDDoCBwYXJ0aXIgZGUgbGEgYm91dGlxdWUgbmUgc29udCBwYXMgbsOpY2Vzc2FpcmVtZW50IGRpc3BvbmlibGVzIGF1IG1hcmNow6kuXCIsXG4gICAgfSxcbiAgfSxcbn1cblxuT2JqZWN0LmZyZWV6ZShmcilcbiIsImltcG9ydCB7IGVuIH0gZnJvbSBcIi4vZW5cIlxuaW1wb3J0IHsgZnIgfSBmcm9tIFwiLi9mclwiXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9uIH0gZnJvbSBcIi4vdHJhbnNsYXRpb25cIlxuXG5mdW5jdGlvbiB0cmFuc2xhdGlvbigpOiBUcmFuc2xhdGlvbiB7XG4gIGlmIChsb2NhdGlvbi5ob3N0bmFtZS5lbmRzV2l0aChcIi5jb20uYnJcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIuZGVcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIuZXNcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIuaHVcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIuaXRcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIucGxcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIucnVcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIuY29tXCIpKSByZXR1cm4gZW5cbiAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lLmVuZHNXaXRoKFwiLmZyXCIpKSByZXR1cm4gZnJcbiAgZWxzZSByZXR1cm4gZW5cbn1cblxuZXhwb3J0IGNvbnN0IHRyYW5zbGF0ZSA9IHRyYW5zbGF0aW9uKClcbiIsImV4cG9ydCBlbnVtIERhdGFiYXNlcyB7XG4gIGVsZGFyeWFfZW5oYW5jZW1lbnRzID0gXCJlbGRhcnlhX2VuaGFuY2VtZW50c1wiLFxufVxuIiwiZXhwb3J0IGVudW0gRmllbGRzIHtcbiAgYmxvYiA9IFwiYmxvYlwiLFxuICBpZCA9IFwiaWRcIixcbiAgaXRlbXMgPSBcIml0ZW1zXCIsXG4gIG5hbWUgPSBcIm5hbWVcIixcbn1cbiIsImltcG9ydCB0eXBlIHsgRmF2b3VyaXRlT3V0Zml0IH0gZnJvbSBcIi4uL2FwcGVhcmFuY2UvaW50ZXJmYWNlcy9mYXZvdXJpdGVfb3V0Zml0XCJcbmltcG9ydCB7IERhdGFiYXNlcyB9IGZyb20gXCIuL2RhdGFiYXNlcy5lbnVtXCJcbmltcG9ydCB7IEZpZWxkcyB9IGZyb20gXCIuL2ZpZWxkcy5lbnVtXCJcbmltcG9ydCB7IFRhYmxlcyB9IGZyb20gXCIuL3RhYmxlcy5lbnVtXCJcblxuY2xhc3MgSW5kZXhlZERCIHtcbiAgcHJpdmF0ZSBkYj86IElEQkRhdGFiYXNlXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKERhdGFiYXNlcy5lbGRhcnlhX2VuaGFuY2VtZW50cywgMSlcbiAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpOiBJREJEYXRhYmFzZSA9PiAodGhpcy5kYiA9IHJlcXVlc3QucmVzdWx0KVxuICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24gKHRoaXM6IElEQk9wZW5EQlJlcXVlc3QpOiB2b2lkIHtcbiAgICAgIGNvbnN0IGRiOiBJREJEYXRhYmFzZSA9IHRoaXMucmVzdWx0XG5cbiAgICAgIGNvbnN0IG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzLCB7XG4gICAgICAgIGtleVBhdGg6IFwiaWRcIixcbiAgICAgICAgYXV0b0luY3JlbWVudDogdHJ1ZSxcbiAgICAgIH0pXG5cbiAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KEZpZWxkcy5ibG9iLCBcImJsb2JcIiwgeyB1bmlxdWU6IGZhbHNlIH0pXG4gICAgICBvYmplY3RTdG9yZS5jcmVhdGVJbmRleChGaWVsZHMuaXRlbXMsIFwiaXRlbXNcIiwgeyB1bmlxdWU6IGZhbHNlIH0pXG4gICAgICBvYmplY3RTdG9yZS5jcmVhdGVJbmRleChGaWVsZHMubmFtZSwgXCJuYW1lXCIsIHsgdW5pcXVlOiBmYWxzZSB9KVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyBhIG5ldyBgRmF2b3VyaXRlT3V0Zml0YCB3aXRoIHRoZSBga2V5YCBwcm9wZXJ0eSBzZXQuICovXG4gIGFzeW5jIGFkZEZhdm91cml0ZU91dGZpdChcbiAgICBmYXZvdXJpdGU6IEZhdm91cml0ZU91dGZpdFxuICApOiBQcm9taXNlPEZhdm91cml0ZU91dGZpdD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KTogdm9pZCA9PiB7XG4gICAgICBpZiAoIXRoaXMuZGIpIHJldHVybiB2b2lkIHJlamVjdCgpXG5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmRiXG4gICAgICAgIC50cmFuc2FjdGlvbihbVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzXSwgXCJyZWFkd3JpdGVcIilcbiAgICAgICAgLm9iamVjdFN0b3JlKFRhYmxlcy5mYXZvdXJpdGVfb3V0Zml0cylcbiAgICAgICAgLmFkZChmYXZvdXJpdGUpXG5cbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCk6IHZvaWQgPT5cbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgLi4uZmF2b3VyaXRlLFxuICAgICAgICAgIHVybDogZmF2b3VyaXRlLnVybCA/PyBVUkwuY3JlYXRlT2JqZWN0VVJMKGZhdm91cml0ZS5ibG9iKSxcbiAgICAgICAgICBpZDogTnVtYmVyKHJlcXVlc3QucmVzdWx0KSxcbiAgICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgY2xlYXJGYXZvdXJpdGVPdXRmaXRzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KTogdm9pZCA9PiB7XG4gICAgICBpZiAoIXRoaXMuZGIpIHJldHVybiB2b2lkIHJlamVjdCgpXG5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmRiXG4gICAgICAgIC50cmFuc2FjdGlvbihbVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzXSwgXCJyZWFkd3JpdGVcIilcbiAgICAgICAgLm9iamVjdFN0b3JlKFRhYmxlcy5mYXZvdXJpdGVfb3V0Zml0cylcbiAgICAgICAgLmNsZWFyKClcblxuICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKTogdm9pZCA9PiByZXNvbHZlKClcbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmF2b3VyaXRlT3V0Zml0KGZhdm91cml0ZTogRmF2b3VyaXRlT3V0Zml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICAgIGlmICghdGhpcy5kYikgcmV0dXJuIHZvaWQgcmVqZWN0KClcblxuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZGJcbiAgICAgICAgLnRyYW5zYWN0aW9uKFtUYWJsZXMuZmF2b3VyaXRlX291dGZpdHNdLCBcInJlYWR3cml0ZVwiKVxuICAgICAgICAub2JqZWN0U3RvcmUoVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzKVxuICAgICAgICAuZGVsZXRlKGZhdm91cml0ZS5pZCEpXG5cbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICByZXNvbHZlKClcbiAgICAgICAgaWYgKGZhdm91cml0ZS51cmwpIFVSTC5yZXZva2VPYmplY3RVUkwoZmF2b3VyaXRlLnVybClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgZ2V0RmF2b3VyaXRlT3V0Zml0KGlkOiBudW1iZXIpOiBQcm9taXNlPEZhdm91cml0ZU91dGZpdD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KTogdm9pZCA9PiB7XG4gICAgICBpZiAoIXRoaXMuZGIpIHJldHVybiB2b2lkIHJlamVjdCgpXG5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmRiXG4gICAgICAgIC50cmFuc2FjdGlvbihbVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzXSwgXCJyZWFkb25seVwiKVxuICAgICAgICAub2JqZWN0U3RvcmUoVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzKVxuICAgICAgICAuZ2V0KGlkKVxuXG4gICAgICBjb25zdCBmYXZvdXJpdGU6IEZhdm91cml0ZU91dGZpdCA9IHJlcXVlc3QucmVzdWx0XG5cbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCk6IHZvaWQgPT5cbiAgICAgICAgcmVzb2x2ZSh7IC4uLmZhdm91cml0ZSwgdXJsOiBVUkwuY3JlYXRlT2JqZWN0VVJMKGZhdm91cml0ZS5ibG9iKSB9KVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBnZXRGYXZvdXJpdGVPdXRmaXRzKCk6IFByb21pc2U8RmF2b3VyaXRlT3V0Zml0W10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKCF0aGlzLmRiKSByZXR1cm4gdm9pZCByZWplY3QoKVxuXG4gICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5kYlxuICAgICAgICAudHJhbnNhY3Rpb24oW1RhYmxlcy5mYXZvdXJpdGVfb3V0Zml0c10sIFwicmVhZG9ubHlcIilcbiAgICAgICAgLm9iamVjdFN0b3JlKFRhYmxlcy5mYXZvdXJpdGVfb3V0Zml0cylcbiAgICAgICAgLmdldEFsbCgpXG5cbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCk6IHZvaWQgPT5cbiAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICByZXF1ZXN0LnJlc3VsdC5tYXA8RmF2b3VyaXRlT3V0Zml0PigoZmF2b3VyaXRlOiBGYXZvdXJpdGVPdXRmaXQpID0+ICh7XG4gICAgICAgICAgICAuLi5mYXZvdXJpdGUsXG4gICAgICAgICAgICB1cmw6IFVSTC5jcmVhdGVPYmplY3RVUkwoZmF2b3VyaXRlLmJsb2IpLFxuICAgICAgICAgIH0pKVxuICAgICAgICApXG4gICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgSW5kZXhlZERCKClcbiIsImV4cG9ydCBlbnVtIFRhYmxlcyB7XG4gIGZhdm91cml0ZV9vdXRmaXRzID0gXCJmYXZvdXJpdGVfb3V0Zml0c1wiLFxufVxuIiwiZXhwb3J0IGVudW0gTG9jYWxTdG9yYWdlS2V5IHtcbiAgYXV0b0V4cGxvcmVMb2NhdGlvbnMgPSBcImF1dG9FeHBsb3JlTG9jYXRpb25zXCIsXG4gIGRlYnVnID0gXCJkZWJ1Z1wiLFxuICBleHBsb3JhdGlvbkhpc3RvcnkgPSBcImV4cGxvcmF0aW9uSGlzdG9yeVwiLFxuICBleHBsb3JhdGlvbnMgPSBcImV4cGxvcmF0aW9uc1wiLFxuICBtYXJrZXQgPSBcIm1hcmtldFwiLFxuICBtZXRhID0gXCJtZXRhXCIsXG4gIG1pbmlnYW1lcyA9IFwibWluaWdhbWVzXCIsXG4gIHB1cmNoYXNlcyA9IFwicHVyY2hhc2VzXCIsXG4gIHNhbGVzID0gXCJzYWxlc1wiLFxuICB2ZXJzaW9uID0gXCJ2ZXJzaW9uXCIsXG4gIHdpc2hsaXN0ID0gXCJ3aXNobGlzdFwiLFxufVxuIiwiaW1wb3J0IHsgYmFzZTY0U3RyaW5nVG9CbG9iLCBibG9iVG9CYXNlNjRTdHJpbmcgfSBmcm9tIFwiYmxvYi11dGlsXCJcbmltcG9ydCB0eXBlIHsgTWV0YSB9IGZyb20gXCIuLi9hcGkvbWV0YVwiXG5pbXBvcnQgdHlwZSB7IEZhdm91cml0ZU91dGZpdCB9IGZyb20gXCIuLi9hcHBlYXJhbmNlL2ludGVyZmFjZXMvZmF2b3VyaXRlX291dGZpdFwiXG5pbXBvcnQgaW5kZXhlZF9kYiBmcm9tIFwiLi4vaW5kZXhlZF9kYi9pbmRleGVkX2RiXCJcbmltcG9ydCB0eXBlIHsgTWFya2V0RW50cnkgfSBmcm9tIFwiLi4vbWFya2V0cGxhY2UvaW50ZXJmYWNlcy9tYXJrZXRfZW50cnlcIlxuaW1wb3J0IHR5cGUgeyBTZXR0aW5ncyB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9zZXR0aW5nc1wiXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlTG9jYXRpb24gfSBmcm9tIFwiLi9hdXRvX2V4cGxvcmVfbG9jYXRpb25cIlxuaW1wb3J0IHR5cGUgeyBFeHBsb3JhdGlvblJlc3VsdCB9IGZyb20gXCIuL2V4cGxvcmF0aW9uX3Jlc3VsdFwiXG5pbXBvcnQgdHlwZSB7IEV4cG9ydGFibGVGYXZvdXJpdGUgfSBmcm9tIFwiLi9leHBvcnRhYmxlX2Zhdm91cml0ZVwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VLZXkgfSBmcm9tIFwiLi9sb2NhbF9zdG9yYWdlLmVudW1cIlxuaW1wb3J0IHR5cGUgeyBTYWxlIH0gZnJvbSBcIi4vc2FsZVwiXG5pbXBvcnQgdHlwZSB7IFdpc2hlZEl0ZW0gfSBmcm9tIFwiLi93aXNoZWRfaXRlbVwiXG5cbmV4cG9ydCBjbGFzcyBMb2NhbFN0b3JhZ2Uge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBsb2NhbFN0b3JhZ2UgPSBsb2NhbFN0b3JhZ2VcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICBzdGF0aWMgZ2V0IGF1dG9FeHBsb3JlTG9jYXRpb25zKCk6IEF1dG9FeHBsb3JlTG9jYXRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxBdXRvRXhwbG9yZUxvY2F0aW9uW10+KFxuICAgICAgTG9jYWxTdG9yYWdlS2V5LmF1dG9FeHBsb3JlTG9jYXRpb25zLFxuICAgICAgW11cbiAgICApXG4gIH1cblxuICBzdGF0aWMgc2V0IGF1dG9FeHBsb3JlTG9jYXRpb25zKGxvY2F0aW9uczogQXV0b0V4cGxvcmVMb2NhdGlvbltdKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS5hdXRvRXhwbG9yZUxvY2F0aW9ucywgbG9jYXRpb25zKVxuICB9XG5cbiAgc3RhdGljIGdldCBkZWJ1ZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPGJvb2xlYW4+KExvY2FsU3RvcmFnZUtleS5kZWJ1ZywgZmFsc2UpXG4gIH1cblxuICBzdGF0aWMgc2V0IGRlYnVnKGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5LmRlYnVnLCBlbmFibGVkKVxuICB9XG5cbiAgc3RhdGljIGdldCBleHBsb3JhdGlvbkhpc3RvcnkoKTogRXhwbG9yYXRpb25SZXN1bHRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxFeHBsb3JhdGlvblJlc3VsdFtdPihcbiAgICAgIExvY2FsU3RvcmFnZUtleS5leHBsb3JhdGlvbkhpc3RvcnksXG4gICAgICBbXVxuICAgIClcbiAgfVxuXG4gIHN0YXRpYyBzZXQgZXhwbG9yYXRpb25IaXN0b3J5KGV4cGxvcmF0aW9uSGlzdG9yeTogRXhwbG9yYXRpb25SZXN1bHRbXSkge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkuZXhwbG9yYXRpb25IaXN0b3J5LCBleHBsb3JhdGlvbkhpc3RvcnkpXG4gIH1cblxuICBzdGF0aWMgZ2V0IGV4cGxvcmF0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPGJvb2xlYW4+KExvY2FsU3RvcmFnZUtleS5leHBsb3JhdGlvbnMsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIHNldCBleHBsb3JhdGlvbnMoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkuZXhwbG9yYXRpb25zLCBlbmFibGVkKVxuICB9XG5cbiAgc3RhdGljIGdldCBtYXJrZXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxib29sZWFuPihMb2NhbFN0b3JhZ2VLZXkubWFya2V0LCBmYWxzZSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWFya2V0KGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5Lm1hcmtldCwgZW5hYmxlZClcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWV0YSgpOiBNZXRhIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxNZXRhIHwgbnVsbD4oTG9jYWxTdG9yYWdlS2V5Lm1ldGEsIG51bGwpXG4gIH1cblxuICBzdGF0aWMgc2V0IG1ldGEobWV0YTogTWV0YSB8IG51bGwpIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5Lm1ldGEsIG1ldGEpXG4gIH1cblxuICBzdGF0aWMgZ2V0IG1pbmlnYW1lcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPGJvb2xlYW4+KExvY2FsU3RvcmFnZUtleS5taW5pZ2FtZXMsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIHNldCBtaW5pZ2FtZXMoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkubWluaWdhbWVzLCBlbmFibGVkKVxuICB9XG5cbiAgc3RhdGljIGdldCBwdXJjaGFzZXMoKTogTWFya2V0RW50cnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxNYXJrZXRFbnRyeVtdPihMb2NhbFN0b3JhZ2VLZXkucHVyY2hhc2VzLCBbXSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgcHVyY2hhc2VzKGVudHJ5OiBNYXJrZXRFbnRyeVtdKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS5wdXJjaGFzZXMsIGVudHJ5KVxuICB9XG5cbiAgc3RhdGljIGdldCBzYWxlcygpOiBTYWxlW10ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08U2FsZVtdPihMb2NhbFN0b3JhZ2VLZXkuc2FsZXMsIFtdKVxuICB9XG5cbiAgc3RhdGljIHNldCBzYWxlcyhzYWxlOiBTYWxlW10pIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5LnNhbGVzLCBzYWxlKVxuICB9XG5cbiAgc3RhdGljIGdldCB2ZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxzdHJpbmc+KExvY2FsU3RvcmFnZUtleS52ZXJzaW9uLCBcIlwiKVxuICB9XG5cbiAgc3RhdGljIHNldCB2ZXJzaW9uKHZlcnNpb246IHN0cmluZykge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkudmVyc2lvbiwgdmVyc2lvbilcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2lzaGxpc3QoKTogV2lzaGVkSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPFdpc2hlZEl0ZW1bXT4oTG9jYWxTdG9yYWdlS2V5Lndpc2hsaXN0LCBbXSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgd2lzaGxpc3QobG9jYXRpb25zOiBXaXNoZWRJdGVtW10pIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5Lndpc2hsaXN0LCBsb2NhdGlvbnMpXG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0U2V0dGluZ3MoKTogUHJvbWlzZTxTZXR0aW5ncz4ge1xuICAgIHJldHVybiB7XG4gICAgICBhdXRvRXhwbG9yZUxvY2F0aW9uczogdGhpcy5hdXRvRXhwbG9yZUxvY2F0aW9ucyxcbiAgICAgIGRlYnVnOiB0aGlzLmRlYnVnLFxuICAgICAgZXhwbG9yYXRpb25IaXN0b3J5OiB0aGlzLmV4cGxvcmF0aW9uSGlzdG9yeSxcbiAgICAgIGV4cGxvcmF0aW9uczogdGhpcy5leHBsb3JhdGlvbnMsXG4gICAgICBmYXZvdXJpdGVzOiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgKFxuICAgICAgICAgIGF3YWl0IGluZGV4ZWRfZGIuZ2V0RmF2b3VyaXRlT3V0Zml0cygpXG4gICAgICAgICkubWFwPFByb21pc2U8RXhwb3J0YWJsZUZhdm91cml0ZT4+KGFzeW5jIGZhdm91cml0ZSA9PiAoe1xuICAgICAgICAgIG5hbWU6IGZhdm91cml0ZS5uYW1lLFxuICAgICAgICAgIGl0ZW1zOiBmYXZvdXJpdGUuaXRlbXMsXG4gICAgICAgICAgYmFzZTY0OiBhd2FpdCBibG9iVG9CYXNlNjRTdHJpbmcoZmF2b3VyaXRlLmJsb2IpLFxuICAgICAgICB9KSlcbiAgICAgICksXG4gICAgICBtYXJrZXQ6IHRoaXMubWFya2V0LFxuICAgICAgbWluaWdhbWVzOiB0aGlzLm1pbmlnYW1lcyxcbiAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgIHdpc2hsaXN0OiB0aGlzLndpc2hsaXN0LFxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBzZXRTZXR0aW5ncyhzZXR0aW5nczogU2V0dGluZ3MpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmF1dG9FeHBsb3JlTG9jYXRpb25zID0gc2V0dGluZ3MuYXV0b0V4cGxvcmVMb2NhdGlvbnNcbiAgICB0aGlzLmRlYnVnID0gc2V0dGluZ3MuZGVidWdcbiAgICB0aGlzLmV4cGxvcmF0aW9uSGlzdG9yeSA9IHNldHRpbmdzLmV4cGxvcmF0aW9uSGlzdG9yeVxuICAgIHRoaXMuZXhwbG9yYXRpb25zID0gc2V0dGluZ3MuZXhwbG9yYXRpb25zXG4gICAgdGhpcy5tYXJrZXQgPSBzZXR0aW5ncy5tYXJrZXRcbiAgICB0aGlzLm1pbmlnYW1lcyA9IHNldHRpbmdzLm1pbmlnYW1lc1xuICAgIHRoaXMudmVyc2lvbiA9IHNldHRpbmdzLnZlcnNpb25cbiAgICB0aGlzLndpc2hsaXN0ID0gc2V0dGluZ3Mud2lzaGxpc3RcblxuICAgIGF3YWl0IGluZGV4ZWRfZGIuY2xlYXJGYXZvdXJpdGVPdXRmaXRzKClcbiAgICBmb3IgKGNvbnN0IGZhdm91cml0ZSBvZiBzZXR0aW5ncy5mYXZvdXJpdGVzLm1hcDxGYXZvdXJpdGVPdXRmaXQ+KFxuICAgICAgZmF2b3VyaXRlID0+ICh7XG4gICAgICAgIGJsb2I6IGJhc2U2NFN0cmluZ1RvQmxvYihmYXZvdXJpdGUuYmFzZTY0KSxcbiAgICAgICAgaXRlbXM6IGZhdm91cml0ZS5pdGVtcyxcbiAgICAgICAgbmFtZTogZmF2b3VyaXRlLm5hbWUsXG4gICAgICB9KVxuICAgICkpIHtcbiAgICAgIHZvaWQgaW5kZXhlZF9kYi5hZGRGYXZvdXJpdGVPdXRmaXQoZmF2b3VyaXRlKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldEl0ZW08VD4oa2V5OiBMb2NhbFN0b3JhZ2VLZXksIGZhbGxiYWNrOiBUKTogVCB7XG4gICAgcmV0dXJuIChKU09OLnBhcnNlKFxuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpID8/IEpTT04uc3RyaW5naWZ5KGZhbGxiYWNrKVxuICAgICkgPz8gZmFsbGJhY2spIGFzIFRcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHNldEl0ZW08VD4oa2V5OiBMb2NhbFN0b3JhZ2VLZXksIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSlcbiAgfVxufVxuIiwiZXhwb3J0IGVudW0gQm9keUxvY2F0aW9uIHtcbiAgQWxsID0gXCJcIixcbiAgVW5kZXJ3ZWFyID0gMSxcbiAgU2tpbnMgPSAyLFxuICBUYXR0b29zID0gMjAsXG4gIE1vdXRocyA9IDIxLFxuICBFeWVzID0gMyxcbiAgSGFpciA9IDQsXG4gIFNvY2tzID0gNSxcbiAgU2hvZXMgPSA2LFxuICBQYW50cyA9IDcsXG4gIEhhbmRBY2Nlc3NvcmllcyA9IDgsXG4gIFRvcHMgPSA5LFxuICBDb2F0cyA9IDEwLFxuICBHbG92ZXMgPSAxMSxcbiAgTmVja2xhY2VzID0gMTIsXG4gIERyZXNzZXMgPSAxMyxcbiAgSGF0cyA9IDE0LFxuICBGYWNlQWNjZXNzb3JpZXMgPSAxNSxcbiAgRnVuZHMgPSAxNixcbiAgQmVsdHMgPSAxOCxcbiAgQXRtb3NwaGVyZXMgPSAxOSxcbn1cbiIsImltcG9ydCB7IFR5cGUgfSBmcm9tIFwiLi90eXBlLmVudW1cIlxuXG5leHBvcnQgZW51bSBDYXRlZ29yeVN0cmluZyB7XG4gIGFsbCA9IFwiXCIsXG4gIGZvb2QgPSBcImZvb2RcIixcbiAgYWxjaGVteSA9IFwiYWxjaGVteVwiLFxuICB1dGlsaXR5ID0gXCJ1dGlsaXR5XCIsXG4gIHRhbWUgPSBcInRhbWVcIixcbn1cblxuZXhwb3J0IGVudW0gQ2F0ZWdvcnlOdW1iZXIge1xuICBhbGwgPSBDYXRlZ29yeVN0cmluZy5hbGwsXG4gIGZvb2QgPSAxLFxuICBhbGNoZW15ID0gVHlwZS5Db25zdW1hYmxlLFxuICB1dGlsaXR5ID0gMyxcbiAgdGFtZSA9IDQsXG59XG4iLCJleHBvcnQgZW51bSBHdWFyZCB7XG4gIGFueSA9IFwiXCIsXG4gIGxpZ2h0ID0gMSxcbiAgb2JzaWRpYW4sXG4gIGFic3ludGhlLFxuICBzaGFkb3csXG59XG4iLCJleHBvcnQgZW51bSBSYXJpdHkge1xuICBhbGwgPSBcIlwiLFxuICBjb21tb24gPSBcImNvbW1vblwiLFxuICByYXJlID0gXCJyYXJlXCIsXG4gIGVwaWMgPSBcImVwaWNcIixcbiAgbGVnZW5kYXJ5ID0gXCJsZWdlbmRhcnlcIixcbiAgZXZlbnQgPSBcImV2ZW50XCIsXG59XG4iLCJleHBvcnQgZW51bSBUeXBlIHtcbiAgQWxsID0gXCJcIixcbiAgQmFnID0gXCJCYWdcIixcbiAgQ29uc3VtYWJsZSA9IFwiQ29uc3VtYWJsZVwiLFxuICBFZ2dJdGVtID0gXCJFZ2dJdGVtXCIsXG4gIFBsYXllcldlYXJhYmxlSXRlbSA9IFwiUGxheWVyV2VhcmFibGVJdGVtXCIsXG4gIFF1ZXN0SXRlbSA9IFwiUXVlc3RJdGVtXCIsXG59XG4iLCJpbXBvcnQgeyB0cmltSWNvbiB9IGZyb20gXCIuLi9lbGRhcnlhX3V0aWxcIlxuaW1wb3J0IHsgUmFyaXR5IH0gZnJvbSBcIi4vZW51bXMvcmFyaXR5LmVudW1cIlxuaW1wb3J0IHR5cGUgeyBCdXlOb3dQcmljZSB9IGZyb20gXCIuL2ludGVyZmFjZXMvYnV5X25vd19wcmljZVwiXG5pbXBvcnQgdHlwZSB7IEN1cnJlbnRQcmljZSB9IGZyb20gXCIuL2ludGVyZmFjZXMvY3VycmVudF9wcmljZVwiXG5pbXBvcnQgdHlwZSB7IE1hcmtldEVudHJ5IH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9tYXJrZXRfZW50cnlcIlxuaW1wb3J0IHR5cGUgeyBNYXJrZXRFbnRyeURhdGFTZXQgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL21hcmtldF9lbnRyeV9kYXRhX3NldFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRGV0YWlscyhsaTogSFRNTExJRWxlbWVudCk6IE1hcmtldEVudHJ5IHwgbnVsbCB7XG4gIGNvbnN0IG5hbWUgPSBsaS5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcIi5hYnN0cmFjdC1uYW1lXCIpPy5pbm5lclRleHRcbiAgY29uc3QgYWJzdHJhY3RUeXBlID1cbiAgICBsaS5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcIi5hYnN0cmFjdC10eXBlXCIpPy5pbm5lclRleHRcbiAgY29uc3Qgc3JjID0gbGkucXVlcnlTZWxlY3RvcjxIVE1MSW1hZ2VFbGVtZW50PihcIi5hYnN0cmFjdC1pY29uIGltZ1wiKT8uc3JjXG5cbiAgY29uc3QgcmFyaXR5OiBSYXJpdHkgPVxuICAgIFJhcml0eVtcbiAgICAgIChsaVxuICAgICAgICAucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICBcIi5yYXJpdHktbWFya2VyLWNvbW1vbiwgLnJhcml0eS1tYXJrZXItcmFyZSwgLnJhcml0eS1tYXJrZXItZXBpYywgLnJhcml0eS1tYXJrZXItbGVnZW5kYXJ5LCAucmFyaXR5LW1hcmtlci1ldmVudFwiXG4gICAgICAgIClcbiAgICAgICAgPy5jbGFzc05hbWUuc3BsaXQoXCJyYXJpdHktbWFya2VyLVwiKVsxXSA/PyBcIlwiKSBhcyBrZXlvZiB0eXBlb2YgUmFyaXR5XG4gICAgXVxuXG4gIGNvbnN0IGN1cnJlbnRQcmljZSA9IGxpLnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXG4gICAgXCIucHJpY2UtaXRlbVtkYXRhLWJpZHNdXCJcbiAgKT8uZGF0YXNldCBhcyB1bmtub3duIGFzIEN1cnJlbnRQcmljZVxuXG4gIGNvbnN0IGJ1eU5vd1ByaWNlID0gbGkucXVlcnlTZWxlY3RvcjxIVE1MSW1hZ2VFbGVtZW50PihcbiAgICBcIi5wcmljZS1pdGVtOm5vdChbZGF0YS1iaWRzXSlcIlxuICApPy5kYXRhc2V0IGFzIHVua25vd24gYXMgQnV5Tm93UHJpY2VcblxuICBpZiAoIXNyYyB8fCAhbmFtZSB8fCAhYWJzdHJhY3RUeXBlKSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiB7XG4gICAgLi4uKGxpLmRhdGFzZXQgYXMgdW5rbm93biBhcyBNYXJrZXRFbnRyeURhdGFTZXQpLFxuICAgIGljb246IHRyaW1JY29uKHNyYyksXG4gICAgcmFyaXR5LFxuICAgIG5hbWUsXG4gICAgYWJzdHJhY3RUeXBlLFxuICAgIGJ1eU5vd1ByaWNlLFxuICAgIGN1cnJlbnRQcmljZSxcbiAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICB9XG59XG4iLCJleHBvcnQgY2xhc3MgTWF0aFV0aWwge1xuICBzdGF0aWMgcmVhZG9ubHkgcGhpID0gKDEgKyBNYXRoLnNxcnQoNSkpIC8gMlxuXG4gIHN0YXRpYyByYW5kb21CZXR3ZWVuKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pblxuICB9XG59XG4iLCJpbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuXG5leHBvcnQgZnVuY3Rpb24gbWlncmF0ZSgpOiB2b2lkIHtcbiAgc3dpdGNoIChMb2NhbFN0b3JhZ2UudmVyc2lvbikge1xuICAgIGNhc2UgR00uaW5mby5zY3JpcHQudmVyc2lvbjpcbiAgICAgIHJldHVyblxuXG4gICAgY2FzZSBcIlwiOlxuICAgICAgaW5zdGFsbGVkKClcbiAgICAgIGJyZWFrXG5cbiAgICBkZWZhdWx0OlxuICAgICAgc3dpdGNoIChHTS5pbmZvLnNjcmlwdC52ZXJzaW9uKSB7XG4gICAgICAgIGNhc2UgXCIxLjIuMFwiOlxuICAgICAgICAgIHYxXzJfMCgpXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIFwiMS4yLjlcIjpcbiAgICAgICAgICB2MV8yXzkoKVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBcIjEuMi4xMFwiOlxuICAgICAgICAgIHYxXzJfMTAoKVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpbnN0YWxsZWQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gIH1cblxuICBMb2NhbFN0b3JhZ2UudmVyc2lvbiA9IEdNLmluZm8uc2NyaXB0LnZlcnNpb25cbn1cblxuZnVuY3Rpb24gaW5zdGFsbGVkKCk6IHZvaWQge1xuICAkLmZsYXZyTm90aWYoYCR7bmFtZSgpfSAke3ZlcnNpb24oKX0gaW5zdGFsbGVkIWApXG59XG5cbmZ1bmN0aW9uIG5hbWUoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGA8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQubmFtZX08L3N0cm9uZz5gXG59XG5cbmZ1bmN0aW9uIHZlcnNpb24oKTogc3RyaW5nIHtcbiAgcmV0dXJuIGB2PHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0LnZlcnNpb259PC9zdHJvbmc+YFxufVxuXG5mdW5jdGlvbiB2MV8yXzAoKTogdm9pZCB7XG4gIExvY2FsU3RvcmFnZS5zYWxlcyA9IFtdXG4gICQuZmxhdnJOb3RpZihgVXBkYXRlZCB0byAke3ZlcnNpb24oKX0uIFlvdXIgc2FsZXMgaGlzdG9yeSB3YXMgZXJhc2VkLmApXG59XG5cbmZ1bmN0aW9uIHYxXzJfOSgpOiB2b2lkIHtcbiAgJC5mbGF2ck5vdGlmKFxuICAgIGBVcGRhdGVkIHRvICR7dmVyc2lvbigpfS4gVGhlIHdpc2hsaXN0IGhhcyBiZWVuIGltcHJvdmVkIHRvIHNvcnQgYnkgY2F0ZWdvcnkvdHlwZS9uYW1lLCBidXQgeW91ciB3aXNoZWQgaXRlbXMgZG8gbm90IGhhdmUgYSB0eXBlLiBZb3UgY2FuIGFkZCB0eXBlcyBieSByZS1hZGRpbmcgdGhlIGl0ZW1zIHZpYSB0aGUgbWFya2V0LmBcbiAgKVxufVxuXG5mdW5jdGlvbiB2MV8yXzEwKCk6IHZvaWQge1xuICAkLmZsYXZyTm90aWYoXG4gICAgYFVwZGF0ZWQgdG8gJHt2ZXJzaW9uKCl9LiBUaGUgd2lzaGxpc3QgaGFzIGJlZW4gaW1wcm92ZWQgdG8gc29ydCBieSBjYXRlZ29yeS90eXBlL3Jhcml0eS9uYW1lLCBidXQgeW91ciB3aXNoZWQgaXRlbXMgZG8gbm90IGhhdmUgYSByYXJpdHkuIFlvdSBjYW4gYWRkIHJhcml0aWVzIGJ5IHJlLWFkZGluZyB0aGUgaXRlbXMgdmlhIHRoZSBtYXJrZXQuYFxuICApXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB0eXBlIHsgR2V0UHJpemVzRGF0YSB9IGZyb20gXCIuLi9hcGkvZ2V0X3ByaXplc19kYXRhXCJcbmltcG9ydCB0eXBlIHsgUGFja2V0IH0gZnJvbSBcIi4uL2FwaS9wYWNrZXRcIlxuaW1wb3J0IHR5cGUgeyBTdGFydEdhbWVEYXRhIH0gZnJvbSBcIi4uL2FwaS9zdGFydF9nYW1lX2RhdGFcIlxuaW1wb3J0IFwiLi4vZWxkYXJ5YS9qcXVlcnlcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IGZsYXBweSB9IGZyb20gXCIuL2ZsYXBweVwiXG5pbXBvcnQgeyBoYXRjaGxpbmdzIH0gZnJvbSBcIi4vaGF0Y2hsaW5nc1wiXG5pbXBvcnQgdHlwZSB7IE1pbmlnYW1lIH0gZnJvbSBcIi4vbWluaWdhbWVcIlxuaW1wb3J0IHsgcGVnZ2xlIH0gZnJvbSBcIi4vcGVnZ2xlXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBsYXlQZWdnbGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBwbGF5KHBlZ2dsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBsYXlGbGFwcHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBwbGF5KGZsYXBweSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBsYXlIYXRjaGxpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gcGxheShoYXRjaGxpbmdzKVxufVxuXG5hc3luYyBmdW5jdGlvbiBwbGF5KG1pbmlnYW1lOiBNaW5pZ2FtZSk6IFByb21pc2U8dm9pZD4ge1xuICAvLyBEaXNhYmxlIGJ1dHRvbnNcbiAgYXdhaXQgbmV3IFByb21pc2U8Ym9vbGVhbj4ocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBidXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MQnV0dG9uRWxlbWVudD4oXG4gICAgICAgIFwiLm1pbmlnYW1lcy1ydWxlcyAuZmxhdnItYnV0dG9uXCJcbiAgICAgIClcblxuICAgICAgaWYgKGJ1dHRvbnMubGVuZ3RoKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpXG5cbiAgICAgICAgZm9yIChjb25zdCBidXR0b24gb2YgYnV0dG9ucykge1xuICAgICAgICAgIGJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwiZGlzYWJsZWRcIilcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgIH1cbiAgICB9LCAyNTApXG4gIH0pXG5cbiAgY29uc3QganNvbiA9IGF3YWl0IGV4ZWN1dGUobWluaWdhbWUpXG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2ljb25fbWVzc2FnZS5odG1sXCIpXG4gICQuZmxhdnJOb3RpZihcbiAgICB0ZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgLi4ubWluaWdhbWUsXG4gICAgICBtZXNzYWdlOiB0cmFuc2xhdGUubWluaWdhbWVzLnBsYXlpbmcobWluaWdhbWUubmFtZSksXG4gICAgfSlcbiAgKVxuXG4gIGNvbnN0IGdhbWVUb2tlbiA9IGpzb24uZGF0YVxuICBjb25zdCBzY29yZSA9IHJhbmRvbUludChtaW5pZ2FtZS5zY29yZU1pbiwgbWluaWdhbWUuc2NvcmVNYXgpXG4gIGNvbnN0IGVuY190b2tlbiA9IHhvckVuY29kZShnYW1lVG9rZW4sIHNjb3JlLnRvU3RyaW5nKCkpXG4gIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT5cbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHJhbmRvbUludChtaW5pZ2FtZS5kZWxheU1pbiwgbWluaWdhbWUuZGVsYXlNYXgpKVxuICApXG5cbiAgYXdhaXQgZ2V0UHJpemVzKG1pbmlnYW1lLCBnYW1lVG9rZW4sIHNjb3JlKVxuICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgcmFuZG9tSW50KDEwMDAsIDMwMDApKSlcblxuICBhd2FpdCBzZW5kKGVuY190b2tlbiwgc2NvcmUsIG1pbmlnYW1lLm5hbWUudG9Mb3dlckNhc2UoKSlcbiAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHJhbmRvbUludCgxMDAwLCAzMDAwKSkpXG59XG5cbmZ1bmN0aW9uIHJhbmRvbUludChtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpICsgbWluKVxufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlKG1pbmlnYW1lOiBNaW5pZ2FtZSk6IFByb21pc2U8UGFja2V0PFN0YXJ0R2FtZURhdGE+PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxQYWNrZXQ8U3RhcnRHYW1lRGF0YT4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBpZiAodHlwZW9mIFJlY2FwdGNoYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgUmVjYXB0Y2hhLmV4ZWN1dGUoXG4gICAgICAgIGBtaW5pZ2FtZVN0YXJ0JHttaW5pZ2FtZS5uYW1lfWAsXG4gICAgICAgICh0b2tlbik6IHZvaWQgPT5cbiAgICAgICAgICB2b2lkIHN0YXJ0R2FtZShtaW5pZ2FtZSwgdG9rZW4pLnRoZW4ocmVzb2x2ZSkuY2F0Y2gocmVqZWN0KVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB2b2lkIHN0YXJ0R2FtZShtaW5pZ2FtZSkudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpXG4gICAgfVxuICB9KVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdGFydEdhbWUoXG4gIG1pbmlnYW1lOiBNaW5pZ2FtZSxcbiAgcmVjYXB0Y2hhVG9rZW4/OiBzdHJpbmdcbik6IFByb21pc2U8UGFja2V0PFN0YXJ0R2FtZURhdGE+PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxQYWNrZXQ8U3RhcnRHYW1lRGF0YT4+KFxuICAgIChyZXNvbHZlLCByZWplY3QpID0+XG4gICAgICB2b2lkICQuYWpheCh7XG4gICAgICAgIHVybDogXCIvbWluaWdhbWVzL2FqYXhfc3RhcnRHYW1lXCIsXG4gICAgICAgIHR5cGU6IFwicG9zdFwiLFxuICAgICAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgICAgIGRhdGE6IHJlY2FwdGNoYVRva2VuXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGdhbWU6IG1pbmlnYW1lLm5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgcmVjYXB0Y2hhVG9rZW46IHJlY2FwdGNoYVRva2VuLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBnYW1lOiBtaW5pZ2FtZS5uYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICBzdWNjZXNzOiAoanNvbjogUGFja2V0PFN0YXJ0R2FtZURhdGE+KTogdm9pZCA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShqc29uKVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHJlamVjdCgpXG4gICAgICAgIH0sXG4gICAgICB9KVxuICApXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFByaXplcyhcbiAgbWluaWdhbWU6IE1pbmlnYW1lLFxuICBnYW1lVG9rZW46IHN0cmluZyxcbiAgc2NvcmU6IG51bWJlclxuKTogUHJvbWlzZTxQYWNrZXQ8R2V0UHJpemVzRGF0YT4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFBhY2tldDxHZXRQcml6ZXNEYXRhPj4oXG4gICAgKHJlc29sdmUpOiB2b2lkID0+XG4gICAgICB2b2lkICQucG9zdChcbiAgICAgICAgXCIvbWluaWdhbWVzL2FqYXhfZ2V0UHJpemVzXCIsXG4gICAgICAgIHsgZ2FtZTogbWluaWdhbWUubmFtZS50b0xvd2VyQ2FzZSgpLCBzY29yZTogc2NvcmUgfSxcbiAgICAgICAgKGpzb246IFBhY2tldDxHZXRQcml6ZXNEYXRhPik6IHZvaWQgPT4ge1xuICAgICAgICAgIHJlc29sdmUoanNvbilcblxuICAgICAgICAgIGlmIChqc29uLnJlc3VsdCA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9mbGF2cl9ub3RpZi9pY29uX21lc3NhZ2UuaHRtbFwiKVxuXG4gICAgICAgICAgICAkLmZsYXZyTm90aWYoXG4gICAgICAgICAgICAgIHRlbXBsYXRlLnJlbmRlcih7XG4gICAgICAgICAgICAgICAgLi4ubWluaWdhbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdHJhbnNsYXRlLm1pbmlnYW1lcy5wbGF5ZWRfZm9yKFxuICAgICAgICAgICAgICAgICAgbWluaWdhbWUubmFtZSxcbiAgICAgICAgICAgICAgICAgIGpzb24uZGF0YS5tYWFuYVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSBlbHNlICQuZmxhdnJOb3RpZihqc29uLmRhdGEpXG4gICAgICAgIH0sXG4gICAgICAgIFwianNvblwiXG4gICAgICApLmZhaWwoKCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKTogdm9pZCA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShnZXRQcml6ZXMobWluaWdhbWUsIGdhbWVUb2tlbiwgc2NvcmUpKVxuICAgICAgICB9LCByYW5kb21JbnQoMTAwMCwgMzAwMCkpXG4gICAgICApXG4gIClcbn1cblxuLyoqXG4gKiBTw6ljdXJpc2F0aW9uIGRlIGwnZW52b2kgZHUgc2NvcmVcbiAqIEJhc8OpIHN1ciBsJ2VuY29kYWdlIFhPUiA6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWE9SX2NpcGhlclxuICogRWZmZWN0dWUgdW4gWE9SIGJpdCDDoCBiaXQgZW50cmUgdW5lIGNoYWluZSBldCB1bmUgY2zDqVxuICovXG5mdW5jdGlvbiB4b3JFbmNvZGUoc3RyOiBzdHJpbmcsIGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gQXNzdXJlIHF1ZSBsZXMgZGV1eCBwYXJhbcOodHJlcyBzb2llbnQgZGVzIGNoYWluZXMgZGUgY2FyYWN0w6hyZVxuICBzdHIgPSBzdHIudG9TdHJpbmcoKVxuICBrZXkgPSBrZXkudG9TdHJpbmcoKVxuXG4gIC8qKiBFbmNvZGFnZSBYT1IgKi9cbiAgbGV0IHhvciA9IFwiXCJcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2ZcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBsZXQgdG1wID0gc3RyW2ldXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBrZXkubGVuZ3RoOyArK2opIHtcbiAgICAgIHRtcCA9IFN0cmluZy5mcm9tQ2hhckNvZGUodG1wIS5jaGFyQ29kZUF0KDApIF4ga2V5LmNoYXJDb2RlQXQoaikpXG4gICAgfVxuICAgIHhvciArPSB0bXBcbiAgfVxuXG4gIC8vIFJlbnZvaWUgbGUgcsOpc3VsdGF0IGVuIGVuY29kYW50IGxlcyBjYXJhY3TDqHJlcyBzcMOpY2lhdXggcG91dmFudCBwb3NlciBwcm9ibMOobWUgKFxcbiBwYXIgZXhlbXBsZSlcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh4b3IpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbmQoXG4gIGVuY190b2tlbjogc3RyaW5nLFxuICBzY29yZTogbnVtYmVyLFxuICBnYW1lOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgaWYgKHR5cGVvZiBSZWNhcHRjaGEgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIFJlY2FwdGNoYS5leGVjdXRlKFxuICAgICAgICBcIm1pbmlnYW1lU2F2ZVwiICsgZ2FtZSxcbiAgICAgICAgKHJlY2FwdGNoYVRva2VuKTogdm9pZCA9PlxuICAgICAgICAgIHZvaWQgc2F2ZVNjb3JlKGVuY190b2tlbiwgc2NvcmUsIGdhbWUsIHJlY2FwdGNoYVRva2VuKS50aGVuKHJlc29sdmUpXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHZvaWQgc2F2ZVNjb3JlKGVuY190b2tlbiwgc2NvcmUsIGdhbWUpLnRoZW4ocmVzb2x2ZSlcbiAgICB9XG4gIH0pXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVTY29yZShcbiAgZW5jX3Rva2VuOiBzdHJpbmcsXG4gIHNjb3JlOiBudW1iZXIsXG4gIGdhbWU6IHN0cmluZyxcbiAgcmVjYXB0Y2hhVG9rZW4/OiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgdG9rZW4gPSBkZWNvZGVVUklDb21wb25lbnQoZW5jX3Rva2VuKVxuXG4gICAgdm9pZCAkLmFqYXgoe1xuICAgICAgdHlwZTogXCJwb3N0XCIsXG4gICAgICB1cmw6IFwiL21pbmlnYW1lcy9hamF4X3NhdmVTY29yZVwiLFxuICAgICAgZGF0YTogcmVjYXB0Y2hhVG9rZW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgICAgICBzY29yZTogc2NvcmUsXG4gICAgICAgICAgICBnYW1lOiBnYW1lLFxuICAgICAgICAgICAgcmVjYXB0Y2hhVG9rZW46IHJlY2FwdGNoYVRva2VuLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgICAgICBzY29yZTogc2NvcmUsXG4gICAgICAgICAgICBnYW1lOiBnYW1lLFxuICAgICAgICAgIH0sXG4gICAgICBzdWNjZXNzOiAoKTogdm9pZCA9PiB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpOiB2b2lkID0+IHtcbiAgICAgICAgICByZXNvbHZlKHNhdmVTY29yZShlbmNfdG9rZW4sIHNjb3JlLCBnYW1lKSlcbiAgICAgICAgfSwgcmFuZG9tSW50KDEwMDAsIDMwMDApKSxcbiAgICB9KVxuICB9KVxufVxuIiwiaW1wb3J0IHR5cGUgeyBNaW5pZ2FtZSB9IGZyb20gXCIuL21pbmlnYW1lXCJcblxuZXhwb3J0IGNvbnN0IGZsYXBweTogTWluaWdhbWUgPSB7XG4gIG5hbWU6IFwiRmxhcHB5XCIsXG4gIHNjb3JlTWluOiAxODAsXG4gIHNjb3JlTWF4OiAyMDAsXG4gIGRlbGF5TWluOiA2MF8wMDAsXG4gIGRlbGF5TWF4OiA3MF8wMDAsXG4gIGJ1dHRvblNlbGVjdG9yOiAnLm1pbmlnYW1lLXN0YXJ0IFtocmVmPVwiL21pbmlnYW1lcy9idWJibHRlbXBsZVwiXSAubmwtYnV0dG9uJyxcbiAgaWNvbjogXCIvc3RhdGljL2ltZy9uZXctbGF5b3V0L21pbmlnYW1lcy9pY29uX2J1YmJsZXRlbXBsZS5wbmdcIixcbn1cbiIsImltcG9ydCB0eXBlIHsgTWluaWdhbWUgfSBmcm9tIFwiLi9taW5pZ2FtZVwiXG5cbmV4cG9ydCBjb25zdCBoYXRjaGxpbmdzOiBNaW5pZ2FtZSA9IHtcbiAgbmFtZTogXCJIYXRjaGxpbmdzXCIsXG4gIHNjb3JlTWluOiAxOCxcbiAgc2NvcmVNYXg6IDIwLFxuICBkZWxheU1pbjogMzBfMDAwLFxuICBkZWxheU1heDogMzBfMDAwLFxuICBidXR0b25TZWxlY3RvcjogJy5taW5pZ2FtZS1zdGFydCBbaHJlZj1cIi9taW5pZ2FtZXMvY29jb29uaW5waWNrXCJdIC5ubC1idXR0b24nLFxuICBpY29uOiBcIi9zdGF0aWMvaW1nL25ldy1sYXlvdXQvbWluaWdhbWVzL2ljb25fY29jb25pbnBpY2sucG5nXCIsXG59XG4iLCJpbXBvcnQgdHlwZSB7IE1pbmlnYW1lIH0gZnJvbSBcIi4vbWluaWdhbWVcIlxuXG5leHBvcnQgY29uc3QgcGVnZ2xlOiBNaW5pZ2FtZSA9IHtcbiAgbmFtZTogXCJQZWdnbGVcIixcbiAgc2NvcmVNaW46IDksXG4gIHNjb3JlTWF4OiAxMCxcbiAgZGVsYXlNaW46IDEwXzAwMCxcbiAgZGVsYXlNYXg6IDIwXzAwMCxcbiAgYnV0dG9uU2VsZWN0b3I6ICcubWluaWdhbWUtc3RhcnQgW2hyZWY9XCIvbWluaWdhbWVzL2dlbWJvbWJcIl0gLm5sLWJ1dHRvbicsXG4gIGljb246IFwiL3N0YXRpYy9pbWcvbmV3LWxheW91dC9taW5pZ2FtZXMvaWNvbl9nZW1ib21iLnBuZ1wiLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBQYXJzYWJsZUl0ZW0gfSBmcm9tIFwiLi9hcHBlYXJhbmNlL2ludGVyZmFjZXMvcGFyc2FibGVfaXRlbVwiXG5pbXBvcnQgdHlwZSB7IEF2YXRhciB9IGZyb20gXCIuL2VsZGFyeWEvYXZhdGFyXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydE91dGZpdChzZWxlY3Rvcjogc3RyaW5nLCBuYW1lID0gXCJvdXRmaXRcIik6IHZvaWQge1xuICBjb25zdCBhdmF0YXIgPSBTYWNoYS5BdmF0YXIuYXZhdGFyc1tzZWxlY3Rvcl1cbiAgaWYgKCFhdmF0YXIpIHJldHVyblxuXG4gIGNvbnN0IG91dGZpdCA9IHBhcnNlQXZhdGFyKGF2YXRhcilcblxuICBjb25zdCBocmVmID1cbiAgICBcImRhdGE6dGV4dC9qc29uO2NoYXJzZXQ9dXRmLTgsXCIgK1xuICAgIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShvdXRmaXQsIHVuZGVmaW5lZCwgMikpXG5cbiAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpXG4gIGEuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBocmVmKVxuICBhLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIGAke25hbWV9Lmpzb25gKVxuICBhLmNsaWNrKClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQXZhdGFyKGF2YXRhcjogQXZhdGFyKTogUGFyc2FibGVJdGVtW10ge1xuICByZXR1cm4gYXZhdGFyLmNoaWxkcmVuLm1hcChjaGlsZCA9PiB7XG4gICAgY29uc3QgaXRlbSA9IGNoaWxkLmdldEl0ZW0oKVxuICAgIHJldHVybiB7XG4gICAgICBpZDogaXRlbS5faWQsXG4gICAgICBncm91cDogaXRlbS5fZ3JvdXAsXG4gICAgICBuYW1lOiBpdGVtLl9uYW1lLFxuICAgICAgaW1hZ2U6IGl0ZW0uX2ltYWdlLFxuICAgICAgdHlwZTogaXRlbS5fdHlwZSxcbiAgICAgIGNhdGVnb3J5SWQ6IGl0ZW0uX2NhdGVnb3J5SWQsXG4gICAgICBoaWRkZW5DYXRlZ29yaWVzOiBPYmplY3QudmFsdWVzKGl0ZW0uX2hpZGRlbkNhdGVnb3JpZXMpLFxuICAgICAgYW5pbWF0aW9uRGF0YTogaXRlbS5fYW5pbWF0aW9uRGF0YSxcbiAgICAgIGxvY2tlZDogaXRlbS5fbG9ja2VkLFxuICAgIH1cbiAgfSlcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gXCIuLi9jb25zb2xlXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB7IGxpc3RlblRyZWFzdXJlSHVudCB9IGZyb20gXCIuL2V4cGxvcmF0aW9uLXdhdGNoZXJcIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEV4cGxvcmF0aW9uSGlzdG9yeSgpOiB2b2lkIHtcbiAgbG9hZEhpc3RvcnlCdXR0b24oKVxuICBsaXN0ZW5UcmVhc3VyZUh1bnQoKVxufVxuXG5mdW5jdGlvbiBsb2FkSGlzdG9yeUJ1dHRvbigpOiB2b2lkIHtcbiAgY29uc3QgY2xvc2VFeHBsb3JhdGlvbkJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEFuY2hvckVsZW1lbnQ+KFxuICAgIFwiI2Nsb3NlLXRyZWFzdXJlLWh1bnQtaW50ZXJmYWNlXCJcbiAgKVxuICBpZiAoIWNsb3NlRXhwbG9yYXRpb25CdXR0b24pXG4gICAgcmV0dXJuIHZvaWQgQ29uc29sZS5lcnJvcihcIkNvdWxkbid0IGZpbmQgI2Nsb3NlLXRyZWFzdXJlLWh1bnQtaW50ZXJmYWNlLlwiKVxuXG4gIGNsb3NlRXhwbG9yYXRpb25CdXR0b24uc3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCJcbiAgY2xvc2VFeHBsb3JhdGlvbkJ1dHRvbi5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIlxuICBjbG9zZUV4cGxvcmF0aW9uQnV0dG9uLnN0eWxlLnJpZ2h0ID0gXCIwXCJcbiAgY2xvc2VFeHBsb3JhdGlvbkJ1dHRvbi5zdHlsZS50b3AgPSBcIjBcIlxuICBjbG9zZUV4cGxvcmF0aW9uQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrUGV0KVxuXG4gIGNvbnN0IGhpc3RvcnlCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKVxuICBoaXN0b3J5QnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJubC1idXR0b25cIiwgXCJubC1idXR0b24tYmFja1wiKVxuICBoaXN0b3J5QnV0dG9uLnN0eWxlLm1hcmdpblJpZ2h0ID0gXCIwLjZlbVwiXG4gIGhpc3RvcnlCdXR0b24udGV4dENvbnRlbnQgPSB0cmFuc2xhdGUucGV0Lmhpc3RvcnlcbiAgaGlzdG9yeUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGlja0hpc3RvcnkpXG5cbiAgY29uc3Qgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICByb3cuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYmVmb3JlZW5kXCIsIGhpc3RvcnlCdXR0b24pXG4gIHJvdy5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJiZWZvcmVlbmRcIiwgY2xvc2VFeHBsb3JhdGlvbkJ1dHRvbilcblxuICBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcIiNyaWdodC1jb250YWluZXItaW5uZXJcIilcbiAgICA/Lmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgcm93KVxufVxuXG5mdW5jdGlvbiBvbkNsaWNrSGlzdG9yeSgpOiB2b2lkIHtcbiAgaGlkZVBldCgpXG4gIGhpZGVFeHBsb3JhdGlvbigpXG4gIG1ha2VIaXN0b3J5KClcbiAgc2hvd0hpc3RvcnkoKVxufVxuXG5mdW5jdGlvbiBvbkNsaWNrUGV0KCk6IHZvaWQge1xuICBoaWRlSGlzdG9yeSgpXG4gIHNob3dQZXQoKVxufVxuXG5mdW5jdGlvbiBoaWRlUGV0KCk6IHZvaWQge1xuICBjb25zdCBuYW1lQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuYW1lLWNvbnRhaW5lclwiKVxuICBjb25zdCBpbmZvQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpbmZvcy1jb250YWluZXJcIilcbiAgY29uc3QgcGV0SW1hZ2VDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBldC1pbWFnZS1jb250YWluZXJcIilcblxuICBpZiAoIW5hbWVDb250YWluZXIgfHwgIWluZm9Db250YWluZXIgfHwgIXBldEltYWdlQ29udGFpbmVyKVxuICAgIHJldHVybiB2b2lkIENvbnNvbGUuZXJyb3IoXCJUaGUgcGV0IGRpc3BsYXkgd2FzIGRhbWFnZWQuXCIsIHtcbiAgICAgIG5hbWVDb250YWluZXIsXG4gICAgICBpbmZvQ29udGFpbmVyLFxuICAgICAgcGV0SW1hZ2VDb250YWluZXIsXG4gICAgfSlcblxuICBuYW1lQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxuICBpbmZvQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxuICBwZXRJbWFnZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcbn1cblxuZnVuY3Rpb24gc2hvd1BldCgpOiB2b2lkIHtcbiAgY29uc3QgbmFtZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibmFtZS1jb250YWluZXJcIilcbiAgY29uc3QgaW5mb0NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaW5mb3MtY29udGFpbmVyXCIpXG4gIGNvbnN0IHBldEltYWdlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwZXQtaW1hZ2UtY29udGFpbmVyXCIpXG5cbiAgaWYgKCFuYW1lQ29udGFpbmVyIHx8ICFpbmZvQ29udGFpbmVyIHx8ICFwZXRJbWFnZUNvbnRhaW5lcilcbiAgICByZXR1cm4gdm9pZCBDb25zb2xlLmVycm9yKFwiVGhlIHBldCBkaXNwbGF5IHdhcyBkYW1hZ2VkLlwiLCB7XG4gICAgICBuYW1lQ29udGFpbmVyLFxuICAgICAgaW5mb0NvbnRhaW5lcixcbiAgICAgIHBldEltYWdlQ29udGFpbmVyLFxuICAgIH0pXG5cbiAgbmFtZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJcIlxuICBpbmZvQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIlwiXG4gIHBldEltYWdlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIlwiXG59XG5cbmZ1bmN0aW9uIHNob3dIaXN0b3J5KCk6IHZvaWQge1xuICBjb25zdCBoaXN0b3J5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJoaXN0b3J5LWNvbnRhaW5lclwiKVxuICBpZiAoIWhpc3RvcnkpIHJldHVyblxuICBoaXN0b3J5LnN0eWxlLmRpc3BsYXkgPSBcIlwiXG59XG5cbmZ1bmN0aW9uIGhpZGVIaXN0b3J5KCk6IHZvaWQge1xuICBjb25zdCBoaXN0b3J5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJoaXN0b3J5LWNvbnRhaW5lclwiKVxuICBpZiAoIWhpc3RvcnkpIHJldHVyblxuICBoaXN0b3J5LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxufVxuXG5mdW5jdGlvbiBoaWRlRXhwbG9yYXRpb24oKTogdm9pZCB7XG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKFwibWFpbi1zZWN0aW9uXCIpXG4gICAgPy5jbGFzc0xpc3QucmVtb3ZlKFwidHJlYXN1cmUtaHVudC1pbnRlcmZhY2Utb3BlblwiKVxufVxuXG5mdW5jdGlvbiBtYWtlSGlzdG9yeSgpOiB2b2lkIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJoaXN0b3J5LWNvbnRhaW5lclwiKT8ucmVtb3ZlKClcbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2V4cGxvcmF0aW9uX2hpc3RvcnkuaHRtbFwiKVxuXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibGVmdC1jb250YWluZXJcIik/Lmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIHRlbXBsYXRlLnJlbmRlcih7XG4gICAgICB0cmFuc2xhdGUsXG4gICAgICBoaXN0b3J5OiBMb2NhbFN0b3JhZ2UuZXhwbG9yYXRpb25IaXN0b3J5Lm1hcChoaXN0b3J5ID0+ICh7XG4gICAgICAgIC4uLmhpc3RvcnksXG4gICAgICAgIGRhdGU6IHRyYW5zbGF0ZS5wZXQuZGF0ZV90aW1lX2Zvcm1hdC5mb3JtYXQobmV3IERhdGUoaGlzdG9yeS5kYXRlKSksXG4gICAgICB9KSksXG4gICAgfSlcbiAgKVxuXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGVsZXRlLWhpc3RvcnlcIik/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgTG9jYWxTdG9yYWdlLmV4cGxvcmF0aW9uSGlzdG9yeSA9IFtdXG4gICAgbWFrZUhpc3RvcnkoKVxuICB9KVxufVxuIiwiaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gXCIuLi9jb25zb2xlXCJcbmltcG9ydCB7IHRyaW1JY29uIH0gZnJvbSBcIi4uL2VsZGFyeWFfdXRpbFwiXG5pbXBvcnQgdHlwZSB7IEV4cGxvcmF0aW9uUmVzdWx0IH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvZXhwbG9yYXRpb25fcmVzdWx0XCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuXG5leHBvcnQgZnVuY3Rpb24gbGlzdGVuVHJlYXN1cmVIdW50KCk6IHZvaWQge1xuICBjb25zdCByZXN1bHRPdmVybGF5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiN0cmVhc3VyZS1odW50LXJlc3VsdC1vdmVybGF5XCIpXG4gIGlmICghcmVzdWx0T3ZlcmxheSlcbiAgICByZXR1cm4gdm9pZCBDb25zb2xlLmVycm9yKFwiVGhlcmUgaXMgbm8gcmVzdWx0IG92ZXJsYXkuXCIsIHJlc3VsdE92ZXJsYXkpXG5cbiAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgIENvbnNvbGUubG9nKFwiTXV0YXRpb24gaW5cIiwgcmVzdWx0T3ZlcmxheSlcbiAgICBpZiAoIXJlc3VsdE92ZXJsYXkuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKSByZXR1cm5cblxuICAgIGNvbnN0IHJlc3VsdHMgPSBnZXRSZXN1bHRzKClcbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHJldHVyblxuICAgIENvbnNvbGUubG9nKFwiUmVzdWx0czpcIiwgcmVzdWx0cylcblxuICAgIExvY2FsU3RvcmFnZS5leHBsb3JhdGlvbkhpc3RvcnkgPSBbXG4gICAgICAuLi5yZXN1bHRzLFxuICAgICAgLi4uTG9jYWxTdG9yYWdlLmV4cGxvcmF0aW9uSGlzdG9yeSxcbiAgICBdXG4gIH0pLm9ic2VydmUocmVzdWx0T3ZlcmxheSwge1xuICAgIGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIl0sXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGdldFJlc3VsdHMoKTogRXhwbG9yYXRpb25SZXN1bHRbXSB7XG4gIGNvbnN0IGxvY2F0aW9uTmFtZSA9IGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCIjdGgtYWdhaW4gc3Ryb25nXCIpXG4gICAgPy50ZXh0Q29udGVudD8udHJpbSgpXG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcblxuICByZXR1cm4gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnRoLXJlc3VsdFwiKSkubWFwKHJlc3VsdCA9PiB7XG4gICAgY29uc3QgaW1nID0gcmVzdWx0LnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXCJpbWcudGgtcmVzdWx0LWltZ1wiKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvdW50OiByZXN1bHQucXVlcnlTZWxlY3RvcihcIi5yZXNvdXJjZS1jb3VudFwiKT8udGV4dENvbnRlbnQ/LnRyaW0oKSxcbiAgICAgIGRhdGU6IG5vdyxcbiAgICAgIGljb246IGltZyA/IHRyaW1JY29uKGltZy5zcmMpIDogdW5kZWZpbmVkLFxuICAgICAgbG9jYXRpb25OYW1lLFxuICAgICAgbmFtZTogcmVzdWx0LnF1ZXJ5U2VsZWN0b3IoXCIudG9vbHRpcC1jb250ZW50IGgzXCIpPy50ZXh0Q29udGVudD8udHJpbSgpLFxuICAgICAgdHJhZGFibGU6IEJvb2xlYW4ocmVzdWx0LnF1ZXJ5U2VsZWN0b3IoXCIudHJhZGFibGVcIikpLFxuICAgIH1cbiAgfSlcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgY2hhbmdlUmVnaW9uIH0gZnJvbSBcIi4uL2FqYXgvY2hhbmdlX3JlZ2lvblwiXG5pbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiLi4vYXBpL3Jlc3VsdC5lbnVtXCJcbmltcG9ydCB7IENvbnNvbGUgfSBmcm9tIFwiLi4vY29uc29sZVwiXG5pbXBvcnQgdHlwZSB7IE1hcFJlZ2lvbiB9IGZyb20gXCIuLi9lbGRhcnlhL2N1cnJlbnRfcmVnaW9uXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlTG9jYXRpb24gfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9hdXRvX2V4cGxvcmVfbG9jYXRpb25cIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlQnV0dG9uIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2F1dG9fZXhwbG9yZV9idXR0b25cIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZE1hcmtlcnMoKTogdm9pZCB7XG4gIGNvbnN0IGF1dG9FeHBsb3JlTG9jYXRpb25zID0gTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zXG5cbiAgZm9yIChjb25zdCBkaXYgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRGl2RWxlbWVudD4oXG4gICAgXCIubWFwLWxvY2F0aW9uW2RhdGEtaWRdXCJcbiAgKSkge1xuICAgIGNvbnN0IGxvY2F0aW9uSWQgPSBOdW1iZXIoZGl2LmdldEF0dHJpYnV0ZShcImRhdGEtaWRcIikpXG4gICAgaWYgKCFsb2NhdGlvbklkKSBjb250aW51ZVxuXG4gICAgbG9hZFBpY3RvTWFwKGF1dG9FeHBsb3JlTG9jYXRpb25zLCBkaXYpXG5cbiAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+XG4gICAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgICAgKF86IE11dGF0aW9uUmVjb3JkW10sIG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyKTogdm9pZCA9PiB7XG4gICAgICAgICAgYWRkQXV0b0V4cGxvcmVCdXR0b24obG9jYXRpb25JZCwgb2JzZXJ2ZXIpXG4gICAgICAgIH1cbiAgICAgICkub2JzZXJ2ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hcC1sb2NhdGlvbi1wcmV2aWV3XCIpIGFzIE5vZGUsIHtcbiAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIH0pXG4gICAgKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZEF1dG9FeHBsb3JlQnV0dG9uKFxuICBsb2NhdGlvbklkOiBudW1iZXIsXG4gIG9ic2VydmVyPzogTXV0YXRpb25PYnNlcnZlclxuKTogdm9pZCB7XG4gIGNvbnN0IGJ1dHRvbnNDb250YWluZXIgPVxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiI2J1dHRvbnMtY29udGFpbmVyXCIpXG4gIGlmICghYnV0dG9uc0NvbnRhaW5lcikgcmV0dXJuXG4gIG9ic2VydmVyPy5kaXNjb25uZWN0KClcblxuICAvLyBQYXJhbWV0ZXJzIHRvIGJlIGluamVjdGVkIGludG8gdGhlIHRlbXBsYXRlXG4gIGNvbnN0IGNvbnRleHQ6IEF1dG9FeHBsb3JlQnV0dG9uID0ge1xuICAgIGxvY2F0aW9uSWQsXG4gICAgYWN0aXZlOiBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMuc29tZShcbiAgICAgIHNhdmVkID0+IHNhdmVkLmxvY2F0aW9uLmlkID09PSBsb2NhdGlvbklkXG4gICAgKSxcbiAgICByZWdpb25JZDogTnVtYmVyKFxuICAgICAgZG9jdW1lbnRcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoXCIubWluaW1hcC5jdXJyZW50W2RhdGEtbWFwaWRdXCIpXG4gICAgICAgID8uZ2V0QXR0cmlidXRlKFwiZGF0YS1tYXBpZFwiKVxuICAgICksXG4gIH1cblxuICAvLyBBZGQgdGhlIGF1dG8gZXhwbG9yZSBidXR0b25cbiAgYnV0dG9uc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiI2F1dG8tZXhwbG9yZS1idXR0b25cIik/LnJlbW92ZSgpXG4gIGNvbnN0IGF1dG9FeHBsb3JlVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2F1dG9fZXhwbG9yZV9idXR0b24uaHRtbFwiKVxuICBidXR0b25zQ29udGFpbmVyLmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIGF1dG9FeHBsb3JlVGVtcGxhdGUucmVuZGVyKHsgLi4uY29udGV4dCwgdHJhbnNsYXRlIH0pXG4gIClcblxuICAvLyBCaW5kIGBhdXRvRXhwbG9yZWAgYW5kIGBsb2FkUGljdG9NYXBzYFxuICBidXR0b25zQ29udGFpbmVyXG4gICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTEJ1dHRvbkVsZW1lbnQ+KFwiI2F1dG8tZXhwbG9yZS1idXR0b25cIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBDb25zb2xlLmRlYnVnKFwiQ2xpY2tlZCBvbiAjYXV0by1leHBsb3JlLWJ1dHRvbi5cIiwgY29udGV4dClcbiAgICAgIHZvaWQgbWFya0xvY2F0aW9uKGNvbnRleHQpLnRoZW4obG9hZFBpY3RvTWFwcylcbiAgICB9KVxuXG4gIHZvaWQgZGlzYWJsZUV4cGxvcmUoY29udGV4dClcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGlzYWJsZUV4cGxvcmUoY29udGV4dDogQXV0b0V4cGxvcmVCdXR0b24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZW50cnkgPSBhd2FpdCBnZXRBdXRvRXhwbG9yZUVudHJ5KGNvbnRleHQucmVnaW9uSWQsIGNvbnRleHQubG9jYXRpb25JZClcbiAgaWYgKCFlbnRyeSkgcmV0dXJuXG5cbiAgaWYgKHBldEVuZXJneSA8IE51bWJlcihlbnRyeS5sb2NhdGlvbi5lbmVyZ3lSZXF1aXJlZCkpXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJleHBsb3JlLWJ1dHRvblwiKT8uY2xhc3NMaXN0LmFkZChcImRpc2FibGVkXCIpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1hcmtMb2NhdGlvbihjb250ZXh0OiBBdXRvRXhwbG9yZUJ1dHRvbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoY29udGV4dC5hY3RpdmUpIHtcbiAgICBjb25zdCBmaWx0ZXJlZExvY2F0aW9ucyA9IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5maWx0ZXIoXG4gICAgICBzYXZlZCA9PiBzYXZlZC5sb2NhdGlvbi5pZCAhPT0gY29udGV4dC5sb2NhdGlvbklkXG4gICAgKVxuICAgIExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucyA9IGZpbHRlcmVkTG9jYXRpb25zXG4gICAgYWRkQXV0b0V4cGxvcmVCdXR0b24oY29udGV4dC5sb2NhdGlvbklkKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgbmV3QXV0b0V4cGxvcmUgPSBhd2FpdCBnZXRBdXRvRXhwbG9yZUVudHJ5KFxuICAgIGNvbnRleHQucmVnaW9uSWQsXG4gICAgY29udGV4dC5sb2NhdGlvbklkXG4gIClcbiAgaWYgKCFuZXdBdXRvRXhwbG9yZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgQ291bGQgbm90IGdlbmVyYXRlIGFuIGF1dG8gZXhwbG9yZSBlbnRyeSBmb3IgbG9jYXRpb24gIyR7Y29udGV4dC5sb2NhdGlvbklkfS5gLFxuICAgICAgY29udGV4dFxuICAgIClcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IG5ld0xvY2F0aW9ucyA9IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9uc1xuICBuZXdMb2NhdGlvbnMucHVzaChuZXdBdXRvRXhwbG9yZSlcbiAgTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zID0gbmV3TG9jYXRpb25zXG4gIGFkZEF1dG9FeHBsb3JlQnV0dG9uKGNvbnRleHQubG9jYXRpb25JZClcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QXV0b0V4cGxvcmVFbnRyeShcbiAgcmVnaW9uSWQ6IG51bWJlcixcbiAgbG9jYXRpb25JZDogbnVtYmVyXG4pOiBQcm9taXNlPEF1dG9FeHBsb3JlTG9jYXRpb24gfCBudWxsPiB7XG4gIGNvbnN0IHJlZ2lvbiA9IGF3YWl0IGdldFJlZ2lvbihyZWdpb25JZClcbiAgaWYgKCFyZWdpb24pIHtcbiAgICBDb25zb2xlLmVycm9yKGBDb3VsZCBub3QgZ2V0IHJlZ2lvbiAjJHtyZWdpb25JZH0uYClcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgbG9jYXRpb24gPSByZWdpb24ubG9jYXRpb25zLmZpbmQobG9jYXRpb24gPT4gbG9jYXRpb24uaWQgPT09IGxvY2F0aW9uSWQpXG4gIGlmICghbG9jYXRpb24pIHtcbiAgICBDb25zb2xlLmVycm9yKFxuICAgICAgYENvdWxkIG5vdCBnZXQgbG9jYXRpb24gIyR7bG9jYXRpb25JZH0gaW4gJHtyZWdpb24ubmFtZX0uYCxcbiAgICAgIHJlZ2lvblxuICAgIClcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbixcbiAgICByZWdpb24sXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVnaW9uKGlkOiBudW1iZXIpOiBQcm9taXNlPE1hcFJlZ2lvbiB8IG51bGw+IHtcbiAgaWYgKGlkLnRvU3RyaW5nKCkgPT09IGN1cnJlbnRSZWdpb24uaWQpIHJldHVybiBjdXJyZW50UmVnaW9uXG5cbiAgY29uc3QganNvbiA9IGF3YWl0IGNoYW5nZVJlZ2lvbihpZClcbiAgaWYgKGpzb24ucmVzdWx0ID09PSBSZXN1bHQuc3VjY2VzcykgcmV0dXJuIGpzb24uZGF0YS5jdXJyZW50UmVnaW9uXG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLy8gUGljdG8gbWFwXG5cbmZ1bmN0aW9uIGxvYWRQaWN0b01hcHMoKTogdm9pZCB7XG4gIGNvbnN0IGF1dG9FeHBsb3JlTG9jYXRpb25zID0gTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zXG4gIGZvciAoY29uc3QgZGl2IG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiLm1hcC1sb2NhdGlvbltkYXRhLWlkXVwiXG4gICkpIHtcbiAgICBsb2FkUGljdG9NYXAoYXV0b0V4cGxvcmVMb2NhdGlvbnMsIGRpdilcbiAgfVxufVxuXG5mdW5jdGlvbiBsb2FkUGljdG9NYXAoXG4gIGF1dG9FeHBsb3JlTG9jYXRpb25zOiBBdXRvRXhwbG9yZUxvY2F0aW9uW10sXG4gIGRpdjogSFRNTERpdkVsZW1lbnRcbik6IHZvaWQge1xuICBjb25zdCBtYXBMb2NhdGlvbiA9IGRpdi5nZXRBdHRyaWJ1dGUoXCJkYXRhLWlkXCIpXG4gIGlmICghbWFwTG9jYXRpb24pIHJldHVyblxuXG4gIGRpdi5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBhdXRvRXhwbG9yZUxvY2F0aW9ucy5zb21lKFxuICAgIHNhdmVkID0+IHNhdmVkLmxvY2F0aW9uLmlkID09PSBOdW1iZXIobWFwTG9jYXRpb24pXG4gIClcbiAgICA/IFwidXJsKC9zdGF0aWMvaW1nL25ldy1sYXlvdXQvcGV0L2ljb25zL3BpY3RvX21hcF9leHBsby5wbmcpXCJcbiAgICA6IFwidXJsKC9zdGF0aWMvaW1nL25ldy1sYXlvdXQvcGV0L2ljb25zL3BpY3RvX21hcC5wbmcpXCJcbn1cbiIsImV4cG9ydCBlbnVtIFNlc3Npb25TdG9yYWdlS2V5IHtcbiAgYWN0aW9uID0gXCJhY3Rpb25cIixcbiAgZXhwbG9yYXRpb25zRG9uZSA9IFwiZXhwbG9yYXRpb25zRG9uZVwiLFxuICBtaW5pZ2FtZXNEb25lID0gXCJtaW5pZ2FtZXNEb25lXCIsXG4gIHNlbGVjdGVkTG9jYXRpb24gPSBcInNlbGVjdGVkTG9jYXRpb25cIixcbiAgdGFrZW92ZXIgPSBcInRha2VvdmVyXCIsXG4gIHdpc2hsaXN0ID0gXCJ3aXNobGlzdFwiLFxuICBzdW1tZXJHYW1lRG9uZSA9IFwic3VtbWVyR2FtZURvbmVcIixcbn1cbiIsImltcG9ydCB0eXBlIHsgQXV0b0V4cGxvcmVMb2NhdGlvbiB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2F1dG9fZXhwbG9yZV9sb2NhdGlvblwiXG5pbXBvcnQgdHlwZSB7IFdpc2hlZEl0ZW0gfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS93aXNoZWRfaXRlbVwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZUtleSB9IGZyb20gXCIuL3Nlc3Npb25fc3RvcmFnZS5lbnVtXCJcbmltcG9ydCB0eXBlIHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi90YWtlb3Zlcl9hY3Rpb24uZW51bVwiXG5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uU3RvcmFnZSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlID0gc2Vzc2lvblN0b3JhZ2VcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICBzdGF0aWMgZ2V0IGFjdGlvbigpOiBUYWtlb3ZlckFjdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkuYWN0aW9uLCBudWxsKVxuICB9XG5cbiAgc3RhdGljIHNldCBhY3Rpb24oYWN0aW9uOiBUYWtlb3ZlckFjdGlvbiB8IG51bGwpIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkuYWN0aW9uLCBhY3Rpb24pXG4gIH1cblxuICBzdGF0aWMgZ2V0IGV4cGxvcmF0aW9uc0RvbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5leHBsb3JhdGlvbnNEb25lLCBmYWxzZSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgZXhwbG9yYXRpb25zRG9uZShkb25lOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LmV4cGxvcmF0aW9uc0RvbmUsIGRvbmUpXG4gIH1cblxuICBzdGF0aWMgZ2V0IG1pbmlnYW1lc0RvbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5taW5pZ2FtZXNEb25lLCBmYWxzZSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWluaWdhbWVzRG9uZShkb25lOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5Lm1pbmlnYW1lc0RvbmUsIGRvbmUpXG4gIH1cblxuICBzdGF0aWMgZ2V0IHN1bW1lckdhbWVEb25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkuc3VtbWVyR2FtZURvbmUsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIHNldCBzdW1tZXJHYW1lRG9uZShkb25lOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LnN1bW1lckdhbWVEb25lLCBkb25lKVxuICB9XG5cbiAgc3RhdGljIGdldCBzZWxlY3RlZExvY2F0aW9uKCk6IEF1dG9FeHBsb3JlTG9jYXRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LnNlbGVjdGVkTG9jYXRpb24sIG51bGwpXG4gIH1cblxuICBzdGF0aWMgc2V0IHNlbGVjdGVkTG9jYXRpb24oc2VsZWN0ZWQ6IEF1dG9FeHBsb3JlTG9jYXRpb24gfCBudWxsKSB7XG4gICAgdGhpcy5zZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LnNlbGVjdGVkTG9jYXRpb24sIHNlbGVjdGVkKVxuICB9XG5cbiAgc3RhdGljIGdldCB0YWtlb3ZlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LnRha2VvdmVyLCBmYWxzZSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgdGFrZW92ZXIoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS50YWtlb3ZlciwgZW5hYmxlZClcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2lzaGxpc3QoKTogV2lzaGVkSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5Lndpc2hsaXN0LCBbXSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgd2lzaGxpc3Qod2lzaGxpc3Q6IFdpc2hlZEl0ZW1bXSkge1xuICAgIHRoaXMuc2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS53aXNobGlzdCwgd2lzaGxpc3QpXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRJdGVtPFQ+KGtleTogU2Vzc2lvblN0b3JhZ2VLZXksIGZhbGxiYWNrOiBUKTogVCB7XG4gICAgcmV0dXJuIChKU09OLnBhcnNlKFxuICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGtleSkgPz8gSlNPTi5zdHJpbmdpZnkoZmFsbGJhY2spXG4gICAgKSA/PyBmYWxsYmFjaykgYXMgVFxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgc2V0SXRlbTxUPihrZXk6IFNlc3Npb25TdG9yYWdlS2V5LCB2YWx1ZTogVCk6IHZvaWQge1xuICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSlcbiAgfVxufVxuIiwiZXhwb3J0IGVudW0gVGFrZW92ZXJBY3Rpb24ge1xuICBkYWlseSA9IFwiZGFpbHlcIixcbiAgbWluaWdhbWVzID0gXCJtaW5pZ2FtZXNcIixcbiAgZXhwbG9yYXRpb25zID0gXCJleHBsb3JhdGlvbnNcIixcbiAgYXVjdGlvbnMgPSBcImF1Y3Rpb25zXCIsXG4gIGJ1eSA9IFwiYnV5XCIsXG4gIC8vIHNlbGwsXG4gIHN1bW1lckdhbWUgPSBcInN1bW1lckdhbWVcIixcbiAgd2FpdCA9IFwid2FpdFwiLFxufVxuIiwiaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gXCIuLi9jb25zb2xlXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlXCJcbmltcG9ydCB0eXBlIHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcbmltcG9ydCB7IGxvYWRUb3BCYXIgfSBmcm9tIFwiLi4vdWkvdG9wX2JhclwiXG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCIuL2NsYXNzZXMvYWN0aW9uXCJcbmltcG9ydCBidXlBY3Rpb24gZnJvbSBcIi4vY2xhc3Nlcy9idXlfYWN0aW9uXCJcbmltcG9ydCBkYWlseUFjdGlvbiBmcm9tIFwiLi9jbGFzc2VzL2RhaWx5X2FjdGlvblwiXG5pbXBvcnQgZXhwbG9yYXRpb25BY3Rpb24gZnJvbSBcIi4vY2xhc3Nlcy9leHBsb3JhdGlvbl9hY3Rpb25cIlxuaW1wb3J0IG1pbmlnYW1lQWN0aW9uIGZyb20gXCIuL2NsYXNzZXMvbWluaWdhbWVfYWN0aW9uXCJcbmltcG9ydCB7IHN1bW1lckdhbWVBY3Rpb24gfSBmcm9tIFwiLi9jbGFzc2VzL3N1bW1lcl9nYW1lX2FjdGlvblwiXG5pbXBvcnQgd2FpdEFjdGlvbiBmcm9tIFwiLi9jbGFzc2VzL3dhaXRfYWN0aW9uXCJcblxuLyoqIEF1dG9tYXRlZCBlbnRyeSBwb2ludCBvZiB0aGUgdGFrZW92ZXIuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFRha2VvdmVyKCk6IHZvaWQge1xuICBpZiAoU2Vzc2lvblN0b3JhZ2UudGFrZW92ZXIpIHZvaWQgdGFrZW92ZXIoKVxufVxuXG4vKiogTWFudWFsIGVudHJ5IHBvaW50IG9mIHRoZSB0YWtlb3Zlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVUYWtlb3ZlcigpOiB2b2lkIHtcbiAgcmVzZXRUYWtlb3ZlcigpXG4gIFNlc3Npb25TdG9yYWdlLnRha2VvdmVyID0gIVNlc3Npb25TdG9yYWdlLnRha2VvdmVyXG5cbiAgbG9hZFRvcEJhcigpXG4gIGlmIChTZXNzaW9uU3RvcmFnZS50YWtlb3ZlcikgJC5mbGF2ck5vdGlmKHRyYW5zbGF0ZS50YWtlb3Zlci5lbmFibGVkKVxuICBlbHNlICQuZmxhdnJOb3RpZih0cmFuc2xhdGUudGFrZW92ZXIuZGlzYWJsZWQpXG5cbiAgdm9pZCB0YWtlb3ZlcigpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldFRha2VvdmVyKCk6IHZvaWQge1xuICBTZXNzaW9uU3RvcmFnZS5hY3Rpb24gPSBudWxsXG4gIFNlc3Npb25TdG9yYWdlLmV4cGxvcmF0aW9uc0RvbmUgPSBmYWxzZVxuICBTZXNzaW9uU3RvcmFnZS5taW5pZ2FtZXNEb25lID0gZmFsc2VcbiAgU2Vzc2lvblN0b3JhZ2Uuc2VsZWN0ZWRMb2NhdGlvbiA9IG51bGxcbiAgU2Vzc2lvblN0b3JhZ2Uuc3VtbWVyR2FtZURvbmUgPSBmYWxzZVxuICBTZXNzaW9uU3RvcmFnZS53aXNobGlzdCA9IFtdXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRha2VvdmVyKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIVNlc3Npb25TdG9yYWdlLnRha2VvdmVyKSByZXR1cm5cbiAgaWYgKGRhaWx5QWN0aW9uLmNvbmRpdGlvbigpKSBhd2FpdCBkYWlseUFjdGlvbi5wZXJmb3JtKClcblxuICBjb25zdCBhY3Rpb24gPSBhY3Rpb25zLmZpbmQoYWN0aW9uID0+IGFjdGlvbi5rZXkgPT09IFNlc3Npb25TdG9yYWdlLmFjdGlvbilcbiAgaWYgKGFjdGlvbj8uY29uZGl0aW9uKCkpIHtcbiAgICBDb25zb2xlLmluZm8oXCJBY3Rpb246XCIsIGFjdGlvbi5rZXkpXG5cbiAgICBpZiAoYXdhaXQgYWN0aW9uLnBlcmZvcm0oKSkgcmV0dXJuXG4gIH1cblxuICBjaGFuZ2VBY3Rpb24oKVxuICB2b2lkIHRha2VvdmVyKClcbn1cblxuY29uc3QgYWN0aW9uczogQWN0aW9uW10gPSBbXG4gIGV4cGxvcmF0aW9uQWN0aW9uLFxuICBidXlBY3Rpb24sXG4gIG1pbmlnYW1lQWN0aW9uLFxuICBzdW1tZXJHYW1lQWN0aW9uLFxuICB3YWl0QWN0aW9uLFxuXVxuXG5mdW5jdGlvbiBjaGFuZ2VBY3Rpb24oKTogVGFrZW92ZXJBY3Rpb24ge1xuICBjb25zdCBuZXh0ID1cbiAgICBhY3Rpb25zLmZpbmRJbmRleChhY3Rpb24gPT4gYWN0aW9uLmtleSA9PT0gU2Vzc2lvblN0b3JhZ2UuYWN0aW9uKSArIDFcblxuICByZXR1cm4gKFNlc3Npb25TdG9yYWdlLmFjdGlvbiA9XG4gICAgYWN0aW9uc1tuZXh0ID49IGFjdGlvbnMubGVuZ3RoID8gMCA6IG5leHRdIS5rZXkpXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRha2VvdmVyQWN0aW9uIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bVwiXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBY3Rpb24ge1xuICAvKiogS2V5IGJ5IHdoaWNoIHRoZSBgU2Vzc2lvblN0b3JhZ2VgIGNhbiByZWZlcmVuY2UgdGhpcyBhY3Rpb24uICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGtleTogVGFrZW92ZXJBY3Rpb25cblxuICAvKiogRGV0ZXJtaW5lcyBpZiB0aGlzIGFjdGlvbiBjYW4gYmUgcGVyZm9ybWVkIGR1cmluZyBhIHRha2VvdmVyLiAqL1xuICBhYnN0cmFjdCBjb25kaXRpb24oKTogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyB0aGUgYWN0aW9uIGFuZCByZXR1cm5zIGB0cnVlYCBpZiBpdCBoYXMgc29tZXRoaW5nIGVsc2UgdG8gZG8gb3JcbiAgICogYGZhbHNlYCBpZiB0aGlzIGFjdGlvbiBpcyBmaW5pc2hlZCBleGVjdXRpbmcuXG4gICAqL1xuICBhYnN0cmFjdCBwZXJmb3JtKCk6IFByb21pc2U8Ym9vbGVhbj5cbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgYWpheFNlYXJjaCB9IGZyb20gXCIuLi8uLi9hamF4L2FqYXhfc2VhcmNoXCJcbmltcG9ydCB7IGJ1eSB9IGZyb20gXCIuLi8uLi9hamF4L2J1eVwiXG5pbXBvcnQgeyBDb25zb2xlIH0gZnJvbSBcIi4uLy4uL2NvbnNvbGVcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uLy4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHR5cGUgeyBXaXNoZWRJdGVtIH0gZnJvbSBcIi4uLy4uL2xvY2FsX3N0b3JhZ2Uvd2lzaGVkX2l0ZW1cIlxuaW1wb3J0IHR5cGUgeyBNYXJrZXRFbnRyeSB9IGZyb20gXCIuLi8uLi9tYXJrZXRwbGFjZS9pbnRlcmZhY2VzL21hcmtldF9lbnRyeVwiXG5pbXBvcnQgeyBnZXRJdGVtRGV0YWlscyB9IGZyb20gXCIuLi8uLi9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZV9oYW5kbGVyc1wiXG5pbXBvcnQgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCJcblxuY2xhc3MgQnV5QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkga2V5ID0gVGFrZW92ZXJBY3Rpb24uYnV5XG5cbiAgcHJpdmF0ZSBnZXQgY3VycmVudE1hYW5hKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE51bWJlcihcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEFuY2hvckVsZW1lbnQ+KFwiI2N1cnJlbmN5LW1hYW5hXCIpPy5kYXRhc2V0XG4gICAgICAgIC5tYWFuYVxuICAgIClcbiAgfVxuXG4gIGNvbmRpdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTG9jYWxTdG9yYWdlLm1hcmtldCAmJiBCb29sZWFuKExvY2FsU3RvcmFnZS53aXNobGlzdC5sZW5ndGgpXG4gIH1cblxuICBhc3luYyBwZXJmb3JtKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChsb2NhdGlvbi5wYXRobmFtZSAhPT0gXCIvbWFya2V0cGxhY2VcIikge1xuICAgICAgcGFnZUxvYWQoXCIvbWFya2V0cGxhY2VcIilcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgaWNvbk1lc3NhZ2U6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2ljb25fbWVzc2FnZS5odG1sXCIpXG4gICAgZm9yIChjb25zdCB3aXNoZWQgb2YgTG9jYWxTdG9yYWdlLndpc2hsaXN0KSB7XG4gICAgICAvLyBDbG90aGVzIG1pZ2h0IGJlIGEgc3BlY2lhbCBleGNlcHRpb24uIElmIHRoZXkgYXJlLCB0aGVuIGNoZWNrIGZvclxuICAgICAgLy8gYHdpc2hlZC50eXBlID09PSBUeXBlLlBsYXllcldlYXJhYmxlSXRlbWAuXG4gICAgICBpZiAod2lzaGVkLmVycm9yKSB7XG4gICAgICAgIENvbnNvbGUud2FybihgU2tpcHBlZCBcIiR7d2lzaGVkLm5hbWV9XCJgLCB3aXNoZWQpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBDb25zb2xlLmluZm8oYFNlYXJjaGluZyBmb3IgXCIke3dpc2hlZC5uYW1lfVwiYCwgd2lzaGVkKVxuXG4gICAgICAvKiogU2VhcmNoIGluIGVhY2ggcGFnZXMgdW50aWwgdGhlIGFtb3VudCBvZiBpdGVtcyBpcyBsZXNzIHRoYW4gOCAqL1xuICAgICAgbGV0IGFtb3VudCA9IDhcbiAgICAgIGZvcnBhZ2U6IGZvciAobGV0IHBhZ2UgPSAxOyBhbW91bnQgPT09IDg7IHBhZ2UrKykge1xuICAgICAgICBsZXQgcmVzdWx0czogTWFya2V0RW50cnlbXSA9IFtdXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzdWx0cyA9IGF3YWl0IHRoaXMuc2VhcmNoKHdpc2hlZCwgcGFnZSlcbiAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gZSBhcyBKUXVlcnlYSFJcbiAgICAgICAgICBDb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gc2VhcmNoIGZvciBcIiR7d2lzaGVkLm5hbWV9XCJgLCBlcnJvcilcbiAgICAgICAgICB0aGlzLnNldEVycm9yKHdpc2hlZC5pY29uLCBgJHtlcnJvci5zdGF0dXNUZXh0fWApXG4gICAgICAgICAgYnJlYWsgZm9ycGFnZVxuICAgICAgICB9XG5cbiAgICAgICAgYW1vdW50ID0gcmVzdWx0cy5sZW5ndGhcbiAgICAgICAgQ29uc29sZS5sb2coYEZvdW5kICR7YW1vdW50fSByZXN1bHRzYCwgcmVzdWx0cylcblxuICAgICAgICBjb25zdCB3YW50ZWQgPSByZXN1bHRzLmZpbHRlcihcbiAgICAgICAgICByZXN1bHQgPT5cbiAgICAgICAgICAgIHJlc3VsdC5pY29uID09PSB3aXNoZWQuaWNvbiAmJlxuICAgICAgICAgICAgcmVzdWx0LmJ1eU5vd1ByaWNlICYmXG4gICAgICAgICAgICBOdW1iZXIocmVzdWx0LmJ1eU5vd1ByaWNlLnByaWNlKSA8PSB3aXNoZWQucHJpY2UgJiZcbiAgICAgICAgICAgIE51bWJlcihyZXN1bHQuYnV5Tm93UHJpY2UucHJpY2UpIDw9IHRoaXMuY3VycmVudE1hYW5hXG4gICAgICAgIClcbiAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2Ygd2FudGVkKSB7XG4gICAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5idXkocmVzdWx0KSkpIGJyZWFrIGZvcnBhZ2VcblxuICAgICAgICAgIExvY2FsU3RvcmFnZS5wdXJjaGFzZXMgPSBbXG4gICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICAuLi5Mb2NhbFN0b3JhZ2UucHVyY2hhc2VzLmZpbHRlcihcbiAgICAgICAgICAgICAgcHVyY2hhc2UgPT4gcHVyY2hhc2UuaXRlbWlkICE9PSByZXN1bHQuaXRlbWlkXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF1cblxuICAgICAgICAgIENvbnNvbGUuaW5mbyhcbiAgICAgICAgICAgIGBCb3VnaHQgXCIke3Jlc3VsdC5uYW1lfVwiIGZvciAke051bWJlcihcbiAgICAgICAgICAgICAgcmVzdWx0LmJ1eU5vd1ByaWNlPy5wcmljZVxuICAgICAgICAgICAgKX0gbWFhbmFzLmAsXG4gICAgICAgICAgICByZXN1bHRcbiAgICAgICAgICApXG5cbiAgICAgICAgICAkLmZsYXZyTm90aWYoXG4gICAgICAgICAgICBpY29uTWVzc2FnZS5yZW5kZXIoe1xuICAgICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHRyYW5zbGF0ZS50YWtlb3Zlci5ib3VnaHQoXG4gICAgICAgICAgICAgICAgcmVzdWx0Lm5hbWUsXG4gICAgICAgICAgICAgICAgTnVtYmVyKHJlc3VsdC5idXlOb3dQcmljZT8ucHJpY2UpXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIFB1cmNoYXNlIGFuIGl0ZW0gZnJvbSB0aGUgbWFya2V0LlxuICAgKiBAcmV0dXJucyB3aGV0aGVyIHRoZSBpdGVtIHdhcyBzdWNjZXNzZnVsbHkgcHVyY2hhc2VkLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBidXkocmVzdWx0OiBNYXJrZXRFbnRyeSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGpzb24gPSBhd2FpdCBidXkoTnVtYmVyKHJlc3VsdC5pdGVtaWQpKVxuICAgIGlmIChqc29uLnJlc3VsdCAhPT0gXCJzdWNjZXNzXCIpIHRoaXMuc2V0RXJyb3IocmVzdWx0Lmljb24sIGpzb24uZGF0YSlcbiAgICByZXR1cm4ganNvbi5yZXN1bHQgPT09IFwic3VjY2Vzc1wiXG4gIH1cblxuICAvKiogU2VhcmNoIGZvciBhIHdpc2hlZCBpdGVtIG9uIGEgc3BlY2lmaWMgcGFnZSB1c2luZyB0aGUgaXRlbSdzIG5hbWUuICovXG4gIHByaXZhdGUgYXN5bmMgc2VhcmNoKHdpc2hlZDogV2lzaGVkSXRlbSwgcGFnZSA9IDEpOiBQcm9taXNlPE1hcmtldEVudHJ5W10+IHtcbiAgICAvLyBQdXQgdGhlIG5hbWUgb2YgdGhlIGl0ZW0gaW4gdGhlIGZpbHRlclxuICAgIGNvbnN0IGZpbHRlckl0ZW1OYW1lID1cbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXCIjZmlsdGVyLWl0ZW1OYW1lXCIpXG4gICAgaWYgKGZpbHRlckl0ZW1OYW1lKSBmaWx0ZXJJdGVtTmFtZS52YWx1ZSA9IHdpc2hlZC5uYW1lXG5cbiAgICAvLyBTaG93IHRoZSByZXN1bHRzIG9mIHRoZSBzZWFyY2hcbiAgICBjb25zdCBtYXJrZXRwbGFjZVNlYXJjaEl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIFwiLm1hcmtldHBsYWNlLXNlYXJjaC1pdGVtc1wiXG4gICAgKVxuICAgIGlmICghbWFya2V0cGxhY2VTZWFyY2hJdGVtcykgcmV0dXJuIFtdXG4gICAgbWFya2V0cGxhY2VTZWFyY2hJdGVtcy5pbm5lckhUTUwgPSBhd2FpdCBhamF4U2VhcmNoKHtcbiAgICAgIG5hbWU6IHdpc2hlZC5uYW1lLFxuICAgICAgcGFnZSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICBtYXJrZXRwbGFjZVNlYXJjaEl0ZW1zLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTExJRWxlbWVudD4oXG4gICAgICAgIFwiLm1hcmtldHBsYWNlLXNlYXJjaC1pdGVtXCJcbiAgICAgIClcbiAgICApXG4gICAgICAubWFwKGdldEl0ZW1EZXRhaWxzKVxuICAgICAgLmZpbHRlcjxNYXJrZXRFbnRyeT4oKGl0ZW0pOiBpdGVtIGlzIE1hcmtldEVudHJ5ID0+IGl0ZW0gIT09IG51bGwpXG4gIH1cblxuICAvKiogU2V0IHRoZSBgV2lzaGVkSXRlbS5lcnJvcmAgcHJvcGVydHkgd2l0aG91dCByZW9yZGVyaW5nIHRoZSB3aXNobGlzdC4gKi9cbiAgcHJpdmF0ZSBzZXRFcnJvcihpY29uOiBzdHJpbmcsIGVycm9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB3aXNobGlzdCA9IExvY2FsU3RvcmFnZS53aXNobGlzdFxuICAgIGNvbnN0IGluZGV4ID0gd2lzaGxpc3QuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pY29uID09PSBpY29uKVxuICAgIGNvbnN0IGVudHJ5ID0gd2lzaGxpc3RbaW5kZXhdXG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuXG5cbiAgICBlbnRyeS5lcnJvciA9IGVycm9yXG4gICAgTG9jYWxTdG9yYWdlLndpc2hsaXN0ID0gW1xuICAgICAgLi4ud2lzaGxpc3Quc2xpY2UodW5kZWZpbmVkLCBpbmRleCksXG4gICAgICBlbnRyeSxcbiAgICAgIC4uLndpc2hsaXN0LnNsaWNlKGluZGV4ICsgMSwgdW5kZWZpbmVkKSxcbiAgICBdXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEJ1eUFjdGlvbigpXG4iLCJpbXBvcnQgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuaW1wb3J0IHsgcmVzZXRUYWtlb3ZlciB9IGZyb20gXCIuLi9icmFpblwiXG5pbXBvcnQgeyBjbGljayB9IGZyb20gXCIuLi9jbGlja1wiXG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvblwiXG5cbmNsYXNzIERhaWx5QWN0aW9uIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkga2V5ID0gVGFrZW92ZXJBY3Rpb24uZGFpbHlcblxuICAvKiogQ2hlY2tzIGlmIHRoZSBkYWlseSBtYWFuYSBnaWZ0IGlmIHRoZXJlLiAqL1xuICBjb25kaXRpb24oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGFpbHlHaWZ0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkYWlseS1naWZ0LWNvbnRhaW5lclwiKVxuICAgIHJldHVybiAoXG4gICAgICAhIWRhaWx5R2lmdENvbnRhaW5lciAmJlxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkYWlseUdpZnRDb250YWluZXIpLmRpc3BsYXkgIT09IFwibm9uZVwiXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIENsaWNrIG9uIHRoZSBkYWlseSBtYWFuYSBnaWZ0LlxuICAgKiBAcmV0dXJucyBgZmFsc2VgLiBUaGlzIGFjdGlvbiBkb2VzIG5vdCBwZXJmb3JtIG1lYW5pbmdmdWwgYWN0aW9ucyBvbiB0aGVcbiAgICogcGFnZS5cbiAgICovXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZGFpbHlHaWZ0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkYWlseS1naWZ0LWNvbnRhaW5lclwiKVxuICAgIGlmIChcbiAgICAgICFkYWlseUdpZnRDb250YWluZXIgfHxcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZGFpbHlHaWZ0Q29udGFpbmVyKS5kaXNwbGF5ID09PSBcIm5vbmVcIlxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgZGFpbHlHaWZ0Q29udGFpbmVyLmNsaWNrKClcbiAgICBhd2FpdCBjbGljazxIVE1MQnV0dG9uRWxlbWVudD4oXCIuZmlyc3QtY29ubmV4aW9uIC5mbGF2ci1idXR0b24uZGVmYXVsdFwiKVxuXG4gICAgcmVzZXRUYWtlb3ZlcigpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IERhaWx5QWN0aW9uKClcbiIsImltcG9ydCB7IGNhcHR1cmVFbmQgfSBmcm9tIFwiLi4vLi4vYWpheC9jYXB0dXJlX2VuZFwiXG5pbXBvcnQgeyBjaGFuZ2VSZWdpb24gfSBmcm9tIFwiLi4vLi4vYWpheC9jaGFuZ2VfcmVnaW9uXCJcbmltcG9ydCB7IGV4cGxvcmF0aW9uUmVzdWx0cyB9IGZyb20gXCIuLi8uLi9hamF4L2V4cGxvcmF0aW9uX3Jlc3VsdHNcIlxuaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcIi4uLy4uL2FwaS9yZXN1bHQuZW51bVwiXG5pbXBvcnQgeyBDb25zb2xlIH0gZnJvbSBcIi4uLy4uL2NvbnNvbGVcIlxuaW1wb3J0IHsgRHVyYXRpb25Vbml0IH0gZnJvbSBcIi4uLy4uL2R1cmF0aW9uXCJcbmltcG9ydCB0eXBlIHsgTWFwUmVnaW9uLCBTZWFzb24gfSBmcm9tIFwiLi4vLi4vZWxkYXJ5YS9jdXJyZW50X3JlZ2lvblwiXG5pbXBvcnQgdHlwZSB7IFBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbiB9IGZyb20gXCIuLi8uLi9lbGRhcnlhL3RyZWFzdXJlXCJcbmltcG9ydCB0eXBlIHsgQXV0b0V4cGxvcmVMb2NhdGlvbiB9IGZyb20gXCIuLi8uLi9sb2NhbF9zdG9yYWdlL2F1dG9fZXhwbG9yZV9sb2NhdGlvblwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuaW1wb3J0IHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcbmltcG9ydCB7IGNsaWNrIH0gZnJvbSBcIi4uL2NsaWNrXCJcbmltcG9ydCB7IEV4cGxvcmF0aW9uU3RhdHVzIH0gZnJvbSBcIi4uL2V4cGxvcmF0aW9uX3N0YXR1cy5lbnVtXCJcbmltcG9ydCB0eXBlIHsgU3RhcnRFeHBsb3JhdGlvbiB9IGZyb20gXCIuLi9zdGFydF9leHBsb3JhdGlvblwiXG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25cIlxuXG5jbGFzcyBFeHBsb3JhdGlvbkFjdGlvbiBleHRlbmRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IGtleSA9IFRha2VvdmVyQWN0aW9uLmV4cGxvcmF0aW9uc1xuXG4gIHByaXZhdGUgZ2V0IGdsb2JhbHMoKToge1xuICAgIGN1cnJlbnRSZWdpb246IE1hcFJlZ2lvblxuICAgIHBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbjogUGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uIHwgbnVsbFxuICAgIHRpbWVMZWZ0RXhwbG9yYXRpb246IG51bWJlciB8IG51bGxcbiAgfSB7XG4gICAgcmV0dXJuIHsgY3VycmVudFJlZ2lvbiwgcGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uLCB0aW1lTGVmdEV4cGxvcmF0aW9uIH1cbiAgfVxuXG4gIGNvbmRpdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgTG9jYWxTdG9yYWdlLmV4cGxvcmF0aW9ucyAmJlxuICAgICAgIVNlc3Npb25TdG9yYWdlLmV4cGxvcmF0aW9uc0RvbmUgJiZcbiAgICAgICEhTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zLmxlbmd0aFxuICAgIClcbiAgfVxuXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lICE9PSBcIi9wZXRcIikge1xuICAgICAgcGFnZUxvYWQoXCIvcGV0XCIpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuZ2V0RXhwbG9yYXRpb25TdGF0dXMoKVxuICAgIENvbnNvbGUubG9nKFwiRXhwbG9yYXRpb24gc3RhdHVzOlwiLCBFeHBsb3JhdGlvblN0YXR1c1tzdGF0dXNdKVxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlIEV4cGxvcmF0aW9uU3RhdHVzLmlkbGU6XG4gICAgICAgIGlmICghKGF3YWl0IHRoaXMuc3RhcnRFeHBsb3JhdGlvbigpKS5zZWxlY3RlZClcbiAgICAgICAgICBTZXNzaW9uU3RvcmFnZS5leHBsb3JhdGlvbnNEb25lID0gdHJ1ZVxuICAgICAgICByZXR1cm4gZmFsc2VcblxuICAgICAgY2FzZSBFeHBsb3JhdGlvblN0YXR1cy5wZW5kaW5nOlxuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMud2FpdEV4cGxvcmF0aW9uKCkpICYmIHRoaXMucGVyZm9ybSgpXG5cbiAgICAgIGNhc2UgRXhwbG9yYXRpb25TdGF0dXMucmVzdWx0OlxuICAgICAgICBhd2FpdCB0aGlzLmVuZEV4cGxvcmF0aW9uKClcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybSgpXG5cbiAgICAgIGNhc2UgRXhwbG9yYXRpb25TdGF0dXMuY2FwdHVyZTpcbiAgICAgICAgYXdhaXQgdGhpcy5lbmRDYXB0dXJlKClcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybSgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2xpY2tFeHBsb3JlKCk6IFByb21pc2U8SFRNTEJ1dHRvbkVsZW1lbnQ+IHtcbiAgICByZXR1cm4gY2xpY2soXCIjZXhwbG9yZS1idXR0b25cIilcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2xpY2tMb2NhdGlvbihcbiAgICBzZWxlY3RlZDogQXV0b0V4cGxvcmVMb2NhdGlvblxuICApOiBQcm9taXNlPEhUTUxEaXZFbGVtZW50PiB7XG4gICAgcmV0dXJuIGNsaWNrPEhUTUxEaXZFbGVtZW50PihcbiAgICAgIGAubWFwLWxvY2F0aW9uW2RhdGEtaWQ9XCIke3NlbGVjdGVkLmxvY2F0aW9uLmlkfVwiXWBcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGNsaWNrUmVnaW9uKHNlbGVjdGVkOiBBdXRvRXhwbG9yZUxvY2F0aW9uKTogSFRNTERpdkVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICAgIGAubWluaW1hcFtkYXRhLW1hcGlkPVwiJHtzZWxlY3RlZC5yZWdpb24uaWR9XCJdYFxuICAgIClcblxuICAgIGlmICghZGl2KSB7XG4gICAgICAvLyBDbGVhcmluZyBpbnZhbGlkIHJlZ2lvbnMgaXMgdXNlZnVsIHRvIHJlbW92ZSBmaW5pc2hlZCBldmVudHMuXG4gICAgICBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMgPVxuICAgICAgICBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMuZmlsdGVyKFxuICAgICAgICAgIHNhdmVkID0+IHNhdmVkLnJlZ2lvbi5pZCAhPT0gc2VsZWN0ZWQucmVnaW9uLmlkXG4gICAgICAgIClcblxuICAgICAgU2Vzc2lvblN0b3JhZ2Uuc2VsZWN0ZWRMb2NhdGlvbiA9IG51bGxcbiAgICAgIHBhZ2VMb2FkKFwiL3BldFwiKVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBkaXYuY2xpY2soKVxuICAgIHJldHVybiBkaXZcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2xpY2tTZWFzb24oKTogUHJvbWlzZTxIVE1MSW1hZ2VFbGVtZW50PiB7XG4gICAgcmV0dXJuIGNsaWNrPEhUTUxJbWFnZUVsZW1lbnQ+KFwiI2NyeXN0YWwtaW1hZ2VzLWNvbnRhaW5lclwiKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlbmRDYXB0dXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB2b2lkIG5ldyBBdWRpbyhcbiAgICAgICAgXCIvc3RhdGljL2V2ZW50LzIwMjEvbXVzaWMvc291bmRzL21pc3Npb24tY29tcGxldGUubXAzXCJcbiAgICAgICkucGxheSgpXG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuXG4gICAgYXdhaXQgY2xpY2s8SFRNTEJ1dHRvbkVsZW1lbnQ+KFwiI29wZW4tY2FwdHVyZS1pbnRlcmZhY2VcIilcbiAgICBhd2FpdCBjbGljazxIVE1MQnV0dG9uRWxlbWVudD4oXCIjY2FwdHVyZS1idXR0b25cIilcbiAgICBhd2FpdCBjbGljazxIVE1MQnV0dG9uRWxlbWVudD4oXCIjY2xvc2UtcmVzdWx0XCIpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuZEV4cGxvcmF0aW9uKCk6IFByb21pc2U8SFRNTERpdkVsZW1lbnQ+IHtcbiAgICByZXR1cm4gY2xpY2soXCIjY2xvc2UtcmVzdWx0XCIpXG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRTZWFzb24oKTogU2Vhc29uIHtcbiAgICByZXR1cm4gKEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIik/LmNsYXNzTGlzdCA/PyBbXSlcbiAgICAgIC5maW5kKGMgPT4gYy5zdGFydHNXaXRoKFwic2Vhc29uLVwiKSlcbiAgICAgID8ucmVwbGFjZShcInNlYXNvbi1cIiwgXCJcIikgPz8gbnVsbCkgYXMgU2Vhc29uXG4gIH1cblxuICBwcml2YXRlIGdldEV4cGxvcmF0aW9uU3RhdHVzKCk6IEV4cGxvcmF0aW9uU3RhdHVzIHtcbiAgICBpZiAoXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBcIiN0cmVhc3VyZS1odW50LXJlc3VsdC1vdmVybGF5LmFjdGl2ZSAjb3Blbi1jYXB0dXJlLWludGVyZmFjZVwiXG4gICAgICApIHx8XG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2NhcHR1cmUtaW50ZXJmYWNlLW91dGVyLmFjdGl2ZVwiKVxuICAgICkge1xuICAgICAgcmV0dXJuIEV4cGxvcmF0aW9uU3RhdHVzLmNhcHR1cmVcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNwZW5kaW5nLW1hcC1sb2NhdGlvbi1kYXRhLW91dGVyLmFjdGl2ZVwiKSB8fFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNtYXAtY29udGFpbmVyLnBlbmRpbmdcIilcbiAgICApIHtcbiAgICAgIHJldHVybiBFeHBsb3JhdGlvblN0YXR1cy5wZW5kaW5nXG4gICAgfSBlbHNlIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3RyZWFzdXJlLWh1bnQtcmVzdWx0LW92ZXJsYXkuYWN0aXZlXCIpKVxuICAgICAgcmV0dXJuIEV4cGxvcmF0aW9uU3RhdHVzLnJlc3VsdFxuICAgIHJldHVybiBFeHBsb3JhdGlvblN0YXR1cy5pZGxlXG4gIH1cblxuICBwcml2YXRlIGdldExvd2VzdEVuZXJneUxvY2F0aW9uKCk6IEF1dG9FeHBsb3JlTG9jYXRpb24ge1xuICAgIHJldHVybiBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMucmVkdWNlKChsb3dlc3QsIHBsYWNlKSA9PlxuICAgICAgTnVtYmVyKHBsYWNlLmxvY2F0aW9uLmVuZXJneVJlcXVpcmVkKSA8XG4gICAgICBOdW1iZXIobG93ZXN0LmxvY2F0aW9uLmVuZXJneVJlcXVpcmVkKVxuICAgICAgICA/IHBsYWNlXG4gICAgICAgIDogbG93ZXN0XG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZExvY2F0aW9uKCk6IEF1dG9FeHBsb3JlTG9jYXRpb24gfCBudWxsIHtcbiAgICBsZXQgc2VsZWN0ZWQgPSBTZXNzaW9uU3RvcmFnZS5zZWxlY3RlZExvY2F0aW9uXG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdExvY2F0aW9uKClcbiAgICAgIFNlc3Npb25TdG9yYWdlLnNlbGVjdGVkTG9jYXRpb24gPSBzZWxlY3RlZFxuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3RlZFxuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RMb2NhdGlvbigpOiBBdXRvRXhwbG9yZUxvY2F0aW9uIHwgbnVsbCB7XG4gICAgY29uc3QgYWZmb3JkYWJsZSA9IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5maWx0ZXIoXG4gICAgICBzYXZlZCA9PiBOdW1iZXIoc2F2ZWQubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpIDw9IHBldEVuZXJneVxuICAgIClcblxuICAgIGNvbnN0IG1pbmltdW1FbmVyZ3kgPSB0aGlzLmdldExvd2VzdEVuZXJneUxvY2F0aW9uKClcbiAgICBjb25zdCBub3REZWFkRW5kID0gYWZmb3JkYWJsZS5maWx0ZXIoXG4gICAgICBwbGFjZSA9PlxuICAgICAgICBwZXRFbmVyZ3kgLSBOdW1iZXIocGxhY2UubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpID49XG4gICAgICAgIE51bWJlcihtaW5pbXVtRW5lcmd5LmxvY2F0aW9uLmVuZXJneVJlcXVpcmVkKVxuICAgIClcbiAgICBpZiAobm90RGVhZEVuZC5sZW5ndGgpXG4gICAgICByZXR1cm4gbm90RGVhZEVuZFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBub3REZWFkRW5kLmxlbmd0aCldID8/IG51bGxcblxuICAgIGNvbnN0IHNhbWVFbmVyZ3kgPSBhZmZvcmRhYmxlLmZpbHRlcihcbiAgICAgIHBsYWNlID0+IE51bWJlcihwbGFjZS5sb2NhdGlvbi5lbmVyZ3lSZXF1aXJlZCkgPT09IHBldEVuZXJneVxuICAgIClcbiAgICBpZiAoc2FtZUVuZXJneS5sZW5ndGgpXG4gICAgICByZXR1cm4gc2FtZUVuZXJneVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBzYW1lRW5lcmd5Lmxlbmd0aCldID8/IG51bGxcblxuICAgIHJldHVybiBhZmZvcmRhYmxlW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFmZm9yZGFibGUubGVuZ3RoKV0gPz8gbnVsbFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdGFydEV4cGxvcmF0aW9uKCk6IFByb21pc2U8U3RhcnRFeHBsb3JhdGlvbj4ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5nZXRTZWxlY3RlZExvY2F0aW9uKClcbiAgICBpZiAoIXNlbGVjdGVkKSByZXR1cm4geyBleHBsb3Jpbmc6IGZhbHNlLCBzZWxlY3RlZCB9XG4gICAgQ29uc29sZS5pbmZvKFwiRXhwbG9yaW5nXCIsIHNlbGVjdGVkKVxuXG4gICAgLy8gR28gdG8gc2Vhc29uXG4gICAgaWYgKFxuICAgICAgc2VsZWN0ZWQucmVnaW9uLnNlYXNvbiAmJlxuICAgICAgdGhpcy5nZXRDdXJyZW50U2Vhc29uKCkgIT09IHNlbGVjdGVkLnJlZ2lvbi5zZWFzb25cbiAgICApIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xpY2tTZWFzb24oKVxuICAgICAgcmV0dXJuIHsgZXhwbG9yaW5nOiBmYWxzZSwgc2VsZWN0ZWQgfVxuICAgIH1cblxuICAgIC8vIEdvIHRvIHJlZ2lvblxuICAgIHRoaXMuY2xpY2tSZWdpb24oc2VsZWN0ZWQpXG5cbiAgICAvLyBHbyB0byBsb2NhdGlvblxuICAgIGF3YWl0IHRoaXMuY2xpY2tMb2NhdGlvbihzZWxlY3RlZClcbiAgICBhd2FpdCB0aGlzLmNsaWNrRXhwbG9yZSgpXG5cbiAgICBTZXNzaW9uU3RvcmFnZS5zZWxlY3RlZExvY2F0aW9uID0gbnVsbFxuICAgIHJldHVybiB7IGV4cGxvcmluZzogdHJ1ZSwgc2VsZWN0ZWQgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdhaXQgZm9yIHVwIHRvIDEwIG1pbnV0ZXMuXG4gICAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIGV4cGxvcmF0aW9uIGlzIGZpbmlzaGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB3YWl0RXhwbG9yYXRpb24oXG4gICAgc2VsZWN0ZWQ/OiBBdXRvRXhwbG9yZUxvY2F0aW9uXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGRvY3VtZW50XG4gICAgICAucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgICAgIGAubWluaW1hcFtkYXRhLW1hcGlkPVwiJHtzZWxlY3RlZD8ucmVnaW9uLmlkID8/IGN1cnJlbnRSZWdpb24uaWR9XCJdYFxuICAgICAgKVxuICAgICAgPy5jbGljaygpXG5cbiAgICBsZXQgbXMgPSAzICogRHVyYXRpb25Vbml0LnNlY29uZFxuICAgIGlmIChzZWxlY3RlZCkgbXMgKz0gc2VsZWN0ZWQubG9jYXRpb24udGltZVRvRXhwbG9yZSAqIER1cmF0aW9uVW5pdC5taW51dGVcbiAgICBlbHNlIGlmICh0aW1lTGVmdEV4cGxvcmF0aW9uICYmIHRpbWVMZWZ0RXhwbG9yYXRpb24gPiAwKVxuICAgICAgbXMgKz0gdGltZUxlZnRFeHBsb3JhdGlvbiAqIER1cmF0aW9uVW5pdC5zZWNvbmRcbiAgICBlbHNlIGlmIChcbiAgICAgICFwZW5kaW5nVHJlYXN1cmVIdW50TG9jYXRpb24gJiZcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjbWFwLWNvbnRhaW5lci5wZW5kaW5nXCIpXG4gICAgKSB7XG4gICAgICBjb25zdCBqc29uID0gYXdhaXQgZXhwbG9yYXRpb25SZXN1bHRzKClcbiAgICAgIGlmIChqc29uLnJlc3VsdCAhPT0gUmVzdWx0LnN1Y2Nlc3MpIHJldHVybiBmYWxzZVxuXG4gICAgICBjb25zdCBjYXB0dXJlID0ganNvbi5kYXRhLnJlc3VsdHMuZmluZChcbiAgICAgICAgcmVzdWx0ID0+IHJlc3VsdC50eXBlID09PSBcImNhcHR1cmVcIlxuICAgICAgKVxuICAgICAgaWYgKCFjYXB0dXJlKSByZXR1cm4gZmFsc2VcbiAgICAgIGF3YWl0IGNhcHR1cmVFbmQoKVxuXG4gICAgICAvLyBSZWxvYWRpbmcgaXMgdGhlIG9ubHkgcG9zc2libGUgYWN0aW9uIGlmIHRoZSBleHBsb3JhdGlvbiBmaW5pc2hlZCBpbiBhXG4gICAgICAvLyBkaWZmZXJlbnQgcmVnaW9uLlxuICAgICAgQ29uc29sZS5lcnJvcihcbiAgICAgICAgXCJSZWxvYWRpbmcgYmVjYXVzZSB0aGUgZXhwbG9yYXRpb24gaXMgaW4gYW5vdGhlciByZWdpb24uXCIsXG4gICAgICAgIHRoaXMuZ2xvYmFsc1xuICAgICAgKVxuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIER1cmF0aW9uVW5pdC5taW51dGUpKVxuICAgICAgcGFnZUxvYWQoXCIvcGV0XCIpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmIChtcyA+IDEwICogRHVyYXRpb25Vbml0Lm1pbnV0ZSkgcmV0dXJuIGZhbHNlXG5cbiAgICBDb25zb2xlLmxvZyhcbiAgICAgIGBXYWl0aW5nIGZvciB0aGUgZXhwbG9yYXRpb24gdG8gZW5kIGluICR7TWF0aC5jZWlsKFxuICAgICAgICBtcyAvIER1cmF0aW9uVW5pdC5zZWNvbmRcbiAgICAgICl9IHNlY29uZHMuLi5gLFxuICAgICAgdGhpcy5nbG9iYWxzXG4gICAgKVxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpXG4gICAgYXdhaXQgY2hhbmdlUmVnaW9uKE51bWJlcihzZWxlY3RlZD8ucmVnaW9uLmlkID8/IGN1cnJlbnRSZWdpb24uaWQpKVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5nZXRFeHBsb3JhdGlvblN0YXR1cygpID09PSBFeHBsb3JhdGlvblN0YXR1cy5wZW5kaW5nICYmXG4gICAgICB0aW1lTGVmdEV4cGxvcmF0aW9uICYmXG4gICAgICB0aW1lTGVmdEV4cGxvcmF0aW9uIDwgMFxuICAgICkge1xuICAgICAgQ29uc29sZS5pbmZvKFxuICAgICAgICBcIlJlbG9hZGluZyBiZWNhdXNlIHRoZSB0aW1lciBpcyBkZXN5bmNocm9uaXNlZC5cIixcbiAgICAgICAgdGhpcy5nbG9iYWxzXG4gICAgICApXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgRHVyYXRpb25Vbml0LnNlY29uZCkpXG4gICAgICBwYWdlTG9hZChcIi9wZXRcIilcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBFeHBsb3JhdGlvbkFjdGlvbigpXG4iLCJpbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB7IHBsYXlGbGFwcHksIHBsYXlIYXRjaGxpbmdzLCBwbGF5UGVnZ2xlIH0gZnJvbSBcIi4uLy4uL21pbmlnYW1lcy9lbWlsZVwiXG5pbXBvcnQgeyBmbGFwcHkgfSBmcm9tIFwiLi4vLi4vbWluaWdhbWVzL2ZsYXBweVwiXG5pbXBvcnQgeyBoYXRjaGxpbmdzIH0gZnJvbSBcIi4uLy4uL21pbmlnYW1lcy9oYXRjaGxpbmdzXCJcbmltcG9ydCB0eXBlIHsgTWluaWdhbWUgfSBmcm9tIFwiLi4vLi4vbWluaWdhbWVzL21pbmlnYW1lXCJcbmltcG9ydCB7IHBlZ2dsZSB9IGZyb20gXCIuLi8uLi9taW5pZ2FtZXMvcGVnZ2xlXCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuaW1wb3J0IHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcbmltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCJcblxuY2xhc3MgTWluaWdhbWVBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSBrZXkgPSBUYWtlb3ZlckFjdGlvbi5taW5pZ2FtZXNcblxuICBjb25kaXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIExvY2FsU3RvcmFnZS5taW5pZ2FtZXMgJiYgIVNlc3Npb25TdG9yYWdlLm1pbmlnYW1lc0RvbmVcbiAgfVxuXG4gIC8qKiBEZXRlcm1pbmVzIGlmIHRoZSBtaW5pZ2FtZXMgc2hvdWxkIGJlIHBsYXllZCByaWdodCBub3cuXG4gICAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIG1pbmlnYW1lcyBhcmUgY3VycmVudGx5IGJlaW5nIHBsYXllZC5cbiAgICovXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgc3dpdGNoIChsb2NhdGlvbi5wYXRobmFtZSkge1xuICAgICAgY2FzZSBcIi9taW5pZ2FtZXNcIjoge1xuICAgICAgICBjb25zdCBwbGF5aW5nID1cbiAgICAgICAgICB0aGlzLm9wZW5NaW5pZ2FtZShwZWdnbGUpIHx8XG4gICAgICAgICAgdGhpcy5vcGVuTWluaWdhbWUoZmxhcHB5KSB8fFxuICAgICAgICAgIHRoaXMub3Blbk1pbmlnYW1lKGhhdGNobGluZ3MpXG5cbiAgICAgICAgaWYgKCFwbGF5aW5nKSB7XG4gICAgICAgICAgU2Vzc2lvblN0b3JhZ2UubWluaWdhbWVzRG9uZSA9IHRydWVcbiAgICAgICAgICBkb2N1bWVudFxuICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTEJ1dHRvbkVsZW1lbnQ+KFxuICAgICAgICAgICAgICAnLm1pbmlnYW1lcy1ydWxlcyBbcmVsPVwiYnRuLWNhbmNlbFwiXSdcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgID8uY2xpY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBsYXlpbmdcbiAgICAgIH1cblxuICAgICAgY2FzZSBcIi9taW5pZ2FtZXMvZ2VtYm9tYlwiOlxuICAgICAgICBhd2FpdCBwbGF5UGVnZ2xlKClcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSBcIi9taW5pZ2FtZXMvYnViYmx0ZW1wbGVcIjpcbiAgICAgICAgYXdhaXQgcGxheUZsYXBweSgpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgXCIvbWluaWdhbWVzL2NvY29vbmlucGlja1wiOlxuICAgICAgICBhd2FpdCBwbGF5SGF0Y2hsaW5ncygpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHBhZ2VMb2FkKFwiL21pbmlnYW1lc1wiKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHBhZ2VMb2FkKFwiL21pbmlnYW1lc1wiKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKiogQ2xpY2sgb24gYSBtaW5pZ2FtZSdzIGxpbmsuIEByZXR1cm5zIHdoZXRoZXIgdGhlIG1pbmlnYW1lIHdhcyBvcGVuZWQuICovXG4gIHByaXZhdGUgb3Blbk1pbmlnYW1lKG1pbmlnYW1lOiBNaW5pZ2FtZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0YXJ0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MU3BhbkVsZW1lbnQ+KFxuICAgICAgbWluaWdhbWUuYnV0dG9uU2VsZWN0b3JcbiAgICApXG4gICAgaWYgKCFzdGFydCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgc3RhcnQuY2xpY2soKVxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IE1pbmlnYW1lQWN0aW9uKClcbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vLi4vYXBpL3BhY2tldFwiXG5pbXBvcnQgeyBDb25zb2xlIH0gZnJvbSBcIi4uLy4uL2NvbnNvbGVcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uLy4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHsgTWF0aFV0aWwgfSBmcm9tIFwiLi4vLi4vbWF0aF91dGlsXCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuaW1wb3J0IHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvblwiXG5cbmNsYXNzIFN1bW1lckdhbWVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xuICByZWFkb25seSBrZXk6IFRha2VvdmVyQWN0aW9uID0gVGFrZW92ZXJBY3Rpb24uc3VtbWVyR2FtZVxuXG4gIGNvbmRpdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgTG9jYWxTdG9yYWdlLm1pbmlnYW1lcyAmJlxuICAgICAgIVNlc3Npb25TdG9yYWdlLnN1bW1lckdhbWVEb25lICYmXG4gICAgICAhIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2FbaHJlZj1cIi9ldmVudC9zdW1tZXJcIl0nKVxuICAgIClcbiAgfVxuXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lICE9PSBcIi9ldmVudC9zdW1tZXIvZ2FtZVwiKSB7XG4gICAgICBwYWdlTG9hZChcIi9ldmVudC9zdW1tZXIvZ2FtZVwiKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMzAwMCkpXG5cbiAgICBjb25zdCBwbGF5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MQnV0dG9uRWxlbWVudD4oXG4gICAgICAnYnV0dG9uLnN1bW1lcjIwMjEtYnV0dG9uLmV2ZW50LWNvaW4tYnV0dG9uLmFjdGl2ZVtkYXRhLWN1cnJlbmN5PVwidG9rZW5cIl0nXG4gICAgKVxuICAgIENvbnNvbGUubG9nKFwiTG9va2luZyBmb3IgcGxheSBidXR0b246XCIsIHBsYXkpXG4gICAgaWYgKCFwbGF5KSB7XG4gICAgICBTZXNzaW9uU3RvcmFnZS5zdW1tZXJHYW1lRG9uZSA9IHRydWVcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ZWQgPSBhd2FpdCBzdW1tZXJHYW1lU3RhcnQoKVxuICAgIGlmIChzdGFydGVkLnJlc3VsdCAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgIFNlc3Npb25TdG9yYWdlLnN1bW1lckdhbWVEb25lID0gdHJ1ZVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcGxheS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpXG4gICAgcGxheS5jbGFzc0xpc3QuYWRkKFwiaW5hY3RpdmVcIilcblxuICAgIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi90ZW1wbGF0ZXMvaHRtbC9mbGF2cl9ub3RpZi9pY29uX21lc3NhZ2UuaHRtbFwiKVxuICAgICQuZmxhdnJOb3RpZihcbiAgICAgIHRlbXBsYXRlLnJlbmRlcih7XG4gICAgICAgIGljb246IFwiL3N0YXRpYy9ldmVudC9taW5pZ2FtZXMvc25ha2UvaW1nL2hlYWQucG5nXCIsXG4gICAgICAgIG1lc3NhZ2U6IHRyYW5zbGF0ZS5taW5pZ2FtZXMucGxheWluZyhcIlNuYWtlXCIpLFxuICAgICAgfSlcbiAgICApXG5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZTxib29sZWFuPihyZXNvbHZlID0+XG4gICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PiByZXNvbHZlKHRydWUpLFxuICAgICAgICBNYXRoVXRpbC5yYW5kb21CZXR3ZWVuKDYwXzAwMCAqIDAuOCwgNjBfMDAwKVxuICAgICAgKVxuICAgIClcblxuICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgc3VtbWVyR2FtZVNhdmUoKVxuICAgIGlmIChzYXZlZC5yZXN1bHQgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICBTZXNzaW9uU3RvcmFnZS5zdW1tZXJHYW1lRG9uZSA9IHRydWVcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgICQuZmxhdnJOb3RpZihcbiAgICAgIHRlbXBsYXRlLnJlbmRlcih7XG4gICAgICAgIGljb246IFwiL3N0YXRpYy9ldmVudC9taW5pZ2FtZXMvc25ha2UvaW1nL2hlYWQucG5nXCIsXG4gICAgICAgIG1lc3NhZ2U6IHRyYW5zbGF0ZS5taW5pZ2FtZXMucGxheWVkKFwiU25ha2VcIiksXG4gICAgICB9KVxuICAgIClcblxuICAgIHBhZ2VMb2FkKFwiL2V2ZW50L3N1bW1lci9nYW1lXCIpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdW1tZXJHYW1lU3RhcnQoKTogUHJvbWlzZTxQYWNrZXQ8XCJcIj4+IHtcbiAgY29uc3QgY3VycmVuY3kgPSBcInRva2VuXCJcblxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgdm9pZCAkLnBvc3QoXG4gICAgICBcIi9ldmVudC9zdW1tZXIvZ2FtZS9zdGFydFwiLFxuICAgICAgeyBjdXJyZW5jeTogY3VycmVuY3kgfSxcbiAgICAgIGZ1bmN0aW9uIChqc29uOiBQYWNrZXQ8XCJcIj4pIHtcbiAgICAgICAgaWYgKGpzb24ucmVzdWx0ICE9PSBcInN1Y2Nlc3NcIikgJC5mbGF2ck5vdGlmKGpzb24uZGF0YSlcblxuICAgICAgICByZXNvbHZlKGpzb24pXG4gICAgICB9XG4gICAgKVxuICB9KVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdW1tZXJHYW1lU2F2ZSgpOiBQcm9taXNlPFBhY2tldDxTdW1tZXJHYW1lU2F2ZURhdGE+PiB7XG4gIGNvbnN0IHdpbiA9IHRydWVcblxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgdm9pZCAkLnBvc3QoXG4gICAgICBcIi9ldmVudC9zdW1tZXIvZ2FtZS9zYXZlXCIsXG4gICAgICB7IHdpbjogd2luIH0sXG4gICAgICBmdW5jdGlvbiAoanNvbjogUGFja2V0PFN1bW1lckdhbWVTYXZlRGF0YT4pIHtcbiAgICAgICAgaWYgKGpzb24ucmVzdWx0ICE9PSBcInN1Y2Nlc3NcIikgJC5mbGF2ck5vdGlmKGpzb24uZGF0YSlcblxuICAgICAgICByZXNvbHZlKGpzb24pXG4gICAgICB9XG4gICAgKVxuICB9KVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1bW1lckdhbWVTYXZlRGF0YSB7XG4gIGZyYWdtZW50OiBib29sZWFuIHwgbnVtYmVyXG4gIGxhc3RGcmFnbWVudDogYm9vbGVhblxuICB2aWV3OiBWaWV3XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlldyB7XG4gIGFjdGl2ZUdhbWU6IGJvb2xlYW5cbiAgZW5kRXZlbnQ6IGJvb2xlYW5cbiAgZnJhZ21lbnRzT3duZWQ6IG51bWJlclxuICBmcmFnbWVudHNUb3RhbDogbnVtYmVyXG4gIHBldFVubG9ja2VkOiBib29sZWFuXG4gIHJlbWFpbmluZ1RpbWU6IG51bWJlclxuICBzZXJ2ZXJSZXdhcmRDdXJyZW50OiBudW1iZXJcbiAgc2VydmVyUmV3YXJkUGVyY2VudGFnZTogbnVtYmVyXG4gIHNlcnZlclJld2FyZFRvdGFsOiBudW1iZXJcbiAgc2hvdWxkQ2hvb3NlQmFua091dGZpdDogYm9vbGVhblxuICB0b2tlbnM6IG51bWJlclxuICB0cmFpbmluZ0F2YWlsYWJsZTogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3Qgc3VtbWVyR2FtZUFjdGlvbiA9IG5ldyBTdW1tZXJHYW1lQWN0aW9uKClcbiIsImltcG9ydCB7IENvbnNvbGUgfSBmcm9tIFwiLi4vLi4vY29uc29sZVwiXG5pbXBvcnQgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCJcblxuY2xhc3MgV2FpdEFjdGlvbiBleHRlbmRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IGtleSA9IFRha2VvdmVyQWN0aW9uLndhaXRcblxuICBjb25kaXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgQ29uc29sZS5sb2coYFdhaXRpbmcgZm9yIDEwIG1pbnV0ZXMuLi5gKVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KHJlc29sdmUgPT5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZShmYWxzZSksIDEwICogNjAgKiAxMDAwKVxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgV2FpdEFjdGlvbigpXG4iLCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xpY2s8VCBleHRlbmRzIEhUTUxFbGVtZW50PihcbiAgc2VsZWN0b3I6IHN0cmluZ1xuKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxUPihyZXNvbHZlID0+IHtcbiAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPFQ+KHNlbGVjdG9yKVxuICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm5cbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpXG5cbiAgICAgIC8vIFNvbWUgZWxlbWVudHMgZG9uJ3QgaGF2ZSB0aGVpciBjbGljayBoYW5kbGVycyByZWFkeSB1bnRpbCB0aGV5J3JlXG4gICAgICAvLyBob3ZlcmVkLlxuICAgICAgY29uc3QgbW91c2VFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiTW91c2VFdmVudFwiKVxuICAgICAgbW91c2VFdmVudC5pbml0RXZlbnQoXCJtb3VzZW92ZXJcIilcbiAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChtb3VzZUV2ZW50KVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWxlbWVudC5jbGljaygpXG4gICAgICAgIHJlc29sdmUoZWxlbWVudClcbiAgICAgIH0sIDgwMClcbiAgICB9LCA4MDApXG4gIH0pXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0PFQgZXh0ZW5kcyBIVE1MRWxlbWVudD4oXG4gIHNlbGVjdG9yOiBzdHJpbmdcbik6IFByb21pc2U8VD4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8VD4ocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxUPihzZWxlY3RvcilcbiAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuXG5cbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpXG4gICAgICByZXNvbHZlKGVsZW1lbnQpXG4gICAgfSwgODAwKVxuICB9KVxufVxuIiwiZXhwb3J0IGVudW0gRXhwbG9yYXRpb25TdGF0dXMge1xuICBpZGxlLFxuICByZXN1bHQsXG4gIGNhcHR1cmUsXG4gIHBlbmRpbmcsXG59XG4iLCJleHBvcnQgZnVuY3Rpb24gaXNFbnVtPFQ+KHZhbHVlOiB1bmtub3duLCBlbnVtZXJhdGlvbjogVCk6IHZhbHVlIGlzIFRba2V5b2YgVF0ge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhlbnVtZXJhdGlvbikuaW5jbHVkZXModmFsdWUpXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB0eXBlIHsgTWFya2V0SGlzdG9yeSB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9tYXJrZXRfaGlzdG9yeVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXVjdGlvbnMoKTogdm9pZCB7XG4gIGlmIChsb2NhdGlvbi5wYXRobmFtZSAhPT0gXCIvbWFya2V0cGxhY2UvYXVjdGlvbnNcIikgcmV0dXJuXG5cbiAgY29uc3QgbWFya2V0cGxhY2VBY3RpdmVBdWN0aW9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiI21hcmtldHBsYWNlLWFjdGl2ZS1hdWN0aW9uc1wiXG4gIClcbiAgaWYgKCFtYXJrZXRwbGFjZUFjdGl2ZUF1Y3Rpb25zKSByZXR1cm5cblxuICBjb25zdCBsYXlvdXQyY29sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgXCIubWFya2V0cGxhY2UtbWFpbi1jb250YWluZXIgI2xheW91dC0yY29sXCJcbiAgKVxuICBpZiAobGF5b3V0MmNvbCkgbGF5b3V0MmNvbC5zdHlsZS5vdmVyZmxvd1ggPSBcInZpc2libGVcIlxuXG4gIGxvYWRIaXN0b3J5KG1hcmtldHBsYWNlQWN0aXZlQXVjdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGxvYWRIaXN0b3J5KG1hcmtldHBsYWNlQWN0aXZlQXVjdGlvbnM6IEhUTUxEaXZFbGVtZW50KTogdm9pZCB7XG4gIG1hcmtldHBsYWNlQWN0aXZlQXVjdGlvbnMucXVlcnlTZWxlY3RvcihcInN0eWxlXCIpPy5yZW1vdmUoKVxuICBtYXJrZXRwbGFjZUFjdGl2ZUF1Y3Rpb25zLnF1ZXJ5U2VsZWN0b3IoXCIjcHVyY2hhc2UtaGlzdG9yeVwiKT8ucmVtb3ZlKClcbiAgbWFya2V0cGxhY2VBY3RpdmVBdWN0aW9ucy5xdWVyeVNlbGVjdG9yKFwiI3NhbGUtaGlzdG9yeVwiKT8ucmVtb3ZlKClcblxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvbWFya2V0X2hpc3RvcnkuaHRtbFwiKVxuICBjb25zdCBoaXN0b3J5OiBNYXJrZXRIaXN0b3J5ID0ge1xuICAgIHB1cmNoYXNlczogTG9jYWxTdG9yYWdlLnB1cmNoYXNlcy5tYXAocHVyY2hhc2UgPT4gKHtcbiAgICAgIC4uLnB1cmNoYXNlLFxuICAgICAgZGF0ZTogdHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5kYXRlX3RpbWVfZm9ybWF0LmZvcm1hdChcbiAgICAgICAgbmV3IERhdGUocHVyY2hhc2UuZGF0ZSlcbiAgICAgICksXG4gICAgfSkpLFxuICAgIHNhbGVzOiBMb2NhbFN0b3JhZ2Uuc2FsZXMubWFwKHNhbGUgPT4gKHtcbiAgICAgIC4uLnNhbGUsXG4gICAgICBkYXRlOiB0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmRhdGVfdGltZV9mb3JtYXQuZm9ybWF0KFxuICAgICAgICBuZXcgRGF0ZShzYWxlLmRhdGUpXG4gICAgICApLFxuICAgIH0pKSxcbiAgfVxuXG4gIG1hcmtldHBsYWNlQWN0aXZlQXVjdGlvbnMuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgdGVtcGxhdGUucmVuZGVyKHsgLi4uaGlzdG9yeSwgdHJhbnNsYXRlIH0pXG4gIClcblxuICBmb3IgKGNvbnN0IHB1cmNoYXNlIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTExJRWxlbWVudD4oXG4gICAgXCIjcHVyY2hhc2UtaGlzdG9yeSAubWFya2V0cGxhY2UtYXVjdGlvbnMtaXRlbVwiXG4gICkpIHtcbiAgICBjb25zdCBpdGVtaWQgPSBwdXJjaGFzZS5kYXRhc2V0Lml0ZW1pZFxuICAgIHB1cmNoYXNlLnF1ZXJ5U2VsZWN0b3IoXCIuZGVsZXRlLWJ1dHRvblwiKT8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIExvY2FsU3RvcmFnZS5wdXJjaGFzZXMgPSBMb2NhbFN0b3JhZ2UucHVyY2hhc2VzLmZpbHRlcihcbiAgICAgICAgcHVyY2hhc2UgPT4gcHVyY2hhc2UuaXRlbWlkICE9PSBpdGVtaWRcbiAgICAgIClcblxuICAgICAgbG9hZEhpc3RvcnkobWFya2V0cGxhY2VBY3RpdmVBdWN0aW9ucylcbiAgICB9KVxuICB9XG5cbiAgZm9yIChjb25zdCBzYWxlIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTExJRWxlbWVudD4oXG4gICAgXCIjc2FsZS1oaXN0b3J5IC5tYXJrZXRwbGFjZS1zYWxlcy1pdGVtXCJcbiAgKSkge1xuICAgIGNvbnN0IGljb24gPSBzYWxlLnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXCIuYWJzdHJhY3QtaWNvbiBpbWdcIik/LnNyY1xuICAgIHNhbGUucXVlcnlTZWxlY3RvcihcIi5kZWxldGUtYnV0dG9uXCIpPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgTG9jYWxTdG9yYWdlLnNhbGVzID0gTG9jYWxTdG9yYWdlLnNhbGVzLmZpbHRlcihzYWxlID0+IHNhbGUuaWNvbiAhPT0gaWNvbilcblxuICAgICAgbG9hZEhpc3RvcnkobWFya2V0cGxhY2VBY3RpdmVBdWN0aW9ucylcbiAgICB9KVxuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IGNhcm91c2VsQmVlbW9vdkFubm95YW5jZXMgfSBmcm9tIFwiLi4vY2Fyb3VzZWwvY2Fyb3VzZWxfYmVlbW9vdl9hbm5veWFuY2VzXCJcbmltcG9ydCB7IGNhcm91c2VsRG93bmxvYWRGYWNlIH0gZnJvbSBcIi4uL2Nhcm91c2VsL2Nhcm91c2VsX2Rvd25sb2FkX2ZhY2VcIlxuaW1wb3J0IHsgY2Fyb3VzZWxEb3dubG9hZEd1YXJkaWFuIH0gZnJvbSBcIi4uL2Nhcm91c2VsL2Nhcm91c2VsX2Rvd25sb2FkX2d1YXJkaWFuXCJcbmltcG9ydCB7IGNhcm91c2VsRUUgfSBmcm9tIFwiLi4vY2Fyb3VzZWwvY2Fyb3VzZWxfZWxkYXJ5YV9lbmhhbmNlbWVudHNcIlxuaW1wb3J0IHsgY2Fyb3VzZWxUYWtlb3ZlciB9IGZyb20gXCIuLi9jYXJvdXNlbC9jYXJvdXNlbF90YWtlb3ZlclwiXG5pbXBvcnQgeyBkb3dubG9hZEZhY2UsIGRvd25sb2FkR3VhcmRpYW4gfSBmcm9tIFwiLi4vZG93bmxvYWQtY2FudmFzXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuaW1wb3J0IHsgdG9nZ2xlVGFrZW92ZXIgfSBmcm9tIFwiLi4vdGFrZW92ZXIvYnJhaW5cIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZENhcm91c2VsKCk6IHZvaWQge1xuICBjb25zdCBjYXJvdXNlbElubmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNjYXJvdXNlbC1pbm5lclwiKVxuICBpZiAoIWNhcm91c2VsSW5uZXIgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5jYXJvdXNlbC1lZVwiKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gSW1wb3J0IGNhcm91c2VsIHRlbXBsYXRlXG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9jYXJvdXNlbF9uZXdzLmh0bWxcIilcblxuICBjb25zdCBjb250ZXh0cyA9IFtcbiAgICAvLyBJbnRyb1xuICAgIGNhcm91c2VsRUUsXG5cbiAgICAvLyBGZWF0dXJlc1xuICAgIC4uLihMb2NhbFN0b3JhZ2UubWluaWdhbWVzIHx8XG4gICAgTG9jYWxTdG9yYWdlLmV4cGxvcmF0aW9ucyB8fFxuICAgIExvY2FsU3RvcmFnZS5tYXJrZXRcbiAgICAgID8gW2Nhcm91c2VsVGFrZW92ZXJdXG4gICAgICA6IFtdKSxcbiAgICBjYXJvdXNlbERvd25sb2FkR3VhcmRpYW4sXG4gICAgY2Fyb3VzZWxEb3dubG9hZEZhY2UsXG5cbiAgICAvLyBBZHNcbiAgICBjYXJvdXNlbEJlZW1vb3ZBbm5veWFuY2VzLFxuICBdXG5cbiAgLy8gQWRkIGVudHJpZXMgdG8gdGhlIGNhcm91c2VsXG4gIGNhcm91c2VsSW5uZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgY29udGV4dHMubWFwKGJhbm5lciA9PiB0ZW1wbGF0ZS5yZW5kZXIoYmFubmVyKSkuam9pbihcIlxcblwiKVxuICApXG5cbiAgLy8gQWRkIGxpbmtzXG4gIGZvciAoY29uc3QgY2Fyb3VzZWwgb2YgY29udGV4dHMpIHtcbiAgICBpZiAoIWNhcm91c2VsLmhyZWYpIGNvbnRpbnVlXG5cbiAgICBjb25zdCBlbGVtZW50ID0gY2Fyb3VzZWxJbm5lci5xdWVyeVNlbGVjdG9yKGAjJHtjYXJvdXNlbC5pZH1gKVxuICAgIGlmICghZWxlbWVudCkgY29udGludWVcblxuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImFjdGl2ZVwiKSkgb3BlbihjYXJvdXNlbC5ocmVmLCBcIl9ibGFua1wiKVxuICAgIH0pXG4gIH1cblxuICAvLyBBZGQgY2xpY2sgZXZlbnRzXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoY2Fyb3VzZWxEb3dubG9hZEZhY2UuaWQpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZG93bmxvYWRGYWNlKVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKGNhcm91c2VsRG93bmxvYWRHdWFyZGlhbi5pZClcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBkb3dubG9hZEd1YXJkaWFuKVxuXG4gIGNvbnN0IHRha2VvdmVyQW5jaG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2Fyb3VzZWxUYWtlb3Zlci5pZClcbiAgdGFrZW92ZXJBbmNob3I/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgdG9nZ2xlVGFrZW92ZXIoKVxuICAgIHRha2VvdmVyVGl0bGUodGFrZW92ZXJBbmNob3IpXG4gIH0pXG5cbiAgaWYgKHRha2VvdmVyQW5jaG9yKSB0YWtlb3ZlclRpdGxlKHRha2VvdmVyQW5jaG9yKVxufVxuXG5mdW5jdGlvbiB0YWtlb3ZlclRpdGxlKHRha2VvdmVyQW5jaG9yOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICBjb25zdCB0YWtlb3Zlckg0ID0gdGFrZW92ZXJBbmNob3IucXVlcnlTZWxlY3RvcihcImg0XCIpXG4gIGlmICh0YWtlb3Zlckg0KSB7XG4gICAgdGFrZW92ZXJINC5pbm5lclRleHQgPSBTZXNzaW9uU3RvcmFnZS50YWtlb3ZlclxuICAgICAgPyB0cmFuc2xhdGUuY2Fyb3VzZWwudGFrZW92ZXIuZGlzYWJsZV90YWtlb3ZlclxuICAgICAgOiB0cmFuc2xhdGUuY2Fyb3VzZWwudGFrZW92ZXIuZW5hYmxlX3Rha2VvdmVyXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgc2F2ZUZhdm91cml0ZSwgc2hvd0Zhdm91cml0ZSB9IGZyb20gXCIuLi9hcHBlYXJhbmNlL2Zha2VfZmF2b3VyaXRlc1wiXG5pbXBvcnQgeyBleHBvcnRQcmV2aWV3LCBpbXBvcnRPdXRmaXQgfSBmcm9tIFwiLi4vYXBwZWFyYW5jZS9mYXZvdXJpdGVzX2FjdGlvbnNcIlxuaW1wb3J0IHsgZG93bmxvYWRBcHBlYXJhbmNlIH0gZnJvbSBcIi4uL2Rvd25sb2FkLWNhbnZhc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IGluZGV4ZWRfZGIgZnJvbSBcIi4uL2luZGV4ZWRfZGIvaW5kZXhlZF9kYlwiXG5pbXBvcnQgdHlwZSB7IEZhdm91cml0ZXNBY3Rpb24gfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvZmF2b3VyaXRlc19hY3Rpb25cIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZhdm91cml0ZXMoKTogdm9pZCB7XG4gIGxvYWRGYXZvdXJpdGVzQWN0aW9ucygpXG4gIHZvaWQgbG9hZEZha2VGYXZvdXJpdGVzKClcbn1cblxuZnVuY3Rpb24gbG9hZEZhdm91cml0ZXNBY3Rpb25zKCk6IHZvaWQge1xuICBjb25zdCBhY3Rpb25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJmYXZvcml0ZXMtYWN0aW9uc1wiKVxuICBpZiAoIWFjdGlvbnMgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mYXZvcml0ZXMtYWN0aW9uLWVlXCIpKSByZXR1cm5cblxuICBjb25zdCBhY3Rpb25UZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvZmF2b3VyaXRlc19hY3Rpb24uaHRtbFwiKVxuXG4gIGNvbnN0IGltcG9ydEFjdGlvbjogRmF2b3VyaXRlc0FjdGlvbiA9IHtcbiAgICBpZDogXCJpbXBvcnQtb3V0Zml0XCIsXG4gICAgdGV4dDogdHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5idXR0b25zLmltcG9ydCxcbiAgfVxuICBjb25zdCBleHBvcnRBY3Rpb246IEZhdm91cml0ZXNBY3Rpb24gPSB7XG4gICAgaWQ6IFwiZXhwb3J0LW91dGZpdFwiLFxuICAgIHRleHQ6IHRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuYnV0dG9ucy5leHBvcnQsXG4gIH1cbiAgY29uc3QgZG93bmxvYWRBY3Rpb246IEZhdm91cml0ZXNBY3Rpb24gPSB7XG4gICAgaWQ6IFwiZG93bmxvYWQtb3V0Zml0XCIsXG4gICAgdGV4dDogdHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5idXR0b25zLmRvd25sb2FkLFxuICB9XG5cbiAgYWN0aW9ucy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBhY3Rpb25UZW1wbGF0ZS5yZW5kZXIoaW1wb3J0QWN0aW9uKSArXG4gICAgICBhY3Rpb25UZW1wbGF0ZS5yZW5kZXIoZXhwb3J0QWN0aW9uKSArXG4gICAgICBhY3Rpb25UZW1wbGF0ZS5yZW5kZXIoZG93bmxvYWRBY3Rpb24pXG4gIClcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChpbXBvcnRBY3Rpb24uaWQpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaW1wb3J0T3V0Zml0KVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKGV4cG9ydEFjdGlvbi5pZClcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBleHBvcnRQcmV2aWV3KVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKGRvd25sb2FkQWN0aW9uLmlkKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGRvd25sb2FkQXBwZWFyYW5jZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRGYWtlRmF2b3VyaXRlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgdGh1bWJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhbGwtb3V0Zml0LXRodW1icyAubUNTQl9jb250YWluZXJcIilcbiAgaWYgKCF0aHVtYnMpIHJldHVyblxuXG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9vdXRmaXRfdGh1bWJzLmh0bWxcIilcblxuICBjb25zdCBmYXZvdXJpdGVzID0gYXdhaXQgaW5kZXhlZF9kYi5nZXRGYXZvdXJpdGVPdXRmaXRzKClcblxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2VlLW91dGZpdC10aHVtYnNcIik/LnJlbW92ZSgpXG4gIHRodW1icy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICB0ZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgb3V0Zml0czogZmF2b3VyaXRlcyxcbiAgICB9KVxuICApXG5cbiAgZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIi5lZS1hdmFpbGFibGUtc2xvdFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpOiB2b2lkID0+IHZvaWQgc2F2ZUZhdm91cml0ZSgpKVxuXG4gIGZvciAoY29uc3QgZGl2IG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiLmVlLW91dGZpdC10aHVtYlwiXG4gICkpIHtcbiAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZSA9IGZhdm91cml0ZXMuZmluZChcbiAgICAgICAgZmF2b3VyaXRlID0+IGZhdm91cml0ZS5pZCA9PT0gTnVtYmVyKGRpdi5kYXRhc2V0LmFycmF5SW5kZXgpXG4gICAgICApXG4gICAgICBpZiAoIWZhdm91cml0ZSkgcmV0dXJuXG5cbiAgICAgIHNob3dGYXZvdXJpdGUoZmF2b3VyaXRlKVxuICAgIH0pXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB0eXBlIHsgSG9tZUNvbnRlbnRTbWFsbCB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9ob21lX2NvbnRlbnRfc21hbGxcIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEhvbWVDb250ZW50KCk6IHZvaWQge1xuICBjb25zdCBob21lQ29udGVudFNtYWxscyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaG9tZS1jb250ZW50LXNtYWxsc1wiKVxuICBpZiAoXG4gICAgIWhvbWVDb250ZW50U21hbGxzIHx8XG4gICAgaG9tZUNvbnRlbnRTbWFsbHMucXVlcnlTZWxlY3RvcihcIi5ob21lLWNvbnRlbnQtc21hbGwtZWVcIilcbiAgKVxuICAgIHJldHVyblxuXG4gIC8vIFJlbW92ZSBiYW5rXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaG9tZS1iYW5rXCIpPy5yZW1vdmUoKVxuXG4gIC8vIEFkZCBmb3J1bVxuICBjb25zdCBzbWFsbFRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9ob21lX2NvbnRlbnRfc21hbGwuaHRtbFwiKVxuICBjb25zdCBzbWFsbENvbnRlbnQ6IEhvbWVDb250ZW50U21hbGwgPSB7XG4gICAgYmFja2dyb3VuZEltYWdlOlxuICAgICAgXCIvYXNzZXRzL2ltZy9taW5pZ2FtZXMvdHJlYXN1cmVodW50L2E0OGJiYzRlNDg0OTc0NWViZTZkYmNmNTMxM2ViM2YwLmpwZ1wiLFxuICAgIGg0OiB0cmFuc2xhdGUuaG9tZS5mb3J1bSxcbiAgICBocmVmOiBcIi9mb3J1bVwiLFxuICAgIGlkOiBcImZvcnVtXCIsXG4gIH1cblxuICBob21lQ29udGVudFNtYWxscy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBzbWFsbFRlbXBsYXRlLnJlbmRlcihzbWFsbENvbnRlbnQpXG4gIClcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgdHJpbUljb24gfSBmcm9tIFwiLi4vZWxkYXJ5YV91dGlsXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB0eXBlIHsgV2lzaGVkSXRlbSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL3dpc2hlZF9pdGVtXCJcbmltcG9ydCB0eXBlIHsgRGF0YVByb2R1Y3QgfSBmcm9tIFwiLi4vbWFsbC9kYXRhX3Byb2R1Y3RcIlxuaW1wb3J0IHR5cGUgeyBNYWxsRW50cnkgfSBmcm9tIFwiLi4vbWFsbC9tYWxsX2VudHJ5XCJcbmltcG9ydCB7IFJhcml0eSB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9lbnVtcy9yYXJpdHkuZW51bVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTWFsbCgpOiB2b2lkIHtcbiAgaWYgKCFsb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKFwiL21hbGxcIikpIHJldHVyblxuXG4gIGZvciAoY29uc3QgbGkgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MTElFbGVtZW50PihcIltkYXRhLXByb2R1Y3RdXCIpKVxuICAgIGxpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiBhZGRXaXNobGlzdEJ1dHRvbihsaSkpXG59XG5cbmZ1bmN0aW9uIGFkZFdpc2hsaXN0QnV0dG9uKGxpOiBIVE1MTElFbGVtZW50KTogdm9pZCB7XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYWRkLXRvLXdpc2hsaXN0XCIpPy5yZW1vdmUoKVxuXG4gIGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCIjbWFsbC1wcm9kdWN0RGV0YWlsLWluZm9cIilcbiAgICA/Lmluc2VydEFkamFjZW50SFRNTChcbiAgICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgICBcIjxidXR0b24gaWQ9J2FkZC10by13aXNobGlzdCcgY2xhc3M9J25sLWJ1dHRvbicgc3R5bGU9J21hcmdpbjogMjBweCBhdXRvIDA7IG1pbi13aWR0aDogMjAwcHg7Jz5BZGQgdG8gbWFya2V0IHdpc2hsaXN0PC9idXR0b24+XCJcbiAgICApXG5cbiAgY29uc3QgbWF4UXVhbnRpdHkgPSBsaS5xdWVyeVNlbGVjdG9yPEhUTUxTcGFuRWxlbWVudD4oXCIuaXRlbS1tYXhRdWFudGl0eVwiKVxuXG4gIGNvbnN0IG1hbGxFbnRyeTogTWFsbEVudHJ5ID0ge1xuICAgIHByb2R1Y3Q6IEpTT04ucGFyc2UobGkuZGF0YXNldC5wcm9kdWN0ISkgYXMgRGF0YVByb2R1Y3QsXG4gICAgaWNvbjogdHJpbUljb24oXG4gICAgICBsaS5xdWVyeVNlbGVjdG9yPEhUTUxJbWFnZUVsZW1lbnQ+KFwiaW1nLm1hbGwtcHJvZHVjdC1pY29uXCIpIS5zcmNcbiAgICApLFxuICAgIHJhcml0eTpcbiAgICAgIFJhcml0eVtcbiAgICAgICAgKGxpXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICBcIi5yYXJpdHktbWFya2VyLWNvbW1vbiwgLnJhcml0eS1tYXJrZXItcmFyZSwgLnJhcml0eS1tYXJrZXItZXBpYywgLnJhcml0eS1tYXJrZXItbGVnZW5kYXJ5LCAucmFyaXR5LW1hcmtlci1ldmVudFwiXG4gICAgICAgICAgKVxuICAgICAgICAgID8uY2xhc3NOYW1lLnNwbGl0KFwicmFyaXR5LW1hcmtlci1cIilbMV0gPz8gXCJcIikgYXMga2V5b2YgdHlwZW9mIFJhcml0eVxuICAgICAgXSxcbiAgICBtYXhRdWFudGl0eTogbWF4UXVhbnRpdHkgPyBOdW1iZXIobWF4UXVhbnRpdHkuaW5uZXJUZXh0KSA6IHVuZGVmaW5lZCxcbiAgICBhYnN0cmFjdFR5cGU6XG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICAgICAgXCIjbWFsbC1tZW51IC50b29sdGlwLmFjdGl2ZSAudG9vbHRpcC1jb250ZW50XCJcbiAgICAgICk/LmlubmVyVGV4dCA/PyBcIlwiLFxuICB9XG5cbiAgZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIiNhZGQtdG8td2lzaGxpc3RcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiBhZGRUb1dpc2hsaXN0RmxhdnIobWFsbEVudHJ5KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvV2lzaGxpc3RGbGF2cihtYWxsRW50cnk6IE1hbGxFbnRyeSk6IHZvaWQge1xuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXV0b19idXlfZmxhdnJfbWFsbC5odG1sXCIpXG5cbiAgJC5mbGF2cih7XG4gICAgY29udGVudDogdGVtcGxhdGUucmVuZGVyKHsgdHJhbnNsYXRlIH0pLFxuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGNsb3NlOiB7IHN0eWxlOiBcImNsb3NlXCIgfSxcbiAgICAgIHNhdmU6IHtcbiAgICAgICAgYWN0aW9uOiAoKSA9PiBzYXZlKG1hbGxFbnRyeSksXG4gICAgICB9LFxuICAgIH0sXG4gICAgZGlhbG9nOiBcInByb21wdFwiLFxuICAgIHByb21wdDoge1xuICAgICAgdmFsdWU6IFwiXCIsXG4gICAgfSxcbiAgICBvbkJ1aWxkOiAkY29udGFpbmVyID0+IHtcbiAgICAgICRjb250YWluZXIuYWRkQ2xhc3MoXCJuZXctbGF5b3V0LXBvcHVwXCIpXG5cbiAgICAgIGRvY3VtZW50XG4gICAgICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiLmZsYXZyLXByb21wdFwiKVxuICAgICAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCAoeyBrZXkgfSkgPT4ge1xuICAgICAgICAgIGlmIChrZXkgIT09IFwiRW50ZXJcIikgcmV0dXJuXG4gICAgICAgICAgc2F2ZShtYWxsRW50cnkpXG4gICAgICAgIH0pXG4gICAgfSxcbiAgfSlcbn1cblxuZnVuY3Rpb24gc2F2ZShtYWxsRW50cnk6IE1hbGxFbnRyeSk6IGJvb2xlYW4ge1xuICBjb25zdCBwcmljZSA9IE51bWJlcihcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiLmZsYXZyLXByb21wdFwiKT8udmFsdWUudHJpbSgpXG4gIClcbiAgaWYgKCFwcmljZSB8fCBwcmljZSA8PSAwKSB7XG4gICAgJC5mbGF2ck5vdGlmKHRyYW5zbGF0ZS5tYXJrZXQuYWRkX3RvX3dpc2hsaXN0LmludmFsaWRfcHJpY2UpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCB3aXNobGlzdCA9IExvY2FsU3RvcmFnZS53aXNobGlzdC5maWx0ZXIoXG4gICAgd2lzaGxpc3RFbnRyeSA9PiB3aXNobGlzdEVudHJ5Lmljb24gIT09IG1hbGxFbnRyeS5pY29uXG4gIClcbiAgY29uc3Qgd2lzaGVkOiBXaXNoZWRJdGVtID0ge1xuICAgIC4uLm1hbGxFbnRyeSxcbiAgICAuLi5tYWxsRW50cnkucHJvZHVjdCxcbiAgICBwcmljZSxcbiAgfVxuICB3aXNobGlzdC5wdXNoKHdpc2hlZClcblxuICB3aXNobGlzdC5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgdHlwZUNvbXBhcmUgPSBhLnR5cGUubG9jYWxlQ29tcGFyZShiLnR5cGUpXG4gICAgaWYgKHR5cGVDb21wYXJlICE9PSAwKSByZXR1cm4gdHlwZUNvbXBhcmVcblxuICAgIGNvbnN0IGFic3RyYWN0VHlwZUNvbXBhcmUgPSAoYS5hYnN0cmFjdFR5cGUgPz8gXCJcIikubG9jYWxlQ29tcGFyZShcbiAgICAgIGIuYWJzdHJhY3RUeXBlID8/IFwiXCJcbiAgICApXG4gICAgaWYgKGFic3RyYWN0VHlwZUNvbXBhcmUgIT09IDApIHJldHVybiBhYnN0cmFjdFR5cGVDb21wYXJlXG5cbiAgICBjb25zdCByYXJpdHlDb21wYXJlID1cbiAgICAgIE9iamVjdC5rZXlzKFJhcml0eSkuaW5kZXhPZihhLnJhcml0eSA/PyBcIlwiKSAtXG4gICAgICBPYmplY3Qua2V5cyhSYXJpdHkpLmluZGV4T2YoYi5yYXJpdHkgPz8gXCJcIilcbiAgICBpZiAocmFyaXR5Q29tcGFyZSAhPT0gMCkgcmV0dXJuIHJhcml0eUNvbXBhcmVcblxuICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpXG4gIH0pXG5cbiAgTG9jYWxTdG9yYWdlLndpc2hsaXN0ID0gd2lzaGxpc3RcblxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvZmxhdnJfbm90aWYvaWNvbl9tZXNzYWdlLmh0bWxcIilcbiAgJC5mbGF2ck5vdGlmKFxuICAgIHRlbXBsYXRlLnJlbmRlcih7XG4gICAgICAuLi53aXNoZWQsXG4gICAgICBtZXNzYWdlOiB0cmFuc2xhdGUubWFya2V0LmFkZF90b193aXNobGlzdC5hZGRlZF90b193aXNobGlzdChcbiAgICAgICAgd2lzaGVkLm5hbWUsXG4gICAgICAgIHdpc2hlZC5wcmljZVxuICAgICAgKSxcbiAgICB9KVxuICApXG4gIHJldHVybiB0cnVlXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB0eXBlIHsgV2lzaGVkSXRlbSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL3dpc2hlZF9pdGVtXCJcbmltcG9ydCB7IFJhcml0eSB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9lbnVtcy9yYXJpdHkuZW51bVwiXG5pbXBvcnQgdHlwZSB7IE1hcmtldEVudHJ5IH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2ludGVyZmFjZXMvbWFya2V0X2VudHJ5XCJcbmltcG9ydCB7IGdldEl0ZW1EZXRhaWxzIH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL21hcmtldHBsYWNlX2hhbmRsZXJzXCJcblxubGV0IG1hcmtldE9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbFxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZE1hcmtldCgpOiB2b2lkIHtcbiAgbWFya2V0T2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKVxuICBtYXJrZXRPYnNlcnZlciA9IG51bGxcblxuICBpZiAobG9jYXRpb24ucGF0aG5hbWUgIT09IFwiL21hcmtldHBsYWNlXCIpIHJldHVyblxuXG4gIC8vIGAubWFya2V0cGxhY2Utc2VhcmNoLWl0ZW1zYCBpcyB0aGUgY29udGFpbmVyIHdob3NlIEhUTUwgY29udGVudCBpcyBiZWluZ1xuICAvLyByZXBsYWNlZCBvbiBldmVyeSBhY3Rpb24uXG4gIGNvbnN0IHNlYXJjaEl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MVUxpc3RFbGVtZW50PihcbiAgICBcIi5tYXJrZXRwbGFjZS1zZWFyY2gtaXRlbXNcIlxuICApXG4gIGlmICghc2VhcmNoSXRlbXMpIHJldHVyblxuXG4gIG1hcmtldE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobG9hZFdpc2hsaXN0KVxuICBtYXJrZXRPYnNlcnZlci5vYnNlcnZlKHNlYXJjaEl0ZW1zLCB7XG4gICAgY2hpbGRMaXN0OiB0cnVlLFxuICB9KVxuXG4gIGxvYWRXaXNobGlzdCgpXG59XG5cbmZ1bmN0aW9uIGxvYWRXaXNobGlzdCgpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBsaSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxMSUVsZW1lbnQ+KFxuICAgIFwiLm1hcmtldHBsYWNlLWFic3RyYWN0XCJcbiAgKSkge1xuICAgIGxpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PlxuICAgICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAgIChfOiBNdXRhdGlvblJlY29yZFtdLCBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcik6IHZvaWQgPT4ge1xuICAgICAgICAgIGNvbnN0IG1hcmtldEVudHJ5ID0gZ2V0SXRlbURldGFpbHMobGkpXG4gICAgICAgICAgaWYgKCFtYXJrZXRFbnRyeSkgcmV0dXJuXG5cbiAgICAgICAgICBhZGRXaXNoaXN0QnV0dG9uKG1hcmtldEVudHJ5LCBvYnNlcnZlcilcbiAgICAgICAgfVxuICAgICAgKS5vYnNlcnZlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFya2V0cGxhY2Utem9vbVwiKSBhcyBOb2RlLCB7XG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFdpc2hpc3RCdXR0b24oXG4gIG1hcmtldEVudHJ5OiBNYXJrZXRFbnRyeSxcbiAgb2JzZXJ2ZXI/OiBNdXRhdGlvbk9ic2VydmVyXG4pOiB2b2lkIHtcbiAgY29uc3QgYnV0dG9uc0NvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiI21hcmtldHBsYWNlLWl0ZW1EZXRhaWxcIlxuICApXG4gIGlmICghYnV0dG9uc0NvbnRhaW5lcikgcmV0dXJuXG4gIG9ic2VydmVyPy5kaXNjb25uZWN0KClcbiAgaGlqYWNrQnV5QnV0dG9ucyhtYXJrZXRFbnRyeSlcblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hcmtldHBsYWNlLWl0ZW1EZXRhaWwtaW5mby1hdXRvYnV5XCIpPy5yZW1vdmUoKVxuICBjb25zdCBidXR0b25UZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXV0b19idXlfYnV0dG9uLmh0bWxcIilcbiAgYnV0dG9uc0NvbnRhaW5lci5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBidXR0b25UZW1wbGF0ZS5yZW5kZXIoeyB0cmFuc2xhdGUgfSlcbiAgKVxuXG4gIGJ1dHRvbnNDb250YWluZXJcbiAgICAucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIjbWFya2V0cGxhY2UtaXRlbURldGFpbC1pbmZvLWF1dG9idXlcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiBhZGRUb1dpc2hsaXN0RmxhdnIobWFya2V0RW50cnkpKVxufVxuXG5mdW5jdGlvbiBhZGRUb1dpc2hsaXN0RmxhdnIobWFya2V0RW50cnk6IE1hcmtldEVudHJ5KTogdm9pZCB7XG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hdXRvX2J1eV9mbGF2ci5odG1sXCIpXG5cbiAgJC5mbGF2cih7XG4gICAgY29udGVudDogdGVtcGxhdGUucmVuZGVyKHsgdHJhbnNsYXRlIH0pLFxuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGNsb3NlOiB7IHN0eWxlOiBcImNsb3NlXCIgfSxcbiAgICAgIHNhdmU6IHtcbiAgICAgICAgYWN0aW9uOiAoKSA9PiBzYXZlKG1hcmtldEVudHJ5KSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkaWFsb2c6IFwicHJvbXB0XCIsXG4gICAgcHJvbXB0OiB7XG4gICAgICB2YWx1ZTogXCJcIixcbiAgICB9LFxuICAgIG9uQnVpbGQ6ICRjb250YWluZXIgPT4ge1xuICAgICAgJGNvbnRhaW5lci5hZGRDbGFzcyhcIm5ldy1sYXlvdXQtcG9wdXBcIilcblxuICAgICAgZG9jdW1lbnRcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXCIuZmxhdnItcHJvbXB0XCIpXG4gICAgICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsICh7IGtleSB9KSA9PiB7XG4gICAgICAgICAgaWYgKGtleSAhPT0gXCJFbnRlclwiKSByZXR1cm5cbiAgICAgICAgICBzYXZlKG1hcmtldEVudHJ5KVxuICAgICAgICB9KVxuICAgIH0sXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHNhdmUobWFya2V0RW50cnk6IE1hcmtldEVudHJ5KTogYm9vbGVhbiB7XG4gIGNvbnN0IHByaWNlID0gTnVtYmVyKFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXCIuZmxhdnItcHJvbXB0XCIpPy52YWx1ZS50cmltKClcbiAgKVxuICBpZiAoIXByaWNlIHx8IHByaWNlIDw9IDApIHtcbiAgICAkLmZsYXZyTm90aWYodHJhbnNsYXRlLm1hcmtldC5hZGRfdG9fd2lzaGxpc3QuaW52YWxpZF9wcmljZSlcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IHdpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0LmZpbHRlcihcbiAgICB3aXNobGlzdEVudHJ5ID0+IHdpc2hsaXN0RW50cnkuaWNvbiAhPT0gbWFya2V0RW50cnkuaWNvblxuICApXG4gIGNvbnN0IHdpc2hlZDogV2lzaGVkSXRlbSA9IHsgLi4ubWFya2V0RW50cnksIHByaWNlIH1cbiAgd2lzaGxpc3QucHVzaCh3aXNoZWQpXG5cbiAgd2lzaGxpc3Quc29ydCgoYSwgYikgPT4ge1xuICAgIGNvbnN0IHR5cGVDb21wYXJlID0gYS50eXBlLmxvY2FsZUNvbXBhcmUoYi50eXBlKVxuICAgIGlmICh0eXBlQ29tcGFyZSAhPT0gMCkgcmV0dXJuIHR5cGVDb21wYXJlXG5cbiAgICBjb25zdCBhYnN0cmFjdFR5cGVDb21wYXJlID0gKGEuYWJzdHJhY3RUeXBlID8/IFwiXCIpLmxvY2FsZUNvbXBhcmUoXG4gICAgICBiLmFic3RyYWN0VHlwZSA/PyBcIlwiXG4gICAgKVxuICAgIGlmIChhYnN0cmFjdFR5cGVDb21wYXJlICE9PSAwKSByZXR1cm4gYWJzdHJhY3RUeXBlQ29tcGFyZVxuXG4gICAgY29uc3QgcmFyaXR5Q29tcGFyZSA9XG4gICAgICBPYmplY3Qua2V5cyhSYXJpdHkpLmluZGV4T2YoYS5yYXJpdHkgPz8gXCJcIikgLVxuICAgICAgT2JqZWN0LmtleXMoUmFyaXR5KS5pbmRleE9mKGIucmFyaXR5ID8/IFwiXCIpXG4gICAgaWYgKHJhcml0eUNvbXBhcmUgIT09IDApIHJldHVybiByYXJpdHlDb21wYXJlXG5cbiAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKVxuICB9KVxuXG4gIExvY2FsU3RvcmFnZS53aXNobGlzdCA9IHdpc2hsaXN0XG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2ljb25fbWVzc2FnZS5odG1sXCIpXG4gICQuZmxhdnJOb3RpZihcbiAgICB0ZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgLi4ud2lzaGVkLFxuICAgICAgbWVzc2FnZTogdHJhbnNsYXRlLm1hcmtldC5hZGRfdG9fd2lzaGxpc3QuYWRkZWRfdG9fd2lzaGxpc3QoXG4gICAgICAgIHdpc2hlZC5uYW1lLFxuICAgICAgICB3aXNoZWQucHJpY2VcbiAgICAgICksXG4gICAgfSlcbiAgKVxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBoaWphY2tCdXlCdXR0b25zKG1hcmtldEVudHJ5OiBNYXJrZXRFbnRyeSk6IHZvaWQge1xuICBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwiLm1hcmtldHBsYWNlLWl0ZW1EZXRhaWwtYnV5XCIpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgYWRkUHVyY2hhc2UobWFya2V0RW50cnkpXG4gICAgfSlcbn1cblxuZnVuY3Rpb24gYWRkUHVyY2hhc2UobWFya2V0RW50cnk6IE1hcmtldEVudHJ5KTogdm9pZCB7XG4gIExvY2FsU3RvcmFnZS5wdXJjaGFzZXMgPSBbXG4gICAgbWFya2V0RW50cnksXG4gICAgLi4uTG9jYWxTdG9yYWdlLnB1cmNoYXNlcy5maWx0ZXIoXG4gICAgICBwdXJjaGFzZSA9PiBwdXJjaGFzZS5pdGVtaWQgIT09IG1hcmtldEVudHJ5Lml0ZW1pZFxuICAgICksXG4gIF1cbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB0eXBlIHsgTWFpbk1lbnUgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvbWFpbl9tZW51XCJcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRNZW51KCk6IHZvaWQge1xuICBjb25zdCBtZW51SW5uZXJSaWdodCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWVudS1pbm5lci1yaWdodFwiKVxuICBpZiAoIW1lbnVJbm5lclJpZ2h0IHx8IG1lbnVJbm5lclJpZ2h0LnF1ZXJ5U2VsZWN0b3IoXCIubWFpbi1tZW51LWVlXCIpKSByZXR1cm5cblxuICAvLyBSZW1vdmUgYmFua1xuICBtZW51SW5uZXJSaWdodC5xdWVyeVNlbGVjdG9yKFwiLm1haW4tbWVudS1iYW5rXCIpPy5yZW1vdmUoKVxuXG4gIC8vIEFkZCBGb3J1bVxuICBjb25zdCBtZW51VGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL21haW5fbWVudS5odG1sXCIpXG4gIGNvbnN0IG1haW5NZW51Rm9ydW06IE1haW5NZW51ID0ge1xuICAgIGNsYXNzOiBcImZvcnVtXCIsXG4gICAgaHJlZjogXCIvZm9ydW1cIixcbiAgICB0ZXh0OiB0cmFuc2xhdGUuaG9tZS5mb3J1bSxcbiAgfVxuXG4gIG1lbnVJbm5lclJpZ2h0Lmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIG1lbnVUZW1wbGF0ZS5yZW5kZXIobWFpbk1lbnVGb3J1bSlcbiAgKVxufVxuIiwiaW1wb3J0IHsgbG9hZE1hcmtlcnMgfSBmcm9tIFwiLi4vcGV0L2V4cGxvcmF0aW9uXCJcbmltcG9ydCB7IGxvYWRFeHBsb3JhdGlvbkhpc3RvcnkgfSBmcm9tIFwiLi4vcGV0L2V4cGxvcmF0aW9uLWhpc3RvcnlcIlxuXG5sZXQgcGV0T2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIgfCBudWxsXG5cbmZ1bmN0aW9uIGxvYWRFeHBsb3JhdGlvbnMoKTogdm9pZCB7XG4gIHBldE9ic2VydmVyPy5kaXNjb25uZWN0KClcbiAgcGV0T2JzZXJ2ZXIgPSBudWxsXG5cbiAgLyoqIGAucGFnZS1tYWluLWNvbnRhaW5lcmAgY2hhbmdlcyBiYWNrZ3JvdW5kIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHJlZ2lvbi4gKi9cbiAgY29uc3QgbWFpbkNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiLnBhZ2UtbWFpbi1jb250YWluZXJcIlxuICApXG4gIGlmICghbWFpbkNvbnRhaW5lcikgcmV0dXJuXG5cbiAgcGV0T2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihsb2FkRXhwbG9yYXRpb25zKVxuICBwZXRPYnNlcnZlci5vYnNlcnZlKG1haW5Db250YWluZXIsIHtcbiAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICB9KVxuXG4gIGxvYWRNYXJrZXJzKClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRQZXQoKTogdm9pZCB7XG4gIGlmIChsb2NhdGlvbi5wYXRobmFtZSAhPT0gXCIvcGV0XCIpIHJldHVyblxuICBsb2FkRXhwbG9yYXRpb25zKClcbiAgbG9hZEV4cGxvcmF0aW9uSGlzdG9yeSgpXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IGRvd25sb2FkUHJvZmlsZSB9IGZyb20gXCIuLi9kb3dubG9hZC1jYW52YXNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IGV4cG9ydE91dGZpdCB9IGZyb20gXCIuLi9vdXRmaXRcIlxuaW1wb3J0IHR5cGUgeyBQcm9maWxlQ29udGFjdEFjdGlvbiB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9wcm9maWxlX2NvbnRhY3RfYWN0aW9uXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRQcm9maWxlKCk6IHZvaWQge1xuICBjb25zdCBwcm9maWxlQ29udGFjdEFjdGlvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICBcInByb2ZpbGUtY29udGFjdC1hY3Rpb25zXCJcbiAgKVxuICBpZiAoXG4gICAgIXByb2ZpbGVDb250YWN0QWN0aW9ucyB8fFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIucHJvZmlsZS1jb250YWN0LWFjdGlvbi1lZVwiKVxuICApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9wcm9maWxlX2NvbnRhY3RfYWN0aW9uLmh0bWxcIilcblxuICBjb25zdCBwcm9maWxlQWN0aW9uRXhwb3J0OiBQcm9maWxlQ29udGFjdEFjdGlvbiA9IHtcbiAgICBpZDogXCJwcm9maWxlLWNvbnRhY3QtYWN0aW9uLWV4cG9ydFwiLFxuICAgIGFjdGlvbkRlc2NyaXB0aW9uOiB0cmFuc2xhdGUucHJvZmlsZS5leHBvcnRfb3V0Zml0LFxuICB9XG4gIGNvbnN0IHByb2ZpbGVBY3Rpb25Eb3dubG9hZDogUHJvZmlsZUNvbnRhY3RBY3Rpb24gPSB7XG4gICAgaWQ6IFwicHJvZmlsZS1jb250YWN0LWFjdGlvbi1kb3dubG9hZFwiLFxuICAgIGFjdGlvbkRlc2NyaXB0aW9uOiB0cmFuc2xhdGUucHJvZmlsZS5kb3dubG9hZF9vdXRmaXQsXG4gIH1cblxuICAvLyBBZGQgZW50cmllc1xuICBwcm9maWxlQ29udGFjdEFjdGlvbnMuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgdGVtcGxhdGUucmVuZGVyKHByb2ZpbGVBY3Rpb25FeHBvcnQpXG4gIClcbiAgcHJvZmlsZUNvbnRhY3RBY3Rpb25zLmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIHRlbXBsYXRlLnJlbmRlcihwcm9maWxlQWN0aW9uRG93bmxvYWQpXG4gIClcblxuICAvLyBBZGQgY2xpY2sgZXZlbnRzXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKHByb2ZpbGVBY3Rpb25FeHBvcnQuaWQpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZXhwb3J0UHJvZmlsZSlcbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQocHJvZmlsZUFjdGlvbkRvd25sb2FkLmlkKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGRvd25sb2FkUHJvZmlsZSlcbn1cblxuZnVuY3Rpb24gZXhwb3J0UHJvZmlsZSgpOiB2b2lkIHtcbiAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxIZWFkaW5nRWxlbWVudD4oXG4gICAgXCIjbWFpbi1zZWN0aW9uIC5zZWN0aW9uLXRpdGxlXCJcbiAgKVxuXG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhTYWNoYS5BdmF0YXIuYXZhdGFycykuZmlsdGVyKGtleSA9PlxuICAgIGtleS5zdGFydHNXaXRoKFwiI3BsYXllclByb2ZpbGVBdmF0YXJcIilcbiAgKVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBleHBvcnRPdXRmaXQoa2V5LCB0aXRsZT8udGV4dENvbnRlbnQ/LnRyaW0oKSlcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyBQdXJyb3Nob3BTdGF0dXMgfSBmcm9tIFwiLi4vYXBpL21ldGFcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5cbi8qKiBTaG93cyBhIFB1cnJvJ1Nob3AgYnV0dG9uIGluIHRoZSBtYWluIG1lbnUgd2hlbiBpdCdzIGF2YWlsYWJsZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUHVycm9TaG9wKCk6IHZvaWQge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLm1haW4tbWVudS1wdXJyb3Nob3BcIik/LnJlbW92ZSgpXG5cbiAgLy8gQSBidWcgaW4gV2ViUGFjayBwcmV2ZW50cyB1c2luZyBgTG9jYWxTdG9yYWdlLm1ldGE/LnB1cnJvc2hvcC5zdGF0dXNgLlxuICBpZiAoXG4gICAgTG9jYWxTdG9yYWdlLm1ldGEgPT09IG51bGwgfHxcbiAgICBMb2NhbFN0b3JhZ2UubWV0YS5wdXJyb3Nob3Auc3RhdHVzICE9PSBQdXJyb3Nob3BTdGF0dXMuZW5hYmxlZFxuICApXG4gICAgcmV0dXJuXG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL21haW5fbWVudV9wdXJyb3Nob3AuaHRtbFwiKVxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChcIm1lbnUtaW5uZXItbGVmdFwiKVxuICAgID8uaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYWZ0ZXJiZWdpblwiLCB0ZW1wbGF0ZS5yZW5kZXIoe30pKVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyBnZXROYW1lIH0gZnJvbSBcIi4uL2Rvd25sb2FkLWNhbnZhc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgdHlwZSB7IFNldHRpbmdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL3NldHRpbmdzXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYWNjb3VudFJpZ2h0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhY2NvdW50LXJpZ2h0IGRpdlwiKVxuICBpZiAoIWFjY291bnRSaWdodCB8fCBhY2NvdW50UmlnaHQucXVlcnlTZWxlY3RvcihcIi5hY2NvdW50LWVlLWJsb2NcIikpIHJldHVyblxuXG4gIGNvbnN0IHNldHRpbmdzVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL3NldHRpbmdzLmh0bWxcIilcblxuICBhY2NvdW50UmlnaHQuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgc2V0dGluZ3NUZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgLi4uKGF3YWl0IExvY2FsU3RvcmFnZS5nZXRTZXR0aW5ncygpKSxcbiAgICAgIHRyYW5zbGF0ZSxcbiAgICB9KVxuICApXG5cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlZS1kZWJ1Zy1lbmFibGVkXCIpPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIExvY2FsU3RvcmFnZS5kZWJ1ZyA9ICFMb2NhbFN0b3JhZ2UuZGVidWdcbiAgICByZWxvYWRTZXR0aW5ncygpXG4gIH0pXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJlZS1taW5pZ2FtZXMtZW5hYmxlZFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIExvY2FsU3RvcmFnZS5taW5pZ2FtZXMgPSAhTG9jYWxTdG9yYWdlLm1pbmlnYW1lc1xuICAgICAgcmVsb2FkU2V0dGluZ3MoKVxuICAgIH0pXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJlZS1leHBsb3JhdGlvbnMtZW5hYmxlZFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIExvY2FsU3RvcmFnZS5leHBsb3JhdGlvbnMgPSAhTG9jYWxTdG9yYWdlLmV4cGxvcmF0aW9uc1xuICAgICAgcmVsb2FkU2V0dGluZ3MoKVxuICAgIH0pXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJlZS1tYXJrZXQtZW5hYmxlZFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIExvY2FsU3RvcmFnZS5tYXJrZXQgPSAhTG9jYWxTdG9yYWdlLm1hcmtldFxuICAgICAgcmVsb2FkU2V0dGluZ3MoKVxuICAgIH0pXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJlZS1pbXBvcnRcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBpbXBvcnRTZXR0aW5ncylcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChcImVlLWV4cG9ydFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHZvaWQgZXhwb3J0U2V0dGluZ3MoKSlcbn1cblxuZnVuY3Rpb24gcmVsb2FkU2V0dGluZ3MoKTogdm9pZCB7XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiLmFjY291bnQtZWUtYmxvY1wiKT8ucmVtb3ZlKClcbiAgdm9pZCBsb2FkU2V0dGluZ3MoKVxufVxuXG5mdW5jdGlvbiBpbXBvcnRTZXR0aW5ncygpOiB2b2lkIHtcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIilcbiAgaW5wdXQuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcImZpbGVcIilcbiAgaW5wdXQuc2V0QXR0cmlidXRlKFwiYWNjZXB0XCIsIFwiYXBwbGljYXRpb24vanNvblwiKVxuICBpbnB1dC5jbGljaygpXG5cbiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIGV2ZW50ID0+IHtcbiAgICBpZiAoIWV2ZW50LnRhcmdldCkgcmV0dXJuXG4gICAgY29uc3QgZmlsZXMgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzXG4gICAgaWYgKCFmaWxlcykgcmV0dXJuXG4gICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdXG4gICAgaWYgKCFmaWxlKSByZXR1cm5cbiAgICB2b2lkIGZpbGUudGV4dCgpLnRoZW4oYXN5bmMgdmFsdWUgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHBhcnNlZDogU2V0dGluZ3MgPSBKU09OLnBhcnNlKHZhbHVlKVxuICAgICAgYXdhaXQgTG9jYWxTdG9yYWdlLnNldFNldHRpbmdzKHBhcnNlZClcblxuICAgICAgcmVsb2FkU2V0dGluZ3MoKVxuICAgICAgJC5mbGF2ck5vdGlmKHRyYW5zbGF0ZS5hY2NvdW50LmltcG9ydGVkKVxuICAgIH0pXG4gIH0pXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4cG9ydFNldHRpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBocmVmID1cbiAgICBcImRhdGE6dGV4dC9qc29uO2NoYXJzZXQ9dXRmLTgsXCIgK1xuICAgIGVuY29kZVVSSUNvbXBvbmVudChcbiAgICAgIEpTT04uc3RyaW5naWZ5KGF3YWl0IExvY2FsU3RvcmFnZS5nZXRTZXR0aW5ncygpLCBudWxsLCAyKVxuICAgIClcblxuICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIilcbiAgYS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGhyZWYpXG4gIGEuc2V0QXR0cmlidXRlKFxuICAgIFwiZG93bmxvYWRcIixcbiAgICBgJHtnZXROYW1lKCkgPz8gXCJlbGRhcnlhLWVuaGFuY2VtZW50c1wifS1zZXR0aW5ncy5qc29uYFxuICApXG4gIGEuY2xpY2soKVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi4vc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZVwiXG5pbXBvcnQgeyB0b2dnbGVUYWtlb3ZlciB9IGZyb20gXCIuLi90YWtlb3Zlci9icmFpblwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkVG9wQmFyKCk6IHZvaWQge1xuICBjb25zdCBoZWFkZXJSaWdodCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaGVhZGVyLXJpZ2h0XCIpXG4gIGlmICghaGVhZGVyUmlnaHQpIHJldHVyblxuXG4gIGNvbnN0IGhlYWRlclRha2VvdmVyID0gaGVhZGVyUmlnaHQucXVlcnlTZWxlY3RvcihcIiNoZWFkZXItdGFrZW92ZXJcIilcbiAgaWYgKGhlYWRlclRha2VvdmVyKSBoZWFkZXJUYWtlb3Zlci5yZW1vdmUoKVxuICBlbHNlIGxvYWRMaW5rcygpXG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2hlYWRlcl90YWtlb3Zlci5odG1sXCIpXG4gIGhlYWRlclJpZ2h0Lmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImFmdGVyYmVnaW5cIixcbiAgICB0ZW1wbGF0ZS5yZW5kZXIoeyB0YWtlb3ZlcjogU2Vzc2lvblN0b3JhZ2UudGFrZW92ZXIsIHRyYW5zbGF0ZSB9KVxuICApXG5cbiAgaGVhZGVyUmlnaHRcbiAgICAucXVlcnlTZWxlY3RvcihcIiNoZWFkZXItdGFrZW92ZXJcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0b2dnbGVUYWtlb3Zlcilcbn1cblxuZnVuY3Rpb24gbG9hZExpbmtzKCk6IHZvaWQge1xuICBjb25zdCBoZWFkZXJQcm9maWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJoZWFkZXItcHJvZmlsZVwiKT8uZmlyc3RDaGlsZFxuICBpZiAoaGVhZGVyUHJvZmlsZT8udGV4dENvbnRlbnQpIHtcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIilcbiAgICBhLmhyZWYgPSBcIi9wbGF5ZXIvcHJvZmlsZVwiXG4gICAgYS5zdHlsZS5jb2xvciA9IFwidmFyKC0tdGV4dC1jb2xvcilcIlxuICAgIGEuc3R5bGUuZm9udEZhbWlseSA9ICdcIkFsZWdyZXlhIFNhbnNcIiwgc2Fucy1zZXJpZidcbiAgICBhLnN0eWxlLmZvbnRXZWlnaHQgPSBcInVuc2V0XCJcbiAgICBhLnRleHRDb250ZW50ID0gaGVhZGVyUHJvZmlsZS50ZXh0Q29udGVudC50cmltKClcblxuICAgIGNvbnN0IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKVxuICAgIHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYmVmb3JlZW5kXCIsIGEpXG5cbiAgICBoZWFkZXJQcm9maWxlLnJlcGxhY2VXaXRoKHApXG4gIH1cblxuICBjb25zdCBhdmF0YXJUaXRsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXZhdGFyLW1lbnUtY29udGFpbmVyLW91dGVyPnBcIilcbiAgaWYgKGF2YXRhclRpdGxlPy50ZXh0Q29udGVudClcbiAgICBhdmF0YXJUaXRsZS5pbm5lckhUTUwgPSBgPGEgaHJlZj1cIi9wbGF5ZXIvcHJvZmlsZVwiIHN0eWxlPVwiY29sb3I6ICNGRkZGRkY7IGZvbnQtc2l6ZTogMjNweDsgZm9udC13ZWlnaHQ6IDkwMDsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcIj4ke2F2YXRhclRpdGxlLnRleHRDb250ZW50LnRyaW0oKX08L2E+YFxuXG4gIGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCIjYXZhdGFyLW1lbnUtY29udGFpbmVyPmNhbnZhc1wiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHBhZ2VMb2FkKFwiL3BsYXllci9hcHBlYXJhbmNlXCIpKVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgdHlwZSB7IFdpc2hsaXN0U2V0dGluZ3MgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvd2lzaGxpc3Rfc2V0dGluZ3NcIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZFdpc2hsaXN0KCk6IHZvaWQge1xuICBjb25zdCBtYXJrZXRwbGFjZU1lbnUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hcmtldHBsYWNlLW1lbnVcIilcbiAgaWYgKCFtYXJrZXRwbGFjZU1lbnUpIHJldHVyblxuXG4gIGlmICghbWFya2V0cGxhY2VNZW51LnF1ZXJ5U2VsZWN0b3IoXCIjd2lzaGxpc3QtYnV0dG9uXCIpKSB7XG4gICAgZm9yIChjb25zdCBhIG9mIG1hcmtldHBsYWNlTWVudS5xdWVyeVNlbGVjdG9yQWxsKFwiYVwiKSkge1xuICAgICAgYS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT5cbiAgICAgICAgcGFnZUxvYWQoYS5ocmVmLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0cnVlKVxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIG1hcmtldHBsYWNlTWVudS5xdWVyeVNlbGVjdG9yKFwiI3dpc2hsaXN0LWJ1dHRvblwiKT8ucmVtb3ZlKClcbiAgY29uc3Qgd2lzaGxpc3RCdXR0b25UZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvd2lzaGxpc3RfYnV0dG9uLmh0bWxcIilcbiAgbWFya2V0cGxhY2VNZW51Lmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIHdpc2hsaXN0QnV0dG9uVGVtcGxhdGUucmVuZGVyKHsgdHJhbnNsYXRlIH0pXG4gIClcblxuICBjb25zdCB3aXNobGlzdEJ1dHRvbiA9XG4gICAgbWFya2V0cGxhY2VNZW51LnF1ZXJ5U2VsZWN0b3I8SFRNTEFuY2hvckVsZW1lbnQ+KFwiI3dpc2hsaXN0LWJ1dHRvblwiKVxuICB3aXNobGlzdEJ1dHRvbj8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+XG4gICAgaW5zZXJ0V2lzaGxpc3Qod2lzaGxpc3RCdXR0b24pXG4gIClcbn1cblxuZnVuY3Rpb24gaW5zZXJ0V2lzaGxpc3QoYnV0dG9uOiBIVE1MQW5jaG9yRWxlbWVudCk6IHZvaWQge1xuICAvLyBBc3Npc3RhbmNlXG4gIGNvbnN0IGFzc2lzdGFuY2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLm1hcmtldHBsYWNlLWFzc2lzdGFuY2VcIilcbiAgaWYgKGFzc2lzdGFuY2UpIGFzc2lzdGFuY2UuaW5uZXJIVE1MID0gdHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5hc3Npc3RhbmNlXG5cbiAgLy8gTWVudVxuICBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwiI21hcmtldHBsYWNlLW1lbnUgLmFjdGl2ZVwiKVxuICAgID8uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKVxuICBidXR0b24uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKVxuXG4gIC8vIEZpbHRlcnNcbiAgY29uc3QgZmlsdGVycyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFya2V0cGxhY2UtZmlsdGVyc1wiKVxuICBpZiAoZmlsdGVycykgZmlsdGVycy5pbm5lckhUTUwgPSBcIlwiXG5cbiAgLy8gQ29udGVudFxuICBjb25zdCB3aXNobGlzdFRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC93aXNobGlzdF9zZXR0aW5ncy5odG1sXCIpXG4gIGNvbnN0IGNvbnRhaW5lciA9XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5tYXJrZXRwbGFjZS1jb250YWluZXJcIikgPz9cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hcmtldHBsYWNlLWFjdGl2ZS1hdWN0aW9uc1wiKSA/P1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFya2V0cGxhY2UtaXRlbXNGb3JTYWxlXCIpXG4gIGlmICghY29udGFpbmVyKSByZXR1cm5cblxuICBjb25zdCB3aXNobGlzdENvbnRleHQ6IFdpc2hsaXN0U2V0dGluZ3MgPSB7XG4gICAgd2lzaGxpc3Q6IExvY2FsU3RvcmFnZS53aXNobGlzdCxcbiAgfVxuICBjb250YWluZXIuaW5uZXJIVE1MID0gd2lzaGxpc3RUZW1wbGF0ZS5yZW5kZXIoe1xuICAgIC4uLndpc2hsaXN0Q29udGV4dCxcbiAgICB0cmFuc2xhdGUsXG4gIH0pXG5cbiAgLy8gQnV0dG9uc1xuICBmb3IgKGNvbnN0IHRyIG9mIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwidHJcIikpIHtcbiAgICBjb25zdCBpY29uID0gdHIuZGF0YXNldC5pY29uXG4gICAgaWYgKCFpY29uKSBjb250aW51ZVxuXG4gICAgLy8gUmVzZXQgc3RhdHVzXG4gICAgY29uc3QgcmVzZXQgPSB0ci5xdWVyeVNlbGVjdG9yKFwiLnJlc2V0LWl0ZW0tc3RhdHVzXCIpXG4gICAgaWYgKHJlc2V0KVxuICAgICAgcmVzZXQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgcmVzZXRTdGF0dXMoaWNvbilcbiAgICAgICAgaW5zZXJ0V2lzaGxpc3QoYnV0dG9uKVxuICAgICAgfSlcblxuICAgIC8vIERlbGV0ZSBpdGVtIGZyb20gd2lzaGxpc3RcbiAgICBjb25zdCBkZWxldGVCdXR0b24gPSB0ci5xdWVyeVNlbGVjdG9yKFwiLmRlbGV0ZS13aXNobGlzdC1pdGVtXCIpXG4gICAgaWYgKGRlbGV0ZUJ1dHRvbilcbiAgICAgIGRlbGV0ZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBkZWxldGVJdGVtKGljb24pXG4gICAgICAgIGluc2VydFdpc2hsaXN0KGJ1dHRvbilcbiAgICAgIH0pXG5cbiAgICAvLyBDaGFuZ2UgcHJpY2VcbiAgICBjb25zdCBlZGl0UHJpY2UgPSB0ci5xdWVyeVNlbGVjdG9yKFwiLmVkaXQtcHJpY2VcIilcbiAgICBpZiAoZWRpdFByaWNlKVxuICAgICAgZWRpdFByaWNlLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwiY2xpY2tcIixcbiAgICAgICAgKCkgPT4gdm9pZCBjaGFuZ2VQcmljZShpY29uKS50aGVuKCgpID0+IGluc2VydFdpc2hsaXN0KGJ1dHRvbikpXG4gICAgICApXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRTdGF0dXMoaWNvbjogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IHdpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0XG4gIGNvbnN0IGluZGV4ID0gd2lzaGxpc3QuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pY29uID09PSBpY29uKVxuICBjb25zdCBlbnRyeSA9IHdpc2hsaXN0W2luZGV4XVxuICBpZiAoIWVudHJ5KSByZXR1cm5cblxuICBkZWxldGUgZW50cnkuZXJyb3JcbiAgTG9jYWxTdG9yYWdlLndpc2hsaXN0ID0gW1xuICAgIC4uLndpc2hsaXN0LnNsaWNlKHVuZGVmaW5lZCwgaW5kZXgpLFxuICAgIGVudHJ5LFxuICAgIC4uLndpc2hsaXN0LnNsaWNlKGluZGV4ICsgMSwgdW5kZWZpbmVkKSxcbiAgXVxufVxuXG5mdW5jdGlvbiBkZWxldGVJdGVtKGljb246IHN0cmluZyk6IHZvaWQge1xuICBMb2NhbFN0b3JhZ2Uud2lzaGxpc3QgPSBMb2NhbFN0b3JhZ2Uud2lzaGxpc3QuZmlsdGVyKFxuICAgIGl0ZW0gPT4gaXRlbS5pY29uICE9PSBpY29uXG4gIClcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hhbmdlUHJpY2UoaWNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9jaGFuZ2VfcHJpY2VfZmxhdnIuaHRtbFwiKVxuXG4gIGNvbnN0IHdpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0XG4gIGNvbnN0IGluZGV4ID0gd2lzaGxpc3QuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pY29uID09PSBpY29uKVxuICBjb25zdCBlbnRyeSA9IHdpc2hsaXN0W2luZGV4XVxuICBpZiAoIWVudHJ5KSByZXR1cm5cblxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgJC5mbGF2cih7XG4gICAgICBjb250ZW50OiB0ZW1wbGF0ZS5yZW5kZXIoeyB0cmFuc2xhdGUgfSksXG4gICAgICBkaWFsb2c6IFwicHJvbXB0XCIsXG4gICAgICBwcm9tcHQ6IHtcbiAgICAgICAgdmFsdWU6IGVudHJ5LnByaWNlLnRvU3RyaW5nKCksXG4gICAgICB9LFxuICAgICAgYnV0dG9uczoge1xuICAgICAgICBjbG9zZToge1xuICAgICAgICAgIHN0eWxlOiBcImNsb3NlXCIsXG4gICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2F2ZToge1xuICAgICAgICAgIGFjdGlvbjogKCkgPT4gc2F2ZShpY29uLCByZXNvbHZlKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBvbkJ1aWxkOiAkY29udGFpbmVyID0+IHtcbiAgICAgICAgJGNvbnRhaW5lci5hZGRDbGFzcyhcIm5ldy1sYXlvdXQtcG9wdXBcIilcblxuICAgICAgICBkb2N1bWVudFxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiLmZsYXZyLXByb21wdFwiKVxuICAgICAgICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsICh7IGtleSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSBcIkVudGVyXCIpIHJldHVyblxuICAgICAgICAgICAgc2F2ZShpY29uLCByZXNvbHZlKVxuICAgICAgICAgIH0pXG4gICAgICB9LFxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHNhdmUoaWNvbjogc3RyaW5nLCByZXNvbHZlOiAoKSA9PiB2b2lkKTogYm9vbGVhbiB7XG4gIGNvbnN0IHdpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0XG4gIGNvbnN0IGluZGV4ID0gd2lzaGxpc3QuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pY29uID09PSBpY29uKVxuICBjb25zdCBlbnRyeSA9IHdpc2hsaXN0W2luZGV4XVxuICBpZiAoIWVudHJ5KSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBwcmljZSA9IE51bWJlcihcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiLmZsYXZyLXByb21wdFwiKT8udmFsdWUudHJpbSgpXG4gIClcbiAgaWYgKCFwcmljZSB8fCBwcmljZSA8PSAwKSB7XG4gICAgJC5mbGF2ck5vdGlmKHRyYW5zbGF0ZS5tYXJrZXQuY2hhbmdlX3ByaWNlLmludmFsaWRfcHJpY2UpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBlbnRyeS5wcmljZSA9IHByaWNlXG4gIExvY2FsU3RvcmFnZS53aXNobGlzdCA9IFtcbiAgICAuLi53aXNobGlzdC5zbGljZSh1bmRlZmluZWQsIGluZGV4KSxcbiAgICBlbnRyeSxcbiAgICAuLi53aXNobGlzdC5zbGljZShpbmRleCArIDEsIHVuZGVmaW5lZCksXG4gIF1cblxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvZmxhdnJfbm90aWYvaWNvbl9tZXNzYWdlLmh0bWxcIilcbiAgJC5mbGF2ck5vdGlmKFxuICAgIHRlbXBsYXRlLnJlbmRlcih7XG4gICAgICAuLi5lbnRyeSxcbiAgICAgIG1lc3NhZ2U6IHRyYW5zbGF0ZS5tYXJrZXQuY2hhbmdlX3ByaWNlLmNoYW5nZWRfcHJpY2UoXG4gICAgICAgIGVudHJ5Lm5hbWUsXG4gICAgICAgIGVudHJ5LnByaWNlXG4gICAgICApLFxuICAgIH0pXG4gIClcblxuICByZXNvbHZlKClcbiAgcmV0dXJuIHRydWVcbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJpbXBvcnQgeyBsb2FkRHJlc3NpbmdFeHBlcmllbmNlIH0gZnJvbSBcIi4vYXBwZWFyYW5jZS9kcmVzc2luZ19leHBlcmllbmNlXCJcbmltcG9ydCB7IG1pZ3JhdGUgfSBmcm9tIFwiLi9taWdyYXRlXCJcbmltcG9ydCB7IGxvYWRUYWtlb3ZlciB9IGZyb20gXCIuL3Rha2VvdmVyL2JyYWluXCJcbmltcG9ydCB7IGxvYWRBdWN0aW9ucyB9IGZyb20gXCIuL3VpL2F1Y3Rpb25zXCJcbmltcG9ydCB7IGxvYWRDYXJvdXNlbCB9IGZyb20gXCIuL3VpL2Nhcm91c2VsXCJcbmltcG9ydCB7IGxvYWRGYXZvdXJpdGVzIH0gZnJvbSBcIi4vdWkvZmF2b3VyaXRlc1wiXG5pbXBvcnQgeyBsb2FkSG9tZUNvbnRlbnQgfSBmcm9tIFwiLi91aS9ob21lX2NvbnRlbnRcIlxuaW1wb3J0IHsgbG9hZE1hbGwgfSBmcm9tIFwiLi91aS9tYWxsXCJcbmltcG9ydCB7IGxvYWRNYXJrZXQgfSBmcm9tIFwiLi91aS9tYXJrZXRcIlxuaW1wb3J0IHsgbG9hZE1lbnUgfSBmcm9tIFwiLi91aS9tZW51XCJcbmltcG9ydCB7IGxvYWRQZXQgfSBmcm9tIFwiLi91aS9wZXRcIlxuaW1wb3J0IHsgbG9hZFByb2ZpbGUgfSBmcm9tIFwiLi91aS9wcm9maWxlXCJcbmltcG9ydCB7IGxvYWRQdXJyb1Nob3AgfSBmcm9tIFwiLi91aS9wdXJyb19zaG9wXCJcbmltcG9ydCB7IGxvYWRTZXR0aW5ncyB9IGZyb20gXCIuL3VpL3NldHRpbmdzXCJcbmltcG9ydCB7IGxvYWRUb3BCYXIgfSBmcm9tIFwiLi91aS90b3BfYmFyXCJcbmltcG9ydCB7IGxvYWRXaXNobGlzdCB9IGZyb20gXCIuL3VpL3dpc2hsaXN0XCJcblxuLy8gbG9hZEpTKFwiaHR0cHM6Ly91bnBrZy5jb20vaG9nYW4uanMvZGlzdC90ZW1wbGF0ZS0zLjAuMi5taW4uanNcIiwgdHJ1ZSk7XG5cbmZ1bmN0aW9uIGxvYWQoKTogdm9pZCB7XG4gIGxvYWRVSSgpXG4gIGxvYWRUYWtlb3ZlcigpXG59XG5cbmZ1bmN0aW9uIGxvYWRVSSgpOiB2b2lkIHtcbiAgbG9hZE1lbnUoKVxuICBsb2FkQ2Fyb3VzZWwoKVxuICBsb2FkSG9tZUNvbnRlbnQoKVxuICBsb2FkRmF2b3VyaXRlcygpXG4gIGxvYWRQcm9maWxlKClcbiAgbG9hZFBldCgpXG4gIGxvYWRNYXJrZXQoKVxuICBsb2FkV2lzaGxpc3QoKVxuICBsb2FkVG9wQmFyKClcbiAgbG9hZEF1Y3Rpb25zKClcbiAgbG9hZFB1cnJvU2hvcCgpXG4gIGxvYWRNYWxsKClcbiAgdm9pZCBsb2FkRHJlc3NpbmdFeHBlcmllbmNlKClcblxuICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB2b2lkIGxvYWRJbmRleGVkRGIoKVxuICBlbHNlIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiBsb2FkSW5kZXhlZERiKCkpXG59XG5cbmZ1bmN0aW9uIGxvYWRJbmRleGVkRGIoKTogdm9pZCB7XG4gIHZvaWQgbG9hZFNldHRpbmdzKClcbn1cblxubmV3IE11dGF0aW9uT2JzZXJ2ZXIobG9hZCkub2JzZXJ2ZShcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb250YWluZXJcIikgYXMgTm9kZSxcbiAge1xuICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgfVxuKVxuXG5taWdyYXRlKClcblxubG9hZFVJKClcbmNvbnNvbGUubG9nKGAke0dNLmluZm8uc2NyaXB0Lm5hbWV9IHYke0dNLmluZm8uc2NyaXB0LnZlcnNpb259IGxvYWRlZC5gKVxubG9hZFRha2VvdmVyKClcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址