var lsNetvisioGTM;
/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	var __webpack_modules__ = ({

/***/ "./lib/parseEcomParams.js":
/*!********************************!*\
  !*** ./lib/parseEcomParams.js ***!
  \********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
function parseEcomParams(event) {
  var _event$data, _event$data$checkout, _event$data$checkout$;
  var ecom = {};
  if ((_event$data = event.data) !== null && _event$data !== void 0 && (_event$data$checkout = _event$data.checkout) !== null && _event$data$checkout !== void 0 && (_event$data$checkout$ = _event$data$checkout.totalPrice) !== null && _event$data$checkout$ !== void 0 && _event$data$checkout$.amount) {
    ecom.value = event.data.checkout.totalPrice.amount.toString();
    ecom.cart_total = event.data.checkout.totalPrice.amount.toString();
    ecom.currency = event.data.checkout.totalPrice.currencyCode;
    ecom.cart_quantity = event.data.checkout.lineItems.length;
  }
  if (event.name == "checkout_completed") {
    var _event$data$checkout2, _event$data$checkout3, _event$data$checkout4, _event$data$checkout5, _event$data$checkout6, _event$data$checkout7, _event$data$checkout8, _event$data$checkout9, _event$data$checkout10, _event$data$checkout11;
    ecom.tax = event.data.checkout.totalTax.amount;
    ecom.shipping = event.data.checkout.shippingLine.price.amount;
    ecom.transaction_id = event.data.checkout.order.id;
    ecom.coupon = (_event$data$checkout2 = event.data.checkout) === null || _event$data$checkout2 === void 0 ? void 0 : (_event$data$checkout3 = _event$data$checkout2.discountApplications[0]) === null || _event$data$checkout3 === void 0 ? void 0 : _event$data$checkout3.title;
    ecom.discount = (_event$data$checkout4 = event.data.checkout) === null || _event$data$checkout4 === void 0 ? void 0 : (_event$data$checkout5 = _event$data$checkout4.discountApplications[0]) === null || _event$data$checkout5 === void 0 ? void 0 : _event$data$checkout5.title;
    ecom.discount_amount = (_event$data$checkout6 = event.data.checkout) === null || _event$data$checkout6 === void 0 ? void 0 : (_event$data$checkout7 = _event$data$checkout6.discountApplications[0]) === null || _event$data$checkout7 === void 0 ? void 0 : (_event$data$checkout8 = _event$data$checkout7.value) === null || _event$data$checkout8 === void 0 ? void 0 : _event$data$checkout8.amount;
    ecom.discount_percentage = (_event$data$checkout9 = event.data.checkout) === null || _event$data$checkout9 === void 0 ? void 0 : (_event$data$checkout10 = _event$data$checkout9.discountApplications[0]) === null || _event$data$checkout10 === void 0 ? void 0 : (_event$data$checkout11 = _event$data$checkout10.value) === null || _event$data$checkout11 === void 0 ? void 0 : _event$data$checkout11.percentage;
    ecom.sub_total = event.data.checkout.subtotalPrice.amount;
  }
  if (event.name == "collection_viewed") {
    ecom.collection_id = event.data.collection.id;
    ecom.item_list_name = event.data.collection.title;
    ecom.currency = event.data.collection.productVariants[0].price.currencyCode;
  }
  if (event.name == "search_submitted") {
    ecom.search_term = event.data.searchResult.query;
    ecom.currency = event.data.searchResult.productVariants[0].price.currencyCode;
  }
  if (event.name == "cart_viewed") {
    ecom.value = event.data.cart.cost.totalAmount.amount.toString();
    ecom.currency = event.data.cart.cost.totalAmount.currencyCode;
  }
  if (event.name == "product_viewed") {
    ecom.value = event.data.productVariant.price.amount.toString();
    ecom.currency = event.data.productVariant.price.currencyCode;
  }
  if (event.name == "product_added_to_cart") {
    ecom.value = event.data.cartLine.merchandise.price.amount.toString();
    ecom.currency = event.data.cartLine.merchandise.price.currencyCode;
  }
  if (event.name == "product_removed_from_cart") {
    ecom.value = event.data.cartLine.merchandise.price.amount.toString();
    ecom.currency = event.data.cartLine.merchandise.price.currencyCode;
  }
  return ecom;
}
;
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (parseEcomParams);

/***/ }),

/***/ "./lib/parseItems.js":
/*!***************************!*\
  !*** ./lib/parseItems.js ***!
  \***************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
function parseItems(event) {
  var _event$data, _event$data$checkout, _event$data2, _event$data2$cartLine, _event$data3, _event$data4, _event$data4$collecti, _event$data5, _event$data5$searchRe, _event$data6, _event$data6$cart;
  var items = [];
  if ((_event$data = event.data) !== null && _event$data !== void 0 && (_event$data$checkout = _event$data.checkout) !== null && _event$data$checkout !== void 0 && _event$data$checkout.lineItems) {
    for (var i = 0; i < event.data.checkout.lineItems.length; i++) {
      var _event$data$checkout$, _event$data$checkout$2;
      items.push({
        'item_id': event.data.checkout.lineItems[i].variant.product.id,
        'item_sku': event.data.checkout.lineItems[i].variant.sku,
        'item_variant': event.data.checkout.lineItems[i].variant.id,
        'item_name': event.data.checkout.lineItems[i].variant.product.title,
        'variant_name': event.data.checkout.lineItems[i].variant.title,
        'item_category': event.data.checkout.lineItems[i].variant.product.type,
        'item_brand': event.data.checkout.lineItems[i].variant.product.vendor,
        'price': event.data.checkout.lineItems[i].variant.price.amount,
        'imageURL': event.data.checkout.lineItems[i].variant.image.src,
        'discount': (_event$data$checkout$ = event.data.checkout.lineItems[i].discountAllocations[0]) !== null && _event$data$checkout$ !== void 0 && (_event$data$checkout$2 = _event$data$checkout$.amount) !== null && _event$data$checkout$2 !== void 0 && _event$data$checkout$2.amount ? event.data.checkout.lineItems[i].discountAllocations[0].amount.amount : null,
        'quantity': event.data.checkout.lineItems[i].quantity
      });
    }
  }
  if ((_event$data2 = event.data) !== null && _event$data2 !== void 0 && (_event$data2$cartLine = _event$data2.cartLine) !== null && _event$data2$cartLine !== void 0 && _event$data2$cartLine.merchandise) {
    items.push({
      'item_id': event.data.cartLine.merchandise.product.id,
      'item_sku': event.data.cartLine.merchandise.sku,
      'item_variant': event.data.cartLine.merchandise.id,
      'item_name': event.data.cartLine.merchandise.product.title,
      'variant_name': event.data.cartLine.merchandise.title,
      'item_category': event.data.cartLine.merchandise.product.type,
      'item_brand': event.data.cartLine.merchandise.product.vendor,
      'price': event.data.cartLine.merchandise.price.amount,
      'imageURL': event.data.cartLine.merchandise.image.src,
      'quantity': event.data.cartLine.quantity
    });
  }
  if ((_event$data3 = event.data) !== null && _event$data3 !== void 0 && _event$data3.productVariant) {
    items.push({
      'item_id': event.data.productVariant.product.id,
      'item_sku': event.data.productVariant.sku,
      'item_variant': event.data.productVariant.id,
      'item_name': event.data.productVariant.product.title,
      'variant_name': event.data.productVariant.title,
      'item_category': event.data.productVariant.product.type,
      'price': event.data.productVariant.price.amount,
      'item_brand': event.data.productVariant.product.vendor,
      'imageURL': event.data.productVariant.image.src,
      'quantity': '1'
    });
    console.log(items);
  }
  if ((_event$data4 = event.data) !== null && _event$data4 !== void 0 && (_event$data4$collecti = _event$data4.collection) !== null && _event$data4$collecti !== void 0 && _event$data4$collecti.productVariants) {
    var maxItems = Math.min(10, event.data.collection.productVariants.length);
    for (var _i = 0; _i < maxItems; _i++) {
      items.push({
        'item_id': event.data.collection.productVariants[_i].product.id,
        'item_sku': event.data.collection.productVariants[_i].sku,
        'item_variant': event.data.collection.productVariants[_i].id,
        'item_name': event.data.collection.productVariants[_i].product.title,
        'variant_name': event.data.collection.productVariants[_i].title,
        'item_category': event.data.collection.productVariants[_i].product.type,
        'item_brand': event.data.collection.productVariants[_i].product.vendor,
        'price': event.data.collection.productVariants[_i].price.amount,
        'imageURL': event.data.collection.productVariants[_i].image.src,
        'index': _i + 1
      });
    }
  }
  if ((_event$data5 = event.data) !== null && _event$data5 !== void 0 && (_event$data5$searchRe = _event$data5.searchResult) !== null && _event$data5$searchRe !== void 0 && _event$data5$searchRe.productVariants) {
    var _maxItems = Math.min(10, event.data.searchResult.productVariants.length);
    for (var _i2 = 0; _i2 < _maxItems; _i2++) {
      items.push({
        'item_id': event.data.searchResult.productVariants[_i2].product.id,
        'item_sku': event.data.searchResult.productVariants[_i2].sku,
        'item_variant': event.data.searchResult.productVariants[_i2].id,
        'item_name': event.data.searchResult.productVariants[_i2].product.title,
        'variant_name': event.data.searchResult.productVariants[_i2].title,
        'item_category': event.data.searchResult.productVariants[_i2].product.type,
        'item_brand': event.data.searchResult.productVariants[_i2].product.vendor,
        'price': event.data.searchResult.productVariants[_i2].price.amount,
        'imageURL': event.data.searchResult.productVariants[_i2].image.src,
        'index': _i2 + 1
      });
    }
  }
  if ((_event$data6 = event.data) !== null && _event$data6 !== void 0 && (_event$data6$cart = _event$data6.cart) !== null && _event$data6$cart !== void 0 && _event$data6$cart.lines) {
    for (var _i3 = 0; _i3 < event.data.cart.lines.length; _i3++) {
      items.push({
        'item_id': event.data.cart.lines[_i3].merchandise.product.id,
        'item_sku': event.data.cart.lines[_i3].merchandise.sku,
        'item_variant': event.data.cart.lines[_i3].merchandise.id,
        'item_name': event.data.cart.lines[_i3].merchandise.product.title,
        'variant_name': event.data.cart.lines[_i3].merchandise.title,
        'item_category': event.data.cart.lines[_i3].merchandise.product.type,
        'item_brand': event.data.cart.lines[_i3].merchandise.product.vendor,
        'price': event.data.cart.lines[_i3].merchandise.price.amount,
        'imageURL': event.data.cart.lines[_i3].merchandise.image.src,
        'quantity': event.data.cart.lines[_i3].quantity
      });
    }
  }
  return items;
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (parseItems);

/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// 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/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 isolated against other modules in the chunk.
(() => {
/*!******************!*\
  !*** ./index.js ***!
  \******************/
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "setCustomer": () => (/* binding */ setCustomer)
/* harmony export */ });
/* harmony import */ var _lib_parseEcomParams_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/parseEcomParams.js */ "./lib/parseEcomParams.js");
/* harmony import */ var _lib_parseItems_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/parseItems.js */ "./lib/parseItems.js");
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
/* eslint-disable consistent-return */
/* eslint-disable react/jsx-no-bind */



