TranslatePress – Translate Multilingual sites - Version 1.7.4

Version Description

  • Fix fatal error with get_the_date filter due to other plugins calling incorrect params
  • Fix issue with identical string in multiple places not showing all related strings
  • Fixed Next and Previous buttons not working in the interface
  • Fixed Yoast SEO canonical contain the correct language
  • Fixed info icons too large before css loading
  • Added compatibility with Superfly menu
  • Add locale to user on user register and ignore a gettext string from WordPress and WooCommerce that added trpstr strings in the database
  • Fix compatibility with Dflip plugin and Elementor Editor when a secondary language is the first one displayed
Download this release

Release Info

Developer madalin.ungureanu
Plugin Icon 128x128 TranslatePress – Translate Multilingual sites
Version 1.7.4
Comparing to
See all releases

Code changes from version 1.7.3 to 1.7.4

assets/css/trp-editor.css CHANGED
@@ -814,6 +814,7 @@ a:hover {
814
  text-decoration: none;
815
  outline: 0;
816
  font-size: 14px;
 
817
  }
818
 
819
  .trp-tooltip-toggle svg {
814
  text-decoration: none;
815
  outline: 0;
816
  font-size: 14px;
817
+ visibility: visible !important;
818
  }
819
 
820
  .trp-tooltip-toggle svg {
assets/js/trp-editor.js CHANGED
@@ -726,7 +726,7 @@ eval("/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukh
726
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
727
 
728
  "use strict";
729
- eval("__webpack_require__.r(__webpack_exports__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n props: ['editorsNavigation', 'selectedTab'],\n methods: {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vYXNzZXRzL3NyYy9qcy9jb21wb25lbnRzL2VkaXRvcnMtbmF2aWdhdGlvbi52dWU/NDAwMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBYUE7QUFDQSxVQUNBLG1CQURBLEVBRUEsYUFGQSxDQURBO0FBS0E7QUFMQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9hc3NldHMvc3JjL2pzL2NvbXBvbmVudHMvZWRpdG9ycy1uYXZpZ2F0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gICAgPGRpdiBpZD1cInRycC1lZGl0b3JzLW5hdmlnYXRpb24tdGFic1wiIHYtaWY9XCJlZGl0b3JzTmF2aWdhdGlvbi5zaG93XCI+XG4gICAgICAgIDx0YWJsZSBpZD1cInRycC1lZGl0b3JzLXRhYi10YWJsZVwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidHJwLWVkaXRvcnMtdGFiXCIgOmNsYXNzPVwieyd0cnAtc2VsZWN0ZWQtdGFiJzogbmF2aWdhdGlvblRhYi5oYW5kbGUgPT09IHNlbGVjdGVkVGFiIH1cIiB2LWZvcj1cIm5hdmlnYXRpb25UYWIgaW4gZWRpdG9yc05hdmlnYXRpb24udGFic1wiPlxuICAgICAgICAgICAgICAgIDxhIDpocmVmPVwibmF2aWdhdGlvblRhYi5wYXRoXCI+e3tuYXZpZ2F0aW9uVGFiLmxhYmVsfX08L2E+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cnAtdG9vbHRpcC10b2dnbGVcIiA6ZGF0YS10b29sdGlwPVwibmF2aWdhdGlvblRhYi50b29sdGlwXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAyNyAyN1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBmaWxsPVwiI2E4YThhOFwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBkPVwiTTEzLjUgMjdDMjAuOTU2IDI3IDI3IDIwLjk1NiAyNyAxMy41UzIwLjk1NiAwIDEzLjUgMCAwIDYuMDQ0IDAgMTMuNSA2LjA0NCAyNyAxMy41IDI3em0wLTJDNy4xNSAyNSAyIDE5Ljg1IDIgMTMuNVM3LjE1IDIgMTMuNSAyIDI1IDcuMTUgMjUgMTMuNSAxOS44NSAyNSAxMy41IDI1elwiLz48cGF0aCBkPVwiTTEyLjA1IDcuNjRjMC0uMjI4LjA0LS40MjMuMTItLjU4NS4wNzctLjE2My4xODUtLjI5NS4zMi0uMzk3LjEzOC0uMTAyLjI5OC0uMTc3LjQ4LS4yMjcuMTg0LS4wNDguMzgzLS4wNzMuNTk4LS4wNzMuMjAzIDAgLjM5OC4wMjUuNTg0LjA3NC4xODYuMDUuMzUuMTI2LjQ4OC4yMjguMTQuMTAyLjI1Mi4yMzQuMzM2LjM5Ny4wODQuMTYyLjEyNy4zNTcuMTI3LjU4NCAwIC4yMi0uMDQzLjQxMi0uMTI3LjU3NC0uMDg0LjE2My0uMTk2LjI5Ny0uMzM2LjQtLjE0LjEwNi0uMzAyLjE4NS0uNDg4LjIzNy0uMTg2LjA1My0uMzguMDgtLjU4NC4wOC0uMjE1IDAtLjQxNC0uMDI3LS41OTctLjA4LS4xODItLjA1LS4zNDItLjEzLS40OC0uMjM1LS4xMzUtLjEwNC0uMjQzLS4yMzgtLjMyLS40LS4wOC0uMTYzLS4xMi0uMzU1LS4xMi0uNTc2em0tMS4wMiAxMS41MTdjLjEzNCAwIC4yNzUtLjAxMy40MjQtLjA0LjE0OC0uMDI1LjI4NC0uMDguNDEtLjE2LjEyNC0uMDgyLjIzLS4xOTguMzEzLS4zNS4wODUtLjE1LjEyNy0uMzU0LjEyNy0uNjF2LTUuNDIzYzAtLjIzOC0uMDQyLS40My0uMTI3LS41Ny0uMDg0LS4xNDQtLjE5LS4yNTQtLjMxOC0uMzMyLS4xMy0uMDgtLjI2Ny0uMTMtLjQxNS0uMTUzLS4xNDgtLjAyNC0uMjg2LS4wMzYtLjQxNC0uMDM2aC0uMjF2LS45NWg0LjE5NXY3LjQ2M2MwIC4yNTYuMDQzLjQ2LjEyNy42MS4wODQuMTUyLjE5LjI2OC4zMTQuMzUuMTI1LjA4LjI2My4xMzUuNDE0LjE2LjE1LjAyNy4yOS4wNC40MTguMDRoLjIxdi45NUgxMC44MnYtLjk1aC4yMXpcIi8+PC9nPjwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0e1xuICAgIHByb3BzOltcbiAgICAgICAgJ2VkaXRvcnNOYXZpZ2F0aW9uJyxcbiAgICAgICAgJ3NlbGVjdGVkVGFiJ1xuICAgIF0sXG4gICAgbWV0aG9kczp7XG5cbiAgICB9XG59XG48L3NjcmlwdD5cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./assets/src/js/components/editors-navigation.vue?vue&type=script&lang=js&\n");
730
 
731
  /***/ }),
732
 
@@ -810,7 +810,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var axio
810
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
811
 
812
  "use strict";
813
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! select2/dist/js/select2.min.js */ \"./node_modules/select2/dist/js/select2.min.js\");\n/* harmony import */ var select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./assets/src/js/utils.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! axios */ \"./node_modules/axios/index.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_language_boxes_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/language-boxes.vue */ \"./assets/src/js/components/language-boxes.vue\");\n/* harmony import */ var _components_save_translations_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/save-translations.vue */ \"./assets/src/js/components/save-translations.vue\");\n/* harmony import */ var _components_hover_actions_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/hover-actions.vue */ \"./assets/src/js/components/hover-actions.vue\");\n/* harmony import */ var _components_extra_content_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/extra-content.vue */ \"./assets/src/js/components/extra-content.vue\");\n/* harmony import */ var _components_editors_navigation_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/editors-navigation.vue */ \"./assets/src/js/components/editors-navigation.vue\");\n/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! he */ \"./node_modules/he/he.js\");\n/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(he__WEBPACK_IMPORTED_MODULE_8__);\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n components: {\n languageBoxes: _components_language_boxes_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n saveTranslations: _components_save_translations_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n hoverActions: _components_hover_actions_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n extraContent: _components_extra_content_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n editorsNavigation: _components_editors_navigation_vue__WEBPACK_IMPORTED_MODULE_7__[\"default\"]\n },\n data: function data() {\n return {\n //props\n settings: trp_editor_data.trp_settings,\n languageNames: trp_editor_data.language_names,\n orderedSecondaryLanguages: trp_editor_data.ordered_secondary_languages,\n roles: trp_editor_data.view_as_roles,\n nonces: trp_editor_data.editor_nonces,\n stringGroupOrder: trp_editor_data.string_group_order,\n selectors: trp_editor_data.string_selectors,\n stringTypes: trp_editor_data.string_types,\n dataAttributes: trp_editor_data.data_attributes,\n mergeRules: trp_editor_data.merge_rules,\n editorsNavigation: trp_editor_data.editors_navigation,\n editorStrings: trp_editor_data.trp_localized_strings,\n flagsPath: trp_editor_data.flags_path,\n //data\n currentLanguage: trp_editor_data.current_language,\n onScreenLanguage: trp_editor_data.on_screen_language,\n currentURL: trp_editor_data.url_to_load,\n urlToLoad: trp_editor_data.url_to_load,\n ajaxUrl: trp_editor_data.ajax_url,\n paidVersion: trp_editor_data.paid_version,\n iframe: '',\n dictionary: [],\n selectedString: null,\n selectedIndexesArray: [],\n detectedSelectorAndId: [],\n stringGroups: [],\n mergingString: false,\n mergeData: [],\n showChangesUnsavedMessage: false,\n viewAs: '',\n loading_strings: 0,\n translationNotLoadedYet: false\n };\n },\n created: function created() {\n this.settings['default-language-name'] = this.languageNames[this.settings['default-language']]; //set default value for the View As select\n\n var params = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getUrlParameters(this.currentURL);\n if (Object.keys(params).length > 1 && params['trp-view-as']) this.viewAs = params['trp-view-as'];else this.viewAs = 'current_user';\n },\n mounted: function mounted() {\n this.addKeyboardShortcutsListener();\n var self = this; // initialize select2\n\n jQuery('#trp-language-select, #trp-view-as-select').select2({\n width: '100%'\n }); //init strings dropdown\n\n this.stringsDropdownLoading(); // show overlay when select is opened\n\n jQuery('#trp-language-select, #trp-string-categories').on('select2:open', function () {\n jQuery('#trp_select2_overlay').fadeIn('100');\n }).on('select2:close', function () {\n jQuery('#trp_select2_overlay').hide();\n }).on('select2:opening', function (e) {\n /* when we have unsaved changes prevent the strings dropdown from opening so we do not have a disconnect between the textareas and the dropdown */\n if (self.hasUnsavedChanges()) {\n e.preventDefault();\n }\n }); // resize sidebar and consequently the iframe\n\n var previewContainer = jQuery('#trp-preview');\n var total_width = jQuery(window).width();\n jQuery('#trp-controls').resizable({\n start: function start() {\n previewContainer.toggle();\n },\n stop: function stop() {\n previewContainer.toggle();\n },\n handles: 'e',\n minWidth: 327,\n maxWidth: total_width - 20\n }).bind(\"resize\", this.resizeIframe); // resize iframe when resizing window\n\n jQuery(window).resize(function () {\n self.resizeIframe();\n });\n },\n watch: {\n currentLanguage: function currentLanguage(_currentLanguage) {\n var self = this; //grab the correct URL from the iFrame\n\n var newURL = this.iframe.querySelector('link[hreflang=\"' + _currentLanguage.replace('_', '-') + '\"]').getAttribute('href');\n this.currentURL = newURL;\n this.iframe.location = newURL; //reset vue props\n\n this.selectedString = '';\n this.selectedIndexesArray = []; //set strings dropdown to loading state\n\n jQuery('#trp-string-categories').val('').trigger('change');\n this.stringsDropdownLoading();\n this.onScreenLanguage = _currentLanguage;\n\n if (this.settings['default-language'] == this.currentLanguage && this.settings['translation-languages'].length > 1) {\n this.settings['translation-languages'].some(function (language) {\n if (language != self.settings['default-language']) {\n // return the first language not default\n self.onScreenLanguage = language;\n return true;\n }\n });\n }\n },\n currentURL: function currentURL(newUrl, oldUrl) {\n window.history.replaceState(null, null, this.parentURL(newUrl));\n },\n viewAs: function viewAs(role) {\n if (!this.currentURL || !this.iframe) return;\n var url = this.cleanURL(this.currentURL);\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].updateUrlParameter(url, 'trp-edit-translation', 'preview');\n\n if (role == 'current_user') {\n this.iframe.location = url;\n return;\n } //if nonce not available, an update to the Browse as Other Roles add-on is required\n\n\n if (!this.nonces[role]) {\n alert(this.editorStrings.bor_update_notice);\n return;\n }\n\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].updateUrlParameter(url, 'trp-view-as', role);\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].updateUrlParameter(url, 'trp-view-as-nonce', this.nonces[role]);\n this.iframe.location = url;\n },\n selectedString: function selectedString(selectedStringArrayIndex, oldString) {\n if (this.hasUnsavedChanges() || !selectedStringArrayIndex && selectedStringArrayIndex !== 0) return;\n jQuery('#trp-string-categories').val(selectedStringArrayIndex !== null ? selectedStringArrayIndex : '').trigger('change');\n var selectedString = this.dictionary[selectedStringArrayIndex];\n if (!selectedString) return;\n var currentNode = this.iframe.querySelector(\"[\" + selectedString.selector + \"='\" + selectedString.dbID + \"']\");\n var selectedIndexesArray = []; //when merging we do not have a valid current node, so we just add the fake id\n\n if (currentNode) {\n var self = this;\n var selectors = self.getAllSelectors();\n var nodes = [];\n nodes.push(currentNode);\n\n if (currentNode.tagName != \"A\") {\n // include the anchor's translatable attributes\n var anchorParent = currentNode.closest('a');\n\n if (anchorParent != null) {\n nodes.push(anchorParent);\n }\n }\n\n if (currentNode.tagName == \"A\" && currentNode.children.length > 0) {\n // include all the translatable attributes inside the anchor\n var childrenArray = _toConsumableArray(currentNode.children);\n\n childrenArray.forEach(function (child) {\n nodes.push(child);\n });\n }\n\n nodes.forEach(function (node) {\n selectors.forEach(function (selector) {\n var stringId = node.getAttribute(selector);\n\n if (stringId) {\n var found = false;\n var i;\n\n for (i = 0; i < selectedIndexesArray.length; i++) {\n if (typeof self.dictionary[selectedIndexesArray[i]] !== 'undefined' && self.dictionary[selectedIndexesArray[i]].dbID !== 'undefined' && self.dictionary[selectedIndexesArray[i]].dbID === stringId) {\n found = true;\n break;\n }\n }\n\n if (!found) {\n selectedIndexesArray.push(self.getStringIndex(selector, stringId));\n }\n }\n });\n });\n } else selectedIndexesArray.push(selectedStringArrayIndex);\n\n this.selectedIndexesArray = selectedIndexesArray;\n }\n },\n computed: {\n closeURL: function closeURL() {\n return this.cleanURL(this.currentURL);\n }\n },\n methods: {\n iFrameLoaded: function iFrameLoaded() {\n var self = this;\n var iframeElement = document.querySelector('#trp-preview-iframe');\n this.iframe = iframeElement.contentDocument || iframeElement.contentWindow.document; //sync iFrame URL with parent\n\n if (this.currentURL != this.iframe.URL) this.currentURL = this.iframe.URL; //hide iFrame loader\n\n this.iframeLoader('hide');\n self.detectedSelectorAndId = [];\n self.dictionary = [];\n this.scanIframeForStrings();\n window.addEventListener('trp_iframe_page_updated', this.scanIframeForStrings); //event that is fired when the iFrame is navigated\n\n iframeElement.contentWindow.onbeforeunload = function () {\n self.iframeLoader('show');\n self.selectedString = null;\n self.selectedIndexesArray = [];\n self.translationNotLoadedYet = false;\n self.stringsDropdownLoading();\n };\n },\n scanIframeForStrings: function scanIframeForStrings() {\n this.scanForSelector('data-trp-translate-id', 'regular', this.onScreenLanguage);\n this.scanForSelector('data-trpgettextoriginal', 'gettext', this.currentLanguage);\n this.scanForSelector('data-trp-post-slug', 'postslug', this.currentLanguage);\n },\n scanForSelector: function scanForSelector(baseSelector, typeSlug, languageOfIds) {\n this.loading_strings++;\n var self = this;\n var selectors = this.prepareSelectorStrings(baseSelector);\n\n var nodes = _toConsumableArray(this.iframe.querySelectorAll('[' + selectors.join('],[') + ']'));\n\n var stringIdsArray = [],\n nodeData = [],\n nodeEntries = [];\n nodes.forEach(function (node) {\n nodeEntries = self.getNodeInfo(node, baseSelector);\n nodeEntries.forEach(function (entry) {\n // this check ensures that we don't create duplicates when rescanning after ajax complete\n if (!self.alreadyDetected(entry.selector, entry.dbID)) {\n stringIdsArray.push(entry.dbID);\n nodeData.push(entry);\n }\n });\n self.setupEventListener(node);\n }); //unique ids only\n\n stringIdsArray = _toConsumableArray(new Set(stringIdsArray));\n\n if (stringIdsArray.length > 0) {\n var data = new FormData();\n data.append('action', 'trp_get_translations_' + typeSlug);\n data.append('all_languages', 'true');\n data.append('security', this.nonces['gettranslationsnonce' + typeSlug]);\n data.append('language', languageOfIds);\n data.append('string_ids', JSON.stringify(stringIdsArray));\n axios__WEBPACK_IMPORTED_MODULE_2___default.a.post(this.ajaxUrl, data).then(function (response) {\n self.loading_strings--;\n self.addToDictionary(response.data, nodeData);\n })[\"catch\"](function (error) {\n console.log(error);\n });\n } else {\n self.loading_strings--;\n }\n },\n alreadyDetected: function alreadyDetected(selector, dbId) {\n var combined = selector + '=' + dbId;\n\n if (_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].arrayContainsItem(this.detectedSelectorAndId, combined)) {\n return true;\n } else {\n this.detectedSelectorAndId.push(combined);\n return false;\n }\n },\n setupEventListener: function setupEventListener(node) {\n if (node.tagName == 'A' && !node.hasAttribute('data-trpgettextoriginal')) return false;\n var self = this;\n node.addEventListener('mouseenter', self.$refs.hoverActions.showPencilIcon);\n },\n addToDictionary: function addToDictionary(responseData) {\n var nodeInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var self = this;\n\n if (responseData != null) {\n if (nodeInfo) {\n nodeInfo.forEach(function (infoRow, index) {\n responseData.some(function (responseDataRow) {\n if (infoRow.dbID == responseDataRow.dbID) {\n //bring block_type to the top level object\n if (responseDataRow.type != 'gettext' && typeof responseDataRow.block_type == 'undefined') {\n var firstLanguage = self.orderedSecondaryLanguages[0];\n if (typeof responseDataRow.translationsArray[firstLanguage].block_type != 'undefined') responseDataRow.block_type = responseDataRow.translationsArray[firstLanguage].block_type;\n }\n\n nodeInfo[index] = Object.assign({}, responseDataRow, infoRow);\n return true; // a sort of break\n }\n });\n });\n } else {\n nodeInfo = responseData;\n }\n\n this.stringGroups = this.addToStringGroups(nodeInfo);\n this.dictionary = this.dictionary.concat(nodeInfo);\n this.initStringsDropdown();\n }\n },\n addToStringGroups: function addToStringGroups(strings) {\n // see what node groups are found\n var foundStringGroups = this.stringGroups;\n strings.forEach(function (string) {\n if (foundStringGroups.indexOf(string.group) === -1 && (typeof string.blockType === 'undefined' || string.blockType !== '2')) {\n foundStringGroups.push(string.group);\n }\n }); // put the node groups in the order that we want, according to the prop this.stringGroupOrder\n\n var orderedStringGroups = [];\n\n if (this.editorStrings.seo_update_notice != 'seo_pack_update_not_needed') {\n orderedStringGroups.push(this.editorStrings.seo_update_notice);\n }\n\n this.stringGroupOrder.forEach(function (group) {\n if (foundStringGroups.indexOf(group) !== -1) {\n orderedStringGroups.push(group);\n }\n }); // if there were any other string groups that were not in the prop, add them at the end.\n\n foundStringGroups.forEach(function (group) {\n if (orderedStringGroups.indexOf(group) === -1) {\n orderedStringGroups.push(group);\n }\n });\n return orderedStringGroups;\n },\n getStringIndex: function getStringIndex(selector, dbID) {\n var found = null;\n this.dictionary.some(function (string, index) {\n if (string.dbID == dbID && string.selector == selector) {\n found = index;\n return true;\n }\n });\n return found;\n },\n getNodeInfo: function getNodeInfo(node) {\n var baseSelector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var stringId;\n var nodeData = [];\n var selectors = this.prepareSelectorStrings(baseSelector);\n selectors.forEach(function (selector) {\n stringId = node.getAttribute(selector);\n\n if (stringId) {\n var nodeAttribute = selector.replace(baseSelector, '');\n var nodeGroup = node.getAttribute('data-trp-node-group' + nodeAttribute);\n var nodeDescription = node.getAttribute('data-trp-node-description' + nodeAttribute);\n var entry = {\n dbID: stringId,\n selector: selector,\n attribute: nodeAttribute.substr(1) // substr(1) is used to trim prefixing line - ex. -alt will result in alt (no line)\n\n };\n if (nodeGroup) entry.group = nodeGroup;\n if (nodeDescription) entry.description = nodeDescription;\n nodeData.push(entry);\n }\n });\n return nodeData;\n },\n getAllSelectors: function getAllSelectors() {\n var selectors = [];\n var self = this;\n this.dataAttributes.forEach(function (dataAttribute) {\n selectors = selectors.concat(self.prepareSelectorStrings(dataAttribute));\n });\n return selectors;\n },\n prepareSelectorStrings: function prepareSelectorStrings(baseNameSelector) {\n var parsed_selectors = [];\n this.selectors.forEach(function (selectorSuffix, index) {\n parsed_selectors.push(baseNameSelector + selectorSuffix);\n });\n return parsed_selectors;\n },\n parentURL: function parentURL(url) {\n return url.replace('trp-edit-translation=preview', 'trp-edit-translation=true');\n },\n cleanURL: function cleanURL(url) {\n //make removeUrlParameter recursive and only call it once with all the parameters that\n //need to stripped ?\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'lang');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-view-as');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-view-as-nonce');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-edit-translation');\n return url;\n },\n showString: function showString(string, type) {\n if (typeof string.blockType !== 'undefined' && string.blockType === '2') {\n // don't show deprecated translation blocks in the dropdown\n return false;\n }\n\n if (type === this.editorStrings.images && typeof string.attribute != 'undefined' && string.attribute == 'src') return true;\n if (typeof string.attribute !== 'undefined' && (string.attribute == 'href' || string.attribute == 'src')) return false;\n if (string.group === type) return true;\n return false;\n },\n initStringsDropdown: function initStringsDropdown() {\n var self = this;\n\n if (!this.isStringsDropdownOpen()) {\n jQuery('#trp-string-categories').select2('destroy');\n jQuery('#trp-string-categories').select2({\n placeholder: self.editorStrings.select_string,\n templateResult: function templateResult(option) {\n var original = he__WEBPACK_IMPORTED_MODULE_8___default.a.decode(option.text.substring(0, 90)) + (option.text.length <= 90 ? '' : '...');\n var description = option.title ? '(' + option.title + ')' : '';\n return jQuery('<div>' + original + '</div><div class=\"string-selector-description\">' + description + '</div>');\n },\n width: '100%'\n }).prop('disabled', false);\n jQuery('#trp_select2_overlay').hide();\n }\n },\n stringsDropdownLoading: function stringsDropdownLoading() {\n jQuery('#trp-string-categories').select2({\n placeholder: this.editorStrings.strings_loading,\n width: '100%'\n }).prop('disabled', true);\n },\n processOptionName: function processOptionName(name, type) {\n if (type == 'Images') return _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getFilename(name);\n return _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].escapeHtml(name);\n },\n isStringsDropdownOpen: function isStringsDropdownOpen() {\n return jQuery('#trp-string-categories').select2('isOpen');\n },\n hasUnsavedChanges: function hasUnsavedChanges() {\n var unsavedChanges = false;\n var self = this;\n\n if (this.selectedIndexesArray.length > 0) {\n this.selectedIndexesArray.forEach(function (selectedIndex) {\n self.settings['translation-languages'].forEach(function (languageCode) {\n if (self.dictionary[selectedIndex] && self.dictionary[selectedIndex].translationsArray[languageCode] && self.dictionary[selectedIndex].translationsArray[languageCode].translated !== self.dictionary[selectedIndex].translationsArray[languageCode].editedTranslation) {\n unsavedChanges = true;\n }\n });\n });\n }\n\n this.showChangesUnsavedMessage = unsavedChanges;\n return unsavedChanges;\n },\n iframeLoader: function iframeLoader(status) {\n var loader = document.getElementById('trp-preview-loader');\n if (status == 'show') loader.style.display = 'flex';else if (status == 'hide') loader.style.display = 'none';\n },\n previousString: function previousString() {\n var currentValue = document.getElementById('trp-string-categories').value;\n var newValue = +currentValue - 1;\n\n while (newValue >= 0 && document.querySelectorAll('#trp-string-categories option[value=\"' + newValue + '\"]').length === 0) {\n newValue--;\n }\n\n if (newValue < 0) return;\n this.selectedString = newValue.toString();\n },\n nextString: function nextString() {\n var currentValue = document.getElementById('trp-string-categories').value,\n newValue = 0;\n if (currentValue != '') newValue = +currentValue + 1;\n\n while (newValue < this.dictionary.length && document.querySelectorAll('#trp-string-categories option[value=\"' + newValue + '\"]').length === 0) {\n newValue++;\n }\n\n if (newValue >= this.dictionary.length) {\n return;\n }\n\n this.selectedString = newValue.toString();\n },\n addKeyboardShortcutsListener: function addKeyboardShortcutsListener() {\n document.addEventListener(\"keydown\", function (e) {\n if ((window.navigator.platform.match(\"Mac\") ? e.metaKey : e.ctrlKey) && e.altKey) {\n // CTRL + ALT + right arrow\n if (e.keyCode === 39) {\n e.preventDefault();\n window.dispatchEvent(new Event('trp_trigger_next_string_event'));\n } else {\n // CTRL + ALT + left arrow\n if (e.keyCode === 37) {\n e.preventDefault();\n window.dispatchEvent(new Event('trp_trigger_previous_string_event'));\n }\n }\n }\n }, false);\n window.addEventListener('trp_trigger_next_string_event', this.nextString);\n window.addEventListener('trp_trigger_previous_string_event', this.previousString);\n },\n resizeIframe: function resizeIframe(event, ui) {\n var total_width = jQuery(window).width();\n var width = jQuery('#trp-controls').width();\n var previewContainer = jQuery('#trp-preview');\n previewContainer.css('right', width);\n previewContainer.css('left', width - 348);\n previewContainer.css('width', total_width - width);\n }\n },\n //add support for v-model in select2\n directives: {\n select2: {\n inserted: function inserted(el) {\n jQuery(el).on('select2:select', function () {\n var event = new Event('change', {\n bubbles: true,\n cancelable: true\n });\n el.dispatchEvent(event);\n });\n jQuery(el).on('select2:unselect', function () {\n var event = new Event('change', {\n bubbles: true,\n cancelable: true\n });\n el.dispatchEvent(event);\n });\n }\n }\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vYXNzZXRzL3NyYy9qcy9lZGl0b3IudnVlP2E3NjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBLHlGQURBO0FBRUEsK0ZBRkE7QUFHQSx1RkFIQTtBQUlBLHVGQUpBO0FBS0E7QUFMQSxHQURBO0FBUUEsTUFSQSxrQkFRQTtBQUNBO0FBQ0E7QUFDQSw0Q0FGQTtBQUdBLG1EQUhBO0FBSUEsNEVBSkE7QUFLQSwwQ0FMQTtBQU1BLDJDQU5BO0FBT0EsMERBUEE7QUFRQSxpREFSQTtBQVNBLCtDQVRBO0FBVUEscURBVkE7QUFXQSw2Q0FYQTtBQVlBLDJEQVpBO0FBYUEsMERBYkE7QUFjQSwyQ0FkQTtBQWVBO0FBQ0EsdURBaEJBO0FBaUJBLDBEQWpCQTtBQWtCQSw2Q0FsQkE7QUFtQkEsNENBbkJBO0FBb0JBLHVDQXBCQTtBQXFCQSwrQ0FyQkE7QUFzQkEsZ0JBdEJBO0FBdUJBLG9CQXZCQTtBQXdCQSwwQkF4QkE7QUF5QkEsOEJBekJBO0FBMEJBLCtCQTFCQTtBQTJCQSxzQkEzQkE7QUE0QkEsMEJBNUJBO0FBNkJBLG1CQTdCQTtBQThCQSxzQ0E5QkE7QUErQkEsZ0JBL0JBO0FBZ0NBLHdCQWhDQTtBQWlDQTtBQWpDQTtBQW1DQSxHQTVDQTtBQTZDQSxTQTdDQSxxQkE2Q0E7QUFDQSxtR0FEQSxDQUdBOztBQUNBO0FBRUEsaUVBQ0Esb0NBREEsS0FHQTtBQUNBLEdBdkRBO0FBd0RBLFNBeERBLHFCQXdEQTtBQUNBO0FBQ0Esb0JBRkEsQ0FHQTs7QUFDQTtBQUFBO0FBQUEsT0FKQSxDQU1BOztBQUNBLGtDQVBBLENBU0E7O0FBQ0E7QUFDQTtBQUNBLEtBRkEsRUFFQSxFQUZBLENBRUEsZUFGQSxFQUVBO0FBQ0E7QUFDQSxLQUpBLEVBSUEsRUFKQSxDQUlBLGlCQUpBLEVBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBVEEsRUFWQSxDQXFCQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUEsT0FEQTtBQUVBO0FBQUE7QUFBQSxPQUZBO0FBR0Esa0JBSEE7QUFJQSxtQkFKQTtBQUtBO0FBTEEsT0FNQSxJQU5BLENBTUEsUUFOQSxFQU1BLGlCQU5BLEVBeEJBLENBZ0NBOztBQUNBO0FBQ0E7QUFDQSxLQUZBO0FBR0EsR0E1RkE7QUE2RkE7QUFDQTtBQUNBLHNCQURBLENBRUE7O0FBQ0E7QUFFQTtBQUNBLG9DQU5BLENBUUE7O0FBQ0E7QUFDQSxxQ0FWQSxDQVlBOztBQUNBO0FBQ0E7QUFFQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBTkE7QUFPQTtBQUNBLEtBM0JBO0FBNEJBO0FBQ0E7QUFDQSxLQTlCQTtBQStCQTtBQUNBLDRDQUNBO0FBRUE7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQVhBLENBYUE7OztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQUNBLEtBdERBO0FBdURBO0FBRUEsbUdBQ0E7QUFFQTtBQUVBO0FBRUEsMkJBQ0E7QUFFQTtBQUNBLG9DQWJBLENBZUE7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQSxXQUZBO0FBSUE7O0FBRUE7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQWZBO0FBZ0JBLFNBakJBO0FBa0JBLE9BMUNBLE1BMkNBOztBQUVBO0FBQ0E7QUFySEEsR0E3RkE7QUFvTkE7QUFDQTtBQUNBO0FBQ0E7QUFIQSxHQXBOQTtBQXlOQTtBQUNBLGdCQURBLDBCQUNBO0FBQ0E7QUFDQTtBQUVBLDBGQUpBLENBTUE7O0FBQ0EsOENBQ0Esa0NBUkEsQ0FVQTs7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBLG9GQWpCQSxDQW1CQTs7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQSxPQVJBO0FBVUEsS0EvQkE7QUFnQ0Esd0JBaENBLGtDQWdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBcENBO0FBcUNBLG1CQXJDQSwyQkFxQ0EsWUFyQ0EsRUFxQ0EsUUFyQ0EsRUFxQ0EsYUFyQ0EsRUFxQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7O0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBTkE7QUFRQTtBQUNBLE9BWkEsRUFQQSxDQXFCQTs7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLDhFQUNBLElBREEsQ0FDQTtBQUNBO0FBQ0E7QUFDQSxTQUpBLFdBS0E7QUFDQTtBQUNBLFNBUEE7QUFRQSxPQWhCQSxNQWdCQTtBQUNBO0FBQ0E7QUFFQSxLQWhGQTtBQWlGQSxtQkFqRkEsMkJBaUZBLFFBakZBLEVBaUZBLElBakZBLEVBaUZBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBLE9BRkEsTUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBekZBO0FBMEZBLHNCQTFGQSw4QkEwRkEsSUExRkEsRUEwRkE7QUFDQSxnRkFDQTtBQUVBO0FBRUE7QUFDQSxLQWpHQTtBQWtHQSxtQkFsR0EsMkJBa0dBLFlBbEdBLEVBa0dBO0FBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUEseUdBQ0E7QUFDQTs7QUFFQTtBQUNBLDRCQVZBLENBVUE7QUFDQTtBQUNBLGFBZEE7QUFlQSxXQWhCQTtBQWlCQSxTQWxCQSxNQWtCQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQSxLQWpJQTtBQWtJQSxxQkFsSUEsNkJBa0lBLE9BbElBLEVBa0lBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FKQSxFQUpBLENBVUE7O0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FKQSxFQWpCQSxDQXVCQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BSkE7QUFNQTtBQUNBLEtBaktBO0FBa0tBLGtCQWxLQSwwQkFrS0EsUUFsS0EsRUFrS0EsSUFsS0EsRUFrS0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxBO0FBT0E7QUFDQSxLQTdLQTtBQThLQSxlQTlLQSx1QkE4S0EsSUE5S0EsRUE4S0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBLDBCQURBO0FBRUEsOEJBRkE7QUFHQSw4Q0FIQSxDQUdBOztBQUhBO0FBTUEseUJBQ0E7QUFFQSwrQkFDQTtBQUVBO0FBQ0E7QUFFQSxPQXpCQTtBQTJCQTtBQUNBLEtBL01BO0FBZ05BLG1CQWhOQSw2QkFnTkE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBLE9BRkE7QUFJQTtBQUNBLEtBek5BO0FBME5BLDBCQTFOQSxrQ0EwTkEsZ0JBMU5BLEVBME5BO0FBQ0E7QUFFQTtBQUNBO0FBQ0EsT0FGQTtBQUlBO0FBQ0EsS0FsT0E7QUFtT0EsYUFuT0EscUJBbU9BLEdBbk9BLEVBbU9BO0FBQ0E7QUFDQSxLQXJPQTtBQXNPQSxZQXRPQSxvQkFzT0EsR0F0T0EsRUFzT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBLEtBL09BO0FBZ1BBLGNBaFBBLHNCQWdQQSxNQWhQQSxFQWdQQSxJQWhQQSxFQWdQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLHFIQUNBO0FBRUEsZ0hBQ0E7QUFFQSxpQ0FDQTtBQUVBO0FBQ0EsS0EvUEE7QUFnUUEsdUJBaFFBLGlDQWdRQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQSxXQUxBO0FBS0E7QUFMQSxXQUtBLElBTEEsQ0FLQSxVQUxBLEVBS0EsS0FMQTtBQU9BO0FBQ0E7QUFDQSxLQS9RQTtBQWdSQSwwQkFoUkEsb0NBZ1JBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQSxLQWxSQTtBQW1SQSxxQkFuUkEsNkJBbVJBLElBblJBLEVBbVJBLElBblJBLEVBbVJBO0FBQ0EsNEJBQ0E7QUFFQTtBQUNBLEtBeFJBO0FBeVJBLHlCQXpSQSxtQ0F5UkE7QUFDQTtBQUNBLEtBM1JBO0FBNFJBLHFCQTVSQSwrQkE0UkE7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUNBLDhEQURBLElBRUEsOEpBRkEsRUFFQTtBQUNBO0FBQ0E7QUFDQSxXQU5BO0FBT0EsU0FSQTtBQVNBOztBQUNBO0FBRUE7QUFDQSxLQTdTQTtBQThTQSxnQkE5U0Esd0JBOFNBLE1BOVNBLEVBOFNBO0FBQ0E7QUFFQSw0QkFDQSw4QkFEQSxLQUVBLHNCQUNBO0FBQ0EsS0FyVEE7QUFzVEEsa0JBdFRBLDRCQXNUQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHdCQUNBO0FBRUE7QUFDQSxLQW5VQTtBQW9VQSxjQXBVQSx3QkFvVUE7QUFDQTtBQUFBO0FBRUEsOEJBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBblZBO0FBb1ZBLGdDQXBWQSwwQ0FvVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUhBLE1BR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BZEEsRUFjQSxLQWRBO0FBZ0JBO0FBQ0E7QUFDQSxLQXZXQTtBQXdXQSxnQkF4V0Esd0JBd1dBLEtBeFdBLEVBd1dBLEVBeFdBLEVBd1dBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoWEEsR0F6TkE7QUEya0JBO0FBQ0E7QUFDQTtBQUNBLGNBREEsb0JBQ0EsRUFEQSxFQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0EsU0FIQTtBQUtBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBLFNBSEE7QUFJQTtBQVhBO0FBREE7QUE1a0JBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL2Fzc2V0cy9zcmMvanMvZWRpdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gICAgPGRpdiBpZD1cInRycC1lZGl0b3JcIiBjbGFzcz1cIndwLWNvcmUtdWlcIj5cblxuICAgICAgICA8ZGl2IGlkPVwidHJwLWNvbnRyb2xzXCI+XG5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJ0cnAtY2xvc2Utc2F2ZVwiPlxuICAgICAgICAgICAgICAgIDxhIGlkPVwidHJwLWNvbnRyb2xzLWNsb3NlXCIgOmhyZWY9XCJjbG9zZVVSTFwiIDp0aXRsZT1cImVkaXRvclN0cmluZ3MuY2xvc2VcIj48L2E+XG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cInRycC1zYXZlLWFuZC1sb2FkZXItc3Bpbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cnAtYWpheC1sb2FkZXJcIiB2LXNob3c9XCJsb2FkaW5nX3N0cmluZ3MgPiAwXCIgaWQ9XCJ0cnAtc3RyaW5nLXNhdmVkLWFqYXgtbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRycC1zcGlubmVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzYXZlLXRyYW5zbGF0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzZWxlY3RlZEluZGV4ZXNBcnJheT1cInNlbGVjdGVkSW5kZXhlc0FycmF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGljdGlvbmFyeT1cImRpY3Rpb25hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzZXR0aW5ncz1cInNldHRpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bm9uY2VzPVwibm9uY2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YWpheF91cmw9XCJhamF4VXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y3VycmVudExhbmd1YWdlPVwiY3VycmVudExhbmd1YWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6b25TY3JlZW5MYW5ndWFnZT1cIm9uU2NyZWVuTGFuZ3VhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDppZnJhbWU9XCJpZnJhbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjdXJyZW50VVJMPVwiY3VycmVudFVSTFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOm1lcmdpbmdTdHJpbmc9XCJtZXJnaW5nU3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bWVyZ2VEYXRhPVwibWVyZ2VEYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdHJhbnNsYXRpb25zLXNhdmVkPVwic2hvd0NoYW5nZXNVbnNhdmVkTWVzc2FnZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZWRpdG9yU3RyaW5ncz1cImVkaXRvclN0cmluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzdHJpbmdUeXBlcz1cInN0cmluZ1R5cGVzXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L3NhdmUtdHJhbnNsYXRpb25zPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnAtY29udHJvbHMtY29udGFpbmVyXCIgOmNsYXNzPVwieyd0cnAtc2hvdy1lZGl0b3JzLW5hdmlnYXRpb24nIDogZWRpdG9yc05hdmlnYXRpb24uc2hvdyB9XCI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLWNvbnRyb2xzLXNlY3Rpb25cIiBpZD1cInRycC1jb250cm9scy1zZWN0aW9uLWZpcnN0XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRycC1jb250cm9scy1zZWN0aW9uLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0cnAtbGFuZ3VhZ2Utc3dpdGNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD1cInRycC1sYW5ndWFnZS1zZWxlY3RcIiBuYW1lPVwibGFuZ1wiIHYtbW9kZWw9XCJjdXJyZW50TGFuZ3VhZ2VcIiB2LXNlbGVjdDI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1mb3I9XCIobGFuZywgbGFuZ0luZGV4KSBpbiBsYW5ndWFnZU5hbWVzXCIgOnZhbHVlPVwibGFuZ0luZGV4XCI+e3tsYW5nfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidHJwLXN0cmluZy1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD1cInRycC1zdHJpbmctY2F0ZWdvcmllc1wiIHYtbW9kZWw9XCJzZWxlY3RlZFN0cmluZ1wiIHYtc2VsZWN0Mj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGdyb3VwIHYtZm9yPVwiKGdyb3VwKSBpbiBzdHJpbmdHcm91cHNcIiA6bGFiZWw9XCJncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2LWZvcj1cIihzdHJpbmcsIGluZGV4KSBpbiBkaWN0aW9uYXJ5XCIgOnZhbHVlPVwiaW5kZXhcIiB2LWlmPVwic2hvd1N0cmluZyggc3RyaW5nLCBncm91cCApXCIgOnRpdGxlPVwic3RyaW5nLmRlc2NyaXB0aW9uXCIgOmRhdGEtZGF0YWJhc2UtaWQ9XCJzdHJpbmcuZGJJRFwiIDpkYXRhLWdyb3VwPVwic3RyaW5nLmdyb3VwXCI+e3sgcHJvY2Vzc09wdGlvbk5hbWUoIHN0cmluZy5vcmlnaW5hbCwgZ3JvdXAgKSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0cnAtbmV4dC1wcmV2aW91c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwidHJwLXByZXZpb3VzXCIgY2xhc3M9XCJ0cnAtbmV4dC1wcmV2aW91cy1idXR0b25zIGJ1dHRvblwiIHYtb246Y2xpY2s9XCJwcmV2aW91c1N0cmluZygpXCIgOnRpdGxlPVwiZWRpdG9yU3RyaW5ncy5wcmV2aW91c190aXRsZV9hdHRyXCI+PHNwYW4+JmxhcXVvOzwvc3Bhbj4ge3sgZWRpdG9yU3RyaW5ncy5wcmV2aW91cyB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwidHJwLW5leHRcIiBjbGFzcz1cInRycC1uZXh0LXByZXZpb3VzLWJ1dHRvbnMgYnV0dG9uXCIgdi1vbjpjbGljaz1cIm5leHRTdHJpbmcoKVwiIDp0aXRsZT1cImVkaXRvclN0cmluZ3MubmV4dF90aXRsZV9hdHRyXCI+e3sgZWRpdG9yU3RyaW5ncy5uZXh0IH19IDxzcGFuPiZyYXF1bzs8L3NwYW4+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInRycC12aWV3LWFzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInRycC12aWV3LWFzLWRlc2NyaXB0aW9uXCI+e3sgZWRpdG9yU3RyaW5ncy52aWV3X2FzIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD1cInRycC12aWV3LWFzLXNlbGVjdFwiIHYtbW9kZWw9XCJ2aWV3QXNcIiB2LXNlbGVjdDI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1mb3I9XCIocm9sZSwgcm9sZUluZGV4KSBpbiByb2xlc1wiIDp2YWx1ZT1cInJvbGVcIiA6ZGlzYWJsZWQ9XCIhcm9sZVwiIDp0aXRsZT1cIiFyb2xlID8gZWRpdG9yU3RyaW5ncy52aWV3X2FzX3BybyA6ICcnXCI+e3tyb2xlSW5kZXh9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLWNvbnRyb2xzLXNlY3Rpb25cIiB2LXNob3c9XCJzZWxlY3RlZFN0cmluZyAhPT0gbnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFuZ3VhZ2UtYm94ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c2VsZWN0ZWRJbmRleGVzQXJyYXk9XCJzZWxlY3RlZEluZGV4ZXNBcnJheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmRpY3Rpb25hcnk9XCJkaWN0aW9uYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y3VycmVudExhbmd1YWdlPVwiY3VycmVudExhbmd1YWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6b25TY3JlZW5MYW5ndWFnZT1cIm9uU2NyZWVuTGFuZ3VhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpsYW5ndWFnZU5hbWVzPVwibGFuZ3VhZ2VOYW1lc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNldHRpbmdzPVwic2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzaG93Q2hhbmdlc1Vuc2F2ZWRNZXNzYWdlPVwic2hvd0NoYW5nZXNVbnNhdmVkTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRpc2NhcmRlZC1jaGFuZ2VzPVwiaGFzVW5zYXZlZENoYW5nZXMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmVkaXRvclN0cmluZ3M9XCJlZGl0b3JTdHJpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZmxhZ3NQYXRoPVwiZmxhZ3NQYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6aWZyYW1lPVwiaWZyYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bm9uY2VzPVwibm9uY2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YWpheF91cmw9XCJhamF4VXJsXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L2xhbmd1YWdlLWJveGVzPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGV4dHJhLWNvbnRlbnQgOmxhbmd1YWdlTmFtZXM9XCJsYW5ndWFnZU5hbWVzXCIgOmVkaXRvclN0cmluZ3M9XCJlZGl0b3JTdHJpbmdzXCIgOnBhaWRWZXJzaW9uPVwicGFpZFZlcnNpb25cIj48L2V4dHJhLWNvbnRlbnQ+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLWNvbnRyb2xzLXNlY3Rpb25cIiB2LXNob3c9XCJ0cmFuc2xhdGlvbk5vdExvYWRlZFlldFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidHJwLXRyYW5zbGF0aW9uLW5vdC1yZWFkeS1zZWN0aW9uXCIgY2xhc3M9XCJ0cnAtY29udHJvbHMtc2VjdGlvbi1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCB2LWh0bWw9XCJlZGl0b3JTdHJpbmdzLnRyYW5zbGF0aW9uX25vdF9sb2FkZWRfeWV0XCI+PC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZWRpdG9ycy1uYXZpZ2F0aW9uIDplZGl0b3JzTmF2aWdhdGlvbj1cImVkaXRvcnNOYXZpZ2F0aW9uXCIgOnNlbGVjdGVkVGFiPVwiJ3Zpc3VhbGVkaXRvcidcIj48L2VkaXRvcnMtbmF2aWdhdGlvbj5cblxuICAgICAgICAgICAgPGRpdiBpZD1cInRycF9zZWxlY3QyX292ZXJsYXlcIj48L2Rpdj5cblxuICAgICAgICAgICAgPGhvdmVyLWFjdGlvbnNcbiAgICAgICAgICAgICAgICByZWY9XCJob3ZlckFjdGlvbnNcIlxuICAgICAgICAgICAgICAgIDpkaWN0aW9uYXJ5PVwiZGljdGlvbmFyeVwiXG4gICAgICAgICAgICAgICAgOnNldHRpbmdzPVwic2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgIDppZnJhbWU9XCJpZnJhbWVcIlxuICAgICAgICAgICAgICAgIDpkYXRhQXR0cmlidXRlcz1cImRhdGFBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICA6bWVyZ2VSdWxlcz1cIm1lcmdlUnVsZXNcIlxuICAgICAgICAgICAgICAgIDpub25jZXM9XCJub25jZXNcIlxuICAgICAgICAgICAgICAgIDphamF4X3VybD1cImFqYXhVcmxcIlxuICAgICAgICAgICAgICAgIDptZXJnZURhdGE9XCJtZXJnZURhdGFcIlxuICAgICAgICAgICAgICAgIDplZGl0b3JTdHJpbmdzPVwiZWRpdG9yU3RyaW5nc1wiXG4gICAgICAgICAgICAgICAgOmN1cnJlbnRMYW5ndWFnZT1cImN1cnJlbnRMYW5ndWFnZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2hvdmVyLWFjdGlvbnM+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgaWQ9XCJ0cnAtcHJldmlld1wiPlxuICAgICAgICAgICAgPGlmcmFtZSBpZD1cInRycC1wcmV2aWV3LWlmcmFtZVwiIDpzcmM9XCJ1cmxUb0xvYWRcIiB2LW9uOmxvYWQ9XCJpRnJhbWVMb2FkZWRcIj48L2lmcmFtZT5cblxuICAgICAgICAgICAgPGRpdiBpZD1cInRycC1wcmV2aWV3LWxvYWRlclwiIGNsYXNzPVwidHJwLWxvYWRpbmctc2NyZWVuXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInRycC1sb2FkZXJcIiB3aWR0aD1cIjY1cHhcIiBoZWlnaHQ9XCI2NXB4XCIgdmlld0JveD1cIjAgMCA2NiA2NlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz1cInRycC1jaXJjbGVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgY3g9XCIzM1wiIGN5PVwiMzNcIiByPVwiMzBcIj48L2NpcmNsZT5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gICAgaW1wb3J0ICdzZWxlY3QyL2Rpc3QvanMvc2VsZWN0Mi5taW4uanMnXG4gICAgaW1wb3J0IHV0aWxzICAgICAgICAgICAgZnJvbSAnLi91dGlscydcbiAgICBpbXBvcnQgYXhpb3MgICAgICAgICAgICBmcm9tICdheGlvcydcbiAgICBpbXBvcnQgbGFuZ3VhZ2VCb3hlcyAgICBmcm9tICcuL2NvbXBvbmVudHMvbGFuZ3VhZ2UtYm94ZXMudnVlJ1xuICAgIGltcG9ydCBzYXZlVHJhbnNsYXRpb25zIGZyb20gJy4vY29tcG9uZW50cy9zYXZlLXRyYW5zbGF0aW9ucy52dWUnXG4gICAgaW1wb3J0IGhvdmVyQWN0aW9ucyAgICAgZnJvbSAnLi9jb21wb25lbnRzL2hvdmVyLWFjdGlvbnMudnVlJ1xuICAgIGltcG9ydCBleHRyYUNvbnRlbnQgICAgIGZyb20gJy4vY29tcG9uZW50cy9leHRyYS1jb250ZW50LnZ1ZSdcbiAgICBpbXBvcnQgZWRpdG9yc05hdmlnYXRpb24gICAgIGZyb20gJy4vY29tcG9uZW50cy9lZGl0b3JzLW5hdmlnYXRpb24udnVlJ1xuICAgIGltcG9ydCBoZSAgICAgICAgICAgICAgIGZyb20gJ2hlJ1xuXG4gICAgZXhwb3J0IGRlZmF1bHQge1xuICAgICAgICBjb21wb25lbnRzOntcbiAgICAgICAgICAgIGxhbmd1YWdlQm94ZXMsXG4gICAgICAgICAgICBzYXZlVHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgaG92ZXJBY3Rpb25zLFxuICAgICAgICAgICAgZXh0cmFDb250ZW50LFxuICAgICAgICAgICAgZWRpdG9yc05hdmlnYXRpb25cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YSgpe1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAvL3Byb3BzXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MgICAgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS50cnBfc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VOYW1lcyAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5sYW5ndWFnZV9uYW1lcyxcbiAgICAgICAgICAgICAgICBvcmRlcmVkU2Vjb25kYXJ5TGFuZ3VhZ2VzIDogdHJwX2VkaXRvcl9kYXRhLm9yZGVyZWRfc2Vjb25kYXJ5X2xhbmd1YWdlcyxcbiAgICAgICAgICAgICAgICByb2xlcyAgICAgICAgICAgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLnZpZXdfYXNfcm9sZXMsXG4gICAgICAgICAgICAgICAgbm9uY2VzICAgICAgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5lZGl0b3Jfbm9uY2VzLFxuICAgICAgICAgICAgICAgIHN0cmluZ0dyb3VwT3JkZXIgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuc3RyaW5nX2dyb3VwX29yZGVyLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9ycyAgICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuc3RyaW5nX3NlbGVjdG9ycyxcbiAgICAgICAgICAgICAgICBzdHJpbmdUeXBlcyAgICAgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLnN0cmluZ190eXBlcyxcbiAgICAgICAgICAgICAgICBkYXRhQXR0cmlidXRlcyAgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLmRhdGFfYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICBtZXJnZVJ1bGVzICAgICAgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLm1lcmdlX3J1bGVzLFxuICAgICAgICAgICAgICAgIGVkaXRvcnNOYXZpZ2F0aW9uICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuZWRpdG9yc19uYXZpZ2F0aW9uLFxuICAgICAgICAgICAgICAgIGVkaXRvclN0cmluZ3MgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEudHJwX2xvY2FsaXplZF9zdHJpbmdzLFxuICAgICAgICAgICAgICAgIGZsYWdzUGF0aCAgICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuZmxhZ3NfcGF0aCxcbiAgICAgICAgICAgICAgICAvL2RhdGFcbiAgICAgICAgICAgICAgICBjdXJyZW50TGFuZ3VhZ2UgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLmN1cnJlbnRfbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgb25TY3JlZW5MYW5ndWFnZSAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5vbl9zY3JlZW5fbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgY3VycmVudFVSTCAgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS51cmxfdG9fbG9hZCxcbiAgICAgICAgICAgICAgICB1cmxUb0xvYWQgICAgICAgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLnVybF90b19sb2FkLFxuICAgICAgICAgICAgICAgIGFqYXhVcmwgICAgICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuYWpheF91cmwsXG4gICAgICAgICAgICAgICAgcGFpZFZlcnNpb24gICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5wYWlkX3ZlcnNpb24sXG4gICAgICAgICAgICAgICAgaWZyYW1lICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgIGRpY3Rpb25hcnkgICAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFN0cmluZyAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEluZGV4ZXNBcnJheSAgICAgIDogW10sXG4gICAgICAgICAgICAgICAgZGV0ZWN0ZWRTZWxlY3RvckFuZElkICAgICA6IFtdLFxuICAgICAgICAgICAgICAgIHN0cmluZ0dyb3VwcyAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICAgICAgICBtZXJnaW5nU3RyaW5nICAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbWVyZ2VEYXRhICAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgIHNob3dDaGFuZ2VzVW5zYXZlZE1lc3NhZ2UgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2aWV3QXMgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgbG9hZGluZ19zdHJpbmdzICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb25Ob3RMb2FkZWRZZXQgICA6IGZhbHNlLFxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVkKCl7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzWydkZWZhdWx0LWxhbmd1YWdlLW5hbWUnXSA9IHRoaXMubGFuZ3VhZ2VOYW1lc1sgdGhpcy5zZXR0aW5nc1snZGVmYXVsdC1sYW5ndWFnZSddIF1cblxuICAgICAgICAgICAgLy9zZXQgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIFZpZXcgQXMgc2VsZWN0XG4gICAgICAgICAgICBsZXQgcGFyYW1zID0gdXRpbHMuZ2V0VXJsUGFyYW1ldGVycyggdGhpcy5jdXJyZW50VVJMIClcblxuICAgICAgICAgICAgaWYoIE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoID4gMSAmJiBwYXJhbXNbJ3RycC12aWV3LWFzJ10gKVxuICAgICAgICAgICAgICAgIHRoaXMudmlld0FzID0gcGFyYW1zWyd0cnAtdmlldy1hcyddXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3QXMgPSAnY3VycmVudF91c2VyJ1xuICAgICAgICB9LFxuICAgICAgICBtb3VudGVkKCl7XG4gICAgICAgICAgICB0aGlzLmFkZEtleWJvYXJkU2hvcnRjdXRzTGlzdGVuZXIoKVxuICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzXG4gICAgICAgICAgICAvLyBpbml0aWFsaXplIHNlbGVjdDJcbiAgICAgICAgICAgIGpRdWVyeSggJyN0cnAtbGFuZ3VhZ2Utc2VsZWN0LCAjdHJwLXZpZXctYXMtc2VsZWN0JyApLnNlbGVjdDIoIHsgd2lkdGggOiAnMTAwJScgfSlcblxuICAgICAgICAgICAgLy9pbml0IHN0cmluZ3MgZHJvcGRvd25cbiAgICAgICAgICAgIHRoaXMuc3RyaW5nc0Ryb3Bkb3duTG9hZGluZygpXG5cbiAgICAgICAgICAgIC8vIHNob3cgb3ZlcmxheSB3aGVuIHNlbGVjdCBpcyBvcGVuZWRcbiAgICAgICAgICAgIGpRdWVyeSggJyN0cnAtbGFuZ3VhZ2Utc2VsZWN0LCAjdHJwLXN0cmluZy1jYXRlZ29yaWVzJyApLm9uKCAnc2VsZWN0MjpvcGVuJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgalF1ZXJ5KCAnI3RycF9zZWxlY3QyX292ZXJsYXknICkuZmFkZUluKCAnMTAwJyApXG4gICAgICAgICAgICB9KS5vbiggJ3NlbGVjdDI6Y2xvc2UnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBqUXVlcnkoICcjdHJwX3NlbGVjdDJfb3ZlcmxheScgKS5oaWRlKClcbiAgICAgICAgICAgIH0pLm9uKCAnc2VsZWN0MjpvcGVuaW5nJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIC8qIHdoZW4gd2UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgcHJldmVudCB0aGUgc3RyaW5ncyBkcm9wZG93biBmcm9tIG9wZW5pbmcgc28gd2UgZG8gbm90IGhhdmUgYSBkaXNjb25uZWN0IGJldHdlZW4gdGhlIHRleHRhcmVhcyBhbmQgdGhlIGRyb3Bkb3duICovXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuaGFzVW5zYXZlZENoYW5nZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAvLyByZXNpemUgc2lkZWJhciBhbmQgY29uc2VxdWVudGx5IHRoZSBpZnJhbWVcbiAgICAgICAgICAgIGxldCBwcmV2aWV3Q29udGFpbmVyID0galF1ZXJ5KCAnI3RycC1wcmV2aWV3JyApO1xuICAgICAgICAgICAgbGV0IHRvdGFsX3dpZHRoID0galF1ZXJ5KHdpbmRvdykud2lkdGgoKTtcbiAgICAgICAgICAgIGpRdWVyeSggJyN0cnAtY29udHJvbHMnICkucmVzaXphYmxlKHtcbiAgICAgICAgICAgICAgICBzdGFydDogZnVuY3Rpb24oICkgeyBwcmV2aWV3Q29udGFpbmVyLnRvZ2dsZSgpOyB9LFxuICAgICAgICAgICAgICAgIHN0b3A6IGZ1bmN0aW9uKCApIHsgcHJldmlld0NvbnRhaW5lci50b2dnbGUoKTsgfSxcbiAgICAgICAgICAgICAgICBoYW5kbGVzOiAnZScsXG4gICAgICAgICAgICAgICAgbWluV2lkdGg6IDMyNyxcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogdG90YWxfd2lkdGggLSAyMFxuICAgICAgICAgICAgfSkuYmluZCggXCJyZXNpemVcIiwgdGhpcy5yZXNpemVJZnJhbWUgKTtcblxuICAgICAgICAgICAgLy8gcmVzaXplIGlmcmFtZSB3aGVuIHJlc2l6aW5nIHdpbmRvd1xuICAgICAgICAgICAgalF1ZXJ5KCB3aW5kb3cgKS5yZXNpemUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHNlbGYucmVzaXplSWZyYW1lKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgd2F0Y2g6IHtcbiAgICAgICAgICAgIGN1cnJlbnRMYW5ndWFnZTogZnVuY3Rpb24oIGN1cnJlbnRMYW5ndWFnZSApIHtcbiAgICAgICAgICAgICAgICBsZXQgc2VsZiA9IHRoaXNcbiAgICAgICAgICAgICAgICAvL2dyYWIgdGhlIGNvcnJlY3QgVVJMIGZyb20gdGhlIGlGcmFtZVxuICAgICAgICAgICAgICAgIGxldCBuZXdVUkwgPSB0aGlzLmlmcmFtZS5xdWVyeVNlbGVjdG9yKCAnbGlua1tocmVmbGFuZz1cIicgKyBjdXJyZW50TGFuZ3VhZ2UucmVwbGFjZSggJ18nLCAnLScgKSArJ1wiXScgKS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKVxuXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VVJMICAgICAgICAgICA9IG5ld1VSTFxuICAgICAgICAgICAgICAgIHRoaXMuaWZyYW1lLmxvY2F0aW9uICAgICAgPSBuZXdVUkxcblxuICAgICAgICAgICAgICAgIC8vcmVzZXQgdnVlIHByb3BzXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN0cmluZyAgICAgICA9ICcnXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ZXNBcnJheSA9IFtdXG5cbiAgICAgICAgICAgICAgICAvL3NldCBzdHJpbmdzIGRyb3Bkb3duIHRvIGxvYWRpbmcgc3RhdGVcbiAgICAgICAgICAgICAgICBqUXVlcnkoJyN0cnAtc3RyaW5nLWNhdGVnb3JpZXMnKS52YWwoJycpLnRyaWdnZXIoJ2NoYW5nZScpXG4gICAgICAgICAgICAgICAgdGhpcy5zdHJpbmdzRHJvcGRvd25Mb2FkaW5nKClcblxuICAgICAgICAgICAgICAgIHRoaXMub25TY3JlZW5MYW5ndWFnZSA9IGN1cnJlbnRMYW5ndWFnZVxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLnNldHRpbmdzWydkZWZhdWx0LWxhbmd1YWdlJ10gPT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2UgJiYgdGhpcy5zZXR0aW5nc1sndHJhbnNsYXRpb24tbGFuZ3VhZ2VzJ10ubGVuZ3RoID4gMSApe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzWyd0cmFuc2xhdGlvbi1sYW5ndWFnZXMnXS5zb21lKGZ1bmN0aW9uKGxhbmd1YWdlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbGFuZ3VhZ2UgIT0gc2VsZi5zZXR0aW5nc1snZGVmYXVsdC1sYW5ndWFnZSddICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSBmaXJzdCBsYW5ndWFnZSBub3QgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25TY3JlZW5MYW5ndWFnZSA9IGxhbmd1YWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY3VycmVudFVSTDogZnVuY3Rpb24gKCBuZXdVcmwsIG9sZFVybCApIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoIG51bGwsIG51bGwsIHRoaXMucGFyZW50VVJMKCBuZXdVcmwgKSApXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmlld0FzOiBmdW5jdGlvbiggcm9sZSApIHtcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMuY3VycmVudFVSTCB8fCAhdGhpcy5pZnJhbWUgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cblxuICAgICAgICAgICAgICAgIGxldCB1cmwgPSB0aGlzLmNsZWFuVVJMKCB0aGlzLmN1cnJlbnRVUkwgKVxuXG4gICAgICAgICAgICAgICAgdXJsID0gdXRpbHMudXBkYXRlVXJsUGFyYW1ldGVyKCB1cmwsICd0cnAtZWRpdC10cmFuc2xhdGlvbicsICdwcmV2aWV3JyApXG5cbiAgICAgICAgICAgICAgICBpZiggcm9sZSA9PSAnY3VycmVudF91c2VyJyApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pZnJhbWUubG9jYXRpb24gPSB1cmxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy9pZiBub25jZSBub3QgYXZhaWxhYmxlLCBhbiB1cGRhdGUgdG8gdGhlIEJyb3dzZSBhcyBPdGhlciBSb2xlcyBhZGQtb24gaXMgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICBpZiggIXRoaXMubm9uY2VzW3JvbGVdICkge1xuICAgICAgICAgICAgICAgICAgICBhbGVydCggdGhpcy5lZGl0b3JTdHJpbmdzLmJvcl91cGRhdGVfbm90aWNlIClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdXJsID0gdXRpbHMudXBkYXRlVXJsUGFyYW1ldGVyKCB1cmwsICd0cnAtdmlldy1hcycsIHJvbGUgKVxuICAgICAgICAgICAgICAgIHVybCA9IHV0aWxzLnVwZGF0ZVVybFBhcmFtZXRlciggdXJsLCAndHJwLXZpZXctYXMtbm9uY2UnLCB0aGlzLm5vbmNlc1tyb2xlXSApXG5cbiAgICAgICAgICAgICAgICB0aGlzLmlmcmFtZS5sb2NhdGlvbiA9IHVybFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbGVjdGVkU3RyaW5nOiBmdW5jdGlvbiAoIHNlbGVjdGVkU3RyaW5nQXJyYXlJbmRleCwgb2xkU3RyaW5nICl7XG5cbiAgICAgICAgICAgICAgICBpZiggdGhpcy5oYXNVbnNhdmVkQ2hhbmdlcygpIHx8ICggIXNlbGVjdGVkU3RyaW5nQXJyYXlJbmRleCAmJiBzZWxlY3RlZFN0cmluZ0FycmF5SW5kZXggIT09IDAgKSApXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgICAgICAgICAgalF1ZXJ5KCAnI3RycC1zdHJpbmctY2F0ZWdvcmllcycgKS52YWwoIHNlbGVjdGVkU3RyaW5nQXJyYXlJbmRleCAhPT0gbnVsbCA/IHNlbGVjdGVkU3RyaW5nQXJyYXlJbmRleCA6ICcnICkudHJpZ2dlciggJ2NoYW5nZScgKVxuXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkU3RyaW5nICAgICAgID0gdGhpcy5kaWN0aW9uYXJ5W3NlbGVjdGVkU3RyaW5nQXJyYXlJbmRleF1cblxuICAgICAgICAgICAgICAgIGlmKCAhc2VsZWN0ZWRTdHJpbmcgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cblxuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50Tm9kZSAgICAgICAgICA9IHRoaXMuaWZyYW1lLnF1ZXJ5U2VsZWN0b3IoIFwiW1wiICsgc2VsZWN0ZWRTdHJpbmcuc2VsZWN0b3IgKyBcIj0nXCIgKyBzZWxlY3RlZFN0cmluZy5kYklEICsgXCInXVwiKVxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZEluZGV4ZXNBcnJheSA9IFtdXG5cbiAgICAgICAgICAgICAgICAvL3doZW4gbWVyZ2luZyB3ZSBkbyBub3QgaGF2ZSBhIHZhbGlkIGN1cnJlbnQgbm9kZSwgc28gd2UganVzdCBhZGQgdGhlIGZha2UgaWRcbiAgICAgICAgICAgICAgICBpZiggY3VycmVudE5vZGUgKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xuICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0b3JzID0gc2VsZi5nZXRBbGxTZWxlY3RvcnMoKVxuICAgICAgICAgICAgICAgICAgICBsZXQgbm9kZXMgPSBbXVxuXG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2goIGN1cnJlbnROb2RlIClcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIGN1cnJlbnROb2RlLnRhZ05hbWUgIT0gXCJBXCIgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGUgdGhlIGFuY2hvcidzIHRyYW5zbGF0YWJsZSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYW5jaG9yUGFyZW50ICA9IGN1cnJlbnROb2RlLmNsb3Nlc3QoJ2EnKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoICBhbmNob3JQYXJlbnQgIT0gbnVsbCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKGFuY2hvclBhcmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICggY3VycmVudE5vZGUudGFnTmFtZSA9PSBcIkFcIiAmJiBjdXJyZW50Tm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmNsdWRlIGFsbCB0aGUgdHJhbnNsYXRhYmxlIGF0dHJpYnV0ZXMgaW5zaWRlIHRoZSBhbmNob3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbkFycmF5ID0gWyAuLi5jdXJyZW50Tm9kZS5jaGlsZHJlbiBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5BcnJheS5mb3JFYWNoKCBmdW5jdGlvbiAoIGNoaWxkICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2goY2hpbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBub2Rlcy5mb3JFYWNoKCBmdW5jdGlvbiggbm9kZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHJpbmdJZCA9IG5vZGUuZ2V0QXR0cmlidXRlKHNlbGVjdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmdJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoIGkgPSAwOyBpIDwgc2VsZWN0ZWRJbmRleGVzQXJyYXkubGVuZ3RoOyBpKysgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHNlbGYuZGljdGlvbmFyeVtzZWxlY3RlZEluZGV4ZXNBcnJheVtpXV0gIT09ICd1bmRlZmluZWQnICYmIHNlbGYuZGljdGlvbmFyeVtzZWxlY3RlZEluZGV4ZXNBcnJheVtpXV0uZGJJRCAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5kaWN0aW9uYXJ5W3NlbGVjdGVkSW5kZXhlc0FycmF5W2ldXS5kYklEID09PSBzdHJpbmdJZCApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISBmb3VuZCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSW5kZXhlc0FycmF5LnB1c2goc2VsZi5nZXRTdHJpbmdJbmRleChzZWxlY3Rvciwgc3RyaW5nSWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJbmRleGVzQXJyYXkucHVzaCggc2VsZWN0ZWRTdHJpbmdBcnJheUluZGV4IClcblxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleGVzQXJyYXkgPSBzZWxlY3RlZEluZGV4ZXNBcnJheVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29tcHV0ZWQ6IHtcbiAgICAgICAgICAgIGNsb3NlVVJMOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhblVSTCggdGhpcy5jdXJyZW50VVJMIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgaUZyYW1lTG9hZGVkKCl7XG4gICAgICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzXG4gICAgICAgICAgICAgICAgbGV0IGlmcmFtZUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjdHJwLXByZXZpZXctaWZyYW1lJylcblxuICAgICAgICAgICAgICAgIHRoaXMuaWZyYW1lID0gaWZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1lbnQgfHwgaWZyYW1lRWxlbWVudC5jb250ZW50V2luZG93LmRvY3VtZW50XG5cbiAgICAgICAgICAgICAgICAvL3N5bmMgaUZyYW1lIFVSTCB3aXRoIHBhcmVudFxuICAgICAgICAgICAgICAgIGlmICggdGhpcy5jdXJyZW50VVJMICE9IHRoaXMuaWZyYW1lLlVSTCApXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFVSTCA9IHRoaXMuaWZyYW1lLlVSTFxuXG4gICAgICAgICAgICAgICAgLy9oaWRlIGlGcmFtZSBsb2FkZXJcbiAgICAgICAgICAgICAgICB0aGlzLmlmcmFtZUxvYWRlciggJ2hpZGUnIClcblxuICAgICAgICAgICAgICAgIHNlbGYuZGV0ZWN0ZWRTZWxlY3RvckFuZElkID0gW11cbiAgICAgICAgICAgICAgICBzZWxmLmRpY3Rpb25hcnkgICAgICAgICAgICA9IFtdXG4gICAgICAgICAgICAgICAgdGhpcy5zY2FuSWZyYW1lRm9yU3RyaW5ncygpXG5cbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ3RycF9pZnJhbWVfcGFnZV91cGRhdGVkJywgdGhpcy5zY2FuSWZyYW1lRm9yU3RyaW5ncyApXG5cbiAgICAgICAgICAgICAgICAvL2V2ZW50IHRoYXQgaXMgZmlyZWQgd2hlbiB0aGUgaUZyYW1lIGlzIG5hdmlnYXRlZFxuICAgICAgICAgICAgICAgIGlmcmFtZUVsZW1lbnQuY29udGVudFdpbmRvdy5vbmJlZm9yZXVubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmlmcmFtZUxvYWRlciggJ3Nob3cnIClcblxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkU3RyaW5nID0gbnVsbFxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkSW5kZXhlc0FycmF5ID0gW11cbiAgICAgICAgICAgICAgICAgICAgc2VsZi50cmFuc2xhdGlvbk5vdExvYWRlZFlldCA9IGZhbHNlXG5cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJpbmdzRHJvcGRvd25Mb2FkaW5nKClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzY2FuSWZyYW1lRm9yU3RyaW5ncygpe1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbkZvclNlbGVjdG9yKCAnZGF0YS10cnAtdHJhbnNsYXRlLWlkJywgJ3JlZ3VsYXInLCB0aGlzLm9uU2NyZWVuTGFuZ3VhZ2UgKVxuICAgICAgICAgICAgICAgIHRoaXMuc2NhbkZvclNlbGVjdG9yKCAnZGF0YS10cnBnZXR0ZXh0b3JpZ2luYWwnLCAnZ2V0dGV4dCcsIHRoaXMuY3VycmVudExhbmd1YWdlIClcbiAgICAgICAgICAgICAgICB0aGlzLnNjYW5Gb3JTZWxlY3RvciggJ2RhdGEtdHJwLXBvc3Qtc2x1ZycsICdwb3N0c2x1ZycsIHRoaXMuY3VycmVudExhbmd1YWdlIClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzY2FuRm9yU2VsZWN0b3IoIGJhc2VTZWxlY3RvciwgdHlwZVNsdWcsIGxhbmd1YWdlT2ZJZHMgKXtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdfc3RyaW5ncysrXG4gICAgICAgICAgICAgICAgbGV0IHNlbGYgICAgICAgICAgID0gdGhpc1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RvcnMgICAgICA9IHRoaXMucHJlcGFyZVNlbGVjdG9yU3RyaW5ncyggYmFzZVNlbGVjdG9yIClcbiAgICAgICAgICAgICAgICBsZXQgbm9kZXMgICAgICAgICAgPSBbLi4udGhpcy5pZnJhbWUucXVlcnlTZWxlY3RvckFsbCggJ1snICsgc2VsZWN0b3JzLmpvaW4oJ10sWycpICsgJ10nICldXG4gICAgICAgICAgICAgICAgbGV0IHN0cmluZ0lkc0FycmF5ID0gW10sIG5vZGVEYXRhID0gW10sIG5vZGVFbnRyaWVzID0gW11cblxuICAgICAgICAgICAgICAgIG5vZGVzLmZvckVhY2goIGZ1bmN0aW9uICggbm9kZSApe1xuICAgICAgICAgICAgICAgICAgICBub2RlRW50cmllcyA9IHNlbGYuZ2V0Tm9kZUluZm8oIG5vZGUsIGJhc2VTZWxlY3RvciApXG5cbiAgICAgICAgICAgICAgICAgICAgbm9kZUVudHJpZXMuZm9yRWFjaCggZnVuY3Rpb24oIGVudHJ5ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBjaGVjayBlbnN1cmVzIHRoYXQgd2UgZG9uJ3QgY3JlYXRlIGR1cGxpY2F0ZXMgd2hlbiByZXNjYW5uaW5nIGFmdGVyIGFqYXggY29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXNlbGYuYWxyZWFkeURldGVjdGVkKCBlbnRyeS5zZWxlY3RvciwgZW50cnkuZGJJRCApICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0lkc0FycmF5LnB1c2goZW50cnkuZGJJRClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlRGF0YS5wdXNoKGVudHJ5KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0dXBFdmVudExpc3RlbmVyKCBub2RlIClcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgLy91bmlxdWUgaWRzIG9ubHlcbiAgICAgICAgICAgICAgICBzdHJpbmdJZHNBcnJheSA9IFsuLi5uZXcgU2V0KHN0cmluZ0lkc0FycmF5KV1cbiAgICAgICAgICAgICAgICBpZiAoIHN0cmluZ0lkc0FycmF5Lmxlbmd0aCA+IDAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ2FjdGlvbicgICAgICAgLCAndHJwX2dldF90cmFuc2xhdGlvbnNfJyArIHR5cGVTbHVnKVxuICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgnYWxsX2xhbmd1YWdlcycsICd0cnVlJylcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ3NlY3VyaXR5JyAgICAgLCB0aGlzLm5vbmNlc1snZ2V0dHJhbnNsYXRpb25zbm9uY2UnICsgdHlwZVNsdWddKVxuICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgnbGFuZ3VhZ2UnICAgICAsIGxhbmd1YWdlT2ZJZHMpXG4gICAgICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdzdHJpbmdfaWRzJyAgICwgSlNPTi5zdHJpbmdpZnkoc3RyaW5nSWRzQXJyYXkpKVxuXG4gICAgICAgICAgICAgICAgICAgIGF4aW9zLnBvc3QodGhpcy5hamF4VXJsLCBkYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkaW5nX3N0cmluZ3MtLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkVG9EaWN0aW9uYXJ5KHJlc3BvbnNlLmRhdGEsIG5vZGVEYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkaW5nX3N0cmluZ3MtLVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFscmVhZHlEZXRlY3RlZCggc2VsZWN0b3IsIGRiSWQgKXtcbiAgICAgICAgICAgICAgICBsZXQgY29tYmluZWQgPSBzZWxlY3RvciArICc9JyArIGRiSWRcbiAgICAgICAgICAgICAgICBpZiAoIHV0aWxzLmFycmF5Q29udGFpbnNJdGVtKCB0aGlzLmRldGVjdGVkU2VsZWN0b3JBbmRJZCwgY29tYmluZWQgKSApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0ZWN0ZWRTZWxlY3RvckFuZElkLnB1c2goY29tYmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXR1cEV2ZW50TGlzdGVuZXIoIG5vZGUgKXtcbiAgICAgICAgICAgICAgICBpZiAoIG5vZGUudGFnTmFtZSA9PSAnQScgJiYgIW5vZGUuaGFzQXR0cmlidXRlKCAnZGF0YS10cnBnZXR0ZXh0b3JpZ2luYWwnICkgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcblxuICAgICAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xuXG4gICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCAnbW91c2VlbnRlcicsIHNlbGYuJHJlZnMuaG92ZXJBY3Rpb25zLnNob3dQZW5jaWxJY29uIClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZGRUb0RpY3Rpb25hcnkoIHJlc3BvbnNlRGF0YSwgbm9kZUluZm8gPSBudWxsICl7XG4gICAgICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzXG5cbiAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlRGF0YSAhPSBudWxsICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGVJbmZvICl7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5mby5mb3JFYWNoKGZ1bmN0aW9uICggaW5mb1JvdywgaW5kZXggKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZURhdGEuc29tZSggZnVuY3Rpb24gKCByZXNwb25zZURhdGFSb3cgKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbmZvUm93LmRiSUQgPT0gcmVzcG9uc2VEYXRhUm93LmRiSUQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2JyaW5nIGJsb2NrX3R5cGUgdG8gdGhlIHRvcCBsZXZlbCBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2VEYXRhUm93LnR5cGUgIT0gJ2dldHRleHQnICYmIHR5cGVvZiByZXNwb25zZURhdGFSb3cuYmxvY2tfdHlwZSA9PSAndW5kZWZpbmVkJyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlyc3RMYW5ndWFnZSA9IHNlbGYub3JkZXJlZFNlY29uZGFyeUxhbmd1YWdlc1swXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgcmVzcG9uc2VEYXRhUm93LnRyYW5zbGF0aW9uc0FycmF5W2ZpcnN0TGFuZ3VhZ2VdLmJsb2NrX3R5cGUgIT0gJ3VuZGVmaW5lZCcgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZURhdGFSb3cuYmxvY2tfdHlwZSA9IHJlc3BvbnNlRGF0YVJvdy50cmFuc2xhdGlvbnNBcnJheVtmaXJzdExhbmd1YWdlXS5ibG9ja190eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmZvW2luZGV4XSA9IE9iamVjdC5hc3NpZ24oIHt9LCByZXNwb25zZURhdGFSb3csIGluZm9Sb3cgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWUgLy8gYSBzb3J0IG9mIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5mbyA9IHJlc3BvbnNlRGF0YVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJpbmdHcm91cHMgPSB0aGlzLmFkZFRvU3RyaW5nR3JvdXBzKCBub2RlSW5mbyApXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdGlvbmFyeSA9IHRoaXMuZGljdGlvbmFyeS5jb25jYXQoIG5vZGVJbmZvIClcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRTdHJpbmdzRHJvcGRvd24oKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZGRUb1N0cmluZ0dyb3Vwcyggc3RyaW5ncyApe1xuXG4gICAgICAgICAgICAgICAgLy8gc2VlIHdoYXQgbm9kZSBncm91cHMgYXJlIGZvdW5kXG4gICAgICAgICAgICAgICAgbGV0IGZvdW5kU3RyaW5nR3JvdXBzID0gdGhpcy5zdHJpbmdHcm91cHM7XG4gICAgICAgICAgICAgICAgc3RyaW5ncy5mb3JFYWNoKCBmdW5jdGlvbiAoIHN0cmluZyApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBmb3VuZFN0cmluZ0dyb3Vwcy5pbmRleE9mKCBzdHJpbmcuZ3JvdXAgKSA9PT0gLTEgJiYgKCAoIHR5cGVvZiBzdHJpbmcuYmxvY2tUeXBlID09PSAndW5kZWZpbmVkJyApIHx8IHN0cmluZy5ibG9ja1R5cGUgIT09ICcyJyApICl7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZFN0cmluZ0dyb3Vwcy5wdXNoKCBzdHJpbmcuZ3JvdXAgKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIC8vIHB1dCB0aGUgbm9kZSBncm91cHMgaW4gdGhlIG9yZGVyIHRoYXQgd2Ugd2FudCwgYWNjb3JkaW5nIHRvIHRoZSBwcm9wIHRoaXMuc3RyaW5nR3JvdXBPcmRlclxuICAgICAgICAgICAgICAgIGxldCBvcmRlcmVkU3RyaW5nR3JvdXBzID0gW107XG5cbiAgICAgICAgICAgICAgICBpZiAoIHRoaXMuZWRpdG9yU3RyaW5ncy5zZW9fdXBkYXRlX25vdGljZSAhPSAnc2VvX3BhY2tfdXBkYXRlX25vdF9uZWVkZWQnICl7XG4gICAgICAgICAgICAgICAgICAgIG9yZGVyZWRTdHJpbmdHcm91cHMucHVzaCggdGhpcy5lZGl0b3JTdHJpbmdzLnNlb191cGRhdGVfbm90aWNlICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zdHJpbmdHcm91cE9yZGVyLmZvckVhY2goIGZ1bmN0aW9uKCBncm91cCApe1xuICAgICAgICAgICAgICAgICAgICBpZiAoIGZvdW5kU3RyaW5nR3JvdXBzLmluZGV4T2YoIGdyb3VwICkgIT09IC0xICl7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmVkU3RyaW5nR3JvdXBzLnB1c2goIGdyb3VwIClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSB3ZXJlIGFueSBvdGhlciBzdHJpbmcgZ3JvdXBzIHRoYXQgd2VyZSBub3QgaW4gdGhlIHByb3AsIGFkZCB0aGVtIGF0IHRoZSBlbmQuXG4gICAgICAgICAgICAgICAgZm91bmRTdHJpbmdHcm91cHMuZm9yRWFjaCggZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggb3JkZXJlZFN0cmluZ0dyb3Vwcy5pbmRleE9mKCBncm91cCApID09PSAtMSApe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJlZFN0cmluZ0dyb3Vwcy5wdXNoKGdyb3VwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gb3JkZXJlZFN0cmluZ0dyb3VwcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRTdHJpbmdJbmRleCggc2VsZWN0b3IsIGRiSUQgKXtcbiAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBudWxsXG5cbiAgICAgICAgICAgICAgICB0aGlzLmRpY3Rpb25hcnkuc29tZShmdW5jdGlvbiAoIHN0cmluZywgaW5kZXggKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggc3RyaW5nLmRiSUQgPT0gZGJJRCAmJiBzdHJpbmcuc2VsZWN0b3IgPT0gc2VsZWN0b3IgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0Tm9kZUluZm8oIG5vZGUsIGJhc2VTZWxlY3RvciA9ICcnICl7XG4gICAgICAgICAgICAgICAgbGV0IHN0cmluZ0lkXG4gICAgICAgICAgICAgICAgbGV0IG5vZGVEYXRhICA9IFtdXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdG9ycyA9IHRoaXMucHJlcGFyZVNlbGVjdG9yU3RyaW5ncyggYmFzZVNlbGVjdG9yIClcblxuICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5mb3JFYWNoKCBmdW5jdGlvbiAoIHNlbGVjdG9yICkge1xuXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ0lkID0gbm9kZS5nZXRBdHRyaWJ1dGUoIHNlbGVjdG9yIClcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIHN0cmluZ0lkICkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbm9kZUF0dHJpYnV0ZSAgID0gc2VsZWN0b3IucmVwbGFjZSggYmFzZVNlbGVjdG9yLCAnJyApXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbm9kZUdyb3VwICAgICAgID0gbm9kZS5nZXRBdHRyaWJ1dGUoICdkYXRhLXRycC1ub2RlLWdyb3VwJyArIG5vZGVBdHRyaWJ1dGUgKVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5vZGVEZXNjcmlwdGlvbiA9IG5vZGUuZ2V0QXR0cmlidXRlKCAnZGF0YS10cnAtbm9kZS1kZXNjcmlwdGlvbicgKyBub2RlQXR0cmlidXRlIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVudHJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiSUQgICAgICA6IHN0cmluZ0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yICA6IHNlbGVjdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSA6IG5vZGVBdHRyaWJ1dGUuc3Vic3RyKDEpLCAvLyBzdWJzdHIoMSkgaXMgdXNlZCB0byB0cmltIHByZWZpeGluZyBsaW5lIC0gZXguIC1hbHQgd2lsbCByZXN1bHQgaW4gYWx0IChubyBsaW5lKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGVHcm91cCApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuZ3JvdXAgPSBub2RlR3JvdXBcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlRGVzY3JpcHRpb24gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmRlc2NyaXB0aW9uID0gbm9kZURlc2NyaXB0aW9uXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVEYXRhLnB1c2goIGVudHJ5IClcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJldHVybiBub2RlRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldEFsbFNlbGVjdG9ycygpe1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RvcnMgPSBbXVxuICAgICAgICAgICAgICAgIGxldCBzZWxmICAgICAgPSB0aGlzXG5cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFBdHRyaWJ1dGVzLmZvckVhY2goIGZ1bmN0aW9uICggZGF0YUF0dHJpYnV0ZSApe1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnMgPSBzZWxlY3RvcnMuY29uY2F0KCBzZWxmLnByZXBhcmVTZWxlY3RvclN0cmluZ3MoIGRhdGFBdHRyaWJ1dGUgKSApXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3RvcnNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmVwYXJlU2VsZWN0b3JTdHJpbmdzKCBiYXNlTmFtZVNlbGVjdG9yICl7XG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlZF9zZWxlY3RvcnMgPSBbXVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RvcnMuZm9yRWFjaCggZnVuY3Rpb24gKCBzZWxlY3RvclN1ZmZpeCwgaW5kZXggKXtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkX3NlbGVjdG9ycy5wdXNoKCBiYXNlTmFtZVNlbGVjdG9yICsgc2VsZWN0b3JTdWZmaXggIClcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZF9zZWxlY3RvcnNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXJlbnRVUkwoIHVybCApe1xuICAgICAgICAgICAgICAgIHJldHVybiB1cmwucmVwbGFjZSggJ3RycC1lZGl0LXRyYW5zbGF0aW9uPXByZXZpZXcnLCAndHJwLWVkaXQtdHJhbnNsYXRpb249dHJ1ZScgKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFuVVJMKCB1cmwgKXtcbiAgICAgICAgICAgICAgICAvL21ha2UgcmVtb3ZlVXJsUGFyYW1ldGVyIHJlY3Vyc2l2ZSBhbmQgb25seSBjYWxsIGl0IG9uY2Ugd2l0aCBhbGwgdGhlIHBhcmFtZXRlcnMgdGhhdFxuICAgICAgICAgICAgICAgIC8vbmVlZCB0byBzdHJpcHBlZCA/XG4gICAgICAgICAgICAgICAgdXJsID0gdXRpbHMucmVtb3ZlVXJsUGFyYW1ldGVyKCB1cmwsICdsYW5nJyApXG4gICAgICAgICAgICAgICAgdXJsID0gdXRpbHMucmVtb3ZlVXJsUGFyYW1ldGVyKCB1cmwsICd0cnAtdmlldy1hcycgKVxuICAgICAgICAgICAgICAgIHVybCA9IHV0aWxzLnJlbW92ZVVybFBhcmFtZXRlciggdXJsLCAndHJwLXZpZXctYXMtbm9uY2UnIClcbiAgICAgICAgICAgICAgICB1cmwgPSB1dGlscy5yZW1vdmVVcmxQYXJhbWV0ZXIoIHVybCwgJ3RycC1lZGl0LXRyYW5zbGF0aW9uJyApXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2hvd1N0cmluZyggc3RyaW5nLCB0eXBlICl7XG4gICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Ygc3RyaW5nLmJsb2NrVHlwZSAhPT0gJ3VuZGVmaW5lZCcgJiYgc3RyaW5nLmJsb2NrVHlwZSA9PT0gJzInICl7XG4gICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IHNob3cgZGVwcmVjYXRlZCB0cmFuc2xhdGlvbiBibG9ja3MgaW4gdGhlIGRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09IHRoaXMuZWRpdG9yU3RyaW5ncy5pbWFnZXMgJiYgdHlwZW9mIHN0cmluZy5hdHRyaWJ1dGUgIT0gJ3VuZGVmaW5lZCcgJiYgc3RyaW5nLmF0dHJpYnV0ZSA9PSAnc3JjJyApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG5cbiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBzdHJpbmcuYXR0cmlidXRlICE9PSAndW5kZWZpbmVkJyAmJiAoIHN0cmluZy5hdHRyaWJ1dGUgPT0gJ2hyZWYnIHx8IHN0cmluZy5hdHRyaWJ1dGUgPT0gJ3NyYycgKSApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuXG4gICAgICAgICAgICAgICAgaWYgKCBzdHJpbmcuZ3JvdXAgPT09IHR5cGUgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5pdFN0cmluZ3NEcm9wZG93bigpe1xuICAgICAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xuXG4gICAgICAgICAgICAgICAgaWYgKCAhdGhpcy5pc1N0cmluZ3NEcm9wZG93bk9wZW4oKSApIHtcbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCAnI3RycC1zdHJpbmctY2F0ZWdvcmllcycgKS5zZWxlY3QyKCAnZGVzdHJveScgKVxuXG4gICAgICAgICAgICAgICAgICAgIGpRdWVyeSggJyN0cnAtc3RyaW5nLWNhdGVnb3JpZXMnICkuc2VsZWN0MiggeyBwbGFjZWhvbGRlciA6IHNlbGYuZWRpdG9yU3RyaW5ncy5zZWxlY3Rfc3RyaW5nLCB0ZW1wbGF0ZVJlc3VsdDogZnVuY3Rpb24ob3B0aW9uKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvcmlnaW5hbCAgICA9IGhlLmRlY29kZSggb3B0aW9uLnRleHQuc3Vic3RyaW5nKDAsIDkwKSApICsgKCAoIG9wdGlvbi50ZXh0Lmxlbmd0aCA8PSA5MCkgPyAnJyA6ICcuLi4nIClcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkZXNjcmlwdGlvbiA9ICggb3B0aW9uLnRpdGxlICkgPyAgJygnICsgb3B0aW9uLnRpdGxlICsgJyknIDogJydcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeSggJzxkaXY+JyArIG9yaWdpbmFsICsgJzwvZGl2PjxkaXYgY2xhc3M9XCJzdHJpbmctc2VsZWN0b3ItZGVzY3JpcHRpb25cIj4nICsgZGVzY3JpcHRpb24gKyAnPC9kaXY+JyApO1xuICAgICAgICAgICAgICAgICAgICB9LCB3aWR0aCA6ICcxMDAlJyB9ICkucHJvcCggJ2Rpc2FibGVkJywgZmFsc2UgKVxuXG4gICAgICAgICAgICAgICAgICAgIGpRdWVyeSggJyN0cnBfc2VsZWN0Ml9vdmVybGF5JyApLmhpZGUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHJpbmdzRHJvcGRvd25Mb2FkaW5nKCl7XG4gICAgICAgICAgICAgICAgalF1ZXJ5KCAnI3RycC1zdHJpbmctY2F0ZWdvcmllcycgKS5zZWxlY3QyKCB7IHBsYWNlaG9sZGVyIDogdGhpcy5lZGl0b3JTdHJpbmdzLnN0cmluZ3NfbG9hZGluZywgd2lkdGggOiAnMTAwJScgfSApLnByb3AoICdkaXNhYmxlZCcsIHRydWUgKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3NPcHRpb25OYW1lKCBuYW1lLCB0eXBlICl7XG4gICAgICAgICAgICAgICAgaWYgKCB0eXBlID09ICdJbWFnZXMnIClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHV0aWxzLmdldEZpbGVuYW1lKCBuYW1lIClcblxuICAgICAgICAgICAgICAgIHJldHVybiB1dGlscy5lc2NhcGVIdG1sKCBuYW1lIClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1N0cmluZ3NEcm9wZG93bk9wZW4oKXtcbiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5KCAnI3RycC1zdHJpbmctY2F0ZWdvcmllcycgKS5zZWxlY3QyKCAnaXNPcGVuJyApXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzVW5zYXZlZENoYW5nZXMoKXtcbiAgICAgICAgICAgICAgICBsZXQgdW5zYXZlZENoYW5nZXMgPSBmYWxzZVxuICAgICAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xuICAgICAgICAgICAgICAgIGlmICggdGhpcy5zZWxlY3RlZEluZGV4ZXNBcnJheS5sZW5ndGggPiAwICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhlc0FycmF5LmZvckVhY2goZnVuY3Rpb24gKHNlbGVjdGVkSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0dGluZ3NbJ3RyYW5zbGF0aW9uLWxhbmd1YWdlcyddLmZvckVhY2goZnVuY3Rpb24gKGxhbmd1YWdlQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmRpY3Rpb25hcnlbc2VsZWN0ZWRJbmRleF0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kaWN0aW9uYXJ5W3NlbGVjdGVkSW5kZXhdLnRyYW5zbGF0aW9uc0FycmF5W2xhbmd1YWdlQ29kZV0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZGljdGlvbmFyeVtzZWxlY3RlZEluZGV4XS50cmFuc2xhdGlvbnNBcnJheVtsYW5ndWFnZUNvZGVdLnRyYW5zbGF0ZWQgIT09IHNlbGYuZGljdGlvbmFyeVtzZWxlY3RlZEluZGV4XS50cmFuc2xhdGlvbnNBcnJheVtsYW5ndWFnZUNvZGVdLmVkaXRlZFRyYW5zbGF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNhdmVkQ2hhbmdlcyA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNob3dDaGFuZ2VzVW5zYXZlZE1lc3NhZ2UgPSB1bnNhdmVkQ2hhbmdlc1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuc2F2ZWRDaGFuZ2VzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaWZyYW1lTG9hZGVyKCBzdGF0dXMgKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxvYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAndHJwLXByZXZpZXctbG9hZGVyJyApXG5cbiAgICAgICAgICAgICAgICBpZiggc3RhdHVzID09ICdzaG93JyApXG4gICAgICAgICAgICAgICAgICAgIGxvYWRlci5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXG4gICAgICAgICAgICAgICAgZWxzZSBpZiggc3RhdHVzID09ICdoaWRlJyApXG4gICAgICAgICAgICAgICAgICAgIGxvYWRlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJldmlvdXNTdHJpbmcoKXtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudFZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RycC1zdHJpbmctY2F0ZWdvcmllcycpLnZhbHVlXG5cbiAgICAgICAgICAgICAgICBsZXQgbmV3VmFsdWUgPSArY3VycmVudFZhbHVlIC0gMVxuXG4gICAgICAgICAgICAgICAgd2hpbGUoIG5ld1ZhbHVlID49IDAgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI3RycC1zdHJpbmctY2F0ZWdvcmllcyBvcHRpb25bdmFsdWU9XCInICsgbmV3VmFsdWUgKyAnXCJdJykubGVuZ3RoID09PSAwICl7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYoIG5ld1ZhbHVlIDwgMCApXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN0cmluZyA9IG5ld1ZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0U3RyaW5nKCl7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRWYWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0cnAtc3RyaW5nLWNhdGVnb3JpZXMnKS52YWx1ZSwgbmV3VmFsdWUgPSAwXG5cbiAgICAgICAgICAgICAgICBpZiggY3VycmVudFZhbHVlICE9ICcnIClcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSArY3VycmVudFZhbHVlICsgMVxuXG4gICAgICAgICAgICAgICAgd2hpbGUoIG5ld1ZhbHVlIDwgdGhpcy5kaWN0aW9uYXJ5Lmxlbmd0aCAmJiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjdHJwLXN0cmluZy1jYXRlZ29yaWVzIG9wdGlvblt2YWx1ZT1cIicgKyBuZXdWYWx1ZSArICdcIl0nKS5sZW5ndGggPT09IDAgKXtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUrKztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIG5ld1ZhbHVlID49IHRoaXMuZGljdGlvbmFyeS5sZW5ndGggKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN0cmluZyA9IG5ld1ZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZGRLZXlib2FyZFNob3J0Y3V0c0xpc3RlbmVyKCl7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0ubWF0Y2goXCJNYWNcIikgPyBlLm1ldGFLZXkgOiBlLmN0cmxLZXkpICYmIGUuYWx0S2V5ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ1RSTCArIEFMVCArIHJpZ2h0IGFycm93XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiggZS5rZXlDb2RlID09PSAzOSApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAndHJwX3RyaWdnZXJfbmV4dF9zdHJpbmdfZXZlbnQnICkgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENUUkwgKyBBTFQgKyBsZWZ0IGFycm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGUua2V5Q29kZSA9PT0gMzcgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ3RycF90cmlnZ2VyX3ByZXZpb3VzX3N0cmluZ19ldmVudCcgKSApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAndHJwX3RyaWdnZXJfbmV4dF9zdHJpbmdfZXZlbnQnLCB0aGlzLm5leHRTdHJpbmcgKVxuICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAndHJwX3RyaWdnZXJfcHJldmlvdXNfc3RyaW5nX2V2ZW50JywgdGhpcy5wcmV2aW91c1N0cmluZyApXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzaXplSWZyYW1lIChldmVudCwgdWkpIHtcbiAgICAgICAgICAgICAgICBsZXQgdG90YWxfd2lkdGggPSBqUXVlcnkod2luZG93KS53aWR0aCgpO1xuICAgICAgICAgICAgICAgIGxldCB3aWR0aCA9IGpRdWVyeSggJyN0cnAtY29udHJvbHMnICkud2lkdGgoKTtcblxuICAgICAgICAgICAgICAgIGxldCBwcmV2aWV3Q29udGFpbmVyID0galF1ZXJ5KCAnI3RycC1wcmV2aWV3JyApO1xuICAgICAgICAgICAgICAgIHByZXZpZXdDb250YWluZXIuY3NzKCdyaWdodCcsIHdpZHRoICk7XG4gICAgICAgICAgICAgICAgcHJldmlld0NvbnRhaW5lci5jc3MoJ2xlZnQnLCAoIHdpZHRoIC0gMzQ4ICkgKTtcbiAgICAgICAgICAgICAgICBwcmV2aWV3Q29udGFpbmVyLmNzcygnd2lkdGgnLCAodG90YWxfd2lkdGggLSB3aWR0aCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvL2FkZCBzdXBwb3J0IGZvciB2LW1vZGVsIGluIHNlbGVjdDJcbiAgICAgICAgZGlyZWN0aXZlczoge1xuICAgICAgICAgICAgc2VsZWN0Mjoge1xuICAgICAgICAgICAgICAgIGluc2VydGVkKGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGpRdWVyeShlbCkub24oJ3NlbGVjdDI6c2VsZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRXZlbnQoJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgZWwuZGlzcGF0Y2hFdmVudChldmVudClcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgICAgICBqUXVlcnkoZWwpLm9uKCdzZWxlY3QyOnVuc2VsZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRXZlbnQoJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgZWwuZGlzcGF0Y2hFdmVudChldmVudClcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuPC9zY3JpcHQ+XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./assets/src/js/editor.vue?vue&type=script&lang=js&\n");
814
 
815
  /***/ }),
816
 
@@ -899,7 +899,7 @@ eval("/* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !
899
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
900
 
901
  "use strict";
902
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.editorsNavigation.show\n ? _c(\"div\", { attrs: { id: \"trp-editors-navigation-tabs\" } }, [\n _c(\n \"table\",\n { attrs: { id: \"trp-editors-tab-table\" } },\n _vm._l(_vm.editorsNavigation.tabs, function(navigationTab) {\n return _c(\n \"td\",\n {\n staticClass: \"trp-editors-tab\",\n class: {\n \"trp-selected-tab\": navigationTab.handle === _vm.selectedTab\n }\n },\n [\n _c(\"a\", { attrs: { href: navigationTab.path } }, [\n _vm._v(_vm._s(navigationTab.label))\n ]),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass: \"trp-tooltip-toggle\",\n attrs: {\n \"data-tooltip\": navigationTab.tooltip,\n tabindex: \"0\"\n }\n },\n [\n _c(\n \"svg\",\n {\n attrs: {\n viewBox: \"0 0 27 27\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\n \"g\",\n {\n attrs: { fill: \"#a8a8a8\", \"fill-rule\": \"evenodd\" }\n },\n [\n _c(\"path\", {\n attrs: {\n d:\n \"M13.5 27C20.956 27 27 20.956 27 13.5S20.956 0 13.5 0 0 6.044 0 13.5 6.044 27 13.5 27zm0-2C7.15 25 2 19.85 2 13.5S7.15 2 13.5 2 25 7.15 25 13.5 19.85 25 13.5 25z\"\n }\n }),\n _c(\"path\", {\n attrs: {\n d:\n \"M12.05 7.64c0-.228.04-.423.12-.585.077-.163.185-.295.32-.397.138-.102.298-.177.48-.227.184-.048.383-.073.598-.073.203 0 .398.025.584.074.186.05.35.126.488.228.14.102.252.234.336.397.084.162.127.357.127.584 0 .22-.043.412-.127.574-.084.163-.196.297-.336.4-.14.106-.302.185-.488.237-.186.053-.38.08-.584.08-.215 0-.414-.027-.597-.08-.182-.05-.342-.13-.48-.235-.135-.104-.243-.238-.32-.4-.08-.163-.12-.355-.12-.576zm-1.02 11.517c.134 0 .275-.013.424-.04.148-.025.284-.08.41-.16.124-.082.23-.198.313-.35.085-.15.127-.354.127-.61v-5.423c0-.238-.042-.43-.127-.57-.084-.144-.19-.254-.318-.332-.13-.08-.267-.13-.415-.153-.148-.024-.286-.036-.414-.036h-.21v-.95h4.195v7.463c0 .256.043.46.127.61.084.152.19.268.314.35.125.08.263.135.414.16.15.027.29.04.418.04h.21v.95H10.82v-.95h.21z\"\n }\n })\n ]\n )\n ]\n )\n ]\n )\n ]\n )\n }),\n 0\n )\n ])\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2pzL2NvbXBvbmVudHMvZWRpdG9ycy1uYXZpZ2F0aW9uLnZ1ZT9jZDA3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUyxvQ0FBb0MsRUFBRTtBQUNoRTtBQUNBO0FBQ0EsV0FBVyxTQUFTLDhCQUE4QixFQUFFO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSx5QkFBeUIsU0FBUywyQkFBMkIsRUFBRTtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEMsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vYXNzZXRzL3NyYy9qcy9jb21wb25lbnRzL2VkaXRvcnMtbmF2aWdhdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDRmNWVlMjcmLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0uZWRpdG9yc05hdmlnYXRpb24uc2hvd1xuICAgID8gX2MoXCJkaXZcIiwgeyBhdHRyczogeyBpZDogXCJ0cnAtZWRpdG9ycy1uYXZpZ2F0aW9uLXRhYnNcIiB9IH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJ0YWJsZVwiLFxuICAgICAgICAgIHsgYXR0cnM6IHsgaWQ6IFwidHJwLWVkaXRvcnMtdGFiLXRhYmxlXCIgfSB9LFxuICAgICAgICAgIF92bS5fbChfdm0uZWRpdG9yc05hdmlnYXRpb24udGFicywgZnVuY3Rpb24obmF2aWdhdGlvblRhYikge1xuICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJ0cnAtZWRpdG9ycy10YWJcIixcbiAgICAgICAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgICAgICAgXCJ0cnAtc2VsZWN0ZWQtdGFiXCI6IG5hdmlnYXRpb25UYWIuaGFuZGxlID09PSBfdm0uc2VsZWN0ZWRUYWJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcImFcIiwgeyBhdHRyczogeyBocmVmOiBuYXZpZ2F0aW9uVGFiLnBhdGggfSB9LCBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKG5hdmlnYXRpb25UYWIubGFiZWwpKVxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwidHJwLXRvb2x0aXAtdG9nZ2xlXCIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLXRvb2x0aXBcIjogbmF2aWdhdGlvblRhYi50b29sdGlwLFxuICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4OiBcIjBcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI3IDI3XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGZpbGw6IFwiI2E4YThhOFwiLCBcImZpbGwtcnVsZVwiOiBcImV2ZW5vZGRcIiB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIk0xMy41IDI3QzIwLjk1NiAyNyAyNyAyMC45NTYgMjcgMTMuNVMyMC45NTYgMCAxMy41IDAgMCA2LjA0NCAwIDEzLjUgNi4wNDQgMjcgMTMuNSAyN3ptMC0yQzcuMTUgMjUgMiAxOS44NSAyIDEzLjVTNy4xNSAyIDEzLjUgMiAyNSA3LjE1IDI1IDEzLjUgMTkuODUgMjUgMTMuNSAyNXpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiTTEyLjA1IDcuNjRjMC0uMjI4LjA0LS40MjMuMTItLjU4NS4wNzctLjE2My4xODUtLjI5NS4zMi0uMzk3LjEzOC0uMTAyLjI5OC0uMTc3LjQ4LS4yMjcuMTg0LS4wNDguMzgzLS4wNzMuNTk4LS4wNzMuMjAzIDAgLjM5OC4wMjUuNTg0LjA3NC4xODYuMDUuMzUuMTI2LjQ4OC4yMjguMTQuMTAyLjI1Mi4yMzQuMzM2LjM5Ny4wODQuMTYyLjEyNy4zNTcuMTI3LjU4NCAwIC4yMi0uMDQzLjQxMi0uMTI3LjU3NC0uMDg0LjE2My0uMTk2LjI5Ny0uMzM2LjQtLjE0LjEwNi0uMzAyLjE4NS0uNDg4LjIzNy0uMTg2LjA1My0uMzguMDgtLjU4NC4wOC0uMjE1IDAtLjQxNC0uMDI3LS41OTctLjA4LS4xODItLjA1LS4zNDItLjEzLS40OC0uMjM1LS4xMzUtLjEwNC0uMjQzLS4yMzgtLjMyLS40LS4wOC0uMTYzLS4xMi0uMzU1LS4xMi0uNTc2em0tMS4wMiAxMS41MTdjLjEzNCAwIC4yNzUtLjAxMy40MjQtLjA0LjE0OC0uMDI1LjI4NC0uMDguNDEtLjE2LjEyNC0uMDgyLjIzLS4xOTguMzEzLS4zNS4wODUtLjE1LjEyNy0uMzU0LjEyNy0uNjF2LTUuNDIzYzAtLjIzOC0uMDQyLS40My0uMTI3LS41Ny0uMDg0LS4xNDQtLjE5LS4yNTQtLjMxOC0uMzMyLS4xMy0uMDgtLjI2Ny0uMTMtLjQxNS0uMTUzLS4xNDgtLjAyNC0uMjg2LS4wMzYtLjQxNC0uMDM2aC0uMjF2LS45NWg0LjE5NXY3LjQ2M2MwIC4yNTYuMDQzLjQ2LjEyNy42MS4wODQuMTUyLjE5LjI2OC4zMTQuMzUuMTI1LjA4LjI2My4xMzUuNDE0LjE2LjE1LjAyNy4yOS4wNC40MTguMDRoLjIxdi45NUgxMC44MnYtLjk1aC4yMXpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAwXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./assets/src/js/components/editors-navigation.vue?vue&type=template&id=04f5ee27&\n");
903
 
904
  /***/ }),
905
 
726
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
727
 
728
  "use strict";
729
+ eval("__webpack_require__.r(__webpack_exports__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n props: ['editorsNavigation', 'selectedTab'],\n methods: {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vYXNzZXRzL3NyYy9qcy9jb21wb25lbnRzL2VkaXRvcnMtbmF2aWdhdGlvbi52dWU/NDAwMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBYUE7QUFDQSxVQUNBLG1CQURBLEVBRUEsYUFGQSxDQURBO0FBS0E7QUFMQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9hc3NldHMvc3JjL2pzL2NvbXBvbmVudHMvZWRpdG9ycy1uYXZpZ2F0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gICAgPGRpdiBpZD1cInRycC1lZGl0b3JzLW5hdmlnYXRpb24tdGFic1wiIHYtaWY9XCJlZGl0b3JzTmF2aWdhdGlvbi5zaG93XCI+XG4gICAgICAgIDx0YWJsZSBpZD1cInRycC1lZGl0b3JzLXRhYi10YWJsZVwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidHJwLWVkaXRvcnMtdGFiXCIgOmNsYXNzPVwieyd0cnAtc2VsZWN0ZWQtdGFiJzogbmF2aWdhdGlvblRhYi5oYW5kbGUgPT09IHNlbGVjdGVkVGFiIH1cIiB2LWZvcj1cIm5hdmlnYXRpb25UYWIgaW4gZWRpdG9yc05hdmlnYXRpb24udGFic1wiPlxuICAgICAgICAgICAgICAgIDxhIDpocmVmPVwibmF2aWdhdGlvblRhYi5wYXRoXCI+e3tuYXZpZ2F0aW9uVGFiLmxhYmVsfX08L2E+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cnAtdG9vbHRpcC10b2dnbGVcIiA6ZGF0YS10b29sdGlwPVwibmF2aWdhdGlvblRhYi50b29sdGlwXCIgdGFiaW5kZXg9XCIwXCIgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI3IDI3XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGZpbGw9XCIjYThhOGE4XCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIGQ9XCJNMTMuNSAyN0MyMC45NTYgMjcgMjcgMjAuOTU2IDI3IDEzLjVTMjAuOTU2IDAgMTMuNSAwIDAgNi4wNDQgMCAxMy41IDYuMDQ0IDI3IDEzLjUgMjd6bTAtMkM3LjE1IDI1IDIgMTkuODUgMiAxMy41UzcuMTUgMiAxMy41IDIgMjUgNy4xNSAyNSAxMy41IDE5Ljg1IDI1IDEzLjUgMjV6XCIvPjxwYXRoIGQ9XCJNMTIuMDUgNy42NGMwLS4yMjguMDQtLjQyMy4xMi0uNTg1LjA3Ny0uMTYzLjE4NS0uMjk1LjMyLS4zOTcuMTM4LS4xMDIuMjk4LS4xNzcuNDgtLjIyNy4xODQtLjA0OC4zODMtLjA3My41OTgtLjA3My4yMDMgMCAuMzk4LjAyNS41ODQuMDc0LjE4Ni4wNS4zNS4xMjYuNDg4LjIyOC4xNC4xMDIuMjUyLjIzNC4zMzYuMzk3LjA4NC4xNjIuMTI3LjM1Ny4xMjcuNTg0IDAgLjIyLS4wNDMuNDEyLS4xMjcuNTc0LS4wODQuMTYzLS4xOTYuMjk3LS4zMzYuNC0uMTQuMTA2LS4zMDIuMTg1LS40ODguMjM3LS4xODYuMDUzLS4zOC4wOC0uNTg0LjA4LS4yMTUgMC0uNDE0LS4wMjctLjU5Ny0uMDgtLjE4Mi0uMDUtLjM0Mi0uMTMtLjQ4LS4yMzUtLjEzNS0uMTA0LS4yNDMtLjIzOC0uMzItLjQtLjA4LS4xNjMtLjEyLS4zNTUtLjEyLS41NzZ6bS0xLjAyIDExLjUxN2MuMTM0IDAgLjI3NS0uMDEzLjQyNC0uMDQuMTQ4LS4wMjUuMjg0LS4wOC40MS0uMTYuMTI0LS4wODIuMjMtLjE5OC4zMTMtLjM1LjA4NS0uMTUuMTI3LS4zNTQuMTI3LS42MXYtNS40MjNjMC0uMjM4LS4wNDItLjQzLS4xMjctLjU3LS4wODQtLjE0NC0uMTktLjI1NC0uMzE4LS4zMzItLjEzLS4wOC0uMjY3LS4xMy0uNDE1LS4xNTMtLjE0OC0uMDI0LS4yODYtLjAzNi0uNDE0LS4wMzZoLS4yMXYtLjk1aDQuMTk1djcuNDYzYzAgLjI1Ni4wNDMuNDYuMTI3LjYxLjA4NC4xNTIuMTkuMjY4LjMxNC4zNS4xMjUuMDguMjYzLjEzNS40MTQuMTYuMTUuMDI3LjI5LjA0LjQxOC4wNGguMjF2Ljk1SDEwLjgydi0uOTVoLjIxelwiLz48L2c+PC9zdmc+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHR7XG4gICAgcHJvcHM6W1xuICAgICAgICAnZWRpdG9yc05hdmlnYXRpb24nLFxuICAgICAgICAnc2VsZWN0ZWRUYWInXG4gICAgXSxcbiAgICBtZXRob2RzOntcblxuICAgIH1cbn1cbjwvc2NyaXB0PlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./assets/src/js/components/editors-navigation.vue?vue&type=script&lang=js&\n");
730
 
731
  /***/ }),
732
 
810
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
811
 
812
  "use strict";
813
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! select2/dist/js/select2.min.js */ \"./node_modules/select2/dist/js/select2.min.js\");\n/* harmony import */ var select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./assets/src/js/utils.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! axios */ \"./node_modules/axios/index.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_language_boxes_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/language-boxes.vue */ \"./assets/src/js/components/language-boxes.vue\");\n/* harmony import */ var _components_save_translations_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/save-translations.vue */ \"./assets/src/js/components/save-translations.vue\");\n/* harmony import */ var _components_hover_actions_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/hover-actions.vue */ \"./assets/src/js/components/hover-actions.vue\");\n/* harmony import */ var _components_extra_content_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/extra-content.vue */ \"./assets/src/js/components/extra-content.vue\");\n/* harmony import */ var _components_editors_navigation_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/editors-navigation.vue */ \"./assets/src/js/components/editors-navigation.vue\");\n/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! he */ \"./node_modules/he/he.js\");\n/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(he__WEBPACK_IMPORTED_MODULE_8__);\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n components: {\n languageBoxes: _components_language_boxes_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n saveTranslations: _components_save_translations_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n hoverActions: _components_hover_actions_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n extraContent: _components_extra_content_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n editorsNavigation: _components_editors_navigation_vue__WEBPACK_IMPORTED_MODULE_7__[\"default\"]\n },\n data: function data() {\n return {\n //props\n settings: trp_editor_data.trp_settings,\n languageNames: trp_editor_data.language_names,\n orderedSecondaryLanguages: trp_editor_data.ordered_secondary_languages,\n roles: trp_editor_data.view_as_roles,\n nonces: trp_editor_data.editor_nonces,\n stringGroupOrder: trp_editor_data.string_group_order,\n selectors: trp_editor_data.string_selectors,\n stringTypes: trp_editor_data.string_types,\n dataAttributes: trp_editor_data.data_attributes,\n mergeRules: trp_editor_data.merge_rules,\n editorsNavigation: trp_editor_data.editors_navigation,\n editorStrings: trp_editor_data.trp_localized_strings,\n flagsPath: trp_editor_data.flags_path,\n //data\n currentLanguage: trp_editor_data.current_language,\n onScreenLanguage: trp_editor_data.on_screen_language,\n currentURL: trp_editor_data.url_to_load,\n urlToLoad: trp_editor_data.url_to_load,\n ajaxUrl: trp_editor_data.ajax_url,\n paidVersion: trp_editor_data.paid_version,\n iframe: '',\n dictionary: [],\n selectedString: null,\n selectedIndexesArray: [],\n detectedSelectorAndId: [],\n stringGroups: [],\n mergingString: false,\n mergeData: [],\n showChangesUnsavedMessage: false,\n viewAs: '',\n loading_strings: 0,\n translationNotLoadedYet: false\n };\n },\n created: function created() {\n this.settings['default-language-name'] = this.languageNames[this.settings['default-language']]; //set default value for the View As select\n\n var params = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getUrlParameters(this.currentURL);\n if (Object.keys(params).length > 1 && params['trp-view-as']) this.viewAs = params['trp-view-as'];else this.viewAs = 'current_user';\n },\n mounted: function mounted() {\n this.addKeyboardShortcutsListener();\n var self = this; // initialize select2\n\n jQuery('#trp-language-select, #trp-view-as-select').select2({\n width: '100%'\n }); //init strings dropdown\n\n this.stringsDropdownLoading(); // show overlay when select is opened\n\n jQuery('#trp-language-select, #trp-string-categories').on('select2:open', function () {\n jQuery('#trp_select2_overlay').fadeIn('100');\n }).on('select2:close', function () {\n jQuery('#trp_select2_overlay').hide();\n }).on('select2:opening', function (e) {\n /* when we have unsaved changes prevent the strings dropdown from opening so we do not have a disconnect between the textareas and the dropdown */\n if (self.hasUnsavedChanges()) {\n e.preventDefault();\n }\n }); // resize sidebar and consequently the iframe\n\n var previewContainer = jQuery('#trp-preview');\n var total_width = jQuery(window).width();\n jQuery('#trp-controls').resizable({\n start: function start() {\n previewContainer.toggle();\n },\n stop: function stop() {\n previewContainer.toggle();\n },\n handles: 'e',\n minWidth: 327,\n maxWidth: total_width - 20\n }).bind(\"resize\", this.resizeIframe); // resize iframe when resizing window\n\n jQuery(window).resize(function () {\n self.resizeIframe();\n });\n },\n watch: {\n currentLanguage: function currentLanguage(_currentLanguage) {\n var self = this; //grab the correct URL from the iFrame\n\n var newURL = this.iframe.querySelector('link[hreflang=\"' + _currentLanguage.replace('_', '-') + '\"]').getAttribute('href');\n this.currentURL = newURL;\n this.iframe.location = newURL; //reset vue props\n\n this.selectedString = '';\n this.selectedIndexesArray = []; //set strings dropdown to loading state\n\n jQuery('#trp-string-categories').val('').trigger('change');\n this.stringsDropdownLoading();\n this.onScreenLanguage = _currentLanguage;\n\n if (this.settings['default-language'] == this.currentLanguage && this.settings['translation-languages'].length > 1) {\n this.settings['translation-languages'].some(function (language) {\n if (language != self.settings['default-language']) {\n // return the first language not default\n self.onScreenLanguage = language;\n return true;\n }\n });\n }\n },\n currentURL: function currentURL(newUrl, oldUrl) {\n window.history.replaceState(null, null, this.parentURL(newUrl));\n },\n viewAs: function viewAs(role) {\n if (!this.currentURL || !this.iframe) return;\n var url = this.cleanURL(this.currentURL);\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].updateUrlParameter(url, 'trp-edit-translation', 'preview');\n\n if (role == 'current_user') {\n this.iframe.location = url;\n return;\n } //if nonce not available, an update to the Browse as Other Roles add-on is required\n\n\n if (!this.nonces[role]) {\n alert(this.editorStrings.bor_update_notice);\n return;\n }\n\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].updateUrlParameter(url, 'trp-view-as', role);\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].updateUrlParameter(url, 'trp-view-as-nonce', this.nonces[role]);\n this.iframe.location = url;\n },\n selectedString: function selectedString(selectedStringArrayIndex, oldString) {\n if (this.hasUnsavedChanges() || !selectedStringArrayIndex && selectedStringArrayIndex !== 0) return;\n jQuery('#trp-string-categories').val(selectedStringArrayIndex !== null ? selectedStringArrayIndex : '').trigger('change');\n var selectedString = this.dictionary[selectedStringArrayIndex];\n if (!selectedString) return;\n var currentNodes = this.iframe.querySelectorAll(\"[\" + selectedString.selector + \"='\" + selectedString.dbID + \"']\");\n var selectedIndexesArray = []; //when merging we do not have a valid current node, so we just add the fake id\n\n if (currentNodes.length > 0) {\n var self = this;\n var selectors = self.getAllSelectors();\n var nodes = [];\n currentNodes.forEach(function (currentNode) {\n nodes.push(currentNode);\n\n if (currentNode.tagName != \"A\") {\n // include the anchor's translatable attributes\n var anchorParent = currentNode.closest('a');\n\n if (anchorParent != null) {\n nodes.push(anchorParent);\n }\n }\n\n if (currentNode.tagName == \"A\" && currentNode.children.length > 0) {\n // include all the translatable attributes inside the anchor\n var childrenArray = _toConsumableArray(currentNode.children);\n\n childrenArray.forEach(function (child) {\n nodes.push(child);\n });\n }\n\n nodes.forEach(function (node) {\n selectors.forEach(function (selector) {\n var stringId = node.getAttribute(selector);\n\n if (stringId) {\n var found = false;\n var i;\n\n for (i = 0; i < selectedIndexesArray.length; i++) {\n if (typeof self.dictionary[selectedIndexesArray[i]] !== 'undefined' && self.dictionary[selectedIndexesArray[i]].dbID !== 'undefined' && self.dictionary[selectedIndexesArray[i]].dbID === stringId) {\n found = true;\n break;\n }\n }\n\n if (!found) {\n selectedIndexesArray.push(self.getStringIndex(selector, stringId));\n }\n }\n });\n });\n });\n } else selectedIndexesArray.push(selectedStringArrayIndex);\n\n this.selectedIndexesArray = selectedIndexesArray;\n }\n },\n computed: {\n closeURL: function closeURL() {\n return this.cleanURL(this.currentURL);\n }\n },\n methods: {\n iFrameLoaded: function iFrameLoaded() {\n var self = this;\n var iframeElement = document.querySelector('#trp-preview-iframe');\n this.iframe = iframeElement.contentDocument || iframeElement.contentWindow.document; //sync iFrame URL with parent\n\n if (this.currentURL != this.iframe.URL) this.currentURL = this.iframe.URL; //hide iFrame loader\n\n this.iframeLoader('hide');\n self.detectedSelectorAndId = [];\n self.dictionary = [];\n this.scanIframeForStrings();\n window.addEventListener('trp_iframe_page_updated', this.scanIframeForStrings); //event that is fired when the iFrame is navigated\n\n iframeElement.contentWindow.onbeforeunload = function () {\n self.iframeLoader('show');\n self.selectedString = null;\n self.selectedIndexesArray = [];\n self.translationNotLoadedYet = false;\n self.stringsDropdownLoading();\n };\n },\n scanIframeForStrings: function scanIframeForStrings() {\n this.scanForSelector('data-trp-translate-id', 'regular', this.onScreenLanguage);\n this.scanForSelector('data-trpgettextoriginal', 'gettext', this.currentLanguage);\n this.scanForSelector('data-trp-post-slug', 'postslug', this.currentLanguage);\n },\n scanForSelector: function scanForSelector(baseSelector, typeSlug, languageOfIds) {\n this.loading_strings++;\n var self = this;\n var selectors = this.prepareSelectorStrings(baseSelector);\n\n var nodes = _toConsumableArray(this.iframe.querySelectorAll('[' + selectors.join('],[') + ']'));\n\n var stringIdsArray = [],\n nodeData = [],\n nodeEntries = [];\n nodes.forEach(function (node) {\n nodeEntries = self.getNodeInfo(node, baseSelector);\n nodeEntries.forEach(function (entry) {\n // this check ensures that we don't create duplicates when rescanning after ajax complete\n if (!self.alreadyDetected(entry.selector, entry.dbID)) {\n stringIdsArray.push(entry.dbID);\n nodeData.push(entry);\n }\n });\n self.setupEventListener(node);\n }); //unique ids only\n\n stringIdsArray = _toConsumableArray(new Set(stringIdsArray));\n\n if (stringIdsArray.length > 0) {\n var data = new FormData();\n data.append('action', 'trp_get_translations_' + typeSlug);\n data.append('all_languages', 'true');\n data.append('security', this.nonces['gettranslationsnonce' + typeSlug]);\n data.append('language', languageOfIds);\n data.append('string_ids', JSON.stringify(stringIdsArray));\n axios__WEBPACK_IMPORTED_MODULE_2___default.a.post(this.ajaxUrl, data).then(function (response) {\n self.loading_strings--;\n self.addToDictionary(response.data, nodeData);\n })[\"catch\"](function (error) {\n console.log(error);\n });\n } else {\n self.loading_strings--;\n }\n },\n alreadyDetected: function alreadyDetected(selector, dbId) {\n var combined = selector + '=' + dbId;\n\n if (_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].arrayContainsItem(this.detectedSelectorAndId, combined)) {\n return true;\n } else {\n this.detectedSelectorAndId.push(combined);\n return false;\n }\n },\n setupEventListener: function setupEventListener(node) {\n if (node.tagName == 'A' && !node.hasAttribute('data-trpgettextoriginal')) return false;\n var self = this;\n node.addEventListener('mouseenter', self.$refs.hoverActions.showPencilIcon);\n },\n addToDictionary: function addToDictionary(responseData) {\n var nodeInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var self = this;\n\n if (responseData != null) {\n if (nodeInfo) {\n nodeInfo.forEach(function (infoRow, index) {\n responseData.some(function (responseDataRow) {\n if (infoRow.dbID == responseDataRow.dbID) {\n //bring block_type to the top level object\n if (responseDataRow.type != 'gettext' && typeof responseDataRow.block_type == 'undefined') {\n var firstLanguage = self.orderedSecondaryLanguages[0];\n if (typeof responseDataRow.translationsArray[firstLanguage].block_type != 'undefined') responseDataRow.block_type = responseDataRow.translationsArray[firstLanguage].block_type;\n }\n\n nodeInfo[index] = Object.assign({}, responseDataRow, infoRow);\n return true; // a sort of break\n }\n });\n });\n } else {\n nodeInfo = responseData;\n }\n\n this.stringGroups = this.addToStringGroups(nodeInfo);\n this.dictionary = this.dictionary.concat(nodeInfo);\n this.initStringsDropdown();\n }\n },\n addToStringGroups: function addToStringGroups(strings) {\n // see what node groups are found\n var foundStringGroups = this.stringGroups;\n strings.forEach(function (string) {\n if (foundStringGroups.indexOf(string.group) === -1 && (typeof string.blockType === 'undefined' || string.blockType !== '2')) {\n foundStringGroups.push(string.group);\n }\n }); // put the node groups in the order that we want, according to the prop this.stringGroupOrder\n\n var orderedStringGroups = [];\n\n if (this.editorStrings.seo_update_notice != 'seo_pack_update_not_needed') {\n orderedStringGroups.push(this.editorStrings.seo_update_notice);\n }\n\n this.stringGroupOrder.forEach(function (group) {\n if (foundStringGroups.indexOf(group) !== -1) {\n orderedStringGroups.push(group);\n }\n }); // if there were any other string groups that were not in the prop, add them at the end.\n\n foundStringGroups.forEach(function (group) {\n if (orderedStringGroups.indexOf(group) === -1) {\n orderedStringGroups.push(group);\n }\n });\n return orderedStringGroups;\n },\n getStringIndex: function getStringIndex(selector, dbID) {\n var found = null;\n this.dictionary.some(function (string, index) {\n if (string.dbID == dbID && string.selector == selector) {\n found = index;\n return true;\n }\n });\n return found;\n },\n getNodeInfo: function getNodeInfo(node) {\n var baseSelector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var stringId;\n var nodeData = [];\n var selectors = this.prepareSelectorStrings(baseSelector);\n selectors.forEach(function (selector) {\n stringId = node.getAttribute(selector);\n\n if (stringId) {\n var nodeAttribute = selector.replace(baseSelector, '');\n var nodeGroup = node.getAttribute('data-trp-node-group' + nodeAttribute);\n var nodeDescription = node.getAttribute('data-trp-node-description' + nodeAttribute);\n var entry = {\n dbID: stringId,\n selector: selector,\n attribute: nodeAttribute.substr(1) // substr(1) is used to trim prefixing line - ex. -alt will result in alt (no line)\n\n };\n if (nodeGroup) entry.group = nodeGroup;\n if (nodeDescription) entry.description = nodeDescription;\n nodeData.push(entry);\n }\n });\n return nodeData;\n },\n getAllSelectors: function getAllSelectors() {\n var selectors = [];\n var self = this;\n this.dataAttributes.forEach(function (dataAttribute) {\n selectors = selectors.concat(self.prepareSelectorStrings(dataAttribute));\n });\n return selectors;\n },\n prepareSelectorStrings: function prepareSelectorStrings(baseNameSelector) {\n var parsed_selectors = [];\n this.selectors.forEach(function (selectorSuffix, index) {\n parsed_selectors.push(baseNameSelector + selectorSuffix);\n });\n return parsed_selectors;\n },\n parentURL: function parentURL(url) {\n return url.replace('trp-edit-translation=preview', 'trp-edit-translation=true');\n },\n cleanURL: function cleanURL(url) {\n //make removeUrlParameter recursive and only call it once with all the parameters that\n //need to stripped ?\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'lang');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-view-as');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-view-as-nonce');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-edit-translation');\n return url;\n },\n showString: function showString(string, type) {\n if (typeof string.blockType !== 'undefined' && string.blockType === '2') {\n // don't show deprecated translation blocks in the dropdown\n return false;\n }\n\n if (type === this.editorStrings.images && typeof string.attribute != 'undefined' && string.attribute == 'src') return true;\n if (typeof string.attribute !== 'undefined' && (string.attribute == 'href' || string.attribute == 'src')) return false;\n if (string.group === type) return true;\n return false;\n },\n initStringsDropdown: function initStringsDropdown() {\n var self = this;\n\n if (!this.isStringsDropdownOpen()) {\n jQuery('#trp-string-categories').select2('destroy');\n jQuery('#trp-string-categories').select2({\n placeholder: self.editorStrings.select_string,\n templateResult: function templateResult(option) {\n var original = he__WEBPACK_IMPORTED_MODULE_8___default.a.decode(option.text.substring(0, 90)) + (option.text.length <= 90 ? '' : '...');\n var description = option.title ? '(' + option.title + ')' : '';\n return jQuery('<div>' + original + '</div><div class=\"string-selector-description\">' + description + '</div>');\n },\n width: '100%'\n }).prop('disabled', false);\n jQuery('#trp_select2_overlay').hide();\n }\n },\n stringsDropdownLoading: function stringsDropdownLoading() {\n jQuery('#trp-string-categories').select2({\n placeholder: this.editorStrings.strings_loading,\n width: '100%'\n }).prop('disabled', true);\n },\n processOptionName: function processOptionName(name, type) {\n if (type == 'Images') return _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getFilename(name);\n return _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].escapeHtml(name);\n },\n isStringsDropdownOpen: function isStringsDropdownOpen() {\n return jQuery('#trp-string-categories').select2('isOpen');\n },\n hasUnsavedChanges: function hasUnsavedChanges() {\n var unsavedChanges = false;\n var self = this;\n\n if (this.selectedIndexesArray.length > 0) {\n this.selectedIndexesArray.forEach(function (selectedIndex) {\n self.settings['translation-languages'].forEach(function (languageCode) {\n if (self.dictionary[selectedIndex] && self.dictionary[selectedIndex].translationsArray[languageCode] && self.dictionary[selectedIndex].translationsArray[languageCode].translated !== self.dictionary[selectedIndex].translationsArray[languageCode].editedTranslation) {\n unsavedChanges = true;\n }\n });\n });\n }\n\n this.showChangesUnsavedMessage = unsavedChanges;\n return unsavedChanges;\n },\n iframeLoader: function iframeLoader(status) {\n var loader = document.getElementById('trp-preview-loader');\n if (status == 'show') loader.style.display = 'flex';else if (status == 'hide') loader.style.display = 'none';\n },\n previousString: function previousString() {\n var currentValue = document.getElementById('trp-string-categories').value;\n var newValue = +currentValue - 1;\n\n while (newValue >= 0 && document.querySelectorAll('#trp-string-categories option[value=\"' + newValue + '\"]').length === 0) {\n newValue--;\n }\n\n if (newValue < 0) return;\n this.selectedString = newValue.toString();\n },\n nextString: function nextString() {\n var currentValue = document.getElementById('trp-string-categories').value,\n newValue = 0;\n if (currentValue != '') newValue = +currentValue + 1;\n\n while (newValue < this.dictionary.length && document.querySelectorAll('#trp-string-categories option[value=\"' + newValue + '\"]').length === 0) {\n newValue++;\n }\n\n if (newValue >= this.dictionary.length) {\n return;\n }\n\n this.selectedString = newValue.toString();\n },\n addKeyboardShortcutsListener: function addKeyboardShortcutsListener() {\n document.addEventListener(\"keydown\", function (e) {\n if ((window.navigator.platform.match(\"Mac\") ? e.metaKey : e.ctrlKey) && e.altKey) {\n // CTRL + ALT + right arrow\n if (e.keyCode === 39) {\n e.preventDefault();\n window.dispatchEvent(new Event('trp_trigger_next_string_event'));\n } else {\n // CTRL + ALT + left arrow\n if (e.keyCode === 37) {\n e.preventDefault();\n window.dispatchEvent(new Event('trp_trigger_previous_string_event'));\n }\n }\n }\n }, false);\n window.addEventListener('trp_trigger_next_string_event', this.nextString);\n window.addEventListener('trp_trigger_previous_string_event', this.previousString);\n },\n resizeIframe: function resizeIframe(event, ui) {\n var total_width = jQuery(window).width();\n var width = jQuery('#trp-controls').width();\n var previewContainer = jQuery('#trp-preview');\n previewContainer.css('right', width);\n previewContainer.css('left', width - 348);\n previewContainer.css('width', total_width - width);\n }\n },\n //add support for v-model in select2\n directives: {\n select2: {\n inserted: function inserted(el) {\n jQuery(el).on('select2:select', function () {\n var event = new Event('change', {\n bubbles: true,\n cancelable: true\n });\n el.dispatchEvent(event);\n });\n jQuery(el).on('select2:unselect', function () {\n var event = new Event('change', {\n bubbles: true,\n cancelable: true\n });\n el.dispatchEvent(event);\n });\n }\n }\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vYXNzZXRzL3NyYy9qcy9lZGl0b3IudnVlP2E3NjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBLHlGQURBO0FBRUEsK0ZBRkE7QUFHQSx1RkFIQTtBQUlBLHVGQUpBO0FBS0E7QUFMQSxHQURBO0FBUUEsTUFSQSxrQkFRQTtBQUNBO0FBQ0E7QUFDQSw0Q0FGQTtBQUdBLG1EQUhBO0FBSUEsNEVBSkE7QUFLQSwwQ0FMQTtBQU1BLDJDQU5BO0FBT0EsMERBUEE7QUFRQSxpREFSQTtBQVNBLCtDQVRBO0FBVUEscURBVkE7QUFXQSw2Q0FYQTtBQVlBLDJEQVpBO0FBYUEsMERBYkE7QUFjQSwyQ0FkQTtBQWVBO0FBQ0EsdURBaEJBO0FBaUJBLDBEQWpCQTtBQWtCQSw2Q0FsQkE7QUFtQkEsNENBbkJBO0FBb0JBLHVDQXBCQTtBQXFCQSwrQ0FyQkE7QUFzQkEsZ0JBdEJBO0FBdUJBLG9CQXZCQTtBQXdCQSwwQkF4QkE7QUF5QkEsOEJBekJBO0FBMEJBLCtCQTFCQTtBQTJCQSxzQkEzQkE7QUE0QkEsMEJBNUJBO0FBNkJBLG1CQTdCQTtBQThCQSxzQ0E5QkE7QUErQkEsZ0JBL0JBO0FBZ0NBLHdCQWhDQTtBQWlDQTtBQWpDQTtBQW1DQSxHQTVDQTtBQTZDQSxTQTdDQSxxQkE2Q0E7QUFDQSxtR0FEQSxDQUdBOztBQUNBO0FBRUEsaUVBQ0Esb0NBREEsS0FHQTtBQUNBLEdBdkRBO0FBd0RBLFNBeERBLHFCQXdEQTtBQUNBO0FBQ0Esb0JBRkEsQ0FHQTs7QUFDQTtBQUFBO0FBQUEsT0FKQSxDQU1BOztBQUNBLGtDQVBBLENBU0E7O0FBQ0E7QUFDQTtBQUNBLEtBRkEsRUFFQSxFQUZBLENBRUEsZUFGQSxFQUVBO0FBQ0E7QUFDQSxLQUpBLEVBSUEsRUFKQSxDQUlBLGlCQUpBLEVBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBVEEsRUFWQSxDQXFCQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUEsT0FEQTtBQUVBO0FBQUE7QUFBQSxPQUZBO0FBR0Esa0JBSEE7QUFJQSxtQkFKQTtBQUtBO0FBTEEsT0FNQSxJQU5BLENBTUEsUUFOQSxFQU1BLGlCQU5BLEVBeEJBLENBZ0NBOztBQUNBO0FBQ0E7QUFDQSxLQUZBO0FBR0EsR0E1RkE7QUE2RkE7QUFDQTtBQUNBLHNCQURBLENBRUE7O0FBQ0E7QUFFQTtBQUNBLG9DQU5BLENBUUE7O0FBQ0E7QUFDQSxxQ0FWQSxDQVlBOztBQUNBO0FBQ0E7QUFFQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBTkE7QUFPQTtBQUNBLEtBM0JBO0FBNEJBO0FBQ0E7QUFDQSxLQTlCQTtBQStCQTtBQUNBLDRDQUNBO0FBRUE7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQVhBLENBYUE7OztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQUNBLEtBdERBO0FBdURBO0FBRUEsbUdBQ0E7QUFFQTtBQUVBO0FBRUEsMkJBQ0E7QUFFQTtBQUNBLG9DQWJBLENBZUE7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBLGFBRkE7QUFJQTs7QUFFQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBZkE7QUFnQkEsV0FqQkE7QUFrQkEsU0F0Q0E7QUF1Q0EsT0E1Q0EsTUE2Q0E7O0FBRUE7QUFDQTtBQXZIQSxHQTdGQTtBQXNOQTtBQUNBO0FBQ0E7QUFDQTtBQUhBLEdBdE5BO0FBMk5BO0FBQ0EsZ0JBREEsMEJBQ0E7QUFDQTtBQUNBO0FBRUEsMEZBSkEsQ0FNQTs7QUFDQSw4Q0FDQSxrQ0FSQSxDQVVBOztBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUEsb0ZBakJBLENBbUJBOztBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBLE9BUkE7QUFVQSxLQS9CQTtBQWdDQSx3QkFoQ0Esa0NBZ0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FwQ0E7QUFxQ0EsbUJBckNBLDJCQXFDQSxZQXJDQSxFQXFDQSxRQXJDQSxFQXFDQSxhQXJDQSxFQXFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTs7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FOQTtBQVFBO0FBQ0EsT0FaQSxFQVBBLENBcUJBOztBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsOEVBQ0EsSUFEQSxDQUNBO0FBQ0E7QUFDQTtBQUNBLFNBSkEsV0FLQTtBQUNBO0FBQ0EsU0FQQTtBQVFBLE9BaEJBLE1BZ0JBO0FBQ0E7QUFDQTtBQUVBLEtBaEZBO0FBaUZBLG1CQWpGQSwyQkFpRkEsUUFqRkEsRUFpRkEsSUFqRkEsRUFpRkE7QUFDQTs7QUFDQTtBQUNBO0FBQ0EsT0FGQSxNQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0F6RkE7QUEwRkEsc0JBMUZBLDhCQTBGQSxJQTFGQSxFQTBGQTtBQUNBLGdGQUNBO0FBRUE7QUFFQTtBQUNBLEtBakdBO0FBa0dBLG1CQWxHQSwyQkFrR0EsWUFsR0EsRUFrR0E7QUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQSx5R0FDQTtBQUNBOztBQUVBO0FBQ0EsNEJBVkEsQ0FVQTtBQUNBO0FBQ0EsYUFkQTtBQWVBLFdBaEJBO0FBaUJBLFNBbEJBLE1Ba0JBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBLEtBaklBO0FBa0lBLHFCQWxJQSw2QkFrSUEsT0FsSUEsRUFrSUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUpBLEVBSkEsQ0FVQTs7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUpBLEVBakJBLENBdUJBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FKQTtBQU1BO0FBQ0EsS0FqS0E7QUFrS0Esa0JBbEtBLDBCQWtLQSxRQWxLQSxFQWtLQSxJQWxLQSxFQWtLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEE7QUFPQTtBQUNBLEtBN0tBO0FBOEtBLGVBOUtBLHVCQThLQSxJQTlLQSxFQThLQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTs7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0EsMEJBREE7QUFFQSw4QkFGQTtBQUdBLDhDQUhBLENBR0E7O0FBSEE7QUFNQSx5QkFDQTtBQUVBLCtCQUNBO0FBRUE7QUFDQTtBQUVBLE9BekJBO0FBMkJBO0FBQ0EsS0EvTUE7QUFnTkEsbUJBaE5BLDZCQWdOQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0EsT0FGQTtBQUlBO0FBQ0EsS0F6TkE7QUEwTkEsMEJBMU5BLGtDQTBOQSxnQkExTkEsRUEwTkE7QUFDQTtBQUVBO0FBQ0E7QUFDQSxPQUZBO0FBSUE7QUFDQSxLQWxPQTtBQW1PQSxhQW5PQSxxQkFtT0EsR0FuT0EsRUFtT0E7QUFDQTtBQUNBLEtBck9BO0FBc09BLFlBdE9BLG9CQXNPQSxHQXRPQSxFQXNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0EsS0EvT0E7QUFnUEEsY0FoUEEsc0JBZ1BBLE1BaFBBLEVBZ1BBLElBaFBBLEVBZ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EscUhBQ0E7QUFFQSxnSEFDQTtBQUVBLGlDQUNBO0FBRUE7QUFDQSxLQS9QQTtBQWdRQSx1QkFoUUEsaUNBZ1FBO0FBQ0E7O0FBRUE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBLFdBTEE7QUFLQTtBQUxBLFdBS0EsSUFMQSxDQUtBLFVBTEEsRUFLQSxLQUxBO0FBT0E7QUFDQTtBQUNBLEtBL1FBO0FBZ1JBLDBCQWhSQSxvQ0FnUkE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBLEtBbFJBO0FBbVJBLHFCQW5SQSw2QkFtUkEsSUFuUkEsRUFtUkEsSUFuUkEsRUFtUkE7QUFDQSw0QkFDQTtBQUVBO0FBQ0EsS0F4UkE7QUF5UkEseUJBelJBLG1DQXlSQTtBQUNBO0FBQ0EsS0EzUkE7QUE0UkEscUJBNVJBLCtCQTRSQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQ0EsOERBREEsSUFFQSw4SkFGQSxFQUVBO0FBQ0E7QUFDQTtBQUNBLFdBTkE7QUFPQSxTQVJBO0FBU0E7O0FBQ0E7QUFFQTtBQUNBLEtBN1NBO0FBOFNBLGdCQTlTQSx3QkE4U0EsTUE5U0EsRUE4U0E7QUFDQTtBQUVBLDRCQUNBLDhCQURBLEtBRUEsc0JBQ0E7QUFDQSxLQXJUQTtBQXNUQSxrQkF0VEEsNEJBc1RBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsd0JBQ0E7QUFFQTtBQUNBLEtBblVBO0FBb1VBLGNBcFVBLHdCQW9VQTtBQUNBO0FBQUE7QUFFQSw4QkFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FuVkE7QUFvVkEsZ0NBcFZBLDBDQW9WQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBSEEsTUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FkQSxFQWNBLEtBZEE7QUFnQkE7QUFDQTtBQUNBLEtBdldBO0FBd1dBLGdCQXhXQSx3QkF3V0EsS0F4V0EsRUF3V0EsRUF4V0EsRUF3V0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWhYQSxHQTNOQTtBQTZrQkE7QUFDQTtBQUNBO0FBQ0EsY0FEQSxvQkFDQSxFQURBLEVBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQSxTQUhBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0EsU0FIQTtBQUlBO0FBWEE7QUFEQTtBQTlrQkEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vYXNzZXRzL3NyYy9qcy9lZGl0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJi5qcyIsInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2IGlkPVwidHJwLWVkaXRvclwiIGNsYXNzPVwid3AtY29yZS11aVwiPlxuXG4gICAgICAgIDxkaXYgaWQ9XCJ0cnAtY29udHJvbHNcIj5cblxuICAgICAgICAgICAgPGRpdiBpZD1cInRycC1jbG9zZS1zYXZlXCI+XG4gICAgICAgICAgICAgICAgPGEgaWQ9XCJ0cnAtY29udHJvbHMtY2xvc2VcIiA6aHJlZj1cImNsb3NlVVJMXCIgOnRpdGxlPVwiZWRpdG9yU3RyaW5ncy5jbG9zZVwiPjwvYT5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidHJwLXNhdmUtYW5kLWxvYWRlci1zcGlubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRycC1hamF4LWxvYWRlclwiIHYtc2hvdz1cImxvYWRpbmdfc3RyaW5ncyA+IDBcIiBpZD1cInRycC1zdHJpbmctc2F2ZWQtYWpheC1sb2FkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLXNwaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNhdmUtdHJhbnNsYXRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNlbGVjdGVkSW5kZXhlc0FycmF5PVwic2VsZWN0ZWRJbmRleGVzQXJyYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkaWN0aW9uYXJ5PVwiZGljdGlvbmFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNldHRpbmdzPVwic2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpub25jZXM9XCJub25jZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphamF4X3VybD1cImFqYXhVcmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjdXJyZW50TGFuZ3VhZ2U9XCJjdXJyZW50TGFuZ3VhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpvblNjcmVlbkxhbmd1YWdlPVwib25TY3JlZW5MYW5ndWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmlmcmFtZT1cImlmcmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmN1cnJlbnRVUkw9XCJjdXJyZW50VVJMXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bWVyZ2luZ1N0cmluZz1cIm1lcmdpbmdTdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDptZXJnZURhdGE9XCJtZXJnZURhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB0cmFuc2xhdGlvbnMtc2F2ZWQ9XCJzaG93Q2hhbmdlc1Vuc2F2ZWRNZXNzYWdlID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDplZGl0b3JTdHJpbmdzPVwiZWRpdG9yU3RyaW5nc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnN0cmluZ1R5cGVzPVwic3RyaW5nVHlwZXNcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvc2F2ZS10cmFuc2xhdGlvbnM+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRycC1jb250cm9scy1jb250YWluZXJcIiA6Y2xhc3M9XCJ7J3RycC1zaG93LWVkaXRvcnMtbmF2aWdhdGlvbicgOiBlZGl0b3JzTmF2aWdhdGlvbi5zaG93IH1cIj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnAtY29udHJvbHMtc2VjdGlvblwiIGlkPVwidHJwLWNvbnRyb2xzLXNlY3Rpb24tZmlyc3RcIj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLWNvbnRyb2xzLXNlY3Rpb24tY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInRycC1sYW5ndWFnZS1zd2l0Y2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwidHJwLWxhbmd1YWdlLXNlbGVjdFwiIG5hbWU9XCJsYW5nXCIgdi1tb2RlbD1cImN1cnJlbnRMYW5ndWFnZVwiIHYtc2VsZWN0Mj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2LWZvcj1cIihsYW5nLCBsYW5nSW5kZXgpIGluIGxhbmd1YWdlTmFtZXNcIiA6dmFsdWU9XCJsYW5nSW5kZXhcIj57e2xhbmd9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0cnAtc3RyaW5nLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwidHJwLXN0cmluZy1jYXRlZ29yaWVzXCIgdi1tb2RlbD1cInNlbGVjdGVkU3RyaW5nXCIgdi1zZWxlY3QyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0Z3JvdXAgdi1mb3I9XCIoZ3JvdXApIGluIHN0cmluZ0dyb3Vwc1wiIDpsYWJlbD1cImdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHYtZm9yPVwiKHN0cmluZywgaW5kZXgpIGluIGRpY3Rpb25hcnlcIiA6dmFsdWU9XCJpbmRleFwiIHYtaWY9XCJzaG93U3RyaW5nKCBzdHJpbmcsIGdyb3VwIClcIiA6dGl0bGU9XCJzdHJpbmcuZGVzY3JpcHRpb25cIiA6ZGF0YS1kYXRhYmFzZS1pZD1cInN0cmluZy5kYklEXCIgOmRhdGEtZ3JvdXA9XCJzdHJpbmcuZ3JvdXBcIj57eyBwcm9jZXNzT3B0aW9uTmFtZSggc3RyaW5nLm9yaWdpbmFsLCBncm91cCApIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0Z3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInRycC1uZXh0LXByZXZpb3VzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJ0cnAtcHJldmlvdXNcIiBjbGFzcz1cInRycC1uZXh0LXByZXZpb3VzLWJ1dHRvbnMgYnV0dG9uXCIgdi1vbjpjbGljaz1cInByZXZpb3VzU3RyaW5nKClcIiA6dGl0bGU9XCJlZGl0b3JTdHJpbmdzLnByZXZpb3VzX3RpdGxlX2F0dHJcIj48c3Bhbj4mbGFxdW87PC9zcGFuPiB7eyBlZGl0b3JTdHJpbmdzLnByZXZpb3VzIH19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJ0cnAtbmV4dFwiIGNsYXNzPVwidHJwLW5leHQtcHJldmlvdXMtYnV0dG9ucyBidXR0b25cIiB2LW9uOmNsaWNrPVwibmV4dFN0cmluZygpXCIgOnRpdGxlPVwiZWRpdG9yU3RyaW5ncy5uZXh0X3RpdGxlX2F0dHJcIj57eyBlZGl0b3JTdHJpbmdzLm5leHQgfX0gPHNwYW4+JnJhcXVvOzwvc3Bhbj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidHJwLXZpZXctYXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidHJwLXZpZXctYXMtZGVzY3JpcHRpb25cIj57eyBlZGl0b3JTdHJpbmdzLnZpZXdfYXMgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwidHJwLXZpZXctYXMtc2VsZWN0XCIgdi1tb2RlbD1cInZpZXdBc1wiIHYtc2VsZWN0Mj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2LWZvcj1cIihyb2xlLCByb2xlSW5kZXgpIGluIHJvbGVzXCIgOnZhbHVlPVwicm9sZVwiIDpkaXNhYmxlZD1cIiFyb2xlXCIgOnRpdGxlPVwiIXJvbGUgPyBlZGl0b3JTdHJpbmdzLnZpZXdfYXNfcHJvIDogJydcIj57e3JvbGVJbmRleH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnAtY29udHJvbHMtc2VjdGlvblwiIHYtc2hvdz1cInNlbGVjdGVkU3RyaW5nICE9PSBudWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYW5ndWFnZS1ib3hlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzZWxlY3RlZEluZGV4ZXNBcnJheT1cInNlbGVjdGVkSW5kZXhlc0FycmF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGljdGlvbmFyeT1cImRpY3Rpb25hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjdXJyZW50TGFuZ3VhZ2U9XCJjdXJyZW50TGFuZ3VhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpvblNjcmVlbkxhbmd1YWdlPVwib25TY3JlZW5MYW5ndWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmxhbmd1YWdlTmFtZXM9XCJsYW5ndWFnZU5hbWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c2V0dGluZ3M9XCJzZXR0aW5nc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNob3dDaGFuZ2VzVW5zYXZlZE1lc3NhZ2U9XCJzaG93Q2hhbmdlc1Vuc2F2ZWRNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZGlzY2FyZGVkLWNoYW5nZXM9XCJoYXNVbnNhdmVkQ2hhbmdlcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZWRpdG9yU3RyaW5ncz1cImVkaXRvclN0cmluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpmbGFnc1BhdGg9XCJmbGFnc1BhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDppZnJhbWU9XCJpZnJhbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpub25jZXM9XCJub25jZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphamF4X3VybD1cImFqYXhVcmxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvbGFuZ3VhZ2UtYm94ZXM+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZXh0cmEtY29udGVudCA6bGFuZ3VhZ2VOYW1lcz1cImxhbmd1YWdlTmFtZXNcIiA6ZWRpdG9yU3RyaW5ncz1cImVkaXRvclN0cmluZ3NcIiA6cGFpZFZlcnNpb249XCJwYWlkVmVyc2lvblwiPjwvZXh0cmEtY29udGVudD5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnAtY29udHJvbHMtc2VjdGlvblwiIHYtc2hvdz1cInRyYW5zbGF0aW9uTm90TG9hZGVkWWV0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0cnAtdHJhbnNsYXRpb24tbm90LXJlYWR5LXNlY3Rpb25cIiBjbGFzcz1cInRycC1jb250cm9scy1zZWN0aW9uLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIHYtaHRtbD1cImVkaXRvclN0cmluZ3MudHJhbnNsYXRpb25fbm90X2xvYWRlZF95ZXRcIj48L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxlZGl0b3JzLW5hdmlnYXRpb24gOmVkaXRvcnNOYXZpZ2F0aW9uPVwiZWRpdG9yc05hdmlnYXRpb25cIiA6c2VsZWN0ZWRUYWI9XCIndmlzdWFsZWRpdG9yJ1wiPjwvZWRpdG9ycy1uYXZpZ2F0aW9uPlxuXG4gICAgICAgICAgICA8ZGl2IGlkPVwidHJwX3NlbGVjdDJfb3ZlcmxheVwiPjwvZGl2PlxuXG4gICAgICAgICAgICA8aG92ZXItYWN0aW9uc1xuICAgICAgICAgICAgICAgIHJlZj1cImhvdmVyQWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgOmRpY3Rpb25hcnk9XCJkaWN0aW9uYXJ5XCJcbiAgICAgICAgICAgICAgICA6c2V0dGluZ3M9XCJzZXR0aW5nc1wiXG4gICAgICAgICAgICAgICAgOmlmcmFtZT1cImlmcmFtZVwiXG4gICAgICAgICAgICAgICAgOmRhdGFBdHRyaWJ1dGVzPVwiZGF0YUF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgIDptZXJnZVJ1bGVzPVwibWVyZ2VSdWxlc1wiXG4gICAgICAgICAgICAgICAgOm5vbmNlcz1cIm5vbmNlc1wiXG4gICAgICAgICAgICAgICAgOmFqYXhfdXJsPVwiYWpheFVybFwiXG4gICAgICAgICAgICAgICAgOm1lcmdlRGF0YT1cIm1lcmdlRGF0YVwiXG4gICAgICAgICAgICAgICAgOmVkaXRvclN0cmluZ3M9XCJlZGl0b3JTdHJpbmdzXCJcbiAgICAgICAgICAgICAgICA6Y3VycmVudExhbmd1YWdlPVwiY3VycmVudExhbmd1YWdlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvaG92ZXItYWN0aW9ucz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBpZD1cInRycC1wcmV2aWV3XCI+XG4gICAgICAgICAgICA8aWZyYW1lIGlkPVwidHJwLXByZXZpZXctaWZyYW1lXCIgOnNyYz1cInVybFRvTG9hZFwiIHYtb246bG9hZD1cImlGcmFtZUxvYWRlZFwiPjwvaWZyYW1lPlxuXG4gICAgICAgICAgICA8ZGl2IGlkPVwidHJwLXByZXZpZXctbG9hZGVyXCIgY2xhc3M9XCJ0cnAtbG9hZGluZy1zY3JlZW5cIj5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwidHJwLWxvYWRlclwiIHdpZHRoPVwiNjVweFwiIGhlaWdodD1cIjY1cHhcIiB2aWV3Qm94PVwiMCAwIDY2IDY2XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwidHJwLWNpcmNsZVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBjeD1cIjMzXCIgY3k9XCIzM1wiIHI9XCIzMFwiPjwvY2lyY2xlPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgICBpbXBvcnQgJ3NlbGVjdDIvZGlzdC9qcy9zZWxlY3QyLm1pbi5qcydcbiAgICBpbXBvcnQgdXRpbHMgICAgICAgICAgICBmcm9tICcuL3V0aWxzJ1xuICAgIGltcG9ydCBheGlvcyAgICAgICAgICAgIGZyb20gJ2F4aW9zJ1xuICAgIGltcG9ydCBsYW5ndWFnZUJveGVzICAgIGZyb20gJy4vY29tcG9uZW50cy9sYW5ndWFnZS1ib3hlcy52dWUnXG4gICAgaW1wb3J0IHNhdmVUcmFuc2xhdGlvbnMgZnJvbSAnLi9jb21wb25lbnRzL3NhdmUtdHJhbnNsYXRpb25zLnZ1ZSdcbiAgICBpbXBvcnQgaG92ZXJBY3Rpb25zICAgICBmcm9tICcuL2NvbXBvbmVudHMvaG92ZXItYWN0aW9ucy52dWUnXG4gICAgaW1wb3J0IGV4dHJhQ29udGVudCAgICAgZnJvbSAnLi9jb21wb25lbnRzL2V4dHJhLWNvbnRlbnQudnVlJ1xuICAgIGltcG9ydCBlZGl0b3JzTmF2aWdhdGlvbiAgICAgZnJvbSAnLi9jb21wb25lbnRzL2VkaXRvcnMtbmF2aWdhdGlvbi52dWUnXG4gICAgaW1wb3J0IGhlICAgICAgICAgICAgICAgZnJvbSAnaGUnXG5cbiAgICBleHBvcnQgZGVmYXVsdCB7XG4gICAgICAgIGNvbXBvbmVudHM6e1xuICAgICAgICAgICAgbGFuZ3VhZ2VCb3hlcyxcbiAgICAgICAgICAgIHNhdmVUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgICBob3ZlckFjdGlvbnMsXG4gICAgICAgICAgICBleHRyYUNvbnRlbnQsXG4gICAgICAgICAgICBlZGl0b3JzTmF2aWdhdGlvblxuICAgICAgICB9LFxuICAgICAgICBkYXRhKCl7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC8vcHJvcHNcbiAgICAgICAgICAgICAgICBzZXR0aW5ncyAgICAgICAgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLnRycF9zZXR0aW5ncyxcbiAgICAgICAgICAgICAgICBsYW5ndWFnZU5hbWVzICAgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLmxhbmd1YWdlX25hbWVzLFxuICAgICAgICAgICAgICAgIG9yZGVyZWRTZWNvbmRhcnlMYW5ndWFnZXMgOiB0cnBfZWRpdG9yX2RhdGEub3JkZXJlZF9zZWNvbmRhcnlfbGFuZ3VhZ2VzLFxuICAgICAgICAgICAgICAgIHJvbGVzICAgICAgICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEudmlld19hc19yb2xlcyxcbiAgICAgICAgICAgICAgICBub25jZXMgICAgICAgICAgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLmVkaXRvcl9ub25jZXMsXG4gICAgICAgICAgICAgICAgc3RyaW5nR3JvdXBPcmRlciAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5zdHJpbmdfZ3JvdXBfb3JkZXIsXG4gICAgICAgICAgICAgICAgc2VsZWN0b3JzICAgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5zdHJpbmdfc2VsZWN0b3JzLFxuICAgICAgICAgICAgICAgIHN0cmluZ1R5cGVzICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuc3RyaW5nX3R5cGVzLFxuICAgICAgICAgICAgICAgIGRhdGFBdHRyaWJ1dGVzICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuZGF0YV9hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgIG1lcmdlUnVsZXMgICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEubWVyZ2VfcnVsZXMsXG4gICAgICAgICAgICAgICAgZWRpdG9yc05hdmlnYXRpb24gICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5lZGl0b3JzX25hdmlnYXRpb24sXG4gICAgICAgICAgICAgICAgZWRpdG9yU3RyaW5ncyAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS50cnBfbG9jYWxpemVkX3N0cmluZ3MsXG4gICAgICAgICAgICAgICAgZmxhZ3NQYXRoICAgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5mbGFnc19wYXRoLFxuICAgICAgICAgICAgICAgIC8vZGF0YVxuICAgICAgICAgICAgICAgIGN1cnJlbnRMYW5ndWFnZSAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuY3VycmVudF9sYW5ndWFnZSxcbiAgICAgICAgICAgICAgICBvblNjcmVlbkxhbmd1YWdlICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLm9uX3NjcmVlbl9sYW5ndWFnZSxcbiAgICAgICAgICAgICAgICBjdXJyZW50VVJMICAgICAgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLnVybF90b19sb2FkLFxuICAgICAgICAgICAgICAgIHVybFRvTG9hZCAgICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEudXJsX3RvX2xvYWQsXG4gICAgICAgICAgICAgICAgYWpheFVybCAgICAgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5hamF4X3VybCxcbiAgICAgICAgICAgICAgICBwYWlkVmVyc2lvbiAgICAgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLnBhaWRfdmVyc2lvbixcbiAgICAgICAgICAgICAgICBpZnJhbWUgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgZGljdGlvbmFyeSAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkU3RyaW5nICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSW5kZXhlc0FycmF5ICAgICAgOiBbXSxcbiAgICAgICAgICAgICAgICBkZXRlY3RlZFNlbGVjdG9yQW5kSWQgICAgIDogW10sXG4gICAgICAgICAgICAgICAgc3RyaW5nR3JvdXBzICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgIG1lcmdpbmdTdHJpbmcgICAgICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtZXJnZURhdGEgICAgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICAgICAgc2hvd0NoYW5nZXNVbnNhdmVkTWVzc2FnZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZpZXdBcyAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBsb2FkaW5nX3N0cmluZ3MgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk5vdExvYWRlZFlldCAgIDogZmFsc2UsXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZWQoKXtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NbJ2RlZmF1bHQtbGFuZ3VhZ2UtbmFtZSddID0gdGhpcy5sYW5ndWFnZU5hbWVzWyB0aGlzLnNldHRpbmdzWydkZWZhdWx0LWxhbmd1YWdlJ10gXVxuXG4gICAgICAgICAgICAvL3NldCBkZWZhdWx0IHZhbHVlIGZvciB0aGUgVmlldyBBcyBzZWxlY3RcbiAgICAgICAgICAgIGxldCBwYXJhbXMgPSB1dGlscy5nZXRVcmxQYXJhbWV0ZXJzKCB0aGlzLmN1cnJlbnRVUkwgKVxuXG4gICAgICAgICAgICBpZiggT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGggPiAxICYmIHBhcmFtc1sndHJwLXZpZXctYXMnXSApXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3QXMgPSBwYXJhbXNbJ3RycC12aWV3LWFzJ11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdBcyA9ICdjdXJyZW50X3VzZXInXG4gICAgICAgIH0sXG4gICAgICAgIG1vdW50ZWQoKXtcbiAgICAgICAgICAgIHRoaXMuYWRkS2V5Ym9hcmRTaG9ydGN1dHNMaXN0ZW5lcigpXG4gICAgICAgICAgICBsZXQgc2VsZiA9IHRoaXNcbiAgICAgICAgICAgIC8vIGluaXRpYWxpemUgc2VsZWN0MlxuICAgICAgICAgICAgalF1ZXJ5KCAnI3RycC1sYW5ndWFnZS1zZWxlY3QsICN0cnAtdmlldy1hcy1zZWxlY3QnICkuc2VsZWN0MiggeyB3aWR0aCA6ICcxMDAlJyB9KVxuXG4gICAgICAgICAgICAvL2luaXQgc3RyaW5ncyBkcm9wZG93blxuICAgICAgICAgICAgdGhpcy5zdHJpbmdzRHJvcGRvd25Mb2FkaW5nKClcblxuICAgICAgICAgICAgLy8gc2hvdyBvdmVybGF5IHdoZW4gc2VsZWN0IGlzIG9wZW5lZFxuICAgICAgICAgICAgalF1ZXJ5KCAnI3RycC1sYW5ndWFnZS1zZWxlY3QsICN0cnAtc3RyaW5nLWNhdGVnb3JpZXMnICkub24oICdzZWxlY3QyOm9wZW4nLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBqUXVlcnkoICcjdHJwX3NlbGVjdDJfb3ZlcmxheScgKS5mYWRlSW4oICcxMDAnIClcbiAgICAgICAgICAgIH0pLm9uKCAnc2VsZWN0MjpjbG9zZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGpRdWVyeSggJyN0cnBfc2VsZWN0Ml9vdmVybGF5JyApLmhpZGUoKVxuICAgICAgICAgICAgfSkub24oICdzZWxlY3QyOm9wZW5pbmcnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgLyogd2hlbiB3ZSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBwcmV2ZW50IHRoZSBzdHJpbmdzIGRyb3Bkb3duIGZyb20gb3BlbmluZyBzbyB3ZSBkbyBub3QgaGF2ZSBhIGRpc2Nvbm5lY3QgYmV0d2VlbiB0aGUgdGV4dGFyZWFzIGFuZCB0aGUgZHJvcGRvd24gKi9cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5oYXNVbnNhdmVkQ2hhbmdlcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIC8vIHJlc2l6ZSBzaWRlYmFyIGFuZCBjb25zZXF1ZW50bHkgdGhlIGlmcmFtZVxuICAgICAgICAgICAgbGV0IHByZXZpZXdDb250YWluZXIgPSBqUXVlcnkoICcjdHJwLXByZXZpZXcnICk7XG4gICAgICAgICAgICBsZXQgdG90YWxfd2lkdGggPSBqUXVlcnkod2luZG93KS53aWR0aCgpO1xuICAgICAgICAgICAgalF1ZXJ5KCAnI3RycC1jb250cm9scycgKS5yZXNpemFibGUoe1xuICAgICAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiggKSB7IHByZXZpZXdDb250YWluZXIudG9nZ2xlKCk7IH0sXG4gICAgICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24oICkgeyBwcmV2aWV3Q29udGFpbmVyLnRvZ2dsZSgpOyB9LFxuICAgICAgICAgICAgICAgIGhhbmRsZXM6ICdlJyxcbiAgICAgICAgICAgICAgICBtaW5XaWR0aDogMzI3LFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiB0b3RhbF93aWR0aCAtIDIwXG4gICAgICAgICAgICB9KS5iaW5kKCBcInJlc2l6ZVwiLCB0aGlzLnJlc2l6ZUlmcmFtZSApO1xuXG4gICAgICAgICAgICAvLyByZXNpemUgaWZyYW1lIHdoZW4gcmVzaXppbmcgd2luZG93XG4gICAgICAgICAgICBqUXVlcnkoIHdpbmRvdyApLnJlc2l6ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yZXNpemVJZnJhbWUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB3YXRjaDoge1xuICAgICAgICAgICAgY3VycmVudExhbmd1YWdlOiBmdW5jdGlvbiggY3VycmVudExhbmd1YWdlICkge1xuICAgICAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xuICAgICAgICAgICAgICAgIC8vZ3JhYiB0aGUgY29ycmVjdCBVUkwgZnJvbSB0aGUgaUZyYW1lXG4gICAgICAgICAgICAgICAgbGV0IG5ld1VSTCA9IHRoaXMuaWZyYW1lLnF1ZXJ5U2VsZWN0b3IoICdsaW5rW2hyZWZsYW5nPVwiJyArIGN1cnJlbnRMYW5ndWFnZS5yZXBsYWNlKCAnXycsICctJyApICsnXCJdJyApLmdldEF0dHJpYnV0ZSgnaHJlZicpXG5cbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRVUkwgICAgICAgICAgID0gbmV3VVJMXG4gICAgICAgICAgICAgICAgdGhpcy5pZnJhbWUubG9jYXRpb24gICAgICA9IG5ld1VSTFxuXG4gICAgICAgICAgICAgICAgLy9yZXNldCB2dWUgcHJvcHNcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RyaW5nICAgICAgID0gJydcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhlc0FycmF5ID0gW11cblxuICAgICAgICAgICAgICAgIC8vc2V0IHN0cmluZ3MgZHJvcGRvd24gdG8gbG9hZGluZyBzdGF0ZVxuICAgICAgICAgICAgICAgIGpRdWVyeSgnI3RycC1zdHJpbmctY2F0ZWdvcmllcycpLnZhbCgnJykudHJpZ2dlcignY2hhbmdlJylcbiAgICAgICAgICAgICAgICB0aGlzLnN0cmluZ3NEcm9wZG93bkxvYWRpbmcoKVxuXG4gICAgICAgICAgICAgICAgdGhpcy5vblNjcmVlbkxhbmd1YWdlID0gY3VycmVudExhbmd1YWdlXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2V0dGluZ3NbJ2RlZmF1bHQtbGFuZ3VhZ2UnXSA9PSB0aGlzLmN1cnJlbnRMYW5ndWFnZSAmJiB0aGlzLnNldHRpbmdzWyd0cmFuc2xhdGlvbi1sYW5ndWFnZXMnXS5sZW5ndGggPiAxICl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NbJ3RyYW5zbGF0aW9uLWxhbmd1YWdlcyddLnNvbWUoZnVuY3Rpb24obGFuZ3VhZ2Upe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBsYW5ndWFnZSAhPSBzZWxmLnNldHRpbmdzWydkZWZhdWx0LWxhbmd1YWdlJ10gKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gdGhlIGZpcnN0IGxhbmd1YWdlIG5vdCBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vblNjcmVlbkxhbmd1YWdlID0gbGFuZ3VhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjdXJyZW50VVJMOiBmdW5jdGlvbiAoIG5ld1VybCwgb2xkVXJsICkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSggbnVsbCwgbnVsbCwgdGhpcy5wYXJlbnRVUkwoIG5ld1VybCApIClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2aWV3QXM6IGZ1bmN0aW9uKCByb2xlICkge1xuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5jdXJyZW50VVJMIHx8ICF0aGlzLmlmcmFtZSApXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgICAgICAgICAgbGV0IHVybCA9IHRoaXMuY2xlYW5VUkwoIHRoaXMuY3VycmVudFVSTCApXG5cbiAgICAgICAgICAgICAgICB1cmwgPSB1dGlscy51cGRhdGVVcmxQYXJhbWV0ZXIoIHVybCwgJ3RycC1lZGl0LXRyYW5zbGF0aW9uJywgJ3ByZXZpZXcnIClcblxuICAgICAgICAgICAgICAgIGlmKCByb2xlID09ICdjdXJyZW50X3VzZXInICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlmcmFtZS5sb2NhdGlvbiA9IHVybFxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvL2lmIG5vbmNlIG5vdCBhdmFpbGFibGUsIGFuIHVwZGF0ZSB0byB0aGUgQnJvd3NlIGFzIE90aGVyIFJvbGVzIGFkZC1vbiBpcyByZXF1aXJlZFxuICAgICAgICAgICAgICAgIGlmKCAhdGhpcy5ub25jZXNbcm9sZV0gKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KCB0aGlzLmVkaXRvclN0cmluZ3MuYm9yX3VwZGF0ZV9ub3RpY2UgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB1cmwgPSB1dGlscy51cGRhdGVVcmxQYXJhbWV0ZXIoIHVybCwgJ3RycC12aWV3LWFzJywgcm9sZSApXG4gICAgICAgICAgICAgICAgdXJsID0gdXRpbHMudXBkYXRlVXJsUGFyYW1ldGVyKCB1cmwsICd0cnAtdmlldy1hcy1ub25jZScsIHRoaXMubm9uY2VzW3JvbGVdIClcblxuICAgICAgICAgICAgICAgIHRoaXMuaWZyYW1lLmxvY2F0aW9uID0gdXJsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0ZWRTdHJpbmc6IGZ1bmN0aW9uICggc2VsZWN0ZWRTdHJpbmdBcnJheUluZGV4LCBvbGRTdHJpbmcgKXtcblxuICAgICAgICAgICAgICAgIGlmKCB0aGlzLmhhc1Vuc2F2ZWRDaGFuZ2VzKCkgfHwgKCAhc2VsZWN0ZWRTdHJpbmdBcnJheUluZGV4ICYmIHNlbGVjdGVkU3RyaW5nQXJyYXlJbmRleCAhPT0gMCApIClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgICAgICAgICBqUXVlcnkoICcjdHJwLXN0cmluZy1jYXRlZ29yaWVzJyApLnZhbCggc2VsZWN0ZWRTdHJpbmdBcnJheUluZGV4ICE9PSBudWxsID8gc2VsZWN0ZWRTdHJpbmdBcnJheUluZGV4IDogJycgKS50cmlnZ2VyKCAnY2hhbmdlJyApXG5cbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRTdHJpbmcgICAgICAgPSB0aGlzLmRpY3Rpb25hcnlbc2VsZWN0ZWRTdHJpbmdBcnJheUluZGV4XVxuXG4gICAgICAgICAgICAgICAgaWYoICFzZWxlY3RlZFN0cmluZyApXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnROb2RlcyAgICAgICAgICA9IHRoaXMuaWZyYW1lLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW1wiICsgc2VsZWN0ZWRTdHJpbmcuc2VsZWN0b3IgKyBcIj0nXCIgKyBzZWxlY3RlZFN0cmluZy5kYklEICsgXCInXVwiKVxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZEluZGV4ZXNBcnJheSA9IFtdXG5cbiAgICAgICAgICAgICAgICAvL3doZW4gbWVyZ2luZyB3ZSBkbyBub3QgaGF2ZSBhIHZhbGlkIGN1cnJlbnQgbm9kZSwgc28gd2UganVzdCBhZGQgdGhlIGZha2UgaWRcbiAgICAgICAgICAgICAgICBpZiggY3VycmVudE5vZGVzLmxlbmd0aCA+IDAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xuICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0b3JzID0gc2VsZi5nZXRBbGxTZWxlY3RvcnMoKVxuICAgICAgICAgICAgICAgICAgICBsZXQgbm9kZXMgPSBbXVxuXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2Rlcy5mb3JFYWNoKCBmdW5jdGlvbiAoIGN1cnJlbnROb2RlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMucHVzaCggY3VycmVudE5vZGUgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGN1cnJlbnROb2RlLnRhZ05hbWUgIT0gXCJBXCIgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmNsdWRlIHRoZSBhbmNob3IncyB0cmFuc2xhdGFibGUgYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhbmNob3JQYXJlbnQgID0gY3VycmVudE5vZGUuY2xvc2VzdCgnYScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICBhbmNob3JQYXJlbnQgIT0gbnVsbCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMucHVzaChhbmNob3JQYXJlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGN1cnJlbnROb2RlLnRhZ05hbWUgPT0gXCJBXCIgJiYgY3VycmVudE5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGUgYWxsIHRoZSB0cmFuc2xhdGFibGUgYXR0cmlidXRlcyBpbnNpZGUgdGhlIGFuY2hvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbkFycmF5ID0gWyAuLi5jdXJyZW50Tm9kZS5jaGlsZHJlbiBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuQXJyYXkuZm9yRWFjaCggZnVuY3Rpb24gKCBjaGlsZCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMucHVzaChjaGlsZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmZvckVhY2goIGZ1bmN0aW9uKCBub2RlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RyaW5nSWQgPSBub2RlLmdldEF0dHJpYnV0ZShzZWxlY3RvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZ0lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciggaSA9IDA7IGkgPCBzZWxlY3RlZEluZGV4ZXNBcnJheS5sZW5ndGg7IGkrKyApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHNlbGYuZGljdGlvbmFyeVtzZWxlY3RlZEluZGV4ZXNBcnJheVtpXV0gIT09ICd1bmRlZmluZWQnICYmIHNlbGYuZGljdGlvbmFyeVtzZWxlY3RlZEluZGV4ZXNBcnJheVtpXV0uZGJJRCAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5kaWN0aW9uYXJ5W3NlbGVjdGVkSW5kZXhlc0FycmF5W2ldXS5kYklEID09PSBzdHJpbmdJZCApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhIGZvdW5kICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSW5kZXhlc0FycmF5LnB1c2goc2VsZi5nZXRTdHJpbmdJbmRleChzZWxlY3Rvciwgc3RyaW5nSWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSW5kZXhlc0FycmF5LnB1c2goIHNlbGVjdGVkU3RyaW5nQXJyYXlJbmRleCApXG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhlc0FycmF5ID0gc2VsZWN0ZWRJbmRleGVzQXJyYXlcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbXB1dGVkOiB7XG4gICAgICAgICAgICBjbG9zZVVSTDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5VUkwoIHRoaXMuY3VycmVudFVSTCApXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgIGlGcmFtZUxvYWRlZCgpe1xuICAgICAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xuICAgICAgICAgICAgICAgIGxldCBpZnJhbWVFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3RycC1wcmV2aWV3LWlmcmFtZScpXG5cbiAgICAgICAgICAgICAgICB0aGlzLmlmcmFtZSA9IGlmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50IHx8IGlmcmFtZUVsZW1lbnQuY29udGVudFdpbmRvdy5kb2N1bWVudFxuXG4gICAgICAgICAgICAgICAgLy9zeW5jIGlGcmFtZSBVUkwgd2l0aCBwYXJlbnRcbiAgICAgICAgICAgICAgICBpZiAoIHRoaXMuY3VycmVudFVSTCAhPSB0aGlzLmlmcmFtZS5VUkwgKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRVUkwgPSB0aGlzLmlmcmFtZS5VUkxcblxuICAgICAgICAgICAgICAgIC8vaGlkZSBpRnJhbWUgbG9hZGVyXG4gICAgICAgICAgICAgICAgdGhpcy5pZnJhbWVMb2FkZXIoICdoaWRlJyApXG5cbiAgICAgICAgICAgICAgICBzZWxmLmRldGVjdGVkU2VsZWN0b3JBbmRJZCA9IFtdXG4gICAgICAgICAgICAgICAgc2VsZi5kaWN0aW9uYXJ5ICAgICAgICAgICAgPSBbXVxuICAgICAgICAgICAgICAgIHRoaXMuc2NhbklmcmFtZUZvclN0cmluZ3MoKVxuXG4gICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICd0cnBfaWZyYW1lX3BhZ2VfdXBkYXRlZCcsIHRoaXMuc2NhbklmcmFtZUZvclN0cmluZ3MgKVxuXG4gICAgICAgICAgICAgICAgLy9ldmVudCB0aGF0IGlzIGZpcmVkIHdoZW4gdGhlIGlGcmFtZSBpcyBuYXZpZ2F0ZWRcbiAgICAgICAgICAgICAgICBpZnJhbWVFbGVtZW50LmNvbnRlbnRXaW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pZnJhbWVMb2FkZXIoICdzaG93JyApXG5cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZFN0cmluZyA9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEluZGV4ZXNBcnJheSA9IFtdXG4gICAgICAgICAgICAgICAgICAgIHNlbGYudHJhbnNsYXRpb25Ob3RMb2FkZWRZZXQgPSBmYWxzZVxuXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyaW5nc0Ryb3Bkb3duTG9hZGluZygpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2NhbklmcmFtZUZvclN0cmluZ3MoKXtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYW5Gb3JTZWxlY3RvciggJ2RhdGEtdHJwLXRyYW5zbGF0ZS1pZCcsICdyZWd1bGFyJywgdGhpcy5vblNjcmVlbkxhbmd1YWdlIClcbiAgICAgICAgICAgICAgICB0aGlzLnNjYW5Gb3JTZWxlY3RvciggJ2RhdGEtdHJwZ2V0dGV4dG9yaWdpbmFsJywgJ2dldHRleHQnLCB0aGlzLmN1cnJlbnRMYW5ndWFnZSApXG4gICAgICAgICAgICAgICAgdGhpcy5zY2FuRm9yU2VsZWN0b3IoICdkYXRhLXRycC1wb3N0LXNsdWcnLCAncG9zdHNsdWcnLCB0aGlzLmN1cnJlbnRMYW5ndWFnZSApXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2NhbkZvclNlbGVjdG9yKCBiYXNlU2VsZWN0b3IsIHR5cGVTbHVnLCBsYW5ndWFnZU9mSWRzICl7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nX3N0cmluZ3MrK1xuICAgICAgICAgICAgICAgIGxldCBzZWxmICAgICAgICAgICA9IHRoaXNcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0b3JzICAgICAgPSB0aGlzLnByZXBhcmVTZWxlY3RvclN0cmluZ3MoIGJhc2VTZWxlY3RvciApXG4gICAgICAgICAgICAgICAgbGV0IG5vZGVzICAgICAgICAgID0gWy4uLnRoaXMuaWZyYW1lLnF1ZXJ5U2VsZWN0b3JBbGwoICdbJyArIHNlbGVjdG9ycy5qb2luKCddLFsnKSArICddJyApXVxuICAgICAgICAgICAgICAgIGxldCBzdHJpbmdJZHNBcnJheSA9IFtdLCBub2RlRGF0YSA9IFtdLCBub2RlRW50cmllcyA9IFtdXG5cbiAgICAgICAgICAgICAgICBub2Rlcy5mb3JFYWNoKCBmdW5jdGlvbiAoIG5vZGUgKXtcbiAgICAgICAgICAgICAgICAgICAgbm9kZUVudHJpZXMgPSBzZWxmLmdldE5vZGVJbmZvKCBub2RlLCBiYXNlU2VsZWN0b3IgKVxuXG4gICAgICAgICAgICAgICAgICAgIG5vZGVFbnRyaWVzLmZvckVhY2goIGZ1bmN0aW9uKCBlbnRyeSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgY2hlY2sgZW5zdXJlcyB0aGF0IHdlIGRvbid0IGNyZWF0ZSBkdXBsaWNhdGVzIHdoZW4gcmVzY2FubmluZyBhZnRlciBhamF4IGNvbXBsZXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFzZWxmLmFscmVhZHlEZXRlY3RlZCggZW50cnkuc2VsZWN0b3IsIGVudHJ5LmRiSUQgKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdJZHNBcnJheS5wdXNoKGVudHJ5LmRiSUQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZURhdGEucHVzaChlbnRyeSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNldHVwRXZlbnRMaXN0ZW5lciggbm9kZSApXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIC8vdW5pcXVlIGlkcyBvbmx5XG4gICAgICAgICAgICAgICAgc3RyaW5nSWRzQXJyYXkgPSBbLi4ubmV3IFNldChzdHJpbmdJZHNBcnJheSldXG4gICAgICAgICAgICAgICAgaWYgKCBzdHJpbmdJZHNBcnJheS5sZW5ndGggPiAwICkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdhY3Rpb24nICAgICAgICwgJ3RycF9nZXRfdHJhbnNsYXRpb25zXycgKyB0eXBlU2x1ZylcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ2FsbF9sYW5ndWFnZXMnLCAndHJ1ZScpXG4gICAgICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdzZWN1cml0eScgICAgICwgdGhpcy5ub25jZXNbJ2dldHRyYW5zbGF0aW9uc25vbmNlJyArIHR5cGVTbHVnXSlcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ2xhbmd1YWdlJyAgICAgLCBsYW5ndWFnZU9mSWRzKVxuICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgnc3RyaW5nX2lkcycgICAsIEpTT04uc3RyaW5naWZ5KHN0cmluZ0lkc0FycmF5KSlcblxuICAgICAgICAgICAgICAgICAgICBheGlvcy5wb3N0KHRoaXMuYWpheFVybCwgZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZGluZ19zdHJpbmdzLS1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZFRvRGljdGlvbmFyeShyZXNwb25zZS5kYXRhLCBub2RlRGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZGluZ19zdHJpbmdzLS1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhbHJlYWR5RGV0ZWN0ZWQoIHNlbGVjdG9yLCBkYklkICl7XG4gICAgICAgICAgICAgICAgbGV0IGNvbWJpbmVkID0gc2VsZWN0b3IgKyAnPScgKyBkYklkXG4gICAgICAgICAgICAgICAgaWYgKCB1dGlscy5hcnJheUNvbnRhaW5zSXRlbSggdGhpcy5kZXRlY3RlZFNlbGVjdG9yQW5kSWQsIGNvbWJpbmVkICkgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGVjdGVkU2VsZWN0b3JBbmRJZC5wdXNoKGNvbWJpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0dXBFdmVudExpc3RlbmVyKCBub2RlICl7XG4gICAgICAgICAgICAgICAgaWYgKCBub2RlLnRhZ05hbWUgPT0gJ0EnICYmICFub2RlLmhhc0F0dHJpYnV0ZSggJ2RhdGEtdHJwZ2V0dGV4dG9yaWdpbmFsJyApIClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG5cbiAgICAgICAgICAgICAgICBsZXQgc2VsZiA9IHRoaXNcblxuICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lciggJ21vdXNlZW50ZXInLCBzZWxmLiRyZWZzLmhvdmVyQWN0aW9ucy5zaG93UGVuY2lsSWNvbiApXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWRkVG9EaWN0aW9uYXJ5KCByZXNwb25zZURhdGEsIG5vZGVJbmZvID0gbnVsbCApe1xuICAgICAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xuXG4gICAgICAgICAgICAgICAgaWYgKCByZXNwb25zZURhdGEgIT0gbnVsbCApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlSW5mbyApe1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZm8uZm9yRWFjaChmdW5jdGlvbiAoIGluZm9Sb3csIGluZGV4ICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VEYXRhLnNvbWUoIGZ1bmN0aW9uICggcmVzcG9uc2VEYXRhUm93ICkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5mb1Jvdy5kYklEID09IHJlc3BvbnNlRGF0YVJvdy5kYklEICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9icmluZyBibG9ja190eXBlIHRvIHRoZSB0b3AgbGV2ZWwgb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlRGF0YVJvdy50eXBlICE9ICdnZXR0ZXh0JyAmJiB0eXBlb2YgcmVzcG9uc2VEYXRhUm93LmJsb2NrX3R5cGUgPT0gJ3VuZGVmaW5lZCcgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpcnN0TGFuZ3VhZ2UgPSBzZWxmLm9yZGVyZWRTZWNvbmRhcnlMYW5ndWFnZXNbMF1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHJlc3BvbnNlRGF0YVJvdy50cmFuc2xhdGlvbnNBcnJheVtmaXJzdExhbmd1YWdlXS5ibG9ja190eXBlICE9ICd1bmRlZmluZWQnIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VEYXRhUm93LmJsb2NrX3R5cGUgPSByZXNwb25zZURhdGFSb3cudHJhbnNsYXRpb25zQXJyYXlbZmlyc3RMYW5ndWFnZV0uYmxvY2tfdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5mb1tpbmRleF0gPSBPYmplY3QuYXNzaWduKCB7fSwgcmVzcG9uc2VEYXRhUm93LCBpbmZvUm93IClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlIC8vIGEgc29ydCBvZiBicmVha1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZm8gPSByZXNwb25zZURhdGFcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nR3JvdXBzID0gdGhpcy5hZGRUb1N0cmluZ0dyb3Vwcyggbm9kZUluZm8gKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpY3Rpb25hcnkgPSB0aGlzLmRpY3Rpb25hcnkuY29uY2F0KCBub2RlSW5mbyApXG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0U3RyaW5nc0Ryb3Bkb3duKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWRkVG9TdHJpbmdHcm91cHMoIHN0cmluZ3MgKXtcblxuICAgICAgICAgICAgICAgIC8vIHNlZSB3aGF0IG5vZGUgZ3JvdXBzIGFyZSBmb3VuZFxuICAgICAgICAgICAgICAgIGxldCBmb3VuZFN0cmluZ0dyb3VwcyA9IHRoaXMuc3RyaW5nR3JvdXBzO1xuICAgICAgICAgICAgICAgIHN0cmluZ3MuZm9yRWFjaCggZnVuY3Rpb24gKCBzdHJpbmcgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggZm91bmRTdHJpbmdHcm91cHMuaW5kZXhPZiggc3RyaW5nLmdyb3VwICkgPT09IC0xICYmICggKCB0eXBlb2Ygc3RyaW5nLmJsb2NrVHlwZSA9PT0gJ3VuZGVmaW5lZCcgKSB8fCBzdHJpbmcuYmxvY2tUeXBlICE9PSAnMicgKSApe1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRTdHJpbmdHcm91cHMucHVzaCggc3RyaW5nLmdyb3VwIClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICAvLyBwdXQgdGhlIG5vZGUgZ3JvdXBzIGluIHRoZSBvcmRlciB0aGF0IHdlIHdhbnQsIGFjY29yZGluZyB0byB0aGUgcHJvcCB0aGlzLnN0cmluZ0dyb3VwT3JkZXJcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXJlZFN0cmluZ0dyb3VwcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgaWYgKCB0aGlzLmVkaXRvclN0cmluZ3Muc2VvX3VwZGF0ZV9ub3RpY2UgIT0gJ3Nlb19wYWNrX3VwZGF0ZV9ub3RfbmVlZGVkJyApe1xuICAgICAgICAgICAgICAgICAgICBvcmRlcmVkU3RyaW5nR3JvdXBzLnB1c2goIHRoaXMuZWRpdG9yU3RyaW5ncy5zZW9fdXBkYXRlX25vdGljZSApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nR3JvdXBPcmRlci5mb3JFYWNoKCBmdW5jdGlvbiggZ3JvdXAgKXtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBmb3VuZFN0cmluZ0dyb3Vwcy5pbmRleE9mKCBncm91cCApICE9PSAtMSApe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJlZFN0cmluZ0dyb3Vwcy5wdXNoKCBncm91cCApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgd2VyZSBhbnkgb3RoZXIgc3RyaW5nIGdyb3VwcyB0aGF0IHdlcmUgbm90IGluIHRoZSBwcm9wLCBhZGQgdGhlbSBhdCB0aGUgZW5kLlxuICAgICAgICAgICAgICAgIGZvdW5kU3RyaW5nR3JvdXBzLmZvckVhY2goIGZ1bmN0aW9uIChncm91cCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIG9yZGVyZWRTdHJpbmdHcm91cHMuaW5kZXhPZiggZ3JvdXAgKSA9PT0gLTEgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyZWRTdHJpbmdHcm91cHMucHVzaChncm91cCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yZGVyZWRTdHJpbmdHcm91cHM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0U3RyaW5nSW5kZXgoIHNlbGVjdG9yLCBkYklEICl7XG4gICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gbnVsbFxuXG4gICAgICAgICAgICAgICAgdGhpcy5kaWN0aW9uYXJ5LnNvbWUoZnVuY3Rpb24gKCBzdHJpbmcsIGluZGV4ICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIHN0cmluZy5kYklEID09IGRiSUQgJiYgc3RyaW5nLnNlbGVjdG9yID09IHNlbGVjdG9yICl7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldE5vZGVJbmZvKCBub2RlLCBiYXNlU2VsZWN0b3IgPSAnJyApe1xuICAgICAgICAgICAgICAgIGxldCBzdHJpbmdJZFxuICAgICAgICAgICAgICAgIGxldCBub2RlRGF0YSAgPSBbXVxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RvcnMgPSB0aGlzLnByZXBhcmVTZWxlY3RvclN0cmluZ3MoIGJhc2VTZWxlY3RvciApXG5cbiAgICAgICAgICAgICAgICBzZWxlY3RvcnMuZm9yRWFjaCggZnVuY3Rpb24gKCBzZWxlY3RvciApIHtcblxuICAgICAgICAgICAgICAgICAgICBzdHJpbmdJZCA9IG5vZGUuZ2V0QXR0cmlidXRlKCBzZWxlY3RvciApXG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCBzdHJpbmdJZCApIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5vZGVBdHRyaWJ1dGUgICA9IHNlbGVjdG9yLnJlcGxhY2UoIGJhc2VTZWxlY3RvciwgJycgKVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5vZGVHcm91cCAgICAgICA9IG5vZGUuZ2V0QXR0cmlidXRlKCAnZGF0YS10cnAtbm9kZS1ncm91cCcgKyBub2RlQXR0cmlidXRlIClcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBub2RlRGVzY3JpcHRpb24gPSBub2RlLmdldEF0dHJpYnV0ZSggJ2RhdGEtdHJwLW5vZGUtZGVzY3JpcHRpb24nICsgbm9kZUF0dHJpYnV0ZSApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbnRyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYklEICAgICAgOiBzdHJpbmdJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciAgOiBzZWxlY3RvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgOiBub2RlQXR0cmlidXRlLnN1YnN0cigxKSwgLy8gc3Vic3RyKDEpIGlzIHVzZWQgdG8gdHJpbSBwcmVmaXhpbmcgbGluZSAtIGV4LiAtYWx0IHdpbGwgcmVzdWx0IGluIGFsdCAobm8gbGluZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlR3JvdXAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Lmdyb3VwID0gbm9kZUdyb3VwXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZURlc2NyaXB0aW9uIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5kZXNjcmlwdGlvbiA9IG5vZGVEZXNjcmlwdGlvblxuXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlRGF0YS5wdXNoKCBlbnRyeSApXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZURhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRBbGxTZWxlY3RvcnMoKXtcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0b3JzID0gW11cbiAgICAgICAgICAgICAgICBsZXQgc2VsZiAgICAgID0gdGhpc1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhQXR0cmlidXRlcy5mb3JFYWNoKCBmdW5jdGlvbiAoIGRhdGFBdHRyaWJ1dGUgKXtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzID0gc2VsZWN0b3JzLmNvbmNhdCggc2VsZi5wcmVwYXJlU2VsZWN0b3JTdHJpbmdzKCBkYXRhQXR0cmlidXRlICkgKVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0b3JzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJlcGFyZVNlbGVjdG9yU3RyaW5ncyggYmFzZU5hbWVTZWxlY3RvciApe1xuICAgICAgICAgICAgICAgIGxldCBwYXJzZWRfc2VsZWN0b3JzID0gW11cblxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0b3JzLmZvckVhY2goIGZ1bmN0aW9uICggc2VsZWN0b3JTdWZmaXgsIGluZGV4ICl7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZF9zZWxlY3RvcnMucHVzaCggYmFzZU5hbWVTZWxlY3RvciArIHNlbGVjdG9yU3VmZml4ICApXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWRfc2VsZWN0b3JzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFyZW50VVJMKCB1cmwgKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoICd0cnAtZWRpdC10cmFuc2xhdGlvbj1wcmV2aWV3JywgJ3RycC1lZGl0LXRyYW5zbGF0aW9uPXRydWUnIClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhblVSTCggdXJsICl7XG4gICAgICAgICAgICAgICAgLy9tYWtlIHJlbW92ZVVybFBhcmFtZXRlciByZWN1cnNpdmUgYW5kIG9ubHkgY2FsbCBpdCBvbmNlIHdpdGggYWxsIHRoZSBwYXJhbWV0ZXJzIHRoYXRcbiAgICAgICAgICAgICAgICAvL25lZWQgdG8gc3RyaXBwZWQgP1xuICAgICAgICAgICAgICAgIHVybCA9IHV0aWxzLnJlbW92ZVVybFBhcmFtZXRlciggdXJsLCAnbGFuZycgKVxuICAgICAgICAgICAgICAgIHVybCA9IHV0aWxzLnJlbW92ZVVybFBhcmFtZXRlciggdXJsLCAndHJwLXZpZXctYXMnIClcbiAgICAgICAgICAgICAgICB1cmwgPSB1dGlscy5yZW1vdmVVcmxQYXJhbWV0ZXIoIHVybCwgJ3RycC12aWV3LWFzLW5vbmNlJyApXG4gICAgICAgICAgICAgICAgdXJsID0gdXRpbHMucmVtb3ZlVXJsUGFyYW1ldGVyKCB1cmwsICd0cnAtZWRpdC10cmFuc2xhdGlvbicgKVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNob3dTdHJpbmcoIHN0cmluZywgdHlwZSApe1xuICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHN0cmluZy5ibG9ja1R5cGUgIT09ICd1bmRlZmluZWQnICYmIHN0cmluZy5ibG9ja1R5cGUgPT09ICcyJyApe1xuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBzaG93IGRlcHJlY2F0ZWQgdHJhbnNsYXRpb24gYmxvY2tzIGluIHRoZSBkcm9wZG93blxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSB0aGlzLmVkaXRvclN0cmluZ3MuaW1hZ2VzICYmIHR5cGVvZiBzdHJpbmcuYXR0cmlidXRlICE9ICd1bmRlZmluZWQnICYmIHN0cmluZy5hdHRyaWJ1dGUgPT0gJ3NyYycgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Ygc3RyaW5nLmF0dHJpYnV0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgKCBzdHJpbmcuYXR0cmlidXRlID09ICdocmVmJyB8fCBzdHJpbmcuYXR0cmlidXRlID09ICdzcmMnICkgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcblxuICAgICAgICAgICAgICAgIGlmICggc3RyaW5nLmdyb3VwID09PSB0eXBlIClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcblxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluaXRTdHJpbmdzRHJvcGRvd24oKXtcbiAgICAgICAgICAgICAgICBsZXQgc2VsZiA9IHRoaXNcblxuICAgICAgICAgICAgICAgIGlmICggIXRoaXMuaXNTdHJpbmdzRHJvcGRvd25PcGVuKCkgKSB7XG4gICAgICAgICAgICAgICAgICAgIGpRdWVyeSggJyN0cnAtc3RyaW5nLWNhdGVnb3JpZXMnICkuc2VsZWN0MiggJ2Rlc3Ryb3knIClcblxuICAgICAgICAgICAgICAgICAgICBqUXVlcnkoICcjdHJwLXN0cmluZy1jYXRlZ29yaWVzJyApLnNlbGVjdDIoIHsgcGxhY2Vob2xkZXIgOiBzZWxmLmVkaXRvclN0cmluZ3Muc2VsZWN0X3N0cmluZywgdGVtcGxhdGVSZXN1bHQ6IGZ1bmN0aW9uKG9wdGlvbil7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3JpZ2luYWwgICAgPSBoZS5kZWNvZGUoIG9wdGlvbi50ZXh0LnN1YnN0cmluZygwLCA5MCkgKSArICggKCBvcHRpb24udGV4dC5sZW5ndGggPD0gOTApID8gJycgOiAnLi4uJyApXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGVzY3JpcHRpb24gPSAoIG9wdGlvbi50aXRsZSApID8gICcoJyArIG9wdGlvbi50aXRsZSArICcpJyA6ICcnXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkoICc8ZGl2PicgKyBvcmlnaW5hbCArICc8L2Rpdj48ZGl2IGNsYXNzPVwic3RyaW5nLXNlbGVjdG9yLWRlc2NyaXB0aW9uXCI+JyArIGRlc2NyaXB0aW9uICsgJzwvZGl2PicgKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd2lkdGggOiAnMTAwJScgfSApLnByb3AoICdkaXNhYmxlZCcsIGZhbHNlIClcblxuICAgICAgICAgICAgICAgICAgICBqUXVlcnkoICcjdHJwX3NlbGVjdDJfb3ZlcmxheScgKS5oaWRlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RyaW5nc0Ryb3Bkb3duTG9hZGluZygpe1xuICAgICAgICAgICAgICAgIGpRdWVyeSggJyN0cnAtc3RyaW5nLWNhdGVnb3JpZXMnICkuc2VsZWN0MiggeyBwbGFjZWhvbGRlciA6IHRoaXMuZWRpdG9yU3RyaW5ncy5zdHJpbmdzX2xvYWRpbmcsIHdpZHRoIDogJzEwMCUnIH0gKS5wcm9wKCAnZGlzYWJsZWQnLCB0cnVlIClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzT3B0aW9uTmFtZSggbmFtZSwgdHlwZSApe1xuICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PSAnSW1hZ2VzJyApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1dGlscy5nZXRGaWxlbmFtZSggbmFtZSApXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdXRpbHMuZXNjYXBlSHRtbCggbmFtZSApXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNTdHJpbmdzRHJvcGRvd25PcGVuKCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeSggJyN0cnAtc3RyaW5nLWNhdGVnb3JpZXMnICkuc2VsZWN0MiggJ2lzT3BlbicgKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhc1Vuc2F2ZWRDaGFuZ2VzKCl7XG4gICAgICAgICAgICAgICAgbGV0IHVuc2F2ZWRDaGFuZ2VzID0gZmFsc2VcbiAgICAgICAgICAgICAgICBsZXQgc2VsZiA9IHRoaXNcbiAgICAgICAgICAgICAgICBpZiAoIHRoaXMuc2VsZWN0ZWRJbmRleGVzQXJyYXkubGVuZ3RoID4gMCApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ZXNBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3RlZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldHRpbmdzWyd0cmFuc2xhdGlvbi1sYW5ndWFnZXMnXS5mb3JFYWNoKGZ1bmN0aW9uIChsYW5ndWFnZUNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5kaWN0aW9uYXJ5W3NlbGVjdGVkSW5kZXhdICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGljdGlvbmFyeVtzZWxlY3RlZEluZGV4XS50cmFuc2xhdGlvbnNBcnJheVtsYW5ndWFnZUNvZGVdICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLmRpY3Rpb25hcnlbc2VsZWN0ZWRJbmRleF0udHJhbnNsYXRpb25zQXJyYXlbbGFuZ3VhZ2VDb2RlXS50cmFuc2xhdGVkICE9PSBzZWxmLmRpY3Rpb25hcnlbc2VsZWN0ZWRJbmRleF0udHJhbnNsYXRpb25zQXJyYXlbbGFuZ3VhZ2VDb2RlXS5lZGl0ZWRUcmFuc2xhdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zYXZlZENoYW5nZXMgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93Q2hhbmdlc1Vuc2F2ZWRNZXNzYWdlID0gdW5zYXZlZENoYW5nZXNcblxuICAgICAgICAgICAgICAgIHJldHVybiB1bnNhdmVkQ2hhbmdlc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlmcmFtZUxvYWRlciggc3RhdHVzICkge1xuICAgICAgICAgICAgICAgIGxldCBsb2FkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ3RycC1wcmV2aWV3LWxvYWRlcicgKVxuXG4gICAgICAgICAgICAgICAgaWYoIHN0YXR1cyA9PSAnc2hvdycgKVxuICAgICAgICAgICAgICAgICAgICBsb2FkZXIuc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xuICAgICAgICAgICAgICAgIGVsc2UgaWYoIHN0YXR1cyA9PSAnaGlkZScgKVxuICAgICAgICAgICAgICAgICAgICBsb2FkZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZpb3VzU3RyaW5nKCl7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRWYWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0cnAtc3RyaW5nLWNhdGVnb3JpZXMnKS52YWx1ZVxuXG4gICAgICAgICAgICAgICAgbGV0IG5ld1ZhbHVlID0gK2N1cnJlbnRWYWx1ZSAtIDFcblxuICAgICAgICAgICAgICAgIHdoaWxlKCBuZXdWYWx1ZSA+PSAwICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyN0cnAtc3RyaW5nLWNhdGVnb3JpZXMgb3B0aW9uW3ZhbHVlPVwiJyArIG5ld1ZhbHVlICsgJ1wiXScpLmxlbmd0aCA9PT0gMCApe1xuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZS0tO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKCBuZXdWYWx1ZSA8IDAgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cblxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdHJpbmcgPSBuZXdWYWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dFN0cmluZygpe1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50VmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHJwLXN0cmluZy1jYXRlZ29yaWVzJykudmFsdWUsIG5ld1ZhbHVlID0gMFxuXG4gICAgICAgICAgICAgICAgaWYoIGN1cnJlbnRWYWx1ZSAhPSAnJyApXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gK2N1cnJlbnRWYWx1ZSArIDFcblxuICAgICAgICAgICAgICAgIHdoaWxlKCBuZXdWYWx1ZSA8IHRoaXMuZGljdGlvbmFyeS5sZW5ndGggJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI3RycC1zdHJpbmctY2F0ZWdvcmllcyBvcHRpb25bdmFsdWU9XCInICsgbmV3VmFsdWUgKyAnXCJdJykubGVuZ3RoID09PSAwICl7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCBuZXdWYWx1ZSA+PSB0aGlzLmRpY3Rpb25hcnkubGVuZ3RoICl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdHJpbmcgPSBuZXdWYWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWRkS2V5Ym9hcmRTaG9ydGN1dHNMaXN0ZW5lcigpe1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKFwiTWFjXCIpID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSAmJiBlLmFsdEtleSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENUUkwgKyBBTFQgKyByaWdodCBhcnJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGUua2V5Q29kZSA9PT0gMzkgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ3RycF90cmlnZ2VyX25leHRfc3RyaW5nX2V2ZW50JyApICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDVFJMICsgQUxUICsgbGVmdCBhcnJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBlLmtleUNvZGUgPT09IDM3ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICd0cnBfdHJpZ2dlcl9wcmV2aW91c19zdHJpbmdfZXZlbnQnICkgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ3RycF90cmlnZ2VyX25leHRfc3RyaW5nX2V2ZW50JywgdGhpcy5uZXh0U3RyaW5nIClcbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ3RycF90cmlnZ2VyX3ByZXZpb3VzX3N0cmluZ19ldmVudCcsIHRoaXMucHJldmlvdXNTdHJpbmcgKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc2l6ZUlmcmFtZSAoZXZlbnQsIHVpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsX3dpZHRoID0galF1ZXJ5KHdpbmRvdykud2lkdGgoKTtcbiAgICAgICAgICAgICAgICBsZXQgd2lkdGggPSBqUXVlcnkoICcjdHJwLWNvbnRyb2xzJyApLndpZHRoKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgcHJldmlld0NvbnRhaW5lciA9IGpRdWVyeSggJyN0cnAtcHJldmlldycgKTtcbiAgICAgICAgICAgICAgICBwcmV2aWV3Q29udGFpbmVyLmNzcygncmlnaHQnLCB3aWR0aCApO1xuICAgICAgICAgICAgICAgIHByZXZpZXdDb250YWluZXIuY3NzKCdsZWZ0JywgKCB3aWR0aCAtIDM0OCApICk7XG4gICAgICAgICAgICAgICAgcHJldmlld0NvbnRhaW5lci5jc3MoJ3dpZHRoJywgKHRvdGFsX3dpZHRoIC0gd2lkdGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy9hZGQgc3VwcG9ydCBmb3Igdi1tb2RlbCBpbiBzZWxlY3QyXG4gICAgICAgIGRpcmVjdGl2ZXM6IHtcbiAgICAgICAgICAgIHNlbGVjdDI6IHtcbiAgICAgICAgICAgICAgICBpbnNlcnRlZChlbCkge1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkoZWwpLm9uKCdzZWxlY3QyOnNlbGVjdCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmRpc3BhdGNoRXZlbnQoZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KGVsKS5vbignc2VsZWN0Mjp1bnNlbGVjdCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmRpc3BhdGNoRXZlbnQoZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./assets/src/js/editor.vue?vue&type=script&lang=js&\n");
814
 
815
  /***/ }),
816
 
899
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
900
 
901
  "use strict";
902
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.editorsNavigation.show\n ? _c(\"div\", { attrs: { id: \"trp-editors-navigation-tabs\" } }, [\n _c(\n \"table\",\n { attrs: { id: \"trp-editors-tab-table\" } },\n _vm._l(_vm.editorsNavigation.tabs, function(navigationTab) {\n return _c(\n \"td\",\n {\n staticClass: \"trp-editors-tab\",\n class: {\n \"trp-selected-tab\": navigationTab.handle === _vm.selectedTab\n }\n },\n [\n _c(\"a\", { attrs: { href: navigationTab.path } }, [\n _vm._v(_vm._s(navigationTab.label))\n ]),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass: \"trp-tooltip-toggle\",\n staticStyle: { visibility: \"hidden\" },\n attrs: {\n \"data-tooltip\": navigationTab.tooltip,\n tabindex: \"0\"\n }\n },\n [\n _c(\n \"svg\",\n {\n attrs: {\n viewBox: \"0 0 27 27\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\n \"g\",\n {\n attrs: { fill: \"#a8a8a8\", \"fill-rule\": \"evenodd\" }\n },\n [\n _c(\"path\", {\n attrs: {\n d:\n \"M13.5 27C20.956 27 27 20.956 27 13.5S20.956 0 13.5 0 0 6.044 0 13.5 6.044 27 13.5 27zm0-2C7.15 25 2 19.85 2 13.5S7.15 2 13.5 2 25 7.15 25 13.5 19.85 25 13.5 25z\"\n }\n }),\n _c(\"path\", {\n attrs: {\n d:\n \"M12.05 7.64c0-.228.04-.423.12-.585.077-.163.185-.295.32-.397.138-.102.298-.177.48-.227.184-.048.383-.073.598-.073.203 0 .398.025.584.074.186.05.35.126.488.228.14.102.252.234.336.397.084.162.127.357.127.584 0 .22-.043.412-.127.574-.084.163-.196.297-.336.4-.14.106-.302.185-.488.237-.186.053-.38.08-.584.08-.215 0-.414-.027-.597-.08-.182-.05-.342-.13-.48-.235-.135-.104-.243-.238-.32-.4-.08-.163-.12-.355-.12-.576zm-1.02 11.517c.134 0 .275-.013.424-.04.148-.025.284-.08.41-.16.124-.082.23-.198.313-.35.085-.15.127-.354.127-.61v-5.423c0-.238-.042-.43-.127-.57-.084-.144-.19-.254-.318-.332-.13-.08-.267-.13-.415-.153-.148-.024-.286-.036-.414-.036h-.21v-.95h4.195v7.463c0 .256.043.46.127.61.084.152.19.268.314.35.125.08.263.135.414.16.15.027.29.04.418.04h.21v.95H10.82v-.95h.21z\"\n }\n })\n ]\n )\n ]\n )\n ]\n )\n ]\n )\n }),\n 0\n )\n ])\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2pzL2NvbXBvbmVudHMvZWRpdG9ycy1uYXZpZ2F0aW9uLnZ1ZT9jZDA3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUyxvQ0FBb0MsRUFBRTtBQUNoRTtBQUNBO0FBQ0EsV0FBVyxTQUFTLDhCQUE4QixFQUFFO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSx5QkFBeUIsU0FBUywyQkFBMkIsRUFBRTtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyx1QkFBdUI7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQywyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9hc3NldHMvc3JjL2pzL2NvbXBvbmVudHMvZWRpdG9ycy1uYXZpZ2F0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNGY1ZWUyNyYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5lZGl0b3JzTmF2aWdhdGlvbi5zaG93XG4gICAgPyBfYyhcImRpdlwiLCB7IGF0dHJzOiB7IGlkOiBcInRycC1lZGl0b3JzLW5hdmlnYXRpb24tdGFic1wiIH0gfSwgW1xuICAgICAgICBfYyhcbiAgICAgICAgICBcInRhYmxlXCIsXG4gICAgICAgICAgeyBhdHRyczogeyBpZDogXCJ0cnAtZWRpdG9ycy10YWItdGFibGVcIiB9IH0sXG4gICAgICAgICAgX3ZtLl9sKF92bS5lZGl0b3JzTmF2aWdhdGlvbi50YWJzLCBmdW5jdGlvbihuYXZpZ2F0aW9uVGFiKSB7XG4gICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInRycC1lZGl0b3JzLXRhYlwiLFxuICAgICAgICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICAgICAgICBcInRycC1zZWxlY3RlZC10YWJcIjogbmF2aWdhdGlvblRhYi5oYW5kbGUgPT09IF92bS5zZWxlY3RlZFRhYlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwiYVwiLCB7IGF0dHJzOiB7IGhyZWY6IG5hdmlnYXRpb25UYWIucGF0aCB9IH0sIFtcbiAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MobmF2aWdhdGlvblRhYi5sYWJlbCkpXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJ0cnAtdG9vbHRpcC10b2dnbGVcIixcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiB9LFxuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS10b29sdGlwXCI6IG5hdmlnYXRpb25UYWIudG9vbHRpcCxcbiAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleDogXCIwXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNyAyN1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBmaWxsOiBcIiNhOGE4YThcIiwgXCJmaWxsLXJ1bGVcIjogXCJldmVub2RkXCIgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJNMTMuNSAyN0MyMC45NTYgMjcgMjcgMjAuOTU2IDI3IDEzLjVTMjAuOTU2IDAgMTMuNSAwIDAgNi4wNDQgMCAxMy41IDYuMDQ0IDI3IDEzLjUgMjd6bTAtMkM3LjE1IDI1IDIgMTkuODUgMiAxMy41UzcuMTUgMiAxMy41IDIgMjUgNy4xNSAyNSAxMy41IDE5Ljg1IDI1IDEzLjUgMjV6XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIk0xMi4wNSA3LjY0YzAtLjIyOC4wNC0uNDIzLjEyLS41ODUuMDc3LS4xNjMuMTg1LS4yOTUuMzItLjM5Ny4xMzgtLjEwMi4yOTgtLjE3Ny40OC0uMjI3LjE4NC0uMDQ4LjM4My0uMDczLjU5OC0uMDczLjIwMyAwIC4zOTguMDI1LjU4NC4wNzQuMTg2LjA1LjM1LjEyNi40ODguMjI4LjE0LjEwMi4yNTIuMjM0LjMzNi4zOTcuMDg0LjE2Mi4xMjcuMzU3LjEyNy41ODQgMCAuMjItLjA0My40MTItLjEyNy41NzQtLjA4NC4xNjMtLjE5Ni4yOTctLjMzNi40LS4xNC4xMDYtLjMwMi4xODUtLjQ4OC4yMzctLjE4Ni4wNTMtLjM4LjA4LS41ODQuMDgtLjIxNSAwLS40MTQtLjAyNy0uNTk3LS4wOC0uMTgyLS4wNS0uMzQyLS4xMy0uNDgtLjIzNS0uMTM1LS4xMDQtLjI0My0uMjM4LS4zMi0uNC0uMDgtLjE2My0uMTItLjM1NS0uMTItLjU3NnptLTEuMDIgMTEuNTE3Yy4xMzQgMCAuMjc1LS4wMTMuNDI0LS4wNC4xNDgtLjAyNS4yODQtLjA4LjQxLS4xNi4xMjQtLjA4Mi4yMy0uMTk4LjMxMy0uMzUuMDg1LS4xNS4xMjctLjM1NC4xMjctLjYxdi01LjQyM2MwLS4yMzgtLjA0Mi0uNDMtLjEyNy0uNTctLjA4NC0uMTQ0LS4xOS0uMjU0LS4zMTgtLjMzMi0uMTMtLjA4LS4yNjctLjEzLS40MTUtLjE1My0uMTQ4LS4wMjQtLjI4Ni0uMDM2LS40MTQtLjAzNmgtLjIxdi0uOTVoNC4xOTV2Ny40NjNjMCAuMjU2LjA0My40Ni4xMjcuNjEuMDg0LjE1Mi4xOS4yNjguMzE0LjM1LjEyNS4wOC4yNjMuMTM1LjQxNC4xNi4xNS4wMjcuMjkuMDQuNDE4LjA0aC4yMXYuOTVIMTAuODJ2LS45NWguMjF6XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSksXG4gICAgICAgICAgMFxuICAgICAgICApXG4gICAgICBdKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./assets/src/js/components/editors-navigation.vue?vue&type=template&id=04f5ee27&\n");
903
 
904
  /***/ }),
905
 
assets/js/trp-string-translation-editor.js CHANGED
@@ -931,7 +931,7 @@ eval("/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukh
931
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
932
 
933
  "use strict";
934
- eval("__webpack_require__.r(__webpack_exports__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n props: ['editorsNavigation', 'selectedTab'],\n methods: {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vYXNzZXRzL3NyYy9qcy9jb21wb25lbnRzL2VkaXRvcnMtbmF2aWdhdGlvbi52dWU/NDAwMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBYUE7QUFDQSxVQUNBLG1CQURBLEVBRUEsYUFGQSxDQURBO0FBS0E7QUFMQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9hc3NldHMvc3JjL2pzL2NvbXBvbmVudHMvZWRpdG9ycy1uYXZpZ2F0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gICAgPGRpdiBpZD1cInRycC1lZGl0b3JzLW5hdmlnYXRpb24tdGFic1wiIHYtaWY9XCJlZGl0b3JzTmF2aWdhdGlvbi5zaG93XCI+XG4gICAgICAgIDx0YWJsZSBpZD1cInRycC1lZGl0b3JzLXRhYi10YWJsZVwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidHJwLWVkaXRvcnMtdGFiXCIgOmNsYXNzPVwieyd0cnAtc2VsZWN0ZWQtdGFiJzogbmF2aWdhdGlvblRhYi5oYW5kbGUgPT09IHNlbGVjdGVkVGFiIH1cIiB2LWZvcj1cIm5hdmlnYXRpb25UYWIgaW4gZWRpdG9yc05hdmlnYXRpb24udGFic1wiPlxuICAgICAgICAgICAgICAgIDxhIDpocmVmPVwibmF2aWdhdGlvblRhYi5wYXRoXCI+e3tuYXZpZ2F0aW9uVGFiLmxhYmVsfX08L2E+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cnAtdG9vbHRpcC10b2dnbGVcIiA6ZGF0YS10b29sdGlwPVwibmF2aWdhdGlvblRhYi50b29sdGlwXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAyNyAyN1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBmaWxsPVwiI2E4YThhOFwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBkPVwiTTEzLjUgMjdDMjAuOTU2IDI3IDI3IDIwLjk1NiAyNyAxMy41UzIwLjk1NiAwIDEzLjUgMCAwIDYuMDQ0IDAgMTMuNSA2LjA0NCAyNyAxMy41IDI3em0wLTJDNy4xNSAyNSAyIDE5Ljg1IDIgMTMuNVM3LjE1IDIgMTMuNSAyIDI1IDcuMTUgMjUgMTMuNSAxOS44NSAyNSAxMy41IDI1elwiLz48cGF0aCBkPVwiTTEyLjA1IDcuNjRjMC0uMjI4LjA0LS40MjMuMTItLjU4NS4wNzctLjE2My4xODUtLjI5NS4zMi0uMzk3LjEzOC0uMTAyLjI5OC0uMTc3LjQ4LS4yMjcuMTg0LS4wNDguMzgzLS4wNzMuNTk4LS4wNzMuMjAzIDAgLjM5OC4wMjUuNTg0LjA3NC4xODYuMDUuMzUuMTI2LjQ4OC4yMjguMTQuMTAyLjI1Mi4yMzQuMzM2LjM5Ny4wODQuMTYyLjEyNy4zNTcuMTI3LjU4NCAwIC4yMi0uMDQzLjQxMi0uMTI3LjU3NC0uMDg0LjE2My0uMTk2LjI5Ny0uMzM2LjQtLjE0LjEwNi0uMzAyLjE4NS0uNDg4LjIzNy0uMTg2LjA1My0uMzguMDgtLjU4NC4wOC0uMjE1IDAtLjQxNC0uMDI3LS41OTctLjA4LS4xODItLjA1LS4zNDItLjEzLS40OC0uMjM1LS4xMzUtLjEwNC0uMjQzLS4yMzgtLjMyLS40LS4wOC0uMTYzLS4xMi0uMzU1LS4xMi0uNTc2em0tMS4wMiAxMS41MTdjLjEzNCAwIC4yNzUtLjAxMy40MjQtLjA0LjE0OC0uMDI1LjI4NC0uMDguNDEtLjE2LjEyNC0uMDgyLjIzLS4xOTguMzEzLS4zNS4wODUtLjE1LjEyNy0uMzU0LjEyNy0uNjF2LTUuNDIzYzAtLjIzOC0uMDQyLS40My0uMTI3LS41Ny0uMDg0LS4xNDQtLjE5LS4yNTQtLjMxOC0uMzMyLS4xMy0uMDgtLjI2Ny0uMTMtLjQxNS0uMTUzLS4xNDgtLjAyNC0uMjg2LS4wMzYtLjQxNC0uMDM2aC0uMjF2LS45NWg0LjE5NXY3LjQ2M2MwIC4yNTYuMDQzLjQ2LjEyNy42MS4wODQuMTUyLjE5LjI2OC4zMTQuMzUuMTI1LjA4LjI2My4xMzUuNDE0LjE2LjE1LjAyNy4yOS4wNC40MTguMDRoLjIxdi45NUgxMC44MnYtLjk1aC4yMXpcIi8+PC9nPjwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0e1xuICAgIHByb3BzOltcbiAgICAgICAgJ2VkaXRvcnNOYXZpZ2F0aW9uJyxcbiAgICAgICAgJ3NlbGVjdGVkVGFiJ1xuICAgIF0sXG4gICAgbWV0aG9kczp7XG5cbiAgICB9XG59XG48L3NjcmlwdD5cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./assets/src/js/components/editors-navigation.vue?vue&type=script&lang=js&\n");
935
 
936
  /***/ }),
937
 
@@ -1087,7 +1087,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var axio
1087
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1088
 
1089
  "use strict";
1090
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! select2/dist/js/select2.min.js */ \"./node_modules/select2/dist/js/select2.min.js\");\n/* harmony import */ var select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./assets/src/js/utils.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! axios */ \"./node_modules/axios/index.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_language_boxes_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/language-boxes.vue */ \"./assets/src/js/components/language-boxes.vue\");\n/* harmony import */ var _components_save_translations_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/save-translations.vue */ \"./assets/src/js/components/save-translations.vue\");\n/* harmony import */ var _components_hover_actions_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/hover-actions.vue */ \"./assets/src/js/components/hover-actions.vue\");\n/* harmony import */ var _components_extra_content_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/extra-content.vue */ \"./assets/src/js/components/extra-content.vue\");\n/* harmony import */ var _components_editors_navigation_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/editors-navigation.vue */ \"./assets/src/js/components/editors-navigation.vue\");\n/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! he */ \"./node_modules/he/he.js\");\n/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(he__WEBPACK_IMPORTED_MODULE_8__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n components: {\n languageBoxes: _components_language_boxes_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n saveTranslations: _components_save_translations_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n hoverActions: _components_hover_actions_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n extraContent: _components_extra_content_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n editorsNavigation: _components_editors_navigation_vue__WEBPACK_IMPORTED_MODULE_7__[\"default\"]\n },\n data: function data() {\n return {\n //trp_editor_data\n settings: trp_editor_data.trp_settings,\n languageNames: trp_editor_data.language_names,\n orderedSecondaryLanguages: trp_editor_data.ordered_secondary_languages,\n nonces: trp_editor_data.editor_nonces,\n editorsNavigation: trp_editor_data.editors_navigation,\n editorStrings: trp_editor_data.trp_localized_strings,\n stringTypes: trp_editor_data.string_types,\n flagsPath: trp_editor_data.flags_path,\n currentLanguage: trp_editor_data.current_language,\n onScreenLanguage: trp_editor_data.on_screen_language,\n ajaxUrl: trp_editor_data.ajax_url,\n currentURL: trp_editor_data.url_to_load,\n paidVersion: trp_editor_data.paid_version,\n //trp_string_translation_data\n stringTypesConfig: trp_string_translation_data.string_types_config,\n stEditorStrings: trp_string_translation_data.st_editor_strings,\n dictionary: {},\n selectedString: null,\n selectedIndexesArray: [],\n detectedSelectorAndId: [],\n stringGroups: [],\n showChangesUnsavedMessage: false,\n loading_strings: 0,\n translationNotLoadedYet: false,\n totalItems: null\n };\n },\n created: function created() {\n this.settings['default-language-name'] = this.languageNames[this.settings['default-language']];\n this.currentLanguage = this.settings['default-language'];\n document.addEventListener('trp_trigger_perform_action_event', this.editString);\n },\n mounted: function mounted() {\n this.getStrings(this.$route.query);\n this.addKeyboardShortcutsListener();\n var self = this; // resize sidebar and consequently the iframe\n\n var previewContainer = jQuery('#trp-preview');\n var total_width = jQuery(window).width();\n jQuery('#trp-controls').resizable({\n start: function start() {\n previewContainer.toggle();\n },\n stop: function stop() {\n previewContainer.toggle();\n },\n handles: 'e',\n minWidth: 327,\n maxWidth: total_width - 20\n }).bind(\"resize\", this.resizeIframe); // resize iframe when resizing window\n\n jQuery(window).resize(function () {\n self.resizeIframe();\n });\n },\n watch: {\n $route: function $route(to, from) {\n this.getStrings(to.query);\n },\n selectedString: function selectedString(newString, oldString) {\n if (!this.hasUnsavedChanges()) {\n if (this.selectedString === null) {\n this.selectedIndexesArray = [];\n } else {\n this.selectedIndexesArray = [this.selectedString];\n }\n }\n },\n dictionary: function dictionary() {\n if (!this.hasUnsavedChanges()) {\n this.selectedString = null;\n this.selectedIndexesArray = [];\n }\n }\n },\n computed: {\n closeURL: function closeURL() {\n return this.cleanURL(this.currentURL);\n }\n },\n methods: {\n getStrings: function getStrings(query) {\n if (!this.$route.matched[0].props[\"default\"].translationTab) {\n return;\n }\n\n var self = this;\n var currentTab = this.$route.matched[0].props[\"default\"].currentTab;\n var translationType = this.$route.matched[0].props[\"default\"].translationType;\n var data = new FormData();\n data.append('action', 'trp_string_translation_get_strings_' + translationType);\n data.append('query', JSON.stringify(query));\n data.append('security', currentTab['nonces']['get_strings']);\n window.dispatchEvent(new Event('trp_trigger_show_loading_table_event'));\n axios__WEBPACK_IMPORTED_MODULE_2___default.a.post(this.ajaxUrl, data).then(function (response) {\n window.dispatchEvent(new Event('trp_trigger_hide_loading_table_event'));\n\n if (response != null) {\n self.onScreenLanguage = query.language && _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].arrayContainsItem(self.settings['translation-languages'], query.language) && query.language !== 'trp-default' ? query.language : '';\n self.currentLanguage = query.language && _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].arrayContainsItem(self.settings['translation-languages'], query.language) && query.language !== 'trp-default' ? query.language : self.settings['default-language'];\n\n if (response.data.dictionary) {\n var newDictionary = response.data.dictionary;\n\n if (self.hasUnsavedChanges()) {\n // copy the unsaved string from the current dictionary to the new dictionary to allow user to discard or save changes\n var newSelectedIndexesArray = [];\n self.selectedIndexesArray.forEach(function (item) {\n self.dictionary[item].unsavedChanges = 'yes';\n newSelectedIndexesArray.push(newDictionary.push(self.dictionary[item]) - 1);\n });\n self.selectedIndexesArray = newSelectedIndexesArray;\n self.selectedString = null;\n }\n\n self.dictionary = newDictionary;\n }\n\n if (response.data.totalItems) {\n self.totalItems = response.data.totalItems;\n }\n }\n })[\"catch\"](function (error) {\n window.dispatchEvent(new Event('trp_trigger_hide_loading_table_event'));\n self.dictionary = {};\n console.log(error);\n var reload = confirm(self.stEditorStrings.request_error);\n\n if (reload === false) {\n return;\n } else {\n window.location.reload();\n }\n });\n },\n editString: function editString(data) {\n if (data.detail.action === 'edit') {\n this.selectedString = data.detail.stringIndex;\n }\n },\n cleanURL: function cleanURL(url) {\n //make removeUrlParameter recursive and only call it once with all the parameters that\n //need to stripped ?\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'lang');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-view-as');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-view-as-nonce');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-edit-translation');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-string-translation');\n return url;\n },\n\n /*iFrameLoaded(){\n let self = this\n let iframeElement = document.querySelector('#trp-preview-iframe')\n this.iframe = iframeElement.contentDocument || iframeElement.contentWindow.document\n //sync iFrame URL with parent\n if ( this.currentURL != this.iframe.URL )\n this.currentURL = this.iframe.URL\n //hide iFrame loader\n this.iframeLoader( 'hide' )\n self.detectedSelectorAndId = []\n self.dictionary = []\n this.scanIframeForStrings()\n window.addEventListener( 'trp_iframe_page_updated', this.scanIframeForStrings )\n //event that is fired when the iFrame is navigated\n iframeElement.contentWindow.onbeforeunload = function() {\n self.iframeLoader( 'show' )\n self.selectedString = null\n self.selectedIndexesArray = []\n self.translationNotLoadedYet = false\n self.stringsDropdownLoading()\n }\n },*/\n hasUnsavedChanges: function hasUnsavedChanges() {\n var unsavedChanges = false;\n var self = this;\n\n if (this.selectedIndexesArray.length > 0) {\n this.selectedIndexesArray.forEach(function (selectedIndex) {\n self.settings['translation-languages'].forEach(function (languageCode) {\n if (self.dictionary[selectedIndex] && self.dictionary[selectedIndex].translationsArray[languageCode] && self.dictionary[selectedIndex].translationsArray[languageCode].translated !== self.dictionary[selectedIndex].translationsArray[languageCode].editedTranslation) {\n unsavedChanges = true;\n }\n });\n });\n }\n\n if (unsavedChanges === false) {\n this.selectedIndexesArray.forEach(function (selectedIndex) {\n if (self.dictionary.hasOwnProperty(selectedIndex) && self.dictionary[selectedIndex].unsavedChanges && self.dictionary[selectedIndex].unsavedChanges === 'yes') {\n self.dictionary[selectedIndex].unsavedChanges = 'no';\n }\n });\n }\n\n this.showChangesUnsavedMessage = unsavedChanges;\n return unsavedChanges;\n },\n iframeLoader: function iframeLoader(status) {\n var loader = document.getElementById('trp-preview-loader');\n if (status == 'show') loader.style.display = 'flex';else if (status == 'hide') loader.style.display = 'none';\n },\n previousString: function previousString() {\n /* let currentValue = document.getElementById('trp-string-categories').value\n let newValue = +currentValue - 1\n while( newValue >= 0 && document.querySelectorAll('#trp-string-categories option[value=\"' + newValue + '\"]').length === 0 ){\n newValue--;\n }\n if( newValue < 0 )\n return\n this.selectedString = newValue.toString()*/\n },\n nextString: function nextString() {\n /*let currentValue = document.getElementById('trp-string-categories').value, newValue = 0\n if( currentValue != '' )\n newValue = +currentValue + 1\n while( newValue < this.dictionary.length && document.querySelectorAll('#trp-string-categories option[value=\"' + newValue + '\"]').length === 0 ){\n newValue++;\n }\n if ( newValue >= this.dictionary.length ){\n return\n }\n this.selectedString = newValue.toString()*/\n },\n addKeyboardShortcutsListener: function addKeyboardShortcutsListener() {\n document.addEventListener(\"keydown\", function (e) {\n if ((window.navigator.platform.match(\"Mac\") ? e.metaKey : e.ctrlKey) && e.altKey) {\n // CTRL + ALT + right arrow\n if (e.keyCode === 39) {\n e.preventDefault();\n window.dispatchEvent(new Event('trp_trigger_next_string_event'));\n } else {\n // CTRL + ALT + left arrow\n if (e.keyCode === 37) {\n e.preventDefault();\n window.dispatchEvent(new Event('trp_trigger_previous_string_event'));\n }\n }\n }\n }, false);\n window.addEventListener('trp_trigger_next_string_event', this.nextString);\n window.addEventListener('trp_trigger_previous_string_event', this.previousString);\n },\n resizeIframe: function resizeIframe(event, ui) {\n var total_width = jQuery(window).width();\n var width = jQuery('#trp-controls').width();\n var previewContainer = jQuery('#trp-preview');\n previewContainer.css('left', width - 348);\n }\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vYXNzZXRzL3NyYy9qcy9zdHJpbmctdHJhbnNsYXRpb24udnVlPzU2YmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0EseUZBREE7QUFFQSwrRkFGQTtBQUdBLHVGQUhBO0FBSUEsdUZBSkE7QUFLQTtBQUxBLEdBREE7QUFRQSxNQVJBLGtCQVFBO0FBQ0E7QUFDQTtBQUNBLDRDQUZBO0FBR0EsbURBSEE7QUFJQSw0RUFKQTtBQUtBLDJDQUxBO0FBTUEsMkRBTkE7QUFPQSwwREFQQTtBQVFBLCtDQVJBO0FBU0EsMkNBVEE7QUFVQSx1REFWQTtBQVdBLDBEQVhBO0FBWUEsdUNBWkE7QUFhQSw2Q0FiQTtBQWNBLCtDQWRBO0FBZ0JBO0FBQ0Esd0VBakJBO0FBa0JBLG9FQWxCQTtBQW9CQSxvQkFwQkE7QUFxQkEsMEJBckJBO0FBc0JBLDhCQXRCQTtBQXVCQSwrQkF2QkE7QUF3QkEsc0JBeEJBO0FBeUJBLHNDQXpCQTtBQTBCQSx3QkExQkE7QUEyQkEsb0NBM0JBO0FBNEJBO0FBNUJBO0FBK0JBLEdBeENBO0FBeUNBLFNBekNBLHFCQXlDQTtBQUNBO0FBRUE7QUFFQTtBQUNBLEdBL0NBO0FBZ0RBLFNBaERBLHFCQWdEQTtBQUNBO0FBRUE7QUFDQSxvQkFKQSxDQU1BOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUhBO0FBSUE7QUFDQTtBQUNBLE9BTkE7QUFPQSxrQkFQQTtBQVFBLG1CQVJBO0FBU0E7QUFUQSxPQVVBLElBVkEsQ0FVQSxRQVZBLEVBVUEsaUJBVkEsRUFUQSxDQXFCQTs7QUFDQTtBQUNBO0FBQ0EsS0FGQTtBQUdBLEdBekVBO0FBMEVBO0FBQ0EsVUFEQSxrQkFDQSxFQURBLEVBQ0EsSUFEQSxFQUNBO0FBQ0E7QUFDQSxLQUhBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUZBLE1BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQVpBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbEJBLEdBMUVBO0FBOEZBO0FBQ0E7QUFDQTtBQUNBO0FBSEEsR0E5RkE7QUFtR0E7QUFDQSxjQURBLHNCQUNBLEtBREEsRUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUEsNEVBQ0EsSUFEQSxDQUNBO0FBQ0E7O0FBQ0E7QUFDQSxtTkFDQSxjQURBLEdBQ0EsRUFEQTtBQUVBLGtOQUNBLGNBREEsR0FDQSxpQ0FEQTs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBSEE7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BN0JBLFdBOEJBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBLFNBRkEsTUFFQTtBQUNBO0FBQ0E7QUFFQSxPQTFDQTtBQTJDQSxLQTVEQTtBQTZEQSxjQTdEQSxzQkE2REEsSUE3REEsRUE2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQWpFQTtBQWtFQSxZQWxFQSxvQkFrRUEsR0FsRUEsRUFrRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0EsS0E1RUE7O0FBNkVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0JBLHFCQTVHQSwrQkE0R0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUNBLDhEQURBLElBRUEsOEpBRkEsRUFFQTtBQUNBO0FBQ0E7QUFDQSxXQU5BO0FBT0EsU0FSQTtBQVNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUpBO0FBS0E7O0FBRUE7QUFDQTtBQUNBLEtBcklBO0FBc0lBLGdCQXRJQSx3QkFzSUEsTUF0SUEsRUFzSUE7QUFDQTtBQUVBLDRCQUNBLDhCQURBLEtBRUEsc0JBQ0E7QUFDQSxLQTdJQTtBQThJQSxrQkE5SUEsNEJBOElBO0FBQ0E7Ozs7Ozs7O0FBWUEsS0EzSkE7QUE0SkEsY0E1SkEsd0JBNEpBO0FBQ0E7Ozs7Ozs7Ozs7QUFjQSxLQTNLQTtBQTRLQSxnQ0E1S0EsMENBNEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FIQSxNQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQWRBLEVBY0EsS0FkQTtBQWdCQTtBQUNBO0FBQ0EsS0EvTEE7QUFnTUEsZ0JBaE1BLHdCQWdNQSxLQWhNQSxFQWdNQSxFQWhNQSxFQWdNQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUF0TUE7QUFuR0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vYXNzZXRzL3NyYy9qcy9zdHJpbmctdHJhbnNsYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJi5qcyIsInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2IGlkPVwidHJwLWVkaXRvclwiIGNsYXNzPVwid3AtY29yZS11aVwiPlxuXG4gICAgICAgIDxkaXYgaWQ9XCJ0cnAtY29udHJvbHNcIj5cblxuICAgICAgICAgICAgPGRpdiBpZD1cInRycC1jbG9zZS1zYXZlXCI+XG4gICAgICAgICAgICAgICAgPGEgaWQ9XCJ0cnAtY29udHJvbHMtY2xvc2VcIiA6aHJlZj1cImNsb3NlVVJMXCIgOnRpdGxlPVwiZWRpdG9yU3RyaW5ncy5jbG9zZVwiPjwvYT5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidHJwLXNhdmUtYW5kLWxvYWRlci1zcGlubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRycC1hamF4LWxvYWRlclwiIHYtc2hvdz1cImxvYWRpbmdfc3RyaW5ncyA+IDBcIiBpZD1cInRycC1zdHJpbmctc2F2ZWQtYWpheC1sb2FkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLXNwaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNhdmUtdHJhbnNsYXRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNlbGVjdGVkSW5kZXhlc0FycmF5PVwic2VsZWN0ZWRJbmRleGVzQXJyYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkaWN0aW9uYXJ5PVwiZGljdGlvbmFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNldHRpbmdzPVwic2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpub25jZXM9XCJub25jZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphamF4X3VybD1cImFqYXhVcmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjdXJyZW50TGFuZ3VhZ2U9XCJjdXJyZW50TGFuZ3VhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpvblNjcmVlbkxhbmd1YWdlPVwib25TY3JlZW5MYW5ndWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmN1cnJlbnRVUkw9XCJjdXJyZW50VVJMXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdHJhbnNsYXRpb25zLXNhdmVkPVwic2hvd0NoYW5nZXNVbnNhdmVkTWVzc2FnZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZWRpdG9yU3RyaW5ncz1cImVkaXRvclN0cmluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzdHJpbmdUeXBlcz1cInN0cmluZ1R5cGVzXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L3NhdmUtdHJhbnNsYXRpb25zPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnAtY29udHJvbHMtY29udGFpbmVyXCIgOmNsYXNzPVwieyd0cnAtc2hvdy1lZGl0b3JzLW5hdmlnYXRpb24nIDogZWRpdG9yc05hdmlnYXRpb24uc2hvdyB9XCI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLWNvbnRyb2xzLXNlY3Rpb25cIiBpZD1cInRycC1jb250cm9scy1zZWN0aW9uLWZpcnN0XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRycC1jb250cm9scy1zZWN0aW9uLWNvbnRlbnRcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInRycC1uZXh0LXByZXZpb3VzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJ0cnAtcHJldmlvdXNcIiBjbGFzcz1cInRycC1uZXh0LXByZXZpb3VzLWJ1dHRvbnMgYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2s9XCJwcmV2aW91c1N0cmluZygpXCIgOnRpdGxlPVwiZWRpdG9yU3RyaW5ncy5wcmV2aW91c190aXRsZV9hdHRyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiZsYXF1bzs8L3NwYW4+IHt7IGVkaXRvclN0cmluZ3MucHJldmlvdXMgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cInRycC1uZXh0XCIgY2xhc3M9XCJ0cnAtbmV4dC1wcmV2aW91cy1idXR0b25zIGJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW9uOmNsaWNrPVwibmV4dFN0cmluZygpXCIgOnRpdGxlPVwiZWRpdG9yU3RyaW5ncy5uZXh0X3RpdGxlX2F0dHJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZWRpdG9yU3RyaW5ncy5uZXh0IH19IDxzcGFuPiZyYXF1bzs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRycC1jb250cm9scy1zZWN0aW9uXCIgdi1zaG93PVwic2VsZWN0ZWRJbmRleGVzQXJyYXkubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFuZ3VhZ2UtYm94ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c2VsZWN0ZWRJbmRleGVzQXJyYXk9XCJzZWxlY3RlZEluZGV4ZXNBcnJheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmRpY3Rpb25hcnk9XCJkaWN0aW9uYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y3VycmVudExhbmd1YWdlPVwiY3VycmVudExhbmd1YWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6b25TY3JlZW5MYW5ndWFnZT1cIm9uU2NyZWVuTGFuZ3VhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpsYW5ndWFnZU5hbWVzPVwibGFuZ3VhZ2VOYW1lc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNldHRpbmdzPVwic2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzaG93Q2hhbmdlc1Vuc2F2ZWRNZXNzYWdlPVwic2hvd0NoYW5nZXNVbnNhdmVkTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRpc2NhcmRlZC1jaGFuZ2VzPVwiaGFzVW5zYXZlZENoYW5nZXMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmVkaXRvclN0cmluZ3M9XCJlZGl0b3JTdHJpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZmxhZ3NQYXRoPVwiZmxhZ3NQYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bm9uY2VzPVwibm9uY2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YWpheF91cmw9XCJhamF4VXJsXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L2xhbmd1YWdlLWJveGVzPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGV4dHJhLWNvbnRlbnQgOmxhbmd1YWdlTmFtZXM9XCJsYW5ndWFnZU5hbWVzXCIgOmVkaXRvclN0cmluZ3M9XCJlZGl0b3JTdHJpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6cGFpZFZlcnNpb249XCJwYWlkVmVyc2lvblwiPjwvZXh0cmEtY29udGVudD5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnAtY29udHJvbHMtc2VjdGlvblwiIHYtc2hvdz1cInRyYW5zbGF0aW9uTm90TG9hZGVkWWV0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0cnAtdHJhbnNsYXRpb24tbm90LXJlYWR5LXNlY3Rpb25cIiBjbGFzcz1cInRycC1jb250cm9scy1zZWN0aW9uLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIHYtaHRtbD1cImVkaXRvclN0cmluZ3MudHJhbnNsYXRpb25fbm90X2xvYWRlZF95ZXRcIj48L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxlZGl0b3JzLW5hdmlnYXRpb24gOmVkaXRvcnNOYXZpZ2F0aW9uPVwiZWRpdG9yc05hdmlnYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c2VsZWN0ZWRUYWI9XCInc3RyaW5ndHJhbnNsYXRpb24nXCI+PC9lZGl0b3JzLW5hdmlnYXRpb24+XG5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBpZD1cInRycC1wcmV2aWV3XCIgY2xhc3M9XCJ0cnAtc3RyaW5nLXRyYW5zbGF0aW9uLWNvbnRhaW5lclwiIEBjbGljaz1cImhhc1Vuc2F2ZWRDaGFuZ2VzKClcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnAtc3RyaW5nLXRyYW5zbGF0aW9uLWlubmVyLWNvbnRhaW5lclwiIDpjbGFzcz1cInsndHJwLXNjcmVlbi1vdmVybGF5JyA6IHNob3dDaGFuZ2VzVW5zYXZlZE1lc3NhZ2UgfVwiPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cIm5hdi10YWItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8cm91dGVyLWxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWZvcj1cIih0YWIsIHRhYl9zbHVnKSBpbiBzdHJpbmdUeXBlc0NvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1iaW5kOmtleT1cIid0cnAtdGFiLWtleS0nICsgdGFiX3NsdWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp0bz1cIih0YWJbJ2NhdGVnb3J5X2Jhc2VkJ10gKSAgPyAnLycrIHRhYl9zbHVnICsgJy8nOiAnLycrIHRhYl9zbHVnICsgJy8nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6aWQ9XCIndHJwLXRhYi0nICsgdGFiX3NsdWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LXRhYlwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFiWyd0YWJfbmFtZSddfX1cbiAgICAgICAgICAgICAgICAgICAgPC9yb3V0ZXItbGluaz5cbjwhLS0gICAgICAgICAgICAgICAgICAgIDxyb3V0ZXItbGluayB0bz1cIi9pbXBvcnQtZXhwb3J0XCIgY2xhc3M9XCJuYXYtdGFiXCI+LS0+XG48IS0tICAgICAgICAgICAgICAgICAgICAgICAge3tzdEVkaXRvclN0cmluZ3MuaW1wb3J0ZXhwb3J0fX0tLT5cbjwhLS0gICAgICAgICAgICAgICAgICAgIDwvcm91dGVyLWxpbms+LS0+XG4gICAgICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgICAgICAgICA8cm91dGVyLXZpZXdcbiAgICAgICAgICAgICAgICAgICAgICAgIDpkaWN0aW9uYXJ5PVwiZGljdGlvbmFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6dG90YWxJdGVtcz1cInRvdGFsSXRlbXNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L3JvdXRlci12aWV3PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgICBpbXBvcnQgJ3NlbGVjdDIvZGlzdC9qcy9zZWxlY3QyLm1pbi5qcydcbiAgICBpbXBvcnQgdXRpbHMgICAgICAgICAgICAgZnJvbSAnLi91dGlscydcbiAgICBpbXBvcnQgYXhpb3MgICAgICAgICAgICAgZnJvbSAnYXhpb3MnXG4gICAgaW1wb3J0IGxhbmd1YWdlQm94ZXMgICAgIGZyb20gJy4vY29tcG9uZW50cy9sYW5ndWFnZS1ib3hlcy52dWUnXG4gICAgaW1wb3J0IHNhdmVUcmFuc2xhdGlvbnMgIGZyb20gJy4vY29tcG9uZW50cy9zYXZlLXRyYW5zbGF0aW9ucy52dWUnXG4gICAgaW1wb3J0IGhvdmVyQWN0aW9ucyAgICAgIGZyb20gJy4vY29tcG9uZW50cy9ob3Zlci1hY3Rpb25zLnZ1ZSdcbiAgICBpbXBvcnQgZXh0cmFDb250ZW50ICAgICAgZnJvbSAnLi9jb21wb25lbnRzL2V4dHJhLWNvbnRlbnQudnVlJ1xuICAgIGltcG9ydCBlZGl0b3JzTmF2aWdhdGlvbiBmcm9tICcuL2NvbXBvbmVudHMvZWRpdG9ycy1uYXZpZ2F0aW9uLnZ1ZSdcbiAgICBpbXBvcnQgaGUgICAgICAgICAgICAgICAgZnJvbSAnaGUnXG5cbiAgICBleHBvcnQgZGVmYXVsdCB7XG4gICAgICAgIGNvbXBvbmVudHMgOiB7XG4gICAgICAgICAgICBsYW5ndWFnZUJveGVzLFxuICAgICAgICAgICAgc2F2ZVRyYW5zbGF0aW9ucyxcbiAgICAgICAgICAgIGhvdmVyQWN0aW9ucyxcbiAgICAgICAgICAgIGV4dHJhQ29udGVudCxcbiAgICAgICAgICAgIGVkaXRvcnNOYXZpZ2F0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGEoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC8vdHJwX2VkaXRvcl9kYXRhXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MgICAgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS50cnBfc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VOYW1lcyAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5sYW5ndWFnZV9uYW1lcyxcbiAgICAgICAgICAgICAgICBvcmRlcmVkU2Vjb25kYXJ5TGFuZ3VhZ2VzIDogdHJwX2VkaXRvcl9kYXRhLm9yZGVyZWRfc2Vjb25kYXJ5X2xhbmd1YWdlcyxcbiAgICAgICAgICAgICAgICBub25jZXMgICAgICAgICAgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLmVkaXRvcl9ub25jZXMsXG4gICAgICAgICAgICAgICAgZWRpdG9yc05hdmlnYXRpb24gICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5lZGl0b3JzX25hdmlnYXRpb24sXG4gICAgICAgICAgICAgICAgZWRpdG9yU3RyaW5ncyAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS50cnBfbG9jYWxpemVkX3N0cmluZ3MsXG4gICAgICAgICAgICAgICAgc3RyaW5nVHlwZXMgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5zdHJpbmdfdHlwZXMsXG4gICAgICAgICAgICAgICAgZmxhZ3NQYXRoICAgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5mbGFnc19wYXRoLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRMYW5ndWFnZSAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuY3VycmVudF9sYW5ndWFnZSxcbiAgICAgICAgICAgICAgICBvblNjcmVlbkxhbmd1YWdlICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLm9uX3NjcmVlbl9sYW5ndWFnZSxcbiAgICAgICAgICAgICAgICBhamF4VXJsICAgICAgICAgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLmFqYXhfdXJsLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRVUkwgICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEudXJsX3RvX2xvYWQsXG4gICAgICAgICAgICAgICAgcGFpZFZlcnNpb24gICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5wYWlkX3ZlcnNpb24sXG5cbiAgICAgICAgICAgICAgICAvL3RycF9zdHJpbmdfdHJhbnNsYXRpb25fZGF0YVxuICAgICAgICAgICAgICAgIHN0cmluZ1R5cGVzQ29uZmlnIDogdHJwX3N0cmluZ190cmFuc2xhdGlvbl9kYXRhLnN0cmluZ190eXBlc19jb25maWcsXG4gICAgICAgICAgICAgICAgc3RFZGl0b3JTdHJpbmdzICAgOiB0cnBfc3RyaW5nX3RyYW5zbGF0aW9uX2RhdGEuc3RfZWRpdG9yX3N0cmluZ3MsXG5cbiAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5ICAgICAgICAgICAgICAgIDoge30sXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRTdHJpbmcgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJbmRleGVzQXJyYXkgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgIGRldGVjdGVkU2VsZWN0b3JBbmRJZCAgICAgOiBbXSxcbiAgICAgICAgICAgICAgICBzdHJpbmdHcm91cHMgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICAgICAgc2hvd0NoYW5nZXNVbnNhdmVkTWVzc2FnZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxvYWRpbmdfc3RyaW5ncyAgICAgICAgICAgOiAwLFxuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uTm90TG9hZGVkWWV0ICAgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zICAgICAgICAgICAgICAgIDogbnVsbFxuXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZWQoKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzWyAnZGVmYXVsdC1sYW5ndWFnZS1uYW1lJyBdID0gdGhpcy5sYW5ndWFnZU5hbWVzWyB0aGlzLnNldHRpbmdzWyAnZGVmYXVsdC1sYW5ndWFnZScgXSBdXG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlID0gdGhpcy5zZXR0aW5nc1sgJ2RlZmF1bHQtbGFuZ3VhZ2UnIF1cblxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ3RycF90cmlnZ2VyX3BlcmZvcm1fYWN0aW9uX2V2ZW50JywgdGhpcy5lZGl0U3RyaW5nIClcbiAgICAgICAgfSxcbiAgICAgICAgbW91bnRlZCgpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0U3RyaW5ncyggdGhpcy4kcm91dGUucXVlcnkgKVxuXG4gICAgICAgICAgICB0aGlzLmFkZEtleWJvYXJkU2hvcnRjdXRzTGlzdGVuZXIoKVxuICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzXG5cbiAgICAgICAgICAgIC8vIHJlc2l6ZSBzaWRlYmFyIGFuZCBjb25zZXF1ZW50bHkgdGhlIGlmcmFtZVxuICAgICAgICAgICAgbGV0IHByZXZpZXdDb250YWluZXIgPSBqUXVlcnkoICcjdHJwLXByZXZpZXcnIClcbiAgICAgICAgICAgIGxldCB0b3RhbF93aWR0aCAgICAgID0galF1ZXJ5KCB3aW5kb3cgKS53aWR0aCgpXG4gICAgICAgICAgICBqUXVlcnkoICcjdHJwLWNvbnRyb2xzJyApLnJlc2l6YWJsZSgge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCAgICA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpZXdDb250YWluZXIudG9nZ2xlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcCAgICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aWV3Q29udGFpbmVyLnRvZ2dsZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXMgIDogJ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aCA6IDMyNyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGggOiB0b3RhbF93aWR0aCAtIDIwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApLmJpbmQoIFwicmVzaXplXCIsIHRoaXMucmVzaXplSWZyYW1lIClcblxuICAgICAgICAgICAgLy8gcmVzaXplIGlmcmFtZSB3aGVuIHJlc2l6aW5nIHdpbmRvd1xuICAgICAgICAgICAgalF1ZXJ5KCB3aW5kb3cgKS5yZXNpemUoIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnJlc2l6ZUlmcmFtZSgpXG4gICAgICAgICAgICB9IClcbiAgICAgICAgfSxcbiAgICAgICAgd2F0Y2ggICAgICA6IHtcbiAgICAgICAgICAgICRyb3V0ZSggdG8sIGZyb20gKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTdHJpbmdzKCB0by5xdWVyeSApXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0ZWRTdHJpbmcgOiBmdW5jdGlvbiAoIG5ld1N0cmluZywgb2xkU3RyaW5nICkge1xuICAgICAgICAgICAgICAgIGlmICggIXRoaXMuaGFzVW5zYXZlZENoYW5nZXMoKSApe1xuICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMuc2VsZWN0ZWRTdHJpbmcgPT09IG51bGwgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleGVzQXJyYXkgPSBbIF1cbiAgICAgICAgICAgICAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ZXNBcnJheSA9IFsgdGhpcy5zZWxlY3RlZFN0cmluZyBdXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGljdGlvbmFyeSA6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgaWYgKCAhdGhpcy5oYXNVbnNhdmVkQ2hhbmdlcygpICl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdHJpbmcgPSBudWxsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleGVzQXJyYXkgPSBbIF1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXB1dGVkICAgOiB7XG4gICAgICAgICAgICBjbG9zZVVSTCA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhblVSTCggdGhpcy5jdXJyZW50VVJMIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWV0aG9kcyAgICA6IHtcbiAgICAgICAgICAgIGdldFN0cmluZ3MoIHF1ZXJ5ICkge1xuICAgICAgICAgICAgICAgIGlmICggIXRoaXMuJHJvdXRlLm1hdGNoZWRbIDAgXS5wcm9wcy5kZWZhdWx0LnRyYW5zbGF0aW9uVGFiICl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBzZWxmICAgICAgICAgICAgPSB0aGlzXG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRUYWIgICAgICA9IHRoaXMuJHJvdXRlLm1hdGNoZWRbIDAgXS5wcm9wcy5kZWZhdWx0LmN1cnJlbnRUYWJcbiAgICAgICAgICAgICAgICBsZXQgdHJhbnNsYXRpb25UeXBlID0gdGhpcy4kcm91dGUubWF0Y2hlZFsgMCBdLnByb3BzLmRlZmF1bHQudHJhbnNsYXRpb25UeXBlXG5cbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoICdhY3Rpb24nLCAndHJwX3N0cmluZ190cmFuc2xhdGlvbl9nZXRfc3RyaW5nc18nICsgdHJhbnNsYXRpb25UeXBlIClcbiAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCggJ3F1ZXJ5JywgSlNPTi5zdHJpbmdpZnkoIHF1ZXJ5ICkgKVxuICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCAnc2VjdXJpdHknLCBjdXJyZW50VGFiWyAnbm9uY2VzJyBdWyAnZ2V0X3N0cmluZ3MnIF0gKVxuXG4gICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ3RycF90cmlnZ2VyX3Nob3dfbG9hZGluZ190YWJsZV9ldmVudCcgKSApXG5cbiAgICAgICAgICAgICAgICBheGlvcy5wb3N0KCB0aGlzLmFqYXhVcmwsIGRhdGEgKVxuICAgICAgICAgICAgICAgICAgICAgLnRoZW4oIGZ1bmN0aW9uICggcmVzcG9uc2UgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ3RycF90cmlnZ2VyX2hpZGVfbG9hZGluZ190YWJsZV9ldmVudCcgKSApXG4gICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXNwb25zZSAhPSBudWxsICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25TY3JlZW5MYW5ndWFnZSA9IChxdWVyeS5sYW5ndWFnZSAmJiB1dGlscy5hcnJheUNvbnRhaW5zSXRlbSggc2VsZi5zZXR0aW5nc1sgJ3RyYW5zbGF0aW9uLWxhbmd1YWdlcycgXSwgcXVlcnkubGFuZ3VhZ2UgKSAmJiBxdWVyeS5sYW5ndWFnZSAhPT0gJ3RycC1kZWZhdWx0JykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkubGFuZ3VhZ2UgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRMYW5ndWFnZSAgPSAocXVlcnkubGFuZ3VhZ2UgJiYgdXRpbHMuYXJyYXlDb250YWluc0l0ZW0oIHNlbGYuc2V0dGluZ3NbICd0cmFuc2xhdGlvbi1sYW5ndWFnZXMnIF0sIHF1ZXJ5Lmxhbmd1YWdlICkgJiYgcXVlcnkubGFuZ3VhZ2UgIT09ICd0cnAtZGVmYXVsdCcpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Lmxhbmd1YWdlIDogc2VsZi5zZXR0aW5nc1sgJ2RlZmF1bHQtbGFuZ3VhZ2UnIF1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlLmRhdGEuZGljdGlvbmFyeSApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld0RpY3Rpb25hcnkgPSByZXNwb25zZS5kYXRhLmRpY3Rpb25hcnlcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWxmLmhhc1Vuc2F2ZWRDaGFuZ2VzKCkgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3B5IHRoZSB1bnNhdmVkIHN0cmluZyBmcm9tIHRoZSBjdXJyZW50IGRpY3Rpb25hcnkgdG8gdGhlIG5ldyBkaWN0aW9uYXJ5IHRvIGFsbG93IHVzZXIgdG8gZGlzY2FyZCBvciBzYXZlIGNoYW5nZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3U2VsZWN0ZWRJbmRleGVzQXJyYXkgPSBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRJbmRleGVzQXJyYXkuZm9yRWFjaCggZnVuY3Rpb24oIGl0ZW0gKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGljdGlvbmFyeVsgaXRlbSBdLnVuc2F2ZWRDaGFuZ2VzID0gJ3llcydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRJbmRleGVzQXJyYXkucHVzaCggbmV3RGljdGlvbmFyeS5wdXNoKCBzZWxmLmRpY3Rpb25hcnlbaXRlbV0gKSAtIDEgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEluZGV4ZXNBcnJheSA9IG5ld1NlbGVjdGVkSW5kZXhlc0FycmF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZFN0cmluZyA9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kaWN0aW9uYXJ5ID0gbmV3RGljdGlvbmFyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2UuZGF0YS50b3RhbEl0ZW1zICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRvdGFsSXRlbXMgPSByZXNwb25zZS5kYXRhLnRvdGFsSXRlbXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgIH0gKVxuICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKCBmdW5jdGlvbiAoIGVycm9yICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICd0cnBfdHJpZ2dlcl9oaWRlX2xvYWRpbmdfdGFibGVfZXZlbnQnICkgKVxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGljdGlvbmFyeSA9IHt9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyggZXJyb3IgKVxuICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWxvYWQgPSBjb25maXJtKCBzZWxmLnN0RWRpdG9yU3RyaW5ncy5yZXF1ZXN0X2Vycm9yIClcbiAgICAgICAgICAgICAgICAgICAgICAgICBpZiggcmVsb2FkID09PSBmYWxzZSApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgfSApXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZWRpdFN0cmluZyggZGF0YSApIHtcbiAgICAgICAgICAgICAgICBpZiAoIGRhdGEuZGV0YWlsLmFjdGlvbiA9PT0gJ2VkaXQnICl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdHJpbmcgPSBkYXRhLmRldGFpbC5zdHJpbmdJbmRleFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhblVSTCggdXJsICkge1xuICAgICAgICAgICAgICAgIC8vbWFrZSByZW1vdmVVcmxQYXJhbWV0ZXIgcmVjdXJzaXZlIGFuZCBvbmx5IGNhbGwgaXQgb25jZSB3aXRoIGFsbCB0aGUgcGFyYW1ldGVycyB0aGF0XG4gICAgICAgICAgICAgICAgLy9uZWVkIHRvIHN0cmlwcGVkID9cbiAgICAgICAgICAgICAgICB1cmwgPSB1dGlscy5yZW1vdmVVcmxQYXJhbWV0ZXIoIHVybCwgJ2xhbmcnIClcbiAgICAgICAgICAgICAgICB1cmwgPSB1dGlscy5yZW1vdmVVcmxQYXJhbWV0ZXIoIHVybCwgJ3RycC12aWV3LWFzJyApXG4gICAgICAgICAgICAgICAgdXJsID0gdXRpbHMucmVtb3ZlVXJsUGFyYW1ldGVyKCB1cmwsICd0cnAtdmlldy1hcy1ub25jZScgKVxuICAgICAgICAgICAgICAgIHVybCA9IHV0aWxzLnJlbW92ZVVybFBhcmFtZXRlciggdXJsLCAndHJwLWVkaXQtdHJhbnNsYXRpb24nIClcbiAgICAgICAgICAgICAgICB1cmwgPSB1dGlscy5yZW1vdmVVcmxQYXJhbWV0ZXIoIHVybCwgJ3RycC1zdHJpbmctdHJhbnNsYXRpb24nIClcblxuICAgICAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKmlGcmFtZUxvYWRlZCgpe1xuICAgICAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xuICAgICAgICAgICAgICAgIGxldCBpZnJhbWVFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3RycC1wcmV2aWV3LWlmcmFtZScpXG5cbiAgICAgICAgICAgICAgICB0aGlzLmlmcmFtZSA9IGlmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50IHx8IGlmcmFtZUVsZW1lbnQuY29udGVudFdpbmRvdy5kb2N1bWVudFxuXG4gICAgICAgICAgICAgICAgLy9zeW5jIGlGcmFtZSBVUkwgd2l0aCBwYXJlbnRcbiAgICAgICAgICAgICAgICBpZiAoIHRoaXMuY3VycmVudFVSTCAhPSB0aGlzLmlmcmFtZS5VUkwgKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRVUkwgPSB0aGlzLmlmcmFtZS5VUkxcblxuICAgICAgICAgICAgICAgIC8vaGlkZSBpRnJhbWUgbG9hZGVyXG4gICAgICAgICAgICAgICAgdGhpcy5pZnJhbWVMb2FkZXIoICdoaWRlJyApXG5cbiAgICAgICAgICAgICAgICBzZWxmLmRldGVjdGVkU2VsZWN0b3JBbmRJZCA9IFtdXG4gICAgICAgICAgICAgICAgc2VsZi5kaWN0aW9uYXJ5ICAgICAgICAgICAgPSBbXVxuICAgICAgICAgICAgICAgIHRoaXMuc2NhbklmcmFtZUZvclN0cmluZ3MoKVxuXG4gICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICd0cnBfaWZyYW1lX3BhZ2VfdXBkYXRlZCcsIHRoaXMuc2NhbklmcmFtZUZvclN0cmluZ3MgKVxuXG4gICAgICAgICAgICAgICAgLy9ldmVudCB0aGF0IGlzIGZpcmVkIHdoZW4gdGhlIGlGcmFtZSBpcyBuYXZpZ2F0ZWRcbiAgICAgICAgICAgICAgICBpZnJhbWVFbGVtZW50LmNvbnRlbnRXaW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pZnJhbWVMb2FkZXIoICdzaG93JyApXG5cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZFN0cmluZyA9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEluZGV4ZXNBcnJheSA9IFtdXG4gICAgICAgICAgICAgICAgICAgIHNlbGYudHJhbnNsYXRpb25Ob3RMb2FkZWRZZXQgPSBmYWxzZVxuXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyaW5nc0Ryb3Bkb3duTG9hZGluZygpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LCovXG4gICAgICAgICAgICBoYXNVbnNhdmVkQ2hhbmdlcygpIHtcbiAgICAgICAgICAgICAgICBsZXQgdW5zYXZlZENoYW5nZXMgPSBmYWxzZVxuICAgICAgICAgICAgICAgIGxldCBzZWxmICAgICAgICAgICA9IHRoaXNcbiAgICAgICAgICAgICAgICBpZiAoIHRoaXMuc2VsZWN0ZWRJbmRleGVzQXJyYXkubGVuZ3RoID4gMCApe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhlc0FycmF5LmZvckVhY2goIGZ1bmN0aW9uICggc2VsZWN0ZWRJbmRleCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0dGluZ3NbICd0cmFuc2xhdGlvbi1sYW5ndWFnZXMnIF0uZm9yRWFjaCggZnVuY3Rpb24gKCBsYW5ndWFnZUNvZGUgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWxmLmRpY3Rpb25hcnlbIHNlbGVjdGVkSW5kZXggXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpY3Rpb25hcnlbIHNlbGVjdGVkSW5kZXggXS50cmFuc2xhdGlvbnNBcnJheVsgbGFuZ3VhZ2VDb2RlIF0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZGljdGlvbmFyeVsgc2VsZWN0ZWRJbmRleCBdLnRyYW5zbGF0aW9uc0FycmF5WyBsYW5ndWFnZUNvZGUgXS50cmFuc2xhdGVkICE9PSBzZWxmLmRpY3Rpb25hcnlbIHNlbGVjdGVkSW5kZXggXS50cmFuc2xhdGlvbnNBcnJheVsgbGFuZ3VhZ2VDb2RlIF0uZWRpdGVkVHJhbnNsYXRpb24pICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2F2ZWRDaGFuZ2VzID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gKVxuICAgICAgICAgICAgICAgICAgICB9IClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIHVuc2F2ZWRDaGFuZ2VzID09PSBmYWxzZSApe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhlc0FycmF5LmZvckVhY2goIGZ1bmN0aW9uICggc2VsZWN0ZWRJbmRleCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2VsZi5kaWN0aW9uYXJ5Lmhhc093blByb3BlcnR5KHNlbGVjdGVkSW5kZXgpICYmIHNlbGYuZGljdGlvbmFyeVsgc2VsZWN0ZWRJbmRleCBdLnVuc2F2ZWRDaGFuZ2VzICYmIHNlbGYuZGljdGlvbmFyeVsgc2VsZWN0ZWRJbmRleCBdLnVuc2F2ZWRDaGFuZ2VzID09PSAneWVzJyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kaWN0aW9uYXJ5WyBzZWxlY3RlZEluZGV4IF0udW5zYXZlZENoYW5nZXMgPSAnbm8nXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93Q2hhbmdlc1Vuc2F2ZWRNZXNzYWdlID0gdW5zYXZlZENoYW5nZXNcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5zYXZlZENoYW5nZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZnJhbWVMb2FkZXIoIHN0YXR1cyApIHtcbiAgICAgICAgICAgICAgICBsZXQgbG9hZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd0cnAtcHJldmlldy1sb2FkZXInIClcblxuICAgICAgICAgICAgICAgIGlmICggc3RhdHVzID09ICdzaG93JyApXG4gICAgICAgICAgICAgICAgICAgIGxvYWRlci5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIHN0YXR1cyA9PSAnaGlkZScgKVxuICAgICAgICAgICAgICAgICAgICBsb2FkZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZpb3VzU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgIC8qIGxldCBjdXJyZW50VmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHJwLXN0cmluZy1jYXRlZ29yaWVzJykudmFsdWVcblxuICAgICAgICAgICAgICAgICBsZXQgbmV3VmFsdWUgPSArY3VycmVudFZhbHVlIC0gMVxuXG4gICAgICAgICAgICAgICAgIHdoaWxlKCBuZXdWYWx1ZSA+PSAwICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyN0cnAtc3RyaW5nLWNhdGVnb3JpZXMgb3B0aW9uW3ZhbHVlPVwiJyArIG5ld1ZhbHVlICsgJ1wiXScpLmxlbmd0aCA9PT0gMCApe1xuICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUtLTtcbiAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgIGlmKCBuZXdWYWx1ZSA8IDAgKVxuICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN0cmluZyA9IG5ld1ZhbHVlLnRvU3RyaW5nKCkqL1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRTdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgLypsZXQgY3VycmVudFZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RycC1zdHJpbmctY2F0ZWdvcmllcycpLnZhbHVlLCBuZXdWYWx1ZSA9IDBcblxuICAgICAgICAgICAgICAgIGlmKCBjdXJyZW50VmFsdWUgIT0gJycgKVxuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9ICtjdXJyZW50VmFsdWUgKyAxXG5cbiAgICAgICAgICAgICAgICB3aGlsZSggbmV3VmFsdWUgPCB0aGlzLmRpY3Rpb25hcnkubGVuZ3RoICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyN0cnAtc3RyaW5nLWNhdGVnb3JpZXMgb3B0aW9uW3ZhbHVlPVwiJyArIG5ld1ZhbHVlICsgJ1wiXScpLmxlbmd0aCA9PT0gMCApe1xuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSsrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICggbmV3VmFsdWUgPj0gdGhpcy5kaWN0aW9uYXJ5Lmxlbmd0aCApe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RyaW5nID0gbmV3VmFsdWUudG9TdHJpbmcoKSovXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWRkS2V5Ym9hcmRTaG9ydGN1dHNMaXN0ZW5lcigpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcImtleWRvd25cIiwgZnVuY3Rpb24gKCBlICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoICh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKCBcIk1hY1wiICkgPyBlLm1ldGFLZXkgOiBlLmN0cmxLZXkpICYmIGUuYWx0S2V5ICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDVFJMICsgQUxUICsgcmlnaHQgYXJyb3dcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZS5rZXlDb2RlID09PSAzOSApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICd0cnBfdHJpZ2dlcl9uZXh0X3N0cmluZ19ldmVudCcgKSApXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENUUkwgKyBBTFQgKyBsZWZ0IGFycm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlLmtleUNvZGUgPT09IDM3ICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAndHJwX3RyaWdnZXJfcHJldmlvdXNfc3RyaW5nX2V2ZW50JyApIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBmYWxzZSApXG5cbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ3RycF90cmlnZ2VyX25leHRfc3RyaW5nX2V2ZW50JywgdGhpcy5uZXh0U3RyaW5nIClcbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ3RycF90cmlnZ2VyX3ByZXZpb3VzX3N0cmluZ19ldmVudCcsIHRoaXMucHJldmlvdXNTdHJpbmcgKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc2l6ZUlmcmFtZSggZXZlbnQsIHVpICkge1xuICAgICAgICAgICAgICAgIGxldCB0b3RhbF93aWR0aCA9IGpRdWVyeSggd2luZG93ICkud2lkdGgoKVxuICAgICAgICAgICAgICAgIGxldCB3aWR0aCAgICAgICA9IGpRdWVyeSggJyN0cnAtY29udHJvbHMnICkud2lkdGgoKVxuXG4gICAgICAgICAgICAgICAgbGV0IHByZXZpZXdDb250YWluZXIgPSBqUXVlcnkoICcjdHJwLXByZXZpZXcnIClcbiAgICAgICAgICAgICAgICBwcmV2aWV3Q29udGFpbmVyLmNzcyggJ2xlZnQnLCAod2lkdGggLSAzNDgpIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./assets/src/js/string-translation.vue?vue&type=script&lang=js&\n");
1091
 
1092
  /***/ }),
1093
 
@@ -1176,7 +1176,7 @@ eval("/* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !
1176
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1177
 
1178
  "use strict";
1179
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.editorsNavigation.show\n ? _c(\"div\", { attrs: { id: \"trp-editors-navigation-tabs\" } }, [\n _c(\n \"table\",\n { attrs: { id: \"trp-editors-tab-table\" } },\n _vm._l(_vm.editorsNavigation.tabs, function(navigationTab) {\n return _c(\n \"td\",\n {\n staticClass: \"trp-editors-tab\",\n class: {\n \"trp-selected-tab\": navigationTab.handle === _vm.selectedTab\n }\n },\n [\n _c(\"a\", { attrs: { href: navigationTab.path } }, [\n _vm._v(_vm._s(navigationTab.label))\n ]),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass: \"trp-tooltip-toggle\",\n attrs: {\n \"data-tooltip\": navigationTab.tooltip,\n tabindex: \"0\"\n }\n },\n [\n _c(\n \"svg\",\n {\n attrs: {\n viewBox: \"0 0 27 27\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\n \"g\",\n {\n attrs: { fill: \"#a8a8a8\", \"fill-rule\": \"evenodd\" }\n },\n [\n _c(\"path\", {\n attrs: {\n d:\n \"M13.5 27C20.956 27 27 20.956 27 13.5S20.956 0 13.5 0 0 6.044 0 13.5 6.044 27 13.5 27zm0-2C7.15 25 2 19.85 2 13.5S7.15 2 13.5 2 25 7.15 25 13.5 19.85 25 13.5 25z\"\n }\n }),\n _c(\"path\", {\n attrs: {\n d:\n \"M12.05 7.64c0-.228.04-.423.12-.585.077-.163.185-.295.32-.397.138-.102.298-.177.48-.227.184-.048.383-.073.598-.073.203 0 .398.025.584.074.186.05.35.126.488.228.14.102.252.234.336.397.084.162.127.357.127.584 0 .22-.043.412-.127.574-.084.163-.196.297-.336.4-.14.106-.302.185-.488.237-.186.053-.38.08-.584.08-.215 0-.414-.027-.597-.08-.182-.05-.342-.13-.48-.235-.135-.104-.243-.238-.32-.4-.08-.163-.12-.355-.12-.576zm-1.02 11.517c.134 0 .275-.013.424-.04.148-.025.284-.08.41-.16.124-.082.23-.198.313-.35.085-.15.127-.354.127-.61v-5.423c0-.238-.042-.43-.127-.57-.084-.144-.19-.254-.318-.332-.13-.08-.267-.13-.415-.153-.148-.024-.286-.036-.414-.036h-.21v-.95h4.195v7.463c0 .256.043.46.127.61.084.152.19.268.314.35.125.08.263.135.414.16.15.027.29.04.418.04h.21v.95H10.82v-.95h.21z\"\n }\n })\n ]\n )\n ]\n )\n ]\n )\n ]\n )\n }),\n 0\n )\n ])\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2pzL2NvbXBvbmVudHMvZWRpdG9ycy1uYXZpZ2F0aW9uLnZ1ZT9jZDA3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUyxvQ0FBb0MsRUFBRTtBQUNoRTtBQUNBO0FBQ0EsV0FBVyxTQUFTLDhCQUE4QixFQUFFO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSx5QkFBeUIsU0FBUywyQkFBMkIsRUFBRTtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEMsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vYXNzZXRzL3NyYy9qcy9jb21wb25lbnRzL2VkaXRvcnMtbmF2aWdhdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDRmNWVlMjcmLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0uZWRpdG9yc05hdmlnYXRpb24uc2hvd1xuICAgID8gX2MoXCJkaXZcIiwgeyBhdHRyczogeyBpZDogXCJ0cnAtZWRpdG9ycy1uYXZpZ2F0aW9uLXRhYnNcIiB9IH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJ0YWJsZVwiLFxuICAgICAgICAgIHsgYXR0cnM6IHsgaWQ6IFwidHJwLWVkaXRvcnMtdGFiLXRhYmxlXCIgfSB9LFxuICAgICAgICAgIF92bS5fbChfdm0uZWRpdG9yc05hdmlnYXRpb24udGFicywgZnVuY3Rpb24obmF2aWdhdGlvblRhYikge1xuICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJ0cnAtZWRpdG9ycy10YWJcIixcbiAgICAgICAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgICAgICAgXCJ0cnAtc2VsZWN0ZWQtdGFiXCI6IG5hdmlnYXRpb25UYWIuaGFuZGxlID09PSBfdm0uc2VsZWN0ZWRUYWJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcImFcIiwgeyBhdHRyczogeyBocmVmOiBuYXZpZ2F0aW9uVGFiLnBhdGggfSB9LCBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKG5hdmlnYXRpb25UYWIubGFiZWwpKVxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwidHJwLXRvb2x0aXAtdG9nZ2xlXCIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLXRvb2x0aXBcIjogbmF2aWdhdGlvblRhYi50b29sdGlwLFxuICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4OiBcIjBcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI3IDI3XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGZpbGw6IFwiI2E4YThhOFwiLCBcImZpbGwtcnVsZVwiOiBcImV2ZW5vZGRcIiB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIk0xMy41IDI3QzIwLjk1NiAyNyAyNyAyMC45NTYgMjcgMTMuNVMyMC45NTYgMCAxMy41IDAgMCA2LjA0NCAwIDEzLjUgNi4wNDQgMjcgMTMuNSAyN3ptMC0yQzcuMTUgMjUgMiAxOS44NSAyIDEzLjVTNy4xNSAyIDEzLjUgMiAyNSA3LjE1IDI1IDEzLjUgMTkuODUgMjUgMTMuNSAyNXpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiTTEyLjA1IDcuNjRjMC0uMjI4LjA0LS40MjMuMTItLjU4NS4wNzctLjE2My4xODUtLjI5NS4zMi0uMzk3LjEzOC0uMTAyLjI5OC0uMTc3LjQ4LS4yMjcuMTg0LS4wNDguMzgzLS4wNzMuNTk4LS4wNzMuMjAzIDAgLjM5OC4wMjUuNTg0LjA3NC4xODYuMDUuMzUuMTI2LjQ4OC4yMjguMTQuMTAyLjI1Mi4yMzQuMzM2LjM5Ny4wODQuMTYyLjEyNy4zNTcuMTI3LjU4NCAwIC4yMi0uMDQzLjQxMi0uMTI3LjU3NC0uMDg0LjE2My0uMTk2LjI5Ny0uMzM2LjQtLjE0LjEwNi0uMzAyLjE4NS0uNDg4LjIzNy0uMTg2LjA1My0uMzguMDgtLjU4NC4wOC0uMjE1IDAtLjQxNC0uMDI3LS41OTctLjA4LS4xODItLjA1LS4zNDItLjEzLS40OC0uMjM1LS4xMzUtLjEwNC0uMjQzLS4yMzgtLjMyLS40LS4wOC0uMTYzLS4xMi0uMzU1LS4xMi0uNTc2em0tMS4wMiAxMS41MTdjLjEzNCAwIC4yNzUtLjAxMy40MjQtLjA0LjE0OC0uMDI1LjI4NC0uMDguNDEtLjE2LjEyNC0uMDgyLjIzLS4xOTguMzEzLS4zNS4wODUtLjE1LjEyNy0uMzU0LjEyNy0uNjF2LTUuNDIzYzAtLjIzOC0uMDQyLS40My0uMTI3LS41Ny0uMDg0LS4xNDQtLjE5LS4yNTQtLjMxOC0uMzMyLS4xMy0uMDgtLjI2Ny0uMTMtLjQxNS0uMTUzLS4xNDgtLjAyNC0uMjg2LS4wMzYtLjQxNC0uMDM2aC0uMjF2LS45NWg0LjE5NXY3LjQ2M2MwIC4yNTYuMDQzLjQ2LjEyNy42MS4wODQuMTUyLjE5LjI2OC4zMTQuMzUuMTI1LjA4LjI2My4xMzUuNDE0LjE2LjE1LjAyNy4yOS4wNC40MTguMDRoLjIxdi45NUgxMC44MnYtLjk1aC4yMXpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAwXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./assets/src/js/components/editors-navigation.vue?vue&type=template&id=04f5ee27&\n");
1180
 
1181
  /***/ }),
1182
 
931
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
932
 
933
  "use strict";
934
+ eval("__webpack_require__.r(__webpack_exports__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n props: ['editorsNavigation', 'selectedTab'],\n methods: {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vYXNzZXRzL3NyYy9qcy9jb21wb25lbnRzL2VkaXRvcnMtbmF2aWdhdGlvbi52dWU/NDAwMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBYUE7QUFDQSxVQUNBLG1CQURBLEVBRUEsYUFGQSxDQURBO0FBS0E7QUFMQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9hc3NldHMvc3JjL2pzL2NvbXBvbmVudHMvZWRpdG9ycy1uYXZpZ2F0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gICAgPGRpdiBpZD1cInRycC1lZGl0b3JzLW5hdmlnYXRpb24tdGFic1wiIHYtaWY9XCJlZGl0b3JzTmF2aWdhdGlvbi5zaG93XCI+XG4gICAgICAgIDx0YWJsZSBpZD1cInRycC1lZGl0b3JzLXRhYi10YWJsZVwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidHJwLWVkaXRvcnMtdGFiXCIgOmNsYXNzPVwieyd0cnAtc2VsZWN0ZWQtdGFiJzogbmF2aWdhdGlvblRhYi5oYW5kbGUgPT09IHNlbGVjdGVkVGFiIH1cIiB2LWZvcj1cIm5hdmlnYXRpb25UYWIgaW4gZWRpdG9yc05hdmlnYXRpb24udGFic1wiPlxuICAgICAgICAgICAgICAgIDxhIDpocmVmPVwibmF2aWdhdGlvblRhYi5wYXRoXCI+e3tuYXZpZ2F0aW9uVGFiLmxhYmVsfX08L2E+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cnAtdG9vbHRpcC10b2dnbGVcIiA6ZGF0YS10b29sdGlwPVwibmF2aWdhdGlvblRhYi50b29sdGlwXCIgdGFiaW5kZXg9XCIwXCIgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI3IDI3XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGZpbGw9XCIjYThhOGE4XCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIGQ9XCJNMTMuNSAyN0MyMC45NTYgMjcgMjcgMjAuOTU2IDI3IDEzLjVTMjAuOTU2IDAgMTMuNSAwIDAgNi4wNDQgMCAxMy41IDYuMDQ0IDI3IDEzLjUgMjd6bTAtMkM3LjE1IDI1IDIgMTkuODUgMiAxMy41UzcuMTUgMiAxMy41IDIgMjUgNy4xNSAyNSAxMy41IDE5Ljg1IDI1IDEzLjUgMjV6XCIvPjxwYXRoIGQ9XCJNMTIuMDUgNy42NGMwLS4yMjguMDQtLjQyMy4xMi0uNTg1LjA3Ny0uMTYzLjE4NS0uMjk1LjMyLS4zOTcuMTM4LS4xMDIuMjk4LS4xNzcuNDgtLjIyNy4xODQtLjA0OC4zODMtLjA3My41OTgtLjA3My4yMDMgMCAuMzk4LjAyNS41ODQuMDc0LjE4Ni4wNS4zNS4xMjYuNDg4LjIyOC4xNC4xMDIuMjUyLjIzNC4zMzYuMzk3LjA4NC4xNjIuMTI3LjM1Ny4xMjcuNTg0IDAgLjIyLS4wNDMuNDEyLS4xMjcuNTc0LS4wODQuMTYzLS4xOTYuMjk3LS4zMzYuNC0uMTQuMTA2LS4zMDIuMTg1LS40ODguMjM3LS4xODYuMDUzLS4zOC4wOC0uNTg0LjA4LS4yMTUgMC0uNDE0LS4wMjctLjU5Ny0uMDgtLjE4Mi0uMDUtLjM0Mi0uMTMtLjQ4LS4yMzUtLjEzNS0uMTA0LS4yNDMtLjIzOC0uMzItLjQtLjA4LS4xNjMtLjEyLS4zNTUtLjEyLS41NzZ6bS0xLjAyIDExLjUxN2MuMTM0IDAgLjI3NS0uMDEzLjQyNC0uMDQuMTQ4LS4wMjUuMjg0LS4wOC40MS0uMTYuMTI0LS4wODIuMjMtLjE5OC4zMTMtLjM1LjA4NS0uMTUuMTI3LS4zNTQuMTI3LS42MXYtNS40MjNjMC0uMjM4LS4wNDItLjQzLS4xMjctLjU3LS4wODQtLjE0NC0uMTktLjI1NC0uMzE4LS4zMzItLjEzLS4wOC0uMjY3LS4xMy0uNDE1LS4xNTMtLjE0OC0uMDI0LS4yODYtLjAzNi0uNDE0LS4wMzZoLS4yMXYtLjk1aDQuMTk1djcuNDYzYzAgLjI1Ni4wNDMuNDYuMTI3LjYxLjA4NC4xNTIuMTkuMjY4LjMxNC4zNS4xMjUuMDguMjYzLjEzNS40MTQuMTYuMTUuMDI3LjI5LjA0LjQxOC4wNGguMjF2Ljk1SDEwLjgydi0uOTVoLjIxelwiLz48L2c+PC9zdmc+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHR7XG4gICAgcHJvcHM6W1xuICAgICAgICAnZWRpdG9yc05hdmlnYXRpb24nLFxuICAgICAgICAnc2VsZWN0ZWRUYWInXG4gICAgXSxcbiAgICBtZXRob2RzOntcblxuICAgIH1cbn1cbjwvc2NyaXB0PlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./assets/src/js/components/editors-navigation.vue?vue&type=script&lang=js&\n");
935
 
936
  /***/ }),
937
 
1087
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1088
 
1089
  "use strict";
1090
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! select2/dist/js/select2.min.js */ \"./node_modules/select2/dist/js/select2.min.js\");\n/* harmony import */ var select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(select2_dist_js_select2_min_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./assets/src/js/utils.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! axios */ \"./node_modules/axios/index.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_language_boxes_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/language-boxes.vue */ \"./assets/src/js/components/language-boxes.vue\");\n/* harmony import */ var _components_save_translations_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/save-translations.vue */ \"./assets/src/js/components/save-translations.vue\");\n/* harmony import */ var _components_hover_actions_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/hover-actions.vue */ \"./assets/src/js/components/hover-actions.vue\");\n/* harmony import */ var _components_extra_content_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/extra-content.vue */ \"./assets/src/js/components/extra-content.vue\");\n/* harmony import */ var _components_editors_navigation_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/editors-navigation.vue */ \"./assets/src/js/components/editors-navigation.vue\");\n/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! he */ \"./node_modules/he/he.js\");\n/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(he__WEBPACK_IMPORTED_MODULE_8__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n components: {\n languageBoxes: _components_language_boxes_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n saveTranslations: _components_save_translations_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n hoverActions: _components_hover_actions_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n extraContent: _components_extra_content_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n editorsNavigation: _components_editors_navigation_vue__WEBPACK_IMPORTED_MODULE_7__[\"default\"]\n },\n data: function data() {\n return {\n //trp_editor_data\n settings: trp_editor_data.trp_settings,\n languageNames: trp_editor_data.language_names,\n orderedSecondaryLanguages: trp_editor_data.ordered_secondary_languages,\n nonces: trp_editor_data.editor_nonces,\n editorsNavigation: trp_editor_data.editors_navigation,\n editorStrings: trp_editor_data.trp_localized_strings,\n stringTypes: trp_editor_data.string_types,\n flagsPath: trp_editor_data.flags_path,\n currentLanguage: trp_editor_data.current_language,\n onScreenLanguage: trp_editor_data.on_screen_language,\n ajaxUrl: trp_editor_data.ajax_url,\n currentURL: trp_editor_data.url_to_load,\n paidVersion: trp_editor_data.paid_version,\n //trp_string_translation_data\n stringTypesConfig: trp_string_translation_data.string_types_config,\n stEditorStrings: trp_string_translation_data.st_editor_strings,\n dictionary: {},\n selectedString: null,\n selectedIndexesArray: [],\n detectedSelectorAndId: [],\n stringGroups: [],\n showChangesUnsavedMessage: false,\n loading_strings: 0,\n translationNotLoadedYet: false,\n totalItems: null\n };\n },\n created: function created() {\n this.settings['default-language-name'] = this.languageNames[this.settings['default-language']];\n this.currentLanguage = this.settings['default-language'];\n document.addEventListener('trp_trigger_perform_action_event', this.editString);\n },\n mounted: function mounted() {\n this.getStrings(this.$route.query);\n this.addKeyboardShortcutsListener();\n var self = this; // resize sidebar and consequently the iframe\n\n var previewContainer = jQuery('#trp-preview');\n var total_width = jQuery(window).width();\n jQuery('#trp-controls').resizable({\n start: function start() {\n previewContainer.toggle();\n },\n stop: function stop() {\n previewContainer.toggle();\n },\n handles: 'e',\n minWidth: 327,\n maxWidth: total_width - 20\n }).bind(\"resize\", this.resizeIframe); // resize iframe when resizing window\n\n jQuery(window).resize(function () {\n self.resizeIframe();\n });\n },\n watch: {\n $route: function $route(to, from) {\n this.getStrings(to.query);\n },\n selectedString: function selectedString(newString, oldString) {\n if (!this.hasUnsavedChanges()) {\n if (this.selectedString === null) {\n this.selectedIndexesArray = [];\n } else {\n this.selectedIndexesArray = [this.selectedString];\n }\n }\n },\n dictionary: function dictionary() {\n if (!this.hasUnsavedChanges()) {\n this.selectedString = null;\n this.selectedIndexesArray = [];\n }\n }\n },\n computed: {\n closeURL: function closeURL() {\n return this.cleanURL(this.currentURL);\n }\n },\n methods: {\n getStrings: function getStrings(query) {\n if (!this.$route.matched[0].props[\"default\"].translationTab) {\n return;\n }\n\n var self = this;\n var currentTab = this.$route.matched[0].props[\"default\"].currentTab;\n var translationType = this.$route.matched[0].props[\"default\"].translationType;\n var data = new FormData();\n data.append('action', 'trp_string_translation_get_strings_' + translationType);\n data.append('query', JSON.stringify(query));\n data.append('security', currentTab['nonces']['get_strings']);\n window.dispatchEvent(new Event('trp_trigger_show_loading_table_event'));\n axios__WEBPACK_IMPORTED_MODULE_2___default.a.post(this.ajaxUrl, data).then(function (response) {\n window.dispatchEvent(new Event('trp_trigger_hide_loading_table_event'));\n\n if (response != null) {\n self.onScreenLanguage = query.language && _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].arrayContainsItem(self.settings['translation-languages'], query.language) && query.language !== 'trp-default' ? query.language : '';\n self.currentLanguage = query.language && _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].arrayContainsItem(self.settings['translation-languages'], query.language) && query.language !== 'trp-default' ? query.language : self.settings['default-language'];\n\n if (response.data.dictionary) {\n var newDictionary = response.data.dictionary;\n\n if (self.hasUnsavedChanges()) {\n // copy the unsaved string from the current dictionary to the new dictionary to allow user to discard or save changes\n var newSelectedIndexesArray = [];\n self.selectedIndexesArray.forEach(function (item) {\n self.dictionary[item].unsavedChanges = 'yes';\n newSelectedIndexesArray.push(newDictionary.push(self.dictionary[item]) - 1);\n });\n self.selectedIndexesArray = newSelectedIndexesArray;\n self.selectedString = null;\n }\n\n self.dictionary = newDictionary;\n }\n\n if (response.data.totalItems) {\n self.totalItems = response.data.totalItems;\n }\n }\n })[\"catch\"](function (error) {\n window.dispatchEvent(new Event('trp_trigger_hide_loading_table_event'));\n self.dictionary = {};\n console.log(error);\n var reload = confirm(self.stEditorStrings.request_error);\n\n if (reload === false) {\n return;\n } else {\n window.location.reload();\n }\n });\n },\n editString: function editString(data) {\n if (data.detail.action === 'edit') {\n this.selectedString = data.detail.stringIndex;\n }\n },\n cleanURL: function cleanURL(url) {\n //make removeUrlParameter recursive and only call it once with all the parameters that\n //need to stripped ?\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'lang');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-view-as');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-view-as-nonce');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-edit-translation');\n url = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].removeUrlParameter(url, 'trp-string-translation');\n return url;\n },\n hasUnsavedChanges: function hasUnsavedChanges() {\n var unsavedChanges = false;\n var self = this;\n\n if (this.selectedIndexesArray.length > 0) {\n this.selectedIndexesArray.forEach(function (selectedIndex) {\n self.settings['translation-languages'].forEach(function (languageCode) {\n if (self.dictionary[selectedIndex] && self.dictionary[selectedIndex].translationsArray[languageCode] && self.dictionary[selectedIndex].translationsArray[languageCode].translated !== self.dictionary[selectedIndex].translationsArray[languageCode].editedTranslation) {\n unsavedChanges = true;\n }\n });\n });\n }\n\n if (unsavedChanges === false) {\n this.selectedIndexesArray.forEach(function (selectedIndex) {\n if (self.dictionary.hasOwnProperty(selectedIndex) && self.dictionary[selectedIndex].unsavedChanges && self.dictionary[selectedIndex].unsavedChanges === 'yes') {\n self.dictionary[selectedIndex].unsavedChanges = 'no';\n }\n });\n }\n\n this.showChangesUnsavedMessage = unsavedChanges;\n return unsavedChanges;\n },\n iframeLoader: function iframeLoader(status) {\n var loader = document.getElementById('trp-preview-loader');\n if (status == 'show') loader.style.display = 'flex';else if (status == 'hide') loader.style.display = 'none';\n },\n previousString: function previousString() {\n if (this.dictionary.length === 0 || this.hasUnsavedChanges()) return;\n var currentValue = parseInt(this.selectedString),\n newValue = this.selectedString;\n\n if (this.selectedString === null) {\n newValue = 0;\n } else if (0 < currentValue) {\n newValue = currentValue - 1;\n }\n\n this.selectedString = newValue.toString();\n },\n nextString: function nextString() {\n if (this.dictionary.length === 0 || this.hasUnsavedChanges()) return;\n var currentValue = parseInt(this.selectedString),\n newValue = this.selectedString;\n\n if (this.selectedString === null) {\n newValue = 0;\n } else if (this.dictionary.length > currentValue + 1) {\n newValue = currentValue + 1;\n }\n\n this.selectedString = newValue.toString();\n },\n addKeyboardShortcutsListener: function addKeyboardShortcutsListener() {\n document.addEventListener(\"keydown\", function (e) {\n if ((window.navigator.platform.match(\"Mac\") ? e.metaKey : e.ctrlKey) && e.altKey) {\n // CTRL + ALT + right arrow\n if (e.keyCode === 39) {\n e.preventDefault();\n window.dispatchEvent(new Event('trp_trigger_next_string_event'));\n } else {\n // CTRL + ALT + left arrow\n if (e.keyCode === 37) {\n e.preventDefault();\n window.dispatchEvent(new Event('trp_trigger_previous_string_event'));\n }\n }\n }\n }, false);\n window.addEventListener('trp_trigger_next_string_event', this.nextString);\n window.addEventListener('trp_trigger_previous_string_event', this.previousString);\n },\n resizeIframe: function resizeIframe(event, ui) {\n var width = jQuery('#trp-controls').width();\n var previewContainer = jQuery('#trp-preview');\n previewContainer.css('left', width - 348);\n }\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vYXNzZXRzL3NyYy9qcy9zdHJpbmctdHJhbnNsYXRpb24udnVlPzU2YmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0EseUZBREE7QUFFQSwrRkFGQTtBQUdBLHVGQUhBO0FBSUEsdUZBSkE7QUFLQTtBQUxBLEdBREE7QUFRQSxNQVJBLGtCQVFBO0FBQ0E7QUFDQTtBQUNBLDRDQUZBO0FBR0EsbURBSEE7QUFJQSw0RUFKQTtBQUtBLDJDQUxBO0FBTUEsMkRBTkE7QUFPQSwwREFQQTtBQVFBLCtDQVJBO0FBU0EsMkNBVEE7QUFVQSx1REFWQTtBQVdBLDBEQVhBO0FBWUEsdUNBWkE7QUFhQSw2Q0FiQTtBQWNBLCtDQWRBO0FBZ0JBO0FBQ0Esd0VBakJBO0FBa0JBLG9FQWxCQTtBQW9CQSxvQkFwQkE7QUFxQkEsMEJBckJBO0FBc0JBLDhCQXRCQTtBQXVCQSwrQkF2QkE7QUF3QkEsc0JBeEJBO0FBeUJBLHNDQXpCQTtBQTBCQSx3QkExQkE7QUEyQkEsb0NBM0JBO0FBNEJBO0FBNUJBO0FBK0JBLEdBeENBO0FBeUNBLFNBekNBLHFCQXlDQTtBQUNBO0FBRUE7QUFFQTtBQUNBLEdBL0NBO0FBZ0RBLFNBaERBLHFCQWdEQTtBQUNBO0FBRUE7QUFDQSxvQkFKQSxDQU1BOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUhBO0FBSUE7QUFDQTtBQUNBLE9BTkE7QUFPQSxrQkFQQTtBQVFBLG1CQVJBO0FBU0E7QUFUQSxPQVVBLElBVkEsQ0FVQSxRQVZBLEVBVUEsaUJBVkEsRUFUQSxDQXFCQTs7QUFDQTtBQUNBO0FBQ0EsS0FGQTtBQUdBLEdBekVBO0FBMEVBO0FBQ0EsVUFEQSxrQkFDQSxFQURBLEVBQ0EsSUFEQSxFQUNBO0FBQ0E7QUFDQSxLQUhBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUZBLE1BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQVpBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbEJBLEdBMUVBO0FBOEZBO0FBQ0E7QUFDQTtBQUNBO0FBSEEsR0E5RkE7QUFtR0E7QUFDQSxjQURBLHNCQUNBLEtBREEsRUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUEsNEVBQ0EsSUFEQSxDQUNBO0FBQ0E7O0FBQ0E7QUFDQSxtTkFDQSxjQURBLEdBQ0EsRUFEQTtBQUVBLGtOQUNBLGNBREEsR0FDQSxpQ0FEQTs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBSEE7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BN0JBLFdBOEJBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBLFNBRkEsTUFFQTtBQUNBO0FBQ0E7QUFFQSxPQTFDQTtBQTJDQSxLQTVEQTtBQTZEQSxjQTdEQSxzQkE2REEsSUE3REEsRUE2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQWpFQTtBQWtFQSxZQWxFQSxvQkFrRUEsR0FsRUEsRUFrRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0EsS0E1RUE7QUE2RUEscUJBN0VBLCtCQTZFQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQ0EsOERBREEsSUFFQSw4SkFGQSxFQUVBO0FBQ0E7QUFDQTtBQUNBLFdBTkE7QUFPQSxTQVJBO0FBU0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBSkE7QUFLQTs7QUFFQTtBQUNBO0FBQ0EsS0F0R0E7QUF1R0EsZ0JBdkdBLHdCQXVHQSxNQXZHQSxFQXVHQTtBQUNBO0FBRUEsNEJBQ0EsOEJBREEsS0FFQSxzQkFDQTtBQUNBLEtBOUdBO0FBK0dBLGtCQS9HQSw0QkErR0E7QUFDQSxvRUFDQTtBQUVBO0FBQUE7O0FBRUE7QUFDQTtBQUNBLE9BRkEsTUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQTVIQTtBQTZIQSxjQTdIQSx3QkE2SEE7QUFDQSxvRUFDQTtBQUVBO0FBQUE7O0FBRUE7QUFDQTtBQUNBLE9BRkEsTUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQSxLQTNJQTtBQTRJQSxnQ0E1SUEsMENBNElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FIQSxNQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQWRBLEVBY0EsS0FkQTtBQWdCQTtBQUNBO0FBQ0EsS0EvSkE7QUFnS0EsZ0JBaEtBLHdCQWdLQSxLQWhLQSxFQWdLQSxFQWhLQSxFQWdLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBcktBO0FBbkdBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL2Fzc2V0cy9zcmMvanMvc3RyaW5nLXRyYW5zbGF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gICAgPGRpdiBpZD1cInRycC1lZGl0b3JcIiBjbGFzcz1cIndwLWNvcmUtdWlcIj5cblxuICAgICAgICA8ZGl2IGlkPVwidHJwLWNvbnRyb2xzXCI+XG5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJ0cnAtY2xvc2Utc2F2ZVwiPlxuICAgICAgICAgICAgICAgIDxhIGlkPVwidHJwLWNvbnRyb2xzLWNsb3NlXCIgOmhyZWY9XCJjbG9zZVVSTFwiIDp0aXRsZT1cImVkaXRvclN0cmluZ3MuY2xvc2VcIj48L2E+XG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cInRycC1zYXZlLWFuZC1sb2FkZXItc3Bpbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cnAtYWpheC1sb2FkZXJcIiB2LXNob3c9XCJsb2FkaW5nX3N0cmluZ3MgPiAwXCIgaWQ9XCJ0cnAtc3RyaW5nLXNhdmVkLWFqYXgtbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRycC1zcGlubmVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzYXZlLXRyYW5zbGF0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzZWxlY3RlZEluZGV4ZXNBcnJheT1cInNlbGVjdGVkSW5kZXhlc0FycmF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGljdGlvbmFyeT1cImRpY3Rpb25hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzZXR0aW5ncz1cInNldHRpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bm9uY2VzPVwibm9uY2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YWpheF91cmw9XCJhamF4VXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y3VycmVudExhbmd1YWdlPVwiY3VycmVudExhbmd1YWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6b25TY3JlZW5MYW5ndWFnZT1cIm9uU2NyZWVuTGFuZ3VhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjdXJyZW50VVJMPVwiY3VycmVudFVSTFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHRyYW5zbGF0aW9ucy1zYXZlZD1cInNob3dDaGFuZ2VzVW5zYXZlZE1lc3NhZ2UgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmVkaXRvclN0cmluZ3M9XCJlZGl0b3JTdHJpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3RyaW5nVHlwZXM9XCJzdHJpbmdUeXBlc1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9zYXZlLXRyYW5zbGF0aW9ucz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLWNvbnRyb2xzLWNvbnRhaW5lclwiIDpjbGFzcz1cInsndHJwLXNob3ctZWRpdG9ycy1uYXZpZ2F0aW9uJyA6IGVkaXRvcnNOYXZpZ2F0aW9uLnNob3cgfVwiPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRycC1jb250cm9scy1zZWN0aW9uXCIgaWQ9XCJ0cnAtY29udHJvbHMtc2VjdGlvbi1maXJzdFwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnAtY29udHJvbHMtc2VjdGlvbi1jb250ZW50XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0cnAtbmV4dC1wcmV2aW91c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwidHJwLXByZXZpb3VzXCIgY2xhc3M9XCJ0cnAtbmV4dC1wcmV2aW91cy1idXR0b25zIGJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW9uOmNsaWNrPVwicHJldmlvdXNTdHJpbmcoKVwiIDp0aXRsZT1cImVkaXRvclN0cmluZ3MucHJldmlvdXNfdGl0bGVfYXR0clwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4mbGFxdW87PC9zcGFuPiB7eyBlZGl0b3JTdHJpbmdzLnByZXZpb3VzIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJ0cnAtbmV4dFwiIGNsYXNzPVwidHJwLW5leHQtcHJldmlvdXMtYnV0dG9ucyBidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1vbjpjbGljaz1cIm5leHRTdHJpbmcoKVwiIDp0aXRsZT1cImVkaXRvclN0cmluZ3MubmV4dF90aXRsZV9hdHRyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVkaXRvclN0cmluZ3MubmV4dCB9fSA8c3Bhbj4mcmFxdW87PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnAtY29udHJvbHMtc2VjdGlvblwiIHYtc2hvdz1cInNlbGVjdGVkSW5kZXhlc0FycmF5Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhbmd1YWdlLWJveGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNlbGVjdGVkSW5kZXhlc0FycmF5PVwic2VsZWN0ZWRJbmRleGVzQXJyYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkaWN0aW9uYXJ5PVwiZGljdGlvbmFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmN1cnJlbnRMYW5ndWFnZT1cImN1cnJlbnRMYW5ndWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOm9uU2NyZWVuTGFuZ3VhZ2U9XCJvblNjcmVlbkxhbmd1YWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bGFuZ3VhZ2VOYW1lcz1cImxhbmd1YWdlTmFtZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzZXR0aW5ncz1cInNldHRpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c2hvd0NoYW5nZXNVbnNhdmVkTWVzc2FnZT1cInNob3dDaGFuZ2VzVW5zYXZlZE1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBkaXNjYXJkZWQtY2hhbmdlcz1cImhhc1Vuc2F2ZWRDaGFuZ2VzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDplZGl0b3JTdHJpbmdzPVwiZWRpdG9yU3RyaW5nc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmZsYWdzUGF0aD1cImZsYWdzUGF0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOm5vbmNlcz1cIm5vbmNlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmFqYXhfdXJsPVwiYWpheFVybFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9sYW5ndWFnZS1ib3hlcz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxleHRyYS1jb250ZW50IDpsYW5ndWFnZU5hbWVzPVwibGFuZ3VhZ2VOYW1lc1wiIDplZGl0b3JTdHJpbmdzPVwiZWRpdG9yU3RyaW5nc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnBhaWRWZXJzaW9uPVwicGFpZFZlcnNpb25cIj48L2V4dHJhLWNvbnRlbnQ+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLWNvbnRyb2xzLXNlY3Rpb25cIiB2LXNob3c9XCJ0cmFuc2xhdGlvbk5vdExvYWRlZFlldFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidHJwLXRyYW5zbGF0aW9uLW5vdC1yZWFkeS1zZWN0aW9uXCIgY2xhc3M9XCJ0cnAtY29udHJvbHMtc2VjdGlvbi1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCB2LWh0bWw9XCJlZGl0b3JTdHJpbmdzLnRyYW5zbGF0aW9uX25vdF9sb2FkZWRfeWV0XCI+PC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZWRpdG9ycy1uYXZpZ2F0aW9uIDplZGl0b3JzTmF2aWdhdGlvbj1cImVkaXRvcnNOYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNlbGVjdGVkVGFiPVwiJ3N0cmluZ3RyYW5zbGF0aW9uJ1wiPjwvZWRpdG9ycy1uYXZpZ2F0aW9uPlxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgaWQ9XCJ0cnAtcHJldmlld1wiIGNsYXNzPVwidHJwLXN0cmluZy10cmFuc2xhdGlvbi1jb250YWluZXJcIiBAY2xpY2s9XCJoYXNVbnNhdmVkQ2hhbmdlcygpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJwLXN0cmluZy10cmFuc2xhdGlvbi1pbm5lci1jb250YWluZXJcIiA6Y2xhc3M9XCJ7J3RycC1zY3JlZW4tb3ZlcmxheScgOiBzaG93Q2hhbmdlc1Vuc2F2ZWRNZXNzYWdlIH1cIj5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJuYXYtdGFiLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHJvdXRlci1saW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1mb3I9XCIodGFiLCB0YWJfc2x1ZykgaW4gc3RyaW5nVHlwZXNDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtYmluZDprZXk9XCIndHJwLXRhYi1rZXktJyArIHRhYl9zbHVnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6dG89XCIodGFiWydjYXRlZ29yeV9iYXNlZCddICkgID8gJy8nKyB0YWJfc2x1ZyArICcvJzogJy8nKyB0YWJfc2x1ZyArICcvJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmlkPVwiJ3RycC10YWItJyArIHRhYl9zbHVnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi10YWJcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e3RhYlsndGFiX25hbWUnXX19XG4gICAgICAgICAgICAgICAgICAgIDwvcm91dGVyLWxpbms+XG48IS0tICAgICAgICAgICAgICAgICAgICA8cm91dGVyLWxpbmsgdG89XCIvaW1wb3J0LWV4cG9ydFwiIGNsYXNzPVwibmF2LXRhYlwiPi0tPlxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIHt7c3RFZGl0b3JTdHJpbmdzLmltcG9ydGV4cG9ydH19LS0+XG48IS0tICAgICAgICAgICAgICAgICAgICA8L3JvdXRlci1saW5rPi0tPlxuICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgPHJvdXRlci12aWV3XG4gICAgICAgICAgICAgICAgICAgICAgICA6ZGljdGlvbmFyeT1cImRpY3Rpb25hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOnRvdGFsSXRlbXM9XCJ0b3RhbEl0ZW1zXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9yb3V0ZXItdmlldz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gICAgaW1wb3J0ICdzZWxlY3QyL2Rpc3QvanMvc2VsZWN0Mi5taW4uanMnXG4gICAgaW1wb3J0IHV0aWxzICAgICAgICAgICAgIGZyb20gJy4vdXRpbHMnXG4gICAgaW1wb3J0IGF4aW9zICAgICAgICAgICAgIGZyb20gJ2F4aW9zJ1xuICAgIGltcG9ydCBsYW5ndWFnZUJveGVzICAgICBmcm9tICcuL2NvbXBvbmVudHMvbGFuZ3VhZ2UtYm94ZXMudnVlJ1xuICAgIGltcG9ydCBzYXZlVHJhbnNsYXRpb25zICBmcm9tICcuL2NvbXBvbmVudHMvc2F2ZS10cmFuc2xhdGlvbnMudnVlJ1xuICAgIGltcG9ydCBob3ZlckFjdGlvbnMgICAgICBmcm9tICcuL2NvbXBvbmVudHMvaG92ZXItYWN0aW9ucy52dWUnXG4gICAgaW1wb3J0IGV4dHJhQ29udGVudCAgICAgIGZyb20gJy4vY29tcG9uZW50cy9leHRyYS1jb250ZW50LnZ1ZSdcbiAgICBpbXBvcnQgZWRpdG9yc05hdmlnYXRpb24gZnJvbSAnLi9jb21wb25lbnRzL2VkaXRvcnMtbmF2aWdhdGlvbi52dWUnXG4gICAgaW1wb3J0IGhlICAgICAgICAgICAgICAgIGZyb20gJ2hlJ1xuXG4gICAgZXhwb3J0IGRlZmF1bHQge1xuICAgICAgICBjb21wb25lbnRzIDoge1xuICAgICAgICAgICAgbGFuZ3VhZ2VCb3hlcyxcbiAgICAgICAgICAgIHNhdmVUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgICBob3ZlckFjdGlvbnMsXG4gICAgICAgICAgICBleHRyYUNvbnRlbnQsXG4gICAgICAgICAgICBlZGl0b3JzTmF2aWdhdGlvblxuICAgICAgICB9LFxuICAgICAgICBkYXRhKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAvL3RycF9lZGl0b3JfZGF0YVxuICAgICAgICAgICAgICAgIHNldHRpbmdzICAgICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEudHJwX3NldHRpbmdzLFxuICAgICAgICAgICAgICAgIGxhbmd1YWdlTmFtZXMgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEubGFuZ3VhZ2VfbmFtZXMsXG4gICAgICAgICAgICAgICAgb3JkZXJlZFNlY29uZGFyeUxhbmd1YWdlcyA6IHRycF9lZGl0b3JfZGF0YS5vcmRlcmVkX3NlY29uZGFyeV9sYW5ndWFnZXMsXG4gICAgICAgICAgICAgICAgbm9uY2VzICAgICAgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5lZGl0b3Jfbm9uY2VzLFxuICAgICAgICAgICAgICAgIGVkaXRvcnNOYXZpZ2F0aW9uICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuZWRpdG9yc19uYXZpZ2F0aW9uLFxuICAgICAgICAgICAgICAgIGVkaXRvclN0cmluZ3MgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEudHJwX2xvY2FsaXplZF9zdHJpbmdzLFxuICAgICAgICAgICAgICAgIHN0cmluZ1R5cGVzICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuc3RyaW5nX3R5cGVzLFxuICAgICAgICAgICAgICAgIGZsYWdzUGF0aCAgICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEuZmxhZ3NfcGF0aCxcbiAgICAgICAgICAgICAgICBjdXJyZW50TGFuZ3VhZ2UgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLmN1cnJlbnRfbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgb25TY3JlZW5MYW5ndWFnZSAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5vbl9zY3JlZW5fbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgYWpheFVybCAgICAgICAgICAgICAgICAgICA6IHRycF9lZGl0b3JfZGF0YS5hamF4X3VybCxcbiAgICAgICAgICAgICAgICBjdXJyZW50VVJMICAgICAgICAgICAgICAgIDogdHJwX2VkaXRvcl9kYXRhLnVybF90b19sb2FkLFxuICAgICAgICAgICAgICAgIHBhaWRWZXJzaW9uICAgICAgICAgICAgICAgOiB0cnBfZWRpdG9yX2RhdGEucGFpZF92ZXJzaW9uLFxuXG4gICAgICAgICAgICAgICAgLy90cnBfc3RyaW5nX3RyYW5zbGF0aW9uX2RhdGFcbiAgICAgICAgICAgICAgICBzdHJpbmdUeXBlc0NvbmZpZyA6IHRycF9zdHJpbmdfdHJhbnNsYXRpb25fZGF0YS5zdHJpbmdfdHlwZXNfY29uZmlnLFxuICAgICAgICAgICAgICAgIHN0RWRpdG9yU3RyaW5ncyAgIDogdHJwX3N0cmluZ190cmFuc2xhdGlvbl9kYXRhLnN0X2VkaXRvcl9zdHJpbmdzLFxuXG4gICAgICAgICAgICAgICAgZGljdGlvbmFyeSAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkU3RyaW5nICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSW5kZXhlc0FycmF5ICAgICAgOiBbXSxcbiAgICAgICAgICAgICAgICBkZXRlY3RlZFNlbGVjdG9yQW5kSWQgICAgIDogW10sXG4gICAgICAgICAgICAgICAgc3RyaW5nR3JvdXBzICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICAgIHNob3dDaGFuZ2VzVW5zYXZlZE1lc3NhZ2UgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsb2FkaW5nX3N0cmluZ3MgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk5vdExvYWRlZFlldCAgIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdG90YWxJdGVtcyAgICAgICAgICAgICAgICA6IG51bGxcblxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVkKCkge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nc1sgJ2RlZmF1bHQtbGFuZ3VhZ2UtbmFtZScgXSA9IHRoaXMubGFuZ3VhZ2VOYW1lc1sgdGhpcy5zZXR0aW5nc1sgJ2RlZmF1bHQtbGFuZ3VhZ2UnIF0gXVxuXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSA9IHRoaXMuc2V0dGluZ3NbICdkZWZhdWx0LWxhbmd1YWdlJyBdXG5cbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICd0cnBfdHJpZ2dlcl9wZXJmb3JtX2FjdGlvbl9ldmVudCcsIHRoaXMuZWRpdFN0cmluZyApXG4gICAgICAgIH0sXG4gICAgICAgIG1vdW50ZWQoKSB7XG4gICAgICAgICAgICB0aGlzLmdldFN0cmluZ3MoIHRoaXMuJHJvdXRlLnF1ZXJ5IClcblxuICAgICAgICAgICAgdGhpcy5hZGRLZXlib2FyZFNob3J0Y3V0c0xpc3RlbmVyKClcbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xuXG4gICAgICAgICAgICAvLyByZXNpemUgc2lkZWJhciBhbmQgY29uc2VxdWVudGx5IHRoZSBpZnJhbWVcbiAgICAgICAgICAgIGxldCBwcmV2aWV3Q29udGFpbmVyID0galF1ZXJ5KCAnI3RycC1wcmV2aWV3JyApXG4gICAgICAgICAgICBsZXQgdG90YWxfd2lkdGggICAgICA9IGpRdWVyeSggd2luZG93ICkud2lkdGgoKVxuICAgICAgICAgICAgalF1ZXJ5KCAnI3RycC1jb250cm9scycgKS5yZXNpemFibGUoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aWV3Q29udGFpbmVyLnRvZ2dsZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3AgICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlld0NvbnRhaW5lci50b2dnbGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVzICA6ICdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGggOiAzMjcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoIDogdG90YWxfd2lkdGggLSAyMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKS5iaW5kKCBcInJlc2l6ZVwiLCB0aGlzLnJlc2l6ZUlmcmFtZSApXG5cbiAgICAgICAgICAgIC8vIHJlc2l6ZSBpZnJhbWUgd2hlbiByZXNpemluZyB3aW5kb3dcbiAgICAgICAgICAgIGpRdWVyeSggd2luZG93ICkucmVzaXplKCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yZXNpemVJZnJhbWUoKVxuICAgICAgICAgICAgfSApXG4gICAgICAgIH0sXG4gICAgICAgIHdhdGNoICAgICAgOiB7XG4gICAgICAgICAgICAkcm91dGUoIHRvLCBmcm9tICkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RyaW5ncyggdG8ucXVlcnkgKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbGVjdGVkU3RyaW5nIDogZnVuY3Rpb24gKCBuZXdTdHJpbmcsIG9sZFN0cmluZyApIHtcbiAgICAgICAgICAgICAgICBpZiAoICF0aGlzLmhhc1Vuc2F2ZWRDaGFuZ2VzKCkgKXtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLnNlbGVjdGVkU3RyaW5nID09PSBudWxsICl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhlc0FycmF5ID0gWyBdXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleGVzQXJyYXkgPSBbIHRoaXMuc2VsZWN0ZWRTdHJpbmcgXVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRpY3Rpb25hcnkgOiBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIGlmICggIXRoaXMuaGFzVW5zYXZlZENoYW5nZXMoKSApe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RyaW5nID0gbnVsbFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhlc0FycmF5ID0gWyBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wdXRlZCAgIDoge1xuICAgICAgICAgICAgY2xvc2VVUkwgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5VUkwoIHRoaXMuY3VycmVudFVSTCApXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1ldGhvZHMgICAgOiB7XG4gICAgICAgICAgICBnZXRTdHJpbmdzKCBxdWVyeSApIHtcbiAgICAgICAgICAgICAgICBpZiAoICF0aGlzLiRyb3V0ZS5tYXRjaGVkWyAwIF0ucHJvcHMuZGVmYXVsdC50cmFuc2xhdGlvblRhYiApe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgc2VsZiAgICAgICAgICAgID0gdGhpc1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50VGFiICAgICAgPSB0aGlzLiRyb3V0ZS5tYXRjaGVkWyAwIF0ucHJvcHMuZGVmYXVsdC5jdXJyZW50VGFiXG4gICAgICAgICAgICAgICAgbGV0IHRyYW5zbGF0aW9uVHlwZSA9IHRoaXMuJHJvdXRlLm1hdGNoZWRbIDAgXS5wcm9wcy5kZWZhdWx0LnRyYW5zbGF0aW9uVHlwZVxuXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCAnYWN0aW9uJywgJ3RycF9zdHJpbmdfdHJhbnNsYXRpb25fZ2V0X3N0cmluZ3NfJyArIHRyYW5zbGF0aW9uVHlwZSApXG4gICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoICdxdWVyeScsIEpTT04uc3RyaW5naWZ5KCBxdWVyeSApIClcbiAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCggJ3NlY3VyaXR5JywgY3VycmVudFRhYlsgJ25vbmNlcycgXVsgJ2dldF9zdHJpbmdzJyBdIClcblxuICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICd0cnBfdHJpZ2dlcl9zaG93X2xvYWRpbmdfdGFibGVfZXZlbnQnICkgKVxuXG4gICAgICAgICAgICAgICAgYXhpb3MucG9zdCggdGhpcy5hamF4VXJsLCBkYXRhIClcbiAgICAgICAgICAgICAgICAgICAgIC50aGVuKCBmdW5jdGlvbiAoIHJlc3BvbnNlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KCBuZXcgRXZlbnQoICd0cnBfdHJpZ2dlcl9oaWRlX2xvYWRpbmdfdGFibGVfZXZlbnQnICkgKVxuICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2UgIT0gbnVsbCApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uU2NyZWVuTGFuZ3VhZ2UgPSAocXVlcnkubGFuZ3VhZ2UgJiYgdXRpbHMuYXJyYXlDb250YWluc0l0ZW0oIHNlbGYuc2V0dGluZ3NbICd0cmFuc2xhdGlvbi1sYW5ndWFnZXMnIF0sIHF1ZXJ5Lmxhbmd1YWdlICkgJiYgcXVlcnkubGFuZ3VhZ2UgIT09ICd0cnAtZGVmYXVsdCcpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Lmxhbmd1YWdlIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TGFuZ3VhZ2UgID0gKHF1ZXJ5Lmxhbmd1YWdlICYmIHV0aWxzLmFycmF5Q29udGFpbnNJdGVtKCBzZWxmLnNldHRpbmdzWyAndHJhbnNsYXRpb24tbGFuZ3VhZ2VzJyBdLCBxdWVyeS5sYW5ndWFnZSApICYmIHF1ZXJ5Lmxhbmd1YWdlICE9PSAndHJwLWRlZmF1bHQnKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5sYW5ndWFnZSA6IHNlbGYuc2V0dGluZ3NbICdkZWZhdWx0LWxhbmd1YWdlJyBdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXNwb25zZS5kYXRhLmRpY3Rpb25hcnkgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdEaWN0aW9uYXJ5ID0gcmVzcG9uc2UuZGF0YS5kaWN0aW9uYXJ5XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2VsZi5oYXNVbnNhdmVkQ2hhbmdlcygpICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29weSB0aGUgdW5zYXZlZCBzdHJpbmcgZnJvbSB0aGUgY3VycmVudCBkaWN0aW9uYXJ5IHRvIHRoZSBuZXcgZGljdGlvbmFyeSB0byBhbGxvdyB1c2VyIHRvIGRpc2NhcmQgb3Igc2F2ZSBjaGFuZ2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1NlbGVjdGVkSW5kZXhlc0FycmF5ID0gW11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkSW5kZXhlc0FycmF5LmZvckVhY2goIGZ1bmN0aW9uKCBpdGVtICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpY3Rpb25hcnlbIGl0ZW0gXS51bnNhdmVkQ2hhbmdlcyA9ICd5ZXMnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkSW5kZXhlc0FycmF5LnB1c2goIG5ld0RpY3Rpb25hcnkucHVzaCggc2VsZi5kaWN0aW9uYXJ5W2l0ZW1dICkgLSAxIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRJbmRleGVzQXJyYXkgPSBuZXdTZWxlY3RlZEluZGV4ZXNBcnJheVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRTdHJpbmcgPSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGljdGlvbmFyeSA9IG5ld0RpY3Rpb25hcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlLmRhdGEudG90YWxJdGVtcyApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50b3RhbEl0ZW1zID0gcmVzcG9uc2UuZGF0YS50b3RhbEl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICB9IClcbiAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCggZnVuY3Rpb24gKCBlcnJvciApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAndHJwX3RyaWdnZXJfaGlkZV9sb2FkaW5nX3RhYmxlX2V2ZW50JyApIClcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpY3Rpb25hcnkgPSB7fVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIGVycm9yIClcbiAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVsb2FkID0gY29uZmlybSggc2VsZi5zdEVkaXRvclN0cmluZ3MucmVxdWVzdF9lcnJvciApXG4gICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHJlbG9hZCA9PT0gZmFsc2UgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgIH0gKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVkaXRTdHJpbmcoIGRhdGEgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBkYXRhLmRldGFpbC5hY3Rpb24gPT09ICdlZGl0JyApe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RyaW5nID0gZGF0YS5kZXRhaWwuc3RyaW5nSW5kZXhcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xlYW5VUkwoIHVybCApIHtcbiAgICAgICAgICAgICAgICAvL21ha2UgcmVtb3ZlVXJsUGFyYW1ldGVyIHJlY3Vyc2l2ZSBhbmQgb25seSBjYWxsIGl0IG9uY2Ugd2l0aCBhbGwgdGhlIHBhcmFtZXRlcnMgdGhhdFxuICAgICAgICAgICAgICAgIC8vbmVlZCB0byBzdHJpcHBlZCA/XG4gICAgICAgICAgICAgICAgdXJsID0gdXRpbHMucmVtb3ZlVXJsUGFyYW1ldGVyKCB1cmwsICdsYW5nJyApXG4gICAgICAgICAgICAgICAgdXJsID0gdXRpbHMucmVtb3ZlVXJsUGFyYW1ldGVyKCB1cmwsICd0cnAtdmlldy1hcycgKVxuICAgICAgICAgICAgICAgIHVybCA9IHV0aWxzLnJlbW92ZVVybFBhcmFtZXRlciggdXJsLCAndHJwLXZpZXctYXMtbm9uY2UnIClcbiAgICAgICAgICAgICAgICB1cmwgPSB1dGlscy5yZW1vdmVVcmxQYXJhbWV0ZXIoIHVybCwgJ3RycC1lZGl0LXRyYW5zbGF0aW9uJyApXG4gICAgICAgICAgICAgICAgdXJsID0gdXRpbHMucmVtb3ZlVXJsUGFyYW1ldGVyKCB1cmwsICd0cnAtc3RyaW5nLXRyYW5zbGF0aW9uJyApXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzVW5zYXZlZENoYW5nZXMoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHVuc2F2ZWRDaGFuZ2VzID0gZmFsc2VcbiAgICAgICAgICAgICAgICBsZXQgc2VsZiAgICAgICAgICAgPSB0aGlzXG4gICAgICAgICAgICAgICAgaWYgKCB0aGlzLnNlbGVjdGVkSW5kZXhlc0FycmF5Lmxlbmd0aCA+IDAgKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ZXNBcnJheS5mb3JFYWNoKCBmdW5jdGlvbiAoIHNlbGVjdGVkSW5kZXggKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldHRpbmdzWyAndHJhbnNsYXRpb24tbGFuZ3VhZ2VzJyBdLmZvckVhY2goIGZ1bmN0aW9uICggbGFuZ3VhZ2VDb2RlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2VsZi5kaWN0aW9uYXJ5WyBzZWxlY3RlZEluZGV4IF0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kaWN0aW9uYXJ5WyBzZWxlY3RlZEluZGV4IF0udHJhbnNsYXRpb25zQXJyYXlbIGxhbmd1YWdlQ29kZSBdICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLmRpY3Rpb25hcnlbIHNlbGVjdGVkSW5kZXggXS50cmFuc2xhdGlvbnNBcnJheVsgbGFuZ3VhZ2VDb2RlIF0udHJhbnNsYXRlZCAhPT0gc2VsZi5kaWN0aW9uYXJ5WyBzZWxlY3RlZEluZGV4IF0udHJhbnNsYXRpb25zQXJyYXlbIGxhbmd1YWdlQ29kZSBdLmVkaXRlZFRyYW5zbGF0aW9uKSApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNhdmVkQ2hhbmdlcyA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IClcbiAgICAgICAgICAgICAgICAgICAgfSApXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCB1bnNhdmVkQ2hhbmdlcyA9PT0gZmFsc2UgKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ZXNBcnJheS5mb3JFYWNoKCBmdW5jdGlvbiAoIHNlbGVjdGVkSW5kZXggKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNlbGYuZGljdGlvbmFyeS5oYXNPd25Qcm9wZXJ0eShzZWxlY3RlZEluZGV4KSAmJiBzZWxmLmRpY3Rpb25hcnlbIHNlbGVjdGVkSW5kZXggXS51bnNhdmVkQ2hhbmdlcyAmJiBzZWxmLmRpY3Rpb25hcnlbIHNlbGVjdGVkSW5kZXggXS51bnNhdmVkQ2hhbmdlcyA9PT0gJ3llcycpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGljdGlvbmFyeVsgc2VsZWN0ZWRJbmRleCBdLnVuc2F2ZWRDaGFuZ2VzID0gJ25vJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NoYW5nZXNVbnNhdmVkTWVzc2FnZSA9IHVuc2F2ZWRDaGFuZ2VzXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuc2F2ZWRDaGFuZ2VzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaWZyYW1lTG9hZGVyKCBzdGF0dXMgKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxvYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAndHJwLXByZXZpZXctbG9hZGVyJyApXG5cbiAgICAgICAgICAgICAgICBpZiAoIHN0YXR1cyA9PSAnc2hvdycgKVxuICAgICAgICAgICAgICAgICAgICBsb2FkZXIuc3R5bGUuZGlzcGxheSA9ICdmbGV4J1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCBzdGF0dXMgPT0gJ2hpZGUnIClcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmV2aW91c1N0cmluZygpIHtcbiAgICAgICAgICAgICAgICBpZiAoIHRoaXMuZGljdGlvbmFyeS5sZW5ndGggPT09IDAgfHwgdGhpcy5oYXNVbnNhdmVkQ2hhbmdlcygpIClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudFZhbHVlID0gcGFyc2VJbnQoIHRoaXMuc2VsZWN0ZWRTdHJpbmcgKSwgbmV3VmFsdWUgPSB0aGlzLnNlbGVjdGVkU3RyaW5nXG5cbiAgICAgICAgICAgICAgICBpZiggdGhpcy5zZWxlY3RlZFN0cmluZyA9PT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gMFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmICggMCA8IGN1cnJlbnRWYWx1ZSApe1xuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IGN1cnJlbnRWYWx1ZSAtIDFcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RyaW5nID0gbmV3VmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRTdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCB0aGlzLmRpY3Rpb25hcnkubGVuZ3RoID09PSAwIHx8IHRoaXMuaGFzVW5zYXZlZENoYW5nZXMoKSApXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRWYWx1ZSA9IHBhcnNlSW50KCB0aGlzLnNlbGVjdGVkU3RyaW5nICksIG5ld1ZhbHVlID0gdGhpcy5zZWxlY3RlZFN0cmluZ1xuXG4gICAgICAgICAgICAgICAgaWYoIHRoaXMuc2VsZWN0ZWRTdHJpbmcgPT09IG51bGwpe1xuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IDBcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZiAoIHRoaXMuZGljdGlvbmFyeS5sZW5ndGggPiAoY3VycmVudFZhbHVlICsgMSkgKXtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBjdXJyZW50VmFsdWUgKyAxXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN0cmluZyA9IG5ld1ZhbHVlLnRvU3RyaW5nKClcblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFkZEtleWJvYXJkU2hvcnRjdXRzTGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggXCJrZXlkb3duXCIsIGZ1bmN0aW9uICggZSApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCAod2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybS5tYXRjaCggXCJNYWNcIiApID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSAmJiBlLmFsdEtleSApe1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ1RSTCArIEFMVCArIHJpZ2h0IGFycm93XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGUua2V5Q29kZSA9PT0gMzkgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudCggbmV3IEV2ZW50KCAndHJwX3RyaWdnZXJfbmV4dF9zdHJpbmdfZXZlbnQnICkgKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDVFJMICsgQUxUICsgbGVmdCBhcnJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZS5rZXlDb2RlID09PSAzNyApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ3RycF90cmlnZ2VyX3ByZXZpb3VzX3N0cmluZ19ldmVudCcgKSApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgZmFsc2UgKVxuXG4gICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICd0cnBfdHJpZ2dlcl9uZXh0X3N0cmluZ19ldmVudCcsIHRoaXMubmV4dFN0cmluZyApXG4gICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICd0cnBfdHJpZ2dlcl9wcmV2aW91c19zdHJpbmdfZXZlbnQnLCB0aGlzLnByZXZpb3VzU3RyaW5nIClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNpemVJZnJhbWUoIGV2ZW50LCB1aSApIHtcbiAgICAgICAgICAgICAgICBsZXQgd2lkdGggICAgICAgPSBqUXVlcnkoICcjdHJwLWNvbnRyb2xzJyApLndpZHRoKClcblxuICAgICAgICAgICAgICAgIGxldCBwcmV2aWV3Q29udGFpbmVyID0galF1ZXJ5KCAnI3RycC1wcmV2aWV3JyApXG4gICAgICAgICAgICAgICAgcHJldmlld0NvbnRhaW5lci5jc3MoICdsZWZ0JywgKHdpZHRoIC0gMzQ4KSApXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG48L3NjcmlwdD5cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./assets/src/js/string-translation.vue?vue&type=script&lang=js&\n");
1091
 
1092
  /***/ }),
1093
 
1176
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1177
 
1178
  "use strict";
1179
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.editorsNavigation.show\n ? _c(\"div\", { attrs: { id: \"trp-editors-navigation-tabs\" } }, [\n _c(\n \"table\",\n { attrs: { id: \"trp-editors-tab-table\" } },\n _vm._l(_vm.editorsNavigation.tabs, function(navigationTab) {\n return _c(\n \"td\",\n {\n staticClass: \"trp-editors-tab\",\n class: {\n \"trp-selected-tab\": navigationTab.handle === _vm.selectedTab\n }\n },\n [\n _c(\"a\", { attrs: { href: navigationTab.path } }, [\n _vm._v(_vm._s(navigationTab.label))\n ]),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass: \"trp-tooltip-toggle\",\n staticStyle: { visibility: \"hidden\" },\n attrs: {\n \"data-tooltip\": navigationTab.tooltip,\n tabindex: \"0\"\n }\n },\n [\n _c(\n \"svg\",\n {\n attrs: {\n viewBox: \"0 0 27 27\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }\n },\n [\n _c(\n \"g\",\n {\n attrs: { fill: \"#a8a8a8\", \"fill-rule\": \"evenodd\" }\n },\n [\n _c(\"path\", {\n attrs: {\n d:\n \"M13.5 27C20.956 27 27 20.956 27 13.5S20.956 0 13.5 0 0 6.044 0 13.5 6.044 27 13.5 27zm0-2C7.15 25 2 19.85 2 13.5S7.15 2 13.5 2 25 7.15 25 13.5 19.85 25 13.5 25z\"\n }\n }),\n _c(\"path\", {\n attrs: {\n d:\n \"M12.05 7.64c0-.228.04-.423.12-.585.077-.163.185-.295.32-.397.138-.102.298-.177.48-.227.184-.048.383-.073.598-.073.203 0 .398.025.584.074.186.05.35.126.488.228.14.102.252.234.336.397.084.162.127.357.127.584 0 .22-.043.412-.127.574-.084.163-.196.297-.336.4-.14.106-.302.185-.488.237-.186.053-.38.08-.584.08-.215 0-.414-.027-.597-.08-.182-.05-.342-.13-.48-.235-.135-.104-.243-.238-.32-.4-.08-.163-.12-.355-.12-.576zm-1.02 11.517c.134 0 .275-.013.424-.04.148-.025.284-.08.41-.16.124-.082.23-.198.313-.35.085-.15.127-.354.127-.61v-5.423c0-.238-.042-.43-.127-.57-.084-.144-.19-.254-.318-.332-.13-.08-.267-.13-.415-.153-.148-.024-.286-.036-.414-.036h-.21v-.95h4.195v7.463c0 .256.043.46.127.61.084.152.19.268.314.35.125.08.263.135.414.16.15.027.29.04.418.04h.21v.95H10.82v-.95h.21z\"\n }\n })\n ]\n )\n ]\n )\n ]\n )\n ]\n )\n }),\n 0\n )\n ])\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2pzL2NvbXBvbmVudHMvZWRpdG9ycy1uYXZpZ2F0aW9uLnZ1ZT9jZDA3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUyxvQ0FBb0MsRUFBRTtBQUNoRTtBQUNBO0FBQ0EsV0FBVyxTQUFTLDhCQUE4QixFQUFFO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSx5QkFBeUIsU0FBUywyQkFBMkIsRUFBRTtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyx1QkFBdUI7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQywyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9hc3NldHMvc3JjL2pzL2NvbXBvbmVudHMvZWRpdG9ycy1uYXZpZ2F0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNGY1ZWUyNyYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5lZGl0b3JzTmF2aWdhdGlvbi5zaG93XG4gICAgPyBfYyhcImRpdlwiLCB7IGF0dHJzOiB7IGlkOiBcInRycC1lZGl0b3JzLW5hdmlnYXRpb24tdGFic1wiIH0gfSwgW1xuICAgICAgICBfYyhcbiAgICAgICAgICBcInRhYmxlXCIsXG4gICAgICAgICAgeyBhdHRyczogeyBpZDogXCJ0cnAtZWRpdG9ycy10YWItdGFibGVcIiB9IH0sXG4gICAgICAgICAgX3ZtLl9sKF92bS5lZGl0b3JzTmF2aWdhdGlvbi50YWJzLCBmdW5jdGlvbihuYXZpZ2F0aW9uVGFiKSB7XG4gICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInRycC1lZGl0b3JzLXRhYlwiLFxuICAgICAgICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICAgICAgICBcInRycC1zZWxlY3RlZC10YWJcIjogbmF2aWdhdGlvblRhYi5oYW5kbGUgPT09IF92bS5zZWxlY3RlZFRhYlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwiYVwiLCB7IGF0dHJzOiB7IGhyZWY6IG5hdmlnYXRpb25UYWIucGF0aCB9IH0sIFtcbiAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MobmF2aWdhdGlvblRhYi5sYWJlbCkpXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJ0cnAtdG9vbHRpcC10b2dnbGVcIixcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiB9LFxuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS10b29sdGlwXCI6IG5hdmlnYXRpb25UYWIudG9vbHRpcCxcbiAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleDogXCIwXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNyAyN1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBmaWxsOiBcIiNhOGE4YThcIiwgXCJmaWxsLXJ1bGVcIjogXCJldmVub2RkXCIgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJNMTMuNSAyN0MyMC45NTYgMjcgMjcgMjAuOTU2IDI3IDEzLjVTMjAuOTU2IDAgMTMuNSAwIDAgNi4wNDQgMCAxMy41IDYuMDQ0IDI3IDEzLjUgMjd6bTAtMkM3LjE1IDI1IDIgMTkuODUgMiAxMy41UzcuMTUgMiAxMy41IDIgMjUgNy4xNSAyNSAxMy41IDE5Ljg1IDI1IDEzLjUgMjV6XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIk0xMi4wNSA3LjY0YzAtLjIyOC4wNC0uNDIzLjEyLS41ODUuMDc3LS4xNjMuMTg1LS4yOTUuMzItLjM5Ny4xMzgtLjEwMi4yOTgtLjE3Ny40OC0uMjI3LjE4NC0uMDQ4LjM4My0uMDczLjU5OC0uMDczLjIwMyAwIC4zOTguMDI1LjU4NC4wNzQuMTg2LjA1LjM1LjEyNi40ODguMjI4LjE0LjEwMi4yNTIuMjM0LjMzNi4zOTcuMDg0LjE2Mi4xMjcuMzU3LjEyNy41ODQgMCAuMjItLjA0My40MTItLjEyNy41NzQtLjA4NC4xNjMtLjE5Ni4yOTctLjMzNi40LS4xNC4xMDYtLjMwMi4xODUtLjQ4OC4yMzctLjE4Ni4wNTMtLjM4LjA4LS41ODQuMDgtLjIxNSAwLS40MTQtLjAyNy0uNTk3LS4wOC0uMTgyLS4wNS0uMzQyLS4xMy0uNDgtLjIzNS0uMTM1LS4xMDQtLjI0My0uMjM4LS4zMi0uNC0uMDgtLjE2My0uMTItLjM1NS0uMTItLjU3NnptLTEuMDIgMTEuNTE3Yy4xMzQgMCAuMjc1LS4wMTMuNDI0LS4wNC4xNDgtLjAyNS4yODQtLjA4LjQxLS4xNi4xMjQtLjA4Mi4yMy0uMTk4LjMxMy0uMzUuMDg1LS4xNS4xMjctLjM1NC4xMjctLjYxdi01LjQyM2MwLS4yMzgtLjA0Mi0uNDMtLjEyNy0uNTctLjA4NC0uMTQ0LS4xOS0uMjU0LS4zMTgtLjMzMi0uMTMtLjA4LS4yNjctLjEzLS40MTUtLjE1My0uMTQ4LS4wMjQtLjI4Ni0uMDM2LS40MTQtLjAzNmgtLjIxdi0uOTVoNC4xOTV2Ny40NjNjMCAuMjU2LjA0My40Ni4xMjcuNjEuMDg0LjE1Mi4xOS4yNjguMzE0LjM1LjEyNS4wOC4yNjMuMTM1LjQxNC4xNi4xNS4wMjcuMjkuMDQuNDE4LjA0aC4yMXYuOTVIMTAuODJ2LS45NWguMjF6XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSksXG4gICAgICAgICAgMFxuICAgICAgICApXG4gICAgICBdKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./assets/src/js/components/editors-navigation.vue?vue&type=template&id=04f5ee27&\n");
1180
 
1181
  /***/ }),
1182
 
class-translate-press.php CHANGED
@@ -56,7 +56,7 @@ class TRP_Translate_Press{
56
  define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
57
  define( 'TRP_PLUGIN_BASE', plugin_basename( __DIR__ . '/index.php' ) );
58
  define( 'TRP_PLUGIN_SLUG', 'translatepress-multilingual' );
59
- define( 'TRP_PLUGIN_VERSION', '1.7.3' );
60
 
61
  wp_cache_add_non_persistent_groups(array('trp'));
62
 
56
  define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
57
  define( 'TRP_PLUGIN_BASE', plugin_basename( __DIR__ . '/index.php' ) );
58
  define( 'TRP_PLUGIN_SLUG', 'translatepress-multilingual' );
59
+ define( 'TRP_PLUGIN_VERSION', '1.7.4' );
60
 
61
  wp_cache_add_non_persistent_groups(array('trp'));
62
 
includes/compatibility-functions.php CHANGED
@@ -561,7 +561,11 @@ function trp_skip_elementor_popup_action_from_url_converter($value, $url){
561
  * Strip gettext wrapping from get_the_date function parameter $d
562
  */
563
  add_filter('get_the_date','trp_strip_gettext_from_get_the_date', 1, 3);
564
- function trp_strip_gettext_from_get_the_date($the_date, $d, $post){
 
 
 
 
565
  $d = TRP_Translation_Manager::strip_gettext_tags( $d );
566
  $post = get_post( $post );
567
 
@@ -599,4 +603,79 @@ function trp_remove_lang_param_from_query($args){
599
  }
600
 
601
  return $args;
602
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
561
  * Strip gettext wrapping from get_the_date function parameter $d
562
  */
563
  add_filter('get_the_date','trp_strip_gettext_from_get_the_date', 1, 3);
564
+ function trp_strip_gettext_from_get_the_date($the_date, $d = NULL, $post = NULL){
565
+ if ( $d === NULL || $post === NULL ){
566
+ return $the_date;
567
+ }
568
+
569
  $d = TRP_Translation_Manager::strip_gettext_tags( $d );
570
  $post = get_post( $post );
571
 
603
  }
604
 
605
  return $args;
606
+ }
607
+
608
+
609
+ /**
610
+ * Set user prefered language to the language he was present on new user creation.
611
+ * Only set it if an existing locale isn't set already, in case the registration comes from a form that sets the locale manually.
612
+ *
613
+ */
614
+ add_action( 'user_register', 'trp_add_user_prefered_language', 10 );
615
+ function trp_add_user_prefered_language($user_id) {
616
+ global $TRP_LANGUAGE;
617
+ if ( ! empty( $TRP_LANGUAGE ) ) {
618
+ $user_locale = get_user_meta( $user_id, 'locale', true );
619
+ if ( empty( $user_locale ) ) {
620
+ update_user_meta( $user_id, 'locale', $TRP_LANGUAGE );
621
+ }
622
+ }
623
+ }
624
+
625
+ /*
626
+ * Dflip Compatibility
627
+ * With Secondary Language First, it deferes jquery and scripts don't load on the Elementor Editor.
628
+ * Not sure exactly what's causing. I assume it's because Elementor loads with Ajax certain elements and that comes back broken somehow.
629
+ */
630
+ add_action('wp_enqueue_scripts', 'trp_remove_dflip_defer_script', 9999);
631
+ function trp_remove_dflip_defer_script(){
632
+ if(class_exists('DFlip')){
633
+ $dflip_instance = DFlip::get_instance();
634
+ remove_filter( 'script_loader_tag', array( $dflip_instance, 'add_defer_attribute' ), 10, 2 );
635
+ }
636
+ }
637
+
638
+ /**
639
+ * Ignore WooCommerce display_name gettext
640
+ * _x( '%1$s %2$s', 'display name', 'woocommerce' ) || wordpress\wp-content\plugins\woocommerce\includes\class-wc-customer.php
641
+ * _x( '%1$s %2$s', 'Display name based on first name and last name') || wordpress\wp-includes\user.php
642
+ * This will insert trpstr strings in the database. So just ignore it.
643
+ *
644
+ */
645
+ add_filter('trp_skip_gettext_processing', 'trp_exclude_woo_display_name_gettext', 2000, 4 );
646
+ function trp_exclude_woo_display_name_gettext ( $return, $translation, $text, $domain ){
647
+ if($text == '%1$s %2$s' && $domain == 'woocommerce'){
648
+ return true;
649
+ }
650
+
651
+ if($text == '%1$s %2$s' && $domain == 'default'){
652
+ return true;
653
+ }
654
+
655
+ return $return;
656
+ }
657
+
658
+ /** Compatibility with superfly menu plugin.
659
+ *
660
+ * Moving their script later so that dynamic translation detects their strings.
661
+ */
662
+ add_action('wp_head','trp_superfly_change_menu_loading_hook', 5);
663
+ function trp_superfly_change_menu_loading_hook(){
664
+ if ( remove_action ('wp_head', 'sf_dynamic') ){
665
+ add_action ('wp_print_footer_scripts', 'sf_dynamic', 20);
666
+ }
667
+ }
668
+
669
+ /**
670
+ * Compatibility with Yoast SEO Canonical URL
671
+ * Yoast places the canonical wrongly and it's not processed correctly.
672
+ */
673
+ add_filter( 'wpseo_canonical', 'trp_wpseo_canonical_compat', 99999, 2);
674
+ function trp_wpseo_canonical_compat( $canonical, $presentation_class ){
675
+ global $TRP_LANGUAGE;
676
+ $trp = TRP_Translate_Press::get_trp_instance();
677
+ $url_converter = $trp->get_component( 'url_converter' );
678
+ $canonical = $url_converter->get_url_for_language($TRP_LANGUAGE, $canonical, '');
679
+
680
+ return $canonical;
681
+ };
index.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: TranslatePress - Multilingual
4
  Plugin URI: https://translatepress.com/
5
  Description: Experience a better way of translating your WordPress site using a visual front-end translation editor, with full support for WooCommerce and site builders.
6
- Version: 1.7.3
7
  Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
8
  Author URI: https://cozmoslabs.com/
9
  Text Domain: translatepress-multilingual
3
  Plugin Name: TranslatePress - Multilingual
4
  Plugin URI: https://translatepress.com/
5
  Description: Experience a better way of translating your WordPress site using a visual front-end translation editor, with full support for WooCommerce and site builders.
6
+ Version: 1.7.4
7
  Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
8
  Author URI: https://cozmoslabs.com/
9
  Text Domain: translatepress-multilingual
languages/translatepress-multilingual.catalog.php CHANGED
@@ -260,6 +260,29 @@
260
  <?php __(" TranslatePress Settings", "translatepress-multilingual"); ?>
261
  <?php __("Translator", "translatepress-multilingual"); ?>
262
  <?php __("Allow this user to translate the website.", "translatepress-multilingual"); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
263
  <?php __("Disable dynamic translation", "translatepress-multilingual"); ?>
264
  <?php __("It disables detection of strings displayed dynamically using JavaScript. <br/>Strings loaded via a server side AJAX call will still be translated.", "translatepress-multilingual"); ?>
265
  <?php __("Exclude translated links from sitemap", "translatepress-multilingual"); ?>
260
  <?php __(" TranslatePress Settings", "translatepress-multilingual"); ?>
261
  <?php __("Translator", "translatepress-multilingual"); ?>
262
  <?php __("Allow this user to translate the website.", "translatepress-multilingual"); ?>
263
+ <?php __("URL Slugs Translation", "translatepress-multilingual"); ?>
264
+ <?php __("Taxonomy Slugs", "translatepress-multilingual"); ?>
265
+ <?php __("Search Taxonomy Slugs", "translatepress-multilingual"); ?>
266
+ <?php __("Taxonomy Slug", "translatepress-multilingual"); ?>
267
+ <?php __("Translation", "translatepress-multilingual"); ?>
268
+ <?php __("Term Slugs", "translatepress-multilingual"); ?>
269
+ <?php __("Search Term Slugs", "translatepress-multilingual"); ?>
270
+ <?php __("Term Slug", "translatepress-multilingual"); ?>
271
+ <?php __("Taxonomy", "translatepress-multilingual"); ?>
272
+ <?php __("Filter by Taxonomy", "translatepress-multilingual"); ?>
273
+ <?php __("Post Slugs", "translatepress-multilingual"); ?>
274
+ <?php __("Search Post Slugs", "translatepress-multilingual"); ?>
275
+ <?php __("Post ID", "translatepress-multilingual"); ?>
276
+ <?php __("Post Type", "translatepress-multilingual"); ?>
277
+ <?php __("Filter by Post Type", "translatepress-multilingual"); ?>
278
+ <?php __("Published", "translatepress-multilingual"); ?>
279
+ <?php __("Any Post Status", "translatepress-multilingual"); ?>
280
+ <?php __("Post Type Base Slugs", "translatepress-multilingual"); ?>
281
+ <?php __("Post Type Base Slug", "translatepress-multilingual"); ?>
282
+ <?php __("Search Post Type Base Slugs", "translatepress-multilingual"); ?>
283
+ <?php __("WooCommerce Slugs", "translatepress-multilingual"); ?>
284
+ <?php __("WooCommerce Slug", "translatepress-multilingual"); ?>
285
+ <?php __("Search WooCommerce Slugs", "translatepress-multilingual"); ?>
286
  <?php __("Disable dynamic translation", "translatepress-multilingual"); ?>
287
  <?php __("It disables detection of strings displayed dynamically using JavaScript. <br/>Strings loaded via a server side AJAX call will still be translated.", "translatepress-multilingual"); ?>
288
  <?php __("Exclude translated links from sitemap", "translatepress-multilingual"); ?>
languages/translatepress-multilingual.pot CHANGED
@@ -113,7 +113,7 @@ msgstr ""
113
  msgid "Select the languages you wish to make your website available in."
114
  msgstr ""
115
 
116
- #: ../tp-add-on-seo-pack/includes/class-slug-manager.php:32
117
  msgid "Post Slug"
118
  msgstr ""
119
 
@@ -565,7 +565,7 @@ msgstr ""
565
  msgid "Click to Copy"
566
  msgstr ""
567
 
568
- #: ../translatepress/includes/class-translation-manager.php:157
569
  msgid "Slugs"
570
  msgstr ""
571
 
@@ -1057,6 +1057,98 @@ msgstr ""
1057
  msgid "Allow this user to translate the website."
1058
  msgstr ""
1059
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1060
  #: ../translatepress/includes/advanced-settings/disable-dynamic-translation.php:8
1061
  msgid "Disable dynamic translation"
1062
  msgstr ""
113
  msgid "Select the languages you wish to make your website available in."
114
  msgstr ""
115
 
116
+ #: ../tp-add-on-seo-pack/includes/class-slug-manager.php:37, ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:56
117
  msgid "Post Slug"
118
  msgstr ""
119
 
565
  msgid "Click to Copy"
566
  msgstr ""
567
 
568
+ #: ../translatepress/includes/class-translation-manager.php:157, ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:12
569
  msgid "Slugs"
570
  msgstr ""
571
 
1057
  msgid "Allow this user to translate the website."
1058
  msgstr ""
1059
 
1060
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:11
1061
+ msgid "URL Slugs Translation"
1062
+ msgstr ""
1063
+
1064
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:16
1065
+ msgid "Taxonomy Slugs"
1066
+ msgstr ""
1067
+
1068
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:17
1069
+ msgid "Search Taxonomy Slugs"
1070
+ msgstr ""
1071
+
1072
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:23
1073
+ msgid "Taxonomy Slug"
1074
+ msgstr ""
1075
+
1076
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:24, ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:37, ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:57, ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:77, ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:95
1077
+ msgid "Translation"
1078
+ msgstr ""
1079
+
1080
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:30
1081
+ msgid "Term Slugs"
1082
+ msgstr ""
1083
+
1084
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:31
1085
+ msgid "Search Term Slugs"
1086
+ msgstr ""
1087
+
1088
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:36
1089
+ msgid "Term Slug"
1090
+ msgstr ""
1091
+
1092
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:38
1093
+ msgid "Taxonomy"
1094
+ msgstr ""
1095
+
1096
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:43
1097
+ msgid "Filter by Taxonomy"
1098
+ msgstr ""
1099
+
1100
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:49
1101
+ msgid "Post Slugs"
1102
+ msgstr ""
1103
+
1104
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:50
1105
+ msgid "Search Post Slugs"
1106
+ msgstr ""
1107
+
1108
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:55
1109
+ msgid "Post ID"
1110
+ msgstr ""
1111
+
1112
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:58
1113
+ msgid "Post Type"
1114
+ msgstr ""
1115
+
1116
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:63
1117
+ msgid "Filter by Post Type"
1118
+ msgstr ""
1119
+
1120
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:67
1121
+ msgid "Published"
1122
+ msgstr ""
1123
+
1124
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:68
1125
+ msgid "Any Post Status"
1126
+ msgstr ""
1127
+
1128
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:74
1129
+ msgid "Post Type Base Slugs"
1130
+ msgstr ""
1131
+
1132
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:76
1133
+ msgid "Post Type Base Slug"
1134
+ msgstr ""
1135
+
1136
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:80
1137
+ msgid "Search Post Type Base Slugs"
1138
+ msgstr ""
1139
+
1140
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:92
1141
+ msgid "WooCommerce Slugs"
1142
+ msgstr ""
1143
+
1144
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:94
1145
+ msgid "WooCommerce Slug"
1146
+ msgstr ""
1147
+
1148
+ #: ../tp-add-on-seo-pack/includes/string-translation/class-string-translation-seo.php:98
1149
+ msgid "Search WooCommerce Slugs"
1150
+ msgstr ""
1151
+
1152
  #: ../translatepress/includes/advanced-settings/disable-dynamic-translation.php:8
1153
  msgid "Disable dynamic translation"
1154
  msgstr ""
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: translate, translation, multilingual, automatic translation, bilingual, fr
5
  Requires at least: 3.1.0
6
  Tested up to: 5.4.1
7
  Requires PHP: 5.6.20
8
- Stable tag: 1.7.3
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -138,6 +138,16 @@ For more information please check out our [documentation](https://translatepress
138
 
139
 
140
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
141
  = 1.7.3 =
142
  * Fixed an error when WooCommerce is active and you access a term link that does not exist
143
  * Added compatibility with SEO Pack version 1.2.4 or older
5
  Requires at least: 3.1.0
6
  Tested up to: 5.4.1
7
  Requires PHP: 5.6.20
8
+ Stable tag: 1.7.4
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
138
 
139
 
140
  == Changelog ==
141
+ = 1.7.4 =
142
+ * Fix fatal error with get_the_date filter due to other plugins calling incorrect params
143
+ * Fix issue with identical string in multiple places not showing all related strings
144
+ * Fixed Next and Previous buttons not working in the interface
145
+ * Fixed Yoast SEO canonical contain the correct language
146
+ * Fixed info icons too large before css loading
147
+ * Added compatibility with Superfly menu
148
+ * Add locale to user on user register and ignore a gettext string from WordPress and WooCommerce that added trpstr strings in the database
149
+ * Fix compatibility with Dflip plugin and Elementor Editor when a secondary language is the first one displayed
150
+
151
  = 1.7.3 =
152
  * Fixed an error when WooCommerce is active and you access a term link that does not exist
153
  * Added compatibility with SEO Pack version 1.2.4 or older