design-wizard.js 98 KB
/*! This file is part of the LearnDash plugin and was generated automatically */
/*
 * ATTENTION: An "eval-source-map" devtool has been used.
 * This devtool is neither made for production nor for readable output files.
 * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
 * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
 * or disable the default devtool with "devtool: false".
 * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
 */
/******/ (function() { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ "./assets/js/src/design-wizard.js":
/*!****************************************!*\
  !*** ./assets/js/src/design-wizard.js ***!
  \****************************************/
/***/ (function() {

eval("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; }\n\nfunction _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; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\njQuery(window).on('load', function () {\n  initPageLoad();\n});\njQuery(function () {\n  /**\n   * Template\n   */\n  jQuery(document).on('mouseover', '.templates .template figure', function (e) {\n    e.preventDefault();\n    jQuery(this).addClass('hover');\n  });\n  jQuery(document).on('mouseleave', '.templates .template figure', function (e) {\n    e.preventDefault();\n    jQuery(this).removeClass('hover');\n  });\n  jQuery(document).on('click', '.templates .template figure .actions .select', function (e) {\n    e.preventDefault();\n    var $templates = jQuery(this).closest('.templates'),\n        templateId = jQuery(this).closest('.template').data('id'),\n        themeTemplateId = jQuery(this).closest('.template').data('theme_template_id');\n    $templates.find('.template').removeClass('selected');\n    jQuery(this).closest('.template').addClass('selected');\n    Cookies.set('ldDwTemplateId', templateId);\n    Cookies.set('ldDwThemeTemplateId', themeTemplateId); // Reset template font and palette selection.\n\n    Cookies.set('ldDwPalette', 'default');\n    Cookies.set('ldDwFont', 'default');\n  });\n  /**\n   * Preview\n   */\n\n  jQuery(document).on('click', '.templates .template figure .actions .preview', function (e) {\n    e.preventDefault();\n    var $preview = jQuery('.preview-wrapper'),\n        $iframeWrapper = $preview.find('.iframe-wrapper'),\n        $template = jQuery(this).closest('.template'),\n        templateId = $template.data('id'),\n        theme = templateId.includes('kadence_') ? 'kadence' : 'astra',\n        previewUrl = $template.data('preview_url');\n\n    if (previewUrl && previewUrl.length > 0) {\n      $preview.find('iframe').attr('src', previewUrl);\n      $preview.show();\n      $iframeWrapper.hide();\n      setTimeout(function () {\n        updatePreview(theme, 'site-colors', 'default');\n        updatePreview(theme, 'site-typography', 'default');\n        $iframeWrapper.show();\n      }, 500);\n    }\n  });\n  jQuery(document).on('click', '.preview-wrapper .close', function (e) {\n    e.preventDefault();\n    var $wrapper = jQuery(this).closest('.preview-wrapper');\n    $wrapper.find('.preview iframe').removeAttr('src');\n    $wrapper.hide();\n  });\n  /**\n   * Font\n   */\n\n  jQuery(document).on('click', '.design-wizard .fonts .font', function (e) {\n    e.preventDefault();\n    var $fonts = jQuery(this).closest('.fonts'),\n        id = jQuery(this).data('id'),\n        template = Cookies.get('ldDwTemplateId'),\n        theme = template.includes('kadence_') ? 'kadence' : 'astra';\n    $fonts.find('.font').removeClass('selected');\n    jQuery(this).addClass('selected');\n    Cookies.set('ldDwFont', id);\n    updatePreview(theme, 'site-typography', id);\n  });\n  jQuery(document).on('click', '.design-wizard .reset-font-button', function (e) {\n    e.preventDefault();\n    var $fonts = jQuery(this).closest('.header').find('.fonts'),\n        template = Cookies.get('ldDwTemplateId'),\n        theme = template.includes('kadence_') ? 'kadence' : 'astra';\n    $fonts.find('.font').removeClass('selected');\n    Cookies.remove('ldDwFont');\n    updatePreview(theme, 'site-typography', 'default');\n  });\n  /**\n   * Palette\n   */\n\n  jQuery(document).on('click', '.design-wizard .palettes .palette', function (e) {\n    e.preventDefault();\n    var $palettes = jQuery(this).closest('.palettes'),\n        id = jQuery(this).data('id'),\n        template = Cookies.get('ldDwTemplateId'),\n        theme = template.includes('kadence_') ? 'kadence' : 'astra';\n    $palettes.find('.palette').removeClass('selected');\n    jQuery(this).addClass('selected');\n    Cookies.set('ldDwPalette', id);\n    updatePreview(theme, 'site-colors', id);\n  });\n  jQuery(document).on('click', '.design-wizard .reset-palette-button', function (e) {\n    e.preventDefault();\n    var $palettes = jQuery(this).closest('.header').find('.palettes'),\n        template = Cookies.get('ldDwTemplateId'),\n        theme = template.includes('kadence_') ? 'kadence' : 'astra';\n    $palettes.find('.palette').removeClass('selected');\n    Cookies.remove('ldDwPalette');\n    updatePreview(theme, 'site-colors', 'default');\n  });\n  /**\n   * Pagination\n   */\n\n  jQuery(document).on('click', '.next-button', function (e) {\n    e.preventDefault();\n    var url = window.location.href,\n        urlParams = new URLSearchParams(window.location.search),\n        template = Cookies.get('ldDwTemplateId');\n    var nonce = false;\n\n    if (!template || template === 'undefined') {\n      alert('Please select a template first');\n      return false;\n    }\n\n    var step = urlParams.get('step');\n    step = step ? parseInt(step) : 1;\n\n    if (step === 1) {\n      // Get Astra theme data\n      if (template.includes('astra_')) {\n        Cookies.set('astra-site-color-scheme', 'light');\n      }\n\n      redirectPage(url, step, template, nonce);\n    } else if (step === 4) {\n      nonce = LearnDashDesignWizard.ajax_init_nonce;\n      jQuery('#ld_dw_confirm').dialog({\n        dialogClass: 'wp-dialog',\n        modal: true,\n        title: 'Ready to Import?',\n        width: 400,\n        buttons: [{\n          text: 'I understand, continue',\n          click: function click() {\n            redirectPage(url, step, template, nonce);\n          }\n        }, {\n          text: 'Exit Setup',\n          click: function click() {\n            window.location.href = LearnDashDesignWizard.learndash_setup_url;\n          }\n        }]\n      });\n    } else {\n      redirectPage(url, step, template, nonce);\n    }\n  });\n  jQuery(document).on('click', '.back', function (e) {\n    e.preventDefault();\n    history.back();\n  });\n  jQuery(document).on('click', '.exit', function (e) {\n    e.preventDefault();\n    window.location.href = LearnDashDesignWizard.learndash_setup_url;\n  });\n  jQuery(document).on('click', '.visit-site', function (e) {\n    e.preventDefault();\n    jQuery('<a href=\"' + LearnDashDesignWizard.site_url + '\" target=\"_blank\"Visit Site</a>')[0].click();\n  });\n});\n/**\n * Build template\n */\n\nfunction initPageLoad() {\n  var urlParams = new URLSearchParams(window.location.search),\n      template = urlParams.get('template'),\n      nonce = urlParams.get('nonce');\n  var step = urlParams.get('step'),\n      theme = '';\n  step = step ? parseInt(step) : 1;\n\n  if (template) {\n    theme = template.includes('kadence_') ? 'kadence' : 'astra';\n  }\n\n  if (step === 1) {\n    Cookies.remove('ldDwTemplateId');\n  } else if (step === 2 || step === 3 || step === 4) {\n    var font = Cookies.get('ldDwFont'),\n        palette = Cookies.get('ldDwPalette');\n    setTimeout(function () {\n      updatePreview(theme, 'site-colors', palette);\n      updatePreview(theme, 'site-typography', font);\n      setTimeout(function () {\n        jQuery('#ld-site-preview').show();\n      }, 1000);\n    }, 500);\n  } else if (step === 5 && template.length > 0 && nonce.length > 0) {\n    Cookies.remove('ldDwLastBuildAstraStep');\n    Cookies.remove('ldDwLastBuildKadenceStep');\n    ajaxBuildTemplate(true);\n  }\n}\n\nfunction ajaxBuildTemplate() {\n  var init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n  var urlParams = new URLSearchParams(window.location.search),\n      template = urlParams.get('template'),\n      nonce = urlParams.get('nonce');\n  var currentStepN = 0,\n      totalSteps = 0;\n\n  if (init) {\n    currentStepN = 1; // Remove wizard cookies set by the previous wizard process.\n\n    flushCookies();\n    totalSteps = 6;\n\n    if (template.includes('astra')) {\n      totalSteps = parseInt(totalSteps) + 35;\n    } else if (template.includes('kadence')) {\n      totalSteps = parseInt(totalSteps) + 9;\n    }\n\n    Cookies.set('ldDwTotalSteps', totalSteps);\n  } else {\n    currentStepN = Cookies.get('ldDwCurrentStepN');\n    currentStepN = parseInt(currentStepN) + 1;\n    totalSteps = Cookies.get('ldDwTotalSteps');\n  }\n\n  Cookies.set('ldDwCurrentStepN', currentStepN);\n  jQuery.post(LearnDashDesignWizard.ajaxurl, {\n    action: 'ld_dw_build_template',\n    nonce: nonce,\n    template: template,\n    init: init\n  }, function (response) {\n    if (response.success) {\n      if (!response.data.complete) {\n        if (response.data.step !== 'build_template') {\n          ajaxBuildTemplate();\n        } else if (response.data.step === 'build_template') {\n          if (response.data.theme === 'astra') {\n            ajaxBuildAstra();\n          } else if (response.data.theme === 'kadence') {\n            ajaxBuildKadence();\n          }\n        }\n      } else {\n        currentStepN = 1;\n        totalSteps = 1;\n        flushCookies(true); // Add process complete handler.\n\n        var actionsTemplate = LearnDashDesignWizard.templates.actions_success;\n        jQuery('.design-wizard > .content > .text').replaceWith(actionsTemplate);\n      }\n\n      updateProgress({\n        currentStepN: currentStepN,\n        totalSteps: totalSteps,\n        message: response.data.message\n      });\n    }\n  });\n}\n\nfunction ajaxBuildAstra() {\n  var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n  var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'POST';\n  var urlParams = new URLSearchParams(window.location.search),\n      font = Cookies.get('ldDwFont'),\n      palette = Cookies.get('ldDwPalette'),\n      fontDetails = JSON.stringify(getFontDetails('astra', font)),\n      colorScheme = Cookies.get('astra-site-color-scheme');\n  var paletteDetails,\n      step = urlParams.get('step');\n\n  if (colorScheme) {\n    paletteDetails = JSON.stringify(getPaletteDetails('astra', palette, colorScheme));\n  }\n\n  if (url.length < 1) {\n    url = LearnDashDesignWizard.ajaxurl;\n  }\n\n  var actions = ['astra-sites-api-request', 'astra-required-plugins', 'astra-sites-filesystem-permission', 'astra-sites-set-start-flag', 'astra-sites-reset-customizer-data', 'astra-sites-reset-site-options', 'astra-sites-reset-widgets-data', 'astra-sites-reset-terms-and-forms', 'astra-sites-get-deleted-post-ids', 'astra-sites-reset-posts', // 10 posts per batch\n  'astra-sites-import-wpforms', 'astra-sites-import-cartflows', 'astra-sites-import-customizer-settings', 'astra-sites-import-prepare-xml', 'astra-wxr-import', 'astra-sites-import-options', 'astra-sites-import-widgets', 'astra_sites_set_site_data-site_colors', // param: site-colors\n  'astra_sites_set_site_data-site_typography', // param: site-typography\n  'astra-sites-import-end'];\n  var templateId = Cookies.get('ldDwThemeTemplateId'),\n      lastStep = Cookies.get('ldDwLastBuildAstraStep'),\n      totalSteps = Cookies.get('ldDwTotalSteps');\n  var lastStepKey, currentStepKey;\n  var currentStepN = Cookies.get('ldDwCurrentStepN'),\n      message = '';\n  currentStepN = parseInt(currentStepN) + 1;\n  Cookies.set('ldDwCurrentStepN', currentStepN);\n\n  if (!lastStep) {\n    currentStepKey = 0;\n  } else {\n    lastStepKey = actions.indexOf(lastStep);\n    currentStepKey = lastStepKey + 1;\n  }\n\n  var currentStep = actions[currentStepKey];\n\n  if (currentStep) {\n    var postIds, deletedPostIds, astraSiteResetPosts;\n    step = currentStep;\n\n    switch (currentStep) {\n      case 'astra-sites-api-request':\n        data.url = 'astra-sites/' + templateId;\n        message = 'Get template data';\n        break;\n\n      case 'astra-sites-reset-customizer-data':\n        message = 'Reset site data';\n        break;\n\n      case 'astra-sites-reset-posts':\n        postIds = Cookies.get('astra-site-deleted-post-ids');\n\n        if (postIds !== 'undefined') {\n          postIds = postIds.split(',');\n          deletedPostIds = postIds.splice(0, 10);\n        } else {\n          deletedPostIds = [];\n        }\n\n        data.ids = Object.assign({}, deletedPostIds);\n        data.ids = JSON.stringify(data.ids);\n\n        if (postIds !== 'undefined' && postIds.length > 0) {\n          astraSiteResetPosts = true;\n        } else {\n          astraSiteResetPosts = false;\n        }\n\n        break;\n\n      case 'astra-sites-import-wpforms':\n        data.wpforms_url = Cookies.get('astra-site-wpforms-path');\n        Cookies.remove('astra-site-wpforms-path');\n        message = 'Import wpforms data if any';\n        break;\n\n      case 'astra-sites-import-cartflows':\n        data.cartflows_url = Cookies.get('astra-site-cartflows-path');\n        Cookies.remove('astra-site-cartflows-path');\n        message = 'Import cartflows data if any';\n        break;\n\n      case 'astra-sites-import-widgets':\n        data.widgets_data = Cookies.get('astra-site-widgets-data');\n        Cookies.remove('astra-site-widgets-data');\n        message = 'Import widgets data';\n        break;\n\n      case 'astra-sites-import-prepare-xml':\n        data.wxr_url = Cookies.get('astra-site-wxr-path');\n        Cookies.remove('astra-site-wxr-path');\n        message = 'Import XML data';\n        break;\n\n      case 'astra_sites_set_site_data-site_colors':\n        step = 'astra_sites_set_site_data';\n        data.param = 'site-colors';\n        data.palette = paletteDetails;\n        data.security = LearnDashDesignWizard.ajax_set_data_nonce;\n        Cookies.remove('astra-site-color-scheme');\n        message = 'Apply site color options';\n        break;\n\n      case 'astra_sites_set_site_data-site_typography':\n        step = 'astra_sites_set_site_data';\n        data.param = 'site-typography';\n        data.typography = fontDetails;\n        data.security = LearnDashDesignWizard.ajax_set_data_nonce;\n        message = 'Apply site typography options';\n        break;\n    }\n\n    updateProgress({\n      currentStepN: currentStepN,\n      totalSteps: totalSteps,\n      message: message\n    });\n    jQuery.ajax({\n      url: url,\n      type: type,\n      data: _objectSpread({\n        action: step,\n        _ajax_nonce: LearnDashDesignWizard.ajax_nonce\n      }, data),\n      success: function success(response) {\n        if (currentStep === 'astra-wxr-import') {\n          if (response.length > 0) {\n            ajaxBuildAstra();\n          }\n        } else if ('astra-wxr-import' !== currentStep) {\n          if (response.success) {\n            var ajaxData = {};\n            var ajaxUrl = '',\n                ajaxType = 'POST',\n                storedDeletedPostIds;\n\n            switch (currentStep) {\n              case 'astra-sites-api-request':\n                Cookies.set('astra-site-wpforms-path', response.data['astra-site-wpforms-path']);\n                Cookies.set('astra-site-cartflows-path', response.data['astra-site-cartflows-path']);\n                Cookies.set('astra-site-wxr-path', response.data['astra-site-wxr-path']);\n                Cookies.set('astra-site-widgets-data', response.data['astra-site-widgets-data']);\n                break;\n\n              case 'astra-required-plugins':\n                Cookies.set('astra-site-required-plugins', response.data.required_plugins);\n                response.data.required_plugins.notinstalled.forEach(function (plugin) {\n                  wp.updates.queue.push({\n                    action: 'install-plugin',\n                    data: {\n                      slug: plugin.slug,\n                      init: plugin.init,\n                      name: plugin.name,\n                      clear_destination: true,\n                      success: function success() {\n                        activatePlugin(plugin);\n                      },\n                      error: function error() {}\n                    }\n                  });\n                }); // Required to set queue.\n\n                wp.updates.queueChecker();\n                response.data.required_plugins.inactive.forEach(function (plugin) {\n                  activatePlugin(plugin);\n                });\n                break;\n\n              case 'astra-sites-get-deleted-post-ids':\n                storedDeletedPostIds = response.data.splice(0, 100);\n                Cookies.set('astra-site-deleted-post-ids', storedDeletedPostIds);\n                break;\n\n              case 'astra-sites-import-prepare-xml':\n                ajaxUrl = response.data.url;\n                ajaxType = 'GET';\n                break;\n\n              case 'astra-sites-import-end':\n                Cookies.remove('ldDwLastBuildAstraStep');\n                ajaxBuildTemplate();\n                return;\n            }\n\n            ajaxBuildAstra(ajaxUrl, ajaxData, ajaxType);\n          } else {\n            // Add error handler.\n            if (Object.hasOwnProperty.call(response, 'data') && Object.hasOwnProperty.call(response.data, 'message')) {\n              message = response.data.message;\n            } else {\n              message = LearnDashDesignWizard.messages.dw_error_default;\n            }\n\n            message = LearnDashDesignWizard.messages.dw_error_prefix + ': ' + message;\n            updateProgress({\n              currentStepN: currentStepN - 1,\n              totalSteps: totalSteps,\n              message: message\n            });\n            var actionsTemplate = LearnDashDesignWizard.templates.actions_error;\n            jQuery('.design-wizard > .content > .text').replaceWith(actionsTemplate);\n            Cookies.remove('ldDwLastBuildAstraStep');\n          }\n        }\n\n        currentStepN = parseInt(currentStepN) + 1;\n        Cookies.set('ldDwCurrentStepN', currentStepN);\n      }\n    }).fail(function () {\n      Cookies.remove('ldDwLastBuildAstraStep');\n      Cookies.remove('ldDwCurrentStepN');\n    });\n\n    if (astraSiteResetPosts) {\n      // Step before get-deleted-post-ids\n      Cookies.set('ldDwLastBuildAstraStep', 'astra-sites-reset-terms-and-forms');\n    } else {\n      Cookies.set('ldDwLastBuildAstraStep', currentStep);\n    }\n  } else {\n    Cookies.remove('ldDwLastBuildAstraStep');\n  }\n}\n\nfunction ajaxBuildKadence() {\n  var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n  var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'POST';\n  var urlParams = new URLSearchParams(window.location.search);\n  var step = urlParams.get('step');\n\n  if (url.length < 1) {\n    url = LearnDashDesignWizard.ajaxurl;\n  }\n\n  var actions = ['kadence_import_get_template_data', 'kadence_check_plugin_data', 'kadence_remove_past_import_data', 'kadence_import_install_plugins', 'kadence_import_demo_data', 'kadence_import_customizer_data', 'kadence_after_import_data'];\n  var templateId = Cookies.get('ldDwThemeTemplateId'),\n      lastStep = Cookies.get('ldDwLastBuildKadenceStep'),\n      totalSteps = Cookies.get('ldDwTotalSteps');\n  var lastStepKey, currentStepKey, kadenceImportDemo;\n  var currentStepN = Cookies.get('ldDwCurrentStepN'),\n      message = '';\n  currentStepN = parseInt(currentStepN) + 1;\n  Cookies.set('ldDwCurrentStepN', currentStepN);\n\n  if (!lastStep) {\n    currentStepKey = 0;\n  } else {\n    lastStepKey = actions.indexOf(lastStep);\n    currentStepKey = lastStepKey + 1;\n  }\n\n  var currentStep = actions[currentStepKey];\n\n  if (currentStep) {\n    step = currentStep;\n    data.selected = templateId;\n    data.builder = 'blocks';\n\n    switch (currentStep) {\n      case 'kadence_import_get_template_data':\n        data.template_type = 'blocks';\n        message = 'Get template data';\n        break;\n\n      case 'check_plugin_data':\n        data.selected = '';\n        data.builder = 'blocks';\n        message = 'Check plugin data';\n        break;\n\n      case 'kadence_import_demo_data':\n        data.palette = Cookies.get('ldDwPalette');\n        data.font = Cookies.get('ldDwFont');\n        message = 'Import demo data';\n        break;\n\n      case 'kadence_import_customizer_data':\n        data.wp_customize = 'on';\n        delete data.selected;\n        delete data.builder;\n        message = 'Import customizer data';\n        break;\n    }\n\n    updateProgress({\n      currentStepN: currentStepN,\n      totalSteps: totalSteps,\n      message: message\n    });\n\n    if (currentStep) {\n      Cookies.set('ldDwLastBuildKadenceStep', currentStep);\n    }\n\n    jQuery.ajax({\n      url: url,\n      type: type,\n      data: _objectSpread({\n        action: step,\n        security: LearnDashDesignWizard.ajax_kadence_security_nonce\n      }, data),\n      success: function success(response) {\n        var ajaxUrl = '',\n            ajaxData = {},\n            ajaxType = 'POST';\n        var templateData;\n\n        switch (currentStep) {\n          case 'kadence_import_get_template_data':\n            templateData = JSON.parse(response);\n            Cookies.set('ldDwKadenceTemplateData', templateData);\n            break;\n\n          case 'kadence_import_demo_data':\n            kadenceImportDemo = response.status === 'newAJAX';\n\n            if (kadenceImportDemo) {\n              Cookies.set('ldDwLastBuildKadenceStep', 'kadence_import_install_plugins');\n            }\n\n            break;\n\n          case 'kadence_after_import_data':\n            resetKadenceCookies();\n            ajaxBuildTemplate();\n            return;\n        }\n\n        ajaxBuildKadence(ajaxUrl, ajaxData, ajaxType);\n      }\n    }).fail(function () {\n      resetKadenceCookies();\n    });\n  } else {\n    resetKadenceCookies();\n  }\n}\n\nfunction updateProgress(args) {\n  var percentage = args.currentStepN / args.totalSteps * 100;\n  percentage = percentage > 100 ? 100 : percentage;\n  percentage = percentage.toFixed(0);\n  jQuery('.progress .percentage .number').text(percentage + '%');\n  jQuery('.progress .bar progress').attr('value', percentage);\n\n  if (args.message !== '') {\n    jQuery('.progress .status .message').html(args.message);\n  }\n}\n/**\n * Helpers\n */\n\n\nfunction getFontDetails(theme, key) {\n  var details = {};\n\n  if (Object.prototype.hasOwnProperty.call(LearnDashDesignWizard.fonts[theme][key], 'details')) {\n    details = LearnDashDesignWizard.fonts[theme][key].details;\n  }\n\n  return details;\n}\n\nfunction getPaletteDetails(theme, key) {\n  var colorScheme = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n  var palettes;\n\n  if (colorScheme.length > 0) {\n    palettes = LearnDashDesignWizard.palettes[theme][colorScheme][key];\n  } else {\n    palettes = LearnDashDesignWizard.palettes[theme][key];\n  }\n\n  return palettes;\n}\n\nfunction redirectPage(url, step, template, nonce) {\n  var args = {\n    step: step + 1,\n    template: template,\n    nonce: nonce\n  };\n\n  if (!nonce) {\n    delete args.nonce;\n  }\n\n  var nextUrlParams = new URLSearchParams(args),\n      nextUrl = encodeURI(url + '&' + nextUrlParams.toString());\n  window.location.href = nextUrl;\n}\n\nfunction updatePreview(theme, type) {\n  var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n  var frame = document.getElementById('ld-site-preview');\n\n  if (!frame) {\n    return;\n  }\n\n  var astraParam, astraData, kadenceParam, kadenceData, colorScheme;\n  var requestData = {};\n\n  switch (type) {\n    case 'site-colors':\n      if (theme === 'astra') {\n        astraParam = 'colorPalette';\n        colorScheme = Cookies.get('astra-site-color-scheme');\n        colorScheme = colorScheme ? colorScheme : 'light';\n        astraData = getPaletteDetails('astra', key, colorScheme);\n      } else if (theme === 'kadence') {\n        kadenceParam = 'color';\n\n        if (key !== 'default') {\n          kadenceData = Cookies.get('ldDwPalette');\n        } else {\n          kadenceData = '';\n        }\n      }\n\n      break;\n\n    case 'site-typography':\n      if (theme === 'astra') {\n        astraParam = 'siteTypography';\n        astraData = getFontDetails('astra', key);\n        astraData = filterAstraFontDetails(key, astraData);\n      } else if (theme === 'kadence') {\n        kadenceParam = 'font';\n\n        if (key !== 'default') {\n          kadenceData = Cookies.get('ldDwFont');\n        } else {\n          kadenceData = '';\n        }\n      }\n\n      break;\n  }\n\n  if (theme === 'astra') {\n    if (astraParam && astraData) {\n      frame.contentWindow.postMessage({\n        call: 'starterTemplatePreviewDispatch',\n        value: {\n          param: astraParam,\n          data: astraData\n        }\n      }, '*');\n    }\n  } else if (theme === 'kadence') {\n    requestData[kadenceParam] = kadenceData;\n    frame.contentWindow.postMessage(requestData, '*');\n  }\n}\n\nfunction filterAstraFontDetails(key, data) {\n  var id = key; // ID\n\n  data.id = id; // Headings\n\n  var inheritArgs = ['font-family-h1', 'font-family-h2', 'font-family-h3', 'font-family-h4', 'font-family-h5', 'font-family-h6', 'font-weight-h1', 'font-weight-h2', 'font-weight-h3', 'font-weight-h4', 'font-weight-h5', 'font-weight-h6'];\n  var emptyArgs = ['line-height-h1', 'line-height-h2', 'line-height-h3', 'line-height-h4', 'line-height-h5', 'line-height-h6', 'text-transform-h1', 'text-transform-h2', 'text-transform-h3', 'text-transform-h4', 'text-transform-h5', 'text-transform-h6'];\n  inheritArgs.forEach(function (arg) {\n    data[arg] = 'inherit';\n  });\n  emptyArgs.forEach(function (arg) {\n    data[arg] = '';\n  });\n  return data;\n}\n\nfunction activatePlugin(plugin) {\n  jQuery.post(LearnDashDesignWizard.ajaxurl, {\n    action: 'astra-required-plugin-activate',\n    _ajax_nonce: LearnDashDesignWizard.ajax_nonce,\n    init: plugin.init\n  }, function () {});\n}\n\nfunction flushCookies() {\n  var end = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n  var cookies = ['ldDwCurrentStepN', 'ldDwTotalSteps', 'ldDwLastBuildAstraStep', 'ldDwLastBuildKadenceStep', 'astra-site-wpforms-path', 'astra-site-cartflows-path', 'astra-site-wxr-path', 'astra-site-widgets-data', 'astra-site-required-plugins'];\n\n  if (end) {\n    cookies.push.apply(cookies, ['astra-site-color-scheme', 'ldDwTemplateId', 'ldDwThemeTemplateId', 'ldDwFont', 'ldDwPalette']);\n  }\n\n  cookies.forEach(function (cookie) {\n    Cookies.remove(cookie);\n  });\n}\n\nfunction resetKadenceCookies() {\n  var cookies = ['ldDwLastBuildKadenceStep', 'ldDwPalette', 'ldDwFont'];\n  cookies.forEach(function (cookie) {\n    Cookies.remove(cookie);\n  });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvanMvc3JjL2Rlc2lnbi13aXphcmQuanMuanMiLCJuYW1lcyI6WyJqUXVlcnkiLCJ3aW5kb3ciLCJvbiIsImluaXRQYWdlTG9hZCIsImRvY3VtZW50IiwiZSIsInByZXZlbnREZWZhdWx0IiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsIiR0ZW1wbGF0ZXMiLCJjbG9zZXN0IiwidGVtcGxhdGVJZCIsImRhdGEiLCJ0aGVtZVRlbXBsYXRlSWQiLCJmaW5kIiwiQ29va2llcyIsInNldCIsIiRwcmV2aWV3IiwiJGlmcmFtZVdyYXBwZXIiLCIkdGVtcGxhdGUiLCJ0aGVtZSIsImluY2x1ZGVzIiwicHJldmlld1VybCIsImxlbmd0aCIsImF0dHIiLCJzaG93IiwiaGlkZSIsInNldFRpbWVvdXQiLCJ1cGRhdGVQcmV2aWV3IiwiJHdyYXBwZXIiLCJyZW1vdmVBdHRyIiwiJGZvbnRzIiwiaWQiLCJ0ZW1wbGF0ZSIsImdldCIsInJlbW92ZSIsIiRwYWxldHRlcyIsInVybCIsImxvY2F0aW9uIiwiaHJlZiIsInVybFBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsInNlYXJjaCIsIm5vbmNlIiwiYWxlcnQiLCJzdGVwIiwicGFyc2VJbnQiLCJyZWRpcmVjdFBhZ2UiLCJMZWFybkRhc2hEZXNpZ25XaXphcmQiLCJhamF4X2luaXRfbm9uY2UiLCJkaWFsb2ciLCJkaWFsb2dDbGFzcyIsIm1vZGFsIiwidGl0bGUiLCJ3aWR0aCIsImJ1dHRvbnMiLCJ0ZXh0IiwiY2xpY2siLCJsZWFybmRhc2hfc2V0dXBfdXJsIiwiaGlzdG9yeSIsImJhY2siLCJzaXRlX3VybCIsImZvbnQiLCJwYWxldHRlIiwiYWpheEJ1aWxkVGVtcGxhdGUiLCJpbml0IiwiY3VycmVudFN0ZXBOIiwidG90YWxTdGVwcyIsImZsdXNoQ29va2llcyIsInBvc3QiLCJhamF4dXJsIiwiYWN0aW9uIiwicmVzcG9uc2UiLCJzdWNjZXNzIiwiY29tcGxldGUiLCJhamF4QnVpbGRBc3RyYSIsImFqYXhCdWlsZEthZGVuY2UiLCJhY3Rpb25zVGVtcGxhdGUiLCJ0ZW1wbGF0ZXMiLCJhY3Rpb25zX3N1Y2Nlc3MiLCJyZXBsYWNlV2l0aCIsInVwZGF0ZVByb2dyZXNzIiwibWVzc2FnZSIsInR5cGUiLCJmb250RGV0YWlscyIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRGb250RGV0YWlscyIsImNvbG9yU2NoZW1lIiwicGFsZXR0ZURldGFpbHMiLCJnZXRQYWxldHRlRGV0YWlscyIsImFjdGlvbnMiLCJsYXN0U3RlcCIsImxhc3RTdGVwS2V5IiwiY3VycmVudFN0ZXBLZXkiLCJpbmRleE9mIiwiY3VycmVudFN0ZXAiLCJwb3N0SWRzIiwiZGVsZXRlZFBvc3RJZHMiLCJhc3RyYVNpdGVSZXNldFBvc3RzIiwic3BsaXQiLCJzcGxpY2UiLCJpZHMiLCJPYmplY3QiLCJhc3NpZ24iLCJ3cGZvcm1zX3VybCIsImNhcnRmbG93c191cmwiLCJ3aWRnZXRzX2RhdGEiLCJ3eHJfdXJsIiwicGFyYW0iLCJzZWN1cml0eSIsImFqYXhfc2V0X2RhdGFfbm9uY2UiLCJ0eXBvZ3JhcGh5IiwiYWpheCIsIl9hamF4X25vbmNlIiwiYWpheF9ub25jZSIsImFqYXhEYXRhIiwiYWpheFVybCIsImFqYXhUeXBlIiwic3RvcmVkRGVsZXRlZFBvc3RJZHMiLCJyZXF1aXJlZF9wbHVnaW5zIiwibm90aW5zdGFsbGVkIiwiZm9yRWFjaCIsInBsdWdpbiIsIndwIiwidXBkYXRlcyIsInF1ZXVlIiwicHVzaCIsInNsdWciLCJuYW1lIiwiY2xlYXJfZGVzdGluYXRpb24iLCJhY3RpdmF0ZVBsdWdpbiIsImVycm9yIiwicXVldWVDaGVja2VyIiwiaW5hY3RpdmUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJtZXNzYWdlcyIsImR3X2Vycm9yX2RlZmF1bHQiLCJkd19lcnJvcl9wcmVmaXgiLCJhY3Rpb25zX2Vycm9yIiwiZmFpbCIsImthZGVuY2VJbXBvcnREZW1vIiwic2VsZWN0ZWQiLCJidWlsZGVyIiwidGVtcGxhdGVfdHlwZSIsIndwX2N1c3RvbWl6ZSIsImFqYXhfa2FkZW5jZV9zZWN1cml0eV9ub25jZSIsInRlbXBsYXRlRGF0YSIsInBhcnNlIiwic3RhdHVzIiwicmVzZXRLYWRlbmNlQ29va2llcyIsImFyZ3MiLCJwZXJjZW50YWdlIiwidG9GaXhlZCIsImh0bWwiLCJrZXkiLCJkZXRhaWxzIiwicHJvdG90eXBlIiwiZm9udHMiLCJwYWxldHRlcyIsIm5leHRVcmxQYXJhbXMiLCJuZXh0VXJsIiwiZW5jb2RlVVJJIiwidG9TdHJpbmciLCJmcmFtZSIsImdldEVsZW1lbnRCeUlkIiwiYXN0cmFQYXJhbSIsImFzdHJhRGF0YSIsImthZGVuY2VQYXJhbSIsImthZGVuY2VEYXRhIiwicmVxdWVzdERhdGEiLCJmaWx0ZXJBc3RyYUZvbnREZXRhaWxzIiwiY29udGVudFdpbmRvdyIsInBvc3RNZXNzYWdlIiwidmFsdWUiLCJpbmhlcml0QXJncyIsImVtcHR5QXJncyIsImFyZyIsImVuZCIsImNvb2tpZXMiLCJjb29raWUiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2VicGFjazovL2xlYXJuZGFzaC8uL2Fzc2V0cy9qcy9zcmMvZGVzaWduLXdpemFyZC5qcz82MTZhIl0sInNvdXJjZXNDb250ZW50IjpbImpRdWVyeSh3aW5kb3cpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuXHRpbml0UGFnZUxvYWQoKTtcbn0pO1xuXG5qUXVlcnkoZnVuY3Rpb24gKCkge1xuXHQvKipcblx0ICogVGVtcGxhdGVcblx0ICovXG5cblx0alF1ZXJ5KGRvY3VtZW50KS5vbihcblx0XHQnbW91c2VvdmVyJyxcblx0XHQnLnRlbXBsYXRlcyAudGVtcGxhdGUgZmlndXJlJyxcblx0XHRmdW5jdGlvbiAoZSkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0alF1ZXJ5KHRoaXMpLmFkZENsYXNzKCdob3ZlcicpO1xuXHRcdH1cblx0KTtcblxuXHRqUXVlcnkoZG9jdW1lbnQpLm9uKFxuXHRcdCdtb3VzZWxlYXZlJyxcblx0XHQnLnRlbXBsYXRlcyAudGVtcGxhdGUgZmlndXJlJyxcblx0XHRmdW5jdGlvbiAoZSkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0alF1ZXJ5KHRoaXMpLnJlbW92ZUNsYXNzKCdob3ZlcicpO1xuXHRcdH1cblx0KTtcblxuXHRqUXVlcnkoZG9jdW1lbnQpLm9uKFxuXHRcdCdjbGljaycsXG5cdFx0Jy50ZW1wbGF0ZXMgLnRlbXBsYXRlIGZpZ3VyZSAuYWN0aW9ucyAuc2VsZWN0Jyxcblx0XHRmdW5jdGlvbiAoZSkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHRjb25zdCAkdGVtcGxhdGVzID0galF1ZXJ5KHRoaXMpLmNsb3Nlc3QoJy50ZW1wbGF0ZXMnKSxcblx0XHRcdFx0dGVtcGxhdGVJZCA9IGpRdWVyeSh0aGlzKS5jbG9zZXN0KCcudGVtcGxhdGUnKS5kYXRhKCdpZCcpLFxuXHRcdFx0XHR0aGVtZVRlbXBsYXRlSWQgPSBqUXVlcnkodGhpcylcblx0XHRcdFx0XHQuY2xvc2VzdCgnLnRlbXBsYXRlJylcblx0XHRcdFx0XHQuZGF0YSgndGhlbWVfdGVtcGxhdGVfaWQnKTtcblxuXHRcdFx0JHRlbXBsYXRlcy5maW5kKCcudGVtcGxhdGUnKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcblx0XHRcdGpRdWVyeSh0aGlzKS5jbG9zZXN0KCcudGVtcGxhdGUnKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcblxuXHRcdFx0Q29va2llcy5zZXQoJ2xkRHdUZW1wbGF0ZUlkJywgdGVtcGxhdGVJZCk7XG5cdFx0XHRDb29raWVzLnNldCgnbGREd1RoZW1lVGVtcGxhdGVJZCcsIHRoZW1lVGVtcGxhdGVJZCk7XG5cblx0XHRcdC8vIFJlc2V0IHRlbXBsYXRlIGZvbnQgYW5kIHBhbGV0dGUgc2VsZWN0aW9uLlxuXHRcdFx0Q29va2llcy5zZXQoJ2xkRHdQYWxldHRlJywgJ2RlZmF1bHQnKTtcblx0XHRcdENvb2tpZXMuc2V0KCdsZER3Rm9udCcsICdkZWZhdWx0Jyk7XG5cdFx0fVxuXHQpO1xuXG5cdC8qKlxuXHQgKiBQcmV2aWV3XG5cdCAqL1xuXG5cdGpRdWVyeShkb2N1bWVudCkub24oXG5cdFx0J2NsaWNrJyxcblx0XHQnLnRlbXBsYXRlcyAudGVtcGxhdGUgZmlndXJlIC5hY3Rpb25zIC5wcmV2aWV3Jyxcblx0XHRmdW5jdGlvbiAoZSkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHRjb25zdCAkcHJldmlldyA9IGpRdWVyeSgnLnByZXZpZXctd3JhcHBlcicpLFxuXHRcdFx0XHQkaWZyYW1lV3JhcHBlciA9ICRwcmV2aWV3LmZpbmQoJy5pZnJhbWUtd3JhcHBlcicpLFxuXHRcdFx0XHQkdGVtcGxhdGUgPSBqUXVlcnkodGhpcykuY2xvc2VzdCgnLnRlbXBsYXRlJyksXG5cdFx0XHRcdHRlbXBsYXRlSWQgPSAkdGVtcGxhdGUuZGF0YSgnaWQnKSxcblx0XHRcdFx0dGhlbWUgPSB0ZW1wbGF0ZUlkLmluY2x1ZGVzKCdrYWRlbmNlXycpID8gJ2thZGVuY2UnIDogJ2FzdHJhJyxcblx0XHRcdFx0cHJldmlld1VybCA9ICR0ZW1wbGF0ZS5kYXRhKCdwcmV2aWV3X3VybCcpO1xuXG5cdFx0XHRpZiAocHJldmlld1VybCAmJiBwcmV2aWV3VXJsLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0JHByZXZpZXcuZmluZCgnaWZyYW1lJykuYXR0cignc3JjJywgcHJldmlld1VybCk7XG5cdFx0XHRcdCRwcmV2aWV3LnNob3coKTtcblx0XHRcdFx0JGlmcmFtZVdyYXBwZXIuaGlkZSgpO1xuXG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHVwZGF0ZVByZXZpZXcodGhlbWUsICdzaXRlLWNvbG9ycycsICdkZWZhdWx0Jyk7XG5cdFx0XHRcdFx0dXBkYXRlUHJldmlldyh0aGVtZSwgJ3NpdGUtdHlwb2dyYXBoeScsICdkZWZhdWx0Jyk7XG5cdFx0XHRcdFx0JGlmcmFtZVdyYXBwZXIuc2hvdygpO1xuXHRcdFx0XHR9LCA1MDApO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcblxuXHRqUXVlcnkoZG9jdW1lbnQpLm9uKCdjbGljaycsICcucHJldmlldy13cmFwcGVyIC5jbG9zZScsIGZ1bmN0aW9uIChlKSB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0Y29uc3QgJHdyYXBwZXIgPSBqUXVlcnkodGhpcykuY2xvc2VzdCgnLnByZXZpZXctd3JhcHBlcicpO1xuXG5cdFx0JHdyYXBwZXIuZmluZCgnLnByZXZpZXcgaWZyYW1lJykucmVtb3ZlQXR0cignc3JjJyk7XG5cdFx0JHdyYXBwZXIuaGlkZSgpO1xuXHR9KTtcblxuXHQvKipcblx0ICogRm9udFxuXHQgKi9cblxuXHRqUXVlcnkoZG9jdW1lbnQpLm9uKCdjbGljaycsICcuZGVzaWduLXdpemFyZCAuZm9udHMgLmZvbnQnLCBmdW5jdGlvbiAoZSkge1xuXHRcdGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdGNvbnN0ICRmb250cyA9IGpRdWVyeSh0aGlzKS5jbG9zZXN0KCcuZm9udHMnKSxcblx0XHRcdGlkID0galF1ZXJ5KHRoaXMpLmRhdGEoJ2lkJyksXG5cdFx0XHR0ZW1wbGF0ZSA9IENvb2tpZXMuZ2V0KCdsZER3VGVtcGxhdGVJZCcpLFxuXHRcdFx0dGhlbWUgPSB0ZW1wbGF0ZS5pbmNsdWRlcygna2FkZW5jZV8nKSA/ICdrYWRlbmNlJyA6ICdhc3RyYSc7XG5cblx0XHQkZm9udHMuZmluZCgnLmZvbnQnKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcblx0XHRqUXVlcnkodGhpcykuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG5cblx0XHRDb29raWVzLnNldCgnbGREd0ZvbnQnLCBpZCk7XG5cblx0XHR1cGRhdGVQcmV2aWV3KHRoZW1lLCAnc2l0ZS10eXBvZ3JhcGh5JywgaWQpO1xuXHR9KTtcblxuXHRqUXVlcnkoZG9jdW1lbnQpLm9uKFxuXHRcdCdjbGljaycsXG5cdFx0Jy5kZXNpZ24td2l6YXJkIC5yZXNldC1mb250LWJ1dHRvbicsXG5cdFx0ZnVuY3Rpb24gKGUpIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0Y29uc3QgJGZvbnRzID0galF1ZXJ5KHRoaXMpLmNsb3Nlc3QoJy5oZWFkZXInKS5maW5kKCcuZm9udHMnKSxcblx0XHRcdFx0dGVtcGxhdGUgPSBDb29raWVzLmdldCgnbGREd1RlbXBsYXRlSWQnKSxcblx0XHRcdFx0dGhlbWUgPSB0ZW1wbGF0ZS5pbmNsdWRlcygna2FkZW5jZV8nKSA/ICdrYWRlbmNlJyA6ICdhc3RyYSc7XG5cblx0XHRcdCRmb250cy5maW5kKCcuZm9udCcpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuXG5cdFx0XHRDb29raWVzLnJlbW92ZSgnbGREd0ZvbnQnKTtcblxuXHRcdFx0dXBkYXRlUHJldmlldyh0aGVtZSwgJ3NpdGUtdHlwb2dyYXBoeScsICdkZWZhdWx0Jyk7XG5cdFx0fVxuXHQpO1xuXG5cdC8qKlxuXHQgKiBQYWxldHRlXG5cdCAqL1xuXG5cdGpRdWVyeShkb2N1bWVudCkub24oXG5cdFx0J2NsaWNrJyxcblx0XHQnLmRlc2lnbi13aXphcmQgLnBhbGV0dGVzIC5wYWxldHRlJyxcblx0XHRmdW5jdGlvbiAoZSkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHRjb25zdCAkcGFsZXR0ZXMgPSBqUXVlcnkodGhpcykuY2xvc2VzdCgnLnBhbGV0dGVzJyksXG5cdFx0XHRcdGlkID0galF1ZXJ5KHRoaXMpLmRhdGEoJ2lkJyksXG5cdFx0XHRcdHRlbXBsYXRlID0gQ29va2llcy5nZXQoJ2xkRHdUZW1wbGF0ZUlkJyksXG5cdFx0XHRcdHRoZW1lID0gdGVtcGxhdGUuaW5jbHVkZXMoJ2thZGVuY2VfJykgPyAna2FkZW5jZScgOiAnYXN0cmEnO1xuXG5cdFx0XHQkcGFsZXR0ZXMuZmluZCgnLnBhbGV0dGUnKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcblx0XHRcdGpRdWVyeSh0aGlzKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcblxuXHRcdFx0Q29va2llcy5zZXQoJ2xkRHdQYWxldHRlJywgaWQpO1xuXG5cdFx0XHR1cGRhdGVQcmV2aWV3KHRoZW1lLCAnc2l0ZS1jb2xvcnMnLCBpZCk7XG5cdFx0fVxuXHQpO1xuXG5cdGpRdWVyeShkb2N1bWVudCkub24oXG5cdFx0J2NsaWNrJyxcblx0XHQnLmRlc2lnbi13aXphcmQgLnJlc2V0LXBhbGV0dGUtYnV0dG9uJyxcblx0XHRmdW5jdGlvbiAoZSkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHRjb25zdCAkcGFsZXR0ZXMgPSBqUXVlcnkodGhpcykuY2xvc2VzdCgnLmhlYWRlcicpLmZpbmQoJy5wYWxldHRlcycpLFxuXHRcdFx0XHR0ZW1wbGF0ZSA9IENvb2tpZXMuZ2V0KCdsZER3VGVtcGxhdGVJZCcpLFxuXHRcdFx0XHR0aGVtZSA9IHRlbXBsYXRlLmluY2x1ZGVzKCdrYWRlbmNlXycpID8gJ2thZGVuY2UnIDogJ2FzdHJhJztcblxuXHRcdFx0JHBhbGV0dGVzLmZpbmQoJy5wYWxldHRlJykucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG5cblx0XHRcdENvb2tpZXMucmVtb3ZlKCdsZER3UGFsZXR0ZScpO1xuXG5cdFx0XHR1cGRhdGVQcmV2aWV3KHRoZW1lLCAnc2l0ZS1jb2xvcnMnLCAnZGVmYXVsdCcpO1xuXHRcdH1cblx0KTtcblxuXHQvKipcblx0ICogUGFnaW5hdGlvblxuXHQgKi9cblxuXHRqUXVlcnkoZG9jdW1lbnQpLm9uKCdjbGljaycsICcubmV4dC1idXR0b24nLCBmdW5jdGlvbiAoZSkge1xuXHRcdGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdGNvbnN0IHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuXHRcdFx0dXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKSxcblx0XHRcdHRlbXBsYXRlID0gQ29va2llcy5nZXQoJ2xkRHdUZW1wbGF0ZUlkJyk7XG5cblx0XHRsZXQgbm9uY2UgPSBmYWxzZTtcblxuXHRcdGlmICghdGVtcGxhdGUgfHwgdGVtcGxhdGUgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRhbGVydCgnUGxlYXNlIHNlbGVjdCBhIHRlbXBsYXRlIGZpcnN0Jyk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0bGV0IHN0ZXAgPSB1cmxQYXJhbXMuZ2V0KCdzdGVwJyk7XG5cdFx0c3RlcCA9IHN0ZXAgPyBwYXJzZUludChzdGVwKSA6IDE7XG5cblx0XHRpZiAoc3RlcCA9PT0gMSkge1xuXHRcdFx0Ly8gR2V0IEFzdHJhIHRoZW1lIGRhdGFcblx0XHRcdGlmICh0ZW1wbGF0ZS5pbmNsdWRlcygnYXN0cmFfJykpIHtcblx0XHRcdFx0Q29va2llcy5zZXQoJ2FzdHJhLXNpdGUtY29sb3Itc2NoZW1lJywgJ2xpZ2h0Jyk7XG5cdFx0XHR9XG5cblx0XHRcdHJlZGlyZWN0UGFnZSh1cmwsIHN0ZXAsIHRlbXBsYXRlLCBub25jZSk7XG5cdFx0fSBlbHNlIGlmIChzdGVwID09PSA0KSB7XG5cdFx0XHRub25jZSA9IExlYXJuRGFzaERlc2lnbldpemFyZC5hamF4X2luaXRfbm9uY2U7XG5cdFx0XHRqUXVlcnkoJyNsZF9kd19jb25maXJtJykuZGlhbG9nKHtcblx0XHRcdFx0ZGlhbG9nQ2xhc3M6ICd3cC1kaWFsb2cnLFxuXHRcdFx0XHRtb2RhbDogdHJ1ZSxcblx0XHRcdFx0dGl0bGU6ICdSZWFkeSB0byBJbXBvcnQ/Jyxcblx0XHRcdFx0d2lkdGg6IDQwMCxcblx0XHRcdFx0YnV0dG9uczogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHRleHQ6ICdJIHVuZGVyc3RhbmQsIGNvbnRpbnVlJyxcblx0XHRcdFx0XHRcdGNsaWNrKCkge1xuXHRcdFx0XHRcdFx0XHRyZWRpcmVjdFBhZ2UodXJsLCBzdGVwLCB0ZW1wbGF0ZSwgbm9uY2UpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHRleHQ6ICdFeGl0IFNldHVwJyxcblx0XHRcdFx0XHRcdGNsaWNrKCkge1xuXHRcdFx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9XG5cdFx0XHRcdFx0XHRcdFx0TGVhcm5EYXNoRGVzaWduV2l6YXJkLmxlYXJuZGFzaF9zZXR1cF91cmw7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdF0sXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVkaXJlY3RQYWdlKHVybCwgc3RlcCwgdGVtcGxhdGUsIG5vbmNlKTtcblx0XHR9XG5cdH0pO1xuXG5cdGpRdWVyeShkb2N1bWVudCkub24oJ2NsaWNrJywgJy5iYWNrJywgZnVuY3Rpb24gKGUpIHtcblx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRoaXN0b3J5LmJhY2soKTtcblx0fSk7XG5cblx0alF1ZXJ5KGRvY3VtZW50KS5vbignY2xpY2snLCAnLmV4aXQnLCBmdW5jdGlvbiAoZSkge1xuXHRcdGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gTGVhcm5EYXNoRGVzaWduV2l6YXJkLmxlYXJuZGFzaF9zZXR1cF91cmw7XG5cdH0pO1xuXG5cdGpRdWVyeShkb2N1bWVudCkub24oJ2NsaWNrJywgJy52aXNpdC1zaXRlJywgZnVuY3Rpb24gKGUpIHtcblx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRqUXVlcnkoXG5cdFx0XHQnPGEgaHJlZj1cIicgK1xuXHRcdFx0XHRMZWFybkRhc2hEZXNpZ25XaXphcmQuc2l0ZV91cmwgK1xuXHRcdFx0XHQnXCIgdGFyZ2V0PVwiX2JsYW5rXCJWaXNpdCBTaXRlPC9hPidcblx0XHQpWzBdLmNsaWNrKCk7XG5cdH0pO1xufSk7XG5cbi8qKlxuICogQnVpbGQgdGVtcGxhdGVcbiAqL1xuXG5mdW5jdGlvbiBpbml0UGFnZUxvYWQoKSB7XG5cdGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCksXG5cdFx0dGVtcGxhdGUgPSB1cmxQYXJhbXMuZ2V0KCd0ZW1wbGF0ZScpLFxuXHRcdG5vbmNlID0gdXJsUGFyYW1zLmdldCgnbm9uY2UnKTtcblxuXHRsZXQgc3RlcCA9IHVybFBhcmFtcy5nZXQoJ3N0ZXAnKSxcblx0XHR0aGVtZSA9ICcnO1xuXG5cdHN0ZXAgPSBzdGVwID8gcGFyc2VJbnQoc3RlcCkgOiAxO1xuXG5cdGlmICh0ZW1wbGF0ZSkge1xuXHRcdHRoZW1lID0gdGVtcGxhdGUuaW5jbHVkZXMoJ2thZGVuY2VfJykgPyAna2FkZW5jZScgOiAnYXN0cmEnO1xuXHR9XG5cblx0aWYgKHN0ZXAgPT09IDEpIHtcblx0XHRDb29raWVzLnJlbW92ZSgnbGREd1RlbXBsYXRlSWQnKTtcblx0fSBlbHNlIGlmIChzdGVwID09PSAyIHx8IHN0ZXAgPT09IDMgfHwgc3RlcCA9PT0gNCkge1xuXHRcdGNvbnN0IGZvbnQgPSBDb29raWVzLmdldCgnbGREd0ZvbnQnKSxcblx0XHRcdHBhbGV0dGUgPSBDb29raWVzLmdldCgnbGREd1BhbGV0dGUnKTtcblxuXHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0dXBkYXRlUHJldmlldyh0aGVtZSwgJ3NpdGUtY29sb3JzJywgcGFsZXR0ZSk7XG5cdFx0XHR1cGRhdGVQcmV2aWV3KHRoZW1lLCAnc2l0ZS10eXBvZ3JhcGh5JywgZm9udCk7XG5cblx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRqUXVlcnkoJyNsZC1zaXRlLXByZXZpZXcnKS5zaG93KCk7XG5cdFx0XHR9LCAxMDAwKTtcblx0XHR9LCA1MDApO1xuXHR9IGVsc2UgaWYgKHN0ZXAgPT09IDUgJiYgdGVtcGxhdGUubGVuZ3RoID4gMCAmJiBub25jZS5sZW5ndGggPiAwKSB7XG5cdFx0Q29va2llcy5yZW1vdmUoJ2xkRHdMYXN0QnVpbGRBc3RyYVN0ZXAnKTtcblx0XHRDb29raWVzLnJlbW92ZSgnbGREd0xhc3RCdWlsZEthZGVuY2VTdGVwJyk7XG5cblx0XHRhamF4QnVpbGRUZW1wbGF0ZSh0cnVlKTtcblx0fVxufVxuXG5mdW5jdGlvbiBhamF4QnVpbGRUZW1wbGF0ZShpbml0ID0gZmFsc2UpIHtcblx0Y29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKSxcblx0XHR0ZW1wbGF0ZSA9IHVybFBhcmFtcy5nZXQoJ3RlbXBsYXRlJyksXG5cdFx0bm9uY2UgPSB1cmxQYXJhbXMuZ2V0KCdub25jZScpO1xuXG5cdGxldCBjdXJyZW50U3RlcE4gPSAwLFxuXHRcdHRvdGFsU3RlcHMgPSAwO1xuXG5cdGlmIChpbml0KSB7XG5cdFx0Y3VycmVudFN0ZXBOID0gMTtcblx0XHQvLyBSZW1vdmUgd2l6YXJkIGNvb2tpZXMgc2V0IGJ5IHRoZSBwcmV2aW91cyB3aXphcmQgcHJvY2Vzcy5cblx0XHRmbHVzaENvb2tpZXMoKTtcblxuXHRcdHRvdGFsU3RlcHMgPSA2O1xuXG5cdFx0aWYgKHRlbXBsYXRlLmluY2x1ZGVzKCdhc3RyYScpKSB7XG5cdFx0XHR0b3RhbFN0ZXBzID0gcGFyc2VJbnQodG90YWxTdGVwcykgKyAzNTtcblx0XHR9IGVsc2UgaWYgKHRlbXBsYXRlLmluY2x1ZGVzKCdrYWRlbmNlJykpIHtcblx0XHRcdHRvdGFsU3RlcHMgPSBwYXJzZUludCh0b3RhbFN0ZXBzKSArIDk7XG5cdFx0fVxuXG5cdFx0Q29va2llcy5zZXQoJ2xkRHdUb3RhbFN0ZXBzJywgdG90YWxTdGVwcyk7XG5cdH0gZWxzZSB7XG5cdFx0Y3VycmVudFN0ZXBOID0gQ29va2llcy5nZXQoJ2xkRHdDdXJyZW50U3RlcE4nKTtcblx0XHRjdXJyZW50U3RlcE4gPSBwYXJzZUludChjdXJyZW50U3RlcE4pICsgMTtcblxuXHRcdHRvdGFsU3RlcHMgPSBDb29raWVzLmdldCgnbGREd1RvdGFsU3RlcHMnKTtcblx0fVxuXG5cdENvb2tpZXMuc2V0KCdsZER3Q3VycmVudFN0ZXBOJywgY3VycmVudFN0ZXBOKTtcblxuXHRqUXVlcnkucG9zdChcblx0XHRMZWFybkRhc2hEZXNpZ25XaXphcmQuYWpheHVybCxcblx0XHR7XG5cdFx0XHRhY3Rpb246ICdsZF9kd19idWlsZF90ZW1wbGF0ZScsXG5cdFx0XHRub25jZSxcblx0XHRcdHRlbXBsYXRlLFxuXHRcdFx0aW5pdCxcblx0XHR9LFxuXHRcdGZ1bmN0aW9uIChyZXNwb25zZSkge1xuXHRcdFx0aWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcblx0XHRcdFx0aWYgKCFyZXNwb25zZS5kYXRhLmNvbXBsZXRlKSB7XG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlLmRhdGEuc3RlcCAhPT0gJ2J1aWxkX3RlbXBsYXRlJykge1xuXHRcdFx0XHRcdFx0YWpheEJ1aWxkVGVtcGxhdGUoKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHJlc3BvbnNlLmRhdGEuc3RlcCA9PT0gJ2J1aWxkX3RlbXBsYXRlJykge1xuXHRcdFx0XHRcdFx0aWYgKHJlc3BvbnNlLmRhdGEudGhlbWUgPT09ICdhc3RyYScpIHtcblx0XHRcdFx0XHRcdFx0YWpheEJ1aWxkQXN0cmEoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAocmVzcG9uc2UuZGF0YS50aGVtZSA9PT0gJ2thZGVuY2UnKSB7XG5cdFx0XHRcdFx0XHRcdGFqYXhCdWlsZEthZGVuY2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y3VycmVudFN0ZXBOID0gMTtcblx0XHRcdFx0XHR0b3RhbFN0ZXBzID0gMTtcblxuXHRcdFx0XHRcdGZsdXNoQ29va2llcyh0cnVlKTtcblxuXHRcdFx0XHRcdC8vIEFkZCBwcm9jZXNzIGNvbXBsZXRlIGhhbmRsZXIuXG5cdFx0XHRcdFx0Y29uc3QgYWN0aW9uc1RlbXBsYXRlID1cblx0XHRcdFx0XHRcdExlYXJuRGFzaERlc2lnbldpemFyZC50ZW1wbGF0ZXMuYWN0aW9uc19zdWNjZXNzO1xuXG5cdFx0XHRcdFx0alF1ZXJ5KCcuZGVzaWduLXdpemFyZCA+IC5jb250ZW50ID4gLnRleHQnKS5yZXBsYWNlV2l0aChcblx0XHRcdFx0XHRcdGFjdGlvbnNUZW1wbGF0ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR1cGRhdGVQcm9ncmVzcyh7XG5cdFx0XHRcdFx0Y3VycmVudFN0ZXBOLFxuXHRcdFx0XHRcdHRvdGFsU3RlcHMsXG5cdFx0XHRcdFx0bWVzc2FnZTogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59XG5cbmZ1bmN0aW9uIGFqYXhCdWlsZEFzdHJhKHVybCA9ICcnLCBkYXRhID0ge30sIHR5cGUgPSAnUE9TVCcpIHtcblx0Y29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKSxcblx0XHRmb250ID0gQ29va2llcy5nZXQoJ2xkRHdGb250JyksXG5cdFx0cGFsZXR0ZSA9IENvb2tpZXMuZ2V0KCdsZER3UGFsZXR0ZScpLFxuXHRcdGZvbnREZXRhaWxzID0gSlNPTi5zdHJpbmdpZnkoZ2V0Rm9udERldGFpbHMoJ2FzdHJhJywgZm9udCkpLFxuXHRcdGNvbG9yU2NoZW1lID0gQ29va2llcy5nZXQoJ2FzdHJhLXNpdGUtY29sb3Itc2NoZW1lJyk7XG5cblx0bGV0IHBhbGV0dGVEZXRhaWxzLFxuXHRcdHN0ZXAgPSB1cmxQYXJhbXMuZ2V0KCdzdGVwJyk7XG5cblx0aWYgKGNvbG9yU2NoZW1lKSB7XG5cdFx0cGFsZXR0ZURldGFpbHMgPSBKU09OLnN0cmluZ2lmeShcblx0XHRcdGdldFBhbGV0dGVEZXRhaWxzKCdhc3RyYScsIHBhbGV0dGUsIGNvbG9yU2NoZW1lKVxuXHRcdCk7XG5cdH1cblxuXHRpZiAodXJsLmxlbmd0aCA8IDEpIHtcblx0XHR1cmwgPSBMZWFybkRhc2hEZXNpZ25XaXphcmQuYWpheHVybDtcblx0fVxuXG5cdGNvbnN0IGFjdGlvbnMgPSBbXG5cdFx0J2FzdHJhLXNpdGVzLWFwaS1yZXF1ZXN0Jyxcblx0XHQnYXN0cmEtcmVxdWlyZWQtcGx1Z2lucycsXG5cdFx0J2FzdHJhLXNpdGVzLWZpbGVzeXN0ZW0tcGVybWlzc2lvbicsXG5cdFx0J2FzdHJhLXNpdGVzLXNldC1zdGFydC1mbGFnJyxcblx0XHQnYXN0cmEtc2l0ZXMtcmVzZXQtY3VzdG9taXplci1kYXRhJyxcblx0XHQnYXN0cmEtc2l0ZXMtcmVzZXQtc2l0ZS1vcHRpb25zJyxcblx0XHQnYXN0cmEtc2l0ZXMtcmVzZXQtd2lkZ2V0cy1kYXRhJyxcblx0XHQnYXN0cmEtc2l0ZXMtcmVzZXQtdGVybXMtYW5kLWZvcm1zJyxcblx0XHQnYXN0cmEtc2l0ZXMtZ2V0LWRlbGV0ZWQtcG9zdC1pZHMnLFxuXHRcdCdhc3RyYS1zaXRlcy1yZXNldC1wb3N0cycsIC8vIDEwIHBvc3RzIHBlciBiYXRjaFxuXHRcdCdhc3RyYS1zaXRlcy1pbXBvcnQtd3Bmb3JtcycsXG5cdFx0J2FzdHJhLXNpdGVzLWltcG9ydC1jYXJ0Zmxvd3MnLFxuXHRcdCdhc3RyYS1zaXRlcy1pbXBvcnQtY3VzdG9taXplci1zZXR0aW5ncycsXG5cdFx0J2FzdHJhLXNpdGVzLWltcG9ydC1wcmVwYXJlLXhtbCcsXG5cdFx0J2FzdHJhLXd4ci1pbXBvcnQnLFxuXHRcdCdhc3RyYS1zaXRlcy1pbXBvcnQtb3B0aW9ucycsXG5cdFx0J2FzdHJhLXNpdGVzLWltcG9ydC13aWRnZXRzJyxcblx0XHQnYXN0cmFfc2l0ZXNfc2V0X3NpdGVfZGF0YS1zaXRlX2NvbG9ycycsIC8vIHBhcmFtOiBzaXRlLWNvbG9yc1xuXHRcdCdhc3RyYV9zaXRlc19zZXRfc2l0ZV9kYXRhLXNpdGVfdHlwb2dyYXBoeScsIC8vIHBhcmFtOiBzaXRlLXR5cG9ncmFwaHlcblx0XHQnYXN0cmEtc2l0ZXMtaW1wb3J0LWVuZCcsXG5cdF07XG5cblx0Y29uc3QgdGVtcGxhdGVJZCA9IENvb2tpZXMuZ2V0KCdsZER3VGhlbWVUZW1wbGF0ZUlkJyksXG5cdFx0bGFzdFN0ZXAgPSBDb29raWVzLmdldCgnbGREd0xhc3RCdWlsZEFzdHJhU3RlcCcpLFxuXHRcdHRvdGFsU3RlcHMgPSBDb29raWVzLmdldCgnbGREd1RvdGFsU3RlcHMnKTtcblxuXHRsZXQgbGFzdFN0ZXBLZXksIGN1cnJlbnRTdGVwS2V5O1xuXG5cdGxldCBjdXJyZW50U3RlcE4gPSBDb29raWVzLmdldCgnbGREd0N1cnJlbnRTdGVwTicpLFxuXHRcdG1lc3NhZ2UgPSAnJztcblxuXHRjdXJyZW50U3RlcE4gPSBwYXJzZUludChjdXJyZW50U3RlcE4pICsgMTtcblx0Q29va2llcy5zZXQoJ2xkRHdDdXJyZW50U3RlcE4nLCBjdXJyZW50U3RlcE4pO1xuXG5cdGlmICghbGFzdFN0ZXApIHtcblx0XHRjdXJyZW50U3RlcEtleSA9IDA7XG5cdH0gZWxzZSB7XG5cdFx0bGFzdFN0ZXBLZXkgPSBhY3Rpb25zLmluZGV4T2YobGFzdFN0ZXApO1xuXHRcdGN1cnJlbnRTdGVwS2V5ID0gbGFzdFN0ZXBLZXkgKyAxO1xuXHR9XG5cblx0Y29uc3QgY3VycmVudFN0ZXAgPSBhY3Rpb25zW2N1cnJlbnRTdGVwS2V5XTtcblxuXHRpZiAoY3VycmVudFN0ZXApIHtcblx0XHRsZXQgcG9zdElkcywgZGVsZXRlZFBvc3RJZHMsIGFzdHJhU2l0ZVJlc2V0UG9zdHM7XG5cblx0XHRzdGVwID0gY3VycmVudFN0ZXA7XG5cblx0XHRzd2l0Y2ggKGN1cnJlbnRTdGVwKSB7XG5cdFx0XHRjYXNlICdhc3RyYS1zaXRlcy1hcGktcmVxdWVzdCc6XG5cdFx0XHRcdGRhdGEudXJsID0gJ2FzdHJhLXNpdGVzLycgKyB0ZW1wbGF0ZUlkO1xuXG5cdFx0XHRcdG1lc3NhZ2UgPSAnR2V0IHRlbXBsYXRlIGRhdGEnO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnYXN0cmEtc2l0ZXMtcmVzZXQtY3VzdG9taXplci1kYXRhJzpcblx0XHRcdFx0bWVzc2FnZSA9ICdSZXNldCBzaXRlIGRhdGEnO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnYXN0cmEtc2l0ZXMtcmVzZXQtcG9zdHMnOlxuXHRcdFx0XHRwb3N0SWRzID0gQ29va2llcy5nZXQoJ2FzdHJhLXNpdGUtZGVsZXRlZC1wb3N0LWlkcycpO1xuXG5cdFx0XHRcdGlmIChwb3N0SWRzICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHRcdHBvc3RJZHMgPSBwb3N0SWRzLnNwbGl0KCcsJyk7XG5cblx0XHRcdFx0XHRkZWxldGVkUG9zdElkcyA9IHBvc3RJZHMuc3BsaWNlKDAsIDEwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkZWxldGVkUG9zdElkcyA9IFtdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGF0YS5pZHMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWxldGVkUG9zdElkcyk7XG5cdFx0XHRcdGRhdGEuaWRzID0gSlNPTi5zdHJpbmdpZnkoZGF0YS5pZHMpO1xuXG5cdFx0XHRcdGlmIChwb3N0SWRzICE9PSAndW5kZWZpbmVkJyAmJiBwb3N0SWRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRhc3RyYVNpdGVSZXNldFBvc3RzID0gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhc3RyYVNpdGVSZXNldFBvc3RzID0gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnYXN0cmEtc2l0ZXMtaW1wb3J0LXdwZm9ybXMnOlxuXHRcdFx0XHRkYXRhLndwZm9ybXNfdXJsID0gQ29va2llcy5nZXQoJ2FzdHJhLXNpdGUtd3Bmb3Jtcy1wYXRoJyk7XG5cdFx0XHRcdENvb2tpZXMucmVtb3ZlKCdhc3RyYS1zaXRlLXdwZm9ybXMtcGF0aCcpO1xuXG5cdFx0XHRcdG1lc3NhZ2UgPSAnSW1wb3J0IHdwZm9ybXMgZGF0YSBpZiBhbnknO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnYXN0cmEtc2l0ZXMtaW1wb3J0LWNhcnRmbG93cyc6XG5cdFx0XHRcdGRhdGEuY2FydGZsb3dzX3VybCA9IENvb2tpZXMuZ2V0KCdhc3RyYS1zaXRlLWNhcnRmbG93cy1wYXRoJyk7XG5cdFx0XHRcdENvb2tpZXMucmVtb3ZlKCdhc3RyYS1zaXRlLWNhcnRmbG93cy1wYXRoJyk7XG5cblx0XHRcdFx0bWVzc2FnZSA9ICdJbXBvcnQgY2FydGZsb3dzIGRhdGEgaWYgYW55Jztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ2FzdHJhLXNpdGVzLWltcG9ydC13aWRnZXRzJzpcblx0XHRcdFx0ZGF0YS53aWRnZXRzX2RhdGEgPSBDb29raWVzLmdldCgnYXN0cmEtc2l0ZS13aWRnZXRzLWRhdGEnKTtcblx0XHRcdFx0Q29va2llcy5yZW1vdmUoJ2FzdHJhLXNpdGUtd2lkZ2V0cy1kYXRhJyk7XG5cblx0XHRcdFx0bWVzc2FnZSA9ICdJbXBvcnQgd2lkZ2V0cyBkYXRhJztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ2FzdHJhLXNpdGVzLWltcG9ydC1wcmVwYXJlLXhtbCc6XG5cdFx0XHRcdGRhdGEud3hyX3VybCA9IENvb2tpZXMuZ2V0KCdhc3RyYS1zaXRlLXd4ci1wYXRoJyk7XG5cdFx0XHRcdENvb2tpZXMucmVtb3ZlKCdhc3RyYS1zaXRlLXd4ci1wYXRoJyk7XG5cblx0XHRcdFx0bWVzc2FnZSA9ICdJbXBvcnQgWE1MIGRhdGEnO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnYXN0cmFfc2l0ZXNfc2V0X3NpdGVfZGF0YS1zaXRlX2NvbG9ycyc6XG5cdFx0XHRcdHN0ZXAgPSAnYXN0cmFfc2l0ZXNfc2V0X3NpdGVfZGF0YSc7XG5cdFx0XHRcdGRhdGEucGFyYW0gPSAnc2l0ZS1jb2xvcnMnO1xuXHRcdFx0XHRkYXRhLnBhbGV0dGUgPSBwYWxldHRlRGV0YWlscztcblx0XHRcdFx0ZGF0YS5zZWN1cml0eSA9IExlYXJuRGFzaERlc2lnbldpemFyZC5hamF4X3NldF9kYXRhX25vbmNlO1xuXG5cdFx0XHRcdENvb2tpZXMucmVtb3ZlKCdhc3RyYS1zaXRlLWNvbG9yLXNjaGVtZScpO1xuXHRcdFx0XHRtZXNzYWdlID0gJ0FwcGx5IHNpdGUgY29sb3Igb3B0aW9ucyc7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdhc3RyYV9zaXRlc19zZXRfc2l0ZV9kYXRhLXNpdGVfdHlwb2dyYXBoeSc6XG5cdFx0XHRcdHN0ZXAgPSAnYXN0cmFfc2l0ZXNfc2V0X3NpdGVfZGF0YSc7XG5cdFx0XHRcdGRhdGEucGFyYW0gPSAnc2l0ZS10eXBvZ3JhcGh5Jztcblx0XHRcdFx0ZGF0YS50eXBvZ3JhcGh5ID0gZm9udERldGFpbHM7XG5cdFx0XHRcdGRhdGEuc2VjdXJpdHkgPSBMZWFybkRhc2hEZXNpZ25XaXphcmQuYWpheF9zZXRfZGF0YV9ub25jZTtcblxuXHRcdFx0XHRtZXNzYWdlID0gJ0FwcGx5IHNpdGUgdHlwb2dyYXBoeSBvcHRpb25zJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0dXBkYXRlUHJvZ3Jlc3Moe1xuXHRcdFx0Y3VycmVudFN0ZXBOLFxuXHRcdFx0dG90YWxTdGVwcyxcblx0XHRcdG1lc3NhZ2UsXG5cdFx0fSk7XG5cblx0XHRqUXVlcnlcblx0XHRcdC5hamF4KHtcblx0XHRcdFx0dXJsLFxuXHRcdFx0XHR0eXBlLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0YWN0aW9uOiBzdGVwLFxuXHRcdFx0XHRcdF9hamF4X25vbmNlOiBMZWFybkRhc2hEZXNpZ25XaXphcmQuYWpheF9ub25jZSxcblx0XHRcdFx0XHQuLi5kYXRhLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzdWNjZXNzKHJlc3BvbnNlKSB7XG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRTdGVwID09PSAnYXN0cmEtd3hyLWltcG9ydCcpIHtcblx0XHRcdFx0XHRcdGlmIChyZXNwb25zZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGFqYXhCdWlsZEFzdHJhKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmICgnYXN0cmEtd3hyLWltcG9ydCcgIT09IGN1cnJlbnRTdGVwKSB7XG5cdFx0XHRcdFx0XHRpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhamF4RGF0YSA9IHt9O1xuXG5cdFx0XHRcdFx0XHRcdGxldCBhamF4VXJsID0gJycsXG5cdFx0XHRcdFx0XHRcdFx0YWpheFR5cGUgPSAnUE9TVCcsXG5cdFx0XHRcdFx0XHRcdFx0c3RvcmVkRGVsZXRlZFBvc3RJZHM7XG5cblx0XHRcdFx0XHRcdFx0c3dpdGNoIChjdXJyZW50U3RlcCkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJ2FzdHJhLXNpdGVzLWFwaS1yZXF1ZXN0Jzpcblx0XHRcdFx0XHRcdFx0XHRcdENvb2tpZXMuc2V0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnYXN0cmEtc2l0ZS13cGZvcm1zLXBhdGgnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5kYXRhWydhc3RyYS1zaXRlLXdwZm9ybXMtcGF0aCddXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRDb29raWVzLnNldChcblx0XHRcdFx0XHRcdFx0XHRcdFx0J2FzdHJhLXNpdGUtY2FydGZsb3dzLXBhdGgnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5kYXRhW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdhc3RyYS1zaXRlLWNhcnRmbG93cy1wYXRoJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRDb29raWVzLnNldChcblx0XHRcdFx0XHRcdFx0XHRcdFx0J2FzdHJhLXNpdGUtd3hyLXBhdGgnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5kYXRhWydhc3RyYS1zaXRlLXd4ci1wYXRoJ11cblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdENvb2tpZXMuc2V0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnYXN0cmEtc2l0ZS13aWRnZXRzLWRhdGEnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5kYXRhWydhc3RyYS1zaXRlLXdpZGdldHMtZGF0YSddXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0XHRjYXNlICdhc3RyYS1yZXF1aXJlZC1wbHVnaW5zJzpcblx0XHRcdFx0XHRcdFx0XHRcdENvb2tpZXMuc2V0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnYXN0cmEtc2l0ZS1yZXF1aXJlZC1wbHVnaW5zJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZGF0YS5yZXF1aXJlZF9wbHVnaW5zXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5kYXRhLnJlcXVpcmVkX3BsdWdpbnMubm90aW5zdGFsbGVkLmZvckVhY2goXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uIChwbHVnaW4pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3cC51cGRhdGVzLnF1ZXVlLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uOiAnaW5zdGFsbC1wbHVnaW4nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzbHVnOiBwbHVnaW4uc2x1Zyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5pdDogcGx1Z2luLmluaXQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IHBsdWdpbi5uYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGVhcl9kZXN0aW5hdGlvbjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3VjY2VzcygpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhY3RpdmF0ZVBsdWdpbihwbHVnaW4pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvcigpIHt9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gUmVxdWlyZWQgdG8gc2V0IHF1ZXVlLlxuXHRcdFx0XHRcdFx0XHRcdFx0d3AudXBkYXRlcy5xdWV1ZUNoZWNrZXIoKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZGF0YS5yZXF1aXJlZF9wbHVnaW5zLmluYWN0aXZlLmZvckVhY2goXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uIChwbHVnaW4pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhY3RpdmF0ZVBsdWdpbihwbHVnaW4pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0XHRjYXNlICdhc3RyYS1zaXRlcy1nZXQtZGVsZXRlZC1wb3N0LWlkcyc6XG5cdFx0XHRcdFx0XHRcdFx0XHRzdG9yZWREZWxldGVkUG9zdElkcyA9IHJlc3BvbnNlLmRhdGEuc3BsaWNlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQxMDBcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdENvb2tpZXMuc2V0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnYXN0cmEtc2l0ZS1kZWxldGVkLXBvc3QtaWRzJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RvcmVkRGVsZXRlZFBvc3RJZHNcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJ2FzdHJhLXNpdGVzLWltcG9ydC1wcmVwYXJlLXhtbCc6XG5cdFx0XHRcdFx0XHRcdFx0XHRhamF4VXJsID0gcmVzcG9uc2UuZGF0YS51cmw7XG5cdFx0XHRcdFx0XHRcdFx0XHRhamF4VHlwZSA9ICdHRVQnO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0XHRjYXNlICdhc3RyYS1zaXRlcy1pbXBvcnQtZW5kJzpcblx0XHRcdFx0XHRcdFx0XHRcdENvb2tpZXMucmVtb3ZlKCdsZER3TGFzdEJ1aWxkQXN0cmFTdGVwJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRhamF4QnVpbGRUZW1wbGF0ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0YWpheEJ1aWxkQXN0cmEoYWpheFVybCwgYWpheERhdGEsIGFqYXhUeXBlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIEFkZCBlcnJvciBoYW5kbGVyLlxuXHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0T2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwocmVzcG9uc2UsICdkYXRhJykgJiZcblx0XHRcdFx0XHRcdFx0XHRPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmRhdGEsXG5cdFx0XHRcdFx0XHRcdFx0XHQnbWVzc2FnZSdcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UgPSByZXNwb25zZS5kYXRhLm1lc3NhZ2U7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bWVzc2FnZSA9XG5cdFx0XHRcdFx0XHRcdFx0XHRMZWFybkRhc2hEZXNpZ25XaXphcmQubWVzc2FnZXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmR3X2Vycm9yX2RlZmF1bHQ7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlID1cblx0XHRcdFx0XHRcdFx0XHRMZWFybkRhc2hEZXNpZ25XaXphcmQubWVzc2FnZXMuZHdfZXJyb3JfcHJlZml4ICtcblx0XHRcdFx0XHRcdFx0XHQnOiAnICtcblx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlO1xuXG5cdFx0XHRcdFx0XHRcdHVwZGF0ZVByb2dyZXNzKHtcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50U3RlcE46IGN1cnJlbnRTdGVwTiAtIDEsXG5cdFx0XHRcdFx0XHRcdFx0dG90YWxTdGVwcyxcblx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRjb25zdCBhY3Rpb25zVGVtcGxhdGUgPVxuXHRcdFx0XHRcdFx0XHRcdExlYXJuRGFzaERlc2lnbldpemFyZC50ZW1wbGF0ZXMuYWN0aW9uc19lcnJvcjtcblxuXHRcdFx0XHRcdFx0XHRqUXVlcnkoXG5cdFx0XHRcdFx0XHRcdFx0Jy5kZXNpZ24td2l6YXJkID4gLmNvbnRlbnQgPiAudGV4dCdcblx0XHRcdFx0XHRcdFx0KS5yZXBsYWNlV2l0aChhY3Rpb25zVGVtcGxhdGUpO1xuXG5cdFx0XHRcdFx0XHRcdENvb2tpZXMucmVtb3ZlKCdsZER3TGFzdEJ1aWxkQXN0cmFTdGVwJyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y3VycmVudFN0ZXBOID0gcGFyc2VJbnQoY3VycmVudFN0ZXBOKSArIDE7XG5cdFx0XHRcdFx0Q29va2llcy5zZXQoJ2xkRHdDdXJyZW50U3RlcE4nLCBjdXJyZW50U3RlcE4pO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSlcblx0XHRcdC5mYWlsKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0Q29va2llcy5yZW1vdmUoJ2xkRHdMYXN0QnVpbGRBc3RyYVN0ZXAnKTtcblx0XHRcdFx0Q29va2llcy5yZW1vdmUoJ2xkRHdDdXJyZW50U3RlcE4nKTtcblx0XHRcdH0pO1xuXG5cdFx0aWYgKGFzdHJhU2l0ZVJlc2V0UG9zdHMpIHtcblx0XHRcdC8vIFN0ZXAgYmVmb3JlIGdldC1kZWxldGVkLXBvc3QtaWRzXG5cdFx0XHRDb29raWVzLnNldChcblx0XHRcdFx0J2xkRHdMYXN0QnVpbGRBc3RyYVN0ZXAnLFxuXHRcdFx0XHQnYXN0cmEtc2l0ZXMtcmVzZXQtdGVybXMtYW5kLWZvcm1zJ1xuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Q29va2llcy5zZXQoJ2xkRHdMYXN0QnVpbGRBc3RyYVN0ZXAnLCBjdXJyZW50U3RlcCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdENvb2tpZXMucmVtb3ZlKCdsZER3TGFzdEJ1aWxkQXN0cmFTdGVwJyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gYWpheEJ1aWxkS2FkZW5jZSh1cmwgPSAnJywgZGF0YSA9IHt9LCB0eXBlID0gJ1BPU1QnKSB7XG5cdGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG5cblx0bGV0IHN0ZXAgPSB1cmxQYXJhbXMuZ2V0KCdzdGVwJyk7XG5cblx0aWYgKHVybC5sZW5ndGggPCAxKSB7XG5cdFx0dXJsID0gTGVhcm5EYXNoRGVzaWduV2l6YXJkLmFqYXh1cmw7XG5cdH1cblxuXHRjb25zdCBhY3Rpb25zID0gW1xuXHRcdCdrYWRlbmNlX2ltcG9ydF9nZXRfdGVtcGxhdGVfZGF0YScsXG5cdFx0J2thZGVuY2VfY2hlY2tfcGx1Z2luX2RhdGEnLFxuXHRcdCdrYWRlbmNlX3JlbW92ZV9wYXN0X2ltcG9ydF9kYXRhJyxcblx0XHQna2FkZW5jZV9pbXBvcnRfaW5zdGFsbF9wbHVnaW5zJyxcblx0XHQna2FkZW5jZV9pbXBvcnRfZGVtb19kYXRhJyxcblx0XHQna2FkZW5jZV9pbXBvcnRfY3VzdG9taXplcl9kYXRhJyxcblx0XHQna2FkZW5jZV9hZnRlcl9pbXBvcnRfZGF0YScsXG5cdF07XG5cblx0Y29uc3QgdGVtcGxhdGVJZCA9IENvb2tpZXMuZ2V0KCdsZER3VGhlbWVUZW1wbGF0ZUlkJyksXG5cdFx0bGFzdFN0ZXAgPSBDb29raWVzLmdldCgnbGREd0xhc3RCdWlsZEthZGVuY2VTdGVwJyksXG5cdFx0dG90YWxTdGVwcyA9IENvb2tpZXMuZ2V0KCdsZER3VG90YWxTdGVwcycpO1xuXG5cdGxldCBsYXN0U3RlcEtleSwgY3VycmVudFN0ZXBLZXksIGthZGVuY2VJbXBvcnREZW1vO1xuXG5cdGxldCBjdXJyZW50U3RlcE4gPSBDb29raWVzLmdldCgnbGREd0N1cnJlbnRTdGVwTicpLFxuXHRcdG1lc3NhZ2UgPSAnJztcblxuXHRjdXJyZW50U3RlcE4gPSBwYXJzZUludChjdXJyZW50U3RlcE4pICsgMTtcblx0Q29va2llcy5zZXQoJ2xkRHdDdXJyZW50U3RlcE4nLCBjdXJyZW50U3RlcE4pO1xuXG5cdGlmICghbGFzdFN0ZXApIHtcblx0XHRjdXJyZW50U3RlcEtleSA9IDA7XG5cdH0gZWxzZSB7XG5cdFx0bGFzdFN0ZXBLZXkgPSBhY3Rpb25zLmluZGV4T2YobGFzdFN0ZXApO1xuXHRcdGN1cnJlbnRTdGVwS2V5ID0gbGFzdFN0ZXBLZXkgKyAxO1xuXHR9XG5cblx0Y29uc3QgY3VycmVudFN0ZXAgPSBhY3Rpb25zW2N1cnJlbnRTdGVwS2V5XTtcblxuXHRpZiAoY3VycmVudFN0ZXApIHtcblx0XHRzdGVwID0gY3VycmVudFN0ZXA7XG5cblx0XHRkYXRhLnNlbGVjdGVkID0gdGVtcGxhdGVJZDtcblx0XHRkYXRhLmJ1aWxkZXIgPSAnYmxvY2tzJztcblxuXHRcdHN3aXRjaCAoY3VycmVudFN0ZXApIHtcblx0XHRcdGNhc2UgJ2thZGVuY2VfaW1wb3J0X2dldF90ZW1wbGF0ZV9kYXRhJzpcblx0XHRcdFx0ZGF0YS50ZW1wbGF0ZV90eXBlID0gJ2Jsb2Nrcyc7XG5cblx0XHRcdFx0bWVzc2FnZSA9ICdHZXQgdGVtcGxhdGUgZGF0YSc7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdjaGVja19wbHVnaW5fZGF0YSc6XG5cdFx0XHRcdGRhdGEuc2VsZWN0ZWQgPSAnJztcblx0XHRcdFx0ZGF0YS5idWlsZGVyID0gJ2Jsb2Nrcyc7XG5cblx0XHRcdFx0bWVzc2FnZSA9ICdDaGVjayBwbHVnaW4gZGF0YSc7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdrYWRlbmNlX2ltcG9ydF9kZW1vX2RhdGEnOlxuXHRcdFx0XHRkYXRhLnBhbGV0dGUgPSBDb29raWVzLmdldCgnbGREd1BhbGV0dGUnKTtcblx0XHRcdFx0ZGF0YS5mb250ID0gQ29va2llcy5nZXQoJ2xkRHdGb250Jyk7XG5cblx0XHRcdFx0bWVzc2FnZSA9ICdJbXBvcnQgZGVtbyBkYXRhJztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ2thZGVuY2VfaW1wb3J0X2N1c3RvbWl6ZXJfZGF0YSc6XG5cdFx0XHRcdGRhdGEud3BfY3VzdG9taXplID0gJ29uJztcblx0XHRcdFx0ZGVsZXRlIGRhdGEuc2VsZWN0ZWQ7XG5cdFx0XHRcdGRlbGV0ZSBkYXRhLmJ1aWxkZXI7XG5cblx0XHRcdFx0bWVzc2FnZSA9ICdJbXBvcnQgY3VzdG9taXplciBkYXRhJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0dXBkYXRlUHJvZ3Jlc3Moe1xuXHRcdFx0Y3VycmVudFN0ZXBOLFxuXHRcdFx0dG90YWxTdGVwcyxcblx0XHRcdG1lc3NhZ2UsXG5cdFx0fSk7XG5cblx0XHRpZiAoY3VycmVudFN0ZXApIHtcblx0XHRcdENvb2tpZXMuc2V0KCdsZER3TGFzdEJ1aWxkS2FkZW5jZVN0ZXAnLCBjdXJyZW50U3RlcCk7XG5cdFx0fVxuXG5cdFx0alF1ZXJ5XG5cdFx0XHQuYWpheCh7XG5cdFx0XHRcdHVybCxcblx0XHRcdFx0dHlwZSxcblx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdGFjdGlvbjogc3RlcCxcblx0XHRcdFx0XHRzZWN1cml0eTogTGVhcm5EYXNoRGVzaWduV2l6YXJkLmFqYXhfa2FkZW5jZV9zZWN1cml0eV9ub25jZSxcblx0XHRcdFx0XHQuLi5kYXRhLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzdWNjZXNzKHJlc3BvbnNlKSB7XG5cdFx0XHRcdFx0Y29uc3QgYWpheFVybCA9ICcnLFxuXHRcdFx0XHRcdFx0YWpheERhdGEgPSB7fSxcblx0XHRcdFx0XHRcdGFqYXhUeXBlID0gJ1BPU1QnO1xuXG5cdFx0XHRcdFx0bGV0IHRlbXBsYXRlRGF0YTtcblxuXHRcdFx0XHRcdHN3aXRjaCAoY3VycmVudFN0ZXApIHtcblx0XHRcdFx0XHRcdGNhc2UgJ2thZGVuY2VfaW1wb3J0X2dldF90ZW1wbGF0ZV9kYXRhJzpcblx0XHRcdFx0XHRcdFx0dGVtcGxhdGVEYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZSk7XG5cdFx0XHRcdFx0XHRcdENvb2tpZXMuc2V0KFxuXHRcdFx0XHRcdFx0XHRcdCdsZER3S2FkZW5jZVRlbXBsYXRlRGF0YScsXG5cdFx0XHRcdFx0XHRcdFx0dGVtcGxhdGVEYXRhXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRjYXNlICdrYWRlbmNlX2ltcG9ydF9kZW1vX2RhdGEnOlxuXHRcdFx0XHRcdFx0XHRrYWRlbmNlSW1wb3J0RGVtbyA9IHJlc3BvbnNlLnN0YXR1cyA9PT0gJ25ld0FKQVgnO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChrYWRlbmNlSW1wb3J0RGVtbykge1xuXHRcdFx0XHRcdFx0XHRcdENvb2tpZXMuc2V0KFxuXHRcdFx0XHRcdFx0XHRcdFx0J2xkRHdMYXN0QnVpbGRLYWRlbmNlU3RlcCcsXG5cdFx0XHRcdFx0XHRcdFx0XHQna2FkZW5jZV9pbXBvcnRfaW5zdGFsbF9wbHVnaW5zJ1xuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGNhc2UgJ2thZGVuY2VfYWZ0ZXJfaW1wb3J0X2RhdGEnOlxuXHRcdFx0XHRcdFx0XHRyZXNldEthZGVuY2VDb29raWVzKCk7XG5cdFx0XHRcdFx0XHRcdGFqYXhCdWlsZFRlbXBsYXRlKCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRhamF4QnVpbGRLYWRlbmNlKGFqYXhVcmwsIGFqYXhEYXRhLCBhamF4VHlwZSk7XG5cdFx0XHRcdH0sXG5cdFx0XHR9KVxuXHRcdFx0LmZhaWwoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXNldEthZGVuY2VDb29raWVzKCk7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXNldEthZGVuY2VDb29raWVzKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlUHJvZ3Jlc3MoYXJncykge1xuXHRsZXQgcGVyY2VudGFnZSA9IChhcmdzLmN1cnJlbnRTdGVwTiAvIGFyZ3MudG90YWxTdGVwcykgKiAxMDA7XG5cdHBlcmNlbnRhZ2UgPSBwZXJjZW50YWdlID4gMTAwID8gMTAwIDogcGVyY2VudGFnZTtcblx0cGVyY2VudGFnZSA9IHBlcmNlbnRhZ2UudG9GaXhlZCgwKTtcblxuXHRqUXVlcnkoJy5wcm9ncmVzcyAucGVyY2VudGFnZSAubnVtYmVyJykudGV4dChwZXJjZW50YWdlICsgJyUnKTtcblx0alF1ZXJ5KCcucHJvZ3Jlc3MgLmJhciBwcm9ncmVzcycpLmF0dHIoJ3ZhbHVlJywgcGVyY2VudGFnZSk7XG5cblx0aWYgKGFyZ3MubWVzc2FnZSAhPT0gJycpIHtcblx0XHRqUXVlcnkoJy5wcm9ncmVzcyAuc3RhdHVzIC5tZXNzYWdlJykuaHRtbChhcmdzLm1lc3NhZ2UpO1xuXHR9XG59XG5cbi8qKlxuICogSGVscGVyc1xuICovXG5cbmZ1bmN0aW9uIGdldEZvbnREZXRhaWxzKHRoZW1lLCBrZXkpIHtcblx0bGV0IGRldGFpbHMgPSB7fTtcblxuXHRpZiAoXG5cdFx0T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFxuXHRcdFx0TGVhcm5EYXNoRGVzaWduV2l6YXJkLmZvbnRzW3RoZW1lXVtrZXldLFxuXHRcdFx0J2RldGFpbHMnXG5cdFx0KVxuXHQpIHtcblx0XHRkZXRhaWxzID0gTGVhcm5EYXNoRGVzaWduV2l6YXJkLmZvbnRzW3RoZW1lXVtrZXldLmRldGFpbHM7XG5cdH1cblxuXHRyZXR1cm4gZGV0YWlscztcbn1cblxuZnVuY3Rpb24gZ2V0UGFsZXR0ZURldGFpbHModGhlbWUsIGtleSwgY29sb3JTY2hlbWUgPSAnJykge1xuXHRsZXQgcGFsZXR0ZXM7XG5cblx0aWYgKGNvbG9yU2NoZW1lLmxlbmd0aCA+IDApIHtcblx0XHRwYWxldHRlcyA9IExlYXJuRGFzaERlc2lnbldpemFyZC5wYWxldHRlc1t0aGVtZV1bY29sb3JTY2hlbWVdW2tleV07XG5cdH0gZWxzZSB7XG5cdFx0cGFsZXR0ZXMgPSBMZWFybkRhc2hEZXNpZ25XaXphcmQucGFsZXR0ZXNbdGhlbWVdW2tleV07XG5cdH1cblxuXHRyZXR1cm4gcGFsZXR0ZXM7XG59XG5cbmZ1bmN0aW9uIHJlZGlyZWN0UGFnZSh1cmwsIHN0ZXAsIHRlbXBsYXRlLCBub25jZSkge1xuXHRjb25zdCBhcmdzID0ge1xuXHRcdHN0ZXA6IHN0ZXAgKyAxLFxuXHRcdHRlbXBsYXRlLFxuXHRcdG5vbmNlLFxuXHR9O1xuXG5cdGlmICghbm9uY2UpIHtcblx0XHRkZWxldGUgYXJncy5ub25jZTtcblx0fVxuXG5cdGNvbnN0IG5leHRVcmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGFyZ3MpLFxuXHRcdG5leHRVcmwgPSBlbmNvZGVVUkkodXJsICsgJyYnICsgbmV4dFVybFBhcmFtcy50b1N0cmluZygpKTtcblxuXHR3aW5kb3cubG9jYXRpb24uaHJlZiA9IG5leHRVcmw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVByZXZpZXcodGhlbWUsIHR5cGUsIGtleSA9ICcnKSB7XG5cdGNvbnN0IGZyYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xkLXNpdGUtcHJldmlldycpO1xuXG5cdGlmICghZnJhbWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRsZXQgYXN0cmFQYXJhbSwgYXN0cmFEYXRhLCBrYWRlbmNlUGFyYW0sIGthZGVuY2VEYXRhLCBjb2xvclNjaGVtZTtcblxuXHRjb25zdCByZXF1ZXN0RGF0YSA9IHt9O1xuXG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdGNhc2UgJ3NpdGUtY29sb3JzJzpcblx0XHRcdGlmICh0aGVtZSA9PT0gJ2FzdHJhJykge1xuXHRcdFx0XHRhc3RyYVBhcmFtID0gJ2NvbG9yUGFsZXR0ZSc7XG5cdFx0XHRcdGNvbG9yU2NoZW1lID0gQ29va2llcy5nZXQoJ2FzdHJhLXNpdGUtY29sb3Itc2NoZW1lJyk7XG5cdFx0XHRcdGNvbG9yU2NoZW1lID0gY29sb3JTY2hlbWUgPyBjb2xvclNjaGVtZSA6ICdsaWdodCc7XG5cblx0XHRcdFx0YXN0cmFEYXRhID0gZ2V0UGFsZXR0ZURldGFpbHMoJ2FzdHJhJywga2V5LCBjb2xvclNjaGVtZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHRoZW1lID09PSAna2FkZW5jZScpIHtcblx0XHRcdFx0a2FkZW5jZVBhcmFtID0gJ2NvbG9yJztcblx0XHRcdFx0aWYgKGtleSAhPT0gJ2RlZmF1bHQnKSB7XG5cdFx0XHRcdFx0a2FkZW5jZURhdGEgPSBDb29raWVzLmdldCgnbGREd1BhbGV0dGUnKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRrYWRlbmNlRGF0YSA9ICcnO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgJ3NpdGUtdHlwb2dyYXBoeSc6XG5cdFx0XHRpZiAodGhlbWUgPT09ICdhc3RyYScpIHtcblx0XHRcdFx0YXN0cmFQYXJhbSA9ICdzaXRlVHlwb2dyYXBoeSc7XG5cblx0XHRcdFx0YXN0cmFEYXRhID0gZ2V0Rm9udERldGFpbHMoJ2FzdHJhJywga2V5KTtcblx0XHRcdFx0YXN0cmFEYXRhID0gZmlsdGVyQXN0cmFGb250RGV0YWlscyhrZXksIGFzdHJhRGF0YSk7XG5cdFx0XHR9IGVsc2UgaWYgKHRoZW1lID09PSAna2FkZW5jZScpIHtcblx0XHRcdFx0a2FkZW5jZVBhcmFtID0gJ2ZvbnQnO1xuXHRcdFx0XHRpZiAoa2V5ICE9PSAnZGVmYXVsdCcpIHtcblx0XHRcdFx0XHRrYWRlbmNlRGF0YSA9IENvb2tpZXMuZ2V0KCdsZER3Rm9udCcpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGthZGVuY2VEYXRhID0gJyc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0aWYgKHRoZW1lID09PSAnYXN0cmEnKSB7XG5cdFx0aWYgKGFzdHJhUGFyYW0gJiYgYXN0cmFEYXRhKSB7XG5cdFx0XHRmcmFtZS5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2FsbDogJ3N0YXJ0ZXJUZW1wbGF0ZVByZXZpZXdEaXNwYXRjaCcsXG5cdFx0XHRcdFx0dmFsdWU6IHtcblx0XHRcdFx0XHRcdHBhcmFtOiBhc3RyYVBhcmFtLFxuXHRcdFx0XHRcdFx0ZGF0YTogYXN0cmFEYXRhLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCcqJ1xuXHRcdFx0KTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodGhlbWUgPT09ICdrYWRlbmNlJykge1xuXHRcdHJlcXVlc3REYXRhW2thZGVuY2VQYXJhbV0gPSBrYWRlbmNlRGF0YTtcblxuXHRcdGZyYW1lLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UocmVxdWVzdERhdGEsICcqJyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZmlsdGVyQXN0cmFGb250RGV0YWlscyhrZXksIGRhdGEpIHtcblx0Y29uc3QgaWQgPSBrZXk7XG5cblx0Ly8gSURcblx0ZGF0YS5pZCA9IGlkO1xuXG5cdC8vIEhlYWRpbmdzXG5cdGNvbnN0IGluaGVyaXRBcmdzID0gW1xuXHRcdCdmb250LWZhbWlseS1oMScsXG5cdFx0J2ZvbnQtZmFtaWx5LWgyJyxcblx0XHQnZm9udC1mYW1pbHktaDMnLFxuXHRcdCdmb250LWZhbWlseS1oNCcsXG5cdFx0J2ZvbnQtZmFtaWx5LWg1Jyxcblx0XHQnZm9udC1mYW1pbHktaDYnLFxuXHRcdCdmb250LXdlaWdodC1oMScsXG5cdFx0J2ZvbnQtd2VpZ2h0LWgyJyxcblx0XHQnZm9udC13ZWlnaHQtaDMnLFxuXHRcdCdmb250LXdlaWdodC1oNCcsXG5cdFx0J2ZvbnQtd2VpZ2h0LWg1Jyxcblx0XHQnZm9udC13ZWlnaHQtaDYnLFxuXHRdO1xuXG5cdGNvbnN0IGVtcHR5QXJncyA9IFtcblx0XHQnbGluZS1oZWlnaHQtaDEnLFxuXHRcdCdsaW5lLWhlaWdodC1oMicsXG5cdFx0J2xpbmUtaGVpZ2h0LWgzJyxcblx0XHQnbGluZS1oZWlnaHQtaDQnLFxuXHRcdCdsaW5lLWhlaWdodC1oNScsXG5cdFx0J2xpbmUtaGVpZ2h0LWg2Jyxcblx0XHQndGV4dC10cmFuc2Zvcm0taDEnLFxuXHRcdCd0ZXh0LXRyYW5zZm9ybS1oMicsXG5cdFx0J3RleHQtdHJhbnNmb3JtLWgzJyxcblx0XHQndGV4dC10cmFuc2Zvcm0taDQnLFxuXHRcdCd0ZXh0LXRyYW5zZm9ybS1oNScsXG5cdFx0J3RleHQtdHJhbnNmb3JtLWg2Jyxcblx0XTtcblxuXHRpbmhlcml0QXJncy5mb3JFYWNoKGZ1bmN0aW9uIChhcmcpIHtcblx0XHRkYXRhW2FyZ10gPSAnaW5oZXJpdCc7XG5cdH0pO1xuXG5cdGVtcHR5QXJncy5mb3JFYWNoKGZ1bmN0aW9uIChhcmcpIHtcblx0XHRkYXRhW2FyZ10gPSAnJztcblx0fSk7XG5cblx0cmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGFjdGl2YXRlUGx1Z2luKHBsdWdpbikge1xuXHRqUXVlcnkucG9zdChcblx0XHRMZWFybkRhc2hEZXNpZ25XaXphcmQuYWpheHVybCxcblx0XHR7XG5cdFx0XHRhY3Rpb246ICdhc3RyYS1yZXF1aXJlZC1wbHVnaW4tYWN0aXZhdGUnLFxuXHRcdFx0X2FqYXhfbm9uY2U6IExlYXJuRGFzaERlc2lnbldpemFyZC5hamF4X25vbmNlLFxuXHRcdFx0aW5pdDogcGx1Z2luLmluaXQsXG5cdFx0fSxcblx0XHRmdW5jdGlvbiAoKSB7fVxuXHQpO1xufVxuXG5mdW5jdGlvbiBmbHVzaENvb2tpZXMoZW5kID0gZmFsc2UpIHtcblx0Y29uc3QgY29va2llcyA9IFtcblx0XHQnbGREd0N1cnJlbnRTdGVwTicsXG5cdFx0J2xkRHdUb3RhbFN0ZXBzJyxcblx0XHQnbGREd0xhc3RCdWlsZEFzdHJhU3RlcCcsXG5cdFx0J2xkRHdMYXN0QnVpbGRLYWRlbmNlU3RlcCcsXG5cdFx0J2FzdHJhLXNpdGUtd3Bmb3Jtcy1wYXRoJyxcblx0XHQnYXN0cmEtc2l0ZS1jYXJ0Zmxvd3MtcGF0aCcsXG5cdFx0J2FzdHJhLXNpdGUtd3hyLXBhdGgnLFxuXHRcdCdhc3RyYS1zaXRlLXdpZGdldHMtZGF0YScsXG5cdFx0J2FzdHJhLXNpdGUtcmVxdWlyZWQtcGx1Z2lucycsXG5cdF07XG5cblx0aWYgKGVuZCkge1xuXHRcdGNvb2tpZXMucHVzaChcblx0XHRcdC4uLltcblx0XHRcdFx0J2FzdHJhLXNpdGUtY29sb3Itc2NoZW1lJyxcblx0XHRcdFx0J2xkRHdUZW1wbGF0ZUlkJyxcblx0XHRcdFx0J2xkRHdUaGVtZVRlbXBsYXRlSWQnLFxuXHRcdFx0XHQnbGREd0ZvbnQnLFxuXHRcdFx0XHQnbGREd1BhbGV0dGUnLFxuXHRcdFx0XVxuXHRcdCk7XG5cdH1cblxuXHRjb29raWVzLmZvckVhY2goZnVuY3Rpb24gKGNvb2tpZSkge1xuXHRcdENvb2tpZXMucmVtb3ZlKGNvb2tpZSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiByZXNldEthZGVuY2VDb29raWVzKCkge1xuXHRjb25zdCBjb29raWVzID0gWydsZER3TGFzdEJ1aWxkS2FkZW5jZVN0ZXAnLCAnbGREd1BhbGV0dGUnLCAnbGREd0ZvbnQnXTtcblxuXHRjb29raWVzLmZvckVhY2goZnVuY3Rpb24gKGNvb2tpZSkge1xuXHRcdENvb2tpZXMucmVtb3ZlKGNvb2tpZSk7XG5cdH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQUEsTUFBTSxDQUFDQyxNQUFELENBQU4sQ0FBZUMsRUFBZixDQUFrQixNQUFsQixFQUEwQixZQUFZO0VBQ3JDQyxZQUFZO0FBQ1osQ0FGRDtBQUlBSCxNQUFNLENBQUMsWUFBWTtFQUNsQjtBQUNEO0FBQ0E7RUFFQ0EsTUFBTSxDQUFDSSxRQUFELENBQU4sQ0FBaUJGLEVBQWpCLENBQ0MsV0FERCxFQUVDLDZCQUZELEVBR0MsVUFBVUcsQ0FBVixFQUFhO0lBQ1pBLENBQUMsQ0FBQ0MsY0FBRjtJQUNBTixNQUFNLENBQUMs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\n//# sourceURL=webpack-internal:///./assets/js/src/design-wizard.js\n");

/***/ })

/******/ 	});
/************************************************************************/
/******/ 	
/******/ 	// startup
/******/ 	// Load entry module and return exports
/******/ 	// This entry module can't be inlined because the eval-source-map devtool is used.
/******/ 	var __webpack_exports__ = {};
/******/ 	__webpack_modules__["./assets/js/src/design-wizard.js"]();
/******/ 	
/******/ })()
;