var url = 'https://sp.stape.io';
var shop = 'www.thespicehouse.com';
var shopId = '14819459126';
function getCookie(name) {
  var value = "; ".concat(document.cookie);
  var parts = value.split("; ".concat(name, "="));
  if (parts.length === 2) return parts.pop().split(';').shift();
}
(function () {
  function fetchSettings() {
    return fetch("".concat(url, "/widget/setting?shop=").concat(shop, "&shop_id=").concat(shopId), {
      method: 'GET'
    }).then(function (resp) {
      return resp.json();
    });
  }
  Promise.all([fetchSettings(), fetch('/cart.js').then(function (res) {
    return res.json();
  })]).then(function (_ref) {
    var _widget$generate;
    var _ref2 = _slicedToArray(_ref, 2),
      widget = _ref2[0],
      cartData = _ref2[1];
    console.log('+++++++++++lsNet_2.0.8+++++++++++++');
    var generate = widget.generate,
      data_layer = widget.data_layer,
      webhook = widget.webhook;
    window.dataLayer = window.dataLayer || [];
    if (widget !== null && widget !== void 0 && (_widget$generate = widget.generate) !== null && _widget$generate !== void 0 && _widget$generate.insert_gtm_snipper) {
      var script = document.createElement('script');
      var DOMAIN = (generate === null || generate === void 0 ? void 0 : generate.is_custom_domain) && (generate === null || generate === void 0 ? void 0 : generate.custom_domain) || 'https://www.googletagmanager.com';
      var WEB_GTM_ID = generate !== null && generate !== void 0 && generate.is_custom_domain && generate !== null && generate !== void 0 && generate.custom_domain && generate !== null && generate !== void 0 && generate.is_custom_loaded && generate !== null && generate !== void 0 && generate.custom_loaded ? ((generate === null || generate === void 0 ? void 0 : generate.gtm_id) || '').replace('GTM-', '').trim() : (generate === null || generate === void 0 ? void 0 : generate.gtm_id) || '';
      var CONTAINER_ID = (generate === null || generate === void 0 ? void 0 : generate.is_custom_loaded) && (generate === null || generate === void 0 ? void 0 : generate.custom_loaded) || 'gtm';
      var IS_CUSTOM_ID = Boolean((generate === null || generate === void 0 ? void 0 : generate.is_custom_domain) && (generate === null || generate === void 0 ? void 0 : generate.custom_domain) && (generate === null || generate === void 0 ? void 0 : generate.is_custom_loaded) && (generate === null || generate === void 0 ? void 0 : generate.custom_loaded));
      if (generate.is_cookie_keeper && generate !== null && generate !== void 0 && generate.is_custom_loaded) {
        var text = "!function(){\"use strict\";function l(e){for(var t=e,r=0,n=document.cookie.split(\";\");r<n.length;r++){var o=n[r].split(\"=\");if(o[0].trim()===t)return o[1]}}function s(e){return localStorage.getItem(e)}function u(e){return window[e]}function d(e,t){e=document.querySelector(e);return t?null==e?void 0:e.getAttribute(t):null==e?void 0:e.textContent}var e=window,t=document,r=\"script\",n=\"dataLayer\",o=\"{{WEB_GTM_ID}}\",a=\"{{DOMAIN}}\",i=\"\",c=\"{{CONTAINER_ID}}\",E=\"cookie\",I=[\"_y\",\"_shopify_y\"],v=\"\",g=!1;try{var g=!!E&&(m=navigator.userAgent,!!(m=new RegExp(\"Version/([0-9._]+)(.*Mobile)?.*Safari.*\").exec(m)))&&16.4<=parseFloat(m[1]),A=\"stapeUserId\"===E,f=g&&!A?function(e,t,r){void 0===t&&(t=\"\");var n={cookie:l,localStorage:s,jsVariable:u,cssSelector:d},t=Array.isArray(t)?t:[t];if(e&&n[e])for(var o=n[e],a=0,i=t;a<i.length;a++){var c=i[a],c=r?o(c,r):o(c);if(c)return c}else console.warn(\"invalid uid source\",e)}(E,I,v):void 0;g=g&&(!!f||A)}catch(e){console.error(e)}var m=e,E=(m[n]=m[n]||[],m[n].push({\"gtm.start\":(new Date).getTime(),event:\"gtm.js\"}),t.getElementsByTagName(r)[0]),I=\"dataLayer\"===n?\"\":\"&l=\"+n,v=f?\"&bi=\"+encodeURIComponent(f):\"\",A=t.createElement(r),e=g?\"kp\"+c:c,n=!g&&i?i:a;A.async=!0,A.src=n+\"/\"+e+\".js?st=\"+o+I+v,null!=(f=E.parentNode)&&f.insertBefore(A,E)}();" // `!function(){"use strict";function e(e){return function(e){for(var t=0,r=document.cookie.split(";");t<r.length;t++){var n=r[t].split("=");if(n[0].trim()===e)return n[1]}}(e)}function t(e){return localStorage.getItem(e)}function r(e){return window[e]}function n(e,t){var r=document.querySelector(e);return t?null==r?void 0:r.getAttribute(t):null==r?void 0:r.textContent}!function(o,i,a,c,u,l,s,v,d,f,g){var m,p,y,w;try{p=d&&(y=navigator.userAgent,(w=new RegExp("Version/([0-9._]+)(.*Mobile)?.*Safari.*").exec(y))&&parseFloat(w[1])>=16.4)?function(o,i,a){void 0===i&&(i="");var c={cookie:e,localStorage:t,jsVariable:r,cssSelector:n},u=Array.isArray(i)?i:[i];if(o&&c[o])for(var l=c[o],s=0,v=u;s<v.length;s++){var d=v[s],f=l(d);if(f)return f}else console.warn("invalid uid source",o)}(d,["_y","_shopify_y"]):void 0}catch(e){console.error(e)}var _=o;_[c]=_[c]||[],_[c].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var A=i.getElementsByTagName(a)[0],I=p?"&bi="+encodeURIComponent(p):"",h=i.createElement(a),E=p?"kp"+v:v;h.async=!0,h.src="{{DOMAIN}}/"+E+".js?id={{WEB_GTM_ID}}"+I,null===(m=A.parentNode)||void 0===m||m.insertBefore(h,A)}(window,document,"script","dataLayer",0,0,0,"{{CONTAINER_ID}}","cookie")}();`
        // `!function(){"use strict";function e(e){return function(e){for(var t=0,r=document.cookie.split(";");t<r.length;t++){var n=r[t].split("=");if(n[0].trim()===e)return n[1]}}(e)}function t(e){return localStorage.getItem(e)}function r(e){return window[e]}function n(e,t){var r=document.querySelector(e);return t?null==r?void 0:r.getAttribute(t):null==r?void 0:r.textContent}!function(o,i,a,c,s,u,l,d,v,f){var g,m,y,p;try{m=d&&(y=navigator.userAgent,(p=/Version\\/([0-9\._]+)(.*Mobile)?.*Safari.*/.exec(y))&&parseFloat(p[1])>=16.4)?function(o,i,a){void 0===i&&(i="");var c={cookie:e,localStorage:t,jsVariable:r,cssSelector:n},s=Array.isArray(i)?i:[i];if(o&&c[o])for(var u=c[o],l=0,d=s;l<d.length;l++){var v=d[l],f=u(v);if(f)return f}else console.warn("invalid uid source",o)}(d,["_y","_shopify_y"]):void 0}catch(e){console.error(e)}var h=o;h[c]=h[c]||[],h[c].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var w=i.getElementsByTagName(a)[0],S=m?"&bi="+encodeURIComponent(m):"",b=i.createElement(a),k=m?"kp"+l:l;b.async=!0,b.src="{{DOMAIN}}/"+k+".js?id={{WEB_GTM_ID}}"+S,null===(g=w.parentNode)||void 0===g||g.insertBefore(b,w)}(window,document,"script","dataLayer",0,0,"{{CONTAINER_ID}}","cookie")}();`
        .replace('{{DOMAIN}}', DOMAIN).replace('{{WEB_GTM_ID}}', WEB_GTM_ID).replace('{{CONTAINER_ID}}', CONTAINER_ID);
        script.innerHTML = text;
      } else {
        var _text = "(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='{{DOMAIN}}/{{CONTAINER_ID}}.js?".concat(IS_CUSTOM_ID ? 'st' : 'id', "='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','{{WEB_GTM_ID}}');").replace('{{DOMAIN}}', DOMAIN).replace('{{WEB_GTM_ID}}', WEB_GTM_ID).replace('{{CONTAINER_ID}}', CONTAINER_ID);
        script.innerHTML = _text;
      }
      document.head.appendChild(script);
    }
    var event_name = {
      'product_added_to_cart': 'add_to_cart_stape',
      'cart_viewed': 'view_cart_stape',
      'product_removed_from_cart': 'remove_from_cart_stape',
      'collection_viewed': 'view_collection_stape',
      'search_submitted': 'search_submitted_stape',
      'checkout_completed': 'purchase_stape',
      'product_viewed': 'view_item_stape'
    };
    setInterval(function () {
      try {
        var tmp = localStorage.getItem('stape_events');
        if (tmp) {
          tmp = JSON.parse(tmp);
          Object.keys(tmp).forEach(function (key) {
            var event = _objectSpread({}, tmp[key]);
            if (data_layer !== null && data_layer !== void 0 && data_layer.log_event) {
              console.log("🚀 ~ Object.keys ~ event:", event);
            }
            // let ecomm_pagetype = getPageType();
            var ecom = (0,_lib_parseEcomParams_js__WEBPACK_IMPORTED_MODULE_0__["default"])(event);
            // let userData = parseUserData(event);
            ecom.items = (0,_lib_parseItems_js__WEBPACK_IMPORTED_MODULE_1__["default"])(event);
            var eventData = {
              'event': event_name[event.name],
              'user_data': event.user_data,
              'ecommerce': ecom,
              ecomm_pagetype: event.ecomm_pagetype
            };
            if (eventData.event) {
              if (!data_layer.ecommerce) {
                delete eventData.ecommerce;
              } else {
                dataLayer.push({
                  ecommerce: null
                });
              }
              if (eventData.event == 'purchase_stape') {
                if (webhook.send_webhook && webhook.url && webhook.purchase_webhook) {
                  var cookies = {
                    'fbc': getCookie('fbc'),
                    'fbp': getCookie('fbp'),
                    'FPGCLAW': getCookie('FPGCLAW'),
                    '_gcl_aw': getCookie('_gcl_aw'),
                    'ttclid': getCookie('ttclid')
                  };
                  fetch(webhook.url, {
                    method: 'POST',
                    headers: {
                      'Content-Type': 'application/json'
                    },
                    body: JSON.stringify(_objectSpread(_objectSpread({}, eventData), {}, {
                      cookies: cookies
                    }))
                  });
                }
                if (!data_layer.checkout_extensibility) {
                  dataLayer.push(eventData);
                }
              } else {
                try {
                  delete eventData.user_data.lifetime_orders;
                  delete eventData.user_data.new_customer;
                } catch (error) {}
                dataLayer.push(eventData);
              }
              if (data_layer !== null && data_layer !== void 0 && data_layer.log_event) {
                console.log("🚀 ~ Object.keys ~ eventData:", eventData, dataLayer);
              }
            } else {
              if (data_layer !== null && data_layer !== void 0 && data_layer.log_event) {
                console.log("🚀 ~ Object.keys ~ eventData:", eventData, dataLayer);
              }
            }
            delete tmp[key];
            localStorage.setItem('stape_events', JSON.stringify(tmp));
          });
        }
      } catch (error) {
        console.log("🚀 ~ file: index.js:99 ~ setInterval ~ error:", error);
      }
    }, 500);
    window.addEventListener('message', function (message) {
      try {
        var data = JSON.parse(message.data);
        if (data.event.includes('_stape')) {
          window.dataLayer = window.dataLayer || [];
          dataLayer.push({
            ecommerce: null
          });
          dataLayer.push({
            'event': data.event,
            'user_data': data.user_data,
            'ecommerce': data.ecommerce,
            'ecomm_pagetype': data.pagetype
          });
        }
      } catch (e) {}
    });
    setTimeout(function () {
      if (!localStorage.getItem('stape_events')) {
        console.log('event old push tag');
        setEventOldScript();
      }
    }, 1000);
    function setEventOldScript() {
      try {
        var _window, _window$lsData, _window2, _window2$lsData;
        var setPushDatalayer = function setPushDatalayer(item) {
          try {
            if (['purchase_stape', 'begin_checkout_plus_stape'].includes(item === null || item === void 0 ? void 0 : item.event)) {
              if ((window.dataLayer || []).some(function (_i) {
                return (_i === null || _i === void 0 ? void 0 : _i.event) == (item === null || item === void 0 ? void 0 : item.event);
              })) {
                console.log('Not creted event');
                return;
              }
            }
            window.dataLayer.push(item);
          } catch (error) {
            window.dataLayer.push(item);
          }
        };
        var pathname = location.pathname;
        if (localStorage.getItem('cartToken') != cartData.token && pathname.indexOf('/checkouts') < 0) {
          localStorage.setItem('cartToken', cartData.token);
        }
        if (!window.lsData) {
          window.lsData = {};
        }
        var data = {};
        if ((_window = window) !== null && _window !== void 0 && (_window$lsData = _window.lsData) !== null && _window$lsData !== void 0 && _window$lsData.customer && (_window2 = window) !== null && _window2 !== void 0 && (_window2$lsData = _window2.lsData) !== null && _window2$lsData !== void 0 && _window2$lsData.customer.email && data_layer !== null && data_layer !== void 0 && data_layer.user_data) {
          var customer = window.lsData.customer || {};
          data.user_data = {
            email: customer.email,
            first_name: customer.first_name,
            last_name: customer.last_name,
            customer_id: customer.customer_id
          };
          if (!localStorage.getItem('customerLoginId')) {
            localStorage.setItem('customerLoginId', customer.customer_id);
            if (!localStorage.getItem('customerRegisterId') || localStorage.getItem('customerRegisterId') != customer.customer_id) {
              localStorage.setItem('customerRegisterId', customer.customer_id);
              setPushDatalayer({
                event: 'sign_up',
                user_data: data.user_data
              });
            } else {
              setPushDatalayer({
                event: 'login',
                user_data: data.user_data
              });
            }
          }
        } else {
          if (pathname.indexOf('/checkouts/') < 0) {
            localStorage.removeItem('customerLoginId');
          }
        }
        if (data_layer.ecommerce || data_layer.user_data) {
          var addToCart = function addToCart(id, variant_id) {
            if (id || variant_id) {
              var _cart = window.lsData.cart || {};
              var findItem = ((_cart === null || _cart === void 0 ? void 0 : _cart.items) || []).find(function (_i) {
                return _i.id == id;
              }) || ((_cart === null || _cart === void 0 ? void 0 : _cart.items) || []).find(function (_i) {
                return _i.variant_id == variant_id;
              });
              if (data_layer.ecommerce) {
                setPushDatalayer({
                  ecommerce: null
                });
              }
              if (findItem) {
                var _ecommerce3 = undefined;
                if (data_layer.ecommerce) {
                  _ecommerce3 = {
                    currency: window.lsData.currency,
                    items: [{
                      item_id: findItem.id,
                      item_sku: findItem.sku,
                      item_name: findItem.product_title,
                      item_brand: findItem.vendor,
                      item_category: findItem.product_type,
                      item_variant: findItem.title,
                      price: findItem.price / 100,
                      quantity: findItem.quantity
                    }]
                  };
                }
                setPushDatalayer(_objectSpread(_objectSpread({}, data), {}, {
                  ecommerce: _ecommerce3,
                  event: 'add_to_cart_stape'
                }));
              } else {
                var changeCart = /*#__PURE__*/function () {
                  var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
                    var cartContents, _findItem, _ecommerce4;
                    return _regeneratorRuntime().wrap(function _callee$(_context) {
                      while (1) switch (_context.prev = _context.next) {
                        case 0:
                          _context.prev = 0;
                          _context.next = 3;
                          return fetch(window.Shopify.routes.root + 'cart.js').then(function (response) {
                            return response.json();
                          }).then(function (data) {
                            return data;
                          });
                        case 3:
                          cartContents = _context.sent;
                          _findItem = (cartContents && cartContents.items || []).find(function (_i) {
                            return _i.id == id;
                          }) || (cartContents && cartContents.items || []).find(function (_i) {
                            return _i.variant_id == variant_id;
                          });
                          if (_findItem) {
                            _ecommerce4 = undefined;
                            if (data_layer.ecommerce) {
                              _ecommerce4 = {
                                currency: window.lsData.currency,
                                items: [{
                                  item_id: _findItem.id,
                                  item_sku: _findItem.sku,
                                  item_name: _findItem.product_title,
                                  item_brand: _findItem.vendor,
                                  item_category: _findItem.product_type,
                                  item_variant: _findItem.title,
                                  price: _findItem.price / 100,
                                  quantity: _findItem.quantity
                                }]
                              };
                            }
                            setPushDatalayer(_objectSpread(_objectSpread({}, data), {}, {
                              event: 'add_to_cart_stape'
                            }));
                          } else {
                            changeCart();
                          }
                          _context.next = 10;
                          break;
                        case 8:
                          _context.prev = 8;
                          _context.t0 = _context["catch"](0);
                        case 10:
                        case "end":
                          return _context.stop();
                      }
                    }, _callee, null, [[0, 8]]);
                  }));
                  return function changeCart() {
                    return _ref3.apply(this, arguments);
                  };
                }();
                changeCart();
              }
            }
          };
          var beginCheckoutStape = function beginCheckoutStape() {
            var _window6, _window6$lsData, _window7, _window7$lsData;
            var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'begin_checkout_stape';
            if (!((_window6 = window) !== null && _window6 !== void 0 && (_window6$lsData = _window6.lsData) !== null && _window6$lsData !== void 0 && _window6$lsData.cart || (_window7 = window) !== null && _window7 !== void 0 && (_window7$lsData = _window7.lsData) !== null && _window7$lsData !== void 0 && _window7$lsData.checkout)) {
              return;
            }
            if (data_layer.ecommerce) {
              setPushDatalayer({
                ecommerce: null
              });
            }
            var ecommerce = undefined;
            if (data_layer.ecommerce) {
              var _window8, _window8$lsData, _window9, _window9$lsData, _window10, _window10$lsData, _window11, _window11$lsData;
              var _cart2 = ((_window8 = window) === null || _window8 === void 0 ? void 0 : (_window8$lsData = _window8.lsData) === null || _window8$lsData === void 0 ? void 0 : _window8$lsData.cart) || ((_window9 = window) === null || _window9 === void 0 ? void 0 : (_window9$lsData = _window9.lsData) === null || _window9$lsData === void 0 ? void 0 : _window9$lsData.checkout) || {};
              var items = [];
              if ((_window10 = window) !== null && _window10 !== void 0 && (_window10$lsData = _window10.lsData) !== null && _window10$lsData !== void 0 && _window10$lsData.cart) {
                var _window$lsData$cart;
                items = (((_window$lsData$cart = window.lsData.cart) === null || _window$lsData$cart === void 0 ? void 0 : _window$lsData$cart.items) || []).map(function (_i) {
                  return {
                    item_id: _i.product_id + '',
                    item_sku: _i.sku,
                    item_name: _i.product_title,
                    item_brand: _i.vendor,
                    item_category: _i.product_type,
                    item_variant: _i.variant_id + '',
                    price: _i.price / 100,
                    quantity: _i.quantity
                  };
                });
              } else if ((_window11 = window) !== null && _window11 !== void 0 && (_window11$lsData = _window11.lsData) !== null && _window11$lsData !== void 0 && _window11$lsData.checkout) {
                var _window$lsData$checko;
                items = (((_window$lsData$checko = window.lsData.checkout) === null || _window$lsData$checko === void 0 ? void 0 : _window$lsData$checko.line_items) || []).map(function (_i) {
                  return {
                    item_id: _i.item_id + '',
                    item_sku: _i.item_sku,
                    item_name: _i.item_name,
                    item_brand: _i.item_brand,
                    item_category: _i.item_category,
                    item_variant: _i.item_variant + '',
                    price: _i.price,
                    quantity: _i.quantity
                  };
                });
              }
              ecommerce = {
                cart_total: _cart2.total_price / 100,
                currency: window.lsData.currency || _cart2.currency,
                cart_quantity: _cart2.item_count,
                items: items
              };
            }
            setPushDatalayer(_objectSpread(_objectSpread({}, data), {}, {
              ecommerce: ecommerce,
              event: event
            }));
            // console.log("🚀 ~ file: index.js:302 ~ beginCheckoutStape ~ window.dataLayer:", {...data, ecommerce, event})
          };
          var addXMLRequestCallback = function addXMLRequestCallback(callback) {
            var oldSend, i;
            if (XMLHttpRequest.callbacks) {
              XMLHttpRequest.callbacks.push(callback);
            } else {
              XMLHttpRequest.callbacks = [callback];
              oldSend = XMLHttpRequest.prototype.send;
              XMLHttpRequest.prototype.send = function () {
                var _XMLHttpRequest;
                if ((_XMLHttpRequest = XMLHttpRequest) !== null && _XMLHttpRequest !== void 0 && _XMLHttpRequest.callbacks && XMLHttpRequest.callbacks.length) {
                  for (i = 0; i < XMLHttpRequest.callbacks.length; i++) {
                    XMLHttpRequest.callbacks[i](this);
                  }
                }
                oldSend.apply(this, arguments);
              };
            }
          };
          var equelCart = /*#__PURE__*/function () {
            var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(cart) {
              var cartContents, countFor, findItem, oldFindItem, item, _ecommerce5, event;
              return _regeneratorRuntime().wrap(function _callee2$(_context2) {
                while (1) switch (_context2.prev = _context2.next) {
                  case 0:
                    _context2.prev = 0;
                    _context2.next = 3;
                    return fetch(window.Shopify.routes.root + 'cart.js').then(function (response) {
                      return response.json();
                    }).then(function (data) {
                      return data;
                    });
                  case 3:
                    cartContents = _context2.sent;
                    window.lsData.cart = cartContents || {};
                    countFor = parseInt(localStorage.getItem('cartForStape') || 0);
                    if (localStorage.getItem('cartToken') != cartContents.token) {
                      localStorage.setItem('cartToken', cartContents.token);
                    }
                    // const cart = window.lsData.cart || {};
                    findItem = (cartContents && cartContents.items || []).find(function (_i) {
                      return ((cart === null || cart === void 0 ? void 0 : cart.items) || []).some(function (_ii) {
                        return _ii.quantity != _i.quantity;
                      }) || !((cart === null || cart === void 0 ? void 0 : cart.items) || []).some(function (_ii) {
                        return _ii.id == _i.id;
                      });
                    });
                    oldFindItem = (cart && cart.items || []).find(function (_i) {
                      return (cartContents && (cartContents === null || cartContents === void 0 ? void 0 : cartContents.items) || []).some(function (_ii) {
                        return _ii.quantity != _i.quantity;
                      }) || !((cartContents === null || cartContents === void 0 ? void 0 : cartContents.items) || []).some(function (_ii) {
                        return _ii.id == _i.id;
                      });
                    });
                    if (findItem || oldFindItem) {
                      if (data_layer.ecommerce) {
                        setPushDatalayer({
                          ecommerce: null
                        });
                      }
                      item = findItem || oldFindItem;
                      _ecommerce5 = undefined;
                      if (data_layer.ecommerce) {
                        _ecommerce5 = {
                          currency: window.lsData.currency,
                          items: [{
                            item_id: item.product_id,
                            item_sku: item.sku,
                            item_name: item.product_title,
                            item_brand: item.vendor,
                            item_category: item.product_type,
                            item_variant: item.variant_id + '',
                            price: item.price / 100,
                            quantity: item.quantity
                          }]
                        };
                      }
                      event = 'add_to_cart_stape';
                      if ((findItem === null || findItem === void 0 ? void 0 : findItem.id) == (oldFindItem === null || oldFindItem === void 0 ? void 0 : oldFindItem.id)) {
                        event = findItem.quantity < oldFindItem.quantity ? 'remove_from_cart_stape' : 'add_to_cart_stape';
                      }
                      if (!findItem && oldFindItem) {
                        event = 'remove_from_cart_stape';
                      }
                      setPushDatalayer(_objectSpread(_objectSpread({}, data), {}, {
                        ecommerce: _ecommerce5,
                        event: event
                      }));
                      // console.log("🚀 ~ file: index.js:450 ~ equelCart ~ event:", event)
                    } else {
                      setTimeout(function () {
                        if (countFor < 5) {
                          localStorage.setItem('cartForStape', countFor + 1);
                          equelCart(cart);
                        }
                      }, 500);
                    }
                    _context2.next = 15;
                    break;
                  case 12:
                    _context2.prev = 12;
                    _context2.t0 = _context2["catch"](0);
                    console.log("🚀 ~ file: index.js:418 ~ equelCart ~ error:", _context2.t0);
                  case 15:
                  case "end":
                    return _context2.stop();
                }
              }, _callee2, null, [[0, 12]]);
            }));
            return function equelCart(_x2) {
              return _ref4.apply(this, arguments);
            };
          }();
          if (pathname.indexOf('/cart') > -1) {
            if (data_layer.ecommerce) {
              setPushDatalayer({
                ecommerce: null
              });
            }
            var ecommerce = undefined;
            if (data_layer.ecommerce) {
              var _window3, _window3$lsData;
              var cart = ((_window3 = window) === null || _window3 === void 0 ? void 0 : (_window3$lsData = _window3.lsData) === null || _window3$lsData === void 0 ? void 0 : _window3$lsData.cart) || {};
              ecommerce = {
                cart_total: cart.total_price / 100,
                currency: window.lsData.currency,
                cart_quantity: cart.item_count,
                items: ((cart === null || cart === void 0 ? void 0 : cart.items) || []).map(function (_i) {
                  return {
                    item_id: _i.product_id + '',
                    item_sku: _i.sku,
                    item_name: _i.product_title,
                    item_brand: _i.vendor,
                    item_category: _i.product_type,
                    item_variant: _i.variant_id + '',
                    price: _i.price / 100,
                    quantity: _i.quantity
                  };
                })
              };
            }
            setPushDatalayer(_objectSpread(_objectSpread({}, data), {}, {
              ecommerce: ecommerce,
              event: 'view_cart_stape'
            }));
          }
          if (pathname.indexOf('/collections/') > -1) {
            var _window$lsData2, _window$lsData3;
            if (data_layer.ecommerce) {
              setPushDatalayer({
                ecommerce: null
              });
            }
            var collection = ((_window$lsData2 = window.lsData) === null || _window$lsData2 === void 0 ? void 0 : _window$lsData2.collection) || [];
            var collection_title = ((_window$lsData3 = window.lsData) === null || _window$lsData3 === void 0 ? void 0 : _window$lsData3.collection_title) || '';
            var _ecommerce = undefined;
            if (data_layer.ecommerce) {
              var _window$lsData4;
              _ecommerce = {
                currency: (_window$lsData4 = window.lsData) === null || _window$lsData4 === void 0 ? void 0 : _window$lsData4.currency,
                item_list_name: collection_title,
                items: (collection || []).map(function (product) {
                  return {
                    'item_name': product.title,
                    'item_id': product.id,
                    'item_sku': product.variants && product.variants[0] && product.variants[0].sku ? product.variants[0].sku : '',
                    'price': (product.price / 100).toFixed(2),
                    'item_variant': product.variants[0].id + ''
                  };
                })
              };
            }
            setPushDatalayer(_objectSpread(_objectSpread({}, data), {}, {
              ecommerce: _ecommerce,
              event: 'view_collection_stape'
            }));
          }
          if (pathname.indexOf('/products/') > -1) {
            var _window$lsData5;
            if (data_layer.ecommerce) {
              setPushDatalayer({
                ecommerce: null
              });
            }
            var product = ((_window$lsData5 = window.lsData) === null || _window$lsData5 === void 0 ? void 0 : _window$lsData5.product) || {};
            var _ecommerce2 = undefined;
            if (data_layer.ecommerce) {
              var _window$lsData6, _window$lsData6$cart, _product$id;
              _ecommerce2 = {
                currency: (_window$lsData6 = window.lsData) === null || _window$lsData6 === void 0 ? void 0 : (_window$lsData6$cart = _window$lsData6.cart) === null || _window$lsData6$cart === void 0 ? void 0 : _window$lsData6$cart.currency,
                items: [{
                  item_name: product.title,
                  item_id: product === null || product === void 0 ? void 0 : (_product$id = product.id) === null || _product$id === void 0 ? void 0 : _product$id.toString(),
                  item_sku: product.variants && product.variants[0] && product.variants[0].sku ? product.variants[0].sku : '',
                  item_brand: product.vendor,
                  item_category: product.type,
                  price: (product.price / 100).toFixed(2),
                  item_variant: product.variants && product.variants[0] ? product.variants[0].id + '' : ''
                }]
              };
            }
            setPushDatalayer(_objectSpread(_objectSpread({}, data), {}, {
              ecommerce: _ecommerce2,
              event: 'view_item_stape'
            }));
          }
          if (pathname.indexOf('/checkouts') > -1 && location.href.indexOf('step=payment_method') > -1) {
            var _window4, _window4$lsData, _window5, _window5$lsData;
            var checkout = ((_window4 = window) === null || _window4 === void 0 ? void 0 : (_window4$lsData = _window4.lsData) === null || _window4$lsData === void 0 ? void 0 : _window4$lsData.checkout) || {};
            var _customer = ((_window5 = window) === null || _window5 === void 0 ? void 0 : (_window5$lsData = _window5.lsData) === null || _window5$lsData === void 0 ? void 0 : _window5$lsData.customer) || {};
            data.event = 'payment_info_stape';
            if (data_layer.ecommerce) {
              setPushDatalayer({
                ecommerce: null
              });
            }
            if (data_layer.user_data) {
              var _checkout$shipping_ad, _checkout$billing_add, _checkout$shipping_ad2, _checkout$billing_add2, _checkout$shipping_ad3, _checkout$billing_add3, _checkout$shipping_ad4, _checkout$billing_add4, _checkout$shipping_ad5, _checkout$billing_add5, _checkout$shipping_ad6, _checkout$billing_add6, _checkout$shipping_ad7, _checkout$shipping_ad8, _checkout$billing_add7, _checkout$shipping_ad9, _checkout$billing_add8;
              data.user_data = {
                email: checkout.email,
                first_name: (checkout === null || checkout === void 0 ? void 0 : (_checkout$shipping_ad = checkout.shipping_address) === null || _checkout$shipping_ad === void 0 ? void 0 : _checkout$shipping_ad.first_name) || (checkout === null || checkout === void 0 ? void 0 : (_checkout$billing_add = checkout.billing_address) === null || _checkout$billing_add === void 0 ? void 0 : _checkout$billing_add.first_name) || '',
                last_name: (checkout === null || checkout === void 0 ? void 0 : (_checkout$shipping_ad2 = checkout.shipping_address) === null || _checkout$shipping_ad2 === void 0 ? void 0 : _checkout$shipping_ad2.last_name) || (checkout === null || checkout === void 0 ? void 0 : (_checkout$billing_add2 = checkout.billing_address) === null || _checkout$billing_add2 === void 0 ? void 0 : _checkout$billing_add2.last_name) || '',
                phone: (checkout === null || checkout === void 0 ? void 0 : (_checkout$shipping_ad3 = checkout.shipping_address) === null || _checkout$shipping_ad3 === void 0 ? void 0 : _checkout$shipping_ad3.phone) || (checkout === null || checkout === void 0 ? void 0 : (_checkout$billing_add3 = checkout.billing_address) === null || _checkout$billing_add3 === void 0 ? void 0 : _checkout$billing_add3.phone) || '',
                country: (checkout === null || checkout === void 0 ? void 0 : (_checkout$shipping_ad4 = checkout.shipping_address) === null || _checkout$shipping_ad4 === void 0 ? void 0 : _checkout$shipping_ad4.country_code) || (checkout === null || checkout === void 0 ? void 0 : (_checkout$billing_add4 = checkout.billing_address) === null || _checkout$billing_add4 === void 0 ? void 0 : _checkout$billing_add4.country_code) || '',
                region: (checkout === null || checkout === void 0 ? void 0 : (_checkout$shipping_ad5 = checkout.shipping_address) === null || _checkout$shipping_ad5 === void 0 ? void 0 : _checkout$shipping_ad5.province) || (checkout === null || checkout === void 0 ? void 0 : (_checkout$billing_add5 = checkout.billing_address) === null || _checkout$billing_add5 === void 0 ? void 0 : _checkout$billing_add5.province) || '',
                city: (checkout === null || checkout === void 0 ? void 0 : (_checkout$shipping_ad6 = checkout.shipping_address) === null || _checkout$shipping_ad6 === void 0 ? void 0 : _checkout$shipping_ad6.city) || (checkout === null || checkout === void 0 ? void 0 : (_checkout$billing_add6 = checkout.billing_address) === null || _checkout$billing_add6 === void 0 ? void 0 : _checkout$billing_add6.city) || '',
                street: (checkout === null || checkout === void 0 ? void 0 : (_checkout$shipping_ad7 = checkout.shipping_address) === null || _checkout$shipping_ad7 === void 0 ? void 0 : _checkout$shipping_ad7.street) || (checkout === null || checkout === void 0 ? void 0 : (_checkout$shipping_ad8 = checkout.shipping_address) === null || _checkout$shipping_ad8 === void 0 ? void 0 : _checkout$shipping_ad8.address1) || (checkout === null || checkout === void 0 ? void 0 : (_checkout$billing_add7 = checkout.billing_address) === null || _checkout$billing_add7 === void 0 ? void 0 : _checkout$billing_add7.address1) || '',
                zip: (checkout === null || checkout === void 0 ? void 0 : (_checkout$shipping_ad9 = checkout.shipping_address) === null || _checkout$shipping_ad9 === void 0 ? void 0 : _checkout$shipping_ad9.zip) || (checkout === null || checkout === void 0 ? void 0 : (_checkout$billing_add8 = checkout.billing_address) === null || _checkout$billing_add8 === void 0 ? void 0 : _checkout$billing_add8.zip) || '',
                customer_id: (_customer === null || _customer === void 0 ? void 0 : _customer.id) || (checkout === null || checkout === void 0 ? void 0 : checkout.customer_id) || ''
              };
            }
            if (data_layer.ecommerce) {
              data.ecommerce = {
                currency: checkout === null || checkout === void 0 ? void 0 : checkout.currency,
                cart_total: (checkout === null || checkout === void 0 ? void 0 : checkout.total_price) / 100,
                cart_quantity: checkout.item_count,
                items: (checkout === null || checkout === void 0 ? void 0 : checkout.line_items) || []
              };
            }
            setPushDatalayer(_objectSpread({}, data));
          }
          var originalFetch = window.fetch;
          window.fetch = function (url, init) {
            var tmpUrl = url + '';
            // console.log("🚀 ~ file: index.js:372 ~ fetch ~ url:", tmpUrl)
            try {
              if (tmpUrl == '/cart/add' || tmpUrl == '/cart/change' || tmpUrl == '/cart/add.js' || tmpUrl == '/cart/change.js' || tmpUrl.indexOf('/cart/update.js') == 0) {
                var _window12, _window12$lsData;
                var _cart3 = ((_window12 = window) === null || _window12 === void 0 ? void 0 : (_window12$lsData = _window12.lsData) === null || _window12$lsData === void 0 ? void 0 : _window12$lsData.cart) || {};
                localStorage.setItem('oldCartStape', JSON.stringify(_cart3));
              }
            } catch (error) {
              console.log("🚀 ~ file: index.js:356 ~ .then ~ error:", error);
            }
            return originalFetch(url, init);
          };
          addXMLRequestCallback(function (xhr) {
            // console.log("🚀 ~ file: index.js:462 ~ addXMLRequestCallback ~ xhr:", xhr._url)
            if (xhr._url == '/cart/add.js' || xhr._url == '/cart/change.js') {
              var _cart4 = window.lsData.cart || {};
              localStorage.setItem('oldCartStape', JSON.stringify(_cart4));
            }
          });
          document.addEventListener('submit', function (event) {
            if (event.target.action.indexOf('/cart/add') > -1) {
              var _cart5 = window.lsData.cart || {};
              localStorage.setItem('oldCartStape', JSON.stringify(_cart5));
            } else if (event.target.action.indexOf('/cart') > -1) {
              beginCheckoutStape();
            }
          });
          if (window.location.href.includes('/checkout') && !localStorage.getItem('begin_checkout_plus_stape')) {
            localStorage.setItem('begin_checkout_plus_stape', 'true');
            beginCheckoutStape('begin_checkout_plus_stape');
          } else {
            localStorage.removeItem('begin_checkout_plus_stape');
          }

          // window.addEventListener('popstate', function(event) {
          //   // Виконувати дії, які потрібно при зміні URL
          //   console.log('URL було змінено', window.location.href, event);
          //   alert('1')
          // });

          setInterval(function () {
            var cart = localStorage.getItem('oldCartStape');
            if (cart) {
              try {
                cart = JSON.parse(cart);
                localStorage.removeItem('oldCartStape');
                localStorage.setItem('cartForStape', 0);
                equelCart(cart);
              } catch (error) {}
            }
          }, 500);
        }
        if (pathname.indexOf('/thank_you') > -1) {
          var _window13, _window13$Shopify, _window14, _window14$lsData;
          var _checkout = ((_window13 = window) === null || _window13 === void 0 ? void 0 : (_window13$Shopify = _window13.Shopify) === null || _window13$Shopify === void 0 ? void 0 : _window13$Shopify.checkout) || {};
          var _customer2 = ((_window14 = window) === null || _window14 === void 0 ? void 0 : (_window14$lsData = _window14.lsData) === null || _window14$lsData === void 0 ? void 0 : _window14$lsData.customer) || {};
          if (data_layer.ecommerce) {
            setPushDatalayer({
              ecommerce: null
            });
          }
          var data2 = {
            event: 'purchase_stape'
          };
          if (data_layer.user_data) {
            var _checkout$billing_add9, _checkout$shipping_ad10, _checkout$billing_add10, _checkout$shipping_ad11, _checkout$billing_add11, _checkout$shipping_ad12, _checkout$billing_add12, _checkout$shipping_ad13, _checkout$billing_add13, _checkout$shipping_ad14, _checkout$billing_add14, _checkout$billing_add15, _checkout$billing_add16, _checkout$shipping_ad15, _checkout$billing_add17, _checkout$shipping_ad16, _checkout$billing_add18, _checkout$shipping_ad17;
            data2.user_data = {
              email: _checkout.email || (_checkout === null || _checkout === void 0 ? void 0 : (_checkout$billing_add9 = _checkout.billing_address) === null || _checkout$billing_add9 === void 0 ? void 0 : _checkout$billing_add9.email) || (_checkout === null || _checkout === void 0 ? void 0 : (_checkout$shipping_ad10 = _checkout.shipping_address) === null || _checkout$shipping_ad10 === void 0 ? void 0 : _checkout$shipping_ad10.email),
              first_name: (_customer2 === null || _customer2 === void 0 ? void 0 : _customer2.first_name) || (_checkout === null || _checkout === void 0 ? void 0 : (_checkout$billing_add10 = _checkout.billing_address) === null || _checkout$billing_add10 === void 0 ? void 0 : _checkout$billing_add10.first_name) || (_checkout === null || _checkout === void 0 ? void 0 : (_checkout$shipping_ad11 = _checkout.shipping_address) === null || _checkout$shipping_ad11 === void 0 ? void 0 : _checkout$shipping_ad11.first_name),
              last_name: (_customer2 === null || _customer2 === void 0 ? void 0 : _customer2.last_name) || (_checkout === null || _checkout === void 0 ? void 0 : (_checkout$billing_add11 = _checkout.billing_address) === null || _checkout$billing_add11 === void 0 ? void 0 : _checkout$billing_add11.last_name) || (_checkout === null || _checkout === void 0 ? void 0 : (_checkout$shipping_ad12 = _checkout.shipping_address) === null || _checkout$shipping_ad12 === void 0 ? void 0 : _checkout$shipping_ad12.last_name),
              phone: (_customer2 === null || _customer2 === void 0 ? void 0 : _customer2.phone) || (_checkout === null || _checkout === void 0 ? void 0 : (_checkout$billing_add12 = _checkout.billing_address) === null || _checkout$billing_add12 === void 0 ? void 0 : _checkout$billing_add12.phone) || (_checkout === null || _checkout === void 0 ? void 0 : (_checkout$shipping_ad13 = _checkout.shipping_address) === null || _checkout$shipping_ad13 === void 0 ? void 0 : _checkout$shipping_ad13.phone),
              country: (_checkout === null || _checkout === void 0 ? void 0 : (_checkout$billing_add13 = _checkout.billing_address) === null || _checkout$billing_add13 === void 0 ? void 0 : _checkout$billing_add13.country_code) || (_checkout === null || _checkout === void 0 ? void 0 : (_checkout$shipping_ad14 = _checkout.shipping_address) === null || _checkout$shipping_ad14 === void 0 ? void 0 : _checkout$shipping_ad14.country_code),
              region: _checkout.billing_address.country_code == "US" ? _checkout === null || _checkout === void 0 ? void 0 : (_checkout$billing_add14 = _checkout.billing_address) === null || _checkout$billing_add14 === void 0 ? void 0 : _checkout$billing_add14.province_code : _checkout === null || _checkout === void 0 ? void 0 : (_checkout$billing_add15 = _checkout.billing_address) === null || _checkout$billing_add15 === void 0 ? void 0 : _checkout$billing_add15.province,
              city: (_checkout === null || _checkout === void 0 ? void 0 : (_checkout$billing_add16 = _checkout.billing_address) === null || _checkout$billing_add16 === void 0 ? void 0 : _checkout$billing_add16.city) || (_checkout === null || _checkout === void 0 ? void 0 : (_checkout$shipping_ad15 = _checkout.shipping_address) === null || _checkout$shipping_ad15 === void 0 ? void 0 : _checkout$shipping_ad15.city),
              street: (_checkout === null || _checkout === void 0 ? void 0 : (_checkout$billing_add17 = _checkout.billing_address) === null || _checkout$billing_add17 === void 0 ? void 0 : _checkout$billing_add17.address1) || (_checkout === null || _checkout === void 0 ? void 0 : (_checkout$shipping_ad16 = _checkout.shipping_address) === null || _checkout$shipping_ad16 === void 0 ? void 0 : _checkout$shipping_ad16.address1),
              zip: (_checkout === null || _checkout === void 0 ? void 0 : (_checkout$billing_add18 = _checkout.billing_address) === null || _checkout$billing_add18 === void 0 ? void 0 : _checkout$billing_add18.zip) || (_checkout === null || _checkout === void 0 ? void 0 : (_checkout$shipping_ad17 = _checkout.shipping_address) === null || _checkout$shipping_ad17 === void 0 ? void 0 : _checkout$shipping_ad17.zip),
              customer_id: (_customer2 === null || _customer2 === void 0 ? void 0 : _customer2.id) || (_checkout === null || _checkout === void 0 ? void 0 : _checkout.customer_id)
            };
          }
          if (data_layer.ecommerce) {
            var _window15, _window15$Shopify, _checkout$shipping, _checkout$shipping_ra, _checkout$discount, _checkout$discount2;
            var _shop = (_window15 = window) === null || _window15 === void 0 ? void 0 : (_window15$Shopify = _window15.Shopify) === null || _window15$Shopify === void 0 ? void 0 : _window15$Shopify.shop;
            data2.ecommerce = {
              transaction_id: _checkout === null || _checkout === void 0 ? void 0 : _checkout.order_id,
              affiliation: _shop,
              value: _checkout === null || _checkout === void 0 ? void 0 : _checkout.total_price,
              tax: _checkout === null || _checkout === void 0 ? void 0 : _checkout.total_tax,
              shipping: (_checkout === null || _checkout === void 0 ? void 0 : (_checkout$shipping = _checkout.shipping) === null || _checkout$shipping === void 0 ? void 0 : _checkout$shipping.price) || (_checkout === null || _checkout === void 0 ? void 0 : (_checkout$shipping_ra = _checkout.shipping_rate) === null || _checkout$shipping_ra === void 0 ? void 0 : _checkout$shipping_ra.price),
              // sub_total: checkout?.total_price,
              discount_amount: _checkout === null || _checkout === void 0 ? void 0 : (_checkout$discount = _checkout.discount) === null || _checkout$discount === void 0 ? void 0 : _checkout$discount.amount,
              discount: _checkout === null || _checkout === void 0 ? void 0 : (_checkout$discount2 = _checkout.discount) === null || _checkout$discount2 === void 0 ? void 0 : _checkout$discount2.code,
              currency: _checkout === null || _checkout === void 0 ? void 0 : _checkout.currency,
              items: ((_checkout === null || _checkout === void 0 ? void 0 : _checkout.line_items) || []).map(function (_i) {
                return {
                  item_id: _i.product_id,
                  item_sku: _i.sku,
                  item_name: _i.title,
                  item_brand: _i.vendor,
                  item_variant: _i.variant_id + '',
                  price: _i.price,
                  quantity: _i.quantity
                };
              })
            };
          }
          if (data_layer.ecommerce || data_layer.user_data) {
            setPushDatalayer(_objectSpread({}, data2));
          }
          try {
            var customerId = data2.user_data.customer_id;
            if (!localStorage.getItem('customerLoginId') && customerId) {
              localStorage.setItem('customerLoginId', customerId);
              if (!localStorage.getItem('customerRegisterId') || localStorage.getItem('customerRegisterId') != customerId) {
                localStorage.setItem('customerRegisterId', customerId);
                setPushDatalayer({
                  event: 'sign_up',
                  user_data: data2.user_data
                });
              } else {
                setPushDatalayer({
                  event: 'login',
                  user_data: data2.user_data
                });
              }
            }
          } catch (error) {}
          if (webhook.send_webhook && webhook.url && webhook.purchase_webhook) {
            var cookies = {
              'fbc': getCookie('fbc'),
              'fbp': getCookie('fbp'),
              'FPGCLAW': getCookie('FPGCLAW'),
              '_gcl_aw': getCookie('_gcl_aw'),
              'ttclid': getCookie('ttclid')
            };
            fetch(webhook.url, {
              method: 'POST',
              headers: {
                'Content-Type': 'application/json'
              },
              body: JSON.stringify(_objectSpread(_objectSpread({}, data2), {}, {
                cookies: cookies,
                cart_id: localStorage.getItem('cartToken')
              }))
            });
          }
        }
      } catch (error) {
        console.log("🚀 ~ setEventOldScript ~ error:", error);
      }
    }
  })["catch"](function (err) {
    console.log('🚀 ~ file: index.js ~ line 184 ~ ]).then ~ err', err);
    // logger.error('add to cart error', err);
  });
})();

function setCustomer(customer) {
  console.log("🚀 ~ file: index.js:42 ~ setCustomer ~ customer:", customer);
}
})();

lsNetvisioGTM = __webpack_exports__;
/******/ })()
;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDLFNBQVMsQ0FBQztjQUMvQixTQUFTLEVBQUVBLFNBQVMsQ0FBQyxTQUFTLENBQUM7Y0FDL0IsUUFBUSxFQUFFQSxTQUFTLENBQUMsUUFBUTtZQUM5QixDQUFDO1lBQ0RRLEtBQUssQ0FBQ1ksT0FBTyxDQUFDdkIsR0FBRyxFQUFFO2NBQ2pCWSxNQUFNLEVBQUUsTUFBTTtjQUNkcUQsT0FBTyxFQUFFO2dCQUNQLGNBQWMsRUFBRTtjQUNsQixDQUFDO2NBQ0RDLElBQUksRUFBRWYsSUFBSSxDQUFDZ0IsU0FBUyxpQ0FBS3lGLEtBQUs7Z0JBQUU1RixPQUFPLEVBQVBBLE9BQU87Z0JBQUVvRyxPQUFPLEVBQUVuSCxZQUFZLENBQUNDLE9BQU8sQ0FBQyxXQUFXO2NBQUM7WUFDckYsQ0FBQyxDQUFDO1VBQ0o7UUFDRjtNQUNGLENBQUMsQ0FBQyxPQUFPcUIsS0FBSyxFQUFFO1FBQ2Q3RSxPQUFPLENBQUNDLEdBQUcsQ0FBQyxpQ0FBaUMsRUFBRTRFLEtBQUssQ0FBQztNQUN2RDtJQUNGO0VBQ0YsQ0FBQyxDQUFDLFNBQ0ksQ0FBQyxVQUFDOEYsR0FBRyxFQUFLO0lBQ2QzSyxPQUFPLENBQUNDLEdBQUcsQ0FBQyxnREFBZ0QsRUFBRTBLLEdBQUcsQ0FBQztJQUNsRTtFQUNGLENBQUMsQ0FBQztBQUNOLENBQUMsR0FBRzs7QUFHRyxTQUFTQyxXQUFXLENBQUM3RSxRQUFRLEVBQUU7RUFDcEMvRixPQUFPLENBQUNDLEdBQUcsQ0FBQyxrREFBa0QsRUFBRThGLFFBQVEsQ0FBQztBQUMzRSxDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbHNOZXR2aXNpb0dUTS8uL2xpYi9wYXJzZUVjb21QYXJhbXMuanMiLCJ3ZWJwYWNrOi8vbHNOZXR2aXNpb0dUTS8uL2xpYi9wYXJzZUl0ZW1zLmpzIiwid2VicGFjazovL2xzTmV0dmlzaW9HVE0vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vbHNOZXR2aXNpb0dUTS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vbHNOZXR2aXNpb0dUTS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL2xzTmV0dmlzaW9HVE0vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9sc05ldHZpc2lvR1RNLy4vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gcGFyc2VFY29tUGFyYW1zKGV2ZW50KSB7XG4gICAgXG4gIGxldCBlY29tID0ge307XG5cbiAgaWYgKGV2ZW50LmRhdGE/LmNoZWNrb3V0Py50b3RhbFByaWNlPy5hbW91bnQpIHtcbiAgICBlY29tLnZhbHVlID0gZXZlbnQuZGF0YS5jaGVja291dC50b3RhbFByaWNlLmFtb3VudC50b1N0cmluZygpO1xuICAgIGVjb20uY2FydF90b3RhbCA9IGV2ZW50LmRhdGEuY2hlY2tvdXQudG90YWxQcmljZS5hbW91bnQudG9TdHJpbmcoKTtcbiAgICBlY29tLmN1cnJlbmN5ID0gZXZlbnQuZGF0YS5jaGVja291dC50b3RhbFByaWNlLmN1cnJlbmN5Q29kZTtcbiAgICBlY29tLmNhcnRfcXVhbnRpdHkgPSBldmVudC5kYXRhLmNoZWNrb3V0LmxpbmVJdGVtcy5sZW5ndGg7XG4gIH1cblxuICBpZiAoZXZlbnQubmFtZSA9PSBcImNoZWNrb3V0X2NvbXBsZXRlZFwiKSB7XG4gICAgZWNvbS50YXggPSBldmVudC5kYXRhLmNoZWNrb3V0LnRvdGFsVGF4LmFtb3VudDtcbiAgICBlY29tLnNoaXBwaW5nID0gZXZlbnQuZGF0YS5jaGVja291dC5zaGlwcGluZ0xpbmUucHJpY2UuYW1vdW50O1xuICAgIGVjb20udHJhbnNhY3Rpb25faWQgPSBldmVudC5kYXRhLmNoZWNrb3V0Lm9yZGVyLmlkO1xuICAgIGVjb20uY291cG9uID0gZXZlbnQuZGF0YS5jaGVja291dD8uZGlzY291bnRBcHBsaWNhdGlvbnNbMF0/LnRpdGxlO1xuICAgIGVjb20uZGlzY291bnQgPSBldmVudC5kYXRhLmNoZWNrb3V0Py5kaXNjb3VudEFwcGxpY2F0aW9uc1swXT8udGl0bGU7XG4gICAgZWNvbS5kaXNjb3VudF9hbW91bnQgPSBldmVudC5kYXRhLmNoZWNrb3V0Py5kaXNjb3VudEFwcGxpY2F0aW9uc1swXT8udmFsdWU/LmFtb3VudDtcbiAgICBlY29tLmRpc2NvdW50X3BlcmNlbnRhZ2UgPSBldmVudC5kYXRhLmNoZWNrb3V0Py5kaXNjb3VudEFwcGxpY2F0aW9uc1swXT8udmFsdWU/LnBlcmNlbnRhZ2U7XG4gICAgZWNvbS5zdWJfdG90YWwgPSBldmVudC5kYXRhLmNoZWNrb3V0LnN1YnRvdGFsUHJpY2UuYW1vdW50O1xuICB9XG5cbiAgaWYgKGV2ZW50Lm5hbWUgPT0gXCJjb2xsZWN0aW9uX3ZpZXdlZFwiKSB7XG4gICAgZWNvbS5jb2xsZWN0aW9uX2lkID0gZXZlbnQuZGF0YS5jb2xsZWN0aW9uLmlkO1xuICAgIGVjb20uaXRlbV9saXN0X25hbWUgPSBldmVudC5kYXRhLmNvbGxlY3Rpb24udGl0bGU7XG4gICAgZWNvbS5jdXJyZW5jeSA9IGV2ZW50LmRhdGEuY29sbGVjdGlvbi5wcm9kdWN0VmFyaWFudHNbMF0ucHJpY2UuY3VycmVuY3lDb2RlO1xuICB9XG5cbiAgaWYgKGV2ZW50Lm5hbWUgPT0gXCJzZWFyY2hfc3VibWl0dGVkXCIpIHtcbiAgICBlY29tLnNlYXJjaF90ZXJtID0gZXZlbnQuZGF0YS5zZWFyY2hSZXN1bHQucXVlcnk7XG4gICAgZWNvbS5jdXJyZW5jeSA9IGV2ZW50LmRhdGEuc2VhcmNoUmVzdWx0LnByb2R1Y3RWYXJpYW50c1swXS5wcmljZS5jdXJyZW5jeUNvZGU7XG4gIH1cblxuICBpZiAoZXZlbnQubmFtZSA9PSBcImNhcnRfdmlld2VkXCIpIHtcbiAgICBlY29tLnZhbHVlID0gZXZlbnQuZGF0YS5jYXJ0LmNvc3QudG90YWxBbW91bnQuYW1vdW50LnRvU3RyaW5nKCk7XG4gICAgZWNvbS5jdXJyZW5jeSA9IGV2ZW50LmRhdGEuY2FydC5jb3N0LnRvdGFsQW1vdW50LmN1cnJlbmN5Q29kZTtcbiAgfVxuXG4gIGlmIChldmVudC5uYW1lID09IFwicHJvZHVjdF92aWV3ZWRcIikge1xuICAgIGVjb20udmFsdWUgPSBldmVudC5kYXRhLnByb2R1Y3RWYXJpYW50LnByaWNlLmFtb3VudC50b1N0cmluZygpO1xuICAgIGVjb20uY3VycmVuY3kgPSBldmVudC5kYXRhLnByb2R1Y3RWYXJpYW50LnByaWNlLmN1cnJlbmN5Q29kZTtcbiAgfVxuXG4gIGlmIChldmVudC5uYW1lID09IFwicHJvZHVjdF9hZGRlZF90b19jYXJ0XCIpIHtcbiAgICBlY29tLnZhbHVlID0gZXZlbnQuZGF0YS5jYXJ0TGluZS5tZXJjaGFuZGlzZS5wcmljZS5hbW91bnQudG9TdHJpbmcoKTtcbiAgICBlY29tLmN1cnJlbmN5ID0gZXZlbnQuZGF0YS5jYXJ0TGluZS5tZXJjaGFuZGlzZS5wcmljZS5jdXJyZW5jeUNvZGU7XG4gIH1cblxuICBpZiAoZXZlbnQubmFtZSA9PSBcInByb2R1Y3RfcmVtb3ZlZF9mcm9tX2NhcnRcIikge1xuICAgIGVjb20udmFsdWUgPSBldmVudC5kYXRhLmNhcnRMaW5lLm1lcmNoYW5kaXNlLnByaWNlLmFtb3VudC50b1N0cmluZygpO1xuICAgIGVjb20uY3VycmVuY3kgPSBldmVudC5kYXRhLmNhcnRMaW5lLm1lcmNoYW5kaXNlLnByaWNlLmN1cnJlbmN5Q29kZTtcbiAgfVxuXG4gIHJldHVybiBlY29tO1xuXG59O1xuXG5leHBvcnQgZGVmYXVsdCBwYXJzZUVjb21QYXJhbXM7IiwiZnVuY3Rpb24gcGFyc2VJdGVtcyhldmVudCkge1xuXG4gIGxldCBpdGVtcyA9IFtdO1xuXG4gIGlmIChldmVudC5kYXRhPy5jaGVja291dD8ubGluZUl0ZW1zKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBldmVudC5kYXRhLmNoZWNrb3V0LmxpbmVJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgJ2l0ZW1faWQnOiBldmVudC5kYXRhLmNoZWNrb3V0LmxpbmVJdGVtc1tpXS52YXJpYW50LnByb2R1Y3QuaWQsXG4gICAgICAgICAgJ2l0ZW1fc2t1JzogZXZlbnQuZGF0YS5jaGVja291dC5saW5lSXRlbXNbaV0udmFyaWFudC5za3UsXG4gICAgICAgICAgJ2l0ZW1fdmFyaWFudCc6IGV2ZW50LmRhdGEuY2hlY2tvdXQubGluZUl0ZW1zW2ldLnZhcmlhbnQuaWQsXG4gICAgICAgICAgJ2l0ZW1fbmFtZSc6IGV2ZW50LmRhdGEuY2hlY2tvdXQubGluZUl0ZW1zW2ldLnZhcmlhbnQucHJvZHVjdC50aXRsZSxcbiAgICAgICAgICAndmFyaWFudF9uYW1lJzogZXZlbnQuZGF0YS5jaGVja291dC5saW5lSXRlbXNbaV0udmFyaWFudC50aXRsZSxcbiAgICAgICAgICAnaXRlbV9jYXRlZ29yeSc6IGV2ZW50LmRhdGEuY2hlY2tvdXQubGluZUl0ZW1zW2ldLnZhcmlhbnQucHJvZHVjdC50eXBlLFxuICAgICAgICAgICdpdGVtX2JyYW5kJzogZXZlbnQuZGF0YS5jaGVja291dC5saW5lSXRlbXNbaV0udmFyaWFudC5wcm9kdWN0LnZlbmRvcixcbiAgICAgICAgICAncHJpY2UnOiBldmVudC5kYXRhLmNoZWNrb3V0LmxpbmVJdGVtc1tpXS52YXJpYW50LnByaWNlLmFtb3VudCxcbiAgICAgICAgICAnaW1hZ2VVUkwnOiBldmVudC5kYXRhLmNoZWNrb3V0LmxpbmVJdGVtc1tpXS52YXJpYW50LmltYWdlLnNyYyxcbiAgICAgICAgICAnZGlzY291bnQnOiBldmVudC5kYXRhLmNoZWNrb3V0LmxpbmVJdGVtc1tpXS5kaXNjb3VudEFsbG9jYXRpb25zWzBdPy5hbW91bnQ/LmFtb3VudCA/IGV2ZW50LmRhdGEuY2hlY2tvdXQubGluZUl0ZW1zW2ldLmRpc2NvdW50QWxsb2NhdGlvbnNbMF0uYW1vdW50LmFtb3VudCA6IG51bGwsXG4gICAgICAgICAgJ3F1YW50aXR5JzogZXZlbnQuZGF0YS5jaGVja291dC5saW5lSXRlbXNbaV0ucXVhbnRpdHlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChldmVudC5kYXRhPy5jYXJ0TGluZT8ubWVyY2hhbmRpc2UpIHtcbiAgICBpdGVtcy5wdXNoKHtcbiAgICAgICdpdGVtX2lkJzogZXZlbnQuZGF0YS5jYXJ0TGluZS5tZXJjaGFuZGlzZS5wcm9kdWN0LmlkLFxuICAgICAgJ2l0ZW1fc2t1JzogZXZlbnQuZGF0YS5jYXJ0TGluZS5tZXJjaGFuZGlzZS5za3UsXG4gICAgICAnaXRlbV92YXJpYW50JzogZXZlbnQuZGF0YS5jYXJ0TGluZS5tZXJjaGFuZGlzZS5pZCxcbiAgICAgICdpdGVtX25hbWUnOiBldmVudC5kYXRhLmNhcnRMaW5lLm1lcmNoYW5kaXNlLnByb2R1Y3QudGl0bGUsXG4gICAgICAndmFyaWFudF9uYW1lJzogZXZlbnQuZGF0YS5jYXJ0TGluZS5tZXJjaGFuZGlzZS50aXRsZSxcbiAgICAgICdpdGVtX2NhdGVnb3J5JzogZXZlbnQuZGF0YS5jYXJ0TGluZS5tZXJjaGFuZGlzZS5wcm9kdWN0LnR5cGUsXG4gICAgICAnaXRlbV9icmFuZCc6IGV2ZW50LmRhdGEuY2FydExpbmUubWVyY2hhbmRpc2UucHJvZHVjdC52ZW5kb3IsXG4gICAgICAncHJpY2UnOiBldmVudC5kYXRhLmNhcnRMaW5lLm1lcmNoYW5kaXNlLnByaWNlLmFtb3VudCxcbiAgICAgICdpbWFnZVVSTCc6IGV2ZW50LmRhdGEuY2FydExpbmUubWVyY2hhbmRpc2UuaW1hZ2Uuc3JjLFxuICAgICAgJ3F1YW50aXR5JzogZXZlbnQuZGF0YS5jYXJ0TGluZS5xdWFudGl0eVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGV2ZW50LmRhdGE/LnByb2R1Y3RWYXJpYW50KSB7XG4gICAgaXRlbXMucHVzaCh7XG4gICAgICAnaXRlbV9pZCc6IGV2ZW50LmRhdGEucHJvZHVjdFZhcmlhbnQucHJvZHVjdC5pZCxcbiAgICAgICdpdGVtX3NrdSc6IGV2ZW50LmRhdGEucHJvZHVjdFZhcmlhbnQuc2t1LFxuICAgICAgJ2l0ZW1fdmFyaWFudCc6IGV2ZW50LmRhdGEucHJvZHVjdFZhcmlhbnQuaWQsXG4gICAgICAnaXRlbV9uYW1lJzogZXZlbnQuZGF0YS5wcm9kdWN0VmFyaWFudC5wcm9kdWN0LnRpdGxlLFxuICAgICAgJ3ZhcmlhbnRfbmFtZSc6IGV2ZW50LmRhdGEucHJvZHVjdFZhcmlhbnQudGl0bGUsICAgICAgXG4gICAgICAnaXRlbV9jYXRlZ29yeSc6IGV2ZW50LmRhdGEucHJvZHVjdFZhcmlhbnQucHJvZHVjdC50eXBlLFxuICAgICAgJ3ByaWNlJzogZXZlbnQuZGF0YS5wcm9kdWN0VmFyaWFudC5wcmljZS5hbW91bnQsXG4gICAgICAnaXRlbV9icmFuZCc6IGV2ZW50LmRhdGEucHJvZHVjdFZhcmlhbnQucHJvZHVjdC52ZW5kb3IsXG4gICAgICAnaW1hZ2VVUkwnOiBldmVudC5kYXRhLnByb2R1Y3RWYXJpYW50LmltYWdlLnNyYyxcbiAgICAgICdxdWFudGl0eSc6ICcxJ1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGl0ZW1zKTtcbiAgfVxuXG4gIGlmIChldmVudC5kYXRhPy5jb2xsZWN0aW9uPy5wcm9kdWN0VmFyaWFudHMpIHtcbiAgICBsZXQgbWF4SXRlbXMgPSBNYXRoLm1pbigxMCwgZXZlbnQuZGF0YS5jb2xsZWN0aW9uLnByb2R1Y3RWYXJpYW50cy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4SXRlbXM7IGkrKykge1xuICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICdpdGVtX2lkJzogZXZlbnQuZGF0YS5jb2xsZWN0aW9uLnByb2R1Y3RWYXJpYW50c1tpXS5wcm9kdWN0LmlkLFxuICAgICAgICAnaXRlbV9za3UnOiBldmVudC5kYXRhLmNvbGxlY3Rpb24ucHJvZHVjdFZhcmlhbnRzW2ldLnNrdSxcbiAgICAgICAgJ2l0ZW1fdmFyaWFudCc6IGV2ZW50LmRhdGEuY29sbGVjdGlvbi5wcm9kdWN0VmFyaWFudHNbaV0uaWQsXG4gICAgICAgICdpdGVtX25hbWUnOiBldmVudC5kYXRhLmNvbGxlY3Rpb24ucHJvZHVjdFZhcmlhbnRzW2ldLnByb2R1Y3QudGl0bGUsXG4gICAgICAgICd2YXJpYW50X25hbWUnOiBldmVudC5kYXRhLmNvbGxlY3Rpb24ucHJvZHVjdFZhcmlhbnRzW2ldLnRpdGxlLCAgICAgIFxuICAgICAgICAnaXRlbV9jYXRlZ29yeSc6IGV2ZW50LmRhdGEuY29sbGVjdGlvbi5wcm9kdWN0VmFyaWFudHNbaV0ucHJvZHVjdC50eXBlLFxuICAgICAgICAnaXRlbV9icmFuZCc6IGV2ZW50LmRhdGEuY29sbGVjdGlvbi5wcm9kdWN0VmFyaWFudHNbaV0ucHJvZHVjdC52ZW5kb3IsXG4gICAgICAgICdwcmljZSc6IGV2ZW50LmRhdGEuY29sbGVjdGlvbi5wcm9kdWN0VmFyaWFudHNbaV0ucHJpY2UuYW1vdW50LFxuICAgICAgICAnaW1hZ2VVUkwnOiBldmVudC5kYXRhLmNvbGxlY3Rpb24ucHJvZHVjdFZhcmlhbnRzW2ldLmltYWdlLnNyYyxcbiAgICAgICAgJ2luZGV4JzogaSArIDFcbiAgICAgIH0pO1xuICAgIH0gICBcbiAgfVxuXG4gIGlmIChldmVudC5kYXRhPy5zZWFyY2hSZXN1bHQ/LnByb2R1Y3RWYXJpYW50cykge1xuICAgIGxldCBtYXhJdGVtcyA9IE1hdGgubWluKDEwLCBldmVudC5kYXRhLnNlYXJjaFJlc3VsdC5wcm9kdWN0VmFyaWFudHMubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heEl0ZW1zOyBpKyspIHtcbiAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAnaXRlbV9pZCc6IGV2ZW50LmRhdGEuc2VhcmNoUmVzdWx0LnByb2R1Y3RWYXJpYW50c1tpXS5wcm9kdWN0LmlkLFxuICAgICAgICAnaXRlbV9za3UnOiBldmVudC5kYXRhLnNlYXJjaFJlc3VsdC5wcm9kdWN0VmFyaWFudHNbaV0uc2t1LFxuICAgICAgICAnaXRlbV92YXJpYW50JzogZXZlbnQuZGF0YS5zZWFyY2hSZXN1bHQucHJvZHVjdFZhcmlhbnRzW2ldLmlkLFxuICAgICAgICAnaXRlbV9uYW1lJzogZXZlbnQuZGF0YS5zZWFyY2hSZXN1bHQucHJvZHVjdFZhcmlhbnRzW2ldLnByb2R1Y3QudGl0bGUsXG4gICAgICAgICd2YXJpYW50X25hbWUnOiBldmVudC5kYXRhLnNlYXJjaFJlc3VsdC5wcm9kdWN0VmFyaWFudHNbaV0udGl0bGUsXG4gICAgICAgICdpdGVtX2NhdGVnb3J5JzogZXZlbnQuZGF0YS5zZWFyY2hSZXN1bHQucHJvZHVjdFZhcmlhbnRzW2ldLnByb2R1Y3QudHlwZSxcbiAgICAgICAgJ2l0ZW1fYnJhbmQnOiBldmVudC5kYXRhLnNlYXJjaFJlc3VsdC5wcm9kdWN0VmFyaWFudHNbaV0ucHJvZHVjdC52ZW5kb3IsXG4gICAgICAgICdwcmljZSc6IGV2ZW50LmRhdGEuc2VhcmNoUmVzdWx0LnByb2R1Y3RWYXJpYW50c1tpXS5wcmljZS5hbW91bnQsXG4gICAgICAgICdpbWFnZVVSTCc6IGV2ZW50LmRhdGEuc2VhcmNoUmVzdWx0LnByb2R1Y3RWYXJpYW50c1tpXS5pbWFnZS5zcmMsXG4gICAgICAgICdpbmRleCc6IGkgKyAxXG4gICAgICB9KTtcbiAgICB9XG4gIH0gICBcblxuICBpZiAoZXZlbnQuZGF0YT8uY2FydD8ubGluZXMpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV2ZW50LmRhdGEuY2FydC5saW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICdpdGVtX2lkJzogZXZlbnQuZGF0YS5jYXJ0LmxpbmVzW2ldLm1lcmNoYW5kaXNlLnByb2R1Y3QuaWQsXG4gICAgICAgICdpdGVtX3NrdSc6IGV2ZW50LmRhdGEuY2FydC5saW5lc1tpXS5tZXJjaGFuZGlzZS5za3UsXG4gICAgICAgICdpdGVtX3ZhcmlhbnQnOiBldmVudC5kYXRhLmNhcnQubGluZXNbaV0ubWVyY2hhbmRpc2UuaWQsXG4gICAgICAgICdpdGVtX25hbWUnOiBldmVudC5kYXRhLmNhcnQubGluZXNbaV0ubWVyY2hhbmRpc2UucHJvZHVjdC50aXRsZSxcbiAgICAgICAgJ3ZhcmlhbnRfbmFtZSc6IGV2ZW50LmRhdGEuY2FydC5saW5lc1tpXS5tZXJjaGFuZGlzZS50aXRsZSxcbiAgICAgICAgJ2l0ZW1fY2F0ZWdvcnknOiBldmVudC5kYXRhLmNhcnQubGluZXNbaV0ubWVyY2hhbmRpc2UucHJvZHVjdC50eXBlLFxuICAgICAgICAnaXRlbV9icmFuZCc6IGV2ZW50LmRhdGEuY2FydC5saW5lc1tpXS5tZXJjaGFuZGlzZS5wcm9kdWN0LnZlbmRvcixcbiAgICAgICAgJ3ByaWNlJzogZXZlbnQuZGF0YS5jYXJ0LmxpbmVzW2ldLm1lcmNoYW5kaXNlLnByaWNlLmFtb3VudCxcbiAgICAgICAgJ2ltYWdlVVJMJzogZXZlbnQuZGF0YS5jYXJ0LmxpbmVzW2ldLm1lcmNoYW5kaXNlLmltYWdlLnNyYyxcbiAgICAgICAgJ3F1YW50aXR5JzogZXZlbnQuZGF0YS5jYXJ0LmxpbmVzW2ldLnF1YW50aXR5XG4gICAgICB9KTtcbiAgICB9ICBcbiAgfVxuXG4gIHJldHVybiBpdGVtcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgcGFyc2VJdGVtczsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8qIGVzbGludC1kaXNhYmxlIGNvbnNpc3RlbnQtcmV0dXJuICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9qc3gtbm8tYmluZCAqL1xuXG5pbXBvcnQgcGFyc2VFY29tUGFyYW1zIGZyb20gXCIuL2xpYi9wYXJzZUVjb21QYXJhbXMuanNcIjtcbmltcG9ydCBwYXJzZUl0ZW1zIGZyb20gXCIuL2xpYi9wYXJzZUl0ZW1zLmpzXCI7XG5jb25zdCB1cmwgPSAne3tfX1VSTF9ffX0nO1xuY29uc3Qgc2hvcCA9ICd7e19fU0hPUF9ffX0nO1xuY29uc3Qgc2hvcElkID0gJ3t7X19TSE9QX0lEX199fSc7XG5cbmZ1bmN0aW9uIGdldENvb2tpZShuYW1lKSB7XG4gIGNvbnN0IHZhbHVlID0gYDsgJHtkb2N1bWVudC5jb29raWV9YDtcbiAgY29uc3QgcGFydHMgPSB2YWx1ZS5zcGxpdChgOyAke25hbWV9PWApO1xuICBpZiAocGFydHMubGVuZ3RoID09PSAyKSByZXR1cm4gcGFydHMucG9wKCkuc3BsaXQoJzsnKS5zaGlmdCgpO1xufVxuXG4oKCkgPT4ge1xuICBmdW5jdGlvbiBmZXRjaFNldHRpbmdzKCkge1xuICAgIHJldHVybiBmZXRjaChgJHt1cmx9L3dpZGdldC9zZXR0aW5nP3Nob3A9JHtzaG9wfSZzaG9wX2lkPSR7c2hvcElkfWAsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgfSkudGhlbigocmVzcCkgPT4ge1xuICAgICAgcmV0dXJuIHJlc3AuanNvbigpO1xuICAgIH0pO1xuICB9XG5cbiAgUHJvbWlzZS5hbGwoW1xuICAgIGZldGNoU2V0dGluZ3MoKSxcbiAgICBmZXRjaCgnL2NhcnQuanMnKS50aGVuKHJlcyA9PiByZXMuanNvbigpKVxuICBdKVxuICAgIC50aGVuKChbd2lkZ2V0LCBjYXJ0RGF0YV0pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCcrKysrKysrKysrK2xzTmV0XzIuMC44KysrKysrKysrKysrKycpO1xuICAgICAgY29uc3Qge2dlbmVyYXRlLCBkYXRhX2xheWVyLCB3ZWJob29rfSAgPSB3aWRnZXQ7XG4gICAgICB3aW5kb3cuZGF0YUxheWVyID0gd2luZG93LmRhdGFMYXllciB8fCBbXTtcbiAgICAgIGlmKHdpZGdldD8uZ2VuZXJhdGU/Lmluc2VydF9ndG1fc25pcHBlcil7XG4gICAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgY29uc3QgRE9NQUlOID0gZ2VuZXJhdGU/LmlzX2N1c3RvbV9kb21haW4gJiYgZ2VuZXJhdGU/LmN1c3RvbV9kb21haW4gfHwgJ2h0dHBzOi8vd3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tJztcbiAgICAgICAgY29uc3QgV0VCX0dUTV9JRCA9IGdlbmVyYXRlPy5pc19jdXN0b21fZG9tYWluICYmIGdlbmVyYXRlPy5jdXN0b21fZG9tYWluICYmIGdlbmVyYXRlPy5pc19jdXN0b21fbG9hZGVkICYmIGdlbmVyYXRlPy5jdXN0b21fbG9hZGVkID8gKGdlbmVyYXRlPy5ndG1faWQgfHwgJycpLnJlcGxhY2UoJ0dUTS0nLCAnJykudHJpbSgpIDogZ2VuZXJhdGU/Lmd0bV9pZCB8fCAnJztcbiAgICAgICAgY29uc3QgQ09OVEFJTkVSX0lEID0gZ2VuZXJhdGU/LmlzX2N1c3RvbV9sb2FkZWQgJiYgZ2VuZXJhdGU/LmN1c3RvbV9sb2FkZWQgfHwgJ2d0bSc7XG4gICAgICAgIGNvbnN0IElTX0NVU1RPTV9JRCA9IEJvb2xlYW4oZ2VuZXJhdGU/LmlzX2N1c3RvbV9kb21haW4gJiYgZ2VuZXJhdGU/LmN1c3RvbV9kb21haW4gJiYgZ2VuZXJhdGU/LmlzX2N1c3RvbV9sb2FkZWQgJiYgZ2VuZXJhdGU/LmN1c3RvbV9sb2FkZWQpO1xuICAgICAgICBpZihnZW5lcmF0ZS5pc19jb29raWVfa2VlcGVyICYmIGdlbmVyYXRlPy5pc19jdXN0b21fbG9hZGVkKXtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gIGAhZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBsKGUpe2Zvcih2YXIgdD1lLHI9MCxuPWRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIik7cjxuLmxlbmd0aDtyKyspe3ZhciBvPW5bcl0uc3BsaXQoXCI9XCIpO2lmKG9bMF0udHJpbSgpPT09dClyZXR1cm4gb1sxXX19ZnVuY3Rpb24gcyhlKXtyZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oZSl9ZnVuY3Rpb24gdShlKXtyZXR1cm4gd2luZG93W2VdfWZ1bmN0aW9uIGQoZSx0KXtlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSk7cmV0dXJuIHQ/bnVsbD09ZT92b2lkIDA6ZS5nZXRBdHRyaWJ1dGUodCk6bnVsbD09ZT92b2lkIDA6ZS50ZXh0Q29udGVudH12YXIgZT13aW5kb3csdD1kb2N1bWVudCxyPVwic2NyaXB0XCIsbj1cImRhdGFMYXllclwiLG89XCJ7e1dFQl9HVE1fSUR9fVwiLGE9XCJ7e0RPTUFJTn19XCIsaT1cIlwiLGM9XCJ7e0NPTlRBSU5FUl9JRH19XCIsRT1cImNvb2tpZVwiLEk9W1wiX3lcIixcIl9zaG9waWZ5X3lcIl0sdj1cIlwiLGc9ITE7dHJ5e3ZhciBnPSEhRSYmKG09bmF2aWdhdG9yLnVzZXJBZ2VudCwhIShtPW5ldyBSZWdFeHAoXCJWZXJzaW9uLyhbMC05Ll9dKykoLipNb2JpbGUpPy4qU2FmYXJpLipcIikuZXhlYyhtKSkpJiYxNi40PD1wYXJzZUZsb2F0KG1bMV0pLEE9XCJzdGFwZVVzZXJJZFwiPT09RSxmPWcmJiFBP2Z1bmN0aW9uKGUsdCxyKXt2b2lkIDA9PT10JiYodD1cIlwiKTt2YXIgbj17Y29va2llOmwsbG9jYWxTdG9yYWdlOnMsanNWYXJpYWJsZTp1LGNzc1NlbGVjdG9yOmR9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtpZihlJiZuW2VdKWZvcih2YXIgbz1uW2VdLGE9MCxpPXQ7YTxpLmxlbmd0aDthKyspe3ZhciBjPWlbYV0sYz1yP28oYyxyKTpvKGMpO2lmKGMpcmV0dXJuIGN9ZWxzZSBjb25zb2xlLndhcm4oXCJpbnZhbGlkIHVpZCBzb3VyY2VcIixlKX0oRSxJLHYpOnZvaWQgMDtnPWcmJighIWZ8fEEpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9dmFyIG09ZSxFPShtW25dPW1bbl18fFtdLG1bbl0ucHVzaCh7XCJndG0uc3RhcnRcIjoobmV3IERhdGUpLmdldFRpbWUoKSxldmVudDpcImd0bS5qc1wifSksdC5nZXRFbGVtZW50c0J5VGFnTmFtZShyKVswXSksST1cImRhdGFMYXllclwiPT09bj9cIlwiOlwiJmw9XCIrbix2PWY/XCImYmk9XCIrZW5jb2RlVVJJQ29tcG9uZW50KGYpOlwiXCIsQT10LmNyZWF0ZUVsZW1lbnQociksZT1nP1wia3BcIitjOmMsbj0hZyYmaT9pOmE7QS5hc3luYz0hMCxBLnNyYz1uK1wiL1wiK2UrXCIuanM/c3Q9XCIrbytJK3YsbnVsbCE9KGY9RS5wYXJlbnROb2RlKSYmZi5pbnNlcnRCZWZvcmUoQSxFKX0oKTtgIFxuICAgICAgICAgIC8vIGAhZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGUpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxyPWRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIik7dDxyLmxlbmd0aDt0Kyspe3ZhciBuPXJbdF0uc3BsaXQoXCI9XCIpO2lmKG5bMF0udHJpbSgpPT09ZSlyZXR1cm4gblsxXX19KGUpfWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKGUpfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIHdpbmRvd1tlXX1mdW5jdGlvbiBuKGUsdCl7dmFyIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKTtyZXR1cm4gdD9udWxsPT1yP3ZvaWQgMDpyLmdldEF0dHJpYnV0ZSh0KTpudWxsPT1yP3ZvaWQgMDpyLnRleHRDb250ZW50fSFmdW5jdGlvbihvLGksYSxjLHUsbCxzLHYsZCxmLGcpe3ZhciBtLHAseSx3O3RyeXtwPWQmJih5PW5hdmlnYXRvci51c2VyQWdlbnQsKHc9bmV3IFJlZ0V4cChcIlZlcnNpb24vKFswLTkuX10rKSguKk1vYmlsZSk/LipTYWZhcmkuKlwiKS5leGVjKHkpKSYmcGFyc2VGbG9hdCh3WzFdKT49MTYuNCk/ZnVuY3Rpb24obyxpLGEpe3ZvaWQgMD09PWkmJihpPVwiXCIpO3ZhciBjPXtjb29raWU6ZSxsb2NhbFN0b3JhZ2U6dCxqc1ZhcmlhYmxlOnIsY3NzU2VsZWN0b3I6bn0sdT1BcnJheS5pc0FycmF5KGkpP2k6W2ldO2lmKG8mJmNbb10pZm9yKHZhciBsPWNbb10scz0wLHY9dTtzPHYubGVuZ3RoO3MrKyl7dmFyIGQ9dltzXSxmPWwoZCk7aWYoZilyZXR1cm4gZn1lbHNlIGNvbnNvbGUud2FybihcImludmFsaWQgdWlkIHNvdXJjZVwiLG8pfShkLFtcIl95XCIsXCJfc2hvcGlmeV95XCJdKTp2b2lkIDB9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX12YXIgXz1vO19bY109X1tjXXx8W10sX1tjXS5wdXNoKHtcImd0bS5zdGFydFwiOihuZXcgRGF0ZSkuZ2V0VGltZSgpLGV2ZW50OlwiZ3RtLmpzXCJ9KTt2YXIgQT1pLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpWzBdLEk9cD9cIiZiaT1cIitlbmNvZGVVUklDb21wb25lbnQocCk6XCJcIixoPWkuY3JlYXRlRWxlbWVudChhKSxFPXA/XCJrcFwiK3Y6djtoLmFzeW5jPSEwLGguc3JjPVwie3tET01BSU59fS9cIitFK1wiLmpzP2lkPXt7V0VCX0dUTV9JRH19XCIrSSxudWxsPT09KG09QS5wYXJlbnROb2RlKXx8dm9pZCAwPT09bXx8bS5pbnNlcnRCZWZvcmUoaCxBKX0od2luZG93LGRvY3VtZW50LFwic2NyaXB0XCIsXCJkYXRhTGF5ZXJcIiwwLDAsMCxcInt7Q09OVEFJTkVSX0lEfX1cIixcImNvb2tpZVwiKX0oKTtgXG4gICAgICAgICAgLy8gYCFmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9ZG9jdW1lbnQuY29va2llLnNwbGl0KFwiO1wiKTt0PHIubGVuZ3RoO3QrKyl7dmFyIG49clt0XS5zcGxpdChcIj1cIik7aWYoblswXS50cmltKCk9PT1lKXJldHVybiBuWzFdfX0oZSl9ZnVuY3Rpb24gdChlKXtyZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oZSl9ZnVuY3Rpb24gcihlKXtyZXR1cm4gd2luZG93W2VdfWZ1bmN0aW9uIG4oZSx0KXt2YXIgcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpO3JldHVybiB0P251bGw9PXI/dm9pZCAwOnIuZ2V0QXR0cmlidXRlKHQpOm51bGw9PXI/dm9pZCAwOnIudGV4dENvbnRlbnR9IWZ1bmN0aW9uKG8saSxhLGMscyx1LGwsZCx2LGYpe3ZhciBnLG0seSxwO3RyeXttPWQmJih5PW5hdmlnYXRvci51c2VyQWdlbnQsKHA9L1ZlcnNpb25cXFxcLyhbMC05XFwuX10rKSguKk1vYmlsZSk/LipTYWZhcmkuKi8uZXhlYyh5KSkmJnBhcnNlRmxvYXQocFsxXSk+PTE2LjQpP2Z1bmN0aW9uKG8saSxhKXt2b2lkIDA9PT1pJiYoaT1cIlwiKTt2YXIgYz17Y29va2llOmUsbG9jYWxTdG9yYWdlOnQsanNWYXJpYWJsZTpyLGNzc1NlbGVjdG9yOm59LHM9QXJyYXkuaXNBcnJheShpKT9pOltpXTtpZihvJiZjW29dKWZvcih2YXIgdT1jW29dLGw9MCxkPXM7bDxkLmxlbmd0aDtsKyspe3ZhciB2PWRbbF0sZj11KHYpO2lmKGYpcmV0dXJuIGZ9ZWxzZSBjb25zb2xlLndhcm4oXCJpbnZhbGlkIHVpZCBzb3VyY2VcIixvKX0oZCxbXCJfeVwiLFwiX3Nob3BpZnlfeVwiXSk6dm9pZCAwfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9dmFyIGg9bztoW2NdPWhbY118fFtdLGhbY10ucHVzaCh7XCJndG0uc3RhcnRcIjoobmV3IERhdGUpLmdldFRpbWUoKSxldmVudDpcImd0bS5qc1wifSk7dmFyIHc9aS5nZXRFbGVtZW50c0J5VGFnTmFtZShhKVswXSxTPW0/XCImYmk9XCIrZW5jb2RlVVJJQ29tcG9uZW50KG0pOlwiXCIsYj1pLmNyZWF0ZUVsZW1lbnQoYSksaz1tP1wia3BcIitsOmw7Yi5hc3luYz0hMCxiLnNyYz1cInt7RE9NQUlOfX0vXCIraytcIi5qcz9pZD17e1dFQl9HVE1fSUR9fVwiK1MsbnVsbD09PShnPXcucGFyZW50Tm9kZSl8fHZvaWQgMD09PWd8fGcuaW5zZXJ0QmVmb3JlKGIsdyl9KHdpbmRvdyxkb2N1bWVudCxcInNjcmlwdFwiLFwiZGF0YUxheWVyXCIsMCwwLFwie3tDT05UQUlORVJfSUR9fVwiLFwiY29va2llXCIpfSgpO2BcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7e0RPTUFJTn19JywgRE9NQUlOKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3t7V0VCX0dUTV9JRH19JywgV0VCX0dUTV9JRClcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7e0NPTlRBSU5FUl9JRH19JywgQ09OVEFJTkVSX0lEKTtcbiAgICAgICAgICBzY3JpcHQuaW5uZXJIVE1MID0gdGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gIGAoZnVuY3Rpb24odyxkLHMsbCxpKXt3W2xdPXdbbF18fFtdO3dbbF0ucHVzaCh7J2d0bS5zdGFydCc6bmV3IERhdGUoKS5nZXRUaW1lKCksZXZlbnQ6J2d0bS5qcyd9KTt2YXIgZj1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKHMpWzBdLGo9ZC5jcmVhdGVFbGVtZW50KHMpLGRsPWwhPSdkYXRhTGF5ZXInPycmbD0nK2w6Jyc7ai5hc3luYz10cnVlO2ouc3JjPSd7e0RPTUFJTn19L3t7Q09OVEFJTkVSX0lEfX0uanM/JHtJU19DVVNUT01fSUQgPyAnc3QnIDogJ2lkJ309JytpK2RsO2YucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaixmKTt9KSh3aW5kb3csZG9jdW1lbnQsJ3NjcmlwdCcsJ2RhdGFMYXllcicsJ3t7V0VCX0dUTV9JRH19Jyk7YFxuICAgICAgICAgICAgLnJlcGxhY2UoJ3t7RE9NQUlOfX0nLCBET01BSU4pXG4gICAgICAgICAgICAucmVwbGFjZSgne3tXRUJfR1RNX0lEfX0nLCBXRUJfR1RNX0lEKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3t7Q09OVEFJTkVSX0lEfX0nLCBDT05UQUlORVJfSUQpO1xuICAgICAgICAgIHNjcmlwdC5pbm5lckhUTUwgPSB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXZlbnRfbmFtZSA9IHtcbiAgICAgICAgJ3Byb2R1Y3RfYWRkZWRfdG9fY2FydCc6ICdhZGRfdG9fY2FydF9zdGFwZScsIFxuICAgICAgICAnY2FydF92aWV3ZWQnOiAndmlld19jYXJ0X3N0YXBlJywgXG4gICAgICAgICdwcm9kdWN0X3JlbW92ZWRfZnJvbV9jYXJ0JzogJ3JlbW92ZV9mcm9tX2NhcnRfc3RhcGUnLCBcbiAgICAgICAgJ2NvbGxlY3Rpb25fdmlld2VkJzogJ3ZpZXdfY29sbGVjdGlvbl9zdGFwZScsIFxuICAgICAgICAnc2VhcmNoX3N1Ym1pdHRlZCc6ICdzZWFyY2hfc3VibWl0dGVkX3N0YXBlJyxcbiAgICAgICAgJ2NoZWNrb3V0X2NvbXBsZXRlZCc6ICdwdXJjaGFzZV9zdGFwZScsXG4gICAgICAgICdwcm9kdWN0X3ZpZXdlZCc6ICd2aWV3X2l0ZW1fc3RhcGUnXG4gICAgICB9XG5cbiAgICAgIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgdG1wID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3N0YXBlX2V2ZW50cycpO1xuICAgICAgICAgIGlmKHRtcCl7XG4gICAgICAgICAgICB0bXAgPSBKU09OLnBhcnNlKHRtcClcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRtcCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBldmVudCA9IHsuLi50bXBba2V5XX1cbiAgICAgICAgICAgICAgaWYoZGF0YV9sYXllcj8ubG9nX2V2ZW50KXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIvCfmoAgfiBPYmplY3Qua2V5cyB+IGV2ZW50OlwiLCBldmVudClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBsZXQgZWNvbW1fcGFnZXR5cGUgPSBnZXRQYWdlVHlwZSgpO1xuICAgICAgICAgICAgICBsZXQgZWNvbSA9IHBhcnNlRWNvbVBhcmFtcyhldmVudCk7XG4gICAgICAgICAgICAgIC8vIGxldCB1c2VyRGF0YSA9IHBhcnNlVXNlckRhdGEoZXZlbnQpO1xuICAgICAgICAgICAgICBlY29tLml0ZW1zID0gcGFyc2VJdGVtcyhldmVudCk7XG4gICAgICAgICAgICAgIHZhciBldmVudERhdGEgPSB7XG4gICAgICAgICAgICAgICAgJ2V2ZW50JzogZXZlbnRfbmFtZVtldmVudC5uYW1lXSxcbiAgICAgICAgICAgICAgICAndXNlcl9kYXRhJzogZXZlbnQudXNlcl9kYXRhLFxuICAgICAgICAgICAgICAgICdlY29tbWVyY2UnOiBlY29tLFxuICAgICAgICAgICAgICAgIGVjb21tX3BhZ2V0eXBlOiBldmVudC5lY29tbV9wYWdldHlwZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIGlmKGV2ZW50RGF0YS5ldmVudCl7XG4gICAgICAgICAgICAgICAgaWYoIWRhdGFfbGF5ZXIuZWNvbW1lcmNlKXtcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZSBldmVudERhdGEuZWNvbW1lcmNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBkYXRhTGF5ZXIucHVzaCh7IGVjb21tZXJjZTogbnVsbCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYoZXZlbnREYXRhLmV2ZW50ID09ICdwdXJjaGFzZV9zdGFwZScpe1xuXG4gICAgICAgICAgICAgICAgICBpZih3ZWJob29rLnNlbmRfd2ViaG9vayAmJiB3ZWJob29rLnVybCAmJiB3ZWJob29rLnB1cmNoYXNlX3dlYmhvb2spe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb29raWVzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICdmYmMnOiBnZXRDb29raWUoJ2ZiYycpLFxuICAgICAgICAgICAgICAgICAgICAgICdmYnAnOiBnZXRDb29raWUoJ2ZicCcpLFxuICAgICAgICAgICAgICAgICAgICAgICdGUEdDTEFXJzogZ2V0Q29va2llKCdGUEdDTEFXJyksXG4gICAgICAgICAgICAgICAgICAgICAgJ19nY2xfYXcnOiBnZXRDb29raWUoJ19nY2xfYXcnKSxcbiAgICAgICAgICAgICAgICAgICAgICAndHRjbGlkJzogZ2V0Q29va2llKCd0dGNsaWQnKSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmZXRjaCh3ZWJob29rLnVybCwge1xuICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7Li4uZXZlbnREYXRhLCBjb29raWVzfSksXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgaWYoIWRhdGFfbGF5ZXIuY2hlY2tvdXRfZXh0ZW5zaWJpbGl0eSl7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFMYXllci5wdXNoKGV2ZW50RGF0YSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGV2ZW50RGF0YS51c2VyX2RhdGEubGlmZXRpbWVfb3JkZXJzO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZXZlbnREYXRhLnVzZXJfZGF0YS5uZXdfY3VzdG9tZXI7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgICAgICAgICAgICAgIGRhdGFMYXllci5wdXNoKGV2ZW50RGF0YSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYoZGF0YV9sYXllcj8ubG9nX2V2ZW50KXtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi8J+agCB+IE9iamVjdC5rZXlzIH4gZXZlbnREYXRhOlwiLCBldmVudERhdGEsIGRhdGFMYXllcilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYoZGF0YV9sYXllcj8ubG9nX2V2ZW50KXtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi8J+agCB+IE9iamVjdC5rZXlzIH4gZXZlbnREYXRhOlwiLCBldmVudERhdGEsIGRhdGFMYXllcilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZGVsZXRlIHRtcFtrZXldO1xuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc3RhcGVfZXZlbnRzJywgSlNPTi5zdHJpbmdpZnkodG1wKSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwi8J+agCB+IGZpbGU6IGluZGV4LmpzOjk5IH4gc2V0SW50ZXJ2YWwgfiBlcnJvcjpcIiwgZXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH0sIDUwMClcbiAgICAgIFxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbihtZXNzYWdlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UobWVzc2FnZS5kYXRhKTtcbiAgICAgICAgICAgIGlmIChkYXRhLmV2ZW50LmluY2x1ZGVzKCdfc3RhcGUnKSkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIgPSB3aW5kb3cuZGF0YUxheWVyIHx8IFtdO1xuICAgICAgICAgICAgICAgIGRhdGFMYXllci5wdXNoKHsgZWNvbW1lcmNlOiBudWxsIH0pO1xuICAgICAgICAgICAgICAgIGRhdGFMYXllci5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgJ2V2ZW50JzogZGF0YS5ldmVudCxcbiAgICAgICAgICAgICAgICAgICAgJ3VzZXJfZGF0YSc6IGRhdGEudXNlcl9kYXRhLFxuICAgICAgICAgICAgICAgICAgICAnZWNvbW1lcmNlJzogZGF0YS5lY29tbWVyY2UsXG4gICAgICAgICAgICAgICAgICAgICdlY29tbV9wYWdldHlwZSc6IGRhdGEucGFnZXR5cGVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaChlKSB7fVxuICAgICAgfSk7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZighbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3N0YXBlX2V2ZW50cycpKXtcbiAgICAgICAgICBjb25zb2xlLmxvZygnZXZlbnQgb2xkIHB1c2ggdGFnJylcbiAgICAgICAgICBzZXRFdmVudE9sZFNjcmlwdCgpXG4gICAgICAgIH1cbiAgICAgIH0sIDEwMDApO1xuXG4gICAgICBmdW5jdGlvbiBzZXRFdmVudE9sZFNjcmlwdCgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBcbiAgICAgICAgXG4gICAgICAgICAgZnVuY3Rpb24gc2V0UHVzaERhdGFsYXllcihpdGVtKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZihbJ3B1cmNoYXNlX3N0YXBlJywgJ2JlZ2luX2NoZWNrb3V0X3BsdXNfc3RhcGUnXS5pbmNsdWRlcyhpdGVtPy5ldmVudCkpe1xuICAgICAgICAgICAgICAgIGlmKCh3aW5kb3cuZGF0YUxheWVyIHx8IFtdKS5zb21lKF9pID0+IF9pPy5ldmVudCA9PSBpdGVtPy5ldmVudCkpe1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ05vdCBjcmV0ZWQgZXZlbnQnKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goaXRlbSlcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChpdGVtKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICBjb25zdCBwYXRobmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYXJ0VG9rZW4nKSAhPSBjYXJ0RGF0YS50b2tlbiAmJiBwYXRobmFtZS5pbmRleE9mKCcvY2hlY2tvdXRzJykgPCAwKXtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJ0VG9rZW4nLCBjYXJ0RGF0YS50b2tlbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYoIXdpbmRvdy5sc0RhdGEpe1xuICAgICAgICAgICAgd2luZG93LmxzRGF0YSA9IHt9XG4gICAgICAgICAgfVxuICAgIFxuICAgICAgICAgIGNvbnN0IGRhdGEgPSB7fVxuICAgICAgICAgIGlmKHdpbmRvdz8ubHNEYXRhPy5jdXN0b21lciAmJiB3aW5kb3c/LmxzRGF0YT8uY3VzdG9tZXIuZW1haWwgJiYgZGF0YV9sYXllcj8udXNlcl9kYXRhKXtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbWVyID0gd2luZG93LmxzRGF0YS5jdXN0b21lciB8fCB7fTtcbiAgICAgICAgICAgIGRhdGEudXNlcl9kYXRhID0ge1xuICAgICAgICAgICAgICBlbWFpbDogY3VzdG9tZXIuZW1haWwsXG4gICAgICAgICAgICAgIGZpcnN0X25hbWU6IGN1c3RvbWVyLmZpcnN0X25hbWUsXG4gICAgICAgICAgICAgIGxhc3RfbmFtZTogY3VzdG9tZXIubGFzdF9uYW1lLFxuICAgICAgICAgICAgICBjdXN0b21lcl9pZDogY3VzdG9tZXIuY3VzdG9tZXJfaWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYoIWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjdXN0b21lckxvZ2luSWQnKSl7XG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjdXN0b21lckxvZ2luSWQnLCBjdXN0b21lci5jdXN0b21lcl9pZCk7XG4gICAgICAgICAgICAgIGlmKCFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY3VzdG9tZXJSZWdpc3RlcklkJykgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2N1c3RvbWVyUmVnaXN0ZXJJZCcpICE9IGN1c3RvbWVyLmN1c3RvbWVyX2lkKXtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY3VzdG9tZXJSZWdpc3RlcklkJywgY3VzdG9tZXIuY3VzdG9tZXJfaWQpXG4gICAgICAgICAgICAgICAgc2V0UHVzaERhdGFsYXllcih7ZXZlbnQ6ICdzaWduX3VwJywgdXNlcl9kYXRhOiBkYXRhLnVzZXJfZGF0YX0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFB1c2hEYXRhbGF5ZXIoe2V2ZW50OiAnbG9naW4nLCB1c2VyX2RhdGE6IGRhdGEudXNlcl9kYXRhfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYocGF0aG5hbWUuaW5kZXhPZignL2NoZWNrb3V0cy8nKSA8IDApe1xuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY3VzdG9tZXJMb2dpbklkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICB9XG4gICAgXG4gICAgXG4gICAgICAgICAgaWYoZGF0YV9sYXllci5lY29tbWVyY2UgfHwgZGF0YV9sYXllci51c2VyX2RhdGEpe1xuICAgIFxuICAgICAgICAgICAgaWYocGF0aG5hbWUuaW5kZXhPZignL2NhcnQnKSA+IC0xKXtcbiAgICAgICAgICAgICAgaWYoZGF0YV9sYXllci5lY29tbWVyY2Upe1xuICAgICAgICAgICAgICAgIHNldFB1c2hEYXRhbGF5ZXIoe2Vjb21tZXJjZTogbnVsbCB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZXQgZWNvbW1lcmNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBpZihkYXRhX2xheWVyLmVjb21tZXJjZSl7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FydCA9IHdpbmRvdz8ubHNEYXRhPy5jYXJ0IHx8IHt9O1xuICAgICAgICAgICAgICAgIGVjb21tZXJjZSA9IHtcbiAgICAgICAgICAgICAgICAgIGNhcnRfdG90YWw6IGNhcnQudG90YWxfcHJpY2UvMTAwLFxuICAgICAgICAgICAgICAgICAgY3VycmVuY3k6IHdpbmRvdy5sc0RhdGEuY3VycmVuY3ksXG4gICAgICAgICAgICAgICAgICBjYXJ0X3F1YW50aXR5OiBjYXJ0Lml0ZW1fY291bnQsXG4gICAgICAgICAgICAgICAgICBpdGVtczogKGNhcnQ/Lml0ZW1zIHx8IFtdKS5tYXAoX2kgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgIGl0ZW1faWQ6IF9pLnByb2R1Y3RfaWQgKyAnJyxcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtX3NrdTogX2kuc2t1LFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fbmFtZTogX2kucHJvZHVjdF90aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtX2JyYW5kOiBfaS52ZW5kb3IsXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbV9jYXRlZ29yeTogX2kucHJvZHVjdF90eXBlLFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fdmFyaWFudDogX2kudmFyaWFudF9pZCArICcnLFxuICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBfaS5wcmljZS8xMDAsXG4gICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IF9pLnF1YW50aXR5LFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc2V0UHVzaERhdGFsYXllcih7Li4uZGF0YSwgZWNvbW1lcmNlLCBldmVudDogJ3ZpZXdfY2FydF9zdGFwZSd9KVxuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgaWYocGF0aG5hbWUuaW5kZXhPZignL2NvbGxlY3Rpb25zLycpID4gLTEpe1xuICAgICAgICAgICAgICBpZihkYXRhX2xheWVyLmVjb21tZXJjZSl7XG4gICAgICAgICAgICAgICAgc2V0UHVzaERhdGFsYXllcih7ZWNvbW1lcmNlOiBudWxsIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB3aW5kb3cubHNEYXRhPy5jb2xsZWN0aW9uIHx8IFtdO1xuICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uX3RpdGxlID0gd2luZG93LmxzRGF0YT8uY29sbGVjdGlvbl90aXRsZSB8fCAnJztcbiAgICAgICAgICAgICAgbGV0IGVjb21tZXJjZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgaWYoZGF0YV9sYXllci5lY29tbWVyY2Upe1xuICAgICAgICAgICAgICAgIGVjb21tZXJjZSA9IHtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbmN5OiB3aW5kb3cubHNEYXRhPy5jdXJyZW5jeSxcbiAgICAgICAgICAgICAgICAgIGl0ZW1fbGlzdF9uYW1lOiBjb2xsZWN0aW9uX3RpdGxlLFxuICAgICAgICAgICAgICAgICAgaXRlbXM6IChjb2xsZWN0aW9uIHx8IFtdKS5tYXAocHJvZHVjdCA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAnaXRlbV9uYW1lJzogcHJvZHVjdC50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgJ2l0ZW1faWQnOiBwcm9kdWN0LmlkLFxuICAgICAgICAgICAgICAgICAgICAnaXRlbV9za3UnOiAgcHJvZHVjdC52YXJpYW50cyAmJiBwcm9kdWN0LnZhcmlhbnRzWzBdICYmIHByb2R1Y3QudmFyaWFudHNbMF0uc2t1ID8gcHJvZHVjdC52YXJpYW50c1swXS5za3UgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgJ3ByaWNlJzogKHByb2R1Y3QucHJpY2UvMTAwKS50b0ZpeGVkKDIpLFxuICAgICAgICAgICAgICAgICAgICAnaXRlbV92YXJpYW50JzogcHJvZHVjdC52YXJpYW50c1swXS5pZCArICcnLFxuICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHNldFB1c2hEYXRhbGF5ZXIoey4uLmRhdGEsIGVjb21tZXJjZSwgZXZlbnQ6ICd2aWV3X2NvbGxlY3Rpb25fc3RhcGUnfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHBhdGhuYW1lLmluZGV4T2YoJy9wcm9kdWN0cy8nKSA+IC0xKXtcbiAgICAgICAgICAgICAgaWYoZGF0YV9sYXllci5lY29tbWVyY2Upe1xuICAgICAgICAgICAgICAgIHNldFB1c2hEYXRhbGF5ZXIoe2Vjb21tZXJjZTogbnVsbCB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBwcm9kdWN0ID0gd2luZG93LmxzRGF0YT8ucHJvZHVjdCB8fCB7fTtcbiAgICAgICAgICAgICAgbGV0IGVjb21tZXJjZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgaWYoZGF0YV9sYXllci5lY29tbWVyY2Upe1xuICAgICAgICAgICAgICAgIGVjb21tZXJjZSA9IHtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbmN5OiB3aW5kb3cubHNEYXRhPy5jYXJ0Py5jdXJyZW5jeSxcbiAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtX25hbWU6IHByb2R1Y3QudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbV9pZDogcHJvZHVjdD8uaWQ/LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbV9za3U6IHByb2R1Y3QudmFyaWFudHMgJiYgcHJvZHVjdC52YXJpYW50c1swXSAmJiBwcm9kdWN0LnZhcmlhbnRzWzBdLnNrdSA/IHByb2R1Y3QudmFyaWFudHNbMF0uc2t1IDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbV9icmFuZDogcHJvZHVjdC52ZW5kb3IsXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbV9jYXRlZ29yeTogcHJvZHVjdC50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiAocHJvZHVjdC5wcmljZS8xMDApLnRvRml4ZWQoMiksXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbV92YXJpYW50OiBwcm9kdWN0LnZhcmlhbnRzICYmIHByb2R1Y3QudmFyaWFudHNbMF0gPyBwcm9kdWN0LnZhcmlhbnRzWzBdLmlkICsgJycgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzZXRQdXNoRGF0YWxheWVyKHsuLi5kYXRhLCBlY29tbWVyY2UsIGV2ZW50OiAndmlld19pdGVtX3N0YXBlJ30pXG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICBpZihwYXRobmFtZS5pbmRleE9mKCcvY2hlY2tvdXRzJykgPiAtMSAmJiBsb2NhdGlvbi5ocmVmLmluZGV4T2YoJ3N0ZXA9cGF5bWVudF9tZXRob2QnKSA+IC0xKXtcbiAgICAgICAgICAgICAgY29uc3QgY2hlY2tvdXQgPSB3aW5kb3c/LmxzRGF0YT8uY2hlY2tvdXQgIHx8IHt9O1xuICAgICAgICAgICAgICBjb25zdCBjdXN0b21lciA9IHdpbmRvdz8ubHNEYXRhPy5jdXN0b21lciB8fCB7fTtcbiAgICAgICAgICAgICAgZGF0YS5ldmVudCA9ICdwYXltZW50X2luZm9fc3RhcGUnO1xuICAgICAgICAgICAgICBpZihkYXRhX2xheWVyLmVjb21tZXJjZSl7XG4gICAgICAgICAgICAgICAgc2V0UHVzaERhdGFsYXllcih7ZWNvbW1lcmNlOiBudWxsIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmKGRhdGFfbGF5ZXIudXNlcl9kYXRhKXtcbiAgICAgICAgICAgICAgICBkYXRhLnVzZXJfZGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgIGVtYWlsOiBjaGVja291dC5lbWFpbCxcbiAgICAgICAgICAgICAgICAgIGZpcnN0X25hbWU6IGNoZWNrb3V0Py5zaGlwcGluZ19hZGRyZXNzPy5maXJzdF9uYW1lIHx8IGNoZWNrb3V0Py5iaWxsaW5nX2FkZHJlc3M/LmZpcnN0X25hbWUgfHwgJycsXG4gICAgICAgICAgICAgICAgICBsYXN0X25hbWU6IGNoZWNrb3V0Py5zaGlwcGluZ19hZGRyZXNzPy5sYXN0X25hbWUgfHwgY2hlY2tvdXQ/LmJpbGxpbmdfYWRkcmVzcz8ubGFzdF9uYW1lIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgcGhvbmU6IGNoZWNrb3V0Py5zaGlwcGluZ19hZGRyZXNzPy5waG9uZSB8fCBjaGVja291dD8uYmlsbGluZ19hZGRyZXNzPy5waG9uZSAgfHwgJycsXG4gICAgICAgICAgICAgICAgICBjb3VudHJ5OiBjaGVja291dD8uc2hpcHBpbmdfYWRkcmVzcz8uY291bnRyeV9jb2RlIHx8IGNoZWNrb3V0Py5iaWxsaW5nX2FkZHJlc3M/LmNvdW50cnlfY29kZSAgfHwgJycsXG4gICAgICAgICAgICAgICAgICByZWdpb246IGNoZWNrb3V0Py5zaGlwcGluZ19hZGRyZXNzPy5wcm92aW5jZSB8fCBjaGVja291dD8uYmlsbGluZ19hZGRyZXNzPy5wcm92aW5jZSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgIGNpdHk6ICBjaGVja291dD8uc2hpcHBpbmdfYWRkcmVzcz8uY2l0eSB8fCBjaGVja291dD8uYmlsbGluZ19hZGRyZXNzPy5jaXR5IHx8ICcnLFxuICAgICAgICAgICAgICAgICAgc3RyZWV0OiAgY2hlY2tvdXQ/LnNoaXBwaW5nX2FkZHJlc3M/LnN0cmVldCB8fCBjaGVja291dD8uc2hpcHBpbmdfYWRkcmVzcz8uYWRkcmVzczEgfHwgY2hlY2tvdXQ/LmJpbGxpbmdfYWRkcmVzcz8uYWRkcmVzczEgfHwgJycsXG4gICAgICAgICAgICAgICAgICB6aXA6IGNoZWNrb3V0Py5zaGlwcGluZ19hZGRyZXNzPy56aXAgfHwgY2hlY2tvdXQ/LmJpbGxpbmdfYWRkcmVzcz8uemlwIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tZXJfaWQ6IGN1c3RvbWVyPy5pZCB8fCBjaGVja291dD8uY3VzdG9tZXJfaWQgfHwgJycsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgICBpZihkYXRhX2xheWVyLmVjb21tZXJjZSl7XG4gICAgICAgICAgICAgICAgZGF0YS5lY29tbWVyY2UgPSB7XG4gICAgICAgICAgICAgICAgICBjdXJyZW5jeTogY2hlY2tvdXQ/LmN1cnJlbmN5LFxuICAgICAgICAgICAgICAgICAgY2FydF90b3RhbDogY2hlY2tvdXQ/LnRvdGFsX3ByaWNlLzEwMCxcbiAgICAgICAgICAgICAgICAgIGNhcnRfcXVhbnRpdHk6IGNoZWNrb3V0Lml0ZW1fY291bnQsXG4gICAgICAgICAgICAgICAgICBpdGVtczogY2hlY2tvdXQ/LmxpbmVfaXRlbXMgfHwgW10sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHNldFB1c2hEYXRhbGF5ZXIoey4uLmRhdGF9KTtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIGZ1bmN0aW9uIGFkZFRvQ2FydChpZCwgdmFyaWFudF9pZCkge1xuICAgICAgICAgICAgICBpZihpZCB8fCB2YXJpYW50X2lkKXtcbiAgICAgICAgICAgICAgICBjb25zdCBjYXJ0ID0gd2luZG93LmxzRGF0YS5jYXJ0IHx8IHt9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJdGVtID0gKGNhcnQ/Lml0ZW1zIHx8IFtdKS5maW5kKF9pID0+IF9pLmlkID09IGlkKSB8fCAoY2FydD8uaXRlbXMgfHwgW10pLmZpbmQoX2kgPT4gX2kudmFyaWFudF9pZCA9PSB2YXJpYW50X2lkKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZihkYXRhX2xheWVyLmVjb21tZXJjZSl7XG4gICAgICAgICAgICAgICAgICBzZXRQdXNoRGF0YWxheWVyKHtlY29tbWVyY2U6IG51bGwgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKGZpbmRJdGVtKXtcbiAgICAgICAgICAgICAgICAgIGxldCBlY29tbWVyY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICBpZihkYXRhX2xheWVyLmVjb21tZXJjZSl7XG4gICAgICAgICAgICAgICAgICAgIGVjb21tZXJjZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeTogd2luZG93LmxzRGF0YS5jdXJyZW5jeSxcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1faWQ6IGZpbmRJdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9za3U6IGZpbmRJdGVtLnNrdSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fbmFtZTogZmluZEl0ZW0ucHJvZHVjdF90aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fYnJhbmQ6IGZpbmRJdGVtLnZlbmRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fY2F0ZWdvcnk6IGZpbmRJdGVtLnByb2R1Y3RfdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fdmFyaWFudDogZmluZEl0ZW0udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogZmluZEl0ZW0ucHJpY2UvMTAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IGZpbmRJdGVtLnF1YW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgIH1dLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBzZXRQdXNoRGF0YWxheWVyKHsuLi5kYXRhLCBlY29tbWVyY2UsIGV2ZW50OiAnYWRkX3RvX2NhcnRfc3RhcGUnfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIGNoYW5nZUNhcnQoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGNhcnRDb250ZW50cyA9IGF3YWl0IGZldGNoKHdpbmRvdy5TaG9waWZ5LnJvdXRlcy5yb290ICsgJ2NhcnQuanMnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuanNvbigpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiB7IHJldHVybiBkYXRhIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJdGVtID0gKGNhcnRDb250ZW50cyAmJiBjYXJ0Q29udGVudHMuaXRlbXMgfHwgW10pLmZpbmQoX2kgPT4gX2kuaWQgPT0gaWQpIHx8IChjYXJ0Q29udGVudHMgJiYgY2FydENvbnRlbnRzLml0ZW1zIHx8IFtdKS5maW5kKF9pID0+IF9pLnZhcmlhbnRfaWQgPT0gdmFyaWFudF9pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYoZmluZEl0ZW0pe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVjb21tZXJjZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGFfbGF5ZXIuZWNvbW1lcmNlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWNvbW1lcmNlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5OiB3aW5kb3cubHNEYXRhLmN1cnJlbmN5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9pZDogZmluZEl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX3NrdTogZmluZEl0ZW0uc2t1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9uYW1lOiBmaW5kSXRlbS5wcm9kdWN0X3RpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9icmFuZDogZmluZEl0ZW0udmVuZG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9jYXRlZ29yeTogZmluZEl0ZW0ucHJvZHVjdF90eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV92YXJpYW50OiBmaW5kSXRlbS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBmaW5kSXRlbS5wcmljZS8xMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogZmluZEl0ZW0ucXVhbnRpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFB1c2hEYXRhbGF5ZXIoey4uLmRhdGEsIGV2ZW50OiAnYWRkX3RvX2NhcnRfc3RhcGUnfSk7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUNhcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY2hhbmdlQ2FydCgpO1xuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgZnVuY3Rpb24gYmVnaW5DaGVja291dFN0YXBlKGV2ZW50ID0gJ2JlZ2luX2NoZWNrb3V0X3N0YXBlJykge1xuICAgICAgICAgICAgICAgIGlmKCEod2luZG93Py5sc0RhdGE/LmNhcnQgfHwgd2luZG93Py5sc0RhdGE/LmNoZWNrb3V0KSl7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKGRhdGFfbGF5ZXIuZWNvbW1lcmNlKXtcbiAgICAgICAgICAgICAgICAgIHNldFB1c2hEYXRhbGF5ZXIoe2Vjb21tZXJjZTogbnVsbCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGVjb21tZXJjZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZihkYXRhX2xheWVyLmVjb21tZXJjZSl7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjYXJ0ID0gd2luZG93Py5sc0RhdGE/LmNhcnQgfHwgd2luZG93Py5sc0RhdGE/LmNoZWNrb3V0IHx8IHt9O1xuICAgICAgICAgICAgICAgICAgbGV0IGl0ZW1zID0gW11cbiAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdz8ubHNEYXRhPy5jYXJ0KXtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSAod2luZG93LmxzRGF0YS5jYXJ0Py5pdGVtcyB8fCBbXSkubWFwKF9pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9pZDogX2kucHJvZHVjdF9pZCArICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9za3U6IF9pLnNrdSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fbmFtZTogX2kucHJvZHVjdF90aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fYnJhbmQ6IF9pLnZlbmRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fY2F0ZWdvcnk6IF9pLnByb2R1Y3RfdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fdmFyaWFudDogX2kudmFyaWFudF9pZCArICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IF9pLnByaWNlLzEwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiBfaS5xdWFudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHdpbmRvdz8ubHNEYXRhPy5jaGVja291dCl7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zID0gKHdpbmRvdy5sc0RhdGEuY2hlY2tvdXQ/LmxpbmVfaXRlbXMgfHwgW10pLm1hcChfaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1faWQ6IF9pLml0ZW1faWQgKyAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fc2t1OiBfaS5pdGVtX3NrdSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fbmFtZTogX2kuaXRlbV9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9icmFuZDogX2kuaXRlbV9icmFuZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fY2F0ZWdvcnk6IF9pLml0ZW1fY2F0ZWdvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtX3ZhcmlhbnQ6IF9pLml0ZW1fdmFyaWFudCArICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IF9pLnByaWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IF9pLnF1YW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgXG4gICAgXG4gICAgICAgICAgICAgICAgICBlY29tbWVyY2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNhcnRfdG90YWw6IGNhcnQudG90YWxfcHJpY2UvMTAwLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeTogd2luZG93LmxzRGF0YS5jdXJyZW5jeSB8fCBjYXJ0LmN1cnJlbmN5LFxuICAgICAgICAgICAgICAgICAgICBjYXJ0X3F1YW50aXR5OiBjYXJ0Lml0ZW1fY291bnQsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRQdXNoRGF0YWxheWVyKHsuLi5kYXRhLCBlY29tbWVyY2UsIGV2ZW50fSlcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIvCfmoAgfiBmaWxlOiBpbmRleC5qczozMDIgfiBiZWdpbkNoZWNrb3V0U3RhcGUgfiB3aW5kb3cuZGF0YUxheWVyOlwiLCB7Li4uZGF0YSwgZWNvbW1lcmNlLCBldmVudH0pXG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRmV0Y2ggPSB3aW5kb3cuZmV0Y2g7XG4gICAgXG4gICAgICAgICAgICB3aW5kb3cuZmV0Y2ggPSBmdW5jdGlvbiAodXJsLCBpbml0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRtcFVybCA9IHVybCArICcnO1xuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIvCfmoAgfiBmaWxlOiBpbmRleC5qczozNzIgfiBmZXRjaCB+IHVybDpcIiwgdG1wVXJsKVxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmKHRtcFVybCA9PSAnL2NhcnQvYWRkJyB8fCB0bXBVcmwgPT0gJy9jYXJ0L2NoYW5nZScgfHwgdG1wVXJsID09ICcvY2FydC9hZGQuanMnIHx8ICB0bXBVcmwgPT0gJy9jYXJ0L2NoYW5nZS5qcycgfHwgIHRtcFVybC5pbmRleE9mKCcvY2FydC91cGRhdGUuanMnKSA9PSAwKXtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcnQgPSB3aW5kb3c/LmxzRGF0YT8uY2FydCB8fCB7fTtcbiAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdvbGRDYXJ0U3RhcGUnLCBKU09OLnN0cmluZ2lmeShjYXJ0KSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLwn5qAIH4gZmlsZTogaW5kZXguanM6MzU2IH4gLnRoZW4gfiBlcnJvcjpcIiwgZXJyb3IpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRmV0Y2godXJsLCBpbml0KTtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICBcbiAgICBcbiAgICAgICAgICAgIGZ1bmN0aW9uIGFkZFhNTFJlcXVlc3RDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHZhciBvbGRTZW5kLCBpO1xuICAgICAgICAgICAgICAgIGlmIChYTUxIdHRwUmVxdWVzdC5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3QuY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIFhNTEh0dHBSZXF1ZXN0LmNhbGxiYWNrcyA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgICAgIG9sZFNlbmQgPSBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUuc2VuZDtcbiAgICAgICAgICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLnNlbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZihYTUxIdHRwUmVxdWVzdD8uY2FsbGJhY2tzICYmIFhNTEh0dHBSZXF1ZXN0LmNhbGxiYWNrcy5sZW5ndGgpe1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IFhNTEh0dHBSZXF1ZXN0LmNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxIdHRwUmVxdWVzdC5jYWxsYmFja3NbaV0odGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSAgXG4gICAgICAgICAgICAgICAgICAgICAgb2xkU2VuZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gZXF1ZWxDYXJ0KGNhcnQpe1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhciBjYXJ0Q29udGVudHMgPSBhd2FpdCBmZXRjaCh3aW5kb3cuU2hvcGlmeS5yb3V0ZXMucm9vdCArICdjYXJ0LmpzJylcbiAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmpzb24oKSlcbiAgICAgICAgICAgICAgICAgIC50aGVuKGRhdGEgPT4geyByZXR1cm4gZGF0YSB9KTtcbiAgICAgICAgICAgICAgICB3aW5kb3cubHNEYXRhLmNhcnQgPSBjYXJ0Q29udGVudHMgfHwge31cbiAgICBcbiAgICAgICAgICAgICAgICBsZXQgY291bnRGb3IgPSBwYXJzZUludChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2FydEZvclN0YXBlJykgfHwgMClcbiAgICBcbiAgICAgICAgICAgICAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2FydFRva2VuJykgIT0gY2FydENvbnRlbnRzLnRva2VuKXtcbiAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJ0VG9rZW4nLCBjYXJ0Q29udGVudHMudG9rZW4pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGNvbnN0IGNhcnQgPSB3aW5kb3cubHNEYXRhLmNhcnQgfHwge307XG4gICAgICAgICAgICAgICAgY29uc3QgZmluZEl0ZW0gPSAoY2FydENvbnRlbnRzICYmIGNhcnRDb250ZW50cy5pdGVtcyB8fCBbXSkuZmluZChfaSA9PiBcbiAgICAgICAgICAgICAgICAgIChjYXJ0Py5pdGVtcyB8fCBbXSkuc29tZShfaWkgPT4gX2lpLnF1YW50aXR5ICE9IF9pLnF1YW50aXR5KSB8fCAhKGNhcnQ/Lml0ZW1zIHx8IFtdKS5zb21lKF9paSA9PiBfaWkuaWQgPT0gX2kuaWQpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvbGRGaW5kSXRlbSA9IChjYXJ0ICYmIGNhcnQuaXRlbXMgfHwgW10pLmZpbmQoX2kgPT4gXG4gICAgICAgICAgICAgICAgICAoY2FydENvbnRlbnRzICYmIGNhcnRDb250ZW50cz8uaXRlbXMgfHwgW10pLnNvbWUoX2lpID0+IF9paS5xdWFudGl0eSAhPSBfaS5xdWFudGl0eSkgfHwgIShjYXJ0Q29udGVudHM/Lml0ZW1zIHx8IFtdKS5zb21lKF9paSA9PiBfaWkuaWQgPT0gX2kuaWQpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZihmaW5kSXRlbSB8fCBvbGRGaW5kSXRlbSl7XG4gICAgICAgICAgICAgICAgICBpZihkYXRhX2xheWVyLmVjb21tZXJjZSl7XG4gICAgICAgICAgICAgICAgICAgIHNldFB1c2hEYXRhbGF5ZXIoe2Vjb21tZXJjZTogbnVsbCB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBmaW5kSXRlbSB8fCBvbGRGaW5kSXRlbTtcbiAgICAgICAgICAgICAgICAgIGxldCBlY29tbWVyY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICBpZihkYXRhX2xheWVyLmVjb21tZXJjZSl7XG4gICAgICAgICAgICAgICAgICAgIGVjb21tZXJjZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeTogd2luZG93LmxzRGF0YS5jdXJyZW5jeSxcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1faWQ6IGl0ZW0ucHJvZHVjdF9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fc2t1OiBpdGVtLnNrdSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fbmFtZTogaXRlbS5wcm9kdWN0X3RpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9icmFuZDogaXRlbS52ZW5kb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtX2NhdGVnb3J5OiBpdGVtLnByb2R1Y3RfdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fdmFyaWFudDogaXRlbS52YXJpYW50X2lkICsgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogaXRlbS5wcmljZS8xMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICB9XSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgbGV0IGV2ZW50ID0gJ2FkZF90b19jYXJ0X3N0YXBlJztcbiAgICAgICAgICAgICAgICAgIGlmKGZpbmRJdGVtPy5pZCA9PSBvbGRGaW5kSXRlbT8uaWQpe1xuICAgICAgICAgICAgICAgICAgICBldmVudCA9IGZpbmRJdGVtLnF1YW50aXR5IDwgb2xkRmluZEl0ZW0ucXVhbnRpdHkgPyAncmVtb3ZlX2Zyb21fY2FydF9zdGFwZScgOiAnYWRkX3RvX2NhcnRfc3RhcGUnXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZighZmluZEl0ZW0gJiYgb2xkRmluZEl0ZW0pe1xuICAgICAgICAgICAgICAgICAgICBldmVudCA9ICdyZW1vdmVfZnJvbV9jYXJ0X3N0YXBlJ1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc2V0UHVzaERhdGFsYXllcih7Li4uZGF0YSwgZWNvbW1lcmNlLCBldmVudH0pO1xuICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLwn5qAIH4gZmlsZTogaW5kZXguanM6NDUwIH4gZXF1ZWxDYXJ0IH4gZXZlbnQ6XCIsIGV2ZW50KVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY291bnRGb3IgPCA1KXtcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2FydEZvclN0YXBlJywgY291bnRGb3IgKyAxKVxuICAgICAgICAgICAgICAgICAgICAgIGVxdWVsQ2FydChjYXJ0KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LCA1MDApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi8J+agCB+IGZpbGU6IGluZGV4LmpzOjQxOCB+IGVxdWVsQ2FydCB+IGVycm9yOlwiLCBlcnJvcilcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgYWRkWE1MUmVxdWVzdENhbGxiYWNrKGZ1bmN0aW9uKHhocikge1xuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIvCfmoAgfiBmaWxlOiBpbmRleC5qczo0NjIgfiBhZGRYTUxSZXF1ZXN0Q2FsbGJhY2sgfiB4aHI6XCIsIHhoci5fdXJsKVxuICAgICAgICAgICAgICBpZih4aHIuX3VybCA9PSAnL2NhcnQvYWRkLmpzJyB8fCB4aHIuX3VybCA9PSAnL2NhcnQvY2hhbmdlLmpzJyl7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FydCA9IHdpbmRvdy5sc0RhdGEuY2FydCB8fCB7fTtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnb2xkQ2FydFN0YXBlJywgSlNPTi5zdHJpbmdpZnkoY2FydCkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgICBpZihldmVudC50YXJnZXQuYWN0aW9uLmluZGV4T2YoJy9jYXJ0L2FkZCcpID4gLTEpe1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhcnQgPSB3aW5kb3cubHNEYXRhLmNhcnQgfHwge307XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ29sZENhcnRTdGFwZScsIEpTT04uc3RyaW5naWZ5KGNhcnQpKSAgICAgICAgICBcbiAgICAgICAgICAgICAgfSBlbHNlIGlmKGV2ZW50LnRhcmdldC5hY3Rpb24uaW5kZXhPZignL2NhcnQnKSA+IC0xKXtcbiAgICAgICAgICAgICAgICBiZWdpbkNoZWNrb3V0U3RhcGUoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICBcbiAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvY2hlY2tvdXQnKSAmJiAhbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2JlZ2luX2NoZWNrb3V0X3BsdXNfc3RhcGUnKSl7XG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdiZWdpbl9jaGVja291dF9wbHVzX3N0YXBlJywgJ3RydWUnKVxuICAgICAgICAgICAgICBiZWdpbkNoZWNrb3V0U3RhcGUoJ2JlZ2luX2NoZWNrb3V0X3BsdXNfc3RhcGUnKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2JlZ2luX2NoZWNrb3V0X3BsdXNfc3RhcGUnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgLy8gICAvLyDQktC40LrQvtC90YPQstCw0YLQuCDQtNGW0ZcsINGP0LrRliDQv9C+0YLRgNGW0LHQvdC+INC/0YDQuCDQt9C80ZbQvdGWIFVSTFxuICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnVVJMINCx0YPQu9C+INC30LzRltC90LXQvdC+Jywgd2luZG93LmxvY2F0aW9uLmhyZWYsIGV2ZW50KTtcbiAgICAgICAgICAgIC8vICAgYWxlcnQoJzEnKVxuICAgICAgICAgICAgLy8gfSk7XG4gICAgXG4gICAgXG4gICAgICAgICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgIGxldCBjYXJ0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ29sZENhcnRTdGFwZScpO1xuICAgICAgICAgICAgICBpZihjYXJ0KXtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY2FydCA9IEpTT04ucGFyc2UoY2FydCk7XG4gICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnb2xkQ2FydFN0YXBlJylcbiAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJ0Rm9yU3RhcGUnLCAwKVxuICAgICAgICAgICAgICAgICAgZXF1ZWxDYXJ0KGNhcnQpXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICB9IFxuICAgIFxuICAgICAgICAgIGlmKHBhdGhuYW1lLmluZGV4T2YoJy90aGFua195b3UnKSA+IC0xKXtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrb3V0ID0gd2luZG93Py5TaG9waWZ5Py5jaGVja291dCB8fCB7fTtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbWVyID0gd2luZG93Py5sc0RhdGE/LmN1c3RvbWVyIHx8IHt9O1xuICAgICAgICAgICAgaWYoZGF0YV9sYXllci5lY29tbWVyY2Upe1xuICAgICAgICAgICAgICBzZXRQdXNoRGF0YWxheWVyKHtlY29tbWVyY2U6IG51bGwgfSk7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICBjb25zdCBkYXRhMiA9IHtcbiAgICAgICAgICAgICAgZXZlbnQ6ICdwdXJjaGFzZV9zdGFwZScsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhX2xheWVyLnVzZXJfZGF0YSl7XG4gICAgICAgICAgICAgIGRhdGEyLnVzZXJfZGF0YSA9IHtcbiAgICAgICAgICAgICAgICBlbWFpbDogY2hlY2tvdXQuZW1haWwgfHwgY2hlY2tvdXQ/LmJpbGxpbmdfYWRkcmVzcz8uZW1haWwgfHwgY2hlY2tvdXQ/LnNoaXBwaW5nX2FkZHJlc3M/LmVtYWlsLFxuICAgICAgICAgICAgICAgIGZpcnN0X25hbWU6IGN1c3RvbWVyPy5maXJzdF9uYW1lIHx8IGNoZWNrb3V0Py5iaWxsaW5nX2FkZHJlc3M/LmZpcnN0X25hbWUgfHwgY2hlY2tvdXQ/LnNoaXBwaW5nX2FkZHJlc3M/LmZpcnN0X25hbWUsXG4gICAgICAgICAgICAgICAgbGFzdF9uYW1lOiBjdXN0b21lcj8ubGFzdF9uYW1lIHx8IGNoZWNrb3V0Py5iaWxsaW5nX2FkZHJlc3M/Lmxhc3RfbmFtZSB8fCBjaGVja291dD8uc2hpcHBpbmdfYWRkcmVzcz8ubGFzdF9uYW1lLFxuICAgICAgICAgICAgICAgIHBob25lOiBjdXN0b21lcj8ucGhvbmUgfHwgY2hlY2tvdXQ/LmJpbGxpbmdfYWRkcmVzcz8ucGhvbmUgfHwgY2hlY2tvdXQ/LnNoaXBwaW5nX2FkZHJlc3M/LnBob25lLFxuICAgICAgICAgICAgICAgIGNvdW50cnk6IGNoZWNrb3V0Py5iaWxsaW5nX2FkZHJlc3M/LmNvdW50cnlfY29kZSB8fCBjaGVja291dD8uc2hpcHBpbmdfYWRkcmVzcz8uY291bnRyeV9jb2RlLFxuICAgICAgICAgICAgICAgIHJlZ2lvbjogY2hlY2tvdXQuYmlsbGluZ19hZGRyZXNzLmNvdW50cnlfY29kZSA9PSBcIlVTXCIgPyBjaGVja291dD8uYmlsbGluZ19hZGRyZXNzPy5wcm92aW5jZV9jb2RlIDogY2hlY2tvdXQ/LmJpbGxpbmdfYWRkcmVzcz8ucHJvdmluY2UsXG4gICAgICAgICAgICAgICAgY2l0eTogY2hlY2tvdXQ/LmJpbGxpbmdfYWRkcmVzcz8uY2l0eSB8fCBjaGVja291dD8uc2hpcHBpbmdfYWRkcmVzcz8uY2l0eSxcbiAgICAgICAgICAgICAgICBzdHJlZXQ6IGNoZWNrb3V0Py5iaWxsaW5nX2FkZHJlc3M/LmFkZHJlc3MxIHx8IGNoZWNrb3V0Py5zaGlwcGluZ19hZGRyZXNzPy5hZGRyZXNzMSxcbiAgICAgICAgICAgICAgICB6aXA6IGNoZWNrb3V0Py5iaWxsaW5nX2FkZHJlc3M/LnppcCB8fCBjaGVja291dD8uc2hpcHBpbmdfYWRkcmVzcz8uemlwLFxuICAgICAgICAgICAgICAgIGN1c3RvbWVyX2lkOiBjdXN0b21lcj8uaWQgfHwgY2hlY2tvdXQ/LmN1c3RvbWVyX2lkLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgaWYoZGF0YV9sYXllci5lY29tbWVyY2Upe1xuICAgIFxuICAgICAgICAgICAgICBjb25zdCBzaG9wID0gd2luZG93Py5TaG9waWZ5Py5zaG9wO1xuICAgICAgICAgICAgICBkYXRhMi5lY29tbWVyY2UgPSB7XG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25faWQ6IGNoZWNrb3V0Py5vcmRlcl9pZCxcbiAgICAgICAgICAgICAgICBhZmZpbGlhdGlvbjogc2hvcCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogY2hlY2tvdXQ/LnRvdGFsX3ByaWNlLFxuICAgICAgICAgICAgICAgIHRheDogY2hlY2tvdXQ/LnRvdGFsX3RheCxcbiAgICAgICAgICAgICAgICBzaGlwcGluZzogY2hlY2tvdXQ/LnNoaXBwaW5nPy5wcmljZSB8fCBjaGVja291dD8uc2hpcHBpbmdfcmF0ZT8ucHJpY2UsXG4gICAgICAgICAgICAgICAgLy8gc3ViX3RvdGFsOiBjaGVja291dD8udG90YWxfcHJpY2UsXG4gICAgICAgICAgICAgICAgZGlzY291bnRfYW1vdW50OiBjaGVja291dD8uZGlzY291bnQ/LmFtb3VudCxcbiAgICAgICAgICAgICAgICBkaXNjb3VudDogY2hlY2tvdXQ/LmRpc2NvdW50Py5jb2RlLFxuICAgICAgICAgICAgICAgIGN1cnJlbmN5OiBjaGVja291dD8uY3VycmVuY3ksXG4gICAgICAgICAgICAgICAgaXRlbXM6IChjaGVja291dD8ubGluZV9pdGVtcyB8fCBbXSkubWFwKF9pID0+ICh7XG4gICAgICAgICAgICAgICAgICBpdGVtX2lkOiBfaS5wcm9kdWN0X2lkLFxuICAgICAgICAgICAgICAgICAgaXRlbV9za3U6IF9pLnNrdSxcbiAgICAgICAgICAgICAgICAgIGl0ZW1fbmFtZTogX2kudGl0bGUsXG4gICAgICAgICAgICAgICAgICBpdGVtX2JyYW5kOiBfaS52ZW5kb3IsXG4gICAgICAgICAgICAgICAgICBpdGVtX3ZhcmlhbnQ6IF9pLnZhcmlhbnRfaWQgKyAnJyxcbiAgICAgICAgICAgICAgICAgIHByaWNlOiBfaS5wcmljZSxcbiAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiBfaS5xdWFudGl0eSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgIFxuICAgIFxuICAgICAgICAgICAgaWYoZGF0YV9sYXllci5lY29tbWVyY2UgfHwgZGF0YV9sYXllci51c2VyX2RhdGEpe1xuICAgICAgICAgICAgICBzZXRQdXNoRGF0YWxheWVyKHsuLi5kYXRhMn0pO1xuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgY3VzdG9tZXJJZCA9IGRhdGEyLnVzZXJfZGF0YS5jdXN0b21lcl9pZDtcbiAgICAgICAgICAgICAgaWYoIWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjdXN0b21lckxvZ2luSWQnKSAmJiBjdXN0b21lcklkKXtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY3VzdG9tZXJMb2dpbklkJywgY3VzdG9tZXJJZCk7XG4gICAgICAgICAgICAgICAgaWYoIWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjdXN0b21lclJlZ2lzdGVySWQnKSB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY3VzdG9tZXJSZWdpc3RlcklkJykgIT0gY3VzdG9tZXJJZCl7XG4gICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY3VzdG9tZXJSZWdpc3RlcklkJywgY3VzdG9tZXJJZClcbiAgICAgICAgICAgICAgICAgIHNldFB1c2hEYXRhbGF5ZXIoe2V2ZW50OiAnc2lnbl91cCcsIHVzZXJfZGF0YTogZGF0YTIudXNlcl9kYXRhfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHNldFB1c2hEYXRhbGF5ZXIoe2V2ZW50OiAnbG9naW4nLCB1c2VyX2RhdGE6IGRhdGEyLnVzZXJfZGF0YX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih3ZWJob29rLnNlbmRfd2ViaG9vayAmJiB3ZWJob29rLnVybCAmJiB3ZWJob29rLnB1cmNoYXNlX3dlYmhvb2spe1xuICAgICAgICAgICAgICBjb25zdCBjb29raWVzID0ge1xuICAgICAgICAgICAgICAgICdmYmMnOiBnZXRDb29raWUoJ2ZiYycpLFxuICAgICAgICAgICAgICAgICdmYnAnOiBnZXRDb29raWUoJ2ZicCcpLFxuICAgICAgICAgICAgICAgICdGUEdDTEFXJzogZ2V0Q29va2llKCdGUEdDTEFXJyksXG4gICAgICAgICAgICAgICAgJ19nY2xfYXcnOiBnZXRDb29raWUoJ19nY2xfYXcnKSxcbiAgICAgICAgICAgICAgICAndHRjbGlkJzogZ2V0Q29va2llKCd0dGNsaWQnKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmZXRjaCh3ZWJob29rLnVybCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7Li4uZGF0YTIsIGNvb2tpZXMsIGNhcnRfaWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYXJ0VG9rZW4nKX0pLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIvCfmoAgfiBzZXRFdmVudE9sZFNjcmlwdCB+IGVycm9yOlwiLCBlcnJvcilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCfwn5qAIH4gZmlsZTogaW5kZXguanMgfiBsaW5lIDE4NCB+IF0pLnRoZW4gfiBlcnInLCBlcnIpO1xuICAgICAgLy8gbG9nZ2VyLmVycm9yKCdhZGQgdG8gY2FydCBlcnJvcicsIGVycik7XG4gICAgfSk7XG59KSgpO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDdXN0b21lcihjdXN0b21lcikge1xuICBjb25zb2xlLmxvZyhcIvCfmoAgfiBmaWxlOiBpbmRleC5qczo0MiB+IHNldEN1c3RvbWVyIH4gY3VzdG9tZXI6XCIsIGN1c3RvbWVyKVxufSJdLCJuYW1lcyI6WyJwYXJzZUVjb21QYXJhbXMiLCJldmVudCIsImVjb20iLCJkYXRhIiwiY2hlY2tvdXQiLCJ0b3RhbFByaWNlIiwiYW1vdW50IiwidmFsdWUiLCJ0b1N0cmluZyIsImNhcnRfdG90YWwiLCJjdXJyZW5jeSIsImN1cnJlbmN5Q29kZSIsImNhcnRfcXVhbnRpdHkiLCJsaW5lSXRlbXMiLCJsZW5ndGgiLCJuYW1lIiwidGF4IiwidG90YWxUYXgiLCJzaGlwcGluZyIsInNoaXBwaW5nTGluZSIsInByaWNlIiwidHJhbnNhY3Rpb25faWQiLCJvcmRlciIsImlkIiwiY291cG9uIiwiZGlzY291bnRBcHBsaWNhdGlvbnMiLCJ0aXRsZSIsImRpc2NvdW50IiwiZGlzY291bnRfYW1vdW50IiwiZGlzY291bnRfcGVyY2VudGFnZSIsInBlcmNlbnRhZ2UiLCJzdWJfdG90YWwiLCJzdWJ0b3RhbFByaWNlIiwiY29sbGVjdGlvbl9pZCIsImNvbGxlY3Rpb24iLCJpdGVtX2xpc3RfbmFtZSIsInByb2R1Y3RWYXJpYW50cyIsInNlYXJjaF90ZXJtIiwic2VhcmNoUmVzdWx0IiwicXVlcnkiLCJjYXJ0IiwiY29zdCIsInRvdGFsQW1vdW50IiwicHJvZHVjdFZhcmlhbnQiLCJjYXJ0TGluZSIsIm1lcmNoYW5kaXNlIiwicGFyc2VJdGVtcyIsIml0ZW1zIiwiaSIsInB1c2giLCJ2YXJpYW50IiwicHJvZHVjdCIsInNrdSIsInR5cGUiLCJ2ZW5kb3IiLCJpbWFnZSIsInNyYyIsImRpc2NvdW50QWxsb2NhdGlvbnMiLCJxdWFudGl0eSIsImNvbnNvbGUiLCJsb2ciLCJtYXhJdGVtcyIsIk1hdGgiLCJtaW4iLCJsaW5lcyIsInVybCIsInNob3AiLCJzaG9wSWQiLCJnZXRDb29raWUiLCJkb2N1bWVudCIsImNvb2tpZSIsInBhcnRzIiwic3BsaXQiLCJwb3AiLCJzaGlmdCIsImZldGNoU2V0dGluZ3MiLCJmZXRjaCIsIm1ldGhvZCIsInRoZW4iLCJyZXNwIiwianNvbiIsIlByb21pc2UiLCJhbGwiLCJyZXMiLCJ3aWRnZXQiLCJjYXJ0RGF0YSIsImdlbmVyYXRlIiwiZGF0YV9sYXllciIsIndlYmhvb2siLCJ3aW5kb3ciLCJkYXRhTGF5ZXIiLCJpbnNlcnRfZ3RtX3NuaXBwZXIiLCJzY3JpcHQiLCJjcmVhdGVFbGVtZW50IiwiRE9NQUlOIiwiaXNfY3VzdG9tX2RvbWFpbiIsImN1c3RvbV9kb21haW4iLCJXRUJfR1RNX0lEIiwiaXNfY3VzdG9tX2xvYWRlZCIsImN1c3RvbV9sb2FkZWQiLCJndG1faWQiLCJyZXBsYWNlIiwidHJpbSIsIkNPTlRBSU5FUl9JRCIsIklTX0NVU1RPTV9JRCIsIkJvb2xlYW4iLCJpc19jb29raWVfa2VlcGVyIiwidGV4dCIsImlubmVySFRNTCIsImhlYWQiLCJhcHBlbmRDaGlsZCIsImV2ZW50X25hbWUiLCJzZXRJbnRlcnZhbCIsInRtcCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsImxvZ19ldmVudCIsImV2ZW50RGF0YSIsInVzZXJfZGF0YSIsImVjb21tX3BhZ2V0eXBlIiwiZWNvbW1lcmNlIiwic2VuZF93ZWJob29rIiwicHVyY2hhc2Vfd2ViaG9vayIsImNvb2tpZXMiLCJoZWFkZXJzIiwiYm9keSIsInN0cmluZ2lmeSIsImNoZWNrb3V0X2V4dGVuc2liaWxpdHkiLCJsaWZldGltZV9vcmRlcnMiLCJuZXdfY3VzdG9tZXIiLCJlcnJvciIsInNldEl0ZW0iLCJhZGRFdmVudExpc3RlbmVyIiwibWVzc2FnZSIsImluY2x1ZGVzIiwicGFnZXR5cGUiLCJlIiwic2V0VGltZW91dCIsInNldEV2ZW50T2xkU2NyaXB0Iiwic2V0UHVzaERhdGFsYXllciIsIml0ZW0iLCJzb21lIiwiX2kiLCJwYXRobmFtZSIsImxvY2F0aW9uIiwidG9rZW4iLCJpbmRleE9mIiwibHNEYXRhIiwiY3VzdG9tZXIiLCJlbWFpbCIsImZpcnN0X25hbWUiLCJsYXN0X25hbWUiLCJjdXN0b21lcl9pZCIsInJlbW92ZUl0ZW0iLCJhZGRUb0NhcnQiLCJ2YXJpYW50X2lkIiwiZmluZEl0ZW0iLCJmaW5kIiwidW5kZWZpbmVkIiwiaXRlbV9pZCIsIml0ZW1fc2t1IiwiaXRlbV9uYW1lIiwicHJvZHVjdF90aXRsZSIsIml0ZW1fYnJhbmQiLCJpdGVtX2NhdGVnb3J5IiwicHJvZHVjdF90eXBlIiwiaXRlbV92YXJpYW50IiwiY2hhbmdlQ2FydCIsIlNob3BpZnkiLCJyb3V0ZXMiLCJyb290IiwicmVzcG9uc2UiLCJjYXJ0Q29udGVudHMiLCJiZWdpbkNoZWNrb3V0U3RhcGUiLCJtYXAiLCJwcm9kdWN0X2lkIiwibGluZV9pdGVtcyIsInRvdGFsX3ByaWNlIiwiaXRlbV9jb3VudCIsImFkZFhNTFJlcXVlc3RDYWxsYmFjayIsImNhbGxiYWNrIiwib2xkU2VuZCIsIlhNTEh0dHBSZXF1ZXN0IiwiY2FsbGJhY2tzIiwicHJvdG90eXBlIiwic2VuZCIsImFwcGx5IiwiYXJndW1lbnRzIiwiZXF1ZWxDYXJ0IiwiY291bnRGb3IiLCJwYXJzZUludCIsIl9paSIsIm9sZEZpbmRJdGVtIiwiY29sbGVjdGlvbl90aXRsZSIsInZhcmlhbnRzIiwidG9GaXhlZCIsImhyZWYiLCJzaGlwcGluZ19hZGRyZXNzIiwiYmlsbGluZ19hZGRyZXNzIiwicGhvbmUiLCJjb3VudHJ5IiwiY291bnRyeV9jb2RlIiwicmVnaW9uIiwicHJvdmluY2UiLCJjaXR5Iiwic3RyZWV0IiwiYWRkcmVzczEiLCJ6aXAiLCJvcmlnaW5hbEZldGNoIiwiaW5pdCIsInRtcFVybCIsInhociIsIl91cmwiLCJ0YXJnZXQiLCJhY3Rpb24iLCJkYXRhMiIsInByb3ZpbmNlX2NvZGUiLCJvcmRlcl9pZCIsImFmZmlsaWF0aW9uIiwidG90YWxfdGF4Iiwic2hpcHBpbmdfcmF0ZSIsImNvZGUiLCJjdXN0b21lcklkIiwiY2FydF9pZCIsImVyciIsInNldEN1c3RvbWVyIl0sInNvdXJjZVJvb3QiOiIifQ==